{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_brand_manischewitz/cartridge/client/default/js/app_brand_manischewitz.js","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/widgets/widgetsList.js","webpack:///./cartridges/app_flagship_tasting_room/cartridge/client/default/js/widgets/widgetsList.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/config/breakpoints.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/GeolocationConsent.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/ProductPositionMapping.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/ShipToStates.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/ShipToTitle.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/account/ProfileDetailsForm.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/account/VerificationCodeForm.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/aws/Cognito.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/aws/CustomStorage.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/cancelOrderModal.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/cart/MixMiniCart.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/cart/SecureCheckoutButton.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/cart/ShippingSelector.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/collapsibleItem.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/corporatePayment.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/corporatepaymentlink.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/experience/filters.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/HarmonyAjaxForm.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/HarmonyAjaxFormResponseContainer.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/HarmonyBasicInput.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/HarmonyInputPassword.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/HarmonyQuantityStepper.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/InputBirthdayDate.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/StatesInputRadio.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/ajax/ChangePasswordForm.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/ajax/HarmonyEmailSubscribe.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/ajax/HarmonyLoginForm.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/ajax/HarmonyPasswordResetForm.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/forms/ajax/RegisterForm.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/BrowsingOnlyModal.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/CookieDismissBlock.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/EinsteinCarousel.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/ExtendedCarouselSwiper.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyAccordionItem.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyBackToTop.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyButton.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyCarousel.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyConsentTracking.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyEmitBusEvent.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyFocusHighlighter.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyGlobalAlerts.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyHamburgerMenuItem.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyHeader.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyMenuPanel.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyModal.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HarmonyStickyHeader.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/HeaderSideBar.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/Loader.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/Overlay.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/ShipToSideBar.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/SideBar.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/VideoPlayer.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/global/ViewMore.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/globalFindNearMe.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/product/QuickAddToCart.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/product/ShipToError.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/reserveBar/ReserveBarCart.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/reserveBar/ReserveBarMgr.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/reserveBar/ReserveBarProduct.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/reserveBar/ReserveBarSearch.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/search/HarmonySearchBox.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/sfccStoreLocator.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/toolbox/domUtils.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/toolbox/format.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/toolbox/shipToUtils.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/updateSocialLoginURL.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/widgetsList.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/wishlist/HarmonyAddToWishlistMixin.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/Widget.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/_polyfills/getAttributeNames.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/_polyfills/index.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/AjaxForm.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/AjaxFormResponseContainer.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/BasicForm.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/BasicInput.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/Combobox.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/Form.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputCheckbox.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputEmail.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputHidden.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputNumber.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputPassword.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputRadio.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputSelect.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputTel.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputText.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputTextarea.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/MaskableInput.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/ajax/EmailSubscribe.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/ajax/LoginForm.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/AccessibilityFocusMixin.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/AccessibilityFocusTrapMixin.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Accordion.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/AccordionItem.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/BackToTop.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Button.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ButtonWithIcon.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Carousel.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/CarouselSwiper.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ConfirmDialog.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ConsentTracking.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Disclosure.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/DismissBlock.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/DropDown.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/EmitBusEvent.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/FocusHighlighter.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/GlobalAlerts.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/GlobalModal.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Label.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ListAccessibility.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Modal.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ProcessButton.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/SoftKeyboardToggleMixin.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/StickyHeader.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/SwipeToClose.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/TabPanel.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Tabs.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Token.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/CountrySelector.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/CountrySelectorMenuItem.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/HamburgerMenuItem.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/MegaMenu.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/MenuBarItem.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/MenuButton.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/MenuPanel.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/header/MenuPanelToggle.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductTile.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/SearchBox.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/SearchBoxToggle.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/EventBusWrapper.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/RefElement.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/ajax.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/cookie.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/cssLoadChecker.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/debounce.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/dialogMgr.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/eventBus.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/scroll.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/util.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/viewtype.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/viewTypeConfig.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/widgetsList.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/widgetsMgr.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/wishlist/AddToWishlistMixin.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/Auth.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/Errors.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/OAuth.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/oauthStorage.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/urlOpener.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/common/AuthErrorStrings.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/index.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/types/Auth.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/types/index.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/urlListener.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Amplify.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/ClientDevice/browser.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/ClientDevice/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Credentials.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Errors.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Hub.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/I18n/I18n.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/I18n/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/JS.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Logger/ConsoleLogger.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Logger/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/OAuthHelper/FacebookOAuth.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/OAuthHelper/GoogleOAuth.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/OAuthHelper/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Parser.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Platform/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Platform/version.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/RNComponents/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/ServiceWorker/ServiceWorker.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/ServiceWorker/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Signer.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/StorageHelper/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/UniversalStorage/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Util/DateUtils.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Util/Mutex.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Util/Reachability.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Util/Retry.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Util/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/constants.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/index.js","webpack:///./node_modules/@aws-crypto/ie11-detection/build/MsWindow.js","webpack:///./node_modules/@aws-crypto/ie11-detection/build/index.js","webpack:///./node_modules/@aws-crypto/sha256-browser/build/constants.js","webpack:///./node_modules/@aws-crypto/sha256-browser/build/crossPlatformSha256.js","webpack:///./node_modules/@aws-crypto/sha256-browser/build/ie11Sha256.js","webpack:///./node_modules/@aws-crypto/sha256-browser/build/index.js","webpack:///./node_modules/@aws-crypto/sha256-browser/build/isEmptyData.js","webpack:///./node_modules/@aws-crypto/sha256-browser/build/webCryptoSha256.js","webpack:///./node_modules/@aws-crypto/sha256-js/build/RawSha256.js","webpack:///./node_modules/@aws-crypto/sha256-js/build/constants.js","webpack:///./node_modules/@aws-crypto/sha256-js/build/index.js","webpack:///./node_modules/@aws-crypto/sha256-js/build/jsSha256.js","webpack:///./node_modules/@aws-crypto/supports-web-crypto/build/index.js","webpack:///./node_modules/@aws-crypto/supports-web-crypto/build/supportsWebCrypto.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/CognitoIdentity.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/CognitoIdentityClient.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/CreateIdentityPoolCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/DeleteIdentitiesCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/DeleteIdentityPoolCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/DescribeIdentityCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/DescribeIdentityPoolCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/GetCredentialsForIdentityCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/GetIdCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/GetIdentityPoolRolesCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/GetOpenIdTokenCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/GetOpenIdTokenForDeveloperIdentityCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/ListIdentitiesCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/ListIdentityPoolsCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/ListTagsForResourceCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/LookupDeveloperIdentityCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/MergeDeveloperIdentitiesCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/SetIdentityPoolRolesCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/TagResourceCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/UnlinkDeveloperIdentityCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/UnlinkIdentityCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/UntagResourceCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/commands/UpdateIdentityPoolCommand.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/endpoints.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/index.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/models/index.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/protocols/Aws_json1_1.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/runtimeConfig.browser.js","webpack:///./node_modules/@aws-sdk/client-cognito-identity/dist/es/runtimeConfig.shared.js","webpack:///./node_modules/@aws-sdk/config-resolver/dist/cjs/EndpointsConfig.js","webpack:///./node_modules/@aws-sdk/config-resolver/dist/cjs/RegionConfig.js","webpack:///./node_modules/@aws-sdk/config-resolver/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/CognitoProviderParameters.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/InMemoryStorage.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/IndexedDbStorage.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/Logins.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/Storage.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/fromCognitoIdentity.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/fromCognitoIdentityPool.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/localStorage.js","webpack:///./node_modules/@aws-sdk/credential-provider-cognito-identity/dist/cjs/resolveLogins.js","webpack:///./node_modules/@aws-sdk/fetch-http-handler/dist/cjs/fetch-http-handler.js","webpack:///./node_modules/@aws-sdk/fetch-http-handler/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/fetch-http-handler/dist/cjs/request-timeout.js","webpack:///./node_modules/@aws-sdk/fetch-http-handler/dist/cjs/stream-collector.js","webpack:///./node_modules/@aws-sdk/invalid-dependency/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/is-array-buffer/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-content-length/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-host-header/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/configurations.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/constants.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/defaultRetryQuota.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/defaultStrategy.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/delayDecider.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/retryDecider.js","webpack:///./node_modules/@aws-sdk/middleware-retry/dist/cjs/retryMiddleware.js","webpack:///./node_modules/@aws-sdk/middleware-serde/dist/cjs/deserializerMiddleware.js","webpack:///./node_modules/@aws-sdk/middleware-serde/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-serde/dist/cjs/serdePlugin.js","webpack:///./node_modules/@aws-sdk/middleware-serde/dist/cjs/serializerMiddleware.js","webpack:///./node_modules/@aws-sdk/middleware-signing/dist/cjs/configurations.js","webpack:///./node_modules/@aws-sdk/middleware-signing/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-signing/dist/cjs/middleware.js","webpack:///./node_modules/@aws-sdk/middleware-stack/dist/cjs/MiddlewareStack.js","webpack:///./node_modules/@aws-sdk/middleware-stack/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-user-agent/dist/cjs/configurations.js","webpack:///./node_modules/@aws-sdk/middleware-user-agent/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/middleware-user-agent/dist/cjs/middleware.js","webpack:///./node_modules/@aws-sdk/property-provider/dist/cjs/ProviderError.js","webpack:///./node_modules/@aws-sdk/property-provider/dist/cjs/chain.js","webpack:///./node_modules/@aws-sdk/property-provider/dist/cjs/fromStatic.js","webpack:///./node_modules/@aws-sdk/property-provider/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/property-provider/dist/cjs/memoize.js","webpack:///./node_modules/@aws-sdk/protocol-http/dist/cjs/httpHandler.js","webpack:///./node_modules/@aws-sdk/protocol-http/dist/cjs/httpRequest.js","webpack:///./node_modules/@aws-sdk/protocol-http/dist/cjs/httpResponse.js","webpack:///./node_modules/@aws-sdk/protocol-http/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/protocol-http/dist/cjs/isValidHostname.js","webpack:///./node_modules/@aws-sdk/querystring-builder/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/querystring-parser/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/service-error-classification/dist/cjs/constants.js","webpack:///./node_modules/@aws-sdk/service-error-classification/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/SignatureV4.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/cloneRequest.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/constants.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/credentialDerivation.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/getCanonicalHeaders.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/getCanonicalQuery.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/getPayloadHash.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/hasHeader.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/index.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/moveHeadersToQuery.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/prepareRequest.js","webpack:///./node_modules/@aws-sdk/signature-v4/dist/es/utilDate.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/client.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/command.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/constants.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/date-utils.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/document-type.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/exception.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/extended-encode-uri-component.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/get-array-if-single-item.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/get-value-from-text-node.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/isa.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/lazy-json.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/retryable-trait.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/sdk-error.js","webpack:///./node_modules/@aws-sdk/smithy-client/dist/cjs/split-every.js","webpack:///./node_modules/@aws-sdk/url-parser-browser/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/util-base64-browser/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/util-body-length-browser/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/util-hex-encoding/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/util-locate-window/dist/es/index.js","webpack:///./node_modules/@aws-sdk/util-uri-escape/dist/cjs/escape-uri-path.js","webpack:///./node_modules/@aws-sdk/util-uri-escape/dist/cjs/escape-uri.js","webpack:///./node_modules/@aws-sdk/util-uri-escape/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/util-user-agent-browser/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/util-utf8-browser/dist/cjs/index.js","webpack:///./node_modules/@aws-sdk/util-utf8-browser/dist/cjs/pureJs.js","webpack:///./node_modules/@aws-sdk/util-utf8-browser/dist/cjs/whatwgEncodingApi.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationDetails.js","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/BigInteger.js","webpack:///./node_modules/amazon-cognito-identity-js/es/Client.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoAccessToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoIdToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoJwtToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoRefreshToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUser.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserAttribute.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserPool.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserSession.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CookieStorage.js","webpack:///./node_modules/amazon-cognito-identity-js/es/DateHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/StorageHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/UserAgent.js","webpack:///./node_modules/amazon-cognito-identity-js/es/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/cookie/index.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/advance-string-index.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/core-js/internals/array-from.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/get-iterator-method.js","webpack:///./node_modules/core-js/internals/get-iterator.js","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/core-js/internals/native-promise-constructor.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/internals/native-url.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///./node_modules/core-js/internals/new-promise-capability.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/core-js/internals/promise-resolve.js","webpack:///./node_modules/core-js/internals/redefine-all.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///./node_modules/core-js/internals/regexp-exec.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/species-constructor.js","webpack:///./node_modules/core-js/internals/string-multibyte.js","webpack:///./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/modules/es.promise.finally.js","webpack:///./node_modules/core-js/modules/es.regexp.exec.js","webpack:///./node_modules/core-js/modules/es.string.iterator.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/core-js/modules/web.url-search-params.js","webpack:///./node_modules/core-js/modules/web.url.js","webpack:///./node_modules/crypto-js/core.js","webpack:///./node_modules/crypto-js/enc-base64.js","webpack:///./node_modules/crypto-js/hmac-sha256.js","webpack:///./node_modules/crypto-js/hmac.js","webpack:///./node_modules/crypto-js/lib-typedarrays.js","webpack:///./node_modules/crypto-js/sha256.js","webpack:///./node_modules/dom7/dom7.esm.js","webpack:///./node_modules/eventemitter3/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/isomorphic-unfetch/browser.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/querystring-es3/decode.js","webpack:///./node_modules/querystring-es3/encode.js","webpack:///./node_modules/querystring-es3/index.js","webpack:///./node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/swiper/esm/components/a11y/a11y.js","webpack:///./node_modules/swiper/esm/components/autoplay/autoplay.js","webpack:///./node_modules/swiper/esm/components/controller/controller.js","webpack:///./node_modules/swiper/esm/components/effect-coverflow/effect-coverflow.js","webpack:///./node_modules/swiper/esm/components/effect-cube/effect-cube.js","webpack:///./node_modules/swiper/esm/components/effect-fade/effect-fade.js","webpack:///./node_modules/swiper/esm/components/effect-flip/effect-flip.js","webpack:///./node_modules/swiper/esm/components/hash-navigation/hash-navigation.js","webpack:///./node_modules/swiper/esm/components/history/history.js","webpack:///./node_modules/swiper/esm/components/keyboard/keyboard.js","webpack:///./node_modules/swiper/esm/components/lazy/lazy.js","webpack:///./node_modules/swiper/esm/components/mousewheel/mousewheel.js","webpack:///./node_modules/swiper/esm/components/navigation/navigation.js","webpack:///./node_modules/swiper/esm/components/pagination/pagination.js","webpack:///./node_modules/swiper/esm/components/parallax/parallax.js","webpack:///./node_modules/swiper/esm/components/scrollbar/scrollbar.js","webpack:///./node_modules/swiper/esm/components/thumbs/thumbs.js","webpack:///./node_modules/swiper/esm/components/virtual/virtual.js","webpack:///./node_modules/swiper/esm/components/zoom/zoom.js","webpack:///./node_modules/swiper/esm/utils/dom.js","webpack:///./node_modules/swiper/esm/utils/get-browser.js","webpack:///./node_modules/swiper/esm/utils/get-device.js","webpack:///./node_modules/swiper/esm/utils/get-support.js","webpack:///./node_modules/swiper/esm/utils/utils.js","webpack:///./node_modules/swiper/swiper.esm.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/unfetch/dist/unfetch.mjs","webpack:///./node_modules/universal-cookie/es6/Cookies.js","webpack:///./node_modules/universal-cookie/es6/index.js","webpack:///./node_modules/universal-cookie/es6/utils.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/youtube-iframe/index.js","webpack:///./node_modules/zen-observable-ts/lib/bundle.esm.js","webpack:///./node_modules/zen-observable/index.js","webpack:///./node_modules/zen-observable/lib/Observable.js"],"names":["initWidgets","module","WidgetsMgr","run","hot","accept","restartWidgets","acceptCookie","getCookie","consentCookie","window","monetateQ","isGtmEnabled","isGtmInited","google_tag_manager","then","bind","document","addEventListener","addWidgetsList","md","lg","xl","Widget","GeolocationConsent","init","locateUser","navigator","geolocation","getCurrentPosition","sendLocation","handleStateChange","response","stateID","get","basketItems","eventBus","emit","allowed","geolocationUrl","ref","data","submitFormJson","String","res","ProductPositionMapping","positionKey","positionMap","currentPositions","Object","assign","AjaxForm","ShipToStates","headerType","on","handleBrowsingOnlyModal","setInputValue","getById","inputRadio","setValue","handleSubmit","promise","getFormUrl","getFormFields","basket","getValue","stateJSON","isStateEligible","monetateData","ship_eligible","ship_state","shipToState","push","name","value","handleModalOpen","handleChange","dataSet","getDataSet","isBrowsingOnly","browsingOnly","modalTitle","BrowsingOnlyModal","showModal","afterShowModal","handleModalCancel","getHeaderType","self","querySelector","dataset","EmitBusEvent","ShipToTitle","redraw","config","refUrl","getContentByUrl","content","refs","innerTitle","render","ProfileDetailsForm","isChildrenValid","submitting","prefs","submitButton","busy","errorMessageLabel","hide","fields","isSubscribed","dwfrm_profile_customer_newsletterSubscription","fieldsObject","firstName","dwfrm_profile_customer_firstname","lastName","dwfrm_profile_customer_lastname","phoneNumber","dwfrm_profile_customer_phone","currentPassword","dwfrm_profile_login_currentpassword","birthDate","dwfrm_profile_customer_birthday","username","dwfrm_profile_customer_email","newsletterSubscription","dwfrm_profile_customer_state","Promise","resolve","updateProfileDetailsSubmitted","attr","onSubmitted","catch","onError","updateProfileDetailsError","afterSubmission","resolveLoader","VerificationCodeForm","defineItems","state","initState","email","password","silent","clearError","input","showConfirmationCreateAccountState","show","showLoginState","setText","message","showRegistrationState","beforeSubmission","code","dwfrm_login_verificationCode","backToLogin","handleResend","accessibilityAlert","accessibilityAlerts","confirmationCodeSent","error","onSilentSignIn","setFocusToFirstItem","Cognito","configure","hooks","isAuth","constants","HOOK_SIGN_IN_THEN","HOOK_SIGN_IN_CATCH","HOOK_UPDATE_PROFILE_ERROR","Amplify","Auth","mandatorySignIn","storage","Storage","storageUrl","e","console","Hub","listen","isOauth","failureUrl","failureProvider","concat","sessionStorage","getItem","removeItem","payload","event","currentAuthenticatedUser","userData","location","href","attributes","redirectUrl","updateSessionStorage","formData","socialLogin","providerLabel","isCheckout","setCookie","isWCSignUp","socialNetwork","federatedSignIn","provider","setItem","isExternalAuth","bypassCache","logoutUrl","changePassword","user","oldPassword","newPassword","getError","signup","attributesObject","family_name","phone_number","formatPhoneNumber","birthdate","formatDate","signUp","signin","signIn","challengeName","completeNewPassword","forgotpassword","forgotPassword","confirmationCodeSubmit","forgotPasswordSubmit","userName","reSendConfirmationEmail","resendSignUp","confirmSignUp","updateProfileDetails","getElementById","getAttribute","updateUserProfile","updateUserAttributes","JSON","stringify","dataMemory","syncNewsletterSubscription","userNewsletterSubscription","svcNewsletterSubscription","warn","finally","type","errors","confirmException","SignInException","SignUpException","InternalError","UnconfirmedCustomerAccount","constructor","key","prototype","hasOwnProperty","call","undefined","clear","sync","syncPromise","rej","items","HarmonyModal","cancelOrderModal","closeModal","cancelOrder","cancelReason","$","val","url","CancelOrderDetails","addClass","removeClass","ajax","dataType","success","transactionId","transactionID","gtmData","orderHistoryAction","canceledTransactionId","isOrderDetailPage","parents","length","dataLayer","html","renderedTemplate","guest","reload","log","Minicart","MixMiniCart","reRenderMinicartWrapper","cart","isShownQtyTotal","parseInt","numItems","quantityTotal","maxItemsValue","maxItemsStr","isOpen","refMinicartContent","showMinicart","Button","SecureCheckoutButton","basketValidationUrl","context","cartModel","checkoutUrl","ShippingSelector","selectShippingMethod","methodID","actionUrl","require","ready","preventDefault","toggleClass","hasClass","includes","setTimeout","getElementsByClassName","onbeforeunload","parseQueryString","str","fromEntries","URLSearchParams","entries","handleCommunicationAction","action","params","actions","remove","AuthorizeNetIFrame","onReceiveCommunication","querystr","submit","secretKey","createSignature","hash","i","char","charCodeAt","toString","obfuscateAndEncodeAmount","amount","obfuscatedAmount","split","reverse","join","encodedAmount","btoa","signature","generateSecureLink","baseUrl","text","queryParams","secureLink","alert","PDFiltersMgr","initFilterGrid","replace","filterValue","iso","arrange","filter","scripts","getElementsByTagName","src","script","createElement","async","head","appendChild","elem","querySelectorAll","forEach","element","classes","className","parentNode","classList","add","Isotope","itemSelector","percentPosition","masonry","columnWidth","gutter","HarmonyAjaxForm","showProgressBar","formFeild","keys","prepareGtmData","writeErrorInBackendErrorLogs","formStatus","formId","id","formName","fieldEngagement","externalId","customerId","errorMessages","fieldKey","errorMessage","dummySubmit","siblings","children","innerText","errorContainer","valid","trim","AjaxFormResponseContainer","HarmonyAjaxFormResponseContainer","cancel","harmonyPasswordResetForm","hidden","superHandleSubmit","BasicInput","HarmonyBasicInput","focus","basicInput","parentForm","closest","field","widget","fieldName","blurAndValidate","blur","validate","validateOnInput","validated","InputPassword","HarmonyInputPassword","specialCharsList","allowedLettersRegExp","isSimpleChar","isNumber","isAllowedLetter","RegExp","test","updateCvvValidation","cardType","inputElement","minLength","maxLength","validationConfig","InputNumber","HarmonyQuantityStepper","disabledClass","shipToRestrictedStates","isHandledRestrictedStates","isDisabled","wineclub","ALERT_SHOW","updateStepsButtons","handleStateRestrictions","addToCartProductId","pid","productId","incomingValue","skipAddToCartDisable","processSelectedValue","updateQunatityInDataAttrURL","qtyUrl","getJSONByUrl","product","setAttribute","previousValue","step","qtyStep","qtyInCart","minValue","minOrderQuantity","maxValue","maxOrderQuantity","availability","available","hasError","showQuantityChangedAlert","isAddToCartClicked","setAddToCartClicked","isQuantityBlockDisabled","enable","informAttemptDecreaseMinVal","disable","attrName","removeParamFromURL","appendParamToURL","getSelectedOptions","toggleDisable","decrement","newVal","increment","showQuantityExceedAlert","isWcInculded","stock","exceededmaxvaluewithinventory","exceededmaxvaluewithcart","errorClass","quantitychanged","allowEmpty","intValue","prevVal","_this","addToCartSuccess","Number","isNaN","isQtyDisabled","setQtyDisabled","skipValidation","isClicked","getStateID","isStateRestricted","InputText","InputBirthdayDate","setLabel","isValid","validation","reg","required","match","parse","inputDate","Date","min","onInput","args","has","el","ageGateEntrance","birth_day","birth_month","birth_year","age","today_date","today_year","getFullYear","today_month","getMonth","today_day","getDate","onBirthdayChange","ele","selectedDate","target","month","date","year","cartError","regExp","userDOB","removeAttribute","DATA_FIELD","KEY_ENTER","KEY_SPACE","InputRadio","StatesInputRadio","handleLabelKeydown","_","keyCode","currentTarget","click","Array","from","elField","tmpEl","isChecked","label","labels","parentEle","checked","textContent","ChangePasswordForm","dwfrm_changePassword_currentpassword","dwfrm_changePassword_newpassword","onChangePasswordSubmitted","passwordChanged","EmailSubscribe","HarmonyEmailSubscribe","showAgreeToPrivacy","LoginForm","HarmonyLoginForm","scope","setEventEnquiryForm","initViewState","panel","cartUrl","disableCaseSensitive","dwfrm_login_email","toLowerCase","dwfrm_login_password","handleEventEnquirySubmit","underAgeStatus","alternateDate","scrollTo","style","display","customerData","customerOrderData","dwfrm_eventEnquiry_newsletterUpdate","successMessage","currentDate","dateInCalenderFormat","underAgeExplanation","signInSubmitted","loginMethod","commerceKey","sub","sfPersonAccountId","onSyncedSubscription","signInCatch","setFocusToCurrentItem","HarmonyPasswordResetForm","dwfrm_profile_resetPassword_email","forgotPasswordThen","focusFirst","handlePassword","dwfrm_profile_login_newpasswords_verificationCode","dwfrm_profile_login_newpasswords_newpassword","onConfirmSubmitted","container","item","onSignInSubmitted","login","RegisterForm","dwfrm_profile_login_password","signUpSubmitted","userSub","Modal","CookiesDismissBlock","classesEnabled","CookiesDismissBlockStatus","dismiss","Carousel","EinsteinCarousel","recommender","recommenderType","productLoadUrl","categoryId","secondaryProductId","alternativeGroupType","alternativeGroupId","primaryProductId","template","iterationDelay","maxIterationsCount","initCarousel","iteration","interval","setInterval","clearInterval","getEinsteinUtils","loadRecommendations","einsteinUtils","CQuotient","getCQUserId","getCQCookieId","getRecs","processRecommendationsTile","createCategoryAnchor","createProductAnchor","sku","alt_id","anchorsArray","clientId","userId","cookieId","ccver","anchors","recommendationsReceived","einsteinResponse","list","recommendedProducts","recs","components","map","recommendedProduct","model","els","insertAdjacentHTML","Swiper","use","Navigation","Pagination","CarouselSwiper","ExtendedCarouselSwiper","freeMode","clickablePagination","activate","cleanUpSwiper","carouselContent","options","getOptions","initControls","swiper","destroy","afterActivate","onDestroy","pagination","clickable","AccordionItem","HarmonyAccordionItem","classesOpen","itemInnerElement","initialHeight","offsetHeight","horizontalPanel","isLargeViewAndUp","height","defineAttributes","accordionItemBtn","accordionItemPanel","accordionItemPanelInner","openPanel","resetHeight","viewMore","togglePanel","elementClassList","filtersClassList","contains","isPanelOpen","viewMoreButton","reinitViewMore","closePanel","closeAccordianOnBlur","relatedTarget","shouldHidePanel","BackToTop","HarmonyBackToTop","pageSize","doInit","isMediumViewAndDown","removeScrollListener","attachScrollListener","toggleBackToTopButton","toggle","HarmonyButton","handleClick","isBusy","unbusy","HarmonyCarousel","enableAutoplay","autoplayDelay","pauseOnHover","loop","slidesQty","cacheCarouselElements","isAutoplayEnabled","addAutoPlayEventListeners","startAutoPlay","carouselConfiguration","slideBy","currentActiveSlideIndex","handleScroll","observeSlidesInTrack","disconnectSlidesObserver","onRefresh","elemCarouselTrack","slides","observer","IntersectionObserver","root","rootMargin","threshold","slide","observe","disconnect","position","carouselDirection","intersectionRect","rootBounds","firstElement","isIntersecting","nextElementSibling","indexOf","isLoopEnabled","carousel","stopAutoPlay","createPaginationElements","numberOfPages","Math","round","scrollWidth","clientWidth","fill","_el","page","pageIndex","scrollToSlide","index","scrollToPoint","offsetLeft","offsetTop","image","getImages","imagePosition","imageName","isPdpCarousel","isBlog","articleImageDescription","scrollToSlideAccessability","now","toggleAvailability","controls","autoplayInterval","scrollNext","updateCarouselMetric","roundingDelta","totalScrollWidth","scrollLeft","offsetWidth","isScrollStart","isScrollEnd","totalScrollHeight","scrollTop","scrollHeight","updateCarouselState","currentSlides","new_ele","cloneNode","append","maxSlideIndex","nextSlideIndex","carouselButton","carouselName","scrollBack","prevSlideIndex","onMouseDown","nodeName","handleContentClick","refElement","contentInfo","carouselItemPosition","hasNoScroll","ConsentTracking","HarmonyConsentTracking","enableCookieOptIn","isAcceptCookie","forceAcceptTracking","acceptConsent","acceptUrl","rejectConsent","rejectUrl","enterAgeGate","removeAttr","inputValue","reject","err","classesPanelOpen","loadContent","isVisible","HarmonyEmitBusEvent","emitBusEvent","busEventType","events","load","FocusHighlighter","HarmonyFocusHighlighter","moveTo","focusedElement","HTMLElement","highlighterNode","targetRect","getBoundingClientRect","targetTop","top","scrollY","targetLeft","left","scrollX","targetWidth","targetHeight","lastFocusedElement","lastFocusedElementCoords","highlighterStyle","width","headerWidget","harmonyMenuPanelWidget","isOpened","GlobalAlerts","HarmonyGlobalAlerts","showAlert","shown","hideAlert","pausableTimeout","PausableTimeout","timeout","HamburgerMenuItem","HarmonyHamburgerMenuItem","classesActive","backButton","openMenu","hasSubmenu","submenu","transitionEnd","back","itemLink","resetMenu","HarmonyHeader","classActive","activeElements","header","deactivate","fillWishlistIcon","activeClass","cleanWishlistIcon","MenuPanel","HarmonyMenuPanel","classesHeaderHamburgerOpen","classesMenuItemActive","classesHasDialog","backFocusElement","activeElement","addGlobalDialogClass","disableScroll","enableScroll","body","classesGlobalDialog","documentElement","removeProperty","behavior","StickyHeader","HarmonyStickyHeader","classesHeaderStuck","classesShow","headerBackground","isHeaderSticky","setHeaderHeight","currentHeaderHeight","customCSSPropertyName","setProperty","toggleStickyState","entry","intersectionRatio","SideBar","HarmonyHeaderSideBar","open","refName","close","PROMISE_STATUSES","PENDING","FULLFILLED","REJECTED","Loader","classesHidden","classesLoaderOpen","loaderDelayTimeout","loaderMinShowTimeout","loaderMaxShowTimeout","start","startTime","performance","loaderDelayTimerID","setLoaderDelayTimeout","setLoaderMinShowTimeout","loaderMaxShowTimerID","setLoaderMaxShowTimeout","clearTimeout","promiseStatus","status","obj","race","v","Overlay","classesOverlayOpen","closeOnClick","ESCAPE_CODE","ShipToSideBar","classesModalOpen","selectedState","isHeaderAlignmentLeft","isStickyHeader","isScrollTop","classesBodyOpen","accessabilityOpen","escHandler","ev","pop","outSideClickListener","clickOutside","firstTrapRef","lastTrapRef","addFocusTraps","displayModal","AccessibilityFocusTrapMixin","arg","refTrapsContainer","clearFocusTimer","focusFirstElement","focusTimeout","cleanUpListeners","VideoPlayer","videoId","autoplay","videoPlayerContainer","YouTubeIframe","YT","player","Player","playerVars","enablejsapi","fs","mute","disablekb","playlist","rel","ViewMore","classCollapsed","classHiddenButton","showMore","visibleItems","btn","nextVisibleItem","horizontalfilter","API_BASE_URL","updateFlavorDropdown","wines","flavorDropdown","empty","wine","option","firstOption","find","prop","updateAccountGroups","accounts","inStoresAccount","account","diningOutAccount","updateWTBSection","wineFinderId","apiUrl","handleBrandDropdown","brandDropdown","setupBrandDropdownListener","selectedBrand","newWineFinderId","observeDOMForBrandDropdown","MutationObserver","childList","subtree","initializeWTBSection","QuickAddToCart","showMinicartOnProductAdd","autoCloseMinicart","autoCloseTimeout","classHidden","isRestricted","disabledButtons","disabledBtn","postAddProduct","analytics","quantity","getQtyValue","addedtocart","showAlertMessage","isCSCAgent","updateAvailabilityComponent","isNotEnoughATS","errorData","getConstructor","eachChild","child","qtyValue","isOutOfStock","ProcessButton","outOfStockLabel","qtyInput","addToCart","button","addToCartBtnPrefs","wineClubProdList","addToCartUrl","currentProductID","selectedQuantity","childProducts","getChildProducts","isbundle","textNetworkError","isError","triggerClick","toggleBusy","initiator","startProcess","stopProcess","changeAttribute","renderAddToCartText","isAvailable","isPreorder","handleRemovedProduct","changeValue","ShipToError","ReserveBarCart","handleCartClick","ReserveBarMgr","groupingIDS","autoCompleteResults","shoppingCart","liquid","selectedAddress","productContainers","domCart","domSearch","emptyCart","emptycart","initLiquid","initCart","Liquid","env","storedCart","localStorage","liquidCart","cartItems","giftOrder","preExistingCart","cartItmes","renderShoppingCart","savedAddress","search","formattedAddress","productList","fetchProducts","renderRetailers","handleUpdateCartQty","searchWidget","renderAutoCompleteResults","address","result","emptyCartMessage","searchInput","description","autoCompleteList","innerHTML","clearCart","productCartDiv","retailersContainer","placeDetail","placeId","ids","shipAddress","top100","grouping","productGrid","productContainer","sizeContainer","variants","sizeSelect","variant","size","allsizeButtons","allRetailers","retailer","availabilityLabels","selectedRetailers","sizeselect","selected","availabilityLabel","retailers","productDetails","shippingMethod","deliveryExpectation","price","images","handleRetailerClick","unavailable","qty","inCart","o","variantId","findIndex","currentCart","newCart","toggleReserveBarCart","cartContainer","counter","cartItemDiv","cartQuantitySelect","handleCartQtyChange","inStock","cartImage","thumbUrl","alt","cartItemWrap","cartItemTitle","productGrouping","cartItemVolume","volume","cartQtyContainer","cartItemPrice","cartItemFulfillment","retailerName","cartItemRemove","handleRemoveFromCart","checkoutButton","handleCheckout","subTotalWrap","subTotalItems","itemCount","subTotal","subtotal","updatedCart","subTotalPrice","address1","checkout","cartId","city","zipCode","domQty","cartDrawer","cartBg","initProduct","initDomCart","initDomSearch","listItem","handleAddressClick","selectedRetailer","selectedProductDetailsContainer","productDetailsContainer","productQuantityContainer","buttonWrap","productName","retailerDetails","selectWrap","quantityLabel","quantitySelect","handleProductQtyChange","parseFloat","toFixed","errorMessageElement","total","addToCartButton","updateCart","productUnavailable","ReserveBarProduct","ReserveBarSearch","handleSearch","SearchBox","HarmonySearchBox","classesSuggestionsActive","toggleClearButton","showInDefaultState","clearBtnElem","lastSearchedTerm","selectedIndex","resultsCount","getRealItemsCount","openListbox","afterSuggestionsUpdate","query","products","processResponse","suggestions","isAvailableSuggestions","toggleSpinner","listbox","scrollElementTo","showNoSuggestions","closeSearch","closeListbox","clearInput","defaultValue","showError","$field","errorList","errorItem","after","$zipCode","$radius","zipCodeValue","radiusValue","endpoint","fullURL","hasResults","stores","$resultsDiv","storesResultsHtml","FOCUSABLE_ELEMENTS","getFocusableElements","ctx","focusableElements","initialTabIndex","tabIndex","executeInlineScripts","tempScript","removeChild","dateString","toLocaleDateString","day","phone","unshift","STATE_ID_SELECTOR","HEADER_SELECTOR","refSelectedState","restrictedStates","viewType","getViewType","$header","SMALL","MEDIUM","$footerSocial","socialClasses","styleElement","cssText","each","$this","socialType","cls","fullUrl","createTextNode","pdp","clp","plp","wishlist","orderconfirmation","storeLocator","corporatepayment","corporatepaymentlink","contexts","ListAccessibility","CookieDismissBlock","shipToSideBar","HeaderSideBar","AccessibilityFocusMixin","HarmonyAddToWishlistMixin","asyncListsPromises","all","deps","HarmonyRefinementsPanel","HarmonyProductListingMgr","HarmonyRefinement","dep","default","listId","widgetsDefinition","HarmonyMiniCartDialog","HarmonyProductDetail","HarmonyAddToCartMixin","HarmonyVariationSwatch","HarmonyProductImages","ProductDescriptionItem","HarmonyAddToWishListMixin","ProductSet","NotifyMeForm","HarmonyProductTile","HarmonyCartMgr","HarmonyCouponForm","HarmonyTabs","HarmonyPaymentsList","InputCreditCardNumber","PaymentForm","AuthorizeNetPaymentMixin","AuthorizeNetPaymentForm","HarmonyAddressBookForm","HarmonyAddressList","HarmonyInputCreditCardNumber","RadioSelector","HarmonyAddressCheckoutForm","HarmonyCheckoutMgr","HarmonyShippingFrom","HarmonyPaymentAccordion","HarmonyBillingForm","HarmonyPaymentAccordionItemCREDITCARD","AuthorizeNetBillingForm","ShipCompliantCheckoutMgrMixin","ShipCompliantShippingFormMixin","InputFutureShippingDate","CouponForm","PromoCodeDisclosure","WishlistMgr","WishListItem","HarmonyWishlistItem","HarmonyWishlistMgr","ConfirmationCreateAccount","WhereToBuyForm","AddToWishlistMixin","masterPid","addToWishlistBtn","addedToWishList","addedToWithlist","textRemovedFromWishlist","activeClasses","showWishlistMessage","hideWishlistMessage","addToWishlist","addTWishlistBtnPrefs","addToWishlistUrl","handleSuccess","removeFromWishlist","removeFromWishlistUrl","handleRemoveSuccess","press","addToWishlistHideTexts","textAddedToWishlist","addedtowishlist","msg","unpress","removedfromwishlist","isEmpty","renderWishList","master","processWishlist","updateWishlistState","isAdded","templateProp","noop","saveTemplateForHotReload","renderTo","getFromRoute","nodeOrig","routeOrig","node","route","slice","childNodes","c","splice","getDelayedCallback","info","widgetsMgr","diff","addAttribute","Error","create","RefElement","disposables","parentHandler","hasAttr","passEvents","pair","methodName","emitEvent","isRefreshingWidget","classMethod","callIfExists","eventName","emitWithoutContext","_eventBus","EventBusWrapper","classesLoading","prefsName","prefsValue","cb","disposable","selector","passive","elements","Element","fn","apply","dispose","removeEventListener","isHidden","isShown","templateRefId","strToRender","Mustache","cachedTemplates","templateElement","lower","renderedStr","newHTMLDocument","implementation","createHTMLDocument","diffNode","applyDiff","DiffDOM","delayedAttrModification","dd","filterOuterDiff","t1","innerDone","postDiffApply","startsWith","delayedCallback","normalize","firstElementChild","getAttributeNames","smoothscroll","polyfill","BasicForm","setError","isArray","errorMsg","errorFallbackMessage","errorElement","scrollWindowTo","scrollToTop","hideProgressBar","scrollToError","refElem","onSuccessSubmit","_form","submitEmpty","emptyFormErrorMsg","SUBMITTING_TIMEOUT","formDefinitionUrl","getSubmitButtonName","submitButtonName","form","widgetValidation","compareFieldId","compareWith","targetWidget","compareOptions","saveSubmitButton","Event","skipSubmission","getName","setFormFields","formFields","silently","setFocus","fieldsValues","every","itemCmp","refID","updateFormData","formDefinition","formDataUpdated","defaultWineclubShipAdd","countryCode","defaultAddress","classesErrorState","classesValidState","classesDisabled","classesLocked","classesWrapperErrorState","classesWrapperValidState","initValue","disabled","elementToScroll","scrollIntoView","refField","checkRanges","update","rangesError","getRangesError","HTMLInputElement","setCustomValidity","valueLength","updateCustomValidityState","validity","getValidity","customError","patternMismatch","typeMismatch","security","rangeOverflow","rangeUnderflow","tooLong","tooShort","valueMissing","widgetToMatch","widgetToMatchOpts","isWineClubShippAddChecked","isDefaultAddresChecked","nonCompliantState","lock","locked","unlock","setMatchCmp","stateDropDown","nonCompliantStateArr","nonCompliantStateErrorMsg","selectedVal","isNonCompliantState","KEY_DOWN","KEY_UP","KEY_ESCAPE","KEY_RETURN","KEY_TAB","ACTIVE_DESCENDANT","Combobox","isListboxOpen","minChars","maxChars","updatingDelay","closeFromOutside","closeOnTab","classesFocusedItem","classesActiveListBox","handleInput","inputLength","updateListbox","markHover","hasHoverWithin","unMarkHover","handleFocus","handleBlur","handleKeydown","preventEventActions","setSelectToNextItem","selectItem","getItemByIndex","setSelectToPreviousItem","activateItem","stopPropagation","selectedItem","currentSelected","deselectItem","afterItemSelected","activeItem","getSuggestions","resultsTotal","toggleOverlay","bodyClickListener","afterCloseListbox","isOverlayVisible","Form","ariaChecked","InputCheckbox","check","uncheck","updateAriaChecked","InputEmail","InputHidden","maxLengthAttr","handleKeyDown","incomingEvent","which","floatValue","isSuperValid","range","upperCaseAmount","lowerCaseAmount","numbersAmount","specialCharsAmount","valChars","checkLowerCaseAmount","checkUpperCaseAmount","checkNumberAmount","checkSpecialCharsAmount","specialCharsLetters","numberLetters","lowerCaseLetters","upperCaseLetters","toUpperCase","showMaskButton","toggleMask","inputType","showButton","showText","hideText","onPasswordInput","entered","reduce","getDataValue","elInner","getChecked","currentEl","tmpField","InputSelect","hasAttribute","firstDefault","onChange","dontPrevent","selectedOption","selectedOptions","getText","selectedNode","values","stopImmediatePropagation","InputTel","onMobileInput","maskLenght","mask","InputTextarea","currentInputValue","inputTextLength","isSafari","safari","currentInput","replaceAll","lineLength","newLine","isTextValid","notAllowedCharacters","MaskableInput","getFieldAndMask","inputMask","InputMask","onKeypress","onPaste","signupEmail","formContent","successBlock","agreeToPrivacy","accessibilityAnnouncementMsg","onEmailInput","fieldErrors","formField","inputEmail","passwordReset","ajaxFormResponseContainer","types","htmlEl","isDOMElementFocusable","getFocusableInputElements","containerRefName","focusFirstInput","focusableInputElements","focusElement","elementRefName","domNode","refFirstFocusElement","refLastFocusElement","focusLoop","handleFocusTrapLast","hasLastElement","focusLastElement","handleFocusTrapFirst","refId","focusFirstDescendant","focusAttempt","focusLastDescendant","trapsContainer","prepend","freeze","END","HOME","UP","DOWN","Accordion","allowToggle","allowMultiple","activePanel","openFirst","isToggleAllowed","isMultipleSections","firstItem","methodId","closeItems","accordionItem","setFocusToLastItem","setFocusToPreviousItem","setFocusToNextItem","RETURN","SPACE","ARIA_EXPANDED","ARIA_HIDDEN","ARIA_DISABLED","expanded","animateToggle","clearAttributes","cleanPanelHeight","accordionItemBtnID","accordionItemPanelID","togglePanelHeight","inner","panelElement","innerElement","updateState","Boolean","scrollDisposable","debounce","isSmallView","scrolled","windowHeight","innerHeight","backToTop","classesError","preventAction","toggleActive","select","unselect","setTabindex","unsetTabindex","ButtonWithIcon","DEFAULT_DIRECTION","elemPrevButton","elemNextButton","pagerCurrentClass","direction","small","medium","large","extraLarge","zoomClass","initPagination","setActivePagination","defineCarouselDirection","cssLoadChecker","handleScrollToFocusedItem","currentPage","scrollingTimeoutValue","grabbingTimeoutValue","deltaPrevPageSensitivity","deltaNextPageSensitivity","onScroll","onViewtypeChange","dimension","getCarouselDimension","currentElement","clientHeight","paginationRefEl","handlePaginationClick","scrollToPage","currentPageIndex","getCurrentPageIndex","currentPageNode","carouselTrackElem","currentPosition","pageDimension","imagesContainer","scrollToNextPage","scrollToPrevPage","onPageClick","delta","markCurrentPage","dataPage","isCallInNextFrameRequested","requestAnimationFrame","updateDuringScroll","onScrollEnd","scrollingTimeout","carouselElem","getCurrentCoordinate","currentCoordinate","MouseEvent","clientX","clientY","TouchEvent","touches","pageX","pageY","track","parentElement","activeItemLeft","trackStart","trackEnd","scrollDirection","thumbnailsArrow","initialCoordinate","mouseMoveDisposable","onMouseMove","mouseLeaveDisposable","onMouseUp","grabbingRemoveTimeout","GRABBING_CLASS","carouselTrack","toggleZoomState","allViewPorts","LARGE","EXTRA_LARGE","forceInitOnUpdate","slideClass","slideActiveClass","wrapperClass","navDisabledClass","navHiddenClass","watchSlidesVisibility","spaceBetween","slidesPerView","slidesPerViewTablet","slidesPerViewMobile","activeOnViewType","activateIfViewPort","swiperModule","prevBtnEl","prevBtn","navigation","prevEl","nextBtnEl","nextBtn","nextEl","paginationEl","updateSlides","sliders","objectEquals","prevSlides","breakpoints","hiddenClass","ConfirmDialog","confirm","alternativeConfirm","contentUrl","assetContent","Disclosure","disclosureButton","disclosureContent","showOnInit","showOnRefresh","hideContent","showContent","toggleContent","DismissBlock","dismissBlockStatus","ariaExpanded","DropDown","classesOptionSelected","closeOnOutsideClick","outsideClickPreventDefault","toIgnoreDuplicateEvent","outSideListener","toggleDropDown","openByMouseOver","k","selectOption","optionInitial","classesInited","classesHurry","DELAY_TIMEOUT","keyboardModality","isHighlighterVisible","highlighter","handleResize","handleKeyup","enableHighlighter","x","y","disableHighlighter","isValidTarget","isTextInput","detectHurryNavigation","rechekTimeout","rechekSecondTimeout","focusinHandlers","hideTimeOut","currentTime","isHurryNavigation","lastKeyTime","tagName","readOnly","globalAlerts","disposePausableTimeout","errorCode","pauseAlert","pause","resumeAlert","resume","GlobalModal","templateData","modalData","EmitBusEventClass","modalConfig","contentType","Label","listenEvents","updateTemplate","currentText","currentItem","focusableItems","lastItem","setFocusToItem","getItemIndex","newItem","classesTopDialog","refContainer","refDialog","classesExtra","clickOutSide","disableRendering","closeByEscape","renderedPromise","onBeforeShowModal","dialogMgr","openDialog","dialog","addListeners","moveBehind","moveToTop","removeGlobalDialogClass","closeDialog","onAfterCloseModal","clickOutsideHandler","kdbEvent","processingLabel","processingClass","SoftKeyboardToggleMixin","hideKeyboardOnOutsideTouch","hideKeyboardReset","hideKdb","touchStartDisposables","dataTau","stickyHeader","unobserve","SwipeToClose","menu","panelContainer","dragDirectionX","handleTouchStart","evt","touchMoveDisposable","handleTouchMove","touchEndDisposable","handleTouchEnd","touchCancelDisposable","handleTouchCancel","getTime","coordX","coordY","isMoving","startX","startY","currentX","currentY","touchStart","translateX","translateY","touchMove","timeTaken","touchEnd","disposableListeners","toggleTransition","menuNode","menuWidth","lastX","lastY","moveX","dragDirection","updateUi","transform","toggleMenu","isTransitionOn","calculateOpacity","percentageBeforeDif","abs","percentage","setNewOpacity","opacity","htmlElement","movedPath","velocity","TabPanel","isActive","LEFT","RIGHT","Tabs","activeFirst","autoActivation","useUrlAnchor","fulfillPanelNames","activatePanel","handleUrlChange","panelNames","tablist","tabsControlsScrollInit","tabsControlsScroll","tabsControlsHandleScroll","scrollStart","scrollEnd","tabsControlsScrollabilityCheck","scrollable","panelName","handleTabClick","clickedButton","saveToPushState","focusedTab","currentTabPanel","tabPanel","handleUrlAnchor","toggleActiveRefPanel","tabName","history","pushState","hashChangedOnly","title","panelToActivate","getLastFocusedTab","setFocusToTab","tab","isTargetTab","setFocusToFirstTab","firstTab","setFocusToLastTab","lastTab","setFocusToPreviousTab","currentFocusedTab","currentFocusedTabIndex","previousTab","setFocusToNextTab","nextTab","Token","setCurrentToken","tokenName","tokenValue","CountrySelector","urlLocale","urlSite","switchLocale","KeyboardEvent","changeLocale","localeConfig","queryString","localeID","CurrencyCode","currencyCode","siteID","isOtherSite","brandcode","brandcodeItem","CountrySelectorMenuItem","ESC","PAGEUP","PAGEDOWN","isSubmenuOpen","preventShowSubmenu","markSubmenuOpened","hasOpenedSubmenu","submenuHTML","itemLinkRefEl","submenuElement","htmlMarkup","parentMenuItem","clearSubmenuHTML","setSubmenuHTML","TAB","MegaMenu","menuItem","hasOpenedMenu","MenuBarItem","removeTabIndex","closeMenu","addTabIndex","handleEnterKey","ITEM_SWITCH_TIMEOUT","menuMoreLink","getMenuItems","isSubmenuInFocus","menuItems","hasFocusedSubmenu","focusFirstItem","focusLastItem","returnFocus","mouseEnter","timerCleanerLeave","timerCleanerEnter","mouseLeave","handleClose","MENU_ACTIVATION_DELAY","MenuButton","countrySelectorContainer","parentMenuItems","panelItems","currentLevel","classesBackdropActive","classesDialogOpen","classesDialogClosed","classesActiveLevel","panelItemsCount","panelCount","panelItemsPrefix","mainMenu","mainMenuFooter","panelTitle","itemSwitchTimeout","definePanelItems","checkAriaAttributes","applyMenuRole","clearState","isMenu","getPanelItems","currentPanelItem","firstPanelItem","lastPanelItem","isDesktopView","nextPanel","handlePanel","previousPanel","last","level","focusPanelItem","setFocusToPanelItem","updateItems","setFocusToPreviosItem","panelItem","focusToLastItem","closeOnBackdrop","MenuPanelToggle","classesOpenedNav","showPanel","onClick","isOpenDialog","ProductTile","onProductLinkClick","link","onModalShow","gtmInfo","showQuickView","wrapperClasses","ariaLabel","showSpinnerDelay","outlineSpace","classesClearEnabled","classesLoadingSuggestions","classesLoadingSuggestionsLong","setInputFocus","focusInput","q","handleError","goingByLink","longLoadingTimer","inputVal","isInputHasValue","listboxInner","openSearch","toggleSearch","TRIGGER_SHOW_IN_DEFAULT_STATE","SearchBoxToggle","childCmp","searchBox","widgetInstance","EventBus","addListener","removeListener","once","onceFn","HIDDEN_CLASS","toSnakeCase","s","attrValue","getData","HTMLSelectElement","HTMLTextAreaElement","validationMessage","tempEl","attributeName","some","propertyName","idx","initialState","classNames","offset","ret","docElem","elemBox","pageYOffset","clientTop","pageXOffset","clientLeft","SAME_ORIGIN","getFetch","fetch","handleUrlOrFormData","method","skipToken","valuedUrl","token","dataToSend","encodeURIComponent","appendParamsToUrl","handleResponse500","textResponse","csrfError","showErrorLayout","div","handleOkResponse","mode","cache","credentials","headers","Accept","redirect","referrer","ok","json","TypeError","errorJson","errorActionUrl","xhr","cookieName","cookieValue","expireInDays","isSecure","d","setTime","expires","toUTCString","cookie","ca","charAt","substring","CSS_SELECTOR","getLoadedState","css","media","cssRules","sheet","callbackFunction","delay","invokeLeading","invokeTrailing","executeTrailing","debounceInner","throttle","func","wait","leading","trailing","previous","later","remaining","arguments","DialogMgr","dialogsStack","topDialog","previousDialog","EventEmitter","stickyHeaderHeightMap","block","inline","countHeaderHeight","headerHeight","DEBOUNCE_INTERVAL","scrollHandlers","getScrollPosition","scrollingElement","lastScrollPosition","debounceScroll","handler","callback","table","format","param","transitionClass","eventFunction","time","timer","intervalID","done","durationTimeout","clearTimeoutRef","urlWithoutHash","separator","domain","paramUrl","newParams","acc","getUrlParams","qsTokens","qsToken","a","paramName","paramValue","objValue","regexpArray","exec","decodeURIComponent","errorLayout","stack","isEventTriggeredOutsideElement","currElement","makeExposableListener","listener","domEl","expose","Function","valueOf","p","stop","max","ceil","newRange","rbrace","memoize","hasher","memoizeInner","loadScriptHandler","source","globalObject","integrity","prior","insertBefore","onload","onabort","onerror","loadScript","path","defaults","parts","part","shift","smallID","mediumID","largeID","extraLargeID","breakMd","breakLg","breakXl","smallView","mediumView","largeView","exLargeView","queriesMap","currentWindowWidth","innerWidth","currentWindowHeight","getCurrentViewType","matchQuery","matchMedia","matches","onWindowChange","currentViewType","isTouchDevice","DocumentTouch","isTypeView","isMediumView","isMediumViewAndUp","isExtraLargeView","isLargeView","isLargeViewAndDown","modifiersMapping","sm","ALL_VIEW_TYPES","getActiveViewtypeName","m","matchViewport","newDevice","previousDevice","useWindowListeners","currentConfig","viewTypeConfig","windowResize","applyCurrentDeviceType","ContactUs","MinicartDialog","AddToCartMixin","ProductDetail","ProductImages","ColorSwatch","plpDeps","ProductListingMgr","RefinementsPanel","RefinementsPanelToggle","RefinementMenuItem","Refinement","NoSearchResultsForm","PaymentsList","AddressList","OrderHistoryMgr","AddressBookForm","PasswordResetForm","AddressForm","GoogleAutocompleteField","SessionExpiration","OrderProductSummary","CartMgr","CheckoutLoginForm","CheckoutMgr","AddressCheckoutForm","ShippingFrom","BillingForm","PaymentAccordion","PaymentAccordionItem","PaymentAccordionItemCREDITCARD","PaymentAccordionItemZEROPAYMENT","PaymentAccordionItemAPPLEPAY","PaymentAccordionItemPAYPALEXPRESS","__webpack_public_path__","assetsStaticURL","WIDGET_PROP_NAME","WIDGET_DISPOSABLE_VALUES","WIDGET_DOM_EVENT_PREFIX","WIDGET_DOM_GLOBAL_EVENT_PREFIX","DATA_ATTR_PREFIX","DATA_WIDGET","DATA_WIDGET_VIEWTYPE_RELATED","WIDGET_EVENT_PREFIX","DATA_INITIALIZED","DATA_REF","isViewtypeModifiers","modifiers","isWidget","getViewtypeRelatedWidgetName","activeViewtypeName","viewtypeWidgetConfigs","isViewtypeRelatedWidget","RootWidget","getWidgetConfig","activeViewtype","camelCaseKey","camelCase","isActiveViewtypeModifier","isViewtypeModifier","isConfigNotExist","jsonConfig","parsedConfig","rootWidget","widgetsInitMetric","initialized","WidgetMgr","widgets","widgetsLists","widgetsListsNameSpaceOrder","widgetsClassCache","hashRegistry","timeOfEvaluate","getting","initViewType","asyncLists","registerWidgetsList","timeOfRun","readyState","hasDomLoadedFirst","getAll","cachedClass","widgetsConfig","getWidgetClass","baseWidget","widgetClass","set","nameSpace","groupCollapsed","register","groupEnd","setHash","currentHash","getHash","currentWidget","widgetConstructor","widgetConfig","superWidgetConstructor","superBaseWidget","base","getChangedWidgets","emptyArray","newRegistry","ns","prev","nsList","newHash","wname","bname","changedWidgets","updateMutableComponents","reinitElementByWidgetsNamesList","widgetsNames","w","widgetsListNames","widgetName","detachElement","attachElements","attrs","reloadEvents","mod","parentWidget","findParentWidget","disposableValues","attachEventToElement","globalAttrs","reloadGtmEvents","attachGlobalEventToElement","oldValue","methodToCall","handleWidgetPropertyChange","refEl","newValue","disposableForParent","timeOfInit","mutations","mutation","handleMutations","characterData","headInitTime","timeInitWidgets","timeToRegisterWidgets","loadAndScriptingTime","waitToDomLoaded","domReadyTime","headToDomReady","ms","registerWidgetsTime","initWidgetsTime","b","addedNodes","removedNodes","removedNode","nodeType","ELEMENT_NODE","addedNode","rmsPrefix","rdashAlpha","string","_all","letter","attachEventToWidget","attachGlobalEventToWidget","prevent","eventHandler","diposable","eventToCall","initWidget","registeredWidgets","instance","linkCurrentToParent","prepareWidgetAttributes","forwareToParent","parrentWidgetMethodName","prevHandler","parent","initToolkit","widgetsToolkit","addToWishlistMsg","originalWishlistButtonMessage","showAlertIfProductInWishlist","updateProductView","labelAddToWishlistMsg","addButton","itemAlreadyExists","buttonAddToWishlistBtn"],"mappings":";QAAA;QACA;QACA;QACA;;;QAGA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;;;QAGA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;;;QAIA;QACA;QACA,yCAAyC,sgCAAsgC;QAC/iC;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;;;QAGA;;QAEA;QACA,iCAAiC;;QAEjC;QACA;QACA;QACA,KAAK;QACL;QACA;QACA;QACA,MAAM;QACN;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,wBAAwB,kCAAkC;QAC1D,MAAM;QACN;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA,0CAA0C,oBAAoB,WAAW;;QAEzE;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA;;;;;;;;;;;;;ACvMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAT,CAAqBC,MAA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mC,SAAS;AAC5C;AACA;AACA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACiJ;AACZ;AAC+E;AACxL;AACM;AACqB;AACD;AACyB;AAC/E,iBAAiB,+DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qDAAG,mBAAmB,6CAA6C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6DAAW;AACtC;AACA;AACA,QAAQ,qDAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB,wDAAM;AACzD;AACA;AACA;AACA;AACA;AACA,oCAAoC,wEAAa;AACjD;AACA;AACA,0BAA0B,kEAAgB;AAC1C,0BAA0B,+DAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0EAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,cAAc,kEAAmB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,qCAAqC,oDAAK;AAC1C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,YAAY,4DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,8BAA8B;AAC/D;AACA,iCAAiC,4CAA4C;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,eAAe;AAC9B;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,OAAO;AACtB;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qEAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA,8BAA8B,gFAAqB;AACnD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B,gBAAgB;AAChB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,EAAE,EAAE;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,sBAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,YAAY;AAC3B,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG,2BAA2B;AAC3C,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;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,YAAY;AAC3B,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,KAAoB;AAC/D,0CAA0C,KAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,0DAAc;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,mEAAmE,0DAAc;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,GAAG,oBAAoB;AAC5D,iCAAiC;AACjC,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,YAAY;AAC3B,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA,+CAA+C;AAC/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,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,4CAA4C,yBAAyB;AACrE,wCAAwC,8CAA8C;AACtF;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA,+CAA+C;AAC/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,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,YAAY;AAC3B,eAAe,OAAO;AACtB;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,eAAe,YAAY;AAC3B,gBAAgB;AAChB;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,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,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qDAAG;AAC3C;AACA,qCAAqC;AACrC,oCAAoC,qDAAG;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qDAAG;AAC/C;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,gCAAgC;AACnG;AACA;AACA;AACA;AACA,gFAAgF,+EAAoB;AACpG;AACA;AACA;AACA,yEAAyE,qDAAqD;AAC9H;AACA,iDAAiD,GAAG,2BAA2B;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA,iBAAiB;AACjB,aAAa,EAAE,EAAE;AACjB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,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;AACA,iCAAiC;AACjC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mCAAmC,6CAA6C,EAAE;AAClF;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yDAAyD,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,wBAAwB,oDAAE;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,gCAAgC,uCAAuC,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA,wCAAwC,8CAA8C;AACtF;AACA;AACA;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA,wCAAwC,0DAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;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;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uEAAwB;AACtD,4BAA4B,6EAA8B;AAC1D,4BAA4B,6DAAc;AAC1C;AACA;AACA,sCAAsC,2EAA+B;AACrE;AACA,mCAAmC,uEAAwB;AAC3D;AACA;AACA,sCAAsC,uEAAwB;AAC9D;AACA;AACA;AACA,wCAAwC,kEAAmB;AAC3D;AACA;AACA,2CAA2C,kEAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA,mEAAmE,iGAAiG;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,WAAW;AAC5E,6CAA6C,oDAAE;AAC/C,4CAA4C,iDAAK;AACjD;AACA,mDAAmD,yBAAyB,EAAE;AAC9E;AACA;AACA;AACA,yBAAyB;AACzB,6CAA6C,iDAAK;AAClD;AACA;AACA,mDAAmD,yBAAyB,EAAE;AAC9E;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,6EAAkB;AACxD,yCAAyC,yEAAc,EAAE,mBAAmB;AAC5E,8CAA8C,8EAAmB;AACjE;AACA,6BAA6B;AAC7B,6CAA6C,6EAAkB;AAC/D;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sEAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAc;AACrC;AACA;AACA,eAAe,0DAAc;AAC7B;AACA;AACA,kCAAkC,iDAAS;AAC3C;AACA;AACA;AACA,kCAAkC,uDAAe;AACjD;AACA;AACA,CAAC;AACoB;AACd;AACP,yDAAO;AACP,gC;;;;;;;;;;;;ACp3DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AAC2D;AACC;AAC7D,iBAAiB,+DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AACpB;AACP;AACA,iBAAiB,yEAAgB;AACjC;AACA,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC;AACA,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC;AACA,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,iBAAiB,yEAAgB;AACjC,KAAK;AACL;AACA,kC;;;;;;;;;;;;ACtGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,aAAa,6BAA6B,0BAA0B,aAAa,EAAE,qBAAqB;AACxG,gBAAgB,qDAAqD,oEAAoE,aAAa,EAAE;AACxJ,sBAAsB,sBAAsB,qBAAqB,GAAG;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,kCAAkC,SAAS;AAC3C,kCAAkC,WAAW,UAAU;AACvD,yCAAyC,cAAc;AACvD;AACA,6GAA6G,OAAO,UAAU;AAC9H,gFAAgF,iBAAiB,OAAO;AACxG,wDAAwD,gBAAgB,QAAQ,OAAO;AACvF,8CAA8C,gBAAgB,gBAAgB,OAAO;AACrF;AACA,iCAAiC;AACjC;AACA;AACA,SAAS,YAAY,aAAa,OAAO,EAAE,UAAU,WAAW;AAChE,mCAAmC,SAAS;AAC5C;AACA;AACA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AAC4B;AACY;AACO;AACuC;AACrB;AAC3B;AACI;AAC1C;AACA;AACA;AACA;AACA;AACA,IAAI,qDAAG,mBAAmB,6CAA6C;AACvE;AACA,iBAAiB,+DAAM;AACvB;AACA;AACA;AACA,8CAA8C,oDAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,kCAAkC,EAAE;AAC5G;AACA;AACA,sCAAsC,uBAAuB;AAC7D,kCAAkC,YAAY,2EAA+B,SAAS;AACtF;AACA;AACA;AACA;AACA,QAAQ,sDAAqB;AAC7B;AACA,QAAQ,qDAAoB;AAC5B;AACA;AACA;AACA,4DAA4D,iJAAiJ,8BAA8B,iCAAiC,KAAK,gCAAgC,+CAA+C,KAAK;AACrW;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iDAAK;AACrC;AACA,sDAAsD,4BAA4B,EAAE;AACpF;AACA;AACA;AACA,wDAAwD,kBAAkB;AAC1E,yBAAyB,GAAG,kBAAkB;AAC9C;AACA;AACA;AACA;AACA,wDAAwD;AACxD,oCAAoC,uEAAmB;AACvD;AACA;AACA,uCAAuC,uEAAmB;AAC1D;AACA;AACA,wCAAwC,qDAAoB;AAC5D,mDAAmD;AACnD;AACA,wDAAwD,oBAAoB,+BAA+B,KAAK;AAChH;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAK;AAC3B;AACA;AACA,8CAA8C,4BAA4B,EAAE;AAC5E;AACA;AACA;AACA,gDAAgD,kBAAkB;AAClE,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG,iDAAK;AAC1D;AACA;AACA,uDAAuD,yBAAyB,EAAE;AAClF;AACA;AACA;AACA,6BAA6B,IAAI,KAAK,iDAAK;AAC3C;AACA,uDAAuD,yBAAyB,EAAE;AAClF;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,6HAA6H,eAAe;AAC5I;AACA,gCAAgC;AAChC;AACA,6HAA6H,eAAe;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uEAAmB;AAC/C;AACA;AACA,8BAA8B,uEAAmB;AACjD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,+BAA+B,uDAAM;AACrC;AACA;AACA;AACA,sBAAsB,2DAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,UAAU;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACc,oEAAK,EAAC;AACrB,iC;;;;;;;;;;;;AClVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,wC;;;;;;;;;;;;AChCA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qC;;;;;;;;;;;;ACtBA;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C,4C;;;;;;;;;;;;ACbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACiC;AACoC;AACtC;AAC7D;AACA;AACA;AACe,yGAAI,EAAC;AACsG;AAC1H,iC;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0EAA0E;AACpE;AACP;AACA,4CAA4C,8BAA8B,EAAE;AAC5E;AACO;AACP;AACA,4CAA4C,8BAA8B,EAAE;AAC5E;AACO;AACP;AACA,4CAA4C,8BAA8B,EAAE;AAC5E;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AAClC;AACP;AACA;AACA,gC;;;;;;;;;;;;ACrDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACuB;AACvB,iC;;;;;;;;;;;;ACbA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACuC;AACvB;AAChB,QAAQ,oDAAE;AACV;AACA,kBAAkB,WAAW;AAC7B;AACA,aAAa,oDAAE;AACf;AACA,sBAAsB,EAAE,EAAE;AAC1B;AACA;AACA;AACA;AACA,CAAC,EAAE;AACH,uC;;;;;;;;;;;;AC1BA;AAAA;AAAA;AAAA;AAAA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACwD;AACxD,iBAAiB,qDAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AACuB;AACjB;AACP;AACA;AACA;AACe,sEAAO,EAAC;AACvB,mC;;;;;;;;;;;;AC1GA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;AACpD,iBAAiB,qDAAM;AAChB;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;AACO;AACP;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA,YAAY;AACZ;AACA,mC;;;;;;;;;;;;ACpFA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkD;AAClD;AACA;AACA;AACA;AACA,eAAe,2DAAU;AACzB;AACA;AACA,eAAe,0DAAS;AACxB;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACe,2EAAY,EAAC;AAC5B,iC;;;;;;;;;;;;AC7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,aAAa,6BAA6B,0BAA0B,aAAa,EAAE,qBAAqB;AACxG,gBAAgB,qDAAqD,oEAAoE,aAAa,EAAE;AACxJ,sBAAsB,sBAAsB,qBAAqB,GAAG;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,kCAAkC,SAAS;AAC3C,kCAAkC,WAAW,UAAU;AACvD,yCAAyC,cAAc;AACvD;AACA,6GAA6G,OAAO,UAAU;AAC9H,gFAAgF,iBAAiB,OAAO;AACxG,wDAAwD,gBAAgB,QAAQ,OAAO;AACvF,8CAA8C,gBAAgB,gBAAgB,OAAO;AACrF;AACA,iCAAiC;AACjC;AACA;AACA,SAAS,YAAY,aAAa,OAAO,EAAE,UAAU,WAAW;AAChE,mCAAmC,SAAS;AAC5C;AACA;AACmD;AACH;AACL;AACgB;AACT;AACD;AACb;AAC0E;AACtB;AACxF,iBAAiB,qDAAM;AACvB,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,oBAAoB,gDAAO;AAC3B;AACA,0CAA0C,wDAAW;AACrD,4CAA4C,0DAAa;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA,gCAAgC,4DAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,+DAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sEAAwB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sFAAqB;AACjE;AACA,6CAA6C,qEAAmB;AAChE,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,yGAAmB;AAC7D;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA,4FAA4F,6EAAY;AACxG;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,yGAAmB;AAChG;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE;AAC/B,sFAAsF;AACtF;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA,wGAAwG,6EAAY;AACpH;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,yGAAmB;AAC5G;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE;AAC3C,kGAAkG;AAClG;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,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,gCAAgC,sFAAqB;AACrD;AACA,6BAA6B,qEAAmB;AAChD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yGAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6GAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sFAAqB;AACrD;AACA,6BAA6B,qEAAmB;AAChD,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,wEAAwE,6EAAY;AACpF;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,yGAAmB;AAC5E;AACA;AACA,aAAa;AACb,SAAS,EAAE;AACX,sEAAsE;AACtE;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,mCAAmC;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,EAAE,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,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,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AACrB;AACP,gDAAO;AACP;AACA;AACA;AACe,0EAAW,EAAC;AAC3B,uC;;;;;;;;;;;;ACpiBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA,kC;;;;;;;;;;;;AClBA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA,gBAAgB,SAAI,IAAI,SAAI;AAC5B,4BAA4B,sBAAsB;AAClD;AACA;AACmD;AACnD,iBAAiB,qDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,wEAAwE,wBAAwB,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,aAAa,sBAAsB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACO;AACP;AACA;AACA;AACe,kEAAG,EAAC;AACnB,+B;;;;;;;;;;;;ACpMA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;AACpD,iBAAiB,qDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACe;AAChB,gC;;;;;;;;;;;;AC5HA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2C;AACS;AACf;AACrC,iBAAiB,qDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0CAAS;AAC7B;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0CAAS;AACjC;AACA;AACA;AACA;AACA,CAAC;AACe;AAChB,gDAAO;AACP;AACA;AACA;AACe,mEAAI,EAAC;AACpB,iC;;;;;;;;;;;;AC/GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,iCAAiC;AACtC,KAAK,iCAAiC;AACtC,KAAK,qCAAqC;AAC1C,KAAK,+BAA+B;AACpC,KAAK,+BAA+B;AACpC,KAAK,gCAAgC;AACrC,KAAK,iCAAiC;AACtC,KAAK,oCAAoC;AACzC,KAAK,qCAAqC;AAC1C,KAAK,kCAAkC;AACvC,KAAK,gCAAgC;AACrC,KAAK,gCAAgC;AACrC,KAAK,mCAAmC;AACxC,KAAK,mCAAmC;AACxC,KAAK,iCAAiC;AACtC,KAAK,kCAAkC;AACvC,KAAK,kCAAkC;AACvC,KAAK,iCAAiC;AACtC,KAAK,mCAAmC;AACxC,KAAK,gCAAgC;AACrC,KAAK,oCAAoC;AACzC,KAAK,iCAAiC;AACtC,KAAK,kCAAkC;AACvC,KAAK,kCAAkC;AACvC,KAAK,wCAAwC;AAC7C,KAAK,sCAAsC;AAC3C,KAAK,sCAAsC;AAC3C,KAAK,sCAAsC;AAC3C,KAAK,mDAAmD;AACxD,KAAK,wCAAwC;AAC7C,KAAK,wCAAwC;AAC7C,KAAK,0CAA0C;AAC/C,KAAK,sCAAsC;AAC3C,KAAK,+CAA+C;AACpD,KAAK,yCAAyC;AAC9C,KAAK,+CAA+C;AACpD,KAAK,gDAAgD;AACrD,KAAK,qCAAqC;AAC1C;AACO;AACP,yBAAyB,UAAU;AACnC;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACO;AACP,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACO;AACP,4BAA4B,qCAAqC;AACjE;AACA,oDAAoD,sCAAsC,EAAE;AAC5F;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,uCAAuC,qBAAqB;AAC5D,oCAAoC,kBAAkB;AACtD,qCAAqC,mBAAmB;AACxD;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACO;AACP,wCAAwC,yBAAyB;AACjE,0CAA0C,2BAA2B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACO;AACP,wCAAwC,yBAAyB;AACjE,0CAA0C,2BAA2B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;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,CAAC;AACa;AACd;AACA;AACA;AACe,iEAAE,EAAC;AAClB,8B;;;;;;;;;;;;;ACxOA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA,gBAAgB,SAAI,IAAI,SAAI;AAC5B,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/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;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB,yC;;;;;;;;;;;;AClMA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AAChC,iC;;;;;;;;;;;;ACbA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,aAAa,6BAA6B,0BAA0B,aAAa,EAAE,qBAAqB;AACxG,gBAAgB,qDAAqD,oEAAoE,aAAa,EAAE;AACxJ,sBAAsB,sBAAsB,qBAAqB,GAAG;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,kCAAkC,SAAS;AAC3C,kCAAkC,WAAW,UAAU;AACvD,yCAAyC,cAAc;AACvD;AACA,6GAA6G,OAAO,UAAU;AAC9H,gFAAgF,iBAAiB,OAAO;AACxG,wDAAwD,gBAAgB,QAAQ,OAAO;AACvF,8CAA8C,gBAAgB,gBAAgB,OAAO;AACrF;AACA,iCAAiC;AACjC;AACA;AACA,SAAS,YAAY,aAAa,OAAO,EAAE,UAAU,WAAW;AAChE,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;AACd;AACM;AAC5C,iBAAiB,qDAAM;AACvB;AACA,SAAS,yDAAa;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,yDAAa;AACzB;AACA;AACA;AACA;AACA,sCAAsC,uDAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uDAAiB;AACjD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa,GAAG,gCAAgC;AAChD,SAAS;AACT;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACe,4EAAa,EAAC;AAC7B,yC;;;;;;;;;;;;ACvIA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,aAAa,6BAA6B,0BAA0B,aAAa,EAAE,qBAAqB;AACxG,gBAAgB,qDAAqD,oEAAoE,aAAa,EAAE;AACxJ,sBAAsB,sBAAsB,qBAAqB,GAAG;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,kCAAkC,SAAS;AAC3C,kCAAkC,WAAW,UAAU;AACvD,yCAAyC,cAAc;AACvD;AACA,6GAA6G,OAAO,UAAU;AAC9H,gFAAgF,iBAAiB,OAAO;AACxG,wDAAwD,gBAAgB,QAAQ,OAAO;AACvF,8CAA8C,gBAAgB,gBAAgB,OAAO;AACrF;AACA,iCAAiC;AACjC;AACA;AACA,SAAS,YAAY,aAAa,OAAO,EAAE,UAAU,WAAW;AAChE,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;AACd;AACM;AAC5C,iBAAiB,qDAAM;AACvB;AACA,SAAS,yDAAa;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,yDAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0CAA0C;AACvE,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,uDAAiB;AACrD;AACA,qBAAqB;AACrB;AACA;AACA,4BAA4B,uDAAiB;AAC7C;AACA,aAAa;AACb;AACA;AACA,wBAAwB,uDAAiB;AACzC,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACe,0EAAW,EAAC;AAC3B,uC;;;;;;;;;;;;AChJA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgE;AACM;AAC/D,sBAAsB,wDAAgB;AACtC,wBAAwB,4DAAkB;AACjD,iC;;;;;;;;;;;;AChBA;AAAA;AAAA;AAAA;AAAmD;AACnD,iBAAiB,qDAAM;AAChB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,yCAAyC;AACzC,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA;AACe,qEAAM,EAAC;AACtB,kC;;;;;;;;;;;;AC3DA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACpC,uCAAuC,gDAAO;AACvC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACe,uEAAQ,EAAC;AACxB,iC;;;;;;;;;;;;ACzCA;AAAA;AAAA;AACO;AACP,mC;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsC;AACW;AAC1C;AACA;AACP,kDAAkD,kBAAkB,EAAE;AACtE;AACA;AACO,mBAAmB,yDAAa;AACvC,UAAU,4DAAa;AACvB;AACA,iC;;;;;;;;;;;;ACtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;AACd;AACD;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qDAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yDAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gDAAO,qBAAqB,gDAAO;AACnD,gBAAgB,gDAAO;AACvB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACe,iFAAkB,EAAC;AAClC,yC;;;;;;;;;;;;ACpMA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsE;AACtE,iC;;;;;;;;;;;;ACbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;AACA;AACA;AACmD;AACQ;AACR;AACf;AACD;AACnC,iBAAiB,qDAAM;AACvB;AACA;AACA;AACA,mBAAmB,4DAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA,mBAAmB,4DAAQ;AAC3B;AACA,WAAW,wEAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,wEAAK;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA,sCAAsC,qBAAqB;AAC3D;AACA;AACA,iBAAiB,+CAAS,yEAAyE,EAAE;AACrG,uBAAuB,iDAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAS;AAC3B;AACA,iCAAiC,EAAE;AACnC;AACA;AACA,iBAAiB,iDAAK;AACtB;AACA,6BAA6B;AAC7B,oDAAoD,MAAM,kDAAM,aAAa;AAC7E;AACA;AACA;AACA;AACA,sDAAsD,gJAAgJ;AACtM,eAAe;AACf,gBAAgB,mBAAmB,mCAAmC,KAAK,KAAK,8DAA8D;AAC9I;AACA;AACA,iBAAiB,kDAAM,qBAAqB,eAAe,4BAA4B,kCAAkC;AACzH;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,+BAA+B;AAC7E;AACA,SAAS;AACT,qBAAqB,kDAAM;AAC3B;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,SAAS;AACT;AACA;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA;AACe,qEAAM,EAAC;AACtB,kC;;;;;;;;;;;;AC9VA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACe,4EAAa,EAAC;AAC7B,iC;;;;;;;;;;;;ACtFA;AAAA;AAAA;AAAA;AAAuC;AACD;AACtC,gBAAgB,yDAAa;AAC7B;AACA;AACA,iCAAiC,cAAc;AAC/C,2BAA2B,wDAAO;AAClC;AACA;AACA,kBAAkB,wDAAO;AACzB,kBAAkB,wDAAO;AACzB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sCAAsC,qBAAqB,EAAE;AAC7D,qCAAqC,8BAA8B,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB,GAAG,SAAS,GAAG;AACpE,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,qBAAqB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2B;AAC5B,iC;;;;;;;;;;;;ACxFA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA,8BAA8B,2CAA2C;AACzE,sDAAsD,EAAE;AACxD,KAAK;AACL;AACA,2CAA2C,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;AACjF;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA,KAAK;AACL;AACA,qC;;;;;;;;;;;;ACrEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,8DAA8D,uBAAuB,EAAE;AACvF;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACc,oEAAK,EAAC;AACrB,iC;;;;;;;;;;;;ACrEA;AAAA;AAAA;AAAA,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACkD;AACP;AAC3C;AACA;AACA;AACA;AACA,YAAY,uEAAa;AACzB,mBAAmB,yDAAU,QAAQ,eAAe;AACpD;AACA,mBAAmB,yDAAU;AAC7B,2BAA2B,kCAAkC;AAC7D,4CAA4C,uBAAuB,eAAe,EAAE;AACpF,6CAA6C,uBAAuB,gBAAgB,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,+BAA+B,EAAE;AAClJ;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,+BAA+B,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA,qFAAqF,UAAU;AAC/F;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA,CAAC;AACc,oFAAqB,EAAC;AACrC,wC;;;;;;;;;;;;AC9DA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,iBAAiB,SAAI,IAAI,SAAI;AAC7B,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,aAAa,6BAA6B,0BAA0B,aAAa,EAAE,qBAAqB;AACxG,gBAAgB,qDAAqD,oEAAoE,aAAa,EAAE;AACxJ,sBAAsB,sBAAsB,qBAAqB,GAAG;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,kCAAkC,SAAS;AAC3C,kCAAkC,WAAW,UAAU;AACvD,yCAAyC,cAAc;AACvD;AACA,6GAA6G,OAAO,UAAU;AAC9H,gFAAgF,iBAAiB,OAAO;AACxG,wDAAwD,gBAAgB,QAAQ,OAAO;AACvF,8CAA8C,gBAAgB,gBAAgB,OAAO;AACrF;AACA,iCAAiC;AACjC;AACA;AACA,SAAS,YAAY,aAAa,OAAO,EAAE,UAAU,WAAW;AAChE,mCAAmC,SAAS;AAC5C;AACA;AACA,cAAc,SAAI,IAAI,SAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA,gBAAgB,SAAI,IAAI,SAAI;AAC5B,4BAA4B,sBAAsB;AAClD;AACA;AACkE;AAClE,iBAAiB,mEAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,aAAa;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mCAAmC,EAAE;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,gCAAgC,2BAA2B;AAC3D;AACA;AACA,iC;;;;;;;;;;;;AChJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AACmB;AACc;AAC7B;AAC5B,iC;;;;;;;;;;;;ACJA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP,qC;;;;;;;;;;;;ACxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACE;AACG;AACK;AACoB;AACzC;AACG;AACE;AACT;AACa;AACT;AACkC;AAC5B;AAC+B;AACd;AACe;AACT;AACK;AAC/B;AACrB;AACP,eAAe,kDAAQ;AACvB;AAC4B;AACL;AACJ;AACnB;AACA;AACA;AACe,+GAAO,EAAC;AACvB,iC;;;;;;;;;;;;ACzCa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B,EAAE;AACvE;AACA,sCAAsC,qCAAqC,EAAE;AAC7E;AACA;AACA;AACA;AACA,oC;;;;;;;;;;;;AC9Ba;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,+EAAY;AACzC,iC;;;;;;;;;;;;ACJa;AACb,8CAA8C,cAAc;AAC5D,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qC;;;;;;;;;;;;ACzCa;AACb,8CAA8C,cAAc;AAC5D,mBAAmB,mBAAO,CAAC,mFAAc;AACzC,wBAAwB,mBAAO,CAAC,6FAAmB;AACnD,kBAAkB,mBAAO,CAAC,kFAAuB;AACjD,4BAA4B,mBAAO,CAAC,sGAAiC;AACrE,uBAAuB,mBAAO,CAAC,4FAA4B;AAC3D,2BAA2B,mBAAO,CAAC,gGAA6B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,+C;;;;;;;;;;;;AC7Ba;AACb,8CAA8C,cAAc;AAC5D,oBAAoB,mBAAO,CAAC,qFAAe;AAC3C,kBAAkB,mBAAO,CAAC,iFAAa;AACvC,0BAA0B,mBAAO,CAAC,+FAA4B;AAC9D,2BAA2B,mBAAO,CAAC,gGAA6B;AAChE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,8CAA8C,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,0CAA0C,EAAE;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;;;;;;AC1Ea;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,qGAAuB;AACpD,mBAAmB,mBAAO,CAAC,mFAAc;AACzC;AACA,wBAAwB,mBAAO,CAAC,6FAAmB;AACnD;AACA,iC;;;;;;;;;;;;ACRa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uC;;;;;;;;;;;;ACTa;AACb,8CAA8C,cAAc;AAC5D,0BAA0B,mBAAO,CAAC,+FAA4B;AAC9D,oBAAoB,mBAAO,CAAC,qFAAe;AAC3C,kBAAkB,mBAAO,CAAC,iFAAa;AACvC,2BAA2B,mBAAO,CAAC,gGAA6B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,wCAAwC,EAAE;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6BAA6B,EAAE;AAC1E,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mCAAmC,8CAA8C,EAAE;AACnF;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2C;;;;;;;;;;;;AC1Da;AACb,8CAA8C,cAAc;AAC5D,kBAAkB,mBAAO,CAAC,4EAAa;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4BAA4B;AAC3E;AACA;AACA;AACA;AACA;AACA,2CAA2C,gCAAgC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,qC;;;;;;;;;;;;AC1Ha;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qC;;;;;;;;;;;;AChGa;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,0EAAY;AACzC,iC;;;;;;;;;;;;ACJa;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,kBAAkB,mBAAO,CAAC,4EAAa;AACvC,kBAAkB,mBAAO,CAAC,4EAAa;AACvC,0BAA0B,mBAAO,CAAC,+FAA4B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;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,oC;;;;;;;;;;;;AC7Fa;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,sGAAqB;AAClD,2CAA2C,mP;;;;;;;;;;;;ACJ9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;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;AACA,yDAAyD,iDAAiD,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,+BAA+B;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,2CAA2C,mqI;;;;;;;;;;;;ACnE3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAC8B;AACkB;AACJ;AACI;AACJ;AACQ;AACU;AACzC;AAC+B;AACZ;AACwC;AACxC;AACM;AACI;AACQ;AACE;AACR;AACnB;AACyB;AAClB;AACF;AACU;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uDAAS;AACb;AACA;AACA;AACA;AACA,0BAA0B,6FAAyB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yFAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6FAAyB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yFAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iGAA2B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2GAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mEAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iGAA2B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sFAAqB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8HAAyC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sFAAqB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4FAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gGAA0B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wGAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0GAA+B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,kGAA2B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gFAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wGAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sFAAqB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,oFAAoB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8FAAyB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,4EAAqB;AACI;AAC3B,2C;;;;;;;;;;;;ACrVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACmC;AACS;AACZ;AACoB;AACjB;AACZ;AAC0B;AAChC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uDAAS;AACb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A,CAAC,CAAC,8DAAQ;AACuB;AACjC,iD;;;;;;;;;;;;ACtCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAC+F;AACtE;AACI;AACF;AAC7D;AACA,IAAI,uDAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gFAAc;AAC/C,iCAAiC,oFAAgB;AACjD;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,uEAAuE;AACvE,SAAS;AACT;AACA;AACA,eAAe,uGAAwC;AACvD;AACA;AACA,eAAe,yGAA0C;AACzD;AACA;AACA,CAAC,CAAC,8DAAQ;AACsB;AAChC,gD;;;;;;;;;;;;ACtCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACyG;AAChF;AACI;AACF;AAC7D;AACA,IAAI,uDAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gFAAc;AAC/C,iCAAiC,oFAAgB;AACjD;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,uEAAuE;AACvE,SAAS;AACT;AACA;AACA,eAAe,4GAA6C;AAC5D;AACA;AACA,eAAe,8GAA+C;AAC9D;AACA;AACA,CAAC,CAAC,8DAAQ;AAC2B;AACrC,qD;;;;;;;;;;;;ACtCA;AAAA;AAAA;AACA,sCAAsC,OAAO;AAC7C,yCAAyC,OAAO;AAChD,0CAA0C,OAAO;AACjD,4CAA4C,OAAO;AACnD,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;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;AACA;AACA;AACA;AACA;AACA;AACA;AA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vG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,6EAA6E,QAAQ,uDAAS;AACrG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,+EAA+E,QAAQ,uDAAS;AACvG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,6EAA6E,QAAQ,uDAAS;AACrG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,iFAAiF,QAAQ,uDAAS;AACzG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,sFAAsF,QAAQ,uDAAS;AAC9G;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,kEAAkE,QAAQ,uDAAS;AAC1F;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,iFAAiF,QAAQ,uDAAS;AACzG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,2EAA2E,QAAQ,uDAAS;AACnG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,+FAA+F,QAAQ,uDAAS;AACvH;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,2EAA2E,QAAQ,uDAAS;AACnG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,8EAA8E,QAAQ,uDAAS;AACtG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,gFAAgF,QAAQ,uDAAS;AACxG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,oFAAoF,QAAQ,uDAAS;AAC5G;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,qFAAqF,QAAQ,uDAAS;AAC7G;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,iFAAiF,QAAQ,uDAAS;AACzG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,wEAAwE,QAAQ,uDAAS;AAChG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,oFAAoF,QAAQ,uDAAS;AAC5G;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,2EAA2E,QAAQ,uDAAS;AACnG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,0EAA0E,QAAQ,uDAAS;AAClG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,+EAA+E,QAAQ,uDAAS;AACvG;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACI,kFAAkF,QAAQ,uDAAS;AAC1G;AACA,WAAW,yDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sDAAQ,EAAE,iEAAiE;AACtG;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACH,uFAAuF,QAAQ,uDAAS;AACxG;AACA,WAAW,yDAAW;AACtB;AACA;AACA,sBAAsB,sDAAQ,GAAG;AACjC;AACA;AACA;AACA,+BAA+B,8CAAQ;AACvC;AACA;AACA;AACA;AACA;AACA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G,uCAAuC,iCAAiC,kCAAkC,sEAAsE;AAC/M;AACA;AACA,WAAW,sDAAQ,CAAC,sDAAQ,CAAC,sDAAQ,CAAC,sDAAQ,GAAG,iDAAiD,qDAAqD,qDAAqD,yDAAyD,wCAAwC,+BAA+B,4CAA4C,uCAAuC;AAC/Z;AACA;AACA,WAAW,sDAAQ,CAAC,sDAAQ,CAAC,sDAAQ,GAAG,sCAAsC,+BAA+B,oCAAoC,+DAA+D;AAChN;AACA,KAAK;AACL;AACA;AACA,WAAW,sDAAQ,CAAC,sDAAQ,GAAG,uCAAuC,iCAAiC;AACvG;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sEAAsE,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,cAAc,EAAE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,kEAAkE,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,2EAA2E,EAAE;AAC7H;AACA;AACA;AACA;AACA,iBAAiB,oDAAM;AACvB,gBAAgB,sDAAQ,CAAC,sDAAQ,GAAG,gBAAgB;AACpD,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA,iBAAiB,oDAAM;AACvB,gBAAgB,sDAAQ,CAAC,sDAAQ,GAAG,gBAAgB;AACpD,KAAK,IAAI;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,cAAc,EAAE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0DAA0D,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,cAAc,EAAE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oDAAM;AACvB,gBAAgB,sDAAQ,CAAC,sDAAQ,GAAG,gBAAgB;AACpD,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA,iBAAiB,oDAAM;AACvB,gBAAgB,sDAAQ,CAAC,sDAAQ,GAAG,gBAAgB;AACpD,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,cAAc,EAAE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oEAAoE,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AAC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A;AACA,CAAC;AACD;AACA,4C;;;;;;;;;;;;ACzEa;AACb,8CAA8C,cAAc;AAC5D,kC;;;;;;;;;;;;ACFa;AACb,8CAA8C,cAAc;AAC5D,mC;;;;;;;;;;;;ACFa;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,gCAAgC,mBAAO,CAAC,0GAAkC;AAC1E,0BAA0B,mBAAO,CAAC,+FAA4B;AAC9D,sBAAsB,mBAAO,CAAC,+GAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,SAAS;AACT,KAAK,EAAE;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+C;;;;;;;;;;;;AC1Da;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,gCAAgC,mBAAO,CAAC,0GAAkC;AAC1E,0BAA0B,mBAAO,CAAC,+FAA4B;AAC9D,4BAA4B,mBAAO,CAAC,2HAAuB;AAC3D,qBAAqB,mBAAO,CAAC,6GAAgB;AAC7C,sBAAsB,mBAAO,CAAC,+GAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;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;AACA;AACA;AACA;AACA,gGAAgG,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,SAAS;AACT,KAAK,EAAE;AACP;AACA,gDAAgD;AAChD;AACA;AACA,mFAAmF,EAAE;AACrF;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,mD;;;;;;;;;;;;ACpFa;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,uIAA6B;AAC1D,qBAAqB,mBAAO,CAAC,2HAAuB;AACpD,qBAAqB,mBAAO,CAAC,mIAA2B;AACxD,qBAAqB,mBAAO,CAAC,iGAAU;AACvC,qBAAqB,mBAAO,CAAC,mGAAW;AACxC,iC;;;;;;;;;;;;ACRa;AACb,8CAA8C,cAAc;AAC5D;AACA,yBAAyB,mBAAO,CAAC,qHAAoB;AACrD,wBAAwB,mBAAO,CAAC,mHAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wC;;;;;;;;;;;;AChBa;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,sBAAsB,EAAE;AACtF;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb,KAAK;AACL;AACA;AACA,yC;;;;;;;;;;;;AC1Ba;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,sBAAsB,mBAAO,CAAC,uFAAwB;AACtD,4BAA4B,mBAAO,CAAC,mGAA8B;AAClE,wBAAwB,mBAAO,CAAC,iGAAmB;AACnD;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,UAAU;AACrG;AACA;AACA;AACA;AACA,+BAA+B,QAAQ,gBAAgB;AACvD;AACA;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,2CAA2C,m2P;;;;;;;;;;;;AClG9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,uGAAsB;AACnD,qBAAqB,mBAAO,CAAC,mGAAoB;AACjD,2CAA2C,+T;;;;;;;;;;;;ACL9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA,2CAA2C,uoC;;;;;;;;;;;;AChB9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,4BAA4B,mBAAO,CAAC,mGAA8B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;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,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAA0C;AAChF,sCAAsC,6BAA6B;AACnE;AACA;AACA,KAAK;AACL;AACA,2CAA2C,muK;;;;;;;;;;;;AC7E9B;AACb,8CAA8C,cAAc;AAC5D;AACA,8CAA8C;AAC9C;AACA,EAAE;AACF,2CAA2C,mc;;;;;;;;;;;;ACN9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,muB;;;;;;;;;;;;ACR9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,sBAAsB,mBAAO,CAAC,uFAAwB;AACtD;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,0BAA0B,EAAE;AACzE;AACA;AACA;AACA,8EAA8E,4BAA4B;AAC1G;AACA;AACA;AACA,2EAA2E,UAAU,mBAAmB;AACxG,SAAS;AACT,KAAK,EAAE,GAAG;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACH,2CAA2C,2wH;;;;;;;;;;;;ACxC9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,sBAAsB,mBAAO,CAAC,uFAAwB;AACtD;AACA;AACA;AACA;AACA,mDAAmD,yBAAyB,yBAAyB;AACrG;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE,GAAG,GAAG;AACT;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACH,2CAA2C,mkI;;;;;;;;;;;;ACvC9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,wBAAwB,mBAAO,CAAC,+FAAmB;AACnD;AACA;AACA;AACA,+CAA+C,WAAW,2HAA2H;AACrL;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,2CAA2C,m6E;;;;;;;;;;;;AChB9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,ujE;;;;;;;;;;;;ACpC9B;AACb,8CAA8C,cAAc;AAC5D;AACA,kBAAkB,mBAAO,CAAC,mFAAa;AACvC;AACA;AACA;AACA,8CAA8C,kGAAkG;AAChJ,2CAA2C,sDAAsD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,2CAA2C,2gG;;;;;;;;;;;;AC5B9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,sBAAsB,mBAAO,CAAC,uFAAwB;AACtD,qCAAqC,mBAAO,CAAC,qHAAuC;AACpF,aAAa,mBAAO,CAAC,0CAAM;AAC3B,kBAAkB,mBAAO,CAAC,mFAAa;AACvC,0BAA0B,mBAAO,CAAC,mGAAqB;AACvD,qBAAqB,mBAAO,CAAC,yFAAgB;AAC7C,qBAAqB,mBAAO,CAAC,yFAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,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,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,SAAS,qCAAqC,EAAE;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,qCAAqC,EAAE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,4BAA4B,KAAK,EAAE,EAAwB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA,2CAA2C,2xT;;;;;;;;;;;;AC5H9B;AACb,8CAA8C,cAAc;AAC5D;AACA,kBAAkB,mBAAO,CAAC,mFAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,u3B;;;;;;;;;;;;ACV9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,+FAAmB;AAChD,qBAAqB,mBAAO,CAAC,+FAAmB;AAChD,qBAAqB,mBAAO,CAAC,6FAAkB;AAC/C,qBAAqB,mBAAO,CAAC,yFAAgB;AAC7C,qBAAqB,mBAAO,CAAC,yFAAgB;AAC7C,2CAA2C,+f;;;;;;;;;;;;ACR9B;AACb,8CAA8C,cAAc;AAC5D;AACA,qCAAqC,mBAAO,CAAC,qHAAuC;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,ujC;;;;;;;;;;;;ACV9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,8CAA8C,yBAAyB,yBAAyB,+DAA+D;AAC/J;AACA,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG;AACb;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACH,2CAA2C,+oE;;;;;;;;;;;;AClB9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,SAAS;AACT,KAAK,EAAE,GAAG;AACV;AACA;AACA,2CAA2C,muD;;;;;;;;;;;;ACzB9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,6GAA0B;AACvD,qBAAqB,mBAAO,CAAC,yGAAwB;AACrD,qBAAqB,mBAAO,CAAC,uFAAe;AAC5C,2CAA2C,2Y;;;;;;;;;;;;ACN9B;AACb,8CAA8C,cAAc;AAC5D;AACA,+BAA+B,mBAAO,CAAC,6GAA0B;AACjE,6BAA6B,mBAAO,CAAC,yGAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C,+mF;;;;;;;;;;;;ACxB9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,UAAU,mBAAmB;AAChH;AACA,SAAS;AACT,KAAK,EAAE,GAAG;AACV;AACA;AACA,2CAA2C,mjD;;;;;;;;;;;;ACnB9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,oFAAuB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,8DAA8D;AACvG;AACA;AACA,oEAAoE;AACpE;AACA,aAAa,EAAE,EAAE,EAAE,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,+CAA+C,WAAW;AAC1D,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA,2CAA2C,++M;;;;;;;;;;;;ACrD9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,+FAAkB;AAC/C,qBAAqB,mBAAO,CAAC,uFAAc;AAC3C,2CAA2C,mT;;;;;;;;;;;;ACL9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,sBAAsB,mBAAO,CAAC,uFAAwB;AACtD;AACA;AACA;AACA,yDAAyD,iDAAiD;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACH,2CAA2C,2sK;;;;;;;;;;;;AClE9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/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;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB,EAAE;AAC3D;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA,wDAAwD,WAAW,mDAAmD;AACtH,SAAS;AACT;AACA,sCAAsC,mBAAmB,EAAE;AAC3D;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA,uBAAuB,iCAAiC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,UAAU;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG,qBAAqB;AACxH;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,UAAU;AAC/F;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2lkC;;;;;;;;;;;;AC1V9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,+FAAmB;AAChD,2CAA2C,uP;;;;;;;;;;;;ACJ9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA,2CAA2C,u+B;;;;;;;;;;;;ACP9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,kGAAkB;AAC/C,qBAAqB,mBAAO,CAAC,0FAAc;AAC3C,2CAA2C,mT;;;;;;;;;;;;ACL9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,sBAAsB,mBAAO,CAAC,uFAAwB;AACtD;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,UAAU,mBAAmB;AACrF,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,KAAK;AACL,CAAC,EAAE;AACH,2CAA2C,+gH;;;;;;;;;;;;ACnC9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA;AACA,gDAAgD,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,2CAA2C,mzC;;;;;;;;;;;;ACxB9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,sBAAsB,mBAAO,CAAC,4FAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mGAAmG,qBAAqB;AACxH;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA,2CAA2C,2nE;;;;;;;;;;;;AC/C9B;AACb,8CAA8C,cAAc;AAC5D;AACA,6CAA6C,qBAAqB,qCAAqC,GAAG;AAC1G,2CAA2C,uhB;;;;;;;;;;;;ACJ9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,4EAAS;AACtC,qBAAqB,mBAAO,CAAC,sFAAc;AAC3C,qBAAqB,mBAAO,CAAC,gFAAW;AACxC,qBAAqB,mBAAO,CAAC,4FAAiB;AAC9C,2CAA2C,ma;;;;;;;;;;;;ACP9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA,wCAAwC;AACxC;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,EAAE;AACP;AACA,2CAA2C,+8I;;;;;;;;;;;;ACnC9B;AACb,8CAA8C,cAAc;AAC5D,2CAA2C,miB;;;;;;;;;;;;ACF9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;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,yEAAyE,UAAU,6BAA6B,iBAAiB;AACjI;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,mDAAmD,kBAAkB;AACrE,KAAK,IAAI;AACT;AACA,2CAA2C,uhK;;;;;;;;;;;;AC/C9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,2CAA2C,uzD;;;;;;;;;;;;ACnB9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,sFAAgB;AAC7C,qBAAqB,mBAAO,CAAC,oFAAe;AAC5C,qBAAqB,mBAAO,CAAC,oFAAe;AAC5C,qBAAqB,mBAAO,CAAC,4FAAmB;AAChD,2CAA2C,mb;;;;;;;;;;;;ACP9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA,oCAAoC,EAAE;AACtC;AACA;AACA;AACA,2CAA2C,mnB;;;;;;;;;;;;ACR9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,wBAAwB,mBAAO,CAAC,2FAA0B;AAC1D;AACA;AACA;AACA;AACA,kFAAkF,UAAU;AAC5F;AACA;AACA;AACA;AACA,oDAAoD,UAAU;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA,2CAA2C,2mE;;;;;;;;;;;;ACrC9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,UAAU;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA,2CAA2C,uwE;;;;;;;;;;;;ACvC9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2iF;;;;;;;;;;;;AC/C9B;AACb,8CAA8C,cAAc;AAC5D;AACA,kBAAkB,mBAAO,CAAC,+FAAa;AACvC,+CAA+C,uCAAuC;AACtF,6CAA6C,gEAAgE;AAC7G,8CAA8C,QAAQ,wJAAwJ;AAC9M;AACA;AACA;AACA;AACA;AACA,2CAA2C,mzD;;;;;;;;;;;;ACZ3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuD;AACJ;AAC2Q;AAC1P;AACR;AACJ;AACN;AACV;AACkB;AACR;AACb;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAsB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAsB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,eAAe,uDAAS;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA,6BAA6B,4CAAM;AACnC;AACA;AACA,wCAAwC,4DAAiB;AACzD;AACA;AACA,gCAAgC,yEAAW;AAC3C,kCAAkC,8EAAkB,CAAC,sEAAc;AACnE;AACA,0CAA0C,4DAAiB;AAC3D;AACA,sCAAsC,gEAAqB,IAAI,+DAAoB;AACnF,sCAAsC,iEAAsB;AAC5D,sCAAsC,+DAAoB;AAC1D,sCAAsC,8DAAmB;AACzD,2CAA2C,gFAAmB;AAC9D,sCAAsC,qEAA0B;AAChE;AACA,6BAA6B,gEAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAc;AAC3D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,uDAAS;AACxB,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,uDAAS;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA,6BAA6B,4CAAM;AACnC;AACA,gCAAgC,yEAAW;AAC3C,6CAA6C,sEAAc,EAAE,YAAY,iBAAiB;AAC1F;AACA;AACA;AACA;AACA,6BAA6B,gEAAK;AAClC;AACA;AACA;AACA;AACA,4BAA4B,qEAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,2BAA2B;AACxG;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,oCAAoC;AACpC,eAAe,uDAAS;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA,6BAA6B,4CAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAK;AAClC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,mCAAmC;AACnC,eAAe,uDAAS;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA,6BAA6B,4CAAM;AACnC,kCAAkC,sEAAc;AAChD;AACA,gCAAgC,yEAAW;AAC3C,wCAAwC,0DAAe;AACvD;AACA,4CAA4C,uDAAY;AACxD;AACA,6CAA6C,sEAAc;AAC3D;AACA;AACA,6BAA6B,4DAAS,CAAC,wDAAa;AACpD,4CAA4C,wDAAa;AACzD;AACA,2CAA2C,gFAAmB;AAC9D;AACA;AACA;AACA,wCAAwC,sDAAW;AACnD,4BAA4B,+DAAoB;AAChD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,+EAA+E,4EAAiB,sDAAsD,4CAA4C,EAAE,6CAA6C;AACjP;AACA;AACA,eAAe,uDAAS;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,+DAAoB,qDAAqD,wEAAK;AAC5H;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uDAAS;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAK;AAClC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,2EAAa;AAC5B;AACA;AACA,CAAC;AACsB;AACvB;AACA,mBAAmB,0DAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,uC;;;;;;;;;;;;ACxPA;AAAA;AAAA;AAA2D;AAC3D;AACA;AACA;AACO;AACP,uDAAuD,oDAAM;AAC7D,WAAW,sDAAQ,CAAC,sDAAQ,GAAG,UAAU,UAAU,sDAAQ,GAAG,0DAA0D;AACxH;AACA;AACA;AACA;AACA;AACA,eAAe,sDAAQ,CAAC,sDAAQ,GAAG,kBAAkB,yCAAyC,sDAAQ;AACtG,KAAK,IAAI;AACT;AACA,wC;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP,qC;;;;;;;;;;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,4DAA4D,8DAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,2DAA2D,EAAE;AAClI,0CAA0C,EAAE;AAC5C;AACA;AACA,0BAA0B,sDAAQ,8BAA8B,8DAAmB,mBAAmB,UAAU;AAChH;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,gD;;;;;;;;;;;;AC3EA;AAAA;AAAA;AAAA;AAAiC;AACiE;AAClG;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,sBAAsB,sDAAQ,8CAA8C,UAAU;AACtF;AACA;AACA,uCAAuC,oEAAyB;AAChE,gBAAgB,+DAAoB;AACpC,gBAAgB,6DAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA,+C;;;;;;;;;;;;AChCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoB;AACN;AAC/C;AACA;AACA;AACO;AACP;AACA,iDAAiD;AACjD;AACA;AACA;AACA,kCAAkC,2DAAgB;AAClD;AACA;AACA;AACA;AACA;AACA,8BAA8B,0EAAS,cAAc,0EAAS;AAC9D;AACA;AACA;AACA;AACA;AACA,mDAAmD,wBAAwB,0EAAS,cAAc,0EAAS,UAAU,EAAE;AACvH;AACA;AACA;AACA;AACA,sBAAsB,sDAAQ,4CAA4C,UAAU;AACpF;AACA;AACA;AACA;AACA,mBAAmB,QAAQ,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA,6BAA6B,wBAAwB,EAAE;AACvD,uCAAuC,mBAAmB,EAAE;AAC5D;AACA;AACA,6C;;;;;;;;;;;;AC9CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyD;AACA;AACN;AACW;AAC9D;AACA;AACA;AACO;AACP;AACA,WAAW,uDAAS;AACpB;AACA;AACA,eAAe,yDAAW;AAC1B;AACA;AACA;AACA,kCAAkC,sDAAQ,uCAAuC,UAAU;AAC3F;AACA,6DAA6D,wDAAa;AAC1E;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,gBAAgB;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA,kFAAkF,8EAAa;AAC/F;AACA;AACA,yBAAyB,gEAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,2DAAgB;AACtD;AACA,SAAS;AACT,KAAK;AACL;AACA,0C;;;;;;;;;;;;AChDA;AAAA;AAAA;AAAiC;AAC1B;AACP;AACA;AACA;AACA,sBAAsB,sDAAQ,uCAAuC,UAAU;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA,qC;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACT;AAC9B,iC;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAA2C;AACG;AAC9C;AACA;AACA;AACO;AACP;AACA,qEAAqE,kEAAY,0EAA0E;AAC3J;AACA,sBAAsB,sDAAQ,uCAAuC,UAAU;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA,WAAW,sDAAQ,CAAC,sDAAQ,GAAG,aAAa;AAC5C,sBAAsB;AACtB;AACA,8C;;;;;;;;;;;;AC5BA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACa;AACE;AAChD;AACA;AACA;AACO;AACP;AACA;AACA,sEAAsE,kEAAY;AAClF;AACA,sBAAsB,sDAAQ,+CAA+C,UAAU;AACvF;AACA,gBAAgB,4DAAiB;AACjC;AACA;AACA;AACA;AACA,mBAAmB,QAAQ,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA,0C;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAO;AACP;AACA;AACA,uBAAuB,EAAE;AACzB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;;;;;;ACjBa;AACb,8CAA8C,cAAc;AAC5D;AACA,yBAAyB,mBAAO,CAAC,6FAA2B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sCAAsC,EAAE,kBAAkB,sBAAsB,EAAE;AAC3H;AACA;AACA;AACA,yBAAyB,EAAE;AAC3B;AACA;AACA,4DAA4D,sBAAsB,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,2CAA2C,+sK;;;;;;;;;;;;AChC9B;AACb,8CAA8C,cAAc;AAC5D;AACA,yBAAyB,mBAAO,CAAC,6FAA2B;AAC5D;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,2CAA2C,m4C;;;;;;;;;;;;ACX9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA,2CAA2C,mU;;;;;;;;;;;;ACJ9B;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,+9H;;;;;;;;;;;;ACnC9B;AACb,8CAA8C,cAAc;AAC5D,2CAA2C,+pB;;;;;;;;;;;;ACF9B;AACb,8CAA8C,cAAc;AAC5D,2CAA2C,u9B;;;;;;;;;;;;ACF9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,2CAA2C,28B;;;;;;;;;;;;ACb9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,mvB;;;;;;;;;;;;ACV9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,ugD;;;;;;;;;;;;ACnB9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,0EAAU;AACvC,qBAAqB,mBAAO,CAAC,4EAAW;AACxC,qBAAqB,mBAAO,CAAC,wFAAiB;AAC9C,qBAAqB,mBAAO,CAAC,gFAAa;AAC1C,qBAAqB,mBAAO,CAAC,wHAAiC;AAC9D,qBAAqB,mBAAO,CAAC,8GAA4B;AACzD,qBAAqB,mBAAO,CAAC,8GAA4B;AACzD,qBAAqB,mBAAO,CAAC,oEAAO;AACpC,qBAAqB,mBAAO,CAAC,gFAAa;AAC1C,qBAAqB,mBAAO,CAAC,kFAAc;AAC3C,qBAAqB,mBAAO,CAAC,oFAAe;AAC5C,qBAAqB,mBAAO,CAAC,gFAAa;AAC1C,qBAAqB,mBAAO,CAAC,4FAAmB;AAChD,qBAAqB,mBAAO,CAAC,gFAAa;AAC1C,2CAA2C,+jC;;;;;;;;;;;;ACjB9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,uqC;;;;;;;;;;;;AChB9B;AACb;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,2CAA2C,+2H;;;;;;;;;;;;ACvD9B;AACb,8CAA8C,cAAc;AAC5D,2CAA2C,ujB;;;;;;;;;;;;ACF9B;AACb,8CAA8C,cAAc;AAC5D,2CAA2C,ma;;;;;;;;;;;;ACF9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,29G;;;;;;;;;;;;AC9C9B;AACb,8CAA8C,cAAc;AAC5D;AACA,2BAA2B,mBAAO,CAAC,iGAA6B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,+6C;;;;;;;;;;;;AClB9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA,qEAAqE,oBAAoB;AACzF;AACA;AACA;AACA;AACA,qEAAqE,oBAAoB;AACzF;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA,sCAAsC,YAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA,8DAA8D,WAAW;AACzE;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,uoS;;;;;;;;;;;;ACjG9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,+pC;;;;;;;;;;;;ACjB9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA,2CAA2C,mhH;;;;;;;;;;;;AChD3C;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2iC;;;;;;;;;;;;ACf9B;AACb,8CAA8C,cAAc;AAC5D;AACA,cAAc,mBAAO,CAAC,gDAAO;AAC7B,mBAAmB,mBAAO,CAAC,oFAAc;AACzC;AACA;AACA;AACA;AACA,uEAAuE,UAAU;AACjF;AACA;AACA;AACA;AACA,mBAAmB,QAAQ,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA,2CAA2C,u6B;;;;;;;;;;;;ACxB9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,uiC;;;;;;;;;;;;ACb9B;AACb,8CAA8C,cAAc;AAC5D,cAAc,mBAAO,CAAC,gDAAO;AAC7B,qBAAqB,mBAAO,CAAC,oFAAc;AAC3C,qBAAqB,mBAAO,CAAC,8FAAmB;AAChD,2CAA2C,mT;;;;;;;;;;;;ACL9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,25B;;;;;;;;;;;;ACR9B;AACb,8CAA8C,cAAc;AAC5D;AACA,eAAe,mBAAO,CAAC,8EAAU;AACjC,0BAA0B,mBAAO,CAAC,oGAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,+9C;;;;;;;;;;;;ACnB9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;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,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,+BAA+B,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,umN;;;;;;;;;;;;AC9D9B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,umE;;;;;;;;;;;ACX3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;;AAEA,iC;;;;;;;;;;;;ACfA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,kBAAkB;AAC/B,aAAa,kBAAkB;AAC/B;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;;AAGA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;ACrFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACM;AACH;;AAEG;AACS;;AAE/C;AACA,SAAS,6CAAM,MAAM,qDAAQ;AAC7B;;AAEsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,mDAAU;AAC3B,iBAAiB,mDAAU;AAC3B,iBAAiB,mDAAU;AAC3B;AACA,sCAAsC;AACtC,oBAAoB,6CAAM;AAC1B;AACA;AACA;AACA,eAAe,WAAW;AAC1B;;;AAGA;;AAEA;AACA;AACA;AACA;AACA,aAAa,yBAAyB;AACtC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,mDAAU;AACrC;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,mBAAmB;AAChC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C,mDAAU;AACvD,sBAAsB,mDAAU;AAChC;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,WAAW;AACxB,aAAa,yBAAyB;AACtC,eAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC,mDAAU;AAC3C;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,WAAW;AACxB,aAAa,WAAW;AACxB,eAAe,WAAW;AAC1B;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,mDAAU;AAC/B;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA,6BAA6B,6CAAM,GAAG,qDAAQ;AAC9C,kBAAkB,uDAAM;AACxB;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA,qBAAqB,6CAAM;AAC3B;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA,4BAA4B,qDAAQ,sBAAsB,6CAAM,wBAAwB,6CAAM;AAC9F,sCAAsC,6CAAM,GAAG,qDAAQ;AACvD,wCAAwC,6CAAM,GAAG,qDAAQ;AACzD,cAAc,4DAAU;AACxB,eAAe,4DAAU;AACzB,WAAW,6CAAM;AACjB;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,WAAW;AACxB,aAAa,WAAW;AACxB,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA,wCAAwC,mDAAU;AAClD;AACA;;AAEA;;AAEA,2BAA2B,mDAAU;AACrC;AACA;;AAEA;AACA;AACA,qBAAqB,mDAAU;AAC/B;AACA;AACA;AACA;;AAEA,oCAAoC,6CAAM,qCAAqC,6CAAM;;AAErF;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,WAAW;AACxB,aAAa,WAAW;AACxB,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,cAAc,gDAAgD;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,kBAAkB;AAC/B,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;ACpUD;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,yEAAU,EAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;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,CAAC;;;AAGD;AACA;AACA,CAAC;;;AAGD,UAAU;;AAEV;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;;AAEA,YAAY,SAAS;AACrB;AACA;;AAEA;;AAEA,aAAa,SAAS;AACtB;AACA;;AAEA;;AAEA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;AAGD;AACA,0BAA0B,QAAQ;AAClC;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA,yBAAyB,uCAAuC;AAChE,CAAC;;;AAGD;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA,qBAAqB,uBAAuB,uBAAuB,wBAAwB,uBAAuB;AAClH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA,qBAAqB,uBAAuB,uBAAuB,wBAAwB,uBAAuB;AAClH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;AAGD;AACA;AACA;AACA,CAAC;;;AAGD;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;AACA,iBAAiB,YAAY;AAC7B;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,QAAQ;AAC9B;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,YAAY;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC;AACnC;AACA;AACA,CAAC;AACD;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,aAAa;AAC1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;;AAEhB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;;AAElC;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB,oCAAoC;;AAEpC,sCAAsC;;AAEtC,qDAAqD;AACrD;AACA;;AAEA,0CAA0C;AAC1C;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,cAAc;AAC/B;AACA;AACA,8FAA8F;;AAE9F;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC,sBAAsB;;;AAGvB;AACA;AACA;AACA,CAAC,qBAAqB;;;AAGtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB,uBAAuB,wBAAwB,wBAAwB,WAAW;;AAEhI;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA,wB;;;;;;;;;;;;ACv2BA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAA+C,0DAA0D,2CAA2C,iCAAiC;;AAErL,kCAAkC,gEAAgE,sDAAsD,+DAA+D,mCAAmC,2EAA2E,EAAE,qCAAqC,iDAAiD,4BAA4B,EAAE,qBAAqB,wEAAwE,EAAE,qDAAqD,eAAe,wEAAwE,EAAE,EAAE,wCAAwC,GAAG,gCAAgC;;AAErvB,0CAA0C,mCAAmC,gCAAgC,EAAE,OAAO,wDAAwD,gBAAgB,uBAAuB,kDAAkD,kCAAkC,uDAAuD,iBAAiB,GAAG,EAAE,0CAA0C;;AAEha,sCAAsC,wEAAwE,0CAA0C,8CAA8C,MAAM,wEAAwE,GAAG,aAAa,EAAE,YAAY,cAAc,EAAE;;AAElU,gCAAgC,mEAAmE;;AAEnG,gCAAgC,4EAA4E,iBAAiB,UAAU,GAAG,8BAA8B;;AAExK,6BAA6B,gGAAgG,gDAAgD,GAAG,2BAA2B;;AAE/K;AACQ;;AAEpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;;;AAGA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA,iCAAiC;AACjC;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,kDAAS;AACnC;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,8BAA8B;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;;AAET,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;;AAEA;AACA,CAAC;;;;;;;;;;;;;;AC/JD;AAAA;AAAA;AAAA,+CAA+C,0DAA0D,2CAA2C,iCAAiC;;AAErL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgD;AAChD;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;;AAEA;AACA,CAAC,CAAC,wDAAe;;;;;;;;;;;;;;ACpCjB;AAAA;AAAA;AAAA,+CAA+C,0DAA0D,2CAA2C,iCAAiC;;AAErL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgD;AAChD;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;;AAEA;AACA,CAAC,CAAC,wDAAe;;;;;;;;;;;;;;ACpCjB;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AAChC;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;;AAGA;;AAEA;AACA;AACA;AACA;AACA,eAAe,IAAI;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,IAAI;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB,6CAAM;AAC9B,KAAK;AACL;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;ACvED;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;AC1CD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACM;AACc;;AAEV;AACK;AACT;AACoB;AACJ;AACR;AACU;AACF;AAChB;AACoB;AACd;AAC5C;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb;;AAEA;AACA;AACA,WAAW,EAAE;AACb;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb;;AAEA;AACA;AACA,WAAW,EAAE;AACb;;AAEA;AACA;AACA,WAAW,EAAE;AACb;;AAEA;AACA;AACA,WAAW,EAAE;AACb;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,MAAM;AACjB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,gBAAgB;AAC7B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uDAAa;AACpD;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAmB;AAChC,eAAe;AACf;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,gBAAgB;AAC7B;AACA,aAAa,YAAY;AACzB,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,oBAAoB;AACjC;AACA,aAAa,YAAY;AACzB;AACA,aAAa,gBAAgB;AAC7B;AACA,aAAa,YAAY;AACzB,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,oBAAoB;AACjC;AACA,aAAa,YAAY;AACzB;AACA,aAAa,gBAAgB;AAC7B;AACA,aAAa,YAAY;AACzB,eAAe;AACf;AACA;;AAEA;AACA;;AAEA,mCAAmC,6DAAoB;AACvD,yBAAyB,oDAAU;AACnC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,mDAAU;AACrC,mBAAmB,mDAAU;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,qDAAQ,sBAAsB,6CAAM,SAAS,6CAAM,0DAA0D,6CAAM,gCAAgC,6CAAM,mDAAmD,6CAAM;AAC1O,oBAAoB,qDAAQ;AAC5B,gCAAgC,2DAAM,WAAW,4DAAU;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX,2BAA2B;AAC3B,SAAS;AACT;AACA,OAAO,EAAE;;AAET,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,sBAAsB;AACnC,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,YAAY;AACzB;AACA,aAAa,YAAY;AACzB,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAmC,6DAAoB;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,kCAAkC;AACzD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAc,6CAAM;AACpB,0BAA0B,6CAAM;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,YAAY;AACzB,aAAa,gBAAgB;AAC7B;AACA,aAAa,YAAY;AACzB,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAmC,6DAAoB;AACvD;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,YAAY;AACzB,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA,mCAAmC,6DAAoB;AACvD,yBAAyB,oDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,mDAAU;AACzC,uBAAuB,mDAAU;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,qDAAQ,sBAAsB,6CAAM,SAAS,6CAAM,sCAAsC,6CAAM,iCAAiC,6CAAM,mDAAmD,6CAAM;AACvN,oBAAoB,qDAAQ;AAC5B,gCAAgC,2DAAM,WAAW,4DAAU;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,WAAW;;AAEX,2BAA2B;AAC3B,SAAS;AACT;AACA,OAAO,EAAE;;AAET,KAAK;AACL;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,KAAK;AAClB,aAAa,qBAAqB;AAClC,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,gBAAgB;AAC7B;AACA,aAAa,YAAY;AACzB,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,6DAAoB;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,YAAY;AACzB,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,qCAAqC,6DAAoB;AACzD;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,6CAAM;AACtB,4BAA4B,6CAAM;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,qBAAqB;AAClC,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,aAAa;AAC1B,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,wBAAwB,6BAA6B;AACpE;;AAEA;AACA;AACA,aAAa,eAAe;AAC5B,aAAa,qBAAqB;AAClC,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;;;AAGP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,qCAAqC;AAClD,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA,qBAAqB,oCAAoC;AACzD;AACA;AACA;AACA;AACA,gCAAgC,8DAAoB;AACpD;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,yBAAyB;AACtC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,mBAAmB;AAChC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,uDAAc;AACtC;AACA,OAAO;AACP,4BAA4B,2DAAkB;AAC9C;AACA,OAAO;AACP,6BAA6B,4DAAmB;AAChD;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAkB;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,oBAAoB;AACjC,aAAa,iCAAiC;AAC9C,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA,sBAAsB,uDAAc;AACpC,0BAA0B,2DAAkB;AAC5C,2BAA2B,4DAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAkB;AACjC;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,uBAAuB;AACpC;AACA,aAAa,UAAU;AACvB,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,gBAAgB;AAC7B,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,sBAAsB;AACnC,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,kBAAkB;AAC/B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,aAAa;AAC1B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,kBAAkB;AAC/B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,kBAAkB;AAC/B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,kBAAkB;AAC/B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,kBAAkB;AAC/B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,aAAa,cAAc;AAC3B,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,aAAa;AAC1B,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,kBAAkB;AAC/B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,qBAAqB;AAClC,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;AC/7DD;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;AACA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,qBAAqB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,qBAAqB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;AC7FD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACU;AACI;AAC5C;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,+CAAM;AAC5B;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sDAAa;AACpD;AACA;AACA,eAAe,OAAO;AACtB;;;AAGA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,YAAY;AAC5B,gBAAgB,KAAK;AACrB;;AAEA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,kBAAkB;AAC/B,aAAa,kBAAkB;AAC/B,aAAa,kBAAkB;AAC/B,aAAa,2BAA2B;AACxC,aAAa,eAAe;AAC5B,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oDAAW;AAC7B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oDAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;ACjMD;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,eAAe;AAC5B,aAAa,qBAAqB;AAClC,aAAa,mBAAmB;AAChC,aAAa,IAAI;AACjB;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B;;;AAGA;;AAEA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,IAAI;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,IAAI;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;ACpGD;AAAA;AAAA;AAAA;AAAqC;AACrC;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,6CAAW;AACf,WAAW,6CAAW;AACtB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA,WAAW,6CAAW;AACtB;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,WAAW,gDAAc;AACzB;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA,kBAAkB,6CAAW;AAC7B;;AAEA,mBAAmB,wBAAwB;AAC3C,MAAM,gDAAc;AACpB;;AAEA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;AC/HD;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oCAAoC;;AAEpC;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;AC1DD;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;;;AAGA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;AChGD;AAAA;AAAA;AACA,uBAAuB;;;AAGvB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEa,wEAAS,E;;;;;;;;;;;;ACnBxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2E;AACF;AACJ;AACR;AACU;AAChB;AACkB;AACV;AACM;AACV;AACN;;;;;;;;;;;;;AC1BzC;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,oDAAW;AAChC,cAAc,mBAAO,CAAC,gDAAS;AAC/B,cAAc,mBAAO,CAAC,gDAAS;;AAE/B;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;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;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,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;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;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;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;;AAEA;AACA;;AAEA;AACA;;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;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;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,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;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;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,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;AC5vDA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C,iBAAiB;AACjB;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;;AAEA,aAAa;AACb;;AAEA;AACA;AACA;AACA;;AAEA,aAAa;AACb;;AAEA;AACA;AACA;AACA;;AAEA,aAAa;AACb;;AAEA;AACA,aAAa;AACb;;AAEA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AA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ACA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA,aAAa,mBAAO,CAAC,uEAAqB;AAC1C,+BAA+B,mBAAO,CAAC,+HAAiD;AACxF,kCAAkC,mBAAO,CAAC,uHAA6C;AACvF,eAAe,mBAAO,CAAC,2EAAuB;AAC9C,gBAAgB,mBAAO,CAAC,+EAAyB;AACjD,gCAAgC,mBAAO,CAAC,iHAA0C;AAClF,eAAe,mBAAO,CAAC,6EAAwB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,mDAAmD;AACnD,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrDA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;ACNa;AACb;AACA,mBAAO,CAAC,mFAA2B;AACnC,eAAe,mBAAO,CAAC,2EAAuB;AAC9C,YAAY,mBAAO,CAAC,qEAAoB;AACxC,sBAAsB,mBAAO,CAAC,6FAAgC;AAC9D,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,kCAAkC,mBAAO,CAAC,uHAA6C;;AAEvF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,WAAW;AACxD;AACA;AACA;;AAEA,2BAA2B,mBAAmB,aAAa;;AAE3D;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,gBAAgB;AAChB;AACA,cAAc;AACd,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,4CAA4C;AAC5E;AACA;AACA,2BAA2B,uCAAuC;AAClE;AACA;;AAEA;AACA;;;;;;;;;;;;AC5HA,gBAAgB,mBAAO,CAAC,+EAAyB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA,WAAW,mBAAO,CAAC,mEAAmB;AACtC,aAAa,mBAAO,CAAC,uEAAqB;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACVA,cAAc,mBAAO,CAAC,yEAAsB;AAC5C,gBAAgB,mBAAO,CAAC,6EAAwB;AAChD,sBAAsB,mBAAO,CAAC,6FAAgC;;AAE9D;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,wBAAwB,mBAAO,CAAC,iGAAkC;;AAElE;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACRA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACZA,uBAAuB;;AAEvB;AACA;AACA;;;;;;;;;;;;ACJA;;;;;;;;;;;;ACAA,iBAAiB,mBAAO,CAAC,mFAA2B;;AAEpD;;;;;;;;;;;;ACFA,kBAAkB,mBAAO,CAAC,iFAA0B;A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;;AAE5E,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Ba;AACb;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,oBAAoB;AACpB,mCAAmC;AACnC,+CAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA,OAAO;AACP,uCAAuC;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAmC;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC,mCAAmC;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,oBAAoB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvKA,gBAAgB,mBAAO,CAAC,+EAAyB;;AAEjD;AACA;;AAEA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA,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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,oBAAoB;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;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,KAAK;AACL;AACA,CAAC;;;;;;;;;;;;ACtID,aAAa,mBAAO,CAAC,uEAAqB;AAC1C,mBAAmB,mBAAO,CAAC,qFAA4B;AACvD,2BAA2B,mBAAO,CAAC,yFAA8B;AACjE,kCAAkC,mBAAO,CAAC,uHAA6C;AACvF,sBAAsB,mBAAO,CAAC,6FAAgC;;AAE9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChCa;AACb;AACA,mBAAO,CAAC,yFAA8B;AACtC,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,iBAAiB,mBAAO,CAAC,mFAA2B;AACpD,qBAAqB,mBAAO,CAAC,+EAAyB;AACtD,eAAe,mBAAO,CAAC,2EAAuB;AAC9C,kBAAkB,mBAAO,CAAC,mFAA2B;AACrD,qBAAqB,mBAAO,CAAC,6FAAgC;AAC7D,gCAAgC,mBAAO,CAAC,iHAA0C;AAClF,0BAA0B,mBAAO,CAAC,uFAA6B;AAC/D,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,aAAa,mBAAO,CAAC,iEAAkB;AACvC,WAAW,mBAAO,CAAC,qGAAoC;AACvD,cAAc,mBAAO,CAAC,yEAAsB;AAC5C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,eAAe,mBAAO,CAAC,6EAAwB;AAC/C,aAAa,mBAAO,CAAC,qFAA4B;AACjD,+BAA+B,mBAAO,CAAC,+GAAyC;AAChF,kBAAkB,mBAAO,CAAC,mFAA2B;AACrD,wBAAwB,mBAAO,CAAC,iGAAkC;AAClE,sBAAsB,mBAAO,CAAC,6FAAgC;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,+EAA+E,EAAE,EAAE,cAAc;AACjG;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;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,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kDAAkD;AAC1E;AACA,OAAO,6DAA6D,kCAAkC;AACtG,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oCAAoC;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,wBAAwB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uBAAuB;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,CAAC,GAAG,mBAAmB;;AAEvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,GAAG,mBAAmB;;AAEvB;;AAEA,GAAG,wCAAwC;AAC3C;AACA,CAAC;;AAED;AACA;AACA;AACA,KAAK,+CAA+C;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Va;AACb;AACA,mBAAO,CAAC,2FAA+B;AACvC,QAAQ,mBAAO,CAAC,uEAAqB;AACrC,kBAAkB,mBAAO,CAAC,iFAA0B;AACpD,qBAAqB,mBAAO,CAAC,+EAAyB;AACtD,aAAa,mBAAO,CAAC,uEAAqB;AAC1C,uBAAuB,mBAAO,CAAC,2GAAuC;AACtE,eAAe,mBAAO,CAAC,2EAAuB;AAC9C,iBAAiB,mBAAO,CAAC,iFAA0B;AACnD,UAAU,mBAAO,CAAC,iEAAkB;AACpC,aAAa,mBAAO,CAAC,qFAA4B;AACjD,gBAAgB,mBAAO,CAAC,+EAAyB;AACjD,aAAa,mBAAO,CAAC,2FAA+B;AACpD,cAAc,mBAAO,CAAC,2GAAuC;AAC7D,qBAAqB,mBAAO,CAAC,6FAAgC;AAC7D,4BAA4B,mBAAO,CAAC,iGAAkC;AACtE,0BAA0B,mBAAO,CAAC,uFAA6B;;AAE/D;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,GAAG;AACH;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,wCAAwC;AACxC;AACA,CAAC;AACD,oCAAoC;AACpC,oBAAoB,QAAQ;AAC5B,CAAC;AACD,wCAAwC;AACxC,oBAAoB;AACpB,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,yBAAyB,6BAA6B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,cAAc;AACpD;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;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,CAAC,GAAG,mBAAmB;;AAEvB;AACA;AACA;AACA;AACA,CAAC,GAAG,mBAAmB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,GAAG,4DAA4D;AAC/D;AACA,CAAC;;;;;;;;;;;;AC9+BD,CAAC;AACD,KAAK,IAA2B;AAChC;AACA;AACA;AACA,MAAM,EAOJ;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,oBAAoB,MAAM;AAC1B,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA,cAAc;AACd;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,oCAAoC,YAAY;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qCAAqC,sBAAsB;AAC3D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA,MAAM;;AAEN;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,UAAU;;AAEV;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;;AAEA,CAAC,G;;;;;;;;;;;ACvvBD,CAAC;AACD,KAAK,IAA2B;AAChC;AACA,qCAAqC,mBAAO,CAAC,gDAAQ;AACrD;AACA,MAAM,EAOJ;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;;AAEA;;AAEA,gCAAgC,sCAAsC;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC,gBAAgB;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,UAAU;;AAEV;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;;AAGF;;AAEA,CAAC,G;;;;;;;;;;;ACtID,CAAC;AACD,KAAK,IAA2B;AAChC;AACA,qCAAqC,mBAAO,CAAC,gDAAQ,GAAG,mBAAO,CAAC,oDAAU,GAAG,mBAAO,CAAC,gDAAQ;AAC7F;AACA,MAAM,EAOJ;AACF,CAAC;;AAED;;AAEA,CAAC,G;;;;;;;;;;;ACjBD,CAAC;AACD,KAAK,IAA2B;AAChC;AACA,qCAAqC,mBAAO,CAAC,gDAAQ;AACrD;AACA,MAAM,EAOJ;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA,qBAAqB,KAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN,EAAE;;;AAGF,CAAC,G;;;;;;;;;;;AC9ID,CAAC;AACD,KAAK,IAA2B;AAChC;AACA,qCAAqC,mBAAO,CAAC,gDAAQ;AACrD;AACA,MAAM,EAOJ;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;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,4BAA4B,0BAA0B;AACtD;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;;AAEA,CAAC,G;;;;;;;;;;;AC3ED,CAAC;AACD,KAAK,IAA2B;AAChC;AACA,qCAAqC,mBAAO,CAAC,gDAAQ;AACrD;AACA,MAAM,EAOJ;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,iBAAiB;AACjC;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;;AAGF;;AAEA,CAAC,G;;;;;;;;;;;;ACtMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,2EAA2E;AAC3E;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;AACxB,iBAAiB,8DAAW;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,kCAAkC;AACvD;AACA;AACA,KAAK;AACL;AACA,KAAK;;AAEL,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,wEAAwE,aAAa;AACrF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA,2EAA2E,eAAe;AAC1F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA,2EAA2E,eAAe;AAC1F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA,2EAA2E,eAAe;AAC1F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;;AAGH,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;;AAGH,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA,GAAG;AACH,mBAAmB,0BAA0B;AAC7C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,sDAAsD;AAC7G;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,+BAA+B;AACpD;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;;AAGH,kBAAkB,kBAAkB;AACpC;;AAEA;AACA,qBAAqB,wBAAwB;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA,wEAAwE,eAAe;AACvF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wEAAwE;AACxE,yCAAyC;;;AAGzC,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wEAAwE,eAAe;AACvF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,yCAAyC,QAAQ;AACjD;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wEAAwE,eAAe;AACvF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+EAA+E,eAAe;AAC9F;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,4DAAS;;AAExB,wEAAwE,eAAe;AACvF;AACA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;;AAEA,mBAAmB,iBAAiB;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;;AAExB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;;AAExB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,4DAAS;AAC1B,mBAAmB,8DAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;;AAExB,iBAAiB,iBAAiB;AAClC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;AACxB;AACA;AACA;;AAEA;AACA,eAAe,4DAAS;AACxB;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,iBAAiB;AAChC,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;AACxB,iBAAiB,8DAAW;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,eAAe,wBAAwB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,wBAAwB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,8DAAW;;AAE5B,iBAAiB,sBAAsB;AACvC;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,uBAAuB,qBAAqB;AAC5C;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,8DAAW;AAC5B;AACA;;AAEA,aAAa,iBAAiB;AAC9B;AACA;AACA;;AAEA,6CAA6C,QAAQ;AACrD;AACA;AACA,KAAK;AACL,iBAAiB,qBAAqB;AACtC;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA,KAAK;AACL,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA,KAAK;AACL,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;;AAE1C;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB;;AAEnB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB;;AAEnB,iBAAiB,iBAAiB;AAClC,qCAAqC;;AAErC;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;;AAEA,mBAAmB,kBAAkB;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB;;AAEpB,iBAAiB,iBAAiB;AAClC;;AAEA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0EAA0E,iBAAiB;AAC3F;AACA;;AAEA,aAAa,gBAAgB;AAC7B;;AAEA,eAAe,kBAAkB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;;AAEA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;;AAExB,qEAAqE,aAAa;AAClF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;AAElB,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH,CAAC;;;AAGD;AACA,wEAAwE,eAAe;AACvF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wEAAwE,eAAe;AACvF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,4DAAS;AACxB;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;;AAExB;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,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX,SAAS;AACT,yBAAyB;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uEAAuE,aAAa;AACpF;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;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;;AAEe,gEAAC,EAAC;AACotB;;;;;;;;;;;;;AC1pDxtB;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yDAAyD,OAAO;AAChE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA,eAAe,YAAY;AAC3B;;AAEA;AACA,2DAA2D;AAC3D,+DAA+D;AAC/D,mEAAmE;AACnE,uEAAuE;AACvE;AACA,0DAA0D,SAAS;AACnE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,aAAa;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC/UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;;;;;;ACnFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;ACJA,iDAAiD,mBAAO,CAAC,wDAAS,aAAa,mBAAO,CAAC,wDAAS;;;;;;;;;;;;ACAhG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,MAAM,KAA0B;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;;AAGA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF,oBAAoB;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF,6CAA6C;AAC7C;AACA;AACA,kBAAkB,kCAAkC;AACpD,EAAE;;AAEF;AACA;;AAEA;AACA;AACA,UAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,kCAAkC,IAAI;AACtC;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA,gBAAgB,IAAI;;AAEpB;AACA;;AAEA;;AAEA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD,SAAS;;AAET;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ,6BAA6B;AAChD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;;AAEA;AACA;AACA,WAAW,gBAAgB;AAC3B,aAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;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;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,gCAAgC,MAAM;AACtC;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,eAAe;;AAEf,SAAS;;AAET;AACA,QAAQ,iCAAiC;AACzC,QAAQ,oBAAoB;AAC5B,QAAQ,sCAAsC;AAC9C,QAAQ;AACR,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA6D;;AAE7D;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;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,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,iEAAiE,UAAU;AAC3E,sCAAsC,2BAA2B;AACjE;AACA,gCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,UAAU,YAAY;AACtB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,UAAU,YAAY;AACtB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,UAAU;AACpB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,UAAU,cAAc;AACxB;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,YAAY,uEAAuE;AACnF;AACA;AACA,YAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,4DAA4D;;AAE5D;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,QAAQ,SAAS;AACjB;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iDAAiD;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA,iDAAiD;AACjD,UAAU,4CAA4C;AACtD;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA,CAAC;;;;AAID;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,QAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;;AAEA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;;AAEA,cAAc,SAAS;AACvB;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,OAAO;AACjB,0BAA0B,wBAAwB;;AAElD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA,0CAA0C;AAC1C,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;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;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA,OAAO;AACP,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wCAAwC,sCAAsC;AAC9E,oCAAoC,uCAAuC;AAC3E,oCAAoC,sCAAsC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,OAAO;AACP;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oCAAoC;AACpC,qCAAqC;AACrC,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA,EAAE;AACF;;;;;AAKA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,aAAa;AACpC,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,EAAE;AACF;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA,EAAE;;AAEF;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,CAAC;AACD;;AAEA;;;AAGA;;AAEA;;;;AAIA;AACA;AACA,GAAG;AACH,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA,CAAC;AACD;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,EAAE;AACF;;AAEA,EAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;;AAEA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,WAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,cAAc,sBAAsB;AACpC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA;AACA,iBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uCAAuC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,uDAAuD;AAC9E;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;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;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,+CAA+C;AACpD;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;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,CAAC;;AAED,cAAc,qCAAqC;AACnD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;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,GAAG;AACH;AACA,CAAC;;;AAGD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wCAAwC,OAAO;AAC/C;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA,SAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;;AAEA,SAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA+C,cAAc,WAAW;AACxE,mBAAmB,UAAU;AAC7B;AACA,sBAAsB,cAAc,sBAAsB,gBAAgB;AAC1E,gBAAgB,WAAW,YAAY;AACvC,cAAc;AACd;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,cAAc;AAC3D;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF,CAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,+DAA+D;AAC3E;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;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;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA,UAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;;AAEA,WAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,iDAAiD,0BAA0B;AAC3E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;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,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,gBAAgB;AAC1B;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2BAA2B;AAC3B;AACA,qBAAqB;AACrB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;;AAEA,6CAA6C;AAC7C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,QAAQ,gBAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;AAED;AACA,iEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,EAAE;AACF;AACA;AACA;;AAEA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,+BAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+BAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,cAAc;AACd,CAAC;AACD;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,QAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;;;;AAKD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA,iCAAiC;AACjC;AACA;;AAEA,IAAI;AACJ;;AAEA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA,WAAW,SAAS;AACpB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;AAKD;;;AAGA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,sCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA,aAAa;;AAEb;;;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,EAAE;;AAEF;AACA;AACA;AACA;;AAEA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,KAAK;AACL;;AAEA,WAAW;AACX,GAAG;AACH;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB,gDAAgD;AAChD;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;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,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,iBAAiB;AACjB,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC;;AAElC;AACA,sBAAsB;AACtB,2BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAI;AACJ;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;;AAEA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA,mDAAmD;AACnD;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,uBAAuB;AAClC,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,aAAa,uCAAuC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,CAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI;AACJ,GAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA,EAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA,cAAc,sDAAsD;AACpE;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI;AACJ;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA,cAAc,mCAAmC;AACjD;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,EAAE;AACF,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;AAKD;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK,IAA0C;AAC/C,CAAC,iCAAkB,EAAE,mCAAE;AACvB;AACA,EAAE;AAAA,oGAAE;AACJ;;;;;AAKA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA,CAAC;;;;;;;;;;;;AChoVD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,KAAK,IAA0C;AAC/C,EAAE,oCAAO,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAC;AACjB;AACA;AACA,KAAK,IAA2B;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,EAAE;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA,mEAAmE;AACnE;AACA;AACA,wCAAwC;AACxC;AACA,qEAAqE;AACrE;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2DAA2D;AAC3D;;AAEA,SAAS,oBAAoB;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;;AAEA;;AAEA;AACA;;AAEA,2BAA2B;AAC3B,CAAC;;;;;;;;;;;;AClKD;AACA,CAAC;;AAED;AACA,mBAAmB,KAA0B;AAC7C;AACA,kBAAkB,KAAyB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,cAAc,MAAM;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,SAAS;AACrB;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA,cAAc,MAAM;AACpB;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,YAAY,OAAO;AACnB,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,KAAK;AACL,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,cAAc,OAAO;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;;AAExB,yCAAyC,qBAAqB;;AAE9D;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;;AAEtD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,cAAc,iBAAiB;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,oBAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE,IAEU;AACZ;AACA,EAAE,mCAAmB;AACrB;AACA,GAAG;AAAA,oGAAC;AACJ,EAAE,MAAM,EAaN;;AAEF,CAAC;;;;;;;;;;;;;;ACphBD;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACzFA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;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;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpFa;;AAEb,iCAAiC,mBAAO,CAAC,0DAAU;AACnD,qCAAqC,mBAAO,CAAC,0DAAU;;;;;;;;;;;;;ACHvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa;AACzC,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,YAAY;AACZ,mCAAmC,EAAE;AACrC,sCAAsC,EAAE;AACxC;AACA,2BAA2B,EAAE;AAC7B;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,oCAAoC,EAAE;AACtC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,qBAAqB;AACrB,uCAAuC,EAAE;AACzC;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,mCAAmC,EAAE;AACrC,gCAAgC,EAAE;AAClC,yBAAyB,EAAE;AAC3B,2BAA2B,EAAE;AAC7B,KAAK;AACL;AACA;AACA,KAAK;AACL,mCAAmC,EAAE;AACrC,sCAAsC,EAAE;AACxC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL,wBAAwB,EAAE;AAC1B,uBAAuB,EAAE;AACzB,cAAc;AACd,6BAA6B,EAAE;AAC/B,+BAA+B,EAAE;AACjC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEkE;;;;;;;;;;;;;ACrJlE;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AACsB;AACtD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,oBAAoB,0DAAC;;AAErB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,0DAAC;AACzB;AACA;AACA,oFAAoF,EAAE,OAAO,EAAE;AAC/F,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,8CAA8C;;AAE9C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,gCAAgC,WAAW;AAC3C,oBAAoB,0DAAC;AACrB,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACzND;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3T;AACyC;AACuB;AAChE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA8B,6DAAQ;AACtC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,8DAAW;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,oCAAoC,eAAe;AACnD;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,uBAAuB,8DAAW;AAClC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,qBAAqB,8DAAW;AAChC;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC/KD;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3T,iCAAiC,kBAAkB;AACa;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,kCAAkC;AAClC;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;;AAExB;AACA,kBAAkB;AAClB;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;AACpD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,UAAU,6DAAQ;AAClB;AACA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACpMD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AACsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC,2CAA2C,YAAY;AACvD;AACA;AACA;AACA;AACA;AACA,iEAAiE;;AAEjE;AACA,mCAAmC;;AAEnC;AACA;AACA;;AAEA;AACA;AACA,sEAAsE;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,0DAAC;AAC7B;AACA;;AAEA;AACA,2BAA2B,0DAAC;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,kCAAkC;AAClC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC3GD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AAC8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,0DAAC;AAC3B;AACA;;AAEA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,0BAA0B,0DAAC;AAC3B;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,0DAAC;AAC1B;AACA;;AAEA;AACA,wBAAwB,0DAAC;AACzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,6BAA6B;AAC7B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2DAAM;AACZ,MAAM,2DAAM;AACZ,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACjMD;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE7P;AAC9D;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,0BAA0B;AACjD;AACA;AACA,OAAO;AACP;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,6BAA6B;AAC7B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2DAAM;AACZ,MAAM,2DAAM;AACZ,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACrFD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AAC8B;AAC9D;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,0DAAC;AAC1B;AACA;;AAEA;AACA,wBAAwB,0DAAC;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;;AAEjC;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;;AAEA,uBAAuB,0BAA0B;AACjD;AACA;AACA,OAAO;AACP;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,6BAA6B;AAC7B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2DAAM;AACZ,MAAM,2DAAM;AACZ,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC1HD;AAAA;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAEvQ;AACpB;AACsB;AACtD;AACA;AACA;AACA,mBAAmB,8DAAW;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,4DAAS;AAC1B,mBAAmB,8DAAW;AAC9B;;AAEA;AACA,8GAA8G,KAAE;AAChH;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,8DAAW;AAC9B,iBAAiB,4DAAS;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA,oDAAoD,YAAY;AAChE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,0DAAC;AACP;AACA,GAAG;AACH;AACA;AACA,iBAAiB,4DAAS;;AAE1B;AACA,MAAM,0DAAC;AACP;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC7GD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAEpR;AACe;AACtD;AACA;AACA;AACA,iBAAiB,4DAAS;AAC1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,4DAAS;;AAE1B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iBAAiB,4DAAS;AAC1B;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,4DAAS;AAC1B;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,oDAAoD,YAAY;AAChE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,0BAA0B;AAC1B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACzJD;AAAA;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAEvQ;AACpB;AACsB;AACtD;AACA;AACA;AACA,iBAAiB,4DAAS;AAC1B,mBAAmB,8DAAW;AAC9B;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,wBAAwB;AAC7C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA,KAAK;AACL;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,8DAAW;AAC9B;AACA,IAAI,0DAAC;AACL;AACA,GAAG;AACH;AACA;AACA,mBAAmB,8DAAW;AAC9B;AACA,IAAI,0DAAC;AACL;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC9HD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AACsB;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,0DAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,0DAAC;;AAE7B;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA,eAAe,0DAAC;AAChB;;AAEA,aAAa,0DAAC;AACd;;AAEA;;AAEA;AACA;AACA,gCAAgC,0DAAC,4CAA4C,0DAAC;AAC9E;AACA,OAAO;AACP,KAAK;AACL,+BAA+B,iCAAiC;AAChE;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wEAAwE;;AAExE,kDAAkD,eAAe;AACjE;AACA,SAAS;;;AAGT,gCAAgC,mBAAmB;AACnD;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AClOD;AAAA;AAAA;AAAA;AAAoD;AACpB;AACqC;;AAErE;AACA,iBAAiB,8DAAW;AAC5B;AACA;;AAEA;AACA;AACA,4CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,wDAAG;AACrB;AACA;AACA;AACA,iBAAiB,4DAAS;AAC1B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA,eAAe;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,eAAe,0DAAC;AAChB;;AAEA;AACA,6CAA6C;;AAE7C;AACA;AACA;;AAEA;AACA;AACA,4FAA4F;AAC5F,OAAO,8EAA8E;AACrF,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,wDAAG;AACjB;AACA;AACA;AACA,QAAQ;;AAER;;AAEA;AACA,kCAAkC;AAClC;;AAEA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;;AAGA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wDAAG;AACjB;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;AACA;;AAEA;AACA,uCAAuC;;AAEvC;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wCAAwC,6DAAQ;AAChD;AACA,aAAa,KAAK,aAAa;AAC/B;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,6DAAQ;AAChD;AACA;;AAEA;;AAEA;AACA,aAAa;AACb;AACA,SAAS;;;AAGT,yDAAyD;;AAEzD,yGAAyG;;AAEzG;AACA;AACA;;AAEA,6CAA6C;AAC7C;AACA,GAAG;AACH;AACA;AACA,iBAAiB,4DAAS,GAAG;AAC7B;AACA;;AAEA,+BAA+B,wDAAG;AAClC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;;AAGL,mEAAmE;;AAEnE;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,0DAAC;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,0DAAC;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA,wBAAwB,wDAAG;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC7bD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AAC8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,0DAAC;;AAEjB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,0DAAC;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,2DAAM;AACV;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,6BAA6B;AAC7B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,mDAAmD,0DAAC,2BAA2B,0DAAC;AAChF;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACnKD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AAC8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;;;AAGL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wBAAwB,0DAAC;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC,gBAAgB;AAClD;AACA;;AAEA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,qBAAqB;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,cAAc,0DAAC;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,0DAAC;AACrB;AACA;AACA,OAAO;AACP;;AAEA,IAAI,2DAAM;AACV;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,sHAAsH,0DAAC;AACvH;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACpWD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AACsB;AACtD;AACA;AACA;AACA;AACA,cAAc,0DAAC;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAM,0DAAC;AACP;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,0DAAC;AACzB;AACA;AACA;AACA,KAAK;AACL;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,2BAA2B;AAC3B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACxHD;AAAA;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAElR;AACT;AACwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,2DAAM;AACV;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,6DAAQ;AAC7C;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,8DAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,8DAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0DAAC;;AAEf;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,0DAAC;AACjB;AACA;;AAEA,IAAI,2DAAM;AACV;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACxVD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAEnP;AACxC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM,2DAAM;AACZ;AACA;AACA,OAAO;AACP,MAAM,2DAAM;AACZ;AACA;AACA,OAAO;AACP,KAAK,UAAU,6DAAQ;AACvB,6CAA6C,2DAAM,GAAG;AACtD;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0DAAC;AACzB;AACA;;AAEA;AACA,8BAA8B,0DAAC;AAC/B,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA,qEAAqE,oEAAoE,uFAAuF;AAChO;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA,SAAS;;;AAGT;AACA;AACA,qFAAqF,kFAAkF,4HAA4H,uHAAuH;AAC1Z;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,KAAK;;;AAGL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA,KAAK;AACL,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACzMD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AAC8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,2DAAM;AACV;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,SAAS;AACrC;AACA;;AAEA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAwC,0DAAC,kDAAkD,0DAAC;AAC5F;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAmB;AACxC;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,QAAQ;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB,mCAAmC,cAAc;AACjD;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2DAAM;AACZ,MAAM,2DAAM;;AAEZ;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC7QD;AAAA;AAAA;AAAA,qBAAqB,gDAAgD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,2BAA2B,EAAE,EAAE,EAAE,eAAe,GAAG,wCAAwC;;AAE3R;AACoC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAyB,0DAAC;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,iEAAY;AACjC,qBAAqB,iEAAY;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;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,KAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;;AAE1D;AACA;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;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,KAAK;AACL;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,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,8CAA8C;;AAE9C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;;AAGL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,uDAAuD;;AAEvD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,IAAI,sEAAiB;AACrB;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,0BAA0B;AAC1B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;ACnlBD;AAAA;AAAyU;AACzU;AACA,YAAY,6CAAQ;AACpB,eAAe,gDAAW;AAC1B,YAAY,6CAAQ;AACpB,eAAe,gDAAW;AAC1B,QAAQ,yCAAI;AACZ,cAAc,+CAAU;AACxB,aAAa,8CAAS;AACtB,cAAc,+CAAU;AACxB,MAAM,uCAAE;AACR,OAAO,wCAAG;AACV,WAAW,4CAAO;AAClB,iBAAiB,kDAAa;AAC9B,cAAc,+CAAU;AACxB,eAAe,gDAAW;AAC1B,UAAU,2CAAM;AAChB,UAAU,2CAAM;AAChB,OAAO,wCAAG;AACV,QAAQ,yCAAI;AACZ,QAAQ,yCAAI;AACZ,QAAQ,yCAAI;AACZ,MAAM,uCAAE;AACR,SAAS,0CAAK;AACd,MAAM,uCAAE;AACR,UAAU,2CAAM;AAChB,WAAW,4CAAO;AAClB,QAAQ,yCAAI;AACZ,WAAW,4CAAO;AAClB,QAAQ,yCAAI;AACZ,WAAW,4CAAO;AAClB,UAAU,2CAAM;AAChB,WAAW,4CAAO;AAClB,WAAW,4CAAO;AAClB,QAAQ,yCAAI;AACZ,YAAY,6CAAQ;AACpB,UAAU,2CAAM;AAChB,UAAU,2CAAM;AAChB;AACA;AACA,EAAE,sCAAC;AACH,CAAC;AACc,qGAAC,E;;;;;;;;;;;;AC1ChB;AAAA;AAAA;AAAuC;AACvC;;AAEA;AACA,eAAe,4DAAS;;AAExB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACxBA;AAAA;AAAA;AAAA;AAAuC;AACI;AAC3C;;AAEA;AACA,kCAAkC;AAClC;;AAEA,gBAAgB,+DAAU;AAC1B,eAAe,4DAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;;AAExD;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;;AAEA;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;AC3DA;AAAA;AAAA;AAAoD;AACpD;;AAEA;AACA,eAAe,4DAAS;AACxB,iBAAiB,8DAAW;AAC5B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO,YAAY;AACnB;;AAEA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY;AACjB;;AAEA;AACA;AACA,KAAK,YAAY;AACjB;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe,4DAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK,4DAA4D;AACjE;;;AAGA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,mEAAmE;AACnE,yEAAyE;AACzE;AACA;;AAEA;AACA;AACA,mEAAmE;AACnE,yEAAyE;AACzE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;;AAEA,qDAAqD,iBAAiB;AACtE;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;;;;ACxHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEgC;AACwE;AACnD;AACF;AACE;AACD;AACkB;AACG;AACM;AACA;AACA;AACH;AACH;AACZ;AACA;AACkB;AAClB;AACS;AACuB;AACpB;AACQ;AACA;AACA;AACe;AAC7B;;AAEnE;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,sBAAsB;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gDAAgD;;AAEhD;AACA,QAAQ,+DAAM;AACd;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yDAAyD;;AAEzD;AACA;AACA;AACA,SAAS;AACT,OAAO;;;AAGP;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,yEAAyE,aAAa;AACtF;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,0EAA0E,eAAe;AACzF;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;AACA,EAAE,+DAAM;AACR;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,eAAe,4DAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;AACA,GAAG,EAAE;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA,kDAAkD;;AAElD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK,EAAE;AACP;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,EAAE;AACP;AACA,KAAK;;AAEL;AACA;;AAEA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA,qBAAqB,uBAAuB;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO,EAAE;AACT;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;;AAEA,EAAE,+DAAM;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;;;AAGH;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,iBAAiB,4CAA4C;AAC7D;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;;;AAGH,aAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yBAAyB,8DAAC;AAC1B;;AAEA;AACA;;AAEA;AACA,kDAAkD;;AAElD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,EAAE,+DAAM;AACR;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;;;AAGH;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;;AAGH;;AAEA;AACA;AACA;AACA,GAAG;;;AAGH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;;AAGH;AACA,EAAE,+DAAM;AACR;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,8DAAC;AACf;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC,8DAAC;AACtC,KAAK;AACL,4BAA4B,8DAAC;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB,qEAAY;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,mDAAmD;;AAEnD;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,+EAA+E,kFAAkF,8BAA8B;;AAE/L;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,oDAAoD;AACpD,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,kDAAkD,mDAAmD;AACrG;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,mDAAmD;AACrG;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uCAAuC;;AAEvC,mCAAmC;;AAEnC;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,sDAAsD,yBAAyB;;AAElI;AACA,yCAAyC;;AAEzC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,oDAAoD;AACpD,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,8DAAC;;AAE1B;AACA;AACA;AACA;AACA,QAAQ,iEAAQ;AAChB;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM,iEAAQ;AACd;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,8DAAW;AAC5B;AACA,qCAAqC;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,oBAAoB;AACzC,wBAAwB,8DAAC;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,8DAAC;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH,kBAAkB,0BAA0B;AAC5C,sBAAsB,8DAAC;AACvB;;AAEA,0CAA0C,UAAU;AACpD,uBAAuB,8DAAC;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,oBAAoB;AACxC;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA,mBAAmB,2BAA2B;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,0BAA0B;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,8DAAW;AAC5B,eAAe,4DAAS;AACxB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,8DAAC;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;;AAEhC;AACA;;AAEA;AACA;AACA;;AAEA,EAAE,+DAAM;AACR;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,4DAAG;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC,8DAAC;AACnC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,8DAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAM,+DAAM;AACZ;AACA;AACA;AACA;AACA,OAAO;AACP,4BAA4B,4DAAG;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,+CAA+C,8DAAC;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;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,qCAAqC;;AAErC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,qDAAqD;;AAErD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,YAAY,4DAAG;AACf,KAAK;AACL,GAAG;;;AAGH,+CAA+C;;AAE/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA,GAAG;;;AAGH,qBAAqB,4DAAG;AACxB,oDAAoD;;AAEpD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,4DAAG;AAC1B,EAAE,iEAAQ;AACV;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;;;AAGA,0BAA0B,4DAAG;AAC7B;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,OAAO;AACP;;AAEA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,OAAO;;;AAGP;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;;AAGH;AACA;;AAEA,iBAAiB,uBAAuB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iFAAiF;AACjF;;AAEA;AACA,oFAAoF;AACpF;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA,GAAG;;;AAGH;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,GAAG;;;AAGH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,iBAAiB,8DAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,8DAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;;AAEnF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,+DAAM;AACV,IAAI,+DAAM;AACV;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,4DAAS,GAAG;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH,iBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,eAAe,4DAAS;AACxB;;AAEA;AACA;AACA;;AAEA,kBAAkB,8DAAC;;AAEnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,gCAAgC;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,2CAA2C;;AAE3C;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;;AAEA,uEAAuE,aAAa;AACpF;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,aAAa,+DAAM,GAAG;AACtB,yCAAyC;;AAEzC;AACA,qBAAqB,yEAAU;AAC/B,oBAAoB,uEAAS;AAC7B;AACA,KAAK;AACL,qBAAqB,yEAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK,EAAE;;AAEP,uBAAuB,+DAAM,GAAG;AAChC,mCAAmC;;AAEnC,oBAAoB,+DAAM,GAAG;AAC7B,4BAA4B,+DAAM,GAAG;AACrC,0BAA0B,+DAAM,GAAG,UAAU;;AAE7C;AACA;AACA;AACA,OAAO;AACP,KAAK;;;AAGL,eAAe,sDAAC,CAAC;;AAEjB,cAAc,8DAAC;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,+DAAM,GAAG;AACjC;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA,uBAAuB;;AAEvB;;AAEA;AACA,mBAAmB,8DAAC,gEAAgE;;AAEpF;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;;;AAGL,IAAI,+DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8DAAC;AACf;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK,EAAE;;AAEP;AACA,2BAA2B;;AAE3B;AACA;AACA,KAAK;;;AAGL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA,KAAK;;;AAGL,wBAAwB;;AAExB;AACA;AACA,KAAK;;;AAGL,wBAAwB;;AAExB;;AAEA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;;AAEA;AACA;AACA,KAAK;;;AAGL;AACA;AACA,KAAK;AACL;AACA,KAAK;;;AAGL,0BAA0B;;AAE1B,8BAA8B;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iCAAiC;;AAEjC,+BAA+B;;AAE/B,0BAA0B;;AAE1B;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA2B;;AAE3B;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM,oEAAW;AACjB;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,+DAAM;AACV;;AAEA;AACA;AACA,mFAAmF,4DAAG;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,IAAI,+DAAM;AACV;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,mBAAmB,4DAAS,GAAG;;AAE/B,qEAAqE;;AAErE;AACA,KAAK;AACL;AACA,mBAAmB,4DAAS;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,4DAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,6BAA6B;AAClD;AACA;AACA,KAAK;;;AAGL;AACA;AACA,KAAK,EAAE;;AAEP;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb,eAAe,mBAAO,CAAC,oFAAU;AACjC,WAAW,mBAAO,CAAC,0CAAQ;;AAE3B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,KAAK;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,2CAA2C,KAAK;AAChD,0CAA0C,KAAK;AAC/C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,kBAAkB,mBAAO,CAAC,4DAAa;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;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;;AAEA;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3tBa;;AAEb;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;ACfA,SAAS,mBAAO,CAAC,uCAAM;AACvB,SAAS,mBAAO,CAAC,uCAAM;;AAEvB;AACA;AACA;;AAEA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACjCA,UAAU,mBAAO,CAAC,yDAAW;AAC7B,kBAAkB,mBAAO,CAAC,iEAAmB;;AAE7C;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AC5GA,UAAU,mBAAO,CAAC,yDAAW;AAC7B,kBAAkB,mBAAO,CAAC,iEAAmB;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,KAA6B;AACjC;AACA,EAAE;AACF;AACA;AACA,CAAC;;;;;;;;;;;;;ACjDD;AAAA;AAAA;AAAA;AAA2C;;AAE3C,iBAAiB,qDAAa;;AAEf,yEAAU,EAAC;AACJ;AACtB;;;;;;;;;;;;ACNA,iBAAiB,mBAAO,CAAC,4EAAqB;;;;;;;;;;;;;ACAjC;;AAEb;AACA;AACA,CAAC;AACD;;AAEA,iDAAiD,0CAA0C,0DAA0D,EAAE;;AAEvJ,2CAA2C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD,2DAA2D,EAAE;;AAE3T,6DAA6D,sEAAsE,8DAA8D,oBAAoB;;AAErN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,0EAA0E;AAC1E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA,4EAA4E,aAAa;AACzF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8EAA8E,gEAAgE;AAC9I;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA2B,cAAc;AACzC;AACA;AACA;;AAEA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,kBAAkB;AAC3C;AACA;AACA;;AAEA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,C","file":"app_brand_manischewitz.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app_brand_manischewitz\": 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"account.widgets~cart.widgets~checkout.widgets\":\"account.widgets~cart.widgets~checkout.widgets\",\"account.widgets~checkout.widgets\":\"account.widgets~checkout.widgets\",\"account.widgets\":\"account.widgets\",\"checkout.widgets\":\"checkout.widgets\",\"cart.widgets\":\"cart.widgets\",\"content.widgets\":\"content.widgets\",\"harmony.account\":\"harmony.account\",\"harmony.cart\":\"harmony.cart\",\"harmony.checkout\":\"harmony.checkout\",\"harmony.minicart\":\"harmony.minicart\",\"harmony.search.widgets\":\"harmony.search.widgets\",\"inputmask\":\"inputmask\",\"minicart.widgets\":\"minicart.widgets\",\"orderconfirmation.widgets\":\"orderconfirmation.widgets\",\"product.widgets\":\"product.widgets\",\"search.widgets\":\"search.widgets\",\"storelocator.widgets\":\"storelocator.widgets\",\"toolkit\":\"toolkit\",\"vendors~dynamic-render\":\"vendors~dynamic-render\",\"vendors~fetch\":\"vendors~fetch\",\"vendors~smoothscroll\":\"vendors~smoothscroll\",\"wishlist.widgets\":\"wishlist.widgets\",\"vendors~photoswipe\":\"vendors~photoswipe\",\"simplecountdown\":\"simplecountdown\",\"vendors~cleave\":\"vendors~cleave\"}[chunkId]||chunkId) + \".bundle.js\"\n \t}\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 \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n \t\t\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n \t\t\t\t\tscript.crossOrigin = \"anonymous\";\n \t\t\t\t}\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://127.0.0.1:9080/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./cartridges/app_brand_manischewitz/cartridge/client/default/js/app_brand_manischewitz.js\");\n","import 'widgets/widgetsList';\nimport 'core/widgetsList';\nimport 'harmony/widgetsList';\nimport 'flagship_tasting_room/widgetsList';\nimport WidgetsMgr from 'widgets/widgetsMgr';\nimport { getCookie } from 'widgets/toolbox/cookie';\n\nfunction initWidgets(module) {\n    WidgetsMgr.run();\n\n    // @ts-ignore\n    if (module.hot) {\n        // @ts-ignore\n        module.hot.accept(['widgets/widgetsList', 'core/widgetsList', 'harmony/widgetsList',\n            'flagship_tasting_room/widgetsList'], () => WidgetsMgr.restartWidgets());\n    }\n}\n\nconst acceptCookie = getCookie('dw_accept_cookie');\nconst consentCookie = getCookie('dw_consent_cookie');\n\nif (window.monetateQ) {\n    if (!acceptCookie || (acceptCookie && consentCookie)) {\n        import('monetate/clientMonetate');\n    }\n}\n\nif (window.isGtmEnabled) {\n    const isGtmInited = window.google_tag_manager;\n\n    if (!acceptCookie || (acceptCookie && consentCookie)) {\n        if (isGtmInited) {\n            import('harmony/clientGTM').then(initWidgets.bind(module));\n        } else {\n            document.addEventListener('gtm_loaded', function () {\n                import('harmony/clientGTM').then(initWidgets.bind(module));\n            });\n        }\n    } else {\n        initWidgets(module);    \n    }\n} else {\n    initWidgets(module);\n}\n","import WidgetsMgr from 'widgets/widgetsMgr';\n\nWidgetsMgr.addWidgetsList('app_custom_core', () => []);\n","import WidgetsMgr from 'widgets/widgetsMgr';\n\nWidgetsMgr.addWidgetsList('app_flagship_tasting_room', () => []);\n","export default {\n    md: 768,\n    lg: 1200,\n    xl: 1440\n};\n","import { submitFormJson } from 'widgets/toolbox/ajax';\nimport { get } from 'widgets/toolbox/util';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Asks the user to share geolocation.\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof GeolocationConsent} GeolocationConsent class\n */\nexport default function (Widget) {\n    /**\n     * @class GeolocationConsent\n     * @augments Widget\n     * @property {string} data-stateselectedbyuser - Has user already selected his state.\n     * @property {string} data-geolocation-url - Action URL.\n     */\n    class GeolocationConsent extends Widget {\n        init() {\n            super.init();\n            this.locateUser();\n        }\n\n        /**\n         * Show prompt for user.\n         */\n        locateUser() {\n            if (navigator.geolocation) {\n                navigator.geolocation.getCurrentPosition(() => {\n                    this.sendLocation(true);\n                }, () => {\n                    this.sendLocation(false);\n                });\n            }\n        }\n\n        /**\n         * handle state change\n         */\n        handleStateChange(response) {\n            const stateID = get(response, 'stateID');\n            const basketItems = get(response, 'basket.numItems');\n\n            // trigger events if 'stateID' is not empty\n            if (stateID) {\n                this.eventBus().emit('shipto.title.redraw');\n                this.eventBus().emit('shipto.state.changed', stateID);\n                this.eventBus().emit('shipto.restrictions.updated', stateID);\n            }\n\n            // refresh basket items if it includes items\n            if (basketItems) {\n                this.eventBus().emit('cart.items.refresh');\n            }\n        }\n\n        /**\n         * Send location data.\n         *\n         * @param {Boolean} allowed\n         */\n        sendLocation(allowed) {\n            const geolocationUrl = this.ref('self').data('geolocation-url');\n            submitFormJson(String(geolocationUrl), { allowed: String(allowed) }, 'POST', true)\n                .then((res) => {\n                    this.handleStateChange(res);\n                });\n        }\n    }\n\n    return GeolocationConsent;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/Widget').default>} Widget\n */\n\n/**\n * @description ProductPositionMapping widget implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof ProductPositionMapping} - ProductPositionMapping instance\n */\nexport default function (Widget) {\n    class ProductPositionMapping extends Widget {\n        init() {\n            const positionKey = this.data('positionKey');\n            var positionMap = this.data('positionMapping');\n\n            var currentPositions = window[positionKey] || {};\n            window[positionKey] = Object.assign(currentPositions, positionMap);\n        }\n    }\n\n    return ProductPositionMapping;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\nimport { get } from 'widgets/toolbox/util';\nimport { getHeaderType } from 'harmony/toolbox/shipToUtils';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n * @typedef {ReturnType<typeof import('widgets/forms/InputRadio').default>} InputRadio\n */\n\n/**\n * @description ShipToStates widget implementation\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof ShipToStates} - ShipToStates instance\n */\nexport default function (AjaxForm) {\n    class ShipToStates extends AjaxForm {\n        init() {\n            super.init();\n            this.headerType = this.ref('self').data('headerType') || '';\n            this.eventBus().on('shiptostate.submit', 'handleSubmit');\n            this.eventBus().on('shipttostate.setstate', 'setInputValue');\n            this.handleBrowsingOnlyModal();\n        }\n\n        /**\n         * Set radio input value\n         *\n         * @param {string} stateID - state code\n         */\n        setInputValue(stateID) {\n            this.getById('dwfrm_states_stateCode', (inputRadio) => {\n                inputRadio.setValue(stateID);\n                this.stateID = stateID;\n            });\n        }\n\n        /**\n         * Handle ship to state from submit\n         * @returns {boolean} - false to match super implementation\n         */\n        handleSubmit() {\n            // submit form\n            const promise = submitFormJson(\n                this.getFormUrl(),\n                this.getFormFields(),\n                'POST',\n                true\n            )\n            // emit event to redraw header value\n                .then((res) => {\n                    this.handleStateChange(res);\n                });\n\n            this.eventBus().emit('loader.start', promise);\n            return false;\n        }\n\n        /**\n         * handle state change\n         */\n        handleStateChange(response) {\n            const stateID = get(response, 'stateID') || this.stateID;\n            const basketItems = get(response, 'basket.numItems');\n\n            this.eventBus().emit('shipto.title.redraw');\n            this.eventBus().emit('shipto.state.changed', stateID);\n            this.eventBus().emit('shipto.restrictions.updated', stateID);\n\n            // refresh basket items if it includes items\n            if (basketItems) {\n                this.eventBus().emit('cart.items.refresh');\n            }\n\n            if (response.basket) {\n                this.eventBus().emit('product.added.to.cart', response.basket, this);\n            }\n\n            // store internal value\n            this.getById('dwfrm_states_stateCode', (inputRadio) => {\n                this.stateID = inputRadio.getValue();\n            });\n            // pushing monetate data for custom variables (state_eligible, state_name)\n            if (response.stateJSON) {\n                var isStateEligible = response.stateJSON.isStateEligible ? 'yes' : 'no';\n                window.monetateData.ship_eligible = isStateEligible;\n                window.monetateData.ship_state = response.stateJSON.shipToState;\n                // eslint-disable-next-line max-len\n                window.monetateQ.push(['setCustomVariables', [{ name: 'ship_eligible', value: monetateData.ship_eligible}, {name: 'ship_state', value: monetateData.ship_state }]]);\n            }\n        }\n\n        /**\n         * handle browsing only dialog open\n         */\n        handleModalOpen() {\n            // emit event to notify that specific dialog was opened\n            this.emit('browsingonlymodalopen', this);\n        }\n\n        /**\n         * Handle radio input select\n         *\n         * @param {InputRadio} inputRadio - input radio widget\n         */\n        handleChange(inputRadio) {\n            var dataSet = inputRadio.getDataSet();\n            var isBrowsingOnly = dataSet.browsingOnly;\n\n            if (isBrowsingOnly) {\n                this.eventBus().emit('sidebar.close');\n                // display confirmation modal\n                var modalTitle = dataSet.modalTitle;\n                this.getById('browsingOnlyModal', BrowsingOnlyModal => BrowsingOnlyModal.showModal({ modalTitle }, () => {\n                    this.handleModalOpen();\n                    BrowsingOnlyModal.afterShowModal();\n                }));\n            } else {\n                // submit form\n                this.handleSubmit();\n            }\n        }\n\n        /**\n         * handle browsing only state modal cancel\n         */\n        handleModalCancel() {\n            // emit event that state should be selected\n            this.emit('selectstate', this);\n            // emit event to notify that specific dialog was closed\n            this.emit('browsingonlymodalclose', this);\n        }\n\n        /**\n         * handle browsing only by auto\n         */\n        handleBrowsingOnlyModal() {\n            if (this.headerType && getHeaderType() !== this.headerType) {\n                return;\n            }\n\n            const self = this.ref('self');\n            const inputRadio = self.data('initialState')\n                ? document.querySelector('input[data-id=\"dwfrm_states_stateCode-' + self.data('initialState') + '\"]')\n                : null;\n            if (inputRadio && self.data('showBrowsingOnlyModal')) {\n                submitFormJson(self.data('disableBrowsingOnlyUrl'), {}, 'POST', true).then(() => {\n                    const modalTitle = inputRadio.dataset.modalTitle;\n                    this.getById('browsingOnlyModal', BrowsingOnlyModal => BrowsingOnlyModal.showModal({ modalTitle },\n                        this.handleModalOpen.bind(this)));\n                });\n            }\n        }\n    }\n\n    return ShipToStates;\n}\n","import { getContentByUrl } from 'widgets/toolbox/ajax';\n\nexport default function (EmitBusEvent) {\n    class ShipToTitle extends EmitBusEvent {\n        init() {\n            super.init();\n            this.eventBus().on('shipto.title.redraw', 'redraw');\n        }\n\n        /**\n         * Makes an ajax call to get new view for itself.\n         */\n        redraw() {\n            // exit if 'data-ref-url' is empty\n            if (!this.config.refUrl) {\n                return;\n            }\n\n            getContentByUrl(this.config.refUrl, {}).then((content) => {\n                if (this.refs && this.refs.innerTitle) {\n                    this.render('', {}, this.ref('innerTitle'), content);\n                }\n                this.eventBus().emit('sidebar.close');\n            });\n        }\n    }\n\n    return ShipToTitle;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n */\n\n/**\n * @description Base Profile details form implementation\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof ProfileDetailsForm}\n */\n\nexport default function (AjaxForm) {\n    class ProfileDetailsForm extends AjaxForm {\n        init() {\n            super.init();\n\n            this.eventBus().on('cognito.hook.updateprofiledetails.then', 'updateProfileDetailsSubmitted');\n            this.eventBus().on('cognito.hook.updateprofiledetails.error', 'updateProfileDetailsError');\n        }\n\n        /**\n         * Overridden default handleSubmit for handle Cognito API\n         * call with updating profile data.\n         *\n         * @returns {boolean}\n         */\n        handleSubmit() {\n            if (this.isChildrenValid() && !this.submitting) {\n                this.submitting = true;\n                this.getById(this.prefs().submitButton, submitButton => submitButton.busy());\n                this.ref(this.prefs().errorMessageLabel).hide();\n\n                const fields = this.getFormFields();\n                const isSubscribed = fields.dwfrm_profile_customer_newsletterSubscription === 'true';\n                let fieldsObject = {\n                    firstName: fields.dwfrm_profile_customer_firstname,\n                    lastName: fields.dwfrm_profile_customer_lastname,\n                    phoneNumber: fields.dwfrm_profile_customer_phone,\n                    currentPassword: fields.dwfrm_profile_login_currentpassword,\n                    birthDate: fields.dwfrm_profile_customer_birthday,\n                    username: fields.dwfrm_profile_customer_email,\n                    newsletterSubscription: fields.dwfrm_profile_customer_newsletterSubscription || 'false'\n                };\n                if(fields.dwfrm_profile_customer_state) {\n                    fieldsObject['state'] = fields.dwfrm_profile_customer_state;\n                }\n                    this.eventBus().emit('cognito.hook.updateprofiledetails', fieldsObject);\n\n                this.eventBus().emit('loader.start', new Promise((resolve) => {\n                    this.resolve = resolve;\n                }));\n\n                if (isSubscribed) {\n                    this.eventBus().emit('gtm.subscribe.success');\n                    this.eventBus().emit('monetate.track.newsletter.signup');\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Called after cognito updated profile details.\n         */\n        updateProfileDetailsSubmitted() {\n            submitFormJson(\n                this.getFormUrl(),\n                this.getFormFields(),\n                this.ref('self').attr('method') === 'GET' ? 'GET' : 'POST'\n            )\n                .then(this.onSubmitted.bind(this))\n                .catch(this.onError.bind(this));\n        }\n\n        /**\n         * Called after cognito thrown exception while updating\n         * profile details.\n         *\n         * @param {object} data\n         * @param {string} data.message - occurred error message\n         */\n        updateProfileDetailsError(data) {\n            this.onError(data);\n            this.afterSubmission();\n        }\n\n        /**\n         * @description when submitting has been done.\n         */\n        afterSubmission() {\n            super.afterSubmission();\n            this.resolveLoader();\n        }\n\n        /**\n         * @description resolve loader promise for hide overlay.\n         * @returns {void}\n         */\n        resolveLoader() {\n            if (typeof this.resolve === 'function') {\n                this.resolve();\n            }\n        }\n    }\n\n    return ProfileDetailsForm;\n}\n","export default function (AjaxForm) {\n    return class VerificationCodeForm extends AjaxForm {\n        init() {\n            super.init();\n\n            this.defineItems();\n\n            this.state = {};\n\n            /**\n             * -- cognito.hook.resendconfirmemail.catch --\n             * When cognito resent thrown an exception, for example limit of request was reached.\n             */\n            this.eventBus().on('cognito.hook.resendconfirmemail.catch', 'onError');\n\n            /**\n             * -- cognito.hook.confirmsignup.catch --\n             * When any exception was thrown by cognito \"verify account\"\n             * For example: Invalid verification code was provided.\n             */\n            this.eventBus().on('cognito.hook.confirmsignup.catch', 'onError');\n\n            /**\n             * -- harmonyloginform.signin.confirmation.exception --\n             * When cognito sign-in thrown an exception that customer not confirmed.\n             */\n            this.eventBus().on('harmonyloginform.signin.confirmation.exception', 'showLoginState');\n\n            /**\n             * -- registrationform.submitted --\n             * When registration form was submitted.\n             */\n            this.eventBus().on('registrationform.submitted', 'showRegistrationState');\n\n            /**\n             * -- harmonytab.change --\n             * When tab view was change.\n             */\n            this.eventBus().on('harmonytab.change', 'hide');\n\n            /**\n             * -- confirmation.create.account --\n             * When customer creates account via order confirmation page.\n             */\n            this.eventBus().on('confirmation.create.account', 'showConfirmationCreateAccountState');\n\n            /**\n             * -- cognito.hook.signin.silent--\n             * When we need to hide verification code form widget\n             */\n            this.eventBus().on('cognito.hook.signin.silent', 'onSilentSignIn');\n        }\n\n        prefs() {\n            return {\n                ...super.prefs(),\n                submitButton: 'verifyButton'\n            };\n        }\n\n        /**\n         * @description Initializes default widget instance state and view state.\n         * @param {object} data\n         * @param {string} data.email - customer email which needs to be verified and will be used for sign-in.\n         * @param {string} data.password - customer password for sign-in it after verification.\n         * @returns {void}\n         */\n        initState(data) {\n            this.state = {};\n\n            // init state with the given customer\n            this.state.username = data.email;\n            this.state.password = data.password;\n\n            // This flag used from order confirmation page to\n            // not login customer and not redirect to any page.\n            this.state.silent = !!data.silent;\n\n            // clear component error messages\n            this.clearError();\n\n            // clear from previous input\n            this.getById('dwfrm_login_verificationCode', (input) => {\n                input.setValue('', true);\n                input.clearError();\n            });\n\n            // hide all block which are hidden by default\n            this.ref('backButton').hide();\n            this.ref('registrationInfo').hide();\n        }\n\n        /**\n         * @description Emits when customer creates account at order confirmation page.\n         * @param {object} data\n         * @param {string} data.email - customer email which needs to be verified and will be used for sign-in.\n         * @param {string} data.password - customer password for sign-in it after verification.\n         * @returns {void}\n         */\n        showConfirmationCreateAccountState(data) {\n            this.initState(data);\n            this.ref('confirmationCreateAccountInfo').show();\n            this.show();\n        }\n\n        /**\n         * @description Emits when verification code was triggered from login state.\n         * For confirm customer account if it has NOT CONFIRMED status.\n         * @param {object} data\n         * @param {string} data.email - customer email which needs to be verified and will be used for sign-in.\n         * @param {string} data.password - customer password for sign-in it after verification.\n         * @returns {void}\n         */\n        showLoginState(data) {\n            this.initState(data);\n            this.ref(this.prefs().errorMessageLabel).setText(data.message).show();\n            this.eventBus().emit('verificationcodeform.show', 'login');\n            this.show();\n        }\n\n        /**\n         * @param data\n         */\n        showRegistrationState(data) {\n            this.initState(data);\n            this.ref('registrationInfo').show();\n            this.eventBus().emit('verificationcodeform.show', 'register');\n            this.show();\n        }\n\n        /**\n         * @description Emites when \"Verify account\" CTA was triggered.\n         * @returns {void}\n         */\n        handleSubmit() {\n            const fields = this.getFormFields();\n\n            if (!this.isChildrenValid() || this.submitting) {\n                return;\n            }\n\n            this.beforeSubmission();\n            this.eventBus().emit('cognito.hook.confirmsignup', {\n                code: fields.dwfrm_login_verificationCode,\n                username: this.state.username,\n                password: this.state.password,\n                silent: this.state.silent\n            });\n        }\n\n        /**\n         * @description Hide verification form and show login form back.\n         * @returns {void}\n         */\n        backToLogin() {\n            this.hide();\n            this.eventBus().emit('verificationcodeform.backtologin');\n        }\n\n        /**\n         * @description Resend button was clicked.\n         * @returns {void}\n         */\n        handleResend() {\n            var accessibilityAlert = this.prefs().accessibilityAlerts.confirmationCodeSent;\n\n            if (this.submitting) {\n                return;\n            }\n\n            this.eventBus().emit('cognito.hook.resendconfirmemail', {\n                username: this.state.username\n            }, accessibilityAlert);\n        }\n\n        /**\n         * @description Action which needs to be done before submit handleSubmit function.\n         * @returns {void}\n         */\n        beforeSubmission() {\n            this.getById(this.prefs().submitButton, submitButton => submitButton.busy());\n            this.clearError();\n            this.submitting = true;\n            this.eventBus().emit('loader.start', new Promise((resolve) => {\n                this.resolve = resolve;\n            }));\n        }\n\n        /**\n         * @description Handles an error, which happens during request (for ex. 500 response)\n         * @param {object} error\n         */\n        onError(error) {\n            super.onError(error);\n            this.ref('backButton').show();\n            this.afterSubmission();\n        }\n\n        /**\n         * @description when form needs to be just hidden without any other actions.\n         */\n        onSilentSignIn() {\n            this.hide();\n            this.afterSubmission();\n        }\n\n        /**\n         * @description when submitting has been done.\n         */\n        afterSubmission() {\n            super.afterSubmission();\n            this.resolveLoader();\n        }\n\n        /**\n         * @description resolve loader promise for hide overlay.\n         * @returns {void}\n         */\n        resolveLoader() {\n            if (typeof this.resolve === 'function') {\n                this.resolve();\n            }\n        }\n\n        show() {\n            super.show();\n            this.setFocusToFirstItem();\n        }\n    };\n}\n","import { Amplify, Hub } from '@aws-amplify/core';\nimport Auth from '@aws-amplify/auth';\nimport { setCookie } from 'widgets/toolbox/cookie';\n\nimport { submitFormJson } from 'widgets/toolbox/ajax';\nimport Storage from 'harmony/aws/CustomStorage';\nimport { formatDate, formatPhoneNumber } from 'harmony/toolbox/format';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Amazon Cognito implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof Cognito} Cognito class\n */\n\nexport default function (Widget) {\n    class Cognito extends Widget {\n        init() {\n            super.init();\n\n            this.configure();\n            this.hooks();\n            this.isAuth();\n        }\n\n        get constants() {\n            return {\n                HOOK_SIGN_IN_THEN: 'cognito.hook.signin.then',\n                HOOK_SIGN_IN_CATCH: 'cognito.hook.signin.catch',\n                HOOK_UPDATE_PROFILE_ERROR: 'cognito.hook.updateprofiledetails.error'\n            };\n        }\n\n        /**\n         * Amazon Cognito initialization.\n         *\n         * https://docs.amplify.aws/lib/auth/start/q/platform/js#re-use-existing-authentication-resource\n         *\n         * Config for initialization places in cognito.isml and values of it comes from BM.\n         * Expected object for ...this.prefs().config the next one:\n         * {\n         *    \"region\": <string>,\n         *    \"userPoolId\": <string>,\n         *    \"userPoolWebClientId\": <string>,\n         *    \"oauth\": {\n         *        domain: 'your_cognito_domain',\n         *        scope: ['phone', 'email', 'profile', 'openid', 'aws.cognito.signin.user.admin'],\n         *        redirectSignIn: 'http://localhost:3000/',\n         *        redirectSignOut: 'http://localhost:3000/',\n         *        responseType: 'code' // or 'token', note that REFRESH token will only be generated when the responseType is code\n         *     }\n         * }\n         */\n        configure() {\n            try {\n                Amplify.configure({\n                    Auth: {\n                        mandatorySignIn: true,\n                        ...this.prefs().config,\n                        storage: new Storage(this.prefs().storageUrl)\n                    }\n                });\n            } catch (e) {\n                console.error(e);\n            }\n\n            /**\n             * Social login Hub. After provider will return customer to the site\n             * (url will have params with token and state) this Hub will be initialized\n             * and listen auth trigger.\n             *\n             * Description of the API https://docs.amplify.aws/lib/auth/social/q/platform/js#setup-frontend\n             */\n            Hub.listen('auth', async (data) => {\n                if (!this.prefs().isOauth) { return; }\n\n                const failureUrl = this.prefs().failureProvider\n                    .concat('&provider=')\n                    .concat(window.sessionStorage.getItem('triggeredProvider'));\n\n                window.sessionStorage.removeItem('triggeredProvider');\n\n                switch (data?.payload?.event) {\n                    case 'signIn':\n                        Auth.currentAuthenticatedUser()\n                            .then(userData => {\n                                submitFormJson(window.location.href, userData.attributes, 'POST', true).then(res => {\n                                    window.location.assign(res.redirectUrl);\n                                });\n                            })\n                            .catch(() => {\n                                window.location.assign(failureUrl);\n                            });\n                        break;\n                    case 'cognitoHostedUI':\n                        Auth.currentAuthenticatedUser()\n                            .then(userData => {\n                                this.updateSessionStorage(userData).then(res => {\n                                    submitFormJson(res.redirectUrl, { formData: userData.attributes }, 'POST', true);\n                                });\n                            })\n                            .catch(() => {\n                                window.location.assign(failureUrl);\n                            });\n                        break;\n                    case 'signIn_failure':\n                        window.location.assign(failureUrl);\n                        break;\n                    default:\n                        break;\n                }\n            });\n        }\n\n        hooks() {\n            /**\n             * Used for start Cognito signup process.\n             *\n             * Object which expects as parameter.\n             * {\n             *     username: fields.username,\n             *     password: fields.password,\n             *     attributes: {\n             *         email: fields.email,\n             *         name: fields.firstName,\n             *         family_name: fields.lastName,\n             *         phone_number: fields.phoneNumber,\n             *         birthdate: fields.birthDate\n             *     }\n             * }\n             */\n            this.eventBus().on('cognito.hook.signup', 'signup');\n\n            /**\n             * Used for start Cognito signin process.\n             *\n             * Object which expects as parameter.\n             * {\n             *     username,\n             *     password\n             * }\n             */\n            this.eventBus().on('cognito.hook.signin', 'signin');\n\n            /**\n             * Used for start Cognito forgot password process.\n             * This method will emit email to the customer with verification code.\n             *\n             * Object which expects as parameter.\n             * {\n             *     username\n             * }\n             *\n             * username -- it is email address of the customer.\n             */\n            this.eventBus().on('cognito.hook.forgotpassword', 'forgotpassword');\n\n            /**\n             * Used for submit customer forgot password process,\n             * with verification code which was sent on email.\n             *\n             * Object which expects as parameter.\n             * {\n             *     username,\n             *     code,\n             *     new_password\n             * }\n             */\n            this.eventBus().on('cognito.hook.forgotpassword.confirmationcodesubmit', 'confirmationCodeSubmit');\n\n            /**\n             * Used to change password to the specific customer on Cognito side.\n             *\n             * Object which expects as parameter.\n             * {\n             *     oldPassword,\n             *     newPassword\n             * }\n             */\n            this.eventBus().on('cognito.hook.changepassword', 'changePassword');\n\n            /**\n             * Used to emit email with new verification code.\n             *\n             * Object which expects as parameter.\n             * {\n             *     username\n             * }\n             */\n            this.eventBus().on('cognito.hook.resendconfirmemail', 'reSendConfirmationEmail');\n\n            /**\n             * Used to confirm sign up process with verification code which was sent to the email address.\n             *\n             * Object which expects as parameter.\n             * {\n             *     username,\n             *     code,\n             *     password\n             * }\n             */\n            this.eventBus().on('cognito.hook.confirmsignup', 'confirmSignUp');\n\n            /**\n             * Used to call social login process. Will redirect customer on specific provider.\n             * Cognito in this case behave like a proxy between SFCC and provider.\n             *\n             * Provider - any social network: facebook, google.\n             */\n            this.eventBus().on('cognito.hook.sociallogin', 'socialLogin');\n\n            /**\n             * @description when update profile was triggered (on my account dashboard).\n             */\n            this.eventBus().on('cognito.hook.updateprofiledetails', 'updateProfileDetails');\n\n            /**\n             * @description when subscription flag needs to be synced on cognito.\n             */\n            this.eventBus().on('cognito.hook.syncsubscription', 'syncNewsletterSubscription');\n        }\n\n        /**\n         * @param {object} data -- facebook or google and isCheckout tag.\n         * @description Will make a redirect to the specific provider.\n         * API https://docs.amplify.aws/lib/auth/social/q/platform/js#setup-frontend\n         */\n        socialLogin(data) {\n            let providerLabel = '';\n\n            if (data.isCheckout) {\n                setCookie('socialSignOn_cookie', 'checkout', 365, true)\n            } else if (data.isWCSignUp) {\n                var isWCSignUp = '\"'+ data.isWCSignUp + '\"';\n                setCookie('socialSignOn_cookie', isWCSignUp , 365, true)\n            } else {\n                setCookie('socialSignOn_cookie', '' , 365, true)\n            }\n\n            if (data.socialNetwork === 'facebook') {\n                providerLabel = 'Facebook';\n                Auth.federatedSignIn({ provider: providerLabel });\n            }\n\n            if (data.socialNetwork === 'google') {\n                providerLabel = 'Google';\n                Auth.federatedSignIn({ provider: providerLabel });\n            }\n\n            window.sessionStorage.setItem('triggeredProvider', providerLabel);\n        }\n\n        /**\n         * @description Used for sync backend and cognito session states. If on backend session lost\n         * we need to logout on cognito side and if we logout (lost) session on cognito\n         * we need to logout on SFCC side.\n         */\n        isAuth() {\n            if (this.prefs().isOauth || this.prefs().isExternalAuth) {\n                return;\n            }\n\n            // Trying to get auth customer from Cognito.\n            Auth.currentAuthenticatedUser({\n                bypassCache: false\n            })\n                .catch(() => {\n                    // Logout customer on our end if the session was expired on AWS\n                    // side and we still in logged in state on our end.\n                    if (this.prefs().isAuth) {\n                        window.location.assign(this.prefs().logoutUrl);\n                    }\n                });\n        }\n\n        /**\n         * @description This function makes a change password request to the Amazon Cognito.\n         *\n         * https://docs.amplify.aws/lib/auth/manageusers/q/platform/js#change-password\n         *\n         * @param {object} fields - object with new and old password.\n         * @param {string} fields.oldPassword - an old password\n         * @param {string} fields.newPassword - new password\n         */\n        changePassword(fields) {\n            // Getting the current authenticated user object.\n            Auth.currentAuthenticatedUser()\n                .then(user => {\n                    // If customer exists we can change a password.\n                    return Auth.changePassword(user, fields.oldPassword, fields.newPassword);\n                })\n                .then(data => {\n                    // Password was changed emit an event to go further.\n                    this.eventBus().emit('cognito.hook.changepassword.then', data);\n                })\n                .catch(error => {\n                    this.eventBus().emit('cognito.hook.changepassword.catch', this.getError(error));\n                });\n        }\n\n        /**\n         * @description This function make a registration request to the Amazon.\n         *\n         * https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#sign-up\n         *\n         * @param {object} fields\n         * @param {string} fields.username - customer username\n         * @param {string} fields.password - customer password\n         * @param {string} fields.email - customer email (it will be login name)\n         * @param {string} fields.firstName - customer first name\n         * @param {string} fields.lastName - customer last name\n         * @param {string} fields.birthdate - the birthday customer date\n         * @param {string} fields.phoneNumber - customer phone number in E.164 number convention\n         */\n        signup(fields) {\n            let attributesObject = {\n                email: fields.email,\n                name: fields.firstName,\n                family_name: fields.lastName,\n                phone_number: fields.phoneNumber ? formatPhoneNumber(fields.phoneNumber) : '',\n                birthdate: fields.birthDate,\n                'custom:newsSubscription': fields.newsletterSubscription,\n            };\n            if(fields.state) {\n                attributesObject['name'] = fields.firstName + ' ' + fields.lastName;\n                attributesObject['given_name'] = fields.firstName;\n                attributesObject['birthdate'] = formatDate(fields.birthDate);\n                attributesObject['custom:state'] = fields.state;\n            }\n            Auth.signUp({\n                username: fields.username,\n                password: fields.password,\n                attributes: attributesObject\n            }).then(data => {\n                this.eventBus().emit('cognito.hook.signup.then', data);\n            }).catch(error => {\n                this.eventBus().emit('cognito.hook.signup.catch', this.getError(error, 'signup'));\n            });\n        }\n\n        /**\n         * @description Sign in customer on Cognito by username and password.\n         * In case of challenge (customer was created in Cognito console) complete needs to be called,\n         * for now it completes with the same password.\n         *\n         * Description of the API https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#sign-in\n         *\n         * @param {object} fields object with username and password data\n         * @param {string} fields.username - customer user name\n         * @param {string} fields.password - customer password\n         */\n        signin(fields) {\n            Auth.signIn(fields.username, fields.password)\n                .then(data => {\n                    this.updateSessionStorage(data).then(() => {\n                        if (data?.challengeName === 'NEW_PASSWORD_REQUIRED') {\n                            Auth.completeNewPassword(data, fields.password)\n                                .then(user => {\n                                    this.eventBus().emit(this.constants.HOOK_SIGN_IN_THEN, {\n                                        ...user,\n                                        ...fields\n                                    });\n                                })\n                                .catch(error => {\n                                    this.eventBus().emit(this.constants.HOOK_SIGN_IN_CATCH, this.getError(error));\n                                });\n                        } else {\n                            this.eventBus().emit(this.constants.HOOK_SIGN_IN_THEN, {\n                                ...data,\n                                ...fields\n                            });\n                        }\n                    });\n                })\n                .catch(error => {\n                    this.eventBus().emit(this.constants.HOOK_SIGN_IN_CATCH, this.getError(error, 'signin'));\n                });\n        }\n\n        /**\n         * @description Forgot password request to the Cognito, called from Login page -> forgot password popup.\n         *\n         * Description of the API https://docs.amplify.aws/lib/auth/manageusers/q/platform/js#forgot-password\n         *\n         * @param {object} fields - object with username\n         * @param {string} fields.username - customer user name.\n         */\n        forgotpassword(fields) {\n            Auth.forgotPassword(fields.username)\n                .then(data => {\n                    this.eventBus().emit('cognito.hook.forgotpassword.then', {\n                        ...data,\n                        ...fields\n                    });\n                })\n                .catch(error => {\n                    this.eventBus().emit('cognito.hook.forgotpassword.catch', {\n                        ...this.getError(error),\n                        ...fields\n                    });\n                });\n        }\n\n        /**\n         * @description This confirmationcodesubmit function used for submit password with code which was\n         * sent by Cognito to the customer email address.\n         *\n         * Description of the API https://docs.amplify.aws/lib/auth/manageusers/q/platform/js#forgot-password\n         *\n         * @param {object} fields - object with code and new password\n         * @param {string} fields.code - code from Amazon, like a token.\n         * @param {string} fields.newPassword - customer new password string.\n         * @param {string} fields.userName - customer new password string.\n         */\n        confirmationCodeSubmit(fields) {\n            Auth.forgotPasswordSubmit(fields.userName, fields.code, fields.newPassword)\n                .then(() => {\n                    this.eventBus().emit('cognito.hook.forgotpassword.confirmationcodesubmit.then');\n                })\n                .catch(error => {\n                    this\n                        .eventBus()\n                        .emit('cognito.hook.forgotpassword.confirmationcodesubmit.catch', this.getError(error));\n                });\n        }\n\n        /**\n         * @description Used for resend confirmation code to the customer.\n         *\n         * Description of the API https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#re-send-confirmation-code\n         * @param {object} fields - object with code and username.\n         * @param accessibilityAlert\n         * @param {string} fields.username - customer new password string.\n         */\n        reSendConfirmationEmail(fields, accessibilityAlert) {\n            Auth.resendSignUp(fields.username)\n                .then(data => {\n                    this.eventBus().emit('cognito.hook.resendconfirmemail.then', {\n                        data,\n                        ...fields\n                    });\n\n                    this.eventBus().emit('alert.show', {\n                        accessibilityAlert\n                    });\n                })\n                .catch(error => {\n                    this.eventBus().emit('cognito.hook.resendconfirmemail.catch', {\n                        ...this.getError(error),\n                        ...fields\n                    });\n                });\n        }\n\n        /**\n         * @description Confirm customer verification with code and username.\n         *\n         * Description of the API https://docs.amplify.aws/lib/auth/emailpassword/q/platform/js#confirm-sign-up\n         *\n         * @param {object} fields - object with code and username.\n         * @param {string} fields.code - confirmation code from email which was sent by Amazon Cognito.\n         * @param {string} fields.username - customer username string.\n         * @param {string} fields.password - customer password string.\n         */\n        confirmSignUp(fields) {\n            Auth.confirmSignUp(fields.username, fields.code)\n                .then(() => {\n                    // Used in case we don't need to signin customer immediately\n                    if (!!fields.silent) { // eslint-disable-line no-extra-boolean-cast\n                        this.eventBus().emit('cognito.hook.signin.silent');\n                        return;\n                    }\n                    Auth.signIn(fields.username, fields.password)\n                        .then(data => {\n                            this.updateSessionStorage(data).then(() => {\n                                this.eventBus().emit(this.constants.HOOK_SIGN_IN_THEN, {\n                                    ...data,\n                                    ...fields\n                                });\n                            });\n                        })\n                        .catch(error => {\n                            this.eventBus().emit(this.constants.HOOK_SIGN_IN_CATCH, {\n                                ...this.getError(error),\n                                ...fields\n                            });\n                        });\n                })\n                .catch(error => {\n                    this.eventBus().emit('cognito.hook.confirmsignup.catch', {\n                        ...this.getError(error),\n                        ...fields\n                    });\n                });\n        }\n\n        /**\n         * @description update customer profile data on cognito side\n         * and emit action for update it on SFCC side.\n         * @param {object} fields\n         * @param {string} fields.username - customer email\n         * @param {string} fields.currentPassword - customer current password\n         * @param {string} fields.firstName - customer first name\n         * @param {string} fields.lastName - customer last name\n         * @param {string} fields.phoneNumber - customer phone number in E.164 number convention format\n         */\n        updateProfileDetails(fields) {\n            // If it is external customer we don't need to check password.\n            if (this.prefs().isExternalAuth || document.getElementById('captureDobAndPhone')?.getAttribute('data-sso-account')) {\n                this.updateUserProfile(fields);\n                return;\n            }\n\n            // Check provided customer username and password.\n            Auth.signIn(fields.username, fields.currentPassword)\n                .then((data) => {\n                    this.updateSessionStorage(data).then(() => {\n                        this.updateUserProfile(fields);\n                    });\n                })\n                .catch((error) => {\n                    this.eventBus().emit(this.constants.HOOK_UPDATE_PROFILE_ERROR, this.getError(error));\n                });\n        }\n\n        /**\n         * Internally used function which updates customer profile on cognito side.\n         *\n         * @param {object} fields - an object with data described below\n         * @param {string} fields.username - customer email\n         * @param {string} fields.currentPassword - customer current password\n         * @param {string} fields.firstName - customer first name\n         * @param {string} fields.lastName - customer last name\n         * @param {string} fields.phoneNumber - customer phone number in E.164 number convention format\n         */\n        updateUserProfile(fields) {\n            // Get current auth user.\n            Auth.currentAuthenticatedUser()\n                .then((user) => {\n                    // Update user attributes\n                    let fieldsObject = {\n                        name: fields.firstName,\n                        family_name: fields.lastName,\n                        phone_number: formatPhoneNumber(fields.phoneNumber),\n                        birthdate: fields.birthDate,\n                        'custom:newsSubscription': fields.newsletterSubscription\n                    };\n                    if(fields.state) {\n                        fieldsObject['name'] = fields.firstName + ' ' + fields.lastName;\n                        fieldsObject['given_name'] = fields.firstName;\n                        fieldsObject['birthdate'] = formatDate(fields.birthDate);\n                        fieldsObject['custom:state'] = fields.state;\n                    }\n                    Auth.updateUserAttributes(user, fieldsObject)\n                        .then((data) => {\n                            this.eventBus().emit('cognito.hook.updateprofiledetails.then', data);\n                        })\n                        .catch((error) => {\n                            this.eventBus().emit(this.constants.HOOK_UPDATE_PROFILE_ERROR, this.getError(error));\n                        });\n                })\n                .catch((error) => {\n                    this.eventBus().emit(this.constants.HOOK_UPDATE_PROFILE_ERROR, this.getError(error));\n                });\n        }\n\n        /**\n         * @description store cognito local storage to the backend session storage.\n         * @param data - data to be stored.\n         * @returns {Promise<object>}\n         */\n        updateSessionStorage(data) {\n            return submitFormJson(\n                this.config.storageUrl,\n                { storage: JSON.stringify(data?.storage?.dataMemory) },\n                'POST',\n                true\n            );\n        }\n\n        /**\n         * @description sync service newsletter subscription with cognito.\n         * @param {object} response\n         * @param {string} svcStatus - status which was passed to the newsletter subscription service.\n         * @returns {Promise<T | void>}\n         */\n        syncNewsletterSubscription(response) {\n            Auth.currentAuthenticatedUser()\n                .then((user) => {\n                    const userNewsletterSubscription = String(user.attributes['custom:newsSubscription']);\n                    const svcNewsletterSubscription = String(response.newsletterSubscription);\n\n                    if (userNewsletterSubscription !== svcNewsletterSubscription) {\n                        Auth.updateUserAttributes(user, {\n                            'custom:newsSubscription': svcNewsletterSubscription\n                        });\n                    }\n                })\n                .catch(error => {\n                    console.warn(error);\n                }).finally(() => {\n                    this.eventBus().emit('sync.newsletter.subscription.then', response);\n                });\n        }\n\n        /**\n         * @description Get error message object according to the error mapping with Amazon Cognito.\n         *\n         * @param {object} error - data from Amazon Cognito which code will be mapped to the message on SFCC side.\n         * @param {string} error.code - error code from Amazon Cognito.\n         * @param {string} type - deternime hwo called error function to get proper default error message.\n         *\n         * @returns {object} object with error message data.\n         */\n        getError(error, type = 'default') {\n            var errors = this.prefs().errors;\n            var confirmException = error.code === 'UserNotConfirmedException';\n            var message = '';\n\n            // Identify default error message\n            switch (type) {\n                case 'signin':\n                    message = errors.SignInException;\n                    break;\n                case 'signup':\n                    message = errors.SignUpException;\n                    break;\n                default:\n                    message = errors.InternalError;\n                    break;\n            }\n\n            // If an error has some specific code try to find another error message\n            // otherwise will be default which was determined above\n            if (error.code in errors) {\n                message = errors[error.code];\n            } else if (confirmException) {\n                message = errors.UnconfirmedCustomerAccount;\n            }\n\n            return {\n                message: message,\n                confirmException: confirmException\n            };\n        }\n    }\n\n    return Cognito;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @class\n * @description This class used for change place where Amazon Cognito will store session data.\n * By default it is localStorage in browser. Here it was changed to the backend session.\n * See for more details: https://docs.amplify.aws/lib/auth/manageusers/q/platform/js#managing-security-tokens\n *\n * As well here was done mapping in localStorage for Amazon Cognito keys. Due to it has length over 50 symbols,\n * thus we are getting quote limit on back-end side.\n */\nexport default class Storage {\n    /**\n     * @param {string} storageUrl - where to get requests.\n     */\n    constructor(storageUrl) {\n        this.storageUrl = storageUrl;\n        this.dataMemory = {};\n    }\n\n    /**\n     * @type {object}\n     */\n    syncPromise = {};\n\n    /**\n     * This is used to set a specific item in storage\n     *\n     * @param {string} key\n     * @param {string} value\n     * @returns {string}\n     */\n    setItem(key, value) {\n        this.dataMemory[key] = value;\n        return this.dataMemory[key];\n    }\n\n    /**\n     * This is used to get a specific key from storage\n     *\n     * @param {string} key\n     * @returns {string|undefined}\n     */\n    getItem(key) {\n        return Object.prototype.hasOwnProperty.call(this.dataMemory, key) ? this.dataMemory[key] : undefined;\n    }\n\n    /**\n     * This is used to remove an item from storage\n     *\n     * @param {string} key\n     * @returns {boolean}\n     */\n    removeItem(key) {\n        return delete this.dataMemory[key];\n    }\n\n    /**\n     * This is used to clear the storage\n     *\n     * @returns {object}\n     */\n    clear() {\n        this.dataMemory = {};\n        return this.dataMemory;\n    }\n\n    /**\n     * Will sync the Storage data from server session to object storage.\n     * And will sync mapping to Cognito session key.\n     *\n     * @returns {Promise<object>}\n     */\n    sync() {\n        if (!Storage.syncPromise) {\n            Storage.syncPromise = new Promise((res, rej) => {\n                submitFormJson(this.storageUrl, {}, 'GET', true)\n                    .then(data => {\n                        this.clear();\n                        Object.assign(this.dataMemory, data.items);\n\n                        res();\n                    })\n                    .catch(() => {\n                        rej();\n                    });\n            });\n        }\n        return Storage.syncPromise;\n    }\n}\n","export default function (HarmonyModal) {\n    class cancelOrderModal extends HarmonyModal {\n        init() {\n            super.init();\n        }\n\n        closeModal() {\n            super.closeModal();\n        }\n\n        show() {\n            this.getById('cancelOrder', (/** @type {modal} */ cancelOrder) => cancelOrder\n                .showModal({\n                    attributes: {\n                        'data-tau-unique': 'open_cancelorder_dialog'\n                    }\n                }));\n        }\n\n        cancelOrder() {\n            const cancelReason = ($('#cancelreason').val() === '' ? 'none' : $('#cancelreason').val());\n            const url = $('#confirmCancelOrderUrl').val();\n            const CancelOrderDetails = { cancelReason: cancelReason };\n            $('body').addClass('m-panel-open');\n            $('.b-loader').removeClass('h-hidden');\n            $.ajax({\n                url: url,\n                type: 'get',\n                dataType: 'json',\n                data: CancelOrderDetails,\n                success: function (res) {\n                    var transactionId = res.transactionID;\n                    var gtmData = {\n                        event: 'orderHistory',\n                        orderHistoryAction: 'Cancel Order',\n                        canceledTransactionId: transactionId\n                    };\n                    var isOrderDetailPage = $('.b-order_short_summary-status').parents('.b-order_details').length;\n                    dataLayer.push(gtmData);\n                    if (res.success === false) {\n                        $('.renderTemplate').html(res.renderedTemplate);\n                        $('.b-loader').addClass('h-hidden');\n                    } else if (res.guest === true || isOrderDetailPage) {\n                        $('body').removeClass('m-has_dialog');\n                        $('.b-loader').addClass('h-hidden');\n                        $('.b-order_short_summary-status').addClass('deleted');\n                        $('.b-order_short_summary-status').html('Your order is cancelled');\n                        $('.cancelorder-modal').hide();\n                    } else {\n                        window.location.reload();\n                    }\n                },\n                error: function(error){\n                    $('body').removeClass('m-panel-open');\n                    $('.b-loader').addClass('h-hidden');\n                    console.log(error);\n                }\n            });\n        }\n    }\n\n    return cancelOrderModal;\n}\n","import { isSmallView } from 'widgets/toolbox/viewtype';\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Base MixMiniCart implementation\n * @param {Widget} Widget Modal widget for extending\n * @returns {typeof MixMiniCart} MixMiniCart class\n */\nexport default function (Minicart) {\n    /**\n     * @class MixMiniCart\n     * @augments Widget\n     * @classdesc MixMiniCart widget, that contains all needed logic to display/update MixMiniCart component and extends MixMiniCart widget.\n     * @property {string} data-widget - Widget name `MixMiniCart`\n     * URL to be used for updating MixMiniCart widget (for ex. in case of removing products from MixMiniCart)\n     * @property {string} data-ref Known reference to be available in widget as a `RefElement` object.\n     * Known elements for MixMiniCart are: `minicartContent`, `template`\n     * @property {object} data-accessibility-alerts - Accessibility alerts per MixMiniCart action\n     * Possible values are: `quantitychanged`, `productremoved`\n     * @example\n     * // use this code to display widget\n     * <div\n     *     class=\"b-minicart_popup\"\n     *     data-widget=\"mixMiniCart\"\n     *     data-action-url=\"${URLUtils.url('Cart-MiniCartShow')}\"\n     * >\n     *     <div\n     *         data-ref=\"minicartContent\"\n     *         data-count=\"${pdict.quantityTotal}\"\n     *     >\n     *         .... minicart content\n     *     </div>\n     * </div>\n     */\n    class MixMiniCart extends Minicart {\n        /**\n         * This method was overriden with parent widget.\n         *\n         * @description Called when needs to re-render minicart (for ex. when cart / product in a cart was updated)\n         * @param {object} cart cartModel\n         * @returns {Promise} Promise\n         */\n        reRenderMinicartWrapper(cart) {\n            const isShownQtyTotal = parseInt(cart.numItems, 10);\n            const quantityTotal = cart.numItems > this.prefs().maxItemsValue\n                ? this.prefs().maxItemsStr\n                : cart.numItems;\n\n            return this.render('template', {\n                quantityTotal: quantityTotal,\n                isShownQtyTotal: isShownQtyTotal >= 0,\n                isOpen: cart.isOpen\n            }, this.ref(\n                this.prefs().refMinicartContent\n            )).then(() => {\n                // do not show minicart if disabled or mobile (small view port)\n                if (cart.showMinicart) {\n                    this.showMinicart();\n                }\n            });\n        }\n    }\n\n    return MixMiniCart;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @description Base SecureCheckoutButton implementation\n * @param {ReturnType<typeof import('widgets/global/Button').default>} Button widget for extending\n * @returns {typeof SecureCheckoutButton} SecureCheckoutButton class\n *\n */\n\nexport default function (Button) {\n    class SecureCheckoutButton extends Button {\n        /**\n         * @description Sends GTM events, when secure checkout button clicked\n         * @returns {void}\n        */\n\n        handleSubmit() {\n            const promise = submitFormJson(this.config.basketValidationUrl, {}).then((response) => {\n                if (response.error) {\n                    if (this.config.context === 'minicart') {\n                        this.eventBus().emit('gtm.cart.updated', response);\n                        this.eventBus().emit('minicart.show');\n                    } else {\n                        this.eventBus().emit('secure.checkout.clicked', response.cartModel);\n                        this.eventBus().emit('cart.items.refresh');\n                    }\n                } else {\n                    window.location.href = this.config.checkoutUrl;\n                }\n            });\n            this.eventBus().emit('loader.start', promise);\n            this.eventBus().emit('gtm.button.click');\n        }\n    }\n\n    return SecureCheckoutButton;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n/**\n * @description Base ShippingSelector implementation\n * @param {Widget} Widget Modal widget for extending\n * @returns {typeof ShippingSelector} ShippingSelector class\n */\nexport default function (Widget) {\n    class ShippingSelector extends Widget {\n        selectShippingMethod() {\n            var methodID = this.ref('field').val();\n            const promise = submitFormJson(\n                this.config.actionUrl,\n                { methodID: methodID },\n                'POST'\n            ).then((res) => {\n                // res - basketModel\n                this.eventBus().emit('shipping.method.selected', res);\n            });\n\n            this.eventBus().emit('loader.start', promise);\n        }\n    }\n    return ShippingSelector;\n}\n","window.$ = require('jquery');\n\n$(document).ready(function () {\n    $('body').on('click', '.title.contactus-generalinfo', function (e) {\n        e.preventDefault();\n        $(this).parents('.customer-service').toggleClass('active');\n        $('.customer-service-content').toggleClass('h-sm-hidden');\n\n        if ($(this).parents('.customer-service').hasClass('active')) {\n            $(this).attr('aria-expanded', true);\n        } else {\n            $(this).attr('aria-expanded', false);\n        }\n    });\n});\n\nwindow.addEventListener(\"load\", (event) => {\n    if(window.location.href.includes('COPlaceOrder-Submit')) {\n        window.sessionStorage.setItem(\"order\", window.location.href);\n    }\n});\n\nwindow.addEventListener(\"beforeunload\", (event) => {\n    if(window.location.href.includes('COPlaceOrder-Submit')) {\n        if(window.sessionStorage.getItem(\"order\")) {\n            window.sessionStorage.removeItem(\"order\");\n            window.setTimeout(function(){\n            window.location = document.getElementsByClassName('b-logo')[0].getAttribute('href');\n           },1000);\n        } else {\n            window.sessionStorage.setItem(\"order\", window.location.href);\n        }\n    }\n    window.onbeforeunload = null;\n});\n\n","window.$ = require('jquery');\n\nconst parseQueryString = (str) => Object.fromEntries(new URLSearchParams(str).entries());\n\nconst handleCommunicationAction = (action, params) => {\n    const actions = {\n        \"transactResponse\": () => {\n            $('#paymentIframe').remove();\n            $('.gift-payment-msg').show();\n        },\n        \"cancel\": () => {\n            window.location.href = \"/\";\n        }\n    };\n\n    if (actions[action]) {\n        actions[action](params);\n    }\n};\n\n$(document).ready(() => {\n    window.AuthorizeNetIFrame = window.AuthorizeNetIFrame || {};\n\n    window.AuthorizeNetIFrame.onReceiveCommunication = (querystr) => {\n        const params = parseQueryString(querystr);\n        handleCommunicationAction(params.action, params);\n    };\n\n    $('#paymentIframe').show();\n    $('#paymentForm').submit();\n});","window.$ = require('jquery');\n$(document).ready(function () {\n    const secretKey = 'G7s*9v!Q@lPz&8JdKm#T2bR^X4WpE$hM';\n\n    function createSignature(data, key) {\n        let hash = 0;\n        const str = data + key;\n        for (let i = 0; i < str.length; i++) {\n            const char = str.charCodeAt(i);\n            hash = (hash << 5) - hash + char;\n            hash |= 0; // Convert to 32bit integer\n        }\n        return hash.toString(16);\n    }\n\n    function obfuscateAndEncodeAmount(amount) {\n        const obfuscatedAmount = amount.toString().split('').reverse().join(''); // Simple obfuscation\n        const encodedAmount = btoa(obfuscatedAmount); // Base64 encoding using btoa\n        const signature = createSignature(encodedAmount, secretKey);\n        return `amount=${encodedAmount}&sig=${signature}`;\n    }\n\n    function generateSecureLink() {\n        const amount = $('#amount').val();\n        const baseUrl = $('#hiddenUrlPart').text();\n        if (amount) {\n            const queryParams = obfuscateAndEncodeAmount(amount);\n            const secureLink = `${baseUrl}?${queryParams}`;\n            $('#result').html(`<strong>Generated Link:</strong> ${secureLink}`).show();\n        } else {\n            alert('Please enter an amount.');\n        }\n    }\n\n    // Bind the click event to a button with id \"generateLinkButton\"\n    $('#generateLinkButton').on('click', generateSecureLink);\n});","/**\n * @description Handle ViewMore button behaviour and show hidden refinement after click on it.\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n */\n\nexport default function (Widget) {\n    return class PDFiltersMgr extends Widget {\n        prefs() {\n            return {\n\n                ...super.prefs() //extend preferences from parent widget class\n            };\n        }\n        init = async () => {\n            console.log('init filters widget 3');\n            this.initFilterGrid();\n            console.log('loaded');\n            document.addEventListener(\"DOMContentLoaded\", (event) => {\n            \n                // this.loadFilterLibrary()\n                    \n            });\n        }\n        filterClick = (event) => {\n            console.log('click clack', event.get(), event.data('filter').replace(/\\s/g, \"\"));\n            let filterValue = event.data('filter').replace(/\\s/g, \"\");\n            if (filterValue == 'ViewAll' || filterValue == 'all') {\n                this.iso.arrange({\n                filter: '*'\n            })\n            } else {\n                this.iso.arrange({\n                    filter: '.' + filterValue\n                })\n            }\n\n        }\n        loadFilterLibrary = ()=> {\n            const url = \"https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js\";\n            const scripts = document.getElementsByTagName('script');\n            for (var i = scripts.length; i--;){\n                if (scripts[i].src == url) {\n                    return true;\n                }\n            }\n            const script = document.createElement('script');\n            script.src = url;\n            script.async = false;\n            document.head.appendChild(script);\n        }\n        initFilterGrid = ()=> {\n            console.log('init grid');\n            var elem = document.querySelector('.experience-filterContent');\n            elem.querySelectorAll('.experience-commerce_assets-filterCard .filterItem').forEach(element => {\n                console.log('test', element);\n                const classes = element.getAttribute('data-filtername').split(',');\n                classes.forEach(className => {\n                    element.parentNode.classList.add(className.replace(/\\s/g, \"\"));\n                });\n               \n            });\n            this.iso = new window.Isotope( elem, {\n            itemSelector: '.experience-commerce_assets-filterCard',\n            percentPosition: true,\n            masonry: {\n                // use element for option\n                columnWidth: '.experience-commerce_assets-filterCard',\n                gutter: 16\n            }\n            });\n            \n        }\n    }\n}","import { submitFormJson, writeErrorInBackendErrorLogs } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n */\n\n/**\n * @description HarmonyAjaxForm implementation\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof HarmonyAjaxForm} Harmony Basic Input class\n */\nexport default function (AjaxForm) {\n    /**\n     * @class HarmonyAjaxForm\n     * @augments AjaxForm\n     */\n    class HarmonyAjaxForm extends AjaxForm {\n        /**\n         * @description Handles submit Form\n         * @returns {void|boolean} return bolean value if Form fields doen't valid\n         */\n        handleSubmit() {\n            if (this.isChildrenValid() && !this.submitting) {\n                this.submitting = true;\n                this.showProgressBar();\n                this.getById(this.prefs().submitButton, submitButton => submitButton.busy());\n                this.ref(this.prefs().errorMessageLabel).hide();\n                this.formFeild = Object.keys(this.getFormFields()).join(' > ');\n                const promise = submitFormJson(\n                    this.getFormUrl(),\n                    this.getFormFields(),\n                    this.ref('self').attr('method') === 'GET' ? 'GET' : 'POST'\n                )\n                    .then(this.onSubmitted.bind(this))\n                    .catch(this.onError.bind(this))\n                    .finally(this.afterSubmission.bind(this));\n\n                this.eventBus().emit('loader.start', promise);\n            }\n\n            return false;\n        }\n\n        /**\n         * @description After form submit function. Saves submitted forms, reloads onbeforeunload, sends gtm.form.submit event\n         * @param {any} data Response\n         * @returns {void} return bolean value if Form fields doesn't valid\n         */\n\n        onSubmitted(data) {\n            this.formFeild = Object.keys(this.getFormFields()).join(' > ');\n            const gtmData = this.prepareGtmData(data);\n            this.eventBus().emit('gtm.form.submit', gtmData);\n            super.onSubmitted(data);\n        }\n\n        /**\n         * @description Sends GTM error event\n         * @param {Error} e - error, which happend during request\n         * @returns {void}\n         */\n\n        onError(e) {\n            super.onError(e);\n            writeErrorInBackendErrorLogs(e);\n            this.eventBus().emit('gtm.error.occurred', e);\n        }\n\n        /**\n         * Prepare data to be passed to gtm\n         *\n         * @param {any} data Response from form submission\n         * @returns {object} data form gtm event\n         */\n        prepareGtmData(data) {\n            /**\n             * @description gtm Object\n             * @type {any}\n            */\n            const gtmData = {\n                formStatus: 'Success',\n                formId: this.id || this.formId,\n                formName: this.formName,\n                fieldEngagement: this.formFeild\n            };\n\n            if (data) {\n                // store customer id if available\n                if (data.externalId) {\n                    gtmData.customerId = data.externalId;\n                }\n\n                if (data.success === false) {\n                    gtmData.formStatus = 'Error: Failed Form Submission';\n\n                    if (data.fields\n                        && data.fields.length\n                    ) {\n                        gtmData.formStatus = 'Error: Form Validation';\n\n                        /**\n                         * @description Array of error messages\n                         * @type {string[]}\n                        */\n                        const errorMessages = [];\n\n                        Object.keys(data.fields).forEach(fieldKey => {\n                            errorMessages.push(data.fields[fieldKey]);\n                        });\n                        this.errorMessage = errorMessages.join('|');\n\n                        gtmData.errorMessage = this.errorMessage;\n                    }\n                }\n            }\n\n            return gtmData;\n        }\n\n        dummySubmit() {\n            const self = this;\n\n            // Set time out used to call this function after BrandSDK script will have validate form\n            setTimeout(function () {\n            // Updates error message based on French Locale\n            if (window.location.href.includes('fr_CA')) {\n                $('#firstName').siblings('ul').children('li')[0].innerText = \"Le prénom est requis.\";\n                $('#lastName').siblings('ul').children('li')[0].innerText = \"Le nom de famille est requis.\";\n                $('#dobMonth').siblings('ul').children('li')[0].innerText = \"Le mois est requis.\";\n                $('#dobDay').siblings('ul').children('li')[0].innerText = \"Le jour est requis.\";\n                $('#dobYear').siblings('ul').children('li')[0].innerText = \"L'année est requise.\";\n                $('#email').siblings('ul').children('li')[0].innerText = \"Le courriel est requis.\";\n                $('#country').siblings('ul').children('li')[0].innerText = \"Le pays est requis.\";\n                $('#zip').siblings('ul').children('li')[0].innerText = \"Le code postal est requis.\";\n                $('#userCommentLabel').siblings('ul').children('li')[0].innerText = \"Des commentaires sont requis.\";\n            }\n                if (self.formName === 'contactUsForm') {\n                    const errorContainer = self.ref('self').get().querySelector('.parsley-errors-list.filled');\n                    const valid = !errorContainer;\n                    let error;\n\n                    if (errorContainer) {\n                        error = errorContainer.innerText.trim();\n                    }\n\n                    if (!valid) {\n                        // report gtm data\n                        self.eventBus().emit('gtm.form.error', {\n                            formName: self.formName,\n                            errorMessage: error\n                        });\n                    }\n                }\n            }, 100);\n        }\n    }\n\n    return HarmonyAjaxForm;\n}\n","/**\n * @description Base HarmonyAjaxFormResponseContainer implementation\n * @param {ReturnType<typeof import('widgets/forms/AjaxFormResponseContainer').default>} AjaxFormResponseContainer Base widget for extending\n * @returns {typeof HarmonyAjaxFormResponseContainer}\n */\n\nexport default function (AjaxFormResponseContainer) {\n    /**\n     * @class HarmonyAjaxFormResponseContainer\n     * @augments Modal\n     */\n    class HarmonyAjaxFormResponseContainer extends AjaxFormResponseContainer {\n        /**\n         * @description Added possibility for redirect customer on a \"Set New Password\" page\n         * when \"Sent Code\" popup appeared (requirement from FSD).\n         */\n        cancel() {\n            this.getById('harmonyPasswordResetForm', harmonyPasswordResetForm => {\n                // Submit Account-ForgotPassword form only in case if\n                // \"Sent Code\" popup was opened.\n                if (!harmonyPasswordResetForm.ref('sentCode').get().hidden) {\n                    harmonyPasswordResetForm.superHandleSubmit();\n                } else {\n                    super.cancel();\n                }\n            });\n        }\n    }\n\n    return HarmonyAjaxFormResponseContainer;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n */\n\n/**\n * @description Harmony BasicInput implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof HarmonyBasicInput} Harmony Basic Input class\n */\nexport default function (BasicInput) {\n    /**\n     * @class HarmonyBasicInput\n     * @augments BasicInput\n     */\n    class HarmonyBasicInput extends BasicInput {\n        /**\n         * field focus handler\n         */\n        focus() {\n            const basicInput = this.ref('self').get();\n            let parentForm = null;\n\n            if (basicInput) {\n                parentForm = basicInput.closest('form');\n            }\n\n            /**\n             * @description field\n             * @type {any}\n            */\n            const field = this.ref('field').get();\n\n            if (field && parentForm && parentForm.dataset.widget) {\n                this.eventBus().emit('interacted.field', {\n                    formId: parentForm.id || parentForm.dataset.widget,\n                    fieldName: field.name,\n                    formName: parentForm.name\n                });\n            }\n\n            super.focus();\n        }\n\n        /**\n         * helper handle if field need additional validation on blur\n         */\n        blurAndValidate() {\n            this.blur();\n            this.validate();\n        }\n\n        /**\n         * Do validation on input only in case field was validated before (form submit or field validation on blur)\n         */\n        validateOnInput() {\n            if (this.validated) {\n                this.validate();\n            }\n        }\n\n        /**\n         * @description Triggers input validation process\n         * overloaded to tirgger gtm event\n         * @returns {boolean} input validation result\n         */\n        validate() {\n            this.validated = true;\n\n            const valid = super.validate();\n\n            if (!valid) {\n                // report gtm data\n                this.eventBus().emit('gtm.form.error', {\n                    formName: this.formName,\n                    errorMessage: this.error\n                });\n            }\n\n            return valid;\n        }\n    }\n\n    return HarmonyBasicInput;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/InputPassword').default>} InputPassword\n */\n\n/**\n * @description Base HarmonyInputPassword implementation\n * @param {BasicInput} InputPassword Base widget for extending\n * @returns {typeof HarmonyInputPassword} Harmony Input Password class\n */\nexport default function (InputPassword) {\n    return class HarmonyInputPassword extends InputPassword {\n        prefs() {\n            return {\n                ...super.prefs(),\n                specialCharsList: '~`!@#$%^&*()_+-=[]{}|;:\\'\"<>,.',\n                allowedLettersRegExp: '[a-zA-Z]'\n            };\n        }\n\n        init() {\n            super.init();\n            this.eventBus().on('update.cvv.validation', 'updateCvvValidation');\n        }\n\n        /**\n         * @description Checks if entered data is simple character (not a number or special character)\n         * @param {string} val - entered password\n         * @returns {boolean} check result\n         */\n        isSimpleChar(val) {\n            return !this.isNumber(val) && !this.prefs().specialCharsList.includes(val) && this.isAllowedLetter(val);\n        }\n\n        /**\n         * @description check if entered value has special letter. In implementation scope: latin letters. Could be\n         * extented by prefs.allowedLettersRegExp\n         * @param {string} val\n         * @returns {boolean} check result\n         */\n        isAllowedLetter(val) {\n            if (!this.prefs().allowedLettersRegExp) { return true; }\n            return new RegExp(this.prefs().allowedLettersRegExp, 'g').test(val);\n        }\n\n        /**\n         * Updates validation rules of CVV field based on credit card type\n         * @param {string|undefined} cardType\n         */\n        updateCvvValidation(cardType) {\n            const inputElement = this.ref('field').get();\n\n            //\n            // default values will be used if cardType is not defined\n            //\n\n            let { minLength, maxLength } = this.config.validationConfig;\n\n            // set default values from config to avoid an errors like: The maxLength provided (3) is less than the minimum bound (4)\n            // in case when visa replaced with amex\n\n            inputElement.minLength = minLength;\n            inputElement.maxLength = maxLength;\n\n            if (cardType) {\n                const length = (cardType === 'Visa' || cardType === 'Master' || cardType === 'Discover')\n                    ? 3\n                    : 4;\n\n                minLength = length;\n                maxLength = length;\n            }\n\n            //\n            // update length attributes\n            //\n\n            inputElement.minLength = minLength;\n            inputElement.maxLength = maxLength;\n\n            //\n            // if element has some entered value\n            // need to validate it using new length params\n            //\n\n            if (this.getValue()) {\n                this.validate();\n            }\n        }\n    };\n}\n","import { appendParamToURL, removeParamFromURL } from 'widgets/toolbox/util';\nimport { getJSONByUrl } from 'widgets/toolbox/ajax';\nimport { getStateID, isStateRestricted } from 'harmony/toolbox/shipToUtils';\n\n/**\n * @description Base HarmonyQuantityStepper implementation. It is used for the quanity's stepper, etc.\n * @param {InputNumber} InputNumber widget for extending\n * @returns {typeof HarmonyQuantityStepper} HarmonyQuantityStepper class\n */\nexport default function (InputNumber) {\n    /**\n     * @class HarmonyQuantityStepper\n     * @augments InputNumber\n     */\n    class HarmonyQuantityStepper extends InputNumber {\n        prefs() {\n            return {\n                accessibilityAlerts: {},\n                disabledClass: 'm-disabled',\n                shipToRestrictedStates: [],\n                isHandledRestrictedStates: false,\n                isDisabled: false,\n                wineclub : false,\n                ...super.prefs()\n            };\n        }\n\n        get constants() {\n            return {\n                ALERT_SHOW: 'alert.show'\n            };\n        }\n\n        init() {\n            super.init();\n            this.updateStepsButtons();\n            this.eventBus().on('product.quantity.disable', 'toggleDisable');\n            this.eventBus().on('product.qty.disabled', 'setQtyDisabled');\n            this.eventBus().on('product.quantity.updated', 'updateStepsButtons');\n            this.eventBus().on('addtocart.button.clicked', 'setAddToCartClicked');\n\n            // handle shipping restrictions\n            this.eventBus().on('shipto.restrictions.updated', 'handleStateRestrictions');\n            this.eventBus().on('shipto.restrictions.updated.quantity', 'handleStateRestrictions');\n            this.handleStateRestrictions();\n        }\n\n        addToCartProductId() {\n            let pid = document.getElementById('add-to-cart-product-id');\n            let productId;\n            if(this.prefs().pid){\n                productId = this.prefs().pid\n            } else {\n                 productId = pid?.getAttribute('data-pid');\n            }\n            return productId;\n        }\n\n        /**\n         * @param {string} incomingValue - set this value to input\n         * @param {boolean} silent - if set to `true` - input should not be validated against a new value\n         * @param {boolean} skipAddToCartDisable - skip disabling add to cart button\n         */\n        setValue(incomingValue, silent = false, skipAddToCartDisable) {\n            if (!incomingValue) {\n                this.processSelectedValue(incomingValue, silent);\n\n                return;\n            }\n\n            // update 'data-qty-url' attribute with incoming value\n            this.updateQunatityInDataAttrURL('qtyUrl', incomingValue);\n\n            const qtyUrl = this.ref('field').data('qtyUrl');\n\n            // in case if 'data-qty-url' is not set just proceed with initial min max thresholds\n            if (!qtyUrl) {\n                this.processSelectedValue(incomingValue, silent);\n\n                return;\n            }\n\n            // in case if current focus is not on qty input field skipAddToCartDisable should be false or not set at all\n            if (!skipAddToCartDisable) {\n                this.emit('togglebusy', true);\n            }\n\n            // ajax call to receive actual quntity thresholds from DB\n            const promise = getJSONByUrl(\n                qtyUrl\n            ).then((response) => {\n                if (!response?.product) {\n                    let element = document.getElementById('add-to-cart-' + this.addToCartProductId());\n                    element?.setAttribute('data-add-to-cart-success', 'false');\n                    return;\n                }\n                const previousValue = this.getValue();\n\n                this.step = response.product.qtyStep;\n                this.qtyInCart = response.product.qtyInCart;\n                this.config.minValue = response.product.minOrderQuantity;\n                this.config.maxValue = response.product.maxOrderQuantity;\n                this.availability = response.product.availability;\n                this.available = response.product.available;\n\n                this.processSelectedValue(incomingValue, silent);\n\n                if (!this.hasError && this.getValue() !== previousValue) {\n                    this.showQuantityChangedAlert(this.getValue());\n                }\n            }).finally(() => {\n                // allow to click add to cart button after receiveing quantity responce from DB\n                if (!skipAddToCartDisable) {\n                    this.emit('togglebusy', false);\n                }\n\n                /**\n                 * in case directly after losing focus from qty input and add to cart btn has been clicked and\n                 * selected quantity applicable to be added to cart, add to cart event triggered to avoid double click\n                 */\n                if (this.isAddToCartClicked && !this.hasError) {\n                    this.emit('triggerclick');\n                }\n\n                this.setAddToCartClicked(false);\n                let element = document.getElementById('add-to-cart-' + this.addToCartProductId());\n                    element?.setAttribute('data-add-to-cart-success', 'false');\n            });\n\n            this.eventBus().emit('loader.start', promise);\n        }\n\n        /**\n         * @description Update button enable/disable stage based on incoming value\n         */\n        updateStepsButtons() {\n            // if the elements were disabled on backend then isn't need any additional actions\n            if (this.isQuantityBlockDisabled()) {\n                return;\n            }\n\n            this.ref('moreBtn').enable();\n            this.ref('lessBtn').enable();\n\n            const value = parseInt(this.getValue(), 10);\n\n            if (this.prefs().minValue > value - this.step && !this.prefs().informAttemptDecreaseMinVal) {\n                this.ref('lessBtn').disable();\n            }\n\n            if (this.prefs().maxValue < value + this.step) {\n                this.ref('moreBtn').disable();\n            }\n        }\n\n        /**\n         * @description Update `data-attr-url` which is used for update of the product\n         * @param {string} attrName - data attr name\n         * @param {string} val - qty value\n         */\n        updateQunatityInDataAttrURL(attrName, val) {\n            let url = this.ref('field').data(attrName);\n\n            if (!url) {\n                return;\n            }\n\n            url = removeParamFromURL(url, 'quantity');\n            url = appendParamToURL(url, 'quantity', val);\n\n            this.ref('field').data(attrName, url);\n        }\n\n        /**\n         * @description Return the field of RefElement\n         * @returns {RefElement} - selected qty option (field)\n         */\n        getSelectedOptions() {\n            return this.ref('field');\n        }\n\n        /**\n         * @description Toggle disable attr of input and +/- buttons\n         * @param {any} isDisabled - is disabled flag\n         */\n        toggleDisable(isDisabled) {\n            if (isDisabled) {\n                this.ref('self').addClass(this.prefs().disabledClass);\n                this.ref('field').disable();\n                this.ref('lessBtn').disable();\n                this.ref('moreBtn').disable();\n            } else {\n                this.ref('self').removeClass(this.prefs().disabledClass);\n                this.ref('field').enable();\n\n                const value = parseInt(this.getValue(), 10);\n\n                if (value - this.step > this.prefs().minValue) {\n                    this.ref('lessBtn').enable();\n                }\n\n                if (value + this.step < this.prefs().maxValue) {\n                    this.ref('moreBtn').enable();\n                }\n            }\n        }\n\n        /**\n         * @description Check `disabled` attribute of field and increment/decrement buttons\n         * @returns {boolean} - is quantity block disabled flag\n         */\n        isQuantityBlockDisabled() {\n            return ((this.ref('moreBtn').attr('disabled') === 'disabled')\n                    && (this.ref('lessBtn').attr('disabled') === 'disabled')\n                    && (this.ref('field').attr('disabled') === 'disabled'));\n        }\n\n        /**\n         * @description Handle `decrement` button\n         */\n        decrement() {\n            const newVal = parseInt(this.getValue(), 10) - this.step;\n\n            if (newVal >= this.prefs().minValue) {\n                this.setValue(newVal.toString(), false, true);\n                this.eventBus().emit('product.changed.quantity', 'Remove');\n            } else if (this.prefs().informAttemptDecreaseMinVal) {\n                this.emit('attemptdecreaseminval');\n            }\n        }\n\n        /**\n         * @description Handle increment button\n         */\n        increment() {\n            const newVal = parseInt(this.getValue(), 10) + this.step;\n\n            if (newVal <= this.prefs().maxValue) {\n                this.setValue(newVal.toString(), false, true);\n                this.eventBus().emit('product.changed.quantity', 'Add');\n            } else {\n                this.emit('attemptincreasemaxval');\n            }\n        }\n\n        /**\n         * @description Show Quantity Exceed alert\n         */\n        showQuantityExceedAlert() {\n            const accessibilityAlerts = this.prefs().accessibilityAlerts;\n            const isWcInculded = this.prefs().wineclub;\n            let accessibilityAlert = null;\n            if(this.availability.stock > this.data('max-value')){\n                accessibilityAlert = !isWcInculded ? accessibilityAlerts.exceededmaxvaluewithinventory\n                .replace('{0}', this.config.maxValue): '' ;\n            } else {\n                accessibilityAlert = !isWcInculded ? accessibilityAlerts.exceededmaxvaluewithcart\n                .replace('{maxOrderQuantity}', this.config.maxValue): '' ;\n\n            }\n            this.eventBus().emit(this.constants.ALERT_SHOW, {\n                accessibilityAlert,\n                errorClass: true\n            });\n        }\n\n        /**\n         * @description Show Quantity Changed alert\n         * @param {string} value - changed value\n         */\n        showQuantityChangedAlert(value) {\n            const isWcInculded = this.prefs().wineclub;\n            const accessibilityAlert = !isWcInculded ? `${this.prefs().accessibilityAlerts.quantitychanged} ${value}` : '';\n\n            this.eventBus().emit(this.constants.ALERT_SHOW, {\n                accessibilityAlert\n            });\n        }\n\n        /**\n         * @description Process selected value\n         * @param {string} incomingValue - set this value to input\n         * @param {boolean} silent - if set to `true` - input should not be validated against a new value\n         */\n        processSelectedValue(incomingValue, silent) {\n            let value = null;\n\n            if (incomingValue === '' && this.prefs().allowEmpty) {\n                value = incomingValue;\n            } else {\n                const intValue = typeof incomingValue !== 'number' ? parseInt(incomingValue, 10) : incomingValue;\n\n                if (\n                    intValue >= this.prefs().minValue\n                    && intValue <= this.prefs().maxValue\n                ) {\n                    this.prevVal = intValue;\n                    this.hasError = false;\n                    value = intValue.toString();\n                } else if (intValue > this.prefs().maxValue) {\n                    // show exceed quantity flyout\n                    var _this = this;\n                    let element = document.getElementById('add-to-cart-' + this.addToCartProductId());\n                    const addToCartSuccess = element?.getAttribute('data-add-to-cart-success');\n                    if(addToCartSuccess == 'false') {\n                    setTimeout(function () {\n                        _this.showQuantityExceedAlert();\n                    }, 2000);\n                    }\n                    this.hasError = true;\n                    value = String(this.prefs().maxValue);\n                    this.setValue(value, silent, false);\n\n                    return;\n                } else if (intValue < this.prefs().minValue || Number.isNaN(intValue)) {\n                    this.hasError = false;\n                    value = String(this.prevVal || this.prefs().minValue);\n                } else {\n                    this.hasError = false;\n                    value = '';\n                }\n\n                if (intValue < 1) {\n                    incomingValue = value;\n                }\n            }\n\n            if (value) {\n                // set 'data-attr-url' that is used for update variation products on pdp\n                this.updateQunatityInDataAttrURL('attrUrl', incomingValue || value);\n                super.setValue(value, silent);\n\n                if (this.availability) {\n                    this.eventBus().emit('availability.update', {\n                        pid: this.prefs().pid,\n                        availability: this.availability,\n                        available: this.available\n                    });\n                }\n            }\n\n            // disable quantity block\n            if (this.isQtyDisabled) {\n                this.toggleDisable(this.isQtyDisabled);\n                this.setQtyDisabled(false);\n            }\n\n            // update increment/decrement buttons enabled/disabled state based on selected qty value\n            this.updateStepsButtons();\n        }\n\n        /**\n         * @description vlaidate input legacy\n         * @returns {boolean} - validation status\n         */\n        validate() {\n            if (this.prefs().skipValidation) {\n                return true;\n            }\n\n            return super.validate();\n        }\n\n        /**\n         * @description Set isAddToCartClicked attribute\n         * @param {boolean} isClicked - is add to cart clicked flag\n         */\n        setAddToCartClicked(isClicked) {\n            this.isAddToCartClicked = isClicked;\n        }\n\n        /**\n         * @description Handle shipping restrictions\n         * @param {string} stateID - state id\n         */\n        handleStateRestrictions(stateID) {\n            if (this.prefs().isDisabled || !this.prefs().isHandledRestrictedStates) {\n                return;\n            }\n\n            stateID = getStateID(stateID);\n            if (!stateID) {\n                return;\n            }\n            this.toggleDisable(isStateRestricted(stateID, this.prefs().shipToRestrictedStates));\n        }\n\n        /**\n         * @description Set isQtyDisabled attribute\n         * @param {boolean} isDisabled - is quantity disabled flag\n         */\n        setQtyDisabled(isDisabled) {\n            this.isQtyDisabled = isDisabled;\n        }\n    }\n\n    return HarmonyQuantityStepper;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/InputText').default>} InputText\n */\n/**\n * @description Base InputBirthdayDate implementation\n * @param {InputText} InputText Base widget for extending\n * @returns {typeof InputBirthdayDate} Input Birthday Date class\n */\nexport default function (InputText) {\n    class InputBirthdayDate extends InputText {\n        init() {\n            super.init();\n\n            this.setLabel();\n        }\n\n        /**\n         * @description Validate input value\n         * @returns {boolean} is input valid or not\n         */\n        isValid() {\n            var field = this.ref('field');\n            var validation = this.prefs().validationConfig;\n            var value = this.getValue();\n            var reg = new RegExp(field.attr('pattern') || '', 'g');\n\n            if (!value?.length) {\n                this.error = validation.errors.required;\n                return false;\n            }\n\n            // check regExp\n            if (!value.match(reg)) {\n                this.error = validation.errors.parse;\n                return false;\n            }\n\n            // check min value\n            var inputDate = new Date(value.replace(/-/g, '/'));\n            var min = field.data('min') ? new Date(field.data('min').replace(/-/g, '/')) : null;\n\n            // eslint-disable-next-line no-restricted-globals\n            if (inputDate instanceof Date && !isNaN(inputDate) && min instanceof Date && !isNaN(min) && !(min >= inputDate)) {\n                this.error = validation.errors.parse;\n                return false;\n            }\n            return true;\n        }\n\n        onInput(...args) {\n            super.onInput(...args);\n\n            this.setLabel();\n        }\n\n        setValue(...args) {\n            super.setValue(...args);\n\n            this.setLabel();\n        }\n\n        setLabel() {\n            this.has('label', el => {\n                el.attr('aria-label', this.ref('field').val());\n            });\n        }\n\n        ageGateEntrance(birth_day, birth_month, birth_year) {\n            let age = 0;\n\t\t\tlet today_date = new Date();\n\t\t\tlet today_year = today_date.getFullYear();\n\t\t\tlet today_month = today_date.getMonth();\n\t\t\tlet today_day = today_date.getDate();\n\t\t\tif (!birth_day || !birth_month || !birth_year) {\n\t\t\t\tage = 0;\n\t\t\t} else {\n\t\t\t\tage = today_year - birth_year;\n\n\t\t\t\tif ( today_month < (birth_month - 1)) {\n\t\t\t\t\tage--;\n\t\t\t\t}\n\t\t\t\tif (((birth_month - 1) == today_month) && (today_day < birth_day)) {\n\t\t\t\t\tage--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn age;\n\t\t}\n\n        onBirthdayChange(ele, event) {\n            let selectedDate = new Date(event.target.value);\n            let month = selectedDate.getMonth() + 1;\n            let date = selectedDate.getDate();\n            let year = selectedDate.getFullYear();\n            let cartError = JSON.parse(document.querySelector(\"[data-widget='cartMgr']\").dataset.valid).error;\n            if (cartError) {\n                document.getElementsByClassName('apple-pay-cart')[0].classList.add('inactive');\n            } else {\n                let regExp = \"^19|20[0-9]{2}[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$\";\n                let userDOB = event.target.value;\n                let res = userDOB.match(regExp);\n                if(res && this.ageGateEntrance(date, month, year) >= 21) {\n                    document.getElementById('dwfrm_shipping_shippingAddress_addressFields_birthday-error').classList.add('h-hidden');\n                    document.getElementsByClassName('apple-pay-cart')[0].classList.remove('inactive');\n                    document.getElementsByClassName('apple-pay-cart')[0].removeAttribute(\"tabIndex\");\n                } else {\n                    document.getElementById('dwfrm_shipping_shippingAddress_addressFields_birthday-error').classList.remove('h-hidden');\n                    document.getElementsByClassName('apple-pay-cart')[0].classList.add('inactive');\n                    document.getElementsByClassName('apple-pay-cart')[0].setAttribute(\"tabIndex\", \"-1\");\n                }\n            }\n        }\n    }\n\n    return InputBirthdayDate;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/InputRadio').default>} InputRadio\n */\n\nconst DATA_FIELD = '[data-ref=\"field\"]';\nconst KEY_ENTER = 13;\nconst KEY_SPACE = 32;\n\n/**\n * @description Harmony InputRadio implementation\n * @param {InputRadio} InputRadio Base widget for extending\n * @returns {typeof StatesInputRadio} Harmony Basic Input class\n */\nexport default function (InputRadio) {\n    /**\n     * @class StatesInputRadio\n     * @augments InputRadio\n     */\n    class StatesInputRadio extends InputRadio {\n        handleLabelKeydown(_, event) {\n            const { keyCode, currentTarget } = event;\n            if (keyCode === KEY_SPACE || keyCode === KEY_ENTER) {\n                event.preventDefault();\n                currentTarget.click();\n            }\n        }\n\n        /**\n         * @description Method to select radio input\n         * @param {string} value - value to be set to radio button\n         * @returns {void}\n         */\n        setValue(value) {\n            const el = (this.ref('self').get());\n\n            if (el) {\n                Array.from(el.querySelectorAll(DATA_FIELD))\n                    .forEach(elField => {\n                        const tmpEl = /** @type {HTMLInputElement} */(elField);\n                        const isChecked = tmpEl.value === value;\n                        const label = tmpEl.labels[0] || tmpEl;\n                        const parentEle = tmpEl.closest('.b-shipping_states-item');\n\n                        if (isChecked) {\n                            tmpEl.checked = true;\n                            tmpEl.setAttribute('checked', 'checked');\n                            el.setAttribute('aria-label', `Selected: ${label.textContent.trim()}.`);\n                        } else {\n                            tmpEl.checked = false;\n                            tmpEl.removeAttribute('checked');\n                        }\n\n                        parentEle.setAttribute('aria-checked', isChecked);\n                    });\n            }\n        }\n    }\n\n    return StatesInputRadio;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n */\n\n/**\n * @description Base ChangePasswordForm implementation\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof ChangePasswordForm} Change Password Form class\n */\nexport default function (AjaxForm) {\n    /**\n     * @class ChangePasswordForm\n     * @augments AjaxForm\n     * @property {string} data-widget - Widget name `changePasswordForm`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class ChangePasswordForm extends AjaxForm {\n        init() {\n            super.init();\n\n            this.eventBus().on('cognito.hook.changepassword.then', 'onChangePasswordSubmitted');\n            this.eventBus().on('cognito.hook.changepassword.catch', 'onError');\n        }\n\n        /**\n         * Overrides default handle submit form to call Cognito API with change password.\n         *\n         * @returns {boolean}\n         */\n        handleSubmit() {\n            var fields = this.getFormFields();\n\n            if (!this.isChildrenValid() || this.submitting) {\n                return false;\n            }\n\n            this.submitting = true;\n\n            this.eventBus().emit('cognito.hook.changepassword', {\n                oldPassword: fields.dwfrm_changePassword_currentpassword,\n                newPassword: fields.dwfrm_changePassword_newpassword\n            });\n\n            return false;\n        }\n\n        /**\n         * Used to reload page when password was changed.\n         */\n        onChangePasswordSubmitted() {\n            const accessibilityAlert = this.prefs().accessibilityAlerts.passwordChanged;\n\n            this.afterSubmission();\n            this.eventBus().emit('alert.show', { accessibilityAlert });\n\n            window.location.assign(this.prefs().action);\n        }\n    }\n\n    return ChangePasswordForm;\n}\n","/**\n * @description HarmonyEmailSubscribe implementation\n * @param {ReturnType<typeof import('widgets/forms/ajax/EmailSubscribe').default>} EmailSubscribe Base widget for extending\n * @returns {typeof HarmonyEmailSubscribe} HarmonyEmailSubscribe class\n */\n\nexport default function (EmailSubscribe) {\n    class HarmonyEmailSubscribe extends EmailSubscribe {\n        showAgreeToPrivacy() {\n        }\n\n        /**\n         * @param {any} data Server JSON response once form submitted\n         */\n        onSubmitted(data) {\n            const gtmData = this.prepareGtmData(data);\n\n            this.eventBus().emit('gtm.form.submit', gtmData);\n\n            if (data.success) {\n                this.eventBus().emit('monetate.track.newsletter.signup');\n            }\n\n            super.onSubmitted(data);\n        }\n    }\n\n    return HarmonyEmailSubscribe;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/ajax/LoginForm').default>} LoginForm\n */\n\n/**\n * @description Base LoginForm implementation\n * @param {LoginForm} LoginForm Base widget for extending\n * @returns {LoginForm} Harmony Login Form class\n */\n\nexport default function (LoginForm) {\n    /**\n     * @class LoginForm\n     * @augments LoginForm\n     * @property {string} data-widget - Widget name `harmonyLoginForm`\n     * @property {string} data-event-submit - Event listener for form submission\n    */\n    class HarmonyLoginForm extends LoginForm {\n        prefs() {\n            return {\n                ...super.prefs(),\n                errorMessageLabel: 'errorMessageLabel',\n                submitButton: 'submitLoginButton',\n                scope: 'login'\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.defineItems(this);\n            if ($('#event-enquiry-form').length) {\n                this.setEventEnquiryForm();\n            }\n            /**\n             * -- cognito.hook.signin.then --\n             * When cognito sign-in process has been successfully done.\n             */\n            this.eventBus().on('cognito.hook.signin.then', 'signInSubmitted');\n\n            /**\n             * -- cognito.hook.signin.catch --\n             * When cognito sign-in process has been failed.\n             */\n            this.eventBus().on('cognito.hook.signin.catch', 'signInCatch');\n\n            /**\n             * -- verificationcodeform.backtologin --\n             * When \"Back to login\" (on login form) was triggered.\n             */\n            this.eventBus().on('verificationcodeform.backtologin', 'show');\n\n            /**\n             * -- harmonytab.change --\n             * When Login/Registration tabs has been changed.\n             */\n            this.eventBus().on('harmonytab.change', 'initViewState');\n\n            /**\n             * When subsciprion status was synced with Cognito.\n             */\n            this.eventBus().on('sync.newsletter.subscription.then', 'onSyncedSubscription');\n        }\n\n        /**\n         * @param panel\n         * @description Emits when tab was changed to prepare default state view.\n         * @returns {void}\n         */\n        initViewState(panel) {\n            if (panel === 'login') {\n                this.clearError();\n                this.show();\n            }\n        }\n\n        /**\n         * Handle when social login buttons was clicked.\n         * Emitted from form in ISML button attribute.\n         *\n         * @param {object} target\n         */\n        socialLogin(target) {\n            var socialNetwork = target.config.socialNetwork;\n            var isWCSignUp = '';\n            var isCheckout = !!this.prefs().cartUrl;\n\n            if (document.getElementById('WcSignupData')) {\n                isWCSignUp = document.getElementById('WcSignupData').getAttribute('data-wc');\n            }\n\n            if (this.submitting) {\n                return;\n            }\n\n            this.beforeSubmission();\n\n            if (!socialNetwork) {\n                return;\n            }\n\n            this.eventBus().emit('cognito.hook.sociallogin', { socialNetwork, isCheckout, isWCSignUp});\n        }\n\n        /**\n         * @description Called when form was submitted for emit Amazon Cognito\n         * sign in call.\n         *\n         * @returns {boolean} false - to transfer control to the Cognito component.\n         */\n        handleSubmit() {\n            const fields = this.getFormFields();\n\n            if (!this.isChildrenValid() || this.submitting) {\n                return false;\n            }\n            this.beforeSubmission();\n            this.eventBus().emit('cognito.hook.signin', {\n                username: ( this.prefs().disableCaseSensitive ) ? fields.dwfrm_login_email.toLowerCase() : fields.dwfrm_login_email,\n                password: fields.dwfrm_login_password,\n                scope: this.prefs().scope\n            });\n\n            return false;\n        }\n\n        handleEventEnquirySubmit() {\n            const fields = this.getFormFields();\n            var underAgeStatus = document.getElementById('dwfrm_eventEnquiry_underAge');\n            if(!underAgeStatus.checked){\n                document.getElementById('dwfrm_eventEnquiry_underAgeExplanation').removeAttribute('required');\n            } else {\n                document.getElementById('dwfrm_eventEnquiry_underAgeExplanation').setAttribute('required',true);\n            }\n            if (!this.isChildrenValid()) {\n                return false;\n            }\n            if(!underAgeStatus.checked){\n                fields['dwfrm_eventEnquiry_underAgeExplanation'] = '';\n            }\n            var alternateDate = document.getElementById('alternate-date');\n            if(fields['dwfrm_eventEnquiry_alternateDate'] === fields['dwfrm_eventEnquiry_preferredDate']){\n                alternateDate.children[0].children[1].textContent = 'Alternate Date cannot be the same as the Preferred Date';\n                alternateDate.children[0].children[1].setAttribute('style', 'display:block !important');\n                window.scrollTo(0,800);\n                return false;\n            } else {\n                alternateDate.setAttribute('style', 'display:none');\n            }\n\n            this.beforeSubmission();\n            this.showProgressBar();\n            const promise = submitFormJson(\n                document.getElementById('event-form').action,\n                fields,\n                'POST'\n            ).then((response) => {\n                document.getElementById('event-enquiry-form').setAttribute('style', 'display:none');\n                document.getElementById('event-enquiry-form-sent').style.display = 'block';\n                const customerData = {\n                    ...this.getFormFields(),\n                    ...this.config.customerOrderData\n                };\n                const isSubscribed = customerData.dwfrm_eventEnquiry_newsletterUpdate === 'true';\n\n                if (response.success) {\n                    document.getElementById('successMessage').textContent = response.successMessage;\n                    window.scrollTo(0,0);\n                    if (isSubscribed) {\n                        this.eventBus().emit('gtm.subscribe.success');\n                    }\n                    var gtmData = {\n                        \"event\" : \"form-submit\",\n                        \"formName\" : \"event-enquiry-form\",\n                        \"formAction\" :\"Submit\",\n                        \"formStatus\" : \"Success\",\n                        \"fieldEngagement\" : Object.keys(fields).join(' > ')\n                    };\n\n                    dataLayer.push(gtmData);\n                } else {\n                    document.getElementById('successMessage').textContent = response.errorMessage;\n                    var gtmData = {\n                        event: \"error\",\n                        errorMessage: response.errorMessage\n                    };\n                    dataLayer.push(gtmData);\n                }\n\n\n            }).finally(() => {\n                this.afterSubmission();\n            });\n\n        }\n\n        setEventEnquiryForm() {\n            var currentDate = new Date();\n            var month;\n            if(currentDate.getMonth()<10){\n                month = '0'+parseInt(currentDate.getMonth()+1);\n            } else {\n                month = parseInt(currentDate.getMonth()+1);\n            }\n            var dateInCalenderFormat = currentDate.getFullYear()+'-'+ month +'-'+currentDate.getDate();\n            document.getElementById('dwfrm_eventEnquiry_preferredDate').setAttribute('min',dateInCalenderFormat);\n            document.getElementById('dwfrm_eventEnquiry_alternateDate').setAttribute('min',dateInCalenderFormat);\n            var underAgeStatus = document.getElementById('dwfrm_eventEnquiry_underAge');\n            var underAgeExplanation = document.getElementById('underAgeExplanation');\n            underAgeExplanation.style.display = 'none';\n            underAgeStatus.addEventListener('change',function(){\n                if(underAgeStatus.checked) {\n                    underAgeExplanation.style.display = 'block';\n                } else {\n                    underAgeExplanation.style.display = 'none';\n                }\n            })\n        }\n\n        /**\n         * @description This method will be called after cognito.hook.-sign-in finished.\n         * \"Cognito\" component will call hook cognito.hook.sign-in.finished.\n         *\n         * @param {object} data - object with data from Amazon Cognito.\n         * @param {string} data.userSub - external id on Amazon Cognito side.\n         *\n         * @returns {void}\n        */\n        signInSubmitted(data) {\n            submitFormJson(\n                this.getFormUrl(),\n                {\n                    // attributes from cognito like: firstname, lastname, email, sub, phone\n                    ...data.attributes,\n\n                    // pass \"remember me\" key/value\n                    ...this.getFormFields()\n                },\n                'POST'\n            )\n                .then((response) => {\n                    // TODO:HARMONY:BE Complete check for social login on Phase2\n                    // Email, Google or Facebook should be for loginMethod\n                    this.eventBus().emit('gtm.user.login', {\n                        loginMethod: 'Email',\n                        commerceKey: data.attributes.sub,\n                        sfPersonAccountId: response.sfPersonAccountId\n                    });\n                    this.onSubmitted(response);\n                })\n                .catch(this.onError.bind(this));\n        }\n\n        /**\n         * @param response\n         * @description when form has been submitted.\n         */\n        onSubmitted(response) {\n            this.eventBus().emit('cognito.hook.syncsubscription', response);\n        }\n\n        /**\n         * @param response\n         * @description when subscription has been synced with cognito.\n         */\n        onSyncedSubscription(response) {\n            super.onSubmitted(response);\n            this.afterSubmission();\n        }\n\n        /**\n         * @description Handle sign in errors.\n         *\n         * @param {object} error\n         * @param {boolean} error.confirmException - value which indicates that it was\n         * confirm exception. In other cases it is an error with auth, and we need just\n         * show an error. In case it is confirmation error (customer while login got an error\n         * that email not confirmed).\n         */\n        signInCatch(error) {\n            const fields = this.getFormFields();\n\n            this.afterSubmission();\n\n            if (error.confirmException) {\n                this.hide();\n                this.eventBus().emit('harmonyloginform.signin.confirmation.exception', {\n                    ...error,\n                    email: fields.dwfrm_login_email,\n                    password: fields.dwfrm_login_password\n                });\n                $('.wc-login-form').removeClass('h-hidden');\n                $('.mr-register-form').addClass('h-hidden');\n                $('.mr-login-form #dwfrm_login_verificationCode').attr(\"aria-label\",\"Code\");\n                this.eventBus().emit('cognito.hook.resendconfirmemail', {\n                    username: fields.dwfrm_login_email\n                });\n                return;\n            }\n\n            this.onError(error);\n        }\n\n        /**\n         * @description when submitting has been done.\n         */\n        afterSubmission() {\n            super.afterSubmission();\n            this.resolveLoader();\n        }\n\n        /**\n         * @description Action which needs to be done before submit handleSubmit function.\n         */\n        beforeSubmission() {\n            this.getById(this.prefs().submitButton, submitButton => submitButton.busy());\n            this.clearError();\n            this.submitting = true;\n            this.eventBus().emit('loader.start', new Promise((resolve) => {\n                this.resolve = resolve;\n            }));\n        }\n\n        /**\n         * @description resolve loader promise for hide overlay.\n         * @returns {void}\n         */\n        resolveLoader() {\n            if (typeof this.resolve === 'function') {\n                this.resolve();\n            }\n        }\n\n        /**\n         * @description Handles an error, which happens during request (for ex. 500 response)\n         * @param {Error} e - error, which happend during request\n         * @returns {void}\n         */\n        onError(e) {\n            super.onError(e);\n            this.afterSubmission();\n        }\n\n        /**\n         * @description show widget and make focus on a proper field.\n         * @returns {void}\n         */\n        show() {\n            super.show();\n            this.setFocusToCurrentItem();\n        }\n    }\n\n    return HarmonyLoginForm;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n */\n\n/**\n * @description Base HarmonyPasswordResetForm implementation\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof AjaxForm} Password reset form\n */\nexport default function (AjaxForm) {\n    /**\n     * @class HarmonyPasswordResetForm\n     * @augments AjaxForm\n     */\n\n    class HarmonyPasswordResetForm extends AjaxForm {\n        init() {\n            super.init();\n            this.eventBus().on('cognito.hook.forgotpassword.then', 'forgotPasswordThen');\n            this.eventBus().on('cognito.hook.forgotpassword.catch', 'onError');\n            this.eventBus().on('cognito.hook.forgotpassword.confirmationcodesubmit.then', 'onConfirmSubmitted');\n            this.eventBus().on('cognito.hook.forgotpassword.confirmationcodesubmit.catch', 'onError');\n            this.eventBus().on('cognito.hook.signin.then', 'onSignInSubmitted');\n        }\n\n        /**\n         * Modal window on login page, forgot password CTA.\n         *\n         * @returns {boolean}\n         */\n        handleSubmit() {\n            if (!this.isChildrenValid()) {\n                return false;\n            }\n\n            const fields = this.getFormFields();\n\n            this.eventBus().emit('cognito.hook.forgotpassword', {\n                username: ( this.prefs().disableCaseSensitive ) ? fields.dwfrm_profile_resetPassword_email.toLowerCase() : fields.dwfrm_profile_resetPassword_email,\n                scope: this.prefs().scope\n            });\n\n            return false;\n        }\n\n        /**\n         * Success forgot password response from Amazon Cognito.\n         * For modal window we need to submit form.\n         *\n         * For \"Set New Password\" page it is \"Resend\" CTA was called and we\n         * do not need submit any form. Do nothing.\n         *\n         * @param {object} data\n         * @param {string} data.scope - who has submitted a hook.\n         */\n        forgotPasswordThen(data) {\n            if (data.scope && data.scope === 'modalwindow') {\n                this.ref('resetPassword').hide();\n                this.ref('sentCode').show();\n                this.focusFirst('sentCode');\n            }\n        }\n\n        superHandleSubmit() {\n            super.handleSubmit();\n        }\n\n        /**\n         * Handle reset password form. It is \"Set New Password\" page.\n         * Customer need pass userName, code (verification code from email), newPassword\n         *\n         * Cognito API will be called to finish password change submit.\n         *\n         * @returns {boolean}\n         */\n        handlePassword() {\n            if (!this.isChildrenValid()) {\n                return false;\n            }\n\n            const fields = this.getFormFields();\n\n            this.eventBus().emit('cognito.hook.forgotpassword.confirmationcodesubmit', {\n                userName: ( this.prefs().disableCaseSensitive ) ? fields.dwfrm_profile_resetPassword_email.toLowerCase() : fields.dwfrm_profile_resetPassword_email,\n                code: fields.dwfrm_profile_login_newpasswords_verificationCode,\n                newPassword: fields.dwfrm_profile_login_newpasswords_newpassword\n            });\n\n            return false;\n        }\n\n        /**\n         * When change password was submitted we need to sign-in customer.\n         * This function will redirect customer to the login page.\n         */\n        onConfirmSubmitted() {\n            const container = this.ref('container');\n            this.has('confirmation', function (item) {\n                item.show();\n                container.remove();\n            });\n        }\n\n        /**\n         * After customer was signed-in at Cognito. We need to sign-in it\n         * on SFCC side.\n         *\n         * @param {object} data response data from amazon cognito api call.\n         * @param {string} data.scope scope who was submitted sign-in flow. those\n         * component must response for it as we may have few components on a page\n         * which subscribed to the emitter.\n         */\n        onSignInSubmitted(data) {\n            if (data.scope === 'resetpassword') {\n                const promise = submitFormJson(\n                    this.prefs().login,\n                    data.attributes,\n                    'POST'\n                )\n                    .then(this.onSubmitted.bind(this))\n                    .catch(this.onError.bind(this))\n                    .finally(this.afterSubmission.bind(this));\n\n                this.eventBus().emit('loader.start', promise);\n            }\n        }\n\n        /**\n         * Resend verification code to the customer email.\n         * It is \"Resend\" button on a form.\n         */\n        handleResend() {\n            const fields = this.getFormFields();\n\n            this.eventBus().emit('cognito.hook.forgotpassword', {\n                username: fields.dwfrm_profile_resetPassword_email\n            });\n        }\n    }\n\n    return HarmonyPasswordResetForm;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n */\n\n/**\n * @description Base RegisterForm implementation\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof RegisterForm} Email Subscribe Form class\n */\nexport default function (AjaxForm) {\n    /**\n     * @class RegisterForm\n     * @augments AjaxForm\n     * @classdesc Serves email subscription form in footer, sends AJAX request to server.\n     * @property {string} data-widget - Widget name `registerForm`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class RegisterForm extends AjaxForm {\n        prefs() {\n            return {\n                ...super.prefs(),\n                submitButton: 'submitRegisterButton',\n                scope: 'registration'\n            };\n        }\n\n        init() {\n            super.init();\n\n            /**\n             * -- cognito.hook.signup.then --\n             * When cognito sign-up process has been successfully done.\n             */\n            this.eventBus().on('cognito.hook.signup.then', 'signUpSubmitted');\n\n            /**\n             * -- cognito.hook.signup.catch --\n             * When cognito sign-up process has been failed.\n             */\n            this.eventBus().on('cognito.hook.signup.catch', 'onError');\n\n            /**\n             * -- harmonytab.change --\n             * When Login/Registration tabs has been changed.\n             */\n            this.eventBus().on('harmonytab.change', 'initViewState');\n        }\n\n        /**\n         * @param panel\n         * @description Emits when tab was changed to prepare default state view.\n         * @returns {void}\n         */\n        initViewState(panel) {\n            if (panel === 'register') {\n                this.clearError();\n                this.show();\n            }\n        }\n\n        /**\n         * @description Called when form was submitted for emit Amazon Cognito\n         * sign up call.\n         *\n         * @returns {boolean} false - to transfer control to the Cognito component.\n         */\n        handleSubmit() {\n            if (!this.isChildrenValid() || this.submitting) {\n                return false;\n            }\n\n            this.beforeSubmission();\n\n            const fields = this.getFormFields();\n            const isSubscribed = fields.dwfrm_profile_customer_newsletterSubscription === 'true';\n            let fieldsObject = {\n                username: ( this.prefs().disableCaseSensitive ) ? fields.dwfrm_profile_customer_email.toLowerCase() : fields.dwfrm_profile_customer_email,\n                password: fields.dwfrm_profile_login_password,\n                email: ( this.prefs().disableCaseSensitive ) ? fields.dwfrm_profile_customer_email.toLowerCase() : fields.dwfrm_profile_customer_email,\n                firstName: fields.dwfrm_profile_customer_firstname,\n                lastName: fields.dwfrm_profile_customer_lastname,\n                birthDate: fields.dwfrm_profile_customer_birthday,\n                newsletterSubscription: fields.dwfrm_profile_customer_newsletterSubscription || 'false',\n                phoneNumber: fields.dwfrm_profile_customer_phone,\n            };\n            if(fields.dwfrm_profile_customer_state) {\n                fieldsObject['state'] = fields.dwfrm_profile_customer_state;\n            }\n            this.eventBus().emit('cognito.hook.signup', fieldsObject);\n\n            if (isSubscribed) {\n                this.eventBus().emit('gtm.subscribe.success');\n            }\n\n            return false;\n        }\n\n        /**\n         * @description Used to submit form after customer was created on Cognito side.\n         *\n         * @param {object} data\n         * @param {string} data.userSub - external id which used for create customer\n         * on SFCC side. This is customer identifier.\n         * @returns {void}\n         */\n        signUpSubmitted(data) {\n            this.submitting = false;\n            this.getById('dwfrm_profile_externalID', input => {\n                input.setValue(data.userSub, true);\n            });\n            super.handleSubmit();\n        }\n\n        /**\n         * Calls parent onSubmitted with emitter which will be used in\n         * verification form widget to show it.\n         *\n         * @param {object} data - Data which was returned by parent handleSubmit\n         * @returns {void}\n         */\n        onSubmitted(data) {\n            super.onSubmitted(data);\n            this.afterSubmission();\n            this.hide();\n            this.eventBus().emit('registrationform.submitted', data);\n            this.eventBus().emit('monetate.track.account.create');\n\n            if (data.newsletterSubscription.checked) {\n                this.eventBus().emit('monetate.track.newsletter.signup');\n            }\n        }\n\n        /**\n         * @description Show an error only in case if it was emitted to registration form scope.\n         *\n         * @param {object} error\n         * @param {string} error.scope - scope for which was emitted current function.\n         * @returns {void}\n         */\n        onError(error) {\n            if (error.scope && error.scope !== 'registration') {\n                return;\n            }\n            this.afterSubmission();\n            super.onError(error);\n        }\n\n        /**\n         * @description Action which needs to be done before submit handleSubmit function.\n         * @returns {void}\n         */\n        beforeSubmission() {\n            this.getById(this.prefs().submitButton, submitButton => submitButton.busy());\n            this.clearError();\n            this.submitting = true;\n            this.eventBus().emit('loader.start', new Promise((resolve) => {\n                this.resolve = resolve;\n            }));\n        }\n\n        /**\n         * @description when submitting has been done.\n         */\n        afterSubmission() {\n            super.afterSubmission();\n            this.resolveLoader();\n        }\n\n        /**\n         * @description resolve loader promise for hide overlay.\n         * @returns {void}\n         */\n        resolveLoader() {\n            if (typeof this.resolve === 'function') {\n                this.resolve();\n            }\n        }\n\n        /**\n         * Prepare data to be passed to gtm\n         *\n         * @param {any} data Response from form submission\n         * @returns {object} data form gtm event\n         */\n        prepareGtmData(data) {\n            /**\n             * @description gtm Object\n             * @type {any}\n            */\n            const gtmData = {\n                formStatus: 'Success',\n                formId: this.id || this.formId,\n                formName: this.formName\n            };\n\n            if (data) {\n                // store customer info if available\n                if (data.sfPersonAccountId) {\n                    gtmData.sfPersonAccountId = data.sfPersonAccountId;\n                }\n                if (data.externalId) {\n                    gtmData.commerceKey = data.externalId;\n                }\n\n                if (data.success === false) {\n                    gtmData.formStatus = 'Error: Failed Form Submission';\n\n                    if (data.fields\n                        && data.fields.length\n                    ) {\n                        gtmData.formStatus = 'Error: Form Validation';\n\n                        /**\n                         * @description Array of error messages\n                         * @type {string[]}\n                        */\n                        const errorMessages = [];\n\n                        Object.keys(data.fields).forEach(fieldKey => {\n                            errorMessages.push(data.fields[fieldKey]);\n                        });\n                        this.errorMessage = errorMessages.join('|');\n\n                        gtmData.errorMessage = this.errorMessage;\n                    }\n                }\n            }\n\n            return gtmData;\n        }\n    }\n\n    return RegisterForm;\n}\n","export default function (Modal) {\n    class BrowsingOnlyModal extends Modal {\n        accept() {\n            this.eventBus().emit('shiptostate.submit');\n        }\n\n        showModal(...args) {\n            super.showModal(...args);\n\n            this.eventBus().emit('header.set.active.state');\n        }\n\n        closeModal(...args) {\n            super.closeModal(...args);\n\n            this.eventBus().emit('header.remove.active.state');\n        }\n    }\n    return BrowsingOnlyModal;\n}\n","import { setCookie, getCookie } from 'widgets/toolbox/cookie';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Dismiss block implementation. Value is stored in cookies.\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof CookiesDismissBlock} Cookie Dismiss Block class\n */\nexport default function (Widget) {\n    /**\n     * @class CookiesDismissBlock\n     * @augments Widget\n     * @classdesc Promo header widget, which could contain dynamic markup. Could be dismissed.\n     * @property {string} data-widget - Widget name `CookiesDismissBlock`\n     * @property {string} data-key - Key for document.cookie to store header banner display status.\n     * If value exists - header will not be shown.\n     * @example\n     * // use this code to display widget\n     * <div\n     *     data-widget=\"CookiesDismissBlock\"\n     *     data-key=\"hide_header_banner\"\n     * >\n     *     ... widget markup\n     *     <button data-event-click.once.prevent=\"dismiss\">close</button>\n     * </div>\n     */\n    class CookiesDismissBlock extends Widget {\n        /**\n         * @description Preferences\n         * @returns {object} Preferences object\n         */\n        prefs() {\n            return {\n                classesEnabled: 'm-visible',\n                key: 'hide_header_top_promoblock',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            super.init();\n\n            // get cookie value\n            const CookiesDismissBlockStatus = getCookie(this.prefs().key);\n            // check cookie value and set banner class\n            if (!CookiesDismissBlockStatus || CookiesDismissBlockStatus !== '1') {\n                this.ref('self').addClass(this.prefs().classesEnabled);\n                this.eventBus().emit('cookiedismissblock.updated');\n            }\n        }\n\n        /**\n         * Dismiss block\n         */\n        dismiss() {\n            // remove visibility class from element\n            this.ref('self').removeClass(this.prefs().classesEnabled);\n            // set cookie\n            setCookie(this.prefs().key, '1', 0);\n            // emit event for other widgets\n            this.eventBus().emit('cookiedismissblock.updated');\n        }\n    }\n\n    return CookiesDismissBlock;\n}\n","import { getContentByUrl } from 'widgets/toolbox/ajax';\n\n/**\n * @description EinsteinCarousel implementation\n * @param {Carousel} Carousel\n * @returns {typeof EinsteinCarousel}\n */\nexport default function (Carousel) {\n    return class EinsteinCarousel extends Carousel {\n        prefs() {\n            return {\n                recommender: '',\n                recommenderType: '',\n                productLoadUrl: '',\n                categoryId: '',\n                secondaryProductId: '',\n                alternativeGroupType: '',\n                alternativeGroupId: '',\n                primaryProductId: '',\n                template: 'commerce_assets/product/productTileWrapper',\n                iterationDelay: 250,\n                maxIterationsCount: 10,\n                ...super.prefs()\n            };\n        }\n\n        initCarousel() {\n            // CQuotient library included in the end of the page\n            // and sometimes not available, when EinsteinCarousle initializes.\n            // Therefore, we run an interval check to handle such cases.\n            const { maxIterationsCount, iterationDelay } = this.prefs();\n            let iteration = 0;\n\n            this.interval = window.setInterval(() => {\n                if (++iteration === maxIterationsCount) {\n                    window.clearInterval(this.interval);\n                }\n\n                this.getEinsteinUtils();\n                this.loadRecommendations();\n            }, iterationDelay);\n        }\n\n        getEinsteinUtils() {\n            const einsteinUtils = window.CQuotient;\n\n            if (einsteinUtils\n                && (typeof einsteinUtils.getCQUserId === 'function')\n                && (typeof einsteinUtils.getCQCookieId === 'function')\n                && (typeof einsteinUtils.getRecs === 'function')\n            ) {\n                this.einsteinUtils = einsteinUtils;\n                window.clearInterval(this.interval);\n            }\n        }\n\n        loadRecommendations() {\n            if (!this.einsteinUtils) {\n                return;\n            }\n\n            const { recommenderType } = this.prefs();\n\n            if (recommenderType === 'category') {\n                this.processRecommendationsTile(this.createCategoryAnchor());\n            } else if (recommenderType === 'product') {\n                this.processRecommendationsTile(this.createProductAnchor());\n            } else {\n                this.processRecommendationsTile();\n            }\n        }\n\n        createCategoryAnchor() {\n            return [{\n                id: this.prefs().categoryId\n            }];\n        }\n\n        createProductAnchor() {\n            const {\n                primaryProductId, secondaryProductId, alternativeGroupType, alternativeGroupId\n            } = this.prefs();\n\n            return [{\n                id: primaryProductId,\n                sku: secondaryProductId,\n                type: alternativeGroupType,\n                alt_id: alternativeGroupId\n            }];\n        }\n\n        processRecommendationsTile(anchorsArray) {\n            const {\n                getCQUserId, getCQCookieId, getRecs, clientId\n            } = this.einsteinUtils;\n            const recommender = this.prefs().recommender;\n            const params = {\n                userId: getCQUserId(),\n                cookieId: getCQCookieId(),\n                ccver: '1.01'\n            };\n\n            if (anchorsArray) {\n                params.anchors = anchorsArray;\n            }\n\n            getRecs(clientId, recommender, params, this.recommendationsReceived.bind(this));\n        }\n\n        recommendationsReceived(einsteinResponse) {\n            const { recommender, list } = this.prefs();\n            const recommendedProducts = einsteinResponse[recommender].recs;\n\n            if (!recommendedProducts || !recommendedProducts.length) {\n                return;\n            }\n\n            const { template, productLoadUrl } = this.prefs();\n            const components = recommendedProducts.map((recommendedProduct) => ({\n                model: {\n                    type: 'product',\n                    id: recommendedProduct.id,\n                    list: list\n                },\n                template\n            }));\n\n            getContentByUrl(productLoadUrl, {\n                components: JSON.stringify(components)\n            }).then((html) => {\n                this.ref('elemCarouselTrack').els[0].insertAdjacentHTML('beforeend', html);\n                this.ref('self').show();\n                super.initCarousel();\n            });\n        }\n    };\n}\n","import Swiper, { Navigation, Pagination } from 'swiper';\n\nSwiper.use([Navigation, Pagination]);\n\n/**\n * @description Swiper Carousel implementation\n * @param {CarouselSwiper} CarouselSwiper Base widget for extending\n * @returns {typeof ExtendedCarouselSwiper}\n */\nexport default function (CarouselSwiper) {\n    return class ExtendedCarouselSwiper extends CarouselSwiper {\n        prefs() {\n            return {\n                freeMode: true,\n                clickablePagination: false,\n                ...super.prefs()\n            };\n        }\n\n        activate() {\n            if (!this.cleanUpSwiper) {\n                const carouselContent = this.ref('self').get();\n\n                if (carouselContent) {\n                    const options = this.getOptions();\n\n                    this.initControls(options);\n                    this.swiper = new Swiper(carouselContent, options);\n                    this.cleanUpSwiper = () => {\n                        if (this.swiper) {\n                            this.swiper.destroy(true, true);\n                            this.swiper = undefined;\n                            this.cleanUpSwiper = undefined;\n                        }\n                    };\n                    this.afterActivate();\n                    this.onDestroy(this.cleanUpSwiper);\n                }\n            }\n        }\n\n        initControls(options) {\n            if (!options) {\n                return;\n            }\n\n            super.initControls(options);\n\n            if (options.pagination) {\n                options.pagination.clickable = this.prefs().clickablePagination;\n            }\n        }\n\n        getOptions() {\n            const { freeMode } = this.prefs();\n\n            return {\n                freeMode,\n                ...super.getOptions()\n            };\n        }\n    };\n}\n","import { isLargeViewAndUp } from 'widgets/toolbox/viewtype';\n/**\n * @typedef {typeof import('widgets/global/AccordionItem').default} AccordionItem\n */\n\n/**\n * @description Base AccordionItem extension\n * @param {ReturnType<typeof import('widgets/global/AccordionItem').default>} AccordionItem Base widget for extending\n * @returns {typeof HarmonyAccordionItem} HarmonyAccordionItem class\n */\nexport default function (AccordionItem) {\n    /**\n     * @class HarmonyAccordionItem\n     * @augments AccordionItem\n     * @classdesc HarmonyAccordionItem widget, that adds extra functionality(classes toggle, etc).\n     * Extends Base AccordionItem. For more details see global/MenuPanel widget.\n     */\n    class HarmonyAccordionItem extends AccordionItem {\n        /**\n         * @description Returns Widget configuration object\n         * @returns {object} Widget configuration object\n         */\n        prefs() {\n            return {\n                classesOpen: 'm-opened',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            var itemInnerElement = this.ref('accordionItemPanelInner').get();\n            this.initialHeight = itemInnerElement.offsetHeight;\n            const horizontalPanel = $('.b-refinements_accordion-horizontal_item').attr('data-horizontal');\n            if (isLargeViewAndUp()) {\n                if (!horizontalPanel) {\n                    this.ref('accordionItemPanel').get().style.height = this.initialHeight + 'px';\n                }\n            }\n        }\n\n        /**\n         * @description Define attributes\n         * @param {boolean} [isOpen] Panel open flag\n         * @returns {void}\n         */\n        defineAttributes(isOpen) {\n            super.defineAttributes(isOpen);\n\n            const accordionItemBtn = this.ref('accordionItemBtn');\n            const accordionItemPanel = this.ref('accordionItemPanel');\n            const accordionItemPanelInner = this.ref('accordionItemPanelInner');\n            if($(\"#payment-details-CREDIT_CARD\").hasClass('b-payment_option-content')){\n                accordionItemPanel.attr('role', 'form');\n            }\n            if (isOpen) {\n                accordionItemBtn.addClass(this.prefs().classesOpen);\n                accordionItemPanel.addClass(this.prefs().classesOpen);\n                accordionItemPanelInner.addClass(this.prefs().classesOpen);\n            }\n        }\n\n        /**\n         * @description Open panel\n         * @returns {void}\n         */\n        openPanel() {\n            super.openPanel();\n\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.addClass(this.prefs().classesOpen);\n            });\n\n            this.has(this.prefs().accordionItemPanel, (accordionItemPanel) => {\n                accordionItemPanel.addClass(this.prefs().classesOpen);\n            });\n\n            this.has(this.prefs().accordionItemPanelInner, (accordionItemPanelInner) => {\n                accordionItemPanelInner.addClass(this.prefs().classesOpen);\n            });\n        }\n\n        /**\n         * @description Restores panel height, when user clicks on 'View more' and then close, open panel\n         * @param {object} [accordionItemPanel] One of the panels for which we need to restore height\n         * @returns {void}\n         */\n\n        resetHeight(viewMore, height) {\n            this.ref('accordionItemPanel').get().style.height = height + 'px';\n        }\n\n        togglePanel(ele, event) {\n            let horizontalPanel = $('.b-refinements_accordion-horizontal_item').attr('data-horizontal');\n            if(horizontalPanel) {\n                var elementClassList = event.target && event.target.classList;\n                var filtersClassList = ['b-refinement_list-checkbox', 'b-refinement_checkbox',\n                                        'b-refinement_navigation-link', 'f-input_radio',\n                                        'b-refinement_list-label' ]\n                if(elementClassList ? (filtersClassList.filter(value => elementClassList.contains(value)).length === 0) : true) {\n                    super.togglePanel();\n                }\n            } else {\n                super.togglePanel();\n            }\n            if (this.isPanelOpen) {\n                this.getById('viewMore', (viewMoreButton) => {\n                    viewMoreButton.reinitViewMore();\n                });\n                if(!horizontalPanel) {\n                    this.ref('accordionItemPanel').get().style.height = this.initialHeight + 'px';\n                }\n            }\n            this.eventBus().emit('accordion.item.toggled', this);\n        }\n\n        /**\n         * @description Close panel\n         * @returns {void}\n         */\n        closePanel() {\n            super.closePanel();\n\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.removeClass(this.prefs().classesOpen);\n            });\n\n            this.has(this.prefs().accordionItemPanel, (accordionItemPanel) => {\n                accordionItemPanel.removeClass(this.prefs().classesOpen);\n            });\n\n            this.has(this.prefs().accordionItemPanelInner, (accordionItemPanelInner) => {\n                accordionItemPanelInner.removeClass(this.prefs().classesOpen);\n            });\n        }\n\n        closeAccordianOnBlur(ele, event) {\n            var elementClassList = event.relatedTarget && event.relatedTarget.classList;\n            var filtersClassList = ['b-refinement_list-checkbox', 'b-refinement_checkbox',\n                                    'b-refinement_navigation-link', 'f-input_radio',\n                                    'b-refinement_list-label']\n            const shouldHidePanel = elementClassList ?\n                (filtersClassList.filter(value => elementClassList.contains(value)).length === 0) : true;\n            if(shouldHidePanel) {\n                super.blur();\n                this.closePanel();\n            }\n        }\n    }\n\n    return HarmonyAccordionItem;\n}\n","import { isMediumViewAndDown } from 'widgets/toolbox/viewtype';\n\n/**\n * @description HarmonyBackToTop implementation\n * @param {BackToTop} BackToTop BackToTop for extending\n * @returns {typeof BackToTop}\n */\n\nexport default function (BackToTop) {\n    return class HarmonyBackToTop extends BackToTop {\n        prefs() {\n            return {\n                ...super.prefs(),\n                pageSize: 1\n            };\n        }\n\n        doInit() {\n            if (isMediumViewAndDown()) {\n                this.removeScrollListener();\n                this.show();\n            } else {\n                this.attachScrollListener();\n                this.toggleBackToTopButton();\n            }\n        }\n\n        toggle(...args) {\n            super.toggle(...args);\n            this.ref('self').attr('hidden', false);\n        }\n    };\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/global/Button').default>} Button\n */\n\n/**\n * @description HarmonyButton implementation\n * @param {Button} Button Base widget for extending\n * @returns {typeof HarmonyButton} HarmonyButton\n */\nexport default function (Button) {\n    class HarmonyButton extends Button {\n        /**\n         * @description Sends GTM event, when button was clicked\n         * @returns {void}\n         */\n        handleClick() {\n            super.handleClick();\n            this.eventBus().emit('gtm.button.click');\n        }\n\n        busy() {\n            this.isBusy = true;\n        }\n\n        unbusy() {\n            this.isBusy = false;\n        }\n    }\n\n    return HarmonyButton;\n}\n","import { toggleAvailability } from 'harmony/toolbox/domUtils';\n\n/**\n * @description HarmonyCarousel implementation\n * @param {Carousel} Carousel Carousel for extending\n * @returns {typeof HarmonyCarousel} carousel\n */\nexport default function (Carousel) {\n    return class HarmonyCarousel extends Carousel {\n        prefs() {\n            return {\n                enableAutoplay: false,\n                autoplayDelay: 0,\n                pauseOnHover: false,\n                loop: false,\n                slidesQty: 0,\n                ...super.prefs()\n            };\n        }\n\n        initCarousel() {\n            this.cacheCarouselElements();\n\n            super.initCarousel();\n            \n            if (this.isAutoplayEnabled()) {\n\n                this.addAutoPlayEventListeners();\n                this.startAutoPlay();\n            }\n\n            this.carouselConfiguration = this.data('carouselConfiguration') || {};\n            this.carouselConfiguration.slideBy = this.carouselConfiguration.slideBy || 1;\n\n            this.currentActiveSlideIndex = 0;\n\n            this.handleScroll = this.handleScroll.bind(this);\n            this.observeSlidesInTrack();\n\n            this.onDestroy(this.disconnectSlidesObserver.bind(this));\n        }\n\n        onRefresh() {\n            this.cacheCarouselElements();\n            this.disconnectSlidesObserver();\n            this.observeSlidesInTrack();\n        }\n\n        cacheCarouselElements() {\n            this.elemCarouselTrack = this.ref('elemCarouselTrack').get();\n            this.slides = [...this.elemCarouselTrack.children];\n        }\n\n        observeSlidesInTrack() {\n            this.observer = new IntersectionObserver(this.handleScroll, {\n                root: this.elemCarouselTrack,\n                rootMargin: '0px',\n                threshold: 0.5\n            });\n\n            this.slides.forEach(slide => {\n                this.observer.observe(slide);\n            });\n        }\n\n        disconnectSlidesObserver() {\n            this.observer.disconnect();\n        }\n\n        handleScroll(slides) {\n            const position = this.carouselDirection === 'horizontal' ? 'left' : 'top';\n\n            if (slides[0].intersectionRect[position] !== slides[0].rootBounds[position]) {\n                return;\n            }\n\n            const firstElement = slides[0].isIntersecting\n                ? slides[0].target\n                : slides[0].target.nextElementSibling;\n            this.currentActiveSlideIndex = this.slides.indexOf(firstElement);\n        }\n\n        isAutoplayEnabled() {\n            const {\n                enableAutoplay, autoplayDelay\n            } = this.prefs();\n\n            return enableAutoplay && autoplayDelay;\n        }\n\n        isLoopEnabled() {\n            return this.prefs().loop || this.isAutoplayEnabled();\n        }\n\n        addAutoPlayEventListeners() {\n            if (!this.prefs().pauseOnHover) {\n                return;\n            }\n\n            const carousel = this.ref('self').get();\n\n            carousel.addEventListener('mouseleave', this.startAutoPlay.bind(this));\n            carousel.addEventListener('mouseenter', this.stopAutoPlay.bind(this));\n        }\n\n        createPaginationElements() {\n            if (!this.elemCarouselTrack || this.isLoopEnabled()) {\n                return;\n            }\n            // We need to use round, not ceil, since it called on scroll,\n            // in case of last it would generate falls positive\n            const numberOfPages = Math.round(this.elemCarouselTrack.scrollWidth / this.elemCarouselTrack.clientWidth);\n            const pagination = new Array(numberOfPages).fill(0).map((_el, i) => ({ page: i, pageIndex: i + 1 }));\n\n            this.pagination = new Promise(resolve => {\n                this.render(undefined, { pagination }, this.ref('pagination')).then(() => {\n                    resolve(this.ref('pagination').get());\n                });\n            });\n        }\n\n        scrollToSlide(index) {\n            if (this.carouselDirection === 'horizontal') {\n                this.scrollToPoint(0, (this.slides[index].offsetLeft));\n            } else {\n                this.scrollToPoint((this.slides[index].offsetTop), 0);\n            }\n\n            const image = this.getImages()[index];\n            if (image) {\n                const imagePosition = index + 1; // index from 0, but we need to send from 1\n                const gtmData = {\n                    imagePosition,\n                    imageName: image.getAttribute('alt')\n                };\n\n                if (this.prefs().isPdpCarousel) {\n                    this.eventBus().emit('gtm.carousel.pdp.click', gtmData);\n                }\n\n                if (this.prefs().isBlog) {\n                    if (this.slides[index] && this.slides[index].querySelector('[data-selector-id=\"text-box\"]')) {\n                        gtmData.articleImageDescription =\n                            this.slides[index].querySelector('[data-selector-id=\"text-box\"]').innerText.trim();\n                    }\n\n                    this.eventBus().emit('gtm.scroll.blog.carousel', gtmData);\n                }\n            }\n\n            this.scrollToSlideAccessability(index);\n        }\n\n        scrollToSlideAccessability(index) {\n            const id = Date.now();\n\n            this.slides.forEach((slide, i) => {\n                // Add an id to current slide, so screen reader can read.\n                // the same ID is added to controls to \"aria-describedby\"\n                slide[i === index ? 'setAttribute' : 'removeAttribute']('id', id);\n\n                // Enable current and next slides for accessing via TAB key\n                // Disable previous slides from TAB order, so right after controls user can navigate to current slide\n                toggleAvailability(slide, i >= index);\n            });\n\n            // Small delay for screen reader in order to not read previous slide\n            setTimeout(() => {\n                this.has('controls', controls => controls.attr('aria-describedby', id));\n            }, 500);\n        }\n\n        startAutoPlay() {\n            this.autoplayInterval = window.setInterval(\n                this.scrollNext.bind(this),\n                this.prefs().autoplayDelay\n            );\n        }\n\n        stopAutoPlay() {\n            window.clearInterval(this.autoplayInterval);\n        }\n\n        updateCarouselMetric() {\n            const roundingDelta = this.roundingDelta || 0;\n\n            if (this.elemCarouselTrack) {\n                if (this.carouselDirection === 'horizontal') {\n                    const totalScrollWidth = this.elemCarouselTrack.scrollLeft + this.elemCarouselTrack.offsetWidth;\n                    this.isScrollStart = this.elemCarouselTrack.scrollLeft <= 0;\n                    this.isScrollEnd = (totalScrollWidth + roundingDelta) >= this.elemCarouselTrack.scrollWidth;\n                } else {\n                    const totalScrollHeight = this.elemCarouselTrack.scrollTop + this.elemCarouselTrack.offsetHeight;\n                    this.isScrollStart = this.elemCarouselTrack.scrollTop <= 0;\n                    this.isScrollEnd = (totalScrollHeight + roundingDelta) >= this.elemCarouselTrack.scrollHeight;\n                }\n            }\n        }\n\n        updateCarouselState() {\n            super.updateCarouselState();\n        }\n\n        scrollNext() {\n            if (this.isScrollEnd && this.isLoopEnabled() ) {\n                const currentSlides = [...this.ref('elemCarouselTrack').get().children];\n                Array.from(currentSlides).forEach(element => {\n\n                    const new_ele = element.cloneNode(true);\n                    if (!new_ele.classList.contains('cloned-forward')) {\n                        new_ele.classList.add('cloned-forward');\n                        this.ref('elemCarouselTrack').get().append(new_ele);\n                    }\n                    \n                });\n                this.disconnectSlidesObserver();\n                this.cacheCarouselElements();\n                this.updateCarouselMetric();\n                this.observeSlidesInTrack();    \n\n            }\n\n            const maxSlideIndex = this.slides.length - 1;\n            let nextSlideIndex = this.currentActiveSlideIndex + this.carouselConfiguration.slideBy;\n            switch (true) {\n                case this.isLoopEnabled() && this.isScrollEnd:\n                    \n                    nextSlideIndex = nextSlideIndex;\n                    break;\n                case nextSlideIndex > maxSlideIndex:\n                    nextSlideIndex = maxSlideIndex;\n                    break;\n                default: break;\n            }\n\n            this.eventBus().emit('gtm.carousel.button.click', {\n                carouselButton: 'Next',\n                carouselName: this.prefs().name || ''\n            });\n            \n            this.scrollToSlide(nextSlideIndex);\n        }\n\n        scrollBack() {\n            let prevSlideIndex = this.currentActiveSlideIndex - this.carouselConfiguration.slideBy;\n\n            switch (true) {\n                case this.isLoopEnabled() && this.isScrollStart:\n                    prevSlideIndex = this.slides.length - 1;\n                    break;\n                case prevSlideIndex < 0:\n                    prevSlideIndex = 0;\n                    break;\n                default: break;\n            }\n\n            this.eventBus().emit('gtm.carousel.button.click', {\n                carouselButton: 'Previous',\n                carouselName: this.prefs().name || ''\n            });\n\n            this.scrollToSlide(prevSlideIndex);\n        }\n\n        /**\n         * @param {refElement} el source of event\n         * @param {MouseEvent} event event instance in DOM\n         */\n        onMouseDown(el, event) {\n            super.onMouseDown(el, event);\n\n            // in case if input field has been focused and on parent element mousedown prevented - forced input focus\n            if (event.target.nodeName === 'INPUT') {\n                event.target.focus();\n            }\n        }\n\n        handleContentClick(refElement) {\n            const contentInfo = refElement.data('contentInfo');\n            contentInfo.carouselItemPosition = refElement.data('contentPosition');\n            contentInfo.carouselName = this.prefs().name;\n            this.eventBus().emit('gtm.click.carousel.content', contentInfo);\n        }\n\n        hasNoScroll() {\n            return (this.isScrollStart && this.isScrollEnd) || !this.ref('elemCarouselTrack').get().children.length;\n        }\n    };\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\nimport { getCookie, setCookie } from 'widgets/toolbox/cookie';\n/**\n * @typedef {typeof import('widgets/global/ConsentTracking').default} ConsentTracking\n */\n\n/**\n * @description Cookie acceptance component (with SFRA supported backend)\n * @param {ReturnType<typeof import('widgets/global/ConsentTracking').default>} ConsentTracking Base consent Tracking widget for extending\n * @returns {typeof HarmonyConsentTracking} Consent Tracking class\n */\n\nexport default function (ConsentTracking) {\n    /**\n     * @class HarmonyConsentTracking\n     * @augments ConsentTracking\n     * @classdesc HarmonyConsentTracking Widget - used to expose Consent dialog, where customer can either accept\n     * <br>or reject Consent matter. Relevant methods will be triggered pressing related buttons\n     * @property {string} data-widget - Widget name `consentTracking`\n     * @property {string} data-content-url - Dynamically loaded Consent's content\n     * @property {string} data-reject-url - Customer chooses `reject` - request will be sent to Reject URL\n     * @property {string} data-accept-url - Customer chooses `accept` - request will be sent to Accept URL\n     * @example\n     * // use this code to display minicart widget\n     * <div\n     *     data-widget=\"consentTracking\"\n     *     data-content-url=\"${URLUtils.url('ConsentTracking-GetContent', 'logo', 'global-header-vertical-logo', 'content', 'tracking_hint', 'footer', 'age-gate-footer')}\"\n     *     data-reject-url=\"${URLUtils.url('ConsentTracking-SetSession', 'consent', 'false')}\"\n     *     data-accept-url=\"${URLUtils.url('ConsentTracking-SetSession', 'consent', 'true')}\"\n     *     data-tracking-selected=\"${pdict.tracking_consent != null}\"\n     *     data-consent-api=\"${pdict.caOnline}\"\n     * >\n     *     <div data-ref=\"container\"></div>\n     *\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div\n     *             id=\"consent-dialog\"\n     *             role=\"alertdialog\"\n     *             aria-modal=\"false\"\n     *             aria-live=\"assertive\"\n     *             aria-atomic=\"true\"\n     *             aria-labelledby=\"consent-dialog-label\"\n     *             aria-describedby=\"consent-dialog-description\"\n     *             data-ref=\"container\"\n     *             class=\"b-notification_panel\"\n     *         >\n     *             {{{content}}}\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class HarmonyConsentTracking extends ConsentTracking {\n        /**\n         * @description Sends GTM event, when 'age gate' was shown\n         * @returns {void}\n        */\n        init() {\n            let enableCookieOptIn = $('#enableCookieOptIn').val();\n            let isAcceptCookie = getCookie('dw_accept_cookie');\n\n            if (!enableCookieOptIn) {\n                if (this.prefs().forceAcceptTracking) {\n                    this.accept();\n                    return;\n                }\n            } else {\n                if (isAcceptCookie === '') {\n                    this.eventBus().emit('gtm.age.gate.shown', this.prefs().customerId);\n                }\n                if (this.prefs().forceAcceptTracking) { \n                    this.accept();\n                }\n            }\n            super.init();\n        }\n\n        acceptConsent() {\n            const acceptUrl = this.prefs().acceptUrl;\n            submitFormJson(acceptUrl, undefined, 'GET').finally(() => {\n                setCookie('dw_consent_cookie', '1', 365, true);\n                $('.age-gate-overlay').addClass('h-hidden');\n            });\n        }\n\n        rejectConsent() {\n            const rejectUrl = this.prefs().rejectUrl;\n            submitFormJson(rejectUrl, undefined, 'GET').finally(() => {\n                $('.age-gate-overlay').addClass('h-hidden');\n            });\n        }\n\n        enterAgeGate() {\n            setCookie('dw_accept_cookie', '1', 365, true);\n            this.togglePanel(false);\n        }\n\n        /**\n         * @description Sends GTM event, when 'age gate' was applied\n         * @returns {void}\n        */\n        accept() {\n            super.accept();\n            if ($('#harmonytracking').attr('role') === 'main') {\n                $('#harmonytracking').removeAttr('role');\n            }\n            this.eventBus().emit('gtm.age.gate.enter', this.prefs().customerId);\n        }\n\n        /**\n         * @description Validates legal drinking age and Sends GTM event, when 'age gate' was applied\n         * @returns {void}\n        */\n        submit() {\n            var enableCookieOptIn = this.prefs().enableCookieOptIn;\n            if($('.age-gate-enter-form .b-form-message.h-hidden').length !== 3) {\n                return;\n            }\n            let month = $('#month').val();\n            let date = $('#day').val();\n            let year = $('#year').val();\n            if(!month) {\n                $('.b-form-message.month').removeClass('h-hidden');\n                $('#month').focus();\n                return;\n            }\n            if(!date) {\n                $('.b-form-message.day').removeClass('h-hidden');\n                $('#day').focus();\n                return;\n            }\n            if(!year) {\n                $('.b-form-message.year').removeClass('h-hidden');\n                $('#year').focus();\n                return;\n            }\n            if(this.ageGateEntrance(date, month, year) >= 21) {\n                if (enableCookieOptIn === true) {\n                    this.enterAgeGate();\n                } else {\n                    super.accept();\n                }\n                if ($('#harmonytracking').attr('role') === 'main') {\n                    $('#harmonytracking').removeAttr('role');\n                }\n                this.eventBus().emit('gtm.age.gate.enter', this.prefs().customerId);\n            } else {\n                $('.age-gate-enter-form').addClass('h-hidden');\n                $('.too-young').removeClass('h-hidden');\n            }\n        }\n\n        ageGateEntrance(birth_day, birth_month, birth_year) {\n            let age = 0;\n\t\t\tlet today_date = new Date();\n\t\t\tlet today_year = today_date.getFullYear();\n\t\t\tlet today_month = today_date.getMonth();\n\t\t\tlet today_day = today_date.getDate();\n\t\t\tif (!birth_day || !birth_month || !birth_year) {\n\t\t\t\tage = 0;\n\t\t\t} else {\n\t\t\t\tage = today_year - birth_year;\n\n\t\t\t\tif ( today_month < (birth_month - 1)) {\n\t\t\t\t\tage--;\n\t\t\t\t}\n\t\t\t\tif (((birth_month - 1) == today_month) && (today_day < birth_day)) {\n\t\t\t\t\tage--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn age;\n\t\t}\n\n        /**\n         * @description validates age gate form input elements\n         * @param {HTMLElement} ele age gate form input element\n         * @param {KeyboardEvent} event age gate form input element event\n         * @returns {void}\n         */\n        validate(ele, event) {\n            const inputValue = event.target && parseInt(event.target.value);\n            var res = /^\\d+$/.test(event.target.value);\n            switch(event.target && event.target.name) {\n                case \"month\":\n                    if(inputValue < 1 || inputValue > 12 || !(/^\\d+$/.test(event.target.value))) {\n                        $('.b-form-message.month').removeClass('h-hidden');\n                    } else {\n                        $('.b-form-message.month').addClass('h-hidden');\n                    }\n                    break;\n                case \"day\":\n                    if(inputValue < 1 || inputValue > 31 || !(/^\\d+$/.test(event.target.value)) || ($('#month').val() && ($('#month').val() === \"2\"\n                    || $('#month').val() === \"02\") && inputValue > 29)\n                    || ([\"4\",\"6\",\"9\",\"11\",\"04\",\"06\",\"09\"].includes($('#month').val()) && inputValue > 30)) {\n                        $('.b-form-message.day').removeClass('h-hidden');\n                    } else {\n                        $('.b-form-message.day').addClass('h-hidden');\n                    }\n                    break;\n                case \"year\":\n                    if(inputValue < 1000 || inputValue > 9999 || !(/^\\d+$/.test(event.target.value))) {\n                        $('.b-form-message.year').removeClass('h-hidden');\n                    } else {\n                        $('.b-form-message.year').addClass('h-hidden');\n                    }\n                    break;\n            }\n            let month = $('#month').val();\n            let date = $('#day').val();\n            if(month && date && parseInt(date) > 0 && parseInt(date) <= 31 && ((month === \"2\"\n            || month === \"02\") ? parseInt(date) < 30 : true)\n            && ([\"4\",\"6\",\"9\",\"11\",\"04\",\"06\",\"09\"].includes(month) ? parseInt(date) < 31 : true)) {\n                $('.b-form-message.day').addClass('h-hidden');\n            } else if(month && date) {\n                $('.b-form-message.day').removeClass('h-hidden');\n            }\n        }\n\n        /**\n         * @description Reject Consent handler\n         * @listens dom#click\n         * @returns {void}\n         */\n         async reject() {\n             try {\n                await super.reject();\n             }\n             catch (err) {\n                 console.log(err);\n             }\n            this.eventBus().emit('gtm.age.gate.notrack');\n            // reload page to disable gtm\n            location.reload(true);\n        }\n\n        prefs() {\n            return {\n                classesPanelOpen: 'm-age_gate-open',\n                ...super.prefs()\n            };\n        }\n\n        loadContent() {}\n\n        /**\n         * @description Toggle Panel\n         * @param {boolean} isVisible - `true` if Consent's dialog should be shown, `false` - otherwise\n         */\n        togglePanel(isVisible) {\n            this.ref('html').toggleClass(this.prefs().classesPanelOpen, isVisible);\n\n            if (!isVisible) {\n                this.eventBus().emit('gtm.age.gate.close');\n            }\n        }\n    }\n\n    return HarmonyConsentTracking;\n}\n","/**\n * @typedef {typeof import('widgets/global/EmitBusEvent').default} EmitBusEvent\n */\n\n/**\n * @param {Widget} EmitBusEvent Base widget for extending\n * @returns {typeof HarmonyEmitBusEvent} HarmonyEmitBusEvent widget\n */\nexport default function (EmitBusEvent) {\n    class HarmonyEmitBusEvent extends EmitBusEvent {\n        /**\n         * @description Emit event\n         * @returns {void}\n         */\n        emitBusEvent() {\n            if (this.prefs().busEventType) {\n                const events = this.prefs().busEventType.split(':');\n                for (let i = 0; i < events.length; i++) {\n                    this.eventBus().emit(events[i], this);\n                }\n            }\n        }\n\n        init() {\n            super.init();\n\n            if (this.prefs().load === 'emitBusEvent') {\n                this.emitBusEvent();\n            }\n        }\n    }\n\n    return HarmonyEmitBusEvent;\n}\n","/**\n * @description HarmonyFocusHighlighter implementation\n * @param {FocusHighlighter} FocusHighlighter FocusHighlighter for extending\n * @returns {typeof FocusHighlighter}\n */\n\nexport default function (FocusHighlighter) {\n    return class HarmonyFocusHighlighter extends FocusHighlighter {\n        /**\n         * @description Moves `highlighter` (a bordere box) in place of focused element\n         * @param {HTMLElement} focusedElement - element, which gets focus\n         */\n        moveTo(focusedElement) {\n            if (!(focusedElement instanceof HTMLElement)) { return; }\n\n            const highlighterNode = this.ref('highlighter').get();\n            if (!highlighterNode) { return; }\n\n            const scrollTop = +this.ref('self').get().dataset.scrollTop || 0;\n            const targetRect = focusedElement.getBoundingClientRect();\n            const targetTop = targetRect.top + window.scrollY + scrollTop;\n            const targetLeft = targetRect.left + window.scrollX;\n            const targetWidth = focusedElement.offsetWidth;\n            const targetHeight = focusedElement.offsetHeight;\n\n            if (\n                focusedElement === this.lastFocusedElement\n                && this.lastFocusedElementCoords === '' + targetTop + targetLeft + targetWidth + targetHeight\n            ) {\n                // If we come from coords recheck do not reapply changes\n                return;\n            }\n\n            const highlighterStyle = highlighterNode.style;\n            highlighterStyle.top = `${targetTop - 5}px`;\n            highlighterStyle.left = `${targetLeft - 5}px`;\n            highlighterStyle.width = `${targetWidth + 2}px`;\n            highlighterStyle.height = `${targetHeight + 2}px`;\n\n            this.lastFocusedElementCoords = '' + targetTop + targetLeft + targetWidth + targetHeight;\n            this.lastFocusedElement = focusedElement;\n        }\n\n        handleClick(ref, event) {\n            super.handleClick(ref, event);\n\n            this.getById('harmonyHeader', headerWidget => {\n                headerWidget.getById('harmonyMenuPanel', (harmonyMenuPanelWidget) => {\n                    if (!event.target.closest('[data-id=\"harmonyMenuPanel\"]')\n                        && harmonyMenuPanelWidget.isOpened\n                        && event.target.id !== 'main-navigation-toggle') {\n                        harmonyMenuPanelWidget.closePanel();\n                    }\n                });\n            });\n        }\n    };\n}\n","import { PausableTimeout } from 'widgets/toolbox/util';\n\n/**\n * @description HarmonyGlobalAlerts\n * @param {typeof import('widgets/global/HarmonyGlobalAlerts').default} HarmonyGlobalAlerts widget.\n * Is used for displaying global alerts\n * @returns {typeof HarmonyGlobalAlerts} HarmonyGlobalAlerts class\n */\n\nexport default function (GlobalAlerts) {\n    class HarmonyGlobalAlerts extends GlobalAlerts {\n        prefs() {\n            return {\n                errorClass: 'm-error',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n        }\n\n        /**\n         * @description Show Global Alert by starting pausable timeout\n         * @param {{accessibilityAlert: string}} data - Message to be shown and pronounced\n         */\n        showAlert(data) {\n            if (data && data.accessibilityAlert) {\n                if (this.shown) {\n                    this.hideAlert();\n                }\n\n                // handle error alerts\n                if (data && data.errorClass) {\n                    this.ref('item').addClass(this.prefs().errorClass);\n                    this.eventBus().emit('gtm.error.occurred', data);\n                } else {\n                    this.ref('item').removeClass(this.prefs().errorClass);\n                }\n\n                this.ref('item')\n                    .setText(data.accessibilityAlert)\n                    .show();\n                this.shown = true;\n\n                this.pausableTimeout = new PausableTimeout(() => {\n                    this.hideAlert();\n                }, this.prefs().timeout);\n            }\n        }\n    }\n    return HarmonyGlobalAlerts;\n}\n","import { transitionEnd } from 'widgets/toolbox/util';\n/**\n * @typedef {typeof import('widgets/global/HamburgerMenuItem').default} HamburgerMenuItem\n */\n\n/**\n * @description Extended HamburgerMenuItem implementation\n * @param {ReturnType<typeof import('widgets/global/HamburgerMenuItem').default>} HamburgerMenuItem Base widget for extending\n * @returns {typeof HarmonyHamburgerMenuItem} Harmony HamburgerMenuItem widget\n */\nexport default function (HamburgerMenuItem) {\n    /**\n     * @class HarmonyHamburgerMenuItem\n     * @augments HamburgerMenuItem\n     * @classdesc Extension of Base HamburgerMenuItem widget.\n     * Harmony Hamburger menu does not use Panels, but utilize general navigation items with additional elements and classes\n     * For more details see description of global/HamburgerMenuItem widget.\n     */\n    class HarmonyHamburgerMenuItem extends HamburgerMenuItem {\n        /**\n         * @description Preferences\n         * @returns {object} Preferences object\n         */\n        prefs() {\n            return {\n                classesActive: 'm-active',\n                backButton: 'backButton',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            this.eventBus().on('nav.panel.close', 'resetMenu');\n            super.init();\n        }\n\n        /**\n         * @description Open hamburger menu\n         */\n        openMenu() {\n            if (this.hasSubmenu()) {\n                this.ref(this.prefs().submenu).get().setAttribute('aria-hidden', false);\n                transitionEnd(\n                    this.ref('self').get(),\n                    this.prefs().classesActive,\n                    () => {\n                        this.ref(this.prefs().backButton).get().focus();\n                    }\n                );\n            }\n        }\n\n        /**\n         * back/level up\n         */\n        back() {\n            this.ref('self').removeClass(this.prefs().classesActive);\n            this.ref(this.prefs().itemLink).get().focus();\n            this.ref(this.prefs().submenu).get().setAttribute('aria-hidden', true);\n        }\n\n        /**\n         * reset menu and all menu items to default (unopened) state\n         */\n        resetMenu() {\n            this.ref('self').removeClass(this.prefs().classesActive);\n        }\n    }\n\n    return HarmonyHamburgerMenuItem;\n}\n","export default function (Widget) {\n    /**\n     * @class HarmonyHeader\n     * @augments Widget\n     * @classdesc Used for setting/removing active state for header.\n     */\n    class HarmonyHeader extends Widget {\n        prefs() {\n            return {\n                classActive: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.activeElements = 0;\n\n            // Cache header element to manipulate with classes\n            this.header = this.ref('self').get();\n\n            this.events();\n        }\n\n        events() {\n            this.eventBus().on('header.set.active.state', 'activate');\n            this.eventBus().on('header.remove.active.state', 'deactivate');\n            this.eventBus().on('product.added.to.wishlist', 'fillWishlistIcon');\n            this.eventBus().on('wishlist.empty', 'cleanWishlistIcon');\n        }\n\n        activate() {\n            this.activeElements++;\n            this.header.classList.add(this.prefs().classActive);\n        }\n\n        deactivate() {\n            this.activeElements--;\n\n            if (this.activeElements < 1) {\n                this.header.classList.remove(this.prefs().classActive);\n            }\n        }\n\n        fillWishlistIcon() {\n            this.has('wishlistIcon', /** @param {RefElement} item */ (item) => {\n                const activeClass = item.data('activeClass');\n                item.addClass(activeClass);\n            });\n        }\n\n        cleanWishlistIcon() {\n            this.has('wishlistIcon', /** @param {RefElement} item */ (item) => {\n                const activeClass = item.data('activeClass');\n                item.removeClass(activeClass);\n            });\n        }\n    }\n\n    return HarmonyHeader;\n}\n","/**\n * @typedef {typeof import('widgets/global/MenuPanel').default} MenuPanel\n */\n\n/**\n * @description Base MenuPanel extension\n * @param {ReturnType<typeof import('widgets/global/MenuPanel').default>} MenuPanel Base widget for extending\n * @returns {typeof HarmonyMenuPanel} HarmonyMenuPanel class\n */\nexport default function (MenuPanel) {\n    /**\n     * @class HarmonyMenuPanel\n     * @augments MenuPanel\n     * @classdesc HarmonyMenuPanel widget, that contains menu for touch/mobile devices.\n     * Extends Base MenuPanel. For more details see global/MenuPanel widget.\n     */\n    class HarmonyMenuPanel extends MenuPanel {\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            super.init();\n\n            // cache header element to manipulate with classes\n            this.header = document.getElementsByClassName('b-header')[0];\n\n            // cache html element\n            this.html = this.ref('html');\n\n            this.eventBus().on('product.added.to.wishlist', 'fillWishlistIcon');\n            this.eventBus().on('wishlist.empty', 'cleanWishlistIcon');\n        }\n\n        /**\n         * @description Preferences\n         * @returns {object} Preferences object\n         */\n        prefs() {\n            return {\n                classesHeaderHamburgerOpen: 'm-hamburger_opened',\n                classesMenuItemActive: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Open Menu Panel\n         */\n        openPanel() {\n            // set additional classes\n            this.header.classList.add(this.prefs().classesHeaderHamburgerOpen);\n            this.html.addClass(this.prefs().classesHasDialog);\n\n            this.setFocusToFirstItem();\n\n            this.backFocusElement = /** @type {HTMLElement} */(document.activeElement);\n\n            // set state\n            this.isOpened = true;\n\n            this.eventBus().emit('header.set.active.state');\n        }\n\n        /**\n         * @description Close Menu Panel\n         */\n        closePanel() {\n            if (this.isOpened) {\n                // remove classes\n                this.header.classList.remove(this.prefs().classesHeaderHamburgerOpen);\n                this.html.removeClass(this.prefs().classesHasDialog);\n\n                // emit events for other widgets\n                this.eventBus().emit('nav.panel.close');\n                this.eventBus().emit('nav.panel.toggle.focus');\n\n                if (this.backFocusElement) {\n                    this.backFocusElement.focus();\n                    this.backFocusElement = null;\n                }\n\n                // set state\n                this.isOpened = false;\n\n                this.eventBus().emit('header.remove.active.state');\n            }\n        }\n\n        fillWishlistIcon() {\n            this.has('wishlistIcon', /** @param {RefElement} item */ (item) => {\n                const activeClass = item.data('activeClass');\n                item.addClass(activeClass);\n            });\n        }\n\n        cleanWishlistIcon() {\n            this.has('wishlistIcon', /** @param {RefElement} item */ (item) => {\n                const activeClass = item.data('activeClass');\n                item.removeClass(activeClass);\n            });\n        }\n    }\n\n    return HarmonyMenuPanel;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/global/Modal').default>} Modal\n */\n\n/**\n * @description Harmony modal implementation\n * @param {typeof import('widgets/global/Modal').default} MOdal Base widget for extending\n * @returns {typeof HarmonyModal}  HarmonyModal class\n */\n\nexport default function (Modal) {\n    /**\n     * @class HarmonyModal\n     * @augments Modal\n     */\n    class HarmonyModal extends Modal {\n        addGlobalDialogClass() {\n            this.disableScroll();\n        }\n\n        closeModal() {\n            super.closeModal();\n\n            this.enableScroll();\n        }\n\n        disableScroll() {\n            this.body = document.body;\n            this.scrollTop = window.scrollY;\n\n            if (!this.body.classList.contains(this.prefs().classesGlobalDialog)) {\n                this.body.classList.add(this.prefs().classesGlobalDialog);\n            }\n\n            this.body.dataset.scrollTop = this.scrollTop;\n            this.body.style.top = `-${this.scrollTop}px`;\n            document.documentElement.scrollTop = 0;\n        }\n\n        enableScroll() {\n            if (this.body) {\n                this.body.classList.remove(this.prefs().classesGlobalDialog);\n                this.body.style.removeProperty('top');\n                this.body.removeAttribute('data-scroll-top');\n                window.scrollTo({\n                    top: this.scrollTop,\n                    behavior: 'instant'\n                });\n                this.scrollTop = 0;\n            }\n        }\n    }\n\n    return HarmonyModal;\n}\n","/**\n * @description Harmony sticky header implementation\n * @param {typeof import('widgets/global/StickyHeader').default} StickyHeader Base widget for extending\n * @returns {typeof HarmonyStickyHeader}  HarmonyStickyHeader class\n */\nexport default function (StickyHeader) {\n    /**\n     * @class HarmonyStickyHeader\n     * @augments StickyHeader\n     * @classdesc sticky header helper\n     */\n    class HarmonyStickyHeader extends StickyHeader {\n        /**\n         * @description Preferences\n         * @returns {object} Preferences object\n         */\n        prefs() {\n            return {\n                ...super.prefs(),\n                classesHeaderStuck: 'm-stuck',\n                classesShow: 'm-header_stuck'\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            // store header element\n            this.header = document.querySelector('.b-header');\n            this.headerBackground = document.querySelector('.b-header-background');\n            this.isHeaderSticky = false;\n\n            super.init();\n\n            // update header height on header promo banner close\n            this.eventBus().on('cookiedismissblock.updated', 'setHeaderHeight');\n            this.eventBus().on('gtm.age.gate.close', 'setHeaderHeight');\n            // set initial height of sticky heder\n            this.setHeaderHeight();\n            // listen for transition end events\n            this.header.addEventListener('transitionend', () => {\n                this.setHeaderHeight();\n            });\n        }\n\n        /**\n         * @description Current header's height getter\n         * @returns {integer} current headers height\n         */\n        get currentHeaderHeight() {\n            return this.headerBackground.offsetHeight;\n        }\n\n        /**\n         * @description Update --header-height || --header-sticky-height CSS variables value\n         */\n        setHeaderHeight() {\n            let customCSSPropertyName;\n\n            if (this.isHeaderSticky) {\n                customCSSPropertyName = '--header-sticky-height';\n            } else {\n                customCSSPropertyName = '--header-height';\n            }\n\n            document.documentElement.style.setProperty(customCSSPropertyName, (this.currentHeaderHeight || 0) + 'px');\n        }\n\n        /**\n         * @description Toggle sticky state\n         * @param {IntersectionObserverEntry} entry Intersection Observer Entry\n         */\n        toggleStickyState(entry) {\n            // call base widget function\n            super.toggleStickyState(entry);\n            // set additional class for header element\n            this.isHeaderSticky = entry.intersectionRatio < 1;\n            this.header.classList.toggle(this.prefs().classesHeaderStuck, this.isHeaderSticky);\n            this.setHeaderHeight();\n        }\n    }\n\n    return HarmonyStickyHeader;\n}\n","/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\nexport default function (SideBar) {\n    class HarmonyHeaderSideBar extends SideBar {\n        init() {\n            super.init();\n            this.eventBus().on('product.added.to.wishlist', 'fillWishlistIcon');\n            this.eventBus().on('wishlist.empty', 'cleanWishlistIcon');\n        }\n\n        prefs() {\n            return super.prefs();\n        }\n\n        fillWishlistIcon() {\n            this.has('wishlistIcon', /** @param {RefElement} item */ (item) => {\n                const activeClass = item.data('activeClass');\n                item.addClass(activeClass);\n            });\n        }\n\n        cleanWishlistIcon() {\n            this.has('wishlistIcon', /** @param {RefElement} item */ (item) => {\n                const activeClass = item.data('activeClass');\n                item.removeClass(activeClass);\n            });\n        }\n\n        /**\n         * @param {typeof import('widgets/global/EmitBusEvent').default} target\n         */\n        open(target) {\n            const refName = target.config.refName;\n            if (!this.has(refName)) {\n                return;\n            }\n\n            super.open(target);\n            this.eventBus().emit('header.set.active.state');\n        }\n\n        close(context) {\n            if (\n                (typeof context === 'string' && !this.has(context))\n                || !this.isOpened\n            ) {\n                return;\n            }\n\n            super.close(context);\n            this.eventBus().emit('header.remove.active.state');\n        }\n    }\n\n    return HarmonyHeaderSideBar;\n}\n","const PROMISE_STATUSES = {\n    PENDING: 'pending',\n    FULLFILLED: 'fullfilled',\n    REJECTED: 'rejected'\n};\n\n/**\n * @description Harmony Loader implementation\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n * @returns {typeof Loader}  Loader class\n */\nexport default function (Widget) {\n    /**\n     * @class Loader\n     * @augments Widget\n     * @classdesc Loader helper\n     */\n    class Loader extends Widget {\n        /**\n         * @description Preferences\n         * @returns {object} Preferences object\n         */\n        prefs() {\n            return {\n                ...super.prefs(),\n                classesHidden: 'h-hidden',\n                classesLoaderOpen: 'm-panel_opened',\n                loaderDelayTimeout: 1000, // Delay before loader appears (in ms)\n                loaderMinShowTimeout: 1600, // Minimum visibility duration when loader is shown (in ms)\n                loaderMaxShowTimeout: 15000 // Time to wait for response before showing an error (in ms)\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            // init events\n            this.eventBus().on('loader.start', 'start');\n        }\n\n        /**\n         * @description Start loader based on promise state\n         * @param {Promise<any>} promise\n         */\n        start(promise) {\n            const startTime = performance.now();\n            const { loaderDelayTimeout, loaderMinShowTimeout, loaderMaxShowTimeout } = this.prefs();\n\n            const loaderDelayTimerID = this.setLoaderDelayTimeout(promise, loaderDelayTimeout);\n            this.setLoaderMinShowTimeout(promise, loaderMinShowTimeout);\n\n            const loaderMaxShowTimerID = this.setLoaderMaxShowTimeout(promise, loaderMaxShowTimeout);\n\n            promise.finally(() => {\n                clearTimeout(loaderDelayTimerID);\n                clearTimeout(loaderMaxShowTimerID);\n                if (performance.now() - startTime >= loaderMinShowTimeout) {\n                    this.close();\n                }\n            });\n        }\n\n        /**\n         * @description Display loader\n         */\n        open() {\n            this.ref('self').removeClass(this.prefs().classesHidden);\n            document.body.classList.add(this.prefs().classesLoaderOpen);\n        }\n\n        /**\n         * @description Hide loader\n         */\n        close() {\n            this.ref('self').addClass(this.prefs().classesHidden);\n            document.body.classList.remove(this.prefs().classesLoaderOpen);\n        }\n\n        /**\n         * @description Set loader delay timeout\n         * @param {Promise<any>} promise\n         */\n        setLoaderDelayTimeout(promise, loaderDelayTimeout) {\n            return setTimeout(() => {\n                this.promiseStatus(promise).then(status => {\n                    if (status === PROMISE_STATUSES.PENDING) {\n                        this.open();\n                    }\n                });\n            }, loaderDelayTimeout);\n        }\n\n        /**\n         * @description Set loader min show timeout\n         * @param {Promise<any>} promise\n         */\n        setLoaderMinShowTimeout(promise, loaderMinShowTimeout) {\n            return setTimeout(() => {\n                this.promiseStatus(promise).then(status => {\n                    if (status !== PROMISE_STATUSES.PENDING) {\n                        this.close();\n                    }\n                });\n            }, loaderMinShowTimeout);\n        }\n\n        /**\n         * @description Set loader max show timeout\n         * @param {Promise<any>} promise\n         */\n        setLoaderMaxShowTimeout(promise, loaderMaxShowTimeout) {\n            return setTimeout(() => {\n                this.promiseStatus(promise).then(status => {\n                    if (status === PROMISE_STATUSES.PENDING) {\n                        this.close();\n                         //once bundle perfomance issue is fixed, commented code should be uncommented.\n                        // const accessibilityAlert = this.prefs().accessibilityAlerts.timeoutError;\n                        // this.eventBus().emit('alert.show', {\n                        //     accessibilityAlert,\n                        //     errorClass: true\n                        // });\n                    }\n                });\n            }, loaderMaxShowTimeout);\n        }\n\n        /**\n         * @description Get promise status\n         * @param {Promise<any>} promise\n         */\n        promiseStatus(promise) {\n            const obj = {};\n\n            return Promise.race([promise, obj])\n                .then(\n                    v => (v === obj) ? PROMISE_STATUSES.PENDING : PROMISE_STATUSES.FULLFILLED,\n                    () => PROMISE_STATUSES.REJECTED\n                );\n        }\n    }\n\n    return Loader;\n}\n","/**\n * @description Harmony Overlay implementation\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n * @returns {typeof Overlay}  Overlay class\n */\nexport default function (Widget) {\n    /**\n     * @class Overlay\n     * @augments Widget\n     * @classdesc Overlay helper\n     */\n    class Overlay extends Widget {\n        /**\n         * @description Preferences\n         * @returns {object} Preferences object\n         */\n        prefs() {\n            return {\n                ...super.prefs(),\n                classesHidden: 'h-hidden',\n                classesOverlayOpen: 'm-panel_opened',\n                closeOnClick: true\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            // init events\n            this.eventBus().on('show.overlay', 'open');\n            this.eventBus().on('hide.overlay', 'close');\n\n            this.closeOnClick = this.prefs().closeOnClick;\n        }\n\n        /**\n         * @description Display overlay\n         * @param {object} options with additional data\n         * @property {boolean} closeOnClick close overlay on click\n         */\n        open(options) {\n            if (options && typeof options.closeOnClick === 'boolean') {\n                this.closeOnClick = options.closeOnClick;\n            }\n            this.ref('self').removeClass(this.prefs().classesHidden);\n            document.body.classList.add(this.prefs().classesOverlayOpen);\n        }\n\n        /**\n         * @description Hide overlay\n         */\n        close() {\n            this.ref('self').addClass(this.prefs().classesHidden);\n            document.body.classList.remove(this.prefs().classesOverlayOpen);\n        }\n\n        /**\n         * @description handle click on overlay\n         */\n        handleClick() {\n            // do noting if configured to ignore clicks\n            if (!this.closeOnClick) {\n                return;\n            }\n            // close open side bars\n            this.eventBus().emit('sidebar.close');\n            // hide overlay\n            this.close();\n        }\n    }\n\n    return Overlay;\n}\n","import { clickOutside } from 'widgets/toolbox/util';\nimport { getStateID } from 'harmony/toolbox/shipToUtils';\n\nconst ESCAPE_CODE = 27;\n\n/**\n * @typedef {ReturnType<typeof import('harmony/global/SideBar').default>} SideBar\n *\n */\n\n/**\n * @description ShiptTo SideBar extention\n * @param {SideBar} SideBar Base widget for extending\n * @returns {typeof ShipToSideBar} - ShipToSideBar instance\n */\nexport default function (SideBar) {\n    class ShipToSideBar extends SideBar {\n        prefs() {\n            return {\n                ...super.prefs(),\n                classesModalOpen: 'm-dialog_active'\n            };\n        }\n\n        /**\n         * Side Bar open handler\n         *\n         * @param {*} target - widget instance\n         */\n        open(target) {\n            // trigger minicart closing\n            this.eventBus().emit('auto.close.minicart', 0);\n\n            // get currently selected state\n            const selectedState = getStateID(target.stateID);\n\n            // get side bar panel referer\n            const refName = target.config.refName;\n            const isHeaderAlignmentLeft = target.config.isHeaderAlignmentLeft;\n            const isStickyHeader = document.getElementsByClassName('b-header')[0].classList.contains('m-stuck');\n            if (this.has(refName) && !this.isOpened) {\n                // Scroll top only for Desktop widget\n                const isScrollTop = ((refName === 'shipToSideBar-header')\n                        || (isHeaderAlignmentLeft && isStickyHeader && refName === 'shipToSideBar-stickyHeader'));\n                if (isScrollTop) {\n                    // Save scroll top position in order to set it back after SideBar close\n                    this.scrollTop = window.scrollY;\n                    window.scrollTo(0, 0);\n                }\n                // Save focused element in order to focus it after SideBar close\n                this.backFocusElement = /** @type {HTMLElement} */(document.activeElement);\n                // emit event to set radio input value\n                this.eventBus().emit('shipttostate.setstate', selectedState);\n                // open side bar\n                this.ref('self').addClass(this.prefs().classesOpen);\n                document.body.classList.add(this.prefs().classesBodyOpen);\n                this.isOpened = true;\n\n                this.accessabilityOpen();\n\n                // close panel on esc click\n                this.escHandler = this.ev('keyup', (_, event) => {\n                    if (event.keyCode === ESCAPE_CODE) {\n                        this.close();\n                    }\n                }, window).pop();\n\n                // close pane on outside click\n                this.outSideClickListener = clickOutside(this.ref('container'), this.close.bind(this));\n                if (this.outSideClickListener) {\n                    this.onDestroy(this.outSideClickListener);\n                }\n\n                this.eventBus().emit('header.set.active.state');\n            }\n\n            this.ref('self').attr('role', 'alert');\n        }\n\n        accessabilityOpen() {\n            if (!this.has(this.prefs().firstTrapRef) || !this.has(this.prefs().lastTrapRef)) {\n                this.addFocusTraps();\n            }\n\n            // Focus on first element\n            this.afterShowModal();\n        }\n\n        close(...args) {\n            if (this.isOpened) {\n                this.eventBus().emit('header.remove.active.state');\n            }\n\n            super.close(...args);\n\n            // Restore previous scroll position\n            if (this.scrollTop) {\n                window.scrollTo(0, this.scrollTop);\n                this.scrollTop = null;\n            }\n\n            this.ref('self').attr('role');\n        }\n\n        /**\n         * modal dialog\n         */\n        displayModal() {\n            // hide side bar\n            this.ref('self').removeClass(this.prefs().classesOpen);\n            // add class for modal display\n            this.ref('self').addClass(this.prefs().classesModalOpen);\n        }\n\n        closeModal() {\n            this.ref('self').removeClass(this.prefs().classesModalOpen);\n        }\n    }\n\n    return ShipToSideBar;\n}\n","import { clickOutside } from 'widgets/toolbox/util';\nimport { timeout } from 'widgets/toolbox/util';\n\nconst ESCAPE_CODE = 27;\n\n/**\n * @description SideBar implementation\n * @param {ReturnType<typeof import('widgets/global/AccessibilityFocusTrapMixin').default>} AccessibilityFocusTrapMixin mixin\n * @returns {typeof SideBar} - SideBar instance\n */\nexport default function (AccessibilityFocusTrapMixin) {\n    /**\n     * @class SideBar\n     * @classdesc Use it to show side bar.\n     * @property {string} data-ref - identifier to the specific bar, used by emitter to show proper sidebar\n     * @example\n     * // use this code to display widget\n     * <div\n     *     data-widget=\"emitBusEvent\"\n     *     data-event-click.prevent=\"emitBusEvent\"\n     *     data-ref-name=\"myAccountSideBar\"\n     *     data-bus-event-type=\"sidebar.open\"\n     * >\n     *     ...Toggler\n     * </div>\n     *\n     * <div\n     *     data-widget=\"sideBar\"\n     *     data-ref=\"myAccountSideBar\"\n     * >\n     *     <button data-event-click.prevent=\"close\">Close</button>\n     *     Side bar content\n     * </div>\n     */\n    class SideBar extends AccessibilityFocusTrapMixin {\n        constructor(...arg) {\n            super(...arg);\n            this.isOpened = false;\n        }\n\n        prefs() {\n            return {\n                hidden: true,\n                classesOpen: 'm-opened',\n                classesBodyOpen: 'm-panel_opened',\n                ...super.prefs(),\n                refTrapsContainer: 'container'\n            };\n        }\n\n        init() {\n            this.isOpened = this.ref('self').hasClass(this.prefs().classesOpen);\n\n            this.eventBus().on('sidebar.open', 'open');\n            this.eventBus().on('sidebar.close', 'close');\n        }\n\n        /**\n         * @param {typeof import('widgets/global/EmitBusEvent').default} target\n         */\n        open(target) {\n            const refName = target.config.refName;\n            if (this.has(refName) && !this.isOpened) {\n                this.show();\n                this.ref('self').addClass(this.prefs().classesOpen);\n                document.body.classList.add(this.prefs().classesBodyOpen);\n                this.isOpened = true;\n\n                this.clearFocusTimer = timeout(() => this.focusFirstElement(), this.prefs().focusTimeout);\n\n                // close panel on esc click\n                this.escHandler = this.ev('keyup', (_, event) => {\n                    if (event.keyCode === ESCAPE_CODE) {\n                        this.close();\n                    }\n                }, window).pop();\n\n                // close pane on outside click\n                this.outSideClickListener = clickOutside(this.ref('container'), this.close.bind(this));\n                if (this.outSideClickListener) {\n                    this.onDestroy(this.outSideClickListener);\n                }\n            }\n        }\n\n        /**\n         * @description Clean Up Listeners\n         * @returns {void}\n         */\n        cleanUpListeners() {\n            if (this.escHandler) {\n                this.escHandler();\n                this.escHandler = null;\n            }\n        }\n\n        close(context) {\n            if (\n                (typeof context === 'string' && !this.has(context))\n                || !this.isOpened\n            ) {\n                return;\n            }\n\n            if (this.clearFocusTimer) {\n                this.clearFocusTimer();\n            }\n\n            this.ref('self').removeClass(this.prefs().classesOpen);\n            document.body.classList.remove(this.prefs().classesBodyOpen);\n            this.isOpened = false;\n            // remove outside click listener\n            if (this.outSideClickListener) {\n                this.outSideClickListener();\n                this.outSideClickListener = undefined;\n            }\n\n            // Move focus back\n            if (this.backFocusElement) {\n                this.backFocusElement.focus();\n                this.backFocusElement = null;\n            }\n\n            this.cleanUpListeners();\n        }\n    }\n\n    return SideBar;\n}\n","import YouTubeIframe from 'youtube-iframe';\n\n/**\n * @description VideoPlayer implementation\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n * @returns {typeof VideoPlayer}\n */\nexport default function (Widget) {\n    /**\n     * @class VideoPlayer\n     */\n    class VideoPlayer extends Widget {\n        prefs() {\n            return {\n                videoId: '',\n                controls: true,\n                autoplay: false,\n                loop: false,\n                videoPlayerContainer: 'videoPlayerContainer',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            const {\n                videoId, controls, autoplay, loop\n            } = this.prefs();\n\n            YouTubeIframe.load((YT) => {\n                this.player = new YT.Player(this.ref('videoPlayerContainer').els[0], {\n                    videoId: videoId,\n                    playerVars: {\n                        enablejsapi: 1,\n                        fs: 1,\n                        mute: 1,\n                        disablekb: 1,\n                        controls: controls ? 1 : 0,\n                        autoplay: autoplay ? 1 : 0,\n                        playlist: autoplay ? videoId : '',\n                        loop: loop ? 1 : 0,\n                        rel: 0\n                    }\n                });\n            });\n        }\n    }\n\n    return VideoPlayer;\n}\n","/**\n * @description Handle ViewMore button behaviour and show hidden refinement after click on it.\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n */\n\nexport default function (Widget) {\n    return class ViewMore extends Widget {\n        prefs() {\n            return {\n                classCollapsed: 'm-collapsed',\n                classHiddenButton: 'h-hide_visually',\n                ...super.prefs()\n            };\n        }\n\n        showMore() {\n            const { classCollapsed, classHiddenButton, visibleItems } = this.prefs();\n            const self = this.ref('self').get();\n\n            self.classList.remove(classCollapsed);\n            this.emit('resetheight', self.closest('[data-ref=\"accordionItemPanelInner\"]').offsetHeight);\n\n            this.has('viewMoreButton', btn => {\n                btn.attr('aria-expanded', 'true');\n                btn.addClass(classHiddenButton);\n            });\n\n            // timeout needed for ScreenReader to announce Expanded state\n            setTimeout(() => {\n                const nextVisibleItem = +visibleItems + 1;\n                this.items[nextVisibleItem].ref('self').get().focus();\n            }, 500);\n        }\n\n        /**\n         * @description Restores 'ViewMore' button, when user clicks on 'View more' and then close, open panel\n         * Emits event, that restores height for panel, that contains THIS 'view more' button\n         * @param {object} [viewMore] One of the 'ViewMore' buttons for restoring\n         * @param {object} [accordionItemPanel] One of the panels in which 'View more' button placed.\n         * We need this panel for her height restoring\n         * @returns {void}\n         */\n\n        reinitViewMore() {\n            if(this.prefs().classCollapsed && this.refs.self.els[0].dataset.horizontalfilter) {\n                this.ref('self').get().classList.remove(this.prefs().classCollapsed);\n            } else {\n                this.ref('self').get().classList.add(this.prefs().classCollapsed);\n            }\n            this.ref('viewMoreButton').show();\n        }\n    };\n}\n","window.$ = require('jquery');\n\n// API URLs and Constants\nconst API_BASE_URL = \"https://winefinder.fbwineapps.com/WhereToBuy/GetWinesAndAccountGroups\";\n\n/**\n * Updates the flavor dropdown with the provided wines.\n * @param {Array} wines - List of wines fetched from the API.\n */\nfunction updateFlavorDropdown(wines) {\n    const flavorDropdown = $('#ejgWhereToBuy #flavor');\n    flavorDropdown.empty();\n\n    wines.forEach(wine => {\n        const option = $('<option>', {\n            value: wine.value,\n            text: wine.label\n        });\n        flavorDropdown.append(option);\n    });\n\n    // Select the first option and update the displayed text\n    const firstOption = flavorDropdown.find('option:first');\n    firstOption.prop('selected', true);\n    $('#ejgWhereToBuy #flavorDropDownWrapper .selectedTxt').text(firstOption.text());\n}\n\n/**\n * Updates the account group radio buttons and selects the \"In Stores\" option by default.\n * @param {Array} accounts - List of account groups fetched from the API.\n */\nfunction updateAccountGroups(accounts) {\n    if (accounts.length >= 2) {\n        let inStoresAccount = accounts.find(account => account.label.toLowerCase().includes(\"store\"));\n        let diningOutAccount = accounts.find(account => account.label.toLowerCase().includes(\"dining\"));\n\n        if (inStoresAccount) {\n            $('#inStores').val(inStoresAccount.value).prop('checked', true);\n            $('#inStoresLabel').text(inStoresAccount.label);\n        }\n\n        if (diningOutAccount) {\n            $('#diningOut').val(diningOutAccount.value);\n            $('#diningOutLabel').text(diningOutAccount.label);\n        }\n    }\n}\n\n/**\n * Fetches and updates the \"Where To Buy\" section.\n * @param {string} wineFinderId - The Wine Finder ID to fetch data for.\n */\nfunction updateWTBSection(wineFinderId) {\n    const apiUrl = `${API_BASE_URL}?WebSiteId=${wineFinderId}`;\n\n    $.ajax({\n        url: apiUrl,\n        type: 'GET',\n        dataType: 'jsonp',\n        success: function (data) {\n            if (data) {\n                if (data.wines) {\n                    updateFlavorDropdown(data.wines);\n                }\n                if (data.accounts) {\n                    updateAccountGroups(data.accounts);\n                }\n            }\n        },\n        error: function () {\n            console.error('Error fetching wine data');\n        }\n    });\n}\n\n/**\n * Handles the brand dropdown initialization and interaction.\n */\nfunction handleBrandDropdown() {\n    const brandDropdown = $('#brand');\n\n    if (brandDropdown.length) {\n        const flavorDropdown = $('#ejgWhereToBuy #flavor');\n        flavorDropdown.empty().append(\n            $('<option>', { value: '', text: 'Varietal *' })\n        );\n    }\n}\n\n/**\n * Sets up the brand dropdown change event listener.\n */\nfunction setupBrandDropdownListener() {\n    $(document).on('change', '#brand', function () {\n        const selectedBrand = $(this).find('option:selected');\n        const newWineFinderId = selectedBrand.data('winefinder-id');\n\n        $('#ejgWhereToBuy').attr('data-winefinder-id', newWineFinderId);\n        updateWTBSection(newWineFinderId);\n    });\n}\n\n/**\n * Observes the DOM for the addition of the brand dropdown.\n */\nfunction observeDOMForBrandDropdown() {\n    const observer = new MutationObserver(() => {\n        if ($('#brand').length) {\n            observer.disconnect();\n            handleBrandDropdown();\n        }\n    });\n\n    observer.observe(document.body, { childList: true, subtree: true });\n}\n\n/**\n * Initializes the \"Where To Buy\" section.\n */\nfunction initializeWTBSection() {\n    setupBrandDropdownListener();\n    observeDOMForBrandDropdown();\n}\n\n$(document).ready(initializeWTBSection);\n","import { submitFormJson } from 'widgets/toolbox/ajax';\nimport { getStateID, isStateRestricted } from 'harmony/toolbox/shipToUtils';\nimport { isMediumViewAndDown } from 'widgets/toolbox/viewtype';\n\n/**\n * @description Quick add to cart widget\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n * @returns {typeof QuickAddToCart} - QuickAddToCart instance\n */\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/ProcessButton').default>} ProcessButton\n * @typedef {ReturnType<typeof import('widgets/forms/HarmonyQuantityStepper').default>} HarmonyQuantityStepper\n */\n\nexport default function (Widget) {\n    /**\n     * @class QuickAddToCart\n     * @classdesc Controls quantity stepper and 'add to cart' button\n     * @property {boolean} data-is-disabled handling if component is disabled inside of component, as it has behavior based on viewport\n     * @property {string} data-product-id\n     * @property {string} data-text-network-error Error message for network issues\n     * @property {string} data-show-minicart-on-product-add - Show minicart on product add\n     * @property {string} data-accessibility-alerts Alerts configuration\n     * @example\n     * <div data-widget=\"quickAddToCart\"\n        data-product-id=\"productID\"\n        data-text-network-error=\"${Resource.msg('error.alert.network', 'product', null)}\"\n        data-accessibility-alerts='{\n            \"addedtocart\": \"${Resource.msg('alert.addedtocart', 'product', null)}\"\n        }'\n        data-is-disabled=\"false\">\n            <div  data-widget=\"harmonyQuantityStepper\"\n                ...\n            </div>\n            <button data-ref=\"addToCart\">\n                ...\n            </button>\n        </div>\n     */\n    class QuickAddToCart extends Widget {\n        prefs() {\n            return {\n                isDisabled: false,\n                showMinicartOnProductAdd: false,\n                autoCloseMinicart: false,\n                autoCloseTimeout: 5000,\n                classHidden: 'h-hidden',\n                shipToRestrictedStates: [],\n                isHandledRestrictedStates: false,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            // handle shipping restrictions\n            this.eventBus().on('shipto.restrictions.updated', 'handleStateRestrictions');\n            this.eventBus().on('minicart.removed.product', 'handleRemovedProduct');\n            this.handleStateRestrictions();\n        }\n\n        /**\n         * @param stateID\n         * @description Handle update of shipping restrictions\n         */\n        handleStateRestrictions(stateID) {\n            if (!this.prefs().isHandledRestrictedStates) {\n                return;\n            }\n\n            stateID = getStateID(stateID);\n            if (!stateID) {\n                return;\n            }\n\n            var isRestricted = isStateRestricted(stateID, this.prefs().shipToRestrictedStates);\n            var classHidden = this.prefs().classHidden;\n\n            // handle `quickAddToCart` block\n            this.ref('self').toggleClass(classHidden, isRestricted);\n\n            // handle disabled button\n            var disabledButtons = document.querySelectorAll('[data-id=producttile_disabledbtn_' + this.prefs().productId + ']');\n\n            disabledButtons.forEach(function (disabledBtn) {\n                disabledBtn.classList.toggle(classHidden, !isRestricted);\n            });\n        }\n\n        /**\n         * @description post action after product adding. Handling success/error here\n         * @param {object} response server response object\n         */\n        postAddProduct(response) {\n            const { autoCloseMinicart, autoCloseTimeout } = this.prefs();\n            const cartModel = response.cart;\n            let element = document.getElementById('add-to-cart-' + this.prefs().productId);\n\n            if (!response.error && cartModel) {\n                const analytics = this.data('analytics');\n\n                if (analytics) {\n                    analytics.quantity = Number(this.getQtyValue());\n                    this.data('analytics', JSON.stringify(analytics));\n                }\n                element?.setAttribute('data-add-to-cart-success', 'true');\n                const accessibilityAlert = this.prefs().accessibilityAlerts.addedtocart;\n                this.showAlertMessage(accessibilityAlert, false);\n                if (!isMediumViewAndDown()) {\n                    this.showAlertMessage(accessibilityAlert, false);\n                }\n\n                // Hide mini cart pop up for CSC Agent\n                if (response.isCSCAgent) {\n                    cartModel.showMinicart = false;\n                } else {\n                    cartModel.showMinicart = this.prefs().showMinicartOnProductAdd;\n                }\n                this.eventBus().emit('product.added.to.cart', cartModel, this);\n\n                if (autoCloseMinicart) {\n                    this.eventBus().emit('auto.close.minicart', autoCloseTimeout);\n                }\n\n                this.updateAvailabilityComponent();\n            } else if (response.error) {\n                element?.setAttribute('data-add-to-cart-success', 'false');\n                this.showAlertMessage(response.message, true);\n            }\n\n            // set low in stock status\n            if (response.isNotEnoughATS && response.errorData) {\n                // eslint-disable-next-line max-len\n                const HarmonyQuantityStepper = /** @type {HarmonyQuantityStepper} */(this.getConstructor('harmonyQuantityStepper'));\n\n                this.eachChild(child => {\n                    if (!(child instanceof HarmonyQuantityStepper)) {\n                        return;\n                    }\n\n                    // set max available value\n                    child.ref('field').val(response.errorData.qtyValue);\n                });\n            }\n\n            // set out of stock status\n            if (response.isOutOfStock && response.errorData) {\n                // eslint-disable-next-line max-len\n                const HarmonyQuantityStepper = /** @type {HarmonyQuantityStepper} */(this.getConstructor('harmonyQuantityStepper'));\n                const ProcessButton = /** @type {ProcessButton} */(this.getConstructor('processButton'));\n\n                this.eachChild(child => {\n                    if ((child instanceof HarmonyQuantityStepper)) {\n                        child.ref('field').val(response.errorData.qtyValue);\n                        child.toggleDisable(true);\n                    }\n\n                    if ((child instanceof ProcessButton)) {\n                        child.ref('self').setText(this.prefs().outOfStockLabel);\n                        child.disable();\n                    }\n                });\n            }\n        }\n\n        /**\n         * @description Get value from input quantity block\n         * @returns {number} quantity value for current tile\n         */\n        getQtyValue() {\n            return this.getById('input-quantity', (qtyInput) => {\n                return (qtyInput && qtyInput.ref('field') && qtyInput.ref('field').val());\n            });\n        }\n\n        /**\n         * @param {RefElement} button add to cart button itself\n         */\n        addToCart(button) {\n            if (this.prefs().isDisabled) {\n                return;\n            }\n\n            this.eventBus().emit('addtocart.button.clicked', true);\n\n            // Prevent twice clicks on a button\n            if (button.isBusy) {\n                return;\n            }\n\n            const addToCartBtnPrefs = button.prefs();\n            // eslint-disable-next-line max-len\n            var wineClubProdList = document.getElementById('wineClubProdList') != null ? document.getElementById('wineClubProdList').value : '';\n            const promise = submitFormJson(addToCartBtnPrefs.addToCartUrl, {\n                pid: this.currentProductID || addToCartBtnPrefs.pid,\n                quantity: this.getQtyValue() || this.selectedQuantity || 1,\n                wineClubProdList: wineClubProdList,\n                childProducts: this.getChildProducts() || []\n            }).then(response => this.postAddProduct(response))\n                .catch(() => {\n                    //once bundle perfomance issue is fixed, Remove if condition.\n                    if(addToCartBtnPrefs.isbundle === undefined && !addToCartBtnPrefs.isbundle){\n                        this.showAlertMessage(this.prefs().textNetworkError, true);\n                    }\n                })\n                .finally(() => {\n                    this.eventBus().emit('addtocart.button.clicked', false);\n                });\n\n            this.eventBus().emit('loader.start', promise);\n        }\n\n        /**\n         * @description Emits global alert\n         * @param {string} message Text for an alert\n         * @param {boolean} isError is error flag\n         */\n        showAlertMessage(message, isError) {\n            this.eventBus().emit('alert.show', {\n                accessibilityAlert: message,\n                errorClass: isError\n            });\n        }\n\n        /**\n         * @description Add to cart trigger click handler\n         */\n        triggerClick() {\n            const ProcessButton = /** @type {ProcessButton} */(this.getConstructor('processButton'));\n\n            this.eachChild(child => {\n                if (child instanceof ProcessButton) {\n                    this.addToCart(child);\n                }\n            });\n        }\n\n        /**\n         * @description Toggle busy of addToCartBtn\n         * @param {object} initiator - widget initiator\n         * @param {boolean} isBusy - is busy processing flag\n         */\n        toggleBusy(initiator, isBusy) {\n            const ProcessButton = /** @type {ProcessButton} */(this.getConstructor('processButton'));\n\n            this.eachChild(child => {\n                if (!(child instanceof ProcessButton)) {\n                    return;\n                }\n\n                if (isBusy) {\n                    child.startProcess();\n                } else {\n                    child.stopProcess();\n                }\n            });\n        }\n\n        /**\n         * @description method definition is obligatory when using in conjunction with a QuantityStepper component\n         */\n        changeAttribute() {}\n\n        renderAddToCartText(params) {\n            this.getById('addToCart', (addToCart) => {\n                addToCart.render('template', {\n                    isAvailable: params.available,\n                    isPreorder: params.availability && params.availability.isPreorder\n                }, addToCart.ref('container'));\n            });\n        }\n\n        /**\n         * @description get value from button data attribute\n         * @returns {any} childProducts\n         */\n        getChildProducts() {\n            const ProcessButton = /** @type {ProcessButton} */(this.getConstructor('processButton'));\n            let childProducts = null;\n\n            this.eachChild(child => {\n                if (!(child instanceof ProcessButton)) {\n                    return;\n                }\n\n                childProducts = JSON.stringify((child && child.config && child.config.childProducts));\n            });\n\n            return childProducts;\n        }\n\n        /**\n         * @description handle removed product\n         * @param {string} pid - product id\n         */\n        handleRemovedProduct(pid) {\n            if (pid === this.prefs().productId) {\n                this.updateAvailabilityComponent();\n            }\n        }\n\n        /**\n         * @description update availability component\n         */\n        updateAvailabilityComponent() {\n            // eslint-disable-next-line max-len\n            const HarmonyQuantityStepper = /** @type {HarmonyQuantityStepper} */(this.getConstructor('harmonyQuantityStepper'));\n\n            this.eachChild(child => {\n                if ((child instanceof HarmonyQuantityStepper)) {\n                    child.changeValue();\n                }\n            });\n        }\n    }\n\n    return QuickAddToCart;\n}\n","import { getStateID, isStateRestricted } from 'harmony/toolbox/shipToUtils';\n\n/**\n * @description ShipToError widget implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof ShipToError} - ShipToStates instance\n */\nexport default function (Widget) {\n    return class ShipToError extends Widget {\n        prefs() {\n            return {\n                shipToRestrictedStates: [],\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            // handle shipping restrictions\n            this.eventBus().on('shipto.restrictions.updated', 'handleStateRestrictions');\n            this.eventBus().on('shipto.restrictions.updated.error.msg', 'handleStateRestrictions');\n            this.handleStateRestrictions();\n        }\n\n        /**\n         * @description Handle shipping restrictions\n         */\n        handleStateRestrictions(stateID) {\n            stateID = getStateID(stateID);\n            if (!stateID) {\n                return;\n            }\n\n            if (isStateRestricted(stateID, this.prefs().shipToRestrictedStates)) {\n                this.show();\n            } else {\n                this.hide();\n            }\n        }\n    };\n}\n","/**\n * @description Handle ViewMore button behaviour and show hidden refinement after click on it.\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n */\n\nexport default function (Widget) {\n    return class ReserveBarCart extends Widget {\n        prefs() {\n            return {\n                ...super.prefs() //extend preferences from parent widget class\n            };\n        }\n        init() {\n            setTimeout(() => {\n                this.eventBus().emit('rbCart.init', this);\n            }, 0);\n            \n        }\n        handleCartClick() {\n            this.eventBus().emit('reserveBarCart.toggle', this);\n        }\n    };\n}\n","/**\n * @description Handle ViewMore button behaviour and show hidden refinement after click on it.\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n */\n\nexport default function (Widget) {\n    return class ReserveBarMgr extends Widget {\n        prefs() {\n            return {\n                autoCompleteResults: [],\n                shoppingCart: null,\n                domCart: '',\n                domSearch: '',\n                liquid: null,\n                selectedAddress: null,\n                productContainers: [],\n                groupingIDS: [],\n                emptyCart: '',\n                ...super.prefs() //extend preferences from parent widget class\n            };\n        }\n        init = async () => {\n            this.groupingIDS = [];\n            this.autoCompleteResults = this.prefs().autoCompleteResults;\n            this.shoppingCart = this.prefs().shoppingCart;\n            this.liquid = this.prefs().liquid;\n            this.selectedAddress = this.prefs().selectedAddress;\n            this.productContainers = this.prefs().productContainers;\n            this.domCart = this.prefs().domCart;\n            this.domSearch = this.prefs().domSearch;\n            this.emptyCart = this.config.emptycart;\n\n            this.eventBus().on('rbSearch.init', 'initDomSearch');\n            this.eventBus().on('rbCart.init', 'initDomCart');\n            this.eventBus().on('reserveBarCart.toggle', 'toggleReserveBarCart');\n            this.eventBus().on('reserveBarAddress.update', 'getAddress');\n            this.eventBus().on('reserveBarProduct.init', 'initProduct');\n            this.initLiquid().then(()=> this.initCart());\n            \n        }\n        // takes instance of cart widget\n        toggleReserveBarCart(cart) {\n            const cartDrawer = cart.ref('reserveBarCartDrawer').get();\n            const cartBg = cart.ref('reserveBarCartBG').get();\n            if (cartDrawer) {\n                cartDrawer.classList.toggle('translate-x-full');\n                cartDrawer.classList.toggle('translate-x-0');\n            }\n            if (cartBg) {\n                cartBg.classList.toggle('show');\n            }\n        }\n        initLiquid = async () => {\n            this.liquid = await Liquid({\n                clientId: 'e53d4d04a676395ccd1c2d5b6b94c3aa44452330e502c999892d8091',\n                env: 'production'\n            });\n            \n        }\n        initCart = async () => {\n            const storedCart = JSON.parse(localStorage.getItem('RbCartID'));\n            if (storedCart === null || storedCart.length === 0) {\n                // If no cart is found in local storage, create a new one\n                const liquidCart = await this.liquid.cart({\n                    cartItems: [],\n                    giftOrder: false,\n                });\n                this.shoppingCart = liquidCart;\n            } else {\n                // If a cart is found in local storage, set it in the state\n                const preExistingCart = await this.liquid.cart({\n                    id: storedCart.id \n                });\n                //handles coming back from checkout if cart ahs been emptied.\n                if (preExistingCart.cartItmes?.length < 0) {\n                const liquidCart = await this.liquid.cart({\n                    cartItems: [],\n                    giftOrder: false,\n                });\n                this.shoppingCart = liquidCart;\n                } else {\n                    this.shoppingCart = preExistingCart;\n                }\n                \n                this.renderShoppingCart(this.shoppingCart);\n            }\n            const savedAddress = JSON.parse(localStorage.getItem('RbAddress'));\n            if (this.selectedAddress == null && savedAddress != null && typeof (this.domSearch) != 'string'\n            ) {\n                try {\n                    \n                    this.selectedAddress = savedAddress;\n                        const search = this.domSearch.ref('reserveBarSearch').get();\n                        search.value = this.selectedAddress.formattedAddress;\n                    const productList = await this.fetchProducts(this.selectedAddress.formattedAddress);\n                    // Render the productList\n                    this.renderRetailers(productList);\n                } catch (error) {\n                    console.log(error);\n                }\n            }\n            this.handleUpdateCartQty(this.domCart);\n        }\n        initProduct(product) {\n            this.groupingIDS.push(product.config.grouping);\n            this.productContainers.push(product);\n        }\n        initDomCart(cart) {\n            this.domCart = cart;\n        }\n        initDomSearch(search) {\n            this.domSearch = search;\n        }\n        getAddress = async (searchWidget) => {\n            const search = searchWidget.ref('reserveBarSearch').get();\n            let autoCompleteResults;\n            if (search.value.trim().length === 0) {\n                autoCompleteResults = [];\n                this.renderAutoCompleteResults();\n                return;\n            }\n            try {\n                /// Get address suggestion from liquid\n                autoCompleteResults = await this.liquid.address({\n                    search: search.value,\n                });\n                /// Render the address suggestion\n                this.renderAutoCompleteResults(searchWidget, autoCompleteResults, this.config.emptycart);\n            } catch (error) {\n                console.log(error);\n            }\n        }\n        renderAutoCompleteResults(searchWidget, autoCompleteResults, emptyCartMessage) {\n            // Clear the previous results\n            if (searchWidget == undefined) return;\n            const autoCompleteList = searchWidget.ref('autoCompleteList').get();\n            autoCompleteList.innerHTML = '';\n            autoCompleteList.classList.remove('results');\n        \n            if (autoCompleteResults == undefined) return;\n            // // Render the new results\n            autoCompleteResults.forEach((result) => {\n                const listItem = document.createElement('li');\n                listItem.setAttribute('tabindex', '0');\n                listItem.textContent = result.description;\n                listItem.addEventListener('click', () => this.handleAddressClick(searchWidget, result, emptyCartMessage));\n                listItem.addEventListener('keypress', (event) => { if (event.key === \"Enter\") { this.handleAddressClick(searchWidget, result, emptyCartMessage); } })\n                autoCompleteList.classList.add('results');\n                autoCompleteList.appendChild(listItem);\n            });\n        }\n        handleAddressClick = async (searchWidget, result, emptyCartMessage) => {\n            // Clear the previous results\n            const searchInput = searchWidget.ref('reserveBarSearch').get();\n            searchInput.value = result.description;\n            if (searchWidget != undefined) {\n                    const autoCompleteList = searchWidget.ref('autoCompleteList').get();\n                    autoCompleteList.innerHTML = '';\n                    autoCompleteList.classList.remove('results'); \n            }\n\n            this.selectedAddress = '';\n            //clear shopping cart\n            this.clearCart().then(() => this.handleUpdateCartQty(this.domCart));\n            localStorage.removeItem('RbAddress');\n           \n            const productCartDiv = this.domCart.ref('productCart').get();\n            productCartDiv.innerHTML = emptyCartMessage;\n\n            this.productContainers.forEach(element => {\n                const retailersContainer = element.ref('reserveBarRetailers').get();\n                if (retailersContainer) {\n                    retailersContainer.style.display = 'block';\n                }\n            });\n\n            const productList = await this.fetchProducts(result.description);\n            // Render the productList\n            this.renderRetailers(productList);\n\n            try {\n                // Get the full address details\n                const placeDetail = await this.liquid.address({\n                    placeId: result.placeId\n                });\n                localStorage.setItem('RbAddress', JSON.stringify(placeDetail));\n                this.selectedAddress = placeDetail;\n           \n            } catch (error) {\n                 console.log(error);\n            }\n        };\n\n        /// Fetch products from liquid\n        fetchProducts = async (address) => {\n            try {\n                return await this.liquid.product({\n                    ids: this.groupingIDS ,\n                    shipAddress: address,\n                    top100: false,\n                });\n            } catch (error) {\n                console.log(error);\n            }\n        };\n\n        renderRetailers = (productList) => {\n\n\n            this.productContainers.forEach(element => {\n                const product = productList.find(product => product.id == element.config.grouping)\n                const retailersContainer = element.ref('reserveBarRetailers').get();\n                const productGrid = document.createElement('div');\n                productGrid.classList.add('b-reserve_bar--productGrid');\n                const productContainer = document.createElement('div');\n                const sizeContainer = document.createElement('div');\n                if (retailersContainer) {\n                    retailersContainer.innerHTML = \"\";\n                }\n                if (product) {\n                    if (product.variants.length > 0) {\n                        const sizeSelect = document.createElement('div');\n                        sizeSelect.classList.add('b-reserve_bar--sizeSelect');\n                        sizeSelect.innerHTML = '<p class=\"t-heading_5\">Select a Size</p>';\n                        product.variants.forEach((variant) => {\n                            if (variant) {\n                                sizeSelect.innerHTML += `<button class=\"g-button_alt\" data-sizeselect=\"${variant.size.replace(', bottle', '')}\">${variant.size.replace(', bottle', '')}</button>`;\n                                sizeSelect.addEventListener('click', (event) => {\n\n                                  \n                                    const allsizeButtons = document.querySelectorAll('[data-sizeselect]');\n                                    [...allsizeButtons].forEach(button => {\n                                        if (button == event.target) {\n                                              event.target.classList.remove('g-button_alt');\n                                                event.target.classList.add('g-button_main');\n                                        } else {\n                                              button.classList.add('g-button_alt');\n                                            button.classList.remove('g-button_main');\n                                        }\n                                    });\n                                    const allRetailers = retailersContainer.querySelectorAll('.productRetailer');\n                                    allRetailers.forEach(retailer => {\n                                        retailer.style.display = 'none';\n                                    });\n                                    const availabilityLabels = retailersContainer.querySelectorAll('.productAvailability');\n                                          availabilityLabels.forEach(label => {\n                                        label.style.display = 'none';\n                                    });\n                                    const selectedRetailers = retailersContainer.querySelectorAll(`[data-size=\"${event.target.dataset.sizeselect}\"]`);\n                                    selectedRetailers.forEach(selected => {\n                                        selected.style.display = 'block';\n                                    });\n                                })\n                                sizeContainer.appendChild(sizeSelect);\n                                variant.availability.forEach((availability) => {\n                                    const availabilityLabel = document.createElement('h3');\n                                    let label = '';\n                                    if (availability == 'shipped') {\n                                        label= \"Ship\"\n                                    }\n                                    if (availability == 'onDemand') {\n                                        label = 'Delivery Same Day or Schedule';\n                                    }\n                                    availabilityLabel.innerHTML = label;\n                                    availabilityLabel.classList.add('productAvailability');\n                                    availabilityLabel.classList.add('t-heading_5');\n                                    availabilityLabel.setAttribute('data-size', variant.size.replace(', bottle', ''));\n                                    availabilityLabel.style.display = 'none';\n                                    productContainer.appendChild(availabilityLabel);   \n                                    variant.retailers.forEach((retailer) => {\n                                        if (retailer.type == availability) {\n                                        const productDetails = document.createElement('div');\n                                            productDetails.style.display = 'none';\n                                            productDetails.classList.add('productRetailer');\n                                            if (retailer.shippingMethod.deliveryExpectation == 'On backorder') {\n                                                productDetails.classList.add('disabled');\n                                            }\n                                            productDetails.classList.add('t-paragraph_1');\n                                            productDetails.setAttribute('data-size', variant.size.replace(', bottle', ''));\n                                            productDetails.innerHTML = `\n                                            <span>${retailer.retailer.name}</span><br />\n                                            <span>${retailer.shippingMethod.deliveryExpectation}</span><br />\n                                            <span><b>Price:</b> $${retailer.price}</span>\n                                        `;\n                                            productDetails.addEventListener('click', () => {\n                                                retailer['productImages'] = variant.images;\n                                                retailer['productName'] = product.name;\n                                                this.handleRetailerClick(retailer, retailer.type, element);\n                                            });\n\n                                            productContainer.appendChild(productDetails);\n                                            productGrid.appendChild(productContainer);\n                                    }\n                                });\n                                });\n                            }\n\n                        });\n\n                        retailersContainer.appendChild(sizeContainer);\n                        retailersContainer.appendChild(productGrid);\n                    } else {\n                        retailersContainer.innerHTML = `<p class=\"t-paragraph_1\" style=\"text-align:center;\" data-ref=\"reserveBarNoAddress\"><b>${element.config.unavailable}</b></p>`;\n                    }\n                }\n            });\n        };\n        handleRetailerClick(selectedRetailer, availability, element) {\n            /// hide the retailers container\n            const retailersContainer = element.ref('reserveBarRetailers').get();\n            retailersContainer.style.display = 'none';\n            const selectedProductDetailsContainer = element.ref('reserveBarSelectedProductDetails').get();\n\n            if (selectedRetailer) {\n                const productDetailsContainer = document.createElement('div');\n                const productQuantityContainer = document.createElement('div');\n                //// Create back button\n                const buttonWrap = document.createElement('span');\n                const backButton = document.createElement('button');\n                backButton.type = 'button';\n                backButton.textContent = '<< Back';\n                backButton.addEventListener('click', () => {\n                    retailersContainer.style.display = 'block';\n                    selectedProductDetailsContainer.innerHTML = '';\n                    //handle error message text\n                });\n                buttonWrap.appendChild(backButton);\n                //Create product name element\n                const productName = document.createElement('h3');\n                productName.textContent = selectedRetailer.productName;\n                productName.classList.add('t-heading_4');\n\n                /// Create availability title element\n                const retailerDetails = document.createElement('p');\n                retailerDetails.textContent = `Sold By ${selectedRetailer.retailer.name}`;\n\n                /// Create delivery expectation element\n                const deliveryExpectation = document.createElement('p');\n                deliveryExpectation.textContent = selectedRetailer.shippingMethod.deliveryExpectation;\n        \n                const selectWrap = document.createElement('div');\n                /// Create quantity element\n                const quantityLabel = document.createElement('label');\n                quantityLabel.textContent = 'Quantity:';\n                quantityLabel.classList.add('f-input_text-label');\n                /// Create quantity select element\n                const quantitySelect = document.createElement('select');\n                quantitySelect.dataset.ref = 'quantitySelect';\n                quantitySelect.addEventListener('change', () => this.handleProductQtyChange(element, selectedRetailer.price, quantitySelect.value));\n                quantitySelect.classList.add('f-input_select-field');\n                \n\n                /// Populate quantity select element\n                //setting artifical limit to account for typos like 99999 bottles in stock\n                Array.from({\n                        length: Number(selectedRetailer.inStock <= 99 ? selectedRetailer.inStock : 99)\n                    },\n                    (_, index) => index + 1\n                ).forEach((quantity) => {\n                    const option = document.createElement('option');\n                    option.value = quantity.toString();\n                    option.textContent = quantity.toString();\n                    quantitySelect.appendChild(option);\n                });\n\n                selectWrap.appendChild(quantityLabel);\n                selectWrap.appendChild(quantitySelect);\n                /// Create price element\n                const price = document.createElement('p');\n                price.innerHTML = `<b>$${parseFloat(selectedRetailer.price).toFixed(\n            2\n          )}</b>`;\n\n                /// Create error message element\n                const errorMessageElement = document.createElement('p');\n                errorMessageElement.id = 'errorMessage';\n\n                /// Create total price element\n                const total = document.createElement('p');\n                total.dataset.ref = 'totalPrice';\n                total.innerHTML = `<b>Total</b>: $${(parseFloat(selectedRetailer.price) * Number(quantitySelect.value)).toFixed(2)}`;\n\n                /// Create `add to cart` button\n                const addToCartButton = document.createElement('button');\n                addToCartButton.classList.add('g-button_main');\n                addToCartButton.textContent = 'Add To Cart';\n                addToCartButton.addEventListener('click', () => {\n                    this.updateCart(selectedRetailer, element).then(()=>{                    retailersContainer.style.display = 'block';\n                    selectedProductDetailsContainer.innerHTML = '';});\n                });\n\n                /// Create product unavailable element\n                const productUnavailable = document.createElement('p');\n                productUnavailable.textContent = 'Product is Unavailable';\n\n\n                /// Add elements to the product details container\n                \n                productDetailsContainer.appendChild(productName);\n                productDetailsContainer.appendChild(price);\n                productDetailsContainer.appendChild(retailerDetails);\n                productDetailsContainer.appendChild(deliveryExpectation);\n             \n\n                productQuantityContainer.appendChild(selectWrap);\n                productQuantityContainer.appendChild(total);\n            \n                selectedProductDetailsContainer.appendChild(buttonWrap);\n                selectedProductDetailsContainer.appendChild(productDetailsContainer);\n                selectedProductDetailsContainer.appendChild(productQuantityContainer);\n                 selectedProductDetailsContainer.appendChild(addToCartButton);\n\n                selectedProductDetailsContainer.appendChild(errorMessageElement);\n            }\n\n\n\n\n\n\n        };\n        handleProductQtyChange(element, price, quantity) {\n            const total = element.ref('totalPrice').get();\n            total.innerHTML = `<b>Total</b>: $${(parseFloat(price) * quantity).toFixed(2)}`;\n        }\n\n        updateCart = async (retailer, element) => {\n            let qty;\n            try {\n                if (this.shoppingCart !== null) {\n                    const inCart = this.shoppingCart.cartItems.find(\n                        (o) => o.product.id === retailer?.variantId\n                    );\n                    qty = Number(element.ref('quantitySelect').get().value);\n                    // if already in the cart incrament the quantity instead of resetting to 1\n                    if (inCart) {\n                        const index = this.shoppingCart.cartItems.findIndex(\n                            (o) => o.product.id === retailer?.variantId\n                        );\n\n                        if (index !== -1) {\n                            qty = this.shoppingCart.cartItems[index].quantity + qty;\n                        }\n                    }\n                }\n                const currentCart = this.shoppingCart.cartItems ? this.shoppingCart.cartItems : [];\n                currentCart.push({\n                            variantId: retailer?.variantId,\n                            quantity: qty,\n                        })\n                const newCart = {\n                    id: this.shoppingCart.id,\n                    cartItems: currentCart\n                };\n\n                const result = await this.liquid.cart(newCart);\n                this.shoppingCart = result;\n                localStorage.setItem('RbCartID', JSON.stringify(this.shoppingCart));\n\n                // Update the this.shoppingCart object in the productCart div\n                this.renderShoppingCart(result).then(() => { this.handleUpdateCartQty(this.domCart); this.toggleReserveBarCart(this.domCart); });\n               \n            } catch (error) {\n                console.log(error);\n                alert('Failed to add product to cart. Please try again later.');\n            }\n        };\n        renderShoppingCart = async (cart) => {\n            const productCartDiv = this.domCart.ref('productCart').get();\n         \n            if (cart) {\n                       productCartDiv.innerHTML = '';\n          const cartContainer = document.createElement('div');\n          let counter = 0;\n\n                        /// Render the new shopping cart items\n                        if (cart.cartItems != null) {\n                      cart.cartItems.forEach((item) => {\n            const cartItemDiv = document.createElement('div');\n            cartItemDiv.classList.add('b-rb_cart--list__item');\n            const cartQuantitySelect = document.createElement('select');\n            cartQuantitySelect.id = `cartQuantitySelect_${++counter}`;\n            cartQuantitySelect.addEventListener('change', (event) => {\n                this.handleCartQtyChange(event, item);\n            });\n\n            /// Populate quantity select element\n            Array.from(\n              { length: Number(item.product.inStock) },\n              (_, index) => index + 1\n            ).forEach((quantity) => {\n              const option = document.createElement('option');\n              option.value = quantity;\n              option.textContent = quantity;\n              cartQuantitySelect.appendChild(option);\n              if (quantity === item.quantity) {\n                option.selected = true;\n              }\n            });\n\n        \n            const cartImage = document.createElement('img');\n            cartImage.width = 100;\n            cartImage.height = 200;\n            cartImage.src = item.product.thumbUrl;\n            cartImage.alt = item.product.name\n            const cartItemWrap = document.createElement('div');\n            const cartItemTitle = document.createElement('h3');\n            cartItemTitle.innerHTML = item.productGrouping.name;\n                          const cartItemVolume = document.createElement('p');\n                          cartItemVolume.classList.add('volume');\n            cartItemVolume.innerHTML = item.product.volume;\n            const cartQtyContainer = document.createElement('p');\n                          cartQtyContainer.appendChild(cartQuantitySelect);\n                          cartQtyContainer.classList.add('cartQty');\n            const cartItemPrice = document.createElement('p');\n                          cartItemPrice.innerHTML = `<b>Price</b>: ${item.product.price}`;\n                          cartQtyContainer.appendChild(cartItemPrice);\n            const cartItemFulfillment = document.createElement('p');\n            cartItemFulfillment.innerHTML = `Fulfilled by ${item.retailerName}`;\n            // const cartItemDelivery = document.createElement('p');\n            // cartItemDelivery.innerHTML = item.shortDeliveryExpectation;\n            const cartItemRemove = document.createElement('button');\n            cartItemRemove.setAttribute('aria-label', 'Remove Item');\n            cartItemRemove.innerHTML = '<svg fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" /></svg>'\n\n            cartItemRemove.addEventListener('click', () => {\n                this.handleRemoveFromCart(item.product.id).then(() => this.handleUpdateCartQty(this.domCart));\n            });\n            cartItemWrap.appendChild(cartItemTitle);\n            cartItemWrap.appendChild(cartItemVolume);\n            cartItemWrap.appendChild(cartItemFulfillment);\n            // cartItemWrap.appendChild(cartItemDelivery);\n            cartItemWrap.appendChild(cartQtyContainer);\n\n            \n            cartItemDiv.appendChild(cartImage);\n            cartItemDiv.appendChild(cartItemWrap);\n            cartItemDiv.appendChild(cartItemRemove); \n            cartContainer.appendChild(cartItemDiv);\n        });\n            \n        }\n\n\n          /// Create checkout button\n            const checkoutButton = document.createElement('button');\n            checkoutButton.textContent = 'Checkout';\n            checkoutButton.classList.add('g-button_main')\n            checkoutButton.addEventListener('click', () => {\n            this.handleCheckout();\n        });\n\n                        if (cart.cartItems.length > 0) {\n                            const subTotalWrap = document.createElement('div')\n                            subTotalWrap.classList.add('b-rb_cart--subtotal');\n                            subTotalWrap.id = 'rbCart-subtotal';\n                            const subTotalItems = document.createElement('p');\n                            subTotalItems.innerHTML = `<b>Subtotal</b> (${cart.itemCount} ${cart.itemCount > 1 ? 'items' : 'item'})`;\n                            const subTotal = document.createElement('p');\n                            subTotal.innerHTML = `<span>$</span> ${cart.subtotal}`;\n                            subTotalWrap.appendChild(subTotalItems);\n                            subTotalWrap.appendChild(subTotal)\n                            productCartDiv.appendChild(cartContainer);\n                            productCartDiv.appendChild(subTotalWrap);\n              productCartDiv.appendChild(checkoutButton);\n\n                        } else {\n                            productCartDiv.textContent = this.emptyCart;\n          }\n            } else {\n          productCartDiv.textContent = this.emptyCart;\n        }\n        }\n        handleRemoveFromCart = async (productId) => {\n        if (!productId) return;\n        const updatedCart = {\n          id: this.shoppingCart.id,\n          cartItems: [\n            ...this.shoppingCart.cartItems,\n            ...[\n              {\n                variantId: productId,\n                quantity: 0,\n              },\n            ],\n          ],\n        };\n\n        try {\n          this.shoppingCart = await this.liquid.cart(updatedCart);\n          localStorage.setItem('RbCartID', JSON.stringify(this.shoppingCart));\n          this.renderShoppingCart(this.shoppingCart);\n        } catch (error) {\n          console.log(error);\n        }\n        };\n        \n      handleCartQtyChange = async (event, item) => {\n        const qty = Number(event.target?.value);\n        const updatedCart = {\n          id: this.shoppingCart.id,\n          cartItems: [\n            ...this.shoppingCart.cartItems,\n            ...[\n              {\n                variantId: item.product.id,\n                quantity: qty,\n              },\n            ],\n          ],\n        };\n        try {\n            const result = await this.liquid.cart(updatedCart);\n          this.shoppingCart = result;\n            localStorage.setItem('RbCartID', JSON.stringify(this.shoppingCart));\n            const subTotal = document.getElementById('rbCart-subtotal');\n            const subTotalItems = document.createElement('p');\n            subTotalItems.innerHTML = `Subtotal(${this.shoppingCart.itemCount} ${this.shoppingCart.itemCount > 1 ? 'items' : 'item'})`;\n            const subTotalPrice = document.createElement('p');\n            subTotalPrice.innerHTML = `<span>$</span> ${this.shoppingCart.subtotal}`;\n            subTotal.innerHTML = '';\n            subTotal.appendChild(subTotalItems);\n            subTotal.appendChild(subTotalPrice);\n        } catch (error) {\n            // log error\n            console.log(error);\n        }\n      };\n        handleCheckout = async () => {\n        try {\n          if (!this.selectedAddress?.address1.trim()) {\n            alert('Please enter a valid delivery address');\n            return;\n          }\n          const checkoutUrl = await this.liquid.checkout({\n            cartId: this.shoppingCart.id,\n            address: {\n              address1: this.selectedAddress.address1,\n              city: this.selectedAddress.city,\n              state: this.selectedAddress.state,\n              zipCode: this.selectedAddress.zipCode,\n            },\n          });\n\n          if (checkoutUrl.url) {\n            // Redirect to checkout\n            window.location = checkoutUrl.url;\n        }\n        } catch (error) {\n          console.log(error);\n        }\n        };\n        handleUpdateCartQty = async (domCart) => {\n            const cart = await this.liquid.cart({id: this.shoppingCart.id});\n            const domQty = this.domCart.ref('reserveBarCartQty').get();\n            if (this.shoppingCart.itemCount > 0) {\n                domQty.classList.add('show');\n            } else {\n                domQty.classList.remove('show');\n            }\n            domQty.innerHTML = this.shoppingCart.itemCount;\n        }\n        async clearCart() {\n            const newCart = await this.liquid.cart({\n            cartItems: [],\n            giftOrder: false,\n            });\n            this.shoppingCart = newCart;\n        }\n    };\n    \n}\n","/**\n * @description Handle ViewMore button behaviour and show hidden refinement after click on it.\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n */\n\nexport default function (Widget) {\n    return class ReserveBarProduct extends Widget {\n        prefs() {\n            return {\n                ...super.prefs() //extend preferences from parent widget class\n            };\n        }\n        init() {\n            this.eventBus().emit('reserveBarProduct.init', this);\n        }\n    };\n}\n","/**\n * @description Handle ViewMore button behaviour and show hidden refinement after click on it.\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n */\n\nexport default function (Widget) {\n    return class ReserveBarSearch extends Widget {\n        prefs() {\n            return {\n                ...super.prefs() //extend preferences from parent widget class\n            };\n        }\n        init() {\n            this.eventBus().emit('rbSearch.init', this);\n        }\n        handleSearch() {\n            this.eventBus().emit('reserveBarAddress.update', this);\n        }\n    };\n}\n","import { scrollElementTo } from 'widgets/toolbox/scroll';\nimport { timeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/search/SearchBox').default>} SearchBox\n */\n\n/**\n * @description Search form implementation. That consists of form and combobox with suggestion functionality\n * @param {SearchBox} SearchBox Base widget for extending\n * @returns {typeof HarmonySearchBox} HarmonySearchBox class\n */\nexport default function (SearchBox) {\n    class HarmonySearchBox extends SearchBox {\n        /**\n         * @description Preferences\n         * @returns {object} Preferences object\n         */\n        prefs() {\n            return {\n                classesSuggestionsActive: 'm-active_suggestions',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.toggleClearButton(!!this.ref('input').val());\n        }\n\n        /**\n         * @description Shows suggestions popup in initial state.\n         * <br>Initial state can be a slot/asset markup, rendered in backed\n         * <br>and placed in `searchSuggestionsInitial` template\n         */\n        showInDefaultState() {\n            const input = this.ref('input').get();\n            const clearBtnElem = document.getElementById('clearButton');\n            if (input.value) {\n                clearBtnElem.removeAttribute(\"tabindex\");\n            } else {\n                clearBtnElem.setAttribute(\"tabindex\",'-1');\n            }\n\n            if (input) {\n                input.focus();\n            }\n            this.lastSearchedTerm = '';\n            this.render('searchSuggestionsInitial', {}, this.ref('listboxInner'))\n                .then(() => {\n                    this.selectedIndex = -1;\n                    this.resultsCount = this.getRealItemsCount();\n                    this.openListbox();\n                });\n            this.ref('dialog').removeClass(this.prefs().classesSuggestionsActive);\n        }\n\n        /**\n         * @param {string} query - a query, used for fetching Combobox inner items\n         * @param {number} resultsCount - obtained inner items count\n         * @param {Array} products - arary of products object\n         */\n        afterSuggestionsUpdate(query, resultsCount, products) {\n            super.afterSuggestionsUpdate(query, resultsCount);\n            this.ref('dialog').addClass(this.prefs().classesSuggestionsActive);\n            this.eventBus().emit('searchbox.products.init', products);\n        }\n\n        /**\n         * @param {string} query - customer's search query\n         * @param {object} response - backend response with suggestions\n         */\n        processResponse(query, response) {\n            if (response && response.suggestions && response.isAvailableSuggestions) {\n                if (this.ref('input').val() !== query) {\n                    // if value changed during request, we do not show outdated suggestions\n                    return;\n                }\n\n                if (document.activeElement !== this.ref('input').get()) {\n                    this.toggleSpinner(false);\n                    this.showInDefaultState();\n                    return;\n                }\n\n                this.render(undefined, response, this.ref('listboxInner')).then(() => {\n                    timeout(() => {\n                        const listbox = this.ref('listbox').get();\n                        if (listbox) {\n                            scrollElementTo(listbox);\n                        }\n                    }, 10);\n                    this.afterSuggestionsUpdate(query, response.suggestions.total, response.suggestions.product.products);\n                });\n            } else {\n                this.showNoSuggestions();\n            }\n\n            this.toggleSpinner(false);\n        }\n\n        /**\n         * Display no suggestions found state (message + default suggestions)\n         */\n        showNoSuggestions() {\n            const input = this.ref('input').get();\n            if (input) {\n                input.focus();\n            }\n            this.lastSearchedTerm = '';\n            this.render('searchNoSuggestions', {}, this.ref('listboxInner'))\n                .then(() => {\n                    this.selectedIndex = -1;\n                    this.resultsCount = this.getRealItemsCount();\n                    this.openListbox();\n                });\n            this.ref('dialog').removeClass(this.prefs().classesSuggestionsActive);\n        }\n\n        closeSearch() {\n            this.emit('closesearch');\n            // @ts-ignore\n            this.closeModal();\n            this.closeListbox();\n            this.clearInput(false);\n        }\n\n        clearInput(...args) {\n            super.clearInput(...args);\n\n            const searchInput = this.ref('input').get();\n            searchInput.defaultValue = '';\n        }\n    }\n\n    return HarmonySearchBox;\n}\n","window.$ = require('jquery');\n\n$(document).ready(function() {\n    // Function to display error messages below the field\n    function showError($field) {\n        var errorMessage = $field.data('parsley-required-message');\n        var errorList = $('<ul>').addClass('sfcc-store-locator-error');\n        var errorItem = $('<li>').text(errorMessage);\n        errorList.append(errorItem);\n        $field.after(errorList);\n    }\n\n    // Listening to the form's submission\n    $('#sfccStoreLocator').submit(function(event) {\n        // Prevent the default form submission action\n        event.preventDefault();\n\n        // Clear previous errors\n        $('.sfcc-store-locator-error').remove();\n\n        // Get zipCode and radius values from the form\n        var $zipCode = $('#zipCode');\n        var $radius = $('#radius');\n\n        var zipCodeValue = $zipCode.val();\n        var radiusValue = $radius.val();\n\n        var hasError = false;\n\n        // Check if zipCode and radius are set and show errors if needed\n        if (!zipCodeValue) {\n            showError($zipCode);\n            hasError = true;\n        }\n        if (!radiusValue) {\n            showError($radius);\n            hasError = true;\n        }\n        if (hasError) return;\n\n        // Construct the endpoint URL with the required parameters\n        var endpoint = $(this).attr('action');\n        var fullURL = endpoint + '?postalCode=' + zipCodeValue + '&radius=' + radiusValue;\n\n        // Making the AJAX GET request\n        $.ajax({\n            url: fullURL,\n            type: 'GET',\n            dataType: 'json',\n            success: function(data) {\n                var hasResults = data.stores.length > 0;\n\n                if (!hasResults) {\n                    $('.store-locator-no-results').show();\n                } else {\n                    $('.store-locator-no-results').hide();\n                }\n                var $resultsDiv = $('.b-store-wrapper');\n                $resultsDiv.empty();\n                // Handle successful API response\n                // You can populate the data in '.b-store_locator-content' or handle it differently\n                if (data.storesResultsHtml) {\n                    $resultsDiv.append(data.storesResultsHtml);\n                }\n            }\n        });\n    });\n});\n","const FOCUSABLE_ELEMENTS = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]:not([tabindex=\"-1\"])'];\n\n/**\n *\n * @description Get keyboard-focusable elements\n * @param {HTMLElement} ctx context where focusable elements needs to be queried\n * @returns {HTMLElement[]} array containing focusable elements, or empty array if no elements found\n */\nexport function getFocusableElements(ctx) {\n    return ctx.querySelectorAll(FOCUSABLE_ELEMENTS.join(', '));\n}\n\n/**\n *\n * @description Remove elements inside context from tabIndex order - remove ability to focus element by TAB\n * @param {HTMLElement} ctx context where focusable elements needs to be queried\n * @param {boolean} [isAvailable=true] state that defines whether elements inside context needs to be disabled for TAB focus\n */\nexport function toggleAvailability(ctx, isAvailable = true) {\n    if ((!isAvailable && ctx.isAvailable === false)\n        || (isAvailable && ctx.isAvailable)\n    ) { return; }\n\n    const focusableElements = getFocusableElements(ctx);\n\n    focusableElements.forEach(el => {\n        if (!el.dataset.initialTabIndex) {\n            el.dataset.initialTabIndex = el.tabIndex;\n        }\n\n        el.tabIndex = isAvailable ? el.dataset.initialTabIndex : -1;\n    });\n\n    ctx.isAvailable = isAvailable;\n}\n\n/**\n * Executes inline scripts\n *\n * @param {HTMLElement} ctx context where inline scripts needs to be executed\n */\nexport function executeInlineScripts(ctx) {\n    const scripts = (ctx.querySelectorAll(\n        'script:not(src):not([type*=\"template\"]):not([type*=\"json\"])'\n    ));\n\n    Array.from(scripts).forEach(script => {\n        const tempScript = document.createElement('script');\n\n        tempScript.text = script.text;\n        ctx.appendChild(tempScript);\n        script.parentNode.removeChild(script);\n    });\n}\n","/**\n * Formats date to mm/dd/yyyy\n * @param {string} date -- date from input field.\n */\nexport function formatDate(dateString) {\n    return new Date(dateString).toLocaleDateString('en-US', {\n        year: 'numeric',\n        month: '2-digit',\n        day: '2-digit'\n    });\n}\n\n/**\n * Format phone number which will be applicable for Cognito.\n * @param phoneNumber\n * @return {string}\n */\nexport function formatPhoneNumber(phoneNumber) {\n        const phone = phoneNumber?.match(/[0-9]/g);\n\n        // Append country code, as on storefront phone won't have it.\n        phone.unshift('+1');\n        \n        return phone.join('')\n}\n","import { getViewType, SMALL, MEDIUM } from 'widgets/toolbox/viewtype';\n\nconst STATE_ID_SELECTOR = '[data-selector-id=\"state-id\"]';\nconst HEADER_SELECTOR = '[data-selector-id=\"harmonyHeader\"]';\n\n/**\n * Return ID of current state\n * @return {string}\n */\nexport function getStateID(stateID) {\n    if (!stateID && document.querySelectorAll(STATE_ID_SELECTOR).length) {\n        stateID = document.querySelectorAll(STATE_ID_SELECTOR)[0].dataset.refSelectedState;\n    }\n\n    return stateID;\n}\n\n/**\n * Check state restriction\n * @return {boolean}\n */\nexport function isStateRestricted(stateID, restrictedStates = []) {\n    return restrictedStates.indexOf(stateID) > -1;\n}\n\n/**\n * Check header's type\n * @return {string} type of header\n */\nexport function getHeaderType() {\n    var headerType = '';\n    var viewType = getViewType();\n    var $header = document.querySelectorAll(HEADER_SELECTOR);\n    var isHeaderAlignmentLeft = $header.length && $header[0].dataset.isHeaderAlignmentLeft === 'true';\n\n    if (viewType === SMALL || viewType === MEDIUM) {\n        headerType = 'mobileHeader';\n    } else if (isHeaderAlignmentLeft) {\n        headerType = 'stickyHeader';\n    } else {\n        headerType = 'header';\n    }\n\n    return headerType;\n}\n","window.$ = require('jquery');\n\n$(document).ready(function() {\n    var $footerSocial = $('.b-footer-social');\n    if ($footerSocial.length > 0) {\n        var baseUrl = $footerSocial.data('attr');\n        if (baseUrl) {\n            var socialClasses = {\n                'm-facebook': 'facebook',\n                'm-instagram': 'instagram',\n                'm-youtube': 'youtube',\n                'm-pinterest': 'pinterest',\n                'm-twitter': 'twitter'\n            };\n\n            var styleElement = document.createElement('style');\n            styleElement.type = 'text/css';\n            var cssText = '';\n\n            $('.b-footer_social-link').each(function() {\n                var $this = $(this);\n                var socialType = Object.keys(socialClasses).find(function(cls) {\n                    return $this.hasClass(cls);\n                });\n\n                if (socialType && socialClasses[socialType]) {\n                    var fullUrl = baseUrl + '#' + socialClasses[socialType];\n\n                    // Generate CSS for the ::before pseudo-element\n                    cssText += `\n                        .b-footer_social-link.${socialType}::before {\n                            mask: url(${fullUrl});\n                            -webkit-mask: url(${fullUrl});\n                        }\n                    `;\n                }\n            });\n\n            if (cssText) {\n                styleElement.appendChild(document.createTextNode(cssText));\n                document.head.appendChild(styleElement);\n            }\n        }\n    }\n});","/* eslint-disable no-unused-vars */\n/* eslint-disable indent */\n/* eslint-disable sonarjs/no-duplicate-string */\n/* sonar-ignore-start */\n\nwindow.$ = require('jquery');\nrequire('./collapsibleItem');\nrequire('./sfccStoreLocator');\nrequire('./updateSocialLoginURL');\nconst [, pdp, clp, plp, wishlist, cart, checkout, orderconfirmation, account, , page, storeLocator, corporatepayment, corporatepaymentlink] = [\n    'home',\n    'pdp',\n    'clp',\n    'plp',\n    'wishlist',\n    'cart',\n    'checkout',\n    'orderconfirmation',\n    'account',\n    'static',\n    'page',\n    'storeLocator',\n    'corporatepayment',\n    'corporatepaymentlink'\n]\n// @ts-ignore\n    .map(ctx => window.contexts.includes(ctx));\n\nimport WidgetsMgr from 'widgets/widgetsMgr';\nimport AccessibilityFocusTrapMixin from 'widgets/global/AccessibilityFocusTrapMixin';\nimport AccessibilityFocusMixin from 'widgets/global/AccessibilityFocusMixin';\nimport SearchBox from 'widgets/search/SearchBox';\nimport Modal from 'widgets/global/Modal';\nimport SideBar from 'harmony/global/SideBar';\nimport MixMiniCart from 'harmony/cart/MixMiniCart';\nimport VideoPlayer from 'harmony/global/VideoPlayer';\nimport CarouselSwiper from 'widgets/global/CarouselSwiper';\nimport ExtendedCarouselSwiper from 'harmony/global/ExtendedCarouselSwiper';\nimport HarmonyCarousel from 'harmony/global/HarmonyCarousel';\nimport EinsteinCarousel from 'harmony/global/EinsteinCarousel';\nimport ShipToTitle from 'harmony/ShipToTitle';\nimport ShipToStates from 'harmony/ShipToStates';\nimport ProductPositionMapping from 'harmony/ProductPositionMapping';\nimport HarmonyStickyHeader from 'harmony/global/HarmonyStickyHeader';\nimport HarmonyHeader from 'harmony/global/HarmonyHeader';\nimport HarmonyMenuPanel from 'harmony/global/HarmonyMenuPanel';\nimport HarmonyHamburgerMenuItem from 'harmony/global/HarmonyHamburgerMenuItem';\nimport CookieDismissBlock from 'harmony/global/CookieDismissBlock';\nimport Overlay from 'harmony/global/Overlay';\nimport Loader from 'harmony/global/Loader';\nimport HarmonySearchBox from 'harmony/search/HarmonySearchBox';\nimport HarmonyQuantityStepper from 'harmony/forms/HarmonyQuantityStepper';\nimport BrowsingOnlyModal from 'harmony/global/BrowsingOnlyModal';\nimport HarmonyModal from 'harmony/global/HarmonyModal';\nimport shipToSideBar from 'harmony/global/ShipToSideBar';\nimport HeaderSideBar from 'harmony/global/HeaderSideBar';\nimport ViewMore from 'harmony/global/ViewMore';\nimport SecureCheckoutButton from 'harmony/cart/SecureCheckoutButton';\nimport ShippingSelector from 'harmony/cart/ShippingSelector';\nimport HarmonyBasicInput from 'harmony/forms/HarmonyBasicInput';\nimport ChangePasswordForm from 'harmony/forms/ajax/ChangePasswordForm';\nimport RegisterForm from 'harmony/forms/ajax/RegisterForm';\nimport ProfileDetailsForm from 'harmony/account/ProfileDetailsForm';\nimport Cognito from 'harmony/aws/Cognito';\nimport HarmonyPasswordResetForm from 'harmony/forms/ajax/HarmonyPasswordResetForm';\nimport GeolocationConsent from 'harmony/GeolocationConsent';\nimport HarmonyAccordionItem from 'harmony/global/HarmonyAccordionItem';\nimport HarmonyBackToTop from 'harmony/global/HarmonyBackToTop';\nimport HarmonyFocusHighlighter from 'harmony/global/HarmonyFocusHighlighter';\nimport HarmonyGlobalAlerts from 'harmony/global/HarmonyGlobalAlerts';\nimport HarmonyConsentTracking from 'harmony/global/HarmonyConsentTracking';\nimport HarmonyAjaxFormResponseContainer from 'harmony/forms/HarmonyAjaxFormResponseContainer';\nimport HarmonyAddToWishlistMixin from 'harmony/wishlist/HarmonyAddToWishlistMixin';\nimport HarmonyButton from 'harmony/global/HarmonyButton';\nimport HarmonyEmitBusEvent from 'harmony/global/HarmonyEmitBusEvent';\nimport QuickAddToCart from 'harmony/product/QuickAddToCart';\nimport ProcessButton from 'widgets/global/ProcessButton';\nimport HarmonyAjaxForm from 'harmony/forms/HarmonyAjaxForm';\nimport HarmonyInputPassword from 'harmony/forms/HarmonyInputPassword';\nimport HarmonyEmailSubscribe from 'harmony/forms/ajax/HarmonyEmailSubscribe';\nimport ShipToError from 'harmony/product/ShipToError';\nimport InputBirthdayDate from 'harmony/forms/InputBirthdayDate';\nimport StatesInputRadio from 'harmony/forms/StatesInputRadio';\nimport cancelOrderModal from 'harmony/cancelOrderModal';\nimport HarmonyLoginForm from 'harmony/forms/ajax/HarmonyLoginForm';\nimport ListAccessibility from 'widgets/global/ListAccessibility';\nimport LoginForm from 'widgets/forms/ajax/LoginForm';\nimport VerificationCodeForm from 'harmony/account/VerificationCodeForm';\nimport ReserveBarMgr from './reserveBar/ReserveBarMgr';\nimport ReserveBarCart from './reserveBar/ReserveBarCart';\nimport ReserveBarSearch from './reserveBar/ReserveBarSearch';\n\n// TODO:HARMONY:BE: Remove InputNumber here when Boilerplate will complete it.\n// As for now it is not in widgetsList.js\nimport InputNumber from 'widgets/forms/InputNumber';\nimport ReserveBarProduct from './reserveBar/ReserveBarProduct';\nimport PDFiltersMgr from './experience/filters';\n\n\n\n\nWidgetsMgr.addWidgetsList('app_harmony', () => [\n    ['accessibilityFocusTrapMixin', AccessibilityFocusTrapMixin],\n    ['sideBar', SideBar, 'accessibilityFocusTrapMixin'],\n    ['button', HarmonyButton, 'button'],\n    ['ajaxform', HarmonyAjaxForm, 'ajaxform'],\n    ['videoPlayer', VideoPlayer],\n    ['carouselSwiper', CarouselSwiper],\n    ['carouselSwiper', ExtendedCarouselSwiper, 'carouselSwiper'],\n    ['shipToStates', ShipToStates, 'ajaxform'],\n    ['productPositionMapping', ProductPositionMapping],\n    ['shipToTitle', ShipToTitle, 'emitBusEvent'],\n    ['mixMiniCart', MixMiniCart, 'minicart'],\n    ['carousel', HarmonyCarousel, 'carousel'],\n    ['einsteinCarousel', EinsteinCarousel, 'carousel'],\n    ['inputNumber', InputNumber, 'basicInput'],\n    ['harmonyQuantityStepper', HarmonyQuantityStepper, 'inputNumber'],\n    ['stickyHeader', HarmonyStickyHeader, 'stickyHeader'],\n    ['harmonyHeader', HarmonyHeader],\n    ['loginForm', LoginForm, 'ajaxform'],\n    ['harmonyLoginForm', HarmonyLoginForm, 'loginForm'],\n    ['harmonyLoginForm', ListAccessibility, 'harmonyLoginForm'],\n    ['harmonyMenuPanel', HarmonyMenuPanel, 'menuPanel'],\n    ['hamburgerMenuItem', HarmonyHamburgerMenuItem, 'hamburgerMenuItem'],\n    ['cookieDismissBlock', CookieDismissBlock],\n    ['overlay', Overlay],\n    ['loader', Loader],\n    ['harmonySearchBox', SearchBox, 'combobox'],\n        ['harmonySearchBox', AccessibilityFocusTrapMixin, 'harmonySearchBox'],\n        ['harmonySearchBox', Modal, 'harmonySearchBox'],\n        ['harmonySearchBox', HarmonyModal, 'harmonySearchBox'],\n        ['harmonySearchBox', HarmonySearchBox, 'harmonySearchBox'],\n    ['browsingOnlyModal', BrowsingOnlyModal, 'confirmDialog'],\n    ['modal', HarmonyModal, 'modal'],\n    ['shipToSideBar', shipToSideBar, 'sideBar'],\n    ['headerSideBar', HeaderSideBar, 'sideBar'],\n    ['secureCheckoutButton', SecureCheckoutButton, 'button'],\n    ['shippingSelector', ShippingSelector, 'inputSelect'],\n    ['viewMore', ViewMore],\n    ['basicInput', HarmonyBasicInput, 'basicInput'],\n    ['changePasswordForm', ChangePasswordForm, 'ajaxform'],\n    ['cognito', Cognito],\n    ['harmonyPasswordResetForm', HarmonyPasswordResetForm, 'ajaxform'],\n    ['harmonyPasswordResetForm', AccessibilityFocusMixin, 'harmonyPasswordResetForm'],\n    ['registerForm', RegisterForm, 'ajaxform'],\n    ['verificationCodeForm', VerificationCodeForm, 'ajaxform'],\n    ['verificationCodeForm', ListAccessibility, 'verificationCodeForm'],\n    ['geolocationConsent', GeolocationConsent],\n    ['accordionItem', HarmonyAccordionItem, 'accordionItem'],\n    ['globalAlerts', HarmonyGlobalAlerts, 'globalAlerts'],\n    ['backtotop', HarmonyBackToTop, 'backtotop'],\n    ['focusHighlighter', HarmonyFocusHighlighter, 'focusHighlighter'],\n    ['harmonyConsentTracking', HarmonyConsentTracking, 'consentTracking'],\n    ['productTile', HarmonyAddToWishlistMixin, 'productTile'],\n    ['harmonyAjaxFormResponseContainer', HarmonyAjaxFormResponseContainer, 'ajaxFormResponseContainer'],\n    ['emitBusEvent', HarmonyEmitBusEvent, 'emitBusEvent'],\n    ['quickAddToCart', QuickAddToCart],\n    ['processButton', ProcessButton, 'button'],\n    ['emailSubscribe', HarmonyEmailSubscribe, 'emailSubscribe'],\n    ['inputPassword', HarmonyInputPassword, 'inputPassword'],\n    ['shipToError', ShipToError],\n    ['inputBirthdayDate', InputBirthdayDate, 'inputText'],\n    ['statesInputRadio', StatesInputRadio, 'inputRadio'],\n    ['cancelOrderModal', cancelOrderModal, 'harmonyModal'],\n    ['reserveBarMgr', ReserveBarMgr],\n    ['reserveBarCart', ReserveBarCart],\n    ['reserveBarSearch', ReserveBarSearch], \n    ['reserveBarProduct', ReserveBarProduct],\n    ['pdFiltersMgr', PDFiltersMgr]\n\n]);\n\nif (corporatepayment) {\n    require('./corporatePayment');\n}\n\nif (corporatepaymentlink) {\n    require('./corporatepaymentlink');\n}\n\nif (plp) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'harmony.search.widgets' */ 'harmony/search/HarmonyRefinementsPanel'),\n        import(/* webpackChunkName: 'harmony.search.widgets' */ 'harmony/search/HarmonyProductListingMgr'),\n        import(/* webpackChunkName: 'harmony.search.widgets' */ 'harmony/search/HarmonyRefinement')\n    ]).then(deps => {\n        const [\n            HarmonyRefinementsPanel,\n            HarmonyProductListingMgr,\n            HarmonyRefinement\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'harmony.search.widgets',\n            widgetsDefinition: () => [\n                // listAccessibility\n                ['harmonyRefinementsPanel', HarmonyRefinementsPanel, 'modal'],\n                ['harmonyProductListingMgr', HarmonyProductListingMgr, 'productListingMgr'],\n                ['harmonyRefinement', HarmonyRefinement, 'refinement']\n            ]\n        };\n    }));\n}\n\nif (!checkout) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'harmony.minicart' */ 'harmony/cart/HarmonyMiniCartDialog')\n    ]).then(deps => {\n        const [\n            HarmonyMiniCartDialog\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'harmony.minicart',\n            widgetsDefinition: () => [\n                // modal\n                ['minicartDialog', HarmonyMiniCartDialog, 'minicartDialog']\n            ]\n        };\n    }));\n}\n\nif (pdp || plp || cart || wishlist) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import('harmony/product/HarmonyProductDetail'),\n        import('harmony/product/HarmonyAddToCartMixin'),\n        import('harmony/product/HarmonyVariationSwatch'),\n        import('harmony/product/HarmonyProductImages'),\n        import('harmony/product/ProductDescriptionItem'),\n        import('harmony/wishlist/HarmonyAddToWishlistMixin'),\n        import('harmony/product/ProductSet'),\n        import('harmony/product/NotifyMeForm'),\n        import('harmony/product/HarmonyProductTile')\n    ]).then(deps => {\n        const [\n            HarmonyProductDetail,\n            HarmonyAddToCartMixin,\n            HarmonyVariationSwatch,\n            HarmonyProductImages,\n            ProductDescriptionItem,\n            HarmonyAddToWishListMixin,\n            ProductSet,\n            NotifyMeForm,\n            HarmonyProductTile\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'harmony.product.widgets',\n            widgetsDefinition: () => [\n                ['productDetail', HarmonyProductDetail, 'productDetail'],\n                    ['productDetail', HarmonyAddToCartMixin, 'productDetail'],\n                    ['productDetail', HarmonyAddToWishListMixin, 'productDetail'],\n                ['productSet', ProductSet],\n                ['variationSwatch', HarmonyVariationSwatch, 'colorSwatch'],\n                ['productImages', HarmonyProductImages, 'productImages'],\n                ['productDescriptionItem', ProductDescriptionItem],\n                ['productTile', HarmonyProductTile, 'productTile'],\n                ['productTile', HarmonyAddToWishlistMixin, 'productTile'],\n                ['notifyMeForm', NotifyMeForm, 'ajaxform']\n            ]\n        };\n    }));\n}\n\nif (cart) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'harmony.cart' */ 'harmony/cart/HarmonyCartMgr'),\n        import(/* webpackChunkName: 'harmony.cart' */ 'harmony/forms/HarmonyCouponForm')\n    ]).then(deps => {\n        const [\n            HarmonyCartMgr,\n            HarmonyCouponForm\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'harmony.cart',\n            widgetsDefinition: () => [\n                ['cartMgr', HarmonyCartMgr, 'cartMgr'],\n                ['cartMgr', AccessibilityFocusMixin, 'cartMgr'],\n                ['couponform', HarmonyCouponForm, 'couponform']\n            ]\n        };\n    }));\n}\n\nif (account) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/global/HarmonyTabs'),\n        /* eslint-disable */\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/account/VerificationCodeForm'),\n        /** eslint-enable */\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/forms/ajax/LoginForm'),\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/forms/ajax/HarmonyLoginForm'),\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/account/HarmonyPaymentsList'),\n        import(/* webpackChunkName: 'harmony.account' */ 'widgets/checkout/InputCreditCardNumber'),\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/account/PaymentForm'),\n        import(/* webpackChunkName: 'harmony.account' */ 'authorize/payment/AuthorizeNetPaymentMixin'),\n        import(/* webpackChunkName: 'harmony.account' */ 'authorize/account/AuthorizeNetPaymentForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'harmony/forms/HarmonyAddressBookForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/global/ListAccessibility'),\n        import(/* webpackChunkName: 'account.widgets' */ 'harmony/account/HarmonyAddressList'),\n        import(/* webpackChunkName: 'account.widgets' */ 'harmony/checkout/HarmonyInputCreditCardNumber'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/RadioSelector')\n    ]).then(deps => {\n        const [\n            HarmonyTabs,\n            VerificationCodeForm,\n            LoginForm,\n            HarmonyLoginForm,\n            HarmonyPaymentsList,\n            InputCreditCardNumber,\n            PaymentForm,\n            AuthorizeNetPaymentMixin,\n            AuthorizeNetPaymentForm,\n            HarmonyAddressBookForm,\n            ListAccessibility,\n            HarmonyAddressList,\n            HarmonyInputCreditCardNumber,\n            RadioSelector\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'harmony.account',\n            widgetsDefinition: () => [\n                ['harmonyTabs', HarmonyTabs, 'tabs'],\n                ['verificationCodeForm', VerificationCodeForm, 'ajaxform'],\n                ['verificationCodeForm', ListAccessibility, 'verificationCodeForm'],\n                ['loginForm', LoginForm, 'ajaxform'],\n                ['harmonyLoginForm', HarmonyLoginForm, 'loginForm'],\n                ['harmonyLoginForm', ListAccessibility, 'harmonyLoginForm'],\n                ['profileDetailsForm', ProfileDetailsForm, 'ajaxform'],\n                ['paymentList', HarmonyPaymentsList, 'paymentList'],\n                ['inputCreditCardNumber', InputCreditCardNumber, 'basicInput'],\n                ['inputCreditCardNumber', HarmonyInputCreditCardNumber, 'inputCreditCardNumber'],\n                ['paymentsList', HarmonyPaymentsList, 'paymentsList'],\n                ['paymentForm', PaymentForm, 'ajaxform'],\n                ['authorizeNetPaymentForm', AuthorizeNetPaymentMixin, 'paymentForm'],\n                ['authorizeNetPaymentForm', AuthorizeNetPaymentForm, 'authorizeNetPaymentForm'],\n                ['harmonyAddressBookForm', HarmonyAddressBookForm, 'addressBookForm'],\n                ['addressList', HarmonyAddressList, 'addressList'],\n                ['radioSelector', RadioSelector, 'inputRadio']\n            ]\n        };\n    }));\n}\n\nif (checkout) {\n    // @ts-ignore\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/account/VerificationCodeForm'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/checkout/HarmonyAddressCheckoutForm'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/checkout/HarmonyCheckoutMgr'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/checkout/HarmonyShippingFrom'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/forms/ajax/LoginForm'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/forms/ajax/HarmonyLoginForm'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/checkout/HarmonyPaymentAccordion'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/checkout/HarmonyBillingForm'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/checkout/HarmonyPaymentAccordionItemCREDIT_CARD'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'authorize/payment/AuthorizeNetPaymentMixin'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'authorize/checkout/AuthorizeNetBillingForm'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'shipCompliant/checkout/ShipCompliantCheckoutMgrMixin'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'shipCompliant/checkout/ShipCompliantShippingFormMixin'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/global/ListAccessibility'),\n        import(/* webpackChunkName: 'account.widgets' */ 'harmony/checkout/HarmonyInputCreditCardNumber'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'harmony/forms/InputFutureShippingDate'),\n        import(/* webpackChunkName: 'harmony.cart' */ 'harmony/forms/HarmonyCouponForm'),\n        import(/* webpackChunkName: 'cart.widgets' */ 'widgets/forms/CouponForm'),\n        import(/* webpackChunkName: 'cart.widgets' */ 'widgets/cart/PromoCodeDisclosure')\n    ]).then(deps => {\n        const [\n            VerificationCodeForm,\n            HarmonyAddressCheckoutForm,\n            HarmonyCheckoutMgr,\n            HarmonyShippingFrom,\n            LoginForm,\n            HarmonyLoginForm,\n            HarmonyPaymentAccordion,\n            HarmonyBillingForm,\n            HarmonyPaymentAccordionItemCREDITCARD,\n            AuthorizeNetPaymentMixin,\n            AuthorizeNetBillingForm,\n            ShipCompliantCheckoutMgrMixin,\n            ShipCompliantShippingFormMixin,\n            ListAccessibility,\n            HarmonyInputCreditCardNumber,\n            InputFutureShippingDate,\n            HarmonyCouponForm,\n            CouponForm,\n            PromoCodeDisclosure\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'harmony.checkout',\n            widgetsDefinition: () => [\n                ['verificationCodeForm', VerificationCodeForm, 'ajaxform'],\n                ['verificationCodeForm', ListAccessibility, 'verificationCodeForm'],\n                ['addressCheckoutForm', HarmonyAddressCheckoutForm, 'addressCheckoutForm'],\n                ['checkoutMgr', HarmonyCheckoutMgr, 'checkoutMgr'],\n                ['shippingForm', HarmonyShippingFrom, 'shippingForm'],\n                ['harmonyLoginForm', HarmonyLoginForm, 'checkoutLoginForm'],\n                ['harmonyLoginForm', ListAccessibility, 'harmonyLoginForm'],\n                ['loginForm', LoginForm, 'ajaxform'],\n                ['paymentAccordion', HarmonyPaymentAccordion, 'paymentAccordion'],\n                ['billingForm', HarmonyBillingForm, 'billingForm'],\n                ['paymentAccordionItemCREDIT_CARD', HarmonyPaymentAccordionItemCREDITCARD, 'paymentAccordionItemCREDIT_CARD'],\n                ['authorizeNetBillingForm', AuthorizeNetPaymentMixin, 'billingForm'],\n                ['authorizeNetBillingForm', AuthorizeNetBillingForm, 'authorizeNetBillingForm'],\n                ['checkoutMgr', ShipCompliantCheckoutMgrMixin, 'checkoutMgr'],\n                ['shippingForm', ShipCompliantShippingFormMixin, 'shippingForm'],\n                ['inputCreditCardNumber', HarmonyInputCreditCardNumber, 'inputCreditCardNumber'],\n                ['inputFutureShippingDate', InputFutureShippingDate, 'inputText'],\n                ['couponform', CouponForm, 'ajaxform'],\n                    ['couponform', HarmonyCouponForm, 'couponform'],\n                ['promoCodeDisclosure', PromoCodeDisclosure, 'disclosure']\n            ]\n        };\n    }));\n}\n\nif (wishlist) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'wishlist.widgets' */ 'widgets/wishlist/WishlistMgr'),\n        import(/* webpackChunkName: 'wishlist.widgets' */ 'widgets/wishlist/WishListItem'),\n        import(/* webpackChunkName: 'wishlist.widgets' */ 'harmony/wishlist/HarmonyWishListItem'),\n        import(/* webpackChunkName: 'wishlist.widgets' */ 'harmony/wishlist/HarmonyWishlistMgr')\n    ]).then(deps => {\n        const [WishlistMgr, WishListItem, HarmonyWishlistItem, HarmonyWishlistMgr] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'wishlist.widgets',\n            widgetsDefinition: () => [\n                ['wishlistMgr', WishlistMgr],\n                ['wishListItem', WishListItem],\n                ['wishListItem', HarmonyWishlistItem, 'wishListItem'],\n                ['wishListItem', QuickAddToCart, 'wishListItem'],\n                ['wishlistMgr', HarmonyWishlistMgr, 'wishlistMgr']\n            ]\n        };\n    }));\n}\n\nif (orderconfirmation) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'orderconfirmation.widgets' */ 'harmony/forms/ajax/ConfirmationCreateAccount'),\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/account/VerificationCodeForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/global/ListAccessibility')\n    ]).then(deps => {\n        const [\n            ConfirmationCreateAccount,\n            VerificationCodeForm,\n            ListAccessibility\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'orderconfirmation.widgets',\n            widgetsDefinition: () => [\n                ['confirmationCreateAccount', ConfirmationCreateAccount, 'ajaxform'],\n                ['verificationCodeForm', VerificationCodeForm, 'ajaxform'],\n                ['verificationCodeForm', ListAccessibility, 'verificationCodeForm']\n            ]\n        };\n    }));\n}\n\nif (storeLocator) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'storelocator.widgets' */ 'harmony/forms/ajax/WhereToBuyForm')\n    ]).then(deps => {\n        const [\n            WhereToBuyForm,\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'storelocator.widgets',\n            widgetsDefinition: () => [\n                ['whereToBuyForm', WhereToBuyForm, 'ajaxform']\n            ]\n        };\n    }));\n    require('./globalFindNearMe');\n}\n\nif(clp) {\n    WidgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/forms/ajax/LoginForm'),\n        import(/* webpackChunkName: 'harmony.checkout' */ 'harmony/forms/ajax/HarmonyLoginForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/global/ListAccessibility'),\n        /* eslint-disable */\n        import(/* webpackChunkName: 'harmony.account' */ 'harmony/account/VerificationCodeForm'),\n    ]).then(deps => {\n        const [\n            LoginForm,\n            HarmonyLoginForm,\n            ListAccessibility,\n            VerificationCodeForm\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'clp.widgets',\n            widgetsDefinition: () => [\n                ['loginForm', LoginForm, 'ajaxform'],\n                ['harmonyLoginForm', HarmonyLoginForm, 'loginForm'],\n                ['harmonyLoginForm', ListAccessibility, 'harmonyLoginForm'],\n                ['verificationCodeForm', VerificationCodeForm, 'ajaxform'],\n                ['verificationCodeForm', ListAccessibility, 'verificationCodeForm'],\n            ]\n        };\n    }));\n}\n","import { submitFormJson, getJSONByUrl } from 'widgets/toolbox/ajax';\n\n/**\n * @description Extended HarmonyAddToWishlistMixin implementation.\n * @param {AddToWishlistMixin} AddToWishlistMixin Base widget for extending\n * @returns {typeof HarmonyAddToWishlistMixin} Harmony Add to Wishlist Mixin class\n */\nexport default function (AddToWishlistMixin) {\n    class HarmonyAddToWishlistMixin extends AddToWishlistMixin {\n        init() {\n            super.init();\n            this.pid = this.prefs().masterPid || this.prefs().pid;\n\n            // set add to wishlist state on load\n            this.getById(this.prefs().addToWishlistBtn, (/** @type {button} */ button) => {\n                this.addedToWishList = button.prefs().addedToWithlist;\n            });\n\n            this.eventBus().on('update.wishlist.state', 'updateWishlistState');\n        }\n\n        prefs() {\n            return {\n                textRemovedFromWishlist: '',\n                activeClasses: 'm-added',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Show message. The function was overloaded. It is empty, because the message isn't used.\n         * @param {string} msg Message\n         * @param {boolean} error Error flag\n         */\n        showWishlistMessage() { }\n\n        /**\n         * @description Hide message. The function was overloaded. It is empty, because the message isn't used.\n         * @returns {void}\n         */\n        hideWishlistMessage() { }\n\n        /**\n         * @param {object} button - button\n         * @description Add to Wishlist\n         * @returns {void}\n         */\n        addToWishlist(button) {\n            const addTWishlistBtnPrefs = button.prefs();\n\n            button.busy();\n\n            const promise = submitFormJson(addTWishlistBtnPrefs.addToWishlistUrl, {\n                pid: this.pid || '',\n                qty: this.selectedQuantity || ''\n            }).then(response => {\n                this.handleSuccess(response, button);\n                this.eventBus().emit('product.added.to.wishlist', this.config.analytics);\n            }).finally(() => {\n                button.unbusy();\n            }).catch(() => {\n                this.showWishlistMessage(this.prefs().textNetworkError, true);\n            });\n\n            this.eventBus().emit('loader.start', promise);\n        }\n\n        /**\n         * @param {object} button - button\n         * @description Remove from Wishlist\n         * @returns {void}\n         */\n        removeFromWishlist(button) {\n            const addTWishlistBtnPrefs = button.prefs();\n\n            button.busy();\n\n            const promise = getJSONByUrl(addTWishlistBtnPrefs.removeFromWishlistUrl, {\n                pid: this.pid || ''\n            }).then(response => {\n                this.handleRemoveSuccess(response, button);\n                this.eventBus().emit('product.removed.from.wishlist', this.config.analytics);\n            }).finally(() => {\n                button.unbusy();\n            }).catch(() => {\n                this.showWishlistMessage(this.prefs().textNetworkError, true);\n            });\n\n            this.eventBus().emit('loader.start', promise);\n        }\n\n        /**\n         * @description Handle success response\n         * @param {object} response - Response object\n         * @param {object} button - button\n         * @returns {void}\n         */\n        handleSuccess(response, button) {\n            const addToWishlistBtn = button || this.getById(\n                this.prefs().addToWishlistBtn,\n                (/** @type {button} */ element) => element\n            );\n\n            if (!addToWishlistBtn) {\n                return;\n            }\n\n            if (response.success) {\n                this.addedToWishList = true;\n\n                addToWishlistBtn\n                    .activate()\n                    .press();\n\n                if (!this.addToWishlistHideTexts) {\n                    addToWishlistBtn.setText(this.prefs().textAddedToWishlist);\n                }\n\n                const accessibilityAlert = this.prefs().accessibilityAlerts.addedtowishlist;\n                // TODO add event description\n                this.eventBus().emit('alert.show', {\n                    accessibilityAlert\n                });\n            }\n\n            if (!this.addToWishlistHideTexts) {\n                this.showWishlistMessage(response.msg, response.error);\n            }\n        }\n\n        /**\n         * @description Handle remove success response\n         * @param {object} response - Response object\n         * @param {object} button - button\n         * @returns {void}\n         */\n        handleRemoveSuccess(response, button) {\n            const addToWishlistBtn = button || this.getById(\n                this.prefs().addToWishlistBtn,\n                (/** @type {button} */ element) => element\n            );\n\n            if (!addToWishlistBtn) {\n                return;\n            }\n\n            if (response.success) {\n                this.addedToWishList = false;\n\n                addToWishlistBtn\n                    .deactivate()\n                    .unpress();\n\n                if (!this.addToWishlistHideTexts) {\n                    addToWishlistBtn.setText(this.prefs().textRemovedFromWishlist);\n                }\n\n                const accessibilityAlert = this.prefs().accessibilityAlerts.removedfromwishlist;\n                // TODO add event description\n                this.eventBus().emit('alert.show', {\n                    accessibilityAlert\n                });\n\n                if (response.isEmpty) {\n                    this.eventBus().emit('wishlist.empty');\n                }\n            }\n\n            if (!this.addToWishlistHideTexts) {\n                this.showWishlistMessage(response.msg, response.error);\n            }\n        }\n\n        /**\n         * @description Method to revert initial state for `Add to Wishlist` button and messages\n         * Usually used when re-rendering PDP/QuickView after variation change\n         * @param {object} product - Product object\n         * @returns {void}\n         */\n        renderWishList(product) {\n            super.renderWishList(product);\n            const masterPid = product?.master?.pid;\n            if (masterPid) {\n                this.pid = masterPid;\n            }\n        }\n\n        /**\n         * @param {object} button - button\n         * @description Process Wishlist\n         * @returns {void}\n         */\n        processWishlist(button) {\n            if (this.addedToWishList) {\n                this.removeFromWishlist(button);\n            } else {\n                this.addToWishlist(button);\n            }\n        }\n\n        /**\n         * @description Update wishlist state according to incloming state\n         * @param {boolean} isAdded - is added to wishlist\n         */\n        updateWishlistState(isAdded) {\n            this.getById(this.prefs().addToWishlistBtn, (/** @type {button} */ button) => {\n                if (isAdded) {\n                    button.activate().press();\n                    this.addedToWishList = true;\n                } else {\n                    button.deactivate().unpress();\n                    this.addedToWishList = false;\n                }\n            });\n        }\n    }\n\n    return HarmonyAddToWishlistMixin;\n}\n","/* eslint-disable consistent-return */\n/* eslint-disable no-underscore-dangle */\nimport { log } from './toolbox/util';\nimport { RefElement } from 'widgets/toolbox/RefElement';\nimport EventBusWrapper from 'widgets/toolbox/EventBusWrapper';\nimport widgetsMgr from './widgetsMgr';\n\nconst templateProp = '@@@_template';\nconst noop = () => { };\n\n/**\n * @description save template during webpack HMR\n * @param {RefElement} renderTo rendering element\n * @param {string} template template string\n */\nfunction saveTemplateForHotReload(renderTo, template) {\n    if (!PRODUCTION) { // save template in element for hot reload\n        const tmpEl = renderTo.get();\n        if (tmpEl) {\n            tmpEl[templateProp] = template;\n        }\n    }\n}\n\n/**\n * @description Find modified element\n * @param {ChildNode} nodeOrig element\n * @param {number[]} routeOrig path to element\n * @returns {ChildNode|false} modified element or false if not found\n */\nfunction getFromRoute(nodeOrig, routeOrig) {\n    let node = nodeOrig;\n    const route = routeOrig.slice();\n    while (route.length > 0) {\n        if (node && node.childNodes) {\n            const c = route.splice(0, 1)[0];\n            node = node.childNodes[c];\n        } else {\n            return false;\n        }\n    }\n    return node;\n}\n\n/**\n * @typedef Diff\n * @property {string} name\n * @property {string} action\n * @property {string} value\n * @property {string} oldValue\n * @property {string} newValue\n * @property {number[]} route\n */\n\n/**\n * @typedef Info\n * @property {HTMLElement} node\n * @property {Diff} diff\n */\n\n/**\n * @description Callback assigned on diff-dom post hook after applying changes\n * @param {string} action diff-dom action happens with DOM node\n * @param {HTMLElement} node changed element\n * @param {Info} info diff-dom changes object\n * @returns {() => void} callback\n */\nfunction getDelayedCallback(action, node, info) {\n    return () => {\n        if (action === 'modifyAttribute') {\n            widgetsMgr.removeAttribute(node, info.diff);\n            widgetsMgr.addAttribute(node, info.diff);\n        } else if (action === 'removeAttribute') {\n            widgetsMgr.removeAttribute(node, info.diff);\n        } else if (action === 'addAttribute') {\n            widgetsMgr.addAttribute(node, info.diff);\n        } else {\n            throw new Error(`Unknown action \"${action}\"`);\n        }\n    };\n}\n\n/** Core component to extend for each widget */\n/**\n * @category widgets\n * @subcategory framework\n */\nclass Widget {\n    /**\n     * @description Creates self RefElement.js wrapper, add initial states, configuration.\n     * @param {HTMLElement} el DOM element\n     * @param {{[x: string]: object|string|number|boolean|null|undefined}} config widget config\n     */\n    constructor(el, config = {}) {\n        /**\n         * @description RefElements related to current widget\n         * @type {{[key : string] : RefElement} | undefined}\n         */\n        this.refs = Object.create(null);\n        if (this.refs) { // for type check\n            this.refs.self = new RefElement([el]);\n        }\n\n        /**\n         * @description config from data attributes\n         * @type {{[x: string]: object|string|number|boolean|null|undefined}}\n         */\n        this.config = config;\n\n        /**\n         * @description functions which executing during destructuring of widget\n         * @type {Array<Function>|undefined}\n         */\n        this.disposables = undefined;\n        /**\n         * @description function assigned by WidgetsMgr after constructor call to\n         * provide ability for parent widget listen child widget event\n         * fired by method `this.emit()`\n         * @type {(eventName: string, ...args: any) => void}\n         */\n        this.parentHandler = noop;\n\n        this.getConstructor = id => id;\n\n        /**\n         * @description children widgets\n         * @type {Widget[]|undefined}\n         */\n        this.items = [];\n\n        if (this.ref('self').attr('id')) {\n            this.id = this.ref('self').attr('id');\n        }\n        if (!this.id && this.config.id) {\n            this.id = this.config.id;\n        }\n\n        /**\n         * @type {boolean} state explain widget is shown\n         */\n        this.shown = !this.config.hidden && !this.ref('self').hasAttr('hidden');\n\n        if (typeof this.config.passEvents === 'string') {\n            if (!PRODUCTION) {\n                log.warn('Usage of \"data-pass-events\" has been deprecated. Please take a look \"data-forward-to-parent\"');\n            }\n            this.config.passEvents.split(':').forEach(pair => {\n                const [methodName, emitEvent] = pair.split('-');\n                const self = this;\n                // @ts-ignore\n                this[methodName] = (...args) => {\n                    self.parentHandler(emitEvent, ...args);\n                };\n            });\n        }\n\n        this.isRefreshingWidget = false;\n    }\n\n    get length() {\n        return 1;\n    }\n\n    /**\n     * @description call class method provided in argument `name` with arguments `(classContext, value, ...args)` or\n     * call `RefElement.data(name, value)` for wrapper widget DOM node to get or set data attributes\n     * @param {string} name of class method or data-attribute\n     * @param {any} [value] if class has method `name` - will be used as argument, otherwise will be used as `value` to set into data attribute `name`\n     * @param {any} [args] if class has method `name` - will be used as argument, otherwise would not be used\n     * @returns {any}\n     * - execution result of the method specified as `name` argument\n     * - if class has no method `name` - get or set data attribute `name` depending on provided or no `value` argument\n     */\n    data(name, value, ...args) {\n        /**\n         * @type {Function}\n         */\n        // @ts-ignore\n        const classMethod = this[name];\n        if (typeof classMethod === 'function') {\n            return classMethod.call(this, value, ...args);\n        }\n        return this.ref('self').data(name, value);\n    }\n\n    /**\n     * @description call class method provided in argument `name` with arguments `...args` if method exists\n     *\n     * @param {string} name of class method\n     * @param {any} [args] if class has method `name` - will be used as arguments\n     * @returns {any} result of call (any) or undefined, if method not found\n     */\n    callIfExists(name, ...args) {\n        const classMethod = this[name];\n        if (typeof classMethod === 'function') {\n            return classMethod.call(this, ...args);\n        }\n    }\n\n    /**\n     * @description Emit widget event that will be listened by parrent handler with context of current widget\n     * @param {string} eventName name of event\n     * @param  {...any} args argument to pass\n     * @returns {void}\n     */\n    emit(eventName, ...args) {\n        this.parentHandler(eventName, this, ...args);\n    }\n\n    /**\n     * @description Emit widget event that will be listened by parrent handler without context of current widget\n     * @param {string} eventName name of event\n     * @param  {...any} args argument to pass\n     * @returns {void}\n     */\n    emitWithoutContext(eventName, ...args) {\n        this.parentHandler(eventName, ...args);\n    }\n\n    /**\n     * @description In case if you need to emit/subscribe global event you may get an event bus with this method.\n     * @description Get widget's EventBusWrapper instance\n     * @returns {EventBusWrapper} Instance of EventBusWrapper\n     */\n    eventBus() {\n        if (!this._eventBus) {\n            this._eventBus = new EventBusWrapper(this);\n            this.onDestroy(() => {\n                this._eventBus = undefined;\n            });\n        }\n        return this._eventBus;\n    }\n\n    /**\n     * @description Merge data-attribute properties to default widget properties (defined in widget javascript file, or extended from parent widget)\n     * and returns widget configuration map\n     * @returns {{[key: string]: any}} config widget config\n     */\n    prefs() {\n        return {\n            /** is component hidden */\n            hidden: false,\n            /** class of component during loading */\n            classesLoading: 'm-widget-loading',\n            /** class of component once component loaded and inited */\n            /** id of component */\n            id: '',\n            // configs form data attributes\n            ...this.config\n        };\n    }\n\n    /**\n     * @description This method executed in the end of [Widgets Application Lifecycle,]{@link tutorial-WidgetsApplicationLifecycle.html}\n     *  in order to add business logic before initialization is finished.\n     */\n    init() {\n        this.ref('self').removeClass(this.prefs().classesLoading);\n    }\n\n    /**\n     * @description Get child refElement by key from prefs() or id\n     * @param {string} name Id of RefElement or preference key that contains id\n     * @returns {RefElement} found RefElement instance or empty RefElement if doesn't exist\n     * @protected\n     */\n    ref(name) {\n        const prefsName = this.prefs();\n        const prefsValue = prefsName[name];\n\n        let ref;\n\n        if (prefsValue) {\n            ref = this.refs && this.refs[prefsValue];\n\n            if (ref) {\n                return ref;\n            }\n        }\n\n        ref = this.refs && this.refs[name];\n\n        if (ref) {\n            return ref;\n        }\n        if (!PRODUCTION) {\n            log.warn(`Reference \"${name}\" is not found in widget \"${this.constructor.name}\" `, this);\n        }\n        return new RefElement([]);\n    }\n\n    /**\n     * @description search `refElement` inside of widget by `name`\n     * - if `cb` exist - run `cb` with found `refElement` as argument\n     * - otherwise return existing state\n     *\n     * @param {string} name Id of widget/refElement or preference that contain id of widget/refElement\n     * @param {(arg: RefElement) => void} [cb] callback will be executed if element found\n     * @returns {boolean} true if found `refElement`\n     */\n    has(name, cb) {\n        const ref = this.refs && this.refs[name];\n\n        if (ref) {\n            if (cb) {\n                cb(ref);\n            }\n\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * @description Destroys widgets. Only for internal usage\n     *\n     * @protected\n     */\n    destroy() {\n        if (this.disposables) {\n            this.disposables.forEach(disposable => disposable());\n            this.disposables = undefined;\n        }\n\n        if (this.items && this.items.length) {\n            this.items.forEach(item => {\n                if (item && typeof item.destroy === 'function') {\n                    item.destroy();\n                }\n            });\n        }\n\n        this.items = undefined;\n        this.refs = undefined;\n    }\n\n    /**\n     * @description Attach an event handler function for one or more events to the selected elements.\n     * @param {string} eventName ex: 'click', 'change'\n     * @param {(this: this, element: HTMLElement, event: Event) => any} cb callback\n     * @param {string|EventTarget} selector CSS selector\n     * @param {boolean} passive is handler passive?\n     * @returns {(() => void)[]} dispose functions for each elemenet event handler\n     *\n     * @protected\n     */\n    ev(eventName, cb, selector = '', passive = true) {\n        /**\n         * @type EventTarget[]\n         */\n        var elements = [];\n        var self = this;\n\n        if (selector instanceof Element || selector === window) {\n            elements = [selector];\n        } else if (typeof selector === 'string' && this.refs && this.refs.self) {\n            const el = this.refs.self.get();\n            if (el) {\n                elements = Array.from(el.querySelectorAll(selector));\n            }\n        } else if (this.refs && this.refs.self) {\n            const el = this.refs.self.get();\n            if (el) {\n                elements = [el];\n            }\n        }\n\n        return elements.map(element => {\n            // @ts-ignore\n            let fn = function fn(...args) {\n                // @ts-ignore\n                return cb.apply(self, [this, ...args]);\n            };\n\n            element.addEventListener(eventName, fn, passive ? { passive: true } : { passive: false });\n            const dispose = () => {\n                if (fn) {\n                    element.removeEventListener(eventName, fn);\n                    // @ts-ignore\n                    fn = undefined;\n                }\n            };\n            this.onDestroy(dispose);\n            dispose.eventName = eventName;\n            return dispose;\n        });\n    }\n\n    /**\n     * @description Assign function to be executed during widget destructuring\n     * @param {Function} fn function to be executed during destroy\n     * @returns {Function} called function\n     */\n    onDestroy(fn) {\n        if (!this.disposables) {\n            this.disposables = [];\n        }\n        this.disposables.push(fn);\n        return fn;\n    }\n\n    /**\n     * @description executed when widget is re-rendered\n     */\n    onRefresh() {\n        // executed when widget is re-rendered\n        this.shown = !this.config.hidden && !this.ref('self').hasAttr('hidden');\n\n        if (this.ref('self').attr('id')) {\n            this.id = this.ref('self').attr('id');\n        } else if (this.ref('self').data('id')) {\n            this.id = this.ref('self').data('id');\n        }\n    }\n\n    /**\n     * @description Search for child component instance and execute callback with this instance as argument\n     * @template T\n     * @param {string} id of component\n     * @param {(args0: any) => T} cb callback with widget\n     * @returns {T|undefined} callback result if element found, otherwise undefined\n     */\n    getById(id, cb) {\n        if (id && this.items && this.items.length) {\n            for (var c = 0; c < this.items.length; c += 1) {\n                const item = this.items[c];\n\n                if (item && item.id === id) {\n                    return cb.call(this, item);\n                }\n            }\n        }\n\n        if (!PRODUCTION) {\n            log.warn(`Widget with id \"${id}\" is not found in children of \"${this.constructor.name}\" `, this);\n        }\n    }\n\n    /**\n     * Travels over nearest/next level child components\n     *\n     * @template T\n     * @param {(args0: any) => T} fn callback\n     * @returns {T[]} arrays of callback results\n     */\n    eachChild(fn) {\n        if (this.items && this.items.length) {\n            return this.items.map(item => {\n                return fn(item);\n            });\n        }\n        return [];\n    }\n\n    /**\n     * @description Hide widget\n     * @returns {this} current instance for chaining\n     */\n    hide() {\n        if (this.shown) {\n            this.ref('self').hide();\n            this.shown = false;\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Show widget\n     * @returns {this} current instance for chaining\n     */\n    show() {\n        if (!this.shown) {\n            this.ref('self').show();\n            this.shown = true;\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Show or hide widget element\n     * @param {boolean} [display]  Use true to show the element or false to hide it.\n     * @returns {this} current instance for chaining\n     */\n    toggle(display) {\n        const state = typeof display !== 'undefined' ? display : !this.shown;\n\n        this[state ? 'show' : 'hide']();\n        return this;\n    }\n\n    /**\n     * @description Returns whether the widget is hidden\n     * @returns {boolean} Hidden flag\n     */\n    isHidden() {\n        return !this.shown;\n    }\n\n    /**\n     * @description Returns whether the widget is shown\n     * @returns {boolean} Shown flag\n     */\n    isShown() {\n        return this.shown;\n    }\n\n    /**\n     * @description This method provides ability to dynamically render HTML for widgets.\n     * @param {string} templateRefId id of template\n     * @param {object} data data to render\n     * @param {RefElement} [renderTo] render into element\n     * @param {string} [strToRender] pre-rendered template\n     * @returns {Promise<any>} resolved if rendered or rejected if no found template promise\n     *\n     * @protected\n     */\n    render(templateRefId = 'template', data = {}, renderTo = this.ref('self'), strToRender = '') {\n        return import(/* webpackChunkName: 'dynamic-render' */'mustache').then((Mustache) => {\n            // eslint-disable-next-line complexity\n            if (!this.cachedTemplates) {\n                /**\n                 * @description Container to cache templates for rendering\n                 * @type {{[x: string]: string|undefined}}\n                */\n                this.cachedTemplates = {};\n            }\n\n            let template = this.cachedTemplates && this.cachedTemplates[templateRefId];\n\n            if (!strToRender && !template) {\n                const templateElement = this.ref(templateRefId).get();\n\n                if (templateElement) {\n                    template = templateElement.textContent || templateElement.innerHTML;\n                    Mustache.parse(template);\n                    this.cachedTemplates[templateRefId] = template;\n\n                    saveTemplateForHotReload(renderTo, template);\n                } else {\n                    // eslint-disable-next-line no-lonely-if\n                    if (!PRODUCTION) {\n                        const tmpEl = renderTo.get();\n                        if (tmpEl && tmpEl[templateProp]) {\n                            template = tmpEl[templateProp];\n                        } else {\n                            log.error(`Unable find template ${templateRefId}`, this);\n                            return Promise.reject(new Error(`Unable find template ${templateRefId}`));\n                        }\n                        log.error(`Unable find template ${templateRefId}`, this);\n                        return Promise.reject(new Error(`Unable find template ${templateRefId}`));\n                    }\n                }\n            }\n\n            if (data) {\n                data.lower = function () {\n                    return function (text, render) {\n                        return render(text).toLowerCase();\n                    };\n                };\n            }\n\n            const renderedStr = strToRender || Mustache.render(template || '', data);\n            const el = renderTo.get();\n\n            if (el && el.parentNode) {\n                // use new document to avoid loading images when diffing\n                const newHTMLDocument = document.implementation.createHTMLDocument('diffDOM');\n                const diffNode = /** @type {HTMLElement} */(newHTMLDocument.createElement('div'));\n\n                diffNode.innerHTML = renderedStr;\n\n                return this.applyDiff(el, diffNode);\n            } else {\n                log.error(`Missing el to render ${templateRefId}`, this);\n            }\n\n            return Promise.resolve();\n        });\n    }\n\n    /**\n     * @description Find diff between `el` and `diffNode` and apply diff by `diff-dom`\n     * @param {HTMLElement} el Element before change\n     * @param {HTMLElement} diffNode Changed element to find diff\n     * @returns {Promise} when diff founded\n     */\n    applyDiff(el, diffNode) {\n        return import(/* webpackChunkName: 'dynamic-render' */ 'diff-dom/src/index')\n            .then(/** @type {Function[]} */ ({ DiffDOM }) => {\n                const delayedAttrModification = [];\n                const dd = new DiffDOM({\n                    // disableGroupRelocation: true,\n                    filterOuterDiff(/** @type {any} */t1) {\n                    // @ts-ignore\n                        if (t1.attributes && t1.attributes['data-skip-render']) {\n                        // will not diff childNodes\n                            t1.innerDone = true;\n                        }\n                    },\n                    /**\n                     * @param {Info} info changes from diff-dom\n                     */\n                    postDiffApply(info) {\n                        const { action, name } = info.diff;\n                        if (\n                            ['removeAttribute', 'addAttribute', 'modifyAttribute'].includes(action)\n                        && typeof name === 'string'\n                        && name.startsWith('data-') // handle only data attr changes\n                        && info.node instanceof HTMLElement\n                        ) {\n                            const node = getFromRoute(el, info.diff.route);\n\n                            if (node && node instanceof HTMLElement) {\n                                const delayedCallback = getDelayedCallback(action, node, info);\n                                // data-initialized should be executed at last point\n                                delayedAttrModification[name === 'data-initialized' ? 'push' : 'unshift'](delayedCallback);\n                            }\n                        }\n                        if (\n                            (action === 'addAttribute' || action === 'removeAttribute')\n                            && info.node.nodeName === 'INPUT'\n                            && name === 'checked'\n                        ) {\n                            const node = /** @type {HTMLInputElement} */(info.node);\n                            if (node.type === 'checkbox' || node.type === 'radio') {\n                                node.checked = (action === 'addAttribute');\n                            }\n                        }\n                    }\n                });\n                // Normalize DOM tree before applying diff to prevent infinite loop\n                // Infinite loop appear in case when few text nodes became one by one\n                el.normalize();\n\n                const diff = dd.diff(el, diffNode.firstElementChild);\n\n                if (diff && diff.length) {\n                    // console.log(diff);\n                    dd.apply(el, diff);\n                }\n                // report attr modification once app changes are applied\n                delayedAttrModification.forEach(action => action());\n\n                if (diff && diff.length) {\n                    this.eventBus().emit('rendering.applied');\n                }\n            });\n    }\n}\n\nexport default Widget;\n\n/**\n * @typedef IEvent\n * @property {string} [events.childID]\n * @property {Function} [events.childClass]\n * @property {string} events.eventName\n * @property {Function} events.fn\n * @property {Function} [cb]\n */\n","/**\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNames#Polyfill\n *\n * Needed for MS Edge and IE\n */\nif (Element.prototype.getAttributeNames === undefined) {\n    Element.prototype.getAttributeNames = function getAttributeNames() {\n        const attributes = this.attributes;\n        const length = attributes.length;\n        const result = [];\n        result.length = length;\n        for (var i = 0; i < length; i += 1) {\n            result[i] = attributes[i].name;\n        }\n        return result;\n    };\n}\n","// CLARIFY: get rid of smoothscroll-polyfill due to big size and not critical value\nimport './getAttributeNames'; // needed for MS Edge\n\nif (!('scrollBehavior' in document.documentElement.style)) { // needed for MS Edge\n    setTimeout(() => {\n        import(/* webpackChunkName: 'smoothscroll' */ 'smoothscroll-polyfill').then(smoothscroll => {\n            smoothscroll.default.polyfill();\n        });\n    }, 0);\n}\n","import { submitFormJson, errorFallbackMessage } from 'widgets/toolbox/ajax';\nimport { scrollWindowTo, scrollToTop } from 'widgets/toolbox/scroll';\nimport { timeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType <typeof import('widgets/forms/BasicForm').default>} BasicForm\n * @typedef {ReturnType<typeof import('widgets/global/Button').default>} Button\n */\n\n/**\n * @param {BasicForm} BasicForm Base widget for extending\n * @returns {typeof AjaxForm} Ajax Form class\n */\nexport default function (BasicForm) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class AjaxForm\n     * @augments BasicForm\n     * @classdesc Represents AjaxForm component with next features:\n     * 1. Allow submit and handle submit Form\n     * 2. Allow handle server response\n     * 3. Allow handle form errors (form level and field level) that comes from backend\n     * AjaxForm widget should contain {@link Button} widgets that implement submit Form button.\n     * Widget has next relationship:\n     * * Handle Form submit using method {@link AjaxForm#handleSubmit} by event {@link Button#event:click} from {@link Button} widget.\n     * @example <caption>Example of AjaxForm widget usage</caption>\n     * <form\n     *     data-widget=\"ajaxform\"\n     *     data-event-submit.prevent=\"handleSubmit\" novalidate\n     *     action=\"${URLUtils.url('Account-SavePassword')}\" method=\"POST\n     * >\n     *     <div class=\"alert alert-danger\" hidden=\"hidden\" data-ref=\"errorMessageLabel\"></div>\n     *     ... form fields\n     *     <input type=\"hidden\" name=\"${pdict.csrf.tokenName}\" value=\"${pdict.csrf.token}\"/>\n     *     <div>\n     *         <button\n     *              type=\"submit\"\n     *              name=\"save\"\n     *              data-widget=\"button\"\n     *              data-widget-event-click=\"handleSubmit\"\n     *              data-event-click.prevent=\"handleClick\"\n     *              data-id=\"submitButton\"\n     *         >\n     *              ${Resource.msg('button.save','account',null)}\n     *         </button>\n     *     </div>\n     * </form>\n     * @property {string} data-widget - Widget name `ajaxform`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class AjaxForm extends BasicForm {\n        /**\n         * @description Handles submit Form\n         * @returns {void|boolean} return bolean value if Form fields doen't valid\n         */\n        handleSubmit() {\n            if (this.isChildrenValid() && !this.submitting) {\n                this.submitting = true;\n                this.showProgressBar();\n                this.getById(this.prefs().submitButton, submitButton => submitButton.busy());\n                this.ref(this.prefs().errorMessageLabel).hide();\n\n                submitFormJson(\n                    this.getFormUrl(),\n                    this.getFormFields(),\n                    this.ref('self').attr('method') === 'GET' ? 'GET' : 'POST'\n                )\n                    .then(this.onSubmitted.bind(this))\n                    .catch(this.onError.bind(this))\n                    .finally(this.afterSubmission.bind(this));\n            }\n\n            return false;\n        }\n\n        /**\n         * @description Handles server response\n         * @emits AjaxForm#submit\n         * @param {object} data Server JSON response once form submitted\n         * @param {string} [data.success] - If form submission was success\n         * @param {string} [data.redirectUrl] - if not empty - redirect to specified location should be executed\n         * @param {boolean|string|string[]} [data.error] - error messages/message from server\n         * @param {object[]} [data.fields] - form fields with errors\n         * @returns {void}\n         */\n        onSubmitted(data) {\n            if (data.success && data.redirectUrl) {\n                window.location.assign(data.redirectUrl);\n            } else if (data.error) {\n                if (data.redirectUrl) {\n                    window.location.assign(data.redirectUrl);\n                } else {\n                    // @ts-ignore\n                    this.setError(Array.isArray(data.error) ? data.error.join('<br/>') : data.error);\n                }\n            } else if (data.fields) {\n                Object.entries(data.fields).forEach(([name, errorMsg]) => {\n                    this.getById(name, (input) => {\n                        input.setError(errorMsg);\n                    });\n                });\n            } else {\n                timeout(() => { // lets hideProgress finishes first\n                    /**\n                     * @description Event to submit AjaxForm\n                     * @event AjaxForm#submit\n                     */\n                    this.emit('submit', data);\n                    this.eventBus().emit('submit', data);\n                    // This eventBus event required to emit\n                    // form submit action to perform callback action\n                });\n            }\n        }\n\n        /**\n         * @description Handles an error, which happens during request (for ex. 500 response)\n         * @param {Error} e - error, which happend during request\n         * @returns {void}\n         */\n        onError(e) {\n            this.setError(e.message || errorFallbackMessage);\n            const errorElement = this.ref(this.prefs().errorMessageLabel).get();\n            if (errorElement) {\n                scrollWindowTo(errorElement, true);\n            } else {\n                scrollToTop();\n            }\n        }\n\n        /**\n         * @description Changes Form state after submission\n         * @returns {void}\n         */\n        afterSubmission() {\n            this.getById(this.prefs().submitButton, submitButton => submitButton.unbusy());\n            this.hideProgressBar();\n            this.submitting = false;\n        }\n\n        /**\n         * @description Set Form or Form fields errors\n         * @param {string} msg - Generic error message, if no custom message - show generic one\n         * @param {boolean} [scrollToError] - defines using of scroll to error\n         * @param {string} refElem - RefElement id\n         * @returns {void}\n         */\n        setError(msg, scrollToError = true, refElem = 'errorMessageLabel') {\n            const errorMessageLabel = this.ref(refElem)\n                .setText(msg || '')\n                .show();\n\n            if (!scrollToError) {\n                return;\n            }\n\n            const element = errorMessageLabel.get();\n\n            if (element) {\n                scrollWindowTo(element, true);\n            } else {\n                scrollToTop();\n            }\n        }\n    }\n\n    return AjaxForm;\n}\n","/**\n *  @typedef {ReturnType<typeof import('widgets/global/Modal').default>} Modal\n *  @typedef {typeof import('widgets/forms/AjaxForm').default} AjaxForm\n */\n\n/**\n * @param {Modal} Modal Base widget for extending\n * @returns {typeof AjaxFormResponseContainer} AjaxFormResponseContainer widget\n */\nexport default function (Modal) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class AjaxFormResponseContainer\n     * @augments Modal\n     * @classdesc Represents AjaxFormResponseContainer component with next features:\n     * 1. Used to rerender part of page after success response from server using mustache template\n     *\n     * Widget has next relationship:\n     * * Rerender part of the page using method {@link AjaxFormResponseContainer#onSuccessSubmit} by event {@link AjaxForm#event:submit} from {@link AjaxForm} widget.\n     * @property {string} data-widget - Widget name `AjaxFormResponseContainer`\n     * @example <caption>Example of AjaxFormResponseContainer widget usage</caption>\n     *  <div\n     *      class=\"l-account m-small m-top_margin b-account\"\n     *      data-widget=\"ajaxFormResponseContainer\"\n     *  >\n     *      <div\n     *          class=\"b-form-message b-message m-error\"\n     *          role=\"alert\"\n     *      >\n     *          ${Resource.msg('passwordReset.warning', 'login', null)}\n     *      </div>\n\n     *      <div\n     *          class=\"b-form-message b-message m-error\"\n     *          hidden=\"hidden\"\n     *          data-ref=\"errorMessageLabel\"\n     *          role=\"alert\"\n     *      ></div>\n\n     *      <h1 class=\"b-account-title m-top_margin\">\n     *          ${Resource.msg('passwordReset.title', 'login', null)}\n     *      </h1>\n\n     *      <form\n     *          class=\"b-form m-reset_password\"\n     *          action=\"${URLUtils.url('Account-PasswordResetDialogForm', 'mobile', pdict.mobile)}\"\n     *          method=\"POST\"\n     *          data-widget=\"ajaxform\"\n     *          data-event-submit.prevent=\"handleSubmit\"\n     *          data-widget-event-submit=\"onSuccessSubmit\"\n     *          name=\"email-form\"\n     *          id=\"email-form\"\n     *      >\n     *          form content....\n     *          <div class=\"b-form_section\">\n     *              <button\n     *                  type=\"submit\"\n     *                  class=\"b-button m-width_full\"\n     *                  data-widget=\"button\"\n     *                  data-widget-event-click=\"handleSubmit\"\n     *                  data-event-click.prevent=\"handleClick\"\n     *                  data-id=\"submitButton\"\n     *                  >\n     *                  ${Resource.msg('form.passwordReset.submit','forms',null)}\n     *              </button>\n     *          </div>\n     *      </form>\n     *      <script type=\"template/mustache\" data-ref=\"template\">\n     *          <div\n     *              class=\"l-account m-small m-top_margin b-account\"\n     *              data-widget=\"ajaxFormResponseContainer\"\n     *          >\n     *              <h1 class=\"b-account-title\">\n     *                  {{receivedMsgHeading}}\n     *              </h1>\n     *              <p>{{receivedMsgBody}}</p>\n     *          </div>\n     *      </script>\n     *  </div>\n     */\n    class AjaxFormResponseContainer extends Modal {\n        /**\n         * @description Get response from server and render it\n         * @listens AjaxForm#submit\n         * @param {typeof import('widgets/forms/AjaxForm').default} _form - ajaxForm Widget\n         * @param {object} data - response form server\n         * @returns {void}\n         */\n        onSuccessSubmit(_form, data) {\n            this.render(undefined, data);\n        }\n    }\n\n    return AjaxFormResponseContainer;\n}\n","import { timeout } from '../toolbox/util';\nimport { getJSONByUrl } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n * @typedef {ReturnType<typeof import('widgets/global/Button').default>} Button\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n */\n\n/**\n * @param {Widget} Widget base widget class\n * @returns {typeof BasicForm} Basic Form class\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class BasicForm\n     * @augments Widget\n     * @classdesc Represents BasicForm component with next features:\n     * 1. Allow show/hide Form progress bar\n     * 2. Allow get submit button name, Form fields, Form action url\n     * 3. Allow submit and handle submit Form\n     * 4. Allow set value to Form fields\n     * 5. Allow validate Form and Form fields\n     * 6. Allow updates Form html body by sending an AJAX request to server with params object\n     * BasicForm widget should contain {@link Button} widgets that implement submit Form button.\n     * Widget has next relationship:\n     * * Handle Form submit using method {@link BasicForm#handleSubmit} by event {@link Button#event:click} from {@link Button} widget.\n     * @example <caption>Example of BasicForm widget usage</caption>\n     * <form\n     *     action=\"${URLUtils.url('Order-Track')}\"\n     *     method=\"GET\"\n     *     data-widget=\"form\"\n     *     data-event-submit=\"handleSubmit\"\n     * >\n     *      ... form contents\n     *    <button\n            data-widget=\"button\"\n            type=\"submit\"\n            data-widget-event-click=\"handleSubmit\"\n            data-event-click.prevent=\"handleClick\"\n          >\n            ...Button name\n          </button>\n     * </form>\n     * @property {string} data-widget - Widget name `form`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class BasicForm extends Widget {\n        prefs() {\n            return {\n                submitEmpty: true,\n                emptyFormErrorMsg: '',\n                submitButton: 'submitButton',\n                errorMessageLabel: 'errorMessageLabel',\n                SUBMITTING_TIMEOUT: 5000,\n                formDefinitionUrl: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Set aria-busy attribute value true\n         * @returns {void}\n         */\n        showProgressBar() {\n            this.ref('self').attr('aria-busy', 'true');\n        }\n\n        /**\n         * @description Set aria-busy attribute value false\n         * @returns {void}\n         */\n        hideProgressBar() {\n            this.ref('self').attr('aria-busy', 'false');\n        }\n\n        /**\n         * @description Get submit button name\n         * @returns {string|null|undefined} Submit button name\n         */\n        getSubmitButtonName() {\n            return this.submitButtonName;\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            this.submitButtonName = null;\n            super.init();\n\n            /**\n             * @type {HTMLFormElement|any}\n             */\n            const form = this.ref('self').get();\n\n            this.formId = form ? form.dataset.widget : '';\n            this.formName = form ? form.name : '';\n\n            /**\n             * Below code is needed to initiate correct comparison configuration for certain fields\n             * It iterates all BasicInput childs and if will find in validation compare data - will\n             * sets up needed data on a proper child BasicInput widgets\n            */\n            const BasicInput = /** @type {BasicInput} */(this.getConstructor('basicInput'));\n\n            const formName = this.formName;\n\n            this.eachChild(widget => {\n                if (widget instanceof BasicInput) {\n                    // set form name for gtm data\n                    widget.formName = formName;\n                    const widgetValidation = widget.prefs().validationConfig || {};\n                    const compareFieldId = widgetValidation.compareWith || '';\n                    if (compareFieldId) {\n                        this.getById(compareFieldId, targetWidget => {\n                            if (targetWidget.length) {\n                                const compareOptions = {\n                                    field: compareFieldId,\n                                    msg: widgetValidation.errors.compareWith || ''\n                                };\n                                widget.data('setMatchCmp', targetWidget, compareOptions);\n                            }\n                        });\n                    }\n                }\n            });\n        }\n\n        /**\n         * @description Save submit button\n         * @param {HTMLInputElement} el submit button element\n         * @returns {void}\n         */\n        saveSubmitButton(el) {\n            this.submitButtonName = el.name;\n        }\n\n        /**\n         * @description Submit Form\n         * @returns {void}\n         */\n        submit() {\n            /**\n             * @type {HTMLElement|undefined}\n             */\n            var elem = this.ref(this.prefs().submitButton).get();\n\n            if (elem) {\n                elem.click();\n            }\n        }\n\n        /**\n         * @description Handle submit Form\n         * @emits BasicForm#submit\n         * @param {refElement} _el event source element\n         * @param {(Event|undefined)} event event instance if DOM event\n         * @returns {void}\n         */\n        handleSubmit(_el, event) {\n            this.clearError();\n            const valid = this.isChildrenValid();\n\n            if ((!valid || this.submitting) && (event && event instanceof Event)) {\n                event.preventDefault();\n                return;\n            }\n            this.ref(this.prefs().submitButton).disable();\n\n            this.submitting = true;\n\n            this.onDestroy(timeout(() => {\n                this.submitting = false;\n            }, this.prefs().SUBMITTING_TIMEOUT));\n\n            this.emit('submit');\n        }\n\n        /**\n         * @description Get Form fiels\n         * @returns {object} Object contains form fields\n         */\n        getFormFields() {\n            /**\n             * @type {{[x: string]: string}}\n             */\n            var fields = {};\n            const BasicInput = /** @type {BasicInput} */(this.getConstructor('basicInput'));\n\n            this.eachChild(widget => {\n                if (widget instanceof BasicInput && !(widget.skipSubmission && widget.skipSubmission())) {\n                    const name = widget.getName && widget.getName();\n\n                    if (name) {\n                        fields[name.toString()] = widget.getValue();\n                    }\n                }\n            });\n            return fields;\n        }\n\n        /**\n         * @description Sets related fields values, can be executed silently, without triggering `change` event\n         * @param {object} formFields - Structured object with name: value pairs for input fields\n         * @param {(boolean|undefined)} [silently] - if set to `true` - input should not be validated against a new value\n         * @returns {void}\n         */\n        setFormFields(formFields, silently = false) {\n            const BasicInput = /** @type {BasicInput} */(this.getConstructor('basicInput'));\n\n            this.eachChild(widget => {\n                if (widget instanceof BasicInput) {\n                    const name = widget.getName && widget.getName();\n                    widget.setValue(formFields[name], silently);\n                }\n            });\n        }\n\n        /**\n         * @description Check is Form fields valid\n         * @param {Function} [cb] callback called if child inputs are valid\n         * @returns {boolean} - boolean value is Form input valid\n         */\n        isChildrenValid(cb) {\n            var valid = true;\n            const BasicInput = /** @type {BasicInput} */(this.getConstructor('basicInput'));\n\n            this.eachChild(item => {\n                if (item instanceof BasicInput && typeof item.validate === 'function' && !item.validate()) {\n                    if (valid && item.setFocus) {\n                        item.setFocus();\n                    }\n                    valid = false;\n                }\n            });\n\n            if (valid && typeof cb === 'function') {\n                cb();\n            }\n\n            if (!this.prefs().submitEmpty) {\n                const fieldsValues = this.getFormFields();\n\n                if (Object.keys(fieldsValues).every((key) => !fieldsValues[key])) {\n                    valid = false;\n\n                    this.ref(this.prefs().errorMessageLabel)\n                        .setText(this.prefs().emptyFormErrorMsg);\n\n                    this.ref(this.prefs().errorMessageLabel).show();\n                }\n            }\n            return valid;\n        }\n\n        /**\n         * @description Form validate\n         * @returns {boolean} boolean value is Form input valid\n         */\n        validate() {\n            return this.isChildrenValid();\n        }\n\n        /**\n         * @description Check is Form valid based on Form fields validation\n         * @returns {boolean} boolean value is Form valid\n         */\n        isValid() {\n            var valid = true;\n            const BasicInput = /** @type {BasicInput} */(this.getConstructor('basicInput'));\n\n            this.eachChild(itemCmp => {\n                if (itemCmp instanceof BasicInput && typeof itemCmp.isValid === 'function' && !itemCmp.isValid()) {\n                    valid = false;\n                    return false;\n                }\n                return true;\n            });\n            return valid;\n        }\n\n        /**\n         * @description Interface that can be override\n         * @returns {void}\n         */\n        setFocus() {\n        }\n\n        /**\n         * @description Get Form action url\n         * @returns {string} form action url\n         */\n        getFormUrl() {\n            // @ts-ignore\n            return this.ref('self').attr('action');\n        }\n\n        /**\n         * @description Clear Form Error\n         * @param {string} refID RefElement ID\n         * @returns {void}\n         */\n        clearError(refID = 'errorMessageLabel') {\n            this.ref(refID)\n                .hide()\n                .setText('');\n        }\n\n        /**\n         * @description Updates form html body by sending an AJAX request to server with params object\n         * <br>(possible param key is `countryCode`)\n         * <br>Obtained template injected instead of old fields\n         * <br>Data, entered in fields previosly will be restored\n         * @param {object} params - request parameters\n         * @param {string} params.countryCode - A country code to get country-specific form\n         * @returns {InstanceType <Promise>} - new Promise\n         */\n        updateFormData(params) {\n            const formDefinitionUrl = this.prefs().formDefinitionUrl;\n\n            if (formDefinitionUrl && params) {\n                return new Promise((resolve) => {\n                    getJSONByUrl(formDefinitionUrl, params, true).then((response) => {\n                        if (response.formDefinition) {\n                            const formFields = this.getFormFields();\n                            this.render('', {}, this.ref('fieldset'), response.formDefinition).then(() => {\n                                this.setFormFields(formFields, true);\n                                resolve();\n                                setTimeout(() => this.formDataUpdated(), 0);\n                                /* eslint-disable */\n                                var defaultWineclubShipAdd = document.querySelector(\"div[data-id='dwfrm_address_setAsWineClubDefaultShipping']\");\n                                if (defaultWineclubShipAdd) {\n                                    if (params.countryCode !== 'US') {\n                                        defaultWineclubShipAdd.classList.add('h-hidden');\n                                    }\n                                    else {\n                                        defaultWineclubShipAdd.classList.remove('h-hidden');\n                                    }\n                                }\n                                var defaultAddress = document.querySelector(\"div[data-id='dwfrm_address_setAsDefault']\");\n                                if (defaultAddress) {\n                                    if (params.countryCode !== 'US') {\n                                        defaultAddress.classList.add('h-hidden');\n                                    }\n                                    else {\n                                        defaultAddress.classList.remove('h-hidden');\n                                    }\n                                }\n                                /* eslint-enable */\n                            });\n                        }\n                    });\n                });\n            }\n\n            return new Promise((resolve) => {\n                resolve();\n                this.formDataUpdated();\n            });\n        }\n\n        /**\n         * @description Template method called once form definitions were reloaded\n         * @returns {void}\n         */\n        formDataUpdated() {\n\n        }\n    }\n\n    return BasicForm;\n}\n","// TO BE REVIEWED\n// @ts-nocheck\nimport { scrollIntoView } from 'widgets/toolbox/scroll';\nimport { get } from 'widgets/toolbox/util';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base BasicInput implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof BasicInput} Basic Input class\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class BasicInput\n     * @augments Widget\n     * @classdesc Basic Input Widget (like abstract ancestor), contains basic validation and input management logic.\n     * Supposes valid unified input markup. Contains also error messaging.\n     * Usually is not used directly, and relevant subclasses should be used.\n     * @property {boolean} data-skip-validation - if input needs to skip validation\n     * @property {string} data-classes-error-state - classes for input's error state\n     * @property {string} data-classes-valid-state - classes for input's valid state\n     * @property {string} data-classes-disabled - classes for disabled input\n     * @property {string} data-classes-locked - classes for locked input (disabled + readonly)\n     * @property {string} data-classes-wrapper-error-state - classes for input wrapper, when input in error state\n     * @property {string} data-classes-wrapper-valid-state - classes for input wrapper, when input in valid state\n     * @property {object} data-validation-config - validation rules and error messages for input\n     */\n    class BasicInput extends Widget {\n        prefs() {\n            return {\n                skipValidation: false,\n                classesErrorState: 'm-invalid',\n                classesValidState: 'm-valid',\n                classesDisabled: 'm-disabled',\n                classesLocked: 'm-locked',\n                classesWrapperErrorState: 'm-invalid',\n                classesWrapperValidState: 'm-valid',\n                validationConfig: {},\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            this.initValue = this.getValue();\n            if (!this.id && this.ref('field').attr('name')) {\n                this.id = this.ref('field').attr('name');\n            }\n            this.disabled = this.ref('field').attr('disabled') === 'disabled';\n            this.formName = '';\n        }\n\n        /**\n         * @description Get input value\n         * @returns {string} - return input name\n         */\n        getValue() {\n            // @ts-ignore\n            return (this.ref('field').val());\n        }\n\n        /**\n         * @description Get input name\n         * @returns {string} - return input name\n         */\n        getName() {\n            // @ts-ignore\n            return this.ref('field').attr('name');\n        }\n\n        /**\n         * @description Set focus to input\n         * @returns {void}\n         */\n        focus() {\n            var field = this.ref('field').get();\n            if (field) {\n                field.focus();\n            }\n        }\n\n        /**\n         * @description Set focus to input and scroll element into viewport\n         * @returns {void}\n         */\n        setFocus() {\n            const elementToScroll = this.ref('self').get();\n\n            if (elementToScroll) {\n                scrollIntoView(elementToScroll);\n            }\n\n            this.focus();\n        }\n\n        /**\n         * @description Blur (unfocus) an input\n         * @returns {void}\n         */\n        blur() {\n            var field = this.ref('field').get();\n            if (field) {\n                field.blur();\n            }\n        }\n\n        /**\n         * @description Set input value\n         * \"checkRanges\" method needs to validate min\\max length after changing input value by JS\n         * https://stackoverflow.com/questions/53226031/html-input-validity-not-checked-when-value-is-changed-by-javascript\n         * @param {(string|number|undefined)} [newVal] - set this value to input\n         * @param {(boolean|undefined)} [silently] - if set to `true` - input\n         * should not be validated against a new value and no events should be fired\n         * @returns {void}\n         */\n        setValue(newVal = '', silently = false) {\n            const refField = this.ref('field');\n\n            refField.val(String(newVal));\n\n            this.checkRanges(refField);\n\n            if (!silently) {\n                this.update();\n            }\n        }\n\n        /**\n         * @description Check min/max length when value is being set and if it out of boundaries, set custom validity.\n         * After setting value via code, a min/max length rule does not work until the value is changed by user.\n         * @param {refElement} refField - Field ref object\n         * @returns {void}\n         * */\n        checkRanges(refField) {\n            const value = /** @type {string} */(refField.val());\n            const field = refField.get();\n            const rangesError = this.getRangesError(value);\n\n            if (rangesError && (field instanceof HTMLInputElement)) {\n                field.setCustomValidity(rangesError);\n            }\n        }\n\n        /**\n         * @description Check ranges and return appropriate error message or empty string\n         * @param {string} val - Value that is being set\n         * @returns {string} Ranges error message or empty string\n         */\n        getRangesError(val) {\n            if (!val) {\n                return '';\n            }\n\n            const refField = this.ref('field');\n            const field = refField.get();\n\n            if (field instanceof HTMLInputElement) {\n                const validationConfig = this.prefs().validationConfig;\n                const valueLength = String(val).length;\n\n                if (field.minLength && valueLength < field.minLength) {\n                    return get(validationConfig, 'errors.minLength', '');\n                } else if (field.maxLength && valueLength > field.maxLength) {\n                    return get(validationConfig, 'errors.maxLength', '');\n                }\n            }\n\n            return '';\n        }\n\n        /**\n         * @description Updates custom validity state\n         * @returns {void}\n         */\n        updateCustomValidityState() {\n            const field = this.ref('field');\n            const validity = field.getValidity();\n\n            if (validity && validity.state.customError) {\n                this.checkRanges(field);\n            }\n        }\n\n        /**\n         * @description Validate input and trigger `change` event\n         * @emits BasicInput#change\n         * @returns {void}\n         */\n        update() {\n            this.validate();\n            /**\n             * @description Event, indicates input value was changed\n             * @event BasicInput#change\n            */\n            this.emit('change', this);\n        }\n\n        /**\n         * @description Clears input error\n         * @emits BasicInput#inputstatechanged\n         * @returns {void}\n         */\n        clearError() {\n            this.ref('field').removeClass(this.prefs().classesErrorState);\n            this.ref('field').removeClass(this.prefs().classesValidState);\n            this.ref('self').removeClass(this.prefs().classesWrapperErrorState);\n            this.ref('self').removeClass(this.prefs().classesWrapperValidState);\n\n            this.ref('errorFeedback').hide();\n\n            /**\n             * @description Event, indicates input state was changed\n             * @event BasicInput#inputstatechanged\n            */\n            this.emit('inputstatechanged');\n        }\n\n        /**\n         * @description Set/unset error state into input (message and classes)\n         * @param {string} [error] error message - if defined, will set error staet, and valid state - otherwise\n         * @emits BasicInput#inputstatechanged\n         * @returns {void}\n         */\n        setError(error) {\n            if (error) {\n                this.ref('field').removeClass(this.prefs().classesValidState);\n                this.ref('self').removeClass(this.prefs().classesWrapperValidState);\n\n                this.ref('field').addClass(this.prefs().classesErrorState);\n                this.ref('self').addClass(this.prefs().classesWrapperErrorState);\n\n                this.ref('errorFeedback').setText(error).show();\n            } else {\n                this.ref('field').removeClass(this.prefs().classesErrorState);\n                this.ref('self').removeClass(this.prefs().classesWrapperErrorState);\n\n                this.ref('field').addClass(this.prefs().classesValidState);\n                this.ref('self').addClass(this.prefs().classesWrapperValidState);\n\n                this.ref('errorFeedback').hide();\n            }\n\n            this.emit('inputstatechanged');\n        }\n\n        /**\n         * @description Indicates, that input value is (is not) valid against HTML5 native constraints (input patterns, min/max etc).\n         * Also cares about case, when some field value should match another field value.\n         * Sets error message in case of input is not valid. Message is taken from JSON `validationConfig` data-attribute\n         * @returns {boolean} is input valid or not\n         */\n        isValid() {\n            const field = this.ref('field');\n            const validation = this.prefs().validationConfig;\n\n            this.updateCustomValidityState();\n\n            var { state, msg } = field.getValidity()\n                || { msg: '', state: /** @type {ValidityState} */({ valid: true }) };\n\n            if ((state.patternMismatch || state.typeMismatch)) {\n                msg = validation.errors.parse || validation.errors.security;\n            } else if (\n                (state.rangeOverflow || state.rangeUnderflow || state.tooLong || state.tooShort)\n            ) {\n                if (state.rangeOverflow || state.tooLong) {\n                    msg = validation.errors.maxLength;\n                } else if (state.rangeUnderflow || state.tooShort) {\n                    msg = validation.errors.minLength;\n                }\n            } else if (state.valueMissing) {\n                msg = validation.errors.required;\n            }\n\n            if (state.valid && this.widgetToMatch\n                && this.widgetToMatchOpts\n                && this.widgetToMatch.data('getValue') !== this.getValue()\n            ) {\n                this.error = this.widgetToMatchOpts.msg;\n                return false;\n            }\n\n            // user should be prevented from saving a non-compliant state as their wine club shipping address\n            var isWineClubShippAddChecked = document.getElementById('dwfrm_address_setAsWineClubDefaultShipping');\n            var isDefaultAddresChecked = document.getElementById('dwfrm_address_setAsDefault');\n            // eslint-disable-next-line max-len\n            if (isWineClubShippAddChecked !== null && isWineClubShippAddChecked.checked && this.config.id === 'dwfrm_address_setAsWineClubDefaultShipping') {\n                return this.nonCompliantState();\n            }\n            if (isDefaultAddresChecked !== null && isDefaultAddresChecked.checked && this.config.id === 'dwfrm_address_setAsDefault') {\n                return this.nonCompliantState();\n            }\n            this.error = msg;\n            return state.valid;\n        }\n\n        /**\n         * @description Triggers input validation process\n         * @returns {boolean} input validation result\n         */\n        validate() {\n            if (!this.shown || this.disabled || this.prefs().skipValidation) {\n                return true;\n            }\n\n            const valid = this.isValid();\n\n            if (valid) {\n                this.setError();\n            } else {\n                this.setError(this.error);\n            }\n\n            return valid;\n        }\n\n        /**\n         * @description Disables an input\n         * @returns {this} `this` instance for chaining\n         */\n        disable() {\n            this.disabled = true;\n            this.ref('field').disable();\n            this.ref('self').addClass(this.prefs().classesDisabled);\n            return this;\n        }\n\n        /**\n         * @description Enables an input\n         * @returns {this} `this` instance for chaining\n         */\n        enable() {\n            this.disabled = false;\n            this.ref('field').enable();\n            this.ref('self').removeClass(this.prefs().classesDisabled);\n            return this;\n        }\n\n        /**\n         * @description Locks an input (adds `readonly` attribute)\n         * @returns {void}\n         */\n        lock() {\n            this.locked = true;\n            this.ref('field').attr('readonly', true);\n            this.ref('self').addClass(this.prefs().classesLocked);\n        }\n\n        /**\n         * @description Unlocks an input (removes `readonly` attribute)\n         * @returns {void}\n         */\n        unlock() {\n            this.locked = false;\n            this.ref('field').attr('readonly', false);\n            this.ref('self').removeClass(this.prefs().classesLocked);\n        }\n\n        /**\n         * @description Checks if input is disabled\n         * @returns {boolean} result\n         */\n        isDisabled() {\n            return !!this.disabled;\n        }\n\n        /**\n         * @description Saves on widget level target widget for comparison validation to use it further in `isValid` method\n         * @param {BasicInput} widgetToMatch cmp\n         * @param {{[x: string]: string|undefined}} options to compare\n         * @returns {void}\n         */\n        setMatchCmp(widgetToMatch, options = {}) {\n            this.widgetToMatch = widgetToMatch;\n            this.widgetToMatchOpts = options;\n        }\n\n        /**\n         * @description To be either included or not into the form submission to server.\n         * @returns {boolean} result\n         */\n        skipSubmission() {\n            return false;\n        }\n\n        /**\n         * @description user should be prevented from saving a non-compliant state as their wine club shipping address\n         * @returns {boolean} result\n         */\n        nonCompliantState() {\n            var stateDropDown = document.getElementById('dwfrm_address_states_stateCode');\n            const nonCompliantStateArr = document.getElementById('nonCompliantState');\n            const nonCompliantStateErrorMsg = document.getElementsByClassName('non-CompliantState-errorMsg')[0];\n            if (stateDropDown !== null && stateDropDown.value !== '' && nonCompliantStateArr !== null) {\n                var selectedVal = stateDropDown.value;\n                const nonCompliantState = JSON.parse(nonCompliantStateArr.value);\n                const isNonCompliantState = nonCompliantState.includes(selectedVal);\n                if (isNonCompliantState) {\n                    window.scrollTo({\n                        top: 0,\n                        behavior: 'smooth'\n                    })\n                    nonCompliantStateErrorMsg.removeAttribute('hidden');\n                    return false;\n                }\n            }\n            // eslint-disable-next-line\n            if(nonCompliantStateErrorMsg!== undefined){\n                nonCompliantStateErrorMsg.setAttribute('hidden', 'hidden');\n            }\n            return true;\n        }\n    }\n\n    return BasicInput;\n}\n","import { clickOutside } from 'widgets/toolbox/util';\n\nconst KEY_DOWN = 40;\nconst KEY_UP = 38;\nconst KEY_ESCAPE = 27;\nconst KEY_RETURN = 13;\nconst KEY_TAB = 9;\nconst ACTIVE_DESCENDANT = 'aria-activedescendant';\n\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n */\n\n/**\n * @description Base Combobox implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof Combobox} Combobox class\n */\nexport default function (BasicInput) {\n    /*\n     * This content is based on w3.org design pattern examples and licensed according to the\n     * W3C Software License at\n     * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n     * Please see specification:\n     * https://www.w3.org/TR/wai-aria-practices/#combobox\n     */\n\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class Combobox\n     * @augments BasicInput\n     * @classdesc Combobox implementation in accordance with accessibility statements.\n     * Class could be extended to implement any provider-specific remote/local data fetching for Combobox inner elements.\n     * It is needed to implement `getSuggestions` method in a way, that is specific for subclasses\n     * Supports keyboard navigation among Combobox items.\n     * As far as Combobox could be used only in a subclasses, example, given below, is related to known subclass `searchBox`\n     * @property {string} data-widget - Widget name `searchBox`\n     * @property {string} data-url - URL to obtain serach suggestions from server based on customer's input\n     * @property {boolean} data-close-on-tab - If true - `tab` keypress will close listbox\n     * @property {string} data-widget-event-closesearch - An event, fired when `close` element was pressed\n     * @property {string} data-event-keydown - event handler for `keydown` event\n     * @property {boolean} data-close-from-outside - config, which shows, if combobox should be closed when click outside\n     * @property {number} data-min-chars - minimum characters to trigger show combobox\n     * @property {number} data-max-chars - maximum characters to enter\n     * @property {number} data-updating-delay - update listbox delay\n     * @property {string} data-classes-focused-item - class for currently focused item\n     * @property {string} data-classes-active-list-box - active listbox class\n     * @example\n     * // use this code to display minicart widget\n     * <div\n     *     data-widget=\"searchBox\"\n     *     data-url=\"${URLUtils.url('SearchServices-GetSuggestions')}\"\n     *     data-close-on-tab=\"true\"\n     * >\n     *     <form>\n     *         ... serach input\n     *     </form>\n     *     ...\n     *     <div data-ref=\"listbox\" data-event-mouseenter=\"markHover\" data-event-mouseleave=\"unMarkHover\">\n     *         <div role=\"none\" class=\"b-suggestions-inner\" data-ref=\"listboxInner\"></div>\n     *     </div>\n     *     <script data-ref=\"template\" type=\"template/mustache\">\n     *         <div data-ref=\"listboxInner\">\n     *             ... search suggestions\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class Combobox extends BasicInput {\n        constructor(el, config) {\n            super(el, config);\n            this.lastSearchedTerm = '';\n            this.selectedIndex = -1;\n            this.resultsCount = 0;\n            this.isListboxOpen = false;\n        }\n\n        prefs() {\n            return {\n                minChars: 3,\n                maxChars: 50,\n                updatingDelay: 300,\n                closeFromOutside: true,\n                closeOnTab: true,\n                classesFocusedItem: 'm-focused',\n                classesActiveListBox: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Handles customer input\n         * @returns {void}\n         */\n        handleInput() {\n            const inputLength = this.ref('input').prop('value').length;\n            if (inputLength >= this.prefs().minChars && inputLength <= this.prefs().maxChars) {\n                this.updateListbox();\n            } else {\n                if (this.timeout) {\n                    clearTimeout(this.timeout);\n                }\n                this.closeListbox();\n            }\n        }\n\n        /**\n         * @description Marks element as hower, once mouse over\n         * @listens dom#mouseenter\n         * @returns {void}\n         */\n        markHover() {\n            this.hasHoverWithin = true;\n        }\n\n        /**\n         * @description Unmarks element as hower, once mouse out\n         * @listens dom#mouseleave\n         * @returns {void}\n         */\n        unMarkHover() {\n            this.hasHoverWithin = false;\n        }\n\n        /**\n         * @description Handles `focus` on combobox input\n         * @listens dom#focus\n         * @returns {void}\n         */\n        handleFocus() {\n            this.updateListbox();\n        }\n\n        /**\n         * @description Handles `blur` on combobox input\n         * @listens dom#blur\n         * @returns {void}\n         */\n        handleBlur() {\n            if (this.hasHoverWithin || this.selectedIndex < 0) {\n                return;\n            }\n            this.closeListbox();\n        }\n\n        /**\n         * @description Handles `keydown` on combobox input\n         * @param {HTMLElement} _ - source of keydown event\n         * @param {KeyboardEvent} event - keydown event object\n         * @listens dom#keydown\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case KEY_ESCAPE:\n                    this.closeListbox();\n                    preventEventActions = true;\n                    break;\n                case KEY_UP:\n                    this.setSelectToNextItem();\n                    this.selectItem(this.getItemByIndex());\n                    preventEventActions = true;\n                    break;\n                case KEY_DOWN:\n                    this.setSelectToPreviousItem();\n                    this.selectItem(this.getItemByIndex());\n                    preventEventActions = true;\n                    break;\n                case KEY_RETURN:\n                    this.activateItem(this.getItemByIndex());\n                    return;\n                case KEY_TAB:\n                    if (this.prefs().closeOnTab) {\n                        this.closeListbox();\n                    }\n                    return;\n                default:\n                    return;\n            }\n\n            if (preventEventActions) {\n                event.stopPropagation();\n                event.preventDefault();\n            }\n        }\n\n        /**\n         * @description Sets previous item as selected, when navigating from keyboard\n         * @returns {void}\n         */\n        setSelectToPreviousItem() {\n            if (this.selectedIndex === -1 || this.selectedIndex >= this.resultsCount - 1) {\n                this.selectedIndex = 0;\n            } else {\n                this.selectedIndex += 1;\n            }\n        }\n\n        /**\n         * @description Sets next item as selected, when navigating from keyboard\n         * @returns {void}\n         */\n        setSelectToNextItem() {\n            if (this.selectedIndex <= 0) {\n                this.selectedIndex = this.resultsCount - 1;\n            } else {\n                this.selectedIndex -= 1;\n            }\n        }\n\n        /**\n         * @description Selects combobox dropdown item\n         * @param {null|refElement} selectedItem - item, selected by user\n         * @returns {void}\n         */\n        selectItem(selectedItem) {\n            if (this.currentSelected) {\n                this.deselectItem(this.currentSelected);\n            }\n\n            if (selectedItem) {\n                this.ref('input').attr(ACTIVE_DESCENDANT, `result-item-${this.selectedIndex}`);\n                selectedItem\n                    .addClass(this.prefs().classesFocusedItem)\n                    .attr('aria-selected', 'true');\n                this.afterItemSelected(selectedItem);\n            } else {\n                this.ref('input').attr(ACTIVE_DESCENDANT, '');\n            }\n\n            this.currentSelected = selectedItem;\n        }\n\n        /**\n         * @description Executes logic (sets input value) after item was selected\n         * @param {refElement} item - item, selected by user\n         * @returns {void}\n         */\n        afterItemSelected(item) {\n            this.ref('input').prop('value', item.data('suggestionValue'));\n        }\n\n        /**\n         * @description Deselectes item in combobox dropdown when navigating from keyboard.\n         * @param {refElement} item - item, selected by user\n         * @returns {void}\n         */\n        deselectItem(item) {\n            item\n                .removeClass(this.prefs().classesFocusedItem)\n                .attr('aria-selected', 'false');\n        }\n\n        /**\n         * @description \"Activate\" item by press Enter on selected item or mouse click on item\n         * @param {null|refElement} activeItem - item, selected by user\n         * @returns {void}\n         */\n        activateItem(activeItem) {\n            if (activeItem) {\n                this.ref('input')\n                    .prop('value', activeItem.data('suggestionValue'))\n                    .get().focus();\n                this.closeListbox();\n            }\n        }\n\n        /**\n         * @description Update Combobox Listbox (dropdown). Initiates items retrieveing either from server or from any other source, like an array.\n         * @returns {void}\n         */\n        updateListbox() {\n            const inputValue = this.ref('input').prop('value');\n\n            if (this.lastSearchedTerm === inputValue || inputValue.length < this.prefs().minChars) {\n                // could be triggered from focus so we need additionally check minChars\n                return;\n            }\n\n            if (this.timeout) {\n                clearTimeout(this.timeout);\n            }\n            this.timeout = setTimeout(this.getSuggestions.bind(this, inputValue), this.prefs().updatingDelay);\n        }\n\n        /**\n         * @description Get items list for Combobox. Could be fetched from any proper source.\n         * Usuaslly is implemented in childs.\n         * @param {string} query - a query, which needs to be processed in subclasses\n         * @returns {void}\n         */\n        getSuggestions(query) {\n            // This is example of getSuggestion method to implement\n            // Comboboxes like search or address should implement his own methods\n            // of how to get suggestion and render it. Template should follow this:\n            // <li role=\"option\" id=\"result-item-${0}\">${results[0]}</li>\n            // ...\n            // <li role=\"status\" aria-live=\"polite\">${results.length} suggestion found</li>\n            // You should always include ids of suggestion and status about how much\n            // suggestion total.\n            const resultsTotal = 1;\n            this.afterSuggestionsUpdate(query, resultsTotal);\n        }\n\n        /**\n         * @description Executes after a list of items (suggestions) of a Combobox has being updated.\n         * @param {string} query - a query, used for fetching Combobox inner items\n         * @param {number} resultsCount - obtained inner items count\n         * @returns {void}\n         */\n        afterSuggestionsUpdate(query, resultsCount) {\n            this.resultsCount = resultsCount;\n            this.selectedIndex = -1;\n            this.lastSearchedTerm = query;\n            this.openListbox();\n        }\n\n        /**\n         * @description Open a Listbox (Combobox dropdown)\n         * @returns {void}\n         */\n        openListbox() {\n            this.isListboxOpen = true;\n\n            const listbox = this.ref('listbox');\n            listbox.addClass(this.prefs().classesActiveListBox);\n            listbox.attr('aria-hidden', 'false');\n            const input = this.ref('input');\n            input.attr(ACTIVE_DESCENDANT, '');\n            input.attr('aria-expanded', 'true'); // Should be combobox node by specs\n            this.toggleOverlay(true);\n\n            if (this.prefs().closeFromOutside) {\n                this.bodyClickListener = clickOutside(this.ref('self'), this.closeListbox.bind(this));\n                if (this.bodyClickListener) {\n                    this.onDestroy(this.bodyClickListener);\n                }\n            }\n        }\n\n        /**\n         * @description Close a Listbox (Combobox dropdown)\n         * @returns {void}\n         */\n        closeListbox() {\n            this.resultsCount = 0;\n            this.selectedIndex = -1;\n            this.lastSearchedTerm = '';\n            this.isListboxOpen = false;\n\n            const listbox = this.ref('listbox');\n            listbox.removeClass(this.prefs().classesActiveListBox);\n            listbox.attr('aria-hidden', 'true');\n            const input = this.ref('input');\n            input.attr(ACTIVE_DESCENDANT, '');\n            input.attr('aria-expanded', 'false'); // Should be combobox nore by specs\n            this.toggleOverlay(false);\n\n            if (this.bodyClickListener) {\n                this.bodyClickListener();\n                this.bodyClickListener = undefined;\n            }\n\n            this.afterCloseListbox();\n        }\n\n        /**\n         * @description Executes after Listbox (Combobox dropdown) was closed\n         * @returns {void}\n         */\n        afterCloseListbox() {\n            this.ref('listbox').empty();\n        }\n\n        /**\n         * @description Toggles Combobox page overlay\n         * @param {boolean} isShown - does overlay should be shown\n         * @returns {void}\n         */\n        toggleOverlay(isShown) {\n            this.isOverlayVisible = isShown;\n        }\n\n        /**\n         * @description Get Combobox item (suggestion) by index, stored in `this.selectedIndex` class property.\n         * @returns {refElement|null} - founded item or null\n         */\n        getItemByIndex() {\n            if (this.selectedIndex < 0) {\n                return null;\n            }\n\n            const listItem = this.ref(`result-item-${this.selectedIndex}`);\n            if (listItem.length) {\n                return listItem;\n            }\n\n            return null;\n        }\n    }\n\n    return Combobox;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicForm').default>} BasicForm\n */\n\n/**\n * @param {BasicForm} BasicForm Base widget for extending\n * @returns {typeof Form} Form class\n */\nexport default function (BasicForm) {\n    /**\n     * @class Form\n     * @augments BasicForm\n     * @classdesc Represents Form component\n     * @example <caption>Example of Form widget usage</caption>\n     * <form\n     *     action=\"${URLUtils.url('Order-Track')}\"\n     *     method=\"GET\"\n     *     data-widget=\"form\"\n     *     data-event-submit=\"handleSubmit\"\n     * >\n     *     ... form contents\n     * </form>\n     * @property {string} data-widget - Widget name `form`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class Form extends BasicForm {\n\n    }\n\n    return Form;\n}\n","const ariaChecked = 'aria-checked';\n\n/**\n * @typedef {ReturnType <typeof import('widgets/forms/BasicInput').default>} BasicInput\n */\n\n/**\n * @description Base InputCheckbox implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof InputCheckbox} Input Checkox class\n */\nexport default function (BasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputCheckbox\n     * @augments BasicInput\n     * @classdesc Checkbox input implementation. Represents input `checkbox` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputCheckbox`\n     * @example <caption>InputCheckbox definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> input -> checkbox\n     * checkbox: {\n     *     'label.after': true,\n     *     'element.type': 'checkbox'\n     * },\n     * ...\n     * // fields -> generic -> setAsDefault\n     * setAsDefault: {\n     *     extends: 'fields.input.checkbox',\n     *     'label.text': 'form.address.setDefault'\n     * },\n     * ...\n     * @example <caption>Insertion of InputCheckbox inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.setAsDefault, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputCheckbox</caption>\n     * <div data-widget=\"inputCheckbox\" class=\"b-form_section\" data-id=\"dwfrm_login_rememberMe\" data-validation-config='{\"patterns\":{},\"errors\":{},\"mandatory\":false}'>\n     *     <div class=\"b-checkbox\">\n     *         <input type=\"checkbox\" data-ref=\"field\" class=\"b-checkbox-input\" id=\"dwfrm_login_rememberMe\" name=\"dwfrm_login_rememberMe\" value=\"true\"\n     *             data-tau=\"login_rememberMe\" data-event-blur=\"validate\" aria-describedby=\"dwfrm_login_rememberMe-error\"\n     *         >\n     *         <svg class=\"b-checkbox-icon\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" focusable=\"false\">\n     *             <path class=\"b-checkbox-icon_check\" fill=\"none\" stroke=\"currentColor\" d=\"m5.2686 10.371 5.1528 6.9837 9.8939-11.913\"></path>\n     *         </svg>\n     *         <label class=\"b-form_section-label\" for=\"dwfrm_login_rememberMe\">Remember Me</label>\n     *     </div>\n     *     <div role=\"alert\" class=\"b-form_section-message\" data-ref=\"errorFeedback\" id=\"dwfrm_login_rememberMe-error\" hidden=\"hidden\"></div>\n     * </div>\n     */\n    class InputCheckbox extends BasicInput {\n        /**\n         * @description Get value of a checkbox input. Returns empty string if checkbox is not checked.\n         * @returns {string} result\n         */\n        getValue() {\n            if (this.ref('field').prop('checked')) {\n                return super.getValue();\n            }\n            return '';\n        }\n\n        /**\n         * @description Set value to checkbox input. By fact - checks it if setted value is not empty.\n         * @param {string} newVal New value to set.\n         * @param {boolean} silently If true - there will be no event fired, that indicates input value change.\n         * @emits BasicInput#change\n         * @returns {void}\n         */\n        setValue(newVal = '', silently = false) {\n            this.ref('field').prop('checked', !!newVal);\n\n            if (!silently) {\n                this.emit('change', this);\n            }\n        }\n\n        /**\n         * @description Checks the checkbox. Also updates accessibility properties of input accordingly.\n         * @emits BasicInput#change\n         * @returns {void}\n         */\n        check() {\n            this.ref('field').attr(ariaChecked, 'true');\n            this.ref('field').prop('checked', true);\n\n            this.emit('change', this);\n        }\n\n        /**\n         * @description Unchecks the checkbox. Also updates accessibility properties of input accordingly.\n         * @emits BasicInput#change\n         * @returns {void}\n         */\n        uncheck() {\n            this.ref('field').attr(ariaChecked, 'false');\n            this.ref('field').prop('checked', false);\n\n            this.emit('change', this);\n        }\n\n        /**\n         * @description Upadate accessibility `aria-checked` depending on checkbox state.\n         * @returns {void}\n         */\n        updateAriaChecked() {\n            if (this.ref('field').prop('checked')) {\n                this.ref('field').attr(ariaChecked, 'true');\n            } else {\n                this.ref('field').attr(ariaChecked, 'false');\n            }\n        }\n\n        /**\n         * @description Used to handle change checkbox state.\n         * Usually used in dynamic forms config to handle `change` event on checkbox like:\n         * @example\n         * ...\n         * element: {\n         *     attributes: {\n         *         'data-event-change': 'handleChange'\n         *     }\n         * }\n         * ...\n         * @emits BasicInput#change\n         * @returns {void}\n         */\n        handleChange() {\n            this.updateAriaChecked();\n            this.emit('change');\n        }\n    }\n\n    return InputCheckbox;\n}\n","// TO BE REVIEWED\n/**\n * @typedef {ReturnType<typeof import('./InputText').default>} InputText\n */\n/**\n * @description Base InputEmail implementation\n * @param {InputText} InputText Base widget for extending\n * @returns {typeof InputEmail} Input Email class\n */\nexport default function (InputText) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputEmail\n     * @augments InputText\n     * @classdesc Input type Email implementation. Represents input `email` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputEmail`\n     * @example <caption>InputEmail definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> generic -> email\n     * email: {\n     *     extends: 'fields.input.base',\n     *     element: {\n     *         attributes: {\n     *             autocomplete: 'email'\n     *         },\n     *         maxLength: 50,\n     *         type: 'email',\n     *         required: true\n     *     },\n     *     validation: {\n     *         'patterns.parse': 'validation.patterns.parse.email',\n     *         'errors.parse': 'validation.errors.email'\n     *     },\n     *     'label.text': 'form.profile.email'\n     * },\n     * ...\n     * @example <caption>Insertion of InputEmail inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.email, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputEmail</caption>\n     * <div data-widget=\"inputEmail\" class=\"b-form_section m-required m-invalid\" data-id=\"dwfrm_login_email\"\n     *     data-validation-config=\"... validation config\"\n     * >\n     *     <label class=\"b-form_section-label\" for=\"dwfrm_login_email\">\n     *         <span class=\"b-form_section-required\" aria-hidden=\"true\">*</span>\n     *         Email\n     *     </label>\n     *     <input data-ref=\"field\" id=\"dwfrm_login_email\" type=\"email\" class=\"b-input m-invalid\" placeholder=\"\"\n     *         aria-describedby=\"dwfrm_login_email-error\" pattern=\"...\" name=\"dwfrm_login_email\"\n     *         required=\"\" value=\"\" maxlength=\"50\" aria-required=\"true\" autocomplete=\"email\" data-event-input=\"onInput\"\n     *         data-tau=\"login_email\" data-event-blur=\"validate\"\n     *     >\n     *     <div role=\"alert\" class=\"b-form_section-message\" data-ref=\"errorFeedback\" id=\"dwfrm_login_email-error\">This field is required.</div>\n     * </div>\n     */\n    class InputEmail extends InputText {\n\n    }\n\n    return InputEmail;\n}\n","// TO BE REVIEWED\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n */\n/**\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof InputHidden} Input Hidden class\n */\nexport default function (BasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputHidden\n     * @augments BasicInput\n     * @classdesc Widget used to handle hidden inputs. Represents input `hidden` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * Form validation will skip hidden inputs from validation perspective and will treat it as valid.\n     * @property {string} data-widget - Widget name `inputHidden`\n     * @example <caption>InputHidden definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> generic -> hidden\n     * hidden: {\n     *     extends: 'fields.input.base',\n     *     element: {\n     *         type: 'hidden'\n     *     }\n     * },\n     * ...\n     * @example <caption>Insertion of InputHidden inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.hiddenFieldExample).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputHidden</caption>\n     * <div data-widget=\"inputHidden\" class=\"b-form_section m-required m-invalid\" data-id=\"dwfrm_login_hiddenFieldExample\">\n     *     <input data-ref=\"field\" id=\"dwfrm_login_hiddenFieldExample\" type=\"hidden\" name=\"dwfrm_login_hiddenFieldExample\" value=\"\">\n     * </div>\n     */\n    class InputHidden extends BasicInput {\n        prefs() {\n            return {\n                ...super.prefs(),\n                skipValidation: true\n            };\n        }\n    }\n\n    return InputHidden;\n}\n","// TO BE REVIEWED\n// TODO: should be implemented as https://www.w3.org/TR/wai-aria-practices/#spinbutton\nimport { timeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n */\n\n/**\n * @description Base InputNumber implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof InputNumber} Input Number class\n */\nexport default function (BasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputNumber\n     * @augments BasicInput\n     * @classdesc Widget used as a quantity selector for product with +/- buttons functionality.\n     * - Uses `minValue` and `maxValue` properties to restrict allowed input range.\n     * - Handles keyboard input, allows step +/- configuration.\n     * @property {string} data-widget - Widget name `inputNumber`\n     * @example <caption>Example HTML structure for InputNumber</caption>\n     * <div class=\"quantity-form\"\n     *     data-widget=\"inputNumber\"\n     *     data-widget-event-change=\"updateQty\"\n     *     data-uuid=\"${lineItem.UUID}\"\n     *     data-pid=\"${lineItem.id}\"\n     *     data-min-value=\"${lineItem.quantityOptions.minOrderQuantity + ''}\"\n     *     data-max-value=\"${lineItem.quantityOptions.maxOrderQuantity + ''}\"\n     *     data-action=\"${pdict.actionUrls.updateQuantityUrl}\"\n     *     data-skip-validation=\"true\"\n     *     data-pre-select-qty=\"${lineItem.quantity + ''}\"\n     *     data-name=\"${lineItem.productName}\"\n     *     data-analytics=\"${JSON.stringify(lineItem.gtmInfo)}\"\n     *     data-remove-action=\"${pdict.actionUrls.removeProductLineItemUrl}\"\n     *     data-inform-attempt-decrease-min-val=\"true\"\n     *     data-widget-event-attemptdecreaseminval=\"removeProduct\"\n     *>\n     *    <label class=\"line-item-pricing-info quantity-label\" for=\"quantity-${lineItem.UUID}\">\n     *        ${Resource.msg('field.selectquantity','cart',null)}\n     *    </label>\n     *    <div class=\"quantity-form-inner\">\n     *        <button\n     *            data-ref=\"lessBtn\"\n     *            data-event-click=\"decrement\"\n     *            class=\"quantity-form-inner__less\"\n     *        >\n     *            <span class=\"is-sr-only\">${Resource.msg('label.decrease.quantity','cart',null)}</span>-\n     *        </button>\n     *\n     *        <input class=\"form-control quantity custom-select\"\n     *            data-ref=\"field\"\n     *            type=\"number\"\n     *            pattern=\"^\\d?\\d$\"\n     *            data-event-change=\"changeValue\"\n     *            id=\"quantity-${lineItem.UUID}\"\n     *            name=\"quantity-${lineItem.UUID}\"\n     *            value=\"${lineItem.quantity + ''}\"\n     *            min=\"${lineItem.quantityOptions.minOrderQuantity + ''}\"\n     *            max=\"${lineItem.quantityOptions.maxOrderQuantity + ''}\"\n     *            step=\"${lineItem.qtyStep + ''}\"\n     *            data-value=\"${lineItem.quantity + ''}\"\n     *        />\n     *\n     *        <button\n     *            data-ref=\"moreBtn\"\n     *            data-event-click=\"increment\"\n     *            class=\"quantity-form-inner__more\"\n     *        >\n     *            <span class=\"is-sr-only\">${Resource.msg('label.increase.quantity','cart',null)}</span>+\n     *        </button>\n     *     </div>\n     *     <div class=\"invalid-feedback is-hidden\" data-ref=\"errorFeedback\" hidden=\"hidden\"></div>\n     * </div>\n     */\n    class InputNumber extends BasicInput {\n        prefs() {\n            return {\n                maxValue: 99,\n                minValue: 0,\n                allowEmpty: false,\n                informAttemptDecreaseMinVal: false,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.maxLengthAttr = parseInt(this.ref('field').attr('maxlength').toString(), 10);\n            this.step = parseFloat(this.ref('field').attr('step').toString()) || 1;\n\n            this.ref('field').attr('maxlength', this.prefs().maxValue.toString().length.toFixed());\n\n            this.initValue = this.getValue();\n        }\n\n        /**\n         * @description Handler for `keydown` event on element\n         * @param {HTMLInputElement} el - element, which triggers an event\n         * @param {KeyboardEvent} incomingEvent - event object\n         * @listens dom#keydown\n         * @returns {void}\n         */\n        handleKeyDown(el, incomingEvent) {\n            let event = incomingEvent;\n            if (!event && window.event) {\n                // @ts-ignore\n                event = window.event;\n            }\n            const keyCode = event.keyCode || event.which;\n\n            // special handling for old devices\n            if (this.maxLengthAttr && (el.value.toString().length + 1) >= this.maxLengthAttr) {\n                this.onDestroy(timeout(() => {\n                    this.setValue(this.getValue(), true);\n                }, 0));\n            } else if (keyCode === 13) {\n                // Enter pressed\n                this.changeValue();\n                event.preventDefault();\n            }\n        }\n\n        /**\n         * @description Tries to change value of input. In case if new value is behind specific number input constrains - returns previous or default value.\n         * @emits InputNumber#attemptdecreaseminval\n         * @listens dom#change\n         * @returns {void}\n         */\n        changeValue() {\n            if (Number(this.getValue()) < this.prefs().minValue && this.prefs().informAttemptDecreaseMinVal) {\n                this.onDestroy(timeout(() => {\n                    /**\n                     * @description Event, indicates that attempt to set number input value less than specified in constraints\n                     * @event InputNumber#attemptdecreaseminval\n                     */\n                    this.emit('attemptdecreaseminval');\n                    this.setValue(String(this.prevVal || this.initValue), true);\n                }, 100));\n            } else {\n                this.setValue(this.getValue());\n                this.validate();\n            }\n        }\n\n        /**\n         * @description Decrements value in number input. In case if new value is behind specific number input constrains - emits `attemptdecreaseminval` and skips value.\n         * @emits InputNumber#attemptdecreaseminval\n         * @returns {void}\n         */\n        decrement() {\n            if (!this.isDisabled()) {\n                const newVal = parseFloat(this.getValue()) - (this.step || 0);\n\n                if (newVal >= this.prefs().minValue) {\n                    this.setValue(newVal.toString());\n                } else if (this.prefs().informAttemptDecreaseMinVal) {\n                    this.emit('attemptdecreaseminval');\n                }\n            }\n        }\n\n        /**\n         * @description Increments value in number input. In case if new value is behind specific number input constrains - emits `quantityNotAllowed` and skips value.\n         * @emits InputNumber#quantityNotAllowed\n         * @returns {void}\n         */\n        increment() {\n            if (!this.isDisabled()) {\n                const newVal = parseFloat(this.getValue()) + (this.step || 0);\n\n                if (newVal <= this.prefs().maxValue) {\n                    this.setValue(newVal.toString());\n                } else {\n                    /**\n                     * @description Event, indicates that attempt to set number input value not valid as per constraints.\n                     * @event InputNumber#quantityNotAllowed\n                     */\n                    this.emit('quantityNotAllowed');\n                }\n            }\n        }\n\n        /**\n         * @description Sets value for number input. Checks it on constraints first.\n         * Manages input buttons less/more.\n         * @param {string} val - set this value to input\n         * @param {boolean} silent - if set to `true` - input should not be validated against a new value\n         * @returns {void}\n         */\n        setValue(val, silent = false) {\n            if (val === '' && this.prefs().allowEmpty) {\n                super.setValue('', silent);\n            } else {\n                const floatValue = typeof val !== 'number' ? parseFloat(val) : val;\n\n                if (floatValue >= this.prefs().minValue && floatValue <= this.prefs().maxValue) {\n                    super.setValue(floatValue.toString(), silent);\n                    this.prevVal = floatValue;\n                } else if (floatValue > this.prefs().maxValue) {\n                    super.setValue(String(this.prefs().maxValue), silent);\n                } else if (floatValue < this.prefs().minValue || Number.isNaN(floatValue)) {\n                    super.setValue(String(this.prevVal || this.prefs().minValue), silent);\n                } else {\n                    super.setValue('', silent);\n                }\n            }\n\n            this.ref('moreBtn').enable();\n            this.ref('lessBtn').enable();\n\n            const value = parseFloat(this.getValue());\n            if (this.prefs().minValue > value - (this.step || 0)) {\n                if (!this.prefs().informAttemptDecreaseMinVal) {\n                    this.ref('lessBtn').disable();\n                }\n            } else if (this.prefs().maxValue < value + (this.step || 0)) {\n                this.ref('moreBtn').disable();\n            }\n        }\n\n        /**\n         * @description Executes after widget was refreshed\n         * @returns {void}\n         */\n        onRefresh() {\n            this.setValue(this.ref('field').attr('value').toString(), true);\n            this.ref('field').attr('maxlength', this.prefs().maxValue.toString().length.toFixed());\n        }\n\n        /**\n         * @description Implements number input specific logic to indicate if field value is valid.\n         * @returns {boolean} - input validation result\n         */\n        isValid() {\n            const isSuperValid = super.isValid();\n\n            if (isSuperValid) {\n                const val = parseFloat(this.getValue());\n\n                if (val < this.prefs().minValue || val > this.prefs().maxValue) {\n                    const validation = this.prefs().validationConfig;\n\n                    this.error = validation.errors.range || validation.errors.parse;\n                    return false;\n                }\n            }\n            return isSuperValid;\n        }\n\n        /**\n         * @description Initiates field validation process. Manages validation error messages on input.\n         * @returns {boolean} - input validation result\n         */\n        validate() {\n            if (this.disabled) {\n                return true;\n            }\n            const isValid = this.isValid();\n            if (isValid) {\n                this.clearError();\n            } else {\n                this.setError(this.error);\n            }\n            return isValid;\n        }\n    }\n\n    return InputNumber;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @description Base InputPassword implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof InputPassword} Input Password class\n */\nexport default function (BasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputPassword\n     * @augments BasicInput\n     * @classdesc Specific Password input, contains specific password validation logic. Represents input `password` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * Uses 'show/hide mask' functionality, which allows customer to see/hide printed password characters.\n     * Adds additional validation constraints rules, which are password-specific (like special characters, uppercased characters etc).\n     * @property {string} data-widget - Widget name `inputPassword`\n     * @example <caption>InputPassword definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> input -> password\n     * password: {\n     *     extends: 'fields.input.base',\n     *     'caption.show': true,\n     *     'caption.text': 'form.profile.password.caption',\n     *     'label.text': 'form.profile.password',\n     *     element: {\n     *         type: 'password',\n     *         required: true,\n     *         minLength: 8,\n     *         maxLength: 255,\n     *         attributes: {\n     *             'data-event-input': 'onPasswordInput'\n     *         }\n     *     }\n     * },\n     * ...\n     * @example <caption>Insertion of InputPassword inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.profile.password).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputPassword</caption>\n     * <div data-widget=\"inputPassword\" class=\"b-form_section m-required m-invalid\"\n     *     data-id=\"dwfrm_login_password\" data-validation-config=\"... validation cinfig\"\n     * >\n     *     <label class=\"b-form_section-label\" for=\"dwfrm_login_password\">\n     *         <span class=\"b-form_section-required\" aria-hidden=\"true\">*</span>\n     *         Password\n     *     </label>\n     *     <div class=\"b-input_password\">\n     *         <input data-ref=\"field\" id=\"dwfrm_login_password\" type=\"password\" class=\"b-input m-invalid\"\n     *            aria-describedby=\"dwfrm_login_password-error\" placeholder=\"\" name=\"dwfrm_login_password\" required=\"\" value=\"\"\n     *            maxlength=\"255\" aria-required=\"true\" minlength=\"8\" data-event-input=\"onPasswordInput\"\n     *            autocomplete=\"current-password\" data-tau=\"login_password\" data-event-blur=\"validate\"\n     *         >\n     *         <button class=\"b-input_password-toggle_visibility\" data-ref=\"showButton\" data-event-click=\"toggleMask\"\n     *             data-button-text-show=\"Show\" data-button-text-hide=\"Hide\" aria-pressed=\"false\"\n     *             title=\"Toggle password field visibility\" type=\"button\" hidden=\"hidden\">Show</button>\n     *     </div>\n     *     <div role=\"alert\" class=\"b-form_section-message\" data-ref=\"errorFeedback\" id=\"dwfrm_login_password-error\">This field is required.</div>\n     * </div>\n     */\n    class InputPassword extends BasicInput {\n        prefs() {\n            return {\n                upperCaseAmount: 0,\n                lowerCaseAmount: 0,\n                numbersAmount: 0,\n                specialCharsAmount: 0,\n                specialCharsList: '$%/()[]{}=?!.,-_*|+~#',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Checks if entered data is number\n         * @param {string} val - entered password\n         * @returns {boolean} check result\n         */\n        isNumber(val) {\n            return '0123456789'.includes(val);\n        }\n\n        /**\n         * @description Checks if entered data is simple character (not a number or special character)\n         * @param {string} val - entered password\n         * @returns {boolean} check result\n         */\n        isSimpleChar(val) {\n            return !this.isNumber(val) && !this.prefs().specialCharsList.includes(val);\n        }\n\n        /**\n         * @description Verifies if entered password is valid and encount all password constraints.\n         * @returns {boolean} check result\n         */\n        isValid() {\n            const val = this.getValue();\n\n            if (!super.isValid()) {\n                return false;\n            }\n\n            if (typeof val === 'string' && val) {\n                const valChars = val.split('');\n\n                if (\n                    this.checkLowerCaseAmount(valChars)\n                    && this.checkUpperCaseAmount(valChars)\n                    && this.checkNumberAmount(valChars)\n                    && this.checkSpecialCharsAmount(valChars)\n                ) {\n                    if (this.widgetToMatch && this.widgetToMatchOpts && this.widgetToMatch.data('getValue') !== val) {\n                        this.error = this.widgetToMatchOpts.msg;\n                        return false;\n                    }\n                } else {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        /**\n         * @description Checks special characters amount in entered password as per corresponding constraint.\n         * @param {string[]} valChars - array of entered password symbols\n         * @returns {boolean} check results\n         */\n        checkSpecialCharsAmount(valChars) {\n            if (this.prefs().specialCharsAmount) {\n                const specialCharsList = this.prefs().specialCharsList;\n                const specialCharsLetters = valChars.filter(char => specialCharsList.includes(char));\n                if (specialCharsLetters.length < this.prefs().specialCharsAmount) {\n                    this.error = this.prefs().validationConfig.errors.specialCharsAmount;\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        /**\n         * @description Checks numbers amount in entered password as per corresponding constraint.\n         * @param {string[]} valChars - array of entered password symbols\n         * @returns {boolean} check result\n         */\n        checkNumberAmount(valChars) {\n            if (this.prefs().numbersAmount) {\n                const numberLetters = valChars.filter(char => this.isNumber(char));\n                if (numberLetters.length < this.prefs().numbersAmount) {\n                    this.error = this.prefs().validationConfig.errors.numbersAmount;\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        /**\n         * @description Checks lowercased characters amount in entered password as per corresponding constraint.\n         * @param {string[]} valChars - array of entered password symbols\n         * @returns {boolean} check result\n         */\n        checkLowerCaseAmount(valChars) {\n            if (this.prefs().lowerCaseAmount) {\n                const lowerCaseLetters = valChars.filter(char => char === char.toLowerCase() && this.isSimpleChar(char));\n                if (lowerCaseLetters.length < this.prefs().lowerCaseAmount) {\n                    this.error = this.prefs().validationConfig.errors.lowerCaseAmount;\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        /**\n         * @description Checks uppercased characters amount in entered password as per corresponding constraint.\n         * @param {string[]} valChars - array of entered password symbols\n         * @returns {boolean} check results\n         */\n        checkUpperCaseAmount(valChars) {\n            if (this.prefs().upperCaseAmount) {\n                const upperCaseLetters = valChars.filter(char => char === char.toUpperCase() && this.isSimpleChar(char));\n                if (upperCaseLetters.length < this.prefs().upperCaseAmount) {\n                    this.error = this.prefs().validationConfig.errors.upperCaseAmount;\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        /**\n         * @description Show mask button inside password field\n         * @returns {void}\n         */\n        showMaskButton() {\n            this.ref('showButton').show();\n        }\n\n        /**\n         * @description Handle click on button Show/Hide mask. Toggle type based on input type.\n         * @listens dom#click\n         * @returns {void}\n         */\n        toggleMask() {\n            const input = this.ref('field');\n            const inputType = input.attr('type');\n            const showButton = this.ref('showButton');\n            const showText = showButton.data('buttonTextShow');\n            const hideText = showButton.data('buttonTextHide');\n\n            if (inputType === 'password') {\n                input.attr('type', 'text');\n                showButton.attr('aria-pressed', 'true');\n                showButton.setText(hideText);\n            } else {\n                input.attr('type', 'password');\n                showButton.attr('aria-pressed', 'false');\n                showButton.setText(showText);\n            }\n        }\n\n        /**\n         * @description Listener for `input` event.\n         * Usually used to display Show/Hide mask button when entered needed amount of symbols into password field.\n         * @listens dom#input\n         * @param {RefElement} el event source element\n         * @returns {void}\n         */\n        onPasswordInput(el) {\n            const entered = el && el.val();\n            if (entered && entered.length) {\n                this.showMaskButton();\n            }\n        }\n    }\n\n    return InputPassword;\n}\n","const DATA_FIELD = '[data-ref=\"field\"]';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n */\n\n/**\n * @description Base InputRadio implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof InputRadio} Input Radio class\n */\nexport default function (BasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputRadio\n     * @augments BasicInput\n     * @classdesc Radio input implementation. Represents input `radio` element together with widget-related HTML markup.\n     * @property {string} data-widget - Widget name `inputRadio`\n     * @example <caption>InputRadio HTML markup example</caption>\n     * <fieldset class=\"b-form-set\">\n     *     <legend class=\"b-form-set_label\">Shipping method</legend>\n     *     <div class=\"b-form_section\" data-widget=\"inputRadio\" data-id=\"shippingMethodList\"\n     *         data-select-shipping-method-url=\"https://...\"\n     *         data-action-url=\"https://...\"\n     *         data-widget-event-change=\"selectShippingMethod\" data-shipment-uuid=\"3fbc2a6f7e32e2b1755e9099bd\"\n     *     >\n     *         <div class=\"b-option_switch\">\n     *             <div class=\"b-option_switch-inner\">\n     *                 <input id=\"shippingMethod-001\" class=\"b-option_switch-input\"\n     *                     name=\"dwfrm_shipping_shippingAddress_shippingMethodID\" type=\"radio\"\n     *                     value=\"001\" data-value=\"001\" data-ref=\"field\" data-event-change=\"update\" checked=\"\"\n     *                 >\n     *                 <div class=\"b-option_switch-icon\"></div>\n     *                 <label class=\"b-option_switch-label\" for=\"shippingMethod-001\">\n     *                     <div class=\"b-option_switch-label_surface\">\n     *                         <span class=\"b-option_switch-name\">...</span>\n     *                         <div class=\"b-price\">...</div>\n     *                     </div>\n     *                     <span class=\"b-option_switch-description\">...</span>\n     *                 </label>\n     *             </div>\n     *         </div>\n     *         <div class=\"b-option_switch\">\n     *             <div class=\"b-option_switch-inner\">\n     *                 <input id=\"shippingMethod-002\" class=\"b-option_switch-input\"\n     *                     name=\"dwfrm_shipping_shippingAddress_shippingMethodID\" type=\"radio\"\n     *                     value=\"001\" data-value=\"001\" data-ref=\"field\" data-event-change=\"update\" checked=\"\"\n     *                 >\n     *                 <div class=\"b-option_switch-icon\"></div>\n     *                 <label class=\"b-option_switch-label\" for=\"shippingMethod-001\">\n     *                     <div class=\"b-option_switch-label_surface\">\n     *                         <span class=\"b-option_switch-name\">...</span>\n     *                         <div class=\"b-price\">...</div>\n     *                     </div>\n     *                     <span class=\"b-option_switch-description\">...</span>\n     *                 </label>\n     *             </div>\n     *         </div>\n     *     <div role=\"alert\" class=\"b-form_section-message\" data-ref=\"errorFeedback\" hidden=\"\"></div>\n     * </fieldset>\n     */\n    class InputRadio extends BasicInput {\n        /**\n         * @description method to get `value` of the radio\n         * @returns {string} value of selected radio input\n         */\n        getValue() {\n            const el = (this.ref('self').get());\n\n            if (el) {\n                return Array.from(el.querySelectorAll(DATA_FIELD))\n                    .reduce((val, elField) => {\n                        const tmpEl = /** @type {HTMLInputElement} */(elField);\n                        return val || ((tmpEl.checked || '') && tmpEl.value);\n                    }, '');\n            }\n            return '';\n        }\n\n        /**\n         * @description method to get `data-value` value of the radio\n         * @returns {string} `data-value` value\n         */\n        getDataValue() {\n            const el = (this.ref('self').get());\n\n            if (el) {\n                return Array.from(el.querySelectorAll(DATA_FIELD))\n                    .reduce((val, elInner) => {\n                        const tmpEl = /** @type {HTMLInputElement} */(elInner);\n\n                        return val || ((tmpEl.checked || '') && (tmpEl.getAttribute('data-value') || ''));\n                    }, '');\n            }\n            return '';\n        }\n\n        /**\n         * @description Overriden implementation of parent validate() method\n         * @returns {boolean} true in all cases\n         */\n        validate() {\n            return true;\n        }\n\n        /**\n         * @description Method to select radio input\n         * @param {string} value - value to be set to radio button\n         * @returns {void}\n         */\n        setValue(value) {\n            const el = (this.ref('self').get());\n\n            if (el) {\n                Array.from(el.querySelectorAll(DATA_FIELD))\n                    .forEach((elField) => {\n                        const tmpEl = /** @type {HTMLInputElement} */(elField);\n\n                        if (tmpEl.value === value) {\n                            tmpEl.checked = true;\n                            tmpEl.setAttribute('checked', 'checked');\n                        } else {\n                            tmpEl.checked = false;\n                            tmpEl.removeAttribute('checked');\n                        }\n                    });\n            }\n        }\n\n        /**\n         * @description Method to get dataset of checked or first radio input\n         * @returns {null|object} dataset object of first or checked radio input, or null if no 'self' exist\n         */\n        getDataSet() {\n            const checked = this.getChecked();\n            return checked ? checked.dataset : checked;\n        }\n\n        /**\n         * @description Method to get checked (or first) radio input\n         * @returns {null|HTMLElement} first or checked inputs ref element if self exists, null if not\n         */\n        getChecked() {\n            const el = this.ref('self').get();\n\n            if (el) {\n                /** @type {HTMLInputElement} */\n                const currentEl = (Array.from(el.querySelectorAll(DATA_FIELD))\n                    .filter(field => {\n                        const tmpField = /** @type {HTMLInputElement} */(field);\n\n                        return tmpField.checked;\n                    })[0] || el.querySelectorAll(DATA_FIELD)[0]);\n\n                return currentEl;\n            }\n\n            return null;\n        }\n    }\n\n    return InputRadio;\n}\n","// @ts-ignore\nimport { RefElement } from 'widgets/toolbox/RefElement';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n * @typedef {InstanceType <typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @description Base InputSelect implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof InputSelect} Input Select class\n */\nexport default function (BasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputSelect\n     * @augments BasicInput\n     * @classdesc Select input implementation. Represents input `password` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputSelect`\n     * @example <caption>InputSelect definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> select\n     * select: {\n     *     'element.type': 'select',\n     *     validation: {\n     *         'patterns.security': 'validation.patterns.security',\n     *         'errors.security': 'validation.errors.parse'\n     *     }\n     * },\n     * ...\n     * // fields -> generic -> country\n     * country: {\n     *     widget: {\n     *         attributes: {\n     *             'data-widget-event-change': 'onCountryChange'\n     *         },\n     *         classes: 'm-small'\n     *     },\n     *     extends: 'fields.select',\n     *     'label.text': 'form.address.country',\n     *     element: {\n     *         required: true,\n     *             attributes: {\n     *                 'data-event-change': 'onChange'\n     *             }\n     *         }\n     *     },\n     * }\n     * ...\n     * @example <caption>Insertion of InputSelect inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.country, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputSelect</caption>\n     * <div data-widget=\"inputSelect\" data-first-default=\"true\"\n     *     data-widget-event-change=\"updateShippingState\" class=\"b-form_section m-required m-small m-invalid\"\n     *     data-id=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\"\n     *     data-validation-config=\"... validation config\"\n     * >\n     *     <label class=\"b-form_section-label\" for=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\">\n     *         <span class=\"b-form_section-required\" aria-hidden=\"true\">*</span>\n     *         State\n     *     </label>\n     *     <div class=\"b-select\">\n     *         <select data-ref=\"field\" class=\"b-select-input m-invalid\"\n     *             id=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\"\n     *             name=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\"\n     *             required=\"\" aria-required=\"true\" data-event-change=\"onChange\"\n     *             aria-describedby=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode-error\"\n     *             data-event-blur=\"validate\"\n     *         >\n     *             <option value=\"\" data-id=\"0\">Please select</option>\n     *             ...\n     *         </select>\n     *         <svg aria-hidden=\"true\" class=\"b-select-icon\" width=\"10\" height=\"6\" focusable=\"false\">\n     *             <use href=\"#arrow-down-small\"></use>\n     *         </svg>\n     *     </div>\n     *     <div role=\"alert\" class=\"b-form_section-message\" data-ref=\"errorFeedback\" id=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode-error\">This field is required.</div>\n     * </div>\n     */\n    class InputSelect extends BasicInput {\n        init() {\n            super.init();\n\n            const field = /** @type {HTMLSelectElement|undefined} */(this.ref('field').get());\n            // Reset value when for some reason no option preselected, even first (default)\n            if (field && !field.value) {\n                const option = Array.from(field.options).find(elem => elem.hasAttribute('selected'));\n                let val = option && option.value;\n\n                if (!val) {\n                    val = this.getValue();\n                }\n\n                this.setValue(val, true);\n            }\n\n            if (this.config.firstDefault && field) {\n                this.initValue = field.options[0].value;\n            }\n        }\n\n        /**\n         * @description InputSelect on change handler\n         * @listens dom#change\n         * @param {RefElement} el source of event\n         * @param {(Event|undefined)} event event instance if DOM event\n         * @returns {void}\n         */\n        onChange(el, event) {\n            if (!this.config.dontPrevent && event && event instanceof Event) {\n                event.preventDefault();\n            }\n\n            this.update();\n        }\n\n        /**\n         * @description Sets new value on select from selected option\n         * @param {string} newVal new value\n         * @param {boolean} silently validate after change\n         * @returns {void}\n         */\n        setValue(newVal, silently) {\n            let val = newVal || this.initValue || '';\n\n            const field = /** @type {HTMLSelectElement|undefined} */(this.ref('field').get());\n\n            if (field) {\n                const option = Array.from(field.options).find(elem => elem.value === val);\n\n                if (!option) {\n                    val = this.initValue || '';\n                }\n            }\n\n            super.setValue(val, silently);\n        }\n\n        /**\n         * @description Get value from selected option\n         * @returns {string} selected option value\n         */\n        getValue() {\n            const selectedOption = this.getSelectedOptions();\n            if (selectedOption) {\n                if (selectedOption.length) {\n                    return /** @type {string} */(selectedOption.val());\n                }\n                const field = /** @type {HTMLSelectElement|undefined} */(this.ref('field').get());\n\n                if (field && field.options.length) {\n                    const item = field.options.item(0);\n                    if (item) {\n                        return item.value;\n                    }\n                }\n            }\n            return '';\n        }\n\n        /**\n         * @description Get selected options for select\n         * @returns {RefElement|undefined} selected options\n         */\n        getSelectedOptions() {\n            const field = /** @type {HTMLSelectElement|undefined} */(this.ref('field').get());\n\n            if (field && field.selectedOptions) {\n                return new RefElement(Array.from(field.selectedOptions));\n            }\n            return undefined;\n        }\n\n        /**\n         * @description Get selected option text\n         * @returns {string} selected option text\n         */\n        getText() {\n            const field = this.ref('field').get();\n\n            if (field) {\n                const selectedNode = Object.values(field.childNodes)\n                    .find(node => /** @type {HTMLOptionElement} */(node).selected);\n\n                if (selectedNode) {\n                    return selectedNode.textContent || '';\n                }\n                return '';\n            }\n            return '';\n        }\n\n        /**\n         * @description Locks select input (add locked classes, set read-only, disabled)\n         * @returns {void}\n         */\n        lock() {\n            if (!this.locked) {\n                super.lock();\n                this.ref('field').attr('disabled', true);\n            }\n        }\n\n        /**\n         * @description Unlocks select input (remove locked classes, remove read-only, disabled)\n         * @returns {void}\n         */\n        unlock() {\n            if (this.locked) {\n                super.unlock();\n                this.ref('field').attr('disabled', false);\n            }\n        }\n\n        changeAttribute() {} // eslint-disable-line\n\n        /**\n         * @description Method to stop propagation in case if input events should not be interrupted.\n         * For example, when there is a listener on a parent widget that is triggered by the same keydown event and it should not fire, etc.\n         * @param {HTMLElement} _ - source of keydown event\n         * @param {Event} event - keydown event object\n         * @returns {void}\n         */\n        stopImmediatePropagation(_, event) {\n            if (event) { event.stopImmediatePropagation(); }\n        }\n    }\n\n    return InputSelect;\n}\n","/**\n * @typedef {ReturnType<typeof import('./InputText').default>} InputText\n */\n/**\n * @description Base InputTel implementation\n * @param {InputText} InputText Base widget for extending\n * @returns {typeof InputTel} Input Tel class\n */\nexport default function (InputText) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputTel\n     * @augments InputText\n     * @classdesc Input type Tel implementation. Represents input `tel` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputTel`\n     * @example <caption>InputSelect definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> input -> tel\n     *       tel: {\n     *           extends: 'fields.input.base',\n     *           validation: {\n     *               'errors.parse': 'validation.errors.phone'\n     *           },\n     *           'label.text': 'form.address.phone',\n     *           'caption.show': true,\n     *           element: {\n     *               type: 'tel',\n     *               minLength: 5,\n     *               maxLength: 20,\n     *               attributes: {\n     *                   autocomplete: 'tel',\n     *                   'data-event-input': 'onInput',\n     *                   'data-event-keypress': 'onKeypress',\n     *                   'data-event-change': 'onChange',\n     *                   'data-event-paste.prevent': 'onPaste'\n     *               }\n     *           },\n     *           localization: {\n     *               us: {\n     *                   widget: {\n     *                       attributes: {\n     *                           'data-mask': '9-999-999-9999'\n     *                       }\n     *                   },\n     *                   validation: {\n     *                       'patterns.parse': 'validation.patterns.parse.phone.us'\n     *                   },\n     *                   caption: {\n     *                       text: 'form.address.phone.caption.us'\n     *                   }\n     *               },\n     *               ca: {\n     *                  widget: {\n     *                      attributes: {\n     *                           'data-mask': '9-999-999-9999'\n     *                       }\n     *                   },\n     *                   validation: {\n     *                       'patterns.parse': 'validation.patterns.parse.phone.ca'\n     *                   },\n     *                   caption: {\n     *                       text: 'form.address.phone.caption.ca'\n     *                   }\n     *               },\n     *               gb: {\n     *                   widget: {\n     *                       attributes: {\n     *                           'data-mask': '+99 (9)99 9999 9999'\n     *                       }\n     *                   },\n     *                   validation: {\n     *                       'patterns.parse': 'validation.patterns.parse.phone.gb'\n     *                   },\n     *                   caption: {\n     *                       text: 'form.address.phone.caption.gb'\n     *                   }\n     *               }\n     *           }\n     *       },\n     * ...\n     * // fields -> generic -> phone\n     * phone: {\n     *     extends: 'fields.input.tel',\n     *     element: {\n     *         required: true\n     *     }\n     * },\n     * ...\n     * @example <caption>Insertion of InputSelect inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.phone, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputPhone</caption>\n     *   <div data-widget=\"inputTel\" data-mask=\"9-999-999-9999\"\n     *       class=\"b-form_section m-required m-invalid\"\n     *       data-id=\"dwfrm_shipping_shippingAddress_addressFields_phone\"\n     *       data-validation-config=\"... validation config\"\n     *   >\n     *       <label class=\"b-form_section-label\" for=\"dwfrm_shipping_shippingAddress_addressFields_phone\">\n     *           <span class=\"b-form_section-required\" aria-hidden=\"true\">\n     *               *\n     *           </span>\n     *           Phone Number\n     *       </label>\n     *   <input data-ref=\"field\" id=\"dwfrm_shipping_shippingAddress_addressFields_phone\"\n     *       type=\"tel\" class=\"b-input m-invalid\" placeholder=\"\" aria-describedby=\"dwfrm_shipping_shippingAddress_addressFields_phone-error\"\n     *       pattern=\"^(\\d-\\d{3}-\\d{3}-\\d{4})$\" name=\"dwfrm_shipping_shippingAddress_addressFields_phone\" required=\"\" value=\"\" maxlength=\"20\"\n     *       aria-required=\"true\" minlength=\"5\" autocomplete=\"tel\" data-event-input=\"onInput\" data-event-keypress=\"onKeypress\"\n     *       data-event-change=\"onChange\" data-event-paste.prevent=\"onPaste\" data-event-blur=\"validate\"\n     *   >\n     *   <div role=\"alert\" class=\"b-form_section-message\" data-ref=\"errorFeedback\" id=\"dwfrm_shipping_shippingAddress_addressFields_phone-error\">This field is required.</div>\n     *       <span id=\"dwfrm_shipping_shippingAddress_addressFields_phone-caption\" class=\"b-form_section-caption\">\n     *           Example: 1-888-123-4567\n     *       </span>\n     *   </div>\n     */\n    class InputTel extends InputText {\n\n    }\n\n    return InputTel;\n}\n","// TO BE REVIEWED\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/BasicInput').default>} BasicInput\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base InputText implementation\n * @param {BasicInput} BasicInput Base widget for extending\n * @returns {typeof InputText} Input Text class\n */\nexport default function (BasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputText\n     * @augments BasicInput\n     * @classdesc Input type `text` implementation. Represents input `text` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputText`\n     * @example <caption>InputText definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> input -> text\n     * text: {\n     *     extends: 'fields.input.base',\n     *     validation: {\n     *         'patterns.security': 'validation.patterns.security',\n     *         'errors.security': 'validation.errors.parse'\n     *     },\n     *     element: {\n     *         minLength: 2,\n     *         maxLength: 256,\n     *         type: 'text'\n     *     }\n     * },\n     * ...\n     * // fields -> generic -> cardType\n     * cardType: {\n     *     extends: 'fields.input.text',\n     *     'label.text': 'form.payment.card.type',\n     *     element: {\n     *         type: 'hidden',\n     *         maxLength: 20,\n     *         required: true\n     *     }\n     * },\n     * ...\n     * @example <caption>Insertion of InputText inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.address1, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputText</caption>\n     * <div data-widget=\"inputText\" class=\"b-form_section m-required m-invalid\"\n     *     data-id=\"dwfrm_shipping_shippingAddress_addressFields_lastName\" data-validation-config=\"... validation config\">\n     *     <label class=\"b-form_section-label\" for=\"dwfrm_shipping_shippingAddress_addressFields_lastName\">\n     *         <span class=\"b-form_section-required\" aria-hidden=\"true\">*</span>\n     *         Last Name\n     *     </label>\n     *     <input data-ref=\"field\" id=\"dwfrm_shipping_shippingAddress_addressFields_lastName\" type=\"text\"\n     *         class=\"b-input m-invalid\" placeholder=\"\" aria-describedby=\"dwfrm_shipping_shippingAddress_addressFields_lastName-error\"\n     *         pattern=\"...\" name=\"dwfrm_shipping_shippingAddress_addressFields_lastName\" required=\"\" value=\"\" maxlength=\"50\"\n     *         aria-required=\"true\" minlength=\"2\" autocomplete=\"family-name\" data-event-blur=\"validate\"\n     *     >\n     *     <div role=\"alert\" class=\"b-form_section-message\" data-ref=\"errorFeedback\" id=\"dwfrm_shipping_shippingAddress_addressFields_lastName-error\">This field is required.</div>\n     * </div>\n     */\n    class InputText extends BasicInput {\n        /**\n         * @description Element on input handler\n         * @listens dom#input\n         * @emits InputText#input\n         * @param {refElement} el source of event\n         * @param {(Event|undefined)} event event instance if DOM event\n         * @returns {void}\n         */\n        onInput(el, event) { // eslint-disable-line no-unused-vars\n            /**\n             * @description Event, indicates that `input` event happend\n             * @event InputText#input\n            */\n            this.ref('field').val(this.ref('field').val().replace(\n                /([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g,'').replace(/\\s+/g, ' '));\n            this.emit('input');\n        }\n\n        onMobileInput() {\n            this.emit('input');\n\n            const valueLength = this.ref('field').get()?.value?.length;\n            const maskLenght = this.config?.mask?.length;\n\n            if (this.ref('field').data('isExpirationDate') && valueLength === maskLenght) {\n                this.eventBus().emit('force.focus.cvv');\n            }\n        }\n    }\n\n    return InputText;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/InputText').default>} InputText\n */\n\n/**\n * @description Base InputTextarea implementation\n * @param {InputText} InputText Base widget for extending\n * @returns {typeof InputTextarea} Input Textarea class\n */\nexport default function (InputText) {\n    /**\n     * @class InputTextarea\n     * @augments InputText\n     * @classdesc Input type InputTextarea implementation. Represents input `textarea` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * Has a possibility to display number of entered symbols and how many of them are left to enter.\n     * @property {string} data-widget - Widget name `inputTextarea`\n     * @example <caption>InputTextarea definition in dynamicforms.json</caption>\n     * ...\n     * // fields -> input -> textarea\n     * textarea: {\n     *     extends: 'fields.input.base',\n     *     validation: {\n     *         'errors.security': 'validation.errors.parse'\n     *     },\n     *     element: {\n     *         minLength: 1,\n     *         maxLength: 256,\n     *         type: 'textarea'\n     *     }\n     * },\n     * ...\n     * // forms -> shipping -> shippingAddress\n     * giftMessage: {\n     *     widget: {\n     *         attributes: {\n     *             'data-id': 'giftMessage'\n     *         },\n     *         classes: 'gift-message'\n     *     },\n     *     extends: 'fields.input.textarea',\n     *     'label.text': 'form.gift.message',\n     *     'label.showOptionalMarker': true,\n     *     element: {\n     *         maxcounter: true,\n     *         attributes: {\n     *             'data-event-input': 'onInput'\n     *         },\n     *         placeholder: 'form.gift.placeholder'\n     *     }\n     * }\n     * @example <caption>Insertion of InputTextarea inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.giftMessage).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputTextarea</caption>\n     * <div data-widget=\"inputTextarea\" data-id=\"giftMessage\"\n     *     class=\"b-form_section gift-message m-valid\" data-validation-config=\"... validation config\"\n     * >\n     *     <label class=\"b-form_section-label\" for=\"dwfrm_shipping_shippingAddress_giftMessage\">\n     *         Gift message (optional)\n     *     </label>\n     *     <textarea id=\"dwfrm_shipping_shippingAddress_giftMessage\"\n     *         class=\"b-textarea m-valid\" data-ref=\"field\" placeholder=\"Enter your text...\"\n     *         aria-describedby=\"dwfrm_shipping_shippingAddress_giftMessage-error\" rows=\"5\"\n     *         name=\"dwfrm_shipping_shippingAddress_giftMessage\" maxlength=\"256\" minlength=\"1\"\n     *         data-event-input=\"onInput\" data-event-blur=\"validate\"\n     *     ></textarea>\n     *     <div class=\"b-form_section-counter\">\n     *         <span class=\"b-form_section-counter_value\" data-ref=\"maxcounter\">256</span>\n     *         characters left\n     *     </div>\n     *     <div role=\"alert\" class=\"b-form_section-message m-hide\" data-ref=\"errorFeedback\" id=\"dwfrm_shipping_shippingAddress_giftMessage-error\" hidden=\"hidden\"></div>\n     * </div>\n     */\n    class InputTextarea extends InputText {\n        /**\n         * @description On `input` InputTextarea logic. Gives a possibility to check how many symbols are entered\n         * and restricts further input in case if max allowed characters reached.\n         * @listens dom#input\n         * @returns {void}\n         */\n        onInput() {\n            if (!this.has('maxcounter')) {\n                return;\n            }\n\n            const maxLength = Number(this.ref('field').attr('maxlength'));\n            const currentInputValue = this.ref('field').val();\n            let inputTextLength = currentInputValue.length;\n            /* Incrementing count of 2 for linebreak in Safari, as it takes up space\n               of 2 characters in text area. */\n            var isSafari = window.safari !== undefined;\n            if (isSafari) {\n                let currentInput = currentInputValue;\n                currentInput = currentInput.replaceAll((/(\\r\\n|\\n|\\r)/g), '');\n                let lineLength = 0;\n                const newLine = String(currentInputValue).match(/(\\r\\n|\\n|\\r)/g);\n                if (newLine != null) {\n                    lineLength = newLine.length;\n                }\n                inputTextLength = currentInput.length + (lineLength * 2);\n            }\n\n            if ((typeof currentInputValue === 'string') && (inputTextLength > maxLength)) {\n                /**\n                 * Additional handling of input field value on paste to\n                 * avoid issues caused by browser incorrect value handling\n                 * https://bugs.webkit.org/show_bug.cgi?id=182725\n                 */\n                this.ref('field').val(currentInputValue.slice(0, maxLength));\n                inputTextLength -= inputTextLength;\n                this.ref('maxcounter').setText(String(inputTextLength));\n            } else {\n                this.ref('maxcounter').setText(String(maxLength - inputTextLength));\n            }\n        }\n\n        isValid() {\n            return !this.isTextValid() ? false : super.isValid();\n        }\n\n        isTextValid() {\n            const field = this.ref('field').get();\n            const validation = this.prefs().validationConfig;\n\n            if (!this.shown || this.disabled || this.prefs().skipValidation) {\n                return true;\n            }\n\n            if (!new RegExp(this.prefs().notAllowedCharacters, 'g').test(field?.value)) {\n                this.error = validation.errors.parse || validation.errors.security;\n                return false;\n            }\n\n            return true;\n        }\n    }\n\n    return InputTextarea;\n}\n","/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n * @typedef {ReturnType<typeof import('./InputText').default>} InputText\n*/\n\n/**\n * @description Base MaskableInput implementation\n * @param {InputText} InputText Base widget for extending\n * @returns {typeof MaskableInput} Input Email class\n */\nexport default function (InputText) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class MaskableInput\n     * @augments InputText\n     * @classdesc Adds maskable InputMask (customised library) implementation.\n     * As a basis was taken [this library](https://github.com/ViniChab/supermask.js).\n     * On widget level you must specify 4 event listeners, as described in properties.\n     * Widget is not intended to have a separate DOM representation, and should be used as a mixin for another input widgets.\n     * @property {string} data-mask - Mask for widget in format `+99(9)99-999-999`, `9-999-9999-999` etc\n     * @property {string} data-event-input - Field `input` event handler\n     * @property {string} data-event-keypress - Field `keypress` event handler\n     * @property {string} data-event-change - Field `change` event handler\n     * @property {string} data-event-paste - Field `paste` event handler\n     * @returns {typeof MaskableInput} MaskableInput class;\n     */\n    class MaskableInput extends InputText {\n        prefs() {\n            return {\n                mask: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Overloaded `setValue` in order to trigger mask revalidation\n         * @param {(string|number|undefined)} [newVal] - set this value to input\n         * @param {(boolean|undefined)} [silently] - if set to `true` - input should not be validated against a new value\n         * @returns {void}\n         */\n        setValue(newVal = '', silently = false) {\n            super.setValue(newVal, silently);\n\n            const { field, mask } = this.getFieldAndMask();\n            if (!this.inputMask || !field) {\n                return;\n            }\n            if (field instanceof HTMLInputElement) {\n                this.inputMask.validate(field, mask);\n            }\n        }\n\n        init() {\n            super.init();\n\n            import(/* webpackChunkName: 'inputmask' */'widgets/toolbox/InputMask').then((InputMask) => {\n                // eslint-disable-next-line new-cap\n                this.inputMask = new InputMask.default();\n                this.onDestroy(() => {\n                    this.inputMask = undefined;\n                });\n\n                const { field, mask } = this.getFieldAndMask();\n                if (!field) {\n                    return;\n                }\n                if (field instanceof HTMLInputElement) {\n                    this.inputMask.validate(field, mask);\n                }\n            });\n        }\n\n        /**\n         * @description Get field and mask for current maskable widget instance\n         * @returns {{field: HTMLElement|undefined, mask: string}} Object, containig field and mask and field ref element\n         */\n        getFieldAndMask() {\n            const field = this.ref('field');\n            return {\n                field: field.get(),\n                mask: this.prefs().mask\n            };\n        }\n\n        /**\n         * @description On input logic\n         * @param {RefElement} element - target input\n         * @param {Event} event - target event\n         * @listens dom#input\n         * @returns {void}\n         */\n        onInput(element, event) {\n            super.onInput(element, event);\n\n            const { field, mask } = this.getFieldAndMask();\n            if (!this.inputMask || !field) {\n                return;\n            }\n            if (field instanceof HTMLInputElement) {\n                this.inputMask.onInput(field, mask, event);\n            }\n        }\n\n        /**\n         * @description On keypress logic\n         * @param {RefElement} element - target input\n         * @param {Event} event - target event\n         * @listens dom#keypress\n         * @returns {void}\n         */\n        onKeypress(element, event) {\n            const { field, mask } = this.getFieldAndMask();\n            if (!this.inputMask || !field) {\n                return;\n            }\n            if (field instanceof HTMLInputElement) {\n                this.inputMask.onKeypress(field, mask, event);\n            }\n        }\n\n        /**\n         * @description On change logic\n         * @listens dom#change\n         * @returns {void}\n         */\n        onChange() {\n            const { field, mask } = this.getFieldAndMask();\n            if (!this.inputMask || !field) {\n                return;\n            }\n            if (field instanceof HTMLInputElement) {\n                this.inputMask.onChange(field, mask);\n            }\n        }\n\n        /**\n         * @description On paste logic\n         * @param {RefElement} element - target input\n         * @param {Event} event - target event\n         * @listens dom#paste\n         * @returns {void}\n         */\n        onPaste(element, event) {\n            const { field, mask } = this.getFieldAndMask();\n            if (!this.inputMask || !field) {\n                return;\n            }\n            if (field instanceof HTMLInputElement) {\n                this.inputMask.onPaste(field, mask, event);\n            }\n        }\n    }\n\n    return MaskableInput;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/InputText').default>>} inputText\n */\n\n/**\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof EmailSubscribe} EmailSubscribe widget\n */\nexport default function (AjaxForm) {\n    /**\n     * @category widgets\n     * @subcategory ajax\n     * @class EmailSubscribe\n     * @augments AjaxForm\n     * @classdesc Serves email subscription form in footer.\n     * The main purpose EmailSubscribe widget is to allow send/validate the request to server and handles server response\n     * @property {string} data-widget - Widget name `emailSubscribe`\n     * @property {string} data-event-submit - Event listener for form submission\n     * @example <caption>Example of EmailSubscribe widget usage</caption>\n     * <form action=\"${URLUtils.url('EmailSubscribe-Subscribe')}\" method=\"POST\" name=\"subscribe-form\"\n     *     data-widget=\"emailSubscribe\"\n     *     data-event-submit.prevent=\"handleSubmit\">\n     *     <div class=\"input-group\" data-ref=\"formContent\">\n     *         ... subscription form content\n     *     </div>\n     *     <div data-ref=\"successMessage\"></div>\n     * </form>\n     */\n    class EmailSubscribe extends AjaxForm {\n        prefs() {\n            return {\n                signupEmail: 'dwfrm_emailsubscribe_email',\n                formContent: 'formContent',\n                successBlock: 'successBlock',\n                successMessage: 'successMessage',\n                agreeToPrivacy: 'agreeToPrivacy',\n                accessibilityAnnouncementMsg: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Handles email input\n         * @param {inputText} el event source element\n         * @returns {void}\n         */\n        onEmailInput(el) {\n            const entered = el && el.getValue();\n            if (entered && entered.length) {\n                this.showAgreeToPrivacy();\n            }\n        }\n\n        /**\n         * @description Show agree to privacy block\n         * @returns {void}\n         */\n        showAgreeToPrivacy() {\n            this.ref('agreeToPrivacy').show();\n        }\n\n        /**\n         * @description Handles server response\n         * @emits \"alert.show\"\n         * @param {object} data Server JSON response once form submitted\n         * @returns {void}\n         */\n        onSubmitted(data) {\n            if (data.success) {\n                this.ref('formContent').hide();\n                this.ref('successMessage')\n                    .setText(data.msg)\n                    .show();\n                /**\n                 * @description Global event to show alert\n                 * @event \"alert.show\"\n                 */\n                this.eventBus().emit('alert.show', {\n                    accessibilityAlert: this.prefs().accessibilityAnnouncementMsg\n                });\n            }\n\n            if (!data.success) {\n                if (data.fieldErrors) {\n                    Object.entries(data.fieldErrors).forEach(([name, errorMsg]) => {\n                        this.getById(name, formField => formField.setError(errorMsg));\n                    });\n                }\n                if (data.msg) {\n                    this.getById(this.prefs().signupEmail, inputEmail => inputEmail.setError(data.msg));\n                }\n            }\n        }\n    }\n\n    return EmailSubscribe;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n */\n\n/**\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof LoginForm} LoginForm widget\n */\nexport default function (AjaxForm) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class LoginForm\n     * @augments AjaxForm\n     * @classdesc Represents LoginForm component with next features:\n     * 1. Show password reset modal on click\n     * @property {string} data-widget - Widget name `loginForm`\n     * @example <caption>Example of LoginForm widget usage</caption>\n     *  <form\n     *      action=\"${pdict.actionUrl}\"\n     *      class=\"b-form m-login\"\n     *      method=\"POST\"\n     *      name=\"login-form\"\n     *      data-widget=\"${pdict.isCheckoutLogin ? 'checkoutLoginForm': 'loginForm'}\"\n     *      data-event-submit.prevent=\"handleSubmit\"\n     *      <isif condition=\"${pdict.isCheckoutLogin}\">data-cart-url=\"${URLUtils.https('Cart-Show')}\"</isif>\n     *      novalidate\n     *  >\n     *          Form content...\n     *      <div class=\"b-reset_password\">\n     *          <div\n     *              data-widget=\"passwordResetModal\"\n     *              data-id=\"passwordResetModal\"\n     *          >\n     *              <div data-ref=\"container\" hidden=\"hidden\"></div>\n     *              <script type=\"template/mustache\" data-ref=\"template\">\n     *                  <div class=\"b-dialog m-reset_password\" data-ref=\"container\">\n     *                      <isinclude template=\"account/password/requestPasswordResetModal\"/>\n     *                  </div>\n     *              </script>\n     *          </div>\n\n     *          <isprint value=\"${\n     *              formElement(pdict.loginForm.password).render()\n     *          }\" encoding=\"off\"/>\n\n     *          <button\n     *              class=\"b-reset_password-btn\"\n     *              id=\"password-reset\"\n     *              data-event-click=\"passwordReset\"\n     *              data-tau=\"login_password_reset\"\n     *              type=\"button\"\n     *          >\n     *              ${Resource.msg('form.login.forgot.link', 'forms', null)}\n     *          </button>\n     *      </div>\n     *  </form>\n     */\n    class LoginForm extends AjaxForm {\n        /**\n         * @description Show password reset modal\n         * @listens dom#click\n         * @returns {void}\n         */\n        passwordReset() {\n            this.getById('ajaxFormResponseContainer', ajaxFormResponseContainer => ajaxFormResponseContainer.showModal({}));\n        }\n    }\n\n    return LoginForm;\n}\n","import { timeout, isDOMElementFocusable } from 'widgets/toolbox/util';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof AccessibilityFocusMixin} AccessibilityFocusMixin class\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class AccessibilityFocusMixin\n     * @augments Widget\n     * @classdesc Base implementation for inheritance, to be used to handle focus-related actions like getting set of focusable inputs etc.\n     * Also could be used to set focus on:\n     * - concrete element in widget's markup by ref element\n     * - first input in widget's markup\n     * - first focusable element in widget's markup\n     * This class is not intended to have a separate DOM widget. It should be used as a mixin for any other target widgets.\n     */\n    class AccessibilityFocusMixin extends Widget {\n        /**\n         * @description Get keyboard-focusable elements\n         * @param {string} [refName] ref name to get focusable elements in, or nothing to get from `self`\n         * @param {string[]} [types] array of elements selectors to search for, or nothing for default set\n         * @returns {HTMLElement[]} array containing focusable elements, or empty array if no elements found\n         */\n        getFocusableElements(refName = 'self', types = []) {\n            if (!types.length) {\n                types = ['a', 'button', 'input', 'textarea', 'select', 'details'];\n            }\n            types.push('[tabindex]:not([tabindex=\"-1\"])');\n            const selector = types.join(',');\n            let result = [];\n            this.has(refName, refElement => {\n                const htmlEl = refElement.get();\n                if (htmlEl) {\n                    result = Array.from(htmlEl.querySelectorAll(selector))\n                        .filter(el => isDOMElementFocusable(el));\n                }\n            });\n            return result;\n        }\n\n        /**\n         * @description Get keyboard-focusable input elements\n         * @param {string} [refName] ref name to get focusable elements in, or nothing to get from `self`\n         * @returns {HTMLElement[]} array containing focusable input elements, or empty array if no elements found\n         */\n        getFocusableInputElements(refName = 'self') {\n            return this.getFocusableElements(refName, ['input', 'textarea', 'select']);\n        }\n\n        /**\n         * @description Focus first element found in ref with min timeout\n         * @param {string} [containerRefName] container ref name to get focusable elements in, or nothing to get from `self`\n         * @param {string[]} [types] optional, array of elements selectors to search for, or nothing for default set\n         * @returns {void}\n         */\n        focusFirst(containerRefName = 'self', types = []) {\n            const focusableElements = this.getFocusableElements(containerRefName, types);\n            if (focusableElements.length) {\n                timeout(() => focusableElements[0].focus(), 100);\n            }\n        }\n\n        /**\n         * @description Method to focus on first focusable input, accepts refName as param to search input in\n         * @param {string} [containerRefName] container ref name to get focusable elements in, or nothing to get from `self`\n         * @returns {void}\n         */\n        focusFirstInput(containerRefName = 'self') {\n            const focusableInputElements = this.getFocusableInputElements(containerRefName);\n            if (focusableInputElements.length) {\n                timeout(() => focusableInputElements[0].focus(), 100);\n            }\n        }\n\n        /**\n         * @description Method to focus on a concrete focusable element, accepts refName as param to search element\n         * @param {string} [elementRefName] element ref name to check if it focusable, end set focus into it\n         * @returns {void}\n         */\n        focusElement(elementRefName) {\n            if (elementRefName) {\n                this.has(elementRefName, (element) => {\n                    const domNode = element.get();\n                    if (domNode && isDOMElementFocusable(domNode)) {\n                        timeout(() => domNode.focus(), 100);\n                    }\n                });\n            }\n        }\n    }\n\n    return AccessibilityFocusMixin;\n}\n","import { timeout, isDOMElementFocusable } from 'widgets/toolbox/util';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof AccessibilityFocusTrapMixin} AccessibilityFocusTrapMixin class\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class AccessibilityFocusTrapMixin\n     * @augments Widget\n     * @classdesc Base AccessibilityFocusTrapMixin implementation.\n     * Used to trap focus inside widget according to usability requirements\n     * Can be either looped or not\n     * This class is not intended to have a separate DOM representation, but should be used as a mixin.\n     * Creates in runtime 2 `span` elements inside widget, which has `tabindex=\"0\"` and can handle focus.\n     * Once one of these spans are focused (depending last or first) - focus will be handled accordingly\n     * (either stays at previously focused widget element, or will be looped).\n     * @property {string} data-ref-last-focus-element - Reference to last possible focusable element\n     * @property {string} data-ref-first-focus-element - Reference to first possible focusable element\n     * @property {boolean} data-focus-loop - Do we need to loop focus inside widget?\n     * @property {string} data-ref-traps-container - This ref element would be wrapped with 2 `span` elements - `firstTrapRef` and `lastTrapRef`\n     * @property {string} data-first-trap-ref - Reference to first focusable `span` element to handle focus trap.\n     * @property {string} data-last-trap-ref - Reference to last focusable `span` element to handle focus trap.\n     * @property {number} data-focus-timeout - Timeout to set focus to element\n     */\n    class AccessibilityFocusTrapMixin extends Widget {\n        prefs() {\n            return {\n                refFirstFocusElement: 'firstFocusElement',\n                refLastFocusElement: 'lastFocusElement',\n                focusLoop: true,\n                refTrapsContainer: 'dialog',\n                firstTrapRef: 'firstTrap',\n                lastTrapRef: 'lastTrap',\n                focusTimeout: 400,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Handle Focus Trap Last.\n         * Either focuses on first element (in case of focus loop) or stays at last element.\n         * If last element is not found - tries to set focus on first element (loop-like behaviour)\n         * @listens dom#focus\n         * @returns {void}\n         */\n        handleFocusTrapLast() {\n            if (this.prefs().focusLoop) {\n                this.focusFirstElement();\n                return;\n            }\n\n            const hasLastElement = this.focusLastElement();\n\n            if (!hasLastElement) {\n                this.focusFirstElement();\n            }\n        }\n\n        /**\n         * @description Handle Focus Trap First.\n         * Either focuses on last element (in case of focus loop) or stays at first element.\n         * @listens dom#focus\n         * @returns {void}\n         */\n        handleFocusTrapFirst() {\n            if (this.prefs().focusLoop) {\n                this.focusLastElement();\n                return;\n            }\n\n            this.focusFirstElement();\n        }\n\n        /**\n         * @description Method to focus on element by ref id\n         * @param {string} refId ref id of ref element\n         * @returns {boolean} boolean indicating whether necessary ref element found\n         */\n        focusElement(refId) {\n            return this.has(refId, (element) => {\n                const domNode = element.get();\n                if (domNode) { domNode.focus(); }\n            });\n        }\n\n        /**\n         * @description Focus first element\n         * @returns {boolean} true if browser is able to focus on first element\n         */\n        focusFirstElement() {\n            return this.focusElement(this.prefs().refFirstFocusElement)\n                || this.focusFirstDescendant();\n        }\n\n        /**\n         * @description Focus on first descendant element\n         * @param {HTMLElement|Element|undefined} element container element\n         * @returns {boolean} if browser successfully focused on first descendant element\n         */\n        focusFirstDescendant(element = undefined) {\n            if (!element) {\n                element = this.ref(this.prefs().refTrapsContainer).get();\n            }\n            if (element) {\n                for (let i = 0; i < element.children.length; i++) {\n                    const child = element.children[i];\n                    if (child && (this.focusAttempt(child) || this.focusFirstDescendant(child))) {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        }\n\n        /**\n         * @description Focus last element\n         * @returns {boolean} true if browser is able to focus on last element\n         */\n        focusLastElement() {\n            return this.focusElement(this.prefs().refLastFocusElement)\n                || this.focusLastDescendant();\n        }\n\n        /**\n         * @description Focus on last descendant element\n         * @param {HTMLElement|Element|undefined} element container element\n         * @returns {boolean} if browser successfully focused on last descendant element\n         */\n        focusLastDescendant(element = undefined) {\n            if (!element) {\n                element = this.ref(this.prefs().refTrapsContainer).get();\n            }\n            if (element) {\n                for (let i = element.children.length - 1; i >= 0; i--) {\n                    const child = element.children[i];\n                    if (child && (this.focusAttempt(child) || this.focusLastDescendant(child))) {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        }\n\n        /**\n         * @description Try to focus on element if it's focusable\n         * @param {HTMLElement|Element} element target element to focus\n         * @returns {boolean} if focus was successfully set to target element\n         */\n        focusAttempt(element) {\n            if (!isDOMElementFocusable(element)) {\n                return false;\n            }\n\n            try {\n                // @ts-ignore\n                element.focus();\n            } catch (e) {\n                // catch error\n            }\n\n            return (document.activeElement === element);\n        }\n\n        /**\n         * @description Overriden `show` method, which will create 2 `span` elements for focus trap\n         * on {@link Modal} show.\n         * @returns {this} result\n         */\n        show() {\n            super.show();\n            if (!this.has(this.prefs().firstTrapRef) || !this.has(this.prefs().lastTrapRef)) {\n                this.addFocusTraps();\n            }\n            return this;\n        }\n\n        /**\n         * @description Creates 2 `span` element with `tabindex=\"0\"` to be able to handle focus selection as per accessibility requirements.\n         * @returns {void}\n         */\n        addFocusTraps() {\n            this.has(this.prefs().refTrapsContainer, trapsContainer => {\n                const { firstTrapRef, lastTrapRef } = this.prefs();\n                trapsContainer.prepend(\n                    `<span tabindex=\"0\" data-ref=\"${firstTrapRef}\" data-event-focus.prevent=\"handleFocusTrapFirst\"></span>`\n                );\n                trapsContainer.append(\n                    `<span tabindex=\"0\" data-ref=\"${lastTrapRef}\" data-event-focus.prevent=\"handleFocusTrapLast\"></span>`\n                );\n\n                this.onDestroy(() => {\n                    [firstTrapRef, lastTrapRef].forEach((ref) => {\n                        this.has(ref, el => {\n                            el.remove();\n                        });\n                    });\n                });\n            });\n        }\n\n        /**\n         * @description focus first element after show modal (when keyboard navigation)\n         * @returns {void}\n         */\n        afterShowModal() {\n            this.onDestroy(timeout(() => this.focusFirstElement(), this.prefs().focusTimeout));\n        }\n    }\n\n    return AccessibilityFocusTrapMixin;\n}\n","const keyCode = Object.freeze({\n    END: 35,\n    HOME: 36,\n    UP: 38,\n    DOWN: 40\n});\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/ListAccessibility').default>} ListAccessibility\n * @typedef {ReturnType<typeof import('widgets/global/AccordionItem').default>} AccordionItem\n */\n\n/**\n * @description Base Accordion implementation\n * @param {ListAccessibility} ListAccessibility Base widget for extending\n * @returns {typeof Accordion} Accordion widget\n */\nexport default function (ListAccessibility) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Accordion\n     * @augments ListAccessibility\n     * @classdesc Represents Accordion component with next features:\n     * 1. Configurable via data attributes single or multiple selection of panels\n     * 2. Allow has opened or closed first panel\n     * 3. Allow or disallow closing panel on second click\n     * 4. Support keyboard navigation for accessibility\n     *\n     * Accordion widget should contain {@link AccordionItem} widgets that implement one accordion section.\n     * Widget has next relationship:\n     * * Accordion widget expand first item if such defined in `data-open-first` attribute by calling method {@link AccordionItem#openPanel}\n     * * Close all items using method {@link AccordionItem#closePanel} by event {@link AccordionItem#event:closeallitems} from {@link AccordionItem} widget.\n     *\n     * @property {string} data-widget - Widget name `accordion`\n     * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n     * @property {boolean} [data-allow-toggle=false] - Flag that allow or dissallow toggle\n     * @property {boolean} [data-open-first=false] - Flag that open first item\n     * @property {string}  data-active-panel - Activate item by provided id\n     * @property {boolean} [data-allow-multiple=false] - Flag that allow or dissallow multiple open items\n     * @example <caption>Example of Single Selectable Accordion with one panel that is opened on init</caption>\n     * <div\n     *     data-widget=\"accordion\"\n     *     data-event-keydown=\"handleKeydown\"\n     *     data-allow-toggle=\"false\"\n     *     data-open-first=\"true\"\n     *     data-allow-multiple=\"false\"\n     *     class=\"b-footer_nav\"\n     * >\n     *      <section\n     *          data-widget=\"accordionItem\"\n     *          data-widget-event-closeallitems=\"closeItems\"\n     *      >\n     *          <h2\n     *              data-ref=\"accordionItemBtn\"\n     *              data-event-click=\"togglePanel\"\n     *              data-event-keydown=\"handleKeydown\"\n     *          >\n     *              <button type=\"button\">\n     *                  Account\n     *              </button>\n     *          </h2>\n     *          <div data-ref=\"accordionItemPanel\">\n     *              <div data-ref=\"accordionItemPanelInner\">\n     *                  Account Panel content here\n     *              </div>\n     *          </div>\n     *      </section>\n     * </div>\n     * @example <caption>Example of Multi Selectable Accordion with two panel. First panel closed on init</caption>\n     * <div\n     *     data-widget=\"accordion\"\n     *     data-event-keydown=\"handleKeydown\"\n     *     data-allow-toggle=\"false\"\n     *     data-open-first=\"false\"\n     *     data-allow-multiple=\"true\"\n     *     class=\"b-footer_nav\"\n     * >\n     *      <section\n     *          data-widget=\"accordionItem\"\n     *          data-widget-event-closeallitems=\"closeItems\"\n     *      >\n     *          <h2\n     *              data-ref=\"accordionItemBtn\"\n     *              data-event-click=\"togglePanel\"\n     *              data-event-keydown=\"handleKeydown\"\n     *          >\n     *              <button\n     *                  type=\"button\"\n     *              >\n     *                  Account\n     *              </button>\n     *          </h2>\n     *          <div data-ref=\"accordionItemPanel\">\n     *              <div data-ref=\"accordionItemPanelInner\">\n     *                  Account Panel content here\n     *              </div>\n     *          </div>\n     *      </section>\n     *      <section\n     *          data-widget=\"accordionItem\"\n     *          data-widget-event-closeallitems=\"closeItems\"\n     *      >\n     *          <h2\n     *              data-ref=\"accordionItemBtn\"\n     *              data-event-click=\"togglePanel\"\n     *              data-event-keydown=\"handleKeydown\"\n     *          >\n     *              <button type=\"button\">\n     *                  Wishlist\n     *              </button>\n     *          </h2>\n     *          <div data-ref=\"accordionItemPanel\">\n     *              <div data-ref=\"accordionItemPanelInner\">\n     *                  Wishlist Panel content here\n     *              </div>\n     *          </div>\n     *      </section>\n     * </div>\n     */\n\n    class Accordion extends ListAccessibility {\n        prefs() {\n            return {\n                allowToggle: false,\n                allowMultiple: false,\n                activePanel: '',\n                openFirst: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.defineItems();\n            this.eachChild((item) => {\n                item.isToggleAllowed = this.prefs().allowToggle;\n                item.isMultipleSections = this.prefs().allowMultiple;\n            });\n\n            if (this.prefs().openFirst) {\n                this.firstItem.openPanel();\n            } else if (this.prefs().activePanel && this.items) {\n                const AccordionItem = /** @type {AccordionItem} */(this.getConstructor('accordionItem'));\n                const activeItem = this.items.find((item) => item.config.methodId === this.prefs().activePanel);\n\n                if (activeItem instanceof AccordionItem) {\n                    activeItem.openPanel();\n                }\n            }\n            this.ref('self').addClass('m-inited');\n        }\n\n        /**\n         * @description Close items\n         * @listens AccordionItem#closeallitems\n         * @returns {void}\n         */\n        closeItems() {\n            this.eachChild((accordionItem) => {\n                accordionItem.closePanel();\n            });\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.HOME:\n                    this.setFocusToFirstItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.END:\n                    this.setFocusToLastItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.UP:\n                    this.setFocusToPreviousItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.DOWN:\n                    this.setFocusToNextItem();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return Accordion;\n}\n","const keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32\n});\n\nconst ARIA_EXPANDED = 'aria-expanded';\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_DISABLED = 'aria-disabled';\n\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @description Base AccordionItem implementation\n * @param {typeof import('widgets/Widget').default} Widget base widget class\n * @returns {typeof AccordionItem} AccordionItem widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class AccordionItem\n     * @augments Widget\n     * @classdesc Represents AccordionItem with specific logic for accordion item, handling viewtype changes, keyboard navigation\n     * Represents AccordionItem component with next features:\n     * 1. Configurable via data attribute epanded state\n     * 2. Support keyboard navigation for accessibility\n     * 3. Define accessibility\n     * @property {string} data-widget - Widget name `accordionItem`\n     * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n     * @property {string} data-event-click - Event listener for `togglePanel` method\n     * @property {boolean} [data-expanded=false] - Expanded flag\n     * @category widgets\n     * @subcategory global\n     * @example\n     * // use this code to display widget\n     *   <section\n     *      data-widget=\"accordionItem\"\n     *      data-widget-event-closeallitems=\"closeItems\"\n     *  >\n     *      <h2\n     *          data-ref=\"accordionItemBtn\"\n     *          data-event-click=\"togglePanel\"\n     *          data-event-keydown=\"handleKeydown\"\n     *      >\n     *          <button\n     *              type=\"button\"\n     *          >\n     *              Account\n     *          </button>\n     *      </h2>\n     *      <div data-ref=\"accordionItemPanel\">\n     *          <div data-ref=\"accordionItemPanelInner\">\n     *              Panel content here\n     *          </div>\n     *      </div>\n     *  </section>\n     */\n\n    class AccordionItem extends Widget {\n        /**\n         * @description Returns Widget configuration object\n         * @returns {object} Widget configuration object\n         */\n        prefs() {\n            return {\n                accordionItemBtn: 'accordionItemBtn',\n                accordionItemPanel: 'accordionItemPanel',\n                accordionItemPanelInner: 'accordionItemPanelInner',\n                expanded: false,\n                animateToggle: true,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            this.isPanelOpen = this.prefs().expanded;\n            this.isToggleAllowed = false;\n            this.isMultipleSections = false;\n            this.defineAttributes(this.prefs().expanded);\n            this.onDestroy(this.clearAttributes.bind(this));\n            this.onDestroy(this.cleanPanelHeight.bind(this));\n\n            if (!this.prefs().expanded) {\n                this.closePanel();\n            }\n        }\n\n        /**\n         * @description Define attributes\n         * @param {boolean} [isOpen] Panel open flag\n         * @returns {void}\n         */\n        defineAttributes(isOpen) {\n            const accordionItemBtn = this.ref('accordionItemBtn');\n            const accordionItemPanel = this.ref('accordionItemPanel');\n            const accordionItemBtnID = accordionItemBtn.attr('id');\n            const accordionItemPanelID = accordionItemPanel.attr('id');\n\n            accordionItemBtn.attr('role', 'button');\n            accordionItemBtn.attr('aria-controls', accordionItemPanelID);\n            accordionItemBtn.attr(ARIA_EXPANDED, 'false');\n            accordionItemBtn.attr('tabindex', '0');\n            accordionItemPanel.attr('role', 'region');\n            accordionItemPanel.attr('aria-labelledby', accordionItemBtnID);\n\n            if (isOpen) {\n                accordionItemPanel.attr(ARIA_HIDDEN, 'false');\n                accordionItemBtn.attr(ARIA_EXPANDED, 'true');\n            } else {\n                accordionItemPanel.attr(ARIA_HIDDEN, 'true');\n                accordionItemBtn.attr(ARIA_EXPANDED, 'false');\n            }\n        }\n\n        /**\n         * @description Clear Attributes\n         * @returns {void}\n         */\n        clearAttributes() {\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.attr('role', false);\n                accordionItemBtn.attr('aria-controls', false);\n                accordionItemBtn.attr(ARIA_EXPANDED, false);\n                accordionItemBtn.attr(ARIA_DISABLED, false);\n                accordionItemBtn.attr('tabindex', false);\n            });\n            this.has(this.prefs().accordionItemPanel, (accordionItemPanel) => {\n                accordionItemPanel.attr('role', false);\n                accordionItemPanel.attr('aria-labelledby', false);\n                accordionItemPanel.attr(ARIA_HIDDEN, false);\n            });\n        }\n\n        /**\n         * @description Set Focus\n         * @returns {void}\n         */\n        focus() {\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.focus();\n            });\n        }\n\n         /**\n         * @description On Blur\n         * @returns {void}\n         */\n          blur() {\n            this.has(this.prefs().accordionItemBtn && this.prefs().accordionItemPanel, (accordionItemBtn, accordionItemPanel) => {\n                accordionItemBtn.blur();\n            });\n        }\n\n        /**\n         * @description On Refresh Hanpdler\n         * @returns {void}\n         */\n        onRefresh() {\n            super.onRefresh();\n\n            this.defineAttributes(this.isPanelOpen);\n\n            if (!this.isPanelOpen) {\n                this.closePanel();\n            }\n        }\n\n        /**\n         * @description Open panel\n         * @emits AccordionItem#closeallitems\n         * @emits AccordionItem#openpanel\n         * @returns {void}\n         */\n        openPanel() {\n            if (!this.isMultipleSections) {\n                /**\n                 * @description Event to close all items\n                 * @event AccordionItem#closeallitems\n                 */\n                this.emit('closeallitems');\n            }\n\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.attr(ARIA_EXPANDED, 'true');\n\n                if (!this.isToggleAllowed) {\n                    accordionItemBtn.attr(ARIA_DISABLED, 'true');\n                }\n            });\n            this.has(this.prefs().accordionItemPanel,\n                accordionItemPanel => this.togglePanelHeight(true, accordionItemPanel));\n\n            this.isPanelOpen = true;\n            /**\n             * @description Event for opening panel\n             * @event AccordionItem#openpanel\n             */\n            this.emit('openpanel');\n        }\n\n        /**\n         * @description Close panel\n         * @returns {void}\n         */\n        closePanel() {\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.attr(ARIA_EXPANDED, 'false');\n\n                if (!this.isToggleAllowed) {\n                    accordionItemBtn.attr(ARIA_DISABLED, false);\n                }\n            });\n            this.has(this.prefs().accordionItemPanel,\n                accordionItemPanel => this.togglePanelHeight(false, accordionItemPanel));\n\n            this.isPanelOpen = false;\n        }\n\n        /**\n         * @description Toggle panel\n         * @returns {void}\n         */\n        togglePanel() {\n            if (!this.isPanelOpen) {\n                this.openPanel();\n            } else if (this.isToggleAllowed) {\n                this.closePanel();\n            }\n        }\n\n        /**\n         * @description Toggle panel height, so it could be properly animated.\n         * It is required inner element to has content height properly.\n         * @param {boolean} isOpen Panel Open flag\n         * @param {RefElement} panel IsOpen flag\n         * @returns {void}\n         */\n        togglePanelHeight(isOpen, panel) {\n            panel.attr(ARIA_HIDDEN, isOpen ? 'false' : 'true');\n\n            this.has(this.prefs().accordionItemPanelInner, inner => {\n                const panelElement = panel.get();\n                const innerElement = inner.get();\n                if (innerElement && panelElement) {\n                    panelElement.style.height = `${isOpen ? innerElement.offsetHeight : 0}px`;\n                }\n            });\n        }\n\n        /**\n         * @description Remove hardcoded panel height in case of widget destroyed\n         * @returns {void}\n         */\n        cleanPanelHeight() {\n            this.has(this.prefs().accordionItemPanel, accordionItemPanel => {\n                const element = accordionItemPanel.get();\n\n                if (element && (parseInt(element.style.height, 10) > 0)) {\n                    element.style.height = 'auto';\n                }\n            });\n        }\n\n        /**\n         * @description Update accordion item state, recalculate item height\n         * TODO: Describe approach for accordion height in case of content change\n         */\n        updateState() {\n            this.has(this.prefs().accordionItemPanel,\n                accordionItemPanel => this.togglePanelHeight(Boolean(this.isPanelOpen), accordionItemPanel));\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    this.togglePanel();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return AccordionItem;\n}\n","import { scrollToTop } from '../toolbox/scroll';\nimport { debounce } from './../toolbox/debounce';\nimport { isSmallView } from './../toolbox/viewtype';\nimport { timeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof BackToTop} BackToTop widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class BackToTop\n     * @augments Widget\n     * @classdesc Back to top component. Allows scrolling window to top, pressing on a corresponding element\n     * @property {string} data-widget - Widget name `backtotop`\n     * @property {string} data-event-click - Event listener method `backToTop` for click event on widget\n     * @example <caption>Example of BackToTop widget usage</caption>\n     * <div\n     *     class=\"\"\n     *     data-widget=\"backtotop\"\n     *     data-event-click=\"backToTop\"\n     * >\n     *     .... back to top element\n     * </div>\n     */\n    class BackToTop extends Widget {\n        prefs() {\n            return {\n                pageSize: 1.5,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @listens \"viewtype.change\"\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            // Async init to not block other widget init\n            timeout(() => {\n                this.doInit();\n                this.eventBus().on('viewtype.change', 'doInit');\n            }, 0);\n        }\n\n        /**\n         * @description Attach scroll listener\n         * @returns {void}\n         */\n        attachScrollListener() {\n            this.scrollDisposable = this.ev('scroll', debounce(() => {\n                this.toggleBackToTopButton();\n            }, 50), window, true);\n        }\n\n        /**\n         * @description Remove scroll listener\n         * @returns {void}\n         */\n        removeScrollListener() {\n            if (this.scrollDisposable) {\n                this.scrollDisposable.forEach(disposable => disposable());\n                this.scrollDisposable = null;\n            }\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        doInit() {\n            if (isSmallView()) {\n                this.removeScrollListener();\n                this.show();\n            } else {\n                this.attachScrollListener();\n                this.toggleBackToTopButton();\n            }\n        }\n\n        /**\n         * @description Toggle back to top button\n         * @returns {void}\n         */\n        toggleBackToTopButton() {\n            const scrolled = document.body.scrollTop || document.documentElement.scrollTop;\n            const windowHeight = window.innerHeight;\n\n            this.toggle(scrolled > (windowHeight * this.prefs().pageSize));\n        }\n\n        /**\n         * @description Back to top\n         * @listens dom#click\n         * @returns {void}\n         */\n        backToTop() {\n            scrollToTop();\n        }\n    }\n\n    return BackToTop;\n}\n","const keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32\n});\n\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base Button implementation\n * @param {typeof import('widgets/Widget').default} Widget - widget for extending\n * @returns {typeof Button} Button widget\n */\nexport default function (Widget) {\n    /**\n     * @class Button\n     * @augments Widget\n     * @classdesc Button widget, which could be used in different contextes (html-markup, inside widgets etc).\n     * <br>Could be also used to trigger parent's widget method\n     * @property {string} data-widget - Widget name `button`\n     * @property {string} data-widget-event-click - Event listener to call Parent's widget method\n     * @property {string} data-event-click - Event listener method `handleClick` for click event on widget\n     * @property {boolean} data-prevent-action - Prevent action flag\n     * @classdesc Represents Button component with the next features:\n     * 1. Activate\\deactivate button visibility on the storefront\n     * 2. Enable\\disable button visibility on the storefront\n     * 3. Handles keydown by enter\\space keyboard button\n     * 4. Sets button error\n     * 5. Marks button as pressed\\unpressed\n     *\n     * @example <caption>Example of Button widget usage</caption>\n     * <button type=\"submit\" class=\"btn btn-block btn-primary\"\n     *     data-widget=\"button\"\n     *     data-widget-event-click=\"handleSubmit\"\n     *     data-event-click.prevent=\"handleClick\"\n     *     data-id=\"submitButton\"\n     * >\n     *     ${Resource.msg('button.text.loginform', 'login', null)}\n     * </button>\n     */\n    class Button extends Widget {\n        /**\n         * @description Returns Widget configuration object\n         * @returns {object} Widget configuration object\n         */\n        prefs() {\n            return {\n                classesError: 'm-error',\n                classesActive: 'm-active',\n                preventAction: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization logic\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            if (!this.id) {\n                this.id = String(this.config.id);\n            }\n\n            this.disabled = this.ref('self').attr('disabled') === 'disabled';\n        }\n\n        /**\n         * @description Handles button click\n         * @listens dom:click\n         * @emits Button#click\n         * @returns {void}\n         */\n        handleClick() {\n            if (!this.prefs().preventAction) {\n                /**\n                 * @description Emits button click event\n                 * @event Button#click\n                 */\n                this.emit('click', this);\n            }\n        }\n\n        /**\n         * @description Returns button value\n         * @returns {string|refElement} result\n         */\n        getValue() {\n            return this.ref('self').val();\n        }\n\n        /**\n         * @param {(string|number|boolean|undefined)} val - Value to set into widget's val attribute\n         * @returns {string|refElement} result\n         */\n        setValue(val = '') {\n            this.setError();\n            return this.ref('self').val(val);\n        }\n\n        /**\n         * @description Returns button text\n         * @returns {string} result\n         */\n        getText() {\n            return this.ref('self').getText();\n        }\n\n        /**\n         * @param {(string|undefined)} val - Value to set as a text of the Button\n         * @returns {refElement} result\n         */\n        setText(val = '') {\n            return this.ref('self').setText(val);\n        }\n\n        /**\n         * @description Sets button text error\n         * @param {(string|undefined)} err - Sets `err` as a Button text and\n         * if `err` is not empty - adds error class to Button\n         * @returns {void}\n         */\n        setError(err = '') {\n            this.setText(err);\n            if (err) {\n                this.ref('self').addClass(this.prefs().classesError);\n            }\n        }\n\n        /**\n         * @description Method to mark element as `active`\n         * @returns {Button} result\n         */\n        activate() {\n            this.ref('self').addClass(this.prefs().classesActive);\n            return this;\n        }\n\n        /**\n         * @description Method to mark element as `inactive`\n         * @returns {Button} result\n         */\n        deactivate() {\n            this.ref('self').removeClass(this.prefs().classesActive);\n            return this;\n        }\n\n        /**\n         * @param {(boolean|undefined)} state true to show/false to hide/undefined to auto\n         */\n        toggleActive(state) {\n            this.ref('self').toggleClass(this.prefs().classesActive, state);\n        }\n\n        /**\n         * @description Disables button\n         * @returns {Button} result\n         */\n        disable() {\n            this.disabled = true;\n            this.ref('self').disable();\n            return this;\n        }\n\n        /**\n         * @description Enables button\n         * @returns {Button} result\n         */\n        enable() {\n            this.disabled = false;\n            this.ref('self').enable();\n            return this;\n        }\n\n        /**\n         * @description Marks button as busy\n         * @returns {void}\n         */\n        busy() {\n            this.isBusy = true;\n            this.ref('self').attr('aria-busy', 'true');\n        }\n\n        /**\n         * @description Marks button as unbusy\n         * @returns {void}\n         */\n        unbusy() {\n            this.isBusy = false;\n            this.ref('self').attr('aria-busy', 'false');\n        }\n\n        /**\n         * @description Marks button as selected\n         * @returns {void}\n         */\n        select() {\n            this.selected = true;\n            this.ref('self').attr('aria-selected', 'true');\n        }\n\n        /**\n         * @description Marks button as unselected\n         * @returns {void}\n         */\n        unselect() {\n            this.selected = false;\n            this.ref('self').attr('aria-selected', 'false');\n        }\n\n        /**\n         * @description Method to mark button as `pressed`.\n         * Used only for button with 2 different states when pressed and not pressed. Ex:\n         * Play / Paused; Favorite / Not favorite, etc.\n         * @returns {Button} result\n         */\n        press() {\n            this.ref('self').attr('aria-pressed', 'true');\n            return this;\n        }\n\n        /**\n         * @description Method to mark button as `unpressed`. Used only in buttons with 2 states.\n         * @returns {Button} result\n         */\n        unpress() {\n            this.ref('self').attr('aria-pressed', 'false');\n            return this;\n        }\n\n        /**\n         * @description Returns button name\n         * @returns {string|refElement} result\n         */\n        getName() {\n            return this.ref('self').attr('name');\n        }\n\n        /**\n         * @description Focus to element\n         * @returns {Button} - return instance for chaining\n         */\n        focus() {\n            this.ref('self').focus();\n            return this;\n        }\n\n        /**\n         * @description Sets button to be accountable with `tab` button navigation\n         * @returns {Button} - return instance for chaining\n         */\n        setTabindex() {\n            this.ref('self').attr('tabindex', '0');\n            return this;\n        }\n\n        /**\n         * @description Sets button to be not accountable with `tab` button navigation\n         * @returns {Button} - return instance for chaining\n         */\n        unsetTabindex() {\n            this.ref('self').attr('tabindex', '-1');\n            return this;\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @listens dom:keydown\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    this.handleClick();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n\n        /**\n         * @description Method to add class to widget container. Allows chaining.\n         * @param {string} className a class name to add to widget container\n         * @returns {Button} result\n         */\n        addClass(className) {\n            this.ref('self').addClass(className);\n            return this;\n        }\n\n        /**\n         * @description Method to remove class from widget container. Allows chaining.\n         * @param {string} className a class name to remove from widget container\n         * @returns {Button} result\n         */\n        removeClass(className) {\n            this.ref('self').removeClass(className);\n            return this;\n        }\n    }\n\n    return Button;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/global/Button').default>} Button\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base ButtonWithIcon implementation\n * @param {Button} Button Base widget for extending\n * @returns {typeof ButtonWithIcon} ButtonWithIcon class\n */\nexport default function (Button) {\n    /**\n     * @class ButtonWithIcon\n     * @augments Button\n     * @classdesc ButtonWithIcon widget, which could be used together with icon\n     * @property {string} data-widget - Widget name `processButton`\n     * @property {string} data-widget-event-click - Event listener to call Parent's widget method\n     * @property {string} data-event-click - Event listener method `handleClick` for click event on widget\n     * @example\n     * // use this code to display widget\n     * <button type=\"submit\" class=\"btn btn-block btn-primary\"\n     *     data-widget=\"buttonWithIcon\"\n     * >\n     *     <!-- svg icon below -->\n     *     <isinclude template=\"/common/svg/wishlist\" />\n     *\n     *     <span class=\"container\">\n     *         ${Resource.msg('button.text.loginform', 'login', null)}\n     *     </span>\n     * </button>\n     */\n    class ButtonWithIcon extends Button {\n        /**\n         * @description Get Text\n         * @returns {string} Button Text\n         */\n        getText() {\n            return this.ref('container').getText();\n        }\n\n        /**\n         * @description Set Text\n         * @param {(string|undefined)} val - Value to set as a text of the Button\n         * @returns {refElement} Reference element\n         */\n        setText(val = '') {\n            return this.ref('container').setText(val);\n        }\n    }\n\n    return ButtonWithIcon;\n}\n","import { scrollElementTo } from 'widgets/toolbox/scroll';\nimport { getViewType } from 'widgets/toolbox/viewtype';\nimport cssLoadChecker from 'widgets/toolbox/cssLoadChecker';\nimport { timeout } from 'widgets/toolbox/util';\n\nconst DEFAULT_DIRECTION = 'horizontal';\nconst keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32\n});\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Carousel block implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof Carousel} Carousel class\n */\nexport default function (Widget) {\n    /**\n     * @class Carousel\n     * @augments Widget\n     * @classdesc Carousel widget\n     * <br>Uses as a basis slider from here (ScrollCarousel.js):\n     * <br>https://github.com/dimanech/aria-components/tree/master/cartridge1/js/components/carousels/carousel\n     * @property {string} data-widget - Widget name `carousel`\n     * @property {string} data-elem-prev-button - Previous button element\n     * @property {string} data-elem-next-button - Next button element\n     * @property {string} data-elem-carousel-track - Carousel inner element\n     * @property {string} data-direction - Carousel direction - an object, contains direction per viewport\n     * @example\n     * // use this code to display widget\n     * <div\n     *     data-widget=\"carousel\"\n     *     data-elem-prev-button=\"elemPrevButton\"\n     *     data-elem-next-button=\"elemNextButton\"\n     *     data-elem-carousel-track=\"elemCarouselTrack\"\n     *     data-direction='{\n     *         \"small\": \"horizontal\",\n     *         \"medium\": \"horizontal\",\n     *         \"large\": \"vertical\",\n     *         \"extraLarge\": \"vertical\"\n     *     }'\n     * >\n     *     <button\n     *         class=\"carousel__ctrl _prev\"\n     *         data-elem-prev-button\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         data-ref=\"elemPrevButton\"\n     *         data-event-click=\"scrollToPrevPage\"\n     *     >Prev</button>\n     *     <div\n     *         class=\"carousel__track\"\n     *         data-elem-carousel-track\n     *         data-ref=\"elemCarouselTrack\"\n     *         data-event-scroll=\"onScroll\"\n     *         data-event-touchstart=\"onScroll\"\n     *         data-event-mousedown.prevent=\"onMouseDown\"\n     *         data-event-mouseup=\"onMouseUp\"\n     *     >\n     *         <isloop items=\"${slotcontent.content}\" var=\"contentAsset\">\n     *             <div class=\"box _single\" tabindex=\"0\">\n     *                 <isprint value=\"${contentAsset.custom.body}\" encoding=\"off\" />\n     *             </div>\n     *         </isloop>\n     *     </div>\n     *     <button\n     *         class=\"carousel__ctrl _next\"\n     *         data-elem-next-button\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         data-ref=\"elemNextButton\"\n     *         data-event-click=\"scrollToNextPage\"\n     *     >Next</button>\n     *     <div class=\"pagination\" data-ref=\"pagination\"></div>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div class=\"pagination\" data-ref=\"pagination\">\n     *             {{${'#'}pagination}}\n     *             <button\n     *                 class=\"page\"\n     *                 data-page=\"{{page}}\"\n     *                 tabindex=\"-1\"\n     *                 data-event-click.prevent=\"handlePaginationClick\"\n     *             >\n     *             </button>\n     *             {{/pagination}}\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class Carousel extends Widget {\n        prefs() {\n            return {\n                elemPrevButton: 'elemPrevButton',\n                elemNextButton: 'elemNextButton',\n                elemCarouselTrack: 'elemCarouselTrack',\n                pagerCurrentClass: 'm-current',\n                direction: {\n                    small: 'horizontal',\n                    medium: 'horizontal',\n                    large: 'horizontal',\n                    extraLarge: 'horizontal'\n                },\n                zoomClass: 'm-zoomed-in',\n                ...super.prefs()\n            };\n        }\n\n        update() {\n            this.updateCarouselMetric();\n            this.updateCarouselState();\n            this.initPagination();\n            this.setActivePagination();\n            this.ref('self').addClass('m-inited');\n            return this;\n        }\n\n        defineCarouselDirection() {\n            this.carouselDirection = this.prefs().direction[getViewType()] || DEFAULT_DIRECTION;\n        }\n\n        init() {\n            super.init();\n            // Async loading to not block other widget init\n            timeout(() => {\n                cssLoadChecker.get().then(() => this.initCarousel());\n            }, 0);\n        }\n\n        initCarousel() {\n            this.defineCarouselDirection();\n            this.eventBus().on('viewtype.change', 'onViewtypeChange');\n            this.ev('focusin', this.handleScrollToFocusedItem, this.ref('elemCarouselTrack').get());\n\n            this.currentPage = 0;\n            this.scrollingTimeoutValue = 60;\n            this.grabbingTimeoutValue = 60;\n            this.deltaPrevPageSensitivity = -10;\n            this.deltaNextPageSensitivity = 10;\n            // fixes issue with rounding slides width for responsive markup\n            this.roundingDelta = 1;\n\n            this.onScroll();\n            this.updateCarouselState();\n            this.initPagination();\n            this.setActivePagination();\n\n            this.ref('self').addClass('m-inited');\n        }\n\n        /**\n         * @description viewtype change event handler. Recalculates carousel dimension and redefines carousel direction.\n         */\n        onViewtypeChange() {\n            this.carouselDirection = undefined;\n            this.dimension = undefined;\n            this.defineCarouselDirection();\n            this.getCarouselDimension();\n        }\n\n        /**\n         * @description Scrolls active element into carousel viewport.\n         * This might be useful when using dependant carousels, like on PDP images/thumbnails\n         *\n         * @returns {Carousel} carousel instance\n         */\n        scrollIntoView() {\n            const elemCarouselTrack = this.ref('elemCarouselTrack').get();\n            if (elemCarouselTrack) {\n                const currentElement = [].find.call(elemCarouselTrack.children, (/** @type {HTMLElement} */element) => {\n                    return element.classList.contains(this.prefs().pagerCurrentClass);\n                });\n\n                if (currentElement) {\n                    if (this.carouselDirection === DEFAULT_DIRECTION) {\n                        if ((currentElement.offsetLeft + currentElement.clientWidth)\n                            > (elemCarouselTrack.scrollLeft + elemCarouselTrack.clientWidth)) {\n                            this.scrollToPoint(0, currentElement.offsetLeft);\n                        } else if (currentElement.offsetLeft < elemCarouselTrack.scrollLeft) {\n                            this.scrollToPoint(0, currentElement.offsetLeft);\n                        }\n                    } else {\n                        // eslint-disable-next-line no-lonely-if\n                        if ((currentElement.offsetTop + currentElement.clientHeight)\n                            > (elemCarouselTrack.scrollTop + elemCarouselTrack.clientHeight)) {\n                            this.scrollToPoint(currentElement.offsetTop, 0);\n                        } else if (currentElement.offsetTop < elemCarouselTrack.scrollTop) {\n                            this.scrollToPoint(currentElement.offsetTop, 0);\n                        }\n                    }\n                }\n            }\n\n            return this;\n        }\n\n        initPagination() {\n            if (this.hasNoScroll()) {\n                return;\n            }\n\n            this.has('pagination', paginationRefEl => {\n                const pagination = paginationRefEl.get();\n                if (pagination) {\n                    // If empty pagination - we need to render it. Otherwise - create.\n                    if (pagination.innerHTML === '') {\n                        this.createPaginationElements();\n                    } else {\n                        this.pagination = Promise.resolve(pagination);\n                    }\n                }\n            });\n        }\n\n        /**\n         * @param {refElement} el source of event\n         */\n        handlePaginationClick(el) {\n            const pageIndex = el.data('page');\n            if (pageIndex !== null) {\n                this.scrollToPage(parseInt(pageIndex + '', 10));\n            }\n        }\n\n        createPaginationElements() {\n            const elemCarouselTrack = this.ref('elemCarouselTrack').get();\n\n            if (!elemCarouselTrack) {\n                return;\n            }\n            // We need to use round, not ceil, since it called on scroll,\n            // in case of last it would generate falls positive\n            const numberOfPages = Math.round(elemCarouselTrack.scrollWidth / elemCarouselTrack.clientWidth);\n            const pagination = new Array(numberOfPages).fill(0).map((_el, i) => ({ page: i }));\n\n            this.pagination = new Promise((resolve) => {\n                this.render(undefined, { pagination }, this.ref('pagination')).then(() => {\n                    resolve(this.ref('pagination').get());\n                });\n            });\n        }\n\n        setActivePagination() {\n            if (!this.pagination) {\n                return;\n            }\n\n            this.pagination.then((pagination) => {\n                if (!pagination) {\n                    return;\n                }\n\n                const currentPageIndex = this.getCurrentPageIndex();\n                const currentPageNode = pagination.children[currentPageIndex];\n\n                if (!currentPageNode) {\n                    this.initPagination();\n                }\n\n                pagination.children[this.currentPage || 0]?.classList.remove(\n                    this.prefs().pagerCurrentClass\n                );\n\n                currentPageNode?.classList.add(this.prefs().pagerCurrentClass);\n\n                this.currentPage = currentPageIndex;\n            });\n        }\n\n        getCurrentPageIndex() {\n            const carouselTrackElem = this.ref('elemCarouselTrack').get();\n            if (carouselTrackElem) {\n                const currentPosition = this.carouselDirection === 'horizontal'\n                    ? carouselTrackElem.scrollLeft : carouselTrackElem.scrollTop;\n                const pageDimension = this.carouselDirection === 'horizontal'\n                    ? carouselTrackElem.clientWidth : carouselTrackElem.clientHeight;\n                return Math.round((currentPosition || 0) / (pageDimension || 1));\n            } else {\n                return 0;\n            }\n        }\n\n        getImages() {\n            const imagesContainer = this.ref('elemCarouselTrack').get();\n\n            return imagesContainer ? imagesContainer.querySelectorAll('img') : [];\n        }\n\n        scrollToNextPage() {\n            this.scrollToPage(this.getCurrentPageIndex() + 1);\n        }\n\n        scrollToPrevPage() {\n            this.scrollToPage(this.getCurrentPageIndex() - 1);\n        }\n\n        onPageClick(el) {\n            if (this.delta === 0) {\n                this.emit('pageclicked', el.data('page'));\n            }\n        }\n\n        scrollToPage(pageIndex) {\n            const self = this.ref('self').get();\n            if (this.carouselDirection === 'horizontal') {\n                this.scrollToPoint(0, Math.round(((self && self.clientWidth) || 0) * pageIndex));\n            } else {\n                this.scrollToPoint(Math.round(((self && self.clientHeight) || 0) * pageIndex), 0);\n            }\n            return this;\n        }\n\n        /**\n         * @description Adds some defined class on carousel inner elements\n         * @param {number} pageIndex - element index\n         *\n         * @returns {Carousel} carousel instance\n         */\n        markCurrentPage(pageIndex) {\n            const elemCarouselTrack = this.ref('elemCarouselTrack').get();\n            [].slice.call((elemCarouselTrack && elemCarouselTrack.children)).forEach((/** @type {HTMLElement} */element) => {\n                const dataPage = parseInt(((element && element.getAttribute('data-page')) || '0'), 10);\n                element.classList.toggle(this.prefs().pagerCurrentClass, dataPage === pageIndex);\n            });\n            return this;\n        }\n\n        scrollToPoint(top, left, node) {\n            const element = node || this.ref('elemCarouselTrack').get();\n            if (element) {\n                scrollElementTo(element, top, left);\n            }\n        }\n\n        hasNoScroll() {\n            return this.isScrollStart && this.isScrollEnd;\n        }\n\n        onScroll() {\n            this.updateCarouselMetric();\n\n            if (!this.isCallInNextFrameRequested) {\n                window.requestAnimationFrame(this.updateDuringScroll.bind(this));\n                this.isCallInNextFrameRequested = true;\n            }\n        }\n\n        onScrollEnd() {\n            this.emit('pagechanged', this.getCurrentPageIndex());\n        }\n\n        updateDuringScroll() {\n            this.updateCarouselState();\n            if (this.pagination) {\n                this.setActivePagination();\n            } else {\n                this.initPagination();\n            }\n\n            if (this.scrollingTimeout) {\n                clearTimeout(this.scrollingTimeout);\n            }\n\n            this.scrollingTimeout = setTimeout(() => {\n                this.onScrollEnd();\n            }, this.scrollingTimeoutValue);\n\n            this.isCallInNextFrameRequested = false;\n        }\n\n        updateCarouselState() {\n            const carousel = this.ref('self');\n            const elemPrevButton = this.ref('elemPrevButton');\n            const elemNextButton = this.ref('elemNextButton');\n\n            if (this.hasNoScroll()) { // No scroll case\n                carousel.addClass('m-no_scroll');\n            } else {\n                carousel.removeClass('m-no_scroll');\n            }\n\n            if (this.isScrollStart) {\n                carousel.removeClass('m-prev_visible');\n                elemPrevButton.attr('disabled', '');\n            } else {\n                carousel.addClass('m-prev_visible');\n                elemPrevButton.attr('disabled', false);\n            }\n            if (this.isScrollEnd && this.ref('carouselContianer').get()?.dataset.enableAutoplay != \"true\") {\n                carousel.removeClass('m-next_visible');\n                elemNextButton.attr('disabled', '');\n            } else {\n                carousel.addClass('m-next_visible');\n                elemNextButton.attr('disabled', false);\n            }\n        }\n\n        updateCarouselMetric() {\n            const carouselTrackElem = this.ref('elemCarouselTrack').get();\n            const carouselElem = this.ref('self').get();\n            const roundingDelta = this.roundingDelta || 0;\n            if (carouselTrackElem && carouselElem) {\n                if (this.carouselDirection === 'horizontal') {\n                    const totalScrollWidth = carouselTrackElem.scrollLeft + carouselElem.offsetWidth;\n                    this.isScrollStart = carouselTrackElem.scrollLeft <= 0;\n                    this.isScrollEnd = (totalScrollWidth + roundingDelta) >= carouselTrackElem.scrollWidth;\n                } else {\n                    const totalScrollHeight = carouselTrackElem.scrollTop + carouselElem.offsetHeight;\n                    this.isScrollStart = carouselTrackElem.scrollTop <= 0;\n                    this.isScrollEnd = (totalScrollHeight + roundingDelta) >= carouselTrackElem.scrollHeight;\n                }\n            }\n        }\n\n        /**\n         * @description Method to get event coordinate depending on carousel direction\n         *\n         * @param {object} event event object\n         * @returns {number} event coordinate\n         */\n        getCurrentCoordinate(event) {\n            let currentCoordinate = 0;\n\n            if (event instanceof MouseEvent) {\n                currentCoordinate = this.carouselDirection === 'horizontal'\n                    ? event.clientX\n                    : event.clientY;\n            } else if (event instanceof TouchEvent) {\n                currentCoordinate = this.carouselDirection === 'horizontal'\n                    ? event.touches[0].pageX\n                    : event.touches[0].pageY;\n            }\n\n            return currentCoordinate;\n        }\n\n        /**\n         * @description Method to get carousel dimension (width or height) depending on carousel direction\n         *\n         * @returns {number} width or height of carousel\n         */\n        getCarouselDimension() {\n            if (!this.dimension) {\n                this.dimension = 0;\n                const self = this.ref('self').get();\n\n                if (self) {\n                    this.dimension = this.carouselDirection === 'horizontal'\n                        ? self.clientWidth\n                        : self.clientHeight;\n                }\n            }\n\n            return this.dimension;\n        }\n\n        /**\n         * @description Programmatically handle scroll to focused carousel item.\n         * This is the fix for Chrome bug where it could not calculate item boundaries properly\n         * and threat item like it into view. The bug is on PDP Gallery.\n         * Applicable only for horizontal scroll.\n         * @returns {void}\n         */\n        handleScrollToFocusedItem() {\n            if (this.carouselDirection !== 'horizontal') { return; }\n\n            const track = this.ref('elemCarouselTrack').get();\n            const activeItem = document.activeElement;\n            if (!activeItem || !(activeItem instanceof HTMLElement) || activeItem.parentElement !== track) {\n                return;\n            }\n\n            const activeItemLeft = activeItem.getBoundingClientRect().left;\n            const trackStart = track.getBoundingClientRect().left;\n            const trackEnd = trackStart + track.clientWidth;\n\n            if (activeItemLeft >= trackEnd || activeItemLeft <= trackStart) {\n                track.scrollTo(activeItem.offsetLeft, 0);\n            }\n        }\n\n        /**\n         * @description Next/Prev Buttons Keydown Event handler\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n            let scrollDirection;\n            const button = event.target;\n\n            switch (event.keyCode) {\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    if (!(button instanceof HTMLElement)) { break; }\n\n                    if (event.target && 'thumbnailsArrow' in button.dataset) {\n                        scrollDirection = button.dataset.thumbnailsArrow;\n                    } else {\n                        break;\n                    }\n\n                    if (scrollDirection === 'next') {\n                        this.scrollToNextPage();\n                    } else if (scrollDirection === 'prev') {\n                        this.scrollToPrevPage();\n                    }\n\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n\n        /**\n         * @param {refElement} el source of event\n         * @param {MouseEvent} event event instance in DOM\n         */\n        onMouseDown(el, event) {\n            this.initialCoordinate = this.getCurrentCoordinate(event);\n            this.delta = 0;\n            this.getCarouselDimension();\n\n            const elemCarouselTrack = this.ref('elemCarouselTrack');\n\n            this.mouseMoveDisposable = this.ev('mousemove', this.onMouseMove, elemCarouselTrack.get());\n            this.mouseLeaveDisposable = this.ev('mouseleave', this.onMouseUp, elemCarouselTrack.get());\n            clearTimeout(this.grabbingRemoveTimeout);\n        }\n\n        onMouseUp() {\n            const elemCarouselTrack = this.ref('elemCarouselTrack');\n            const GRABBING_CLASS = 'm-grabbing';\n\n            if (this.mouseMoveDisposable) {\n                this.mouseMoveDisposable.forEach(disposable => disposable());\n                delete this.mouseMoveDisposable;\n            }\n            if (this.mouseLeaveDisposable) {\n                this.mouseLeaveDisposable.forEach(disposable => disposable());\n                delete this.mouseLeaveDisposable;\n            }\n\n            // we should remove scroll-snap-type with delay, otherwise it cause bouncing\n            this.grabbingRemoveTimeout = setTimeout(() => {\n                elemCarouselTrack.removeClass(GRABBING_CLASS);\n            }, this.grabbingTimeoutValue);\n\n            if (!this.delta) {\n                this.delta = 0;\n            }\n\n            if (!this.deltaPrevPageSensitivity) {\n                this.deltaPrevPageSensitivity = 0;\n            }\n\n            if (!this.deltaNextPageSensitivity) {\n                this.deltaNextPageSensitivity = 0;\n            }\n\n            if (this.delta <= this.deltaPrevPageSensitivity) {\n                this.scrollToPrevPage();\n            } else if (this.delta >= this.deltaNextPageSensitivity) {\n                this.scrollToNextPage();\n            } else {\n                // remove immediate for this case\n                elemCarouselTrack.removeClass(GRABBING_CLASS);\n            }\n        }\n\n        /**\n         * @description Handle Mouse/Touch move\n         * @param {HTMLElement} _el HTMLElement\n         * @param {Event} event DOM event\n         */\n        onMouseMove(_el, event) {\n            const currentCoordinate = this.getCurrentCoordinate(event);\n\n            if (this.initialCoordinate && this.initialCoordinate !== currentCoordinate) {\n                // eslint-disable-next-line no-mixed-operators\n                this.delta = (this.initialCoordinate - currentCoordinate) / this.getCarouselDimension() * 100;\n\n                this.has('elemCarouselTrack', (carouselTrack) => {\n                    carouselTrack.addClass('m-grabbing');\n                    const elemCarouselTrack = carouselTrack.get();\n\n                    if (elemCarouselTrack && this.delta) {\n                        if (this.carouselDirection === 'horizontal') {\n                            this.scrollToPoint(0, elemCarouselTrack.scrollLeft + this.delta);\n                        } else {\n                            this.scrollToPoint(elemCarouselTrack.scrollTop + this.delta, 0);\n                        }\n                    }\n                });\n            }\n        }\n\n        /**\n         * @description Toggle Zoom state\n         * @param {boolean} state flag for toggle zoom state\n         */\n        toggleZoomState(state) {\n            this.ref('self').toggleClass(this.prefs().zoomClass, state);\n        }\n    }\n\n    return Carousel;\n}\n","// This is the swiper plugin-based carousel implementation, that could be used per specific client needs.\n\n/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { objectEquals } from 'widgets/toolbox/util';\nimport {\n    getViewType, LARGE, EXTRA_LARGE, MEDIUM, SMALL\n} from 'widgets/toolbox/viewtype';\n\nconst allViewPorts = [SMALL, MEDIUM, LARGE, EXTRA_LARGE].join(',');\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Swiper Carousel implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof CarouselSwiper} Swiper Carousel class\n */\nexport default function (Widget) {\n    /**\n     * @class CarouselSwiper\n     * @augments Widget\n     * @classdesc CarouselSwiper widget for different carousel types, like Product images carousel or Recommendations carousel\n     * <br>Uses Swiper slider https://swiperjs.com/api/ under the hood\n     * @property {string} data-widget - Widget name `carouselSwiper`\n     * @property {string} data-prev - Previous button text\n     * @property {string} data-next - Next button text\n     * @property {string} data-slides-per-view - Number of slides per view (slides visible at the same time on slider's container).\n     * @property {string} data-slides-per-view-tablet - Number of slides per view for tablet devices (slides visible at the same time on slider's container).\n     * @property {string} data-slides-per-view-mobile - Number of slides per view for mobile devices (slides visible at the same time on slider's container).\n     * @property {string} data-loop - Enable continuous loop mode\n     * @example\n     * // use this code to display widget\n     * <div\n     *     data-widget=\"carouselSwiper\"\n     *     data-id=\"carousel-${slotcontent.slotID}\"\n     *     class=\"o-carousel swiper-container o-carousel--recommend carousel slide\"\n     *     data-interval=\"0\"\n     *     data-prev=\"${Resource.msg('button.previous', 'common', null)}\"\n     *     data-next=\"${Resource.msg('button.next', 'common', null)}\"\n     *     data-slides-per-view=\"${Resource.msg('carousel.recommendations.slidesPerView', 'carousel', null)}\"\n     *     data-slides-per-view-tablet=\"${Resource.msg('carousel.recommendations.slidesPerViewTablet', 'carousel', null)}\"\n     *     data-slides-per-view-mobile=\"${Resource.msg('carousel.recommendations.slidesPerViewMobile', 'carousel', null)}\"\n     *     data-loop=\"${products.length > 3 ? true : false}\"\n     *     data-quantity=\"${products.length}\"\n     * >\n     *     <!-- previous button -->\n     *     <button class=\"carousel-control-prev o-carousel__control-prev\" data-ref=\"prevBtn\">\n     *         <span class=\"icon icon-arrow-to-left\" aria-hidden=\"true\"></span>\n     *     </button>\n     *\n     *     <!-- pagination -->\n     *     <ol class=\"carousel-indicators swiper-pagination is-hidden\" data-ref=\"pagination\" aria-hidden=\"true\">\n     *         <isloop items=\"${products}\" var=\"product\" status=\"loopStatus\">\n     *             <li data-target=\"${'#'}Carousel-${product.ID}\" data-slide-to=\"${loopStatus.index}\" class=\"${!loopStatus.index ? 'active' : ''}\" ></li>\n     *         </isloop>\n     *     </ol>\n     *\n     *     <!-- carousel slides -->\n     *     <div class=\"swiper-wrapper carousel-inner o-carousel__inner\" role=\"listbox\" data-ref=\"carouselInner\" aria-label=\"carousel\">\n     *         <isloop items=\"${products}\" var=\"product\" status=\"tile\">\n     *             <div class=\"swiper-slide carousel-item o-carousel__slide active\" data-tile-position=\"${tile.index}\">\n     *                 <div class=\"homepage-products__item\">\n     *                     <isinclude url=\"${URLUtils.url('Tile-Show', 'pid', product.ID, 'pview', 'tile', 'ratings', true, 'swatches', true, 'showQuickView', false, 'recommendation', true)}\"/>\n     *                 </div>\n     *             </div>\n     *         </isloop>\n     *     </div>\n     *\n     *     <!-- next button -->\n     *     <button class=\"carousel-control-next o-carousel__control-next\" data-ref=\"nextBtn\">\n     *         <span class=\"icon icon-arrow-to-right\" aria-hidden=\"true\"></span>\n     *     </button>\n     * </div>\n     */\n    class CarouselSwiper extends Widget {\n        prefs() {\n            return {\n                forceInitOnUpdate: false,\n                slideClass: 'swiper-slide',\n                slideActiveClass: 'swiper-slide-active',\n                wrapperClass: 'swiper-wrapper',\n                navDisabledClass: 'swiper-button-disabled',\n                navHiddenClass: 'swiper-button-hidden',\n                watchSlidesVisibility: 'swiper-slide-visible',\n                autoplay: false,\n                loop: true,\n                spaceBetween: 30,\n                slidesPerView: 4,\n                slidesPerViewTablet: 3,\n                slidesPerViewMobile: 1,\n                activeOnViewType: allViewPorts,\n                ...super.prefs()\n            };\n        }\n\n        activateIfViewPort() {\n            const viewType = getViewType();\n\n            if (this.prefs().activeOnViewType.includes(viewType)) {\n                this.activate();\n            } else {\n                this.deactivate();\n            }\n        }\n\n        activate() {\n            if (!this.cleanUpSwiper) {\n                // https://idangero.us/swiper/api/\n                Promise.all([\n                    import(/* webpackChunkName: 'swiper' */'swiper')\n                ]).then(([swiperModule]) => {\n                    const Swiper = swiperModule.default;\n                    const carouselContent = this.ref('self').get();\n                    if (carouselContent) {\n                        /**\n                         * @type {import('swiper').SwiperOptions}\n                         */\n                        const options = this.getOptions();\n\n                        this.initControls(options);\n\n                        this.swiper = new Swiper(carouselContent, options);\n\n                        this.cleanUpSwiper = () => {\n                            if (this.swiper) {\n                                this.swiper.destroy(true, true);\n                                this.swiper = undefined;\n                                this.cleanUpSwiper = undefined;\n                            }\n                        };\n\n                        this.afterActivate();\n\n                        this.onDestroy(this.cleanUpSwiper);\n                    }\n                });\n            }\n        }\n\n        afterActivate() {}\n\n        initControls(options) {\n            this.has('prevBtn', prevBtnEl => {\n                const prevBtn = prevBtnEl.get();\n                if (prevBtn && options.navigation) {\n                    options.navigation.prevEl = prevBtn;\n                }\n            });\n            this.has('nextBtn', nextBtnEl => {\n                const nextBtn = nextBtnEl.get();\n                if (nextBtn && options.navigation) {\n                    options.navigation.nextEl = nextBtn;\n                }\n            });\n            this.has('pagination', paginationEl => {\n                const pagination = paginationEl.get();\n                if (pagination) {\n                    options.pagination = {\n                        el: pagination\n                    };\n                }\n            });\n        }\n\n        deactivate() {\n            if (this.cleanUpSwiper) {\n                this.cleanUpSwiper();\n                this.cleanUpSwiper = undefined;\n            }\n        }\n\n        /**\n         *\n         * @param {any} sliders data for slide rendering\n         */\n        updateSlides(sliders) {\n            if (!objectEquals(this.prevSlides, sliders)) {\n                this.prevSlides = sliders;\n                this.render(undefined, sliders, this.ref('carouselInner')).then(() =>{\n                    if (this.swiper) {\n                        if (this.prefs().forceInitOnUpdate) {\n                            this.deactivate();\n                            this.init();\n                        } else {\n                            this.swiper.update();\n                        }\n                    }\n                });\n            }\n        }\n\n        getOptions() {\n            const prefs = this.prefs();\n            return {\n                slideClass: prefs.slideClass,\n                slideActiveClass: prefs.slideActiveClass,\n                watchSlidesVisibility: prefs.watchSlidesVisibility,\n                wrapperClass: prefs.wrapperClass,\n                autoplay: prefs.autoplay,\n                spaceBetween: prefs.spaceBetween,\n                slidesPerView: prefs.slidesPerView,\n                breakpoints: {\n                    1024: {\n                        loop: prefs.loop,\n                        slidesPerView: prefs.slidesPerViewTablet\n                    },\n                    767: {\n                        loop: prefs.loop,\n                        slidesPerView: prefs.slidesPerViewMobile\n                    }\n                },\n                loop: prefs.loop,\n                navigation: {\n                    disabledClass: prefs.navDisabledClass,\n                    hiddenClass: prefs.navHiddenClass\n                }\n            };\n        }\n\n        init() {\n            if (this.prefs().activeOnViewType === allViewPorts) {\n                this.activate();\n            } else {\n                this.activateIfViewPort();\n                this.eventBus().on('viewtype.change', 'activateIfViewPort');\n            }\n        }\n    }\n\n    return CarouselSwiper;\n}\n","/**\n * @typedef {ReturnType <typeof import('widgets/global/Modal').default>} Modal\n */\n\n/**\n * @description Base ConfirmDialog implementation\n * @param {Modal} Modal Base Modal widget for extending\n * @returns {typeof ConfirmDialog} Confirmation Dialog class\n */\nexport default function (Modal) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ConfirmDialog\n     * @augments Modal\n     * @classdesc Confirm dialog, which could be used to confirm an action in different contexts, like\n     * - Remove coupon from the cart\n     * - Remove product from the cart\n     * Can have different markup, but serves 3 actions: `confirm`, `cancel` and `alternativeconfirm`\n     * Emits 3 events: {@link ConfirmDialog#event:confirm}, {@link Modal#event:cancel} and {@link ConfirmDialog#event:alternativeconfirm} to notify parents about user triggered action.\n     * @property {string} data-widget - Widget name `confirmDialog`\n     * @property {string} data-widget-event-confirm - method to be triggered on parent's widget, once customer confirms dialog\n     * @property {string} data-widget-event-alternativeConfirm - method to be triggered on parent's widget, once customer confirms dialog\n     * @property {string} data-widget-event-cancel - method to be triggered on parent's widget, once customer cancels dialog\n     * @example <caption>Example of Modal widget</caption>\n     * <div hidden=\"hidden\" data-id=\"confirmDialog\"\n     *     data-widget=\"confirmDialog\"\n     *     data-widget-event-confirm=\"confirmedRemoveProduct\"\n     *     data-widget-event-alternativeconfirm=\"moveProductToWishlist\"\n     *     data-widget-event-cancel=\"cancelledRemoveProduct\"\n     * >\n     *     ... delete product confirm dialog contents\n     *     <button type=\"button\" data-event-click.prevent=\"confirm\" data-dismiss=\"modal\">\n     *         ${Resource.msg('button.confirm','cart',null)}\n     *     </button>\n     *     <button type=\"button\" data-event-click.prevent=\"alternativeconfirm\" data-dismiss=\"modal\">\n     *         ${Resource.msg('button.movetowishlist','cart',null)}\n     *     </button>\n     *     <button type=\"button\" data-event-click.prevent=\"cancel\" data-dismiss=\"modal\">\n     *         ${Resource.msg('button.cancel','cart',null)}\n     *     </button>\n     * </div>\n     */\n    class ConfirmDialog extends Modal {\n        /**\n         * @description Confirm Handler\n         * @emits ConfirmDialog#confirm\n         * @returns {void}\n         */\n        confirm() {\n            this.closeModal();\n            /**\n             * @description Event dispatched, when modal `confirm` button was pressed\n             * @event ConfirmDialog#confirm\n             */\n            this.emit('confirm');\n        }\n\n        /**\n         * @description alternativeConfirm Handler\n         * @emits ConfirmDialog#alternativeconfirm\n         * @returns {void}\n         */\n        alternativeConfirm() {\n            this.closeModal();\n            /**\n             * @description Event dispatched, when modal alternative button (not `cancel` and not `confirm`) was pressed\n             * @event ConfirmDialog#alternativeconfirm\n             */\n            this.emit('alternativeconfirm');\n        }\n    }\n\n    return ConfirmDialog;\n}\n","import { getContentByUrl, submitFormJson } from '../toolbox/ajax';\nimport { setCookie } from '../toolbox/cookie';\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof ConsentTracking} ConsentTracking widget\n */\n\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ConsentTracking\n     * @augments Widget\n     * @classdesc ConsentTracking Widget - used to expose Consent dialog, where customer can either accept\n     * <br>or reject Consent matter. Relevant methods will be triggered pressing related buttons\n     * @property {string} data-widget - Widget name `consentTracking`\n     * @property {string} data-content-url - Dynamically loaded Consent's content\n     * @property {string} data-reject-url - Customer chooses `reject` - request will be sent to Reject URL\n     * @property {string} data-accept-url - Customer chooses `accept` - request will be sent to Accept URL\n     * @example <caption>Example of ConsentTracking widget usage</caption>\n     * <div\n     *     data-widget=\"consentTracking\"\n     *     data-content-url=\"${URLUtils.url('ConsentTracking-GetContent', 'cid', 'tracking_hint')}\"\n     *     data-reject-url=\"${URLUtils.url('ConsentTracking-SetSession', 'consent', 'false')}\"\n     *     data-accept-url=\"${URLUtils.url('ConsentTracking-SetSession', 'consent', 'true')}\"\n     *     data-tracking-selected=\"${pdict.tracking_consent != null}\"\n     *     data-consent-api=\"${pdict.caOnline}\"\n     * >\n     *     <section data-ref=\"container\"></section>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div class=\"b-notification_panel-inner\">\n     *             <div class=\"b-notification_panel-content\">{{{assetContent}}}</div>\n     *             <button data-event-click=\"accept\">${Resource.msg('tracking.accept', 'footer', '')}</button>\n     *             <button data-event-click=\"reject\">${Resource.msg('tracking.decline', 'footer', '')}</button>\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class ConsentTracking extends Widget {\n        prefs() {\n            return {\n                contentUrl: '',\n                acceptUrl: '',\n                rejectUrl: '',\n                classesEnabled: 'm-visible',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            this.loadContent();\n        }\n\n        /**\n         * @description Load content\n         * @returns {void}\n         */\n        loadContent() {\n            getContentByUrl(this.prefs().contentUrl)\n                .then(content => {\n                    this.render('template', { assetContent: content }, this.ref('container'))\n                        .then(() => this.togglePanel(true));\n                });\n        }\n\n        /**\n         * @description Toggle Panel\n         * @param {boolean} isVisible - `true` if Consent's dialog should be shown, `false` - otherwise\n         * @returns {void}\n         */\n        togglePanel(isVisible) {\n            this.ref('container').toggleClass(this.prefs().classesEnabled, isVisible);\n        }\n\n        /**\n         * @description Accept Consent handler\n         * @listens dom#click\n         * @returns {void}\n         */\n        accept() {\n            submitFormJson(this.prefs().acceptUrl, undefined, 'GET').finally(() => {\n                this.togglePanel(false);\n                setCookie('dw_accept_cookie', '1', 365, true);\n                setCookie('dw_consent_cookie', '1', 365, true);\n            });\n        }\n\n        /**\n         * @description Reject Consent handler\n         * @listens dom#click\n         * @returns {void}\n         */\n        reject() {\n            submitFormJson(this.prefs().rejectUrl, undefined, 'GET').finally(() => {\n                this.togglePanel(false);\n                setCookie('dw_accept_cookie', '1', 365, true);\n            });\n        }\n    }\n\n    return ConsentTracking;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Base Disclosure implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof Disclosure} BackToTop class\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Disclosure\n     * @augments Widget\n     * @classdesc Accessibility [Disclosure component](https://www.w3.org/TR/wai-aria-practices/#disclosure).\n     * @property {string} data-widget - Widget name `disclosure`\n     * @property {string} data-show-on-init - If we need to show disclosure content on init\n     * @property {string} data-show-on-refresh - If we need to show disclosure on refresh (for ex. after re-render parent widget)\n     * @example <caption>Typical Disclosure widget markup</caption>\n     * <div\n     *     data-widget=\"disclosure\"\n     *     data-show-on-init=\"true\"\n     *     data-show-on-refresh=\"true\"\n     * >\n     *     <button\n     *         type=\"button\"\n     *         data-event-click=\"toggleContent\"\n     *         aria-expanded=\"false\"\n     *         aria-controls=\"coupon-form\"\n     *         data-ref=\"disclosureButton\"\n     *     >Open me</button>\n     *     <div\n     *         data-ref=\"disclosureContent\"\n     *         id=\"coupon-form\"\n     *         hidden=\"hidden\"\n     *         class=\"m-hide\"\n     *     >\n     *         .... content\n     *     </div>\n     * </div>\n     */\n    class Disclosure extends Widget {\n        prefs() {\n            return {\n                disclosureButton: 'disclosureButton',\n                disclosureContent: 'disclosureContent',\n                showOnInit: false,\n                showOnRefresh: false,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            this.hideContent();\n            if (this.prefs().showOnInit) {\n                this.showContent();\n            }\n        }\n\n        /**\n         * @description Toggles disclosure content\n         * @listens dom#click\n         * @returns {void}\n         */\n        toggleContent() {\n            this[this.shown ? 'hideContent' : 'showContent']();\n        }\n\n        /**\n         * @description Happens on widget refresh and is needed to handle updated state\n         * @returns {void}\n         */\n        onRefresh() {\n            this[this.prefs().showOnRefresh ? 'showContent' : 'hideContent']();\n        }\n\n        /**\n         * @description Show disclosure content and update related attributes\n         * @returns {void}\n         */\n        showContent() {\n            this.ref('disclosureContent').show().attr('aria-hidden', 'false');\n            this.ref('disclosureButton').attr('aria-expanded', 'true');\n            this.shown = true;\n        }\n\n        /**\n         * @description Hide disclosure content and update related attributes\n         * @returns {void}\n         */\n        hideContent() {\n            this.ref('disclosureContent').hide().attr('aria-hidden', 'true');\n            this.ref('disclosureButton').attr('aria-expanded', 'false');\n            this.shown = false;\n        }\n    }\n\n    return Disclosure;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof DismissBlock} DismissBlock widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class DismissBlock\n     * @augments Widget\n     * @classdesc DismissBlock widget used for display notification about using a cookie.\n     * Allow dismissing the notification by handle customer's click on the Accept button\n     * @property {string} data-widget - Widget name `dismissBlock`\n     * @property {string} data-key - Key for window.sessionStorage to store header banner display status.\n     * If value exists - header will not be shown.\n     * @example <caption>Example of DismissBlock widget usage</caption>\n     * <div\n     *     data-widget=\"dismissBlock\"\n     *     data-key=\"hide_header_banner\"\n     * >\n     *     ... widget markup\n     *     <button data-event-click.once.prevent=\"dismiss\">close</button>\n     * </div>\n     */\n    class DismissBlock extends Widget {\n        prefs() {\n            return {\n                classesEnabled: 'm-visible',\n                key: 'hide_cookies_notification',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            super.init();\n\n            const dismissBlockStatus = window.sessionStorage.getItem(this.prefs().key);\n            if (!dismissBlockStatus || dismissBlockStatus === '0') {\n                this.ref('self').addClass(this.prefs().classesEnabled);\n            }\n        }\n\n        /**\n         * @description Dismiss cookie notification\n         * @listens dom#click\n         * @returns {void}\n         */\n        dismiss() {\n            this.ref('self').removeClass(this.prefs().classesEnabled);\n            window.sessionStorage.setItem(this.prefs().key, '1');\n        }\n    }\n\n    return DismissBlock;\n}\n","import { clickOutside } from 'widgets/toolbox/util';\nconst ariaExpanded = 'aria-expanded';\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof DropDown} DropDown widget\n */\n\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class DropDown\n     * @augments Widget\n     * @classdesc Widget to serve different drop down blocks\n     * DropDown should be imlemented according to https://www.w3.org/TR/wai-aria-practices/#menu specs\n     * Represents DropDown component with next features:\n     * 1. Allow open/close or toggle DropDown\n     * 2. Allow get all DropDown's options or select option\n     * @property {string} data-widget - Widget name `dropDown`\n     * @property {string} data-event-mouseenter - Event listener for opening dropdown\n     * @property {string} data-event-mouseleave - Event listener for closing dropdown\n     * @property {string} data-event-focus - Event listener for opening dropdown\n     * @example <caption>Example of DropDown widget usage</caption>\n     * <div\n     *     data-widget=\"dropDown\"\n     *     data-event-mouseenter=\"openByMouseOver\"\n     *     data-event-mouseleave=\"close\"\n     *     data-event-focus=\"openByMouseOver\"\n     *     class=\"header-account\" tabindex=\"0\"\n     *     aria-label=\"${Resource.msg('myaccount.link.title', 'accessibility', null)}\"\n     * >\n     *     <button data-ref=\"dropDownButton\" class=\"o-link--block header-account__user u-p2\"\n     *         data-event-click.prevent=\"toggleDropDown\"\n     *         aria-haspopup=\"true\" aria-expanded=\"false\" tabindex=\"-1\"\n     *     >${pdict.monogram}</button>\n     *\n     *     <div data-ref=\"dropDownBox\" class=\"header-account-dropdown is-hidden\" aria-hidden=\"true\">\n     *         <div class=\"header-account__title\">\n     *             <span>${Resource.msgf('label.header.salutation','account', null, pdict.name)}</span>\n     *         </div>\n     *         <iscontentasset aid=\"account-component-dropdown\" />\n     *     </div>\n     * </div>\n     */\n    class DropDown extends Widget {\n        prefs() {\n            return {\n                classesOpen: 'is--open',\n                classesOptionSelected: 'selected',\n                closeOnOutsideClick: true,\n                outsideClickPreventDefault: true,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            super.init();\n\n            this.isOpened = false;\n            // For ignore duplicate method calls\n            this.toIgnoreDuplicateEvent = false;\n\n            this.ref('dropDownBox').hide();\n            this.ref('dropDownButton').attr(ariaExpanded, 'false');\n        }\n\n        /**\n         * @description Change DropDown state on widget rerender\n         * @returns {void}\n         */\n        onRefresh() {\n            super.onRefresh();\n\n            this.isOpened = false;\n        }\n\n        /**\n         * @description Open DropDown\n         * @emits DropDown#open\n         * @listens dom#click\n         * @returns {boolean} Boolean value that indicates DropDown opened\n         */\n        open() {\n            if (this.isOpen()) {\n                return false;\n            }\n\n            this.ref('self').addClass(this.prefs().classesOpen);\n            this.ref('dropDownBox').show();\n            this.ref('dropDownButton').attr(ariaExpanded, 'true');\n\n            this.isOpened = true;\n\n            if (this.prefs().closeOnOutsideClick) {\n                if (this.outSideListener) {\n                    this.outSideListener();\n                } else {\n                    this.outSideListener = clickOutside(this.ref('self'), () => {\n                        this.close();\n                    }, this.prefs().outsideClickPreventDefault);\n\n                    if (this.outSideListener) {\n                        this.onDestroy(this.outSideListener);\n                    }\n                }\n            }\n            /**\n             * @description Event to open DropDown\n             * @event DropDown#open\n             */\n            this.emit('open');\n            return true;\n        }\n\n        /**\n         * @description Close DropDown\n         * @emits DropDown#close\n         * @listens dom#click\n         * @returns {boolean} Boolean value that indicates DropDown closed\n         */\n        close() {\n            if (this.outSideListener) {\n                this.outSideListener();\n                this.outSideListener = null;\n            }\n\n            if (!this.isOpen()) {\n                return false;\n            }\n\n            this.ref('self').removeClass(this.prefs().classesOpen);\n            this.ref('dropDownBox').hide();\n            this.ref('dropDownButton').attr(ariaExpanded, 'false');\n\n            this.isOpened = false;\n            /**\n             * @description Event to close DropDown\n             * @event DropDown#close\n             */\n            this.emit('close');\n            return true;\n        }\n\n        /**\n         * @description Toggle DropDown\n         * @returns {boolean} value that indicates is DropDown toggled\n         */\n        toggleDropDown() {\n            if (this.toIgnoreDuplicateEvent) {\n                this.toIgnoreDuplicateEvent = false;\n                return false;\n            }\n\n            if (this.isOpen()) {\n                this.close();\n            } else {\n                this.open();\n            }\n            return true;\n        }\n\n        /**\n         * @description Check DropDown is opened\n         * @returns {boolean|undefined} Boolean value that indicates DropDown opened\n         */\n        isOpen() {\n            return this.isOpened;\n        }\n\n        /**\n         * @description Open DropDown by mouseover event\n         * @listens dom#mouseover\n         * @returns {void}\n         */\n        openByMouseOver() {\n            this.toIgnoreDuplicateEvent = true;\n            this.open();\n        }\n\n        /**\n         * @description Get DropDown options\n         * @returns {Array} DropDown options\n         */\n        getOptions() {\n            const options = [];\n\n            // @ts-ignore\n            Object.keys(this.refs).forEach(k => {\n                if (k.indexOf('option-') !== -1) {\n                    // @ts-ignore\n                    options.push(this.refs[k]);\n                }\n            });\n\n            return options;\n        }\n\n        /**\n         * @description Select option from DropDown options\n         * @param {any} optionInitial initial option\n         * @returns {boolean} Boolean value that indicates is DropDown's option was selected or not\n         */\n        selectOption(optionInitial) {\n            let option = optionInitial;\n            if (typeof option === 'number') {\n                if (!this.ref('option-' + option)) {\n                    return false;\n                }\n\n                option = this.ref('option-' + option);\n            }\n\n            this.getOptions().forEach(o => {\n                o.attr('data-selected', 'false')\n                    .removeClass(this.prefs().classesOptionSelected);\n            });\n\n            option\n                .attr('data-selected', 'true')\n                .addClass(this.prefs().classesOptionSelected);\n\n            this.ref('dropDownButton')\n                .setText(option.attr('data-name'));\n\n            this.close();\n            return true;\n        }\n\n        /**\n         * @description Handles click\n         * @emits DropDown#click\n         * @returns {void}\n         */\n        handleClick() {\n            /**\n             * @description Event to DropDown click\n             * @event DropDown#click\n             */\n            this.emit('click');\n        }\n    }\n\n    return DropDown;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof EmitBusEvent} EmitBusEvent widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class EmitBusEvent\n     * @augments Widget\n     * @classdesc Could be used to trigger any global event using interaction element\n     * <br>Could be useful to emit global events like `page.show.globalmodal` to notify\n     * <br>concerned widgets, so they could change page layout class etc.\n     * <br>Event emission could happens mostly on UI elements like links, buttons etc.\n     * @property {string} data-widget - Widget name `emitBusEvent`\n     * @property {string} data-bus-event-type - Global event type, which should be triggered\n     * @property {string} data-event-click - Event listener to trigger `emitBusEvent` method\n     * @property {string} data-url - any kind of additional properties\n     * @example <caption>Example of EmitBusEvent widget usage</caption>\n     * <a\n     *     data-widget=\"emitBusEvent\"\n     *     data-bus-event-type=\"page.show.globalmodal\"\n     *     data-event-click.prevent=\"emitBusEvent\"\n     *     data-url=\"${URLUtils.url('Login-ShowPasswordResetModal', 'loginmodal', 1, 'rurl', pdict.rurl)}\"\n     * >\n     *     ${Resource.msg('link.login.forgotpassword', 'login', null)}\n     * </a>\n     */\n    class EmitBusEvent extends Widget {\n        prefs() {\n            return {\n                busEventType: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Emit event\n         * @returns {void}\n         */\n        emitBusEvent() {\n            if (this.prefs().busEventType) {\n                this.eventBus().emit(this.prefs().busEventType, this);\n            }\n        }\n    }\n\n    return EmitBusEvent;\n}\n","import { timeout } from 'widgets/toolbox/util';\nimport { debounce } from 'widgets/toolbox/debounce';\n\nconst KEY_TAB = 9;\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Focus highlighter\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof FocusHighlighter} Focus Highlighter class\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class FocusHighlighter\n     * @augments Widget\n     * @classdesc This class intended to address Accessibility issue with focus highlighting on links element.\n     * Usually used on `<body>` tag to observe focus move events\n     *\n     * In case if page was focused, next subsequent `TAB` press will leads to next available link/input element focus highlighting\n     * Shows bordered rectangle, which fits currently focused element and moves rectangle to element's position.\n     * @property {string} data-widget - Widget name `focusHighlighter`\n     * @property {string} data-event-keyup - Event handler for `handleKeyup` method\n     * @property {string} data-event-click - Event handler for `handleClick` method\n     * @property {string} data-classes-inited - Inited classes, added to element after initialisation\n     * @property {string} data-classes-hurry - Classes, which don't contains animation and used to move `highlighter` (bordered rectangle) between focused elements without animation.\n     * @example <caption>FocusHighlighter widget</caption>\n     * <body\n     *   class=\"b-page\"\n     *   data-widget=\"focusHighlighter\"\n     *   data-event-keyup=\"handleKeyup\"\n     *   data-event-click=\"handleClick\"\n     * >\n     *     ... page content here\n     * </body>\n     */\n    class FocusHighlighter extends Widget {\n        prefs() {\n            return {\n                classesInited: 'b-highlighter_inited',\n                classesEnabled: 'm-visible',\n                classesHurry: 'm-hurry',\n                DELAY_TIMEOUT: 200, // Delay for animation\n\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialisation logic\n         * @returns {void}\n         */\n        init() {\n            this.keyboardModality = false;\n            this.isHighlighterVisible = false;\n            this.lastFocusedElement = null;\n            this.lastFocusedElementCoords = '';\n            this.highlighter = null;\n\n            this.ref('self').addClass(this.prefs().classesInited);\n            this.ev('resize', debounce(this.handleResize.bind(this), 200), window);\n            this.eventBus().on('rendering.applied', 'handleResize');\n        }\n\n        /**\n         * @param {refElement} ref - key up event referenced element\n         * @param {KeyboardEvent} event - key up event\n         * @listens dom#keyup\n         * @returns {void}\n         */\n        handleKeyup(ref, event) {\n            if (event.keyCode === KEY_TAB) {\n                this.enableHighlighter();\n            }\n        }\n\n        /**\n         * @param {refElement} ref - click event referenced element\n         * @param {MouseEvent} event - click event\n         * @listens dom#click\n         * @returns {void}\n         */\n        handleClick(ref, event) {\n            // Space keyup on button DomNode generates synthetic click\n            // so we need to ensure that it is not the one\n            if (this.isHighlighterVisible && !(event.x === 0 && event.y === 0)) {\n                this.disableHighlighter();\n            }\n        }\n\n        /**\n         * @description Window resize event handler\n         * @listens dom#resize\n         * @returns {void}\n         */\n        handleResize() {\n            if (this.isHighlighterVisible) {\n                this.moveTo(this.lastFocusedElement);\n            }\n        }\n\n        /**\n         * @description Handles focus change on page\n         * @listens dom#focusin\n         * @returns {void}\n         */\n        handleFocus() {\n            if (!(document.activeElement instanceof HTMLElement)) { return; }\n\n            const focusedElement = document.activeElement;\n\n            if (\n                !this.isValidTarget(focusedElement)\n                || (this.isTextInput(focusedElement) && !this.keyboardModality)\n            ) {\n                return;\n            }\n\n            this.detectHurryNavigation();\n            this.moveTo(focusedElement);\n\n            // We need to recheck focused element position since coords could\n            // be changed during scroll in carousels, animation, dynamic page changes\n            if (this.rechekTimeout) { this.rechekTimeout(); }\n            if (this.rechekSecondTimeout) { this.rechekSecondTimeout(); }\n\n            this.rechekTimeout = timeout(() => this.moveTo(focusedElement), 400);\n            this.rechekSecondTimeout = timeout(() => this.moveTo(focusedElement), 800);\n        }\n\n        /**\n         * @description Enables a `highlighter` - a bordered box with sizes of currently focused element.\n         * @returns {void}\n         */\n        enableHighlighter() {\n            if (this.keyboardModality) {\n                return;\n            }\n            this.keyboardModality = true;\n\n            this.ref('highlighter').addClass(this.prefs().classesEnabled);\n            this.isHighlighterVisible = true;\n            this.onDestroy(() => this.ref('highlighter').removeClass(this.prefs().classesEnabled));\n\n            this.handleFocus();\n\n            this.focusinHandlers = this.ev('focusin', this.handleFocus, document);\n            // all other events are handled by focusin event\n        }\n\n        /**\n         * @description Disables a `highlighter` - a bordered box with sizes of currently focused element.\n         * @returns {void}\n         */\n        disableHighlighter() {\n            if (!this.keyboardModality) {\n                return;\n            }\n            this.keyboardModality = false;\n\n            this.ref('highlighter').removeClass(this.prefs().classesEnabled);\n            this.isHighlighterVisible = false;\n            this.hideTimeOut = timeout(this.hide.bind(this), this.prefs().DELAY_TIMEOUT);\n\n            if (this.focusinHandlers) {\n                this.focusinHandlers.forEach(fn => fn());\n            }\n            this.lastFocusedElement = null;\n        }\n\n        /**\n         * @description Moves `highlighter` (a bordere box) in place of focused element\n         * @param {HTMLElement} focusedElement - element, which gets focus\n         */\n        moveTo(focusedElement) {\n            if (!(focusedElement instanceof HTMLElement)) { return; }\n\n            const highlighterNode = this.ref('highlighter').get();\n            if (!highlighterNode) { return; }\n\n            const targetRect = focusedElement.getBoundingClientRect();\n            const targetTop = targetRect.top + window.scrollY;\n            const targetLeft = targetRect.left + window.scrollX;\n            const targetWidth = focusedElement.offsetWidth;\n            const targetHeight = focusedElement.offsetHeight;\n\n            if (\n                focusedElement === this.lastFocusedElement\n                && this.lastFocusedElementCoords === '' + targetTop + targetLeft + targetWidth + targetHeight\n            ) {\n                // If we come from coords recheck do not reapply changes\n                return;\n            }\n\n            const highlighterStyle = highlighterNode.style;\n            highlighterStyle.top = `${targetTop - 5}px`;\n            highlighterStyle.left = `${targetLeft - 5}px`;\n            highlighterStyle.width = `${targetWidth + 2}px`;\n            highlighterStyle.height = `${targetHeight + 2}px`;\n\n            this.lastFocusedElementCoords = '' + targetTop + targetLeft + targetWidth + targetHeight;\n            this.lastFocusedElement = focusedElement;\n        }\n\n        /**\n         * @description Hide `highlighter`\n         * @returns {this} result\n         */\n        hide() {\n            const highlighterNode = this.ref('highlighter').get();\n            if (!highlighterNode) {\n                return this;\n            }\n            const highlighterStyle = highlighterNode.style;\n\n            highlighterStyle.width = '0';\n            highlighterStyle.height = '0';\n\n            if (this.hideTimeOut) {\n                this.hideTimeOut();\n            }\n\n            return this;\n        }\n\n        /**\n         * @description Detects too fast customer navigation, and displays `highlighter`,\n         * moving from previously focused element to currently focused without animation.\n         * @returns {void}\n         */\n        detectHurryNavigation() {\n            const currentTime = Date.now();\n\n            const isHurryNavigation = (currentTime - (this.lastKeyTime || 0)) < 190;\n\n            this.ref('highlighter').toggleClass(this.prefs().classesHurry, isHurryNavigation);\n            this.isHurryNavigation = isHurryNavigation;\n\n            this.lastKeyTime = currentTime;\n        }\n\n        /**\n         * @param {HTMLElement} domNode - focused element\n         * @returns {boolean} is HTML element valid target for focus\n         */\n        isValidTarget(domNode) {\n            return domNode !== this.lastFocusedElement\n                && domNode.nodeName !== 'HTML'\n                && domNode.nodeName !== 'BODY';\n        }\n\n        /**\n         * @param {HTMLTextAreaElement|HTMLInputElement|HTMLElement} domNode - focused element\n         * @returns {boolean} is HTML element text input\n         */\n        isTextInput(domNode) {\n            // @ts-ignore\n            return (domNode.tagName === 'TEXTAREA' && !domNode.readOnly)\n                // @ts-ignore\n                || (domNode.tagName === 'INPUT' && !domNode.readOnly)\n                || !!(domNode.getAttribute('contenteditable'));\n        }\n    }\n\n    return FocusHighlighter;\n}\n","import { PausableTimeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Base GlobalAlerts implementation.\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof GlobalAlerts} GlobalAlerts class\n */\nexport default function (Widget) {\n    /**\n     * @class GlobalAlerts\n     * @augments Widget\n     * @classdesc Global Alerts with accessibility alert role possibility.\n     * Acts as a popup with delayed disappearing. Popup will render user action description.\n     * @property {boolean} data-widget - Widget name `globalAlerts`\n     * @property {number} data-timeout - Value of hide timeout in milliseconds\n     * @property {object} data-global-alerts - Global alerts localisation messages\n     * Possible values are: `error500`\n     * @example\n     * // use this code to display GlobalAlerts widget\n     * <div\n     *     data-widget=\"globalAlerts\"\n     *     data-timeout=\"4000\"\n     *     data-global-alerts='{\n     *         \"error500\": \"${Resource.msg('alert.error500', 'global', null)}\"\"\n     *     }'\n     *\n     * >\n     *     <div data-ref=\"item\" hidden=\"hidden\" role=\"alert\">\n     *         ... alert message will be shown here\n     *     </div>\n     * </div>\n     */\n    class GlobalAlerts extends Widget {\n        prefs() {\n            return {\n                timeout: 4000,\n                globalAlerts: {},\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget intialisation, onDestroy hook to clear pausable timeout.\n         * Listening `show.alert` event to display a relevant Global Alert\n         * @listens \"alert.show\"\n         * @listens \"alert.error\"\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.onDestroy(() => this.disposePausableTimeout());\n            /**\n             * @description Event for Global Alert, contains data to be shown inside Global Alert popover\n             * @event \"alert.show\"\n             */\n            this.eventBus().on('alert.show', 'showAlert');\n            /**\n             * @description Event for Global Alert, contains data to be shown inside Global Alert popover as an error message\n             * @event \"alert.error\"\n             */\n            this.eventBus().on('alert.error', 'showError');\n        }\n\n        /**\n         * @description Shows global errors like 500 response\n         * @param {{errorCode: number}} data - Error data\n         * @returns {void}\n         */\n        showError(data) {\n            if (data.errorCode) {\n                const accessibilityAlert = this.prefs().globalAlerts[`error${data.errorCode}`];\n                this.showAlert({\n                    accessibilityAlert\n                });\n            }\n        }\n\n        /**\n         * @description Dispose pausable timeout and clear it resources\n         * @returns {void}\n         */\n        disposePausableTimeout() {\n            if (this.pausableTimeout) {\n                this.pausableTimeout.destroy();\n                this.pausableTimeout = undefined;\n            }\n        }\n\n        /**\n         * @description Show Global Alert by starting pausable timeout\n         * @param {{accessibilityAlert: string}} data - Message to be shown and pronounced\n         * @returns {void}\n         */\n        showAlert(data) {\n            if (data && data.accessibilityAlert) {\n                if (this.shown) {\n                    this.hideAlert();\n                }\n\n                this.ref('item')\n                    .setText(data.accessibilityAlert)\n                    .show();\n                this.shown = true;\n\n                this.pausableTimeout = new PausableTimeout(() => {\n                    this.hideAlert();\n                }, this.prefs().timeout);\n            }\n        }\n\n        /**\n         * @description Hide Global Alert and clear timeout\n         * @returns {void}\n         */\n        hideAlert() {\n            this.ref('item')\n                .setText('')\n                .hide();\n            this.shown = false;\n            this.disposePausableTimeout();\n        }\n\n        /**\n         * @description Pauses Global Alert displaying.\n         * Pauses hide alert with pausable timeout.\n         * @returns {void}\n         */\n        pauseAlert() {\n            if (this.pausableTimeout) {\n                this.pausableTimeout.pause();\n            }\n        }\n\n        /**\n         * @description Resumes Global Alert displaying.\n         * Resumes hide alert with pausable timeout.\n         * @returns {void}\n         */\n        resumeAlert() {\n            if (this.pausableTimeout) {\n                this.pausableTimeout.resume();\n            }\n        }\n    }\n\n    return GlobalAlerts;\n}\n","import { getContentByUrl, getJSONByUrl } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/Modal').default>} Modal\n * @typedef {ReturnType<typeof import('widgets/global/EmitBusEvent').default>} EmitBusEvent\n */\n\n/**\n * @description Base GlobalModal implementation\n * @param {Modal} Modal Base widget for extending\n * @returns {typeof GlobalModal} GlobalModal class\n */\nexport default function (Modal) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class GlobalModal\n     * @augments Modal\n     * @classdesc Global Modal component. Allows different modals to be triggered by firing an event {@link module#dialog:dialogshow}.\n     * <br>Was implemented to get rid from excessive duplicated popups markup in product lists etc.\n     * <br>Also allow standalone components/link to trigger modal by using {@link EmitBusEvent} widget.\n     * <br>In general could be triggered either programmatically by firing an event, or using {@link EmitBusEvent} widget in DOM markup.\n     * <br>Allows: add classes to container; render modal heading; render modal action buttons; render content either via URL, or from string.\n     * @property {string} data-widget - Widget name `globalModal`\n     * @property {string} data-disable-rendering - property should be set to `false` to allow rendering inside popup template.\n     * @example <caption>Global Modal widget markup</caption>\n     * <div\n     *     data-widget=\"globalModal\"\n     *     data-disable-rendering=\"false\"\n     * >\n     *     <div class=\"b-dialog\" data-ref=\"container\" hidden></div>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div\n     *             class=\"b-dialog {{${'#'}wrapperClasses}}{{wrapperClasses}}{{/wrapperClasses}}\"\n     *             {{${'#'}ariaLabel}}\n     *             aria-label=\"{{ariaLabel}}\"\n     *             {{/ariaLabel}}\n     *             data-ref=\"container\"\n     *         >\n     *             <div\n     *                 class=\"b-dialog-window\"\n     *                 role=\"dialog\"\n     *                 data-ref=\"dialog\"\n     *                 aria-modal=\"true\"\n     *             >\n     *                 <div class=\"b-dialog-header\">\n     *                     ... header rendering\n     *                 </div>\n     *                 <div class=\"b-dialog-body b-user_content\">\n     *                     {{& content }}\n     *                 </div>\n     *                 {{${'#'}showActions}}\n     *                 <div class=\"b-dialog-footer m-actions\">\n     *                     ... action buttons rendering\n     *                 </div>\n     *                 {{/showActions}}\n     *             </div>\n     *         </div>\n     *     </script>\n     * </div>\n     *\n     * @example <caption>Global Modal widget triggering via DOM</caption>\n     * <button\n     *     class=\"b-promotion-details\"\n     *     type=\"button\"\n     *     data-widget=\"emitBusEvent\"\n     *     data-bus-event-type=\"dialogshow\"\n     *     data-event-click.prevent=\"emitBusEvent\"\n     *     data-tau=\"promotion_details_cta\"\n     *     data-modal-config='{\n     *         \"content\": \"${promotion.detailsJSONSafe}\",\n     *         \"attributes\": {\n     *             \"data-tau\": \"promotion_details_dialog\"\n     *         },\n     *         \"ariaLabel\": \"${Resource.msg('promotion.details.label','product',null)}\"\n     *     }'\n     * >\n     *     ${Resource.msg('promotion.details','product',null)}\n     * </button>\n     *\n     * @example <caption>Global Modal widget triggering via code in {@link ProductTile} widget (synchronous operation)</caption>\n     * ...\n     * showQuickView(button) {\n     *     this.eventBus().emit('dialogshow', {\n     *         url: button.data('url'),\n     *         wrapperClasses: 'm-quick_view',\n     *         ariaLabel: this.prefs().productName,\n     *         attributes: {\n     *             'data-tau-unique': 'quick_view_dialog'\n     *         }\n     *     });\n     *     this.onModalShow();\n     * }\n     * ...\n     */\n    class GlobalModal extends Modal {\n        /**\n         * @description Widget initialisation logic\n         * @listens module:events#dialogshow\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.eventBus().on('dialogshow', 'showModal');\n        }\n\n        /**\n         * @description Shows modal. Depending on needs, content for modal could be loaded via URL, or fetched from parameters.\n         * Input parameter also contains setup for modal, like container classes, action buttons, heading text etc.\n         * @example <caption>An object with expected parameters</caption>\n         * {\n         *      showActions: true,\n         *      headerText: 'Header text',\n         *      actions: [{\n         *          text: 'Cancel',\n         *          handler: 'cancel',\n         *          classes: 'm-outline'\n         *      },{\n         *          text: 'Confirm',\n         *          handler: 'cancel',\n         *          lastFocusElement: true\n         *      }],\n         *      wrapperClasses: 'class1 class2',\n         *      ariaLabel: 'test aria label',\n         *      url: 'http://www.google.com',\n         *      contentType: 'json'\n         * }\n         * In case if input parameter is an instance of {@link EmitBusEvent},\n         * modal setup properties will be taken from `data-modal-config`\n         * attribute of a {@link EmitBusEvent} widget.\n         * @emits GlobalModal#show\n         * @param {object|InstanceType<EmitBusEvent>} templateData Input object for modal popup. See example above.\n         * @returns {void}\n         */\n        showModal(templateData) {\n            let modalData = templateData;\n\n            // @ts-ignore\n            const EmitBusEventClass = /** @type {EmitBusEventClass} */(this.getConstructor('emitBusEvent'));\n            if (templateData instanceof EmitBusEventClass) {\n                modalData = {\n                    url: templateData.data('url')\n                };\n                const modalConfig = templateData.data('modalConfig');\n                if (modalConfig && Object.keys(modalConfig).length) {\n                    modalData = Object.assign(modalData, modalConfig);\n                }\n            }\n\n            if (modalData.content) {\n                super.showModal(modalData);\n                /**\n                 * @description Event dispatched, when Global Modal was shown\n                 * @event GlobalModal#show\n                 */\n                this.emit('show');\n                return;\n            }\n\n            if (!modalData.url) {\n                return;\n            }\n\n            if (modalData.contentType === 'json') {\n                getJSONByUrl(modalData.url, undefined, true).then(res => {\n                    if (Object.keys(res).length) {\n                        modalData = Object.assign(modalData, res);\n                        super.showModal(modalData);\n                        this.emit('show');\n                    }\n                });\n            } else {\n                getContentByUrl(modalData.url).then(res => {\n                    modalData = Object.assign(modalData, { content: res });\n                    super.showModal(modalData);\n                    this.emit('show');\n                });\n            }\n        }\n    }\n\n    return GlobalModal;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof Label} Label widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Label\n     * @augments Widget\n     * @classdesc Represents Label component with next features:\n     * 1. Widget could be used in different context, where we need to display dynamic content depending on different global events using mustache template\n     * 2. Allow being enabled/disabled\n     * 3. Allow managing text/value/error messages on the referenced element\n     * @example <caption>Example of Label widget usage with checkout.step.updated event listener</caption>\n     * <div\n     *     data-widget=\"label\"\n     *     data-listen-events=\"checkout.step.updated\"\n     *     data-widget-event-click=\"submitCurrentStep\"\n     * >\n     *     <script data-ref=\"template\" type=\"template/mustache\">\n     *         <div\n     *             data-widget=\"label\"\n     *             data-listen-events=\"checkout.step.updated\"\n     *             data-widget-event-click=\"submitCurrentStep\"\n     *         >\n     *             {{${'#'}shipping}}\n     *                 <button data-event-click=\"handleClick\" type=\"submit\" name=\"submit\" value=\"submit-shipping\">\n     *                     ${Resource.msg('button.next.payment', 'checkout', null)}\n     *                 </button>\n     *             {{/shipping}}\n     *             {{${'#'}billing}}\n     *                 <button data-event-click=\"handleClick\" type=\"submit\" name=\"submit\" value=\"submit-payment\">\n     *                     ${Resource.msg('button.next.place.order', 'checkout', null)}\n     *                 </button>\n     *             {{/billing}}\n     *             {{${'#'}summary}}\n     *                 <button data-event-click=\"handleClick\" type=\"submit\" name=\"submit\" value=\"place-order\">\n     *                     ${Resource.msg('button.next.place.order', 'checkout', null)}\n     *                 </button>\n     *             {{/summary}}\n     *         </div>\n     *     </script>\n     * </div>\n     * @property {string} data-widget - Widget name `label`\n     * @property {string} data-listen-events - Events used to update template\n     * Listen to global bus events, separated by comma and updates content based on event data\n     * @property {string} data-widget-event-click - Triggers parent's method on widget's elements click\n     */\n    class Label extends Widget {\n        prefs() {\n            return {\n                listenEvents: '',\n                classesError: 'm-error',\n                classesActive: 'active',\n                target: 'self',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget logic initialization\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            if (!this.id) {\n                this.id = String(this.config.id);\n            }\n            this.shown = true;\n\n            if (this.config.hidden || this.ref('self').hasAttr('hidden')) {\n                this.hide();\n            } else {\n                this.show();\n            }\n            this.disabled = this.ref('self').attr('disabled') === 'disabled';\n\n            const listenEvents = this.config.listenEvents;\n            if (typeof listenEvents === 'string' && listenEvents) {\n                listenEvents.split(',').forEach(eventName => {\n                    this.eventBus().on(eventName.trim(), 'updateTemplate');\n                });\n            }\n        }\n\n        /**\n         * @description Update template with passed data\n         * @param {object} data data to render, usually executes with the data, streamed down with an event\n         * @returns {Promise<any>} resolved if rendered or rejected if no found template promise\n         */\n        updateTemplate(data = {}) {\n            return this.render(undefined, data);\n        }\n\n        /**\n         * @description get Label value\n         * @returns {string|RefElement} value of widget's target referenced attribute\n         */\n        getValue() {\n            return this.ref(this.prefs().target).val();\n        }\n\n        /**\n         * @description set Label value\n         * @param {(string|number|boolean|undefined)} val - Value to set into widget's target referenced attribute\n         * @returns {void}\n         */\n        setValue(val = '') {\n            this.setError();\n            this.ref(this.prefs().target).val(val);\n        }\n\n        /**\n         * @description get Label text\n         * @returns {string|RefElement} text of widget's target referenced attribute\n         */\n        getText() {\n            return this.ref(this.prefs().target).getText();\n        }\n\n        /**\n         * @description Set Label text\n         * @param {(string|undefined)} val - Value to set as a text of the widget's target referenced attribute\n         * @returns {InstanceType<Label>} result\n         */\n        setText(val = '') {\n            const currentText = this.getText();\n            this.ref(this.prefs().target).removeClass(this.prefs().classesError);\n            if (currentText !== val) {\n                this.ref(this.prefs().target).setText(val);\n            }\n            return this;\n        }\n\n        /**\n         * @description Sets `err` as a widget's target referenced attribute text\n         * and if `err` is not empty - adds error class to widget's target referenced attribute\n         * @param {(string|undefined)} err - Value to set as a text of the widget's target referenced attribute\n         * @returns {InstanceType<Label>} result\n         */\n        setError(err = '') {\n            this.setText(err);\n            if (err) {\n                this.ref(this.prefs().target).addClass(this.prefs().classesError);\n            }\n            return this;\n        }\n\n        /**\n         * @description Method to mark element as `active`\n         * @returns {Label} result\n         */\n        activate() {\n            this.ref('self').addClass(this.prefs().classesActive);\n            return this;\n        }\n\n        /**\n         * @description Method to mark element as `inactive`\n         * @returns {Label} result\n         */\n        deactivate() {\n            this.ref('self').removeClass(this.prefs().classesActive);\n            return this;\n        }\n\n        /**\n         * @description Disable Label\n         * @returns {void}\n         */\n        disable() {\n            this.disabled = true;\n            this.ref('self').disable();\n        }\n\n        /**\n         * @description Enable Label\n         * @returns {void}\n         */\n        enable() {\n            this.disabled = false;\n            this.ref('self').enable();\n        }\n\n        /**\n         * @description Emit click event\n         * @emits Label#click\n         * @returns {void}\n         */\n        handleClick() {\n            /**\n             * @description Event to handle click\n             * @event Label#click\n             */\n            this.emit('click');\n        }\n    }\n\n    return Label;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof ListAccessibility} ListAccessibility widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ListAccessibility\n     * @augments Widget\n     * @classdesc Represents ListAccessibility component that implement Basic Accessibility requirements for list of elements.\n     * Has next features:\n     * 1. Define list of focusable elements inside current widget\n     * 2. Allow set focus to item or current item\n     * 3. Allow set focus to first/last item\n     * 4. Allow set focus to next/previous item\n     *\n     * Widget should be not used as standalone widget, it should be mixed to other widgets (see {@tutorial WidgetsMixinsStrategy})\n     */\n    class ListAccessibility extends Widget {\n        prefs() {\n            return {\n                itemLink: 'itemLink',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Define Items\n         * @param {InstanceType<Widget>} [currentItem] Current Item\n         * @returns {void}\n         */\n        defineItems(currentItem) {\n            if (this.items) {\n                this.focusableItems = [];\n                this.focusableItems = this.items.filter((item) => {\n                    return item.isShown() && 'focus' in item;\n                });\n\n                if (this.focusableItems.includes(currentItem)) {\n                    this.currentItem = currentItem;\n                } else {\n                    this.currentItem = this.focusableItems[0];\n                }\n\n                this.firstItem = this.focusableItems[0];\n                this.lastItem = this.focusableItems[this.focusableItems.length - 1];\n            }\n        }\n\n        /**\n         * @description Set focus to item\n         * @param {HTMLElement|undefined} item item\n         * @returns {void}\n         */\n        setFocusToItem(item) {\n            if (item) {\n                item.focus();\n                this.currentItem = item;\n            }\n        }\n\n        /**\n         * @description Set focus to current item\n         * @returns {void}\n         */\n        setFocusToCurrentItem() {\n            this.setFocusToItem(this.currentItem);\n        }\n\n        /**\n         * @description Set focus to first item\n         * @returns {void}\n         */\n        setFocusToFirstItem() {\n            this.setFocusToItem(this.firstItem);\n        }\n\n        /**\n         * @description Set focus to last item\n         * @returns {void}\n         */\n        setFocusToLastItem() {\n            this.setFocusToItem(this.lastItem);\n        }\n\n        /**\n         * @description Get item index\n         * @param {InstanceType<Widget>} item item widget\n         * @returns {number} Item index\n         */\n        getItemIndex(item) {\n            return this.focusableItems ? this.focusableItems.indexOf(item) : -1;\n        }\n\n        /**\n         * @description Set focus to next item\n         * @returns {void}\n         */\n        setFocusToNextItem() {\n            if (this.focusableItems) {\n                const newItem = this.currentItem === this.lastItem\n                    ? this.firstItem\n                    : this.focusableItems[this.getItemIndex(this.currentItem) + 1];\n\n                this.setFocusToItem(newItem);\n            }\n        }\n\n        /**\n         * @description Set focus to previous item\n         * @returns {void}\n         */\n        setFocusToPreviousItem() {\n            if (this.focusableItems) {\n                const newItem = this.currentItem === this.firstItem\n                    ? this.lastItem\n                    : this.focusableItems[this.getItemIndex(this.currentItem) - 1];\n\n                this.setFocusToItem(newItem);\n            }\n        }\n\n        /**\n         * @description Set Focus\n         * @returns {void}\n         */\n        focus() {\n            this.has(this.prefs().itemLink, (itemLink) => {\n                itemLink.focus();\n            });\n        }\n    }\n\n    return ListAccessibility;\n}\n","import { dialogMgr } from 'widgets/toolbox/dialogMgr';\n\nconst ESCAPE_CODE = 27;\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/EmitBusEvent').default>} EmitBusEvent\n */\n\n/**\n * @description Modal implementation\n * @param {ReturnType<typeof import('widgets/global/AccessibilityFocusTrapMixin').default>} AccessibilityFocusTrapMixin mixin\n * @returns {typeof Modal} Modal class\n */\nexport default function (AccessibilityFocusTrapMixin) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Modal\n     * @augments AccessibilityFocusTrapMixin\n     * @classdesc Generic modal popups implementation.<br/>\n     * - It renders a modal popup with grayed background. Can be closed by clicking outside modal.\n     * - Allows to manage multi-modal depth structure (move one modal behind of another) (indirectly, bu using {@link dialogMgr}).\n     * - If Modal need to be inited only on some viewport can be used modificators (sm,md,lg,xl). For example data-widget.sm.md=\"modal\"</br>\n     * Note that in this case need also add same modificator to sub events in html elements. This can be easily done via \"dialogViewtypes\" variable in ISML template (see example below).<br/>\n     * Don't forget clear this variable after dialog closing tag.\n     * @property {string} data-widget - Widget name `modal`\n     * @property {boolean} data-disable-rendering - Disable rendering flag\n     * @property {string} data-classes-extra - Extra classes\n     * @property {string} data-classes-global-dialog - a set of space separated addiptional modal classes\n     * @property {string} data-classes-show - classes added to shown modal\n     * @property {string} data-classes-top-dialog - top modal class in modals hierarhy depth\n     * @property {string} data-classes-active - active modal classes\n     * @property {string} data-ref-container - modal reference container\n     * @property {string} data-ref-dialog - dialog reference container\n     * @property {string} data-classes-extra - extra classes for dialog\n     * @property {boolean} data-click-out-side - `true` if needed to close modal by clicking outside it\n     * @property {boolean} data-close-by-escape - `true` if needed to close modal by using `Esc` button\n     * @example <caption>Example of typical Modal widget</caption>\n     * <div data-widget=\"modal\">\n     *     // dialogViewtypes need only in case when modal should be inited on some viewports\n     *     <isset name=\"dialogViewtypes\" value=\"sm.md\" scope=\"page\" />\n     *\n     *     <div data-ref=\"container\" data-event-click.self=\"closeModal\"></div>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *     <div class=\"b-dialog-header\">\n     *   <div\n     *       class=\"b-dialog m-quick_view\"\n     *       id=\"editProductModal\"\n     *       data-ref=\"container\"\n     *       data-event-click.self=\"closeModal\"\n     *   >\n     *       <div\n     *           class=\"b-dialog-window\"\n     *           role=\"dialog\"\n     *           data-ref=\"dialog\"\n     *           aria-modal=\"true\"\n     *           aria-labelledby=\"editProductModalTitle\"\n     *       >\n     *           <div class=\"b-dialog-header\">\n     *               <button\n     *                   class=\"b-dialog-close\"\n     *                   title=\"${Resource.msg('common.close','common',null)}\"\n     *                   aria-label=\"${Resource.msg('common.close','common',null)}\"\n     *                   type=\"button\"\n     *                   data-dismiss=\"modal\"\n     *                   data-ref=\"closeEditPopup\"\n     *                   data-event-click.prevent=\"cancel\"\n     *                   data-tau=\"edit_product_dialog_close\"\n     *               >\n     *                   <isinclude template=\"/common/icons/standalone/close\" />\n     *               </button>\n     *           </div>\n     *           {{${'#'}body}}\n     *               <div class=\"b-dialog-body\">\n     *                   {{&body}}\n     *               </div>\n     *           {{/body}}\n     *           {{${'#'}footer}}\n     *               <div class=\"b-dialog-footer\">\n     *                   {{&footer}}\n     *               </div>\n     *           {{/footer}}\n     *       </div>\n     *   </div>\n     *     </script>\n     * </div>\n     */\n    class Modal extends AccessibilityFocusTrapMixin {\n        prefs() {\n            return {\n                classesGlobalDialog: 'm-has_dialog',\n                classesShow: 'm-opened',\n                classesTopDialog: 'm-top_dialog',\n                classesActive: 'm-active',\n                refContainer: 'container',\n                refDialog: 'dialog',\n                classesExtra: '',\n                clickOutSide: true,\n                disableRendering: false,\n                closeByEscape: true,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            this.onDestroy(() => {\n                const refDialog = this.ref(this.prefs().refDialog);\n                refDialog.attr('role', false);\n                refDialog.attr('aria-modal', false);\n            });\n        }\n\n        /**\n         * @description Show Modal and puts it to the top of opened modals hierarhy.\n         * @param {object|undefined} [templateData] data to be rendered in template\n         * @param {Function|undefined} [cb] optional callback\n         * @returns {void}\n         */\n        showModal(templateData, cb) {\n            const container = this.ref(this.prefs().refContainer);\n            const classes = [this.prefs().classesShow];\n\n            if (this.prefs().classesExtra) {\n                classes.push(this.prefs().classesExtra);\n            }\n\n            this.backFocusElement = /** @type {HTMLElement} */(document.activeElement);\n\n            let renderedPromise = Promise.resolve();\n\n            if (templateData && !this.prefs().disableRendering) {\n                renderedPromise = this.render(undefined, templateData, container);\n            }\n\n            renderedPromise.then(() => {\n                this.onBeforeShowModal(templateData);\n                dialogMgr.openDialog(this);\n                container.addClass(classes.join(' '));\n                this.show();\n\n                if (cb && typeof cb === 'function') {\n                    cb();\n                } else {\n                    this.afterShowModal();\n                }\n            });\n        }\n\n        /**\n         * @description Open a dialog. This method is executed explicitly or implicitly from `showModal` method.\n         * @returns {void}\n         */\n        open() {\n            const dialog = this.ref(this.prefs().refDialog);\n            dialog.attr('role', 'dialog');\n            dialog.attr('aria-modal', 'true');\n            this.addGlobalDialogClass();\n            this.addListeners();\n            dialog.addClass(this.prefs().classesActive);\n            dialog.addClass(this.prefs().classesTopDialog);\n        }\n\n        /**\n         * @description Move Behind current modal in opened modals stack.\n         * @returns {void}\n         */\n        moveBehind() {\n            this.cleanUpListeners();\n            this.ref(this.prefs().refDialog).removeClass(this.prefs().classesTopDialog);\n        }\n\n        /**\n         * @description Move To Top current modal in opened modals stack.\n         * @returns {void}\n         */\n        moveToTop() {\n            this.addListeners();\n            this.ref(this.prefs().refDialog).addClass(this.prefs().classesTopDialog);\n        }\n\n        /**\n         * @description Close modal.\n         * @returns {void}\n         */\n        close() {\n            this.cleanUpListeners();\n            this.ref(this.prefs().refDialog).removeClass([this.prefs().classesTopDialog, this.prefs().classesActive].join(' '));\n        }\n\n        /**\n         * @description Add Global Dialog Class\n         * @returns {void}\n         */\n        addGlobalDialogClass() {\n            const html = this.ref('html');\n\n            if (!html.hasClass(this.prefs().classesGlobalDialog)) {\n                html.addClass(this.prefs().classesGlobalDialog);\n            }\n        }\n\n        /**\n         * @description Remove Global Dialog Class\n         * @returns {void}\n         */\n        removeGlobalDialogClass() {\n            this.ref('html').removeClass(this.prefs().classesGlobalDialog);\n        }\n\n        /**\n         * @description Close Modal\n         * @returns {void}\n         */\n        closeModal() {\n            const classes = [this.prefs().classesShow];\n\n            if (this.prefs().classesExtra) {\n                classes.push(this.prefs().classesExtra);\n            }\n\n            this.ref(this.prefs().refContainer).removeClass(classes.join(' '));\n\n            dialogMgr.closeDialog();\n\n            if (this.backFocusElement) {\n                this.backFocusElement.focus();\n                this.backFocusElement = null;\n            }\n\n            if (!this.prefs().disableRendering) {\n                this.ref(this.prefs().refContainer).empty();\n            }\n\n            this.onAfterCloseModal();\n        }\n\n        /**\n         * @description Clean Up Listeners\n         * @returns {void}\n         */\n        cleanUpListeners() {\n            if (this.escHandler) {\n                this.escHandler();\n                this.escHandler = null;\n            }\n\n            if (this.clickOutsideHandler) {\n                this.clickOutsideHandler();\n                this.clickOutsideHandler = null;\n            }\n        }\n\n        /**\n         * @description Lifecycle hook `onAfterCloseModal` executes after closing modal window.\n         * Used to:\n         * - remove modal DOM element attributes as per modal setup\n         * @returns {void}\n         */\n        onAfterCloseModal() {\n            if (this.attributes) {\n                Object.keys(this.attributes).forEach((key) => {\n                    this.ref('container').attr(key, false);\n                });\n            }\n        }\n\n        /**\n         * @description Lifecycle hook `onBeforeShowModal` executes before opening modal window.\n         * Used to:\n         * - add modal DOM element attributes as per modal setup\n         * @param {object|InstanceType<EmitBusEvent>} [modalData] Input object for modal popup.\n         * @returns {void}\n         */\n        onBeforeShowModal(modalData = {}) {\n            if (modalData.attributes) {\n                this.attributes = modalData.attributes;\n\n                Object.keys(modalData.attributes).forEach((key) => {\n                    this.ref('container').attr(key, modalData.attributes[key]);\n                });\n            }\n        }\n\n        /**\n         * @description Cancel Handler\n         * @emits Modal#cancel\n         * @returns {void}\n         */\n        cancel() {\n            this.closeModal();\n            /**\n             * @description Event dispatched, when modal was closed\n             * @event Modal#cancel\n             */\n            this.emit('cancel');\n        }\n\n        /**\n         * @description Add Click Outside / Close by ESC Listener\n         * @returns {void}\n         */\n        addListeners() {\n            if (this.prefs().clickOutSide) {\n                this.clickOutsideHandler = this.ev('click', (_, event) => {\n                    if (event.target === this.ref(this.prefs().refContainer).get()) {\n                        this.cancel();\n                    }\n                }, this.ref(this.prefs().refContainer).get()).pop();\n            }\n\n            if (this.prefs().closeByEscape) {\n                this.escHandler = this.ev('keyup', (_, event) => {\n                    const kdbEvent = /** @type {KeyboardEvent} */(event);\n                    if (kdbEvent.keyCode === ESCAPE_CODE) {\n                        this.cancel();\n                    }\n                }, window).pop();\n            }\n        }\n\n        /**\n         * @description Shows modal in a DOM\n         * @returns {this} this obj - current instance for chaining\n         */\n        show() {\n            super.show();\n            this.ref(this.prefs().refContainer).show();\n            return this;\n        }\n\n        /**\n         * @description Hide modal in DOM\n         * @returns {this} this obj - current instance for chaining\n         */\n        hide() {\n            this.ref(this.prefs().refContainer).hide();\n            return this;\n        }\n    }\n\n    return Modal;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/global/Button').default>} Button\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base ProcessButton implementation\n * @param {Button} Button Base widget for extending\n * @returns {typeof ProcessButton} Process Button class\n */\nexport default function (Button) {\n    /**\n     * @class ProcessButton\n     * @augments Button\n     * @classdesc ProcessButton widget, which could be used in different contextes (html-markup, inside widgets etc).\n     * <br>Could be also used to trigger parent's widget method\n     * @property {string} data-widget - Widget name `processButton`\n     * @property {string} data-widget-event-click - Event listener to call Parent's widget method\n     * @property {string} data-event-click - Event listener method `handleClick` for click event on widget\n     * @property {string} data-processing-label - Processing Label\n     * @property {string} data-processing-class - Processiong Class\n     * @example\n     * // use this code to display widget\n     * <button type=\"submit\" class=\"btn btn-block btn-primary\"\n     *     data-widget=\"button\"\n     *     data-widget-event-click=\"handleSubmit\"\n     *     data-event-click.prevent=\"handleClick\"\n     *     data-processing-label=\"${Resource.msg('button.processing', 'common', null)}\"\n     *     data-processing-class=\"m-processing\"\n     *     data-id=\"submitButton\"\n     * >\n     *     <div class=\"container\">\n     *         ${Resource.msg('button.text.loginform', 'login', null)}\n     *     </div>\n     * </button>\n     */\n    class ProcessButton extends Button {\n        prefs() {\n            return {\n                processingLabel: 'processing...',\n                processingClass: 'm-processing',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Start Progress\n         * @param {string} [val] - Value to set as a text of the Button\n         * @returns {void}\n         */\n        startProcess(val) {\n            this.busy();\n            this.currentText = this.getText();\n            this.setText(val || this.prefs().processingLabel);\n            this.ref('self').addClass(this.prefs().processingClass);\n        }\n\n        /**\n         * @description Stop Progress\n         * @param {string} [val] - Value to set as a text of the Button\n         * @returns {void}\n         */\n        stopProcess(val) {\n            this.unbusy();\n            this.setText(val || this.currentText);\n            this.ref('self').removeClass(this.prefs().processingClass);\n        }\n\n        /**\n         * @description Get Text\n         * @returns {string} Button Text\n         */\n        getText() {\n            return this.ref('container').getText();\n        }\n\n        /**\n         * @description Set Text\n         * @param {(string|undefined)} val - Value to set as a text of the Button\n         * @returns {refElement} Reference element\n         */\n        setText(val = '') {\n            return this.ref('container').setText(val);\n        }\n    }\n\n    return ProcessButton;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Base SoftKeyboardToggleMixin implementation.\n * <br>Hides software keyboard on touches outside the keyboard to avoid iOS issues.\n * <br>This class is not intended to have a separate DOM representation.\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof SoftKeyboardToggleMixin} SoftKeyboardToggleMixin class\n */\nexport default function (Widget) {\n    /**\n     * @class SoftKeyboardToggleMixin\n     * @augments Widget\n     * @property data-input - Target input\n     */\n    class SoftKeyboardToggleMixin extends Widget {\n        prefs() {\n            return {\n                input: '',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            const input = this.ref('input').get();\n            if (input) {\n                this.ev('focus', this.hideKeyboardOnOutsideTouch, input);\n                this.ev('blur', this.hideKeyboardReset, input);\n            }\n        }\n\n        hideKdb() {\n            const input = this.ref('input').get();\n            if (input) {\n                input.blur();\n            }\n        }\n\n        hideKeyboardOnOutsideTouch() {\n            this.touchStartDisposables = this.ev('touchstart', this.hideKdb, window);\n        }\n\n        hideKeyboardReset() {\n            const disposables = this.touchStartDisposables;\n\n            if (typeof disposables !== 'undefined') {\n                disposables.forEach(fn => fn());\n            }\n        }\n    }\n\n    return SoftKeyboardToggleMixin;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof StickyHeader} StickyHeader widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class StickyHeader\n     * @augments Widget\n     * @classdesc StickyHeader helper. Should be on element before StickyHeader to observe intersection\n     * Could be reimplemented with getBoundClientRect.top and scroll listener.\n     * The main purpose is to define anchor for StickyHeader and toggle StickyHeader.\n     * @example <caption>Example of StickyHeader widget usage</caption>\n     * <div data-widget=\"stickyHeader\"></div>\n     */\n    class StickyHeader extends Widget {\n        prefs() {\n            return {\n                classesShow: 'b-header_stuck',\n                dataTau: 'header_sticky',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            const stickyHeader = this.ref('self').get();\n            if (!stickyHeader) {\n                return;\n            }\n            this.observer = new IntersectionObserver(([entry]) => this.toggleStickyState(entry), { threshold: 1 });\n            this.observer.observe(stickyHeader);\n        }\n\n        /**\n         * @description Toggle sticky header state\n         * @param {object} entry Anchor for apply sticky header\n         * @returns {void}\n         */\n        toggleStickyState(entry) {\n            document.body.classList.toggle(this.prefs().classesShow, entry.intersectionRatio < 1);\n            if (entry.intersectionRatio < 1) {\n                document.body.setAttribute('data-tau', this.prefs().dataTau);\n            } else {\n                document.body.removeAttribute('data-tau');\n            }\n        }\n\n        /**\n         * @description Destroy widget logic\n         * @returns {void}\n         */\n        destroy() {\n            const stickyHeader = this.ref('self').get();\n            if (this.observer && stickyHeader) {\n                this.observer.unobserve(stickyHeader);\n                this.observer.disconnect();\n            }\n        }\n    }\n\n    return StickyHeader;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof SwipeToClose} SwipeToClose widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class SwipeToClose\n     * @augments Widget\n     * @classdesc Represents SwipeToClose component that implement logic for closing panel by swipe gesture.\n     * It has next features:\n     * 1. Allow set panel close direction (left/right)\n     * 2. Handle touch events for smooth panel closing\n     *\n     * @example <caption>Example of SwipeToClose widget usage with left drag direction</caption>\n     * <div\n     *    id=\"main-navigation\"\n     *    class=\"b-menu_panel\"\n     *    aria-labelledby=\"main-navigation-toggle\"\n     *    data-widget=\"swipeToClose\"\n     *    data-panel-container=\"panelContainer\"\n     *    data-drag-direction-x=\"left\"\n     * >\n     *      <div\n     *          data-ref=\"dialog\" class=\"b-menu_panel-inner\"\n     *          data-event-touchstart.sm.md=\"handleTouchStart\"\n     *      >\n     *          <div data-ref=\"panelContainer\" class=\"b-menu_subpanel m-active_level_1\">\n     *              ... widget content\n     *          </div>\n     *      </div>\n     * </div>\n     * @property {string} data-widget - Widget name `swipeToClose`\n     * @property {string} data-menu - reference id of child element (inner container), value of its data-ref attribute\n     * @property {string} data-panel-container - reference id of child element (panels wrapper), value of its data-ref attribute\n     * @property {string} data-drag-direction-x - whether closing swipe should be performed right to left (value 'left') or left to right (value 'right').\n     */\n    class SwipeToClose extends Widget {\n        prefs() {\n            return {\n                menu: 'dialog',\n                panelContainer: 'panelContainer',\n                dragDirectionX: 'left',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget logic initialization\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.dragDirectionX = this.prefs().dragDirectionX === 'left' ? 1 : -1;\n        }\n\n        /**\n         * @description TouchStart Event handler\n         * @listens dom#touchstart\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {TouchEvent} evt  Event object\n         * @returns {void}\n         */\n        handleTouchStart(_, evt) {\n            // @ts-ignore\n            this.touchMoveDisposable = this.ev('touchmove', this.handleTouchMove, this.ref(this.prefs().menu).get());\n            this.touchEndDisposable = this.ev('touchend', this.handleTouchEnd, this.ref(this.prefs().menu).get());\n            this.touchCancelDisposable = this.ev('touchcancel', this.handleTouchCancel, this.ref(this.prefs().menu).get());\n            this.startTime = new Date().getTime();\n            const coordX = evt.touches[0].pageX || 0;\n            const coordY = evt.touches[0].pageY || 0;\n            this.isMoving = false;\n            this.startX = coordX;\n            this.startY = coordY;\n            this.currentX = coordX;\n            this.currentY = coordY;\n            this.touchStart(this.startX, this.startY);\n        }\n\n        /**\n         * @description TouchMove Event handler\n         * @listens dom#touchmove\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {TouchEvent} evt  Event object\n         * @returns {void}\n         */\n        handleTouchMove(_, evt) {\n            this.isMoving = true;\n            this.currentX = evt.touches[0].pageX;\n            this.currentY = evt.touches[0].pageY;\n            // @ts-ignore\n            const translateX = this.currentX - this.startX;\n            // @ts-ignore\n            const translateY = this.currentY - this.startY;\n\n            this.touchMove(evt, this.currentX, this.currentY, translateX, translateY);\n        }\n\n        /**\n         * @description TouchEnd Event handler\n         * @listens dom#touchend\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {Event} evt  Event object\n         * @returns {void}\n         */\n        // eslint-disable-next-line no-unused-vars\n        handleTouchEnd(_, evt) {\n            // @ts-ignore\n            const translateX = this.dragDirectionX * (this.currentX - this.startX);\n            // @ts-ignore\n            const translateY = this.currentY - this.startY;\n            // @ts-ignore\n            const timeTaken = (new Date().getTime() - this.startTime);\n\n            // @ts-ignore\n            this.touchEnd(this.currentX, this.currentY, translateX, translateY, timeTaken);\n        }\n\n        /**\n         * @description TouchCancel Event handler\n         * @listens dom#touchcancel\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {Event} evt  Event object\n         * @returns {void}\n         */\n        // eslint-disable-next-line no-unused-vars\n        handleTouchCancel(_, evt) {\n            this.disposableListeners();\n        }\n\n        /**\n         * @description Preparing panel to move\n         * @param {number} startX x coordinate of where the finger is placed in the DOM\n         * @param {number} startY  y coordinate of where the finger is placed in the DOM\n         * @returns {void}\n         */\n        touchStart(startX, startY) {\n            const menu = this.ref(this.prefs().menu);\n            this.isOpen = menu !== null;\n            this.toggleTransition(menu, true);\n            this.toggleTransition(this.ref(this.prefs().panelContainer), true);\n            const menuNode = menu.get();\n            this.menuWidth = menuNode ? menuNode.offsetWidth : 0;\n            this.lastX = startX;\n            this.lastY = startY;\n            if (this.isOpen) {\n                this.moveX = 0;\n            } else {\n                this.moveX = -this.menuWidth;\n            }\n            this.dragDirection = '';\n        }\n\n        /**\n         * @description Update UI\n         * @returns {void}\n         */\n        updateUi() {\n            if (this.isMoving) {\n                const element = this.ref(this.prefs().menu).get();\n                if (element) { element.style.transform = 'translateX(' + this.moveX + 'px)'; }\n                window.requestAnimationFrame(this.updateUi.bind(this));\n            }\n        }\n\n        /**\n         * @description Toggle menu\n         * @param {number} translateX x coordinate of where the finger is placed in the viewport\n         * @returns {void}\n         */\n        toggleMenu(translateX) {\n            const menu = this.ref(this.prefs().menu);\n            const menuNode = menu.get();\n            if (menuNode) { menuNode.style.transform = ''; }\n            this.toggleTransition(menu, false);\n            if (translateX < 0 || !this.isOpen) {\n                this.closePanel();\n                this.isOpen = false;\n            } else {\n                this.openPanel(false);\n                this.isOpen = true;\n            }\n        }\n\n        /**\n         * @description Open Menu Panel.Interface can be override\n         * @param {object} data data\n         * @returns {void}\n         */\n        // eslint-disable-next-line no-unused-vars\n        openPanel(data) {\n            throw new Error('Method not implemented.');\n        }\n\n        /**\n         * @description Close Menu Panel.Interface can be override\n         * @returns {void}\n         */\n        closePanel() {\n            throw new Error('Method not implemented.');\n        }\n\n        /**\n         * @description Toggle transition class\n         * @param {RefElement} element DOM element\n         * @param {boolean} isTransitionOn transition flag\n         * @returns {void}\n         */\n        toggleTransition(element, isTransitionOn) {\n            if (isTransitionOn) {\n                element.addClass('m-no_transition');\n            } else {\n                element.removeClass('m-no_transition');\n            }\n        }\n\n        /**\n         * @description calculate opacity\n         * @returns {number} New opacity value\n         */\n        calculateOpacity() {\n            // @ts-ignore\n            const percentageBeforeDif = (Math.abs(this.moveX) * 100) / this.menuWidth;\n            const percentage = 100 - percentageBeforeDif;\n            return (percentage / 100);\n        }\n\n        /**\n         * @description calculate opacity\n         * @param {RefElement} element Ref element\n         * @param {any} opacity New opacity value\n         * @returns {void}\n         */\n        setNewOpacity(element, opacity) {\n            const htmlElement = element.get();\n            if (!htmlElement) {\n                return;\n            }\n            htmlElement.style.setProperty('--backdrop-opacity', opacity);\n        }\n\n        /**\n         * @description Disposable listeners\n         * @returns {void}\n         */\n        disposableListeners() {\n            if (this.touchMoveDisposable) {\n                this.touchMoveDisposable.forEach(disposable => disposable());\n                delete this.touchMoveDisposable;\n            }\n            if (this.touchEndDisposable) {\n                this.touchEndDisposable.forEach(disposable => disposable());\n                delete this.touchEndDisposable;\n            }\n            if (this.touchCancelDisposable) {\n                this.touchCancelDisposable.forEach(disposable => disposable());\n                delete this.touchCancelDisposable;\n            }\n        }\n\n        /**\n         * @description calculate new postion.Set drag direction\n         * @param {Event} evt Event object\n         * @param {number} currentX current X position\n         * @param {number} currentY current Y position\n         * @param {number} translateX new position X value\n         * @param {number} translateY new position Y value\n         * @returns {void}\n         */\n        touchMove(evt, currentX, currentY, translateX, translateY) {\n            if (!this.dragDirection) {\n                if (Math.abs(translateX) >= Math.abs(translateY)) {\n                    this.dragDirection = 'horizontal';\n                } else {\n                    this.dragDirection = 'vertical';\n                }\n                window.requestAnimationFrame(this.updateUi.bind(this));\n            }\n            if (this.dragDirection === 'vertical') {\n                this.lastX = currentX;\n                this.lastY = currentY;\n            } else {\n                // @ts-ignore\n                const movedPath = this.dragDirectionX * (this.moveX + (currentX - this.lastX));\n                // @ts-ignore\n                if (movedPath < 0 && movedPath > -this.menuWidth) {\n                    // @ts-ignore\n                    this.moveX += currentX - this.lastX;\n                }\n                this.lastX = currentX;\n                this.lastY = currentY;\n                this.setNewOpacity(this.ref('html'), this.calculateOpacity());\n            }\n        }\n\n        /**\n         * @description Open/Close panel based on position. Remove transition classes. Remove event listeners.\n         * @param {number} currentX current X position\n         * @param {number} currentY current Y position\n         * @param {number} translateX new position X value\n         * @param {number} translateY new position Y value\n         * @param {number} timeTaken timediff between touch start and touch end\n         * @returns {void}\n         */\n        touchEnd(currentX, currentY, translateX, translateY, timeTaken) {\n            const velocity = 0.3;\n            if (this.isMoving && this.isOpen) {\n                this.isMoving = false;\n                // @ts-ignore\n                if ((translateX < (-this.menuWidth) / 2) || (Math.abs(translateX) / timeTaken > velocity)) {\n                    this.toggleMenu(translateX);\n                } else {\n                    this.toggleMenu(0);\n                }\n            }\n            this.toggleTransition(this.ref(this.prefs().menu), false);\n            this.toggleTransition(this.ref(this.prefs().panelContainer), false);\n            this.setNewOpacity(this.ref('html'), '');\n            this.disposableListeners();\n        }\n    }\n\n    return SwipeToClose;\n}\n","/**\n * @param {typeof import('widgets/Widget').default} Widget - widget for extending\n * @returns {typeof TabPanel} Tab Panel widget\n */\nexport default function (Widget) {\n    /**\n     * @class TabPanel\n     * @augments Widget\n     * @property {string} data-widget - Widget name `tabPanel`\n     * @classdesc Represents a TabPanel widget with the next features:\n     * 1. Toggle active\\inactive tab panel state\n     *\n     * @example <caption>Example of TabPanel widget usage</caption>\n     * <div data-widget=\"tabs\">\n     *     <ul class=\"nav nav-tabs nav-fill\">\n     *         <li class=\"nav-item\">\n     *             <a\n     *                 data-widget=\"button\"\n     *                 data-panel-name=\"login\"\n     *                 data-widget-event-click=\"handleTabClick\"\n     *                 data-id=\"button-login\"\n     *                 data-event-click.prevent=\"handleClick\"\n     *                 href=\"#login\" role=\"tab\"\n     *             >\n     *                 ${Resource.msg('link.header.login.module', 'login', null)}\n     *             </a>\n     *         </li>\n     *         <li class=\"nav-item\">\n     *             <a\n     *                 data-widget=\"button\"\n     *                 data-panel-name=\"register\"\n     *                 data-widget-event-click=\"handleTabClick\"\n     *                 data-id=\"button-register\"\n     *                 data-event-click.prevent=\"handleClick\"\n     *                 href=\"#register\" role=\"tab\"\n     *             >\n     *                 ${Resource.msg('link.header.register.module', 'login', null)}\n     *             </a>\n     *         </li>\n     *     </ul>\n     *     <div class=\"tab-content\">\n     *         <div id=\"login\" role=\"tabpanel\" data-widget=\"tabPanel\">\n     *             ... tab content\n     *             <isinclude template=\"account/components/loginForm\" />\n     *             <isinclude template=\"account/components/oauth\" />\n     *         </div>\n     *         <div id=\"register\" role=\"tabanel\" data-widget=\"tabPanel\">\n     *             ... tab content\n     *             <isinclude template=\"account/components/registerForm\" />\n     *         </div>\n     *     </div>\n     * </div>\n     */\n    class TabPanel extends Widget {\n        /**\n         * @description Returns Widget configuration object\n         * @returns {object} Widget configuration object\n         */\n        prefs() {\n            return {\n                classesActive: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Refresh widget handler\n         * @returns {void}\n         */\n        onRefresh() {\n            this.toggleActive(this.isActive);\n        }\n\n        /**\n         * @description Activates tab panel\n         * @returns {void}\n         */\n        activate() {\n            this.toggleActive(true);\n        }\n\n        /**\n         * @description Deactivates tab panel\n         * @returns {void}\n         */\n        deactivate() {\n            this.toggleActive(false);\n        }\n\n        /**\n         * @param {(boolean|undefined)} state true to show/false to hide/undefined to auto\n         * @returns {void}\n         */\n        toggleActive(state) {\n            this.isActive = this.ref('self')\n                .toggleClass(this.prefs().classesActive, state)\n                .hasClass(this.prefs().classesActive);\n        }\n    }\n\n    return TabPanel;\n}\n","import { debounce } from 'widgets/toolbox/debounce';\n\nconst keyCode = Object.freeze({\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    RIGHT: 39\n});\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {ReturnType<typeof import('widgets/global/Button').default>} Button\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n * @typedef {InstanceType<Button>} button\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/TabPanel').default>>} tabPanel\n */\n\n/**\n * @description Base Tabs implementation\n * @param {Widget} Widget - widget for extending\n * @returns {typeof Tabs} Tabs widget\n */\nexport default function (Widget) {\n    /**\n     * @class Tabs\n     * @augments Widget\n     *\n     * @property {string} data-widget - Widget name `tabs`\n     * @property {boolean} data-active-first - activate first tab and first tab panel\n     * @property {string} data-active-panel - activate tab and tab panel by provided panel id\n     * @property {boolean} data-auto-activation - if tabs list should follow accessibility `Tabs with Automatic Activation` feature\n     * @property {boolean} data-use-url-anchor - in case if true, each tab change will add a related hash to document location.\n     * @classdesc Represents tabbed contents displaying and navigation.\n     * Has the next features:\n     * 1. Mark selected tab as active\n     * 2. Handles keydown by enter\\space keyboard button to manipulate the active tab\n     * 3. Sets focus to the current tab\n     * 4. Adds hash to document location if enabled\n     *\n     * @example <caption>Example of Tabs widget usage</caption>\n     * <div data-widget=\"tabs\">\n     *     <ul class=\"nav nav-tabs nav-fill\">\n     *         <li class=\"nav-item\">\n     *             <a\n     *                 data-widget=\"button\"\n     *                 data-panel-name=\"login\"\n     *                 data-widget-event-click=\"handleTabClick\"\n     *                 data-id=\"button-login\"\n     *                 data-event-click.prevent=\"handleClick\"\n     *                 href=\"#login\" role=\"tab\"\n     *             >\n     *                 ${Resource.msg('link.header.login.module', 'login', null)}\n     *             </a>\n     *         </li>\n     *         <li class=\"nav-item\">\n     *             <a\n     *                 data-widget=\"button\"\n     *                 data-panel-name=\"register\"\n     *                 data-widget-event-click=\"handleTabClick\"\n     *                 data-id=\"button-register\"\n     *                 data-event-click.prevent=\"handleClick\"\n     *                 href=\"#register\" role=\"tab\"\n     *             >\n     *                 ${Resource.msg('link.header.register.module', 'login', null)}\n     *             </a>\n     *         </li>\n     *     </ul>\n     *     <div class=\"tab-content\">\n     *         <div id=\"login\" role=\"tabpanel\" data-widget=\"tabPanel\">\n     *             ... tab content\n     *             <isinclude template=\"account/components/loginForm\" />\n     *             <isinclude template=\"account/components/oauth\" />\n     *         </div>\n     *         <div id=\"register\" role=\"tabanel\" data-widget=\"tabPanel\">\n     *             ... tab content\n     *             <isinclude template=\"account/components/registerForm\" />\n     *         </div>\n     *     </div>\n     * </div>\n     */\n    class Tabs extends Widget {\n        /**\n         * @description Returns Widget configuration object\n         * @returns {object} Widget configuration object\n         */\n        prefs() {\n            return {\n                classesActive: 'm-active',\n                activePanel: '',\n                activeFirst: false,\n                autoActivation: false,\n                useUrlAnchor: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Refresh widget handler\n         * @returns {void}\n         */\n        onRefresh() {\n            super.onRefresh();\n            this.fulfillPanelNames();\n        }\n\n        /**\n         * @description Widget initialization logic\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.fulfillPanelNames();\n\n            if (this.prefs().activePanel) {\n                this.activatePanel(this.prefs().activePanel);\n            } else if (this.prefs().useUrlAnchor) {\n                this.handleUrlChange();\n            } else if (this.prefs().activeFirst && this.panelNames && this.panelNames.length) {\n                this.activatePanel(this.panelNames[0]);\n            }\n\n            this.state = {};\n\n            this.tablist = this.ref('tablist').get();\n\n            if (this.tablist) {\n                this.tabsControlsScrollInit();\n            }\n        }\n\n        /**\n         * @description Init tabs controll scrolling functionality.\n         * @returns {void}\n         */\n        tabsControlsScrollInit() {\n            this.tabsControlsScroll = this.tabsControlsHandleScroll.bind(this);\n            this.tabsControlsHandleScroll();\n\n            this.state.scrollStart = true;\n            this.state.scrollEnd = false;\n\n            this.ev('scroll', this.tabsControlsHandleScroll, this.tablist, true);\n            this.ev('resize', debounce(() => {\n                this.tabsControlsScrollabilityCheck();\n            }, 300), window, true);\n        }\n\n        /**\n         * @description Scrollability check for tabs control.\n         * @returns {boolean} scrollability state\n         */\n        tabsControlsScrollabilityCheck() {\n            this.state.scrollable = this.tablist.offsetWidth < this.tablist.scrollWidth;\n            this.tablist.classList.toggle('m-scrollable', this.state.scrollable);\n\n            return this.state.scrollable;\n        }\n\n        /**\n         * @description Handler for tabs control scrolling.\n         * @returns {void}\n         */\n        tabsControlsHandleScroll() {\n            if (!this.tabsControlsScrollabilityCheck()) {\n                return;\n            }\n\n            this.state.scrollStart = !this.tablist.scrollLeft;\n            this.state.scrollEnd = this.tablist.scrollWidth === this.tablist.scrollLeft + this.tablist.offsetWidth;\n\n            this.tablist.classList.toggle('m-scroll_start', this.state.scrollStart);\n            this.tablist.classList.toggle('m-scroll_end', this.state.scrollEnd);\n        }\n\n        /**\n         * @description Registers all available panels by adding their IDs into array.\n         * @returns {void}\n         */\n        fulfillPanelNames() {\n            /**\n            * @type {string[]}\n            */\n            this.panelNames = [];\n            const Button = /** @type {Button} */(this.getConstructor('button'));\n\n            this.eachChild(child => {\n                if (child instanceof Button && this.panelNames) {\n                    this.panelNames.push(String(child.config.panelName));\n                }\n            });\n        }\n\n        /**\n         * @param {InstanceType<Widget>} clickedButton - Widget, representing customer's tab clicked element\n         * @returns {void}\n         */\n        handleTabClick(clickedButton) {\n            this.activatePanel(String(clickedButton.config.panelName));\n        }\n\n        /**\n         * @param {string} panelName name of panel to activate\n         * @param {boolean} saveToPushState - If we need to save hash in history\n         * @returns {void}\n         */\n        activatePanel(panelName, saveToPushState = true) {\n            if (this.panelNames) {\n                this.panelNames.forEach(id => {\n                    const isActive = id === panelName;\n\n                    if (isActive) {\n                        this.activePanel = panelName;\n                        this.focusedTab = panelName;\n                    }\n\n                    const currentTabPanel = this.getById(id, (/** @type {tabPanel} */tabPanel) => {\n                        tabPanel[isActive ? 'activate' : 'deactivate']();\n                        if (isActive && saveToPushState) {\n                            this.handleUrlAnchor(id);\n                        }\n\n                        return tabPanel;\n                    });\n\n                    if (!currentTabPanel && this.ref(id)) {\n                        this.toggleActiveRefPanel(this.ref(id), isActive);\n                        if (isActive && saveToPushState) {\n                            this.handleUrlAnchor(id);\n                        }\n                    }\n\n                    this.getById(`button-${id}`, (/** @type {button} */ button) => {\n                        if (isActive) {\n                            button.activate();\n                            button.select();\n                        } else {\n                            button.deactivate();\n                            button.unselect();\n                        }\n                    });\n                });\n            }\n        }\n\n        /**\n         * @description In addition to tab switch, action will be reflected in URL anchor, if enabled.\n         * This will further allow to select proper tab, when returning back from browser history.\n         * @param {string} tabName tab name to reflect in browser location hash.\n         * @returns {void}\n         */\n        handleUrlAnchor(tabName) {\n            if (this.prefs().useUrlAnchor) {\n                window.history.pushState({\n                    hashChangedOnly: true\n                }, document.title, `#${tabName}`);\n            }\n        }\n\n        /**\n         * @description Triggers needed tab activation, when URL changed\n         * in case of history push/replace state and using browser's `back` button.\n         * @param {boolean} saveToPushState - If we need to save hash in history\n         * @returns {void}\n         */\n        handleUrlChange(saveToPushState = true) {\n            if (document.location.hash) {\n                const panelToActivate = this.panelNames\n                    && this.panelNames.find(panelName => panelName === document.location.hash.replace('#', ''));\n                if (panelToActivate) {\n                    this.activatePanel(panelToActivate, saveToPushState);\n                }\n            }\n        }\n\n        /**\n         * @description Method to toggle active panel, if it is not a separate widget `TabPanel`\n         * but an ordinary `ref` element inside `Tabs` widget.\n         * @param {refElement} panel target panel name\n         * @param {boolean} state is target panel is selected or not\n         * @returns {void}\n         */\n        toggleActiveRefPanel(panel, state) {\n            panel.toggleClass(this.prefs().classesActive, state);\n        }\n\n        /**\n         * @description Gets last focused panel name\n         * <br>(focused panel is not necessarily active panel)\n         * @returns {string} Focused panel name if founded. Empty string otherwise\n         */\n        getLastFocusedTab() {\n            return this.focusedTab\n                ? this.focusedTab\n                : this.activePanel || (this.panelNames && this.panelNames[0]) || '';\n        }\n\n        /**\n         * @description Sets focus to panel with given name\n         * <br>Uses `roving focus` accessibility feature\n         * <br>https://www.w3.org/TR/wai-aria-practices/#kbd_roving_tabindex\n         * @param {string} tab Tab name to set focus to\n         * @returns {void}\n         */\n        setFocusToTab(tab) {\n            if (!tab) {\n                return;\n            }\n\n            this.focusedTab = tab;\n\n            if (this.panelNames) {\n                this.panelNames.forEach(id => {\n                    const isTargetTab = id === tab;\n                    this.getById(`button-${id}`, (/** @type {button} */ button) => {\n                        if (isTargetTab) {\n                            button.focus().setTabindex();\n                        } else {\n                            button.unsetTabindex();\n                        }\n                    });\n                });\n            }\n\n            if (this.prefs().autoActivation) {\n                this.activatePanel(tab);\n            }\n        }\n\n        /**\n         * @description Sets focus to the very first panel\n         * @returns {void}\n         */\n        setFocusToFirstTab() {\n            const firstTab = (this.panelNames\n                && this.panelNames.length\n                && this.panelNames[0])\n                || '';\n            this.setFocusToTab(firstTab);\n        }\n\n        /**\n         * @description Sets focus to the very last panel\n         * @returns {void}\n         */\n        setFocusToLastTab() {\n            const lastTab = (this.panelNames\n                && this.panelNames.length\n                && this.panelNames[this.panelNames.length - 1])\n                || '';\n            this.setFocusToTab(lastTab);\n        }\n\n        /**\n         * @description Sets focus to previous panel. Loops focus, if first panel reached\n         * @returns {void}\n         */\n        setFocusToPreviousTab() {\n            if (this.panelNames && this.panelNames.length) {\n                const currentFocusedTab = this.getLastFocusedTab();\n                const currentFocusedTabIndex = this.panelNames.indexOf(currentFocusedTab);\n                const previousTab = currentFocusedTabIndex === 0\n                    ? this.panelNames[this.panelNames.length - 1]\n                    : this.panelNames[currentFocusedTabIndex - 1];\n                this.setFocusToTab(previousTab);\n            }\n        }\n\n        /**\n         * @description Sets focus to next panel. Loops focus, if last panel reached\n         * @returns {void}\n         */\n        setFocusToNextTab() {\n            if (this.panelNames && this.panelNames.length) {\n                const currentFocusedTab = this.getLastFocusedTab();\n                const currentFocusedTabIndex = this.panelNames.indexOf(currentFocusedTab);\n                const nextTab = currentFocusedTabIndex === this.panelNames.length - 1\n                    ? this.panelNames[0]\n                    : this.panelNames[currentFocusedTabIndex + 1];\n                this.setFocusToTab(nextTab);\n            }\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.HOME:\n                    this.setFocusToFirstTab();\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.END:\n                    this.setFocusToLastTab();\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.LEFT:\n                    this.setFocusToPreviousTab();\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.RIGHT:\n                    this.setFocusToNextTab();\n                    preventEventActions = true;\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return Tabs;\n}\n","import { setCurrentToken } from '../toolbox/ajax';\n\n/**\n * @param {typeof import('widgets/Widget').default} Widget - widget for extending\n * @returns {typeof Token} Token widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Token\n     * @augments Widget\n     * @property {string} data-widget - Widget name `token`\n     * @property {string} data-token-name - Name of CSRF token\n     * @property {string} data-token-value - Value of CSRF token\n     * @classdesc Represents Token component with the next features:\n     * 1. If available on page - adds CSRF data in context of ajax requests.\n     * 2. Widget container is usually empty and hidden.\n     *\n     * @example <caption>Example of Token widget usage</caption>\n     * <div\n     *     data-widget=\"token\"\n     *     data-token-name=\"${require('dw/web/CSRFProtection').getTokenName()}\"\n     *     data-token-value=\"${require('dw/web/CSRFProtection').generateToken()}\"\n     *     hidden=\"hidden\"\n     * ></div>\n     */\n    class Token extends Widget {\n        /**\n         * @description Widget initialization logic\n         * @returns {void}\n         */\n        init() {\n            setCurrentToken(this.config.tokenName, this.config.tokenValue);\n        }\n    }\n\n    return Token;\n}\n","import { getJSONByUrl } from '../toolbox/ajax';\n\nconst keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32\n});\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Country selector switcher\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof CountrySelector} Country Selector class\n */\n\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class CountrySelector\n     * @augments Widget\n     * @classdesc Represents `CountrySelector` implementation:\n     * - Acts as a usability [component {@link MenuButton}](https://www.w3.org/TR/wai-aria-practices/#menubutton) on lg/xl viewports and as {@link HamburgerMenuItem} on sm/md viewports\n     * For sm/md viewports {@link CountrySelector} class will be mixed into special {@link HamburgerMenuItem}-like class {@link CountrySelectorMenuItem}\n     * - Allows customer to choose target localized version of the site for both, locales and external sites. Also changes currency in accordance to selected locale/country.\n     * @property {string} data-widget - Widget name `countrySelector`\n     * @property {string} data-url-locale - Set chosen localization info URL for current site locale\n     * @property {string} data-url-site - Set chosen site info URL for target site locale\n     * @example <caption>Example of CountrySelector for lg/xl viewport</caption>\n     * <div\n     *     data-widget=\"countrySelector\"\n     *     data-url-locale=\"${URLUtils.url('Page-SetLocale')}\"\n     *     data-url-site=\"${URLUtils.url('Page-SetSite')}\"\n     * >\n     *     <div\n     *         class=\"b-country_selector\"\n     *         data-widget.lg.xl=\"menuButton\"\n     *         data-event-keydown.lg.xl=\"handleKeydown\"\n     *         data-event-click.lg.xl=\"toggleMenu\"\n     *         data-forward-to-parent=\"switchLocale\"\n     *     >\n     *         <button\n     *             onclick=\"\"\n     *             class=\"b-country_selector-switcher\"\n     *             ...\n     *         >\n     *             <span class=\"b-country_selector-locale\">\n     *                 ... selected locale\n     *             </span>\n     *         </button>\n     *\n     *         <ul\n     *             role=\"menu\"\n     *             ...\n     *         >\n     *             <isloop items=\"${pdict.localeModel.locale.localeLinks}\" var=\"localeLink\">\n     *                 <li\n     *                     data-widget.lg.xl=\"menuBarItem\"\n     *                     data-forward-to-parent=\"switchLocale\"\n     *                     ...\n     *                 >\n     *                     <button\n     *                         data-locale-config=\"${JSON.stringify(localeLink)}\"\n     *                         data-event-click.prevent=\"switchLocale\"\n     *                         data-event-keydown=\"switchLocale\"\n     *                         ...\n     *                     >\n     *                         ...\n     *                         <span class=\"b-country_selector-locale_language\">${localeLink.displayName}</span>\n     *                     </button>\n     *                 </li>\n     *             </isloop>\n     *         </ul>\n     *     </div>\n     * </div>\n     * @example <caption>Example of CountrySelector for md/sm viewport</caption>\n     * ...\n     * <isloop items=\"${pdict.localeModel.locale.localeLinks}\" var=\"localeLink\">\n     *     <div role=\"none\" class=\"b-menu_bar-flyout_column\">\n     *         <div\n     *             data-widget.sm.md=\"countrySelectorMenuItem\"\n     *             data-event-click.sm.md=\"handleClick\"\n     *             data-event-keydown.sm.md=\"handleKeydown\"\n     *             data-locale-config=\"${JSON.stringify(localeLink)}\"\n     *             data-url-locale=\"${URLUtils.url('Page-SetLocale')}\"\n     *             data-url-site=\"${URLUtils.url('Page-SetSite')}\"\n     *             ...\n     *         >\n     *             <button ...>\n     *                 ... locale data\n     *             </button>\n     *         </div>\n     *     </div>\n     * </isloop>\n     */\n    class CountrySelector extends Widget {\n        prefs() {\n            return {\n                urlLocale: '',\n                urlSite: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Method to switch locale depending on event. Is used for switching locale either by mouse click or by pressing `enter` or `space` on button from keyboard\n         * @listens dom#keydown\n         * @listens dom#click\n         * @param {refElement} button An element, which was chosen by customer and contains all info about selected localization in data attributes\n         * @param {Event} event Source event, happened on button element\n         * @returns {void}\n         */\n        switchLocale(button, event) {\n            if (!(event instanceof KeyboardEvent)) {\n                this.changeLocale(button.data('localeConfig'));\n                return;\n            }\n\n            let preventEventActions = false;\n            switch (event.keyCode) {\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    preventEventActions = true;\n                    this.changeLocale(button.data('localeConfig'));\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n\n        /**\n         * @description Change locale. Sends change locale request,\n         * obtains updated URL and follows it to display target locale/site\n         * @param {object} localeConfig - Target Locale configuration object\n         * @param {string} localeConfig.localeID - Target Locale ID\n         * @param {string} localeConfig.currencyCode - Target Locale currency code\n         * @param {string} localeConfig.siteID - Target Locale site ID\n         * @param {boolean} localeConfig.isOtherSite - If Target Locale not belongs to current site\n         */\n        changeLocale(localeConfig) {\n            const queryString = (this.ref('html').data('querystring') || '').replace(/&amp;/g, '&');\n            const data = {\n                code: localeConfig.localeID,\n                CurrencyCode: localeConfig.currencyCode,\n                queryString: queryString || '',\n                action: this.ref('html').data('action'),\n                siteID: localeConfig.siteID\n            };\n\n            const url = localeConfig.isOtherSite ? this.prefs().urlSite : this.prefs().urlLocale;\n            getJSONByUrl(url, data).then(\n                response => {\n                    if (response && response.redirectUrl) {\n                        const brandcode = 'BrandSDK-brandJSON_';\n                        let brandcodeItem = brandcode.concat($('#ejgContactUs').data('brandcode'));\n                        sessionStorage.removeItem(brandcodeItem);\n                        window.location.assign(response.redirectUrl);\n                    }\n                }\n            );\n        }\n    }\n\n    return CountrySelector;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/global/HamburgerMenuItem').default>} HamburgerMenuItem\n */\n\nconst keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32\n});\n\n/**\n * @description Base CountrySelectorMenuItem implementation\n * @param {HamburgerMenuItem} HamburgerMenuItem Base widget for extending\n * @returns {typeof CountrySelectorMenuItem} BackToTop class\n */\nexport default function (HamburgerMenuItem) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class CountrySelectorMenuItem\n     * @augments HamburgerMenuItem\n     * @classdesc CountrySelectorMenuItem component. Used to switch locales on small viewports. Mixes in 2 widgets:\n     * - {@link HamburgerMenuItem} - to be able to behave correctly as a hamburger menu item on small viewports\n     * - {@link CountrySelector} - to be able to handle Locale Switcher functionality\n     * <br>Was created due to extend {@link HamburgerMenuItem} `click` and `keydown` and use {@link CountrySelector} mixin to switch locale/country\n     * @property {string} data-widget - Widget name `countrySelectorMenuItem`\n     * @property {object} data-locale-config - Locale item config object\n     * @example\n     * // use this code to display widget\n     * <div\n     *     data-widget.sm.md=\"countrySelectorMenuItem\"\n     *     data-event-click.sm.md=\"handleClick\"\n     *     data-event-keydown.sm.md=\"handleKeydown\"\n     *     data-locale-config=\"${JSON.stringify(localeLink)}\"\n     *     data-url-locale=\"${URLUtils.url('Page-SetLocale')}\"\n     *     data-url-site=\"${URLUtils.url('Page-SetSite')}\"\n     *     role=\"none\"\n     *     class=\"b-menu_item\"\n     * >\n     *     <button\n     *         role=\"menuitem\"\n     *         b-menu_item-link\n     *         tabindex=\"-1\"\n     *         data-ref=\"itemLink\"\n     *         class=\"b-menu_item-link\"\n     *         aria-label=\"${Resource.msgf('countrySelector.link.wai', 'global', null, localeLink.displayName)}\"\n     *         lang=\"${localeLink.language}\"\n     *     >\n     *         ....\n     *     </button>\n     * </div>\n     */\n    class CountrySelectorMenuItem extends HamburgerMenuItem {\n        /**\n         * @description Click Event handler\n         * @listens dom#click\n         * @returns {void}\n         */\n        handleClick() {\n            // class CountrySelector, method changeLocale\n            this.callIfExists('changeLocale', this.ref('self').data('localeConfig'));\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            super.handleKeydown(_, event);\n\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.SPACE:\n                case keyCode.RETURN:\n                    // class CountrySelector, method changeLocale\n                    this.callIfExists('changeLocale', this.ref('self').data('localeConfig'));\n                    preventEventActions = true;\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return CountrySelectorMenuItem;\n}\n","const keyCode = Object.freeze({\n    ESC: 27,\n    PAGEUP: 33,\n    PAGEDOWN: 34,\n    END: 35,\n    HOME: 36,\n    UP: 38,\n    DOWN: 40,\n    RIGHT: 39,\n    LEFT: 37\n});\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/ListAccessibility').default>} ListAccessibility\n * @typedef {ReturnType<typeof import('widgets/header/MenuBarItem').default>} MenuBarItem\n */\n\n/**\n * @param {ListAccessibility} ListAccessibility Base widget for extending\n * @returns {typeof HamburgerMenuItem} HamburgerMenuItem widget\n */\nexport default function (ListAccessibility) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class HamburgerMenuItem\n     * @augments ListAccessibility\n     * @classdesc Represents MenuPanel component with next features:\n     * 1. Represents Menu Item with specific logic for submenus, handling viewtype changes, keyboard navigation, mouse click.\n     * 2. Allow open/close menu\n     * 3. Allow set/clear Submenu HTML\n     * Submenu implemented as empty container where pasted html of selected category taken from original markup that was implemented for MegaMenu,\n     * in order to not dublicate nav structure and reuse it as much as possible and to implement reliable slide animation\n     * {@link HamburgerMenuItem} may contain another {@link HamburgerMenuItem}. {@link MenuBarItem} Widget can contain another {@link MenuBarItem} like submenu.\n     * @example <caption>Example of HamburgerMenuItem widget usage</caption>\n     * <li role=\"none\"\n     *    class=\"b-menu_bar-item\"\n     *    data-widget=\"hamburgerMenuItem\"\n     *    data-prevent-show-submenu=\"false\"\n     *    data-event-keydown=\"handleKeydown\"\n     *>\n     *    <a\n     *        role=\"menuitem\"\n     *        class=\"b-menu_bar-link m-has-submenu\"\n     *        aria-label=\"${category.name}\"\n     *        aria-haspopup=\"true\"\n     *        aria-expanded=\"false\"\n     *        itemprop=\"url name\"\n     *        tabindex=\"${status.first ? 0 : -1}\"\n     *        href=\"<isprint value=\"${category.url}\" encoding=\"htmldoublequote\"/>\"\n     *        data-ref=\"itemLink\"\n     *    >\n     *        ${category.name}\n     *    </a>\n     *    <isset name=\"menuItem\" value=\"${category}\" scope=\"page\" />\n     *    <div\n     *        role=\"menu\"\n     *        class=\"b-menu_bar-flyout\"\n     *        aria-label=\"${category.name}\"\n     *        aria-hidden=\"true\"\n     *        data-ref=\"submenu\"\n     *    >\n     *        <div role=\"none\" class=\"b-menu_bar-flyout_inner\">\n     *            <isinclude template=\"components/header/menuItem\" />\n     *\n     *            <button\n     *                role=\"menuitem\"\n     *                class=\"b-menu_bar-flyout_close\"\n     *                aria-label=\"${Resource.msg('common.close', 'common', null)}\"\n     *                title=\"${Resource.msg('common.close', 'common', null)}\"\n     *                type=\"button\"\n     *                tabindex=\"-1\"\n     *            >\n    *                <isinclude template=\"/common/svg/close\" />\n     *            </button>\n     *        </div>\n     *    </div>\n     *</li>\n     * @property {string} data-widget - Widget name `hamburgerMenuItem`\n     * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n     * @property {boolean} [data-prevent-show-submenu=false] - prevent showing submenu\n     */\n\n    class HamburgerMenuItem extends ListAccessibility {\n        /**\n         * @description calls super constructor, adds initial states etc.\n         *\n         * @param {HTMLElement} el DOM element\n         * @param {{[x: string]: object|string|number|boolean|null|undefined}} config widget config\n         */\n        constructor(el, config = {}) {\n            super(el, config);\n            this.isSubmenuOpen = false;\n        }\n\n        prefs() {\n            return {\n                preventShowSubmenu: false,\n                submenu: 'submenu',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @returns {void}\n         */\n        init() {\n            this.defineItems();\n            this.ref('self').attr('role', 'presentation');\n            this.has(this.prefs().itemLink, () => {\n                this.ref(this.prefs().itemLink).attr('role', 'menuitem');\n            });\n\n            this.onDestroy(() => {\n                this.ref('self').attr('role', null);\n                this.has(this.prefs().itemLink, () => {\n                    this.ref(this.prefs().itemLink).attr('role', null);\n                });\n            });\n        }\n\n        /**\n         * @description Mark Submenu Opened\n         * @returns {void}\n         */\n        markSubmenuOpened() {\n            this.isSubmenuOpen = true;\n        }\n\n        /**\n         * @description Returns true if have submenu\n         * @returns {boolean} Return true if submenu exist\n         */\n        hasSubmenu() {\n            return this.has(this.prefs().submenu) && !this.prefs().preventShowSubmenu;\n        }\n\n        /**\n         * @description Returns true if submenu open\n         * @returns {boolean} Return true if submenu opened\n         */\n        hasOpenedSubmenu() {\n            return !!this.isSubmenuOpen;\n        }\n\n        /**\n         * @description Open next menu level if exist\n         * @emits HamburgerMenuItem#navPanelNextLevel\n         * @returns {void}\n         */\n        openMenu() {\n            if (this.hasSubmenu()) {\n                let submenuHTML;\n                let itemLinkRefEl;\n\n                this.has(this.prefs().itemLink, (itemLink) => {\n                    itemLinkRefEl = itemLink;\n                });\n                this.has(this.prefs().submenu, (submenu) => {\n                    const submenuElement = submenu.get();\n\n                    if (submenuElement) {\n                        submenuHTML = submenuElement.innerHTML;\n                    }\n                });\n                /**\n                 * @description Event to open nav panel next level\n                 * @event HamburgerMenuItem#navPanelNextLevel\n                 */\n                this.eventBus().emit('nav.panel.next.level', {\n                    htmlMarkup: submenuHTML,\n                    parentMenuItem: itemLinkRefEl\n                });\n            }\n        }\n\n        /**\n         * @description Clear submenu HTML\n         * @returns {void}\n         */\n        clearSubmenuHTML() {\n            this.has(this.prefs().submenu, (submenu) => {\n                const submenuElement = submenu.get();\n\n                if (submenuElement) {\n                    submenuElement.innerHTML = '';\n                }\n            });\n        }\n\n        /**\n         * @description Set Submenu HTML\n         * @param {string} submenuHTML Submenu HTML\n         * @returns {void}\n         */\n        setSubmenuHTML(submenuHTML) {\n            this.has(this.prefs().submenu, (submenu) => {\n                const submenuElement = submenu.get();\n\n                if (submenuElement) {\n                    submenuElement.innerHTML = submenuHTML;\n                }\n            });\n        }\n\n        /**\n         * @description Click Event handler\n         * @listens dom#click\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {Event} event Event object\n         * @returns {void}\n         */\n        handleClick(_, event) {\n            if (this.hasSubmenu()) {\n                event.preventDefault();\n                this.openMenu();\n            }\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @emits HamburgerMenuItem#navPanelPreviousLevel\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            if (!this.hasOpenedSubmenu()) {\n                return;\n            }\n\n            switch (event.keyCode) {\n                case keyCode.LEFT:\n                    /**\n                     * @description Event to nav panel previous level\n                     * @event HamburgerMenuItem#navPanelPreviousLevel\n                     */\n                    this.eventBus().emit('nav.panel.previous.level');\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.RIGHT:\n                    this.currentItem.openMenu();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.PAGEUP:\n                case keyCode.HOME:\n                    this.setFocusToFirstItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.PAGEDOWN:\n                case keyCode.END:\n                    this.setFocusToLastItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.UP:\n                    this.setFocusToPreviousItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.DOWN:\n                    this.setFocusToNextItem();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return HamburgerMenuItem;\n}\n","const keyCode = Object.freeze({\n    TAB: 9,\n    RETURN: 13,\n    SPACE: 32,\n    PAGEUP: 33,\n    PAGEDOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40\n});\n/**\n * @typedef {ReturnType<typeof import('widgets/global/ListAccessibility').default>} ListAccessibility\n * @typedef {InstanceType<ReturnType<typeof import('widgets/header/MenuBarItem').default>>} menuBarItem\n */\n\n/**\n * @param {ListAccessibility} ListAccessibility Base widget for extending\n * @returns {typeof MegaMenu} MegaMenu widget\n */\nexport default function (ListAccessibility) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class MegaMenu\n     * @augments ListAccessibility\n     * @classdesc Menu bar widget for Top Navigation menu.\n     * Represents MegaMenu component with next features:\n     * 1. Support keyboard navigation for accessibility using as basis ListAccessibility mixin and implement specific for Mega Menu accessibility behaviour\n     * 2. Implementing opening/closing of mega menu flyout\n     *\n     * MegaMenu widget should contain {@link MenuBarItem} widgets that implement one menu item.\n     * For additional information you can check:\n     * cartridges/app_storefront_widgets/cartridge/templates/default/components/header/menu.isml\n     * MegaMenu widget (menubar in specs) should be imlemented according to https://www.w3.org/TR/wai-aria-practices/#menu specs\n     * @example <caption>Example of MegaMenu usage</caption>\n        <ul\n            id=\"main-menu\"\n            class=\"b-menu_bar-inner\"\n            aria-label=\"Main categories\"\n            data-widget.lg.xl=\"megaMenu\"\n            data-event-keydown.lg.xl=\"handleKeydown\"\n        >\n            ...Menu bar items\n        </ul>\n     * @property {string} data-widget - Widget name `MegaMenu`\n     * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n     */\n    class MegaMenu extends ListAccessibility {\n        /**\n         * @description Initialize widget logic.\n         * Define current, first and last menu item.\n         * Set the role of menu.\n         * @returns {void}\n         */\n        init() {\n            this.defineItems();\n            this.eventBus().on('mega.menu.close.items', 'closeItems');\n            this.ref('self').attr('role', 'menubar');\n            this.onDestroy(() => {\n                this.ref('self').attr('role', false);\n            });\n        }\n\n        /**\n         * @description Set focus to item\n         * @param {any} menuItem menuItem Widget\n         * @returns {void}\n         */\n        setFocusToItem(menuItem) {\n            let hasOpenedMenu = false;\n            const MenuBarItem = (this.getConstructor('menuBarItem'));\n\n            this.eachChild((child) => {\n                if (!(child instanceof MenuBarItem)) { return; }\n\n                if (child.hasOpenedSubmenu()) {\n                    hasOpenedMenu = true;\n                }\n\n                child.removeTabIndex();\n                child.closeMenu();\n            });\n\n            menuItem.addTabIndex();\n            menuItem.focus();\n\n            if (hasOpenedMenu) {\n                menuItem.openMenu();\n            }\n\n            this.currentItem = menuItem;\n        }\n\n        /**\n         * @description Close all menu Items\n         * @returns {void}\n         */\n        closeItems() {\n            this.eachChild((child) => {\n                if (typeof child.closeMenu === 'function') {\n                    child.closeMenu();\n                }\n            });\n        }\n\n        /**\n         * @description Handle Enter key event\n         * @listens dom:keydown\n         * @param {KeyboardEvent} event Event Object\n         * @returns {void}\n         */\n        handleEnterKey(event) {\n            const domNode = /** @type {HTMLAnchorElement} */ (event.target);\n\n            if (domNode && domNode.href) {\n                window.location.assign(domNode.href);\n            }\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom:keydown\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.PAGEUP:\n                case keyCode.HOME:\n                    this.setFocusToFirstItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.PAGEDOWN:\n                case keyCode.END:\n                    this.setFocusToLastItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.RIGHT:\n                    this.setFocusToNextItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.LEFT:\n                    this.setFocusToPreviousItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.UP:\n                    this.currentItem.openMenu(false, true);\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.DOWN:\n                    this.currentItem.openMenu(true, false);\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.TAB:\n                    this.closeItems();\n\n                    break;\n\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    this.handleEnterKey(event);\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return MegaMenu;\n}\n","import { timeout } from 'widgets/toolbox/util';\nimport { clickOutside } from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/ListAccessibility').default>} ListAccessibility\n * @typedef {InstanceType<ReturnType<typeof import('widgets/header/MegaMenu').default>>} MegaMenu\n */\n\nconst keyCode = Object.freeze({\n    ESC: 27,\n    PAGEUP: 33,\n    PAGEDOWN: 34,\n    END: 35,\n    HOME: 36,\n    UP: 38,\n    DOWN: 40\n});\n\nconst ITEM_SWITCH_TIMEOUT = 200;\n\n/**\n * @param {ListAccessibility} ListAccessibility Base widget for extending\n * @returns {typeof MenuBarItem} MenuBarItem widget\n */\nexport default function (ListAccessibility) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class MenuBarItem\n     * @augments ListAccessibility\n     * @classdesc Represents MenuBarItem component with next features:\n     * 2. MenuBarItem Widget can contain another MenuBarItem like submenu.\n     * 3. Allow open/close menu\n     * 4. Allow handling mouse, keyboard events\n     * 5. Allow check if submenus exist and its state(opened/closed)\n     *\n     * MenuBarItem widget should be a part of {@link MegaMenu} widget that implements the menu.\n     * MenuBarItem widget should be imlemented according to https://www.w3.org/TR/wai-aria-practices/#menu specs\n     * @example <caption>Example of menuBarItem widget usage</caption>\n     * <li role=\"none\"\n     *    class=\"b-menu_bar-item\"\n     *    data-widget=\"menuBarItem\"\n     *    data-event-mouseenter=\"mouseEnter\"\n     *    data-event-mouseleave=\"mouseLeave\"\n     *    data-event-keydown=\"handleKeydown\"\n     *>\n     *    <a\n     *        role=\"menuitem\"\n     *        class=\"b-menu_bar-link m-has-submenu\"\n     *        aria-label=\"${category.name}\"\n     *        aria-haspopup=\"true\"\n     *        aria-expanded=\"false\"\n     *        itemprop=\"url name\"\n     *        tabindex=\"${status.first ? 0 : -1}\"\n     *        href=\"<isprint value=\"${category.url}\" encoding=\"htmldoublequote\"/>\"\n     *        data-ref=\"itemLink\"\n     *        data-event-blur=\"handleClose\"\n     *    >\n     *        ${category.name}\n     *    </a>\n     *    <isset name=\"menuItem\" value=\"${category}\" scope=\"page\" />\n     *    <div\n     *        role=\"menu\"\n     *        class=\"b-menu_bar-flyout\"\n     *        aria-label=\"${category.name}\"\n     *        aria-hidden=\"true\"\n     *        data-ref=\"submenu\"\n     *    >\n     *        <div role=\"none\" class=\"b-menu_bar-flyout_inner\">\n     *            <isinclude template=\"components/header/menuItem\" />\n     *\n     *            <button\n     *                role=\"menuitem\"\n     *                class=\"b-menu_bar-flyout_close\"\n     *                aria-label=\"${Resource.msg('common.close', 'common', null)}\"\n     *                title=\"${Resource.msg('common.close', 'common', null)}\"\n     *                data-event-click=\"handleClose\"\n     *                type=\"button\"\n     *                tabindex=\"-1\"\n     *            >\n    *                <isinclude template=\"/common/svg/close\" />\n     *            </button>\n     *        </div>\n     *    </div>\n     *</li>\n     * @property {string} data-widget - Widget name `MenuBarItem`\n     * @property {string} data-event-mouseenter - Event listener for `mouseEnter` method\n     * @property {string} data-event-mouseleave - Event listener for `mouseLeave` method\n     * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n     * @property {string} data-event-click - Event listener for `handleClose` method\n     */\n\n    class MenuBarItem extends ListAccessibility {\n        prefs() {\n            return {\n                submenu: 'submenu',\n                menuMoreLink: 'menuMoreLink',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic.\n         * @returns {void}\n         */\n        init() {\n            super.init();\n\n            // Async init to not block other widget init\n            timeout(() => {\n                this.focusableItems = this.getMenuItems();\n                this.firstItem = this.focusableItems[0];\n                this.lastItem = this.focusableItems[this.focusableItems.length - 1];\n                this.currentItem = this.focusableItems[0];\n            }, 0);\n\n            this.isSubmenuOpen = false;\n            this.isSubmenuInFocus = false;\n        }\n\n        /**\n         * @description Returns menu item array\n         * @returns {Array<HTMLElement>} MenuItems array\n         */\n        getMenuItems() {\n            const menuItems = [];\n\n            this.eachChild(child => {\n                if (!(child instanceof MenuBarItem)) {\n                    return;\n                }\n\n                child.has(this.prefs().itemLink, (itemLink) => {\n                    menuItems.push(itemLink.get());\n                });\n                menuItems.push(...child.getMenuItems());\n                child.has(this.prefs().menuMoreLink, (menuMoreLink) => {\n                    menuItems.push(menuMoreLink.get());\n                });\n            });\n\n            return menuItems;\n        }\n\n        /**\n         * @description Returns true if widget has submenu\n         * @returns {boolean} Return true if submenu exist\n         */\n        hasSubmenu() {\n            return this.has(this.prefs().submenu);\n        }\n\n        /**\n         * @description Returns true if submenu open\n         * @returns {boolean} Return true if submenu opened\n         */\n        hasOpenedSubmenu() {\n            return !!this.isSubmenuOpen;\n        }\n\n        /**\n         * @description Returns true if submenu in focus\n         * @returns {boolean} Return true if submenu focused\n         */\n        hasFocusedSubmenu() {\n            return !!this.isSubmenuInFocus;\n        }\n\n        /**\n         * @description Remove Tab Index from element\n         * @returns {void}\n         */\n        removeTabIndex() {\n            this.ref(this.prefs().itemLink).attr('tabindex', '-1');\n        }\n\n        /**\n         * @description Add Tab Index to element\n         * @returns {void}\n         */\n        addTabIndex() {\n            this.ref(this.prefs().itemLink).attr('tabindex', '0');\n        }\n\n        /**\n         * @description Open menu if exist and focus first/last element\n         * @emits MenuBarItem#megaMenuCloseItems\n         * @param {boolean} [focusFirstItem] Item focus flag\n         * @param {boolean} [focusLastItem] Item focus flag\n         * @returns {void}\n         */\n        openMenu(focusFirstItem, focusLastItem) {\n            if (this.hasSubmenu()) {\n                this.ref(this.prefs().itemLink)\n                    .attr('aria-expanded', 'true');\n                this.ref(this.prefs().submenu)\n                    .attr('aria-hidden', 'false');\n                this.ref(this.prefs().submenu)\n                    .attr('data-tau', 'menu_flyout');\n                this.isSubmenuOpen = true;\n                this.isSubmenuInFocus = focusFirstItem || focusLastItem;\n\n                if (focusFirstItem) {\n                    this.setFocusToFirstItem();\n                }\n\n                if (focusLastItem) {\n                    this.setFocusToLastItem();\n                }\n\n                this.outSideListener = clickOutside(this.ref('self'), () => {\n                    /**\n                      * @description Event to close all items\n                      * @event MenuBarItem#megaMenuCloseItems\n                     */\n                    this.emit('mega.menu.close.items');\n                }, false);\n\n                if (this.outSideListener) {\n                    this.onDestroy(this.outSideListener);\n                }\n            }\n        }\n\n        /**\n         * @description Close menu\n         * @param {boolean} [returnFocus] Focus flag\n         * @returns {void}\n         */\n        closeMenu(returnFocus) {\n            if (this.hasSubmenu()) {\n                this.ref(this.prefs().itemLink)\n                    .attr('aria-expanded', 'false');\n                this.ref(this.prefs().submenu)\n                    .attr('aria-hidden', 'true');\n                this.ref(this.prefs().submenu)\n                    .attr('data-tau', false);\n                this.isSubmenuOpen = false;\n                this.isSubmenuInFocus = false;\n\n                if (returnFocus) {\n                    this.focus();\n                }\n\n                if (this.outSideListener) {\n                    this.outSideListener();\n                    this.outSideListener = null;\n                }\n            }\n        }\n\n        /**\n         * @description Mouse enter event handler\n         * @listens dom#mouseenter\n         * @emits MenuBarItem#megaMenuCloseItems\n         * @returns {void}\n         */\n        mouseEnter() {\n            if (this.timerCleanerLeave) {\n                this.timerCleanerLeave();\n            }\n\n            this.timerCleanerEnter = timeout(() => {\n                /**\n                     * @description Event to close all items\n                     * @event MenuBarItem#megaMenuCloseItems\n                 */\n                this.eventBus().emit('mega.menu.close.items');\n                this.openMenu();\n            }, ITEM_SWITCH_TIMEOUT);\n        }\n\n        /**\n         * @description Mouse leave event handler\n         * @listens dom#mouseleave\n         * @returns {void}\n         */\n        mouseLeave() {\n            if (this.timerCleanerEnter) {\n                this.timerCleanerEnter();\n            }\n\n            this.timerCleanerLeave = timeout(() => {\n                this.closeMenu();\n            }, ITEM_SWITCH_TIMEOUT);\n        }\n\n        /**\n         * @description Close Event handler\n         * @listens dom#click\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {Event} event Event object\n         * @returns {void}\n         */\n        handleClose(_, event) {\n            event.preventDefault();\n            this.closeMenu();\n        }\n\n        /**\n         * @description Click Event handler\n         * @listens dom#click\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {Event} event Event object\n         * @returns {void}\n         */\n        handleClick(_, event) {\n            if (this.hasSubmenu() && !this.hasOpenedSubmenu()) {\n                event.preventDefault();\n                this.openMenu();\n            }\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            if (!this.hasFocusedSubmenu()) {\n                return;\n            }\n\n            switch (event.keyCode) {\n                case keyCode.ESC:\n                    this.closeMenu(true);\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.PAGEUP:\n                case keyCode.HOME:\n                    this.setFocusToFirstItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.PAGEDOWN:\n                case keyCode.END:\n                    this.setFocusToLastItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.UP:\n                    this.setFocusToPreviousItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.DOWN:\n                    this.setFocusToNextItem();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return MenuBarItem;\n}\n","import { timeout } from 'widgets/toolbox/util';\n\nconst keyCode = Object.freeze({\n    ESC: 27,\n    TAB: 9,\n    RETURN: 13,\n    SPACE: 32,\n    PAGEUP: 33,\n    PAGEDOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40\n});\n\nconst MENU_ACTIVATION_DELAY = 200;\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/ListAccessibility').default>} ListAccessibility\n */\n\n/**\n * @param {ListAccessibility} ListAccessibility Base widget for extending\n * @returns {typeof MenuButton} MenuButton widget\n */\nexport default function (ListAccessibility) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class MenuButton\n     * @augments ListAccessibility\n     * @classdesc Represents MenuButton component with next features:\n     * 1. Allow open/close menu\n     * 2. Allow handling mouse, keyboard events to be able react to user's actions\n     * 3. Allow check if submenus exist and its state(opened/closed) to set focus the correct place\n     * 4. Support keyboard navigation for accessibility\n     * MenuButton component should be imlemented according to https://www.w3.org/TR/wai-aria-practices/#menubutton specs\n     * @example <caption>Example of MenuButton widget usage</caption>\n     * <div\n     *     data-widget=\"menuButton\"\n     *     data-event-mouseenter=\"mouseEnter\"\n     *     data-event-mouseleave=\"mouseLeave\"\n     *     data-event-keydown=\"handleKeydown\"\n     *     ....\n     * >\n     *     <a\n     *         role=\"menuitem\"\n     *         aria-haspopup=\"true\"\n     *         aria-expanded=\"false\"\n     *         tabindex=\"0\"\n     *         data-ref=\"itemLink\"\n     *     >\n     *         .... menu button text\n     *     </a>\n     *     <ul\n     *         role=\"menu\"\n     *         aria-hidden=\"true\"\n     *         data-ref=\"submenu\"\n     *     >\n     *         <isloop items=\"${lLinks}\" var=\"link\">\n     *             <li\n     *                 data-widget.lg.xl=\"menuBarItem\"\n     *                 role=\"none\"\n     *             >\n     *                 <button\n     *                     role=\"menuitem\"\n     *                     tabindex=\"-1\"\n     *                     data-ref=\"itemLink\"\n     *                 >\n     *                     .... item link\n     *                 </button>\n     *             </li>\n     *         </isloop>\n     *     </ul>\n     * </div>\n     */\n    class MenuButton extends ListAccessibility {\n        prefs() {\n            return {\n                submenu: 'submenu',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic.\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.defineItems();\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.PAGEUP:\n                case keyCode.HOME:\n                    if (this.isSubmenuOpen) {\n                        this.setFocusToFirstItem();\n                    }\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.PAGEDOWN:\n                case keyCode.END:\n                    if (this.isSubmenuOpen) {\n                        this.setFocusToLastItem();\n                    }\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.UP:\n                    if (!this.isSubmenuOpen) {\n                        this.openMenu(event, false, true);\n                    } else {\n                        this.setFocusToPreviousItem();\n                    }\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.DOWN:\n                    if (!this.isSubmenuOpen) {\n                        this.openMenu(event, true, false);\n                    } else {\n                        this.setFocusToNextItem();\n                    }\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.TAB:\n                case keyCode.ESC:\n                    this.closeMenu(event, true);\n                    break;\n\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    this.openMenu(event, true, false);\n                    preventEventActions = true;\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n\n        /**\n         * @description Has submenu\n         * @returns {boolean} Return true if submenu exist\n         */\n        hasSubmenu() {\n            return this.has(this.prefs().submenu);\n        }\n\n        /**\n         * @description Open menu if exist\n         * @param {boolean} [focusFirstItem] Item focus flag\n         * @param {boolean} [focusLastItem] Item focus flag\n         * @returns {void}\n         */\n        openMenu(e,focusFirstItem, focusLastItem) {\n            if (this.hasSubmenu()) {\n                this.ref(this.prefs().itemLink)\n                    .attr('aria-expanded', 'true');\n                this.ref(this.prefs().submenu)\n                    .attr('aria-hidden', 'false');\n                this.isSubmenuOpen = true;\n                this.isSubmenuInFocus = focusFirstItem || focusLastItem;\n\n                if (focusFirstItem) {\n                    this.setFocusToFirstItem();\n                }\n\n                if (focusLastItem) {\n                    this.setFocusToLastItem();\n                }\n            }\n            let ele = e.target;\n            if(ele.classList.contains('b-country_selector-locale_language') || ele.classList.contains('b-country_selector-switcher')) {\n                let countrySelectorContainer = document.getElementById('language-switcher-menu');\n                if(countrySelectorContainer) {\n                    countrySelectorContainer.classList.remove('h-hidden');\n                }\n\n            }\n        }\n\n        /**\n         * @description Close menu\n         * @param {boolean} [returnFocus] Focus flag\n         * @returns {void}\n         */\n        closeMenu(e,returnFocus) {\n            if (this.hasSubmenu()) {\n                this.ref(this.prefs().itemLink)\n                    .attr('aria-expanded', 'false');\n                this.ref(this.prefs().submenu)\n                    .attr('aria-hidden', 'true');\n                this.isSubmenuOpen = false;\n                this.isSubmenuInFocus = false;\n\n                if (returnFocus) {\n                    this.focus();\n                }\n            }\n            let ele = e.currentTarget;\n            if(ele.classList.contains('b-country_selector')) {\n                let countrySelectorContainer = document.getElementById('language-switcher-menu');\n                if(countrySelectorContainer) {\n                    countrySelectorContainer.classList.add('h-hidden');\n                }\n\n            }\n        }\n\n        /**\n         * @description Toggle menu\n         * @returns {boolean|void} boolean value indicates is menu open or close\n         */\n        toggleMenu(_, event) {\n            return this.isSubmenuOpen ? this.closeMenu(event) : this.openMenu(event);\n        }\n\n        /**\n         * @description Mouse enter event handler\n         * @listens dom#mouseenter\n         * @returns {void}\n         */\n        mouseEnter(_, event) {\n            if (this.timerCleanerLeave) {\n                this.timerCleanerLeave();\n            }\n\n            if (this.isSubmenuOpen) { return; }\n\n            this.timerCleanerEnter = timeout(() => {\n                this.openMenu(event);\n            }, MENU_ACTIVATION_DELAY);\n        }\n\n        /**\n         * @description Mouse leave event handler\n         * @listens dom#mouseleave\n         * @returns {void}\n         */\n        mouseLeave(_, event) {\n            if (this.timerCleanerEnter) {\n                this.timerCleanerEnter();\n            }\n\n            if (!this.isSubmenuOpen) { return; }\n\n            this.timerCleanerLeave = timeout(() => {\n                this.closeMenu(event);\n            }, MENU_ACTIVATION_DELAY);\n        }\n    }\n\n    return MenuButton;\n}\n","import { timeout } from 'widgets/toolbox/util';\nimport { isDesktopView } from 'widgets/toolbox/viewtype';\n\nconst ARIA_EXPANDED = 'aria-expanded';\nconst keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32,\n    TAB: 9,\n    ESC: 27,\n    DOWN: 40,\n    UP: 38,\n    RIGHT: 39,\n    PAGEUP: 33,\n    PAGEDOWN: 34,\n    END: 35,\n    HOME: 36\n});\n\n/**\n * @typedef {InstanceType <typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n * @typedef {ReturnType<typeof import('widgets/global/SwipeToClose').default>} SwipeToClose\n * @typedef {ReturnType<typeof import('widgets/header/MenuPanelToggle').default>} MenuPanelToggle\n * @typedef {ReturnType<typeof import('widgets/header/HamburgerMenuItem').default>} HamburgerMenuItem\n */\n\n/**\n * @param {SwipeToClose} SwipeToClose Base widget for extending\n * @returns {typeof MenuPanel} MenuPanel widget\n */\nexport default function (SwipeToClose) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class MenuPanel\n     * @augments SwipeToClose\n     * @classdesc Represents MenuPanel component with next features:\n     * 1. Support keyboard navigation for accessibility\n     * 2. Allow handling mouse, keyboard events\n     * 3. Allow switch panel (next/previous)\n     * 4. Allow open/close panel\n     * 5. Allow close panel on Backdrop click\n     * 6. Allow focus manipulation\n     * 7. Control hamburger menu subpanels, copy and pasting submenu content into this panels\n     *\n     * MenuPanel widget should inside {@link HamburgerMenuItem} like menu item.\n     * Widget has next relationship:\n     * * Open panel using method {@link MenuPanel#openPanel} by event {@link MenuPanelToggle#event:navPanelOpen} from {@link MenuPanelToggle} widget.\n     * * Open next panel using method {@link MenuPanel#nextPanel} by event {@link HamburgerMenuItem#event:navPanelNextLevel} from {@link HamburgerMenuItem} widget.\n     * * Open next panel using method {@link MenuPanel#previousPanel} by event {@link HamburgerMenuItem#event:navPanelPreviousLevel} from {@link HamburgerMenuItem} widget.\n     *\n     * @example <caption>Example of MenuPanel widget usage</caption>\n     * <div\n     *    id=\"main-navigation\"\n     *    class=\"b-menu_panel\"\n     *    aria-labelledby=\"main-navigation-toggle\"\n     *    data-widget=\"menuPanel\"\n     *    data-event-click=\"closeOnBackdrop\"\n     *    data-event-keydown.sm.md=\"handleKeydown\"\n     * >\n     *     <div class=\"b-menu_panel-head\">\n     *         <button data-event-click.prevent=\"closePanel\">close</button>\n     *     </div>\n     *     ... widget content\n     * </div>\n     * @property {string} data-widget - Widget name `menuPanel`\n     * @property {string} data-event-click - Event listener handler for click events\n     * @property {string} data-event-keydown - Event listener handler for keydown events\n     * @property {number} data-panel-items-count - count of items\n     * @property {number} data-panel-count - count of panels\n     * @property {string} data-panel-container - reference id of child element, value of its data-ref attribute\n     * @property {string} data-classes-backdrop-active - class added/removed on 'self' element on openPanel/closePanel\n     * @property {string} data-classes-dialog-open - class added/removed on ref element 'dialog' on openPanel/closePanel\n     * @property {string} data-classes-has-dialog - class added/removed on 'html' element on openPanel/closePanel\n     * @property {string} data-classes-active-level - prefix for class that is added/removed from panelContainer when navigating between panels\n     * @property {string} data-panel-items-prefix - prefix of ID of panel items\n     * @property {string} data-main-manu - id of menu element\n     * @property {string} data-panel - prefix of ID of panels\n     * @property {string} data-item-switch-timeout - timeout (in ms) between panels focus changes\n     */\n    class MenuPanel extends SwipeToClose {\n        /**\n         * @description calls super constructor, adds initial states etc.\n         *\n         * @param {HTMLElement} el DOM element\n         * @param {{[x: string]: object|string|number|boolean|null|undefined}} config widget config\n         */\n        constructor(el, config = {}) {\n            super(el, config);\n            this.parentMenuItems = [];\n            this.panelItems = [];\n            this.currentLevel = 1;\n        }\n\n        prefs() {\n            return {\n                classesBackdropActive: 'm-active',\n                classesDialogOpen: 'm-opened',\n                classesDialogClosed: 'm-closed',\n                classesHasDialog: 'm-has_dialog',\n                classesActiveLevel: 'm-active_level_',\n                panelItemsCount: 0,\n                panelCount: 3,\n                panelItemsPrefix: 'panelItem-',\n                mainMenu: 'main-menu',\n                mainMenuFooter: 'menu-footer',\n                panelTitle: 'panelTitleLevel',\n                panel: 'panel-level-',\n                itemSwitchTimeout: 500,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @listens MenuPanelToggle#navPanelOpen\n         * @listens HamburgerMenuItem#navPanelNextLevel\n         * @listens HamburgerMenuItem#navPanelPreviousLevel\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.definePanelItems();\n            this.checkAriaAttributes();\n            this.eventBus().on('viewtype.change', 'checkAriaAttributes');\n            this.eventBus().on('viewtype.change', 'closePanel');\n            this.eventBus().on('nav.panel.open', 'openPanel');\n            this.eventBus().on('nav.panel.next.level', 'nextPanel');\n            this.eventBus().on('nav.panel.previous.level', 'previousPanel');\n            this.applyMenuRole(true);\n\n            this.onDestroy(() => {\n                this.clearState();\n                this.applyMenuRole(false);\n            });\n        }\n\n        /**\n         * @description Clear menu panel state\n         * @returns {void}\n         */\n        clearState() {\n            this.ref('html').removeClass(this.prefs().classesHasDialog);\n            this.ref('self').removeClass(this.prefs().classesBackdropActive);\n            this.ref('dialog').removeClass(this.prefs().classesDialogOpen);\n            this.ref('dialog').removeClass(this.prefs().classesDialogClosed);\n        }\n\n        /**\n         * @description Toggle menu roles\n         * @param {boolean} isMenu Menu type\n         * @returns {void}\n         */\n        applyMenuRole(isMenu) {\n            this.eachChild(child => {\n                if (child.id && child.id === 'main-menu') {\n                    child.ref('self').attr('role', 'menubar');\n                }\n            });\n        }\n\n        /**\n         * @description Define Panel Items\n         * @returns {void}\n         */\n        definePanelItems() {\n            this.panelItems = this.getPanelItems();\n            this.currentPanelItem = this.panelItems[0];\n            this.firstPanelItem = this.panelItems[0];\n            this.lastPanelItem = this.panelItems[this.panelItems.length - 1];\n        }\n\n        /**\n         * @description Check Aria attributes and updated it for custom menu items depend on viewport.\n         * <br> Custom Menu has sub item on Large and XLarge viewports but doesn't have on Small and Medium, as per FSD.\n         * To correctly support accessibility requirements aria attributes dynamically updated.\n         * @returns {void}\n         */\n        checkAriaAttributes() {\n            this.panelItems\n                .map(menuItem => menuItem.ref('itemLink'))\n                .filter(itemLink => itemLink.data('isCustomMenuHtml'))\n                .forEach(itemLink => {\n                    if (isDesktopView()) {\n                        itemLink.attr(ARIA_EXPANDED, 'true');\n                        itemLink.attr('aria-haspopup', 'true');\n                    } else {\n                        itemLink.attr(ARIA_EXPANDED, 'false');\n                        itemLink.attr('aria-haspopup', 'false');\n                    }\n                });\n        }\n\n        /**\n         * @description Open next panel level\n         * @param {object} data data\n         * @returns {void}\n         */\n        nextPanel(data) {\n            data.parentMenuItem.attr(ARIA_EXPANDED, 'true');\n            data.parentMenuItem.attr('aria-owns', 'submenu-level-' + (this.currentLevel + 1));\n            this.parentMenuItems.push(data.parentMenuItem);\n\n            this.handlePanel(this.currentLevel + 1, true, data.parentMenuItem.getText(), data.htmlMarkup);\n        }\n\n        /**\n         * @description Open previos panel level\n         * @returns {void}\n         */\n        previousPanel() {\n            if (this.parentMenuItems.length) {\n                const last = this.parentMenuItems.pop();\n                last.attr('aria-owns', null);\n                last.attr(ARIA_EXPANDED, 'false');\n            }\n\n            this.handlePanel(this.currentLevel - 1, true);\n        }\n\n        /**\n         * @description Handle panel level\n         * @param {number} level Level\n         * @param {boolean} focusPanelItem Focus panel item flag\n         * @param {string} [panelName] Panel Name\n         * @param {string} [htmlMarkup] HTML Markup\n         * @returns {void}\n         */\n        handlePanel(level, focusPanelItem, panelName, htmlMarkup) {\n            if (panelName) {\n                this.has(this.prefs().panelTitle + level, (panelTitle) => {\n                    panelTitle.setText(panelName);\n                });\n            }\n\n            if (htmlMarkup) {\n                this.getById(this.prefs().panel + level, (panel) => {\n                    panel.ref('self').attr('aria-busy', 'true');\n                    panel.setSubmenuHTML(htmlMarkup);\n                });\n            }\n\n            if (level === 1) {\n                this.ref('self').attr('aria-busy', 'true');\n            }\n\n            this.has(this.prefs().panelContainer, (panelContainer) => {\n                panelContainer.removeClass(this.prefs().classesActiveLevel + this.currentLevel);\n                panelContainer.addClass(this.prefs().classesActiveLevel + level);\n            });\n\n            if (focusPanelItem) {\n                this.setFocusToPanelItem(level, level > this.currentLevel);\n            }\n\n            this.currentLevel = level;\n        }\n\n        /**\n         * @description Set focus to panel item\n         * @param {number} level Level\n         * @param {boolean} updateItems Update item flag\n         * @returns {void}\n         */\n        setFocusToPanelItem(level, updateItems) {\n            this.onDestroy(timeout(() => {\n                if (level === 1) {\n                    this.setFocusToItem(this.currentPanelItem);\n                    this.ref('self').attr('aria-busy', 'false');\n                } else {\n                    this.getById(this.prefs().panel + level, (panel) => {\n                        panel.markSubmenuOpened();\n\n                        if (updateItems) {\n                            panel.defineItems();\n                        }\n\n                        panel.setFocusToCurrentItem();\n                        panel.ref('self').attr('aria-busy', 'false');\n                    });\n                }\n            }, this.prefs().itemSwitchTimeout));\n        }\n\n        /**\n         * @description Set focus to first item\n         * @returns {void}\n         */\n        setFocusToFirstItem() {\n            this.ref('self').attr('aria-busy', 'true');\n\n            this.onDestroy(timeout(() => {\n                this.setFocusToItem(this.firstPanelItem);\n                this.ref('self').attr('aria-busy', 'false');\n            }, this.prefs().itemSwitchTimeout));\n        }\n\n        /**\n         * @description Set focus to last item\n         * @returns {void}\n         */\n        setFocusToLastItem() {\n            this.ref('self').attr('aria-busy', 'true');\n\n            this.onDestroy(timeout(() => {\n                this.setFocusToItem(this.lastPanelItem);\n                this.ref('self').attr('aria-busy', 'false');\n            }, this.prefs().itemSwitchTimeout));\n        }\n\n        /**\n         * @description Set focus to next item\n         * @returns {void}\n         */\n        setFocusToNextItem() {\n            if (this.panelItems === undefined) { return; }\n\n            if (this.panelItems.length) {\n                const newItem = this.currentPanelItem === this.lastPanelItem\n                    ? this.firstPanelItem\n                    : this.panelItems[this.getItemIndex(this.currentPanelItem) + 1];\n\n                this.setFocusToItem(newItem);\n            }\n        }\n\n        /**\n         * @description Set focus to previos item\n         * @returns {void}\n         */\n        setFocusToPreviosItem() {\n            if (this.panelItems === undefined) { return; }\n\n            if (this.panelItems.length) {\n                const newItem = this.currentPanelItem === this.firstPanelItem\n                    ? this.lastPanelItem\n                    : this.panelItems[this.getItemIndex(this.currentPanelItem) - 1];\n\n                this.setFocusToItem(newItem);\n            }\n        }\n\n        /**\n         * @description Set focus to item\n         * @param {object} panelItem Panel item\n         * @returns {void}\n         */\n        setFocusToItem(panelItem) {\n            panelItem.focus();\n            this.currentPanelItem = panelItem;\n        }\n\n        /**\n         * @description Get item index\n         * @param {object} panelItem panel item\n         * @returns {number} Item index\n         */\n        getItemIndex(panelItem) {\n            return this.panelItems ? this.panelItems.indexOf(panelItem) : -1;\n        }\n\n        /**\n         * @description Get Panel Items\n         * @returns {Array} Panel items\n         */\n        getPanelItems() {\n            const panelItems = [];\n\n            this.getById(this.prefs().mainMenu, (item) => {\n                panelItems.push(...item.items);\n            });\n\n            this.getById(this.prefs().mainMenuFooter, (item) => {\n                panelItems.push(...item.items);\n            });\n\n            for (let i = 0; i < this.prefs().panelItemsCount; i++) {\n                this.getById(this.prefs().panelItemsPrefix + i, (item) => {\n                    panelItems.push(item);\n                });\n            }\n\n            return panelItems;\n        }\n\n        /**\n         * @description Open Menu Panel\n         * @param {object} data data\n         * @returns {void}\n         */\n        openPanel(data) {\n            this.ref('html').addClass(this.prefs().classesHasDialog);\n            this.ref('self').addClass(this.prefs().classesBackdropActive);\n            this.ref('dialog')\n                .addClass(this.prefs().classesDialogOpen)\n                .removeClass(this.prefs().classesDialogClosed);\n\n            this.ref('self').attr('data-tau', 'menu_panel');\n\n            this.definePanelItems();\n            if (data.focusToLastItem) {\n                this.setFocusToLastItem();\n            } else {\n                this.setFocusToFirstItem();\n            }\n            this.isOpened = true;\n        }\n\n        /**\n         * @description Close Menu Panel\n         * @emits MenuPanel#navPanelClose\n         * @emits MenuPanel#navPanelToggleFocus\n         * @returns {void}\n         */\n        closePanel() {\n            if (this.parentMenuItems.length) {\n                this.parentMenuItems = [];\n            }\n\n            if (this.isOpened) {\n                this.ref('html').removeClass(this.prefs().classesHasDialog);\n                this.ref('self').removeClass(this.prefs().classesBackdropActive);\n                this.ref('dialog')\n                    .removeClass(this.prefs().classesDialogOpen)\n                    .addClass(this.prefs().classesDialogClosed);\n                this.ref('self').attr('data-tau', false);\n                /**\n                 * @description Event to close panel\n                 * @event MenuPanel#navPanelClose\n                 */\n                this.eventBus().emit('nav.panel.close');\n                /**\n                 * @description Event to toggle focus\n                 * @event MenuPanel#navPanelToggleFocus\n                 */\n                this.eventBus().emit('nav.panel.toggle.focus');\n                this.handlePanel(1, false);\n                this.onDestroy(timeout(() => {\n                    for (let i = 1; i <= this.prefs().panelCount; i++) {\n                        this.getById(this.prefs().panel + i, (panel) => {\n                            panel.clearSubmenuHTML();\n                        });\n                    }\n                }, this.prefs().itemSwitchTimeout));\n                this.isOpened = false;\n            }\n        }\n\n        /**\n         * @description Close On Backdrop handler\n         * @listens dom#click\n         * @param {RefElement} ref - interacted element\n         * @param {Event} event - event object\n         * @returns {void}\n         */\n        closeOnBackdrop(ref, event) {\n            if (event.target === this.ref('self').get()) {\n                this.closePanel();\n            }\n        }\n\n        /**\n         * @description Handle Enter key event\n         * @listens dom#keydown\n         * @param {Event} event Event Object\n         * @returns {void}\n         */\n        handleEnterKey(event) {\n            const domNode = /** @type {HTMLAnchorElement} */(event.target);\n            if (domNode && domNode.href) {\n                window.location.assign(domNode.href);\n            }\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.PAGEUP:\n                case keyCode.HOME:\n                    this.setFocusToFirstItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.PAGEDOWN:\n                case keyCode.END:\n                    this.setFocusToLastItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.TAB:\n                    this.closePanel();\n\n                    break;\n\n                case keyCode.ESC:\n                    this.closePanel();\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    this.handleEnterKey(event);\n                    preventEventActions = true;\n                    break;\n\n                case keyCode.DOWN:\n                    this.setFocusToNextItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.UP:\n                    this.setFocusToPreviosItem();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.RIGHT:\n                    this.currentPanelItem.openMenu();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return MenuPanel;\n}\n","const keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32,\n    UP: 38,\n    DOWN: 40\n});\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof MenuPanelToggle} MenuPanelToggle widget\n */\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory header\n     * @class MenuPanelToggle\n     * @augments Widget\n     * @classdesc Represents MenuPanelToggle component with next features:\n     * 1. Widget, which triggers touch/mobile navigation menu panel to open/close\n     * 2. This widget work same as menubutton https://www.w3.org/TR/wai-aria-practices/#menubutton and open Hamburger menu, that act as regular menu, but styled as panel\n     * Widget has next relationship:\n     * * Open panel using method {@link MenuPanelToggle#openPanel} by event {@link MenuPanelToggle#event:navPanelOpen} from {@link MenuPanelToggle} widget.\n     * * Close panel using method {@link MenuPanelToggle#closePanel} by event {@link MenuPanel#event:navPanelClose} from {@link MenuPanel} widget.\n     * * Toggle panel focus using method {@link MenuPanelToggle#focus} by event {@link MenuPanel#event:navPanelToggleFocus} from {@link MenuPanel} widget.\n     * @example <caption>Example of MenuPanelToggle widget usage</caption>\n     * <button id=\"main-navigation-toggle\" type=\"button\"\n     *     data-widget=\"menuPanelToggle\"\n     *     data-event-click.prevent=\"showPanel\"\n     *     data-event-keydown=\"handleKeydown\"\n     *     data-widget=\"menuPanelToggle\"\n     * >\n     *     ...button content\n     * </button>\n     * @property {string} data-widget - Widget name `menuPanelToggle`\n     * @property {string} data-event-click - Event handler method for click event\n     * @property {string} data-event-keydown - Event handler method for keydown event\n     */\n    class MenuPanelToggle extends Widget {\n        prefs() {\n            return {\n                classesOpenedNav: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic.\n         * @listens MenuPanel#navPanelClose\n         * @listens MenuPanelToggle#navPanelOpen\n         * @listens MenuPanel#navPanelToggleFocus\n         * @returns {void}\n         */\n        init() {\n            this.eventBus().on('nav.panel.close', 'closePanel');\n            this.eventBus().on('nav.panel.open', 'openPanel');\n            this.eventBus().on('nav.panel.toggle.focus', 'focus');\n        }\n\n        /**\n         * @description Focus 'self' element\n         * @returns {void}\n         */\n        focus() {\n            this.ref('self').focus();\n        }\n\n        /**\n         * @description Show panel\n         * @emits MenuPanelToggle#navPanelOpen\n         * @param {boolean} [focusToLastItem] Focus to last item flag\n         * @returns {void}\n         */\n        showPanel(focusToLastItem) {\n            this.openPanel();\n            /**\n             * @description Event to open nav panel\n             * @event MenuPanelToggle#navPanelOpen\n             */\n            this.eventBus().emit('nav.panel.open', {\n                focusToLastItem: focusToLastItem\n            });\n        }\n\n        /**\n         * @description On click handler\n         * @listens dom#click\n         * @returns {void}\n         */\n        onClick() {\n            this.showPanel();\n        }\n\n        /**\n         * @description Marked toggle as opened\n         * @returns {void}\n         */\n        openPanel() {\n            this.ref('self')\n                .addClass(this.prefs().classesOpenedNav)\n                .attr('aria-expanded', 'true');\n\n            this.isOpenDialog = true;\n        }\n\n        /**\n         * @description Close panel\n         * @returns {void}\n         */\n        closePanel() {\n            this.ref('self')\n                .removeClass(this.prefs().classesOpenedNav)\n                .attr('aria-expanded', 'false');\n\n            if (this.isOpenDialog) {\n                this.focus();\n                this.isOpenDialog = false;\n            }\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @param {HTMLElement} _ Source of keydown event\n         * @param {KeyboardEvent} event  Event object\n         * @returns {void}\n         */\n        handleKeydown(_, event) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.UP:\n                    this.showPanel(true);\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                case keyCode.DOWN:\n                    this.showPanel();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return MenuPanelToggle;\n}\n","import { timeout } from 'widgets/toolbox/util';\n\n// TODO: JSDoc for all methods\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base ProductTile implementation\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n * @returns {typeof ProductTile} Product Tile class\n */\nexport default function (Widget) {\n    /**\n     * @class ProductTile\n     * @augments Widget\n     * @classdesc Product Tile component. Used in different product grids.\n     * @property {string} data-widget - Widget name `productTile`\n     * @property {string} data-pid - product ID\n     * @property {string} data-product-name - product name\n     * @property {object} data-analytics - analytics data for product tile\n     * @property {string} data-text-network-error - network error text, when current ajax operation ended up with network error\n     * @property {string} data-text-added-to-wishlist - a text which is used to indicate, that product has being added to wishlist\n     * @property {string} data-add-to-wishlist-hide-texts - indicates, that some texts should not be displayed while adding product in a wishlist from product tile\n     * @property {object} data-accessibility-alerts - contains accessibility alerts for product tile actions\n     * @property {object} data-grid-item - indicates, that product tile is used inside product grid\n     * @example\n     * // use this code to display widget\n     * <section\n     *     class=\"b-product_tile\"\n     *     <isif condition=\"${pdict.first}\">\n     *         data-id=\"firstTile\"\n     *     </isif>\n     *     data-pid=\"${product.id}\"\n     *     data-product-name=\"${product.productName}\"\n     *     data-widget=\"productTile\"\n     *     data-analytics=\"${JSON.stringify(product.gtmInfo)}\"\n     *     data-text-network-error=\"${Resource.msg('error.alert.network', 'product', null)}\"\n     *     data-text-added-to-wishlist=\"${Resource.msg('button.added.to.wishlist', 'wishlist', null)}\"\n     *     data-add-to-wishlist-hide-texts=\"true\"\n     *     data-accessibility-alerts='{\n     *         \"addedtowishlist\": \"${Resource.msg('alert.addedtowishlist', 'product', null)}\"\n     *     }'\n     *     data-grid-item=true\n     *     data-tau=\"product_tile\"\n     *     data-tau-product-id=\"${product.id}\"\n     * >\n     *     <isinclude template=\"product/productTile\" />\n     * </section>\n     */\n    class ProductTile extends Widget {\n        /**\n         * @description Inits widget\n         * @emits \"product.tile.init\"\n         * @returns {void}\n         */\n        init() {\n            super.init();\n\n            timeout(() => {\n                this.eventBus().emit('product.tile.init', this.ref('self'));\n            }, 0);\n        }\n\n        /**\n         * @description Executes when user clicks on product details link on product tile.\n         * Usually used by analytics etc.\n         * @emits tile.product.link.click\n         * @param {refElement} link - product link\n         */\n        onProductLinkClick(link) {\n            this.eventBus().emit('tile.product.link.click', link);\n        }\n\n        /**\n         * @description On modal window show callback\n         * @emits \"product.tile.qv.open\"\n         */\n        onModalShow() {\n            this.eventBus().emit('product.tile.qv.open', {\n                gtmInfo: this.data('analytics')\n            });\n        }\n\n        showQuickView(button) {\n            /**\n             * @description Event dispatched, when Global Modal should be triggered\n             * @event module:events#dialogshow\n             */\n            this.eventBus().emit('dialogshow', {\n                url: button.data('url'),\n                wrapperClasses: 'm-quick_view',\n                ariaLabel: this.prefs().productName,\n                attributes: {\n                    'data-tau-unique': 'quick_view_dialog'\n                }\n            });\n\n            this.onModalShow();\n        }\n\n        /**\n         * @description Focus\n         */\n        focus() {\n            this.ref('tileImageLink').focus();\n        }\n    }\n\n    return ProductTile;\n}\n","// TO BE REVIEWED\nimport { getJSONByUrl } from 'widgets/toolbox/ajax';\nimport { scrollElementTo } from 'widgets/toolbox/scroll';\nimport { timeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/Combobox').default>} Combobox\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n * @typedef {ReturnType<typeof import('widgets/global/Modal').default>} Modal\n */\n/**\n * @description Search form implementation. That consists of form and combobox with suggestion functionality\n * @param {Combobox} Combobox Base widget for extending\n * @returns {typeof SearchBox} SearchBox class\n */\nexport default function (Combobox) {\n    /**\n     * @class SearchBox\n     * @augments Combobox\n     * @classdesc Search suggestion box. Handles input, shows and interacts with suggestions box.\n     * <br>Implements `SFCC search suggestions` provider functionality in `getSuggestions` method\n     * <br>It also override combobox logic - when we select suggestion the default action not fill input, but navigate to\n     * <br>suggestion that implemented as links (reference combobox should have listbox items).\n     * <br>If user interactive with keyboard and select link form should not submitted.\n     * @property {string} data-widget - Widget name `searchBox`\n     * @property {string} data-url - URL to obtain serach suggestions from server based on customer's input\n     * @property {boolean} data-close-on-tab - If true - `tab` keypress will close listbox\n     * @property {string} data-widget-event-closesearch - An event, fired when `close` element was pressed\n     * @property {string} data-event-keydown - event handler for `keydown` event\n     * @property {boolean} data-close-from-outside - config, which shows, if combobox should be closed when click outside\n     * @property {number} data-show-spinner-delay - config delay in ms to show spinner\n     * @property {string} data-ref-first-focus-element - reference to first focus element for focus trap\n     * @property {string} data-ref-last-focus-element - reference to last focus element for focus trap\n     * @example\n     * // use this code to display minicart widget\n     * <div\n     *     data-widget=\"searchBox\"\n     *     data-url=\"${URLUtils.url('SearchServices-GetSuggestions')}\"\n     *     data-close-on-tab=\"false\"\n     * >\n     *     <form>\n     *         ... serach input\n     *     </form>\n     *     ...\n     *     <div data-ref=\"listbox\" data-event-mouseenter=\"markHover\" data-event-mouseleave=\"unMarkHover\">\n     *         <div role=\"none\" class=\"b-suggestions-inner\" data-ref=\"listboxInner\"></div>\n     *     </div>\n     *     <script data-ref=\"template\" type=\"template/mustache\">\n     *         <div data-ref=\"listboxInner\">\n     *             ... search suggestions\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class SearchBox extends Combobox {\n        prefs() {\n            return {\n                showSpinnerDelay: 500,\n                outlineSpace: 5,\n                classesClearEnabled: 'm-visible',\n                classesLoadingSuggestions: 'm-loading',\n                classesLoadingSuggestionsLong: 'm-loading-long',\n                url: '',\n                disableRendering: true,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            this.eventBus().on('page.show.searchbox', 'openSearch');\n        }\n\n        /**\n         * @description Shows suggestions popup in initial state.\n         * <br>Initial state can be a slot/asset markup, rendered in backed\n         * <br>and placed in `searchSuggestionsInitial` template\n         * @param {boolean} setInputFocus - if we need to focus search input\n         * @returns {void}\n         */\n        showInDefaultState(setInputFocus = true) {\n            if (setInputFocus) {\n                this.focusInput();\n            }\n            this.lastSearchedTerm = '';\n            this.render('searchSuggestionsInitial', null, this.ref('listboxInner'))\n                .then(() => {\n                    this.selectedIndex = -1;\n                    this.resultsCount = this.getRealItemsCount();\n                    this.openListbox();\n                });\n        }\n\n        /**\n         * @param {string} query - requested search query\n         */\n        getSuggestions(query) {\n            getJSONByUrl(this.prefs().url, { q: query })\n                .then(response => this.processResponse(query, response))\n                .catch(this.handleError.bind(this));\n\n            this.toggleSpinner(true);\n        }\n\n        /**\n         * @param {string} query - customer's search query\n         * @param {object} response - backend response with suggestions\n         */\n        processResponse(query, response) {\n            if (response && response.suggestions) {\n                if (this.ref('input').val() !== query) {\n                    // if value changed during request, we do not show outdated suggestions\n                    return;\n                }\n\n                if (document.activeElement !== this.ref('input').get()) {\n                    this.toggleSpinner(false);\n                    this.showInDefaultState();\n                    return;\n                }\n\n                this.render(undefined, response, this.ref('listboxInner')).then(() => {\n                    timeout(() => {\n                        const listbox = this.ref('listbox').get();\n                        if (listbox) {\n                            scrollElementTo(listbox);\n                        }\n                    }, 10);\n\n                    this.afterSuggestionsUpdate(query, response.suggestions.total);\n                });\n            } else {\n                this.showInDefaultState();\n            }\n\n            this.toggleSpinner(false);\n        }\n\n        /**\n         * @param {string} query - customer's search query\n         */\n        handleError(query) {\n            this.render('templateError', {}, this.ref('listboxInner')).then(()=> {\n                this.toggleSpinner(false);\n                this.afterSuggestionsUpdate(query, 0);\n            });\n        }\n\n        afterCloseListbox() {\n            this.ref('listboxInner').empty();\n        }\n\n        /**\n         * @param {refElement} selectedItem - search suggestion item selected by customer\n         */\n        activateItem(selectedItem) {\n            // We do not need default combobox behaviour.\n            // Instead of pasting suggestion value we go by the link\n            // if we have selected item in listbox\n            if (selectedItem) {\n                this.ref('input').val(selectedItem.attr('data-suggestion-value'));\n                this.goingByLink = true;\n                window.location.assign(selectedItem.attr('href').toString());\n            }\n        }\n\n        handleInput() {\n            const inputValue = this.ref('input');\n            let inputLength = 0;\n            if (inputValue.length) {\n                inputLength = (inputValue.prop('value') && inputValue.prop('value').length) || 0;\n            }\n\n            if (inputLength >= this.prefs().minChars && inputLength <= this.prefs().maxChars) {\n                this.updateListbox();\n            } else {\n                if (this.timeout) {\n                    clearTimeout(this.timeout);\n                }\n                this.showInDefaultState();\n            }\n            this.toggleClearButton(!!this.ref('input').val());\n        }\n\n        /**\n         * @param {boolean} isShown - Indicated is spinner display\n         */\n        toggleSpinner(isShown) {\n            const listbox = this.ref('listbox');\n            listbox.attr('aria-busy', String(isShown));\n            listbox.toggleClass(this.prefs().classesLoadingSuggestions, isShown);\n\n            if (isShown) {\n                this.longLoadingTimer = timeout(() => {\n                    this.ref('listbox').addClass(this.prefs().classesLoadingSuggestionsLong);\n                }, this.prefs().showSpinnerDelay);\n            } else {\n                if (this.longLoadingTimer) {\n                    this.longLoadingTimer();\n                }\n                this.ref('listbox').removeClass(this.prefs().classesLoadingSuggestionsLong);\n            }\n        }\n\n        /**\n         * @param {refElement} selectedItem - search suggestion item selected by customer\n         */\n        afterItemSelected(selectedItem) {\n            const item = selectedItem.get();\n            if (item) {\n                const listbox = this.ref('listbox').get();\n                const top = (item.offsetTop - this.prefs().outlineSpace);\n                if (listbox) {\n                    scrollElementTo(listbox, top);\n                }\n            }\n        }\n\n        /**\n         * @description Executes when user clicks on product details link in the search box results.\n         * Usually used by analytics etc.\n         * @emits \"searchbox.product.link.click\"\n         * @param {refElement} link - product link\n         */\n        onProductLinkClick(link) {\n            this.eventBus().emit('searchbox.product.link.click', link);\n        }\n\n        // Form functionality\n\n        handleSubmit(_, event) {\n            const inputVal = this.ref('input').val();\n            if (this.goingByLink || !inputVal) {\n                event.preventDefault();\n            }\n\n            if (!inputVal) {\n                this.focusInput();\n            } else {\n                this.closeListbox();\n            }\n        }\n\n        /**\n         * @description Clears search input and show suggestions from default state. Optionally sets focus to search field.\n         * @param {boolean} setInputFocus - if we need to focus input\n         */\n        clearInput(setInputFocus) {\n            this.toggleSpinner(false);\n            const searchInput = this.ref('input');\n            searchInput.val('');\n            if (setInputFocus) {\n                this.focusInput();\n            }\n            this.toggleClearButton(false);\n            this.showInDefaultState(setInputFocus);\n        }\n\n        /**\n         * @param {boolean} isInputHasValue - is search input has value\n         */\n        toggleClearButton(isInputHasValue) {\n            this.ref('clearButton').toggleClass(this.prefs().classesClearEnabled, isInputHasValue);\n        }\n\n        /**\n         * @description Gets the real count of suggestions items.\n         * <br>Could be used in case, when no backend suggestion count are set.\n         * <br>As an example: case of rendering content assets with\n         * <br>unknown suggestions set\n         * @returns {number} - a number of listbox inner elements\n         */\n        getRealItemsCount() {\n            const listboxInner = this.ref('listboxInner').get();\n            return listboxInner\n                ? listboxInner.querySelectorAll('[data-suggestion-value]').length\n                : 0;\n        }\n\n        /**\n         * @description Cancel handler\n         */\n        cancel() {\n            this.closeSearch();\n        }\n\n        openSearch() {\n            // @ts-ignore\n            this.showModal({\n                attributes: {\n                    'data-tau': 'search_dialog'\n                }\n            }, this.showInDefaultState.bind(this));\n        }\n\n        focusInput() {\n            // iOS could disable focus method on HTMLInputElement https://bugs.webkit.org/show_bug.cgi?id=195884\n            // to not annoy the user with software keyboard. To get keyboard we should prevent that input and parent\n            // get hidden with display none + focus should be set without delay.\n            const input = this.ref('input').get();\n            if (!input) { return; }\n            input.focus();\n        }\n\n        /**\n         * @description Used to notify concerning widget to close suggestions popup and do all other actions\n         */\n        closeSearch() {\n            this.emit('closesearch');\n            // @ts-ignore\n            this.closeModal();\n            this.closeListbox();\n            this.clearInput(false);\n        }\n\n        toggleSearch(ref) {\n            if (ref.attr('aria-expanded') === 'true') {\n                this.closeSearch();\n            } else {\n                this.openSearch();\n            }\n        }\n\n        hide() {\n            super.hide();\n            this.closeListbox();\n            this.clearInput(false);\n            return this;\n        }\n    }\n\n    return SearchBox;\n}\n","import { timeout } from 'widgets/toolbox/util';\n\nconst TRIGGER_SHOW_IN_DEFAULT_STATE = 100;\n\n/**\n * @typedef {ReturnType<typeof import('widgets/global/Modal').default>} Modal\n * @typedef {ReturnType<typeof import('widgets/search/SearchBox').default>} SearchBox\n */\n\n/**\n * @description Search box mobile toggle\n * @param {Modal} Modal Base widget for extending\n * @returns {typeof SearchBoxToggle} SearchBox Toggle class\n */\nexport default function (Modal) {\n    /**\n     * @class SearchBoxToggle\n     * @augments Modal\n     */\n    class SearchBoxToggle extends Modal {\n        init() {\n            super.init();\n            const SearchBox = /** @type {SearchBox} */(this.getConstructor('searchBox'));\n            this.eachChild(childCmp => {\n                if (childCmp instanceof SearchBox) {\n                    this.searchBox = childCmp;\n                }\n            });\n            this.eventBus().on('page.show.searchbox', 'openSearch');\n        }\n\n        /**\n         * @description Cancel handler\n         */\n        cancel() {\n            this.closeSearch();\n        }\n\n        openSearch() {\n            this.showModal({\n                attributes: {\n                    'data-tau': 'search_dialog'\n                }\n            });\n\n            timeout(() => {\n                if (this.searchBox) {\n                    this.searchBox.showInDefaultState();\n                }\n            }, TRIGGER_SHOW_IN_DEFAULT_STATE);\n        }\n\n        closeSearch() {\n            this.closeModal();\n\n            if (this.searchBox) {\n                this.searchBox.closeListbox();\n                this.searchBox.clearInput(false);\n            }\n        }\n\n        toggleSearch(ref) {\n            if (ref.attr('aria-expanded') === 'true') {\n                this.closeSearch();\n            } else {\n                this.openSearch();\n            }\n        }\n\n        hide() {\n            super.hide();\n\n            if (this.searchBox) {\n                this.searchBox.closeListbox();\n                this.searchBox.clearInput(false);\n            }\n        }\n    }\n\n    return SearchBoxToggle;\n}\n","// TODO: Add full description for methods\nimport EventBus from 'widgets/toolbox/eventBus';\n\n/**\n * @class EventBusWrapper\n * @category widgets\n * @subcategory toolbox\n */\nclass EventBusWrapper {\n    /**\n     * @param {import('widgets/Widget').default} widgetInstance usually this of widget\n     */\n    constructor(widgetInstance) {\n        this.widgetInstance = widgetInstance;\n    }\n\n    /**\n     * @param {string} eventName name of event\n     * @param {string} methodName name of method to call if/when event happen\n     */\n    on(eventName, methodName) {\n        /**\n         * @type {(...args: any[]) => void}\n         */\n        let fn = (...args) => {\n            this.widgetInstance[methodName].call(this.widgetInstance, ...args);\n        };\n        EventBus.addListener(eventName, fn);\n        this.widgetInstance.onDestroy(() => {\n            if (fn) {\n                EventBus.removeListener(eventName, fn);\n                // @ts-ignore\n                fn = null;\n            }\n        });\n    }\n\n    /**\n     * @param {string} eventName name of event\n     * @param {string} methodName name of method to call if/when event happen\n     */\n    once(eventName, methodName) {\n        let onceFn = (...args) => {\n            EventBus.removeListener(eventName, onceFn);\n            this.widgetInstance[methodName].call(this.widgetInstance, ...args);\n            // @ts-ignore\n            onceFn = null;\n        };\n        EventBus.addListener(eventName, onceFn);\n        this.widgetInstance.onDestroy(() => {\n            if (onceFn) {\n                EventBus.removeListener(eventName, onceFn);\n                // @ts-ignore\n                onceFn = null;\n            }\n        });\n    }\n\n    emit(...args) {\n        // @ts-ignore\n        EventBus.emit(...args);\n    }\n}\n\nexport default EventBusWrapper;\n","import { getData } from './util';\n\nconst HIDDEN_CLASS = 'm-hide';\n\n/**\n * @description Convert string to snake-case\n * @param {string} s String in camelCase to convert\n * @returns {string} Converted to snake-case string\n * @example myCustomProperty => my-custom-property\n */\nfunction toSnakeCase(s) {\n    return s.replace(/(?:^|\\.?)([A-Z])/g, (x, y) => '-' + y.toLowerCase()).replace(/^_/, '');\n}\n\n/**\n * @class RefElement\n * @classdesc jQuery like wrapper for simple access to DOM. It will be added into `Widget.items` array of first parent widget\n * @category widgets\n * @subcategory toolbox\n * @example\n * // to use just add data-ref attribute\n * <div data-ref=\"myRefElement\"></div>\n *\n * // to get it in any widget method\n * this.ref('myRefElement')\n */\nexport class RefElement {\n    /**\n     * @param {HTMLElement[]} els array of elements\n     */\n    constructor(els) {\n        /** @member {HTMLElement[]} */\n        this.els = els;\n    }\n\n    /**\n     * @description Get amount of elements in set\n     * @returns {number} Number of elements in set\n     */\n    get length() {\n        return this.els.length;\n    }\n\n    /**\n     * @description Get or Set data attribute depends on provided/not provided value\n     * @param {string} name Name of data attribute in camelCase, f.e. `testIt` to get `data-test-it`\n     * @param {any} [value] to set\n     * @returns {this|object|string|number|boolean|null|undefined}\n     * - if value provided - returns current instance for chaining\n     * - otherwise provided value of data attribute with appropriate type or undefined if attribute doesn't exist\n     */\n    data(name, value) {\n        const attrName = 'data-' + toSnakeCase(name);\n        if (typeof value === 'undefined') {\n            if (this.hasAttr(attrName)) {\n                const attrValue = this.attr(attrName);\n\n                if (typeof attrValue === 'string') {\n                    return getData(attrValue);\n                }\n            }\n            return undefined;\n        }\n        return this.attr(attrName, value);\n    }\n\n    /**\n     * @description Get or set the value into elements in set\n     * @param {any} [value] If not empty set value into inputs in set\n     * @returns {string|this}\n     * - If value: undefined - returns joined string of values in set of inputs\n     * - Otherwise returns current instance for chaining\n     */\n    val(value) {\n        if (typeof value === 'undefined') {\n            return this.els.map(el => /** @type {HTMLInputElement} */(el).value).join('');\n        }\n        if (typeof value === 'string') {\n            this.els.forEach(el => { /** @type {HTMLInputElement} */(el).value = value; });\n        }\n        return this;\n    }\n\n    /**\n     * @description Get validity object for first element in set\n     * @returns {{state: ValidityState, msg: string}|undefined}\n     * - If element instance of `HTMLInputElement|HTMLSelectElement` returns validity object\n     * - Otherwise returns `undefined`\n     */\n    getValidity() {\n        const element = this.els[0];\n\n        if (element instanceof HTMLInputElement\n            || element instanceof HTMLSelectElement\n            || element instanceof HTMLTextAreaElement\n        ) {\n            return {\n                state: element.validity,\n                msg: element.validationMessage\n            };\n        }\n        return undefined;\n    }\n\n    /**\n     * @description Appends string into each element from set\n     * @param {string} content String to append\n     * @returns {void}\n     */\n    append(content) {\n        this.els.forEach(el => {\n            const tempEl = document.createElement('div');\n\n            tempEl.innerHTML = content;\n\n            const scripts = /** @type {NodeListOf<HTMLScriptElement>} */ (tempEl.querySelectorAll(\n                'script[type=\"text/javascript\"]'\n            ));\n\n            Array.from(scripts).forEach(script => {\n                if (script && script.parentNode) {\n                    script.parentNode.removeChild(script);\n                }\n            });\n\n            Array.from(tempEl.childNodes).forEach(child => {\n                el.appendChild(child);\n            });\n\n            Array.from(scripts).forEach((/** @type {HTMLScriptElement} */script) => {\n                const tempScript = document.createElement('script');\n                tempScript.text = script.text;\n\n                el.appendChild(tempScript);\n            });\n\n            tempEl.innerHTML = '';\n        });\n    }\n\n    /**\n     * @description Prepends string into each element from set\n     * @param {string} content String to prepend\n     * @returns {void}\n     */\n    prepend(content) {\n        this.els.forEach(el => {\n            const tempEl = document.createElement('div');\n\n            tempEl.innerHTML = content;\n\n            const scripts = /** @type {NodeListOf<HTMLScriptElement>} */ (tempEl.querySelectorAll(\n                'script[type=\"text/javascript\"]'\n            ));\n\n            Array.from(scripts).forEach(script => {\n                if (script && script.parentNode) {\n                    script.parentNode.removeChild(script);\n                }\n            });\n\n            Array.from(tempEl.childNodes).reverse().forEach(child => el.prepend(child));\n\n            Array.from(scripts).forEach((/** @type {HTMLScriptElement} */script) => {\n                const tempScript = document.createElement('script');\n                tempScript.text = script.text;\n\n                el.appendChild(tempScript);\n            });\n\n            tempEl.innerHTML = '';\n        });\n    }\n\n    /**\n     * @description\n     * Get/Set/Remove attribute for each element of set depends on params:\n     * - if value: undefined - Get attribute value\n     * - if value: true - Set attribute attribute=\"attribute\", f.e. `attr('disabled', true)` => `disabled=\"disabled\"`\n     * - if value: null|false - Remove attribute if `value`\n     * - any another type - Convert value to string and set as attributeValue\n     * @param {string} attributeName Name of attribute\n     * @param {any} [value] to set (null or false to remove attribute)\n     * @returns {string|this}\n     * - If value: undefined - Returns string with joined values from attribute\n     * - Otherwise returns current instance for chaining\n     */\n    attr(attributeName, value) {\n        if (value === false || value === null) {\n            this.els.forEach(el => el.removeAttribute(attributeName));\n        } else if (value === true) {\n            this.els.forEach(el => el.setAttribute(attributeName, attributeName));\n        } else if (value !== undefined) {\n            this.els.forEach(el => el.setAttribute(attributeName, value));\n        } else {\n            return this.els.map(el => el.getAttribute(attributeName)).join('');\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Check that some element in the set of elements has attribute `attributeName`\n     * @param {string} attributeName name of attribute\n     * @returns {boolean} `true` if has such attribute\n     */\n    hasAttr(attributeName) {\n        return this.els.some(el => el.hasAttribute(attributeName));\n    }\n\n    /**\n     * @description\n     * - Get property value by `propertyName` from first element in set if `value` parameter is not provided\n     * - Set property value for `propertyName` property for each element in set\n     * @param {keyof HTMLInputElement} propertyName The name of the property to get or set.\n     * @param {string|boolean|undefined} [value] A value to set for the property.\n     * @returns {any} Returns undefined for the value of a property that has not been set\n     * or property value if exists\n     */\n    prop(propertyName, value) {\n        if (typeof value === 'undefined') {\n            /** @type {HTMLInputElement} */\n            const el = (this.els[0]);\n\n            return el[propertyName];\n        }\n        this.els.forEach(el => { /** @type {any} */(el)[propertyName] = value; });\n\n        return undefined;\n    }\n\n    /**\n     * @description Get element of set by idx\n     * @param {number} [idx] Identificator of element, first by default\n     * @returns {HTMLElement|undefined} element if founded\n     */\n    get(idx = 0) {\n        if (this.els[idx]) {\n            return this.els[idx];\n        }\n        return undefined;\n    }\n\n    /**\n     * @description Remove set of elements\n     * @returns {this} current instance for chaining\n     */\n    empty() {\n        this.els.forEach(el => { el.textContent = ''; });\n        return this;\n    }\n\n    /**\n     * @description Replace content of each element in set by empty string\n     * @returns {this} current instance for chaining\n     */\n    remove() {\n        this.els.forEach(el => el.parentNode && el.parentNode.removeChild(el));\n        return this;\n    }\n\n    /**\n     * @description Remove attribute disabled=\"disabled\"\n     * @returns {this} current instance for chaining\n     */\n    disable() {\n        this.attr('disabled', true);\n        this.addClass('m-disabled');\n\n        return this;\n    }\n\n    /**\n     * @description Add attribute disabled=\"disabled\"\n     * @returns {this} current instance for chaining\n     */\n    enable() {\n        this.removeClass('m-disabled');\n        this.attr('disabled', false);\n\n        return this;\n    }\n\n    /**\n     * @description Check if every element in set has disabled attribute\n     * @returns {boolean} true if disabled\n     */\n    isDisabled() {\n        return this.attr('disabled') === 'disabled';\n    }\n\n    /**\n     * @description Set the content `text` into each element in the set\n     * @param {string} text The text to place as content\n     * @returns {this} current instance for chaining\n     */\n    setText(text) {\n        this.els.forEach(el => {\n            if (el.innerHTML !== text) {\n                el.innerHTML = text;\n            }\n        });\n\n        return this;\n    }\n\n    /**\n     * @description Get the content of each element from set and join it to string\n     * @returns {string} Joined text from set of elements\n     */\n    getText() {\n        return this.els.map(el => el.innerHTML).join();\n    }\n\n    /**\n     * @description Focus first element\n     * @returns {void}\n     */\n    focus() {\n        if (this.els[0]) {\n            this.els[0].focus();\n        }\n    }\n\n    /**\n     * @description Blurs first element\n     * @returns {void}\n     */\n     blur() {\n        if (this.els[0]) {\n            this.els[0].blur();\n        }\n    }\n\n\n    /**\n     * @description Hide element\n     * @returns {this} current instance for chaining\n     */\n    hide() {\n        if (!this.hasClass(HIDDEN_CLASS)) {\n            this.attr('hidden', true);\n            this.addClass(HIDDEN_CLASS);\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Show element\n     * @returns {this} current instance for chaining\n     */\n    show() {\n        this.attr('hidden', false);\n        this.removeClass(HIDDEN_CLASS);\n\n        return this;\n    }\n\n    /**\n     * @description Show or hide element depending on either the presence or `initialState` parameter\n     * @param {boolean} [initialState]  true - show else false hide\n     * @returns {this} current instance for chaining\n     */\n    toggle(initialState) {\n        const state = typeof initialState !== 'undefined' ? initialState : this.hasClass(HIDDEN_CLASS);\n\n        this[state ? 'show' : 'hide']();\n        return this;\n    }\n\n    /**\n     * @description Add or Remove class depending on either the class's presence or the `state` parameter\n     * @param {string} className name of class\n     * @param {boolean} [state] true to add, false to remove class\n     * @returns {this} current instance for chaining\n     */\n    toggleClass(className, state) {\n        if (state === undefined) {\n            if (this.hasClass(className)) {\n                this.removeClass(className);\n            } else {\n                this.addClass(className);\n            }\n        } else if (state) {\n            this.addClass(className);\n        } else {\n            this.removeClass(className);\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Add single class or multiple classes into element\n     * @param {string|string[]} classNames string or strings array of class name(s)\n     * @returns {this} current instance for chaining\n     */\n    addClass(classNames) {\n        if (typeof classNames === 'string') {\n            classNames = classNames.split(' ');\n        }\n\n        classNames.forEach(className => {\n            this.els.forEach(el => {\n                if (!this.hasClass(className)) {\n                    el.classList.add(className);\n                }\n            });\n        });\n\n        return this;\n    }\n\n    /**\n     * @description Remove single class or multiple classes for element in set\n     * @param {string|string[]} classNames array or string of classnames\n     * @returns {this} current instance for chaining\n     */\n    removeClass(classNames) {\n        if (typeof classNames === 'string') {\n            classNames = classNames.split(' ');\n        }\n\n        classNames.forEach(className => {\n            this.els.forEach(el => {\n                if (this.hasClass(className)) {\n                    el.classList.remove(className);\n                }\n            });\n        });\n\n        return this;\n    }\n\n    /**\n     * @description Determine whether each element in set have assigned the given class\n     * @param {string} className The class name to search for.\n     * @returns {boolean} `true` if yes\n     */\n    hasClass(className) {\n        return this.els.every(el => el.classList.contains(className));\n    }\n\n    /**\n     * @description Specifies the position of the element in the window\n     * @returns {{top: number, left: number}} object with top and left position in px\n     */\n    offset() {\n        const ret = { top: 0, left: 0 };\n        if (this.els.length) {\n            const docElem = document.documentElement;\n            const elemBox = this.els[0].getBoundingClientRect();\n\n            ret.top = elemBox.top + window.pageYOffset - docElem.clientTop;\n            ret.left = elemBox.left + window.pageXOffset - docElem.clientLeft;\n        }\n\n        return ret;\n    }\n}\n","/**\n * @module ajax\n * @category widgets\n * @subcategory toolbox\n */\n\n// TODO: Add descriptions or full JSDoc for functions\nimport { showErrorLayout, appendParamsToUrl, timeout } from './util';\nimport eventBus from './eventBus';\n// eslint-disable-next-line max-len\nexport const errorFallbackMessage = 'For technical reasons, your request could not be handled properly at this time. We apologize for any inconvenience.';\nconst SAME_ORIGIN = 'same-origin';\nlet tokenName = '';\nlet tokenValue = '';\n\n/**\n * @param {string} name tokenName\n * @param {string} val tokenValue\n */\nexport function setCurrentToken(name, val) {\n    tokenName = name;\n    tokenValue = val;\n}\n\nfunction getFetch() {\n    if (window.fetch) {\n        return Promise.resolve(window.fetch);\n    }\n    // @ts-ignore\n    return import(/* webpackChunkName: 'fetch' */ 'whatwg-fetch');// use polyfill\n}\n\n/**\n *\n * @param {string} method - HTTP method\n * @param {{[keys: string]: string;}} data - request data\n * @param {boolean} skipToken - Checks if CSRF token should be skipped in the request\n * @param {string} url - request url\n * @returns {{valuedUrl: string, formData: string|undefined}} result\n */\nfunction handleUrlOrFormData(method, data, skipToken, url) {\n    /**\n     * @type {string|undefined}\n     */\n    let formData;\n    /**\n     * @type {string}undefined\n     */\n    var valuedUrl;\n    if (method === 'POST') {\n        const token = tokenName && !skipToken ? { [tokenName]: tokenValue } : {};\n        const dataToSend = { ...data, ...token };\n        formData = Object.keys(dataToSend).map(key => key + '=' + encodeURIComponent(dataToSend[key])).join('&');\n\n        valuedUrl = url;\n    } else if (skipToken) {\n        valuedUrl = appendParamsToUrl(url, data);\n    } else {\n        valuedUrl = appendParamsToUrl(url, { ...data, ...{ [tokenName]: tokenValue } });\n    }\n    // parameter to identify ajax request\n    valuedUrl = appendParamsToUrl(valuedUrl, { ajax: 'true' });\n\n    return { valuedUrl, formData };\n}\n\n/**\n * @param {Response} response Response object\n * @returns {Promise<any>} A Promise for the completion of which ever callback is executed.\n */\nfunction handleResponse500(response) {\n    return response.text().then(textResponse => {\n        // checks if response contains redirectUrl, does redirect and rejects promise.\n        // In other case shows '500' alert on storefront and continues error handling\n        if (textResponse.includes('\"error\":') && textResponse.includes('\"redirectUrl\":')) {\n            const error = JSON.parse(textResponse);\n            if (error && error.redirectUrl) {\n                window.location.assign(error.redirectUrl);\n                return Promise.reject(new Error());\n            }\n        // in some cases we must have possibility don't show global alert, according to FSD\n        } else if (!textResponse.includes('\"skipErrorGlobalAlert\"')) {\n            eventBus.emit('alert.error', {\n                errorCode: 500\n            });\n        }\n        if (textResponse.includes('\"csrfError\": true')) {\n            const error = JSON.parse(textResponse);\n            if (error) {\n                if (error.csrfError && error.redirectUrl) {\n                    window.location.assign(error.redirectUrl);\n                } else {\n                    showErrorLayout(error);\n                }\n            }\n        } else if (textResponse.includes('\"errorMessage\":')) {\n            return Promise.reject(new Error(JSON.parse(textResponse).errorMessage));\n        } else {\n            var div = document.createElement('div');\n            div.innerHTML = textResponse;\n            const err = Array.from(div.querySelectorAll('code')).map(code => code.innerHTML).join('<br/>');\n            showErrorLayout(err);\n        }\n        return Promise.reject(new Error());\n    });\n}\n\n/**\n * @description A function, called after each success ajax call. Emits an event with given response context.\n * @param {object|string} response Response formatted object\n * @returns {object|string} Response formatted object\n */\nfunction handleOkResponse(response) {\n    /**\n     * @description Event about success ajax server response\n     * @event module:ajax#responseok\n     */\n    timeout(() => eventBus.emit('responseok', response), 0);\n    return response;\n}\n\n/**\n * @param {string} url url of resource\n * @param {{[x: string]: string}} [data] form content\n * @param {'POST'|'GET'} [method] typeof request\n * @param {boolean} [skipToken] skip token for request\n * @returns {Promise<object>} Fetching result promise\n */\nexport const submitFormJson = (url, data = {}, method = 'POST', skipToken = false) => {\n    return getFetch().then(() => {\n        var { valuedUrl, formData } = handleUrlOrFormData(method, data, skipToken, url);\n        /**\n         * This magic is mandatory for MS Edge because fetch polyfill is returning not polyfilled Promise object\n         */\n        if(valuedUrl.split('?')[0] !== 'null') {\n        return Promise.resolve(fetch(valuedUrl, {\n            method: method, // *GET, POST, PUT, DELETE, etc.\n            mode: SAME_ORIGIN, // no-cors, cors, *same-origin\n            cache: 'default', // *default, no-cache, reload, force-cache, only-if-cached\n            credentials: SAME_ORIGIN, // include, *same-origin, omit\n            headers: {\n                'Content-Type': 'application/x-www-form-urlencoded',\n                Accept: 'application/json',\n                'x-requested-with': 'XMLHttpRequest'\n            },\n            redirect: 'follow', // manual, *follow, error\n            referrer: 'no-referrer', // no-referrer, *client\n            body: formData // body data type must match \"Content-Type\" header\n        })).then((response) => {\n            var contentType = response.headers.get('content-type');\n\n            if (response.ok) {\n                if (contentType && contentType.includes('application/json')) {\n                    return handleOkResponse(response.json());\n                }\n                showErrorLayout(errorFallbackMessage);\n                throw new TypeError(errorFallbackMessage);\n            } else if (response.status === 404) {\n                showErrorLayout(errorFallbackMessage);\n                throw new TypeError(errorFallbackMessage);\n            } else if (response.status === 500) {\n                return handleResponse500(response);\n            }\n\n            return response.json().then(errorJson => {\n                return Promise.reject(errorJson);\n            });\n        });\n    }\n    });\n};\n\n/**\n * @param {string} url URL to get data\n * @param {{[keys: string]: string;}} [params] optional params to url\n * @returns {Promise<Response>} Fetching result promise\n */\nexport function getContentByUrl(url, params = {}) {\n    params.ajax = 'true';\n    /**\n     * This magic is mandatory for MS Edge because fetch polyfill is returning not polyfilled Promise object\n     */\n    return Promise.resolve(fetch(appendParamsToUrl(url, params), {\n        method: 'GET', // *GET, POST, PUT, DELETE, etc.\n        mode: SAME_ORIGIN, // no-cors, cors, *same-origin\n        cache: 'default', // *default, no-cache, reload, force-cache, only-if-cached\n        credentials: SAME_ORIGIN, // include, *same-origin, omit\n        headers: {\n            Accept: 'text/html'\n            //     //   'Content-Type': 'application/json'\n            //     'Content-Type': 'application/x-www-form-urlencoded'\n        },\n        redirect: 'follow', // manual, *follow, error\n        referrer: 'no-referrer' // no-referrer, *client\n        // body: formData // body data type must match \"Content-Type\" header\n    })).then((response) => {\n        var contentType = response.headers.get('content-type');\n\n        if (response.ok) {\n            if (contentType && contentType.includes('text/html')) {\n                return handleOkResponse(response.text());\n            }\n\n            if (response.status !== 204) {\n                showErrorLayout(errorFallbackMessage);\n                throw new TypeError(errorFallbackMessage);\n            }\n        } else if (response.status === 404) {\n            showErrorLayout(errorFallbackMessage);\n            throw new TypeError(errorFallbackMessage);\n        } else if (response.status === 500) {\n            return handleResponse500(response);\n        }\n\n        return response.json().then(errorJson => {\n            return Promise.reject(errorJson);\n        });\n    });\n}\n\n/**\n *\n * @param {string} url URL to get data\n * @param {{[keys: string]: string;}} [params] optional params to url\n * @param {boolean} [skipToken] skip token for request\n * @returns {Promise<object>} Fetching result promise\n */\nexport function getJSONByUrl(url, params = {}, skipToken = true) {\n    return submitFormJson(url, params, 'GET', skipToken);\n}\n\n/**\n * Writes the error to the backend error logs by sending it via AJAX to the specified URL.\n *\n * @param {Object} error - The error object to be sent to the backend.\n * @returns {void}\n */\nexport function writeErrorInBackendErrorLogs(error) {\n    var errorActionUrl = $('.m-registration').data('error-action'); // Get the data-error-action attribute value\n    $.ajax({\n        url: errorActionUrl,\n        type: 'POST',\n        data: {\n          error: JSON.stringify(error)\n        },\n        success: function(response) {\n          // Handle the success response here if needed\n        },\n        error: function(xhr, status, error) {\n          console.log('Error sending error message:', error);\n        }\n    });\n}\n","/**\n * @module cookie\n * @category widgets\n * @subcategory toolbox\n */\n\n/**\n * @description Uses to set cookies to the document\n *\n * @param {string} cookieName - cookie name\n * @param {string} cookieValue - cookie value\n * @param {number} expireInDays - number of days before cookie expiration. 0 - end of a session, 365 - default value\n * @param {boolean} isSecure - adds secure cookie if true\n */\nexport function setCookie(cookieName, cookieValue, expireInDays = 365, isSecure = false) {\n    const d = new Date();\n    d.setTime(d.getTime() + (expireInDays * 24 * 60 * 60 * 1000));\n    const expires = expireInDays === 0 ? '' : `expires=${d.toUTCString()}`;\n    document.cookie = `${cookieName}=${cookieValue};${expires};path=/${isSecure ? ';secure' : ''}`;\n}\n\n/**\n * @description Gets cookie value from document.\n * Empty string is returned by default\n *\n * @param {string} cookieName - cookie name\n * @returns {string} - cookie value\n */\nexport function getCookie(cookieName) {\n    const name = `${cookieName}=`;\n    const ca = document.cookie.split(';');\n    for (let i = 0; i < ca.length; i += 1) {\n        let c = ca[i];\n        while (c.charAt(0) === ' ') {\n            c = c.substring(1);\n        }\n        if (c.indexOf(name) === 0) {\n            return c.substring(name.length, c.length);\n        }\n    }\n    return '';\n}\n","/**\n * @module cssLoadChecker\n * @description\n * Util that used for checking if CSS was loaded.\n * Return Promise that resolved as soon as CSS loaded.\n * @example\n * cssLoadChecker.get().then(() => {\n *  do some staff after css load\n * });\n */\nconst CSS_SELECTOR = '.js-styles';\n\nexport default {\n    get: function () {\n        return Promise.all(\n            Array.from(document.querySelectorAll(CSS_SELECTOR), link => this.getLoadedState(link))\n        );\n    },\n    /**\n     * Get loading state of particular link node\n     *\n     * @param {object} css - link DOM node\n     * @returns {Promise} - loading state\n     */\n    getLoadedState(css) {\n        // @ts-ignore\n        if (module.hot) { // This trick not work with hot reload\n            return new Promise(resolve => setTimeout(() => resolve(), 200));\n        }\n\n        return new Promise((resolve) => {\n            if (css.media === 'all' || css.media === '') {\n                try {\n                    /**\n                     * This trick is needed to be sure css are loaded across all browsers\n                     * `document.styleSheets` is not suitable since FF changes the length prematurely\n                     * Combined solution from https://www.phpied.com/when-is-a-stylesheet-really-loaded/\n                     */\n                    const cssRules = css.sheet.cssRules; // Only populated when css is loaded. This is cross-browser solution.\n                    if (cssRules) {\n                        resolve();\n                    }\n                } catch (e) {\n                    css.addEventListener('load', resolve);\n                    css.addEventListener('error', resolve);\n                }\n            } else {\n                css.addEventListener('load', resolve);\n                css.addEventListener('error', resolve);\n            }\n        });\n    }\n};\n","/**\n * @module debounce\n * @category widgets\n * @subcategory toolbox\n */\n\n// CLARIFY: Do we need default behaviour when both invokeLeading & invokeTrailing are not passed or they are false ?\n/* eslint-disable jsdoc/check-tag-names */\n/**\n * Returns a function, that, as long as it continues to be invoked, will not be triggered.\n * The function will be called after it stops being called for N milliseconds.\n * If `invokeLeading` is passed, trigger the function on the leading edge, instead of the trailing.\n * If `invokeTrailing` is passed, trigger the function on the trailing edge additionally.\n *\n * @template T\n * @param {(args0: T) => void} callbackFunction - callback\n * @param {number} delay - timeout duration\n * @param {boolean} [invokeLeading] - executing the debounce without waiting\n * @param {boolean} [invokeTrailing]\n * execute trailing function after timeout: could be used in combination with 'invokeLeading' parameter\n * to execute both functions - leading and trailing ones\n * @returns {(args0: T) => void} - Debounce function\n */\nexport function debounce(callbackFunction, delay, invokeLeading = false, invokeTrailing = false) {\n    /**\n     * @type {NodeJS.Timeout|null}\n     */\n    let timeout;\n    const executeTrailing = !invokeLeading || invokeTrailing;\n\n    return function debounceInner(...args) {\n        // @ts-ignore\n        const context = this;\n\n        // Leading function execution\n        if (invokeLeading && !timeout) {\n            callbackFunction.apply(context, args);\n        }\n\n        // Set timeout for trailing function execution\n        if (executeTrailing) {\n            if (timeout) {\n                clearTimeout(timeout);\n            }\n\n            timeout = setTimeout(() => {\n                timeout = null;\n                callbackFunction.apply(context, args);\n            }, delay);\n        }\n    };\n}\n\n// Creates and returns a new, throttled version of the passed function, that, when invoked repeatedly,\n// will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\n/**\n * @description Creates and returns a new, throttled version of the passed function, that,\n *  when invoked repeatedly, will only actually call the original function at most once per every\n * `wait` milliseconds. Useful for rate-limiting events that occur faster than you can keep up with.\n * By default, `throttle` will execute the function as soon as you call it for the first time, and,\n * if you call it again any number of times during the `wait` period,as soon as that period is over.\n * If you'd like to disable the leading-edge call, pass `{leading: false}`, and if you'd like to disable\n * the execution on the trailing-edge, pass `{trailing: false}`.\n * @param {Function} func Function to execute\n * @param {number} wait Execution period\n * @param {{leading: boolean, trailing: boolean}} [options] Configurations\n * @returns {Function} Throttled version of passed function\n */\nexport function throttle(func, wait, options = { leading: false, trailing: false }) {\n    /** @type {NodeJS.Timeout|null} */\n    var timeout;\n    /** @type {any} */\n    var context;\n    /** @type {any} */\n    var args;\n    /** @type {any} */\n    var result;\n\n    var previous = 0;\n\n    var later = function () {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        // @ts-ignore\n        result = func.apply(context, args);\n        if (!timeout) {\n            context = null;\n            args = null;\n        }\n    };\n\n    return function () {\n        var now = Date.now();\n        if (!previous && options.leading === false) { previous = now; }\n        var remaining = wait - (now - previous);\n        // @ts-ignore\n        context = this;\n        args = arguments;\n        if (remaining <= 0 || remaining > wait) {\n            if (timeout) {\n                clearTimeout(timeout);\n                timeout = null;\n            }\n            previous = now;\n            result = func.apply(context, args);\n            if (!timeout) {\n                context = null;\n                args = null;\n            }\n        } else if (!timeout && options.trailing !== false) {\n            timeout = setTimeout(later, remaining);\n        }\n        return result;\n    };\n}\n","/**\n * @typedef {InstanceType <ReturnType <typeof import('widgets/global/Modal').default>>} modal\n */\n\n/**\n * @module dialogMgr\n * @category widgets\n * @subcategory toolbox\n * @class DialogMgr\n * @classdesc Contains all needed logic for managing dialog stack e.g. open second dialog above first one.\n * @example <caption>Usage of dialogMgr instance. In this case `dialogMgr` used in class {@link Modal} to show it's content above any other opened dialog</caption>\n * class Modal extends AccessibilityFocusTrapMixin {\n *     ...\n        showModal(templateData, cb) {\n            ...\n            renderedPromise.then(() => {\n                ...\n                dialogMgr.openDialog(this);\n            });\n        }\n * }\n */\nclass DialogMgr {\n    constructor() {\n        this.dialogsStack = [];\n    }\n\n    /**\n     * @description Open Modal. If any other opened dialog exists - move it behind newly opened modal.\n     * @param {modal} dialog - Dialog object\n     */\n    openDialog(dialog) {\n        const topDialog = this.dialogsStack.length ? this.dialogsStack[this.dialogsStack.length - 1] : null;\n\n        if (topDialog !== dialog) {\n            if (topDialog) {\n                topDialog.moveBehind();\n            }\n\n            dialog.open();\n\n            this.dialogsStack.push(dialog);\n        }\n    }\n\n    /**\n     * @description Close Modal. If any other opened dialog exists, moves it to top.\n     */\n    closeDialog() {\n        const dialog = this.dialogsStack.pop();\n\n        if (dialog) {\n            dialog.close();\n\n            if (this.dialogsStack.length) {\n                const previousDialog = this.dialogsStack[this.dialogsStack.length - 1];\n\n                previousDialog.moveToTop();\n            } else {\n                dialog.removeGlobalDialogClass();\n            }\n        }\n    }\n}\n\nexport const dialogMgr = new DialogMgr();\n","/**\n * @module events\n * @category widgets\n * @subcategory toolbox\n * @description Create and returns an instance of EventEmitter. Refer [eventemitter3 documentation](https://www.npmjs.com/package/eventemitter3).\n */\n\nimport { EventEmitter } from 'eventemitter3';\nconst EventBus = new EventEmitter();\nexport default EventBus;\n","// TODO: Add class description and description for all methods\n/**\n * @module scroll\n * @category widgets\n * @subcategory toolbox\n */\n\nimport { debounce } from 'widgets/toolbox/debounce';\nimport {\n    SMALL,\n    MEDIUM,\n    LARGE,\n    EXTRA_LARGE,\n    getViewType\n} from 'widgets/toolbox/viewtype';\n\nconst stickyHeaderHeightMap = {\n    [SMALL]: 64,\n    [MEDIUM]: 64,\n    [LARGE]: 80,\n    [EXTRA_LARGE]: 80\n};\n\n/**\n * @param {HTMLElement|undefined} element - HTML Element\n */\nexport function scrollIntoView(element) {\n    if (!element) {\n        return;\n    }\n\n    if ('scrollBehavior' in document.documentElement.style) {\n        element.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });\n    } else {\n        element.scrollIntoView(false);\n    }\n}\n\n/**\n * @param {HTMLElement} element - HTML Element\n * @param {number} [top] - top coordinate\n * @param {number} [left] - left coordinate\n */\nexport function scrollElementTo(element, top = 0, left = 0) {\n    if (element && typeof element.scrollTo === 'function') {\n        element.scrollTo({ top: top, left: left, behavior: 'smooth' });\n    }\n}\n\n/**\n * @param {HTMLElement|undefined} element - HTML Element\n * @param {boolean} [countHeaderHeight] - add to top header height\n */\nexport function scrollWindowTo(element, countHeaderHeight = false) {\n    if (!element) {\n        return;\n    }\n\n    const headerHeight = stickyHeaderHeightMap[getViewType()];\n    const top = element.getBoundingClientRect().top + window.pageYOffset;\n    const left = 0;\n    if (countHeaderHeight) {\n        window.scrollTo({ top: top - headerHeight, left: left, behavior: 'smooth' });\n    } else {\n        window.scrollTo({ top: top, left: left, behavior: 'smooth' });\n    }\n}\n\n/**\n * Scrolling to top.\n */\nexport function scrollToTop() {\n    window.scrollTo(0, 0);\n}\n\nconst DEBOUNCE_INTERVAL = 20;\n/**\n * @type {((arg0: {currentPosition: number, lastScrollPosition: number, diff: number}) => void)[]}\n */\nconst scrollHandlers = [];\n\nexport function getScrollPosition() {\n    if (document.documentElement.scrollTop !== undefined) {\n        return document.documentElement.scrollTop;\n    }\n    if (document.scrollingElement && document.scrollingElement.scrollTop !== undefined) {\n        return document.scrollingElement.scrollTop;\n    }\n    return -1;\n}\nlet lastScrollPosition = 0;\n\nconst debounceScroll = debounce(() => {\n    const currentPosition = getScrollPosition();\n\n    scrollHandlers.forEach(handler => handler({\n        currentPosition,\n        lastScrollPosition,\n        diff: currentPosition - lastScrollPosition\n    }));\n    lastScrollPosition = currentPosition;\n}, DEBOUNCE_INTERVAL, true, true);\n\n/**\n *\n * @param {(arg0: {currentPosition: number, lastScrollPosition: number, diff: number}) => void} callback - on scroll callback\n * @returns {Function} result\n */\nexport function onScroll(callback) {\n    if (!scrollHandlers.length) {\n        window.addEventListener('scroll', debounceScroll, { passive: true });\n    }\n    scrollHandlers.push(callback);\n\n    return () => {\n        scrollHandlers.splice(scrollHandlers.indexOf(callback), 1);\n\n        if (!scrollHandlers.length) {\n            window.removeEventListener('scroll', debounceScroll);\n        }\n    };\n}\n","// TODO: document as much as possible all methods\n// CLARIFY: do we need to split some methods into other classes ? ie strings, console, object manipulations?\n/**\n * @module util\n * @category widgets\n * @subcategory toolbox\n */\n/* eslint-disable no-use-before-define */\n\nexport const log = window.console;\n\n// IE11 fix\nif (!log.table) {\n    log.table = () => { };\n}\n/**\n * @param {string} message message with placeholders i.e. {0}\n * @param {...string} params values for placeholders\n * @returns {string} faormatted message\n */\nexport function format(message, ...params) {\n    return params.reduce((msg, param, idx) => {\n        const reg = new RegExp('\\\\{' + idx + '\\\\}', 'gm');\n        return msg.replace(reg, param);\n    }, message);\n}\n\n/**\n *\n * @param {HTMLElement} element HTML element which will have a transition\n * @param {string} transitionClass CSS class which triggers transition animation\n * @param {Function} cb Callback function upon transition ends\n */\nexport function transitionEnd(element, transitionClass, cb) {\n    const eventFunction = () => {\n        cb();\n        element.removeEventListener('transitionend', eventFunction);\n    };\n    element.addEventListener('transitionend', eventFunction);\n    element.classList.add(transitionClass);\n}\n\n/**\n * @param {Function|undefined} fn function to be called after specified time\n * @param {number} [time] time before call callback\n * @returns {Function} Timeout disposable\n */\nexport function timeout(fn, time = 0) {\n    /**\n     * @type {NodeJS.Timeout|undefined}\n     */\n    var timer = setTimeout(() => {\n        if (fn) {\n            fn();\n        }\n        timer = undefined;\n        fn = undefined;\n    }, time);\n\n    return () => {\n        if (timer) {\n            clearTimeout(timer);\n            timer = undefined;\n            fn = undefined;\n        }\n    };\n}\n\n/**\n * @param {Function|undefined} fn function to be called regularly, after specified time delay\n * @param {number} [time] time regularity for callback execution\n * @returns {Function} disposable\n */\nexport function interval(fn, time = 0) {\n    /**\n     * @type {NodeJS.Timeout|undefined}\n     */\n    var intervalID = setInterval(() => {\n        if (fn) {\n            fn();\n        }\n    }, time);\n\n    return () => {\n        if (intervalID) {\n            clearInterval(intervalID);\n            intervalID = undefined;\n            fn = undefined;\n        }\n    };\n}\n\n/**\n * @description Class represents the `setTimeout` with an ability to perform pause/resume actions\n */\nexport class PausableTimeout {\n    /**\n     * @param {Function|undefined} callback function to be called after specified time\n     * @param {number} [time] time before call callback\n     */\n    constructor(callback, time = 0) {\n        this.done = false;\n\n        this.callback = () => {\n            if (callback) {\n                callback();\n            }\n            this.done = true;\n            this.durationTimeout = undefined;\n            callback = undefined;\n        };\n        this.remaining = time;\n        this.resume();\n    }\n\n    /**\n     * @description Pauses Timeout\n     * @returns {InstanceType<PausableTimeout>} Instance of the PausableTimeout class\n     */\n    pause() {\n        if (this.durationTimeout && !this.done) {\n            this.clearTimeoutRef();\n            this.remaining -= new Date().getTime() - (this.start ? this.start.getTime() : 0);\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Resumes Timeout\n     * @returns {InstanceType<PausableTimeout>} Instance of the PausableTimeout class\n     */\n    resume() {\n        if (!this.durationTimeout && !this.done) {\n            this.start = new Date();\n            this.durationTimeout = timeout(this.callback, this.remaining);\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Clear resources on demand\n     */\n    destroy() {\n        this.clearTimeout();\n    }\n\n    /**\n     * @description Clears the timeout and marks it as done.\n     * After called, the timeout will not resume.\n     */\n    clearTimeout() {\n        this.clearTimeoutRef();\n        this.done = true;\n    }\n\n    /**\n     * @description Clears resources\n     */\n    clearTimeoutRef() {\n        if (this.durationTimeout) {\n            this.durationTimeout();\n            this.durationTimeout = undefined;\n        }\n    }\n}\n\n/**\n * @param {string} url initial url\n * @param {string} name name of params\n * @param {string} value value of param\n * @returns {string} url with appended param\n */\nexport function appendParamToURL(url, name, value) {\n    // quit if the param already exists\n    if (url.includes(name + '=')) {\n        return url;\n    }\n    const [urlWithoutHash, hash] = url.split('#');\n\n    const separator = urlWithoutHash.includes('?') ? '&' : '?';\n    return urlWithoutHash + separator + name + '=' + encodeURIComponent(value) + (hash ? '#' + hash : '');\n}\n\n/**\n * @param {string} url Source Url\n * @param {string} name Parameter to remove\n * @returns {string} Url without parameter\n */\nexport function removeParamFromURL(url, name) {\n    if (url.includes('?') && url.includes(name + '=')) {\n        var hash = '';\n        var [domain, paramUrl] = url.split('?');\n        // if there is a hash at the end, store the hash\n        if (paramUrl.includes('#')) {\n            [paramUrl, hash] = paramUrl.split('#');\n        }\n        /**\n         * @type {string[]}\n         */\n        var newParams = [];\n        paramUrl.split('&').forEach(param => {\n            // put back param to newParams array if it is not the one to be removed\n            if (param.split('=')[0] !== name) {\n                newParams.push(param);\n            }\n        });\n\n        return domain + (newParams.length ? '?' + newParams.join('&') : '') + (hash ? '#' + hash : '');\n    }\n    return url;\n}\n\n/**\n * @param {string} url initial url\n * @param {{[keys: string]: string}} params  parmas as key value-object\n * @returns {string} Url with appended parameters\n */\nexport function appendParamsToUrl(url, params) {\n    return Object.entries(params).reduce((acc, [name, value]) => {\n        return appendParamToURL(acc, name, value);\n    }, url);\n}\n\n/**\n *\n * @param {string|undefined} [url] Source Url\n * @returns {{[x: string]: string|number|boolean|Array<string|boolean>}} Hash map of Url parameters\n */\nexport function getUrlParams(url) {\n    // get query string from url (optional) or window\n    var queryString = url ? url.split('?')[1] : window.location.search.slice(1);\n\n    // we'll store the parameters here\n    /**\n     * @type {{[x: string]: string|number|boolean|Array<string|boolean>}}\n     */\n    var obj = {};\n\n    // if query string exists\n    if (queryString) {\n        // stuff after # is not part of query string, so get rid of it\n        queryString = queryString.split('#')[0];\n\n        // split our query string into its component parts\n        var qsTokens = queryString.split('&');\n\n        qsTokens.forEach(qsToken => {\n            // separate the keys and the values\n            var a = qsToken.split('=');\n\n            // set parameter name and value (use 'true' if empty)\n            var paramName = a[0];\n            var paramValue = typeof (a[1]) === 'undefined' ? true : a[1];\n\n            // if the paramName ends with square brackets, e.g. colors[] or colors[2]\n            if (paramName.match(/\\[(\\d+)?\\]$/)) {\n                // create key if it doesn't exist\n                var key = paramName.replace(/\\[(\\d+)?\\]/, '');\n                obj[key] = obj[key] || [];\n\n                var objValue = obj[key];\n\n                // if it's an indexed array e.g. colors[2]\n                if (paramName.match(/\\[\\d+\\]$/)) {\n                    // get the index value and add the entry at the appropriate position\n                    var regexpArray = /\\[(\\d+)\\]/.exec(paramName);\n\n                    if (regexpArray) {\n                        if (Array.isArray(objValue)) {\n                            var index = +regexpArray[1];\n                            objValue[index] = paramValue;\n                        }\n                    }\n                } else if (Array.isArray(objValue)) {\n                    // otherwise add the value to the end of the array\n                    objValue.push(paramValue);\n                }\n            } else if (!obj[paramName]) {\n                // if it doesn't exist, create property\n                obj[paramName] = decodeURIComponent(paramValue + '');\n            } else if (obj[paramName] && typeof obj[paramName] === 'string') {\n                // if property does exist and it's a string, convert it to an array\n                // @ts-ignore\n                obj[paramName] = [obj[paramName]];\n                // @ts-ignore\n                obj[paramName].push(paramValue);\n            } else {\n                // otherwise add the property\n                // @ts-ignore\n                obj[paramName].push(paramValue);\n            }\n        });\n    }\n\n    return obj;\n}\n\n/**\n * @type {string[]}\n */\nlet errors = [];\n/**\n *\n * @param {string|Error} message to show\n */\nexport function showErrorLayout(message) {\n    const errorLayout = document.querySelector('#errorLayout');\n    if (errorLayout) {\n        if (message instanceof Error) {\n            if (message.stack) {\n                errors.unshift(message.stack);\n            }\n            errors.unshift(message.message);\n        } else {\n            errors.unshift(message);\n        }\n\n        log.error(message);\n        errorLayout.addEventListener('click', () => {\n            errorLayout.innerHTML = ''; errors = [];\n        }, { once: true });\n\n        errorLayout.innerHTML = `<div class=\"danger\" style=\"\n            bottom: 0;\n            right: 0;\n            position: fixed;\n            background-color: #ff0000c7;\n            border: black;\n            padding: 5px;\n            z-index: 9999999;\n            border-radius: 10px;\n        \">\n                Error: <br/>\n                ${errors.join('<hr/>')}\n            </div>`;\n    }\n}\n\n/**\n * @description Check if event `event` is triggered outside of element `el`\n * @param {Event} event DOM event\n * @param {HTMLElement} el element to track click on\n * @returns {boolean} `true` if triggered outside of element\n */\nexport function isEventTriggeredOutsideElement(event, el) {\n    if (event.target && event.target instanceof Element) {\n        let currElement = event.target;\n        while (currElement.parentElement) {\n            if (currElement === el) {\n                return false;\n            }\n            currElement = currElement.parentElement;\n        }\n        return true;\n    }\n    return false;\n}\n\n/**\n * @description Create a function to unsubscribe listener\n * @param {EventListener | undefined} listener Listener to unsubscribe\n * @param {string} eventName Event to unsubscribe\n * @returns {EventListener | undefined} Unsubscribed listener or undefined\n */\nfunction makeExposableListener(listener, eventName) {\n    if (listener) {\n        document.removeEventListener(eventName, listener);\n        listener = undefined;\n    }\n    return listener;\n}\n\n/**\n * @description Create listener for click outside of element `el` to execute callback `cb`\n * @param {import('./RefElement').RefElement} el Element to track click on\n * @param {Function} cb Callback\n * @param {boolean} [preventDefault] Optional to prevent the default event\n * @returns {Function|undefined} Disposable function for listener (for unsubscription)\n */\nexport function clickOutside(el, cb, preventDefault = true) {\n    // need for support desktop emulation\n    const eventName = 'click';\n    const domEl = el.get();\n    /**\n     * @type {EventListener|undefined}\n     */\n    let listener;\n    function expose() {\n        listener = makeExposableListener(listener, eventName);\n    }\n\n    if (domEl) {\n        listener = event => {\n            if (isEventTriggeredOutsideElement(event, domEl)) {\n                if (cb(event) === false) {\n                    expose();\n                }\n                if (preventDefault === true) {\n                    event.preventDefault();\n                }\n            }\n        };\n        setTimeout(() => {\n            if (listener) {\n                document.addEventListener(eventName, listener);\n            }\n        }, 0);\n\n        return expose;\n    }\n\n    throw new Error('Missing required el');\n}\n\n/**\n * @description Compare object instances\n * @param {any} x Source object\n * @param {any} y Object for compare\n * @returns {boolean} `true` if objects are equal\n */\n// eslint-disable-next-line complexity\nexport function objectEquals(x, y) {\n    if (x === null || x === undefined || y === null || y === undefined) {\n        return x === y;\n    }\n    // after this just checking type of one would be enough\n    if (x.constructor !== y.constructor) {\n        return false;\n    }\n    // if they are functions, they should exactly refer to same one (because of closures)\n    if (x instanceof Function) {\n        return x === y;\n    }\n    // if they are regexps, they should exactly refer to same one (it is hard to better equality check on current ES)\n    if (x instanceof RegExp) {\n        return x === y;\n    }\n    if (x === y || x.valueOf() === y.valueOf()) {\n        return true;\n    }\n    if (Array.isArray(x) && x.length !== y.length) {\n        return false;\n    }\n\n    // if they are dates, they must had equal valueOf\n    if (x instanceof Date) {\n        return false;\n    }\n\n    // if they are strictly equal, they both need to be object at least\n    if (!(x instanceof Object)) {\n        return false;\n    }\n    if (!(y instanceof Object)) {\n        return false;\n    }\n\n    // recursive object equality check\n    var p = Object.keys(x);\n    return Object.keys(y).every((i) => p.indexOf(i) !== -1)\n        && p.every((i) => objectEquals(x[i], y[i]));\n}\n\n/**\n * @description Generate an integer Array containing an arithmetic progression\n * @param {number} start start from\n * @param {number|null} [stop] end on\n * @param {number} [step] step\n * @returns {number[]} Array with an arithmetic progression\n */\nexport function range(start, stop = null, step) {\n    if (stop === null) {\n        stop = start || 0;\n        start = 0;\n    }\n    if (!step) {\n        step = stop < start ? -1 : 1;\n    }\n\n    var length = Math.max(Math.ceil((stop - start) / step), 0);\n    var newRange = Array(length);\n\n    for (var idx = 0; idx < length; idx += 1, start += step) {\n        newRange[idx] = start;\n    }\n\n    return newRange;\n}\n\nconst rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/;\n/**\n * @description converts value from data attribute into js type value\n * @param {string} data value to convert\n * @returns {object|string|number|boolean|null|undefined} converted value\n */\nexport function getData(data) {\n    if (data === 'true') {\n        return true;\n    }\n\n    if (data === 'false') {\n        return false;\n    }\n\n    if (data === 'null') {\n        return null;\n    }\n\n    // Only convert to a number if it doesn't change the string\n    if (data === +data + '') {\n        return +data;\n    }\n\n    if (rbrace.test(data)) {\n        return JSON.parse(data);\n    }\n\n    return data;\n}\n\n/**\n * @description Creates a function that memoizes the result of `func`.\n * If resolver `hasher` is provided, it determines the cache key for storing\n * the result based on the arguments provided to the memoized function.\n * By default, the first argument provided to the memoized function is used as the map cache key.\n * The func is invoked with the this binding of the memoized function.\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [hasher] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n */\nexport function memoize(func, hasher) {\n    /**\n     * @description Memoize function wrapper\n     * @param {string} key Memoize key\n     * @returns {any} Memoize cache value\n     */\n    function memoizeInner(key) {\n        /**\n         * @type {{[x: string]: any}}\n         */\n        var cache = memoizeInner.cache;\n        // @ts-ignore\n        var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n        if (typeof cache[address] === 'undefined') {\n            // @ts-ignore\n            cache[address] = func.apply(this, arguments);\n        }\n        return cache[address];\n    }\n    memoizeInner.cache = {};\n    return memoizeInner;\n}\n\n/**\n * @description Add script tag on page\n * @param {string} source Url of script\n * @param {string} [globalObject] To check script loaded by global object\n * @param {string} [integrity] To add scripts integrity\n * @returns {Promise<any>} Promise when script loading is done or rejected\n */\nconst loadScriptHandler = (source, globalObject, integrity) => {\n    return new Promise((resolve, reject) => {\n        var script = document.createElement('script');\n        var prior = document.getElementsByTagName('script')[0];\n\n        if (!prior || !prior.parentNode) {\n            throw Error('No document');\n        }\n\n        script.async = true;\n\n        if (integrity) {\n            script.integrity = integrity;\n        }\n        script.type = 'text/javascript';\n        prior.parentNode.insertBefore(script, prior);\n\n        script.onload = () => {\n            script.onload = null;\n            // @ts-ignore\n            script = undefined;\n\n            if (globalObject) {\n                // @ts-ignore\n                if (window[globalObject]) {\n                    // @ts-ignore\n                    resolve(window[globalObject]);\n                } else {\n                    reject();\n                }\n            } else {\n                resolve();\n            }\n        };\n        script.onabort = () => {\n            reject();\n        };\n        script.onerror = () => {\n            reject();\n        };\n\n        script.src = source;\n    });\n};\n\nexport const loadScript = memoize(loadScriptHandler);\n\n/**\n * @description Get value in tree object `target` by path `path`\n * @param {any} target Source object\n * @param {string} path In `target` object\n * @param {any} [defaults] Will be returned instead of result if value doesn't exist\n * @returns {any} Value in `target` object by path `path`\n */\nexport function get(target, path, defaults) {\n    const parts = (path + '').split('.');\n    let part;\n\n    while (parts.length) {\n        part = parts.shift();\n        if (typeof target === 'object' && target !== null && part && part in target) {\n            target = target[part];\n        } else if (typeof target === 'string' && part) {\n            target = target[+part];\n            break;\n        } else {\n            target = defaults;\n            break;\n        }\n    }\n    return target;\n}\n\n/**\n * @description Checks if DOM element is focusable\n * @param {object} element HTML element to check if it is focusable\n * @returns {boolean} true if focusable, false if not\n */\nexport function isDOMElementFocusable(element) {\n    if (\n        element.tabIndex > 0\n        || (element.tabIndex === 0 && element.hasAttribute('tabIndex'))\n        || element.hasAttribute('contenteditable')\n    ) {\n        return true;\n    }\n\n    if (element.hasAttribute('disabled') || element.hasAttribute('hidden')) {\n        return false;\n    }\n\n    switch (element.nodeName) {\n        case 'A':\n            return !!element.href && element.rel !== 'ignore';\n        case 'INPUT':\n            return element.type !== 'hidden' && element.type !== 'file';\n        case 'BUTTON':\n        case 'SELECT':\n        case 'TEXTAREA':\n            return true;\n        default:\n            return false;\n    }\n}\n","// TODO: Need to update breakpoint for 375 / 768 and test/refactor viewtype.js\n// TODO: resources shimming are loaded after bundle is parsed that results to undefined window.view.breakpoint.*\n// TODO: add description to methods\n// CLARIFY: isTypeView rename to isViewTypeMatch/isViewMatch ?\n/**\n * @module viewtype\n * @category widgets\n * @subcategory toolbox\n */\n\nimport eventBus from './eventBus';\nimport { debounce } from './debounce';\nimport viewTypeConfig from 'widgets/viewTypeConfig';\nimport breakpoints from 'config/breakpoints';\n\nconst smallID = 'small';\nconst mediumID = 'medium';\nconst largeID = 'large';\nconst extraLargeID = 'extraLarge';\n\n/**\n * @typedef {typeof smallID|typeof mediumID| typeof largeID|typeof extraLargeID} viewtype\n */\nconst breakMd = breakpoints.md;\nconst breakLg = breakpoints.lg;\nconst breakXl = breakpoints.xl;\n\nconst smallView = `screen and (max-width: ${breakMd - 1}px)`;\nconst mediumView = `screen and (min-width: ${breakMd}px) and (max-width: ${breakLg - 1}px)`;\nconst largeView = `screen and (min-width: ${breakLg}px) and (max-width: ${breakXl - 1}px)`;\nconst exLargeView = `screen and (min-width: ${breakXl - 1}px)`;\nlet queriesMap = [\n    [smallID, smallView],\n    [mediumID, mediumView],\n    [largeID, largeView],\n    [extraLargeID, exLargeView]\n];\n\nlet currentWindowWidth = window.innerWidth;\nlet currentWindowHeight = window.innerHeight;\n\n/**\n * @description get current viewtype\n * @returns {viewtype} current viewtype\n */\nfunction getCurrentViewType() {\n    const matchQuery = queriesMap.find(([, query]) => window.matchMedia(query).matches);\n    // @ts-ignore\n    return (matchQuery && matchQuery[0]) || smallID;\n}\n\nconst onWindowChange = () => {\n    if (currentWindowWidth !== window.innerWidth || currentWindowHeight !== window.innerHeight) {\n        currentWindowWidth = window.innerWidth;\n        currentWindowHeight = window.innerHeight;\n        eventBus.emit('viewtype.windowChange', {\n            currentWindowWidth: currentWindowWidth,\n            currentWindowHeight: currentWindowHeight\n        });\n    }\n};\n\n/**\n * @type {viewtype} current viewtype\n */\nlet currentViewType = smallID;\n\nexport const SMALL = smallID;\nexport const MEDIUM = mediumID;\nexport const LARGE = largeID;\nexport const EXTRA_LARGE = extraLargeID;\nexport const getViewType = () => currentViewType;\n\nexport const isTouchDevice = () => ('ontouchstart' in window)\n    // @ts-ignore\n    || !!(window.DocumentTouch && document instanceof window.DocumentTouch);\n\n/**\n * @description check viewtype is current by string\n * @param {typeof currentViewType} type name to check\n * @returns {boolean} return true if current type is same as current viewtype\n */\nfunction isTypeView(type) {\n    return getViewType() === type;\n}\nexport const isSmallView = () => isTypeView(smallID);\n\nexport const isMediumView = () => isTypeView(mediumID);\nexport const isMediumViewAndUp = () => !isSmallView(); // CLARIFY: isMediumAndMoreView/isMediumViewAndMore\nexport const isMediumViewAndDown = () => isSmallView() || isMediumView(); // CLARIFY: isMediumAndLessView/isMediumViewAndLess\n\nexport const isExtraLargeView = () => isTypeView(extraLargeID);\n\nexport const isLargeView = () => isTypeView(largeID);\nexport const isLargeViewAndUp = () => isLargeView() || isExtraLargeView();\nexport const isLargeViewAndDown = () => !isExtraLargeView();\n\nexport const isDesktopView = isLargeViewAndUp;\n\nconst modifiersMapping = {\n    sm: isSmallView,\n    md: isMediumView,\n    lg: isLargeView,\n    xl: isExtraLargeView\n};\n\n/**\n * @type {Array<keyof modifiersMapping>}\n */\nexport const ALL_VIEW_TYPES = ['sm', 'md', 'lg', 'xl'];\n\nexport const getActiveViewtypeName = () => ALL_VIEW_TYPES.find(m => modifiersMapping[m]()) || 'xl';\n\n/**\n * @description match viewport by device name\n * @param {typeof smallID|typeof mediumID| typeof largeID|typeof extraLargeID} newDevice device type\n */\nfunction matchViewport(newDevice) {\n    const previousDevice = currentViewType;\n\n    currentViewType = newDevice;\n    if (previousDevice !== currentViewType) {\n        eventBus.emit('viewtype.change', currentViewType);\n    }\n}\n\n/**\n * @description To init viewtypes, you shouldn't use methods of modules before this executing\n * @param {object} [config] object\n * @param {boolean} config.useWindowListeners use listeners or MediaQueryListener\n * @param {string[][]} [config.queriesMap] size of mobile in pixels\n * @returns {void}\n */\nexport function init(config = { useWindowListeners: false }) {\n    const currentConfig = { ...config, ...viewTypeConfig };\n\n    if (currentConfig.queriesMap) {\n        queriesMap = currentConfig.queriesMap;\n    }\n\n    if (currentConfig.useWindowListeners) {\n        const windowResize = debounce(() => {\n            onWindowChange();\n            matchViewport(getCurrentViewType());\n        }, 50);\n\n        window.addEventListener('resize', windowResize, { passive: true });\n        window.addEventListener('orientationchange', windowResize, { passive: true });\n    } else {\n        const applyCurrentDeviceType = debounce(() => matchViewport(getCurrentViewType()), 50);\n\n        queriesMap.forEach(([, query]) => window.matchMedia(query).addListener(applyCurrentDeviceType));\n    }\n    currentViewType = getCurrentViewType();\n\n    eventBus.emit('viewtype.change', currentViewType);\n}\n","export default {\n    useWindowListeners: true\n};\n","/* eslint-disable indent */\n/* eslint-disable sonarjs/no-duplicate-string */\n/* sonar-ignore-start */\n\nconst [, pdp, , plp, wishlist, cart, checkout, orderconfirmation, account, content] = [\n    'home',\n    'pdp',\n    'clp',\n    'plp',\n    'wishlist',\n    'cart',\n    'checkout',\n    'orderconfirmation',\n    'account',\n    'static'\n]\n// @ts-ignore\n.map(ctx => window.contexts.includes(ctx));\n\nimport widgetsMgr from 'widgets/widgetsMgr';\nimport Accordion from 'widgets/global/Accordion';\nimport AccordionItem from 'widgets/global/AccordionItem';\nimport Button from 'widgets/global/Button';\nimport ListAccessibility from 'widgets/global/ListAccessibility';\nimport MegaMenu from 'widgets/header/MegaMenu';\nimport SwipeToClose from 'widgets/global/SwipeToClose';\nimport MenuPanel from 'widgets/header/MenuPanel';\nimport MenuPanelToggle from 'widgets/header/MenuPanelToggle';\nimport MenuBarItem from 'widgets/header/MenuBarItem';\nimport HamburgerMenuItem from 'widgets/header/HamburgerMenuItem';\nimport DismissBlock from 'widgets/global/DismissBlock';\nimport Form from 'widgets/forms/Form';\nimport BasicForm from 'widgets/forms/BasicForm';\nimport CountrySelector from 'widgets/header/CountrySelector';\nimport CountrySelectorMenuItem from 'widgets/header/CountrySelectorMenuItem';\nimport AjaxForm from 'widgets/forms/AjaxForm';\nimport Token from 'widgets/global/Token';\nimport BasicInput from 'widgets/forms/BasicInput';\nimport InputEmail from 'widgets/forms/InputEmail';\nimport InputPassword from 'widgets/forms/InputPassword';\nimport InputCheckbox from 'widgets/forms/InputCheckbox';\nimport InputText from 'widgets/forms/InputText';\nimport InputTextarea from 'widgets/forms/InputTextarea';\nimport InputHidden from 'widgets/forms/InputHidden';\nimport InputTel from 'widgets/forms/InputTel';\nimport MaskableInput from 'widgets/forms/MaskableInput';\nimport Tabs from 'widgets/global/Tabs';\nimport TabPanel from 'widgets/global/TabPanel';\nimport InputSelect from 'widgets/forms/InputSelect';\nimport Label from 'widgets/global/Label';\nimport EmailSubscribe from 'widgets/forms/ajax/EmailSubscribe';\nimport ConfirmDialog from 'widgets/global/ConfirmDialog';\nimport Carousel from 'widgets/global/Carousel';\nimport BackToTop from 'widgets/global/BackToTop';\nimport Modal from 'widgets/global/Modal';\nimport InputRadio from 'widgets/forms/InputRadio';\nimport ConsentTracking from 'widgets/global/ConsentTracking';\nimport DropDown from 'widgets/global/DropDown';\nimport EmitBusEvent from 'widgets/global/EmitBusEvent';\nimport AjaxFormResponseContainer from 'widgets/forms/AjaxFormResponseContainer';\nimport Combobox from 'widgets/forms/Combobox';\nimport SearchBox from 'widgets/search/SearchBox';\nimport FocusHighlighter from 'widgets/global/FocusHighlighter';\nimport SearchBoxToggle from 'widgets/search/SearchBoxToggle';\nimport StickyHeader from 'widgets/global/StickyHeader';\nimport ButtonWithIcon from 'widgets/global/ButtonWithIcon';\nimport AccessibilityFocusTrapMixin from 'widgets/global/AccessibilityFocusTrapMixin';\nimport AccessibilityFocusMixin from 'widgets/global/AccessibilityFocusMixin';\nimport SoftKeyboardToggleMixin from 'widgets/global/SoftKeyboardToggleMixin';\nimport ProductTile from 'widgets/product/ProductTile';\nimport AddToWishlistMixin from 'widgets/wishlist/AddToWishlistMixin';\nimport Disclosure from 'widgets/global/Disclosure';\nimport GlobalAlerts from 'widgets/global/GlobalAlerts';\nimport GlobalModal from 'widgets/global/GlobalModal';\nimport MenuButton from 'widgets/header/MenuButton';\n\nwidgetsMgr.addWidgetsList('global.widgets', () => [\n    ['token', Token],\n    ['label', Label],\n    ['carousel', Carousel],\n    ['button', Button],\n        ['buttonWithIcon', ButtonWithIcon, 'button'],\n    ['listAccessibility', ListAccessibility],\n        ['refinementsPanel', Modal, 'listAccessibility'],\n        ['refinementsPanel', SwipeToClose, 'refinementsPanel'],\n        ['megaMenu', MegaMenu, 'listAccessibility'],\n        ['menuBarItem', MenuBarItem, 'listAccessibility'],\n        ['hamburgerMenuItem', HamburgerMenuItem, 'listAccessibility'],\n            ['countrySelectorMenuItem', CountrySelectorMenuItem, 'hamburgerMenuItem'],\n                ['countrySelectorMenuItem', CountrySelector, 'countrySelectorMenuItem'],\n        ['accordion', Accordion, 'listAccessibility'],\n        ['menuButton', MenuButton, 'listAccessibility'],\n    ['accordionItem', AccordionItem],\n    ['swipeToClose', SwipeToClose],\n        ['menuPanel', MenuPanel, 'swipeToClose'],\n    ['menuPanelToggle', MenuPanelToggle],\n    ['dropDown', DropDown],\n    ['dismissBlock', DismissBlock],\n    ['countrySelector', CountrySelector, 'menuButton'],\n    ['backtotop', BackToTop],\n    ['consentTracking', ConsentTracking],\n    ['emitBusEvent', EmitBusEvent],\n    ['focusHighlighter', FocusHighlighter],\n    ['searchBoxToggle', SearchBoxToggle],\n    ['stickyHeader', StickyHeader],\n    ['basicForm', BasicForm],\n        ['form', Form, 'basicForm'],\n            ['ajaxform', AjaxForm, 'basicForm'],\n                ['emailSubscribe', EmailSubscribe, 'ajaxform'],\n    ['basicInput', BasicInput],\n        ['inputPassword', InputPassword, 'basicInput'],\n        ['inputCheckbox', InputCheckbox, 'basicInput'],\n        ['inputSelect', InputSelect, 'basicInput'],\n        ['inputText', InputText, 'basicInput'],\n            ['inputEmail', InputEmail, 'inputText'],\n            ['inputTextarea', InputTextarea, 'inputText'],\n            ['inputTel', InputTel, 'inputText'],\n                ['inputTel', MaskableInput, 'inputTel'],\n        ['inputRadio', InputRadio, 'basicInput'],\n        ['inputHidden', InputHidden, 'basicInput'],\n    ['modal', Modal],\n        ['modal', AccessibilityFocusTrapMixin, 'modal'],\n        ['globalModal', GlobalModal, 'modal'],\n        ['confirmDialog', ConfirmDialog, 'modal'],\n        ['searchBoxToggle', SearchBoxToggle, 'modal'],\n    ['combobox', Combobox],\n        ['searchBox', SearchBox, 'combobox'],\n            ['searchBox', AccessibilityFocusTrapMixin, 'searchBox'],\n            ['searchBox', SoftKeyboardToggleMixin, 'searchBox'],\n            ['searchBox', Modal, 'searchBox'],\n    ['tabs', Tabs],\n    ['tabPanel', TabPanel],\n    ['productTile', ProductTile],\n        ['productTile', AddToWishlistMixin, 'productTile'],\n    ['ajaxFormResponseContainer', AjaxFormResponseContainer, 'modal'],\n    ['disclosure', Disclosure],\n    ['globalAlerts', GlobalAlerts]\n]);\n\nif (content) {\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'content.widgets' */ 'widgets/content/ContactUs')\n    ]).then(deps => {\n        const [ContactUs] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'content.widgets',\n            widgetsDefinition: () => [\n                ['contactUs', ContactUs]\n            ]\n        };\n    }));\n}\n\nif (!checkout) {\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'minicart.widgets' */ 'widgets/cart/Minicart'),\n        import(/* webpackChunkName: 'minicart.widgets' */ 'widgets/cart/MinicartDialog')\n    ]).then(deps => {\n        const [\n            Minicart,\n            MinicartDialog\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'minicart.widgets',\n            widgetsDefinition: () => [\n                ['minicart', Minicart],\n                // modal\n                ['minicartDialog', MinicartDialog, 'modal']\n            ]\n        };\n    }));\n}\n\nif (wishlist) {\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'wishlist.widgets' */ 'widgets/wishlist/WishlistMgr'),\n        import(/* webpackChunkName: 'wishlist.widgets' */ 'widgets/wishlist/WishListItem'),\n        import(/* webpackChunkName: 'wishlist.widgets' */ 'widgets/product/AddToCartMixin')\n    ]).then(deps => {\n        const [WishlistMgr, WishListItem, AddToCartMixin] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'wishlist.widgets',\n            widgetsDefinition: () => [\n                ['wishlistMgr', WishlistMgr],\n                ['wishListItem', WishListItem],\n                    ['wishListItem', AddToCartMixin, 'wishListItem']\n            ]\n        };\n    }));\n}\n\nif (pdp || plp || cart || wishlist) {\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'product.widgets' */ 'widgets/product/ProductDetail'),\n        import(/* webpackChunkName: 'product.widgets' */ 'widgets/product/ProductImages'),\n        import(/* webpackChunkName: 'product.widgets' */ 'widgets/product/ColorSwatch'),\n        import(/* webpackChunkName: 'product.widgets' */ 'widgets/product/AddToCartMixin'),\n        import(/* webpackChunkName: 'product.widgets' */ 'widgets/global/ProcessButton')\n    ]).then(deps => {\n        const [\n            ProductDetail,\n            ProductImages,\n            ColorSwatch,\n            AddToCartMixin,\n            ProcessButton\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'product.widgets',\n            widgetsDefinition: () => [\n                ['productDetail', ProductDetail],\n                    ['productDetail', AddToCartMixin, 'productDetail'],\n                    ['productDetail', AddToWishlistMixin, 'productDetail'],\n                ['productImages', ProductImages],\n                    ['productImages', AccessibilityFocusTrapMixin, 'productImages'],\n                ['colorSwatch', ColorSwatch],\n                // button\n                    ['processButton', ProcessButton, 'button']\n            ]\n        };\n    }));\n}\n\nif (plp) {\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'search.widgets' */ 'widgets/search/ProductListingMgr'),\n        import(/* webpackChunkName: 'search.widgets' */ 'widgets/search/RefinementsPanel'),\n        import(/* webpackChunkName: 'search.widgets' */ 'widgets/search/RefinementsPanelToggle'),\n        import(/* webpackChunkName: 'search.widgets' */ 'widgets/search/RefinementMenuItem'),\n        import(/* webpackChunkName: 'search.widgets' */ 'widgets/global/Refinement'),\n        import(/* webpackChunkName: 'search.widgets' */ 'widgets/search/NoSearchResultsForm')\n    ]).then(plpDeps => {\n        const [\n            ProductListingMgr,\n            RefinementsPanel,\n            RefinementsPanelToggle,\n            RefinementMenuItem,\n            Refinement,\n            NoSearchResultsForm\n        ] = plpDeps.map(dep => dep.default);\n\n        return {\n            listId: 'search.widgets',\n            widgetsDefinition: () => [\n                // listAccessibility\n                    ['refinementsPanel', RefinementsPanel, 'refinementsPanel'],\n                    ['refinementMenuItem', RefinementMenuItem, 'listAccessibility'],\n                // tabs\n                    ['productListingMgr', ProductListingMgr, 'tabs'],\n                ['refinementsPanelToggle', RefinementsPanelToggle],\n                ['refinement', Refinement],\n                // basicForm\n                    ['noSearchResultsForm', NoSearchResultsForm, 'basicForm']\n            ]\n        };\n    }));\n}\n\nif (account) {\n    // @ts-ignore\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/account/PaymentsList'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/account/AddressList'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/account/OrderHistoryMgr'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/forms/AddressBookForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/account/PasswordResetForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/forms/AddressForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/forms/ajax/LoginForm'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/forms/GoogleAutocompleteField'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/global/SessionExpiration'),\n        import(/* webpackChunkName: 'account.widgets' */ 'widgets/order/OrderProductSummary')\n    ]).then(deps => {\n        const [\n            PaymentsList,\n            AddressList,\n            OrderHistoryMgr,\n            AddressBookForm,\n            PasswordResetForm,\n            AddressForm,\n            LoginForm,\n            GoogleAutocompleteField,\n            SessionExpiration,\n            OrderProductSummary\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'account.widgets',\n            widgetsDefinition: () => [\n                ['addressList', AddressList],\n                ['paymentsList', PaymentsList],\n                ['orderHistoryMgr', OrderHistoryMgr],\n                    ['sessionExpiration', SessionExpiration, 'modal'],\n                // basicForm / ajaxform\n                    ['addressForm', AddressForm, 'ajaxform'],\n                    ['addressBookForm', AddressBookForm, 'addressForm'],\n                    ['loginForm', LoginForm, 'ajaxform'],\n                    ['passwordResetForm', PasswordResetForm, 'ajaxform'],\n                // inputText\n                ['googleAutocompleteField', GoogleAutocompleteField, 'inputText'],\n                ['orderProductSummary', OrderProductSummary]\n            ]\n        };\n    }));\n}\n\nif (cart) {\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'cart.widgets' */ 'widgets/cart/CartMgr'),\n        import(/* webpackChunkName: 'cart.widgets' */ 'widgets/forms/CouponForm'),\n        import(/* webpackChunkName: 'cart.widgets' */ 'widgets/cart/PromoCodeDisclosure'),\n        import(/* webpackChunkName: 'cart.widgets' */ 'widgets/global/SessionExpiration')\n    ]).then(deps => {\n        const [\n            CartMgr,\n            CouponForm,\n            PromoCodeDisclosure,\n            SessionExpiration\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'cart.widgets',\n            widgetsDefinition: () => [\n                ['cartMgr', CartMgr],\n                // modal\n                    ['sessionExpiration', SessionExpiration, 'modal'],\n                // basicForm / form / ajaxForm\n                    ['couponform', CouponForm, 'ajaxform'],\n                // disclosure\n                    ['promoCodeDisclosure', PromoCodeDisclosure, 'disclosure']\n            ]\n        };\n    }));\n}\n\nif (checkout) {\n    // @ts-ignore\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/forms/ajax/LoginForm'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/forms/ajax/CheckoutLoginForm'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/account/PasswordResetForm'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/CheckoutMgr'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/AddressCheckoutForm'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/ShippingForm'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/BillingForm'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/PaymentAccordion'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/PaymentAccordionItem'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/PaymentAccordionItemCREDIT_CARD'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/PaymentAccordionItemZERO_PAYMENT'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/PaymentAccordionItemDW_APPLE_PAY'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/PaymentAccordionItemPAYPAL_EXPRESS'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/InputCreditCardNumber'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/checkout/RadioSelector'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/forms/GoogleAutocompleteField'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/forms/AddressForm'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/global/SessionExpiration'),\n        import(/* webpackChunkName: 'checkout.widgets' */ 'widgets/content/ContactUs')\n    ]).then(deps => {\n        const [\n            LoginForm,\n            CheckoutLoginForm,\n            PasswordResetForm,\n            CheckoutMgr,\n            AddressCheckoutForm,\n            ShippingFrom,\n            BillingForm,\n            PaymentAccordion,\n            PaymentAccordionItem,\n            PaymentAccordionItemCREDITCARD,\n            PaymentAccordionItemZEROPAYMENT,\n            PaymentAccordionItemAPPLEPAY,\n            PaymentAccordionItemPAYPALEXPRESS,\n            InputCreditCardNumber,\n            RadioSelector,\n            GoogleAutocompleteField,\n            AddressForm,\n            SessionExpiration,\n            ContactUs\n        ] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'checkout.widgets',\n            widgetsDefinition: () => [\n                ['checkoutMgr', CheckoutMgr],\n                    ['checkoutMgr', AccessibilityFocusMixin, 'checkoutMgr'],\n                // modal\n                    ['sessionExpiration', SessionExpiration, 'modal'],\n                // basicForm / form / ajaxform\n                    ['loginForm', LoginForm, 'ajaxform'],\n                        ['checkoutLoginForm', CheckoutLoginForm, 'loginForm'],\n                    ['passwordResetForm', PasswordResetForm, 'ajaxform'],\n                    ['addressForm', AddressForm, 'ajaxform'],\n                        ['addressCheckoutForm', AddressCheckoutForm, 'addressForm'],\n                            ['addressCheckoutForm', AccessibilityFocusMixin, 'addressCheckoutForm'],\n                            ['shippingForm', ShippingFrom, 'addressCheckoutForm'],\n                            ['billingForm', BillingForm, 'addressCheckoutForm'],\n                // basicInput\n                    ['inputCreditCardNumber', InputCreditCardNumber, 'basicInput'],\n                    ['googleAutocompleteField', GoogleAutocompleteField, 'inputText'],\n                    // inputRadio\n                        ['radioSelector', RadioSelector, 'inputRadio'],\n                // accordion\n                    ['paymentAccordion', PaymentAccordion, 'accordion'],\n                // accordionItems\n                    ['paymentAccordionItem', PaymentAccordionItem, 'accordionItem'],\n                        ['paymentAccordionItemCREDIT_CARD', PaymentAccordionItemCREDITCARD, 'paymentAccordionItem'],\n                            ['paymentAccordionItemCREDIT_CARD', AccessibilityFocusMixin, 'paymentAccordionItemCREDIT_CARD'],\n                        ['paymentAccordionItemPAYPAL_EXPRESS', PaymentAccordionItemPAYPALEXPRESS, 'paymentAccordionItem'],\n                        ['paymentAccordionItemZERO_PAYMENT', PaymentAccordionItemZEROPAYMENT, 'paymentAccordionItem'],\n                        ['paymentAccordionItemDW_APPLE_PAY', PaymentAccordionItemAPPLEPAY, 'paymentAccordionItem'],\n                ['contactUs', ContactUs]\n            ]\n        };\n    }));\n}\n\nif (orderconfirmation) {\n    widgetsMgr.asyncListsPromises.push(Promise.all([\n        import(/* webpackChunkName: 'orderconfirmation.widgets' */ 'widgets/order/OrderProductSummary')\n    ]).then(deps => {\n        const [OrderProductSummary] = deps.map(dep => dep.default);\n\n        return {\n            listId: 'content.widgets',\n            widgetsDefinition: () => [\n                ['orderProductSummary', OrderProductSummary]\n            ]\n        };\n    }));\n}\n/* sonar-ignore-end */\n","/**\n * @module widgetsMgr\n * @category widgets\n * @subcategory framework\n */\n\n/* eslint-disable no-use-before-define */\n/* eslint-disable max-classes-per-file */\nif ('assetsStaticURL' in window) {\n    // @ts-ignore\n    // eslint-disable-next-line no-undef, camelcase\n    __webpack_public_path__ = window.assetsStaticURL;\n}\n\nimport './_polyfills';\nimport { log, getData } from './toolbox/util';\n// import eventMgr from './EventMgr';\nimport { RefElement } from 'widgets/toolbox/RefElement';\nimport Widget from 'widgets/Widget';\nimport { init as initViewType, getActiveViewtypeName, ALL_VIEW_TYPES } from 'widgets/toolbox/viewtype';\nimport eventBus from 'widgets/toolbox/eventBus';\n\nconst WIDGET_PROP_NAME = '@@_widget_instance_@@';\nconst WIDGET_DISPOSABLE_VALUES = '@@_widget_events_disposable_@@';\nconst WIDGET_DOM_EVENT_PREFIX = 'data-event-';\nconst WIDGET_DOM_GLOBAL_EVENT_PREFIX = 'data-global-event-';\nconst DATA_ATTR_PREFIX = 'data-';\nconst DATA_WIDGET = 'data-widget';\nconst DATA_WIDGET_VIEWTYPE_RELATED = 'data-widget.';\nconst WIDGET_EVENT_PREFIX = 'data-widget-event-';\nconst DATA_INITIALIZED = 'data-initialized';\nconst DATA_REF = 'data-ref';\n/**\n * @description check if there are viewtype modifiers\n * @param {string[]} modifiers to check\n * @returns {boolean} true if any viewtype modifier exist\n */\n// @ts-ignore\nconst isViewtypeModifiers = modifiers => modifiers.some(m => ALL_VIEW_TYPES.includes(m));\n/**\n * @description check if HTML Element is widget\n * @param {HTMLElement} el element to check\n * @returns {boolean} true if widget\n */\nconst isWidget = el => el.hasAttribute(DATA_WIDGET)\n    || el.getAttributeNames().some(name => name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED));\n/**\n * @description get widget name for current viewtype\n * @param {HTMLElement} el widget element\n * @returns {string|null} widget name if exist\n */\nconst getViewtypeRelatedWidgetName = el => {\n    const activeViewtypeName = getActiveViewtypeName();\n    const viewtypeWidgetConfigs = el.getAttributeNames().filter(name => name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED));\n\n    if (viewtypeWidgetConfigs.length) {\n        const attrName = viewtypeWidgetConfigs.find(name => name.includes(activeViewtypeName));\n\n        return attrName ? el.getAttribute(attrName) : 'widget';\n    } else {\n        return null;\n    }\n};\n\n/**\n * @description check if element has viewtype-related widget definition or widget properties\n * @param {HTMLElement} el element\n * @returns {boolean} widget name if exist\n */\nconst isViewtypeRelatedWidget = el => {\n    if (el.getAttribute(DATA_WIDGET)) {\n        return el.getAttributeNames().some(name => name.startsWith(DATA_ATTR_PREFIX) // is data attr\n            && !name.startsWith(WIDGET_EVENT_PREFIX) // not widget event\n            && !name.startsWith(WIDGET_DOM_EVENT_PREFIX) // not dom event\n            && !name.startsWith(WIDGET_DOM_GLOBAL_EVENT_PREFIX) // not gtm event\n            && ALL_VIEW_TYPES.some(m => name.includes(m))); // is viewtype related property\n    } else {\n        return isWidget(el); // is viewtype related widget definition\n    }\n};\n\nclass RootWidget extends Widget { }\n\nif (!document.head.parentElement) {\n    throw Error('No document');\n}\n\n/**\n * @description get initial widget state from data attributes\n * @param {HTMLElement} domNode element of widget\n * @returns {{[x: string]: object|string|number|boolean|null|undefined}} json-like configuration\n */\nfunction getWidgetConfig(domNode) {\n    /**\n     * @type {{[x: string]: object|string|number|boolean|null|undefined}}\n     */\n    const config = {};\n    const activeViewtype = getActiveViewtypeName();\n\n    domNode.getAttributeNames().forEach(attrName => {\n        if (typeof attrName === 'string'\n            && attrName.includes(DATA_ATTR_PREFIX)\n            && !attrName.startsWith(WIDGET_DOM_EVENT_PREFIX)\n            && !attrName.startsWith(WIDGET_DOM_GLOBAL_EVENT_PREFIX)\n            && !attrName.startsWith(DATA_WIDGET)\n        ) {\n            const [key, ...modifiers] = attrName.replace(DATA_ATTR_PREFIX, '').split('.');\n            const camelCaseKey = camelCase(key);\n            const isActiveViewtypeModifier = modifiers.includes(activeViewtype);\n            const isViewtypeModifier = isViewtypeModifiers(modifiers);\n            const isConfigNotExist = typeof config[camelCaseKey] === 'undefined';\n\n            // If modifiers has activeViewtype that we definitely need set it to config, even if we already have value in config (most probable there can be only default value set)\n            // If not check if it is default value (not have modifiers) and if value was not previosly set by attribute with modifiers then we will set default value to config\n            if (isActiveViewtypeModifier || (!isViewtypeModifier && isConfigNotExist)) {\n                // @ts-ignore we may ignore it because attribute existing because provided by method getAttributeNames\n                config[camelCaseKey] = getData(domNode.getAttribute(attrName));\n            }\n        }\n    });\n\n    const jsonConfig = domNode.getAttribute('data-json-config');\n    if (jsonConfig) {\n        try {\n            const parsedConfig = JSON.parse(jsonConfig);\n            return { ...config, ...parsedConfig };\n        } catch (error) {\n            throw new Error(`Invalid json config for widget ${domNode} ${error}`);\n        }\n    }\n\n    return config;\n}\n\nconst rootWidget = new RootWidget(document.head.parentElement, {});\nconst widgetsInitMetric = Object.create(null);\nlet initialized = false;\n\n/**\n * @typedef {[(baseWidget: typeof Widget) => typeof Widget, string|undefined]} widgetConfig\n */\n\n/**\n * @typedef {[string, (baseWidget: typeof Widget) => typeof Widget, string|undefined]} widgetRegistry\n */\n\n/**\n * @category widgets\n * @subcategory framework\n */\nclass WidgetMgr {\n    constructor() {\n        /**\n         * @description Map of widgets configurations in format: `widgetId: [widgetFunction, dependencyWidgetId]\n         * @type {{[key : string] : widgetConfig | undefined}}\n         */\n        this.widgets = Object.create(null);\n        /**\n         * @description Map of widgets list generators in format `listId: generatorFunction`\n         * Generator function return widgets list\n         * @type {{[key : string] : () => [widgetRegistry]}}\n         */\n        this.widgetsLists = Object.create(null);\n        /**\n         * @description Array of registered widgets lists IDs\n         * @type {string[]}\n         */\n        this.widgetsListsNameSpaceOrder = [];\n        /**\n         * @description Map of cached widgets classes in format `widgetId: returnsClassFunction`\n         * @type {{[key : string] : typeof Widget|undefined}}\n         */\n        this.widgetsClassCache = Object.create(null);\n        /**\n         * @description Map of widgets extending in format `widgetId: ['widgetIdA', 'widgetIdB', ...]`\n         * @type {{[key: string] : string[]|undefined}}\n         */\n        this.hashRegistry = Object.create(null);\n\n        this.timeOfEvaluate = Date.now();\n        this.widgets.widget = [() => Widget, ''];\n        /**\n         * @description Array of list promises\n         * @type {Promise[]}\n         */\n        this.asyncListsPromises = [];\n        this.getting = false;\n\n        initViewType();\n    }\n\n    /**\n     * @description When DOM is ready, the method starts registering widgets,\n     * for each assigned widgets list, and executes WidgetMgr.init()\n     */\n    run() {\n        Promise.all(this.asyncListsPromises).then((asyncLists) => {\n            asyncLists.forEach(({ listId, widgetsDefinition }) => this.addWidgetsList(listId, widgetsDefinition));\n\n            this.widgetsListsNameSpaceOrder.forEach(this.registerWidgetsList, this);\n\n            this.timeOfRun = Date.now();\n            // Init widgets once DOM is ready\n            if (document.readyState === 'loading') {\n                this.hasDomLoadedFirst = false;\n                document.addEventListener('DOMContentLoaded', () => {\n                    setTimeout(() => this.init(), 0);\n                }, { once: true });\n            } else {\n                this.hasDomLoadedFirst = true;\n                this.init();\n            }\n        });\n    }\n\n    /**\n     * @description Returns all registered widgets.\n     * @returns {object} all widgets\n     */\n    getAll() {\n        return this.widgets;\n    }\n\n    /**\n     * @description Returns registered widget by name.\n     * @param {string|undefined} name Name of registered widget (used as data-widget=\"<name>\" in DOM)\n     * @returns {typeof Widget} return widget class by name\n     */\n    get(name) {\n        if (name) {\n            this.getting = true;\n            const cachedClass = this.widgetsClassCache[name];\n\n            if (cachedClass) {\n                return cachedClass;\n            }\n\n            const widgetsConfig = this.widgets[name];\n\n            if (widgetsConfig) {\n                const [getWidgetClass, baseWidget] = widgetsConfig;\n                const widgetClass = getWidgetClass(this.get(baseWidget));\n                this.widgetsClassCache[name] = widgetClass;\n\n                return widgetClass;\n            }\n        }\n\n        return Widget;\n    }\n\n    /**\n     * @description add widget by name into registry\n     * @param {string} name of widget in registry\n     * @param {widgetConfig} widget configuration to set\n     * @returns {widgetConfig} widget return set widget config\n     */\n    set(name, widget) {\n        this.widgets[name] = widget;\n        return widget;\n    }\n\n    /**\n     * @description Add widgets list into registry\n     * @param {string} nameSpace - name of widgets list\n     * @param {() => [widgetRegistry]} cb - function that returns widget list\n     */\n    addWidgetsList(nameSpace, cb) {\n        if (!this.widgetsListsNameSpaceOrder.includes(nameSpace)) {\n            this.widgetsListsNameSpaceOrder.push(nameSpace);\n        }\n\n        this.widgetsLists[nameSpace] = cb;\n    }\n\n    /**\n     * @description Register all widgets from widgets list by name space\n     * @param {string} nameSpace - widgets list namespace\n     * @returns {void}\n     */\n    registerWidgetsList(nameSpace) {\n        if (!PRODUCTION) {\n            // eslint-disable-next-line no-console\n            console.groupCollapsed(`${nameSpace} widgets registration`);\n            // console.profile('Registration widgets');\n        }\n\n        this.widgetsLists[nameSpace]().forEach(args => this.register(...args), this);\n\n        if (!PRODUCTION) {\n            //  console.profileEnd('Registration widgets');\n            // eslint-disable-next-line no-console\n            console.groupEnd();\n        }\n    }\n\n    /**\n     * @description set hash to registry by widget name with widget dependency\n     * @param {{[key: string]: string[]|undefined}} hashRegistry registry object\n     * @param {string} name widget in hashRegistry\n     * @param {string} baseWidget name of base widget\n     */\n    setHash(hashRegistry, name, baseWidget = '') {\n        if (!hashRegistry[name]) {\n            hashRegistry[name] = [name];\n        }\n\n        const currentHash = hashRegistry[name];\n\n        if (baseWidget && currentHash) {\n            currentHash.push(baseWidget);\n        }\n    }\n\n    /**\n     * @description get widget hash from registry by name\n     * @param {{[key: string]: string[]|undefined}} hashRegistry registry object\n     * @param {string} name widget in hashRegistry\n     * @returns {string} hash for widget\n     */\n    getHash(hashRegistry, name) {\n        return (hashRegistry[name] || []).reduce((currentWidget, baseWidget) => {\n            var hash;\n            if (name === baseWidget) {\n                hash = baseWidget;\n            } else {\n                hash = this.getHash(hashRegistry, baseWidget);\n            }\n            return currentWidget + hash;\n        });\n    }\n\n    /**\n     * @description add widget into registry\n     * @param {string} name name of widget (will be used in `data-widget=\"name\"`)\n     * @param {(baseWidget: typeof Widget) => typeof Widget} widgetConstructor function mixin that returns class\n     * @param {string|undefined} baseWidget base widget to extend\n     * @returns {void}\n     */\n    register(name, widgetConstructor, baseWidget = undefined) {\n        if (!PRODUCTION && this.getting) {\n            log.warn('register widget after getting');\n        }\n\n        const widgetConfig = this.widgets[name];\n\n        if (widgetConfig && baseWidget === name) {\n            const [superWidgetConstructor, superBaseWidget] = widgetConfig;\n            this.set(name, [base => widgetConstructor(superWidgetConstructor(base)), superBaseWidget]);\n        } else {\n            this.set(name, [widgetConstructor, baseWidget]);\n        }\n\n        this.setHash(this.hashRegistry, name, baseWidget);\n    }\n\n    /**\n     * @description Returns list of widgets changed during 'viewtype.change' event\n     * @returns {Array<widgetRegistry>} widgets that was changed due to viewport change\n     */\n    getChangedWidgets() {\n        /**\n         * @type {Array<widgetRegistry>}\n         */\n        const emptyArray = [];\n\n        const newRegistry = this.widgetsListsNameSpaceOrder\n            .map(ns => this.widgetsLists[ns]())\n            .reduce((prev, nsList) => [...prev, ...nsList], emptyArray);\n\n        // find extandable widgets\n\n        /*\n        * @type {{[key : string] : string[]}}\n        */\n        const newHash = Object.create(null);\n\n        newRegistry.forEach(([wname, , bname]) => this.setHash(newHash, wname, bname));\n\n        const changedWidgets = newRegistry\n            .filter(([wname]) => {\n                return this.getHash(newHash, wname) !== this.getHash(this.hashRegistry, wname);\n            });\n\n        return changedWidgets;\n    }\n\n    /**\n     * @description Re-init widgets changed during 'viewtype.change' event and re-assign viewtype related events\n     */\n    updateMutableComponents() {\n        const changedWidgets = this.getChangedWidgets();\n\n        if (!changedWidgets.length) {\n            reinitElementByWidgetsNamesList();\n            return;\n        }\n\n        const widgetsNames = changedWidgets.map(w => w[0]);\n\n        this.getting = false;\n        // remove definitions\n        changedWidgets.forEach(([name]) => {\n            this.hashRegistry[name] = undefined;\n            this.widgets[name] = undefined;\n            this.widgetsClassCache[name] = undefined;\n        });\n\n        // register again\n        changedWidgets.forEach(args => this.register(...args));\n\n        reinitElementByWidgetsNamesList(document.head.parentElement, widgetsNames);\n\n        /**\n         * @description detach/attach widgets to elements by name\n         * @param {HTMLElement|null} el root element for re-initialization widgets\n         * @param {string[]} widgetsListNames - widgets list\n         * @returns {undefined}\n         */\n        function reinitElementByWidgetsNamesList(el = document.head.parentElement, widgetsListNames = []) {\n            if (!el) {\n                return;\n            }\n\n            const widgetName = el && el.getAttribute(DATA_WIDGET);\n\n            if ((widgetName && widgetsListNames.includes(widgetName)) || isViewtypeRelatedWidget(el)) {\n                detachElement(el);\n                attachElements(el);\n            } else if (el.children) {\n                // recursion\n\n                // disposible not view type events\n                // assign view type events\n                const attrs = el.getAttributeNames().filter(name => name.startsWith(WIDGET_DOM_EVENT_PREFIX));\n\n                const reloadEvents = attrs.some(attr => {\n                    const [, ...modifiers] = attr.replace(WIDGET_DOM_EVENT_PREFIX, '').split('.');\n\n                    // @ts-ignore\n                    return modifiers.some(mod => ALL_VIEW_TYPES.includes(mod));\n                });\n\n                const parentWidget = el[WIDGET_PROP_NAME] || findParentWidget(el);\n\n                if (reloadEvents) {\n                    const disposableValues = el[WIDGET_DISPOSABLE_VALUES];\n\n                    if (disposableValues) {\n                        el[WIDGET_DISPOSABLE_VALUES] = disposableValues.filter((dispose) => {\n                            // @ts-ignore\n                            if (dispose.eventName) {\n                                // Dispose only events\n                                dispose();\n                                return false;\n                            }\n                            return true;\n                        });\n                    }\n\n                    attrs.forEach(attachEventToElement(el, parentWidget));\n                }\n\n                // assign view type gtm events\n                const globalAttrs = el.getAttributeNames().filter(name => name.startsWith(WIDGET_DOM_GLOBAL_EVENT_PREFIX));\n\n                const reloadGtmEvents = globalAttrs.some(attr => {\n                    const [, ...modifiers] = attr.replace(WIDGET_DOM_GLOBAL_EVENT_PREFIX, '').split('.');\n\n                    // @ts-ignore\n                    return modifiers.some(mod => ALL_VIEW_TYPES.includes(mod));\n                });\n\n                if (reloadGtmEvents) {\n                    attrs.forEach(attachGlobalEventToElement(el, parentWidget));\n                }\n\n                Array.from(el.children).forEach(child => {\n                    reinitElementByWidgetsNamesList(/** @type {HTMLElement} */(child), widgetsListNames);\n                });\n            }\n        }\n    }\n\n    /**\n     * @description Destroy all widgets/events and construct them again. Needed for webpack HMR during change code for any widget\n     * @param {HTMLElement|null} el - root element from which start restart of widgets\n     */\n    restartWidgets(el = document.head.parentElement) {\n        if (el) {\n            detachElement(el);\n\n            this.getting = false;\n            this.hashRegistry = {};\n            this.widgets = {};\n            this.widgetsClassCache = {};\n\n            this.widgetsListsNameSpaceOrder.forEach(this.registerWidgetsList, this);\n\n            attachElements(el);\n        }\n    }\n\n    /**\n     * @typedef Diff\n     * @property {string} name\n     * @property {string} action\n     * @property {string} value\n     * @property {string} oldValue\n     * @property {string} newValue\n     */\n\n    /**\n     * @description destroy widget or refElement, run disposible for events for element\n     * @param {HTMLElement} el element for processin attributes\n     * @param {Diff} diff diffDom internal object of changes\n     * @returns {void}\n     */\n    removeAttribute(el, diff) {\n        if (diff.name === DATA_REF) {\n            el[WIDGET_DISPOSABLE_VALUES] = (el[WIDGET_DISPOSABLE_VALUES] || []).filter(disposable => {\n                // @ts-ignore\n                if (disposable.attrName === 'ref') {\n                    disposable();\n                    return false;\n                }\n                return true;\n            });\n        } else if (DATA_WIDGET === diff.name || diff.name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED)) {\n            detachElement(el);\n        } else if (diff.name.startsWith(WIDGET_DOM_EVENT_PREFIX)) {\n            const name = diff.name.replace(WIDGET_DOM_EVENT_PREFIX, '').split('.')[0];\n            const value = diff.value || diff.oldValue;\n            el[WIDGET_DISPOSABLE_VALUES] = (el[WIDGET_DISPOSABLE_VALUES] || []).filter(disposable => {\n                // @ts-ignore\n                if (disposable.eventName === name && disposable.methodToCall === value) {\n                    disposable();\n                    return false;\n                }\n                return true;\n            });\n        } else if (el[WIDGET_PROP_NAME]) {\n            handleWidgetPropertyChange(el, diff);\n        }\n    }\n\n    /**\n     * @description Create widget or refElement, assign events for element\n     * @param {HTMLElement} el element for processin attributes\n     * @param {Diff} diff diffDom internal object of changes\n     * @returns {void}\n     */\n    addAttribute(el, diff) {\n        if (diff.name === DATA_REF) {\n            const widget = el[WIDGET_PROP_NAME] || findParentWidget(el);\n            if (widget && widget.refs) {\n                const refEl = new RefElement([el]);\n                widget.refs[diff.value || diff.newValue] = refEl;\n                disposableForParent(el, widget, refEl, diff.value || diff.newValue);\n            }\n        } else if (DATA_WIDGET === diff.name || diff.name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED)) {\n            attachElements(el);\n        } else if (diff.name.startsWith(WIDGET_DOM_EVENT_PREFIX)) {\n            attachEventToElement(el, el[WIDGET_PROP_NAME] || findParentWidget(el))(diff.name);\n        } else if (diff.name.startsWith(WIDGET_DOM_GLOBAL_EVENT_PREFIX)) {\n            attachGlobalEventToElement(el, el[WIDGET_PROP_NAME] || findParentWidget(el))(diff.name);\n        } else if (el[WIDGET_PROP_NAME]) {\n            const widget = el[WIDGET_PROP_NAME];\n            if (widget && diff.name !== DATA_INITIALIZED) {\n                widget.config = getWidgetConfig(el);\n            }\n        }\n    }\n\n    /**\n     * Attaching widget to DOM elements from parent to child recursively, by Widgets.attachElements(element)\n     * Initialize mutation observer\n     */\n    init() {\n        if (!PRODUCTION) {\n            this.timeOfInit = Date.now();\n            // log.profile('Initialization widgets');\n        }\n\n        if (!document.head.parentElement) {\n            throw Error('No document');\n        }\n\n        const observer = new MutationObserver(mutations => mutations.forEach((mutation) => {\n            this.handleMutations(mutation);\n        }));\n\n        observer.observe(document.body, {\n            attributes: false,\n            characterData: false,\n            childList: true,\n            subtree: true\n        });\n\n        attachElements(document.head.parentElement);\n\n        eventBus.on('viewtype.change', () => this.updateMutableComponents());\n\n        if (!PRODUCTION) {\n            // @ts-ignore\n            const total = Date.now() - window.headInitTime;\n            // @ts-ignore\n            const timeInitWidgets = Date.now() - this.timeOfInit;\n            // @ts-ignore\n            const timeToRegisterWidgets = this.timeOfRun - this.timeOfEvaluate;\n            // @ts-ignore\n            const loadAndScriptingTime = this.timeOfEvaluate - window.headInitTime;\n\n            var waitToDomLoaded = 0;\n            // @ts-ignore\n            waitToDomLoaded = this.hasDomLoadedFirst ? (window.domReadyTime - this.timeOfInit) : this.timeOfInit - this.timeOfRun;\n\n            // @ts-ignore\n            const headToDomReady = (window.domReadyTime || this.timeOfRun) - window.headInitTime;\n\n            log.table({\n                headToDomReady: {\n                    ms: headToDomReady,\n                    percentage: 0\n                },\n                loadAndScriptingTime: {\n                    ms: loadAndScriptingTime,\n                    percentage: Math.round((loadAndScriptingTime / total) * 100)\n                },\n                registerWidgetsTime: {\n                    ms: timeToRegisterWidgets,\n                    percentage: Math.round((timeToRegisterWidgets / total) * 100)\n                },\n                waitToDomLoaded: {\n                    ms: waitToDomLoaded,\n                    percentage: waitToDomLoaded > 0 ? Math.round((waitToDomLoaded / total) * 100) : 0\n                },\n                initWidgetsTime: {\n                    ms: timeInitWidgets,\n                    percentage: Math.round((timeInitWidgets / total) * 100)\n                },\n                total: {\n                    ms: total,\n                    percentage: Math.round(100)\n                }\n            });\n            if (timeToRegisterWidgets > 50) {\n                log.warn('High time of widgets registration');\n            }\n            if (timeInitWidgets > 50) {\n                log.warn('High time of widgets initialization');\n            }\n            widgetsInitMetric.total = Object.values(widgetsInitMetric).reduce((a, b) => a + b, 0);\n            log.groupCollapsed('Widgets initialization time (init method)');\n            log.table(widgetsInitMetric);\n            log.groupEnd();\n            // log.profileEnd('Initialization widgets');\n        }\n\n        // CLARIFY: What is magic timeout for 500 ms?\n        setTimeout(() => { initialized = true; }, 500);\n    }\n\n    /**\n     * @description mutations handler for MutationObserver\n     * @param {MutationRecord} mutation record of MutationObserver\n     * @returns {void}\n     */\n    handleMutations(mutation) {\n        const { addedNodes, removedNodes } = mutation;\n        removedNodes.forEach(removedNode => {\n            if (removedNode.nodeType === removedNode.ELEMENT_NODE) {\n                detachElement(/** @type {HTMLElement} */(removedNode));\n            }\n        });\n        addedNodes.forEach(addedNode => {\n            if (addedNode.nodeType === addedNode.ELEMENT_NODE && document.body.contains(addedNode)) {\n                attachElements(/** @type {HTMLElement} */(addedNode));\n            }\n        });\n    }\n}\nconst widgetsMgr = new WidgetMgr();\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\nvar rdashAlpha = /-([a-z])/g;\n\n/**\n * @description handler for Widget.onRefresh() lifecycle hook\n * @param {HTMLElement} el element for processin attributes\n * @param {Diff} diff diffDom internal object of changes\n * @returns {void}\n */\nfunction handleWidgetPropertyChange(el, diff) {\n    const widget = el[WIDGET_PROP_NAME];\n    if (widget) {\n        if (diff.name === DATA_INITIALIZED) {\n            if (!widget.isRefreshingWidget) {\n                widget.isRefreshingWidget = true;\n                widget.onRefresh();\n                widget.isRefreshingWidget = false;\n            }\n            el.setAttribute(DATA_INITIALIZED, '1');\n        } else {\n            widget.config = getWidgetConfig(el);\n        }\n    }\n}\n\n/**\n * @description Convert dashed to camelCase; used by the css and data modules\n * @param {string} string String to convert\n * @returns {string} Converted string\n */\nfunction camelCase(string) {\n    return string.replace(rmsPrefix, 'ms-').replace(rdashAlpha, (_all, letter) => letter.toUpperCase());\n}\n\n/**\n * @description Create callback that will attach DOM events to element through `attachEventToWidget` using data-event- attributes\n * @param {HTMLElement} el DOM element\n * @param {Widget} widgetInstance Widget instance\n * @returns {(attr: string) => void} callback\n */\nfunction attachEventToElement(el, widgetInstance) {\n    return attr => {\n        const [attrName, ...modifiers] = attr.replace(WIDGET_DOM_EVENT_PREFIX, '').split('.');\n        const attrValue = el.getAttribute(attr) || '@';\n\n        if (!PRODUCTION && modifiers.length && ALL_VIEW_TYPES.every(m => modifiers.includes(m))) {\n            log.error(\n                `you shouldn't use ${WIDGET_DOM_EVENT_PREFIX}eventName.${ALL_VIEW_TYPES.join('.')} use it without modifiers`\n            );\n        }\n\n        if (isViewtypeModifiers(modifiers) && !modifiers.includes(getActiveViewtypeName())) {\n            return;\n        }\n\n        // @ts-ignore\n        if (typeof widgetInstance[attrValue] === 'function') {\n            attachEventToWidget(modifiers, widgetInstance, attrName, attrValue, el);\n        } else {\n            log.error('Widget \"' + widgetInstance.constructor.name\n                + '\" don\\'t have method \"' + attrValue\n                + '\". Unable to assign event', { el });\n        }\n    };\n}\n\n/**\n * @description Create callback that will attach global events to element through `attachGlobalEventToWidget` using data-global-event- attributes\n * @param {HTMLElement} el DOM element\n * @param {Widget} widgetInstance Widget instance\n * @returns {(attr: string) => void} callback\n */\nfunction attachGlobalEventToElement(el, widgetInstance) {\n    return attr => {\n        const [attrName, ...modifiers] = attr.replace(WIDGET_DOM_GLOBAL_EVENT_PREFIX, '').split('.');\n        const attrValue = el.getAttribute(attr) || '@';\n\n        if (!PRODUCTION && modifiers.length && ALL_VIEW_TYPES.every(m => modifiers.includes(m))) {\n            log.error(\n                `you shouldnt use ${WIDGET_DOM_GLOBAL_EVENT_PREFIX}eventName.${ALL_VIEW_TYPES.join('.')} use it without modifiers`\n            );\n        }\n\n        if (isViewtypeModifiers(modifiers) && !modifiers.includes(getActiveViewtypeName())) {\n            return;\n        }\n\n        attachGlobalEventToWidget(modifiers, widgetInstance, attrName, attrValue, el);\n    };\n}\n\n/**\n * @description Attach DOM events to widget instance specified in data-event- attributes\n * @param {string[]} modifiers Event modifiers\n * @param {Widget} widgetInstance Widget for event assignment\n * @param {string} eventName DOM event\n * @param {string} methodToCall widget method to call\n * @param {HTMLElement} el Widget self element to store disposables\n */\nfunction attachEventToWidget(modifiers, widgetInstance, eventName, methodToCall, el) {\n    var disposableValues = el[WIDGET_DISPOSABLE_VALUES] || [];\n\n    const prevent = modifiers.includes('prevent');\n    const stop = modifiers.includes('stop');\n    const once = modifiers.includes('once');\n    const self = modifiers.includes('self');\n\n    disposableValues = disposableValues.filter((disposable) => {\n        // If such event already exist need to remove it before attaching new event\n        // @ts-ignore\n        if (disposable.eventName === eventName && disposable.methodToCall === methodToCall && disposable.el === el) {\n            disposable();\n            return false;\n        }\n        return true;\n    });\n\n    // @ts-ignore\n    const disposables = widgetInstance.ev(eventName, function eventHandler(element, event) {\n        if (prevent) {\n            event.preventDefault();\n        }\n        if (stop) {\n            event.stopPropagation();\n        }\n        if (once && disposables) {\n            disposables.forEach(diposable => diposable());\n        }\n        if (event.currentTarget !== event.target && self) {\n            return;\n        }\n        const target = Object.values(widgetInstance.refs || {})\n            .find((refEl) => Boolean(refEl && refEl instanceof RefElement && refEl.get() === element))\n            || new RefElement([element]);\n\n        // @ts-ignore\n        widgetInstance[methodToCall].call(this, target, event);\n    }, el, modifiers.includes('passive')).map((disposable) => {\n        // @ts-ignore\n        disposable.methodToCall = methodToCall;\n        // @ts-ignore\n        disposable.el = el;\n        return disposable;\n    });\n\n    // register events to remove once removed from DOM\n    disposableValues.push(...disposables);\n    el[WIDGET_DISPOSABLE_VALUES] = disposableValues;\n}\n\n/**\n * @description Attach global events to widget instance specified in data-global-event- attributes\n * @param {string[]} modifiers Event modifiers\n * @param {Widget} widgetInstance Widget for event assignment\n * @param {string} eventName DOM event\n * @param {string} eventToCall gtm event to emit\n * @param {HTMLElement} el Widget self element to store disposables\n */\nfunction attachGlobalEventToWidget(modifiers, widgetInstance, eventName, eventToCall, el) {\n    const prevent = modifiers.includes('prevent');\n    const stop = modifiers.includes('stop');\n    const self = modifiers.includes('self');\n\n    // @ts-ignore\n    widgetInstance.ev(eventName, function eventHandler(element, event) {\n        if (prevent) {\n            event.preventDefault();\n        }\n        if (stop) {\n            event.stopPropagation();\n        }\n\n        if (event.currentTarget !== event.target && self) {\n            return;\n        }\n\n        eventBus.emit(eventToCall, widgetInstance);\n    }, el, false);\n}\n\nconst noop = () => undefined;\nconst getConstructor = (name) => widgetsMgr.get(name);\n\n/**\n * @description Create widget instance, assign it to parent, assign widget events\n * @param {HTMLElement} domNode element of widget\n * @returns {InstanceType <typeof Widget>} Instance of initialized widget\n */\nfunction initWidget(domNode) {\n    /**\n     * @type Widget\n     */\n    var currentWidget;\n    const registeredWidgets = widgetsMgr.getAll();\n\n    var instance = /** @type {Widget | undefined} */(domNode[WIDGET_PROP_NAME]);\n\n    var widgetName = domNode.getAttribute(DATA_WIDGET) || getViewtypeRelatedWidgetName(domNode);\n\n    if (!widgetName) {\n        throw Error('Empty Widget name');\n    }\n\n    if (instance && instance.refs && instance.refs.self) {\n        currentWidget = instance;\n    } else if (registeredWidgets[widgetName]) {\n        currentWidget = new (widgetsMgr.get(widgetName))(domNode, getWidgetConfig(domNode));\n    } else {\n        // CLARIFY: It is bad idea because wrong naming broke entire JS on page\n        throw Error(`Widget \"${widgetName}\" is not found in registry`);\n    }\n\n    domNode[WIDGET_PROP_NAME] = currentWidget;\n\n    if (!instance) {\n        const parentWidget = findParentWidget(domNode);\n        if (parentWidget.items) {\n            linkCurrentToParent(parentWidget, currentWidget);\n        }\n        if (currentWidget.refs && rootWidget.refs) {\n            currentWidget.refs.html = rootWidget.refs.self;\n        }\n\n        currentWidget.parentHandler = noop;\n        currentWidget.getConstructor = getConstructor;\n        prepareWidgetAttributes(domNode, currentWidget, parentWidget);\n        // currentWidget.parentHandler = parentWidget.eventHandler.bind(parentWidget);\n        return currentWidget;\n    }\n\n    return instance;\n}\n\n/**\n * @description assign current widget into parent for parent->child structure\n * @param {Widget} parentWidget parent widget instance\n * @param {Widget} currentWidget current widget instance\n * @returns {void}\n */\nfunction linkCurrentToParent(parentWidget, currentWidget) {\n    if (parentWidget && currentWidget) {\n        if (parentWidget.items) {\n            parentWidget.items.push(currentWidget);\n            currentWidget.onDestroy(() => {\n                if (parentWidget.items) {\n                    var idx = parentWidget.items.indexOf(currentWidget);\n                    if (idx > -1) {\n                        parentWidget.items.splice(idx, 1);\n                    }\n                }\n            });\n        }\n    }\n}\n\n/**\n * @description assign widget events to parent handlers\n * @param {HTMLElement} domNode HTML Element of widget\n * @param {InstanceType <typeof Widget>} currentWidget current widget instance\n * @param {InstanceType <typeof Widget>} parentWidget parent widget instance\n * @returns {void}\n */\nfunction prepareWidgetAttributes(domNode, currentWidget, parentWidget) {\n    const forwareToParent = domNode.getAttribute('data-forward-to-parent');\n\n    if (forwareToParent) {\n        forwareToParent.split(':').forEach(pair => {\n            const [methodName, parrentWidgetMethodName] = pair.split('-');\n\n            currentWidget[methodName] = (...args) => {\n                parentWidget[parrentWidgetMethodName || methodName].call(parentWidget, ...args);\n            };\n        });\n    }\n\n    const attrs = domNode.getAttributeNames().filter(name => name.startsWith(WIDGET_EVENT_PREFIX));\n\n    if (attrs && attrs.length) {\n        attrs.forEach(attr => {\n            const [attrName, ...modifiers] = attr.replace(WIDGET_EVENT_PREFIX, '').split('.');\n\n            if (isViewtypeModifiers(modifiers) && !modifiers.includes(getActiveViewtypeName())) {\n                return;\n            }\n\n            const attrValue = domNode.getAttribute(attr);\n            const prevHandler = currentWidget.parentHandler;\n            // @ts-ignore\n            if (typeof parentWidget[attrValue] === 'function') {\n                currentWidget.parentHandler = (name, ...args) => {\n                    prevHandler(name, ...args);\n                    // @ts-ignore\n                    if (name === attrName && typeof parentWidget[attrValue] === 'function') {\n                        // @ts-ignore\n                        parentWidget[attrValue].call(parentWidget, ...args);\n                    }\n                };\n            } else {\n                log.error(`Widget \"${parentWidget.constructor.name}\" don't have method \"${attrValue}\"`);\n            }\n        });\n    }\n}\n\n/**\n * @description Recursive widgets creation and events assignment for HTML Element\n * @param {HTMLElement} element top element as entry point to start recursion\n * @returns {void}\n */\nfunction attachElements(element) {\n    /**\n     * @type {Widget|undefined}\n     */\n    var widgetInstance;\n\n    if (isWidget(element) && !element[WIDGET_PROP_NAME]) {\n        widgetInstance = initWidget(element);\n    }\n\n    const ref = element.getAttribute(DATA_REF);\n    let parentWidget;\n\n    if (ref) {\n        parentWidget = element[WIDGET_PROP_NAME] || findParentWidget(element);\n\n        if (parentWidget.refs) {\n            const refEl = new RefElement([element]);\n            parentWidget.refs[ref] = refEl;\n            // here we will listen for the event of removal parent widget\n            disposableForParent(element, parentWidget, refEl, ref);\n        }\n    }\n\n    parentWidget = parentWidget || element[WIDGET_PROP_NAME] || findParentWidget(element);\n\n    const attrs = element.getAttributeNames().filter(name => name.startsWith(WIDGET_DOM_EVENT_PREFIX));\n\n    if (attrs.length) {\n        attrs.forEach(attachEventToElement(element, parentWidget));\n    }\n\n    const globalAttrs = element.getAttributeNames().filter(name => name.startsWith(WIDGET_DOM_GLOBAL_EVENT_PREFIX));\n\n    if (globalAttrs.length) {\n        globalAttrs.forEach(attachGlobalEventToElement(element, parentWidget));\n    }\n\n    var child = element.firstElementChild;\n\n    while (child) {\n        attachElements(/** @type {HTMLElement} */(child));\n        child = child.nextElementSibling;\n    }\n\n    if (widgetInstance) {\n        const startTime = Date.now();\n        widgetInstance.init();\n        element.setAttribute(DATA_INITIALIZED, '1');\n\n        if (!PRODUCTION) {\n            var widgetName = element.getAttribute(DATA_WIDGET) || getViewtypeRelatedWidgetName(element);\n            if (widgetName && startTime) {\n                widgetsInitMetric[widgetName] = (widgetsInitMetric[widgetName] || 0) + (Date.now() - startTime);\n            }\n        }\n    }\n}\n\n/**\n * @description Listener for the event of removal parent widget\n * @param {HTMLElement} element Element to listen\n * @param {Widget} parentWidget Parent widget\n * @param {RefElement} refEl linked ref element\n * @param {string} ref RefElement id\n */\nfunction disposableForParent(element, parentWidget, refEl, ref) {\n    if (!element[WIDGET_DISPOSABLE_VALUES]) {\n        element[WIDGET_DISPOSABLE_VALUES] = [];\n    }\n    const disposableValues = element[WIDGET_DISPOSABLE_VALUES];\n    if (disposableValues) {\n        const dispose = () => {\n            // remove reference if element is removed from DOM ref points to the same element\n            if (parentWidget && parentWidget.refs && refEl === parentWidget.refs[ref]) {\n                delete parentWidget.refs[ref];\n            }\n        };\n        // @ts-ignore\n        dispose.attrName = 'ref';\n        disposableValues.push(dispose);\n    }\n}\n\n/**\n * @description find parent widget by HTML Element\n * @param {HTMLElement} el entry point for searching\n * @returns {Widget} parent widget\n */\nfunction findParentWidget(el) {\n    /**\n     * @type {HTMLElement | null}\n     */\n    var parent = el.parentElement;\n\n    while (parent) {\n        const widgetName = parent.getAttribute(DATA_WIDGET) || getViewtypeRelatedWidgetName(parent);\n\n        if (widgetName) {\n            break;\n        } else {\n            parent = parent.parentElement;\n        }\n    }\n    return (parent && parent[WIDGET_PROP_NAME]) || rootWidget;\n}\n\n/**\n * @description Destroy widgets, run disposibles for element and elements inside\n * @param {HTMLElement} el top element for recursive procession\n * @returns {void}\n */\nfunction detachElement(el) {\n    const disposableValues = el[WIDGET_DISPOSABLE_VALUES];\n    if (disposableValues) {\n        disposableValues.forEach((dispose) => dispose());\n        el[WIDGET_DISPOSABLE_VALUES] = undefined;\n    }\n    var currentWidget = el[WIDGET_PROP_NAME];\n    if (currentWidget) {\n        // @ts-ignore\n        currentWidget.destroy();\n        el[WIDGET_PROP_NAME] = undefined;\n\n        if (!PRODUCTION && !initialized) {\n            log.warn('Destroying widget before initialization is complete or right after init complete', el);\n        }\n    }\n    var child = el.firstElementChild;\n\n    while (child) {\n        // @ts-ignore\n        detachElement(child);\n        child = child.nextElementSibling;\n    }\n}\n\n/**\n * @description tool for visualization widgets and put widget object into console by click. just call it in your console and look\n * @returns {Promise<void>}\n */\n// @ts-ignore\nwindow.initToolkit = () => import(/* webpackChunkName: 'toolkit' */'widgets/widgetsToolkit')\n    .then(widgetsToolkit => widgetsToolkit.initToolkit(widgetsMgr));\n\nexport default widgetsMgr;\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/product/ProductDetail').default>} ProductDetail\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Label').default>>} label\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Button').default>>} button\n */\n\n/**\n * @param {ProductDetail} ProductDetail Base widget for extending\n * @returns {typeof AddToWishlistMixin} Add to Wishlist Mixin class\n */\nexport default function (ProductDetail) {\n    /**\n     * @category widgets\n     * @subcategory wishlist\n     * @class AddToWishlistMixin\n     * @augments ProductDetail\n     * @classdesc Add to wishlist mixin with next features:\n     * 1. Represents `Add to wishlist` button together with related functionality\n     * <br>*As far as it's a mixin, separate DOM widget is not needed.*\n     * 2. Allows to add products to wishlist from PDP, QuickView\n     * 3. Communicates to user operation results in both cases: error and success\n     *\n     * Widget has next relationship:\n     * * Listens click on `add button` that instance of {@link Button} to handle addition to wish list.\n     * <br>Also uses component methods to change button text, activate/deactivate button\n     * * Uses methods of `add message` that instance of {@link Label} to set/hide/show messsage\n     * @property {string} data-pid - product id\n     * @property {string} [data-text-network-error=Network Error] - Network error message\n     * @property {string} [data-add-to-wishlist-msg=addToWishlistMsg] - ID of {@link Label} component that represents `add msg`\n     * @property {string} [data-add-to-wishlist-btn=addToWishlist] -  ID of {@link Button} component that represents `add button`\n     * @property {string} data-text-added-to-wishlist - Added to wishlist message\n     * @property {boolean} [add-to-wishlist-hide-texts=false] - Added to wishlist message\n     * @property {string} data-original-wishlist-button-message - original message for `add to wishlist` button\n     * @property {boolean} data-show-alert-if-product-in-wishlist - Indicates, if we need to show active icon for wishlist button,\n     * in case if request returns, that iteam already in wishlist\n     * @property {string} [data-class-added-to-wishlist] - Added to wishlist class\n     */\n    class AddToWishlistMixin extends ProductDetail {\n        prefs() {\n            return {\n                pid: '',\n                textNetworkError: 'Network Error',\n                addToWishlistMsg: 'addToWishlistMsg',\n                addToWishlistBtn: 'addToWishlist',\n                textAddedToWishlist: '',\n                addToWishlistHideTexts: false,\n                originalWishlistButtonMessage: '',\n                showAlertIfProductInWishlist: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize properties\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.pid = this.prefs().pid;\n            this.selectedQuantity = this.prefs().selectedQuantity;\n            this.addToWishlistHideTexts = this.prefs().addToWishlistHideTexts;\n        }\n\n        /**\n         * @description Update Product View\n         * @param {object} product - Product Object\n         * @returns {void}\n         */\n        updateProductView(product) {\n            super.updateProductView(product);\n            this.renderWishList(product);\n        }\n\n        /**\n         * @description Show error/success message\n         * @param {string} msg - Message string\n         * @param {boolean} [error=false] Error flag\n         * @returns {void}\n         */\n        showWishlistMessage(msg, error = false) {\n            const addToWishlistMsg = this.getById(\n                this.prefs().addToWishlistMsg, (/** @type {label} */ labelAddToWishlistMsg) => labelAddToWishlistMsg\n            );\n            if (!addToWishlistMsg) {\n                return;\n            }\n\n            if (error) {\n                addToWishlistMsg.setError(msg).show();\n                addToWishlistMsg.deactivate();\n            } else {\n                addToWishlistMsg.setText(msg).show();\n                addToWishlistMsg.activate();\n            }\n        }\n\n        /**\n         * @description Hide wishlist error/success messaging. Usualy used when PDP variation updated.\n         * @returns {void}\n         */\n        hideWishlistMessage() {\n            this.getById(\n                this.prefs().addToWishlistMsg,\n                (/** @type {label} */ labelAddToWishlistMsg) => {\n                    labelAddToWishlistMsg.setText('').hide().deactivate();\n                }\n            );\n        }\n\n        /**\n         * @description Show error/success message\n         * @param {button} addButton - Message string\n         * @listens dom#click\n         * @returns {void}\n         */\n        addToWishlist(addButton) {\n            const addToWishlistUrl = addButton.ref('self').data('addToWishlistUrl');\n\n            addButton.busy();\n\n            this.getById(\n                this.prefs().addToWishlistMsg,\n                (/** @type {label} */ labelAddToWishlistMsg) => labelAddToWishlistMsg.hide()\n            );\n\n            submitFormJson(addToWishlistUrl, {\n                pid: this.pid || '',\n                qty: this.selectedQuantity || ''\n            }).then(response => this.handleSuccess(response)).finally(() => {\n                addButton.unbusy();\n            }).catch(() => {\n                this.showWishlistMessage(this.prefs().textNetworkError, true);\n            });\n        }\n\n        /**\n         * @description Handle success response\n         * @param {object} response - Response object\n         * @returns {void}\n         */\n        handleSuccess(response) {\n            const addToWishlistBtn = this.getById(\n                this.prefs().addToWishlistBtn,\n                (/** @type {button} */ element) => element\n            );\n\n            if (!addToWishlistBtn) {\n                return;\n            }\n\n            if (response.success) {\n                addToWishlistBtn\n                    .activate()\n                    .press()\n                    .disable(); // we do not have remove from WL functionality\n\n                if (!this.addToWishlistHideTexts) {\n                    addToWishlistBtn.setText(this.prefs().textAddedToWishlist);\n                }\n\n                const accessibilityAlert = this.prefs().accessibilityAlerts.addedtowishlist;\n                // TODO add event description\n                this.eventBus().emit('alert.show', {\n                    accessibilityAlert\n                });\n            } else if (response.itemAlreadyExists) {\n                addToWishlistBtn\n                    .activate()\n                    .press()\n                    .disable();\n\n                if (this.prefs().showAlertIfProductInWishlist) {\n                    // TODO add event description\n                    this.eventBus().emit('alert.show', {\n                        accessibilityAlert: response.msg\n                    });\n                }\n            }\n\n            if (!this.addToWishlistHideTexts) {\n                this.showWishlistMessage(response.msg, response.error);\n            }\n        }\n\n        /**\n         * @description Method to revert initial state for `Add to Wishlist` button and messages\n         * Usually used when re-rendering PDP/QuickView after variation change\n         * @param {object} product - Product object\n         * @returns {void}\n         */\n        renderWishList(product) {\n            this.pid = product.id;\n\n            this.getById(\n                this.prefs().addToWishlistBtn,\n                (/** @type {button} */ buttonAddToWishlistBtn) => {\n                    buttonAddToWishlistBtn.deactivate().unpress().enable().setText(this.prefs().originalWishlistButtonMessage);\n                }\n            );\n\n            if (!this.addToWishlistHideTexts) {\n                this.hideWishlistMessage();\n            }\n        }\n    }\n\n    return AddToWishlistMixin;\n}\n","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *\t http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nimport { isUsernamePasswordOpts, isCognitoHostedOpts, isFederatedSignInOptions, isFederatedSignInOptionsCustom, hasCustomState, } from './types';\nimport { Amplify, ConsoleLogger as Logger, Credentials, Hub, StorageHelper, Parser, JS, UniversalStorage, } from '@aws-amplify/core';\nimport { CookieStorage, CognitoUserPool, AuthenticationDetails, CognitoUser, CognitoUserSession, CognitoUserAttribute, CognitoIdToken, CognitoRefreshToken, CognitoAccessToken, } from 'amazon-cognito-identity-js';\nimport { parse } from 'url';\nimport OAuth from './OAuth/OAuth';\nimport { default as urlListener } from './urlListener';\nimport { AuthError, NoUserPoolError } from './Errors';\nimport { AuthErrorTypes, CognitoHostedUIIdentityProvider } from './types/Auth';\nvar logger = new Logger('AuthClass');\nvar USER_ADMIN_SCOPE = 'aws.cognito.signin.user.admin';\n// 10 sec, following this guide https://www.nngroup.com/articles/response-times-3-important-limits/\nvar OAUTH_FLOW_MS_TIMEOUT = 10 * 1000;\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n    typeof Symbol.for === 'function'\n    ? Symbol.for('amplify_default')\n    : '@@amplify_default');\nvar dispatchAuthEvent = function (event, data, message) {\n    Hub.dispatch('auth', { event: event, data: data, message: message }, 'Auth', AMPLIFY_SYMBOL);\n};\n/**\n * Provide authentication steps\n */\nvar AuthClass = /** @class */ (function () {\n    /**\n     * Initialize Auth with AWS configurations\n     * @param {Object} config - Configuration of the Auth\n     */\n    function AuthClass(config) {\n        var _this = this;\n        this.userPool = null;\n        this.user = null;\n        this.oAuthFlowInProgress = false;\n        this.Credentials = Credentials;\n        this.configure(config);\n        this.currentUserCredentials = this.currentUserCredentials.bind(this);\n        Hub.listen('auth', function (_a) {\n            var payload = _a.payload;\n            var event = payload.event;\n            switch (event) {\n                case 'signIn':\n                    _this._storage.setItem('amplify-signin-with-hostedUI', 'false');\n                    break;\n                case 'signOut':\n                    _this._storage.removeItem('amplify-signin-with-hostedUI');\n                    break;\n                case 'cognitoHostedUI':\n                    _this._storage.setItem('amplify-signin-with-hostedUI', 'true');\n                    break;\n            }\n        });\n    }\n    AuthClass.prototype.getModuleName = function () {\n        return 'Auth';\n    };\n    AuthClass.prototype.configure = function (config) {\n        var _this = this;\n        if (!config)\n            return this._config || {};\n        logger.debug('configure Auth');\n        var conf = Object.assign({}, this._config, Parser.parseMobilehubConfig(config).Auth, config);\n        this._config = conf;\n        var _a = this._config, userPoolId = _a.userPoolId, userPoolWebClientId = _a.userPoolWebClientId, cookieStorage = _a.cookieStorage, oauth = _a.oauth, region = _a.region, identityPoolId = _a.identityPoolId, mandatorySignIn = _a.mandatorySignIn, refreshHandlers = _a.refreshHandlers, identityPoolRegion = _a.identityPoolRegion, clientMetadata = _a.clientMetadata;\n        if (!this._config.storage) {\n            // backward compatability\n            if (cookieStorage)\n                this._storage = new CookieStorage(cookieStorage);\n            else {\n                this._storage = config.ssr\n                    ? new UniversalStorage()\n                    : new StorageHelper().getStorage();\n            }\n        }\n        else {\n            if (!this._isValidAuthStorage(this._config.storage)) {\n                logger.error('The storage in the Auth config is not valid!');\n                throw new Error('Empty storage object');\n            }\n            this._storage = this._config.storage;\n        }\n        this._storageSync = Promise.resolve();\n        if (typeof this._storage['sync'] === 'function') {\n            this._storageSync = this._storage['sync']();\n        }\n        if (userPoolId) {\n            var userPoolData = {\n                UserPoolId: userPoolId,\n                ClientId: userPoolWebClientId,\n            };\n            userPoolData.Storage = this._storage;\n            this.userPool = new CognitoUserPool(userPoolData);\n        }\n        this.Credentials.configure({\n            mandatorySignIn: mandatorySignIn,\n            region: identityPoolRegion || region,\n            userPoolId: userPoolId,\n            identityPoolId: identityPoolId,\n            refreshHandlers: refreshHandlers,\n            storage: this._storage,\n        });\n        // initiailize cognitoauth client if hosted ui options provided\n        // to keep backward compatibility:\n        var cognitoHostedUIConfig = oauth\n            ? isCognitoHostedOpts(this._config.oauth)\n                ? oauth\n                : oauth.awsCognito\n            : undefined;\n        if (cognitoHostedUIConfig) {\n            var cognitoAuthParams = Object.assign({\n                cognitoClientId: userPoolWebClientId,\n                UserPoolId: userPoolId,\n                domain: cognitoHostedUIConfig['domain'],\n                scopes: cognitoHostedUIConfig['scope'],\n                redirectSignIn: cognitoHostedUIConfig['redirectSignIn'],\n                redirectSignOut: cognitoHostedUIConfig['redirectSignOut'],\n                responseType: cognitoHostedUIConfig['responseType'],\n                Storage: this._storage,\n                urlOpener: cognitoHostedUIConfig['urlOpener'],\n                clientMetadata: clientMetadata,\n            }, cognitoHostedUIConfig['options']);\n            this._oAuthHandler = new OAuth({\n                scopes: cognitoAuthParams.scopes,\n                config: cognitoAuthParams,\n                cognitoClientId: cognitoAuthParams.cognitoClientId,\n            });\n            // **NOTE** - Remove this in a future major release as it is a breaking change\n            // Prevents _handleAuthResponse from being called multiple times in Expo\n            // See https://github.com/aws-amplify/amplify-js/issues/4388\n            var usedResponseUrls_1 = {};\n            urlListener(function (_a) {\n                var url = _a.url;\n                if (usedResponseUrls_1[url]) {\n                    return;\n                }\n                usedResponseUrls_1[url] = true;\n                _this._handleAuthResponse(url);\n            });\n        }\n        dispatchAuthEvent('configured', null, \"The Auth category has been configured successfully\");\n        return this._config;\n    };\n    /**\n     * Sign up with username, password and other attributes like phone, email\n     * @param {String | object} params - The user attributes used for signin\n     * @param {String[]} restOfAttrs - for the backward compatability\n     * @return - A promise resolves callback data if success\n     */\n    AuthClass.prototype.signUp = function (params) {\n        var _this = this;\n        var restOfAttrs = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            restOfAttrs[_i - 1] = arguments[_i];\n        }\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        var username = null;\n        var password = null;\n        var attributes = [];\n        var validationData = null;\n        var clientMetadata;\n        if (params && typeof params === 'string') {\n            username = params;\n            password = restOfAttrs ? restOfAttrs[0] : null;\n            var email = restOfAttrs ? restOfAttrs[1] : null;\n            var phone_number = restOfAttrs ? restOfAttrs[2] : null;\n            if (email)\n                attributes.push({ Name: 'email', Value: email });\n            if (phone_number)\n                attributes.push({ Name: 'phone_number', Value: phone_number });\n        }\n        else if (params && typeof params === 'object') {\n            username = params['username'];\n            password = params['password'];\n            if (params && params.clientMetadata) {\n                clientMetadata = params.clientMetadata;\n            }\n            else if (this._config.clientMetadata) {\n                clientMetadata = this._config.clientMetadata;\n            }\n            var attrs_1 = params['attributes'];\n            if (attrs_1) {\n                Object.keys(attrs_1).map(function (key) {\n                    var ele = { Name: key, Value: attrs_1[key] };\n                    attributes.push(ele);\n                });\n            }\n            validationData = params['validationData'] || null;\n        }\n        else {\n            return this.rejectAuthError(AuthErrorTypes.SignUpError);\n        }\n        if (!username) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n        }\n        if (!password) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n        }\n        logger.debug('signUp attrs:', attributes);\n        logger.debug('signUp validation data:', validationData);\n        return new Promise(function (resolve, reject) {\n            _this.userPool.signUp(username, password, attributes, validationData, function (err, data) {\n                if (err) {\n                    dispatchAuthEvent('signUp_failure', err, username + \" failed to signup\");\n                    reject(err);\n                }\n                else {\n                    dispatchAuthEvent('signUp', data, username + \" has signed up successfully\");\n                    resolve(data);\n                }\n            }, clientMetadata);\n        });\n    };\n    /**\n     * Send the verfication code to confirm sign up\n     * @param {String} username - The username to be confirmed\n     * @param {String} code - The verification code\n     * @param {ConfirmSignUpOptions} options - other options for confirm signup\n     * @return - A promise resolves callback data if success\n     */\n    AuthClass.prototype.confirmSignUp = function (username, code, options) {\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        if (!username) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n        }\n        if (!code) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n        }\n        var user = this.createCognitoUser(username);\n        var forceAliasCreation = options && typeof options.forceAliasCreation === 'boolean'\n            ? options.forceAliasCreation\n            : true;\n        var clientMetadata;\n        if (options && options.clientMetadata) {\n            clientMetadata = options.clientMetadata;\n        }\n        else if (this._config.clientMetadata) {\n            clientMetadata = this._config.clientMetadata;\n        }\n        return new Promise(function (resolve, reject) {\n            user.confirmRegistration(code, forceAliasCreation, function (err, data) {\n                if (err) {\n                    reject(err);\n                }\n                else {\n                    resolve(data);\n                }\n            }, clientMetadata);\n        });\n    };\n    /**\n     * Resend the verification code\n     * @param {String} username - The username to be confirmed\n     * @param {ClientMetadata} clientMetadata - Metadata to be passed to Cognito Lambda triggers\n     * @return - A promise resolves code delivery details if successful\n     */\n    AuthClass.prototype.resendSignUp = function (username, clientMetadata) {\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        if (!username) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n        }\n        var user = this.createCognitoUser(username);\n        return new Promise(function (resolve, reject) {\n            user.resendConfirmationCode(function (err, data) {\n                if (err) {\n                    reject(err);\n                }\n                else {\n                    resolve(data);\n                }\n            }, clientMetadata);\n        });\n    };\n    /**\n     * Sign in\n     * @param {String | SignInOpts} usernameOrSignInOpts - The username to be signed in or the sign in options\n     * @param {String} password - The password of the username\n     * @return - A promise resolves the CognitoUser\n     */\n    AuthClass.prototype.signIn = function (usernameOrSignInOpts, pw, clientMetadata) {\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        var username = null;\n        var password = null;\n        var validationData = {};\n        // for backward compatibility\n        if (typeof usernameOrSignInOpts === 'string') {\n            username = usernameOrSignInOpts;\n            password = pw;\n        }\n        else if (isUsernamePasswordOpts(usernameOrSignInOpts)) {\n            if (typeof pw !== 'undefined') {\n                logger.warn('The password should be defined under the first parameter object!');\n            }\n            username = usernameOrSignInOpts.username;\n            password = usernameOrSignInOpts.password;\n            validationData = usernameOrSignInOpts.validationData;\n        }\n        else {\n            return this.rejectAuthError(AuthErrorTypes.InvalidUsername);\n        }\n        if (!username) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n        }\n        var authDetails = new AuthenticationDetails({\n            Username: username,\n            Password: password,\n            ValidationData: validationData,\n            ClientMetadata: clientMetadata,\n        });\n        if (password) {\n            return this.signInWithPassword(authDetails);\n        }\n        else {\n            return this.signInWithoutPassword(authDetails);\n        }\n    };\n    /**\n     * Return an object with the authentication callbacks\n     * @param {CognitoUser} user - the cognito user object\n     * @param {} resolve - function called when resolving the current step\n     * @param {} reject - function called when rejecting the current step\n     * @return - an object with the callback methods for user authentication\n     */\n    AuthClass.prototype.authCallbacks = function (user, resolve, reject) {\n        var _this = this;\n        var that = this;\n        return {\n            onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n                var cred, e_1, currentUser, e_2;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            logger.debug(session);\n                            delete user['challengeName'];\n                            delete user['challengeParam'];\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 4, 5, 9]);\n                            return [4 /*yield*/, this.Credentials.clear()];\n                        case 2:\n                            _a.sent();\n                            return [4 /*yield*/, this.Credentials.set(session, 'session')];\n                        case 3:\n                            cred = _a.sent();\n                            logger.debug('succeed to get cognito credentials', cred);\n                            return [3 /*break*/, 9];\n                        case 4:\n                            e_1 = _a.sent();\n                            logger.debug('cannot get cognito credentials', e_1);\n                            return [3 /*break*/, 9];\n                        case 5:\n                            _a.trys.push([5, 7, , 8]);\n                            return [4 /*yield*/, this.currentUserPoolUser()];\n                        case 6:\n                            currentUser = _a.sent();\n                            that.user = currentUser;\n                            dispatchAuthEvent('signIn', currentUser, \"A user \" + user.getUsername() + \" has been signed in\");\n                            resolve(currentUser);\n                            return [3 /*break*/, 8];\n                        case 7:\n                            e_2 = _a.sent();\n                            logger.error('Failed to get the signed in user', e_2);\n                            reject(e_2);\n                            return [3 /*break*/, 8];\n                        case 8: return [7 /*endfinally*/];\n                        case 9: return [2 /*return*/];\n                    }\n                });\n            }); },\n            onFailure: function (err) {\n                logger.debug('signIn failure', err);\n                dispatchAuthEvent('signIn_failure', err, user.getUsername() + \" failed to signin\");\n                reject(err);\n            },\n            customChallenge: function (challengeParam) {\n                logger.debug('signIn custom challenge answer required');\n                user['challengeName'] = 'CUSTOM_CHALLENGE';\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            mfaRequired: function (challengeName, challengeParam) {\n                logger.debug('signIn MFA required');\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            mfaSetup: function (challengeName, challengeParam) {\n                logger.debug('signIn mfa setup', challengeName);\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            newPasswordRequired: function (userAttributes, requiredAttributes) {\n                logger.debug('signIn new password');\n                user['challengeName'] = 'NEW_PASSWORD_REQUIRED';\n                user['challengeParam'] = {\n                    userAttributes: userAttributes,\n                    requiredAttributes: requiredAttributes,\n                };\n                resolve(user);\n            },\n            totpRequired: function (challengeName, challengeParam) {\n                logger.debug('signIn totpRequired');\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            selectMFAType: function (challengeName, challengeParam) {\n                logger.debug('signIn selectMFAType', challengeName);\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n        };\n    };\n    /**\n     * Sign in with a password\n     * @private\n     * @param {AuthenticationDetails} authDetails - the user sign in data\n     * @return - A promise resolves the CognitoUser object if success or mfa required\n     */\n    AuthClass.prototype.signInWithPassword = function (authDetails) {\n        var _this = this;\n        var user = this.createCognitoUser(authDetails.getUsername());\n        return new Promise(function (resolve, reject) {\n            user.authenticateUser(authDetails, _this.authCallbacks(user, resolve, reject));\n        });\n    };\n    /**\n     * Sign in without a password\n     * @private\n     * @param {AuthenticationDetails} authDetails - the user sign in data\n     * @return - A promise resolves the CognitoUser object if success or mfa required\n     */\n    AuthClass.prototype.signInWithoutPassword = function (authDetails) {\n        var _this = this;\n        var user = this.createCognitoUser(authDetails.getUsername());\n        user.setAuthenticationFlowType('CUSTOM_AUTH');\n        return new Promise(function (resolve, reject) {\n            user.initiateAuth(authDetails, _this.authCallbacks(user, resolve, reject));\n        });\n    };\n    /**\n     * get user current preferred mfa option\n     * this method doesn't work with totp, we need to deprecate it.\n     * @deprecated\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves the current preferred mfa option if success\n     */\n    AuthClass.prototype.getMFAOptions = function (user) {\n        return new Promise(function (res, rej) {\n            user.getMFAOptions(function (err, mfaOptions) {\n                if (err) {\n                    logger.debug('get MFA Options failed', err);\n                    rej(err);\n                    return;\n                }\n                logger.debug('get MFA options success', mfaOptions);\n                res(mfaOptions);\n                return;\n            });\n        });\n    };\n    /**\n     * get preferred mfa method\n     * @param {CognitoUser} user - the current cognito user\n     * @param {GetPreferredMFAOpts} params - options for getting the current user preferred MFA\n     */\n    AuthClass.prototype.getPreferredMFA = function (user, params) {\n        var that = this;\n        return new Promise(function (res, rej) {\n            var bypassCache = params ? params.bypassCache : false;\n            user.getUserData(function (err, data) {\n                if (err) {\n                    logger.debug('getting preferred mfa failed', err);\n                    rej(err);\n                    return;\n                }\n                var mfaType = that._getMfaTypeFromUserData(data);\n                if (!mfaType) {\n                    rej('invalid MFA Type');\n                    return;\n                }\n                else {\n                    res(mfaType);\n                    return;\n                }\n            }, { bypassCache: bypassCache });\n        });\n    };\n    AuthClass.prototype._getMfaTypeFromUserData = function (data) {\n        var ret = null;\n        var preferredMFA = data.PreferredMfaSetting;\n        // if the user has used Auth.setPreferredMFA() to setup the mfa type\n        // then the \"PreferredMfaSetting\" would exist in the response\n        if (preferredMFA) {\n            ret = preferredMFA;\n        }\n        else {\n            // if mfaList exists but empty, then its noMFA\n            var mfaList = data.UserMFASettingList;\n            if (!mfaList) {\n                // if SMS was enabled by using Auth.enableSMS(),\n                // the response would contain MFAOptions\n                // as for now Cognito only supports for SMS, so we will say it is 'SMS_MFA'\n                // if it does not exist, then it should be NOMFA\n                var MFAOptions = data.MFAOptions;\n                if (MFAOptions) {\n                    ret = 'SMS_MFA';\n                }\n                else {\n                    ret = 'NOMFA';\n                }\n            }\n            else if (mfaList.length === 0) {\n                ret = 'NOMFA';\n            }\n            else {\n                logger.debug('invalid case for getPreferredMFA', data);\n            }\n        }\n        return ret;\n    };\n    AuthClass.prototype._getUserData = function (user, params) {\n        return new Promise(function (res, rej) {\n            user.getUserData(function (err, data) {\n                if (err) {\n                    logger.debug('getting user data failed', err);\n                    rej(err);\n                    return;\n                }\n                else {\n                    res(data);\n                    return;\n                }\n            }, params);\n        });\n    };\n    /**\n     * set preferred MFA method\n     * @param {CognitoUser} user - the current Cognito user\n     * @param {string} mfaMethod - preferred mfa method\n     * @return - A promise resolve if success\n     */\n    AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {\n        return __awaiter(this, void 0, void 0, function () {\n            var userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0: return [4 /*yield*/, this._getUserData(user, {\n                            bypassCache: true,\n                        })];\n                    case 1:\n                        userData = _b.sent();\n                        smsMfaSettings = null;\n                        totpMfaSettings = null;\n                        _a = mfaMethod;\n                        switch (_a) {\n                            case 'TOTP' || 'SOFTWARE_TOKEN_MFA': return [3 /*break*/, 2];\n                            case 'SMS' || 'SMS_MFA': return [3 /*break*/, 3];\n                            case 'NOMFA': return [3 /*break*/, 4];\n                        }\n                        return [3 /*break*/, 6];\n                    case 2:\n                        totpMfaSettings = {\n                            PreferredMfa: true,\n                            Enabled: true,\n                        };\n                        return [3 /*break*/, 7];\n                    case 3:\n                        smsMfaSettings = {\n                            PreferredMfa: true,\n                            Enabled: true,\n                        };\n                        return [3 /*break*/, 7];\n                    case 4:\n                        mfaList = userData['UserMFASettingList'];\n                        return [4 /*yield*/, this._getMfaTypeFromUserData(userData)];\n                    case 5:\n                        currentMFAType = _b.sent();\n                        if (currentMFAType === 'NOMFA') {\n                            return [2 /*return*/, Promise.resolve('No change for mfa type')];\n                        }\n                        else if (currentMFAType === 'SMS_MFA') {\n                            smsMfaSettings = {\n                                PreferredMfa: false,\n                                Enabled: false,\n                            };\n                        }\n                        else if (currentMFAType === 'SOFTWARE_TOKEN_MFA') {\n                            totpMfaSettings = {\n                                PreferredMfa: false,\n                                Enabled: false,\n                            };\n                        }\n                        else {\n                            return [2 /*return*/, this.rejectAuthError(AuthErrorTypes.InvalidMFA)];\n                        }\n                        // if there is a UserMFASettingList in the response\n                        // we need to disable every mfa type in that list\n                        if (mfaList && mfaList.length !== 0) {\n                            // to disable SMS or TOTP if exists in that list\n                            mfaList.forEach(function (mfaType) {\n                                if (mfaType === 'SMS_MFA') {\n                                    smsMfaSettings = {\n                                        PreferredMfa: false,\n                                        Enabled: false,\n                                    };\n                                }\n                                else if (mfaType === 'SOFTWARE_TOKEN_MFA') {\n                                    totpMfaSettings = {\n                                        PreferredMfa: false,\n                                        Enabled: false,\n                                    };\n                                }\n                            });\n                        }\n                        return [3 /*break*/, 7];\n                    case 6:\n                        logger.debug('no validmfa method provided');\n                        return [2 /*return*/, this.rejectAuthError(AuthErrorTypes.NoMFA)];\n                    case 7:\n                        that = this;\n                        return [2 /*return*/, new Promise(function (res, rej) {\n                                user.setUserMfaPreference(smsMfaSettings, totpMfaSettings, function (err, result) {\n                                    if (err) {\n                                        logger.debug('Set user mfa preference error', err);\n                                        return rej(err);\n                                    }\n                                    logger.debug('Set user mfa success', result);\n                                    logger.debug('Caching the latest user data into local');\n                                    // cache the latest result into user data\n                                    user.getUserData(function (err, data) {\n                                        if (err) {\n                                            logger.debug('getting user data failed', err);\n                                            return rej(err);\n                                        }\n                                        else {\n                                            return res(result);\n                                        }\n                                    }, { bypassCache: true });\n                                });\n                            })];\n                }\n            });\n        });\n    };\n    /**\n     * diable SMS\n     * @deprecated\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves is success\n     */\n    AuthClass.prototype.disableSMS = function (user) {\n        return new Promise(function (res, rej) {\n            user.disableMFA(function (err, data) {\n                if (err) {\n                    logger.debug('disable mfa failed', err);\n                    rej(err);\n                    return;\n                }\n                logger.debug('disable mfa succeed', data);\n                res(data);\n                return;\n            });\n        });\n    };\n    /**\n     * enable SMS\n     * @deprecated\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves is success\n     */\n    AuthClass.prototype.enableSMS = function (user) {\n        return new Promise(function (res, rej) {\n            user.enableMFA(function (err, data) {\n                if (err) {\n                    logger.debug('enable mfa failed', err);\n                    rej(err);\n                    return;\n                }\n                logger.debug('enable mfa succeed', data);\n                res(data);\n                return;\n            });\n        });\n    };\n    /**\n     * Setup TOTP\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves with the secret code if success\n     */\n    AuthClass.prototype.setupTOTP = function (user) {\n        return new Promise(function (res, rej) {\n            user.associateSoftwareToken({\n                onFailure: function (err) {\n                    logger.debug('associateSoftwareToken failed', err);\n                    rej(err);\n                    return;\n                },\n                associateSecretCode: function (secretCode) {\n                    logger.debug('associateSoftwareToken sucess', secretCode);\n                    res(secretCode);\n                    return;\n                },\n            });\n        });\n    };\n    /**\n     * verify TOTP setup\n     * @param {CognitoUser} user - the current user\n     * @param {string} challengeAnswer - challenge answer\n     * @return - A promise resolves is success\n     */\n    AuthClass.prototype.verifyTotpToken = function (user, challengeAnswer) {\n        logger.debug('verfication totp token', user, challengeAnswer);\n        return new Promise(function (res, rej) {\n            user.verifySoftwareToken(challengeAnswer, 'My TOTP device', {\n                onFailure: function (err) {\n                    logger.debug('verifyTotpToken failed', err);\n                    rej(err);\n                    return;\n                },\n                onSuccess: function (data) {\n                    logger.debug('verifyTotpToken success', data);\n                    res(data);\n                    return;\n                },\n            });\n        });\n    };\n    /**\n     * Send MFA code to confirm sign in\n     * @param {Object} user - The CognitoUser object\n     * @param {String} code - The confirmation code\n     */\n    AuthClass.prototype.confirmSignIn = function (user, code, mfaType, clientMetadata) {\n        var _this = this;\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        if (!code) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n        }\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            user.sendMFACode(code, {\n                onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n                    var cred, e_3;\n                    return __generator(this, function (_a) {\n                        switch (_a.label) {\n                            case 0:\n                                logger.debug(session);\n                                _a.label = 1;\n                            case 1:\n                                _a.trys.push([1, 4, 5, 6]);\n                                return [4 /*yield*/, this.Credentials.clear()];\n                            case 2:\n                                _a.sent();\n                                return [4 /*yield*/, this.Credentials.set(session, 'session')];\n                            case 3:\n                                cred = _a.sent();\n                                logger.debug('succeed to get cognito credentials', cred);\n                                return [3 /*break*/, 6];\n                            case 4:\n                                e_3 = _a.sent();\n                                logger.debug('cannot get cognito credentials', e_3);\n                                return [3 /*break*/, 6];\n                            case 5:\n                                that.user = user;\n                                dispatchAuthEvent('signIn', user, user + \" has signed in\");\n                                resolve(user);\n                                return [7 /*endfinally*/];\n                            case 6: return [2 /*return*/];\n                        }\n                    });\n                }); },\n                onFailure: function (err) {\n                    logger.debug('confirm signIn failure', err);\n                    reject(err);\n                },\n            }, mfaType, clientMetadata);\n        });\n    };\n    AuthClass.prototype.completeNewPassword = function (user, password, requiredAttributes, clientMetadata) {\n        var _this = this;\n        if (requiredAttributes === void 0) { requiredAttributes = {}; }\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        if (!password) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n        }\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            user.completeNewPasswordChallenge(password, requiredAttributes, {\n                onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n                    var cred, e_4;\n                    return __generator(this, function (_a) {\n                        switch (_a.label) {\n                            case 0:\n                                logger.debug(session);\n                                _a.label = 1;\n                            case 1:\n                                _a.trys.push([1, 4, 5, 6]);\n                                return [4 /*yield*/, this.Credentials.clear()];\n                            case 2:\n                                _a.sent();\n                                return [4 /*yield*/, this.Credentials.set(session, 'session')];\n                            case 3:\n                                cred = _a.sent();\n                                logger.debug('succeed to get cognito credentials', cred);\n                                return [3 /*break*/, 6];\n                            case 4:\n                                e_4 = _a.sent();\n                                logger.debug('cannot get cognito credentials', e_4);\n                                return [3 /*break*/, 6];\n                            case 5:\n                                that.user = user;\n                                dispatchAuthEvent('signIn', user, user + \" has signed in\");\n                                resolve(user);\n                                return [7 /*endfinally*/];\n                            case 6: return [2 /*return*/];\n                        }\n                    });\n                }); },\n                onFailure: function (err) {\n                    logger.debug('completeNewPassword failure', err);\n                    dispatchAuthEvent('completeNewPassword_failure', err, _this.user + \" failed to complete the new password flow\");\n                    reject(err);\n                },\n                mfaRequired: function (challengeName, challengeParam) {\n                    logger.debug('signIn MFA required');\n                    user['challengeName'] = challengeName;\n                    user['challengeParam'] = challengeParam;\n                    resolve(user);\n                },\n                mfaSetup: function (challengeName, challengeParam) {\n                    logger.debug('signIn mfa setup', challengeName);\n                    user['challengeName'] = challengeName;\n                    user['challengeParam'] = challengeParam;\n                    resolve(user);\n                },\n                totpRequired: function (challengeName, challengeParam) {\n                    logger.debug('signIn mfa setup', challengeName);\n                    user['challengeName'] = challengeName;\n                    user['challengeParam'] = challengeParam;\n                    resolve(user);\n                },\n            }, clientMetadata);\n        });\n    };\n    /**\n     * Send the answer to a custom challenge\n     * @param {CognitoUser} user - The CognitoUser object\n     * @param {String} challengeResponses - The confirmation code\n     */\n    AuthClass.prototype.sendCustomChallengeAnswer = function (user, challengeResponses, clientMetadata) {\n        var _this = this;\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        if (!challengeResponses) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyChallengeResponse);\n        }\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            user.sendCustomChallengeAnswer(challengeResponses, _this.authCallbacks(user, resolve, reject), clientMetadata);\n        });\n    };\n    /**\n     * Update an authenticated users' attributes\n     * @param {CognitoUser} - The currently logged in user object\n     * @return {Promise}\n     **/\n    AuthClass.prototype.updateUserAttributes = function (user, attributes, clientMetadata) {\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        var attributeList = [];\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            that.userSession(user).then(function (session) {\n                for (var key in attributes) {\n                    if (key !== 'sub' && key.indexOf('_verified') < 0) {\n                        var attr = {\n                            Name: key,\n                            Value: attributes[key],\n                        };\n                        attributeList.push(attr);\n                    }\n                }\n                user.updateAttributes(attributeList, function (err, result) {\n                    if (err) {\n                        return reject(err);\n                    }\n                    else {\n                        return resolve(result);\n                    }\n                }, clientMetadata);\n            });\n        });\n    };\n    /**\n     * Return user attributes\n     * @param {Object} user - The CognitoUser object\n     * @return - A promise resolves to user attributes if success\n     */\n    AuthClass.prototype.userAttributes = function (user) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.userSession(user).then(function (session) {\n                user.getUserAttributes(function (err, attributes) {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve(attributes);\n                    }\n                });\n            });\n        });\n    };\n    AuthClass.prototype.verifiedContact = function (user) {\n        var that = this;\n        return this.userAttributes(user).then(function (attributes) {\n            var attrs = that.attributesToObject(attributes);\n            var unverified = {};\n            var verified = {};\n            if (attrs['email']) {\n                if (attrs['email_verified']) {\n                    verified['email'] = attrs['email'];\n                }\n                else {\n                    unverified['email'] = attrs['email'];\n                }\n            }\n            if (attrs['phone_number']) {\n                if (attrs['phone_number_verified']) {\n                    verified['phone_number'] = attrs['phone_number'];\n                }\n                else {\n                    unverified['phone_number'] = attrs['phone_number'];\n                }\n            }\n            return {\n                verified: verified,\n                unverified: unverified,\n            };\n        });\n    };\n    /**\n     * Get current authenticated user\n     * @return - A promise resolves to current authenticated CognitoUser if success\n     */\n    AuthClass.prototype.currentUserPoolUser = function (params) {\n        var _this = this;\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        return new Promise(function (res, rej) {\n            _this._storageSync\n                .then(function () { return __awaiter(_this, void 0, void 0, function () {\n                var user;\n                var _this = this;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!this.isOAuthInProgress()) return [3 /*break*/, 2];\n                            logger.debug('OAuth signIn in progress, waiting for resolution...');\n                            return [4 /*yield*/, new Promise(function (res) {\n                                    var timeoutId = setTimeout(function () {\n                                        logger.debug('OAuth signIn in progress timeout');\n                                        Hub.remove('auth', hostedUISignCallback);\n                                        res();\n                                    }, OAUTH_FLOW_MS_TIMEOUT);\n                                    Hub.listen('auth', hostedUISignCallback);\n                                    function hostedUISignCallback(_a) {\n                                        var payload = _a.payload;\n                                        var event = payload.event;\n                                        if (event === 'cognitoHostedUI' ||\n                                            event === 'cognitoHostedUI_failure') {\n                                            logger.debug(\"OAuth signIn resolved: \" + event);\n                                            clearTimeout(timeoutId);\n                                            Hub.remove('auth', hostedUISignCallback);\n                                            res();\n                                        }\n                                    }\n                                })];\n                        case 1:\n                            _a.sent();\n                            _a.label = 2;\n                        case 2:\n                            user = this.userPool.getCurrentUser();\n                            if (!user) {\n                                logger.debug('Failed to get user from user pool');\n                                rej('No current user');\n                                return [2 /*return*/];\n                            }\n                            // refresh the session if the session expired.\n                            user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {\n                                var bypassCache, _a, scope;\n                                var _this = this;\n                                return __generator(this, function (_b) {\n                                    switch (_b.label) {\n                                        case 0:\n                                            if (err) {\n                                                logger.debug('Failed to get the user session', err);\n                                                rej(err);\n                                                return [2 /*return*/];\n                                            }\n                                            bypassCache = params ? params.bypassCache : false;\n                                            if (!bypassCache) return [3 /*break*/, 2];\n                                            return [4 /*yield*/, this.Credentials.clear()];\n                                        case 1:\n                                            _b.sent();\n                                            _b.label = 2;\n                                        case 2:\n                                            _a = session.getAccessToken().decodePayload().scope, scope = _a === void 0 ? '' : _a;\n                                            if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {\n                                                user.getUserData(function (err, data) {\n                                                    if (err) {\n                                                        logger.debug('getting user data failed', err);\n                                                        // Make sure the user is still valid\n                                                        if (err.message === 'User is disabled.' ||\n                                                            err.message === 'User does not exist.' ||\n                                                            err.message === 'Access Token has been revoked' // Session revoked by another app\n                                                        ) {\n                                                            rej(err);\n                                                        }\n                                                        else {\n                                                            // the error may also be thrown when lack of permissions to get user info etc\n                                                            // in that case we just bypass the error\n                                                            res(user);\n                                                        }\n                                                        return;\n                                                    }\n                                                    var preferredMFA = data.PreferredMfaSetting || 'NOMFA';\n                                                    var attributeList = [];\n                                                    for (var i = 0; i < data.UserAttributes.length; i++) {\n                                                        var attribute = {\n                                                            Name: data.UserAttributes[i].Name,\n                                                            Value: data.UserAttributes[i].Value,\n                                                        };\n                                                        var userAttribute = new CognitoUserAttribute(attribute);\n                                                        attributeList.push(userAttribute);\n                                                    }\n                                                    var attributes = _this.attributesToObject(attributeList);\n                                                    Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });\n                                                    return res(user);\n                                                }, { bypassCache: bypassCache });\n                                            }\n                                            else {\n                                                logger.debug(\"Unable to get the user data because the \" + USER_ADMIN_SCOPE + \" \" +\n                                                    \"is not in the scopes of the access token\");\n                                                return [2 /*return*/, res(user)];\n                                            }\n                                            return [2 /*return*/];\n                                    }\n                                });\n                            }); });\n                            return [2 /*return*/];\n                    }\n                });\n            }); })\n                .catch(function (e) {\n                logger.debug('Failed to sync cache info into memory', e);\n                return rej(e);\n            });\n        });\n    };\n    AuthClass.prototype.isOAuthInProgress = function () {\n        return this.oAuthFlowInProgress;\n    };\n    /**\n     * Get current authenticated user\n     * @param {CurrentUserOpts} - options for getting the current user\n     * @return - A promise resolves to current authenticated CognitoUser if success\n     */\n    AuthClass.prototype.currentAuthenticatedUser = function (params) {\n        return __awaiter(this, void 0, void 0, function () {\n            var federatedUser, e_5, user, e_6;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        logger.debug('getting current authenticated user');\n                        federatedUser = null;\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_5 = _a.sent();\n                        logger.debug('Failed to sync cache info into memory', e_5);\n                        throw e_5;\n                    case 4:\n                        try {\n                            federatedUser = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo')).user;\n                        }\n                        catch (e) {\n                            logger.debug('cannot load federated user from auth storage');\n                        }\n                        if (!federatedUser) return [3 /*break*/, 5];\n                        this.user = federatedUser;\n                        logger.debug('get current authenticated federated user', this.user);\n                        return [2 /*return*/, this.user];\n                    case 5:\n                        logger.debug('get current authenticated userpool user');\n                        user = null;\n                        _a.label = 6;\n                    case 6:\n                        _a.trys.push([6, 8, , 9]);\n                        return [4 /*yield*/, this.currentUserPoolUser(params)];\n                    case 7:\n                        user = _a.sent();\n                        return [3 /*break*/, 9];\n                    case 8:\n                        e_6 = _a.sent();\n                        if (e_6 === 'No userPool') {\n                            logger.error('Cannot get the current user because the user pool is missing. ' +\n                                'Please make sure the Auth module is configured with a valid Cognito User Pool ID');\n                        }\n                        logger.debug('The user is not authenticated by the error', e_6);\n                        throw 'not authenticated';\n                    case 9:\n                        this.user = user;\n                        return [2 /*return*/, this.user];\n                }\n            });\n        });\n    };\n    /**\n     * Get current user's session\n     * @return - A promise resolves to session object if success\n     */\n    AuthClass.prototype.currentSession = function () {\n        var that = this;\n        logger.debug('Getting current session');\n        // Purposely not calling the reject method here because we don't need a console error\n        if (!this.userPool) {\n            return Promise.reject();\n        }\n        return new Promise(function (res, rej) {\n            that\n                .currentUserPoolUser()\n                .then(function (user) {\n                that\n                    .userSession(user)\n                    .then(function (session) {\n                    res(session);\n                    return;\n                })\n                    .catch(function (e) {\n                    logger.debug('Failed to get the current session', e);\n                    rej(e);\n                    return;\n                });\n            })\n                .catch(function (e) {\n                logger.debug('Failed to get the current user', e);\n                rej(e);\n                return;\n            });\n        });\n    };\n    /**\n     * Get the corresponding user session\n     * @param {Object} user - The CognitoUser object\n     * @return - A promise resolves to the session\n     */\n    AuthClass.prototype.userSession = function (user) {\n        if (!user) {\n            logger.debug('the user is null');\n            return this.rejectAuthError(AuthErrorTypes.NoUserSession);\n        }\n        return new Promise(function (resolve, reject) {\n            logger.debug('Getting the session from this user:', user);\n            user.getSession(function (err, session) {\n                if (err) {\n                    logger.debug('Failed to get the session from user', user);\n                    reject(err);\n                    return;\n                }\n                else {\n                    logger.debug('Succeed to get the user session', session);\n                    resolve(session);\n                    return;\n                }\n            });\n        });\n    };\n    /**\n     * Get  authenticated credentials of current user.\n     * @return - A promise resolves to be current user's credentials\n     */\n    AuthClass.prototype.currentUserCredentials = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var that, e_7, federatedInfo;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        that = this;\n                        logger.debug('Getting current user credentials');\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_7 = _a.sent();\n                        logger.debug('Failed to sync cache info into memory', e_7);\n                        throw e_7;\n                    case 4:\n                        federatedInfo = null;\n                        try {\n                            federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));\n                        }\n                        catch (e) {\n                            logger.debug('failed to get or parse item aws-amplify-federatedInfo', e);\n                        }\n                        if (federatedInfo) {\n                            // refresh the jwt token here if necessary\n                            return [2 /*return*/, this.Credentials.refreshFederatedToken(federatedInfo)];\n                        }\n                        else {\n                            return [2 /*return*/, this.currentSession()\n                                    .then(function (session) {\n                                    logger.debug('getting session success', session);\n                                    return _this.Credentials.set(session, 'session');\n                                })\n                                    .catch(function (error) {\n                                    logger.debug('getting session failed', error);\n                                    return _this.Credentials.set(null, 'guest');\n                                })];\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AuthClass.prototype.currentCredentials = function () {\n        logger.debug('getting current credentials');\n        return this.Credentials.get();\n    };\n    /**\n     * Initiate an attribute confirmation request\n     * @param {Object} user - The CognitoUser\n     * @param {Object} attr - The attributes to be verified\n     * @return - A promise resolves to callback data if success\n     */\n    AuthClass.prototype.verifyUserAttribute = function (user, attr, clientMetadata) {\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        return new Promise(function (resolve, reject) {\n            user.getAttributeVerificationCode(attr, {\n                onSuccess: function () {\n                    return resolve();\n                },\n                onFailure: function (err) {\n                    return reject(err);\n                },\n                clientMetadata: clientMetadata,\n            });\n        });\n    };\n    /**\n     * Confirm an attribute using a confirmation code\n     * @param {Object} user - The CognitoUser\n     * @param {Object} attr - The attribute to be verified\n     * @param {String} code - The confirmation code\n     * @return - A promise resolves to callback data if success\n     */\n    AuthClass.prototype.verifyUserAttributeSubmit = function (user, attr, code) {\n        if (!code) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n        }\n        return new Promise(function (resolve, reject) {\n            user.verifyAttribute(attr, code, {\n                onSuccess: function (data) {\n                    resolve(data);\n                    return;\n                },\n                onFailure: function (err) {\n                    reject(err);\n                    return;\n                },\n            });\n        });\n    };\n    AuthClass.prototype.verifyCurrentUserAttribute = function (attr) {\n        var that = this;\n        return that\n            .currentUserPoolUser()\n            .then(function (user) { return that.verifyUserAttribute(user, attr); });\n    };\n    /**\n     * Confirm current user's attribute using a confirmation code\n     * @param {Object} attr - The attribute to be verified\n     * @param {String} code - The confirmation code\n     * @return - A promise resolves to callback data if success\n     */\n    AuthClass.prototype.verifyCurrentUserAttributeSubmit = function (attr, code) {\n        var that = this;\n        return that\n            .currentUserPoolUser()\n            .then(function (user) { return that.verifyUserAttributeSubmit(user, attr, code); });\n    };\n    AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {\n        return __awaiter(this, void 0, void 0, function () {\n            var e_8, isSignedInHostedUI;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 3]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        e_8 = _a.sent();\n                        logger.debug('Failed to sync cache info into memory', e_8);\n                        throw e_8;\n                    case 3:\n                        isSignedInHostedUI = this._oAuthHandler &&\n                            this._storage.getItem('amplify-signin-with-hostedUI') === 'true';\n                        return [2 /*return*/, new Promise(function (res, rej) {\n                                if (opts && opts.global) {\n                                    logger.debug('user global sign out', user);\n                                    // in order to use global signout\n                                    // we must validate the user as an authenticated user by using getSession\n                                    user.getSession(function (err, result) {\n                                        if (err) {\n                                            logger.debug('failed to get the user session', err);\n                                            return rej(err);\n                                        }\n                                        user.globalSignOut({\n                                            onSuccess: function (data) {\n                                                logger.debug('global sign out success');\n                                                if (isSignedInHostedUI) {\n                                                    _this.oAuthSignOutRedirect(res, rej);\n                                                }\n                                                else {\n                                                    return res();\n                                                }\n                                            },\n                                            onFailure: function (err) {\n                                                logger.debug('global sign out failed', err);\n                                                return rej(err);\n                                            },\n                                        });\n                                    });\n                                }\n                                else {\n                                    logger.debug('user sign out', user);\n                                    user.signOut();\n                                    if (isSignedInHostedUI) {\n                                        _this.oAuthSignOutRedirect(res, rej);\n                                    }\n                                    else {\n                                        return res();\n                                    }\n                                }\n                            })];\n                }\n            });\n        });\n    };\n    AuthClass.prototype.oAuthSignOutRedirect = function (resolve, reject) {\n        var isBrowser = JS.browserOrNode().isBrowser;\n        if (isBrowser) {\n            this.oAuthSignOutRedirectOrReject(reject);\n        }\n        else {\n            this.oAuthSignOutAndResolve(resolve);\n        }\n    };\n    AuthClass.prototype.oAuthSignOutAndResolve = function (resolve) {\n        this._oAuthHandler.signOut();\n        resolve();\n    };\n    AuthClass.prototype.oAuthSignOutRedirectOrReject = function (reject) {\n        this._oAuthHandler.signOut(); // this method redirects url\n        // App should be redirected to another url otherwise it will reject\n        setTimeout(function () { return reject('Signout timeout fail'); }, 3000);\n    };\n    /**\n     * Sign out method\n     * @\n     * @return - A promise resolved if success\n     */\n    AuthClass.prototype.signOut = function (opts) {\n        return __awaiter(this, void 0, void 0, function () {\n            var e_9, user;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 3]);\n                        return [4 /*yield*/, this.cleanCachedItems()];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        e_9 = _a.sent();\n                        logger.debug('failed to clear cached items');\n                        return [3 /*break*/, 3];\n                    case 3:\n                        if (!this.userPool) return [3 /*break*/, 7];\n                        user = this.userPool.getCurrentUser();\n                        if (!user) return [3 /*break*/, 5];\n                        return [4 /*yield*/, this.cognitoIdentitySignOut(opts, user)];\n                    case 4:\n                        _a.sent();\n                        return [3 /*break*/, 6];\n                    case 5:\n                        logger.debug('no current Cognito user');\n                        _a.label = 6;\n                    case 6: return [3 /*break*/, 8];\n                    case 7:\n                        logger.debug('no Congito User pool');\n                        _a.label = 8;\n                    case 8:\n                        /**\n                         * Note for future refactor - no reliable way to get username with\n                         * Cognito User Pools vs Identity when federating with Social Providers\n                         * This is why we need a well structured session object that can be inspected\n                         * and information passed back in the message below for Hub dispatch\n                         */\n                        dispatchAuthEvent('signOut', this.user, \"A user has been signed out\");\n                        this.user = null;\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AuthClass.prototype.cleanCachedItems = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: \n                    // clear cognito cached item\n                    return [4 /*yield*/, this.Credentials.clear()];\n                    case 1:\n                        // clear cognito cached item\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Change a password for an authenticated user\n     * @param {Object} user - The CognitoUser object\n     * @param {String} oldPassword - the current password\n     * @param {String} newPassword - the requested new password\n     * @return - A promise resolves if success\n     */\n    AuthClass.prototype.changePassword = function (user, oldPassword, newPassword, clientMetadata) {\n        var _this = this;\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        return new Promise(function (resolve, reject) {\n            _this.userSession(user).then(function (session) {\n                user.changePassword(oldPassword, newPassword, function (err, data) {\n                    if (err) {\n                        logger.debug('change password failure', err);\n                        return reject(err);\n                    }\n                    else {\n                        return resolve(data);\n                    }\n                }, clientMetadata);\n            });\n        });\n    };\n    /**\n     * Initiate a forgot password request\n     * @param {String} username - the username to change password\n     * @return - A promise resolves if success\n     */\n    AuthClass.prototype.forgotPassword = function (username, clientMetadata) {\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        if (!username) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n        }\n        var user = this.createCognitoUser(username);\n        return new Promise(function (resolve, reject) {\n            user.forgotPassword({\n                onSuccess: function () {\n                    resolve();\n                    return;\n                },\n                onFailure: function (err) {\n                    logger.debug('forgot password failure', err);\n                    dispatchAuthEvent('forgotPassword_failure', err, username + \" forgotPassword failed\");\n                    reject(err);\n                    return;\n                },\n                inputVerificationCode: function (data) {\n                    dispatchAuthEvent('forgotPassword', user, username + \" has initiated forgot password flow\");\n                    resolve(data);\n                    return;\n                },\n            }, clientMetadata);\n        });\n    };\n    /**\n     * Confirm a new password using a confirmation Code\n     * @param {String} username - The username\n     * @param {String} code - The confirmation code\n     * @param {String} password - The new password\n     * @return - A promise that resolves if success\n     */\n    AuthClass.prototype.forgotPasswordSubmit = function (username, code, password, clientMetadata) {\n        if (clientMetadata === void 0) { clientMetadata = this._config.clientMetadata; }\n        if (!this.userPool) {\n            return this.rejectNoUserPool();\n        }\n        if (!username) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n        }\n        if (!code) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n        }\n        if (!password) {\n            return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n        }\n        var user = this.createCognitoUser(username);\n        return new Promise(function (resolve, reject) {\n            user.confirmPassword(code, password, {\n                onSuccess: function () {\n                    dispatchAuthEvent('forgotPasswordSubmit', user, username + \" forgotPasswordSubmit successful\");\n                    resolve();\n                    return;\n                },\n                onFailure: function (err) {\n                    dispatchAuthEvent('forgotPasswordSubmit_failure', err, username + \" forgotPasswordSubmit failed\");\n                    reject(err);\n                    return;\n                },\n            }, clientMetadata);\n        });\n    };\n    /**\n     * Get user information\n     * @async\n     * @return {Object }- current User's information\n     */\n    AuthClass.prototype.currentUserInfo = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var source, user, attributes, userAttrs, credentials, e_10, info, err_1, user;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        source = this.Credentials.getCredSource();\n                        if (!(!source || source === 'aws' || source === 'userPool')) return [3 /*break*/, 9];\n                        return [4 /*yield*/, this.currentUserPoolUser().catch(function (err) {\n                                return logger.debug(err);\n                            })];\n                    case 1:\n                        user = _a.sent();\n                        if (!user) {\n                            return [2 /*return*/, null];\n                        }\n                        _a.label = 2;\n                    case 2:\n                        _a.trys.push([2, 8, , 9]);\n                        return [4 /*yield*/, this.userAttributes(user)];\n                    case 3:\n                        attributes = _a.sent();\n                        userAttrs = this.attributesToObject(attributes);\n                        credentials = null;\n                        _a.label = 4;\n                    case 4:\n                        _a.trys.push([4, 6, , 7]);\n                        return [4 /*yield*/, this.currentCredentials()];\n                    case 5:\n                        credentials = _a.sent();\n                        return [3 /*break*/, 7];\n                    case 6:\n                        e_10 = _a.sent();\n                        logger.debug('Failed to retrieve credentials while getting current user info', e_10);\n                        return [3 /*break*/, 7];\n                    case 7:\n                        info = {\n                            id: credentials ? credentials.identityId : undefined,\n                            username: user.getUsername(),\n                            attributes: userAttrs,\n                        };\n                        return [2 /*return*/, info];\n                    case 8:\n                        err_1 = _a.sent();\n                        logger.debug('currentUserInfo error', err_1);\n                        return [2 /*return*/, {}];\n                    case 9:\n                        if (source === 'federated') {\n                            user = this.user;\n                            return [2 /*return*/, user ? user : {}];\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AuthClass.prototype.federatedSignIn = function (providerOrOptions, response, user) {\n        return __awaiter(this, void 0, void 0, function () {\n            var options, provider, customState, client_id, redirect_uri, provider, loggedInUser, token, identity_id, expires_at, credentials, currentUser;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this._config.identityPoolId && !this._config.userPoolId) {\n                            throw new Error(\"Federation requires either a User Pool or Identity Pool in config\");\n                        }\n                        // Ensure backwards compatability\n                        if (typeof providerOrOptions === 'undefined') {\n                            if (this._config.identityPoolId && !this._config.userPoolId) {\n                                throw new Error(\"Federation with Identity Pools requires tokens passed as arguments\");\n                            }\n                        }\n                        if (!(isFederatedSignInOptions(providerOrOptions) ||\n                            isFederatedSignInOptionsCustom(providerOrOptions) ||\n                            hasCustomState(providerOrOptions) ||\n                            typeof providerOrOptions === 'undefined')) return [3 /*break*/, 1];\n                        options = providerOrOptions || {\n                            provider: CognitoHostedUIIdentityProvider.Cognito,\n                        };\n                        provider = isFederatedSignInOptions(options)\n                            ? options.provider\n                            : options.customProvider;\n                        customState = isFederatedSignInOptions(options)\n                            ? options.customState\n                            : options.customState;\n                        if (this._config.userPoolId) {\n                            client_id = isCognitoHostedOpts(this._config.oauth)\n                                ? this._config.userPoolWebClientId\n                                : this._config.oauth.clientID;\n                            redirect_uri = isCognitoHostedOpts(this._config.oauth)\n                                ? this._config.oauth.redirectSignIn\n                                : this._config.oauth.redirectUri;\n                            this._oAuthHandler.oauthSignIn(this._config.oauth.responseType, this._config.oauth.domain, redirect_uri, client_id, provider, customState);\n                        }\n                        return [3 /*break*/, 4];\n                    case 1:\n                        provider = providerOrOptions;\n                        // To check if the user is already logged in\n                        try {\n                            loggedInUser = JSON.stringify(JSON.parse(this._storage.getItem('aws-amplify-federatedInfo')).user);\n                            if (loggedInUser) {\n                                logger.warn(\"There is already a signed in user: \" + loggedInUser + \" in your app.\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tYou should not call Auth.federatedSignIn method again as it may cause unexpected behavior.\");\n                            }\n                        }\n                        catch (e) { }\n                        token = response.token, identity_id = response.identity_id, expires_at = response.expires_at;\n                        return [4 /*yield*/, this.Credentials.set({ provider: provider, token: token, identity_id: identity_id, user: user, expires_at: expires_at }, 'federation')];\n                    case 2:\n                        credentials = _a.sent();\n                        return [4 /*yield*/, this.currentAuthenticatedUser()];\n                    case 3:\n                        currentUser = _a.sent();\n                        dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.username + \" has been signed in\");\n                        logger.debug('federated sign in credentials', credentials);\n                        return [2 /*return*/, credentials];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Used to complete the OAuth flow with or without the Cognito Hosted UI\n     * @param {String} URL - optional parameter for customers to pass in the response URL\n     */\n    AuthClass.prototype._handleAuthResponse = function (URL) {\n        return __awaiter(this, void 0, void 0, function () {\n            var currentUrl, hasCodeOrError, hasTokenOrError, _a, accessToken, idToken, refreshToken, state, session, credentials, isCustomStateIncluded, currentUser, customState, err_2;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (this.oAuthFlowInProgress) {\n                            logger.debug(\"Skipping URL \" + URL + \" current flow in progress\");\n                            return [2 /*return*/];\n                        }\n                        _b.label = 1;\n                    case 1:\n                        _b.trys.push([1, , 8, 9]);\n                        this.oAuthFlowInProgress = true;\n                        if (!this._config.userPoolId) {\n                            throw new Error(\"OAuth responses require a User Pool defined in config\");\n                        }\n                        dispatchAuthEvent('parsingCallbackUrl', { url: URL }, \"The callback url is being parsed\");\n                        currentUrl = URL || (JS.browserOrNode().isBrowser ? window.location.href : '');\n                        hasCodeOrError = !!(parse(currentUrl).query || '')\n                            .split('&')\n                            .map(function (entry) { return entry.split('='); })\n                            .find(function (_a) {\n                            var _b = __read(_a, 1), k = _b[0];\n                            return k === 'code' || k === 'error';\n                        });\n                        hasTokenOrError = !!(parse(currentUrl).hash || '#')\n                            .substr(1)\n                            .split('&')\n                            .map(function (entry) { return entry.split('='); })\n                            .find(function (_a) {\n                            var _b = __read(_a, 1), k = _b[0];\n                            return k === 'access_token' || k === 'error';\n                        });\n                        if (!(hasCodeOrError || hasTokenOrError)) return [3 /*break*/, 7];\n                        this._storage.setItem('amplify-redirected-from-hosted-ui', 'true');\n                        _b.label = 2;\n                    case 2:\n                        _b.trys.push([2, 6, , 7]);\n                        return [4 /*yield*/, this._oAuthHandler.handleAuthResponse(currentUrl)];\n                    case 3:\n                        _a = _b.sent(), accessToken = _a.accessToken, idToken = _a.idToken, refreshToken = _a.refreshToken, state = _a.state;\n                        session = new CognitoUserSession({\n                            IdToken: new CognitoIdToken({ IdToken: idToken }),\n                            RefreshToken: new CognitoRefreshToken({\n                                RefreshToken: refreshToken,\n                            }),\n                            AccessToken: new CognitoAccessToken({\n                                AccessToken: accessToken,\n                            }),\n                        });\n                        credentials = void 0;\n                        if (!this._config.identityPoolId) return [3 /*break*/, 5];\n                        return [4 /*yield*/, this.Credentials.set(session, 'session')];\n                    case 4:\n                        credentials = _b.sent();\n                        logger.debug('AWS credentials', credentials);\n                        _b.label = 5;\n                    case 5:\n                        isCustomStateIncluded = /-/.test(state);\n                        currentUser = this.createCognitoUser(session.getIdToken().decodePayload()['cognito:username']);\n                        // This calls cacheTokens() in Cognito SDK\n                        currentUser.setSignInUserSession(session);\n                        if (window && typeof window.history !== 'undefined') {\n                            window.history.replaceState({}, null, this._config.oauth.redirectSignIn);\n                        }\n                        dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in\");\n                        dispatchAuthEvent('cognitoHostedUI', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in via Cognito Hosted UI\");\n                        if (isCustomStateIncluded) {\n                            customState = state\n                                .split('-')\n                                .splice(1)\n                                .join('-');\n                            dispatchAuthEvent('customOAuthState', customState, \"State for user \" + currentUser.getUsername());\n                        }\n                        //#endregion\n                        return [2 /*return*/, credentials];\n                    case 6:\n                        err_2 = _b.sent();\n                        logger.debug('Error in cognito hosted auth response', err_2);\n                        dispatchAuthEvent('signIn_failure', err_2, \"The OAuth response flow failed\");\n                        dispatchAuthEvent('cognitoHostedUI_failure', err_2, \"A failure occurred when returning to the Cognito Hosted UI\");\n                        dispatchAuthEvent('customState_failure', err_2, \"A failure occurred when returning state\");\n                        return [3 /*break*/, 7];\n                    case 7: return [3 /*break*/, 9];\n                    case 8:\n                        this.oAuthFlowInProgress = false;\n                        return [7 /*endfinally*/];\n                    case 9: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Compact version of credentials\n     * @param {Object} credentials\n     * @return {Object} - Credentials\n     */\n    AuthClass.prototype.essentialCredentials = function (credentials) {\n        return {\n            accessKeyId: credentials.accessKeyId,\n            sessionToken: credentials.sessionToken,\n            secretAccessKey: credentials.secretAccessKey,\n            identityId: credentials.identityId,\n            authenticated: credentials.authenticated,\n        };\n    };\n    AuthClass.prototype.attributesToObject = function (attributes) {\n        var obj = {};\n        if (attributes) {\n            attributes.map(function (attribute) {\n                if (attribute.Name === 'email_verified' ||\n                    attribute.Name === 'phone_number_verified') {\n                    obj[attribute.Name] =\n                        attribute.Value === 'true' || attribute.Value === true;\n                }\n                else {\n                    obj[attribute.Name] = attribute.Value;\n                }\n            });\n        }\n        return obj;\n    };\n    AuthClass.prototype.createCognitoUser = function (username) {\n        var userData = {\n            Username: username,\n            Pool: this.userPool,\n        };\n        userData.Storage = this._storage;\n        var authenticationFlowType = this._config.authenticationFlowType;\n        var user = new CognitoUser(userData);\n        if (authenticationFlowType) {\n            user.setAuthenticationFlowType(authenticationFlowType);\n        }\n        return user;\n    };\n    AuthClass.prototype._isValidAuthStorage = function (obj) {\n        // We need to check if the obj has the functions of Storage\n        return (!!obj &&\n            typeof obj.getItem === 'function' &&\n            typeof obj.setItem === 'function' &&\n            typeof obj.removeItem === 'function' &&\n            typeof obj.clear === 'function');\n    };\n    AuthClass.prototype.noUserPoolErrorHandler = function (config) {\n        if (config) {\n            if (!config.userPoolId || !config.identityPoolId) {\n                return AuthErrorTypes.MissingAuthConfig;\n            }\n        }\n        return AuthErrorTypes.NoConfig;\n    };\n    AuthClass.prototype.rejectAuthError = function (type) {\n        return Promise.reject(new AuthError(type));\n    };\n    AuthClass.prototype.rejectNoUserPool = function () {\n        var type = this.noUserPoolErrorHandler(this._config);\n        return Promise.reject(new NoUserPoolError(type));\n    };\n    return AuthClass;\n}());\nexport { AuthClass };\nexport var Auth = new AuthClass(null);\nAmplify.register(Auth);\n//# sourceMappingURL=Auth.js.map","/*\n * Copyright 2019-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nimport { AuthErrorStrings } from './common/AuthErrorStrings';\nvar logger = new Logger('AuthError');\nvar AuthError = /** @class */ (function (_super) {\n    __extends(AuthError, _super);\n    function AuthError(type) {\n        var _this = this;\n        var _a = authErrorMessages[type], message = _a.message, log = _a.log;\n        _this = _super.call(this, message) || this;\n        // Hack for making the custom error class work when transpiled to es5\n        // TODO: Delete the following 2 lines after we change the build target to >= es2015\n        _this.constructor = AuthError;\n        Object.setPrototypeOf(_this, AuthError.prototype);\n        _this.name = 'AuthError';\n        _this.log = log || message;\n        logger.error(_this.log);\n        return _this;\n    }\n    return AuthError;\n}(Error));\nexport { AuthError };\nvar NoUserPoolError = /** @class */ (function (_super) {\n    __extends(NoUserPoolError, _super);\n    function NoUserPoolError(type) {\n        var _this = _super.call(this, type) || this;\n        // Hack for making the custom error class work when transpiled to es5\n        // TODO: Delete the following 2 lines after we change the build target to >= es2015\n        _this.constructor = NoUserPoolError;\n        Object.setPrototypeOf(_this, NoUserPoolError.prototype);\n        _this.name = 'NoUserPoolError';\n        return _this;\n    }\n    return NoUserPoolError;\n}(AuthError));\nexport { NoUserPoolError };\nexport var authErrorMessages = {\n    noConfig: {\n        message: AuthErrorStrings.DEFAULT_MSG,\n        log: \"\\n            Error: Amplify has not been configured correctly.\\n            This error is typically caused by one of the following scenarios:\\n\\n            1. Make sure you're passing the awsconfig object to Amplify.configure() in your app's entry point\\n                See https://aws-amplify.github.io/docs/js/authentication#configure-your-app for more information\\n            \\n            2. There might be multiple conflicting versions of aws-amplify or amplify packages in your node_modules.\\n                Try deleting your node_modules folder and reinstalling the dependencies with `yarn install`\\n        \",\n    },\n    missingAuthConfig: {\n        message: AuthErrorStrings.DEFAULT_MSG,\n        log: \"\\n            Error: Amplify has not been configured correctly. \\n            The configuration object is missing required auth properties. \\n            Did you run `amplify push` after adding auth via `amplify add auth`?\\n            See https://aws-amplify.github.io/docs/js/authentication#amplify-project-setup for more information\\n        \",\n    },\n    emptyUsername: {\n        message: AuthErrorStrings.EMPTY_USERNAME,\n    },\n    // TODO: should include a list of valid sign-in types\n    invalidUsername: {\n        message: AuthErrorStrings.INVALID_USERNAME,\n    },\n    emptyPassword: {\n        message: AuthErrorStrings.EMPTY_PASSWORD,\n    },\n    emptyCode: {\n        message: AuthErrorStrings.EMPTY_CODE,\n    },\n    signUpError: {\n        message: AuthErrorStrings.SIGN_UP_ERROR,\n        log: 'The first parameter should either be non-null string or object',\n    },\n    noMFA: {\n        message: AuthErrorStrings.NO_MFA,\n    },\n    invalidMFA: {\n        message: AuthErrorStrings.INVALID_MFA,\n    },\n    emptyChallengeResponse: {\n        message: AuthErrorStrings.EMPTY_CHALLENGE,\n    },\n    noUserSession: {\n        message: AuthErrorStrings.NO_USER_SESSION,\n    },\n    default: {\n        message: AuthErrorStrings.DEFAULT_MSG,\n    },\n};\n//# sourceMappingURL=Errors.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nimport { parse } from 'url'; // Used for OAuth parsing of Cognito Hosted UI\nimport { launchUri } from './urlOpener';\nimport * as oAuthStorage from './oauthStorage';\nimport { isCognitoHostedOpts, CognitoHostedUIIdentityProvider, } from '../types/Auth';\nimport { ConsoleLogger as Logger, Hub } from '@aws-amplify/core';\nimport sha256 from 'crypto-js/sha256';\nimport Base64 from 'crypto-js/enc-base64';\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n    typeof Symbol.for === 'function'\n    ? Symbol.for('amplify_default')\n    : '@@amplify_default');\nvar dispatchAuthEvent = function (event, data, message) {\n    Hub.dispatch('auth', { event: event, data: data, message: message }, 'Auth', AMPLIFY_SYMBOL);\n};\nvar logger = new Logger('OAuth');\nvar OAuth = /** @class */ (function () {\n    function OAuth(_a) {\n        var config = _a.config, cognitoClientId = _a.cognitoClientId, _b = _a.scopes, scopes = _b === void 0 ? [] : _b;\n        this._urlOpener = config.urlOpener || launchUri;\n        this._config = config;\n        this._cognitoClientId = cognitoClientId;\n        if (!this.isValidScopes(scopes))\n            throw Error('scopes must be a String Array');\n        this._scopes = scopes;\n    }\n    OAuth.prototype.isValidScopes = function (scopes) {\n        return (Array.isArray(scopes) && scopes.every(function (scope) { return typeof scope === 'string'; }));\n    };\n    OAuth.prototype.oauthSignIn = function (responseType, domain, redirectSignIn, clientId, provider, customState) {\n        if (responseType === void 0) { responseType = 'code'; }\n        if (provider === void 0) { provider = CognitoHostedUIIdentityProvider.Cognito; }\n        var generatedState = this._generateState(32);\n        var state = customState\n            ? generatedState + \"-\" + customState\n            : generatedState;\n        oAuthStorage.setState(encodeURIComponent(state));\n        var pkce_key = this._generateRandom(128);\n        oAuthStorage.setPKCE(pkce_key);\n        var code_challenge = this._generateChallenge(pkce_key);\n        var code_challenge_method = 'S256';\n        var scopesString = this._scopes.join(' ');\n        var queryString = Object.entries(__assign(__assign({ redirect_uri: redirectSignIn, response_type: responseType, client_id: clientId, identity_provider: provider, scope: scopesString, state: state }, (responseType === 'code' ? { code_challenge: code_challenge } : {})), (responseType === 'code' ? { code_challenge_method: code_challenge_method } : {})))\n            .map(function (_a) {\n            var _b = __read(_a, 2), k = _b[0], v = _b[1];\n            return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n        })\n            .join('&');\n        var URL = \"https://\" + domain + \"/oauth2/authorize?\" + queryString;\n        logger.debug(\"Redirecting to \" + URL);\n        this._urlOpener(URL, redirectSignIn);\n    };\n    OAuth.prototype._handleCodeFlow = function (currentUrl) {\n        return __awaiter(this, void 0, void 0, function () {\n            var code, oAuthTokenEndpoint, client_id, redirect_uri, code_verifier, oAuthTokenBody, body, _a, access_token, refresh_token, id_token, error;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        code = (parse(currentUrl).query || '')\n                            .split('&')\n                            .map(function (pairings) { return pairings.split('='); })\n                            .reduce(function (accum, _a) {\n                            var _b;\n                            var _c = __read(_a, 2), k = _c[0], v = _c[1];\n                            return (__assign(__assign({}, accum), (_b = {}, _b[k] = v, _b)));\n                        }, { code: undefined }).code;\n                        if (!code) {\n                            return [2 /*return*/];\n                        }\n                        oAuthTokenEndpoint = 'https://' + this._config.domain + '/oauth2/token';\n                        dispatchAuthEvent('codeFlow', {}, \"Retrieving tokens from \" + oAuthTokenEndpoint);\n                        client_id = isCognitoHostedOpts(this._config)\n                            ? this._cognitoClientId\n                            : this._config.clientID;\n                        redirect_uri = isCognitoHostedOpts(this._config)\n                            ? this._config.redirectSignIn\n                            : this._config.redirectUri;\n                        code_verifier = oAuthStorage.getPKCE();\n                        oAuthTokenBody = __assign({ grant_type: 'authorization_code', code: code,\n                            client_id: client_id,\n                            redirect_uri: redirect_uri }, (code_verifier ? { code_verifier: code_verifier } : {}));\n                        logger.debug(\"Calling token endpoint: \" + oAuthTokenEndpoint + \" with\", oAuthTokenBody);\n                        body = Object.entries(oAuthTokenBody)\n                            .map(function (_a) {\n                            var _b = __read(_a, 2), k = _b[0], v = _b[1];\n                            return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n                        })\n                            .join('&');\n                        return [4 /*yield*/, fetch(oAuthTokenEndpoint, {\n                                method: 'POST',\n                                headers: {\n                                    'Content-Type': 'application/x-www-form-urlencoded',\n                                },\n                                body: body,\n                            })];\n                    case 1: return [4 /*yield*/, (_b.sent()).json()];\n                    case 2:\n                        _a = _b.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token, id_token = _a.id_token, error = _a.error;\n                        if (error) {\n                            throw new Error(error);\n                        }\n                        return [2 /*return*/, {\n                                accessToken: access_token,\n                                refreshToken: refresh_token,\n                                idToken: id_token,\n                            }];\n                }\n            });\n        });\n    };\n    OAuth.prototype._handleImplicitFlow = function (currentUrl) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, id_token, access_token;\n            return __generator(this, function (_b) {\n                _a = (parse(currentUrl).hash || '#')\n                    .substr(1) // Remove # from returned code\n                    .split('&')\n                    .map(function (pairings) { return pairings.split('='); })\n                    .reduce(function (accum, _a) {\n                    var _b;\n                    var _c = __read(_a, 2), k = _c[0], v = _c[1];\n                    return (__assign(__assign({}, accum), (_b = {}, _b[k] = v, _b)));\n                }, {\n                    id_token: undefined,\n                    access_token: undefined,\n                }), id_token = _a.id_token, access_token = _a.access_token;\n                dispatchAuthEvent('implicitFlow', {}, \"Got tokens from \" + currentUrl);\n                logger.debug(\"Retrieving implicit tokens from \" + currentUrl + \" with\");\n                return [2 /*return*/, {\n                        accessToken: access_token,\n                        idToken: id_token,\n                        refreshToken: null,\n                    }];\n            });\n        });\n    };\n    OAuth.prototype.handleAuthResponse = function (currentUrl) {\n        return __awaiter(this, void 0, void 0, function () {\n            var urlParams, error, error_description, state, _a, _b, e_1;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0:\n                        _c.trys.push([0, 5, , 6]);\n                        urlParams = currentUrl\n                            ? __assign(__assign({}, (parse(currentUrl).hash || '#')\n                                .substr(1)\n                                .split('&')\n                                .map(function (entry) { return entry.split('='); })\n                                .reduce(function (acc, _a) {\n                                var _b = __read(_a, 2), k = _b[0], v = _b[1];\n                                return ((acc[k] = v), acc);\n                            }, {})), (parse(currentUrl).query || '')\n                                .split('&')\n                                .map(function (entry) { return entry.split('='); })\n                                .reduce(function (acc, _a) {\n                                var _b = __read(_a, 2), k = _b[0], v = _b[1];\n                                return ((acc[k] = v), acc);\n                            }, {}))\n                            : {};\n                        error = urlParams.error, error_description = urlParams.error_description;\n                        if (error) {\n                            throw new Error(error_description);\n                        }\n                        state = this._validateState(urlParams);\n                        logger.debug(\"Starting \" + this._config.responseType + \" flow with \" + currentUrl);\n                        if (!(this._config.responseType === 'code')) return [3 /*break*/, 2];\n                        _a = [{}];\n                        return [4 /*yield*/, this._handleCodeFlow(currentUrl)];\n                    case 1: return [2 /*return*/, __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { state: state }])];\n                    case 2:\n                        _b = [{}];\n                        return [4 /*yield*/, this._handleImplicitFlow(currentUrl)];\n                    case 3: return [2 /*return*/, __assign.apply(void 0, [__assign.apply(void 0, _b.concat([(_c.sent())])), { state: state }])];\n                    case 4: return [3 /*break*/, 6];\n                    case 5:\n                        e_1 = _c.sent();\n                        logger.error(\"Error handling auth response.\", e_1);\n                        throw e_1;\n                    case 6: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    OAuth.prototype._validateState = function (urlParams) {\n        if (!urlParams) {\n            return;\n        }\n        var savedState = oAuthStorage.getState();\n        var returnedState = urlParams.state;\n        // This is because savedState only exists if the flow was initiated by Amplify\n        if (savedState && savedState !== returnedState) {\n            throw new Error('Invalid state in OAuth flow');\n        }\n        return returnedState;\n    };\n    OAuth.prototype.signOut = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var oAuthLogoutEndpoint, client_id, signout_uri;\n            return __generator(this, function (_a) {\n                oAuthLogoutEndpoint = 'https://' + this._config.domain + '/logout?';\n                client_id = isCognitoHostedOpts(this._config)\n                    ? this._cognitoClientId\n                    : this._config.oauth.clientID;\n                signout_uri = isCognitoHostedOpts(this._config)\n                    ? this._config.redirectSignOut\n                    : this._config.returnTo;\n                oAuthLogoutEndpoint += Object.entries({\n                    client_id: client_id,\n                    logout_uri: encodeURIComponent(signout_uri),\n                })\n                    .map(function (_a) {\n                    var _b = __read(_a, 2), k = _b[0], v = _b[1];\n                    return k + \"=\" + v;\n                })\n                    .join('&');\n                dispatchAuthEvent('oAuthSignOut', { oAuth: 'signOut' }, \"Signing out from \" + oAuthLogoutEndpoint);\n                logger.debug(\"Signing out from \" + oAuthLogoutEndpoint);\n                return [2 /*return*/, this._urlOpener(oAuthLogoutEndpoint)];\n            });\n        });\n    };\n    OAuth.prototype._generateState = function (length) {\n        var result = '';\n        var i = length;\n        var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n        for (; i > 0; --i)\n            result += chars[Math.round(Math.random() * (chars.length - 1))];\n        return result;\n    };\n    OAuth.prototype._generateChallenge = function (code) {\n        return this._base64URL(sha256(code));\n    };\n    OAuth.prototype._base64URL = function (string) {\n        return string\n            .toString(Base64)\n            .replace(/=/g, '')\n            .replace(/\\+/g, '-')\n            .replace(/\\//g, '_');\n    };\n    OAuth.prototype._generateRandom = function (size) {\n        var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n        var buffer = new Uint8Array(size);\n        if (typeof window !== 'undefined' && !!window.crypto) {\n            window.crypto.getRandomValues(buffer);\n        }\n        else {\n            for (var i = 0; i < size; i += 1) {\n                buffer[i] = (Math.random() * CHARSET.length) | 0;\n            }\n        }\n        return this._bufferToString(buffer);\n    };\n    OAuth.prototype._bufferToString = function (buffer) {\n        var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n        var state = [];\n        for (var i = 0; i < buffer.byteLength; i += 1) {\n            var index = buffer[i] % CHARSET.length;\n            state.push(CHARSET[index]);\n        }\n        return state.join('');\n    };\n    return OAuth;\n}());\nexport default OAuth;\n//# sourceMappingURL=OAuth.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport var setState = function (state) {\n    window.sessionStorage.setItem('oauth_state', state);\n};\nexport var getState = function () {\n    var oauth_state = window.sessionStorage.getItem('oauth_state');\n    window.sessionStorage.removeItem('oauth_state');\n    return oauth_state;\n};\nexport var setPKCE = function (private_key) {\n    window.sessionStorage.setItem('ouath_pkce_key', private_key);\n};\nexport var getPKCE = function () {\n    var ouath_pkce_key = window.sessionStorage.getItem('ouath_pkce_key');\n    window.sessionStorage.removeItem('ouath_pkce_key');\n    return ouath_pkce_key;\n};\nexport var clearAll = function () {\n    window.sessionStorage.removeItem('ouath_pkce_key');\n    window.sessionStorage.removeItem('oauth_state');\n};\n//# sourceMappingURL=oauthStorage.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar SELF = '_self';\nexport var launchUri = function (url) {\n    var windowProxy = window.open(url, SELF);\n    if (windowProxy) {\n        return Promise.resolve(windowProxy);\n    }\n    else {\n        return Promise.reject();\n    }\n};\n//# sourceMappingURL=urlOpener.js.map","export var AuthErrorStrings;\n(function (AuthErrorStrings) {\n    AuthErrorStrings[\"DEFAULT_MSG\"] = \"Authentication Error\";\n    AuthErrorStrings[\"EMPTY_USERNAME\"] = \"Username cannot be empty\";\n    AuthErrorStrings[\"INVALID_USERNAME\"] = \"The username should either be a string or one of the sign in types\";\n    AuthErrorStrings[\"EMPTY_PASSWORD\"] = \"Password cannot be empty\";\n    AuthErrorStrings[\"EMPTY_CODE\"] = \"Confirmation code cannot be empty\";\n    AuthErrorStrings[\"SIGN_UP_ERROR\"] = \"Error creating account\";\n    AuthErrorStrings[\"NO_MFA\"] = \"No valid MFA method provided\";\n    AuthErrorStrings[\"INVALID_MFA\"] = \"Invalid MFA type\";\n    AuthErrorStrings[\"EMPTY_CHALLENGE\"] = \"Challenge response cannot be empty\";\n    AuthErrorStrings[\"NO_USER_SESSION\"] = \"Failed to get the session because the user is empty\";\n})(AuthErrorStrings || (AuthErrorStrings = {}));\n//# sourceMappingURL=AuthErrorStrings.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { Auth } from './Auth';\nimport { CognitoHostedUIIdentityProvider } from './types/Auth';\nimport { CognitoUser, CookieStorage, appendToCognitoUserAgent, } from 'amazon-cognito-identity-js';\nimport { AuthErrorStrings } from './common/AuthErrorStrings';\n/**\n * @deprecated use named import\n */\nexport default Auth;\nexport { Auth, CognitoUser, CookieStorage, CognitoHostedUIIdentityProvider, appendToCognitoUserAgent, AuthErrorStrings, };\n//# sourceMappingURL=index.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport var CognitoHostedUIIdentityProvider;\n(function (CognitoHostedUIIdentityProvider) {\n    CognitoHostedUIIdentityProvider[\"Cognito\"] = \"COGNITO\";\n    CognitoHostedUIIdentityProvider[\"Google\"] = \"Google\";\n    CognitoHostedUIIdentityProvider[\"Facebook\"] = \"Facebook\";\n    CognitoHostedUIIdentityProvider[\"Amazon\"] = \"LoginWithAmazon\";\n    CognitoHostedUIIdentityProvider[\"Apple\"] = \"SignInWithApple\";\n})(CognitoHostedUIIdentityProvider || (CognitoHostedUIIdentityProvider = {}));\nexport function isFederatedSignInOptions(obj) {\n    var keys = ['provider'];\n    return obj && !!keys.find(function (k) { return obj.hasOwnProperty(k); });\n}\nexport function isFederatedSignInOptionsCustom(obj) {\n    var keys = ['customProvider'];\n    return obj && !!keys.find(function (k) { return obj.hasOwnProperty(k); });\n}\nexport function hasCustomState(obj) {\n    var keys = ['customState'];\n    return obj && !!keys.find(function (k) { return obj.hasOwnProperty(k); });\n}\nexport function isCognitoHostedOpts(oauth) {\n    return oauth.redirectSignIn !== undefined;\n}\nexport var AuthErrorTypes;\n(function (AuthErrorTypes) {\n    AuthErrorTypes[\"NoConfig\"] = \"noConfig\";\n    AuthErrorTypes[\"MissingAuthConfig\"] = \"missingAuthConfig\";\n    AuthErrorTypes[\"EmptyUsername\"] = \"emptyUsername\";\n    AuthErrorTypes[\"InvalidUsername\"] = \"invalidUsername\";\n    AuthErrorTypes[\"EmptyPassword\"] = \"emptyPassword\";\n    AuthErrorTypes[\"EmptyCode\"] = \"emptyCode\";\n    AuthErrorTypes[\"SignUpError\"] = \"signUpError\";\n    AuthErrorTypes[\"NoMFA\"] = \"noMFA\";\n    AuthErrorTypes[\"InvalidMFA\"] = \"invalidMFA\";\n    AuthErrorTypes[\"EmptyChallengeResponse\"] = \"emptyChallengeResponse\";\n    AuthErrorTypes[\"NoUserSession\"] = \"noUserSession\";\n    AuthErrorTypes[\"Default\"] = \"default\";\n})(AuthErrorTypes || (AuthErrorTypes = {}));\nexport function isUsernamePasswordOpts(obj) {\n    return !!obj.username;\n}\n//# sourceMappingURL=Auth.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport * from './Auth';\n//# sourceMappingURL=index.js.map","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { JS } from '@aws-amplify/core';\nexport default (function (callback) {\n    if (JS.browserOrNode().isBrowser && window.location) {\n        var url = window.location.href;\n        callback({ url: url });\n    }\n    else if (JS.browserOrNode().isNode) {\n        // continue building on ssr\n        (function () { }); // noop\n    }\n    else {\n        throw new Error('Not supported');\n    }\n});\n//# sourceMappingURL=urlListener.js.map","var __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nimport { ConsoleLogger as LoggerClass } from './Logger';\nvar logger = new LoggerClass('Amplify');\nvar AmplifyClass = /** @class */ (function () {\n    function AmplifyClass() {\n        // Everything that is `register`ed is tracked here\n        this._components = [];\n        this._config = {};\n        // All modules (with `getModuleName()`) are stored here for dependency injection\n        this._modules = {};\n        // for backward compatibility to avoid breaking change\n        // if someone is using like Amplify.Auth\n        this.Auth = null;\n        this.Analytics = null;\n        this.API = null;\n        this.Credentials = null;\n        this.Storage = null;\n        this.I18n = null;\n        this.Cache = null;\n        this.PubSub = null;\n        this.Interactions = null;\n        this.Pushnotification = null;\n        this.UI = null;\n        this.XR = null;\n        this.Predictions = null;\n        this.DataStore = null;\n        this.Logger = LoggerClass;\n        this.ServiceWorker = null;\n    }\n    AmplifyClass.prototype.register = function (comp) {\n        logger.debug('component registered in amplify', comp);\n        this._components.push(comp);\n        if (typeof comp.getModuleName === 'function') {\n            this._modules[comp.getModuleName()] = comp;\n            this[comp.getModuleName()] = comp;\n        }\n        else {\n            logger.debug('no getModuleName method for component', comp);\n        }\n        // Finally configure this new component(category) loaded\n        // With the new modularization changes in Amplify V3, all the Amplify\n        // component are not loaded/registered right away but when they are\n        // imported (and hence instantiated) in the client's app. This ensures\n        // that all new components imported get correctly configured with the\n        // configuration that Amplify.configure() was called with.\n        comp.configure(this._config);\n    };\n    AmplifyClass.prototype.configure = function (config) {\n        var _this = this;\n        if (!config)\n            return this._config;\n        this._config = Object.assign(this._config, config);\n        logger.debug('amplify config', this._config);\n        // Dependency Injection via property-setting.\n        // This avoids introducing a public method/interface/setter that's difficult to remove later.\n        // Plus, it reduces `if` statements within the `constructor` and `configure` of each module\n        Object.entries(this._modules).forEach(function (_a) {\n            var _b = __read(_a, 2), Name = _b[0], comp = _b[1];\n            // e.g. Auth.*\n            Object.keys(comp).forEach(function (property) {\n                // e.g. Auth[\"Credentials\"] = this._modules[\"Credentials\"] when set\n                if (_this._modules[property]) {\n                    comp[property] = _this._modules[property];\n                }\n            });\n        });\n        this._components.map(function (comp) {\n            comp.configure(_this._config);\n        });\n        return this._config;\n    };\n    AmplifyClass.prototype.addPluggable = function (pluggable) {\n        if (pluggable &&\n            pluggable['getCategory'] &&\n            typeof pluggable['getCategory'] === 'function') {\n            this._components.map(function (comp) {\n                if (comp['addPluggable'] &&\n                    typeof comp['addPluggable'] === 'function') {\n                    comp.addPluggable(pluggable);\n                }\n            });\n        }\n    };\n    return AmplifyClass;\n}());\nexport { AmplifyClass };\nexport var Amplify = new AmplifyClass();\n/**\n * @deprecated use named import\n */\nexport default Amplify;\n//# sourceMappingURL=Amplify.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { ConsoleLogger as Logger } from '../Logger';\nvar logger = new Logger('ClientDevice_Browser');\nexport function clientInfo() {\n    if (typeof window === 'undefined') {\n        return {};\n    }\n    return browserClientInfo();\n}\nfunction browserClientInfo() {\n    if (typeof window === 'undefined') {\n        logger.warn('No window object available to get browser client info');\n        return {};\n    }\n    var nav = window.navigator;\n    if (!nav) {\n        logger.warn('No navigator object available to get browser client info');\n        return {};\n    }\n    var platform = nav.platform, product = nav.product, vendor = nav.vendor, userAgent = nav.userAgent, language = nav.language;\n    var type = browserType(userAgent);\n    var timezone = browserTimezone();\n    return {\n        platform: platform,\n        make: product || vendor,\n        model: type.type,\n        version: type.version,\n        appVersion: [type.type, type.version].join('/'),\n        language: language,\n        timezone: timezone,\n    };\n}\nexport function dimension() {\n    if (typeof window === 'undefined') {\n        logger.warn('No window object available to get browser client info');\n        return { width: 320, height: 320 };\n    }\n    return {\n        width: window.innerWidth,\n        height: window.innerHeight,\n    };\n}\nfunction browserTimezone() {\n    var tzMatch = /\\(([A-Za-z\\s].*)\\)/.exec(new Date().toString());\n    return tzMatch ? tzMatch[1] || '' : '';\n}\nfunction browserType(userAgent) {\n    var operaMatch = /.+(Opera[\\s[A-Z]*|OPR[\\sA-Z]*)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (operaMatch) {\n        return { type: operaMatch[1], version: operaMatch[2] };\n    }\n    var ieMatch = /.+(Trident|Edge)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (ieMatch) {\n        return { type: ieMatch[1], version: ieMatch[2] };\n    }\n    var cfMatch = /.+(Chrome|Firefox|FxiOS)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (cfMatch) {\n        return { type: cfMatch[1], version: cfMatch[2] };\n    }\n    var sMatch = /.+(Safari)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (sMatch) {\n        return { type: sMatch[1], version: sMatch[2] };\n    }\n    var awkMatch = /.+(AppleWebKit)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (awkMatch) {\n        return { type: awkMatch[1], version: awkMatch[2] };\n    }\n    var anyMatch = /.*([A-Z]+)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (anyMatch) {\n        return { type: anyMatch[1], version: anyMatch[2] };\n    }\n    return { type: '', version: '' };\n}\n//# sourceMappingURL=browser.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { clientInfo, dimension } from './browser';\nvar ClientDevice = /** @class */ (function () {\n    function ClientDevice() {\n    }\n    ClientDevice.clientInfo = function () {\n        return clientInfo();\n    };\n    ClientDevice.dimension = function () {\n        return dimension();\n    };\n    return ClientDevice;\n}());\nexport { ClientDevice };\n/**\n * @deprecated use named import\n */\nexport default ClientDevice;\n//# sourceMappingURL=index.js.map","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nimport { ConsoleLogger as Logger } from './Logger';\nimport { StorageHelper } from './StorageHelper';\nimport { makeQuerablePromise } from './JS';\nimport { FacebookOAuth, GoogleOAuth } from './OAuthHelper';\nimport { jitteredExponentialRetry } from './Util';\nimport { getAmplifyUserAgent } from './Platform';\nimport { Amplify } from './Amplify';\nimport { fromCognitoIdentity, fromCognitoIdentityPool, } from '@aws-sdk/credential-provider-cognito-identity';\nimport { CognitoIdentityClient, GetIdCommand, } from '@aws-sdk/client-cognito-identity';\nvar logger = new Logger('Credentials');\nvar CREDENTIALS_TTL = 50 * 60 * 1000; // 50 min, can be modified on config if required in the future\nvar CredentialsClass = /** @class */ (function () {\n    function CredentialsClass(config) {\n        this._gettingCredPromise = null;\n        this._refreshHandlers = {};\n        // `Amplify.Auth` will either be `Auth` or `null` depending on if Auth was imported\n        this.Auth = Amplify.Auth;\n        this.configure(config);\n        this._refreshHandlers['google'] = GoogleOAuth.refreshGoogleToken;\n        this._refreshHandlers['facebook'] = FacebookOAuth.refreshFacebookToken;\n    }\n    CredentialsClass.prototype.getModuleName = function () {\n        return 'Credentials';\n    };\n    CredentialsClass.prototype.getCredSource = function () {\n        return this._credentials_source;\n    };\n    CredentialsClass.prototype.configure = function (config) {\n        if (!config)\n            return this._config || {};\n        this._config = Object.assign({}, this._config, config);\n        var refreshHandlers = this._config.refreshHandlers;\n        // If the developer has provided an object of refresh handlers,\n        // then we can merge the provided handlers with the current handlers.\n        if (refreshHandlers) {\n            this._refreshHandlers = __assign(__assign({}, this._refreshHandlers), refreshHandlers);\n        }\n        this._storage = this._config.storage;\n        if (!this._storage) {\n            this._storage = new StorageHelper().getStorage();\n        }\n        this._storageSync = Promise.resolve();\n        if (typeof this._storage['sync'] === 'function') {\n            this._storageSync = this._storage['sync']();\n        }\n        return this._config;\n    };\n    CredentialsClass.prototype.get = function () {\n        logger.debug('getting credentials');\n        return this._pickupCredentials();\n    };\n    CredentialsClass.prototype._pickupCredentials = function () {\n        logger.debug('picking up credentials');\n        if (!this._gettingCredPromise || !this._gettingCredPromise.isPending()) {\n            logger.debug('getting new cred promise');\n            this._gettingCredPromise = makeQuerablePromise(this._keepAlive());\n        }\n        else {\n            logger.debug('getting old cred promise');\n        }\n        return this._gettingCredPromise;\n    };\n    CredentialsClass.prototype._keepAlive = function () {\n        logger.debug('checking if credentials exists and not expired');\n        var cred = this._credentials;\n        if (cred && !this._isExpired(cred)) {\n            logger.debug('credentials not changed and not expired, directly return');\n            return Promise.resolve(cred);\n        }\n        logger.debug('need to get a new credential or refresh the existing one');\n        // Some use-cases don't require Auth for signing in, but use Credentials for guest users (e.g. Analytics)\n        if (this.Auth && typeof this.Auth.currentUserCredentials === 'function') {\n            return this.Auth.currentUserCredentials();\n        }\n        else {\n            return Promise.reject('No Auth module registered in Amplify');\n        }\n    };\n    CredentialsClass.prototype.refreshFederatedToken = function (federatedInfo) {\n        logger.debug('Getting federated credentials');\n        var provider = federatedInfo.provider, user = federatedInfo.user, token = federatedInfo.token, identity_id = federatedInfo.identity_id;\n        var expires_at = federatedInfo.expires_at;\n        // Make sure expires_at is in millis\n        expires_at =\n            new Date(expires_at).getFullYear() === 1970\n                ? expires_at * 1000\n                : expires_at;\n        var that = this;\n        logger.debug('checking if federated jwt token expired');\n        if (expires_at > new Date().getTime()) {\n            // if not expired\n            logger.debug('token not expired');\n            return this._setCredentialsFromFederation({\n                provider: provider,\n                token: token,\n                user: user,\n                identity_id: identity_id,\n                expires_at: expires_at,\n            });\n        }\n        else {\n            // if refresh handler exists\n            if (that._refreshHandlers[provider] &&\n                typeof that._refreshHandlers[provider] === 'function') {\n                logger.debug('getting refreshed jwt token from federation provider');\n                return this._providerRefreshWithRetry({\n                    refreshHandler: that._refreshHandlers[provider],\n                    provider: provider,\n                    user: user,\n                });\n            }\n            else {\n                logger.debug('no refresh handler for provider:', provider);\n                this.clear();\n                return Promise.reject('no refresh handler for provider');\n            }\n        }\n    };\n    CredentialsClass.prototype._providerRefreshWithRetry = function (_a) {\n        var _this = this;\n        var refreshHandler = _a.refreshHandler, provider = _a.provider, user = _a.user;\n        var MAX_DELAY_MS = 10 * 1000;\n        // refreshHandler will retry network errors, otherwise it will\n        // return NonRetryableError to break out of jitteredExponentialRetry\n        return jitteredExponentialRetry(refreshHandler, [], MAX_DELAY_MS)\n            .then(function (data) {\n            logger.debug('refresh federated token sucessfully', data);\n            return _this._setCredentialsFromFederation({\n                provider: provider,\n                token: data.token,\n                user: user,\n                identity_id: data.identity_id,\n                expires_at: data.expires_at,\n            });\n        })\n            .catch(function (e) {\n            var isNetworkError = typeof e === 'string' &&\n                e.toLowerCase().lastIndexOf('network error', e.length) === 0;\n            if (!isNetworkError) {\n                _this.clear();\n            }\n            logger.debug('refresh federated token failed', e);\n            return Promise.reject('refreshing federation token failed: ' + e);\n        });\n    };\n    CredentialsClass.prototype._isExpired = function (credentials) {\n        if (!credentials) {\n            logger.debug('no credentials for expiration check');\n            return true;\n        }\n        logger.debug('are these credentials expired?', credentials);\n        var ts = Date.now();\n        var delta = 10 * 60 * 1000; // 10 minutes in milli seconds\n        /* returns date object.\n            https://github.com/aws/aws-sdk-js-v3/blob/v1.0.0-beta.1/packages/types/src/credentials.ts#L26\n        */\n        var expiration = credentials.expiration;\n        if (expiration.getTime() > ts + delta &&\n            ts < this._nextCredentialsRefresh) {\n            return false;\n        }\n        return true;\n    };\n    CredentialsClass.prototype._setCredentialsForGuest = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, identityPoolId, region, mandatorySignIn, identityId, e_1, cognitoClient, credentials, cognitoIdentityParams, credentialsProvider;\n            var _this = this;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        logger.debug('setting credentials for guest');\n                        _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region, mandatorySignIn = _a.mandatorySignIn;\n                        if (mandatorySignIn) {\n                            return [2 /*return*/, Promise.reject('cannot get guest credentials when mandatory signin enabled')];\n                        }\n                        if (!identityPoolId) {\n                            logger.debug('No Cognito Identity pool provided for unauthenticated access');\n                            return [2 /*return*/, Promise.reject('No Cognito Identity pool provided for unauthenticated access')];\n                        }\n                        if (!region) {\n                            logger.debug('region is not configured for getting the credentials');\n                            return [2 /*return*/, Promise.reject('region is not configured for getting the credentials')];\n                        }\n                        identityId = undefined;\n                        _b.label = 1;\n                    case 1:\n                        _b.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 2:\n                        _b.sent();\n                        identityId = this._storage.getItem('CognitoIdentityId-' + identityPoolId);\n                        this._identityId = identityId;\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_1 = _b.sent();\n                        logger.debug('Failed to get the cached identityId', e_1);\n                        return [3 /*break*/, 4];\n                    case 4:\n                        cognitoClient = new CognitoIdentityClient({\n                            region: region,\n                            customUserAgent: getAmplifyUserAgent(),\n                        });\n                        credentials = undefined;\n                        if (identityId) {\n                            cognitoIdentityParams = {\n                                identityId: identityId,\n                                client: cognitoClient,\n                            };\n                            credentials = fromCognitoIdentity(cognitoIdentityParams)();\n                        }\n                        else {\n                            credentialsProvider = function () { return __awaiter(_this, void 0, void 0, function () {\n                                var IdentityId, cognitoIdentityParams, credentialsFromCognitoIdentity;\n                                return __generator(this, function (_a) {\n                                    switch (_a.label) {\n                                        case 0: return [4 /*yield*/, cognitoClient.send(new GetIdCommand({\n                                                IdentityPoolId: identityPoolId,\n                                            }))];\n                                        case 1:\n                                            IdentityId = (_a.sent()).IdentityId;\n                                            this._identityId = IdentityId;\n                                            cognitoIdentityParams = {\n                                                client: cognitoClient,\n                                                identityId: IdentityId,\n                                            };\n                                            credentialsFromCognitoIdentity = fromCognitoIdentity(cognitoIdentityParams);\n                                            return [2 /*return*/, credentialsFromCognitoIdentity()];\n                                    }\n                                });\n                            }); };\n                            credentials = credentialsProvider().catch(function (err) { return __awaiter(_this, void 0, void 0, function () {\n                                return __generator(this, function (_a) {\n                                    throw err;\n                                });\n                            }); });\n                        }\n                        return [2 /*return*/, this._loadCredentials(credentials, 'guest', false, null)\n                                .then(function (res) {\n                                return res;\n                            })\n                                .catch(function (e) { return __awaiter(_this, void 0, void 0, function () {\n                                var credentialsProvider;\n                                var _this = this;\n                                return __generator(this, function (_a) {\n                                    // If identity id is deleted in the console, we make one attempt to recreate it\n                                    // and remove existing id from cache.\n                                    if (e.name === 'ResourceNotFoundException' &&\n                                        e.message === \"Identity '\" + identityId + \"' not found.\") {\n                                        logger.debug('Failed to load guest credentials');\n                                        this._storage.removeItem('CognitoIdentityId-' + identityPoolId);\n                                        credentialsProvider = function () { return __awaiter(_this, void 0, void 0, function () {\n                                            var IdentityId, cognitoIdentityParams, credentialsFromCognitoIdentity;\n                                            return __generator(this, function (_a) {\n                                                switch (_a.label) {\n                                                    case 0: return [4 /*yield*/, cognitoClient.send(new GetIdCommand({\n                                                            IdentityPoolId: identityPoolId,\n                                                        }))];\n                                                    case 1:\n                                                        IdentityId = (_a.sent()).IdentityId;\n                                                        this._identityId = IdentityId;\n                                                        cognitoIdentityParams = {\n                                                            client: cognitoClient,\n                                                            identityId: IdentityId,\n                                                        };\n                                                        credentialsFromCognitoIdentity = fromCognitoIdentity(cognitoIdentityParams);\n                                                        return [2 /*return*/, credentialsFromCognitoIdentity()];\n                                                }\n                                            });\n                                        }); };\n                                        credentials = credentialsProvider().catch(function (err) { return __awaiter(_this, void 0, void 0, function () {\n                                            return __generator(this, function (_a) {\n                                                throw err;\n                                            });\n                                        }); });\n                                        return [2 /*return*/, this._loadCredentials(credentials, 'guest', false, null)];\n                                    }\n                                    else {\n                                        return [2 /*return*/, e];\n                                    }\n                                    return [2 /*return*/];\n                                });\n                            }); })];\n                }\n            });\n        });\n    };\n    CredentialsClass.prototype._setCredentialsFromFederation = function (params) {\n        var provider = params.provider, token = params.token, identity_id = params.identity_id;\n        var domains = {\n            google: 'accounts.google.com',\n            facebook: 'graph.facebook.com',\n            amazon: 'www.amazon.com',\n            developer: 'cognito-identity.amazonaws.com',\n        };\n        // Use custom provider url instead of the predefined ones\n        var domain = domains[provider] || provider;\n        if (!domain) {\n            return Promise.reject('You must specify a federated provider');\n        }\n        var logins = {};\n        logins[domain] = token;\n        var _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region;\n        if (!identityPoolId) {\n            logger.debug('No Cognito Federated Identity pool provided');\n            return Promise.reject('No Cognito Federated Identity pool provided');\n        }\n        if (!region) {\n            logger.debug('region is not configured for getting the credentials');\n            return Promise.reject('region is not configured for getting the credentials');\n        }\n        var cognitoClient = new CognitoIdentityClient({\n            region: region,\n            customUserAgent: getAmplifyUserAgent(),\n        });\n        var credentials = undefined;\n        if (identity_id) {\n            var cognitoIdentityParams = {\n                identityId: identity_id,\n                logins: logins,\n                client: cognitoClient,\n            };\n            credentials = fromCognitoIdentity(cognitoIdentityParams)();\n        }\n        else {\n            var cognitoIdentityParams = {\n                logins: logins,\n                identityPoolId: identityPoolId,\n                client: cognitoClient,\n            };\n            credentials = fromCognitoIdentityPool(cognitoIdentityParams)();\n        }\n        return this._loadCredentials(credentials, 'federated', true, params);\n    };\n    CredentialsClass.prototype._setCredentialsFromSession = function (session) {\n        var _this = this;\n        logger.debug('set credentials from session');\n        var idToken = session.getIdToken().getJwtToken();\n        var _a = this._config, region = _a.region, userPoolId = _a.userPoolId, identityPoolId = _a.identityPoolId;\n        if (!identityPoolId) {\n            logger.debug('No Cognito Federated Identity pool provided');\n            return Promise.reject('No Cognito Federated Identity pool provided');\n        }\n        if (!region) {\n            logger.debug('region is not configured for getting the credentials');\n            return Promise.reject('region is not configured for getting the credentials');\n        }\n        var key = 'cognito-idp.' + region + '.amazonaws.com/' + userPoolId;\n        var logins = {};\n        logins[key] = idToken;\n        var cognitoClient = new CognitoIdentityClient({\n            region: region,\n            customUserAgent: getAmplifyUserAgent(),\n        });\n        /*\n            Retreiving identityId with GetIdCommand to mimic the behavior in the following code in aws-sdk-v3:\n            https://git.io/JeDxU\n\n            Note: Retreive identityId from CredentialsProvider once aws-sdk-js v3 supports this.\n        */\n        var credentialsProvider = function () { return __awaiter(_this, void 0, void 0, function () {\n            var IdentityId, cognitoIdentityParams, credentialsFromCognitoIdentity;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, cognitoClient.send(new GetIdCommand({\n                            IdentityPoolId: identityPoolId,\n                            Logins: logins,\n                        }))];\n                    case 1:\n                        IdentityId = (_a.sent()).IdentityId;\n                        this._identityId = IdentityId;\n                        cognitoIdentityParams = {\n                            client: cognitoClient,\n                            logins: logins,\n                            identityId: IdentityId,\n                        };\n                        credentialsFromCognitoIdentity = fromCognitoIdentity(cognitoIdentityParams);\n                        return [2 /*return*/, credentialsFromCognitoIdentity()];\n                }\n            });\n        }); };\n        var credentials = credentialsProvider().catch(function (err) { return __awaiter(_this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                throw err;\n            });\n        }); });\n        return this._loadCredentials(credentials, 'userPool', true, null);\n    };\n    CredentialsClass.prototype._loadCredentials = function (credentials, source, authenticated, info) {\n        var _this = this;\n        var that = this;\n        var identityPoolId = this._config.identityPoolId;\n        return new Promise(function (res, rej) {\n            credentials\n                .then(function (credentials) { return __awaiter(_this, void 0, void 0, function () {\n                var user, provider, token, expires_at, identity_id, e_2;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            logger.debug('Load credentials successfully', credentials);\n                            if (this._identityId && !credentials.identityId) {\n                                credentials['identityId'] = this._identityId;\n                            }\n                            that._credentials = credentials;\n                            that._credentials.authenticated = authenticated;\n                            that._credentials_source = source;\n                            that._nextCredentialsRefresh = new Date().getTime() + CREDENTIALS_TTL;\n                            if (source === 'federated') {\n                                user = Object.assign({ id: this._credentials.identityId }, info.user);\n                                provider = info.provider, token = info.token, expires_at = info.expires_at, identity_id = info.identity_id;\n                                try {\n                                    this._storage.setItem('aws-amplify-federatedInfo', JSON.stringify({\n                                        provider: provider,\n                                        token: token,\n                                        user: user,\n                                        expires_at: expires_at,\n                                        identity_id: identity_id,\n                                    }));\n                                }\n                                catch (e) {\n                                    logger.debug('Failed to put federated info into auth storage', e);\n                                }\n                            }\n                            if (!(source === 'guest')) return [3 /*break*/, 4];\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 3, , 4]);\n                            return [4 /*yield*/, this._storageSync];\n                        case 2:\n                            _a.sent();\n                            this._storage.setItem('CognitoIdentityId-' + identityPoolId, credentials.identityId // TODO: IdentityId is currently not returned by fromCognitoIdentityPool()\n                            );\n                            return [3 /*break*/, 4];\n                        case 3:\n                            e_2 = _a.sent();\n                            logger.debug('Failed to cache identityId', e_2);\n                            return [3 /*break*/, 4];\n                        case 4:\n                            res(that._credentials);\n                            return [2 /*return*/];\n                    }\n                });\n            }); })\n                .catch(function (err) {\n                if (err) {\n                    logger.debug('Failed to load credentials', credentials);\n                    logger.debug('Error loading credentials', err);\n                    rej(err);\n                    return;\n                }\n            });\n        });\n    };\n    CredentialsClass.prototype.set = function (params, source) {\n        if (source === 'session') {\n            return this._setCredentialsFromSession(params);\n        }\n        else if (source === 'federation') {\n            return this._setCredentialsFromFederation(params);\n        }\n        else if (source === 'guest') {\n            return this._setCredentialsForGuest();\n        }\n        else {\n            logger.debug('no source specified for setting credentials');\n            return Promise.reject('invalid source');\n        }\n    };\n    CredentialsClass.prototype.clear = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                this._credentials = null;\n                this._credentials_source = null;\n                logger.debug('removing aws-amplify-federatedInfo from storage');\n                this._storage.removeItem('aws-amplify-federatedInfo');\n                return [2 /*return*/];\n            });\n        });\n    };\n    /**\n     * Compact version of credentials\n     * @param {Object} credentials\n     * @return {Object} - Credentials\n     */\n    CredentialsClass.prototype.shear = function (credentials) {\n        return {\n            accessKeyId: credentials.accessKeyId,\n            sessionToken: credentials.sessionToken,\n            secretAccessKey: credentials.secretAccessKey,\n            identityId: credentials.identityId,\n            authenticated: credentials.authenticated,\n        };\n    };\n    return CredentialsClass;\n}());\nexport { CredentialsClass };\nexport var Credentials = new CredentialsClass(null);\nAmplify.register(Credentials);\n/**\n * @deprecated use named import\n */\nexport default Credentials;\n//# sourceMappingURL=Credentials.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport function missingConfig(name) {\n    return new Error('Missing config value of ' + name);\n}\nexport function invalidParameter(name) {\n    return new Error('Invalid parameter value of ' + name);\n}\n//# sourceMappingURL=Errors.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n    return ar;\n};\nimport { ConsoleLogger as Logger } from './Logger';\nvar logger = new Logger('Hub');\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n    typeof Symbol.for === 'function'\n    ? Symbol.for('amplify_default')\n    : '@@amplify_default');\nfunction isLegacyCallback(callback) {\n    return callback.onHubCapsule !== undefined;\n}\nvar HubClass = /** @class */ (function () {\n    function HubClass(name) {\n        this.listeners = [];\n        this.patterns = [];\n        this.protectedChannels = [\n            'core',\n            'auth',\n            'api',\n            'analytics',\n            'interactions',\n            'pubsub',\n            'storage',\n            'xr',\n        ];\n        this.name = name;\n    }\n    // Note - Need to pass channel as a reference for removal to work and not anonymous function\n    HubClass.prototype.remove = function (channel, listener) {\n        if (channel instanceof RegExp) {\n            var pattern_1 = this.patterns.find(function (_a) {\n                var pattern = _a.pattern;\n                return pattern.source === channel.source;\n            });\n            if (!pattern_1) {\n                logger.warn(\"No listeners for \" + channel);\n                return;\n            }\n            this.patterns = __spread(this.patterns.filter(function (x) { return x !== pattern_1; }));\n        }\n        else {\n            var holder = this.listeners[channel];\n            if (!holder) {\n                logger.warn(\"No listeners for \" + channel);\n                return;\n            }\n            this.listeners[channel] = __spread(holder.filter(function (_a) {\n                var callback = _a.callback;\n                return callback !== listener;\n            }));\n        }\n    };\n    HubClass.prototype.dispatch = function (channel, payload, source, ampSymbol) {\n        if (source === void 0) { source = ''; }\n        if (this.protectedChannels.indexOf(channel) > -1) {\n            var hasAccess = ampSymbol === AMPLIFY_SYMBOL;\n            if (!hasAccess) {\n                logger.warn(\"WARNING: \" + channel + \" is protected and dispatching on it can have unintended consequences\");\n            }\n        }\n        var capsule = {\n            channel: channel,\n            payload: __assign({}, payload),\n            source: source,\n            patternInfo: [],\n        };\n        try {\n            this._toListeners(capsule);\n        }\n        catch (e) {\n            logger.error(e);\n        }\n    };\n    HubClass.prototype.listen = function (channel, callback, listenerName) {\n        var _this = this;\n        if (listenerName === void 0) { listenerName = 'noname'; }\n        var cb;\n        // Check for legacy onHubCapsule callback for backwards compatability\n        if (isLegacyCallback(callback)) {\n            logger.warn(\"WARNING onHubCapsule is Deprecated. Please pass in a callback.\");\n            cb = callback.onHubCapsule.bind(callback);\n        }\n        else if (typeof callback !== 'function') {\n            throw new Error('No callback supplied to Hub');\n        }\n        else {\n            cb = callback;\n        }\n        if (channel instanceof RegExp) {\n            this.patterns.push({\n                pattern: channel,\n                callback: cb,\n            });\n        }\n        else {\n            var holder = this.listeners[channel];\n            if (!holder) {\n                holder = [];\n                this.listeners[channel] = holder;\n            }\n            holder.push({\n                name: listenerName,\n                callback: cb,\n            });\n        }\n        return function () {\n            _this.remove(channel, cb);\n        };\n    };\n    HubClass.prototype._toListeners = function (capsule) {\n        var channel = capsule.channel, payload = capsule.payload;\n        var holder = this.listeners[channel];\n        if (holder) {\n            holder.forEach(function (listener) {\n                logger.debug(\"Dispatching to \" + channel + \" with \", payload);\n                try {\n                    listener.callback(capsule);\n                }\n                catch (e) {\n                    logger.error(e);\n                }\n            });\n        }\n        if (this.patterns.length > 0) {\n            if (!payload.message) {\n                logger.warn(\"Cannot perform pattern matching without a message key\");\n                return;\n            }\n            var payloadStr_1 = payload.message;\n            this.patterns.forEach(function (pattern) {\n                var match = payloadStr_1.match(pattern.pattern);\n                if (match) {\n                    var _a = __read(match), groups = _a.slice(1);\n                    var dispatchingCapsule = __assign(__assign({}, capsule), { patternInfo: groups });\n                    try {\n                        pattern.callback(dispatchingCapsule);\n                    }\n                    catch (e) {\n                        logger.error(e);\n                    }\n                }\n            });\n        }\n    };\n    return HubClass;\n}());\nexport { HubClass };\n/*We export a __default__ instance of HubClass to use it as a\npsuedo Singleton for the main messaging bus, however you can still create\nyour own instance of HubClass() for a separate \"private bus\" of events.*/\nexport var Hub = new HubClass('__default__');\n/**\n * @deprecated use named import\n */\nexport default Hub;\n//# sourceMappingURL=Hub.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { ConsoleLogger as Logger } from '../Logger';\nvar logger = new Logger('I18n');\n/**\n * Language transition class\n */\nvar I18n = /** @class */ (function () {\n    /**\n     * @constructor\n     * Initialize with configurations\n     * @param {Object} options\n     */\n    function I18n(options) {\n        /**\n         * @private\n         */\n        this._options = null;\n        /**\n         * @private\n         */\n        this._lang = null;\n        /**\n         * @private\n         */\n        this._dict = {};\n        this._options = Object.assign({}, options);\n        this._lang = this._options.language;\n        if (!this._lang &&\n            typeof window !== 'undefined' &&\n            window &&\n            window.navigator) {\n            this._lang = window.navigator.language;\n        }\n        logger.debug(this._lang);\n    }\n    /**\n     * @method\n     * Explicitly setting language\n     * @param {String} lang\n     */\n    I18n.prototype.setLanguage = function (lang) {\n        this._lang = lang;\n    };\n    /**\n     * @method\n     * Get value\n     * @param {String} key\n     * @param {String} defVal - Default value\n     */\n    I18n.prototype.get = function (key, defVal) {\n        if (defVal === void 0) { defVal = undefined; }\n        if (!this._lang) {\n            return typeof defVal !== 'undefined' ? defVal : key;\n        }\n        var lang = this._lang;\n        var val = this.getByLanguage(key, lang);\n        if (val) {\n            return val;\n        }\n        if (lang.indexOf('-') > 0) {\n            val = this.getByLanguage(key, lang.split('-')[0]);\n        }\n        if (val) {\n            return val;\n        }\n        return typeof defVal !== 'undefined' ? defVal : key;\n    };\n    /**\n     * @method\n     * Get value according to specified language\n     * @param {String} key\n     * @param {String} language - Specified langurage to be used\n     * @param {String} defVal - Default value\n     */\n    I18n.prototype.getByLanguage = function (key, language, defVal) {\n        if (defVal === void 0) { defVal = null; }\n        if (!language) {\n            return defVal;\n        }\n        var lang_dict = this._dict[language];\n        if (!lang_dict) {\n            return defVal;\n        }\n        return lang_dict[key];\n    };\n    /**\n     * @method\n     * Add vocabularies for one language\n     * @param {String} language - Language of the dictionary\n     * @param {Object} vocabularies - Object that has key-value as dictionary entry\n     */\n    I18n.prototype.putVocabulariesForLanguage = function (language, vocabularies) {\n        var lang_dict = this._dict[language];\n        if (!lang_dict) {\n            lang_dict = this._dict[language] = {};\n        }\n        Object.assign(lang_dict, vocabularies);\n    };\n    /**\n     * @method\n     * Add vocabularies for one language\n     * @param {Object} vocabularies - Object that has language as key,\n     *                                vocabularies of each language as value\n     */\n    I18n.prototype.putVocabularies = function (vocabularies) {\n        var _this = this;\n        Object.keys(vocabularies).map(function (key) {\n            _this.putVocabulariesForLanguage(key, vocabularies[key]);\n        });\n    };\n    return I18n;\n}());\nexport { I18n };\n//# sourceMappingURL=I18n.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { I18n as I18nClass } from './I18n';\nimport { ConsoleLogger as Logger } from '../Logger';\nimport { Amplify } from '../Amplify';\nvar logger = new Logger('I18n');\nvar _config = null;\nvar _i18n = null;\n/**\n * Export I18n APIs\n */\nvar I18n = /** @class */ (function () {\n    function I18n() {\n    }\n    /**\n     * @static\n     * @method\n     * Configure I18n part\n     * @param {Object} config - Configuration of the I18n\n     */\n    I18n.configure = function (config) {\n        logger.debug('configure I18n');\n        if (!config) {\n            return _config;\n        }\n        _config = Object.assign({}, _config, config.I18n || config);\n        I18n.createInstance();\n        return _config;\n    };\n    I18n.getModuleName = function () {\n        return 'I18n';\n    };\n    /**\n     * @static\n     * @method\n     * Create an instance of I18n for the library\n     */\n    I18n.createInstance = function () {\n        logger.debug('create I18n instance');\n        if (_i18n) {\n            return;\n        }\n        _i18n = new I18nClass(_config);\n    };\n    /**\n     * @static @method\n     * Explicitly setting language\n     * @param {String} lang\n     */\n    I18n.setLanguage = function (lang) {\n        I18n.checkConfig();\n        return _i18n.setLanguage(lang);\n    };\n    /**\n     * @static @method\n     * Get value\n     * @param {String} key\n     * @param {String} defVal - Default value\n     */\n    I18n.get = function (key, defVal) {\n        if (!I18n.checkConfig()) {\n            return typeof defVal === 'undefined' ? key : defVal;\n        }\n        return _i18n.get(key, defVal);\n    };\n    /**\n     * @static\n     * @method\n     * Add vocabularies for one language\n     * @param {String} langurage - Language of the dictionary\n     * @param {Object} vocabularies - Object that has key-value as dictionary entry\n     */\n    I18n.putVocabulariesForLanguage = function (language, vocabularies) {\n        I18n.checkConfig();\n        return _i18n.putVocabulariesForLanguage(language, vocabularies);\n    };\n    /**\n     * @static\n     * @method\n     * Add vocabularies for one language\n     * @param {Object} vocabularies - Object that has language as key,\n     *                                vocabularies of each language as value\n     */\n    I18n.putVocabularies = function (vocabularies) {\n        I18n.checkConfig();\n        return _i18n.putVocabularies(vocabularies);\n    };\n    I18n.checkConfig = function () {\n        if (!_i18n) {\n            _i18n = new I18nClass(_config);\n        }\n        return true;\n    };\n    return I18n;\n}());\nexport { I18n };\nAmplify.register(I18n);\n/**\n * @deprecated use named import\n */\nexport default I18n;\n//# sourceMappingURL=index.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar MIME_MAP = [\n    { type: 'text/plain', ext: 'txt' },\n    { type: 'text/html', ext: 'html' },\n    { type: 'text/javascript', ext: 'js' },\n    { type: 'text/css', ext: 'css' },\n    { type: 'text/csv', ext: 'csv' },\n    { type: 'text/yaml', ext: 'yml' },\n    { type: 'text/yaml', ext: 'yaml' },\n    { type: 'text/calendar', ext: 'ics' },\n    { type: 'text/calendar', ext: 'ical' },\n    { type: 'image/apng', ext: 'apng' },\n    { type: 'image/bmp', ext: 'bmp' },\n    { type: 'image/gif', ext: 'gif' },\n    { type: 'image/x-icon', ext: 'ico' },\n    { type: 'image/x-icon', ext: 'cur' },\n    { type: 'image/jpeg', ext: 'jpg' },\n    { type: 'image/jpeg', ext: 'jpeg' },\n    { type: 'image/jpeg', ext: 'jfif' },\n    { type: 'image/jpeg', ext: 'pjp' },\n    { type: 'image/jpeg', ext: 'pjpeg' },\n    { type: 'image/png', ext: 'png' },\n    { type: 'image/svg+xml', ext: 'svg' },\n    { type: 'image/tiff', ext: 'tif' },\n    { type: 'image/tiff', ext: 'tiff' },\n    { type: 'image/webp', ext: 'webp' },\n    { type: 'application/json', ext: 'json' },\n    { type: 'application/xml', ext: 'xml' },\n    { type: 'application/x-sh', ext: 'sh' },\n    { type: 'application/zip', ext: 'zip' },\n    { type: 'application/x-rar-compressed', ext: 'rar' },\n    { type: 'application/x-tar', ext: 'tar' },\n    { type: 'application/x-bzip', ext: 'bz' },\n    { type: 'application/x-bzip2', ext: 'bz2' },\n    { type: 'application/pdf', ext: 'pdf' },\n    { type: 'application/java-archive', ext: 'jar' },\n    { type: 'application/msword', ext: 'doc' },\n    { type: 'application/vnd.ms-excel', ext: 'xls' },\n    { type: 'application/vnd.ms-excel', ext: 'xlsx' },\n    { type: 'message/rfc822', ext: 'eml' },\n];\nexport var isEmpty = function (obj) {\n    if (obj === void 0) { obj = {}; }\n    return Object.keys(obj).length === 0;\n};\nexport var sortByField = function (list, field, dir) {\n    if (!list || !list.sort) {\n        return false;\n    }\n    var dirX = dir && dir === 'desc' ? -1 : 1;\n    list.sort(function (a, b) {\n        var a_val = a[field];\n        var b_val = b[field];\n        if (typeof b_val === 'undefined') {\n            return typeof a_val === 'undefined' ? 0 : 1 * dirX;\n        }\n        if (typeof a_val === 'undefined') {\n            return -1 * dirX;\n        }\n        if (a_val < b_val) {\n            return -1 * dirX;\n        }\n        if (a_val > b_val) {\n            return 1 * dirX;\n        }\n        return 0;\n    });\n    return true;\n};\nexport var objectLessAttributes = function (obj, less) {\n    var ret = Object.assign({}, obj);\n    if (less) {\n        if (typeof less === 'string') {\n            delete ret[less];\n        }\n        else {\n            less.forEach(function (attr) {\n                delete ret[attr];\n            });\n        }\n    }\n    return ret;\n};\nexport var filenameToContentType = function (filename, defVal) {\n    if (defVal === void 0) { defVal = 'application/octet-stream'; }\n    var name = filename.toLowerCase();\n    var filtered = MIME_MAP.filter(function (mime) { return name.endsWith('.' + mime.ext); });\n    return filtered.length > 0 ? filtered[0].type : defVal;\n};\nexport var isTextFile = function (contentType) {\n    var type = contentType.toLowerCase();\n    if (type.startsWith('text/')) {\n        return true;\n    }\n    return ('application/json' === type ||\n        'application/xml' === type ||\n        'application/sh' === type);\n};\nexport var generateRandomString = function () {\n    var result = '';\n    var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n    for (var i = 32; i > 0; i -= 1) {\n        result += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return result;\n};\nexport var makeQuerablePromise = function (promise) {\n    if (promise.isResolved)\n        return promise;\n    var isPending = true;\n    var isRejected = false;\n    var isFullfilled = false;\n    var result = promise.then(function (data) {\n        isFullfilled = true;\n        isPending = false;\n        return data;\n    }, function (e) {\n        isRejected = true;\n        isPending = false;\n        throw e;\n    });\n    result.isFullfilled = function () { return isFullfilled; };\n    result.isPending = function () { return isPending; };\n    result.isRejected = function () { return isRejected; };\n    return result;\n};\nexport var browserOrNode = function () {\n    var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n    var isNode = typeof process !== 'undefined' &&\n        process.versions != null &&\n        process.versions.node != null;\n    return {\n        isBrowser: isBrowser,\n        isNode: isNode,\n    };\n};\n/**\n * transfer the first letter of the keys to lowercase\n * @param {Object} obj - the object need to be transferred\n * @param {Array} whiteListForItself - whitelist itself from being transferred\n * @param {Array} whiteListForChildren - whitelist its children keys from being transferred\n */\nexport var transferKeyToLowerCase = function (obj, whiteListForItself, whiteListForChildren) {\n    if (whiteListForItself === void 0) { whiteListForItself = []; }\n    if (whiteListForChildren === void 0) { whiteListForChildren = []; }\n    if (!isStrictObject(obj))\n        return obj;\n    var ret = {};\n    for (var key in obj) {\n        if (obj.hasOwnProperty(key)) {\n            var transferedKey = whiteListForItself.includes(key)\n                ? key\n                : key[0].toLowerCase() + key.slice(1);\n            ret[transferedKey] = whiteListForChildren.includes(key)\n                ? obj[key]\n                : transferKeyToLowerCase(obj[key], whiteListForItself, whiteListForChildren);\n        }\n    }\n    return ret;\n};\n/**\n * transfer the first letter of the keys to lowercase\n * @param {Object} obj - the object need to be transferred\n * @param {Array} whiteListForItself - whitelist itself from being transferred\n * @param {Array} whiteListForChildren - whitelist its children keys from being transferred\n */\nexport var transferKeyToUpperCase = function (obj, whiteListForItself, whiteListForChildren) {\n    if (whiteListForItself === void 0) { whiteListForItself = []; }\n    if (whiteListForChildren === void 0) { whiteListForChildren = []; }\n    if (!isStrictObject(obj))\n        return obj;\n    var ret = {};\n    for (var key in obj) {\n        if (obj.hasOwnProperty(key)) {\n            var transferredKey = whiteListForItself.includes(key)\n                ? key\n                : key[0].toUpperCase() + key.slice(1);\n            ret[transferredKey] = whiteListForChildren.includes(key)\n                ? obj[key]\n                : transferKeyToUpperCase(obj[key], whiteListForItself, whiteListForChildren);\n        }\n    }\n    return ret;\n};\n/**\n * Return true if the object is a strict object\n * which means it's not Array, Function, Number, String, Boolean or Null\n * @param obj the Object\n */\nexport var isStrictObject = function (obj) {\n    return (obj instanceof Object &&\n        !(obj instanceof Array) &&\n        !(obj instanceof Function) &&\n        !(obj instanceof Number) &&\n        !(obj instanceof String) &&\n        !(obj instanceof Boolean));\n};\n/**\n * @deprecated use per-function imports\n */\nvar JS = /** @class */ (function () {\n    function JS() {\n    }\n    JS.isEmpty = isEmpty;\n    JS.sortByField = sortByField;\n    JS.objectLessAttributes = objectLessAttributes;\n    JS.filenameToContentType = filenameToContentType;\n    JS.isTextFile = isTextFile;\n    JS.generateRandomString = generateRandomString;\n    JS.makeQuerablePromise = makeQuerablePromise;\n    JS.browserOrNode = browserOrNode;\n    JS.transferKeyToLowerCase = transferKeyToLowerCase;\n    JS.transferKeyToUpperCase = transferKeyToUpperCase;\n    JS.isStrictObject = isStrictObject;\n    return JS;\n}());\nexport { JS };\n/**\n * @deprecated use per-function imports\n */\nexport default JS;\n//# sourceMappingURL=JS.js.map","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n    return ar;\n};\nvar LOG_LEVELS = {\n    VERBOSE: 1,\n    DEBUG: 2,\n    INFO: 3,\n    WARN: 4,\n    ERROR: 5,\n};\n/**\n * Write logs\n * @class Logger\n */\nvar ConsoleLogger = /** @class */ (function () {\n    /**\n     * @constructor\n     * @param {string} name - Name of the logger\n     */\n    function ConsoleLogger(name, level) {\n        if (level === void 0) { level = 'WARN'; }\n        this.name = name;\n        this.level = level;\n    }\n    ConsoleLogger.prototype._padding = function (n) {\n        return n < 10 ? '0' + n : '' + n;\n    };\n    ConsoleLogger.prototype._ts = function () {\n        var dt = new Date();\n        return ([this._padding(dt.getMinutes()), this._padding(dt.getSeconds())].join(':') +\n            '.' +\n            dt.getMilliseconds());\n    };\n    /**\n     * Write log\n     * @method\n     * @memeberof Logger\n     * @param {string} type - log type, default INFO\n     * @param {string|object} msg - Logging message or object\n     */\n    ConsoleLogger.prototype._log = function (type) {\n        var msg = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            msg[_i - 1] = arguments[_i];\n        }\n        var logger_level_name = this.level;\n        if (ConsoleLogger.LOG_LEVEL) {\n            logger_level_name = ConsoleLogger.LOG_LEVEL;\n        }\n        if (typeof window !== 'undefined' && window.LOG_LEVEL) {\n            logger_level_name = window.LOG_LEVEL;\n        }\n        var logger_level = LOG_LEVELS[logger_level_name];\n        var type_level = LOG_LEVELS[type];\n        if (!(type_level >= logger_level)) {\n            // Do nothing if type is not greater than or equal to logger level (handle undefined)\n            return;\n        }\n        var log = console.log.bind(console);\n        if (type === 'ERROR' && console.error) {\n            log = console.error.bind(console);\n        }\n        if (type === 'WARN' && console.warn) {\n            log = console.warn.bind(console);\n        }\n        var prefix = \"[\" + type + \"] \" + this._ts() + \" \" + this.name;\n        if (msg.length === 1 && typeof msg[0] === 'string') {\n            log(prefix + \" - \" + msg[0]);\n        }\n        else if (msg.length === 1) {\n            log(prefix, msg[0]);\n        }\n        else if (typeof msg[0] === 'string') {\n            var obj = msg.slice(1);\n            if (obj.length === 1) {\n                obj = obj[0];\n            }\n            log(prefix + \" - \" + msg[0], obj);\n        }\n        else {\n            log(prefix, msg);\n        }\n    };\n    /**\n     * Write General log. Default to INFO\n     * @method\n     * @memeberof Logger\n     * @param {string|object} msg - Logging message or object\n     */\n    ConsoleLogger.prototype.log = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, __spread(['INFO'], msg));\n    };\n    /**\n     * Write INFO log\n     * @method\n     * @memeberof Logger\n     * @param {string|object} msg - Logging message or object\n     */\n    ConsoleLogger.prototype.info = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, __spread(['INFO'], msg));\n    };\n    /**\n     * Write WARN log\n     * @method\n     * @memeberof Logger\n     * @param {string|object} msg - Logging message or object\n     */\n    ConsoleLogger.prototype.warn = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, __spread(['WARN'], msg));\n    };\n    /**\n     * Write ERROR log\n     * @method\n     * @memeberof Logger\n     * @param {string|object} msg - Logging message or object\n     */\n    ConsoleLogger.prototype.error = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, __spread(['ERROR'], msg));\n    };\n    /**\n     * Write DEBUG log\n     * @method\n     * @memeberof Logger\n     * @param {string|object} msg - Logging message or object\n     */\n    ConsoleLogger.prototype.debug = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, __spread(['DEBUG'], msg));\n    };\n    /**\n     * Write VERBOSE log\n     * @method\n     * @memeberof Logger\n     * @param {string|object} msg - Logging message or object\n     */\n    ConsoleLogger.prototype.verbose = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, __spread(['VERBOSE'], msg));\n    };\n    ConsoleLogger.LOG_LEVEL = null;\n    return ConsoleLogger;\n}());\nexport { ConsoleLogger };\n//# sourceMappingURL=ConsoleLogger.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport * from './ConsoleLogger';\n//# sourceMappingURL=index.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { ConsoleLogger as Logger } from '../Logger';\nimport { browserOrNode } from '../JS';\nimport { NonRetryableError } from '../Util';\nvar logger = new Logger('CognitoCredentials');\nvar waitForInit = new Promise(function (res, rej) {\n    if (!browserOrNode().isBrowser) {\n        logger.debug('not in the browser, directly resolved');\n        return res();\n    }\n    var fb = window['FB'];\n    if (fb) {\n        logger.debug('FB SDK already loaded');\n        return res();\n    }\n    else {\n        setTimeout(function () {\n            return res();\n        }, 2000);\n    }\n});\nvar FacebookOAuth = /** @class */ (function () {\n    function FacebookOAuth() {\n        this.initialized = false;\n        this.refreshFacebookToken = this.refreshFacebookToken.bind(this);\n        this._refreshFacebookTokenImpl = this._refreshFacebookTokenImpl.bind(this);\n    }\n    FacebookOAuth.prototype.refreshFacebookToken = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this.initialized) return [3 /*break*/, 2];\n                        logger.debug('need to wait for the Facebook SDK loaded');\n                        return [4 /*yield*/, waitForInit];\n                    case 1:\n                        _a.sent();\n                        this.initialized = true;\n                        logger.debug('finish waiting');\n                        _a.label = 2;\n                    case 2: return [2 /*return*/, this._refreshFacebookTokenImpl()];\n                }\n            });\n        });\n    };\n    FacebookOAuth.prototype._refreshFacebookTokenImpl = function () {\n        var fb = null;\n        if (browserOrNode().isBrowser)\n            fb = window['FB'];\n        if (!fb) {\n            var errorMessage = 'no fb sdk available';\n            logger.debug(errorMessage);\n            return Promise.reject(new NonRetryableError(errorMessage));\n        }\n        return new Promise(function (res, rej) {\n            fb.getLoginStatus(function (fbResponse) {\n                if (!fbResponse || !fbResponse.authResponse) {\n                    var errorMessage = 'no response from facebook when refreshing the jwt token';\n                    logger.debug(errorMessage);\n                    // There is no definitive indication for a network error in\n                    // fbResponse, so we are treating it as an invalid token.\n                    rej(new NonRetryableError(errorMessage));\n                }\n                else {\n                    var response = fbResponse.authResponse;\n                    var accessToken = response.accessToken, expiresIn = response.expiresIn;\n                    var date = new Date();\n                    var expires_at = expiresIn * 1000 + date.getTime();\n                    if (!accessToken) {\n                        var errorMessage = 'the jwtToken is undefined';\n                        logger.debug(errorMessage);\n                        rej(new NonRetryableError(errorMessage));\n                    }\n                    res({\n                        token: accessToken,\n                        expires_at: expires_at,\n                    });\n                }\n            }, { scope: 'public_profile,email' });\n        });\n    };\n    return FacebookOAuth;\n}());\nexport { FacebookOAuth };\n/**\n * @deprecated use named import\n */\nexport default FacebookOAuth;\n//# sourceMappingURL=FacebookOAuth.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { ConsoleLogger as Logger } from '../Logger';\nimport { browserOrNode } from '../JS';\nimport { NonRetryableError } from '../Util';\nvar logger = new Logger('CognitoCredentials');\nvar waitForInit = new Promise(function (res, rej) {\n    if (!browserOrNode().isBrowser) {\n        logger.debug('not in the browser, directly resolved');\n        return res();\n    }\n    var ga = window['gapi'] && window['gapi'].auth2 ? window['gapi'].auth2 : null;\n    if (ga) {\n        logger.debug('google api already loaded');\n        return res();\n    }\n    else {\n        setTimeout(function () {\n            return res();\n        }, 2000);\n    }\n});\nvar GoogleOAuth = /** @class */ (function () {\n    function GoogleOAuth() {\n        this.initialized = false;\n        this.refreshGoogleToken = this.refreshGoogleToken.bind(this);\n        this._refreshGoogleTokenImpl = this._refreshGoogleTokenImpl.bind(this);\n    }\n    GoogleOAuth.prototype.refreshGoogleToken = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this.initialized) return [3 /*break*/, 2];\n                        logger.debug('need to wait for the Google SDK loaded');\n                        return [4 /*yield*/, waitForInit];\n                    case 1:\n                        _a.sent();\n                        this.initialized = true;\n                        logger.debug('finish waiting');\n                        _a.label = 2;\n                    case 2: return [2 /*return*/, this._refreshGoogleTokenImpl()];\n                }\n            });\n        });\n    };\n    GoogleOAuth.prototype._refreshGoogleTokenImpl = function () {\n        var ga = null;\n        if (browserOrNode().isBrowser)\n            ga = window['gapi'] && window['gapi'].auth2 ? window['gapi'].auth2 : null;\n        if (!ga) {\n            logger.debug('no gapi auth2 available');\n            return Promise.reject('no gapi auth2 available');\n        }\n        return new Promise(function (res, rej) {\n            ga.getAuthInstance()\n                .then(function (googleAuth) {\n                if (!googleAuth) {\n                    logger.debug('google Auth undefined');\n                    rej(new NonRetryableError('google Auth undefined'));\n                }\n                var googleUser = googleAuth.currentUser.get();\n                // refresh the token\n                if (googleUser.isSignedIn()) {\n                    logger.debug('refreshing the google access token');\n                    googleUser\n                        .reloadAuthResponse()\n                        .then(function (authResponse) {\n                        var id_token = authResponse.id_token, expires_at = authResponse.expires_at;\n                        res({ token: id_token, expires_at: expires_at });\n                    })\n                        .catch(function (err) {\n                        if (err && err.error === 'network_error') {\n                            // Not using NonRetryableError so handler will be retried\n                            rej('Network error reloading google auth response');\n                        }\n                        else {\n                            rej(new NonRetryableError('Failed to reload google auth response'));\n                        }\n                    });\n                }\n                else {\n                    rej(new NonRetryableError('User is not signed in with Google'));\n                }\n            })\n                .catch(function (err) {\n                logger.debug('Failed to refresh google token', err);\n                rej(new NonRetryableError('Failed to refresh google token'));\n            });\n        });\n    };\n    return GoogleOAuth;\n}());\nexport { GoogleOAuth };\n/**\n * @deprecated use named import\n */\nexport default GoogleOAuth;\n//# sourceMappingURL=GoogleOAuth.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { GoogleOAuth as GoogleOAuthClass } from './GoogleOAuth';\nimport { FacebookOAuth as FacebookOAuthClass } from './FacebookOAuth';\nexport var GoogleOAuth = new GoogleOAuthClass();\nexport var FacebookOAuth = new FacebookOAuthClass();\n//# sourceMappingURL=index.js.map","import { ConsoleLogger as Logger } from './Logger';\nvar logger = new Logger('Parser');\nexport var parseMobileHubConfig = function (config) {\n    var amplifyConfig = {};\n    // Analytics\n    if (config['aws_mobile_analytics_app_id']) {\n        var Analytics = {\n            AWSPinpoint: {\n                appId: config['aws_mobile_analytics_app_id'],\n                region: config['aws_mobile_analytics_app_region'],\n            },\n        };\n        amplifyConfig.Analytics = Analytics;\n    }\n    // Auth\n    if (config['aws_cognito_identity_pool_id'] || config['aws_user_pools_id']) {\n        amplifyConfig.Auth = {\n            userPoolId: config['aws_user_pools_id'],\n            userPoolWebClientId: config['aws_user_pools_web_client_id'],\n            region: config['aws_cognito_region'],\n            identityPoolId: config['aws_cognito_identity_pool_id'],\n            identityPoolRegion: config['aws_cognito_region'],\n            mandatorySignIn: config['aws_mandatory_sign_in'] === 'enable',\n        };\n    }\n    // Storage\n    var storageConfig;\n    if (config['aws_user_files_s3_bucket']) {\n        storageConfig = {\n            AWSS3: {\n                bucket: config['aws_user_files_s3_bucket'],\n                region: config['aws_user_files_s3_bucket_region'],\n                dangerouslyConnectToHttpEndpointForTesting: config['aws_user_files_s3_dangerously_connect_to_http_endpoint_for_testing'],\n            },\n        };\n    }\n    else {\n        storageConfig = config ? config.Storage || config : {};\n    }\n    amplifyConfig.Analytics = Object.assign({}, amplifyConfig.Analytics, config.Analytics);\n    amplifyConfig.Auth = Object.assign({}, amplifyConfig.Auth, config.Auth);\n    amplifyConfig.Storage = Object.assign({}, storageConfig);\n    logger.debug('parse config', config, 'to amplifyconfig', amplifyConfig);\n    return amplifyConfig;\n};\n/**\n * @deprecated use per-function export\n */\nvar Parser = /** @class */ (function () {\n    function Parser() {\n    }\n    Parser.parseMobilehubConfig = parseMobileHubConfig;\n    return Parser;\n}());\nexport { Parser };\n/**\n * @deprecated use per-function export\n */\nexport default Parser;\n//# sourceMappingURL=Parser.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { version } from './version';\nvar BASE_USER_AGENT = \"aws-amplify/\" + version;\nexport var Platform = {\n    userAgent: BASE_USER_AGENT + \" js\",\n    product: '',\n    navigator: null,\n    isReactNative: false,\n};\nif (typeof navigator !== 'undefined' && navigator.product) {\n    Platform.product = navigator.product || '';\n    Platform.navigator = navigator || null;\n    switch (navigator.product) {\n        case 'ReactNative':\n            Platform.userAgent = BASE_USER_AGENT + \" react-native\";\n            Platform.isReactNative = true;\n            break;\n        default:\n            Platform.userAgent = BASE_USER_AGENT + \" js\";\n            Platform.isReactNative = false;\n            break;\n    }\n}\nexport var getAmplifyUserAgent = function () {\n    return Platform.userAgent;\n};\n/**\n * @deprecated use named import\n */\nexport default Platform;\n//# sourceMappingURL=index.js.map","// generated by genversion\nexport var version = '3.4.7';\n//# sourceMappingURL=version.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { browserOrNode } from '../JS';\nimport { StorageHelper } from '../StorageHelper';\nexport var Linking = {};\nexport var AppState = {\n    addEventListener: function (action, handler) { return undefined; },\n};\n// if not in react native, just use local storage\nexport var AsyncStorage = browserOrNode().isBrowser\n    ? new StorageHelper().getStorage()\n    : undefined;\n//# sourceMappingURL=index.js.map","/**\n * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { ConsoleLogger as Logger } from '../Logger';\nimport { browserOrNode } from '../JS';\nimport { Amplify } from '../Amplify';\n/**\n * Provides a means to registering a service worker in the browser\n * and communicating with it via postMessage events.\n * https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/\n *\n * postMessage events are currently not supported in all browsers. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n *\n * At the minmum this class will register the service worker and listen\n * and attempt to dispatch messages on state change and record analytics\n * events based on the service worker lifecycle.\n */\nvar ServiceWorkerClass = /** @class */ (function () {\n    function ServiceWorkerClass() {\n        // The AWS Amplify logger\n        this._logger = new Logger('ServiceWorker');\n    }\n    Object.defineProperty(ServiceWorkerClass.prototype, \"serviceWorker\", {\n        /**\n         * Get the currently active service worker\n         */\n        get: function () {\n            return this._serviceWorker;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Register the service-worker.js file in the browser\n     * Make sure the service-worker.js is part of the build\n     * for example with Angular, modify the angular-cli.json file\n     * and add to \"assets\" array \"service-worker.js\"\n     * @param {string} - (optional) Service worker file. Defaults to \"/service-worker.js\"\n     * @param {string} - (optional) The service worker scope. Defaults to \"/\"\n     *  - API Doc: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register\n     * @returns {Promise}\n     *\t- resolve(ServiceWorkerRegistration)\n     *\t- reject(Error)\n     **/\n    ServiceWorkerClass.prototype.register = function (filePath, scope) {\n        var _this = this;\n        if (filePath === void 0) { filePath = '/service-worker.js'; }\n        if (scope === void 0) { scope = '/'; }\n        this._logger.debug(\"registering \" + filePath);\n        this._logger.debug(\"registering service worker with scope \" + scope);\n        return new Promise(function (resolve, reject) {\n            if (navigator && 'serviceWorker' in navigator) {\n                navigator.serviceWorker\n                    .register(filePath, {\n                    scope: scope,\n                })\n                    .then(function (registration) {\n                    if (registration.installing) {\n                        _this._serviceWorker = registration.installing;\n                    }\n                    else if (registration.waiting) {\n                        _this._serviceWorker = registration.waiting;\n                    }\n                    else if (registration.active) {\n                        _this._serviceWorker = registration.active;\n                    }\n                    _this._registration = registration;\n                    _this._setupListeners();\n                    _this._logger.debug(\"Service Worker Registration Success: \" + registration);\n                    return resolve(registration);\n                })\n                    .catch(function (error) {\n                    _this._logger.debug(\"Service Worker Registration Failed \" + error);\n                    return reject(error);\n                });\n            }\n            else {\n                return reject(new Error('Service Worker not available'));\n            }\n        });\n    };\n    /**\n     * Enable web push notifications. If not subscribed, a new subscription will\n     * be created and registered.\n     * \tTest Push Server: https://web-push-codelab.glitch.me/\n     * \tPush Server Libraries: https://github.com/web-push-libs/\n     * \tAPI Doc: https://developers.google.com/web/fundamentals/codelabs/push-notifications/\n     * @param publicKey\n     * @returns {Promise}\n     * \t- resolve(PushSubscription)\n     *  - reject(Error)\n     */\n    ServiceWorkerClass.prototype.enablePush = function (publicKey) {\n        var _this = this;\n        if (!this._registration)\n            throw new Error('Service Worker not registered');\n        this._publicKey = publicKey;\n        return new Promise(function (resolve, reject) {\n            if (browserOrNode().isBrowser) {\n                _this._registration.pushManager.getSubscription().then(function (subscription) {\n                    if (subscription) {\n                        _this._subscription = subscription;\n                        _this._logger.debug(\"User is subscribed to push: \" + JSON.stringify(subscription));\n                        resolve(subscription);\n                    }\n                    else {\n                        _this._logger.debug(\"User is NOT subscribed to push\");\n                        return _this._registration.pushManager\n                            .subscribe({\n                            userVisibleOnly: true,\n                            applicationServerKey: _this._urlB64ToUint8Array(publicKey),\n                        })\n                            .then(function (subscription) {\n                            _this._subscription = subscription;\n                            _this._logger.debug(\"User subscribed: \" + JSON.stringify(subscription));\n                            resolve(subscription);\n                        })\n                            .catch(function (error) {\n                            _this._logger.error(error);\n                        });\n                    }\n                });\n            }\n            else {\n                return reject(new Error('Service Worker not available'));\n            }\n        });\n    };\n    /**\n     * Convert a base64 encoded string to a Uint8 array for the push server key\n     * @param base64String\n     */\n    ServiceWorkerClass.prototype._urlB64ToUint8Array = function (base64String) {\n        var padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n        var base64 = (base64String + padding)\n            .replace(/\\-/g, '+')\n            .replace(/_/g, '/');\n        var rawData = window.atob(base64);\n        var outputArray = new Uint8Array(rawData.length);\n        for (var i = 0; i < rawData.length; ++i) {\n            outputArray[i] = rawData.charCodeAt(i);\n        }\n        return outputArray;\n    };\n    /**\n     * Send a message to the service worker. The service worker needs\n     * to implement `self.addEventListener('message') to handle the\n     * message. This ***currently*** does not work in Safari or IE.\n     * @param {object | string} - An arbitrary JSON object or string message to send to the service worker\n     *\t- see: https://developer.mozilla.org/en-US/docs/Web/API/Transferable\n     * @returns {Promise}\n     **/\n    ServiceWorkerClass.prototype.send = function (message) {\n        if (this._serviceWorker) {\n            this._serviceWorker.postMessage(typeof message === 'object' ? JSON.stringify(message) : message);\n        }\n    };\n    /**\n     * Listen for service worker state change and message events\n     * https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/state\n     **/\n    ServiceWorkerClass.prototype._setupListeners = function () {\n        var _this = this;\n        this._serviceWorker.addEventListener('statechange', function (event) {\n            var currentState = _this._serviceWorker.state;\n            _this._logger.debug(\"ServiceWorker statechange: \" + currentState);\n            if (Amplify.Analytics && typeof Amplify.Analytics.record === 'function') {\n                Amplify.Analytics.record({\n                    name: 'ServiceWorker',\n                    attributes: {\n                        state: currentState,\n                    },\n                });\n            }\n        });\n        this._serviceWorker.addEventListener('message', function (event) {\n            _this._logger.debug(\"ServiceWorker message event: \" + event);\n        });\n    };\n    return ServiceWorkerClass;\n}());\nexport { ServiceWorkerClass };\n/**\n * @deprecated use named import\n */\nexport default ServiceWorkerClass;\n//# sourceMappingURL=ServiceWorker.js.map","/**\n * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nexport { ServiceWorkerClass as ServiceWorker } from './ServiceWorker';\n//# sourceMappingURL=index.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { ConsoleLogger as Logger } from './Logger';\nimport { Sha256 as jsSha256 } from '@aws-crypto/sha256-js';\nimport { toHex } from '@aws-sdk/util-hex-encoding';\nimport { parse, format } from 'url';\nimport { DateUtils } from './Util';\nvar logger = new Logger('Signer');\nvar DEFAULT_ALGORITHM = 'AWS4-HMAC-SHA256';\nvar IOT_SERVICE_NAME = 'iotdevicegateway';\nvar encrypt = function (key, src) {\n    var hash = new jsSha256(key);\n    hash.update(src);\n    return hash.digestSync();\n};\nvar hash = function (src) {\n    var arg = src || '';\n    var hash = new jsSha256();\n    hash.update(arg);\n    return toHex(hash.digestSync());\n};\n/**\n * @private\n * RFC 3986 compliant version of encodeURIComponent\n */\nvar escape_RFC3986 = function (component) {\n    return component.replace(/[!'()*]/g, function (c) {\n        return ('%' +\n            c\n                .charCodeAt(0)\n                .toString(16)\n                .toUpperCase());\n    });\n};\n/**\n * @private\n * Create canonical query string\n *\n */\nvar canonical_query = function (query) {\n    if (!query || query.length === 0) {\n        return '';\n    }\n    return query\n        .split('&')\n        .map(function (e) {\n        var key_val = e.split('=');\n        if (key_val.length === 1) {\n            return e;\n        }\n        else {\n            var reencoded_val = escape_RFC3986(key_val[1]);\n            return key_val[0] + '=' + reencoded_val;\n        }\n    })\n        .sort(function (a, b) {\n        var key_a = a.split('=')[0];\n        var key_b = b.split('=')[0];\n        if (key_a === key_b) {\n            return a < b ? -1 : 1;\n        }\n        else {\n            return key_a < key_b ? -1 : 1;\n        }\n    })\n        .join('&');\n};\n/**\n* @private\n* Create canonical headers\n*\n<pre>\nCanonicalHeaders =\n    CanonicalHeadersEntry0 + CanonicalHeadersEntry1 + ... + CanonicalHeadersEntryN\nCanonicalHeadersEntry =\n    Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + '\\n'\n</pre>\n*/\nvar canonical_headers = function (headers) {\n    if (!headers || Object.keys(headers).length === 0) {\n        return '';\n    }\n    return (Object.keys(headers)\n        .map(function (key) {\n        return {\n            key: key.toLowerCase(),\n            value: headers[key] ? headers[key].trim().replace(/\\s+/g, ' ') : '',\n        };\n    })\n        .sort(function (a, b) {\n        return a.key < b.key ? -1 : 1;\n    })\n        .map(function (item) {\n        return item.key + ':' + item.value;\n    })\n        .join('\\n') + '\\n');\n};\n/**\n * List of header keys included in the canonical headers.\n * @access private\n */\nvar signed_headers = function (headers) {\n    return Object.keys(headers)\n        .map(function (key) {\n        return key.toLowerCase();\n    })\n        .sort()\n        .join(';');\n};\n/**\n* @private\n* Create canonical request\n* Refer to\n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html|Create a Canonical Request}\n*\n<pre>\nCanonicalRequest =\n    HTTPRequestMethod + '\\n' +\n    CanonicalURI + '\\n' +\n    CanonicalQueryString + '\\n' +\n    CanonicalHeaders + '\\n' +\n    SignedHeaders + '\\n' +\n    HexEncode(Hash(RequestPayload))\n</pre>\n*/\nvar canonical_request = function (request) {\n    var url_info = parse(request.url);\n    return [\n        request.method || '/',\n        encodeURIComponent(url_info.pathname).replace(/%2F/gi, '/'),\n        canonical_query(url_info.query),\n        canonical_headers(request.headers),\n        signed_headers(request.headers),\n        hash(request.data),\n    ].join('\\n');\n};\nvar parse_service_info = function (request) {\n    var url_info = parse(request.url), host = url_info.host;\n    var matched = host.match(/([^\\.]+)\\.(?:([^\\.]*)\\.)?amazonaws\\.com$/);\n    var parsed = (matched || []).slice(1, 3);\n    if (parsed[1] === 'es') {\n        // Elastic Search\n        parsed = parsed.reverse();\n    }\n    return {\n        service: request.service || parsed[0],\n        region: request.region || parsed[1],\n    };\n};\nvar credential_scope = function (d_str, region, service) {\n    return [d_str, region, service, 'aws4_request'].join('/');\n};\n/**\n* @private\n* Create a string to sign\n* Refer to\n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html|Create String to Sign}\n*\n<pre>\nStringToSign =\n    Algorithm + \\n +\n    RequestDateTime + \\n +\n    CredentialScope + \\n +\n    HashedCanonicalRequest\n</pre>\n*/\nvar string_to_sign = function (algorithm, canonical_request, dt_str, scope) {\n    return [algorithm, dt_str, scope, hash(canonical_request)].join('\\n');\n};\n/**\n* @private\n* Create signing key\n* Refer to\n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html|Calculate Signature}\n*\n<pre>\nkSecret = your secret access key\nkDate = HMAC(\"AWS4\" + kSecret, Date)\nkRegion = HMAC(kDate, Region)\nkService = HMAC(kRegion, Service)\nkSigning = HMAC(kService, \"aws4_request\")\n</pre>\n*/\nvar get_signing_key = function (secret_key, d_str, service_info) {\n    logger.debug(service_info);\n    var k = 'AWS4' + secret_key, k_date = encrypt(k, d_str), k_region = encrypt(k_date, service_info.region), k_service = encrypt(k_region, service_info.service), k_signing = encrypt(k_service, 'aws4_request');\n    return k_signing;\n};\nvar get_signature = function (signing_key, str_to_sign) {\n    return toHex(encrypt(signing_key, str_to_sign));\n};\n/**\n * @private\n * Create authorization header\n * Refer to\n * {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html|Add the Signing Information}\n */\nvar get_authorization_header = function (algorithm, access_key, scope, signed_headers, signature) {\n    return [\n        algorithm + ' ' + 'Credential=' + access_key + '/' + scope,\n        'SignedHeaders=' + signed_headers,\n        'Signature=' + signature,\n    ].join(', ');\n};\nvar Signer = /** @class */ (function () {\n    function Signer() {\n    }\n    /**\n    * Sign a HTTP request, add 'Authorization' header to request param\n    * @method sign\n    * @memberof Signer\n    * @static\n    *\n    * @param {object} request - HTTP request object\n    <pre>\n    request: {\n        method: GET | POST | PUT ...\n        url: ...,\n        headers: {\n            header1: ...\n        },\n        data: data\n    }\n    </pre>\n    * @param {object} access_info - AWS access credential info\n    <pre>\n    access_info: {\n        access_key: ...,\n        secret_key: ...,\n        session_token: ...\n    }\n    </pre>\n    * @param {object} [service_info] - AWS service type and region, optional,\n    *                                  if not provided then parse out from url\n    <pre>\n    service_info: {\n        service: ...,\n        region: ...\n    }\n    </pre>\n    *\n    * @returns {object} Signed HTTP request\n    */\n    Signer.sign = function (request, access_info, service_info) {\n        if (service_info === void 0) { service_info = null; }\n        request.headers = request.headers || {};\n        // datetime string and date string\n        var dt = DateUtils.getDateWithClockOffset(), dt_str = dt.toISOString().replace(/[:\\-]|\\.\\d{3}/g, ''), d_str = dt_str.substr(0, 8);\n        var url_info = parse(request.url);\n        request.headers['host'] = url_info.host;\n        request.headers['x-amz-date'] = dt_str;\n        if (access_info.session_token) {\n            request.headers['X-Amz-Security-Token'] = access_info.session_token;\n        }\n        // Task 1: Create a Canonical Request\n        var request_str = canonical_request(request);\n        logger.debug(request_str);\n        // Task 2: Create a String to Sign\n        var serviceInfo = service_info || parse_service_info(request), scope = credential_scope(d_str, serviceInfo.region, serviceInfo.service), str_to_sign = string_to_sign(DEFAULT_ALGORITHM, request_str, dt_str, scope);\n        // Task 3: Calculate the Signature\n        var signing_key = get_signing_key(access_info.secret_key, d_str, serviceInfo), signature = get_signature(signing_key, str_to_sign);\n        // Task 4: Adding the Signing information to the Request\n        var authorization_header = get_authorization_header(DEFAULT_ALGORITHM, access_info.access_key, scope, signed_headers(request.headers), signature);\n        request.headers['Authorization'] = authorization_header;\n        return request;\n    };\n    Signer.signUrl = function (urlOrRequest, accessInfo, serviceInfo, expiration) {\n        var urlToSign = typeof urlOrRequest === 'object' ? urlOrRequest.url : urlOrRequest;\n        var method = typeof urlOrRequest === 'object' ? urlOrRequest.method : 'GET';\n        var body = typeof urlOrRequest === 'object' ? urlOrRequest.body : undefined;\n        var now = DateUtils.getDateWithClockOffset()\n            .toISOString()\n            .replace(/[:\\-]|\\.\\d{3}/g, '');\n        var today = now.substr(0, 8);\n        // Intentionally discarding search\n        var _a = parse(urlToSign, true, true), search = _a.search, parsedUrl = __rest(_a, [\"search\"]);\n        var host = parsedUrl.host;\n        var signedHeaders = { host: host };\n        var _b = serviceInfo || parse_service_info({ url: format(parsedUrl) }), region = _b.region, service = _b.service;\n        var credentialScope = credential_scope(today, region, service);\n        // IoT service does not allow the session token in the canonical request\n        // https://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html\n        var sessionTokenRequired = accessInfo.session_token && service !== IOT_SERVICE_NAME;\n        var queryParams = __assign(__assign(__assign({ 'X-Amz-Algorithm': DEFAULT_ALGORITHM, 'X-Amz-Credential': [accessInfo.access_key, credentialScope].join('/'), 'X-Amz-Date': now.substr(0, 16) }, (sessionTokenRequired\n            ? { 'X-Amz-Security-Token': \"\" + accessInfo.session_token }\n            : {})), (expiration ? { 'X-Amz-Expires': \"\" + expiration } : {})), { 'X-Amz-SignedHeaders': Object.keys(signedHeaders).join(',') });\n        var canonicalRequest = canonical_request({\n            method: method,\n            url: format(__assign(__assign({}, parsedUrl), { query: __assign(__assign({}, parsedUrl.query), queryParams) })),\n            headers: signedHeaders,\n            data: body,\n        });\n        var stringToSign = string_to_sign(DEFAULT_ALGORITHM, canonicalRequest, now, credentialScope);\n        var signing_key = get_signing_key(accessInfo.secret_key, today, {\n            region: region,\n            service: service,\n        });\n        var signature = get_signature(signing_key, stringToSign);\n        var additionalQueryParams = __assign({ 'X-Amz-Signature': signature }, (accessInfo.session_token && {\n            'X-Amz-Security-Token': accessInfo.session_token,\n        }));\n        var result = format({\n            protocol: parsedUrl.protocol,\n            slashes: true,\n            hostname: parsedUrl.hostname,\n            port: parsedUrl.port,\n            pathname: parsedUrl.pathname,\n            query: __assign(__assign(__assign({}, parsedUrl.query), queryParams), additionalQueryParams),\n        });\n        return result;\n    };\n    return Signer;\n}());\nexport { Signer };\n/**\n * @deprecated use per-function import\n */\nexport default Signer;\n//# sourceMappingURL=Signer.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar dataMemory = {};\n/** @class */\nvar MemoryStorage = /** @class */ (function () {\n    function MemoryStorage() {\n    }\n    /**\n     * This is used to set a specific item in storage\n     * @param {string} key - the key for the item\n     * @param {object} value - the value\n     * @returns {string} value that was set\n     */\n    MemoryStorage.setItem = function (key, value) {\n        dataMemory[key] = value;\n        return dataMemory[key];\n    };\n    /**\n     * This is used to get a specific key from storage\n     * @param {string} key - the key for the item\n     * This is used to clear the storage\n     * @returns {string} the data item\n     */\n    MemoryStorage.getItem = function (key) {\n        return Object.prototype.hasOwnProperty.call(dataMemory, key)\n            ? dataMemory[key]\n            : undefined;\n    };\n    /**\n     * This is used to remove an item from storage\n     * @param {string} key - the key being set\n     * @returns {string} value - value that was deleted\n     */\n    MemoryStorage.removeItem = function (key) {\n        return delete dataMemory[key];\n    };\n    /**\n     * This is used to clear the storage\n     * @returns {string} nothing\n     */\n    MemoryStorage.clear = function () {\n        dataMemory = {};\n        return dataMemory;\n    };\n    return MemoryStorage;\n}());\nexport { MemoryStorage };\nvar StorageHelper = /** @class */ (function () {\n    /**\n     * This is used to get a storage object\n     * @returns {object} the storage\n     */\n    function StorageHelper() {\n        try {\n            this.storageWindow = window.localStorage;\n            this.storageWindow.setItem('aws.amplify.test-ls', 1);\n            this.storageWindow.removeItem('aws.amplify.test-ls');\n        }\n        catch (exception) {\n            this.storageWindow = MemoryStorage;\n        }\n    }\n    /**\n     * This is used to return the storage\n     * @returns {object} the storage\n     */\n    StorageHelper.prototype.getStorage = function () {\n        return this.storageWindow;\n    };\n    return StorageHelper;\n}());\nexport { StorageHelper };\n/**\n * @deprecated use named import\n */\nexport default StorageHelper;\n//# sourceMappingURL=index.js.map","import Cookies from 'universal-cookie';\nimport { browserOrNode } from '../JS';\nvar isBrowser = browserOrNode().isBrowser;\nvar UniversalStorage = /** @class */ (function () {\n    function UniversalStorage(context) {\n        if (context === void 0) { context = {}; }\n        this.cookies = new Cookies();\n        this.store = isBrowser ? window.localStorage : Object.create(null);\n        this.cookies = context.req\n            ? new Cookies(context.req.headers.cookie)\n            : new Cookies();\n        Object.assign(this.store, this.cookies.getAll());\n    }\n    Object.defineProperty(UniversalStorage.prototype, \"length\", {\n        get: function () {\n            return Object.entries(this.store).length;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    UniversalStorage.prototype.clear = function () {\n        var _this = this;\n        Array.from(new Array(this.length))\n            .map(function (value, i) { return _this.key(i); })\n            .forEach(function (key) { return _this.removeItem(key); });\n    };\n    UniversalStorage.prototype.getItem = function (key) {\n        return this.getLocalItem(key);\n    };\n    UniversalStorage.prototype.getLocalItem = function (key) {\n        return Object.prototype.hasOwnProperty.call(this.store, key)\n            ? this.store[key]\n            : null;\n    };\n    UniversalStorage.prototype.getUniversalItem = function (key) {\n        return this.cookies.get(key);\n    };\n    UniversalStorage.prototype.key = function (index) {\n        return Object.keys(this.store)[index];\n    };\n    UniversalStorage.prototype.removeItem = function (key) {\n        this.removeLocalItem(key);\n        this.removeUniversalItem(key);\n    };\n    UniversalStorage.prototype.removeLocalItem = function (key) {\n        delete this.store[key];\n    };\n    UniversalStorage.prototype.removeUniversalItem = function (key) {\n        this.cookies.remove(key);\n    };\n    UniversalStorage.prototype.setItem = function (key, value) {\n        this.setLocalItem(key, value);\n        // keys take the shape:\n        //  1. `${ProviderPrefix}.${userPoolClientId}.${username}.${tokenType}\n        //  2. `${ProviderPrefix}.${userPoolClientId}.LastAuthUser\n        var tokenType = key.split('.').pop();\n        switch (tokenType) {\n            // LastAuthUser is needed for computing other key names\n            case 'LastAuthUser':\n            // accessToken is required for CognitoUserSession\n            case 'accessToken':\n            // Required for CognitoUserSession\n            case 'idToken':\n                this.setUniversalItem(key, value);\n            // userData is used when `Auth.currentAuthenticatedUser({ bypassCache: false })`.\n            // Can be persisted to speed up calls to `Auth.currentAuthenticatedUser()`\n            // case 'userData':\n            // refreshToken isn't shared with the server so that the client handles refreshing\n            // case 'refreshToken':\n            // Ignoring clockDrift on the server for now, but needs testing\n            // case 'clockDrift':\n        }\n    };\n    UniversalStorage.prototype.setLocalItem = function (key, value) {\n        this.store[key] = value;\n    };\n    UniversalStorage.prototype.setUniversalItem = function (key, value) {\n        this.cookies.set(key, value, {\n            path: '/',\n            // `httpOnly` cannot be set via JavaScript: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#JavaScript_access_using_Document.cookie\n            sameSite: true,\n            // Allow unsecure requests to http://localhost:3000/ when in development.\n            secure: window.location.hostname === 'localhost' ? false : true,\n        });\n    };\n    return UniversalStorage;\n}());\nexport { UniversalStorage };\n//# sourceMappingURL=index.js.map","/**\n * Date & time utility functions to abstract the `aws-sdk` away from users.\n * (v2 => v3 modularization is a breaking change)\n *\n * @see https://github.com/aws/aws-sdk-js/blob/6edf586dcc1de7fe8fbfbbd9a0d2b1847921e6e1/lib/util.js#L262\n */\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar FIVE_MINUTES_IN_MS = 1000 * 60 * 5;\nexport var DateUtils = {\n    /**\n     * Milliseconds to offset the date to compensate for clock skew between device & services\n     */\n    clockOffset: 0,\n    getDateWithClockOffset: function () {\n        if (DateUtils.clockOffset) {\n            return new Date(new Date().getTime() + DateUtils.clockOffset);\n        }\n        else {\n            return new Date();\n        }\n    },\n    /**\n     * @returns {number} Clock offset in milliseconds\n     */\n    getClockOffset: function () {\n        return DateUtils.clockOffset;\n    },\n    getHeaderStringFromDate: function (date) {\n        if (date === void 0) { date = DateUtils.getDateWithClockOffset(); }\n        return date.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '');\n    },\n    getDateFromHeaderString: function (header) {\n        var _a = __read(header.match(/^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2}).+/), 7), year = _a[1], month = _a[2], day = _a[3], hour = _a[4], minute = _a[5], second = _a[6];\n        return new Date(Date.UTC(Number(year), Number(month) - 1, Number(day), Number(hour), Number(minute), Number(second)));\n    },\n    isClockSkewed: function (serverDate) {\n        // API gateway permits client calls that are off by no more than ±5 minutes\n        return (Math.abs(serverDate.getTime() - DateUtils.getDateWithClockOffset().getTime()) >= FIVE_MINUTES_IN_MS);\n    },\n    isClockSkewError: function (error) {\n        if (!error.response || !error.response.headers) {\n            return false;\n        }\n        var headers = error.response.headers;\n        return Boolean(headers['x-amzn-errortype'] === 'BadRequestException' &&\n            (headers.date || headers.Date));\n    },\n    /**\n     * @param {number} offset Clock offset in milliseconds\n     */\n    setClockOffset: function (offset) {\n        DateUtils.clockOffset = offset;\n    },\n};\n//# sourceMappingURL=DateUtils.js.map","/*!\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 Christian Speckner <cnspeckn@googlemail.com>\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\n * all 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\n * THE SOFTWARE.\n */\nvar Mutex = /** @class */ (function () {\n    function Mutex() {\n        this._queue = [];\n        this._pending = false;\n    }\n    Mutex.prototype.isLocked = function () {\n        return this._pending;\n    };\n    Mutex.prototype.acquire = function () {\n        var _this = this;\n        var ticket = new Promise(function (resolve) {\n            return _this._queue.push(resolve);\n        });\n        if (!this._pending) {\n            this._dispatchNext();\n        }\n        return ticket;\n    };\n    Mutex.prototype.runExclusive = function (callback) {\n        return this.acquire().then(function (release) {\n            var result;\n            try {\n                result = callback();\n            }\n            catch (e) {\n                release();\n                throw e;\n            }\n            return Promise.resolve(result).then(function (x) { return (release(), x); }, function (e) {\n                release();\n                throw e;\n            });\n        });\n    };\n    Mutex.prototype._dispatchNext = function () {\n        if (this._queue.length > 0) {\n            this._pending = true;\n            this._queue.shift()(this._dispatchNext.bind(this));\n        }\n        else {\n            this._pending = false;\n        }\n    };\n    return Mutex;\n}());\nexport default Mutex;\n//# sourceMappingURL=Mutex.js.map","var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { browserOrNode } from '@aws-amplify/core';\nimport Observable from 'zen-observable-ts';\nvar ReachabilityNavigator = /** @class */ (function () {\n    function ReachabilityNavigator() {\n    }\n    ReachabilityNavigator.prototype.networkMonitor = function (netInfo) {\n        if (browserOrNode().isNode) {\n            return Observable.from([{ online: true }]);\n        }\n        return new Observable(function (observer) {\n            observer.next({ online: window.navigator.onLine });\n            var notifyOnline = function () { return observer.next({ online: true }); };\n            var notifyOffline = function () { return observer.next({ online: false }); };\n            window.addEventListener('online', notifyOnline);\n            window.addEventListener('offline', notifyOffline);\n            ReachabilityNavigator._observers.push(observer);\n            return function () {\n                window.removeEventListener('online', notifyOnline);\n                window.removeEventListener('offline', notifyOffline);\n                ReachabilityNavigator._observers = ReachabilityNavigator._observers.filter(function (_observer) { return _observer !== observer; });\n            };\n        });\n    };\n    // expose observers to simulate offline mode for integration testing\n    ReachabilityNavigator._observerOverride = function (status) {\n        var e_1, _a;\n        var _loop_1 = function (observer) {\n            if (observer.closed) {\n                ReachabilityNavigator._observers = ReachabilityNavigator._observers.filter(function (_observer) { return _observer !== observer; });\n                return \"continue\";\n            }\n            observer.next(status);\n        };\n        try {\n            for (var _b = __values(ReachabilityNavigator._observers), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var observer = _c.value;\n                _loop_1(observer);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    ReachabilityNavigator._observers = [];\n    return ReachabilityNavigator;\n}());\nexport default ReachabilityNavigator;\n//# sourceMappingURL=Reachability.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n    return ar;\n};\nimport { ConsoleLogger as Logger } from '../Logger/ConsoleLogger';\nvar logger = new Logger('Util');\nvar NonRetryableError = /** @class */ (function (_super) {\n    __extends(NonRetryableError, _super);\n    function NonRetryableError(message) {\n        var _this = _super.call(this, message) || this;\n        _this.nonRetryable = true;\n        return _this;\n    }\n    return NonRetryableError;\n}(Error));\nexport { NonRetryableError };\nvar isNonRetryableError = function (obj) {\n    var key = 'nonRetryable';\n    return obj && obj[key];\n};\n/**\n * @private\n * Internal use of Amplify only\n */\nexport function retry(functionToRetry, args, delayFn, attempt) {\n    if (attempt === void 0) { attempt = 1; }\n    return __awaiter(this, void 0, void 0, function () {\n        var err_1, retryIn_1;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    if (typeof functionToRetry !== 'function') {\n                        throw Error('functionToRetry must be a function');\n                    }\n                    logger.debug(functionToRetry.name + \" attempt #\" + attempt + \" with this vars: \" + JSON.stringify(args));\n                    _a.label = 1;\n                case 1:\n                    _a.trys.push([1, 3, , 8]);\n                    return [4 /*yield*/, functionToRetry.apply(void 0, __spread(args))];\n                case 2: return [2 /*return*/, _a.sent()];\n                case 3:\n                    err_1 = _a.sent();\n                    logger.debug(\"error on \" + functionToRetry.name, err_1);\n                    if (isNonRetryableError(err_1)) {\n                        logger.debug(functionToRetry.name + \" non retryable error\", err_1);\n                        throw err_1;\n                    }\n                    retryIn_1 = delayFn(attempt, args, err_1);\n                    logger.debug(functionToRetry.name + \" retrying in \" + retryIn_1 + \" ms\");\n                    if (!(retryIn_1 !== false)) return [3 /*break*/, 6];\n                    return [4 /*yield*/, new Promise(function (res) { return setTimeout(res, retryIn_1); })];\n                case 4:\n                    _a.sent();\n                    return [4 /*yield*/, retry(functionToRetry, args, delayFn, attempt + 1)];\n                case 5: return [2 /*return*/, _a.sent()];\n                case 6: throw err_1;\n                case 7: return [3 /*break*/, 8];\n                case 8: return [2 /*return*/];\n            }\n        });\n    });\n}\nvar MAX_DELAY_MS = 5 * 60 * 1000;\nfunction jitteredBackoff(maxDelayMs) {\n    var BASE_TIME_MS = 100;\n    var JITTER_FACTOR = 100;\n    return function (attempt) {\n        var delay = Math.pow(2, attempt) * BASE_TIME_MS + JITTER_FACTOR * Math.random();\n        return delay > maxDelayMs ? false : delay;\n    };\n}\n/**\n * @private\n * Internal use of Amplify only\n */\nexport var jitteredExponentialRetry = function (functionToRetry, args, maxDelayMs) {\n    if (maxDelayMs === void 0) { maxDelayMs = MAX_DELAY_MS; }\n    return retry(functionToRetry, args, jitteredBackoff(maxDelayMs));\n};\n//# sourceMappingURL=Retry.js.map","export * from './Retry';\nexport { default as Mutex } from './Mutex';\nexport { default as Reachability } from './Reachability';\nexport * from './DateUtils';\n//# sourceMappingURL=index.js.map","/*\n * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n/**\n * This Symbol is used to reference an internal-only PubSub provider that\n * is used for AppSync/GraphQL subscriptions in the API category.\n */\nvar hasSymbol = typeof Symbol !== 'undefined' && typeof Symbol.for === 'function';\nexport var INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER = hasSymbol\n    ? Symbol.for('INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER')\n    : '@@INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER';\nexport var INTERNAL_AWS_APPSYNC_REALTIME_PUBSUB_PROVIDER = hasSymbol\n    ? Symbol.for('INTERNAL_AWS_APPSYNC_REALTIME_PUBSUB_PROVIDER')\n    : '@@INTERNAL_AWS_APPSYNC_REALTIME_PUBSUB_PROVIDER';\nexport var USER_AGENT_HEADER = 'x-amz-user-agent';\n//# sourceMappingURL=constants.js.map","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { Amplify } from './Amplify';\nimport { Platform } from './Platform';\nexport { AmplifyClass } from './Amplify';\nexport { ClientDevice } from './ClientDevice';\nexport { ConsoleLogger, ConsoleLogger as Logger } from './Logger';\nexport * from './Errors';\nexport { Hub } from './Hub';\nexport { I18n } from './I18n';\nexport * from './JS';\nexport { Signer } from './Signer';\nexport * from './Parser';\nexport { FacebookOAuth, GoogleOAuth } from './OAuthHelper';\nexport * from './RNComponents';\nexport { Credentials, CredentialsClass } from './Credentials';\nexport { ServiceWorker } from './ServiceWorker';\nexport { StorageHelper, MemoryStorage } from './StorageHelper';\nexport { UniversalStorage } from './UniversalStorage';\nexport { Platform, getAmplifyUserAgent } from './Platform';\nexport * from './constants';\nexport var Constants = {\n    userAgent: Platform.userAgent,\n};\nexport * from './constants';\nexport * from './Util';\nexport { Amplify };\n/**\n * @deprecated use named import\n */\nexport default Amplify;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar msSubtleCryptoMethods = [\n    \"decrypt\",\n    \"digest\",\n    \"encrypt\",\n    \"exportKey\",\n    \"generateKey\",\n    \"importKey\",\n    \"sign\",\n    \"verify\"\n];\nfunction quacksLikeAnMsWindow(window) {\n    return \"MSInputMethodContext\" in window && \"msCrypto\" in window;\n}\n/**\n * Determines if the provided window is (or is like) the window object one would\n * expect to encounter in Internet Explorer 11.\n */\nfunction isMsWindow(window) {\n    if (quacksLikeAnMsWindow(window) && window.msCrypto.subtle !== undefined) {\n        var _a = window.msCrypto, getRandomValues = _a.getRandomValues, subtle_1 = _a.subtle;\n        return msSubtleCryptoMethods\n            .map(function (methodName) { return subtle_1[methodName]; })\n            .concat(getRandomValues)\n            .every(function (method) { return typeof method === \"function\"; });\n    }\n    return false;\n}\nexports.isMsWindow = isMsWindow;\n//# sourceMappingURL=MsWindow.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./MsWindow\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHA_256_HASH = { name: \"SHA-256\" };\nexports.SHA_256_HMAC_ALGO = {\n    name: \"HMAC\",\n    hash: exports.SHA_256_HASH\n};\nexports.EMPTY_DATA_SHA_256 = new Uint8Array([\n    227,\n    176,\n    196,\n    66,\n    152,\n    252,\n    28,\n    20,\n    154,\n    251,\n    244,\n    200,\n    153,\n    111,\n    185,\n    36,\n    39,\n    174,\n    65,\n    228,\n    100,\n    155,\n    147,\n    76,\n    164,\n    149,\n    153,\n    27,\n    120,\n    82,\n    184,\n    85\n]);\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ie11Sha256_1 = require(\"./ie11Sha256\");\nvar webCryptoSha256_1 = require(\"./webCryptoSha256\");\nvar sha256_js_1 = require(\"@aws-crypto/sha256-js\");\nvar supports_web_crypto_1 = require(\"@aws-crypto/supports-web-crypto\");\nvar ie11_detection_1 = require(\"@aws-crypto/ie11-detection\");\nvar util_locate_window_1 = require(\"@aws-sdk/util-locate-window\");\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        if (supports_web_crypto_1.supportsWebCrypto(util_locate_window_1.locateWindow())) {\n            this.hash = new webCryptoSha256_1.Sha256(secret);\n        }\n        else if (ie11_detection_1.isMsWindow(util_locate_window_1.locateWindow())) {\n            this.hash = new ie11Sha256_1.Sha256(secret);\n        }\n        else {\n            this.hash = new sha256_js_1.Sha256(secret);\n        }\n    }\n    Sha256.prototype.update = function (data, encoding) {\n        this.hash.update(data, encoding);\n    };\n    Sha256.prototype.digest = function () {\n        return this.hash.digest();\n    };\n    return Sha256;\n}());\nexports.Sha256 = Sha256;\n//# sourceMappingURL=crossPlatformSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isEmptyData_1 = require(\"./isEmptyData\");\nvar constants_1 = require(\"./constants\");\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\nvar util_locate_window_1 = require(\"@aws-sdk/util-locate-window\");\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        if (secret) {\n            this.operation = getKeyPromise(secret).then(function (keyData) {\n                return util_locate_window_1.locateWindow().msCrypto.subtle.sign(constants_1.SHA_256_HMAC_ALGO, keyData);\n            });\n            this.operation.catch(function () { });\n        }\n        else {\n            this.operation = Promise.resolve(util_locate_window_1.locateWindow().msCrypto.subtle.digest(\"SHA-256\"));\n        }\n    }\n    Sha256.prototype.update = function (toHash) {\n        var _this = this;\n        if (isEmptyData_1.isEmptyData(toHash)) {\n            return;\n        }\n        this.operation = this.operation.then(function (operation) {\n            operation.onerror = function () {\n                _this.operation = Promise.reject(new Error(\"Error encountered updating hash\"));\n            };\n            operation.process(toArrayBufferView(toHash));\n            return operation;\n        });\n        this.operation.catch(function () { });\n    };\n    Sha256.prototype.digest = function () {\n        return this.operation.then(function (operation) {\n            return new Promise(function (resolve, reject) {\n                operation.onerror = function () {\n                    reject(\"Error encountered finalizing hash\");\n                };\n                operation.oncomplete = function () {\n                    if (operation.result) {\n                        resolve(new Uint8Array(operation.result));\n                    }\n                    reject(\"Error encountered finalizing hash\");\n                };\n                operation.finish();\n            });\n        });\n    };\n    return Sha256;\n}());\nexports.Sha256 = Sha256;\nfunction getKeyPromise(secret) {\n    return new Promise(function (resolve, reject) {\n        var keyOperation = util_locate_window_1.locateWindow().msCrypto.subtle.importKey(\"raw\", toArrayBufferView(secret), constants_1.SHA_256_HMAC_ALGO, false, [\"sign\"]);\n        keyOperation.oncomplete = function () {\n            if (keyOperation.result) {\n                resolve(keyOperation.result);\n            }\n            reject(\"ImportKey completed without importing key.\");\n        };\n        keyOperation.onerror = function () {\n            reject(\"ImportKey failed to import key.\");\n        };\n    });\n}\nfunction toArrayBufferView(data) {\n    if (typeof data === \"string\") {\n        return util_utf8_browser_1.fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n}\n//# sourceMappingURL=ie11Sha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./crossPlatformSha256\"), exports);\nvar ie11Sha256_1 = require(\"./ie11Sha256\");\nexports.Ie11Sha256 = ie11Sha256_1.Sha256;\nvar webCryptoSha256_1 = require(\"./webCryptoSha256\");\nexports.WebCryptoSha256 = webCryptoSha256_1.Sha256;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isEmptyData(data) {\n    if (typeof data === \"string\") {\n        return data.length === 0;\n    }\n    return data.byteLength === 0;\n}\nexports.isEmptyData = isEmptyData;\n//# sourceMappingURL=isEmptyData.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\nvar isEmptyData_1 = require(\"./isEmptyData\");\nvar constants_1 = require(\"./constants\");\nvar util_locate_window_1 = require(\"@aws-sdk/util-locate-window\");\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        this.toHash = new Uint8Array(0);\n        if (secret !== void 0) {\n            this.key = new Promise(function (resolve, reject) {\n                util_locate_window_1.locateWindow()\n                    .crypto.subtle.importKey(\"raw\", convertToBuffer(secret), constants_1.SHA_256_HMAC_ALGO, false, [\"sign\"])\n                    .then(resolve, reject);\n            });\n            this.key.catch(function () { });\n        }\n    }\n    Sha256.prototype.update = function (data) {\n        if (isEmptyData_1.isEmptyData(data)) {\n            return;\n        }\n        var update = convertToBuffer(data);\n        var typedArray = new Uint8Array(this.toHash.byteLength + update.byteLength);\n        typedArray.set(this.toHash, 0);\n        typedArray.set(update, this.toHash.byteLength);\n        this.toHash = typedArray;\n    };\n    Sha256.prototype.digest = function () {\n        var _this = this;\n        if (this.key) {\n            return this.key.then(function (key) {\n                return util_locate_window_1.locateWindow()\n                    .crypto.subtle.sign(constants_1.SHA_256_HMAC_ALGO, key, _this.toHash)\n                    .then(function (data) { return new Uint8Array(data); });\n            });\n        }\n        if (isEmptyData_1.isEmptyData(this.toHash)) {\n            return Promise.resolve(constants_1.EMPTY_DATA_SHA_256);\n        }\n        return Promise.resolve()\n            .then(function () {\n            return util_locate_window_1.locateWindow().crypto.subtle.digest(constants_1.SHA_256_HASH, _this.toHash);\n        })\n            .then(function (data) { return Promise.resolve(new Uint8Array(data)); });\n    };\n    return Sha256;\n}());\nexports.Sha256 = Sha256;\nfunction convertToBuffer(data) {\n    if (typeof data === \"string\") {\n        return util_utf8_browser_1.fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n}\n//# sourceMappingURL=webCryptoSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar constants_1 = require(\"./constants\");\n/**\n * @internal\n */\nvar RawSha256 = /** @class */ (function () {\n    function RawSha256() {\n        this.state = Int32Array.from(constants_1.INIT);\n        this.temp = new Int32Array(64);\n        this.buffer = new Uint8Array(64);\n        this.bufferLength = 0;\n        this.bytesHashed = 0;\n        /**\n         * @internal\n         */\n        this.finished = false;\n    }\n    RawSha256.prototype.update = function (data) {\n        if (this.finished) {\n            throw new Error(\"Attempted to update an already finished hash.\");\n        }\n        var position = 0;\n        var byteLength = data.byteLength;\n        this.bytesHashed += byteLength;\n        if (this.bytesHashed * 8 > constants_1.MAX_HASHABLE_LENGTH) {\n            throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n        }\n        while (byteLength > 0) {\n            this.buffer[this.bufferLength++] = data[position++];\n            byteLength--;\n            if (this.bufferLength === constants_1.BLOCK_SIZE) {\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n        }\n    };\n    RawSha256.prototype.digest = function () {\n        if (!this.finished) {\n            var bitsHashed = this.bytesHashed * 8;\n            var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n            var undecoratedLength = this.bufferLength;\n            bufferView.setUint8(this.bufferLength++, 0x80);\n            // Ensure the final block has enough room for the hashed length\n            if (undecoratedLength % constants_1.BLOCK_SIZE >= constants_1.BLOCK_SIZE - 8) {\n                for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE; i++) {\n                    bufferView.setUint8(i, 0);\n                }\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n            for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE - 8; i++) {\n                bufferView.setUint8(i, 0);\n            }\n            bufferView.setUint32(constants_1.BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n            bufferView.setUint32(constants_1.BLOCK_SIZE - 4, bitsHashed);\n            this.hashBuffer();\n            this.finished = true;\n        }\n        // The value in state is little-endian rather than big-endian, so flip\n        // each word into a new Uint8Array\n        var out = new Uint8Array(constants_1.DIGEST_LENGTH);\n        for (var i = 0; i < 8; i++) {\n            out[i * 4] = (this.state[i] >>> 24) & 0xff;\n            out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n            out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n            out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n        }\n        return out;\n    };\n    RawSha256.prototype.hashBuffer = function () {\n        var _a = this, buffer = _a.buffer, state = _a.state;\n        var state0 = state[0], state1 = state[1], state2 = state[2], state3 = state[3], state4 = state[4], state5 = state[5], state6 = state[6], state7 = state[7];\n        for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {\n            if (i < 16) {\n                this.temp[i] =\n                    ((buffer[i * 4] & 0xff) << 24) |\n                        ((buffer[i * 4 + 1] & 0xff) << 16) |\n                        ((buffer[i * 4 + 2] & 0xff) << 8) |\n                        (buffer[i * 4 + 3] & 0xff);\n            }\n            else {\n                var u = this.temp[i - 2];\n                var t1_1 = ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n                u = this.temp[i - 15];\n                var t2_1 = ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n                this.temp[i] =\n                    ((t1_1 + this.temp[i - 7]) | 0) + ((t2_1 + this.temp[i - 16]) | 0);\n            }\n            var t1 = ((((((state4 >>> 6) | (state4 << 26)) ^\n                ((state4 >>> 11) | (state4 << 21)) ^\n                ((state4 >>> 25) | (state4 << 7))) +\n                ((state4 & state5) ^ (~state4 & state6))) |\n                0) +\n                ((state7 + ((constants_1.KEY[i] + this.temp[i]) | 0)) | 0)) |\n                0;\n            var t2 = ((((state0 >>> 2) | (state0 << 30)) ^\n                ((state0 >>> 13) | (state0 << 19)) ^\n                ((state0 >>> 22) | (state0 << 10))) +\n                ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n                0;\n            state7 = state6;\n            state6 = state5;\n            state5 = state4;\n            state4 = (state3 + t1) | 0;\n            state3 = state2;\n            state2 = state1;\n            state1 = state0;\n            state0 = (t1 + t2) | 0;\n        }\n        state[0] += state0;\n        state[1] += state1;\n        state[2] += state2;\n        state[3] += state3;\n        state[4] += state4;\n        state[5] += state5;\n        state[6] += state6;\n        state[7] += state7;\n    };\n    return RawSha256;\n}());\nexports.RawSha256 = RawSha256;\n//# sourceMappingURL=RawSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n */\nexports.BLOCK_SIZE = 64;\n/**\n * @internal\n */\nexports.DIGEST_LENGTH = 32;\n/**\n * @internal\n */\nexports.KEY = new Uint32Array([\n    0x428a2f98,\n    0x71374491,\n    0xb5c0fbcf,\n    0xe9b5dba5,\n    0x3956c25b,\n    0x59f111f1,\n    0x923f82a4,\n    0xab1c5ed5,\n    0xd807aa98,\n    0x12835b01,\n    0x243185be,\n    0x550c7dc3,\n    0x72be5d74,\n    0x80deb1fe,\n    0x9bdc06a7,\n    0xc19bf174,\n    0xe49b69c1,\n    0xefbe4786,\n    0x0fc19dc6,\n    0x240ca1cc,\n    0x2de92c6f,\n    0x4a7484aa,\n    0x5cb0a9dc,\n    0x76f988da,\n    0x983e5152,\n    0xa831c66d,\n    0xb00327c8,\n    0xbf597fc7,\n    0xc6e00bf3,\n    0xd5a79147,\n    0x06ca6351,\n    0x14292967,\n    0x27b70a85,\n    0x2e1b2138,\n    0x4d2c6dfc,\n    0x53380d13,\n    0x650a7354,\n    0x766a0abb,\n    0x81c2c92e,\n    0x92722c85,\n    0xa2bfe8a1,\n    0xa81a664b,\n    0xc24b8b70,\n    0xc76c51a3,\n    0xd192e819,\n    0xd6990624,\n    0xf40e3585,\n    0x106aa070,\n    0x19a4c116,\n    0x1e376c08,\n    0x2748774c,\n    0x34b0bcb5,\n    0x391c0cb3,\n    0x4ed8aa4a,\n    0x5b9cca4f,\n    0x682e6ff3,\n    0x748f82ee,\n    0x78a5636f,\n    0x84c87814,\n    0x8cc70208,\n    0x90befffa,\n    0xa4506ceb,\n    0xbef9a3f7,\n    0xc67178f2\n]);\n/**\n * @internal\n */\nexports.INIT = [\n    0x6a09e667,\n    0xbb67ae85,\n    0x3c6ef372,\n    0xa54ff53a,\n    0x510e527f,\n    0x9b05688c,\n    0x1f83d9ab,\n    0x5be0cd19\n];\n/**\n * @internal\n */\nexports.MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./jsSha256\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar constants_1 = require(\"./constants\");\nvar RawSha256_1 = require(\"./RawSha256\");\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        this.hash = new RawSha256_1.RawSha256();\n        if (secret) {\n            this.outer = new RawSha256_1.RawSha256();\n            var inner = bufferFromSecret(secret);\n            var outer = new Uint8Array(constants_1.BLOCK_SIZE);\n            outer.set(inner);\n            for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {\n                inner[i] ^= 0x36;\n                outer[i] ^= 0x5c;\n            }\n            this.hash.update(inner);\n            this.outer.update(outer);\n            // overwrite the copied key in memory\n            for (var i = 0; i < inner.byteLength; i++) {\n                inner[i] = 0;\n            }\n        }\n    }\n    Sha256.prototype.update = function (toHash) {\n        if (isEmptyData(toHash) || this.error) {\n            return;\n        }\n        try {\n            this.hash.update(convertToBuffer(toHash));\n        }\n        catch (e) {\n            this.error = e;\n        }\n    };\n    /* This synchronous method keeps compatibility\n     * with the v2 aws-sdk.\n     */\n    Sha256.prototype.digestSync = function () {\n        if (this.error) {\n            throw this.error;\n        }\n        if (this.outer) {\n            if (!this.outer.finished) {\n                this.outer.update(this.hash.digest());\n            }\n            return this.outer.digest();\n        }\n        return this.hash.digest();\n    };\n    /* The underlying digest method here is synchronous.\n     * To keep the same interface with the other hash functions\n     * the default is to expose this as an async method.\n     * However, it can sometimes be useful to have a sync method.\n     */\n    Sha256.prototype.digest = function () {\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\n            return tslib_1.__generator(this, function (_a) {\n                return [2 /*return*/, this.digestSync()];\n            });\n        });\n    };\n    return Sha256;\n}());\nexports.Sha256 = Sha256;\nfunction bufferFromSecret(secret) {\n    var input = convertToBuffer(secret);\n    if (input.byteLength > constants_1.BLOCK_SIZE) {\n        var bufferHash = new RawSha256_1.RawSha256();\n        bufferHash.update(input);\n        input = bufferHash.digest();\n    }\n    var buffer = new Uint8Array(constants_1.BLOCK_SIZE);\n    buffer.set(input);\n    return buffer;\n}\nfunction isEmptyData(data) {\n    if (typeof data === \"string\") {\n        return data.length === 0;\n    }\n    return data.byteLength === 0;\n}\nfunction convertToBuffer(data) {\n    if (typeof data === \"string\") {\n        return util_utf8_browser_1.fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n}\n//# sourceMappingURL=jsSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./supportsWebCrypto\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zdXBwb3J0c1dlYkNyeXB0b1wiO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar subtleCryptoMethods = [\n    \"decrypt\",\n    \"digest\",\n    \"encrypt\",\n    \"exportKey\",\n    \"generateKey\",\n    \"importKey\",\n    \"sign\",\n    \"verify\"\n];\nfunction supportsWebCrypto(window) {\n    if (supportsSecureRandom(window) &&\n        typeof window.crypto.subtle === \"object\") {\n        var subtle = window.crypto.subtle;\n        return supportsSubtleCrypto(subtle);\n    }\n    return false;\n}\nexports.supportsWebCrypto = supportsWebCrypto;\nfunction supportsSecureRandom(window) {\n    if (typeof window === \"object\" && typeof window.crypto === \"object\") {\n        var getRandomValues = window.crypto.getRandomValues;\n        return typeof getRandomValues === \"function\";\n    }\n    return false;\n}\nexports.supportsSecureRandom = supportsSecureRandom;\nfunction supportsSubtleCrypto(subtle) {\n    return (subtle &&\n        subtleCryptoMethods.every(function (methodName) { return typeof subtle[methodName] === \"function\"; }));\n}\nexports.supportsSubtleCrypto = supportsSubtleCrypto;\nfunction supportsZeroByteGCM(subtle) {\n    return tslib_1.__awaiter(this, void 0, void 0, function () {\n        var key, zeroByteAuthTag, _a;\n        return tslib_1.__generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    if (!supportsSubtleCrypto(subtle))\n                        return [2 /*return*/, false];\n                    _b.label = 1;\n                case 1:\n                    _b.trys.push([1, 4, , 5]);\n                    return [4 /*yield*/, subtle.generateKey({ name: \"AES-GCM\", length: 128 }, false, [\"encrypt\"])];\n                case 2:\n                    key = _b.sent();\n                    return [4 /*yield*/, subtle.encrypt({\n                            name: \"AES-GCM\",\n                            iv: new Uint8Array(Array(12)),\n                            additionalData: new Uint8Array(Array(16)),\n                            tagLength: 128\n                        }, key, new Uint8Array(0))];\n                case 3:\n                    zeroByteAuthTag = _b.sent();\n                    return [2 /*return*/, zeroByteAuthTag.byteLength === 16];\n                case 4:\n                    _a = _b.sent();\n                    return [2 /*return*/, false];\n                case 5: return [2 /*return*/];\n            }\n        });\n    });\n}\nexports.supportsZeroByteGCM = supportsZeroByteGCM;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydHNXZWJDcnlwdG8uanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJzdXBwb3J0c1dlYkNyeXB0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSxJQUFNLG1CQUFtQixHQUE4QjtJQUNyRCxTQUFTO0lBQ1QsUUFBUTtJQUNSLFNBQVM7SUFDVCxXQUFXO0lBQ1gsYUFBYTtJQUNiLFdBQVc7SUFDWCxNQUFNO0lBQ04sUUFBUTtDQUNULENBQUM7QUFFRixTQUFnQixpQkFBaUIsQ0FBQyxNQUFjO0lBQzlDLElBQ0Usb0JBQW9CLENBQUMsTUFBTSxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUN4QztRQUNRLElBQUEsNkJBQU0sQ0FBbUI7UUFFakMsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQVhELDhDQVdDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsTUFBYztJQUNqRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzNELElBQUEsK0NBQWUsQ0FBbUI7UUFFMUMsT0FBTyxPQUFPLGVBQWUsS0FBSyxVQUFVLENBQUM7S0FDOUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFSRCxvREFRQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLE1BQW9CO0lBQ3ZELE9BQU8sQ0FDTCxNQUFNO1FBQ04sbUJBQW1CLENBQUMsS0FBSyxDQUN2QixVQUFBLFVBQVUsSUFBSSxPQUFBLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsRUFBeEMsQ0FBd0MsQ0FDdkQsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQVBELG9EQU9DO0FBRUQsU0FBc0IsbUJBQW1CLENBQUMsTUFBb0I7Ozs7OztvQkFDNUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQzt3QkFBRSxzQkFBTyxLQUFLLEVBQUM7Ozs7b0JBRWxDLHFCQUFNLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQ2hDLEtBQUssRUFDTCxDQUFDLFNBQVMsQ0FBQyxDQUNaLEVBQUE7O29CQUpLLEdBQUcsR0FBRyxTQUlYO29CQUN1QixxQkFBTSxNQUFNLENBQUMsT0FBTyxDQUMxQzs0QkFDRSxJQUFJLEVBQUUsU0FBUzs0QkFDZixFQUFFLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUM3QixjQUFjLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QyxTQUFTLEVBQUUsR0FBRzt5QkFDZixFQUNELEdBQUcsRUFDSCxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDbEIsRUFBQTs7b0JBVEssZUFBZSxHQUFHLFNBU3ZCO29CQUNELHNCQUFPLGVBQWUsQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFDOzs7b0JBRXpDLHNCQUFPLEtBQUssRUFBQzs7Ozs7Q0FFaEI7QUF0QkQsa0RBc0JDIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBTdWJ0bGVDcnlwdG9NZXRob2QgPVxuICB8IFwiZGVjcnlwdFwiXG4gIHwgXCJkaWdlc3RcIlxuICB8IFwiZW5jcnlwdFwiXG4gIHwgXCJleHBvcnRLZXlcIlxuICB8IFwiZ2VuZXJhdGVLZXlcIlxuICB8IFwiaW1wb3J0S2V5XCJcbiAgfCBcInNpZ25cIlxuICB8IFwidmVyaWZ5XCI7XG5cbmNvbnN0IHN1YnRsZUNyeXB0b01ldGhvZHM6IEFycmF5PFN1YnRsZUNyeXB0b01ldGhvZD4gPSBbXG4gIFwiZGVjcnlwdFwiLFxuICBcImRpZ2VzdFwiLFxuICBcImVuY3J5cHRcIixcbiAgXCJleHBvcnRLZXlcIixcbiAgXCJnZW5lcmF0ZUtleVwiLFxuICBcImltcG9ydEtleVwiLFxuICBcInNpZ25cIixcbiAgXCJ2ZXJpZnlcIlxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzV2ViQ3J5cHRvKHdpbmRvdzogV2luZG93KTogYm9vbGVhbiB7XG4gIGlmIChcbiAgICBzdXBwb3J0c1NlY3VyZVJhbmRvbSh3aW5kb3cpICYmXG4gICAgdHlwZW9mIHdpbmRvdy5jcnlwdG8uc3VidGxlID09PSBcIm9iamVjdFwiXG4gICkge1xuICAgIGNvbnN0IHsgc3VidGxlIH0gPSB3aW5kb3cuY3J5cHRvO1xuXG4gICAgcmV0dXJuIHN1cHBvcnRzU3VidGxlQ3J5cHRvKHN1YnRsZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1NlY3VyZVJhbmRvbSh3aW5kb3c6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygd2luZG93LmNyeXB0byA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IHsgZ2V0UmFuZG9tVmFsdWVzIH0gPSB3aW5kb3cuY3J5cHRvO1xuXG4gICAgcmV0dXJuIHR5cGVvZiBnZXRSYW5kb21WYWx1ZXMgPT09IFwiZnVuY3Rpb25cIjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzU3VidGxlQ3J5cHRvKHN1YnRsZTogU3VidGxlQ3J5cHRvKSB7XG4gIHJldHVybiAoXG4gICAgc3VidGxlICYmXG4gICAgc3VidGxlQ3J5cHRvTWV0aG9kcy5ldmVyeShcbiAgICAgIG1ldGhvZE5hbWUgPT4gdHlwZW9mIHN1YnRsZVttZXRob2ROYW1lXSA9PT0gXCJmdW5jdGlvblwiXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNaZXJvQnl0ZUdDTShzdWJ0bGU6IFN1YnRsZUNyeXB0bykge1xuICBpZiAoIXN1cHBvcnRzU3VidGxlQ3J5cHRvKHN1YnRsZSkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCBzdWJ0bGUuZ2VuZXJhdGVLZXkoXG4gICAgICB7IG5hbWU6IFwiQUVTLUdDTVwiLCBsZW5ndGg6IDEyOCB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbXCJlbmNyeXB0XCJdXG4gICAgKTtcbiAgICBjb25zdCB6ZXJvQnl0ZUF1dGhUYWcgPSBhd2FpdCBzdWJ0bGUuZW5jcnlwdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgIGl2OiBuZXcgVWludDhBcnJheShBcnJheSgxMikpLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogbmV3IFVpbnQ4QXJyYXkoQXJyYXkoMTYpKSxcbiAgICAgICAgdGFnTGVuZ3RoOiAxMjhcbiAgICAgIH0sXG4gICAgICBrZXksXG4gICAgICBuZXcgVWludDhBcnJheSgwKVxuICAgICk7XG4gICAgcmV0dXJuIHplcm9CeXRlQXV0aFRhZy5ieXRlTGVuZ3RoID09PSAxNjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=","import { __extends } from \"tslib\";\nimport { CognitoIdentityClient } from \"./CognitoIdentityClient\";\nimport { CreateIdentityPoolCommand, } from \"./commands/CreateIdentityPoolCommand\";\nimport { DeleteIdentitiesCommand, } from \"./commands/DeleteIdentitiesCommand\";\nimport { DeleteIdentityPoolCommand, } from \"./commands/DeleteIdentityPoolCommand\";\nimport { DescribeIdentityCommand, } from \"./commands/DescribeIdentityCommand\";\nimport { DescribeIdentityPoolCommand, } from \"./commands/DescribeIdentityPoolCommand\";\nimport { GetCredentialsForIdentityCommand, } from \"./commands/GetCredentialsForIdentityCommand\";\nimport { GetIdCommand } from \"./commands/GetIdCommand\";\nimport { GetIdentityPoolRolesCommand, } from \"./commands/GetIdentityPoolRolesCommand\";\nimport { GetOpenIdTokenCommand, } from \"./commands/GetOpenIdTokenCommand\";\nimport { GetOpenIdTokenForDeveloperIdentityCommand, } from \"./commands/GetOpenIdTokenForDeveloperIdentityCommand\";\nimport { ListIdentitiesCommand, } from \"./commands/ListIdentitiesCommand\";\nimport { ListIdentityPoolsCommand, } from \"./commands/ListIdentityPoolsCommand\";\nimport { ListTagsForResourceCommand, } from \"./commands/ListTagsForResourceCommand\";\nimport { LookupDeveloperIdentityCommand, } from \"./commands/LookupDeveloperIdentityCommand\";\nimport { MergeDeveloperIdentitiesCommand, } from \"./commands/MergeDeveloperIdentitiesCommand\";\nimport { SetIdentityPoolRolesCommand, } from \"./commands/SetIdentityPoolRolesCommand\";\nimport { TagResourceCommand } from \"./commands/TagResourceCommand\";\nimport { UnlinkDeveloperIdentityCommand, } from \"./commands/UnlinkDeveloperIdentityCommand\";\nimport { UnlinkIdentityCommand, } from \"./commands/UnlinkIdentityCommand\";\nimport { UntagResourceCommand, } from \"./commands/UntagResourceCommand\";\nimport { UpdateIdentityPoolCommand, } from \"./commands/UpdateIdentityPoolCommand\";\n/**\n * <fullname>Amazon Cognito Federated Identities</fullname>\n *          <p>Amazon Cognito Federated Identities is a web service that delivers scoped temporary\n *          credentials to mobile devices and other untrusted environments. It uniquely identifies a\n *          device and supplies the user with a consistent identity over the lifetime of an\n *          application.</p>\n *          <p>Using Amazon Cognito Federated Identities, you can enable authentication with one or\n *          more third-party identity providers (Facebook, Google, or Login with Amazon) or an Amazon\n *          Cognito user pool, and you can also choose to support unauthenticated access from your app.\n *          Cognito delivers a unique identifier for each user and acts as an OpenID token provider\n *          trusted by AWS Security Token Service (STS) to access temporary, limited-privilege AWS\n *          credentials.</p>\n *          <p>For a description of the authentication flow from the Amazon Cognito Developer Guide\n *          see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html\">Authentication Flow</a>.</p>\n *          <p>For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito Federated Identities</a>.</p>\n */\nvar CognitoIdentity = /** @class */ (function (_super) {\n    __extends(CognitoIdentity, _super);\n    function CognitoIdentity() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CognitoIdentity.prototype.createIdentityPool = function (args, optionsOrCb, cb) {\n        var command = new CreateIdentityPoolCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.deleteIdentities = function (args, optionsOrCb, cb) {\n        var command = new DeleteIdentitiesCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.deleteIdentityPool = function (args, optionsOrCb, cb) {\n        var command = new DeleteIdentityPoolCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.describeIdentity = function (args, optionsOrCb, cb) {\n        var command = new DescribeIdentityCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.describeIdentityPool = function (args, optionsOrCb, cb) {\n        var command = new DescribeIdentityPoolCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.getCredentialsForIdentity = function (args, optionsOrCb, cb) {\n        var command = new GetCredentialsForIdentityCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.getId = function (args, optionsOrCb, cb) {\n        var command = new GetIdCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.getIdentityPoolRoles = function (args, optionsOrCb, cb) {\n        var command = new GetIdentityPoolRolesCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.getOpenIdToken = function (args, optionsOrCb, cb) {\n        var command = new GetOpenIdTokenCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.getOpenIdTokenForDeveloperIdentity = function (args, optionsOrCb, cb) {\n        var command = new GetOpenIdTokenForDeveloperIdentityCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.listIdentities = function (args, optionsOrCb, cb) {\n        var command = new ListIdentitiesCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.listIdentityPools = function (args, optionsOrCb, cb) {\n        var command = new ListIdentityPoolsCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.listTagsForResource = function (args, optionsOrCb, cb) {\n        var command = new ListTagsForResourceCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.lookupDeveloperIdentity = function (args, optionsOrCb, cb) {\n        var command = new LookupDeveloperIdentityCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.mergeDeveloperIdentities = function (args, optionsOrCb, cb) {\n        var command = new MergeDeveloperIdentitiesCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.setIdentityPoolRoles = function (args, optionsOrCb, cb) {\n        var command = new SetIdentityPoolRolesCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.tagResource = function (args, optionsOrCb, cb) {\n        var command = new TagResourceCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.unlinkDeveloperIdentity = function (args, optionsOrCb, cb) {\n        var command = new UnlinkDeveloperIdentityCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.unlinkIdentity = function (args, optionsOrCb, cb) {\n        var command = new UnlinkIdentityCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.untagResource = function (args, optionsOrCb, cb) {\n        var command = new UntagResourceCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    CognitoIdentity.prototype.updateIdentityPool = function (args, optionsOrCb, cb) {\n        var command = new UpdateIdentityPoolCommand(args);\n        if (typeof optionsOrCb === \"function\") {\n            this.send(command, optionsOrCb);\n        }\n        else if (typeof cb === \"function\") {\n            if (typeof optionsOrCb !== \"object\")\n                throw new Error(\"Expect http options but get \" + typeof optionsOrCb);\n            this.send(command, optionsOrCb || {}, cb);\n        }\n        else {\n            return this.send(command, optionsOrCb);\n        }\n    };\n    return CognitoIdentity;\n}(CognitoIdentityClient));\nexport { CognitoIdentity };\n//# sourceMappingURL=CognitoIdentity.js.map","import { __assign, __extends } from \"tslib\";\nimport { ClientDefaultValues as __ClientDefaultValues } from \"./runtimeConfig\";\nimport { resolveEndpointsConfig, resolveRegionConfig, } from \"@aws-sdk/config-resolver\";\nimport { getContentLengthPlugin } from \"@aws-sdk/middleware-content-length\";\nimport { getHostHeaderPlugin, resolveHostHeaderConfig, } from \"@aws-sdk/middleware-host-header\";\nimport { getRetryPlugin, resolveRetryConfig } from \"@aws-sdk/middleware-retry\";\nimport { resolveAwsAuthConfig } from \"@aws-sdk/middleware-signing\";\nimport { getUserAgentPlugin, resolveUserAgentConfig, } from \"@aws-sdk/middleware-user-agent\";\nimport { Client as __Client, } from \"@aws-sdk/smithy-client\";\n/**\n * <fullname>Amazon Cognito Federated Identities</fullname>\n *          <p>Amazon Cognito Federated Identities is a web service that delivers scoped temporary\n *          credentials to mobile devices and other untrusted environments. It uniquely identifies a\n *          device and supplies the user with a consistent identity over the lifetime of an\n *          application.</p>\n *          <p>Using Amazon Cognito Federated Identities, you can enable authentication with one or\n *          more third-party identity providers (Facebook, Google, or Login with Amazon) or an Amazon\n *          Cognito user pool, and you can also choose to support unauthenticated access from your app.\n *          Cognito delivers a unique identifier for each user and acts as an OpenID token provider\n *          trusted by AWS Security Token Service (STS) to access temporary, limited-privilege AWS\n *          credentials.</p>\n *          <p>For a description of the authentication flow from the Amazon Cognito Developer Guide\n *          see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html\">Authentication Flow</a>.</p>\n *          <p>For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito Federated Identities</a>.</p>\n */\nvar CognitoIdentityClient = /** @class */ (function (_super) {\n    __extends(CognitoIdentityClient, _super);\n    function CognitoIdentityClient(configuration) {\n        var _this = this;\n        var _config_0 = __assign(__assign({}, __ClientDefaultValues), configuration);\n        var _config_1 = resolveRegionConfig(_config_0);\n        var _config_2 = resolveEndpointsConfig(_config_1);\n        var _config_3 = resolveAwsAuthConfig(_config_2);\n        var _config_4 = resolveRetryConfig(_config_3);\n        var _config_5 = resolveUserAgentConfig(_config_4);\n        var _config_6 = resolveHostHeaderConfig(_config_5);\n        _this = _super.call(this, _config_6) || this;\n        _this.config = _config_6;\n        _this.middlewareStack.use(getRetryPlugin(_this.config));\n        _this.middlewareStack.use(getUserAgentPlugin(_this.config));\n        _this.middlewareStack.use(getContentLengthPlugin(_this.config));\n        _this.middlewareStack.use(getHostHeaderPlugin(_this.config));\n        return _this;\n    }\n    CognitoIdentityClient.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n    };\n    return CognitoIdentityClient;\n}(__Client));\nexport { CognitoIdentityClient };\n//# sourceMappingURL=CognitoIdentityClient.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1CreateIdentityPoolCommand, serializeAws_json1_1CreateIdentityPoolCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar CreateIdentityPoolCommand = /** @class */ (function (_super) {\n    __extends(CreateIdentityPoolCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function CreateIdentityPoolCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    CreateIdentityPoolCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    CreateIdentityPoolCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1CreateIdentityPoolCommand(input, context);\n    };\n    CreateIdentityPoolCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1CreateIdentityPoolCommand(output, context);\n    };\n    return CreateIdentityPoolCommand;\n}($Command));\nexport { CreateIdentityPoolCommand };\n//# sourceMappingURL=CreateIdentityPoolCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1DeleteIdentitiesCommand, serializeAws_json1_1DeleteIdentitiesCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar DeleteIdentitiesCommand = /** @class */ (function (_super) {\n    __extends(DeleteIdentitiesCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function DeleteIdentitiesCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    DeleteIdentitiesCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    DeleteIdentitiesCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1DeleteIdentitiesCommand(input, context);\n    };\n    DeleteIdentitiesCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1DeleteIdentitiesCommand(output, context);\n    };\n    return DeleteIdentitiesCommand;\n}($Command));\nexport { DeleteIdentitiesCommand };\n//# sourceMappingURL=DeleteIdentitiesCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1DeleteIdentityPoolCommand, serializeAws_json1_1DeleteIdentityPoolCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar DeleteIdentityPoolCommand = /** @class */ (function (_super) {\n    __extends(DeleteIdentityPoolCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function DeleteIdentityPoolCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    DeleteIdentityPoolCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    DeleteIdentityPoolCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1DeleteIdentityPoolCommand(input, context);\n    };\n    DeleteIdentityPoolCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1DeleteIdentityPoolCommand(output, context);\n    };\n    return DeleteIdentityPoolCommand;\n}($Command));\nexport { DeleteIdentityPoolCommand };\n//# sourceMappingURL=DeleteIdentityPoolCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1DescribeIdentityCommand, serializeAws_json1_1DescribeIdentityCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar DescribeIdentityCommand = /** @class */ (function (_super) {\n    __extends(DescribeIdentityCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function DescribeIdentityCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    DescribeIdentityCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    DescribeIdentityCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1DescribeIdentityCommand(input, context);\n    };\n    DescribeIdentityCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1DescribeIdentityCommand(output, context);\n    };\n    return DescribeIdentityCommand;\n}($Command));\nexport { DescribeIdentityCommand };\n//# sourceMappingURL=DescribeIdentityCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1DescribeIdentityPoolCommand, serializeAws_json1_1DescribeIdentityPoolCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar DescribeIdentityPoolCommand = /** @class */ (function (_super) {\n    __extends(DescribeIdentityPoolCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function DescribeIdentityPoolCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    DescribeIdentityPoolCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    DescribeIdentityPoolCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1DescribeIdentityPoolCommand(input, context);\n    };\n    DescribeIdentityPoolCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1DescribeIdentityPoolCommand(output, context);\n    };\n    return DescribeIdentityPoolCommand;\n}($Command));\nexport { DescribeIdentityPoolCommand };\n//# sourceMappingURL=DescribeIdentityPoolCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1GetCredentialsForIdentityCommand, serializeAws_json1_1GetCredentialsForIdentityCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar GetCredentialsForIdentityCommand = /** @class */ (function (_super) {\n    __extends(GetCredentialsForIdentityCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function GetCredentialsForIdentityCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    GetCredentialsForIdentityCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    GetCredentialsForIdentityCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1GetCredentialsForIdentityCommand(input, context);\n    };\n    GetCredentialsForIdentityCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1GetCredentialsForIdentityCommand(output, context);\n    };\n    return GetCredentialsForIdentityCommand;\n}($Command));\nexport { GetCredentialsForIdentityCommand };\n//# sourceMappingURL=GetCredentialsForIdentityCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1GetIdCommand, serializeAws_json1_1GetIdCommand } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar GetIdCommand = /** @class */ (function (_super) {\n    __extends(GetIdCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function GetIdCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    GetIdCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    GetIdCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1GetIdCommand(input, context);\n    };\n    GetIdCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1GetIdCommand(output, context);\n    };\n    return GetIdCommand;\n}($Command));\nexport { GetIdCommand };\n//# sourceMappingURL=GetIdCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1GetIdentityPoolRolesCommand, serializeAws_json1_1GetIdentityPoolRolesCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar GetIdentityPoolRolesCommand = /** @class */ (function (_super) {\n    __extends(GetIdentityPoolRolesCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function GetIdentityPoolRolesCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    GetIdentityPoolRolesCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    GetIdentityPoolRolesCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1GetIdentityPoolRolesCommand(input, context);\n    };\n    GetIdentityPoolRolesCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1GetIdentityPoolRolesCommand(output, context);\n    };\n    return GetIdentityPoolRolesCommand;\n}($Command));\nexport { GetIdentityPoolRolesCommand };\n//# sourceMappingURL=GetIdentityPoolRolesCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1GetOpenIdTokenCommand, serializeAws_json1_1GetOpenIdTokenCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar GetOpenIdTokenCommand = /** @class */ (function (_super) {\n    __extends(GetOpenIdTokenCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function GetOpenIdTokenCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    GetOpenIdTokenCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    GetOpenIdTokenCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1GetOpenIdTokenCommand(input, context);\n    };\n    GetOpenIdTokenCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1GetOpenIdTokenCommand(output, context);\n    };\n    return GetOpenIdTokenCommand;\n}($Command));\nexport { GetOpenIdTokenCommand };\n//# sourceMappingURL=GetOpenIdTokenCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommand, serializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar GetOpenIdTokenForDeveloperIdentityCommand = /** @class */ (function (_super) {\n    __extends(GetOpenIdTokenForDeveloperIdentityCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function GetOpenIdTokenForDeveloperIdentityCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    GetOpenIdTokenForDeveloperIdentityCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    GetOpenIdTokenForDeveloperIdentityCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommand(input, context);\n    };\n    GetOpenIdTokenForDeveloperIdentityCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommand(output, context);\n    };\n    return GetOpenIdTokenForDeveloperIdentityCommand;\n}($Command));\nexport { GetOpenIdTokenForDeveloperIdentityCommand };\n//# sourceMappingURL=GetOpenIdTokenForDeveloperIdentityCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1ListIdentitiesCommand, serializeAws_json1_1ListIdentitiesCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar ListIdentitiesCommand = /** @class */ (function (_super) {\n    __extends(ListIdentitiesCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function ListIdentitiesCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    ListIdentitiesCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    ListIdentitiesCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1ListIdentitiesCommand(input, context);\n    };\n    ListIdentitiesCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1ListIdentitiesCommand(output, context);\n    };\n    return ListIdentitiesCommand;\n}($Command));\nexport { ListIdentitiesCommand };\n//# sourceMappingURL=ListIdentitiesCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1ListIdentityPoolsCommand, serializeAws_json1_1ListIdentityPoolsCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar ListIdentityPoolsCommand = /** @class */ (function (_super) {\n    __extends(ListIdentityPoolsCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function ListIdentityPoolsCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    ListIdentityPoolsCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    ListIdentityPoolsCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1ListIdentityPoolsCommand(input, context);\n    };\n    ListIdentityPoolsCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1ListIdentityPoolsCommand(output, context);\n    };\n    return ListIdentityPoolsCommand;\n}($Command));\nexport { ListIdentityPoolsCommand };\n//# sourceMappingURL=ListIdentityPoolsCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1ListTagsForResourceCommand, serializeAws_json1_1ListTagsForResourceCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar ListTagsForResourceCommand = /** @class */ (function (_super) {\n    __extends(ListTagsForResourceCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function ListTagsForResourceCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    ListTagsForResourceCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    ListTagsForResourceCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1ListTagsForResourceCommand(input, context);\n    };\n    ListTagsForResourceCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1ListTagsForResourceCommand(output, context);\n    };\n    return ListTagsForResourceCommand;\n}($Command));\nexport { ListTagsForResourceCommand };\n//# sourceMappingURL=ListTagsForResourceCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1LookupDeveloperIdentityCommand, serializeAws_json1_1LookupDeveloperIdentityCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar LookupDeveloperIdentityCommand = /** @class */ (function (_super) {\n    __extends(LookupDeveloperIdentityCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function LookupDeveloperIdentityCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    LookupDeveloperIdentityCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    LookupDeveloperIdentityCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1LookupDeveloperIdentityCommand(input, context);\n    };\n    LookupDeveloperIdentityCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1LookupDeveloperIdentityCommand(output, context);\n    };\n    return LookupDeveloperIdentityCommand;\n}($Command));\nexport { LookupDeveloperIdentityCommand };\n//# sourceMappingURL=LookupDeveloperIdentityCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1MergeDeveloperIdentitiesCommand, serializeAws_json1_1MergeDeveloperIdentitiesCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar MergeDeveloperIdentitiesCommand = /** @class */ (function (_super) {\n    __extends(MergeDeveloperIdentitiesCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function MergeDeveloperIdentitiesCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    MergeDeveloperIdentitiesCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    MergeDeveloperIdentitiesCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1MergeDeveloperIdentitiesCommand(input, context);\n    };\n    MergeDeveloperIdentitiesCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1MergeDeveloperIdentitiesCommand(output, context);\n    };\n    return MergeDeveloperIdentitiesCommand;\n}($Command));\nexport { MergeDeveloperIdentitiesCommand };\n//# sourceMappingURL=MergeDeveloperIdentitiesCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1SetIdentityPoolRolesCommand, serializeAws_json1_1SetIdentityPoolRolesCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar SetIdentityPoolRolesCommand = /** @class */ (function (_super) {\n    __extends(SetIdentityPoolRolesCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function SetIdentityPoolRolesCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    SetIdentityPoolRolesCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    SetIdentityPoolRolesCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1SetIdentityPoolRolesCommand(input, context);\n    };\n    SetIdentityPoolRolesCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1SetIdentityPoolRolesCommand(output, context);\n    };\n    return SetIdentityPoolRolesCommand;\n}($Command));\nexport { SetIdentityPoolRolesCommand };\n//# sourceMappingURL=SetIdentityPoolRolesCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1TagResourceCommand, serializeAws_json1_1TagResourceCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar TagResourceCommand = /** @class */ (function (_super) {\n    __extends(TagResourceCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function TagResourceCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    TagResourceCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    TagResourceCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1TagResourceCommand(input, context);\n    };\n    TagResourceCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1TagResourceCommand(output, context);\n    };\n    return TagResourceCommand;\n}($Command));\nexport { TagResourceCommand };\n//# sourceMappingURL=TagResourceCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1UnlinkDeveloperIdentityCommand, serializeAws_json1_1UnlinkDeveloperIdentityCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar UnlinkDeveloperIdentityCommand = /** @class */ (function (_super) {\n    __extends(UnlinkDeveloperIdentityCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function UnlinkDeveloperIdentityCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    UnlinkDeveloperIdentityCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    UnlinkDeveloperIdentityCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1UnlinkDeveloperIdentityCommand(input, context);\n    };\n    UnlinkDeveloperIdentityCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1UnlinkDeveloperIdentityCommand(output, context);\n    };\n    return UnlinkDeveloperIdentityCommand;\n}($Command));\nexport { UnlinkDeveloperIdentityCommand };\n//# sourceMappingURL=UnlinkDeveloperIdentityCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1UnlinkIdentityCommand, serializeAws_json1_1UnlinkIdentityCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar UnlinkIdentityCommand = /** @class */ (function (_super) {\n    __extends(UnlinkIdentityCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function UnlinkIdentityCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    UnlinkIdentityCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    UnlinkIdentityCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1UnlinkIdentityCommand(input, context);\n    };\n    UnlinkIdentityCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1UnlinkIdentityCommand(output, context);\n    };\n    return UnlinkIdentityCommand;\n}($Command));\nexport { UnlinkIdentityCommand };\n//# sourceMappingURL=UnlinkIdentityCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1UntagResourceCommand, serializeAws_json1_1UntagResourceCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar UntagResourceCommand = /** @class */ (function (_super) {\n    __extends(UntagResourceCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function UntagResourceCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    UntagResourceCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    UntagResourceCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1UntagResourceCommand(input, context);\n    };\n    UntagResourceCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1UntagResourceCommand(output, context);\n    };\n    return UntagResourceCommand;\n}($Command));\nexport { UntagResourceCommand };\n//# sourceMappingURL=UntagResourceCommand.js.map","import { __extends } from \"tslib\";\nimport { deserializeAws_json1_1UpdateIdentityPoolCommand, serializeAws_json1_1UpdateIdentityPoolCommand, } from \"../protocols/Aws_json1_1\";\nimport { getSerdePlugin } from \"@aws-sdk/middleware-serde\";\nimport { getAwsAuthPlugin } from \"@aws-sdk/middleware-signing\";\nimport { Command as $Command } from \"@aws-sdk/smithy-client\";\nvar UpdateIdentityPoolCommand = /** @class */ (function (_super) {\n    __extends(UpdateIdentityPoolCommand, _super);\n    // Start section: command_properties\n    // End section: command_properties\n    function UpdateIdentityPoolCommand(input) {\n        var _this = \n        // Start section: command_constructor\n        _super.call(this) || this;\n        _this.input = input;\n        return _this;\n        // End section: command_constructor\n    }\n    UpdateIdentityPoolCommand.prototype.resolveMiddleware = function (clientStack, configuration, options) {\n        this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));\n        this.middlewareStack.use(getAwsAuthPlugin(configuration));\n        var stack = clientStack.concat(this.middlewareStack);\n        var handlerExecutionContext = {\n            logger: {},\n        };\n        var requestHandler = configuration.requestHandler;\n        return stack.resolve(function (request) {\n            return requestHandler.handle(request.request, options || {});\n        }, handlerExecutionContext);\n    };\n    UpdateIdentityPoolCommand.prototype.serialize = function (input, context) {\n        return serializeAws_json1_1UpdateIdentityPoolCommand(input, context);\n    };\n    UpdateIdentityPoolCommand.prototype.deserialize = function (output, context) {\n        return deserializeAws_json1_1UpdateIdentityPoolCommand(output, context);\n    };\n    return UpdateIdentityPoolCommand;\n}($Command));\nexport { UpdateIdentityPoolCommand };\n//# sourceMappingURL=UpdateIdentityPoolCommand.js.map","// Partition default templates\nvar AWS_TEMPLATE = \"cognito-identity.{region}.amazonaws.com\";\nvar AWS_CN_TEMPLATE = \"cognito-identity.{region}.amazonaws.com.cn\";\nvar AWS_ISO_TEMPLATE = \"cognito-identity.{region}.c2s.ic.gov\";\nvar AWS_ISO_B_TEMPLATE = \"cognito-identity.{region}.sc2s.sgov.gov\";\nvar AWS_US_GOV_TEMPLATE = \"cognito-identity.{region}.amazonaws.com\";\n// Partition regions\nvar AWS_REGIONS = new Set([\n    \"ap-south-1\",\n    \"eu-north-1\",\n    \"eu-west-3\",\n    \"eu-west-2\",\n    \"eu-west-1\",\n    \"ap-northeast-2\",\n    \"ap-northeast-1\",\n    \"me-south-1\",\n    \"ca-central-1\",\n    \"sa-east-1\",\n    \"ap-east-1\",\n    \"ap-southeast-1\",\n    \"ap-southeast-2\",\n    \"eu-central-1\",\n    \"us-east-1\",\n    \"us-east-2\",\n    \"us-west-1\",\n    \"us-west-2\",\n]);\nvar AWS_CN_REGIONS = new Set([\"cn-north-1\", \"cn-northwest-1\"]);\nvar AWS_ISO_REGIONS = new Set([\"us-iso-east-1\"]);\nvar AWS_ISO_B_REGIONS = new Set([\"us-isob-east-1\"]);\nvar AWS_US_GOV_REGIONS = new Set([\"us-gov-west-1\", \"us-gov-east-1\"]);\nexport var defaultRegionInfoProvider = function (region, options) {\n    var regionInfo = undefined;\n    switch (region) {\n        // First, try to match exact region names.\n        case \"ap-northeast-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.ap-northeast-1.amazonaws.com\",\n            };\n            break;\n        case \"ap-northeast-2\":\n            regionInfo = {\n                hostname: \"cognito-identity.ap-northeast-2.amazonaws.com\",\n            };\n            break;\n        case \"ap-south-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.ap-south-1.amazonaws.com\",\n            };\n            break;\n        case \"ap-southeast-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.ap-southeast-1.amazonaws.com\",\n            };\n            break;\n        case \"ap-southeast-2\":\n            regionInfo = {\n                hostname: \"cognito-identity.ap-southeast-2.amazonaws.com\",\n            };\n            break;\n        case \"ca-central-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.ca-central-1.amazonaws.com\",\n            };\n            break;\n        case \"cn-north-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.cn-north-1.amazonaws.com.cn\",\n            };\n            break;\n        case \"eu-central-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.eu-central-1.amazonaws.com\",\n            };\n            break;\n        case \"eu-west-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.eu-west-1.amazonaws.com\",\n            };\n            break;\n        case \"eu-west-2\":\n            regionInfo = {\n                hostname: \"cognito-identity.eu-west-2.amazonaws.com\",\n            };\n            break;\n        case \"us-east-1\":\n            regionInfo = {\n                hostname: \"cognito-identity.us-east-1.amazonaws.com\",\n            };\n            break;\n        case \"us-east-2\":\n            regionInfo = {\n                hostname: \"cognito-identity.us-east-2.amazonaws.com\",\n            };\n            break;\n        case \"us-west-2\":\n            regionInfo = {\n                hostname: \"cognito-identity.us-west-2.amazonaws.com\",\n            };\n            break;\n        // Next, try to match partition endpoints.\n        default:\n            if (AWS_REGIONS.has(region)) {\n                regionInfo = {\n                    hostname: AWS_TEMPLATE.replace(\"{region}\", region),\n                };\n            }\n            if (AWS_CN_REGIONS.has(region)) {\n                regionInfo = {\n                    hostname: AWS_CN_TEMPLATE.replace(\"{region}\", region),\n                };\n            }\n            if (AWS_ISO_REGIONS.has(region)) {\n                regionInfo = {\n                    hostname: AWS_ISO_TEMPLATE.replace(\"{region}\", region),\n                };\n            }\n            if (AWS_ISO_B_REGIONS.has(region)) {\n                regionInfo = {\n                    hostname: AWS_ISO_B_TEMPLATE.replace(\"{region}\", region),\n                };\n            }\n            if (AWS_US_GOV_REGIONS.has(region)) {\n                regionInfo = {\n                    hostname: AWS_US_GOV_TEMPLATE.replace(\"{region}\", region),\n                };\n            }\n            // Finally, assume it's an AWS partition endpoint.\n            if (regionInfo === undefined) {\n                regionInfo = {\n                    hostname: AWS_TEMPLATE.replace(\"{region}\", region),\n                };\n            }\n    }\n    return Promise.resolve(regionInfo);\n};\n//# sourceMappingURL=endpoints.js.map","export * from \"./CognitoIdentityClient\";\nexport * from \"./CognitoIdentity\";\nexport * from \"./commands/CreateIdentityPoolCommand\";\nexport * from \"./commands/DeleteIdentitiesCommand\";\nexport * from \"./commands/DeleteIdentityPoolCommand\";\nexport * from \"./commands/DescribeIdentityCommand\";\nexport * from \"./commands/DescribeIdentityPoolCommand\";\nexport * from \"./commands/GetCredentialsForIdentityCommand\";\nexport * from \"./commands/GetIdCommand\";\nexport * from \"./commands/GetIdentityPoolRolesCommand\";\nexport * from \"./commands/GetOpenIdTokenCommand\";\nexport * from \"./commands/GetOpenIdTokenForDeveloperIdentityCommand\";\nexport * from \"./commands/ListIdentitiesCommand\";\nexport * from \"./commands/ListIdentityPoolsCommand\";\nexport * from \"./commands/ListTagsForResourceCommand\";\nexport * from \"./commands/LookupDeveloperIdentityCommand\";\nexport * from \"./commands/MergeDeveloperIdentitiesCommand\";\nexport * from \"./commands/SetIdentityPoolRolesCommand\";\nexport * from \"./commands/TagResourceCommand\";\nexport * from \"./commands/UnlinkDeveloperIdentityCommand\";\nexport * from \"./commands/UnlinkIdentityCommand\";\nexport * from \"./commands/UntagResourceCommand\";\nexport * from \"./commands/UpdateIdentityPoolCommand\";\nexport * from \"./models/index\";\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { isa as __isa } from \"@aws-sdk/smithy-client\";\nexport var AmbiguousRoleResolutionType;\n(function (AmbiguousRoleResolutionType) {\n    AmbiguousRoleResolutionType[\"AUTHENTICATED_ROLE\"] = \"AuthenticatedRole\";\n    AmbiguousRoleResolutionType[\"DENY\"] = \"Deny\";\n})(AmbiguousRoleResolutionType || (AmbiguousRoleResolutionType = {}));\nexport var CognitoIdentityProvider;\n(function (CognitoIdentityProvider) {\n    CognitoIdentityProvider.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    CognitoIdentityProvider.isa = function (o) { return __isa(o, \"CognitoIdentityProvider\"); };\n})(CognitoIdentityProvider || (CognitoIdentityProvider = {}));\nexport var ConcurrentModificationException;\n(function (ConcurrentModificationException) {\n    ConcurrentModificationException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ConcurrentModificationException.isa = function (o) { return __isa(o, \"ConcurrentModificationException\"); };\n})(ConcurrentModificationException || (ConcurrentModificationException = {}));\nexport var CreateIdentityPoolInput;\n(function (CreateIdentityPoolInput) {\n    CreateIdentityPoolInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    CreateIdentityPoolInput.isa = function (o) { return __isa(o, \"CreateIdentityPoolInput\"); };\n})(CreateIdentityPoolInput || (CreateIdentityPoolInput = {}));\nexport var Credentials;\n(function (Credentials) {\n    Credentials.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    Credentials.isa = function (o) { return __isa(o, \"Credentials\"); };\n})(Credentials || (Credentials = {}));\nexport var DeleteIdentitiesInput;\n(function (DeleteIdentitiesInput) {\n    DeleteIdentitiesInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    DeleteIdentitiesInput.isa = function (o) { return __isa(o, \"DeleteIdentitiesInput\"); };\n})(DeleteIdentitiesInput || (DeleteIdentitiesInput = {}));\nexport var DeleteIdentitiesResponse;\n(function (DeleteIdentitiesResponse) {\n    DeleteIdentitiesResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    DeleteIdentitiesResponse.isa = function (o) { return __isa(o, \"DeleteIdentitiesResponse\"); };\n})(DeleteIdentitiesResponse || (DeleteIdentitiesResponse = {}));\nexport var DeleteIdentityPoolInput;\n(function (DeleteIdentityPoolInput) {\n    DeleteIdentityPoolInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    DeleteIdentityPoolInput.isa = function (o) { return __isa(o, \"DeleteIdentityPoolInput\"); };\n})(DeleteIdentityPoolInput || (DeleteIdentityPoolInput = {}));\nexport var DescribeIdentityInput;\n(function (DescribeIdentityInput) {\n    DescribeIdentityInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    DescribeIdentityInput.isa = function (o) { return __isa(o, \"DescribeIdentityInput\"); };\n})(DescribeIdentityInput || (DescribeIdentityInput = {}));\nexport var DescribeIdentityPoolInput;\n(function (DescribeIdentityPoolInput) {\n    DescribeIdentityPoolInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    DescribeIdentityPoolInput.isa = function (o) { return __isa(o, \"DescribeIdentityPoolInput\"); };\n})(DescribeIdentityPoolInput || (DescribeIdentityPoolInput = {}));\nexport var DeveloperUserAlreadyRegisteredException;\n(function (DeveloperUserAlreadyRegisteredException) {\n    DeveloperUserAlreadyRegisteredException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    DeveloperUserAlreadyRegisteredException.isa = function (o) {\n        return __isa(o, \"DeveloperUserAlreadyRegisteredException\");\n    };\n})(DeveloperUserAlreadyRegisteredException || (DeveloperUserAlreadyRegisteredException = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n    ErrorCode[\"ACCESS_DENIED\"] = \"AccessDenied\";\n    ErrorCode[\"INTERNAL_SERVER_ERROR\"] = \"InternalServerError\";\n})(ErrorCode || (ErrorCode = {}));\nexport var ExternalServiceException;\n(function (ExternalServiceException) {\n    ExternalServiceException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ExternalServiceException.isa = function (o) { return __isa(o, \"ExternalServiceException\"); };\n})(ExternalServiceException || (ExternalServiceException = {}));\nexport var GetCredentialsForIdentityInput;\n(function (GetCredentialsForIdentityInput) {\n    GetCredentialsForIdentityInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetCredentialsForIdentityInput.isa = function (o) { return __isa(o, \"GetCredentialsForIdentityInput\"); };\n})(GetCredentialsForIdentityInput || (GetCredentialsForIdentityInput = {}));\nexport var GetCredentialsForIdentityResponse;\n(function (GetCredentialsForIdentityResponse) {\n    GetCredentialsForIdentityResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetCredentialsForIdentityResponse.isa = function (o) { return __isa(o, \"GetCredentialsForIdentityResponse\"); };\n})(GetCredentialsForIdentityResponse || (GetCredentialsForIdentityResponse = {}));\nexport var GetIdentityPoolRolesInput;\n(function (GetIdentityPoolRolesInput) {\n    GetIdentityPoolRolesInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetIdentityPoolRolesInput.isa = function (o) { return __isa(o, \"GetIdentityPoolRolesInput\"); };\n})(GetIdentityPoolRolesInput || (GetIdentityPoolRolesInput = {}));\nexport var GetIdentityPoolRolesResponse;\n(function (GetIdentityPoolRolesResponse) {\n    GetIdentityPoolRolesResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetIdentityPoolRolesResponse.isa = function (o) { return __isa(o, \"GetIdentityPoolRolesResponse\"); };\n})(GetIdentityPoolRolesResponse || (GetIdentityPoolRolesResponse = {}));\nexport var GetIdInput;\n(function (GetIdInput) {\n    GetIdInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetIdInput.isa = function (o) { return __isa(o, \"GetIdInput\"); };\n})(GetIdInput || (GetIdInput = {}));\nexport var GetIdResponse;\n(function (GetIdResponse) {\n    GetIdResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetIdResponse.isa = function (o) { return __isa(o, \"GetIdResponse\"); };\n})(GetIdResponse || (GetIdResponse = {}));\nexport var GetOpenIdTokenForDeveloperIdentityInput;\n(function (GetOpenIdTokenForDeveloperIdentityInput) {\n    GetOpenIdTokenForDeveloperIdentityInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetOpenIdTokenForDeveloperIdentityInput.isa = function (o) {\n        return __isa(o, \"GetOpenIdTokenForDeveloperIdentityInput\");\n    };\n})(GetOpenIdTokenForDeveloperIdentityInput || (GetOpenIdTokenForDeveloperIdentityInput = {}));\nexport var GetOpenIdTokenForDeveloperIdentityResponse;\n(function (GetOpenIdTokenForDeveloperIdentityResponse) {\n    GetOpenIdTokenForDeveloperIdentityResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetOpenIdTokenForDeveloperIdentityResponse.isa = function (o) {\n        return __isa(o, \"GetOpenIdTokenForDeveloperIdentityResponse\");\n    };\n})(GetOpenIdTokenForDeveloperIdentityResponse || (GetOpenIdTokenForDeveloperIdentityResponse = {}));\nexport var GetOpenIdTokenInput;\n(function (GetOpenIdTokenInput) {\n    GetOpenIdTokenInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetOpenIdTokenInput.isa = function (o) { return __isa(o, \"GetOpenIdTokenInput\"); };\n})(GetOpenIdTokenInput || (GetOpenIdTokenInput = {}));\nexport var GetOpenIdTokenResponse;\n(function (GetOpenIdTokenResponse) {\n    GetOpenIdTokenResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    GetOpenIdTokenResponse.isa = function (o) { return __isa(o, \"GetOpenIdTokenResponse\"); };\n})(GetOpenIdTokenResponse || (GetOpenIdTokenResponse = {}));\nexport var IdentityDescription;\n(function (IdentityDescription) {\n    IdentityDescription.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    IdentityDescription.isa = function (o) { return __isa(o, \"IdentityDescription\"); };\n})(IdentityDescription || (IdentityDescription = {}));\nexport var IdentityPool;\n(function (IdentityPool) {\n    IdentityPool.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    IdentityPool.isa = function (o) { return __isa(o, \"IdentityPool\"); };\n})(IdentityPool || (IdentityPool = {}));\nexport var IdentityPoolShortDescription;\n(function (IdentityPoolShortDescription) {\n    IdentityPoolShortDescription.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    IdentityPoolShortDescription.isa = function (o) { return __isa(o, \"IdentityPoolShortDescription\"); };\n})(IdentityPoolShortDescription || (IdentityPoolShortDescription = {}));\nexport var InternalErrorException;\n(function (InternalErrorException) {\n    InternalErrorException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    InternalErrorException.isa = function (o) { return __isa(o, \"InternalErrorException\"); };\n})(InternalErrorException || (InternalErrorException = {}));\nexport var InvalidIdentityPoolConfigurationException;\n(function (InvalidIdentityPoolConfigurationException) {\n    InvalidIdentityPoolConfigurationException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    InvalidIdentityPoolConfigurationException.isa = function (o) {\n        return __isa(o, \"InvalidIdentityPoolConfigurationException\");\n    };\n})(InvalidIdentityPoolConfigurationException || (InvalidIdentityPoolConfigurationException = {}));\nexport var InvalidParameterException;\n(function (InvalidParameterException) {\n    InvalidParameterException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    InvalidParameterException.isa = function (o) { return __isa(o, \"InvalidParameterException\"); };\n})(InvalidParameterException || (InvalidParameterException = {}));\nexport var LimitExceededException;\n(function (LimitExceededException) {\n    LimitExceededException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    LimitExceededException.isa = function (o) { return __isa(o, \"LimitExceededException\"); };\n})(LimitExceededException || (LimitExceededException = {}));\nexport var ListIdentitiesInput;\n(function (ListIdentitiesInput) {\n    ListIdentitiesInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ListIdentitiesInput.isa = function (o) { return __isa(o, \"ListIdentitiesInput\"); };\n})(ListIdentitiesInput || (ListIdentitiesInput = {}));\nexport var ListIdentitiesResponse;\n(function (ListIdentitiesResponse) {\n    ListIdentitiesResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ListIdentitiesResponse.isa = function (o) { return __isa(o, \"ListIdentitiesResponse\"); };\n})(ListIdentitiesResponse || (ListIdentitiesResponse = {}));\nexport var ListIdentityPoolsInput;\n(function (ListIdentityPoolsInput) {\n    ListIdentityPoolsInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ListIdentityPoolsInput.isa = function (o) { return __isa(o, \"ListIdentityPoolsInput\"); };\n})(ListIdentityPoolsInput || (ListIdentityPoolsInput = {}));\nexport var ListIdentityPoolsResponse;\n(function (ListIdentityPoolsResponse) {\n    ListIdentityPoolsResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ListIdentityPoolsResponse.isa = function (o) { return __isa(o, \"ListIdentityPoolsResponse\"); };\n})(ListIdentityPoolsResponse || (ListIdentityPoolsResponse = {}));\nexport var ListTagsForResourceInput;\n(function (ListTagsForResourceInput) {\n    ListTagsForResourceInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ListTagsForResourceInput.isa = function (o) { return __isa(o, \"ListTagsForResourceInput\"); };\n})(ListTagsForResourceInput || (ListTagsForResourceInput = {}));\nexport var ListTagsForResourceResponse;\n(function (ListTagsForResourceResponse) {\n    ListTagsForResourceResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ListTagsForResourceResponse.isa = function (o) { return __isa(o, \"ListTagsForResourceResponse\"); };\n})(ListTagsForResourceResponse || (ListTagsForResourceResponse = {}));\nexport var LookupDeveloperIdentityInput;\n(function (LookupDeveloperIdentityInput) {\n    LookupDeveloperIdentityInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    LookupDeveloperIdentityInput.isa = function (o) { return __isa(o, \"LookupDeveloperIdentityInput\"); };\n})(LookupDeveloperIdentityInput || (LookupDeveloperIdentityInput = {}));\nexport var LookupDeveloperIdentityResponse;\n(function (LookupDeveloperIdentityResponse) {\n    LookupDeveloperIdentityResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    LookupDeveloperIdentityResponse.isa = function (o) { return __isa(o, \"LookupDeveloperIdentityResponse\"); };\n})(LookupDeveloperIdentityResponse || (LookupDeveloperIdentityResponse = {}));\nexport var MappingRule;\n(function (MappingRule) {\n    MappingRule.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    MappingRule.isa = function (o) { return __isa(o, \"MappingRule\"); };\n})(MappingRule || (MappingRule = {}));\nexport var MappingRuleMatchType;\n(function (MappingRuleMatchType) {\n    MappingRuleMatchType[\"CONTAINS\"] = \"Contains\";\n    MappingRuleMatchType[\"EQUALS\"] = \"Equals\";\n    MappingRuleMatchType[\"NOT_EQUAL\"] = \"NotEqual\";\n    MappingRuleMatchType[\"STARTS_WITH\"] = \"StartsWith\";\n})(MappingRuleMatchType || (MappingRuleMatchType = {}));\nexport var MergeDeveloperIdentitiesInput;\n(function (MergeDeveloperIdentitiesInput) {\n    MergeDeveloperIdentitiesInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    MergeDeveloperIdentitiesInput.isa = function (o) { return __isa(o, \"MergeDeveloperIdentitiesInput\"); };\n})(MergeDeveloperIdentitiesInput || (MergeDeveloperIdentitiesInput = {}));\nexport var MergeDeveloperIdentitiesResponse;\n(function (MergeDeveloperIdentitiesResponse) {\n    MergeDeveloperIdentitiesResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    MergeDeveloperIdentitiesResponse.isa = function (o) { return __isa(o, \"MergeDeveloperIdentitiesResponse\"); };\n})(MergeDeveloperIdentitiesResponse || (MergeDeveloperIdentitiesResponse = {}));\nexport var NotAuthorizedException;\n(function (NotAuthorizedException) {\n    NotAuthorizedException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    NotAuthorizedException.isa = function (o) { return __isa(o, \"NotAuthorizedException\"); };\n})(NotAuthorizedException || (NotAuthorizedException = {}));\nexport var ResourceConflictException;\n(function (ResourceConflictException) {\n    ResourceConflictException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ResourceConflictException.isa = function (o) { return __isa(o, \"ResourceConflictException\"); };\n})(ResourceConflictException || (ResourceConflictException = {}));\nexport var ResourceNotFoundException;\n(function (ResourceNotFoundException) {\n    ResourceNotFoundException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    ResourceNotFoundException.isa = function (o) { return __isa(o, \"ResourceNotFoundException\"); };\n})(ResourceNotFoundException || (ResourceNotFoundException = {}));\nexport var RoleMapping;\n(function (RoleMapping) {\n    RoleMapping.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    RoleMapping.isa = function (o) { return __isa(o, \"RoleMapping\"); };\n})(RoleMapping || (RoleMapping = {}));\nexport var RoleMappingType;\n(function (RoleMappingType) {\n    RoleMappingType[\"RULES\"] = \"Rules\";\n    RoleMappingType[\"TOKEN\"] = \"Token\";\n})(RoleMappingType || (RoleMappingType = {}));\nexport var RulesConfigurationType;\n(function (RulesConfigurationType) {\n    RulesConfigurationType.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    RulesConfigurationType.isa = function (o) { return __isa(o, \"RulesConfigurationType\"); };\n})(RulesConfigurationType || (RulesConfigurationType = {}));\nexport var SetIdentityPoolRolesInput;\n(function (SetIdentityPoolRolesInput) {\n    SetIdentityPoolRolesInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    SetIdentityPoolRolesInput.isa = function (o) { return __isa(o, \"SetIdentityPoolRolesInput\"); };\n})(SetIdentityPoolRolesInput || (SetIdentityPoolRolesInput = {}));\nexport var TagResourceInput;\n(function (TagResourceInput) {\n    TagResourceInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    TagResourceInput.isa = function (o) { return __isa(o, \"TagResourceInput\"); };\n})(TagResourceInput || (TagResourceInput = {}));\nexport var TagResourceResponse;\n(function (TagResourceResponse) {\n    TagResourceResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    TagResourceResponse.isa = function (o) { return __isa(o, \"TagResourceResponse\"); };\n})(TagResourceResponse || (TagResourceResponse = {}));\nexport var TooManyRequestsException;\n(function (TooManyRequestsException) {\n    TooManyRequestsException.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    TooManyRequestsException.isa = function (o) { return __isa(o, \"TooManyRequestsException\"); };\n})(TooManyRequestsException || (TooManyRequestsException = {}));\nexport var UnlinkDeveloperIdentityInput;\n(function (UnlinkDeveloperIdentityInput) {\n    UnlinkDeveloperIdentityInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    UnlinkDeveloperIdentityInput.isa = function (o) { return __isa(o, \"UnlinkDeveloperIdentityInput\"); };\n})(UnlinkDeveloperIdentityInput || (UnlinkDeveloperIdentityInput = {}));\nexport var UnlinkIdentityInput;\n(function (UnlinkIdentityInput) {\n    UnlinkIdentityInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    UnlinkIdentityInput.isa = function (o) { return __isa(o, \"UnlinkIdentityInput\"); };\n})(UnlinkIdentityInput || (UnlinkIdentityInput = {}));\nexport var UnprocessedIdentityId;\n(function (UnprocessedIdentityId) {\n    UnprocessedIdentityId.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    UnprocessedIdentityId.isa = function (o) { return __isa(o, \"UnprocessedIdentityId\"); };\n})(UnprocessedIdentityId || (UnprocessedIdentityId = {}));\nexport var UntagResourceInput;\n(function (UntagResourceInput) {\n    UntagResourceInput.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    UntagResourceInput.isa = function (o) { return __isa(o, \"UntagResourceInput\"); };\n})(UntagResourceInput || (UntagResourceInput = {}));\nexport var UntagResourceResponse;\n(function (UntagResourceResponse) {\n    UntagResourceResponse.filterSensitiveLog = function (obj) { return (__assign({}, obj)); };\n    UntagResourceResponse.isa = function (o) { return __isa(o, \"UntagResourceResponse\"); };\n})(UntagResourceResponse || (UntagResourceResponse = {}));\n//# sourceMappingURL=index.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { HttpRequest as __HttpRequest } from \"@aws-sdk/protocol-http\";\nexport var serializeAws_json1_1CreateIdentityPoolCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.CreateIdentityPool\",\n        };\n        body = JSON.stringify(serializeAws_json1_1CreateIdentityPoolInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1DeleteIdentitiesCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.DeleteIdentities\",\n        };\n        body = JSON.stringify(serializeAws_json1_1DeleteIdentitiesInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1DeleteIdentityPoolCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.DeleteIdentityPool\",\n        };\n        body = JSON.stringify(serializeAws_json1_1DeleteIdentityPoolInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1DescribeIdentityCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.DescribeIdentity\",\n        };\n        body = JSON.stringify(serializeAws_json1_1DescribeIdentityInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1DescribeIdentityPoolCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.DescribeIdentityPool\",\n        };\n        body = JSON.stringify(serializeAws_json1_1DescribeIdentityPoolInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1GetCredentialsForIdentityCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.GetCredentialsForIdentity\",\n        };\n        body = JSON.stringify(serializeAws_json1_1GetCredentialsForIdentityInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1GetIdCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.GetId\",\n        };\n        body = JSON.stringify(serializeAws_json1_1GetIdInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1GetIdentityPoolRolesCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.GetIdentityPoolRoles\",\n        };\n        body = JSON.stringify(serializeAws_json1_1GetIdentityPoolRolesInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1GetOpenIdTokenCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.GetOpenIdToken\",\n        };\n        body = JSON.stringify(serializeAws_json1_1GetOpenIdTokenInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.GetOpenIdTokenForDeveloperIdentity\",\n        };\n        body = JSON.stringify(serializeAws_json1_1GetOpenIdTokenForDeveloperIdentityInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1ListIdentitiesCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.ListIdentities\",\n        };\n        body = JSON.stringify(serializeAws_json1_1ListIdentitiesInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1ListIdentityPoolsCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.ListIdentityPools\",\n        };\n        body = JSON.stringify(serializeAws_json1_1ListIdentityPoolsInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1ListTagsForResourceCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.ListTagsForResource\",\n        };\n        body = JSON.stringify(serializeAws_json1_1ListTagsForResourceInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1LookupDeveloperIdentityCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.LookupDeveloperIdentity\",\n        };\n        body = JSON.stringify(serializeAws_json1_1LookupDeveloperIdentityInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1MergeDeveloperIdentitiesCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.MergeDeveloperIdentities\",\n        };\n        body = JSON.stringify(serializeAws_json1_1MergeDeveloperIdentitiesInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1SetIdentityPoolRolesCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.SetIdentityPoolRoles\",\n        };\n        body = JSON.stringify(serializeAws_json1_1SetIdentityPoolRolesInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1TagResourceCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.TagResource\",\n        };\n        body = JSON.stringify(serializeAws_json1_1TagResourceInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1UnlinkDeveloperIdentityCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.UnlinkDeveloperIdentity\",\n        };\n        body = JSON.stringify(serializeAws_json1_1UnlinkDeveloperIdentityInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1UnlinkIdentityCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.UnlinkIdentity\",\n        };\n        body = JSON.stringify(serializeAws_json1_1UnlinkIdentityInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1UntagResourceCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.UntagResource\",\n        };\n        body = JSON.stringify(serializeAws_json1_1UntagResourceInput(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var serializeAws_json1_1UpdateIdentityPoolCommand = function (input, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var headers, body;\n    return __generator(this, function (_a) {\n        headers = {\n            \"Content-Type\": \"application/x-amz-json-1.1\",\n            \"X-Amz-Target\": \"AWSCognitoIdentityService.UpdateIdentityPool\",\n        };\n        body = JSON.stringify(serializeAws_json1_1IdentityPool(input, context));\n        return [2 /*return*/, buildHttpRpcRequest(context, headers, \"/\", undefined, body)];\n    });\n}); };\nexport var deserializeAws_json1_1CreateIdentityPoolCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1CreateIdentityPoolCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1IdentityPool(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"IdentityPool\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1CreateIdentityPoolCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, parsedBody, message;\n    return __generator(this, function (_k) {\n        switch (_k.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _k.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"LimitExceededException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#LimitExceededException\": return [3 /*break*/, 6];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 12];\n                }\n                return [3 /*break*/, 14];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1LimitExceededExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 14:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _k.label = 15;\n            case 15:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1DeleteIdentitiesCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1DeleteIdentitiesCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1DeleteIdentitiesResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"DeleteIdentitiesResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1DeleteIdentitiesCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, parsedBody, message;\n    return __generator(this, function (_g) {\n        switch (_g.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _g.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 6];\n                }\n                return [3 /*break*/, 8];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_g.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 9];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_g.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 9];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_g.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 9];\n            case 8:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _g.label = 9;\n            case 9:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1DeleteIdentityPoolCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1DeleteIdentityPoolCommandError(output, context)];\n                }\n                return [4 /*yield*/, collectBody(output.body, context)];\n            case 1:\n                _a.sent();\n                response = {\n                    $metadata: deserializeMetadata(output),\n                };\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1DeleteIdentityPoolCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1DescribeIdentityCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1DescribeIdentityCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1IdentityDescription(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"IdentityDescription\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1DescribeIdentityCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1DescribeIdentityPoolCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1DescribeIdentityPoolCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1IdentityPool(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"IdentityPool\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1DescribeIdentityPoolCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1GetCredentialsForIdentityCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1GetCredentialsForIdentityCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1GetCredentialsForIdentityResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"GetCredentialsForIdentityResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1GetCredentialsForIdentityCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, _k, _l, parsedBody, message;\n    return __generator(this, function (_m) {\n        switch (_m.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _m.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"InternalErrorException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 4];\n                    case \"InvalidIdentityPoolConfigurationException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#InvalidIdentityPoolConfigurationException\": return [3 /*break*/, 6];\n                    case \"InvalidParameterException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 8];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 10];\n                    case \"ResourceConflictException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 12];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 14];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 14];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 16];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 16];\n                }\n                return [3 /*break*/, 18];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ExternalServiceExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidIdentityPoolConfigurationExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 14:\n                _k = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 15:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _k.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 16:\n                _l = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 17:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _l.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 18:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _m.label = 19;\n            case 19:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1GetIdCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1GetIdCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1GetIdResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"GetIdResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1GetIdCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, _k, _l, parsedBody, message;\n    return __generator(this, function (_m) {\n        switch (_m.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _m.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"InternalErrorException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 4];\n                    case \"InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"LimitExceededException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#LimitExceededException\": return [3 /*break*/, 8];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 10];\n                    case \"ResourceConflictException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 12];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 14];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 14];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 16];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 16];\n                }\n                return [3 /*break*/, 18];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ExternalServiceExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1LimitExceededExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 14:\n                _k = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 15:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _k.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 16:\n                _l = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 17:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _l.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 18:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _m.label = 19;\n            case 19:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1GetIdentityPoolRolesCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1GetIdentityPoolRolesCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1GetIdentityPoolRolesResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"GetIdentityPoolRolesResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1GetIdentityPoolRolesCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, parsedBody, message;\n    return __generator(this, function (_k) {\n        switch (_k.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _k.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 12];\n                }\n                return [3 /*break*/, 14];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 14:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _k.label = 15;\n            case 15:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1GetOpenIdTokenCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1GetOpenIdTokenCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1GetOpenIdTokenResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"GetOpenIdTokenResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1GetOpenIdTokenCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, _k, parsedBody, message;\n    return __generator(this, function (_l) {\n        switch (_l.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _l.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"InternalErrorException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 4];\n                    case \"InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 14];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 14];\n                }\n                return [3 /*break*/, 16];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ExternalServiceExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 14:\n                _k = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 15:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _k.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 16:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _l.label = 17;\n            case 17:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1GetOpenIdTokenForDeveloperIdentityResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"GetOpenIdTokenForDeveloperIdentityResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1GetOpenIdTokenForDeveloperIdentityCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, _k, parsedBody, message;\n    return __generator(this, function (_l) {\n        switch (_l.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _l.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"DeveloperUserAlreadyRegisteredException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#DeveloperUserAlreadyRegisteredException\": return [3 /*break*/, 2];\n                    case \"InternalErrorException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 4];\n                    case \"InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 14];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 14];\n                }\n                return [3 /*break*/, 16];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1DeveloperUserAlreadyRegisteredExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 14:\n                _k = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 15:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _k.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 16:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _l.label = 17;\n            case 17:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1ListIdentitiesCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1ListIdentitiesCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1ListIdentitiesResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"ListIdentitiesResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1ListIdentitiesCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1ListIdentityPoolsCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1ListIdentityPoolsCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1ListIdentityPoolsResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"ListIdentityPoolsResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1ListIdentityPoolsCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1ListTagsForResourceCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1ListTagsForResourceCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1ListTagsForResourceResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"ListTagsForResourceResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1ListTagsForResourceCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1LookupDeveloperIdentityCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1LookupDeveloperIdentityCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1LookupDeveloperIdentityResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"LookupDeveloperIdentityResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1LookupDeveloperIdentityCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, parsedBody, message;\n    return __generator(this, function (_k) {\n        switch (_k.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _k.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 12];\n                }\n                return [3 /*break*/, 14];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 14:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _k.label = 15;\n            case 15:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1MergeDeveloperIdentitiesCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1MergeDeveloperIdentitiesCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1MergeDeveloperIdentitiesResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"MergeDeveloperIdentitiesResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1MergeDeveloperIdentitiesCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, parsedBody, message;\n    return __generator(this, function (_k) {\n        switch (_k.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _k.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 12];\n                }\n                return [3 /*break*/, 14];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 14:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _k.label = 15;\n            case 15:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1SetIdentityPoolRolesCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1SetIdentityPoolRolesCommandError(output, context)];\n                }\n                return [4 /*yield*/, collectBody(output.body, context)];\n            case 1:\n                _a.sent();\n                response = {\n                    $metadata: deserializeMetadata(output),\n                };\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1SetIdentityPoolRolesCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, _k, parsedBody, message;\n    return __generator(this, function (_l) {\n        switch (_l.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _l.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"ConcurrentModificationException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#ConcurrentModificationException\": return [3 /*break*/, 2];\n                    case \"InternalErrorException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 4];\n                    case \"InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 14];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 14];\n                }\n                return [3 /*break*/, 16];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ConcurrentModificationExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 14:\n                _k = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 15:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _k.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 16:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _l.label = 17;\n            case 17:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1TagResourceCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1TagResourceCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1TagResourceResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"TagResourceResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1TagResourceCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1UnlinkDeveloperIdentityCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1UnlinkDeveloperIdentityCommandError(output, context)];\n                }\n                return [4 /*yield*/, collectBody(output.body, context)];\n            case 1:\n                _a.sent();\n                response = {\n                    $metadata: deserializeMetadata(output),\n                };\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1UnlinkDeveloperIdentityCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, parsedBody, message;\n    return __generator(this, function (_k) {\n        switch (_k.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _k.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 8];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 10];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 12];\n                }\n                return [3 /*break*/, 14];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_k.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 15];\n            case 14:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _k.label = 15;\n            case 15:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1UnlinkIdentityCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1UnlinkIdentityCommandError(output, context)];\n                }\n                return [4 /*yield*/, collectBody(output.body, context)];\n            case 1:\n                _a.sent();\n                response = {\n                    $metadata: deserializeMetadata(output),\n                };\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1UnlinkIdentityCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, _k, parsedBody, message;\n    return __generator(this, function (_l) {\n        switch (_l.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _l.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#ExternalServiceException\": return [3 /*break*/, 2];\n                    case \"InternalErrorException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 4];\n                    case \"InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 8];\n                    case \"ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 10];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 12];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 14];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 14];\n                }\n                return [3 /*break*/, 16];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ExternalServiceExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 14:\n                _k = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 15:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _k.concat([(_l.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 17];\n            case 16:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _l.label = 17;\n            case 17:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1UntagResourceCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1UntagResourceCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1UntagResourceResponse(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"UntagResourceResponse\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1UntagResourceCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, parsedBody, message;\n    return __generator(this, function (_j) {\n        switch (_j.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _j.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"InternalErrorException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 2];\n                    case \"InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 4];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 6];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 8];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 10];\n                }\n                return [3 /*break*/, 12];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_j.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 13];\n            case 12:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _j.label = 13;\n            case 13:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nexport var deserializeAws_json1_1UpdateIdentityPoolCommand = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var data, contents, response;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                if (output.statusCode >= 400) {\n                    return [2 /*return*/, deserializeAws_json1_1UpdateIdentityPoolCommandError(output, context)];\n                }\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                data = _a.sent();\n                contents = {};\n                contents = deserializeAws_json1_1IdentityPool(data, context);\n                response = __assign({ $metadata: deserializeMetadata(output), __type: \"IdentityPool\" }, contents);\n                return [2 /*return*/, Promise.resolve(response)];\n        }\n    });\n}); };\nvar deserializeAws_json1_1UpdateIdentityPoolCommandError = function (output, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var parsedOutput, _a, _b, response, errorCode, errorTypeParts, _c, _d, _e, _f, _g, _h, _j, _k, _l, parsedBody, message;\n    return __generator(this, function (_m) {\n        switch (_m.label) {\n            case 0:\n                _a = [__assign({}, output)];\n                _b = {};\n                return [4 /*yield*/, parseBody(output.body, context)];\n            case 1:\n                parsedOutput = __assign.apply(void 0, _a.concat([(_b.body = _m.sent(), _b)]));\n                errorCode = \"UnknownError\";\n                errorTypeParts = parsedOutput.body[\"__type\"].split(\"#\");\n                errorCode = errorTypeParts[1] === undefined ? errorTypeParts[0] : errorTypeParts[1];\n                _c = errorCode;\n                switch (_c) {\n                    case \"ConcurrentModificationException\": return [3 /*break*/, 2];\n                    case \"com.amazonaws.cognitoidentity#ConcurrentModificationException\": return [3 /*break*/, 2];\n                    case \"InternalErrorException\": return [3 /*break*/, 4];\n                    case \"com.amazonaws.cognitoidentity#InternalErrorException\": return [3 /*break*/, 4];\n                    case \"InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"com.amazonaws.cognitoidentity#InvalidParameterException\": return [3 /*break*/, 6];\n                    case \"LimitExceededException\": return [3 /*break*/, 8];\n                    case \"com.amazonaws.cognitoidentity#LimitExceededException\": return [3 /*break*/, 8];\n                    case \"NotAuthorizedException\": return [3 /*break*/, 10];\n                    case \"com.amazonaws.cognitoidentity#NotAuthorizedException\": return [3 /*break*/, 10];\n                    case \"ResourceConflictException\": return [3 /*break*/, 12];\n                    case \"com.amazonaws.cognitoidentity#ResourceConflictException\": return [3 /*break*/, 12];\n                    case \"ResourceNotFoundException\": return [3 /*break*/, 14];\n                    case \"com.amazonaws.cognitoidentity#ResourceNotFoundException\": return [3 /*break*/, 14];\n                    case \"TooManyRequestsException\": return [3 /*break*/, 16];\n                    case \"com.amazonaws.cognitoidentity#TooManyRequestsException\": return [3 /*break*/, 16];\n                }\n                return [3 /*break*/, 18];\n            case 2:\n                _d = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ConcurrentModificationExceptionResponse(parsedOutput, context)];\n            case 3:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _d.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 4:\n                _e = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InternalErrorExceptionResponse(parsedOutput, context)];\n            case 5:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _e.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 6:\n                _f = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1InvalidParameterExceptionResponse(parsedOutput, context)];\n            case 7:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 8:\n                _g = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1LimitExceededExceptionResponse(parsedOutput, context)];\n            case 9:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 10:\n                _h = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1NotAuthorizedExceptionResponse(parsedOutput, context)];\n            case 11:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _h.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 12:\n                _j = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceConflictExceptionResponse(parsedOutput, context)];\n            case 13:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _j.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 14:\n                _k = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1ResourceNotFoundExceptionResponse(parsedOutput, context)];\n            case 15:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _k.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 16:\n                _l = [{}];\n                return [4 /*yield*/, deserializeAws_json1_1TooManyRequestsExceptionResponse(parsedOutput, context)];\n            case 17:\n                response = __assign.apply(void 0, [__assign.apply(void 0, _l.concat([(_m.sent())])), { name: errorCode, $metadata: deserializeMetadata(output) }]);\n                return [3 /*break*/, 19];\n            case 18:\n                parsedBody = parsedOutput.body;\n                errorCode = parsedBody.code || parsedBody.Code || errorCode;\n                response = __assign(__assign({}, parsedBody), { name: \"\" + errorCode, message: parsedBody.message || parsedBody.Message || errorCode, $fault: \"client\", $metadata: deserializeMetadata(output) });\n                _m.label = 19;\n            case 19:\n                message = response.message || response.Message || errorCode;\n                response.message = message;\n                delete response.Message;\n                return [2 /*return*/, Promise.reject(Object.assign(new Error(message), response))];\n        }\n    });\n}); };\nvar deserializeAws_json1_1ConcurrentModificationExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1ConcurrentModificationException(body, context);\n        contents = __assign({ name: \"ConcurrentModificationException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1DeveloperUserAlreadyRegisteredExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1DeveloperUserAlreadyRegisteredException(body, context);\n        contents = __assign({ name: \"DeveloperUserAlreadyRegisteredException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1ExternalServiceExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1ExternalServiceException(body, context);\n        contents = __assign({ name: \"ExternalServiceException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1InternalErrorExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1InternalErrorException(body, context);\n        contents = __assign({ name: \"InternalErrorException\", $fault: \"server\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1InvalidIdentityPoolConfigurationExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1InvalidIdentityPoolConfigurationException(body, context);\n        contents = __assign({ name: \"InvalidIdentityPoolConfigurationException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1InvalidParameterExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1InvalidParameterException(body, context);\n        contents = __assign({ name: \"InvalidParameterException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1LimitExceededExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1LimitExceededException(body, context);\n        contents = __assign({ name: \"LimitExceededException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1NotAuthorizedExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1NotAuthorizedException(body, context);\n        contents = __assign({ name: \"NotAuthorizedException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1ResourceConflictExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1ResourceConflictException(body, context);\n        contents = __assign({ name: \"ResourceConflictException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1ResourceNotFoundExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1ResourceNotFoundException(body, context);\n        contents = __assign({ name: \"ResourceNotFoundException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar deserializeAws_json1_1TooManyRequestsExceptionResponse = function (parsedOutput, context) { return __awaiter(void 0, void 0, void 0, function () {\n    var body, deserialized, contents;\n    return __generator(this, function (_a) {\n        body = parsedOutput.body;\n        deserialized = deserializeAws_json1_1TooManyRequestsException(body, context);\n        contents = __assign({ name: \"TooManyRequestsException\", $fault: \"client\", $metadata: deserializeMetadata(parsedOutput) }, deserialized);\n        return [2 /*return*/, contents];\n    });\n}); };\nvar serializeAws_json1_1CognitoIdentityProvider = function (input, context) {\n    return __assign(__assign(__assign({}, (input.ClientId !== undefined && { ClientId: input.ClientId })), (input.ProviderName !== undefined && { ProviderName: input.ProviderName })), (input.ServerSideTokenCheck !== undefined && { ServerSideTokenCheck: input.ServerSideTokenCheck }));\n};\nvar serializeAws_json1_1CognitoIdentityProviderList = function (input, context) {\n    return input.map(function (entry) { return serializeAws_json1_1CognitoIdentityProvider(entry, context); });\n};\nvar serializeAws_json1_1CreateIdentityPoolInput = function (input, context) {\n    return __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, (input.AllowClassicFlow !== undefined && { AllowClassicFlow: input.AllowClassicFlow })), (input.AllowUnauthenticatedIdentities !== undefined && {\n        AllowUnauthenticatedIdentities: input.AllowUnauthenticatedIdentities,\n    })), (input.CognitoIdentityProviders !== undefined && {\n        CognitoIdentityProviders: serializeAws_json1_1CognitoIdentityProviderList(input.CognitoIdentityProviders, context),\n    })), (input.DeveloperProviderName !== undefined && { DeveloperProviderName: input.DeveloperProviderName })), (input.IdentityPoolName !== undefined && { IdentityPoolName: input.IdentityPoolName })), (input.IdentityPoolTags !== undefined && {\n        IdentityPoolTags: serializeAws_json1_1IdentityPoolTagsType(input.IdentityPoolTags, context),\n    })), (input.OpenIdConnectProviderARNs !== undefined && {\n        OpenIdConnectProviderARNs: serializeAws_json1_1OIDCProviderList(input.OpenIdConnectProviderARNs, context),\n    })), (input.SamlProviderARNs !== undefined && {\n        SamlProviderARNs: serializeAws_json1_1SAMLProviderList(input.SamlProviderARNs, context),\n    })), (input.SupportedLoginProviders !== undefined && {\n        SupportedLoginProviders: serializeAws_json1_1IdentityProviders(input.SupportedLoginProviders, context),\n    }));\n};\nvar serializeAws_json1_1DeleteIdentitiesInput = function (input, context) {\n    return __assign({}, (input.IdentityIdsToDelete !== undefined && {\n        IdentityIdsToDelete: serializeAws_json1_1IdentityIdList(input.IdentityIdsToDelete, context),\n    }));\n};\nvar serializeAws_json1_1DeleteIdentityPoolInput = function (input, context) {\n    return __assign({}, (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId }));\n};\nvar serializeAws_json1_1DescribeIdentityInput = function (input, context) {\n    return __assign({}, (input.IdentityId !== undefined && { IdentityId: input.IdentityId }));\n};\nvar serializeAws_json1_1DescribeIdentityPoolInput = function (input, context) {\n    return __assign({}, (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId }));\n};\nvar serializeAws_json1_1GetCredentialsForIdentityInput = function (input, context) {\n    return __assign(__assign(__assign({}, (input.CustomRoleArn !== undefined && { CustomRoleArn: input.CustomRoleArn })), (input.IdentityId !== undefined && { IdentityId: input.IdentityId })), (input.Logins !== undefined && { Logins: serializeAws_json1_1LoginsMap(input.Logins, context) }));\n};\nvar serializeAws_json1_1GetIdentityPoolRolesInput = function (input, context) {\n    return __assign({}, (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId }));\n};\nvar serializeAws_json1_1GetIdInput = function (input, context) {\n    return __assign(__assign(__assign({}, (input.AccountId !== undefined && { AccountId: input.AccountId })), (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId })), (input.Logins !== undefined && { Logins: serializeAws_json1_1LoginsMap(input.Logins, context) }));\n};\nvar serializeAws_json1_1GetOpenIdTokenForDeveloperIdentityInput = function (input, context) {\n    return __assign(__assign(__assign(__assign({}, (input.IdentityId !== undefined && { IdentityId: input.IdentityId })), (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId })), (input.Logins !== undefined && { Logins: serializeAws_json1_1LoginsMap(input.Logins, context) })), (input.TokenDuration !== undefined && { TokenDuration: input.TokenDuration }));\n};\nvar serializeAws_json1_1GetOpenIdTokenInput = function (input, context) {\n    return __assign(__assign({}, (input.IdentityId !== undefined && { IdentityId: input.IdentityId })), (input.Logins !== undefined && { Logins: serializeAws_json1_1LoginsMap(input.Logins, context) }));\n};\nvar serializeAws_json1_1IdentityIdList = function (input, context) {\n    return input.map(function (entry) { return entry; });\n};\nvar serializeAws_json1_1IdentityPool = function (input, context) {\n    return __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, (input.AllowClassicFlow !== undefined && { AllowClassicFlow: input.AllowClassicFlow })), (input.AllowUnauthenticatedIdentities !== undefined && {\n        AllowUnauthenticatedIdentities: input.AllowUnauthenticatedIdentities,\n    })), (input.CognitoIdentityProviders !== undefined && {\n        CognitoIdentityProviders: serializeAws_json1_1CognitoIdentityProviderList(input.CognitoIdentityProviders, context),\n    })), (input.DeveloperProviderName !== undefined && { DeveloperProviderName: input.DeveloperProviderName })), (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId })), (input.IdentityPoolName !== undefined && { IdentityPoolName: input.IdentityPoolName })), (input.IdentityPoolTags !== undefined && {\n        IdentityPoolTags: serializeAws_json1_1IdentityPoolTagsType(input.IdentityPoolTags, context),\n    })), (input.OpenIdConnectProviderARNs !== undefined && {\n        OpenIdConnectProviderARNs: serializeAws_json1_1OIDCProviderList(input.OpenIdConnectProviderARNs, context),\n    })), (input.SamlProviderARNs !== undefined && {\n        SamlProviderARNs: serializeAws_json1_1SAMLProviderList(input.SamlProviderARNs, context),\n    })), (input.SupportedLoginProviders !== undefined && {\n        SupportedLoginProviders: serializeAws_json1_1IdentityProviders(input.SupportedLoginProviders, context),\n    }));\n};\nvar serializeAws_json1_1IdentityPoolTagsListType = function (input, context) {\n    return input.map(function (entry) { return entry; });\n};\nvar serializeAws_json1_1IdentityPoolTagsType = function (input, context) {\n    return Object.entries(input).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));\n    }, {});\n};\nvar serializeAws_json1_1IdentityProviders = function (input, context) {\n    return Object.entries(input).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));\n    }, {});\n};\nvar serializeAws_json1_1ListIdentitiesInput = function (input, context) {\n    return __assign(__assign(__assign(__assign({}, (input.HideDisabled !== undefined && { HideDisabled: input.HideDisabled })), (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId })), (input.MaxResults !== undefined && { MaxResults: input.MaxResults })), (input.NextToken !== undefined && { NextToken: input.NextToken }));\n};\nvar serializeAws_json1_1ListIdentityPoolsInput = function (input, context) {\n    return __assign(__assign({}, (input.MaxResults !== undefined && { MaxResults: input.MaxResults })), (input.NextToken !== undefined && { NextToken: input.NextToken }));\n};\nvar serializeAws_json1_1ListTagsForResourceInput = function (input, context) {\n    return __assign({}, (input.ResourceArn !== undefined && { ResourceArn: input.ResourceArn }));\n};\nvar serializeAws_json1_1LoginsList = function (input, context) {\n    return input.map(function (entry) { return entry; });\n};\nvar serializeAws_json1_1LoginsMap = function (input, context) {\n    return Object.entries(input).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));\n    }, {});\n};\nvar serializeAws_json1_1LookupDeveloperIdentityInput = function (input, context) {\n    return __assign(__assign(__assign(__assign(__assign({}, (input.DeveloperUserIdentifier !== undefined && { DeveloperUserIdentifier: input.DeveloperUserIdentifier })), (input.IdentityId !== undefined && { IdentityId: input.IdentityId })), (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId })), (input.MaxResults !== undefined && { MaxResults: input.MaxResults })), (input.NextToken !== undefined && { NextToken: input.NextToken }));\n};\nvar serializeAws_json1_1MappingRule = function (input, context) {\n    return __assign(__assign(__assign(__assign({}, (input.Claim !== undefined && { Claim: input.Claim })), (input.MatchType !== undefined && { MatchType: input.MatchType })), (input.RoleARN !== undefined && { RoleARN: input.RoleARN })), (input.Value !== undefined && { Value: input.Value }));\n};\nvar serializeAws_json1_1MappingRulesList = function (input, context) {\n    return input.map(function (entry) { return serializeAws_json1_1MappingRule(entry, context); });\n};\nvar serializeAws_json1_1MergeDeveloperIdentitiesInput = function (input, context) {\n    return __assign(__assign(__assign(__assign({}, (input.DestinationUserIdentifier !== undefined && {\n        DestinationUserIdentifier: input.DestinationUserIdentifier,\n    })), (input.DeveloperProviderName !== undefined && { DeveloperProviderName: input.DeveloperProviderName })), (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId })), (input.SourceUserIdentifier !== undefined && { SourceUserIdentifier: input.SourceUserIdentifier }));\n};\nvar serializeAws_json1_1OIDCProviderList = function (input, context) {\n    return input.map(function (entry) { return entry; });\n};\nvar serializeAws_json1_1RoleMapping = function (input, context) {\n    return __assign(__assign(__assign({}, (input.AmbiguousRoleResolution !== undefined && { AmbiguousRoleResolution: input.AmbiguousRoleResolution })), (input.RulesConfiguration !== undefined && {\n        RulesConfiguration: serializeAws_json1_1RulesConfigurationType(input.RulesConfiguration, context),\n    })), (input.Type !== undefined && { Type: input.Type }));\n};\nvar serializeAws_json1_1RoleMappingMap = function (input, context) {\n    return Object.entries(input).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = serializeAws_json1_1RoleMapping(value, context), _b)));\n    }, {});\n};\nvar serializeAws_json1_1RolesMap = function (input, context) {\n    return Object.entries(input).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));\n    }, {});\n};\nvar serializeAws_json1_1RulesConfigurationType = function (input, context) {\n    return __assign({}, (input.Rules !== undefined && { Rules: serializeAws_json1_1MappingRulesList(input.Rules, context) }));\n};\nvar serializeAws_json1_1SAMLProviderList = function (input, context) {\n    return input.map(function (entry) { return entry; });\n};\nvar serializeAws_json1_1SetIdentityPoolRolesInput = function (input, context) {\n    return __assign(__assign(__assign({}, (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId })), (input.RoleMappings !== undefined && {\n        RoleMappings: serializeAws_json1_1RoleMappingMap(input.RoleMappings, context),\n    })), (input.Roles !== undefined && { Roles: serializeAws_json1_1RolesMap(input.Roles, context) }));\n};\nvar serializeAws_json1_1TagResourceInput = function (input, context) {\n    return __assign(__assign({}, (input.ResourceArn !== undefined && { ResourceArn: input.ResourceArn })), (input.Tags !== undefined && { Tags: serializeAws_json1_1IdentityPoolTagsType(input.Tags, context) }));\n};\nvar serializeAws_json1_1UnlinkDeveloperIdentityInput = function (input, context) {\n    return __assign(__assign(__assign(__assign({}, (input.DeveloperProviderName !== undefined && { DeveloperProviderName: input.DeveloperProviderName })), (input.DeveloperUserIdentifier !== undefined && { DeveloperUserIdentifier: input.DeveloperUserIdentifier })), (input.IdentityId !== undefined && { IdentityId: input.IdentityId })), (input.IdentityPoolId !== undefined && { IdentityPoolId: input.IdentityPoolId }));\n};\nvar serializeAws_json1_1UnlinkIdentityInput = function (input, context) {\n    return __assign(__assign(__assign({}, (input.IdentityId !== undefined && { IdentityId: input.IdentityId })), (input.Logins !== undefined && { Logins: serializeAws_json1_1LoginsMap(input.Logins, context) })), (input.LoginsToRemove !== undefined && {\n        LoginsToRemove: serializeAws_json1_1LoginsList(input.LoginsToRemove, context),\n    }));\n};\nvar serializeAws_json1_1UntagResourceInput = function (input, context) {\n    return __assign(__assign({}, (input.ResourceArn !== undefined && { ResourceArn: input.ResourceArn })), (input.TagKeys !== undefined && {\n        TagKeys: serializeAws_json1_1IdentityPoolTagsListType(input.TagKeys, context),\n    }));\n};\nvar deserializeAws_json1_1CognitoIdentityProvider = function (output, context) {\n    return {\n        __type: \"CognitoIdentityProvider\",\n        ClientId: output.ClientId !== undefined && output.ClientId !== null ? output.ClientId : undefined,\n        ProviderName: output.ProviderName !== undefined && output.ProviderName !== null ? output.ProviderName : undefined,\n        ServerSideTokenCheck: output.ServerSideTokenCheck !== undefined && output.ServerSideTokenCheck !== null\n            ? output.ServerSideTokenCheck\n            : undefined,\n    };\n};\nvar deserializeAws_json1_1CognitoIdentityProviderList = function (output, context) {\n    return (output || []).map(function (entry) { return deserializeAws_json1_1CognitoIdentityProvider(entry, context); });\n};\nvar deserializeAws_json1_1ConcurrentModificationException = function (output, context) {\n    return {\n        __type: \"ConcurrentModificationException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1Credentials = function (output, context) {\n    return {\n        __type: \"Credentials\",\n        AccessKeyId: output.AccessKeyId !== undefined && output.AccessKeyId !== null ? output.AccessKeyId : undefined,\n        Expiration: output.Expiration !== undefined && output.Expiration !== null\n            ? new Date(Math.round(output.Expiration * 1000))\n            : undefined,\n        SecretKey: output.SecretKey !== undefined && output.SecretKey !== null ? output.SecretKey : undefined,\n        SessionToken: output.SessionToken !== undefined && output.SessionToken !== null ? output.SessionToken : undefined,\n    };\n};\nvar deserializeAws_json1_1DeleteIdentitiesResponse = function (output, context) {\n    return {\n        __type: \"DeleteIdentitiesResponse\",\n        UnprocessedIdentityIds: output.UnprocessedIdentityIds !== undefined && output.UnprocessedIdentityIds !== null\n            ? deserializeAws_json1_1UnprocessedIdentityIdList(output.UnprocessedIdentityIds, context)\n            : undefined,\n    };\n};\nvar deserializeAws_json1_1DeveloperUserAlreadyRegisteredException = function (output, context) {\n    return {\n        __type: \"DeveloperUserAlreadyRegisteredException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1DeveloperUserIdentifierList = function (output, context) {\n    return (output || []).map(function (entry) { return entry; });\n};\nvar deserializeAws_json1_1ExternalServiceException = function (output, context) {\n    return {\n        __type: \"ExternalServiceException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1GetCredentialsForIdentityResponse = function (output, context) {\n    return {\n        __type: \"GetCredentialsForIdentityResponse\",\n        Credentials: output.Credentials !== undefined && output.Credentials !== null\n            ? deserializeAws_json1_1Credentials(output.Credentials, context)\n            : undefined,\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n    };\n};\nvar deserializeAws_json1_1GetIdentityPoolRolesResponse = function (output, context) {\n    return {\n        __type: \"GetIdentityPoolRolesResponse\",\n        IdentityPoolId: output.IdentityPoolId !== undefined && output.IdentityPoolId !== null ? output.IdentityPoolId : undefined,\n        RoleMappings: output.RoleMappings !== undefined && output.RoleMappings !== null\n            ? deserializeAws_json1_1RoleMappingMap(output.RoleMappings, context)\n            : undefined,\n        Roles: output.Roles !== undefined && output.Roles !== null\n            ? deserializeAws_json1_1RolesMap(output.Roles, context)\n            : undefined,\n    };\n};\nvar deserializeAws_json1_1GetIdResponse = function (output, context) {\n    return {\n        __type: \"GetIdResponse\",\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n    };\n};\nvar deserializeAws_json1_1GetOpenIdTokenForDeveloperIdentityResponse = function (output, context) {\n    return {\n        __type: \"GetOpenIdTokenForDeveloperIdentityResponse\",\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n        Token: output.Token !== undefined && output.Token !== null ? output.Token : undefined,\n    };\n};\nvar deserializeAws_json1_1GetOpenIdTokenResponse = function (output, context) {\n    return {\n        __type: \"GetOpenIdTokenResponse\",\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n        Token: output.Token !== undefined && output.Token !== null ? output.Token : undefined,\n    };\n};\nvar deserializeAws_json1_1IdentitiesList = function (output, context) {\n    return (output || []).map(function (entry) { return deserializeAws_json1_1IdentityDescription(entry, context); });\n};\nvar deserializeAws_json1_1IdentityDescription = function (output, context) {\n    return {\n        __type: \"IdentityDescription\",\n        CreationDate: output.CreationDate !== undefined && output.CreationDate !== null\n            ? new Date(Math.round(output.CreationDate * 1000))\n            : undefined,\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n        LastModifiedDate: output.LastModifiedDate !== undefined && output.LastModifiedDate !== null\n            ? new Date(Math.round(output.LastModifiedDate * 1000))\n            : undefined,\n        Logins: output.Logins !== undefined && output.Logins !== null\n            ? deserializeAws_json1_1LoginsList(output.Logins, context)\n            : undefined,\n    };\n};\nvar deserializeAws_json1_1IdentityPool = function (output, context) {\n    return {\n        __type: \"IdentityPool\",\n        AllowClassicFlow: output.AllowClassicFlow !== undefined && output.AllowClassicFlow !== null ? output.AllowClassicFlow : undefined,\n        AllowUnauthenticatedIdentities: output.AllowUnauthenticatedIdentities !== undefined && output.AllowUnauthenticatedIdentities !== null\n            ? output.AllowUnauthenticatedIdentities\n            : undefined,\n        CognitoIdentityProviders: output.CognitoIdentityProviders !== undefined && output.CognitoIdentityProviders !== null\n            ? deserializeAws_json1_1CognitoIdentityProviderList(output.CognitoIdentityProviders, context)\n            : undefined,\n        DeveloperProviderName: output.DeveloperProviderName !== undefined && output.DeveloperProviderName !== null\n            ? output.DeveloperProviderName\n            : undefined,\n        IdentityPoolId: output.IdentityPoolId !== undefined && output.IdentityPoolId !== null ? output.IdentityPoolId : undefined,\n        IdentityPoolName: output.IdentityPoolName !== undefined && output.IdentityPoolName !== null ? output.IdentityPoolName : undefined,\n        IdentityPoolTags: output.IdentityPoolTags !== undefined && output.IdentityPoolTags !== null\n            ? deserializeAws_json1_1IdentityPoolTagsType(output.IdentityPoolTags, context)\n            : undefined,\n        OpenIdConnectProviderARNs: output.OpenIdConnectProviderARNs !== undefined && output.OpenIdConnectProviderARNs !== null\n            ? deserializeAws_json1_1OIDCProviderList(output.OpenIdConnectProviderARNs, context)\n            : undefined,\n        SamlProviderARNs: output.SamlProviderARNs !== undefined && output.SamlProviderARNs !== null\n            ? deserializeAws_json1_1SAMLProviderList(output.SamlProviderARNs, context)\n            : undefined,\n        SupportedLoginProviders: output.SupportedLoginProviders !== undefined && output.SupportedLoginProviders !== null\n            ? deserializeAws_json1_1IdentityProviders(output.SupportedLoginProviders, context)\n            : undefined,\n    };\n};\nvar deserializeAws_json1_1IdentityPoolShortDescription = function (output, context) {\n    return {\n        __type: \"IdentityPoolShortDescription\",\n        IdentityPoolId: output.IdentityPoolId !== undefined && output.IdentityPoolId !== null ? output.IdentityPoolId : undefined,\n        IdentityPoolName: output.IdentityPoolName !== undefined && output.IdentityPoolName !== null ? output.IdentityPoolName : undefined,\n    };\n};\nvar deserializeAws_json1_1IdentityPoolsList = function (output, context) {\n    return (output || []).map(function (entry) { return deserializeAws_json1_1IdentityPoolShortDescription(entry, context); });\n};\nvar deserializeAws_json1_1IdentityPoolTagsType = function (output, context) {\n    return Object.entries(output).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));\n    }, {});\n};\nvar deserializeAws_json1_1IdentityProviders = function (output, context) {\n    return Object.entries(output).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));\n    }, {});\n};\nvar deserializeAws_json1_1InternalErrorException = function (output, context) {\n    return {\n        __type: \"InternalErrorException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1InvalidIdentityPoolConfigurationException = function (output, context) {\n    return {\n        __type: \"InvalidIdentityPoolConfigurationException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1InvalidParameterException = function (output, context) {\n    return {\n        __type: \"InvalidParameterException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1LimitExceededException = function (output, context) {\n    return {\n        __type: \"LimitExceededException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1ListIdentitiesResponse = function (output, context) {\n    return {\n        __type: \"ListIdentitiesResponse\",\n        Identities: output.Identities !== undefined && output.Identities !== null\n            ? deserializeAws_json1_1IdentitiesList(output.Identities, context)\n            : undefined,\n        IdentityPoolId: output.IdentityPoolId !== undefined && output.IdentityPoolId !== null ? output.IdentityPoolId : undefined,\n        NextToken: output.NextToken !== undefined && output.NextToken !== null ? output.NextToken : undefined,\n    };\n};\nvar deserializeAws_json1_1ListIdentityPoolsResponse = function (output, context) {\n    return {\n        __type: \"ListIdentityPoolsResponse\",\n        IdentityPools: output.IdentityPools !== undefined && output.IdentityPools !== null\n            ? deserializeAws_json1_1IdentityPoolsList(output.IdentityPools, context)\n            : undefined,\n        NextToken: output.NextToken !== undefined && output.NextToken !== null ? output.NextToken : undefined,\n    };\n};\nvar deserializeAws_json1_1ListTagsForResourceResponse = function (output, context) {\n    return {\n        __type: \"ListTagsForResourceResponse\",\n        Tags: output.Tags !== undefined && output.Tags !== null\n            ? deserializeAws_json1_1IdentityPoolTagsType(output.Tags, context)\n            : undefined,\n    };\n};\nvar deserializeAws_json1_1LoginsList = function (output, context) {\n    return (output || []).map(function (entry) { return entry; });\n};\nvar deserializeAws_json1_1LookupDeveloperIdentityResponse = function (output, context) {\n    return {\n        __type: \"LookupDeveloperIdentityResponse\",\n        DeveloperUserIdentifierList: output.DeveloperUserIdentifierList !== undefined && output.DeveloperUserIdentifierList !== null\n            ? deserializeAws_json1_1DeveloperUserIdentifierList(output.DeveloperUserIdentifierList, context)\n            : undefined,\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n        NextToken: output.NextToken !== undefined && output.NextToken !== null ? output.NextToken : undefined,\n    };\n};\nvar deserializeAws_json1_1MappingRule = function (output, context) {\n    return {\n        __type: \"MappingRule\",\n        Claim: output.Claim !== undefined && output.Claim !== null ? output.Claim : undefined,\n        MatchType: output.MatchType !== undefined && output.MatchType !== null ? output.MatchType : undefined,\n        RoleARN: output.RoleARN !== undefined && output.RoleARN !== null ? output.RoleARN : undefined,\n        Value: output.Value !== undefined && output.Value !== null ? output.Value : undefined,\n    };\n};\nvar deserializeAws_json1_1MappingRulesList = function (output, context) {\n    return (output || []).map(function (entry) { return deserializeAws_json1_1MappingRule(entry, context); });\n};\nvar deserializeAws_json1_1MergeDeveloperIdentitiesResponse = function (output, context) {\n    return {\n        __type: \"MergeDeveloperIdentitiesResponse\",\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n    };\n};\nvar deserializeAws_json1_1NotAuthorizedException = function (output, context) {\n    return {\n        __type: \"NotAuthorizedException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1OIDCProviderList = function (output, context) {\n    return (output || []).map(function (entry) { return entry; });\n};\nvar deserializeAws_json1_1ResourceConflictException = function (output, context) {\n    return {\n        __type: \"ResourceConflictException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1ResourceNotFoundException = function (output, context) {\n    return {\n        __type: \"ResourceNotFoundException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1RoleMapping = function (output, context) {\n    return {\n        __type: \"RoleMapping\",\n        AmbiguousRoleResolution: output.AmbiguousRoleResolution !== undefined && output.AmbiguousRoleResolution !== null\n            ? output.AmbiguousRoleResolution\n            : undefined,\n        RulesConfiguration: output.RulesConfiguration !== undefined && output.RulesConfiguration !== null\n            ? deserializeAws_json1_1RulesConfigurationType(output.RulesConfiguration, context)\n            : undefined,\n        Type: output.Type !== undefined && output.Type !== null ? output.Type : undefined,\n    };\n};\nvar deserializeAws_json1_1RoleMappingMap = function (output, context) {\n    return Object.entries(output).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = deserializeAws_json1_1RoleMapping(value, context), _b)));\n    }, {});\n};\nvar deserializeAws_json1_1RolesMap = function (output, context) {\n    return Object.entries(output).reduce(function (acc, _a) {\n        var _b;\n        var _c = __read(_a, 2), key = _c[0], value = _c[1];\n        return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));\n    }, {});\n};\nvar deserializeAws_json1_1RulesConfigurationType = function (output, context) {\n    return {\n        __type: \"RulesConfigurationType\",\n        Rules: output.Rules !== undefined && output.Rules !== null\n            ? deserializeAws_json1_1MappingRulesList(output.Rules, context)\n            : undefined,\n    };\n};\nvar deserializeAws_json1_1SAMLProviderList = function (output, context) {\n    return (output || []).map(function (entry) { return entry; });\n};\nvar deserializeAws_json1_1TagResourceResponse = function (output, context) {\n    return {\n        __type: \"TagResourceResponse\",\n    };\n};\nvar deserializeAws_json1_1TooManyRequestsException = function (output, context) {\n    return {\n        __type: \"TooManyRequestsException\",\n        message: output.message !== undefined && output.message !== null ? output.message : undefined,\n    };\n};\nvar deserializeAws_json1_1UnprocessedIdentityId = function (output, context) {\n    return {\n        __type: \"UnprocessedIdentityId\",\n        ErrorCode: output.ErrorCode !== undefined && output.ErrorCode !== null ? output.ErrorCode : undefined,\n        IdentityId: output.IdentityId !== undefined && output.IdentityId !== null ? output.IdentityId : undefined,\n    };\n};\nvar deserializeAws_json1_1UnprocessedIdentityIdList = function (output, context) {\n    return (output || []).map(function (entry) { return deserializeAws_json1_1UnprocessedIdentityId(entry, context); });\n};\nvar deserializeAws_json1_1UntagResourceResponse = function (output, context) {\n    return {\n        __type: \"UntagResourceResponse\",\n    };\n};\nvar deserializeMetadata = function (output) { return ({\n    httpStatusCode: output.statusCode,\n    httpHeaders: output.headers,\n    requestId: output.headers[\"x-amzn-requestid\"],\n}); };\n// Collect low-level response body stream to Uint8Array.\nvar collectBody = function (streamBody, context) {\n    if (streamBody === void 0) { streamBody = new Uint8Array(); }\n    if (streamBody instanceof Uint8Array) {\n        return Promise.resolve(streamBody);\n    }\n    return context.streamCollector(streamBody) || Promise.resolve(new Uint8Array());\n};\n// Encode Uint8Array data into string with utf-8.\nvar collectBodyString = function (streamBody, context) {\n    return collectBody(streamBody, context).then(function (body) { return context.utf8Encoder(body); });\n};\nvar buildHttpRpcRequest = function (context, headers, path, resolvedHostname, body) { return __awaiter(void 0, void 0, void 0, function () {\n    var _a, hostname, _b, protocol, port, contents;\n    return __generator(this, function (_c) {\n        switch (_c.label) {\n            case 0: return [4 /*yield*/, context.endpoint()];\n            case 1:\n                _a = _c.sent(), hostname = _a.hostname, _b = _a.protocol, protocol = _b === void 0 ? \"https\" : _b, port = _a.port;\n                contents = {\n                    protocol: protocol,\n                    hostname: hostname,\n                    port: port,\n                    method: \"POST\",\n                    path: path,\n                    headers: headers,\n                };\n                if (resolvedHostname !== undefined) {\n                    contents.hostname = resolvedHostname;\n                }\n                if (body !== undefined) {\n                    contents.body = body;\n                }\n                return [2 /*return*/, new __HttpRequest(contents)];\n        }\n    });\n}); };\nvar parseBody = function (streamBody, context) {\n    return collectBodyString(streamBody, context).then(function (encoded) {\n        if (encoded.length) {\n            return JSON.parse(encoded);\n        }\n        return {};\n    });\n};\n//# sourceMappingURL=Aws_json1_1.js.map","import { __assign } from \"tslib\";\nimport { name, version } from \"./package.json\";\nimport { Sha256 } from \"@aws-crypto/sha256-browser\";\nimport { FetchHttpHandler, streamCollector } from \"@aws-sdk/fetch-http-handler\";\nimport { invalidFunction } from \"@aws-sdk/invalid-dependency\";\nimport { parseUrl } from \"@aws-sdk/url-parser-browser\";\nimport { fromBase64, toBase64 } from \"@aws-sdk/util-base64-browser\";\nimport { calculateBodyLength } from \"@aws-sdk/util-body-length-browser\";\nimport { defaultUserAgent } from \"@aws-sdk/util-user-agent-browser\";\nimport { fromUtf8, toUtf8 } from \"@aws-sdk/util-utf8-browser\";\nimport { ClientSharedValues } from \"./runtimeConfig.shared\";\nexport var ClientDefaultValues = __assign(__assign({}, ClientSharedValues), { runtime: \"browser\", base64Decoder: fromBase64, base64Encoder: toBase64, bodyLengthChecker: calculateBodyLength, credentialDefaultProvider: (function () { }), defaultUserAgent: defaultUserAgent(name, version), maxAttemptsDefaultProvider: (function () { return \"3\"; }), regionDefaultProvider: invalidFunction(\"Region is missing\"), requestHandler: new FetchHttpHandler(), sha256: Sha256, streamCollector: streamCollector, urlParser: parseUrl, utf8Decoder: fromUtf8, utf8Encoder: toUtf8 });\n//# sourceMappingURL=runtimeConfig.browser.js.map","import { defaultRegionInfoProvider } from \"./endpoints\";\nexport var ClientSharedValues = {\n    apiVersion: \"2014-06-30\",\n    disableHostPrefix: false,\n    regionInfoProvider: defaultRegionInfoProvider,\n    signingName: \"cognito-identity\",\n};\n//# sourceMappingURL=runtimeConfig.shared.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveEndpointsConfig = exports.normalizeEndpoint = void 0;\nvar tslib_1 = require(\"tslib\");\nfunction normalizeEndpoint(endpoint, urlParser) {\n    if (typeof endpoint === \"string\") {\n        var promisified_1 = Promise.resolve(urlParser(endpoint));\n        return function () { return promisified_1; };\n    }\n    else if (typeof endpoint === \"object\") {\n        var promisified_2 = Promise.resolve(endpoint);\n        return function () { return promisified_2; };\n    }\n    return endpoint;\n}\nexports.normalizeEndpoint = normalizeEndpoint;\nfunction resolveEndpointsConfig(input) {\n    var _this = this;\n    var tls = input.tls === undefined ? true : input.tls;\n    var endpoint = input.endpoint\n        ? normalizeEndpoint(input.endpoint, input.urlParser)\n        : function () {\n            return input.region().then(function (region) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n                var hostname, endpoint;\n                return tslib_1.__generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0: return [4 /*yield*/, input.regionInfoProvider(region)];\n                        case 1:\n                            hostname = ((_a.sent()) || {}).hostname;\n                            if (!hostname) {\n                                throw new Error(\"Cannot resolve hostname from client config\");\n                            }\n                            endpoint = input.urlParser((tls ? \"https:\" : \"http:\") + \"//\" + hostname);\n                            return [2 /*return*/, endpoint];\n                    }\n                });\n            }); });\n        };\n    return tslib_1.__assign(tslib_1.__assign({}, input), { endpoint: endpoint,\n        tls: tls });\n}\nexports.resolveEndpointsConfig = resolveEndpointsConfig;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5kcG9pbnRzQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0VuZHBvaW50c0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsU0FBZ0IsaUJBQWlCLENBQy9CLFFBQWlELEVBQ2pELFNBQXFCO0lBRXJCLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hDLElBQU0sYUFBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUQsT0FBTyxjQUFNLE9BQUEsYUFBVyxFQUFYLENBQVcsQ0FBQztLQUMxQjtTQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ3ZDLElBQU0sYUFBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsT0FBTyxjQUFNLE9BQUEsYUFBVyxFQUFYLENBQVcsQ0FBQztLQUMxQjtJQUNELE9BQU8sUUFBUyxDQUFDO0FBQ25CLENBQUM7QUFaRCw4Q0FZQztBQXFCRCxTQUFnQixzQkFBc0IsQ0FDcEMsS0FBb0Q7SUFEdEQsaUJBb0JDO0lBakJDLElBQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDdkQsSUFBTSxRQUFRLEdBQXVCLEtBQUssQ0FBQyxRQUFRO1FBQ2pELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1lBQ0UsT0FBQSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQU8sTUFBTTs7OztnQ0FDWixxQkFBTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUE7OzRCQUFuRCxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQXNDLENBQUMsSUFBSyxFQUFpQixDQUFDLENBQUMsUUFBUTs0QkFDMUYsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQ0FDYixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7NkJBQy9EOzRCQUNLLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sV0FBSyxRQUFVLENBQUMsQ0FBQzs0QkFDN0Usc0JBQU8sUUFBUSxFQUFDOzs7aUJBQ2pCLENBQUM7UUFQRixDQU9FLENBQUM7SUFDVCw2Q0FDSyxLQUFLLEtBQ1IsUUFBUSxVQUFBO1FBQ1IsR0FBRyxLQUFBLElBQ0g7QUFDSixDQUFDO0FBcEJELHdEQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVuZHBvaW50LCBQcm92aWRlciwgUmVnaW9uSW5mbyxSZWdpb25JbmZvUHJvdmlkZXIsIFVybFBhcnNlciB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW5kcG9pbnQoXG4gIGVuZHBvaW50Pzogc3RyaW5nIHwgRW5kcG9pbnQgfCBQcm92aWRlcjxFbmRwb2ludD4sXG4gIHVybFBhcnNlcj86IFVybFBhcnNlclxuKTogUHJvdmlkZXI8RW5kcG9pbnQ+IHtcbiAgaWYgKHR5cGVvZiBlbmRwb2ludCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IHByb21pc2lmaWVkID0gUHJvbWlzZS5yZXNvbHZlKHVybFBhcnNlciEoZW5kcG9pbnQpKTtcbiAgICByZXR1cm4gKCkgPT4gcHJvbWlzaWZpZWQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuZHBvaW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgcHJvbWlzaWZpZWQgPSBQcm9taXNlLnJlc29sdmUoZW5kcG9pbnQpO1xuICAgIHJldHVybiAoKSA9PiBwcm9taXNpZmllZDtcbiAgfVxuICByZXR1cm4gZW5kcG9pbnQhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuZHBvaW50c0lucHV0Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBmdWxseSBxdWFsaWZpZWQgZW5kcG9pbnQgb2YgdGhlIHdlYnNlcnZpY2UuIFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHVzaW5nIGEgY3VzdG9tIGVuZHBvaW50IChmb3IgZXhhbXBsZSwgd2hlbiB1c2luZyBhIGxvY2FsIHZlcnNpb24gb2YgUzMpLlxuICAgKi9cbiAgZW5kcG9pbnQ/OiBzdHJpbmcgfCBFbmRwb2ludCB8IFByb3ZpZGVyPEVuZHBvaW50PjtcblxuICAvKipcbiAgICogV2hldGhlciBUTFMgaXMgZW5hYmxlZCBmb3IgcmVxdWVzdHMuXG4gICAqL1xuICB0bHM/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFByZXZpb3VzbHlSZXNvbHZlZCB7XG4gIHJlZ2lvbkluZm9Qcm92aWRlcjogUmVnaW9uSW5mb1Byb3ZpZGVyO1xuICB1cmxQYXJzZXI6IFVybFBhcnNlcjtcbiAgcmVnaW9uOiBQcm92aWRlcjxzdHJpbmc+O1xufVxuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludHNSZXNvbHZlZENvbmZpZyBleHRlbmRzIFJlcXVpcmVkPEVuZHBvaW50c0lucHV0Q29uZmlnPiB7XG4gIGVuZHBvaW50OiBQcm92aWRlcjxFbmRwb2ludD47XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVuZHBvaW50c0NvbmZpZzxUPihcbiAgaW5wdXQ6IFQgJiBFbmRwb2ludHNJbnB1dENvbmZpZyAmIFByZXZpb3VzbHlSZXNvbHZlZFxuKTogVCAmIEVuZHBvaW50c1Jlc29sdmVkQ29uZmlnIHtcbiAgY29uc3QgdGxzID0gaW5wdXQudGxzID09PSB1bmRlZmluZWQgPyB0cnVlIDogaW5wdXQudGxzO1xuICBjb25zdCBlbmRwb2ludDogUHJvdmlkZXI8RW5kcG9pbnQ+ID0gaW5wdXQuZW5kcG9pbnRcbiAgICA/IG5vcm1hbGl6ZUVuZHBvaW50KGlucHV0LmVuZHBvaW50LCBpbnB1dC51cmxQYXJzZXIpXG4gICAgOiAoKSA9PlxuICAgICAgICBpbnB1dC5yZWdpb24oKS50aGVuKGFzeW5jIChyZWdpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBob3N0bmFtZSA9ICgoYXdhaXQgaW5wdXQucmVnaW9uSW5mb1Byb3ZpZGVyKHJlZ2lvbikpIHx8ICh7fSBhcyBSZWdpb25JbmZvKSkuaG9zdG5hbWU7XG4gICAgICAgICAgaWYgKCFob3N0bmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlc29sdmUgaG9zdG5hbWUgZnJvbSBjbGllbnQgY29uZmlnXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IGlucHV0LnVybFBhcnNlcihgJHt0bHMgPyBcImh0dHBzOlwiIDogXCJodHRwOlwifS8vJHtob3N0bmFtZX1gKTtcbiAgICAgICAgICByZXR1cm4gZW5kcG9pbnQ7XG4gICAgICAgIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLmlucHV0LFxuICAgIGVuZHBvaW50LFxuICAgIHRscyxcbiAgfTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveRegionConfig = void 0;\nvar tslib_1 = require(\"tslib\");\nfunction resolveRegionConfig(input) {\n    var region = input.region || input.regionDefaultProvider(input);\n    return tslib_1.__assign(tslib_1.__assign({}, input), { region: normalizeRegion(region) });\n}\nexports.resolveRegionConfig = resolveRegionConfig;\nfunction normalizeRegion(region) {\n    if (typeof region === \"string\") {\n        var promisified_1 = Promise.resolve(region);\n        return function () { return promisified_1; };\n    }\n    return region;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JlZ2lvbkNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBY0EsU0FBZ0IsbUJBQW1CLENBQUksS0FBaUQ7SUFDdEYsSUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBWSxDQUFDLENBQUM7SUFDekUsNkNBQ0ssS0FBSyxLQUNSLE1BQU0sRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQy9CO0FBQ0osQ0FBQztBQU5ELGtEQU1DO0FBRUQsU0FBUyxlQUFlLENBQUMsTUFBaUM7SUFDeEQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDOUIsSUFBTSxhQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxPQUFPLGNBQU0sT0FBQSxhQUFXLEVBQVgsQ0FBVyxDQUFDO0tBQzFCO0lBQ0QsT0FBTyxNQUEwQixDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbklucHV0Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIHRvIHdoaWNoIHRoaXMgY2xpZW50IHdpbGwgc2VuZCByZXF1ZXN0c1xuICAgKi9cbiAgcmVnaW9uPzogc3RyaW5nIHwgUHJvdmlkZXI8c3RyaW5nPjtcbn1cbmludGVyZmFjZSBQcmV2aW91c2x5UmVzb2x2ZWQge1xuICByZWdpb25EZWZhdWx0UHJvdmlkZXI6IChpbnB1dDogYW55KSA9PiBQcm92aWRlcjxzdHJpbmc+O1xufVxuZXhwb3J0IGludGVyZmFjZSBSZWdpb25SZXNvbHZlZENvbmZpZyB7XG4gIHJlZ2lvbjogUHJvdmlkZXI8c3RyaW5nPjtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVnaW9uQ29uZmlnPFQ+KGlucHV0OiBUICYgUmVnaW9uSW5wdXRDb25maWcgJiBQcmV2aW91c2x5UmVzb2x2ZWQpOiBUICYgUmVnaW9uUmVzb2x2ZWRDb25maWcge1xuICBjb25zdCByZWdpb24gPSBpbnB1dC5yZWdpb24gfHwgaW5wdXQucmVnaW9uRGVmYXVsdFByb3ZpZGVyKGlucHV0IGFzIGFueSk7XG4gIHJldHVybiB7XG4gICAgLi4uaW5wdXQsXG4gICAgcmVnaW9uOiBub3JtYWxpemVSZWdpb24ocmVnaW9uKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUmVnaW9uKHJlZ2lvbjogc3RyaW5nIHwgUHJvdmlkZXI8c3RyaW5nPik6IFByb3ZpZGVyPHN0cmluZz4ge1xuICBpZiAodHlwZW9mIHJlZ2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IHByb21pc2lmaWVkID0gUHJvbWlzZS5yZXNvbHZlKHJlZ2lvbik7XG4gICAgcmV0dXJuICgpID0+IHByb21pc2lmaWVkO1xuICB9XG4gIHJldHVybiByZWdpb24gYXMgUHJvdmlkZXI8c3RyaW5nPjtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./EndpointsConfig\"), exports);\ntslib_1.__exportStar(require(\"./RegionConfig\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNERBQWtDO0FBQ2xDLHlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0VuZHBvaW50c0NvbmZpZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVnaW9uQ29uZmlnXCI7XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=CognitoProviderParameters.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InMemoryStorage = void 0;\nvar InMemoryStorage = /** @class */ (function () {\n    function InMemoryStorage(store) {\n        if (store === void 0) { store = {}; }\n        this.store = store;\n    }\n    InMemoryStorage.prototype.getItem = function (key) {\n        if (key in this.store) {\n            return this.store[key];\n        }\n        return null;\n    };\n    InMemoryStorage.prototype.removeItem = function (key) {\n        delete this.store[key];\n    };\n    InMemoryStorage.prototype.setItem = function (key, value) {\n        this.store[key] = value;\n    };\n    return InMemoryStorage;\n}());\nexports.InMemoryStorage = InMemoryStorage;\n//# sourceMappingURL=InMemoryStorage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IndexedDbStorage = void 0;\nvar STORE_NAME = \"IdentityIds\";\nvar IndexedDbStorage = /** @class */ (function () {\n    function IndexedDbStorage(dbName) {\n        if (dbName === void 0) { dbName = \"aws:cognito-identity-ids\"; }\n        this.dbName = dbName;\n    }\n    IndexedDbStorage.prototype.getItem = function (key) {\n        return this.withObjectStore(\"readonly\", function (store) {\n            var req = store.get(key);\n            return new Promise(function (resolve) {\n                req.onerror = function () { return resolve(null); };\n                req.onsuccess = function () { return resolve(req.result ? req.result.value : null); };\n            });\n        }).catch(function () { return null; });\n    };\n    IndexedDbStorage.prototype.removeItem = function (key) {\n        return this.withObjectStore(\"readwrite\", function (store) {\n            var req = store.delete(key);\n            return new Promise(function (resolve, reject) {\n                req.onerror = function () { return reject(req.error); };\n                req.onsuccess = function () { return resolve(); };\n            });\n        });\n    };\n    IndexedDbStorage.prototype.setItem = function (id, value) {\n        return this.withObjectStore(\"readwrite\", function (store) {\n            var req = store.put({ id: id, value: value });\n            return new Promise(function (resolve, reject) {\n                req.onerror = function () { return reject(req.error); };\n                req.onsuccess = function () { return resolve(); };\n            });\n        });\n    };\n    IndexedDbStorage.prototype.getDb = function () {\n        var openDbRequest = self.indexedDB.open(this.dbName, 1);\n        return new Promise(function (resolve, reject) {\n            openDbRequest.onsuccess = function () {\n                resolve(openDbRequest.result);\n            };\n            openDbRequest.onerror = function () {\n                reject(openDbRequest.error);\n            };\n            openDbRequest.onblocked = function () {\n                reject(new Error(\"Unable to access DB\"));\n            };\n            openDbRequest.onupgradeneeded = function () {\n                var db = openDbRequest.result;\n                db.onerror = function () {\n                    reject(new Error(\"Failed to create object store\"));\n                };\n                db.createObjectStore(STORE_NAME, { keyPath: \"id\" });\n            };\n        });\n    };\n    IndexedDbStorage.prototype.withObjectStore = function (mode, action) {\n        return this.getDb().then(function (db) {\n            var tx = db.transaction(STORE_NAME, mode);\n            tx.oncomplete = function () { return db.close(); };\n            return new Promise(function (resolve, reject) {\n                tx.onerror = function () { return reject(tx.error); };\n                resolve(action(tx.objectStore(STORE_NAME)));\n            }).catch(function (err) {\n                db.close();\n                throw err;\n            });\n        });\n    };\n    return IndexedDbStorage;\n}());\nexports.IndexedDbStorage = IndexedDbStorage;\n//# sourceMappingURL=IndexedDbStorage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=Logins.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=Storage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromCognitoIdentity = void 0;\nvar tslib_1 = require(\"tslib\");\nvar client_cognito_identity_1 = require(\"@aws-sdk/client-cognito-identity\");\nvar property_provider_1 = require(\"@aws-sdk/property-provider\");\nvar resolveLogins_1 = require(\"./resolveLogins\");\n/**\n * Retrieves temporary AWS credentials using Amazon Cognito's\n * `GetCredentialsForIdentity` operation.\n *\n * Results from this function call are not cached internally.\n */\nfunction fromCognitoIdentity(parameters) {\n    var _this = this;\n    return function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n        var _a, _b, _c, AccessKeyId, Expiration, _d, SecretKey, SessionToken, _e, _f, _g, _h, _j;\n        return tslib_1.__generator(this, function (_k) {\n            switch (_k.label) {\n                case 0:\n                    _f = (_e = parameters.client).send;\n                    _g = client_cognito_identity_1.GetCredentialsForIdentityCommand.bind;\n                    _h = {\n                        CustomRoleArn: parameters.customRoleArn,\n                        IdentityId: parameters.identityId\n                    };\n                    if (!parameters.logins) return [3 /*break*/, 2];\n                    return [4 /*yield*/, resolveLogins_1.resolveLogins(parameters.logins)];\n                case 1:\n                    _j = _k.sent();\n                    return [3 /*break*/, 3];\n                case 2:\n                    _j = undefined;\n                    _k.label = 3;\n                case 3: return [4 /*yield*/, _f.apply(_e, [new (_g.apply(client_cognito_identity_1.GetCredentialsForIdentityCommand, [void 0, (_h.Logins = _j,\n                                _h)]))()])];\n                case 4:\n                    _a = (_k.sent()).Credentials, _b = _a === void 0 ? throwOnMissingCredentials() : _a, _c = _b.AccessKeyId, AccessKeyId = _c === void 0 ? throwOnMissingAccessKeyId() : _c, Expiration = _b.Expiration, _d = _b.SecretKey, SecretKey = _d === void 0 ? throwOnMissingSecretKey() : _d, SessionToken = _b.SessionToken;\n                    return [2 /*return*/, {\n                            accessKeyId: AccessKeyId,\n                            secretAccessKey: SecretKey,\n                            sessionToken: SessionToken,\n                            expiration: Expiration,\n                        }];\n            }\n        });\n    }); };\n}\nexports.fromCognitoIdentity = fromCognitoIdentity;\nfunction throwOnMissingAccessKeyId() {\n    throw new property_provider_1.ProviderError(\"Response from Amazon Cognito contained no access key ID\");\n}\nfunction throwOnMissingCredentials() {\n    throw new property_provider_1.ProviderError(\"Response from Amazon Cognito contained no credentials\");\n}\nfunction throwOnMissingSecretKey() {\n    throw new property_provider_1.ProviderError(\"Response from Amazon Cognito contained no secret key\");\n}\n//# sourceMappingURL=fromCognitoIdentity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromCognitoIdentityPool = void 0;\nvar tslib_1 = require(\"tslib\");\nvar client_cognito_identity_1 = require(\"@aws-sdk/client-cognito-identity\");\nvar property_provider_1 = require(\"@aws-sdk/property-provider\");\nvar fromCognitoIdentity_1 = require(\"./fromCognitoIdentity\");\nvar localStorage_1 = require(\"./localStorage\");\nvar resolveLogins_1 = require(\"./resolveLogins\");\n/**\n * Retrieves or generates a unique identifier using Amazon Cognito's `GetId`\n * operation, then generates temporary AWS credentials using Amazon Cognito's\n * `GetCredentialsForIdentity` operation.\n *\n * Results from `GetId` are cached internally, but results from\n * `GetCredentialsForIdentity` are not.\n */\nfunction fromCognitoIdentityPool(_a) {\n    var _this = this;\n    var accountId = _a.accountId, _b = _a.cache, cache = _b === void 0 ? localStorage_1.localStorage() : _b, client = _a.client, customRoleArn = _a.customRoleArn, identityPoolId = _a.identityPoolId, logins = _a.logins, _c = _a.userIdentifier, userIdentifier = _c === void 0 ? !logins || Object.keys(logins).length === 0 ? \"ANONYMOUS\" : undefined : _c;\n    var cacheKey = userIdentifier ? \"aws:cognito-identity-credentials:\" + identityPoolId + \":\" + userIdentifier : undefined;\n    var provider = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n        var identityId, _a, _b, IdentityId, _c, _d, _e, _f, _g;\n        return tslib_1.__generator(this, function (_h) {\n            switch (_h.label) {\n                case 0:\n                    _a = cacheKey;\n                    if (!_a) return [3 /*break*/, 2];\n                    return [4 /*yield*/, cache.getItem(cacheKey)];\n                case 1:\n                    _a = (_h.sent());\n                    _h.label = 2;\n                case 2:\n                    identityId = _a;\n                    if (!!identityId) return [3 /*break*/, 7];\n                    _d = (_c = client).send;\n                    _e = client_cognito_identity_1.GetIdCommand.bind;\n                    _f = {\n                        AccountId: accountId,\n                        IdentityPoolId: identityPoolId\n                    };\n                    if (!logins) return [3 /*break*/, 4];\n                    return [4 /*yield*/, resolveLogins_1.resolveLogins(logins)];\n                case 3:\n                    _g = _h.sent();\n                    return [3 /*break*/, 5];\n                case 4:\n                    _g = undefined;\n                    _h.label = 5;\n                case 5: return [4 /*yield*/, _d.apply(_c, [new (_e.apply(client_cognito_identity_1.GetIdCommand, [void 0, (_f.Logins = _g,\n                                _f)]))()])];\n                case 6:\n                    _b = (_h.sent()).IdentityId, IdentityId = _b === void 0 ? throwOnMissingId() : _b;\n                    identityId = IdentityId;\n                    if (cacheKey) {\n                        Promise.resolve(cache.setItem(cacheKey, identityId)).catch(function () { });\n                    }\n                    _h.label = 7;\n                case 7:\n                    provider = fromCognitoIdentity_1.fromCognitoIdentity({\n                        client: client,\n                        customRoleArn: customRoleArn,\n                        logins: logins,\n                        identityId: identityId,\n                    });\n                    return [2 /*return*/, provider()];\n            }\n        });\n    }); };\n    return function () {\n        return provider().catch(function (err) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n            return tslib_1.__generator(this, function (_a) {\n                if (cacheKey) {\n                    Promise.resolve(cache.removeItem(cacheKey)).catch(function () { });\n                }\n                throw err;\n            });\n        }); });\n    };\n}\nexports.fromCognitoIdentityPool = fromCognitoIdentityPool;\nfunction throwOnMissingId() {\n    throw new property_provider_1.ProviderError(\"Response from Amazon Cognito contained no identity ID\");\n}\n//# sourceMappingURL=fromCognitoIdentityPool.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./CognitoProviderParameters\"), exports);\ntslib_1.__exportStar(require(\"./fromCognitoIdentity\"), exports);\ntslib_1.__exportStar(require(\"./fromCognitoIdentityPool\"), exports);\ntslib_1.__exportStar(require(\"./Logins\"), exports);\ntslib_1.__exportStar(require(\"./Storage\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.localStorage = void 0;\nvar IndexedDbStorage_1 = require(\"./IndexedDbStorage\");\nvar InMemoryStorage_1 = require(\"./InMemoryStorage\");\nvar inMemoryStorage = new InMemoryStorage_1.InMemoryStorage();\nfunction localStorage() {\n    if (typeof self === \"object\" && self.indexedDB) {\n        return new IndexedDbStorage_1.IndexedDbStorage();\n    }\n    if (typeof window === \"object\" && window.localStorage) {\n        return window.localStorage;\n    }\n    return inMemoryStorage;\n}\nexports.localStorage = localStorage;\n//# sourceMappingURL=localStorage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveLogins = void 0;\nvar tslib_1 = require(\"tslib\");\n/**\n * @internal\n */\nfunction resolveLogins(logins) {\n    return Promise.all(Object.keys(logins).reduce(function (arr, name) {\n        var tokenOrProvider = logins[name];\n        if (typeof tokenOrProvider === \"string\") {\n            arr.push([name, tokenOrProvider]);\n        }\n        else {\n            arr.push(tokenOrProvider().then(function (token) { return [name, token]; }));\n        }\n        return arr;\n    }, [])).then(function (resolvedPairs) {\n        return resolvedPairs.reduce(function (logins, _a) {\n            var _b = tslib_1.__read(_a, 2), key = _b[0], value = _b[1];\n            logins[key] = value;\n            return logins;\n        }, {});\n    });\n}\nexports.resolveLogins = resolveLogins;\n//# sourceMappingURL=resolveLogins.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FetchHttpHandler = void 0;\nvar tslib_1 = require(\"tslib\");\nvar protocol_http_1 = require(\"@aws-sdk/protocol-http\");\nvar querystring_builder_1 = require(\"@aws-sdk/querystring-builder\");\nvar request_timeout_1 = require(\"./request-timeout\");\nvar FetchHttpHandler = /** @class */ (function () {\n    function FetchHttpHandler(httpOptions) {\n        if (httpOptions === void 0) { httpOptions = {}; }\n        this.httpOptions = httpOptions;\n    }\n    FetchHttpHandler.prototype.destroy = function () {\n        // Do nothing. TLS and HTTP/2 connection pooling is handled by the\n        // browser.\n    };\n    FetchHttpHandler.prototype.handle = function (request, options) {\n        var abortSignal = options === null || options === void 0 ? void 0 : options.abortSignal;\n        var requestTimeoutInMs = this.httpOptions.requestTimeout;\n        // if the request was already aborted, prevent doing extra work\n        if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {\n            var abortError = new Error(\"Request aborted\");\n            abortError.name = \"AbortError\";\n            return Promise.reject(abortError);\n        }\n        var path = request.path;\n        if (request.query) {\n            var queryString = querystring_builder_1.buildQueryString(request.query);\n            if (queryString) {\n                path += \"?\" + queryString;\n            }\n        }\n        var port = request.port;\n        var url = request.protocol + \"//\" + request.hostname + (port ? \":\" + port : \"\") + path;\n        var requestOptions = {\n            body: request.body,\n            headers: new Headers(request.headers),\n            method: request.method,\n        };\n        // some browsers support abort signal\n        if (typeof AbortController !== \"undefined\") {\n            requestOptions[\"signal\"] = abortSignal;\n        }\n        var fetchRequest = new Request(url, requestOptions);\n        var raceOfPromises = [\n            fetch(fetchRequest).then(function (response) {\n                var e_1, _a;\n                var fetchHeaders = response.headers;\n                var transformedHeaders = {};\n                try {\n                    for (var _b = tslib_1.__values(fetchHeaders.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                        var pair = _c.value;\n                        transformedHeaders[pair[0]] = pair[1];\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n                var hasReadableStream = response.body !== undefined;\n                // Return the response with buffered body\n                if (!hasReadableStream) {\n                    return response.blob().then(function (body) { return ({\n                        response: new protocol_http_1.HttpResponse({\n                            headers: transformedHeaders,\n                            statusCode: response.status,\n                            body: body,\n                        }),\n                    }); });\n                }\n                // Return the response with streaming body\n                return {\n                    response: new protocol_http_1.HttpResponse({\n                        headers: transformedHeaders,\n                        statusCode: response.status,\n                        body: response.body,\n                    }),\n                };\n            }),\n            request_timeout_1.requestTimeout(requestTimeoutInMs),\n        ];\n        if (abortSignal) {\n            raceOfPromises.push(new Promise(function (resolve, reject) {\n                abortSignal.onabort = function () {\n                    var abortError = new Error(\"Request aborted\");\n                    abortError.name = \"AbortError\";\n                    reject(abortError);\n                };\n            }));\n        }\n        return Promise.race(raceOfPromises);\n    };\n    return FetchHttpHandler;\n}());\nexports.FetchHttpHandler = FetchHttpHandler;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtaHR0cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZldGNoLWh0dHAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsd0RBQWdGO0FBQ2hGLG9FQUFnRTtBQUdoRSxxREFBbUQ7QUFlbkQ7SUFDRSwwQkFBNkIsV0FBb0M7UUFBcEMsNEJBQUEsRUFBQSxnQkFBb0M7UUFBcEMsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO0lBQUcsQ0FBQztJQUVyRSxrQ0FBTyxHQUFQO1FBQ0Usa0VBQWtFO1FBQ2xFLFdBQVc7SUFDYixDQUFDO0lBRUQsaUNBQU0sR0FBTixVQUFPLE9BQW9CLEVBQUUsT0FBMkI7UUFDdEQsSUFBTSxXQUFXLEdBQUcsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVcsQ0FBQztRQUN6QyxJQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBRTNELCtEQUErRDtRQUMvRCxJQUFJLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxPQUFPLEVBQUU7WUFDeEIsSUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNoRCxVQUFVLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztZQUMvQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNqQixJQUFNLFdBQVcsR0FBRyxzQ0FBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxJQUFJLE1BQUksV0FBYSxDQUFDO2FBQzNCO1NBQ0Y7UUFFRCxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQU0sR0FBRyxHQUFNLE9BQU8sQ0FBQyxRQUFRLFVBQUssT0FBTyxDQUFDLFFBQVEsSUFBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQUksSUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUcsSUFBTSxDQUFDO1FBQ3ZGLElBQU0sY0FBYyxHQUFnQjtZQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsT0FBTyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3ZCLENBQUM7UUFFRixxQ0FBcUM7UUFDckMsSUFBSSxPQUFPLGVBQWUsS0FBSyxXQUFXLEVBQUU7WUFDekMsY0FBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLENBQUM7U0FDakQ7UUFFRCxJQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEQsSUFBTSxjQUFjLEdBQUc7WUFDckIsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLFFBQVE7O2dCQUNoQyxJQUFNLFlBQVksR0FBUSxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUMzQyxJQUFNLGtCQUFrQixHQUFjLEVBQUUsQ0FBQzs7b0JBRXpDLEtBQW1CLElBQUEsS0FBQSxpQkFBaUIsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFBLGdCQUFBLDRCQUFFO3dCQUF2RCxJQUFNLElBQUksV0FBQTt3QkFDYixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3ZDOzs7Ozs7Ozs7Z0JBRUQsSUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztnQkFFdEQseUNBQXlDO2dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7b0JBQ3RCLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFDLElBQUksSUFBSyxPQUFBLENBQUM7d0JBQ3JDLFFBQVEsRUFBRSxJQUFJLDRCQUFZLENBQUM7NEJBQ3pCLE9BQU8sRUFBRSxrQkFBa0I7NEJBQzNCLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTTs0QkFDM0IsSUFBSSxNQUFBO3lCQUNMLENBQUM7cUJBQ0gsQ0FBQyxFQU5vQyxDQU1wQyxDQUFDLENBQUM7aUJBQ0w7Z0JBQ0QsMENBQTBDO2dCQUMxQyxPQUFPO29CQUNMLFFBQVEsRUFBRSxJQUFJLDRCQUFZLENBQUM7d0JBQ3pCLE9BQU8sRUFBRSxrQkFBa0I7d0JBQzNCLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTTt3QkFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO3FCQUNwQixDQUFDO2lCQUNILENBQUM7WUFDSixDQUFDLENBQUM7WUFDRixnQ0FBYyxDQUFDLGtCQUFrQixDQUFDO1NBQ25DLENBQUM7UUFDRixJQUFJLFdBQVcsRUFBRTtZQUNmLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLElBQUksT0FBTyxDQUFRLFVBQUMsT0FBTyxFQUFFLE1BQU07Z0JBQ2pDLFdBQVcsQ0FBQyxPQUFPLEdBQUc7b0JBQ3BCLElBQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ2hELFVBQVUsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO29CQUMvQixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUNELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0gsdUJBQUM7QUFBRCxDQUFDLEFBdEZELElBc0ZDO0FBdEZZLDRDQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIjtcbmltcG9ydCB7IGJ1aWxkUXVlcnlTdHJpbmcgfSBmcm9tIFwiQGF3cy1zZGsvcXVlcnlzdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgSGVhZGVyQmFnLCBIdHRwSGFuZGxlck9wdGlvbnMgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuaW1wb3J0IHsgcmVxdWVzdFRpbWVvdXQgfSBmcm9tIFwiLi9yZXF1ZXN0LXRpbWVvdXRcIjtcblxuZGVjbGFyZSBsZXQgQWJvcnRDb250cm9sbGVyOiBhbnk7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaHR0cCBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhIGJyb3dzZXIgaHR0cCBjbGllbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3Nlckh0dHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGEgcmVxdWVzdCBjYW4gdGFrZSBiZWZvcmUgYmVpbmcgYXV0b21hdGljYWxseVxuICAgKiB0ZXJtaW5hdGVkLlxuICAgKi9cbiAgcmVxdWVzdFRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGZXRjaEh0dHBIYW5kbGVyIGltcGxlbWVudHMgSHR0cEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHBPcHRpb25zOiBCcm93c2VySHR0cE9wdGlvbnMgPSB7fSkge31cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIERvIG5vdGhpbmcuIFRMUyBhbmQgSFRUUC8yIGNvbm5lY3Rpb24gcG9vbGluZyBpcyBoYW5kbGVkIGJ5IHRoZVxuICAgIC8vIGJyb3dzZXIuXG4gIH1cblxuICBoYW5kbGUocmVxdWVzdDogSHR0cFJlcXVlc3QsIG9wdGlvbnM6IEh0dHBIYW5kbGVyT3B0aW9ucyk6IFByb21pc2U8eyByZXNwb25zZTogSHR0cFJlc3BvbnNlIH0+IHtcbiAgICBjb25zdCBhYm9ydFNpZ25hbCA9IG9wdGlvbnM/LmFib3J0U2lnbmFsO1xuICAgIGNvbnN0IHJlcXVlc3RUaW1lb3V0SW5NcyA9IHRoaXMuaHR0cE9wdGlvbnMucmVxdWVzdFRpbWVvdXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVxdWVzdCB3YXMgYWxyZWFkeSBhYm9ydGVkLCBwcmV2ZW50IGRvaW5nIGV4dHJhIHdvcmtcbiAgICBpZiAoYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXCJSZXF1ZXN0IGFib3J0ZWRcIik7XG4gICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChhYm9ydEVycm9yKTtcbiAgICB9XG5cbiAgICBsZXQgcGF0aCA9IHJlcXVlc3QucGF0aDtcbiAgICBpZiAocmVxdWVzdC5xdWVyeSkge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nKHJlcXVlc3QucXVlcnkpO1xuICAgICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIHBhdGggKz0gYD8ke3F1ZXJ5U3RyaW5nfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydCA9IHJlcXVlc3QucG9ydDtcbiAgICBjb25zdCB1cmwgPSBgJHtyZXF1ZXN0LnByb3RvY29sfS8vJHtyZXF1ZXN0Lmhvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiBcIlwifSR7cGF0aH1gO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIGJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHJlcXVlc3QuaGVhZGVycyksXG4gICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgIH07XG5cbiAgICAvLyBzb21lIGJyb3dzZXJzIHN1cHBvcnQgYWJvcnQgc2lnbmFsXG4gICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIChyZXF1ZXN0T3B0aW9ucyBhcyBhbnkpW1wic2lnbmFsXCJdID0gYWJvcnRTaWduYWw7XG4gICAgfVxuXG4gICAgY29uc3QgZmV0Y2hSZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgY29uc3QgcmFjZU9mUHJvbWlzZXMgPSBbXG4gICAgICBmZXRjaChmZXRjaFJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZldGNoSGVhZGVyczogYW55ID0gcmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRIZWFkZXJzOiBIZWFkZXJCYWcgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgPEFycmF5PHN0cmluZ1tdPj5mZXRjaEhlYWRlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgdHJhbnNmb3JtZWRIZWFkZXJzW3BhaXJbMF1dID0gcGFpclsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc1JlYWRhYmxlU3RyZWFtID0gcmVzcG9uc2UuYm9keSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2Ugd2l0aCBidWZmZXJlZCBib2R5XG4gICAgICAgIGlmICghaGFzUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYmxvYigpLnRoZW4oKGJvZHkpID0+ICh7XG4gICAgICAgICAgICByZXNwb25zZTogbmV3IEh0dHBSZXNwb25zZSh7XG4gICAgICAgICAgICAgIGhlYWRlcnM6IHRyYW5zZm9ybWVkSGVhZGVycyxcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2Ugd2l0aCBzdHJlYW1pbmcgYm9keVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc3BvbnNlOiBuZXcgSHR0cFJlc3BvbnNlKHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHRyYW5zZm9ybWVkSGVhZGVycyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlLmJvZHksXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHJlcXVlc3RUaW1lb3V0KHJlcXVlc3RUaW1lb3V0SW5NcyksXG4gICAgXTtcbiAgICBpZiAoYWJvcnRTaWduYWwpIHtcbiAgICAgIHJhY2VPZlByb21pc2VzLnB1c2goXG4gICAgICAgIG5ldyBQcm9taXNlPG5ldmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYWJvcnRTaWduYWwub25hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXCJSZXF1ZXN0IGFib3J0ZWRcIik7XG4gICAgICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgICAgIHJlamVjdChhYm9ydEVycm9yKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShyYWNlT2ZQcm9taXNlcyk7XG4gIH1cbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./fetch-http-handler\"), exports);\ntslib_1.__exportStar(require(\"./stream-collector\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0RBQXFDO0FBQ3JDLDZEQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZldGNoLWh0dHAtaGFuZGxlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RyZWFtLWNvbGxlY3RvclwiO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.requestTimeout = void 0;\nfunction requestTimeout(timeoutInMs) {\n    if (timeoutInMs === void 0) { timeoutInMs = 0; }\n    return new Promise(function (resolve, reject) {\n        if (timeoutInMs) {\n            setTimeout(function () {\n                var timeoutError = new Error(\"Request did not complete within \" + timeoutInMs + \" ms\");\n                timeoutError.name = \"TimeoutError\";\n                reject(timeoutError);\n            }, timeoutInMs);\n        }\n    });\n}\nexports.requestTimeout = requestTimeout;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC10aW1lb3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcXVlc3QtdGltZW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixjQUFjLENBQUMsV0FBZTtJQUFmLDRCQUFBLEVBQUEsZUFBZTtJQUM1QyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07UUFDakMsSUFBSSxXQUFXLEVBQUU7WUFDZixVQUFVLENBQUM7Z0JBQ1QsSUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMscUNBQW1DLFdBQVcsUUFBSyxDQUFDLENBQUM7Z0JBQ3BGLFlBQVksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO2dCQUNuQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkIsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBVkQsd0NBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQodGltZW91dEluTXMgPSAwKTogUHJvbWlzZTxuZXZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICh0aW1lb3V0SW5Ncykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgUmVxdWVzdCBkaWQgbm90IGNvbXBsZXRlIHdpdGhpbiAke3RpbWVvdXRJbk1zfSBtc2ApO1xuICAgICAgICB0aW1lb3V0RXJyb3IubmFtZSA9IFwiVGltZW91dEVycm9yXCI7XG4gICAgICAgIHJlamVjdCh0aW1lb3V0RXJyb3IpO1xuICAgICAgfSwgdGltZW91dEluTXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.streamCollector = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_base64_browser_1 = require(\"@aws-sdk/util-base64-browser\");\n//reference: https://snack.expo.io/r1JCSWRGU\nexports.streamCollector = function (stream) {\n    if (stream instanceof Blob) {\n        return collectBlob(stream);\n    }\n    return collectStream(stream);\n};\nfunction collectBlob(blob) {\n    return tslib_1.__awaiter(this, void 0, void 0, function () {\n        var base64, arrayBuffer;\n        return tslib_1.__generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, readToBase64(blob)];\n                case 1:\n                    base64 = _a.sent();\n                    arrayBuffer = util_base64_browser_1.fromBase64(base64);\n                    return [2 /*return*/, new Uint8Array(arrayBuffer)];\n            }\n        });\n    });\n}\nfunction collectStream(stream) {\n    return tslib_1.__awaiter(this, void 0, void 0, function () {\n        var res, reader, isDone, _a, done, value, prior;\n        return tslib_1.__generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    res = new Uint8Array(0);\n                    reader = stream.getReader();\n                    isDone = false;\n                    _b.label = 1;\n                case 1:\n                    if (!!isDone) return [3 /*break*/, 3];\n                    return [4 /*yield*/, reader.read()];\n                case 2:\n                    _a = _b.sent(), done = _a.done, value = _a.value;\n                    if (value) {\n                        prior = res;\n                        res = new Uint8Array(prior.length + value.length);\n                        res.set(prior);\n                        res.set(value, prior.length);\n                    }\n                    isDone = done;\n                    return [3 /*break*/, 1];\n                case 3: return [2 /*return*/, res];\n            }\n        });\n    });\n}\nfunction readToBase64(blob) {\n    return new Promise(function (resolve, reject) {\n        var reader = new FileReader();\n        reader.onloadend = function () {\n            var _a;\n            // reference: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL\n            // response from readAsDataURL is always prepended with \"data:*/*;base64,\"\n            if (reader.readyState !== 2) {\n                return reject(new Error(\"Reader aborted too early\"));\n            }\n            var result = ((_a = reader.result) !== null && _a !== void 0 ? _a : \"\");\n            // Response can include only 'data:' for empty blob, return empty string in this case.\n            // Otherwise, return the string after ','\n            var commaIndex = result.indexOf(\",\");\n            var dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;\n            resolve(result.substring(dataOffset));\n        };\n        reader.onabort = function () { return reject(new Error(\"Read aborted\")); };\n        reader.onerror = function () { return reject(reader.error); };\n        // reader.readAsArrayBuffer is not always available\n        reader.readAsDataURL(blob);\n    });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWNvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0tY29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxvRUFBMEQ7QUFFMUQsNENBQTRDO0FBQy9CLFFBQUEsZUFBZSxHQUFvQixVQUFDLE1BQTZCO0lBQzVFLElBQUksTUFBTSxZQUFZLElBQUksRUFBRTtRQUMxQixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM1QjtJQUVELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGLFNBQWUsV0FBVyxDQUFDLElBQVU7Ozs7O3dCQUNwQixxQkFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUE7O29CQUFqQyxNQUFNLEdBQUcsU0FBd0I7b0JBQ2pDLFdBQVcsR0FBRyxnQ0FBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxzQkFBTyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBQzs7OztDQUNwQztBQUVELFNBQWUsYUFBYSxDQUFDLE1BQXNCOzs7Ozs7b0JBQzdDLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxHQUFHLEtBQUssQ0FBQzs7O3lCQUNaLENBQUMsTUFBTTtvQkFDWSxxQkFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUE7O29CQUFyQyxLQUFrQixTQUFtQixFQUFuQyxJQUFJLFVBQUEsRUFBRSxLQUFLLFdBQUE7b0JBQ25CLElBQUksS0FBSyxFQUFFO3dCQUNILEtBQUssR0FBRyxHQUFHLENBQUM7d0JBQ2xCLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDbEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDZixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzlCO29CQUNELE1BQU0sR0FBRyxJQUFJLENBQUM7O3dCQUVoQixzQkFBTyxHQUFHLEVBQUM7Ozs7Q0FDWjtBQUVELFNBQVMsWUFBWSxDQUFDLElBQVU7SUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ2pDLElBQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRzs7WUFDakIsdUZBQXVGO1lBQ3ZGLDBFQUEwRTtZQUMxRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxJQUFNLE1BQU0sR0FBRyxPQUFDLE1BQU0sQ0FBQyxNQUFNLG1DQUFJLEVBQUUsQ0FBVyxDQUFDO1lBQy9DLHNGQUFzRjtZQUN0Rix5Q0FBeUM7WUFDekMsSUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFNLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDcEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLGNBQU0sT0FBQSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBakMsQ0FBaUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsT0FBTyxHQUFHLGNBQU0sT0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFwQixDQUFvQixDQUFDO1FBQzVDLG1EQUFtRDtRQUNuRCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0cmVhbUNvbGxlY3RvciB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuaW1wb3J0IHsgZnJvbUJhc2U2NCB9IGZyb20gXCJAYXdzLXNkay91dGlsLWJhc2U2NC1icm93c2VyXCI7XG5cbi8vcmVmZXJlbmNlOiBodHRwczovL3NuYWNrLmV4cG8uaW8vcjFKQ1NXUkdVXG5leHBvcnQgY29uc3Qgc3RyZWFtQ29sbGVjdG9yOiBTdHJlYW1Db2xsZWN0b3IgPSAoc3RyZWFtOiBCbG9iIHwgUmVhZGFibGVTdHJlYW0pOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICByZXR1cm4gY29sbGVjdEJsb2Ioc3RyZWFtKTtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0U3RyZWFtKHN0cmVhbSk7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QmxvYihibG9iOiBCbG9iKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHJlYWRUb0Jhc2U2NChibG9iKTtcbiAgY29uc3QgYXJyYXlCdWZmZXIgPSBmcm9tQmFzZTY0KGJhc2U2NCk7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RTdHJlYW0oc3RyZWFtOiBSZWFkYWJsZVN0cmVhbSk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBsZXQgcmVzID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgbGV0IGlzRG9uZSA9IGZhbHNlO1xuICB3aGlsZSAoIWlzRG9uZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmlvciA9IHJlcztcbiAgICAgIHJlcyA9IG5ldyBVaW50OEFycmF5KHByaW9yLmxlbmd0aCArIHZhbHVlLmxlbmd0aCk7XG4gICAgICByZXMuc2V0KHByaW9yKTtcbiAgICAgIHJlcy5zZXQodmFsdWUsIHByaW9yLmxlbmd0aCk7XG4gICAgfVxuICAgIGlzRG9uZSA9IGRvbmU7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gcmVhZFRvQmFzZTY0KGJsb2I6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcbiAgICAgIC8vIHJlZmVyZW5jZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVSZWFkZXIvcmVhZEFzRGF0YVVSTFxuICAgICAgLy8gcmVzcG9uc2UgZnJvbSByZWFkQXNEYXRhVVJMIGlzIGFsd2F5cyBwcmVwZW5kZWQgd2l0aCBcImRhdGE6Ki8qO2Jhc2U2NCxcIlxuICAgICAgaWYgKHJlYWRlci5yZWFkeVN0YXRlICE9PSAyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKFwiUmVhZGVyIGFib3J0ZWQgdG9vIGVhcmx5XCIpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IChyZWFkZXIucmVzdWx0ID8/IFwiXCIpIGFzIHN0cmluZztcbiAgICAgIC8vIFJlc3BvbnNlIGNhbiBpbmNsdWRlIG9ubHkgJ2RhdGE6JyBmb3IgZW1wdHkgYmxvYiwgcmV0dXJuIGVtcHR5IHN0cmluZyBpbiB0aGlzIGNhc2UuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiB0aGUgc3RyaW5nIGFmdGVyICcsJ1xuICAgICAgY29uc3QgY29tbWFJbmRleCA9IHJlc3VsdC5pbmRleE9mKFwiLFwiKTtcbiAgICAgIGNvbnN0IGRhdGFPZmZzZXQgPSBjb21tYUluZGV4ID4gLTEgPyBjb21tYUluZGV4ICsgMSA6IHJlc3VsdC5sZW5ndGg7XG4gICAgICByZXNvbHZlKHJlc3VsdC5zdWJzdHJpbmcoZGF0YU9mZnNldCkpO1xuICAgIH07XG4gICAgcmVhZGVyLm9uYWJvcnQgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiUmVhZCBhYm9ydGVkXCIpKTtcbiAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgIC8vIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlciBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICB9KTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.invalidFunction = void 0;\nexports.invalidFunction = function (message) { return function () {\n    throw new Error(message);\n}; };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxlQUFlLEdBQUcsVUFBQyxPQUFlLElBQUssT0FBQTtJQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLENBQUMsRUFGbUQsQ0FFbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpbnZhbGlkRnVuY3Rpb24gPSAobWVzc2FnZTogc3RyaW5nKSA9PiAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn07XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isArrayBuffer = void 0;\nfunction isArrayBuffer(arg) {\n    return ((typeof ArrayBuffer === \"function\" && arg instanceof ArrayBuffer) ||\n        Object.prototype.toString.call(arg) === \"[object ArrayBuffer]\");\n}\nexports.isArrayBuffer = isArrayBuffer;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixhQUFhLENBQUMsR0FBUTtJQUNwQyxPQUFPLENBQ0wsQ0FBQyxPQUFPLFdBQVcsS0FBSyxVQUFVLElBQUksR0FBRyxZQUFZLFdBQVcsQ0FBQztRQUNqRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssc0JBQXNCLENBQy9ELENBQUM7QUFDSixDQUFDO0FBTEQsc0NBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcihhcmc6IGFueSk6IGFyZyBpcyBBcnJheUJ1ZmZlciB7XG4gIHJldHVybiAoXG4gICAgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiICYmIGFyZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fFxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCJcbiAgKTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getContentLengthPlugin = exports.contentLengthMiddlewareOptions = exports.contentLengthMiddleware = void 0;\nvar tslib_1 = require(\"tslib\");\nvar protocol_http_1 = require(\"@aws-sdk/protocol-http\");\nvar CONTENT_LENGTH_HEADER = \"content-length\";\nfunction contentLengthMiddleware(bodyLengthChecker) {\n    var _this = this;\n    return function (next) { return function (args) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n        var request, body, headers, length;\n        var _a;\n        return tslib_1.__generator(this, function (_b) {\n            request = args.request;\n            if (protocol_http_1.HttpRequest.isInstance(request)) {\n                body = request.body, headers = request.headers;\n                if (body &&\n                    Object.keys(headers)\n                        .map(function (str) { return str.toLowerCase(); })\n                        .indexOf(CONTENT_LENGTH_HEADER) === -1) {\n                    length = bodyLengthChecker(body);\n                    if (length !== undefined) {\n                        request.headers = tslib_1.__assign(tslib_1.__assign({}, request.headers), (_a = {}, _a[CONTENT_LENGTH_HEADER] = String(length), _a));\n                    }\n                }\n            }\n            return [2 /*return*/, next(tslib_1.__assign(tslib_1.__assign({}, args), { request: request }))];\n        });\n    }); }; };\n}\nexports.contentLengthMiddleware = contentLengthMiddleware;\nexports.contentLengthMiddlewareOptions = {\n    step: \"build\",\n    tags: [\"SET_CONTENT_LENGTH\", \"CONTENT_LENGTH\"],\n    name: \"contentLengthMiddleware\",\n};\nexports.getContentLengthPlugin = function (options) { return ({\n    applyToStack: function (clientStack) {\n        clientStack.add(contentLengthMiddleware(options.bodyLengthChecker), exports.contentLengthMiddlewareOptions);\n    },\n}); };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHdEQUFxRDtBQVlyRCxJQUFNLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO0FBRS9DLFNBQWdCLHVCQUF1QixDQUFDLGlCQUF1QztJQUEvRSxpQkE0QkM7SUEzQkMsT0FBTyxVQUFnQyxJQUErQixJQUFnQyxPQUFBLFVBQ3BHLElBQWdDOzs7O1lBRTFCLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzdCLElBQUksMkJBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksR0FBYyxPQUFPLEtBQXJCLEVBQUUsT0FBTyxHQUFLLE9BQU8sUUFBWixDQUFhO2dCQUNsQyxJQUNFLElBQUk7b0JBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7eUJBQ2pCLEdBQUcsQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBakIsQ0FBaUIsQ0FBQzt5QkFDL0IsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3hDO29CQUNNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO3dCQUN4QixPQUFPLENBQUMsT0FBTyx5Q0FDVixPQUFPLENBQUMsT0FBTyxnQkFDakIscUJBQXFCLElBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUN4QyxDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7WUFFRCxzQkFBTyxJQUFJLHVDQUNOLElBQUksS0FDUCxPQUFPLFNBQUEsSUFDUCxFQUFDOztTQUNKLEVBMUJxRyxDQTBCckcsQ0FBQztBQUNKLENBQUM7QUE1QkQsMERBNEJDO0FBRVksUUFBQSw4QkFBOEIsR0FBd0I7SUFDakUsSUFBSSxFQUFFLE9BQU87SUFDYixJQUFJLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQztJQUM5QyxJQUFJLEVBQUUseUJBQXlCO0NBQ2hDLENBQUM7QUFFVyxRQUFBLHNCQUFzQixHQUFHLFVBQUMsT0FBb0QsSUFBMEIsT0FBQSxDQUFDO0lBQ3BILFlBQVksRUFBRSxVQUFDLFdBQVc7UUFDeEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxzQ0FBOEIsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7Q0FDRixDQUFDLEVBSm1ILENBSW5ILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVxdWVzdCB9IGZyb20gXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCI7XG5pbXBvcnQge1xuICBCb2R5TGVuZ3RoQ2FsY3VsYXRvcixcbiAgQnVpbGRIYW5kbGVyLFxuICBCdWlsZEhhbmRsZXJBcmd1bWVudHMsXG4gIEJ1aWxkSGFuZGxlck9wdGlvbnMsXG4gIEJ1aWxkSGFuZGxlck91dHB1dCxcbiAgQnVpbGRNaWRkbGV3YXJlLFxuICBNZXRhZGF0YUJlYXJlcixcbiAgUGx1Z2dhYmxlLFxufSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuY29uc3QgQ09OVEVOVF9MRU5HVEhfSEVBREVSID0gXCJjb250ZW50LWxlbmd0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudExlbmd0aE1pZGRsZXdhcmUoYm9keUxlbmd0aENoZWNrZXI6IEJvZHlMZW5ndGhDYWxjdWxhdG9yKTogQnVpbGRNaWRkbGV3YXJlPGFueSwgYW55PiB7XG4gIHJldHVybiA8T3V0cHV0IGV4dGVuZHMgTWV0YWRhdGFCZWFyZXI+KG5leHQ6IEJ1aWxkSGFuZGxlcjxhbnksIE91dHB1dD4pOiBCdWlsZEhhbmRsZXI8YW55LCBPdXRwdXQ+ID0+IGFzeW5jIChcbiAgICBhcmdzOiBCdWlsZEhhbmRsZXJBcmd1bWVudHM8YW55PlxuICApOiBQcm9taXNlPEJ1aWxkSGFuZGxlck91dHB1dDxPdXRwdXQ+PiA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGFyZ3MucmVxdWVzdDtcbiAgICBpZiAoSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgY29uc3QgeyBib2R5LCBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICAgICAgaWYgKFxuICAgICAgICBib2R5ICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAuaW5kZXhPZihDT05URU5UX0xFTkdUSF9IRUFERVIpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGJvZHlMZW5ndGhDaGVja2VyKGJvZHkpO1xuICAgICAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgPSB7XG4gICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICBbQ09OVEVOVF9MRU5HVEhfSEVBREVSXTogU3RyaW5nKGxlbmd0aCksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHtcbiAgICAgIC4uLmFyZ3MsXG4gICAgICByZXF1ZXN0LFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY29udGVudExlbmd0aE1pZGRsZXdhcmVPcHRpb25zOiBCdWlsZEhhbmRsZXJPcHRpb25zID0ge1xuICBzdGVwOiBcImJ1aWxkXCIsXG4gIHRhZ3M6IFtcIlNFVF9DT05URU5UX0xFTkdUSFwiLCBcIkNPTlRFTlRfTEVOR1RIXCJdLFxuICBuYW1lOiBcImNvbnRlbnRMZW5ndGhNaWRkbGV3YXJlXCIsXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGVudExlbmd0aFBsdWdpbiA9IChvcHRpb25zOiB7IGJvZHlMZW5ndGhDaGVja2VyOiBCb2R5TGVuZ3RoQ2FsY3VsYXRvciB9KTogUGx1Z2dhYmxlPGFueSwgYW55PiA9PiAoe1xuICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgIGNsaWVudFN0YWNrLmFkZChjb250ZW50TGVuZ3RoTWlkZGxld2FyZShvcHRpb25zLmJvZHlMZW5ndGhDaGVja2VyKSwgY29udGVudExlbmd0aE1pZGRsZXdhcmVPcHRpb25zKTtcbiAgfSxcbn0pO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getHostHeaderPlugin = exports.hostHeaderMiddlewareOptions = exports.hostHeaderMiddleware = exports.resolveHostHeaderConfig = void 0;\nvar tslib_1 = require(\"tslib\");\nvar protocol_http_1 = require(\"@aws-sdk/protocol-http\");\nfunction resolveHostHeaderConfig(input) {\n    return input;\n}\nexports.resolveHostHeaderConfig = resolveHostHeaderConfig;\nexports.hostHeaderMiddleware = function (options) { return function (next) { return function (args) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {\n    var request, _a, handlerProtocol;\n    return tslib_1.__generator(this, function (_b) {\n        if (!protocol_http_1.HttpRequest.isInstance(args.request))\n            return [2 /*return*/, next(args)];\n        request = args.request;\n        _a = (options.requestHandler.metadata || {}).handlerProtocol, handlerProtocol = _a === void 0 ? \"\" : _a;\n        //For H2 request, remove 'host' header and use ':authority' header instead\n        //reference: https://nodejs.org/dist/latest-v13.x/docs/api/errors.html#ERR_HTTP2_INVALID_CONNECTION_HEADERS\n        if (handlerProtocol.indexOf(\"h2\") >= 0 && !request.headers[\":authority\"]) {\n            delete request.headers[\"host\"];\n            request.headers[\":authority\"] = \"\";\n            //non-H2 request and 'host' header is not set, set the 'host' header to request's hostname.\n        }\n        else if (!request.headers[\"host\"]) {\n            request.headers[\"host\"] = request.hostname;\n        }\n        return [2 /*return*/, next(args)];\n    });\n}); }; }; };\nexports.hostHeaderMiddlewareOptions = {\n    name: \"hostHeaderMiddleware\",\n    step: \"build\",\n    tags: [\"HOST\"],\n};\nexports.getHostHeaderPlugin = function (options) { return ({\n    applyToStack: function (clientStack) {\n        clientStack.add(exports.hostHeaderMiddleware(options), exports.hostHeaderMiddlewareOptions);\n    },\n}); };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHdEQUFxRDtBQVVyRCxTQUFnQix1QkFBdUIsQ0FDckMsS0FBcUQ7SUFFckQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBSkQsMERBSUM7QUFFWSxRQUFBLG9CQUFvQixHQUFHLFVBQ2xDLE9BQWlDLElBQ0UsT0FBQSxVQUFDLElBQUksSUFBSyxPQUFBLFVBQU8sSUFBSTs7O1FBQ3hELElBQUksQ0FBQywyQkFBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQUUsc0JBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDO1FBQ3JELE9BQU8sR0FBSyxJQUFJLFFBQVQsQ0FBVTtRQUNqQixLQUF5QixDQUFBLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQSxnQkFBMUMsRUFBcEIsZUFBZSxtQkFBRyxFQUFFLEtBQUEsQ0FBMkM7UUFDdkUsMEVBQTBFO1FBQzFFLDJHQUEyRztRQUMzRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkMsMkZBQTJGO1NBQzVGO2FBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQzVDO1FBQ0Qsc0JBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDOztLQUNuQixFQWQ4QyxDQWM5QyxFQWRvQyxDQWNwQyxDQUFDO0FBRVcsUUFBQSwyQkFBMkIsR0FBMkM7SUFDakYsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QixJQUFJLEVBQUUsT0FBTztJQUNiLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUNmLENBQUM7QUFFVyxRQUFBLG1CQUFtQixHQUFHLFVBQUMsT0FBaUMsSUFBMEIsT0FBQSxDQUFDO0lBQzlGLFlBQVksRUFBRSxVQUFDLFdBQVc7UUFDeEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyw0QkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxtQ0FBMkIsQ0FBQyxDQUFDO0lBQzlFLENBQUM7Q0FDRixDQUFDLEVBSjZGLENBSTdGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVxdWVzdCB9IGZyb20gXCJAYXdzLXNkay9wcm90b2NvbC1odHRwXCI7XG5pbXBvcnQgeyBBYnNvbHV0ZUxvY2F0aW9uLCBCdWlsZEhhbmRsZXJPcHRpb25zLCBCdWlsZE1pZGRsZXdhcmUsIFBsdWdnYWJsZSxSZXF1ZXN0SGFuZGxlciB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RIZWFkZXJJbnB1dENvbmZpZyB7fVxuaW50ZXJmYWNlIFByZXZpb3VzbHlSZXNvbHZlZCB7XG4gIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlcjxhbnksIGFueT47XG59XG5leHBvcnQgaW50ZXJmYWNlIEhvc3RIZWFkZXJSZXNvbHZlZENvbmZpZyB7XG4gIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlcjxhbnksIGFueT47XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUhvc3RIZWFkZXJDb25maWc8VD4oXG4gIGlucHV0OiBUICYgUHJldmlvdXNseVJlc29sdmVkICYgSG9zdEhlYWRlcklucHV0Q29uZmlnXG4pOiBUICYgSG9zdEhlYWRlclJlc29sdmVkQ29uZmlnIHtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG5leHBvcnQgY29uc3QgaG9zdEhlYWRlck1pZGRsZXdhcmUgPSA8SW5wdXQgZXh0ZW5kcyBvYmplY3QsIE91dHB1dCBleHRlbmRzIG9iamVjdD4oXG4gIG9wdGlvbnM6IEhvc3RIZWFkZXJSZXNvbHZlZENvbmZpZ1xuKTogQnVpbGRNaWRkbGV3YXJlPElucHV0LCBPdXRwdXQ+ID0+IChuZXh0KSA9PiBhc3luYyAoYXJncykgPT4ge1xuICBpZiAoIUh0dHBSZXF1ZXN0LmlzSW5zdGFuY2UoYXJncy5yZXF1ZXN0KSkgcmV0dXJuIG5leHQoYXJncyk7XG4gIGNvbnN0IHsgcmVxdWVzdCB9ID0gYXJncztcbiAgY29uc3QgeyBoYW5kbGVyUHJvdG9jb2wgPSBcIlwiIH0gPSBvcHRpb25zLnJlcXVlc3RIYW5kbGVyLm1ldGFkYXRhIHx8IHt9O1xuICAvL0ZvciBIMiByZXF1ZXN0LCByZW1vdmUgJ2hvc3QnIGhlYWRlciBhbmQgdXNlICc6YXV0aG9yaXR5JyBoZWFkZXIgaW5zdGVhZFxuICAvL3JlZmVyZW5jZTogaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0LXYxMy54L2RvY3MvYXBpL2Vycm9ycy5odG1sI0VSUl9IVFRQMl9JTlZBTElEX0NPTk5FQ1RJT05fSEVBREVSU1xuICBpZiAoaGFuZGxlclByb3RvY29sLmluZGV4T2YoXCJoMlwiKSA+PSAwICYmICFyZXF1ZXN0LmhlYWRlcnNbXCI6YXV0aG9yaXR5XCJdKSB7XG4gICAgZGVsZXRlIHJlcXVlc3QuaGVhZGVyc1tcImhvc3RcIl07XG4gICAgcmVxdWVzdC5oZWFkZXJzW1wiOmF1dGhvcml0eVwiXSA9IFwiXCI7XG4gICAgLy9ub24tSDIgcmVxdWVzdCBhbmQgJ2hvc3QnIGhlYWRlciBpcyBub3Qgc2V0LCBzZXQgdGhlICdob3N0JyBoZWFkZXIgdG8gcmVxdWVzdCdzIGhvc3RuYW1lLlxuICB9IGVsc2UgaWYgKCFyZXF1ZXN0LmhlYWRlcnNbXCJob3N0XCJdKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzW1wiaG9zdFwiXSA9IHJlcXVlc3QuaG9zdG5hbWU7XG4gIH1cbiAgcmV0dXJuIG5leHQoYXJncyk7XG59O1xuXG5leHBvcnQgY29uc3QgaG9zdEhlYWRlck1pZGRsZXdhcmVPcHRpb25zOiBCdWlsZEhhbmRsZXJPcHRpb25zICYgQWJzb2x1dGVMb2NhdGlvbiA9IHtcbiAgbmFtZTogXCJob3N0SGVhZGVyTWlkZGxld2FyZVwiLFxuICBzdGVwOiBcImJ1aWxkXCIsXG4gIHRhZ3M6IFtcIkhPU1RcIl0sXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SG9zdEhlYWRlclBsdWdpbiA9IChvcHRpb25zOiBIb3N0SGVhZGVyUmVzb2x2ZWRDb25maWcpOiBQbHVnZ2FibGU8YW55LCBhbnk+ID0+ICh7XG4gIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgY2xpZW50U3RhY2suYWRkKGhvc3RIZWFkZXJNaWRkbGV3YXJlKG9wdGlvbnMpLCBob3N0SGVhZGVyTWlkZGxld2FyZU9wdGlvbnMpO1xuICB9LFxufSk7XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveRetryConfig = void 0;\nvar tslib_1 = require(\"tslib\");\nvar defaultStrategy_1 = require(\"./defaultStrategy\");\nexports.resolveRetryConfig = function (input) {\n    var _a;\n    var maxAttempts = (_a = normalizeMaxAttempts(input.maxAttempts)) !== null && _a !== void 0 ? _a : input.maxAttemptsDefaultProvider(input);\n    return tslib_1.__assign(tslib_1.__assign({}, input), { maxAttempts: maxAttempts, retryStrategy: input.retryStrategy || new defaultStrategy_1.StandardRetryStrategy(maxAttempts) });\n};\nvar normalizeMaxAttempts = function (maxAttempts) {\n    if (maxAttempts) {\n        var promisified_1 = Promise.resolve(maxAttempts.toString());\n        return function () { return promisified_1; };\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlndXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLHFEQUEwRDtBQXFCN0MsUUFBQSxrQkFBa0IsR0FBRyxVQUFJLEtBQWdEOztJQUNwRixJQUFNLFdBQVcsU0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLG1DQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxLQUFZLENBQUMsQ0FBQztJQUM5Ryw2Q0FDSyxLQUFLLEtBQ1IsV0FBVyxhQUFBLEVBQ1gsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSx1Q0FBcUIsQ0FBQyxXQUFXLENBQUMsSUFDNUU7QUFDSixDQUFDLENBQUM7QUFFRixJQUFNLG9CQUFvQixHQUFHLFVBQUMsV0FBb0I7SUFDaEQsSUFBSSxXQUFXLEVBQUU7UUFDZixJQUFNLGFBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sY0FBTSxPQUFBLGFBQVcsRUFBWCxDQUFXLENBQUM7S0FDMUI7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciwgUmV0cnlTdHJhdGVneSB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5pbXBvcnQgeyBTdGFuZGFyZFJldHJ5U3RyYXRlZ3kgfSBmcm9tIFwiLi9kZWZhdWx0U3RyYXRlZ3lcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeUlucHV0Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyByZXF1ZXN0cyB0aGF0IGVuY291bnRlciByZXRyeWFibGUgZmFpbHVyZXMgc2hvdWxkIGJlIGF0dGVtcHRlZC5cbiAgICovXG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHJldHJ5IHRoZSByZXF1ZXN0LiBVc2luZyBidWlsdC1pbiBleHBvbmVudGlhbCBiYWNrb2ZmIHN0cmF0ZWd5IGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZXRyeVN0cmF0ZWd5PzogUmV0cnlTdHJhdGVneTtcbn1cblxuaW50ZXJmYWNlIFByZXZpb3VzbHlSZXNvbHZlZCB7XG4gIG1heEF0dGVtcHRzRGVmYXVsdFByb3ZpZGVyOiAoaW5wdXQ6IGFueSkgPT4gUHJvdmlkZXI8c3RyaW5nPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlSZXNvbHZlZENvbmZpZyB7XG4gIG1heEF0dGVtcHRzOiBQcm92aWRlcjxzdHJpbmc+O1xuICByZXRyeVN0cmF0ZWd5OiBSZXRyeVN0cmF0ZWd5O1xufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJldHJ5Q29uZmlnID0gPFQ+KGlucHV0OiBUICYgUHJldmlvdXNseVJlc29sdmVkICYgUmV0cnlJbnB1dENvbmZpZyk6IFQgJiBSZXRyeVJlc29sdmVkQ29uZmlnID0+IHtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSBub3JtYWxpemVNYXhBdHRlbXB0cyhpbnB1dC5tYXhBdHRlbXB0cykgPz8gaW5wdXQubWF4QXR0ZW1wdHNEZWZhdWx0UHJvdmlkZXIoaW5wdXQgYXMgYW55KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbnB1dCxcbiAgICBtYXhBdHRlbXB0cyxcbiAgICByZXRyeVN0cmF0ZWd5OiBpbnB1dC5yZXRyeVN0cmF0ZWd5IHx8IG5ldyBTdGFuZGFyZFJldHJ5U3RyYXRlZ3kobWF4QXR0ZW1wdHMpLFxuICB9O1xufTtcblxuY29uc3Qgbm9ybWFsaXplTWF4QXR0ZW1wdHMgPSAobWF4QXR0ZW1wdHM/OiBudW1iZXIpOiBQcm92aWRlcjxzdHJpbmc+IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKG1heEF0dGVtcHRzKSB7XG4gICAgY29uc3QgcHJvbWlzaWZpZWQgPSBQcm9taXNlLnJlc29sdmUobWF4QXR0ZW1wdHMudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuICgpID0+IHByb21pc2lmaWVkO1xuICB9XG59O1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NO_RETRY_INCREMENT = exports.TIMEOUT_RETRY_COST = exports.RETRY_COST = exports.INITIAL_RETRY_TOKENS = exports.THROTTLING_RETRY_DELAY_BASE = exports.MAXIMUM_RETRY_DELAY = exports.DEFAULT_RETRY_DELAY_BASE = void 0;\n/**\n * The base number of milliseconds to use in calculating a suitable cool-down\n * time when a retryable error is encountered.\n */\nexports.DEFAULT_RETRY_DELAY_BASE = 100;\n/**\n * The maximum amount of time (in milliseconds) that will be used as a delay\n * between retry attempts.\n */\nexports.MAXIMUM_RETRY_DELAY = 20 * 1000;\n/**\n * The retry delay base (in milliseconds) to use when a throttling error is\n * encountered.\n */\nexports.THROTTLING_RETRY_DELAY_BASE = 500;\n/**\n * Initial number of retry tokens in Retry Quota\n */\nexports.INITIAL_RETRY_TOKENS = 500;\n/**\n * The total amount of retry tokens to be decremented from retry token balance.\n */\nexports.RETRY_COST = 5;\n/**\n * The total amount of retry tokens to be decremented from retry token balance\n * when a throttling error is encountered.\n */\nexports.TIMEOUT_RETRY_COST = 10;\n/**\n * The total amount of retry token to be incremented from retry token balance\n * if an SDK operation invocation succeeds without requiring a retry request.\n */\nexports.NO_RETRY_INCREMENT = 1;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDVSxRQUFBLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDVSxRQUFBLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFN0M7OztHQUdHO0FBQ1UsUUFBQSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUFFL0M7O0dBRUc7QUFDVSxRQUFBLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUV4Qzs7R0FFRztBQUNVLFFBQUEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUU1Qjs7O0dBR0c7QUFDVSxRQUFBLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUVyQzs7O0dBR0c7QUFDVSxRQUFBLGtCQUFrQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB1c2UgaW4gY2FsY3VsYXRpbmcgYSBzdWl0YWJsZSBjb29sLWRvd25cbiAqIHRpbWUgd2hlbiBhIHJldHJ5YWJsZSBlcnJvciBpcyBlbmNvdW50ZXJlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVUUllfREVMQVlfQkFTRSA9IDEwMDtcblxuLyoqXG4gKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBhIGRlbGF5XG4gKiBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICovXG5leHBvcnQgY29uc3QgTUFYSU1VTV9SRVRSWV9ERUxBWSA9IDIwICogMTAwMDtcblxuLyoqXG4gKiBUaGUgcmV0cnkgZGVsYXkgYmFzZSAoaW4gbWlsbGlzZWNvbmRzKSB0byB1c2Ugd2hlbiBhIHRocm90dGxpbmcgZXJyb3IgaXNcbiAqIGVuY291bnRlcmVkLlxuICovXG5leHBvcnQgY29uc3QgVEhST1RUTElOR19SRVRSWV9ERUxBWV9CQVNFID0gNTAwO1xuXG4vKipcbiAqIEluaXRpYWwgbnVtYmVyIG9mIHJldHJ5IHRva2VucyBpbiBSZXRyeSBRdW90YVxuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9SRVRSWV9UT0tFTlMgPSA1MDA7XG5cbi8qKlxuICogVGhlIHRvdGFsIGFtb3VudCBvZiByZXRyeSB0b2tlbnMgdG8gYmUgZGVjcmVtZW50ZWQgZnJvbSByZXRyeSB0b2tlbiBiYWxhbmNlLlxuICovXG5leHBvcnQgY29uc3QgUkVUUllfQ09TVCA9IDU7XG5cbi8qKlxuICogVGhlIHRvdGFsIGFtb3VudCBvZiByZXRyeSB0b2tlbnMgdG8gYmUgZGVjcmVtZW50ZWQgZnJvbSByZXRyeSB0b2tlbiBiYWxhbmNlXG4gKiB3aGVuIGEgdGhyb3R0bGluZyBlcnJvciBpcyBlbmNvdW50ZXJlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRJTUVPVVRfUkVUUllfQ09TVCA9IDEwO1xuXG4vKipcbiAqIFRoZSB0b3RhbCBhbW91bnQgb2YgcmV0cnkgdG9rZW4gdG8gYmUgaW5jcmVtZW50ZWQgZnJvbSByZXRyeSB0b2tlbiBiYWxhbmNlXG4gKiBpZiBhbiBTREsgb3BlcmF0aW9uIGludm9jYXRpb24gc3VjY2VlZHMgd2l0aG91dCByZXF1aXJpbmcgYSByZXRyeSByZXF1ZXN0LlxuICovXG5leHBvcnQgY29uc3QgTk9fUkVUUllfSU5DUkVNRU5UID0gMTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDefaultRetryQuota = void 0;\nvar constants_1 = require(\"./constants\");\nexports.getDefaultRetryQuota = function (initialRetryTokens) {\n    var MAX_CAPACITY = initialRetryTokens;\n    var availableCapacity = initialRetryTokens;\n    var getCapacityAmount = function (error) { return (error.name === \"TimeoutError\" ? constants_1.TIMEOUT_RETRY_COST : constants_1.RETRY_COST); };\n    var hasRetryTokens = function (error) { return getCapacityAmount(error) <= availableCapacity; };\n    var retrieveRetryTokens = function (error) {\n        if (!hasRetryTokens(error)) {\n            // retryStrategy should stop retrying, and return last error\n            throw new Error(\"No retry token available\");\n        }\n        var capacityAmount = getCapacityAmount(error);\n        availableCapacity -= capacityAmount;\n        return capacityAmount;\n    };\n    var releaseRetryTokens = function (capacityReleaseAmount) {\n        availableCapacity += capacityReleaseAmount !== null && capacityReleaseAmount !== void 0 ? capacityReleaseAmount : constants_1.NO_RETRY_INCREMENT;\n        availableCapacity = Math.min(availableCapacity, MAX_CAPACITY);\n    };\n    return Object.freeze({\n        hasRetryTokens: hasRetryTokens,\n        retrieveRetryTokens: retrieveRetryTokens,\n        releaseRetryTokens: releaseRetryTokens,\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdFJldHJ5UXVvdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVmYXVsdFJldHJ5UXVvdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUNBQWlGO0FBR3BFLFFBQUEsb0JBQW9CLEdBQUcsVUFBQyxrQkFBMEI7SUFDN0QsSUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7SUFDeEMsSUFBSSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQztJQUUzQyxJQUFNLGlCQUFpQixHQUFHLFVBQUMsS0FBZSxJQUFLLE9BQUEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsOEJBQWtCLENBQUMsQ0FBQyxDQUFDLHNCQUFVLENBQUMsRUFBakUsQ0FBaUUsQ0FBQztJQUVqSCxJQUFNLGNBQWMsR0FBRyxVQUFDLEtBQWUsSUFBSyxPQUFBLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixFQUE3QyxDQUE2QyxDQUFDO0lBRTFGLElBQU0sbUJBQW1CLEdBQUcsVUFBQyxLQUFlO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsNERBQTREO1lBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUM3QztRQUNELElBQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELGlCQUFpQixJQUFJLGNBQWMsQ0FBQztRQUNwQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixJQUFNLGtCQUFrQixHQUFHLFVBQUMscUJBQThCO1FBQ3hELGlCQUFpQixJQUFJLHFCQUFxQixhQUFyQixxQkFBcUIsY0FBckIscUJBQXFCLEdBQUksOEJBQWtCLENBQUM7UUFDakUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbkIsY0FBYyxnQkFBQTtRQUNkLG1CQUFtQixxQkFBQTtRQUNuQixrQkFBa0Isb0JBQUE7S0FDbkIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2RrRXJyb3IgfSBmcm9tIFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiO1xuXG5pbXBvcnQgeyBOT19SRVRSWV9JTkNSRU1FTlQsIFJFVFJZX0NPU1QsIFRJTUVPVVRfUkVUUllfQ09TVCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUmV0cnlRdW90YSB9IGZyb20gXCIuL2RlZmF1bHRTdHJhdGVneVwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFJldHJ5UXVvdGEgPSAoaW5pdGlhbFJldHJ5VG9rZW5zOiBudW1iZXIpOiBSZXRyeVF1b3RhID0+IHtcbiAgY29uc3QgTUFYX0NBUEFDSVRZID0gaW5pdGlhbFJldHJ5VG9rZW5zO1xuICBsZXQgYXZhaWxhYmxlQ2FwYWNpdHkgPSBpbml0aWFsUmV0cnlUb2tlbnM7XG5cbiAgY29uc3QgZ2V0Q2FwYWNpdHlBbW91bnQgPSAoZXJyb3I6IFNka0Vycm9yKSA9PiAoZXJyb3IubmFtZSA9PT0gXCJUaW1lb3V0RXJyb3JcIiA/IFRJTUVPVVRfUkVUUllfQ09TVCA6IFJFVFJZX0NPU1QpO1xuXG4gIGNvbnN0IGhhc1JldHJ5VG9rZW5zID0gKGVycm9yOiBTZGtFcnJvcikgPT4gZ2V0Q2FwYWNpdHlBbW91bnQoZXJyb3IpIDw9IGF2YWlsYWJsZUNhcGFjaXR5O1xuXG4gIGNvbnN0IHJldHJpZXZlUmV0cnlUb2tlbnMgPSAoZXJyb3I6IFNka0Vycm9yKSA9PiB7XG4gICAgaWYgKCFoYXNSZXRyeVRva2VucyhlcnJvcikpIHtcbiAgICAgIC8vIHJldHJ5U3RyYXRlZ3kgc2hvdWxkIHN0b3AgcmV0cnlpbmcsIGFuZCByZXR1cm4gbGFzdCBlcnJvclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmV0cnkgdG9rZW4gYXZhaWxhYmxlXCIpO1xuICAgIH1cbiAgICBjb25zdCBjYXBhY2l0eUFtb3VudCA9IGdldENhcGFjaXR5QW1vdW50KGVycm9yKTtcbiAgICBhdmFpbGFibGVDYXBhY2l0eSAtPSBjYXBhY2l0eUFtb3VudDtcbiAgICByZXR1cm4gY2FwYWNpdHlBbW91bnQ7XG4gIH07XG5cbiAgY29uc3QgcmVsZWFzZVJldHJ5VG9rZW5zID0gKGNhcGFjaXR5UmVsZWFzZUFtb3VudD86IG51bWJlcikgPT4ge1xuICAgIGF2YWlsYWJsZUNhcGFjaXR5ICs9IGNhcGFjaXR5UmVsZWFzZUFtb3VudCA/PyBOT19SRVRSWV9JTkNSRU1FTlQ7XG4gICAgYXZhaWxhYmxlQ2FwYWNpdHkgPSBNYXRoLm1pbihhdmFpbGFibGVDYXBhY2l0eSwgTUFYX0NBUEFDSVRZKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaGFzUmV0cnlUb2tlbnMsXG4gICAgcmV0cmlldmVSZXRyeVRva2VucyxcbiAgICByZWxlYXNlUmV0cnlUb2tlbnMsXG4gIH0pO1xufTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StandardRetryStrategy = exports.DEFAULT_RETRY_MODE = exports.DEFAULT_MAX_ATTEMPTS = void 0;\nvar tslib_1 = require(\"tslib\");\nvar protocol_http_1 = require(\"@aws-sdk/protocol-http\");\nvar service_error_classification_1 = require(\"@aws-sdk/service-error-classification\");\nvar uuid_1 = require(\"uuid\");\nvar constants_1 = require(\"./constants\");\nvar defaultRetryQuota_1 = require(\"./defaultRetryQuota\");\nvar delayDecider_1 = require(\"./delayDecider\");\nvar retryDecider_1 = require(\"./retryDecider\");\n/**\n * The default value for how many HTTP requests an SDK should make for a\n * single SDK operation invocation before giving up\n */\nexports.DEFAULT_MAX_ATTEMPTS = \"3\";\n/**\n * The default retry algorithm to use.\n */\nexports.DEFAULT_RETRY_MODE = \"standard\";\nvar StandardRetryStrategy = /** @class */ (function () {\n    function StandardRetryStrategy(maxAttemptsProvider, options) {\n        var _a, _b, _c;\n        this.maxAttemptsProvider = maxAttemptsProvider;\n        this.retryDecider = (_a = options === null || options === void 0 ? void 0 : options.retryDecider) !== null && _a !== void 0 ? _a : retryDecider_1.defaultRetryDecider;\n        this.delayDecider = (_b = options === null || options === void 0 ? void 0 : options.delayDecider) !== null && _b !== void 0 ? _b : delayDecider_1.defaultDelayDecider;\n        this.retryQuota = (_c = options === null || options === void 0 ? void 0 : options.retryQuota) !== null && _c !== void 0 ? _c : defaultRetryQuota_1.getDefaultRetryQuota(constants_1.INITIAL_RETRY_TOKENS);\n    }\n    StandardRetryStrategy.prototype.shouldRetry = function (error, attempts, maxAttempts) {\n        return attempts < maxAttempts && this.retryDecider(error) && this.retryQuota.hasRetryTokens(error);\n    };\n    StandardRetryStrategy.prototype.getMaxAttempts = function () {\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\n            var maxAttemptsStr, error_1, maxAttempts;\n            return tslib_1.__generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 3]);\n                        return [4 /*yield*/, this.maxAttemptsProvider()];\n                    case 1:\n                        maxAttemptsStr = _a.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        error_1 = _a.sent();\n                        maxAttemptsStr = exports.DEFAULT_MAX_ATTEMPTS;\n                        return [3 /*break*/, 3];\n                    case 3:\n                        maxAttempts = parseInt(maxAttemptsStr);\n                        return [2 /*return*/, Number.isNaN(maxAttempts) ? parseInt(exports.DEFAULT_MAX_ATTEMPTS) : maxAttempts];\n                }\n            });\n        });\n    };\n    StandardRetryStrategy.prototype.retry = function (next, args) {\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\n            var retryTokenAmount, attempts, totalDelay, maxAttempts, request, _loop_1, this_1, state_1;\n            return tslib_1.__generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        attempts = 0;\n                        totalDelay = 0;\n                        return [4 /*yield*/, this.getMaxAttempts()];\n                    case 1:\n                        maxAttempts = _a.sent();\n                        request = args.request;\n                        if (protocol_http_1.HttpRequest.isInstance(request)) {\n                            request.headers[\"amz-sdk-invocation-id\"] = uuid_1.v4();\n                        }\n                        _loop_1 = function () {\n                            var _a, response, output, err_1, delay_1;\n                            return tslib_1.__generator(this, function (_b) {\n                                switch (_b.label) {\n                                    case 0:\n                                        _b.trys.push([0, 2, , 5]);\n                                        if (protocol_http_1.HttpRequest.isInstance(request)) {\n                                            request.headers[\"amz-sdk-request\"] = \"attempt=\" + (attempts + 1) + \"; max=\" + maxAttempts;\n                                        }\n                                        return [4 /*yield*/, next(args)];\n                                    case 1:\n                                        _a = _b.sent(), response = _a.response, output = _a.output;\n                                        this_1.retryQuota.releaseRetryTokens(retryTokenAmount);\n                                        output.$metadata.attempts = attempts + 1;\n                                        output.$metadata.totalRetryDelay = totalDelay;\n                                        return [2 /*return*/, { value: { response: response, output: output } }];\n                                    case 2:\n                                        err_1 = _b.sent();\n                                        attempts++;\n                                        if (!this_1.shouldRetry(err_1, attempts, maxAttempts)) return [3 /*break*/, 4];\n                                        retryTokenAmount = this_1.retryQuota.retrieveRetryTokens(err_1);\n                                        delay_1 = this_1.delayDecider(service_error_classification_1.isThrottlingError(err_1) ? constants_1.THROTTLING_RETRY_DELAY_BASE : constants_1.DEFAULT_RETRY_DELAY_BASE, attempts);\n                                        totalDelay += delay_1;\n                                        return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, delay_1); })];\n                                    case 3:\n                                        _b.sent();\n                                        return [2 /*return*/, \"continue\"];\n                                    case 4:\n                                        if (!err_1.$metadata) {\n                                            err_1.$metadata = {};\n                                        }\n                                        err_1.$metadata.attempts = attempts;\n                                        err_1.$metadata.totalRetryDelay = totalDelay;\n                                        throw err_1;\n                                    case 5: return [2 /*return*/];\n                                }\n                            });\n                        };\n                        this_1 = this;\n                        _a.label = 2;\n                    case 2:\n                        if (!true) return [3 /*break*/, 4];\n                        return [5 /*yield**/, _loop_1()];\n                    case 3:\n                        state_1 = _a.sent();\n                        if (typeof state_1 === \"object\")\n                            return [2 /*return*/, state_1.value];\n                        return [3 /*break*/, 2];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    return StandardRetryStrategy;\n}());\nexports.StandardRetryStrategy = StandardRetryStrategy;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdFN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlZmF1bHRTdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsd0RBQXFEO0FBQ3JELHNGQUEwRTtBQUcxRSw2QkFBMEI7QUFFMUIseUNBQTBHO0FBQzFHLHlEQUEyRDtBQUMzRCwrQ0FBcUQ7QUFDckQsK0NBQXFEO0FBRXJEOzs7R0FHRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRXhDOztHQUVHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7QUFvRDdDO0lBS0UsK0JBQTZCLG1CQUFxQyxFQUFFLE9BQXNDOztRQUE3RSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQWtCO1FBQ2hFLElBQUksQ0FBQyxZQUFZLFNBQUcsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksbUNBQUksa0NBQW1CLENBQUM7UUFDakUsSUFBSSxDQUFDLFlBQVksU0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxtQ0FBSSxrQ0FBbUIsQ0FBQztRQUNqRSxJQUFJLENBQUMsVUFBVSxTQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxVQUFVLG1DQUFJLHdDQUFvQixDQUFDLGdDQUFvQixDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLDJDQUFXLEdBQW5CLFVBQW9CLEtBQWUsRUFBRSxRQUFnQixFQUFFLFdBQW1CO1FBQ3hFLE9BQU8sUUFBUSxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFYSw4Q0FBYyxHQUE1Qjs7Ozs7Ozt3QkFHcUIscUJBQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUE7O3dCQUFqRCxjQUFjLEdBQUcsU0FBZ0MsQ0FBQzs7Ozt3QkFFbEQsY0FBYyxHQUFHLDRCQUFvQixDQUFDOzs7d0JBRWxDLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQzdDLHNCQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyw0QkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUM7Ozs7S0FDakY7SUFFSyxxQ0FBSyxHQUFYLFVBQ0UsSUFBbUMsRUFDbkMsSUFBcUM7Ozs7Ozt3QkFHakMsUUFBUSxHQUFHLENBQUMsQ0FBQzt3QkFDYixVQUFVLEdBQUcsQ0FBQyxDQUFDO3dCQUVDLHFCQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQTs7d0JBQXpDLFdBQVcsR0FBRyxTQUEyQjt3QkFFdkMsT0FBTyxHQUFLLElBQUksUUFBVCxDQUFVO3dCQUN6QixJQUFJLDJCQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsU0FBRSxFQUFFLENBQUM7eUJBQ2pEOzs7Ozs7O3dDQUlHLElBQUksMkJBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7NENBQ25DLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxjQUFXLFFBQVEsR0FBRyxDQUFDLGVBQVMsV0FBYSxDQUFDO3lDQUNwRjt3Q0FDNEIscUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFBOzt3Q0FBdkMsS0FBdUIsU0FBZ0IsRUFBckMsUUFBUSxjQUFBLEVBQUUsTUFBTSxZQUFBO3dDQUV4QixPQUFLLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dDQUNyRCxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO3dDQUN6QyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7dUVBRXZDLEVBQUUsUUFBUSxVQUFBLEVBQUUsTUFBTSxRQUFBLEVBQUU7Ozt3Q0FFM0IsUUFBUSxFQUFFLENBQUM7NkNBQ1AsT0FBSyxXQUFXLENBQUMsS0FBZSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBeEQsd0JBQXdEO3dDQUMxRCxnQkFBZ0IsR0FBRyxPQUFLLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFHLENBQUMsQ0FBQzt3Q0FDdEQsVUFBUSxPQUFLLFlBQVksQ0FDN0IsZ0RBQWlCLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVDQUEyQixDQUFDLENBQUMsQ0FBQyxvQ0FBd0IsRUFDL0UsUUFBUSxDQUNULENBQUM7d0NBQ0YsVUFBVSxJQUFJLE9BQUssQ0FBQzt3Q0FFcEIscUJBQU0sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLElBQUssT0FBQSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQUssQ0FBQyxFQUExQixDQUEwQixDQUFDLEVBQUE7O3dDQUExRCxTQUEwRCxDQUFDOzs7d0NBSTdELElBQUksQ0FBQyxLQUFHLENBQUMsU0FBUyxFQUFFOzRDQUNsQixLQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzt5Q0FDcEI7d0NBRUQsS0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO3dDQUNsQyxLQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7d0NBQzNDLE1BQU0sS0FBRyxDQUFDOzs7Ozs7Ozs2QkFoQ1AsSUFBSTs7Ozs7Ozs7Ozs7S0FtQ1o7SUFDSCw0QkFBQztBQUFELENBQUMsQUE3RUQsSUE2RUM7QUE3RVksc0RBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tIFwiQGF3cy1zZGsvcHJvdG9jb2wtaHR0cFwiO1xuaW1wb3J0IHsgaXNUaHJvdHRsaW5nRXJyb3IgfSBmcm9tIFwiQGF3cy1zZGsvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvblwiO1xuaW1wb3J0IHsgU2RrRXJyb3IgfSBmcm9tIFwiQGF3cy1zZGsvc21pdGh5LWNsaWVudFwiO1xuaW1wb3J0IHsgRmluYWxpemVIYW5kbGVyLCBGaW5hbGl6ZUhhbmRsZXJBcmd1bWVudHMsIE1ldGFkYXRhQmVhcmVyLCBQcm92aWRlciwgUmV0cnlTdHJhdGVneSB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuaW1wb3J0IHsgdjQgfSBmcm9tIFwidXVpZFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX1JFVFJZX0RFTEFZX0JBU0UsIElOSVRJQUxfUkVUUllfVE9LRU5TLCBUSFJPVFRMSU5HX1JFVFJZX0RFTEFZX0JBU0UgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRSZXRyeVF1b3RhIH0gZnJvbSBcIi4vZGVmYXVsdFJldHJ5UXVvdGFcIjtcbmltcG9ydCB7IGRlZmF1bHREZWxheURlY2lkZXIgfSBmcm9tIFwiLi9kZWxheURlY2lkZXJcIjtcbmltcG9ydCB7IGRlZmF1bHRSZXRyeURlY2lkZXIgfSBmcm9tIFwiLi9yZXRyeURlY2lkZXJcIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgaG93IG1hbnkgSFRUUCByZXF1ZXN0cyBhbiBTREsgc2hvdWxkIG1ha2UgZm9yIGFcbiAqIHNpbmdsZSBTREsgb3BlcmF0aW9uIGludm9jYXRpb24gYmVmb3JlIGdpdmluZyB1cFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVhfQVRURU1QVFMgPSBcIjNcIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCByZXRyeSBhbGdvcml0aG0gdG8gdXNlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRVRSWV9NT0RFID0gXCJzdGFuZGFyZFwiO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBlcnJvciBpcyByZXRyeWFibGUgYmFzZWQgb24gdGhlIG51bWJlciBvZiByZXRyaWVzXG4gKiBhbHJlYWR5IGF0dGVtcHRlZCwgdGhlIEhUVFAgc3RhdHVzIGNvZGUsIGFuZCB0aGUgZXJyb3IgcmVjZWl2ZWQgKGlmIGFueSkuXG4gKlxuICogQHBhcmFtIGVycm9yICAgICAgICAgVGhlIGVycm9yIGVuY291bnRlcmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5RGVjaWRlciB7XG4gIChlcnJvcjogU2RrRXJyb3IpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgYW4gYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBkZWxheUJhc2UgVGhlIGJhc2UgZGVsYXkgKGluIG1pbGxpc2Vjb25kcykuXG4gKiBAcGFyYW0gYXR0ZW1wdHMgIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGFjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHRyaWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbGF5RGVjaWRlciB7XG4gIChkZWxheUJhc2U6IG51bWJlciwgYXR0ZW1wdHM6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdGhhdCBzcGVjaWZpZXMgdGhlIHJldHJ5IHF1b3RhIGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5UXVvdGEge1xuICAvKipcbiAgICogcmV0dXJucyB0cnVlIGlmIHJldHJ5IHRva2VucyBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIHJldHJ5IHF1b3RhIGJ1Y2tldC5cbiAgICovXG4gIGhhc1JldHJ5VG9rZW5zOiAoZXJyb3I6IFNka0Vycm9yKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRva2VuIGFtb3VudCBmcm9tIHRoZSByZXRyeSBxdW90YSBidWNrZXQuXG4gICAqIHRocm93cyBlcnJvciBpcyByZXRyeSB0b2tlbnMgYXJlIG5vdCBhdmFpbGFibGUuXG4gICAqL1xuICByZXRyaWV2ZVJldHJ5VG9rZW5zOiAoZXJyb3I6IFNka0Vycm9yKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHJlbGVhc2VzIHRva2VucyBiYWNrIHRvIHRoZSByZXRyeSBxdW90YS5cbiAgICovXG4gIHJlbGVhc2VSZXRyeVRva2VuczogKHJlbGVhc2VDYXBhY2l0eUFtb3VudD86IG51bWJlcikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBTdHJhdGVneSBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byBTdGFuZGFyZFJldHJ5U3RyYXRlZ3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZFJldHJ5U3RyYXRlZ3lPcHRpb25zIHtcbiAgcmV0cnlEZWNpZGVyPzogUmV0cnlEZWNpZGVyO1xuICBkZWxheURlY2lkZXI/OiBEZWxheURlY2lkZXI7XG4gIHJldHJ5UXVvdGE/OiBSZXRyeVF1b3RhO1xufVxuXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRSZXRyeVN0cmF0ZWd5IGltcGxlbWVudHMgUmV0cnlTdHJhdGVneSB7XG4gIHByaXZhdGUgcmV0cnlEZWNpZGVyOiBSZXRyeURlY2lkZXI7XG4gIHByaXZhdGUgZGVsYXlEZWNpZGVyOiBEZWxheURlY2lkZXI7XG4gIHByaXZhdGUgcmV0cnlRdW90YTogUmV0cnlRdW90YTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG1heEF0dGVtcHRzUHJvdmlkZXI6IFByb3ZpZGVyPHN0cmluZz4sIG9wdGlvbnM/OiBTdGFuZGFyZFJldHJ5U3RyYXRlZ3lPcHRpb25zKSB7XG4gICAgdGhpcy5yZXRyeURlY2lkZXIgPSBvcHRpb25zPy5yZXRyeURlY2lkZXIgPz8gZGVmYXVsdFJldHJ5RGVjaWRlcjtcbiAgICB0aGlzLmRlbGF5RGVjaWRlciA9IG9wdGlvbnM/LmRlbGF5RGVjaWRlciA/PyBkZWZhdWx0RGVsYXlEZWNpZGVyO1xuICAgIHRoaXMucmV0cnlRdW90YSA9IG9wdGlvbnM/LnJldHJ5UXVvdGEgPz8gZ2V0RGVmYXVsdFJldHJ5UXVvdGEoSU5JVElBTF9SRVRSWV9UT0tFTlMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRSZXRyeShlcnJvcjogU2RrRXJyb3IsIGF0dGVtcHRzOiBudW1iZXIsIG1heEF0dGVtcHRzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cyAmJiB0aGlzLnJldHJ5RGVjaWRlcihlcnJvcikgJiYgdGhpcy5yZXRyeVF1b3RhLmhhc1JldHJ5VG9rZW5zKGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWF4QXR0ZW1wdHMoKSB7XG4gICAgbGV0IG1heEF0dGVtcHRzU3RyOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIG1heEF0dGVtcHRzU3RyID0gYXdhaXQgdGhpcy5tYXhBdHRlbXB0c1Byb3ZpZGVyKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG1heEF0dGVtcHRzU3RyID0gREVGQVVMVF9NQVhfQVRURU1QVFM7XG4gICAgfVxuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gcGFyc2VJbnQobWF4QXR0ZW1wdHNTdHIpO1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obWF4QXR0ZW1wdHMpID8gcGFyc2VJbnQoREVGQVVMVF9NQVhfQVRURU1QVFMpIDogbWF4QXR0ZW1wdHM7XG4gIH1cblxuICBhc3luYyByZXRyeTxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3VwdXQgZXh0ZW5kcyBNZXRhZGF0YUJlYXJlcj4oXG4gICAgbmV4dDogRmluYWxpemVIYW5kbGVyPElucHV0LCBPdXB1dD4sXG4gICAgYXJnczogRmluYWxpemVIYW5kbGVyQXJndW1lbnRzPElucHV0PlxuICApIHtcbiAgICBsZXQgcmV0cnlUb2tlbkFtb3VudDtcbiAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgIGxldCB0b3RhbERlbGF5ID0gMDtcblxuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gYXdhaXQgdGhpcy5nZXRNYXhBdHRlbXB0cygpO1xuXG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGlmIChIdHRwUmVxdWVzdC5pc0luc3RhbmNlKHJlcXVlc3QpKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNbXCJhbXotc2RrLWludm9jYXRpb24taWRcIl0gPSB2NCgpO1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkge1xuICAgICAgICAgIHJlcXVlc3QuaGVhZGVyc1tcImFtei1zZGstcmVxdWVzdFwiXSA9IGBhdHRlbXB0PSR7YXR0ZW1wdHMgKyAxfTsgbWF4PSR7bWF4QXR0ZW1wdHN9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlLCBvdXRwdXQgfSA9IGF3YWl0IG5leHQoYXJncyk7XG5cbiAgICAgICAgdGhpcy5yZXRyeVF1b3RhLnJlbGVhc2VSZXRyeVRva2VucyhyZXRyeVRva2VuQW1vdW50KTtcbiAgICAgICAgb3V0cHV0LiRtZXRhZGF0YS5hdHRlbXB0cyA9IGF0dGVtcHRzICsgMTtcbiAgICAgICAgb3V0cHV0LiRtZXRhZGF0YS50b3RhbFJldHJ5RGVsYXkgPSB0b3RhbERlbGF5O1xuXG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlLCBvdXRwdXQgfTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRSZXRyeShlcnIgYXMgU2RrRXJyb3IsIGF0dGVtcHRzLCBtYXhBdHRlbXB0cykpIHtcbiAgICAgICAgICByZXRyeVRva2VuQW1vdW50ID0gdGhpcy5yZXRyeVF1b3RhLnJldHJpZXZlUmV0cnlUb2tlbnMoZXJyKTtcbiAgICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuZGVsYXlEZWNpZGVyKFxuICAgICAgICAgICAgaXNUaHJvdHRsaW5nRXJyb3IoZXJyKSA/IFRIUk9UVExJTkdfUkVUUllfREVMQVlfQkFTRSA6IERFRkFVTFRfUkVUUllfREVMQVlfQkFTRSxcbiAgICAgICAgICAgIGF0dGVtcHRzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0b3RhbERlbGF5ICs9IGRlbGF5O1xuXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZXJyLiRtZXRhZGF0YSkge1xuICAgICAgICAgIGVyci4kbWV0YWRhdGEgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVyci4kbWV0YWRhdGEuYXR0ZW1wdHMgPSBhdHRlbXB0cztcbiAgICAgICAgZXJyLiRtZXRhZGF0YS50b3RhbFJldHJ5RGVsYXkgPSB0b3RhbERlbGF5O1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultDelayDecider = void 0;\nvar constants_1 = require(\"./constants\");\n/**\n * Calculate a capped, fully-jittered exponential backoff time.\n */\nexports.defaultDelayDecider = function (delayBase, attempts) {\n    return Math.floor(Math.min(constants_1.MAXIMUM_RETRY_DELAY, Math.random() * Math.pow(2, attempts) * delayBase));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXlEZWNpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlbGF5RGVjaWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBa0Q7QUFFbEQ7O0dBRUc7QUFDVSxRQUFBLG1CQUFtQixHQUFHLFVBQUMsU0FBaUIsRUFBRSxRQUFnQjtJQUNyRSxPQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQywrQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsU0FBQSxDQUFDLEVBQUksUUFBUSxDQUFBLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFBcEYsQ0FBb0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BWElNVU1fUkVUUllfREVMQVkgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBDYWxjdWxhdGUgYSBjYXBwZWQsIGZ1bGx5LWppdHRlcmVkIGV4cG9uZW50aWFsIGJhY2tvZmYgdGltZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHREZWxheURlY2lkZXIgPSAoZGVsYXlCYXNlOiBudW1iZXIsIGF0dGVtcHRzOiBudW1iZXIpID0+XG4gIE1hdGguZmxvb3IoTWF0aC5taW4oTUFYSU1VTV9SRVRSWV9ERUxBWSwgTWF0aC5yYW5kb20oKSAqIDIgKiogYXR0ZW1wdHMgKiBkZWxheUJhc2UpKTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./retryMiddleware\"), exports);\ntslib_1.__exportStar(require(\"./defaultStrategy\"), exports);\ntslib_1.__exportStar(require(\"./configurations\"), exports);\ntslib_1.__exportStar(require(\"./delayDecider\"), exports);\ntslib_1.__exportStar(require(\"./retryDecider\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNERBQWtDO0FBQ2xDLDREQUFrQztBQUNsQywyREFBaUM7QUFDakMseURBQStCO0FBQy9CLHlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3JldHJ5TWlkZGxld2FyZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVmYXVsdFN0cmF0ZWd5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25maWd1cmF0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVsYXlEZWNpZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXRyeURlY2lkZXJcIjtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultRetryDecider = void 0;\nvar service_error_classification_1 = require(\"@aws-sdk/service-error-classification\");\nexports.defaultRetryDecider = function (error) {\n    if (!error) {\n        return false;\n    }\n    return service_error_classification_1.isRetryableByTrait(error) || service_error_classification_1.isClockSkewError(error) || service_error_classification_1.isThrottlingError(error) || service_error_classification_1.isTransientError(error);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnlEZWNpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JldHJ5RGVjaWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzRkFLK0M7QUFHbEMsUUFBQSxtQkFBbUIsR0FBRyxVQUFDLEtBQWU7SUFDakQsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxPQUFPLGlEQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLCtDQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLGdEQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLCtDQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGlzQ2xvY2tTa2V3RXJyb3IsXG4gIGlzUmV0cnlhYmxlQnlUcmFpdCxcbiAgaXNUaHJvdHRsaW5nRXJyb3IsXG4gIGlzVHJhbnNpZW50RXJyb3IsXG59IGZyb20gXCJAYXdzLXNkay9zZXJ2aWNlLWVycm9yLWNsYXNzaWZpY2F0aW9uXCI7XG5pbXBvcnQgeyBTZGtFcnJvciB9IGZyb20gXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCI7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmV0cnlEZWNpZGVyID0gKGVycm9yOiBTZGtFcnJvcikgPT4ge1xuICBpZiAoIWVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzUmV0cnlhYmxlQnlUcmFpdChlcnJvcikgfHwgaXNDbG9ja1NrZXdFcnJvcihlcnJvcikgfHwgaXNUaHJvdHRsaW5nRXJyb3IoZXJyb3IpIHx8IGlzVHJhbnNpZW50RXJyb3IoZXJyb3IpO1xufTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRetryPlugin = exports.retryMiddlewareOptions = exports.retryMiddleware = void 0;\nvar tslib_1 = require(\"tslib\");\nexports.retryMiddleware = function (options) { return function (next) { return function (args) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {\n    return [2 /*return*/, options.retryStrategy.retry(next, args)];\n}); }); }; }; };\nexports.retryMiddlewareOptions = {\n    name: \"retryMiddleware\",\n    tags: [\"RETRY\"],\n    step: \"finalizeRequest\",\n    priority: \"high\",\n};\nexports.getRetryPlugin = function (options) { return ({\n    applyToStack: function (clientStack) {\n        clientStack.add(exports.retryMiddleware(options), exports.retryMiddlewareOptions);\n    },\n}); };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnlNaWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JldHJ5TWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBWWEsUUFBQSxlQUFlLEdBQUcsVUFBQyxPQUE0QixJQUFLLE9BQUEsVUFDL0QsSUFBa0MsSUFDRCxPQUFBLFVBQ2pDLElBQW1DO0lBQ1Esc0JBQUEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFBO1NBQUEsRUFGakQsQ0FFaUQsRUFKbkIsQ0FJbUIsQ0FBQztBQUV4RSxRQUFBLHNCQUFzQixHQUFxRDtJQUN0RixJQUFJLEVBQUUsaUJBQWlCO0lBQ3ZCLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUNmLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsUUFBUSxFQUFFLE1BQU07Q0FDakIsQ0FBQztBQUVXLFFBQUEsY0FBYyxHQUFHLFVBQUMsT0FBNEIsSUFBMEIsT0FBQSxDQUFDO0lBQ3BGLFlBQVksRUFBRSxVQUFDLFdBQVc7UUFDeEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLDhCQUFzQixDQUFDLENBQUM7SUFDcEUsQ0FBQztDQUNGLENBQUMsRUFKbUYsQ0FJbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFic29sdXRlTG9jYXRpb24sXG4gIEZpbmFsaXplSGFuZGxlcixcbiAgRmluYWxpemVIYW5kbGVyQXJndW1lbnRzLFxuICBGaW5hbGl6ZUhhbmRsZXJPdXRwdXQsXG4gIEZpbmFsaXplUmVxdWVzdEhhbmRsZXJPcHRpb25zLFxuICBNZXRhZGF0YUJlYXJlcixcbiAgUGx1Z2dhYmxlLFxufSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuaW1wb3J0IHsgUmV0cnlSZXNvbHZlZENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25zXCI7XG5cbmV4cG9ydCBjb25zdCByZXRyeU1pZGRsZXdhcmUgPSAob3B0aW9uczogUmV0cnlSZXNvbHZlZENvbmZpZykgPT4gPE91dHB1dCBleHRlbmRzIE1ldGFkYXRhQmVhcmVyID0gTWV0YWRhdGFCZWFyZXI+KFxuICBuZXh0OiBGaW5hbGl6ZUhhbmRsZXI8YW55LCBPdXRwdXQ+XG4pOiBGaW5hbGl6ZUhhbmRsZXI8YW55LCBPdXRwdXQ+ID0+IGFzeW5jIChcbiAgYXJnczogRmluYWxpemVIYW5kbGVyQXJndW1lbnRzPGFueT5cbik6IFByb21pc2U8RmluYWxpemVIYW5kbGVyT3V0cHV0PE91dHB1dD4+ID0+IG9wdGlvbnMucmV0cnlTdHJhdGVneS5yZXRyeShuZXh0LCBhcmdzKTtcblxuZXhwb3J0IGNvbnN0IHJldHJ5TWlkZGxld2FyZU9wdGlvbnM6IEZpbmFsaXplUmVxdWVzdEhhbmRsZXJPcHRpb25zICYgQWJzb2x1dGVMb2NhdGlvbiA9IHtcbiAgbmFtZTogXCJyZXRyeU1pZGRsZXdhcmVcIixcbiAgdGFnczogW1wiUkVUUllcIl0sXG4gIHN0ZXA6IFwiZmluYWxpemVSZXF1ZXN0XCIsXG4gIHByaW9yaXR5OiBcImhpZ2hcIixcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXRyeVBsdWdpbiA9IChvcHRpb25zOiBSZXRyeVJlc29sdmVkQ29uZmlnKTogUGx1Z2dhYmxlPGFueSwgYW55PiA9PiAoe1xuICBhcHBseVRvU3RhY2s6IChjbGllbnRTdGFjaykgPT4ge1xuICAgIGNsaWVudFN0YWNrLmFkZChyZXRyeU1pZGRsZXdhcmUob3B0aW9ucyksIHJldHJ5TWlkZGxld2FyZU9wdGlvbnMpO1xuICB9LFxufSk7XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deserializerMiddleware = void 0;\nvar tslib_1 = require(\"tslib\");\nfunction deserializerMiddleware(options, deserializer) {\n    var _this = this;\n    return function (next) { return function (args) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n        var response, parsed;\n        return tslib_1.__generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, next(args)];\n                case 1:\n                    response = (_a.sent()).response;\n                    return [4 /*yield*/, deserializer(response, options)];\n                case 2:\n                    parsed = _a.sent();\n                    return [2 /*return*/, {\n                            response: response,\n                            output: parsed,\n                        }];\n            }\n        });\n    }); }; };\n}\nexports.deserializerMiddleware = deserializerMiddleware;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzZXJpYWxpemVyTWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXNlcmlhbGl6ZXJNaWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFRQSxTQUFnQixzQkFBc0IsQ0FDcEMsT0FBcUIsRUFDckIsWUFBMEQ7SUFGNUQsaUJBY0M7SUFWQyxPQUFPLFVBQUMsSUFBdUMsSUFBd0MsT0FBQSxVQUNyRixJQUF3Qzs7Ozt3QkFFbkIscUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFBOztvQkFBN0IsUUFBUSxHQUFLLENBQUEsU0FBZ0IsQ0FBQSxTQUFyQjtvQkFDRCxxQkFBTSxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFBOztvQkFBOUMsTUFBTSxHQUFHLFNBQXFDO29CQUNwRCxzQkFBTzs0QkFDTCxRQUFRLFVBQUE7NEJBQ1IsTUFBTSxFQUFFLE1BQWdCO3lCQUN6QixFQUFDOzs7U0FDSCxFQVRzRixDQVN0RixDQUFDO0FBQ0osQ0FBQztBQWRELHdEQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVzZXJpYWxpemVIYW5kbGVyLFxuICBEZXNlcmlhbGl6ZUhhbmRsZXJBcmd1bWVudHMsXG4gIERlc2VyaWFsaXplSGFuZGxlck91dHB1dCxcbiAgRGVzZXJpYWxpemVNaWRkbGV3YXJlLFxuICBSZXNwb25zZURlc2VyaWFsaXplcixcbn0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlPElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3QsIFJ1bnRpbWVVdGlscyA9IGFueT4oXG4gIG9wdGlvbnM6IFJ1bnRpbWVVdGlscyxcbiAgZGVzZXJpYWxpemVyOiBSZXNwb25zZURlc2VyaWFsaXplcjxhbnksIGFueSwgUnVudGltZVV0aWxzPlxuKTogRGVzZXJpYWxpemVNaWRkbGV3YXJlPElucHV0LCBPdXRwdXQ+IHtcbiAgcmV0dXJuIChuZXh0OiBEZXNlcmlhbGl6ZUhhbmRsZXI8SW5wdXQsIE91dHB1dD4pOiBEZXNlcmlhbGl6ZUhhbmRsZXI8SW5wdXQsIE91dHB1dD4gPT4gYXN5bmMgKFxuICAgIGFyZ3M6IERlc2VyaWFsaXplSGFuZGxlckFyZ3VtZW50czxJbnB1dD5cbiAgKTogUHJvbWlzZTxEZXNlcmlhbGl6ZUhhbmRsZXJPdXRwdXQ8T3V0cHV0Pj4gPT4ge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGF3YWl0IG5leHQoYXJncyk7XG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgZGVzZXJpYWxpemVyKHJlc3BvbnNlLCBvcHRpb25zKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzcG9uc2UsXG4gICAgICBvdXRwdXQ6IHBhcnNlZCBhcyBPdXRwdXQsXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./deserializerMiddleware\"), exports);\ntslib_1.__exportStar(require(\"./serializerMiddleware\"), exports);\ntslib_1.__exportStar(require(\"./serdePlugin\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUVBQXlDO0FBQ3pDLGlFQUF1QztBQUN2Qyx3REFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9kZXNlcmlhbGl6ZXJNaWRkbGV3YXJlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXJpYWxpemVyTWlkZGxld2FyZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2VyZGVQbHVnaW5cIjtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSerdePlugin = exports.serializerMiddlewareOption = exports.deserializerMiddlewareOption = void 0;\nvar deserializerMiddleware_1 = require(\"./deserializerMiddleware\");\nvar serializerMiddleware_1 = require(\"./serializerMiddleware\");\nexports.deserializerMiddlewareOption = {\n    name: \"deserializerMiddleware\",\n    step: \"deserialize\",\n    tags: [\"DESERIALIZER\"],\n};\nexports.serializerMiddlewareOption = {\n    name: \"serializerMiddleware\",\n    step: \"serialize\",\n    tags: [\"SERIALIZER\"],\n};\nfunction getSerdePlugin(config, serializer, deserializer) {\n    return {\n        applyToStack: function (commandStack) {\n            commandStack.add(deserializerMiddleware_1.deserializerMiddleware(config, deserializer), exports.deserializerMiddlewareOption);\n            commandStack.add(serializerMiddleware_1.serializerMiddleware(config, serializer), exports.serializerMiddlewareOption);\n        },\n    };\n}\nexports.getSerdePlugin = getSerdePlugin;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyZGVQbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyZGVQbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsbUVBQWtFO0FBQ2xFLCtEQUE4RDtBQUVqRCxRQUFBLDRCQUE0QixHQUE4QjtJQUNyRSxJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLElBQUksRUFBRSxhQUFhO0lBQ25CLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQztDQUN2QixDQUFDO0FBRVcsUUFBQSwwQkFBMEIsR0FBNEI7SUFDakUsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QixJQUFJLEVBQUUsV0FBVztJQUNqQixJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUM7Q0FDckIsQ0FBQztBQUVGLFNBQWdCLGNBQWMsQ0FLNUIsTUFBb0IsRUFDcEIsVUFBZ0QsRUFDaEQsWUFBaUU7SUFFakUsT0FBTztRQUNMLFlBQVksRUFBRSxVQUFDLFlBQW9EO1lBQ2pFLFlBQVksQ0FBQyxHQUFHLENBQUMsK0NBQXNCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLG9DQUE0QixDQUFDLENBQUM7WUFDN0YsWUFBWSxDQUFDLEdBQUcsQ0FBQywyQ0FBb0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsa0NBQTBCLENBQUMsQ0FBQztRQUN6RixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFmRCx3Q0FlQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlc2VyaWFsaXplSGFuZGxlck9wdGlvbnMsXG4gIEVuZHBvaW50QmVhcmVyLFxuICBNZXRhZGF0YUJlYXJlcixcbiAgTWlkZGxld2FyZVN0YWNrLFxuICBQbHVnZ2FibGUsXG4gIFJlcXVlc3RTZXJpYWxpemVyLFxuICBSZXNwb25zZURlc2VyaWFsaXplcixcbiAgU2VyaWFsaXplSGFuZGxlck9wdGlvbnMsXG59IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5pbXBvcnQgeyBkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlIH0gZnJvbSBcIi4vZGVzZXJpYWxpemVyTWlkZGxld2FyZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplck1pZGRsZXdhcmUgfSBmcm9tIFwiLi9zZXJpYWxpemVyTWlkZGxld2FyZVwiO1xuXG5leHBvcnQgY29uc3QgZGVzZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbjogRGVzZXJpYWxpemVIYW5kbGVyT3B0aW9ucyA9IHtcbiAgbmFtZTogXCJkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlXCIsXG4gIHN0ZXA6IFwiZGVzZXJpYWxpemVcIixcbiAgdGFnczogW1wiREVTRVJJQUxJWkVSXCJdLFxufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZXJNaWRkbGV3YXJlT3B0aW9uOiBTZXJpYWxpemVIYW5kbGVyT3B0aW9ucyA9IHtcbiAgbmFtZTogXCJzZXJpYWxpemVyTWlkZGxld2FyZVwiLFxuICBzdGVwOiBcInNlcmlhbGl6ZVwiLFxuICB0YWdzOiBbXCJTRVJJQUxJWkVSXCJdLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmRlUGx1Z2luPFxuICBJbnB1dFR5cGUgZXh0ZW5kcyBvYmplY3QsXG4gIFNlckRlQ29udGV4dCBleHRlbmRzIEVuZHBvaW50QmVhcmVyLFxuICBPdXRwdXRUeXBlIGV4dGVuZHMgTWV0YWRhdGFCZWFyZXJcbj4oXG4gIGNvbmZpZzogU2VyRGVDb250ZXh0LFxuICBzZXJpYWxpemVyOiBSZXF1ZXN0U2VyaWFsaXplcjxhbnksIFNlckRlQ29udGV4dD4sXG4gIGRlc2VyaWFsaXplcjogUmVzcG9uc2VEZXNlcmlhbGl6ZXI8T3V0cHV0VHlwZSwgYW55LCBTZXJEZUNvbnRleHQ+XG4pOiBQbHVnZ2FibGU8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPiB7XG4gIHJldHVybiB7XG4gICAgYXBwbHlUb1N0YWNrOiAoY29tbWFuZFN0YWNrOiBNaWRkbGV3YXJlU3RhY2s8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPikgPT4ge1xuICAgICAgY29tbWFuZFN0YWNrLmFkZChkZXNlcmlhbGl6ZXJNaWRkbGV3YXJlKGNvbmZpZywgZGVzZXJpYWxpemVyKSwgZGVzZXJpYWxpemVyTWlkZGxld2FyZU9wdGlvbik7XG4gICAgICBjb21tYW5kU3RhY2suYWRkKHNlcmlhbGl6ZXJNaWRkbGV3YXJlKGNvbmZpZywgc2VyaWFsaXplciksIHNlcmlhbGl6ZXJNaWRkbGV3YXJlT3B0aW9uKTtcbiAgICB9LFxuICB9O1xufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.serializerMiddleware = void 0;\nvar tslib_1 = require(\"tslib\");\nfunction serializerMiddleware(options, serializer) {\n    var _this = this;\n    return function (next) { return function (args) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n        var request;\n        return tslib_1.__generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, serializer(args.input, options)];\n                case 1:\n                    request = _a.sent();\n                    return [2 /*return*/, next(tslib_1.__assign(tslib_1.__assign({}, args), { request: request }))];\n            }\n        });\n    }); }; };\n}\nexports.serializerMiddleware = serializerMiddleware;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplck1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXplck1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVNBLFNBQWdCLG9CQUFvQixDQUNsQyxPQUFxQixFQUNyQixVQUFnRDtJQUZsRCxpQkFhQztJQVRDLE9BQU8sVUFBQyxJQUFxQyxJQUFzQyxPQUFBLFVBQ2pGLElBQXNDOzs7O3dCQUV0QixxQkFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBQTs7b0JBQS9DLE9BQU8sR0FBRyxTQUFxQztvQkFDckQsc0JBQU8sSUFBSSx1Q0FDTixJQUFJLEtBQ1AsT0FBTyxTQUFBLElBQ1AsRUFBQzs7O1NBQ0osRUFSa0YsQ0FRbEYsQ0FBQztBQUNKLENBQUM7QUFiRCxvREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVuZHBvaW50QmVhcmVyLFxuICBSZXF1ZXN0U2VyaWFsaXplcixcbiAgU2VyaWFsaXplSGFuZGxlcixcbiAgU2VyaWFsaXplSGFuZGxlckFyZ3VtZW50cyxcbiAgU2VyaWFsaXplSGFuZGxlck91dHB1dCxcbiAgU2VyaWFsaXplTWlkZGxld2FyZSxcbn0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVyTWlkZGxld2FyZTxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3V0cHV0IGV4dGVuZHMgb2JqZWN0LCBSdW50aW1lVXRpbHMgZXh0ZW5kcyBFbmRwb2ludEJlYXJlcj4oXG4gIG9wdGlvbnM6IFJ1bnRpbWVVdGlscyxcbiAgc2VyaWFsaXplcjogUmVxdWVzdFNlcmlhbGl6ZXI8YW55LCBSdW50aW1lVXRpbHM+XG4pOiBTZXJpYWxpemVNaWRkbGV3YXJlPElucHV0LCBPdXRwdXQ+IHtcbiAgcmV0dXJuIChuZXh0OiBTZXJpYWxpemVIYW5kbGVyPElucHV0LCBPdXRwdXQ+KTogU2VyaWFsaXplSGFuZGxlcjxJbnB1dCwgT3V0cHV0PiA9PiBhc3luYyAoXG4gICAgYXJnczogU2VyaWFsaXplSGFuZGxlckFyZ3VtZW50czxJbnB1dD5cbiAgKTogUHJvbWlzZTxTZXJpYWxpemVIYW5kbGVyT3V0cHV0PE91dHB1dD4+ID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgc2VyaWFsaXplcihhcmdzLmlucHV0LCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV4dCh7XG4gICAgICAuLi5hcmdzLFxuICAgICAgcmVxdWVzdCxcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveAwsAuthConfig = void 0;\nvar tslib_1 = require(\"tslib\");\nvar signature_v4_1 = require(\"@aws-sdk/signature-v4\");\nfunction resolveAwsAuthConfig(input) {\n    var _this = this;\n    var credentials = input.credentials || input.credentialDefaultProvider(input);\n    var normalizedCreds = normalizeProvider(credentials);\n    var _a = input.signingEscapePath, signingEscapePath = _a === void 0 ? true : _a, _b = input.systemClockOffset, systemClockOffset = _b === void 0 ? input.systemClockOffset || 0 : _b, sha256 = input.sha256;\n    var signer;\n    if (input.signer) {\n        //if signer is supplied by user, normalize it to a function returning a promise for signer.\n        signer = normalizeProvider(input.signer);\n    }\n    else {\n        //construct a provider inferring signing from region.\n        signer = function () {\n            return normalizeProvider(input.region)()\n                .then(function (region) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, input.regionInfoProvider(region)];\n                    case 1: return [2 /*return*/, [(_a.sent()) || {}, region]];\n                }\n            }); }); })\n                .then(function (_a) {\n                var _b = tslib_1.__read(_a, 2), regionInfo = _b[0], region = _b[1];\n                var _c = regionInfo.signingRegion, signingRegion = _c === void 0 ? input.signingRegion : _c, _d = regionInfo.signingService, signingService = _d === void 0 ? input.signingName : _d;\n                //update client's singing region and signing service config if they are resolved.\n                //signing region resolving order: user supplied signingRegion -> endpoints.json inferred region -> client region\n                input.signingRegion = input.signingRegion || signingRegion || region;\n                input.signingName = input.signingName || signingService;\n                return new signature_v4_1.SignatureV4({\n                    credentials: normalizedCreds,\n                    region: input.signingRegion,\n                    service: input.signingName,\n                    sha256: sha256,\n                    uriEscapePath: signingEscapePath,\n                });\n            });\n        };\n    }\n    return tslib_1.__assign(tslib_1.__assign({}, input), { systemClockOffset: systemClockOffset,\n        signingEscapePath: signingEscapePath, credentials: normalizedCreds, signer: signer });\n}\nexports.resolveAwsAuthConfig = resolveAwsAuthConfig;\nfunction normalizeProvider(input) {\n    if (typeof input === \"object\") {\n        var promisified_1 = Promise.resolve(input);\n        return function () { return promisified_1; };\n    }\n    return input;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlndXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHNEQUFvRDtBQTJDcEQsU0FBZ0Isb0JBQW9CLENBQUksS0FBa0Q7SUFBMUYsaUJBcUNDO0lBcENDLElBQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLEtBQVksQ0FBQyxDQUFDO0lBQ3ZGLElBQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLElBQUEsS0FBdUYsS0FBSyxrQkFBcEUsRUFBeEIsaUJBQWlCLG1CQUFHLElBQUksS0FBQSxFQUFFLEtBQTZELEtBQUssa0JBQWxCLEVBQWhELGlCQUFpQixtQkFBRyxLQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFBLEVBQUUsTUFBTSxHQUFLLEtBQUssT0FBVixDQUFXO0lBQ3JHLElBQUksTUFBK0IsQ0FBQztJQUNwQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDaEIsMkZBQTJGO1FBQzNGLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUM7U0FBTTtRQUNMLHFEQUFxRDtRQUNyRCxNQUFNLEdBQUc7WUFDUCxPQUFBLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtpQkFDOUIsSUFBSSxDQUFDLFVBQU8sTUFBTTs7NEJBQU8scUJBQU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzRCQUF4QyxzQkFBQSxDQUFDLENBQUMsU0FBc0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQXlCLEVBQUE7O3FCQUFBLENBQUM7aUJBQ3hHLElBQUksQ0FBQyxVQUFDLEVBQW9CO29CQUFwQixLQUFBLHFCQUFvQixFQUFuQixVQUFVLFFBQUEsRUFBRSxNQUFNLFFBQUE7Z0JBQ2hCLElBQUEsS0FBNEUsVUFBVSxjQUFuRCxFQUFuQyxhQUFhLG1CQUFHLEtBQUssQ0FBQyxhQUFhLEtBQUEsRUFBRSxLQUF1QyxVQUFVLGVBQWYsRUFBbEMsY0FBYyxtQkFBRyxLQUFLLENBQUMsV0FBVyxLQUFBLENBQWdCO2dCQUMvRixpRkFBaUY7Z0JBQ2pGLGdIQUFnSDtnQkFDaEgsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxJQUFJLGFBQWEsSUFBSSxNQUFNLENBQUM7Z0JBQ3JFLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxjQUFjLENBQUM7Z0JBRXhELE9BQU8sSUFBSSwwQkFBVyxDQUFDO29CQUNyQixXQUFXLEVBQUUsZUFBZTtvQkFDNUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUFhO29CQUMzQixPQUFPLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzFCLE1BQU0sUUFBQTtvQkFDTixhQUFhLEVBQUUsaUJBQWlCO2lCQUNqQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7UUFoQkosQ0FnQkksQ0FBQztLQUNSO0lBRUQsNkNBQ0ssS0FBSyxLQUNSLGlCQUFpQixtQkFBQTtRQUNqQixpQkFBaUIsbUJBQUEsRUFDakIsV0FBVyxFQUFFLGVBQWUsRUFDNUIsTUFBTSxRQUFBLElBQ047QUFDSixDQUFDO0FBckNELG9EQXFDQztBQUVELFNBQVMsaUJBQWlCLENBQUksS0FBc0I7SUFDbEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsSUFBTSxhQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxPQUFPLGNBQU0sT0FBQSxhQUFXLEVBQVgsQ0FBVyxDQUFDO0tBQzFCO0lBQ0QsT0FBTyxLQUFvQixDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYXR1cmVWNCB9IGZyb20gXCJAYXdzLXNkay9zaWduYXR1cmUtdjRcIjtcbmltcG9ydCB7IENyZWRlbnRpYWxzLCBIYXNoQ29uc3RydWN0b3IsIFByb3ZpZGVyLCBSZWdpb25JbmZvLCBSZWdpb25JbmZvUHJvdmlkZXIsIFJlcXVlc3RTaWduZXIgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBd3NBdXRoSW5wdXRDb25maWcge1xuICAvKipcbiAgICogVGhlIGNyZWRlbnRpYWxzIHVzZWQgdG8gc2lnbiByZXF1ZXN0cy5cbiAgICovXG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMgfCBQcm92aWRlcjxDcmVkZW50aWFscz47XG5cbiAgLyoqXG4gICAqIFRoZSBzaWduZXIgdG8gdXNlIHdoZW4gc2lnbmluZyByZXF1ZXN0cy5cbiAgICovXG4gIHNpZ25lcj86IFJlcXVlc3RTaWduZXIgfCBQcm92aWRlcjxSZXF1ZXN0U2lnbmVyPjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlc2NhcGUgcmVxdWVzdCBwYXRoIHdoZW4gc2lnbmluZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHNpZ25pbmdFc2NhcGVQYXRoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gb2Zmc2V0IHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBhcHBseSB0byBhbGwgc2lnbmluZyB0aW1lcy5cbiAgICovXG4gIHN5c3RlbUNsb2NrT2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHdoZXJlIHlvdSB3YW50IHRvIHNpZ24geW91ciByZXF1ZXN0IGFnYWluc3QuIFRoaXNcbiAgICogY2FuIGJlIGRpZmZlcmVudCB0byB0aGUgcmVnaW9uIGluIHRoZSBlbmRwb2ludC5cbiAgICovXG4gIHNpZ25pbmdSZWdpb24/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgUHJldmlvdXNseVJlc29sdmVkIHtcbiAgY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcjogKGlucHV0OiBhbnkpID0+IFByb3ZpZGVyPENyZWRlbnRpYWxzPjtcbiAgcmVnaW9uOiBzdHJpbmcgfCBQcm92aWRlcjxzdHJpbmc+O1xuICByZWdpb25JbmZvUHJvdmlkZXI6IFJlZ2lvbkluZm9Qcm92aWRlcjtcbiAgc2lnbmluZ05hbWU6IHN0cmluZztcbiAgc2hhMjU2OiBIYXNoQ29uc3RydWN0b3I7XG59XG5leHBvcnQgaW50ZXJmYWNlIEF3c0F1dGhSZXNvbHZlZENvbmZpZyB7XG4gIGNyZWRlbnRpYWxzOiBQcm92aWRlcjxDcmVkZW50aWFscz47XG4gIHNpZ25lcjogUHJvdmlkZXI8UmVxdWVzdFNpZ25lcj47XG4gIHNpZ25pbmdFc2NhcGVQYXRoOiBib29sZWFuO1xuICBzeXN0ZW1DbG9ja09mZnNldDogbnVtYmVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBd3NBdXRoQ29uZmlnPFQ+KGlucHV0OiBUICYgQXdzQXV0aElucHV0Q29uZmlnICYgUHJldmlvdXNseVJlc29sdmVkKTogVCAmIEF3c0F1dGhSZXNvbHZlZENvbmZpZyB7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHMgfHwgaW5wdXQuY3JlZGVudGlhbERlZmF1bHRQcm92aWRlcihpbnB1dCBhcyBhbnkpO1xuICBjb25zdCBub3JtYWxpemVkQ3JlZHMgPSBub3JtYWxpemVQcm92aWRlcihjcmVkZW50aWFscyk7XG4gIGNvbnN0IHsgc2lnbmluZ0VzY2FwZVBhdGggPSB0cnVlLCBzeXN0ZW1DbG9ja09mZnNldCA9IGlucHV0LnN5c3RlbUNsb2NrT2Zmc2V0IHx8IDAsIHNoYTI1NiB9ID0gaW5wdXQ7XG4gIGxldCBzaWduZXI6IFByb3ZpZGVyPFJlcXVlc3RTaWduZXI+O1xuICBpZiAoaW5wdXQuc2lnbmVyKSB7XG4gICAgLy9pZiBzaWduZXIgaXMgc3VwcGxpZWQgYnkgdXNlciwgbm9ybWFsaXplIGl0IHRvIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZSBmb3Igc2lnbmVyLlxuICAgIHNpZ25lciA9IG5vcm1hbGl6ZVByb3ZpZGVyKGlucHV0LnNpZ25lcik7XG4gIH0gZWxzZSB7XG4gICAgLy9jb25zdHJ1Y3QgYSBwcm92aWRlciBpbmZlcnJpbmcgc2lnbmluZyBmcm9tIHJlZ2lvbi5cbiAgICBzaWduZXIgPSAoKSA9PlxuICAgICAgbm9ybWFsaXplUHJvdmlkZXIoaW5wdXQucmVnaW9uKSgpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZWdpb24pID0+IFsoYXdhaXQgaW5wdXQucmVnaW9uSW5mb1Byb3ZpZGVyKHJlZ2lvbikpIHx8IHt9LCByZWdpb25dIGFzIFtSZWdpb25JbmZvLCBzdHJpbmddKVxuICAgICAgICAudGhlbigoW3JlZ2lvbkluZm8sIHJlZ2lvbl0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IHNpZ25pbmdSZWdpb24gPSBpbnB1dC5zaWduaW5nUmVnaW9uLCBzaWduaW5nU2VydmljZSA9IGlucHV0LnNpZ25pbmdOYW1lIH0gPSByZWdpb25JbmZvO1xuICAgICAgICAgIC8vdXBkYXRlIGNsaWVudCdzIHNpbmdpbmcgcmVnaW9uIGFuZCBzaWduaW5nIHNlcnZpY2UgY29uZmlnIGlmIHRoZXkgYXJlIHJlc29sdmVkLlxuICAgICAgICAgIC8vc2lnbmluZyByZWdpb24gcmVzb2x2aW5nIG9yZGVyOiB1c2VyIHN1cHBsaWVkIHNpZ25pbmdSZWdpb24gLT4gZW5kcG9pbnRzLmpzb24gaW5mZXJyZWQgcmVnaW9uIC0+IGNsaWVudCByZWdpb25cbiAgICAgICAgICBpbnB1dC5zaWduaW5nUmVnaW9uID0gaW5wdXQuc2lnbmluZ1JlZ2lvbiB8fCBzaWduaW5nUmVnaW9uIHx8IHJlZ2lvbjtcbiAgICAgICAgICBpbnB1dC5zaWduaW5nTmFtZSA9IGlucHV0LnNpZ25pbmdOYW1lIHx8IHNpZ25pbmdTZXJ2aWNlO1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmVWNCh7XG4gICAgICAgICAgICBjcmVkZW50aWFsczogbm9ybWFsaXplZENyZWRzLFxuICAgICAgICAgICAgcmVnaW9uOiBpbnB1dC5zaWduaW5nUmVnaW9uLFxuICAgICAgICAgICAgc2VydmljZTogaW5wdXQuc2lnbmluZ05hbWUsXG4gICAgICAgICAgICBzaGEyNTYsXG4gICAgICAgICAgICB1cmlFc2NhcGVQYXRoOiBzaWduaW5nRXNjYXBlUGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmlucHV0LFxuICAgIHN5c3RlbUNsb2NrT2Zmc2V0LFxuICAgIHNpZ25pbmdFc2NhcGVQYXRoLFxuICAgIGNyZWRlbnRpYWxzOiBub3JtYWxpemVkQ3JlZHMsXG4gICAgc2lnbmVyLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQcm92aWRlcjxUPihpbnB1dDogVCB8IFByb3ZpZGVyPFQ+KTogUHJvdmlkZXI8VD4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgcHJvbWlzaWZpZWQgPSBQcm9taXNlLnJlc29sdmUoaW5wdXQpO1xuICAgIHJldHVybiAoKSA9PiBwcm9taXNpZmllZDtcbiAgfVxuICByZXR1cm4gaW5wdXQgYXMgUHJvdmlkZXI8VD47XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./configurations\"), exports);\ntslib_1.__exportStar(require(\"./middleware\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQWlDO0FBQ2pDLHVEQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbmZpZ3VyYXRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9taWRkbGV3YXJlXCI7XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAwsAuthPlugin = exports.awsAuthMiddlewareOptions = exports.awsAuthMiddleware = void 0;\nvar tslib_1 = require(\"tslib\");\nvar protocol_http_1 = require(\"@aws-sdk/protocol-http\");\nvar isClockSkewed = function (newServerTime, systemClockOffset) {\n    return Math.abs(getSkewCorrectedDate(systemClockOffset).getTime() - newServerTime) >= 300000;\n};\nvar getSkewCorrectedDate = function (systemClockOffset) { return new Date(Date.now() + systemClockOffset); };\nfunction awsAuthMiddleware(options) {\n    return function (next) {\n        return function (args) {\n            return tslib_1.__awaiter(this, void 0, void 0, function () {\n                var signer, _a, output, _b, _c, _d, headers, dateHeader, serverTime;\n                return tslib_1.__generator(this, function (_e) {\n                    switch (_e.label) {\n                        case 0:\n                            if (!protocol_http_1.HttpRequest.isInstance(args.request))\n                                return [2 /*return*/, next(args)];\n                            if (!(typeof options.signer === \"function\")) return [3 /*break*/, 2];\n                            return [4 /*yield*/, options.signer()];\n                        case 1:\n                            _a = _e.sent();\n                            return [3 /*break*/, 3];\n                        case 2:\n                            _a = options.signer;\n                            _e.label = 3;\n                        case 3:\n                            signer = _a;\n                            _b = next;\n                            _c = [tslib_1.__assign({}, args)];\n                            _d = {};\n                            return [4 /*yield*/, signer.sign(args.request, {\n                                    signingDate: new Date(Date.now() + options.systemClockOffset),\n                                })];\n                        case 4: return [4 /*yield*/, _b.apply(void 0, [tslib_1.__assign.apply(void 0, _c.concat([(_d.request = _e.sent(), _d)]))])];\n                        case 5:\n                            output = _e.sent();\n                            headers = output.response.headers;\n                            dateHeader = headers && (headers.date || headers.Date);\n                            if (dateHeader) {\n                                serverTime = Date.parse(dateHeader);\n                                if (isClockSkewed(serverTime, options.systemClockOffset)) {\n                                    options.systemClockOffset = serverTime - Date.now();\n                                }\n                            }\n                            return [2 /*return*/, output];\n                    }\n                });\n            });\n        };\n    };\n}\nexports.awsAuthMiddleware = awsAuthMiddleware;\nexports.awsAuthMiddlewareOptions = {\n    name: \"awsAuthMiddleware\",\n    step: \"finalizeRequest\",\n    tags: [\"SIGNATURE\", \"AWSAUTH\"],\n    relation: \"after\",\n    toMiddleware: \"retryMiddleware\",\n};\nexports.getAwsAuthPlugin = function (options) { return ({\n    applyToStack: function (clientStack) {\n        clientStack.addRelativeTo(awsAuthMiddleware(options), exports.awsAuthMiddlewareOptions);\n    },\n}); };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx3REFBcUQ7QUFhckQsSUFBTSxhQUFhLEdBQUcsVUFBQyxhQUFxQixFQUFFLGlCQUF5QjtJQUNyRSxPQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxNQUFNO0FBQXJGLENBQXFGLENBQUM7QUFFeEYsSUFBTSxvQkFBb0IsR0FBRyxVQUFDLGlCQUF5QixJQUFLLE9BQUEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGlCQUFpQixDQUFDLEVBQXhDLENBQXdDLENBQUM7QUFFckcsU0FBZ0IsaUJBQWlCLENBQy9CLE9BQThCO0lBRTlCLE9BQU8sVUFBQyxJQUFvQztRQUMxQyxPQUFBLFVBQWdCLElBQXFDOzs7Ozs7NEJBQ25ELElBQUksQ0FBQywyQkFBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dDQUFFLHNCQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQztpQ0FDOUMsQ0FBQSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFBLEVBQXBDLHdCQUFvQzs0QkFBRyxxQkFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUE7OzRCQUF0QixLQUFBLFNBQXNCLENBQUE7Ozs0QkFBRyxLQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUE7Ozs0QkFBdkYsTUFBTSxLQUFpRjs0QkFDeEUsS0FBQSxJQUFJLENBQUE7dURBQ3BCLElBQUk7OzRCQUNFLHFCQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQ0FDdkMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7aUNBQzlELENBQUMsRUFBQTtnQ0FKVyxxQkFBTSw2REFFbkIsVUFBTyxHQUFFLFNBRVAsVUFDRixFQUFBOzs0QkFMSSxNQUFNLEdBQUcsU0FLYjs0QkFFTSxPQUFPLEdBQUssTUFBTSxDQUFDLFFBQWUsUUFBM0IsQ0FBNEI7NEJBQ3JDLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDN0QsSUFBSSxVQUFVLEVBQUU7Z0NBQ1IsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0NBQzFDLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtvQ0FDeEQsT0FBTyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7aUNBQ3JEOzZCQUNGOzRCQUVELHNCQUFPLE1BQU0sRUFBQzs7OztTQUNmO0lBcEJELENBb0JDLENBQUM7QUFDTixDQUFDO0FBekJELDhDQXlCQztBQUVZLFFBQUEsd0JBQXdCLEdBQStEO0lBQ2xHLElBQUksRUFBRSxtQkFBbUI7SUFDekIsSUFBSSxFQUFFLGlCQUFpQjtJQUN2QixJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO0lBQzlCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLFlBQVksRUFBRSxpQkFBaUI7Q0FDaEMsQ0FBQztBQUVXLFFBQUEsZ0JBQWdCLEdBQUcsVUFBQyxPQUE4QixJQUEwQixPQUFBLENBQUM7SUFDeEYsWUFBWSxFQUFFLFVBQUMsV0FBVztRQUN4QixXQUFXLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGdDQUF3QixDQUFDLENBQUM7SUFDbEYsQ0FBQztDQUNGLENBQUMsRUFKdUYsQ0FJdkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSBcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIjtcbmltcG9ydCB7XG4gIEZpbmFsaXplSGFuZGxlcixcbiAgRmluYWxpemVIYW5kbGVyQXJndW1lbnRzLFxuICBGaW5hbGl6ZUhhbmRsZXJPdXRwdXQsXG4gIEZpbmFsaXplUmVxdWVzdEhhbmRsZXJPcHRpb25zLFxuICBGaW5hbGl6ZVJlcXVlc3RNaWRkbGV3YXJlLFxuICBQbHVnZ2FibGUsXG4gIFJlbGF0aXZlTG9jYXRpb24sXG59IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5pbXBvcnQgeyBBd3NBdXRoUmVzb2x2ZWRDb25maWcgfSBmcm9tIFwiLi9jb25maWd1cmF0aW9uc1wiO1xuXG5jb25zdCBpc0Nsb2NrU2tld2VkID0gKG5ld1NlcnZlclRpbWU6IG51bWJlciwgc3lzdGVtQ2xvY2tPZmZzZXQ6IG51bWJlcikgPT5cbiAgTWF0aC5hYnMoZ2V0U2tld0NvcnJlY3RlZERhdGUoc3lzdGVtQ2xvY2tPZmZzZXQpLmdldFRpbWUoKSAtIG5ld1NlcnZlclRpbWUpID49IDMwMDAwMDtcblxuY29uc3QgZ2V0U2tld0NvcnJlY3RlZERhdGUgPSAoc3lzdGVtQ2xvY2tPZmZzZXQ6IG51bWJlcikgPT4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHN5c3RlbUNsb2NrT2Zmc2V0KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGF3c0F1dGhNaWRkbGV3YXJlPElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+KFxuICBvcHRpb25zOiBBd3NBdXRoUmVzb2x2ZWRDb25maWdcbik6IEZpbmFsaXplUmVxdWVzdE1pZGRsZXdhcmU8SW5wdXQsIE91dHB1dD4ge1xuICByZXR1cm4gKG5leHQ6IEZpbmFsaXplSGFuZGxlcjxJbnB1dCwgT3V0cHV0Pik6IEZpbmFsaXplSGFuZGxlcjxJbnB1dCwgT3V0cHV0PiA9PlxuICAgIGFzeW5jIGZ1bmN0aW9uIChhcmdzOiBGaW5hbGl6ZUhhbmRsZXJBcmd1bWVudHM8SW5wdXQ+KTogUHJvbWlzZTxGaW5hbGl6ZUhhbmRsZXJPdXRwdXQ8T3V0cHV0Pj4ge1xuICAgICAgaWYgKCFIdHRwUmVxdWVzdC5pc0luc3RhbmNlKGFyZ3MucmVxdWVzdCkpIHJldHVybiBuZXh0KGFyZ3MpO1xuICAgICAgY29uc3Qgc2lnbmVyID0gdHlwZW9mIG9wdGlvbnMuc2lnbmVyID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCBvcHRpb25zLnNpZ25lcigpIDogb3B0aW9ucy5zaWduZXI7XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBuZXh0KHtcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICAgcmVxdWVzdDogYXdhaXQgc2lnbmVyLnNpZ24oYXJncy5yZXF1ZXN0LCB7XG4gICAgICAgICAgc2lnbmluZ0RhdGU6IG5ldyBEYXRlKERhdGUubm93KCkgKyBvcHRpb25zLnN5c3RlbUNsb2NrT2Zmc2V0KSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSBvdXRwdXQucmVzcG9uc2UgYXMgYW55O1xuICAgICAgY29uc3QgZGF0ZUhlYWRlciA9IGhlYWRlcnMgJiYgKGhlYWRlcnMuZGF0ZSB8fCBoZWFkZXJzLkRhdGUpO1xuICAgICAgaWYgKGRhdGVIZWFkZXIpIHtcbiAgICAgICAgY29uc3Qgc2VydmVyVGltZSA9IERhdGUucGFyc2UoZGF0ZUhlYWRlcik7XG4gICAgICAgIGlmIChpc0Nsb2NrU2tld2VkKHNlcnZlclRpbWUsIG9wdGlvbnMuc3lzdGVtQ2xvY2tPZmZzZXQpKSB7XG4gICAgICAgICAgb3B0aW9ucy5zeXN0ZW1DbG9ja09mZnNldCA9IHNlcnZlclRpbWUgLSBEYXRlLm5vdygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGF3c0F1dGhNaWRkbGV3YXJlT3B0aW9uczogRmluYWxpemVSZXF1ZXN0SGFuZGxlck9wdGlvbnMgJiBSZWxhdGl2ZUxvY2F0aW9uPGFueSwgYW55PiA9IHtcbiAgbmFtZTogXCJhd3NBdXRoTWlkZGxld2FyZVwiLFxuICBzdGVwOiBcImZpbmFsaXplUmVxdWVzdFwiLFxuICB0YWdzOiBbXCJTSUdOQVRVUkVcIiwgXCJBV1NBVVRIXCJdLFxuICByZWxhdGlvbjogXCJhZnRlclwiLFxuICB0b01pZGRsZXdhcmU6IFwicmV0cnlNaWRkbGV3YXJlXCIsXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXdzQXV0aFBsdWdpbiA9IChvcHRpb25zOiBBd3NBdXRoUmVzb2x2ZWRDb25maWcpOiBQbHVnZ2FibGU8YW55LCBhbnk+ID0+ICh7XG4gIGFwcGx5VG9TdGFjazogKGNsaWVudFN0YWNrKSA9PiB7XG4gICAgY2xpZW50U3RhY2suYWRkUmVsYXRpdmVUbyhhd3NBdXRoTWlkZGxld2FyZShvcHRpb25zKSwgYXdzQXV0aE1pZGRsZXdhcmVPcHRpb25zKTtcbiAgfSxcbn0pO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MiddlewareStack = void 0;\nvar tslib_1 = require(\"tslib\");\nvar MiddlewareStack = /** @class */ (function () {\n    function MiddlewareStack() {\n        this.absoluteEntries = [];\n        this.relativeEntries = [];\n        this.entriesNameMap = {};\n    }\n    MiddlewareStack.prototype.add = function (middleware, options) {\n        if (options === void 0) { options = {}; }\n        var name = options.name, _a = options.step, step = _a === void 0 ? \"initialize\" : _a, tags = options.tags, _b = options.priority, priority = _b === void 0 ? \"normal\" : _b;\n        var entry = {\n            name: name,\n            step: step,\n            tags: tags,\n            priority: priority,\n            middleware: middleware,\n        };\n        if (name) {\n            if (Object.prototype.hasOwnProperty.call(this.entriesNameMap, name)) {\n                throw new Error(\"Duplicated middleware name '\" + name + \"'\");\n            }\n            this.entriesNameMap[name] = entry;\n        }\n        this.absoluteEntries.push(entry);\n    };\n    MiddlewareStack.prototype.addRelativeTo = function (middleware, options) {\n        var _a = options.step, step = _a === void 0 ? \"initialize\" : _a, name = options.name, tags = options.tags, relation = options.relation, toMiddleware = options.toMiddleware;\n        var entry = {\n            middleware: middleware,\n            step: step,\n            name: name,\n            tags: tags,\n            next: relation === \"before\" ? toMiddleware : undefined,\n            prev: relation === \"after\" ? toMiddleware : undefined,\n        };\n        if (name) {\n            if (Object.prototype.hasOwnProperty.call(this.entriesNameMap, name)) {\n                throw new Error(\"Duplicated middleware name '\" + name + \"'\");\n            }\n            this.entriesNameMap[name] = entry;\n        }\n        this.relativeEntries.push(entry);\n    };\n    MiddlewareStack.prototype.sort = function (entries) {\n        //reverse before sorting so that middleware of same step will execute in\n        //the order of being added\n        return entries.sort(function (a, b) {\n            return stepWeights[b.step] - stepWeights[a.step] ||\n                priorityWeights[b.priority || \"normal\"] - priorityWeights[a.priority || \"normal\"];\n        });\n    };\n    MiddlewareStack.prototype.clone = function () {\n        var _a, _b;\n        var clone = new MiddlewareStack();\n        (_a = clone.absoluteEntries).push.apply(_a, tslib_1.__spread(this.absoluteEntries));\n        (_b = clone.relativeEntries).push.apply(_b, tslib_1.__spread(this.relativeEntries));\n        clone.entriesNameMap = tslib_1.__assign({}, this.entriesNameMap);\n        return clone;\n    };\n    MiddlewareStack.prototype.concat = function (from) {\n        var _a, _b;\n        var clone = new MiddlewareStack();\n        clone.entriesNameMap = tslib_1.__assign({}, this.entriesNameMap);\n        // IMiddlewareStack interface doesn't contain private members variables\n        // like `entriesNameMap`, but in fact the function expects `MiddlewareStack`\n        // class instance. So here we cast it.\n        var _from = from;\n        for (var name in _from.entriesNameMap) {\n            if (clone.entriesNameMap[name]) {\n                throw new Error(\"Duplicated middleware name '\" + name + \"'\");\n            }\n            clone.entriesNameMap[name] = _from.entriesNameMap[name];\n        }\n        (_a = clone.absoluteEntries).push.apply(_a, tslib_1.__spread(this.absoluteEntries, _from.absoluteEntries));\n        (_b = clone.relativeEntries).push.apply(_b, tslib_1.__spread(this.relativeEntries, _from.relativeEntries));\n        return clone;\n    };\n    MiddlewareStack.prototype.remove = function (toRemove) {\n        if (typeof toRemove === \"string\")\n            return this.removeByName(toRemove);\n        else\n            return this.removeByReference(toRemove);\n    };\n    MiddlewareStack.prototype.removeByName = function (toRemove) {\n        for (var i = this.absoluteEntries.length - 1; i >= 0; i--) {\n            if (this.absoluteEntries[i].name && this.absoluteEntries[i].name === toRemove) {\n                this.absoluteEntries.splice(i, 1);\n                delete this.entriesNameMap[toRemove];\n                return true;\n            }\n        }\n        for (var i = this.relativeEntries.length - 1; i >= 0; i--) {\n            if (this.relativeEntries[i].name && this.relativeEntries[i].name === toRemove) {\n                this.relativeEntries.splice(i, 1);\n                delete this.entriesNameMap[toRemove];\n                return true;\n            }\n        }\n        return false;\n    };\n    MiddlewareStack.prototype.removeByReference = function (toRemove) {\n        for (var i = this.absoluteEntries.length - 1; i >= 0; i--) {\n            if (this.absoluteEntries[i].middleware === toRemove) {\n                var name = this.absoluteEntries[i].name;\n                if (name)\n                    delete this.entriesNameMap[name];\n                this.absoluteEntries.splice(i, 1);\n                return true;\n            }\n        }\n        for (var i = this.relativeEntries.length - 1; i >= 0; i--) {\n            if (this.relativeEntries[i].middleware === toRemove) {\n                var name = this.relativeEntries[i].name;\n                if (name)\n                    delete this.entriesNameMap[name];\n                this.relativeEntries.splice(i, 1);\n                return true;\n            }\n        }\n        return false;\n    };\n    MiddlewareStack.prototype.removeByTag = function (toRemove) {\n        var removed = false;\n        for (var i = this.absoluteEntries.length - 1; i >= 0; i--) {\n            var _a = this.absoluteEntries[i], tags = _a.tags, name = _a.name;\n            if (tags && tags.indexOf(toRemove) > -1) {\n                this.absoluteEntries.splice(i, 1);\n                if (name)\n                    delete this.entriesNameMap[name];\n                removed = true;\n            }\n        }\n        for (var i = this.relativeEntries.length - 1; i >= 0; i--) {\n            var _b = this.relativeEntries[i], tags = _b.tags, name = _b.name;\n            if (tags && tags.indexOf(toRemove) > -1) {\n                this.relativeEntries.splice(i, 1);\n                if (name)\n                    delete this.entriesNameMap[name];\n                removed = true;\n            }\n        }\n        return removed;\n    };\n    MiddlewareStack.prototype.use = function (plugin) {\n        plugin.applyToStack(this);\n    };\n    /**\n     * Resolve relative middleware entries to multiple double linked lists\n     * depicting the relative location of middleware. Only middleware that have\n     * direct or transitive relation will form a linked list.\n     *\n     * This function normalizes relative middleware into 2 categories of linked\n     * lists. (1) linked list that have absolute-located middleware on one end.\n     * These middleware will be resolved accordingly before or after the absolute-\n     * located middleware. (2) Linked list that have no absolute-located middleware\n     * on any end. They will be resolved to corresponding step with normal priority\n     *\n     * The 2 types of linked list will return as a tuple\n     */\n    MiddlewareStack.prototype.normalizeRelativeEntries = function () {\n        var e_1, _a;\n        var absoluteMiddlewareNamesMap = this.absoluteEntries\n            .filter(function (entry) { return entry.name; })\n            .reduce(function (accumulator, entry) {\n            accumulator[entry.name] = entry;\n            return accumulator;\n        }, {});\n        var normalized = this.relativeEntries.map(function (entry) {\n            return (tslib_1.__assign(tslib_1.__assign({}, entry), { priority: null, next: undefined, prev: undefined }));\n        });\n        var relativeMiddlewareNamesMap = normalized\n            .filter(function (entry) { return entry.name; })\n            .reduce(function (accumulator, entry) {\n            accumulator[entry.name] = entry;\n            return accumulator;\n        }, {});\n        var anchors = {};\n        for (var i = 0; i < this.relativeEntries.length; i++) {\n            var _b = this.relativeEntries[i], prev = _b.prev, next = _b.next;\n            var resolvedCurr = normalized[i];\n            //either prev or next is set\n            if (prev) {\n                if (absoluteMiddlewareNamesMap[prev] && absoluteMiddlewareNamesMap[prev].step === resolvedCurr.step) {\n                    if (!anchors[prev])\n                        anchors[prev] = {};\n                    resolvedCurr.next = anchors[prev].next;\n                    if (anchors[prev].next)\n                        anchors[prev].next.prev = resolvedCurr;\n                    anchors[prev].next = resolvedCurr;\n                }\n                else if (relativeMiddlewareNamesMap[prev] && relativeMiddlewareNamesMap[prev].step === resolvedCurr.step) {\n                    var resolvedPrev = relativeMiddlewareNamesMap[prev];\n                    if (resolvedPrev.next === resolvedCurr)\n                        continue;\n                    resolvedCurr.next = resolvedPrev.next;\n                    resolvedPrev.next = resolvedCurr;\n                    if (resolvedCurr.next)\n                        resolvedCurr.next.prev = resolvedCurr;\n                    resolvedCurr.prev = resolvedPrev;\n                }\n            }\n            else if (next) {\n                if (absoluteMiddlewareNamesMap[next] && absoluteMiddlewareNamesMap[next].step === resolvedCurr.step) {\n                    if (!anchors[next])\n                        anchors[next] = {};\n                    resolvedCurr.prev = anchors[next].prev;\n                    if (anchors[next].prev)\n                        anchors[next].prev.next = resolvedCurr;\n                    anchors[next].prev = resolvedCurr;\n                }\n                else if (relativeMiddlewareNamesMap[next] && relativeMiddlewareNamesMap[next].step === resolvedCurr.step) {\n                    var resolvedNext = relativeMiddlewareNamesMap[next];\n                    if (resolvedNext.prev === resolvedCurr)\n                        continue;\n                    resolvedCurr.prev = resolvedNext.prev;\n                    resolvedNext.prev = resolvedCurr;\n                    if (resolvedCurr.prev)\n                        resolvedCurr.prev.next = resolvedCurr;\n                    resolvedCurr.next = resolvedNext;\n                }\n            }\n        }\n        // get the head of the relative middleware linked list that have\n        // no transitive relation to absolute middleware.\n        var orphanedRelativeEntries = [];\n        var visited = new WeakSet();\n        try {\n            for (var _c = tslib_1.__values(Object.keys(anchors)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var anchorName = _d.value;\n                var _e = anchors[anchorName], prev = _e.prev, next = _e.next;\n                while (prev) {\n                    visited.add(prev);\n                    prev = prev.prev;\n                }\n                while (next) {\n                    visited.add(next);\n                    next = next.next;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        for (var i = 0; i < normalized.length; i++) {\n            var entry = normalized[i];\n            if (visited.has(entry))\n                continue;\n            if (!entry.prev)\n                orphanedRelativeEntries.push(entry);\n            while (entry && !visited.has(entry)) {\n                visited.add(entry);\n                entry = entry.next;\n            }\n        }\n        return [orphanedRelativeEntries, anchors];\n    };\n    /**\n     * Get a final list of middleware in the order of being executed in the resolved handler.\n     * If relative entries list is not empty, those entries will be added to final middleware\n     * list with rules below:\n     * 1. if `toMiddleware` exists in the specific `step`, the middleware will be inserted before\n     *     or after the specified `toMiddleware`\n     * 2. if `toMiddleware` doesn't exist in the specific `step`, the middleware will be appended\n     *     to specific `step` with priority of `normal`\n     */\n    MiddlewareStack.prototype.getMiddlewareList = function () {\n        var e_2, _a;\n        var middlewareList = [];\n        var _b = tslib_1.__read(this.normalizeRelativeEntries(), 2), orphanedRelativeEntries = _b[0], anchors = _b[1];\n        var entryList = tslib_1.__spread(this.absoluteEntries, orphanedRelativeEntries);\n        entryList = this.sort(entryList);\n        try {\n            for (var entryList_1 = tslib_1.__values(entryList), entryList_1_1 = entryList_1.next(); !entryList_1_1.done; entryList_1_1 = entryList_1.next()) {\n                var entry = entryList_1_1.value;\n                var defaultAnchorValue = { prev: undefined, next: undefined };\n                var _c = entry.name ? anchors[entry.name] || defaultAnchorValue : defaultAnchorValue, prev = _c.prev, next = _c.next;\n                var relativeEntry = prev;\n                //reverse relative entry linked list and add to ordered handler list\n                while (relativeEntry === null || relativeEntry === void 0 ? void 0 : relativeEntry.prev) {\n                    relativeEntry = relativeEntry.prev;\n                }\n                while (relativeEntry) {\n                    middlewareList.push(relativeEntry.middleware);\n                    relativeEntry = relativeEntry.next;\n                }\n                middlewareList.push(entry.middleware);\n                var orphanedEntry = entry;\n                while (orphanedEntry.next) {\n                    middlewareList.push(orphanedEntry.next.middleware);\n                    orphanedEntry = orphanedEntry.next;\n                }\n                relativeEntry = next;\n                while (relativeEntry) {\n                    middlewareList.push(relativeEntry.middleware);\n                    relativeEntry = relativeEntry.next;\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (entryList_1_1 && !entryList_1_1.done && (_a = entryList_1.return)) _a.call(entryList_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        return middlewareList.reverse();\n    };\n    MiddlewareStack.prototype.resolve = function (handler, context) {\n        var e_3, _a;\n        try {\n            for (var _b = tslib_1.__values(this.getMiddlewareList()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var middleware = _c.value;\n                handler = middleware(handler, context);\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        return handler;\n    };\n    return MiddlewareStack;\n}());\nexports.MiddlewareStack = MiddlewareStack;\nvar stepWeights = {\n    initialize: 5,\n    serialize: 4,\n    build: 3,\n    finalizeRequest: 2,\n    deserialize: 1,\n};\nvar priorityWeights = {\n    high: 3,\n    normal: 2,\n    low: 1,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZVN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL01pZGRsZXdhcmVTdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBb0NBO0lBQUE7UUFDbUIsb0JBQWUsR0FBMEMsRUFBRSxDQUFDO1FBQzVELG9CQUFlLEdBQWtELEVBQUUsQ0FBQztRQUM3RSxtQkFBYyxHQUVsQixFQUFFLENBQUM7SUFpVlQsQ0FBQztJQWxVQyw2QkFBRyxHQUFILFVBQUksVUFBeUMsRUFBRSxPQUErQztRQUEvQyx3QkFBQSxFQUFBLFlBQStDO1FBQ3BGLElBQUEsSUFBSSxHQUFxRCxPQUFPLEtBQTVELEVBQUUsS0FBbUQsT0FBTyxLQUF2QyxFQUFuQixJQUFJLG1CQUFHLFlBQVksS0FBQSxFQUFFLElBQUksR0FBMEIsT0FBTyxLQUFqQyxFQUFFLEtBQXdCLE9BQU8sU0FBWixFQUFuQixRQUFRLG1CQUFHLFFBQVEsS0FBQSxDQUFhO1FBQ3pFLElBQU0sS0FBSyxHQUFtQztZQUM1QyxJQUFJLE1BQUE7WUFDSixJQUFJLE1BQUE7WUFDSixJQUFJLE1BQUE7WUFDSixRQUFRLFVBQUE7WUFDUixVQUFVLFlBQUE7U0FDWCxDQUFDO1FBQ0YsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUErQixJQUFJLE1BQUcsQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBMkJELHVDQUFhLEdBQWIsVUFDRSxVQUF5QyxFQUN6QyxPQUF5RDtRQUVqRCxJQUFBLEtB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QUFrQztJQUNyRCxJQUFJLEVBQUUsQ0FBQztJQUNQLE1BQU0sRUFBRSxDQUFDO0lBQ1QsR0FBRyxFQUFFLENBQUM7Q0FDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWJzb2x1dGVMb2NhdGlvbixcbiAgQnVpbGRIYW5kbGVyT3B0aW9ucyxcbiAgQnVpbGRNaWRkbGV3YXJlLFxuICBEZXNlcmlhbGl6ZUhhbmRsZXIsXG4gIERlc2VyaWFsaXplSGFuZGxlck9wdGlvbnMsXG4gIERlc2VyaWFsaXplTWlkZGxld2FyZSxcbiAgRmluYWxpemVSZXF1ZXN0SGFuZGxlck9wdGlvbnMsXG4gIEZpbmFsaXplUmVxdWVzdE1pZGRsZXdhcmUsXG4gIEhhbmRsZXIsXG4gIEhhbmRsZXJFeGVjdXRpb25Db250ZXh0LFxuICBIYW5kbGVyT3B0aW9ucyxcbiAgSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zLFxuICBJbml0aWFsaXplTWlkZGxld2FyZSxcbiAgTWlkZGxld2FyZVN0YWNrIGFzIElNaWRkbGV3YXJlU3RhY2ssXG4gIE1pZGRsZXdhcmVUeXBlLFxuICBQbHVnZ2FibGUsXG4gIFByaW9yaXR5LFxuICBSZWxhdGl2ZUxvY2F0aW9uLFxuICBTZXJpYWxpemVIYW5kbGVyT3B0aW9ucyxcbiAgU2VyaWFsaXplTWlkZGxld2FyZSxcbiAgU3RlcCxcbn0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmltcG9ydCB7XG4gIE1pZGRsZXdhcmVFbnRyeSxcbiAgTmFtZWRNaWRkbGV3YXJlRW50cmllc01hcCxcbiAgTmFtZWRSZWxhdGl2ZUVudHJpZXNNYXAsXG4gIE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5LFxuICBOb3JtYWxpemluZ0VudHJ5UmVzdWx0LFxuICBSZWxhdGl2ZU1pZGRsZXdhcmVBbmNob3IsXG4gIFJlbGF0aXZlTWlkZGxld2FyZUVudHJ5LFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1pZGRsZXdhcmVTdGFjazxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3V0cHV0IGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIElNaWRkbGV3YXJlU3RhY2s8SW5wdXQsIE91dHB1dD4ge31cblxuZXhwb3J0IGNsYXNzIE1pZGRsZXdhcmVTdGFjazxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3V0cHV0IGV4dGVuZHMgb2JqZWN0PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWJzb2x1dGVFbnRyaWVzOiBBcnJheTxNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVsYXRpdmVFbnRyaWVzOiBBcnJheTxSZWxhdGl2ZU1pZGRsZXdhcmVFbnRyeTxJbnB1dCwgT3V0cHV0Pj4gPSBbXTtcbiAgcHJpdmF0ZSBlbnRyaWVzTmFtZU1hcDoge1xuICAgIFttaWRkbGV3YXJlTmFtZTogc3RyaW5nXTogTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+IHwgUmVsYXRpdmVNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD47XG4gIH0gPSB7fTtcblxuICBhZGQobWlkZGxld2FyZTogSW5pdGlhbGl6ZU1pZGRsZXdhcmU8SW5wdXQsIE91dHB1dD4sIG9wdGlvbnM/OiBJbml0aWFsaXplSGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uKTogdm9pZDtcblxuICBhZGQobWlkZGxld2FyZTogU2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0Piwgb3B0aW9uczogU2VyaWFsaXplSGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uKTogdm9pZDtcblxuICBhZGQobWlkZGxld2FyZTogQnVpbGRNaWRkbGV3YXJlPElucHV0LCBPdXRwdXQ+LCBvcHRpb25zOiBCdWlsZEhhbmRsZXJPcHRpb25zICYgQWJzb2x1dGVMb2NhdGlvbik6IHZvaWQ7XG5cbiAgYWRkKFxuICAgIG1pZGRsZXdhcmU6IEZpbmFsaXplUmVxdWVzdE1pZGRsZXdhcmU8SW5wdXQsIE91dHB1dD4sXG4gICAgb3B0aW9uczogRmluYWxpemVSZXF1ZXN0SGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uXG4gICk6IHZvaWQ7XG5cbiAgYWRkKG1pZGRsZXdhcmU6IERlc2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0Piwgb3B0aW9uczogRGVzZXJpYWxpemVIYW5kbGVyT3B0aW9ucyAmIEFic29sdXRlTG9jYXRpb24pOiB2b2lkO1xuXG4gIGFkZChtaWRkbGV3YXJlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0Piwgb3B0aW9uczogSGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uID0ge30pOiB2b2lkIHtcbiAgICBjb25zdCB7IG5hbWUsIHN0ZXAgPSBcImluaXRpYWxpemVcIiwgdGFncywgcHJpb3JpdHkgPSBcIm5vcm1hbFwiIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVudHJ5OiBNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4gPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3RlcCxcbiAgICAgIHRhZ3MsXG4gICAgICBwcmlvcml0eSxcbiAgICAgIG1pZGRsZXdhcmUsXG4gICAgfTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmVudHJpZXNOYW1lTWFwLCBuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZWQgbWlkZGxld2FyZSBuYW1lICcke25hbWV9J2ApO1xuICAgICAgfVxuICAgICAgdGhpcy5lbnRyaWVzTmFtZU1hcFtuYW1lXSA9IGVudHJ5O1xuICAgIH1cbiAgICB0aGlzLmFic29sdXRlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogSW5pdGlhbGl6ZU1pZGRsZXdhcmU8SW5wdXQsIE91dHB1dD4sXG4gICAgb3B0aW9uczogSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zICYgUmVsYXRpdmVMb2NhdGlvbjxJbnB1dCwgT3V0cHV0PlxuICApOiB2b2lkO1xuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogU2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBTZXJpYWxpemVIYW5kbGVyT3B0aW9ucyAmIFJlbGF0aXZlTG9jYXRpb248SW5wdXQsIE91dHB1dD5cbiAgKTogdm9pZDtcblxuICBhZGRSZWxhdGl2ZVRvKFxuICAgIG1pZGRsZXdhcmU6IEJ1aWxkTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBCdWlsZEhhbmRsZXJPcHRpb25zICYgUmVsYXRpdmVMb2NhdGlvbjxJbnB1dCwgT3V0cHV0PlxuICApOiB2b2lkO1xuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogRmluYWxpemVSZXF1ZXN0TWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBGaW5hbGl6ZVJlcXVlc3RIYW5kbGVyT3B0aW9ucyAmIFJlbGF0aXZlTG9jYXRpb248SW5wdXQsIE91dHB1dD5cbiAgKTogdm9pZDtcblxuICBhZGRSZWxhdGl2ZVRvKFxuICAgIG1pZGRsZXdhcmU6IERlc2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBEZXNlcmlhbGl6ZUhhbmRsZXJPcHRpb25zICYgUmVsYXRpdmVMb2NhdGlvbjxJbnB1dCwgT3V0cHV0PlxuICApOiB2b2lkO1xuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogTWlkZGxld2FyZVR5cGU8SW5wdXQsIE91dHB1dD4sXG4gICAgb3B0aW9uczogSGFuZGxlck9wdGlvbnMgJiBSZWxhdGl2ZUxvY2F0aW9uPElucHV0LCBPdXRwdXQ+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgc3RlcCA9IFwiaW5pdGlhbGl6ZVwiLCBuYW1lLCB0YWdzLCByZWxhdGlvbiwgdG9NaWRkbGV3YXJlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVudHJ5OiBSZWxhdGl2ZU1pZGRsZXdhcmVFbnRyeTxJbnB1dCwgT3V0cHV0PiA9IHtcbiAgICAgIG1pZGRsZXdhcmUsXG4gICAgICBzdGVwLFxuICAgICAgbmFtZSxcbiAgICAgIHRhZ3MsXG4gICAgICBuZXh0OiByZWxhdGlvbiA9PT0gXCJiZWZvcmVcIiA/IHRvTWlkZGxld2FyZSA6IHVuZGVmaW5lZCxcbiAgICAgIHByZXY6IHJlbGF0aW9uID09PSBcImFmdGVyXCIgPyB0b01pZGRsZXdhcmUgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmVudHJpZXNOYW1lTWFwLCBuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZWQgbWlkZGxld2FyZSBuYW1lICcke25hbWV9J2ApO1xuICAgICAgfVxuICAgICAgdGhpcy5lbnRyaWVzTmFtZU1hcFtuYW1lXSA9IGVudHJ5O1xuICAgIH1cbiAgICB0aGlzLnJlbGF0aXZlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydChcbiAgICBlbnRyaWVzOiBBcnJheTxNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4gfCBOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCwgT3V0cHV0Pj5cbiAgKTogQXJyYXk8TWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+IHwgTm9ybWFsaXplZFJlbGF0aXZlRW50cnk8SW5wdXQsIE91dHB1dD4+IHtcbiAgICAvL3JldmVyc2UgYmVmb3JlIHNvcnRpbmcgc28gdGhhdCBtaWRkbGV3YXJlIG9mIHNhbWUgc3RlcCB3aWxsIGV4ZWN1dGUgaW5cbiAgICAvL3RoZSBvcmRlciBvZiBiZWluZyBhZGRlZFxuICAgIHJldHVybiBlbnRyaWVzLnNvcnQoXG4gICAgICAoYSwgYikgPT5cbiAgICAgICAgc3RlcFdlaWdodHNbYi5zdGVwXSAtIHN0ZXBXZWlnaHRzW2Euc3RlcF0gfHxcbiAgICAgICAgcHJpb3JpdHlXZWlnaHRzW2IucHJpb3JpdHkgfHwgXCJub3JtYWxcIl0gLSBwcmlvcml0eVdlaWdodHNbYS5wcmlvcml0eSB8fCBcIm5vcm1hbFwiXVxuICAgICk7XG4gIH1cblxuICBjbG9uZSgpOiBJTWlkZGxld2FyZVN0YWNrPElucHV0LCBPdXRwdXQ+IHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBNaWRkbGV3YXJlU3RhY2s8SW5wdXQsIE91dHB1dD4oKTtcbiAgICBjbG9uZS5hYnNvbHV0ZUVudHJpZXMucHVzaCguLi50aGlzLmFic29sdXRlRW50cmllcyk7XG4gICAgY2xvbmUucmVsYXRpdmVFbnRyaWVzLnB1c2goLi4udGhpcy5yZWxhdGl2ZUVudHJpZXMpO1xuICAgIGNsb25lLmVudHJpZXNOYW1lTWFwID0geyAuLi50aGlzLmVudHJpZXNOYW1lTWFwIH07XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgY29uY2F0PElucHV0VHlwZSBleHRlbmRzIElucHV0LCBPdXRwdXRUeXBlIGV4dGVuZHMgT3V0cHV0PihcbiAgICBmcm9tOiBJTWlkZGxld2FyZVN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT5cbiAgKTogTWlkZGxld2FyZVN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT4ge1xuICAgIGNvbnN0IGNsb25lID0gbmV3IE1pZGRsZXdhcmVTdGFjazxJbnB1dFR5cGUsIE91dHB1dFR5cGU+KCk7XG4gICAgY2xvbmUuZW50cmllc05hbWVNYXAgPSB7IC4uLih0aGlzLmVudHJpZXNOYW1lTWFwIGFzIGFueSkgfTtcbiAgICAvLyBJTWlkZGxld2FyZVN0YWNrIGludGVyZmFjZSBkb2Vzbid0IGNvbnRhaW4gcHJpdmF0ZSBtZW1iZXJzIHZhcmlhYmxlc1xuICAgIC8vIGxpa2UgYGVudHJpZXNOYW1lTWFwYCwgYnV0IGluIGZhY3QgdGhlIGZ1bmN0aW9uIGV4cGVjdHMgYE1pZGRsZXdhcmVTdGFja2BcbiAgICAvLyBjbGFzcyBpbnN0YW5jZS4gU28gaGVyZSB3ZSBjYXN0IGl0LlxuICAgIGNvbnN0IF9mcm9tID0gZnJvbSBhcyBNaWRkbGV3YXJlU3RhY2s8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPjtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gX2Zyb20uZW50cmllc05hbWVNYXApIHtcbiAgICAgIGlmIChjbG9uZS5lbnRyaWVzTmFtZU1hcFtuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZWQgbWlkZGxld2FyZSBuYW1lICcke25hbWV9J2ApO1xuICAgICAgfVxuICAgICAgY2xvbmUuZW50cmllc05hbWVNYXBbbmFtZV0gPSBfZnJvbS5lbnRyaWVzTmFtZU1hcFtuYW1lXTtcbiAgICB9XG4gICAgY2xvbmUuYWJzb2x1dGVFbnRyaWVzLnB1c2goLi4uKHRoaXMuYWJzb2x1dGVFbnRyaWVzIGFzIGFueSksIC4uLl9mcm9tLmFic29sdXRlRW50cmllcyk7XG4gICAgY2xvbmUucmVsYXRpdmVFbnRyaWVzLnB1c2goLi4uKHRoaXMucmVsYXRpdmVFbnRyaWVzIGFzIGFueSksIC4uLl9mcm9tLnJlbGF0aXZlRW50cmllcyk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgcmVtb3ZlKHRvUmVtb3ZlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0PiB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdG9SZW1vdmUgPT09IFwic3RyaW5nXCIpIHJldHVybiB0aGlzLnJlbW92ZUJ5TmFtZSh0b1JlbW92ZSk7XG4gICAgZWxzZSByZXR1cm4gdGhpcy5yZW1vdmVCeVJlZmVyZW5jZSh0b1JlbW92ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJ5TmFtZSh0b1JlbW92ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuYWJzb2x1dGVFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5hYnNvbHV0ZUVudHJpZXNbaV0ubmFtZSAmJiB0aGlzLmFic29sdXRlRW50cmllc1tpXS5uYW1lID09PSB0b1JlbW92ZSkge1xuICAgICAgICB0aGlzLmFic29sdXRlRW50cmllcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVudHJpZXNOYW1lTWFwW3RvUmVtb3ZlXTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSB0aGlzLnJlbGF0aXZlRW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHRoaXMucmVsYXRpdmVFbnRyaWVzW2ldLm5hbWUgJiYgdGhpcy5yZWxhdGl2ZUVudHJpZXNbaV0ubmFtZSA9PT0gdG9SZW1vdmUpIHtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBkZWxldGUgdGhpcy5lbnRyaWVzTmFtZU1hcFt0b1JlbW92ZV07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJ5UmVmZXJlbmNlKHRvUmVtb3ZlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0Pik6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmFic29sdXRlRW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHRoaXMuYWJzb2x1dGVFbnRyaWVzW2ldLm1pZGRsZXdhcmUgPT09IHRvUmVtb3ZlKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpcy5hYnNvbHV0ZUVudHJpZXNbaV07XG4gICAgICAgIGlmIChuYW1lKSBkZWxldGUgdGhpcy5lbnRyaWVzTmFtZU1hcFtuYW1lXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHRoaXMucmVsYXRpdmVFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5yZWxhdGl2ZUVudHJpZXNbaV0ubWlkZGxld2FyZSA9PT0gdG9SZW1vdmUpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lIH0gPSB0aGlzLnJlbGF0aXZlRW50cmllc1tpXTtcbiAgICAgICAgaWYgKG5hbWUpIGRlbGV0ZSB0aGlzLmVudHJpZXNOYW1lTWFwW25hbWVdO1xuICAgICAgICB0aGlzLnJlbGF0aXZlRW50cmllcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZW1vdmVCeVRhZyh0b1JlbW92ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlbW92ZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5hYnNvbHV0ZUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHsgdGFncywgbmFtZSB9ID0gdGhpcy5hYnNvbHV0ZUVudHJpZXNbaV07XG4gICAgICBpZiAodGFncyAmJiB0YWdzLmluZGV4T2YodG9SZW1vdmUpID4gLTEpIHtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBpZiAobmFtZSkgZGVsZXRlIHRoaXMuZW50cmllc05hbWVNYXBbbmFtZV07XG4gICAgICAgIHJlbW92ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gdGhpcy5yZWxhdGl2ZUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHsgdGFncywgbmFtZSB9ID0gdGhpcy5yZWxhdGl2ZUVudHJpZXNbaV07XG4gICAgICBpZiAodGFncyAmJiB0YWdzLmluZGV4T2YodG9SZW1vdmUpID4gLTEpIHtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBpZiAobmFtZSkgZGVsZXRlIHRoaXMuZW50cmllc05hbWVNYXBbbmFtZV07XG4gICAgICAgIHJlbW92ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVtb3ZlZDtcbiAgfVxuXG4gIHVzZShwbHVnaW46IFBsdWdnYWJsZTxJbnB1dCwgT3V0cHV0Pikge1xuICAgIHBsdWdpbi5hcHBseVRvU3RhY2sodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSByZWxhdGl2ZSBtaWRkbGV3YXJlIGVudHJpZXMgdG8gbXVsdGlwbGUgZG91YmxlIGxpbmtlZCBsaXN0c1xuICAgKiBkZXBpY3RpbmcgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIG9mIG1pZGRsZXdhcmUuIE9ubHkgbWlkZGxld2FyZSB0aGF0IGhhdmVcbiAgICogZGlyZWN0IG9yIHRyYW5zaXRpdmUgcmVsYXRpb24gd2lsbCBmb3JtIGEgbGlua2VkIGxpc3QuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gbm9ybWFsaXplcyByZWxhdGl2ZSBtaWRkbGV3YXJlIGludG8gMiBjYXRlZ29yaWVzIG9mIGxpbmtlZFxuICAgKiBsaXN0cy4gKDEpIGxpbmtlZCBsaXN0IHRoYXQgaGF2ZSBhYnNvbHV0ZS1sb2NhdGVkIG1pZGRsZXdhcmUgb24gb25lIGVuZC5cbiAgICogVGhlc2UgbWlkZGxld2FyZSB3aWxsIGJlIHJlc29sdmVkIGFjY29yZGluZ2x5IGJlZm9yZSBvciBhZnRlciB0aGUgYWJzb2x1dGUtXG4gICAqIGxvY2F0ZWQgbWlkZGxld2FyZS4gKDIpIExpbmtlZCBsaXN0IHRoYXQgaGF2ZSBubyBhYnNvbHV0ZS1sb2NhdGVkIG1pZGRsZXdhcmVcbiAgICogb24gYW55IGVuZC4gVGhleSB3aWxsIGJlIHJlc29sdmVkIHRvIGNvcnJlc3BvbmRpbmcgc3RlcCB3aXRoIG5vcm1hbCBwcmlvcml0eVxuICAgKlxuICAgKiBUaGUgMiB0eXBlcyBvZiBsaW5rZWQgbGlzdCB3aWxsIHJldHVybiBhcyBhIHR1cGxlXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVJlbGF0aXZlRW50cmllcygpOiBOb3JtYWxpemluZ0VudHJ5UmVzdWx0PElucHV0LCBPdXRwdXQ+IHtcbiAgICBjb25zdCBhYnNvbHV0ZU1pZGRsZXdhcmVOYW1lc01hcCA9IHRoaXMuYWJzb2x1dGVFbnRyaWVzXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSlcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBlbnRyeSkgPT4ge1xuICAgICAgICBhY2N1bXVsYXRvcltlbnRyeS5uYW1lIV0gPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfSwge30gYXMgTmFtZWRNaWRkbGV3YXJlRW50cmllc01hcDxJbnB1dCwgT3V0cHV0Pik7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMucmVsYXRpdmVFbnRyaWVzLm1hcChcbiAgICAgIChlbnRyeSkgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICBwcmlvcml0eTogbnVsbCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJldjogdW5kZWZpbmVkLFxuICAgICAgICB9IGFzIE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+KVxuICAgICk7XG4gICAgY29uc3QgcmVsYXRpdmVNaWRkbGV3YXJlTmFtZXNNYXAgPSBub3JtYWxpemVkXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSlcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBlbnRyeSkgPT4ge1xuICAgICAgICBhY2N1bXVsYXRvcltlbnRyeS5uYW1lIV0gPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfSwge30gYXMgTmFtZWRSZWxhdGl2ZUVudHJpZXNNYXA8SW5wdXQsIE91dHB1dD4pO1xuXG4gICAgY29uc3QgYW5jaG9yczogUmVsYXRpdmVNaWRkbGV3YXJlQW5jaG9yPElucHV0LCBPdXRwdXQ+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlbGF0aXZlRW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgeyBwcmV2LCBuZXh0IH0gPSB0aGlzLnJlbGF0aXZlRW50cmllc1tpXTtcbiAgICAgIGNvbnN0IHJlc29sdmVkQ3VyciA9IG5vcm1hbGl6ZWRbaV07XG4gICAgICAvL2VpdGhlciBwcmV2IG9yIG5leHQgaXMgc2V0XG4gICAgICBpZiAocHJldikge1xuICAgICAgICBpZiAoYWJzb2x1dGVNaWRkbGV3YXJlTmFtZXNNYXBbcHJldl0gJiYgYWJzb2x1dGVNaWRkbGV3YXJlTmFtZXNNYXBbcHJldl0uc3RlcCA9PT0gcmVzb2x2ZWRDdXJyLnN0ZXApIHtcbiAgICAgICAgICBpZiAoIWFuY2hvcnNbcHJldl0pIGFuY2hvcnNbcHJldl0gPSB7fTtcbiAgICAgICAgICByZXNvbHZlZEN1cnIubmV4dCA9IGFuY2hvcnNbcHJldl0ubmV4dDtcbiAgICAgICAgICBpZiAoYW5jaG9yc1twcmV2XS5uZXh0KSBhbmNob3JzW3ByZXZdLm5leHQhLnByZXYgPSByZXNvbHZlZEN1cnI7XG4gICAgICAgICAgYW5jaG9yc1twcmV2XS5uZXh0ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aXZlTWlkZGxld2FyZU5hbWVzTWFwW3ByZXZdICYmIHJlbGF0aXZlTWlkZGxld2FyZU5hbWVzTWFwW3ByZXZdLnN0ZXAgPT09IHJlc29sdmVkQ3Vyci5zdGVwKSB7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRQcmV2ID0gcmVsYXRpdmVNaWRkbGV3YXJlTmFtZXNNYXBbcHJldl07XG4gICAgICAgICAgaWYgKHJlc29sdmVkUHJldi5uZXh0ID09PSByZXNvbHZlZEN1cnIpIGNvbnRpbnVlO1xuICAgICAgICAgIHJlc29sdmVkQ3Vyci5uZXh0ID0gcmVzb2x2ZWRQcmV2Lm5leHQ7XG4gICAgICAgICAgcmVzb2x2ZWRQcmV2Lm5leHQgPSByZXNvbHZlZEN1cnI7XG4gICAgICAgICAgaWYgKHJlc29sdmVkQ3Vyci5uZXh0KSByZXNvbHZlZEN1cnIubmV4dC5wcmV2ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICAgIHJlc29sdmVkQ3Vyci5wcmV2ID0gcmVzb2x2ZWRQcmV2O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5leHQpIHtcbiAgICAgICAgaWYgKGFic29sdXRlTWlkZGxld2FyZU5hbWVzTWFwW25leHRdICYmIGFic29sdXRlTWlkZGxld2FyZU5hbWVzTWFwW25leHRdLnN0ZXAgPT09IHJlc29sdmVkQ3Vyci5zdGVwKSB7XG4gICAgICAgICAgaWYgKCFhbmNob3JzW25leHRdKSBhbmNob3JzW25leHRdID0ge307XG4gICAgICAgICAgcmVzb2x2ZWRDdXJyLnByZXYgPSBhbmNob3JzW25leHRdLnByZXY7XG4gICAgICAgICAgaWYgKGFuY2hvcnNbbmV4dF0ucHJldikgYW5jaG9yc1tuZXh0XS5wcmV2IS5uZXh0ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICAgIGFuY2hvcnNbbmV4dF0ucHJldiA9IHJlc29sdmVkQ3VycjtcbiAgICAgICAgfSBlbHNlIGlmIChyZWxhdGl2ZU1pZGRsZXdhcmVOYW1lc01hcFtuZXh0XSAmJiByZWxhdGl2ZU1pZGRsZXdhcmVOYW1lc01hcFtuZXh0XS5zdGVwID09PSByZXNvbHZlZEN1cnIuc3RlcCkge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkTmV4dCA9IHJlbGF0aXZlTWlkZGxld2FyZU5hbWVzTWFwW25leHRdO1xuICAgICAgICAgIGlmIChyZXNvbHZlZE5leHQucHJldiA9PT0gcmVzb2x2ZWRDdXJyKSBjb250aW51ZTtcbiAgICAgICAgICByZXNvbHZlZEN1cnIucHJldiA9IHJlc29sdmVkTmV4dC5wcmV2O1xuICAgICAgICAgIHJlc29sdmVkTmV4dC5wcmV2ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICAgIGlmIChyZXNvbHZlZEN1cnIucHJldikgcmVzb2x2ZWRDdXJyLnByZXYubmV4dCA9IHJlc29sdmVkQ3VycjtcbiAgICAgICAgICByZXNvbHZlZEN1cnIubmV4dCA9IHJlc29sdmVkTmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBnZXQgdGhlIGhlYWQgb2YgdGhlIHJlbGF0aXZlIG1pZGRsZXdhcmUgbGlua2VkIGxpc3QgdGhhdCBoYXZlXG4gICAgLy8gbm8gdHJhbnNpdGl2ZSByZWxhdGlvbiB0byBhYnNvbHV0ZSBtaWRkbGV3YXJlLlxuICAgIGNvbnN0IG9ycGhhbmVkUmVsYXRpdmVFbnRyaWVzOiBBcnJheTxOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCwgT3V0cHV0Pj4gPSBbXTtcbiAgICBjb25zdCB2aXNpdGVkOiBXZWFrU2V0PE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+PiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZm9yIChjb25zdCBhbmNob3JOYW1lIG9mIE9iamVjdC5rZXlzKGFuY2hvcnMpKSB7XG4gICAgICBsZXQgeyBwcmV2LCBuZXh0IH0gPSBhbmNob3JzW2FuY2hvck5hbWVdO1xuICAgICAgd2hpbGUgKHByZXYpIHtcbiAgICAgICAgdmlzaXRlZC5hZGQocHJldik7XG4gICAgICAgIHByZXYgPSBwcmV2LnByZXY7XG4gICAgICB9XG4gICAgICB3aGlsZSAobmV4dCkge1xuICAgICAgICB2aXNpdGVkLmFkZChuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub3JtYWxpemVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZW50cnk6IE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+IHwgdW5kZWZpbmVkID0gbm9ybWFsaXplZFtpXTtcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhlbnRyeSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFlbnRyeS5wcmV2KSBvcnBoYW5lZFJlbGF0aXZlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgIHdoaWxlIChlbnRyeSAmJiAhdmlzaXRlZC5oYXMoZW50cnkpKSB7XG4gICAgICAgIHZpc2l0ZWQuYWRkKGVudHJ5KTtcbiAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW29ycGhhbmVkUmVsYXRpdmVFbnRyaWVzLCBhbmNob3JzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBmaW5hbCBsaXN0IG9mIG1pZGRsZXdhcmUgaW4gdGhlIG9yZGVyIG9mIGJlaW5nIGV4ZWN1dGVkIGluIHRoZSByZXNvbHZlZCBoYW5kbGVyLlxuICAgKiBJZiByZWxhdGl2ZSBlbnRyaWVzIGxpc3QgaXMgbm90IGVtcHR5LCB0aG9zZSBlbnRyaWVzIHdpbGwgYmUgYWRkZWQgdG8gZmluYWwgbWlkZGxld2FyZVxuICAgKiBsaXN0IHdpdGggcnVsZXMgYmVsb3c6XG4gICAqIDEuIGlmIGB0b01pZGRsZXdhcmVgIGV4aXN0cyBpbiB0aGUgc3BlY2lmaWMgYHN0ZXBgLCB0aGUgbWlkZGxld2FyZSB3aWxsIGJlIGluc2VydGVkIGJlZm9yZVxuICAgKiAgICAgb3IgYWZ0ZXIgdGhlIHNwZWNpZmllZCBgdG9NaWRkbGV3YXJlYFxuICAgKiAyLiBpZiBgdG9NaWRkbGV3YXJlYCBkb2Vzbid0IGV4aXN0IGluIHRoZSBzcGVjaWZpYyBgc3RlcGAsIHRoZSBtaWRkbGV3YXJlIHdpbGwgYmUgYXBwZW5kZWRcbiAgICogICAgIHRvIHNwZWNpZmljIGBzdGVwYCB3aXRoIHByaW9yaXR5IG9mIGBub3JtYWxgXG4gICAqL1xuICBwcml2YXRlIGdldE1pZGRsZXdhcmVMaXN0KCk6IEFycmF5PE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+PiB7XG4gICAgY29uc3QgbWlkZGxld2FyZUxpc3Q6IEFycmF5PE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+PiA9IFtdO1xuICAgIGNvbnN0IFtvcnBoYW5lZFJlbGF0aXZlRW50cmllcywgYW5jaG9yc10gPSB0aGlzLm5vcm1hbGl6ZVJlbGF0aXZlRW50cmllcygpO1xuICAgIGxldCBlbnRyeUxpc3QgPSBbLi4udGhpcy5hYnNvbHV0ZUVudHJpZXMsIC4uLm9ycGhhbmVkUmVsYXRpdmVFbnRyaWVzXTtcbiAgICBlbnRyeUxpc3QgPSB0aGlzLnNvcnQoZW50cnlMaXN0KTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJ5TGlzdCkge1xuICAgICAgY29uc3QgZGVmYXVsdEFuY2hvclZhbHVlID0geyBwcmV2OiB1bmRlZmluZWQsIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgY29uc3QgeyBwcmV2LCBuZXh0IH0gPSBlbnRyeS5uYW1lID8gYW5jaG9yc1tlbnRyeS5uYW1lXSB8fCBkZWZhdWx0QW5jaG9yVmFsdWUgOiBkZWZhdWx0QW5jaG9yVmFsdWU7XG4gICAgICBsZXQgcmVsYXRpdmVFbnRyeSA9IHByZXY7XG4gICAgICAvL3JldmVyc2UgcmVsYXRpdmUgZW50cnkgbGlua2VkIGxpc3QgYW5kIGFkZCB0byBvcmRlcmVkIGhhbmRsZXIgbGlzdFxuICAgICAgd2hpbGUgKHJlbGF0aXZlRW50cnk/LnByZXYpIHtcbiAgICAgICAgcmVsYXRpdmVFbnRyeSA9IHJlbGF0aXZlRW50cnkucHJldjtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChyZWxhdGl2ZUVudHJ5KSB7XG4gICAgICAgIG1pZGRsZXdhcmVMaXN0LnB1c2gocmVsYXRpdmVFbnRyeS5taWRkbGV3YXJlKTtcbiAgICAgICAgcmVsYXRpdmVFbnRyeSA9IHJlbGF0aXZlRW50cnkubmV4dDtcbiAgICAgIH1cbiAgICAgIG1pZGRsZXdhcmVMaXN0LnB1c2goZW50cnkubWlkZGxld2FyZSk7XG4gICAgICBsZXQgb3JwaGFuZWRFbnRyeSA9IGVudHJ5IGFzIGFueTtcbiAgICAgIHdoaWxlICgob3JwaGFuZWRFbnRyeSBhcyBhbnkpLm5leHQpIHtcbiAgICAgICAgbWlkZGxld2FyZUxpc3QucHVzaCgob3JwaGFuZWRFbnRyeSBhcyBhbnkpLm5leHQubWlkZGxld2FyZSk7XG4gICAgICAgIG9ycGhhbmVkRW50cnkgPSAob3JwaGFuZWRFbnRyeSBhcyBhbnkpLm5leHQ7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZUVudHJ5ID0gbmV4dDtcbiAgICAgIHdoaWxlIChyZWxhdGl2ZUVudHJ5KSB7XG4gICAgICAgIG1pZGRsZXdhcmVMaXN0LnB1c2gocmVsYXRpdmVFbnRyeS5taWRkbGV3YXJlKTtcbiAgICAgICAgcmVsYXRpdmVFbnRyeSA9IHJlbGF0aXZlRW50cnkubmV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1pZGRsZXdhcmVMaXN0LnJldmVyc2UoKTtcbiAgfVxuXG4gIHJlc29sdmU8SW5wdXRUeXBlIGV4dGVuZHMgSW5wdXQsIE91dHB1dFR5cGUgZXh0ZW5kcyBPdXRwdXQ+KFxuICAgIGhhbmRsZXI6IERlc2VyaWFsaXplSGFuZGxlcjxJbnB1dFR5cGUsIE91dHB1dFR5cGU+LFxuICAgIGNvbnRleHQ6IEhhbmRsZXJFeGVjdXRpb25Db250ZXh0XG4gICk6IEhhbmRsZXI8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPiB7XG4gICAgZm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMuZ2V0TWlkZGxld2FyZUxpc3QoKSkge1xuICAgICAgaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlciBhcyBIYW5kbGVyPElucHV0LCBPdXRwdXRUeXBlPiwgY29udGV4dCkgYXMgYW55O1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGVyIGFzIEhhbmRsZXI8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPjtcbiAgfVxufVxuXG5jb25zdCBzdGVwV2VpZ2h0czogeyBba2V5IGluIFN0ZXBdOiBudW1iZXIgfSA9IHtcbiAgaW5pdGlhbGl6ZTogNSxcbiAgc2VyaWFsaXplOiA0LFxuICBidWlsZDogMyxcbiAgZmluYWxpemVSZXF1ZXN0OiAyLFxuICBkZXNlcmlhbGl6ZTogMSxcbn07XG5cbmNvbnN0IHByaW9yaXR5V2VpZ2h0czogeyBba2V5IGluIFByaW9yaXR5XTogbnVtYmVyIH0gPSB7XG4gIGhpZ2g6IDMsXG4gIG5vcm1hbDogMixcbiAgbG93OiAxLFxufTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./MiddlewareStack\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNERBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vTWlkZGxld2FyZVN0YWNrXCI7XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveUserAgentConfig = void 0;\nfunction resolveUserAgentConfig(input) {\n    return input;\n}\nexports.resolveUserAgentConfig = resolveUserAgentConfig;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlndXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsU0FBZ0Isc0JBQXNCLENBQ3BDLEtBQW9EO0lBRXBELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUpELHdEQUlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBVc2VyQWdlbnRJbnB1dENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHVzZXIgYWdlbnQgaGVhZGVyIHRoYXQgd291bGQgYmUgYXBwZW5kZWQgdG8gZGVmYXVsdCBvbmVcbiAgICovXG4gIGN1c3RvbVVzZXJBZ2VudD86IHN0cmluZztcbn1cbmludGVyZmFjZSBQcmV2aW91c2x5UmVzb2x2ZWQge1xuICBkZWZhdWx0VXNlckFnZW50OiBzdHJpbmc7XG4gIHJ1bnRpbWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFnZW50UmVzb2x2ZWRDb25maWcge1xuICBkZWZhdWx0VXNlckFnZW50OiBzdHJpbmc7XG4gIGN1c3RvbVVzZXJBZ2VudD86IHN0cmluZztcbiAgcnVudGltZTogc3RyaW5nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyQWdlbnRDb25maWc8VD4oXG4gIGlucHV0OiBUICYgUHJldmlvdXNseVJlc29sdmVkICYgVXNlckFnZW50SW5wdXRDb25maWdcbik6IFQgJiBVc2VyQWdlbnRSZXNvbHZlZENvbmZpZyB7XG4gIHJldHVybiBpbnB1dDtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./configurations\"), exports);\ntslib_1.__exportStar(require(\"./middleware\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQWlDO0FBQ2pDLHVEQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbmZpZ3VyYXRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9taWRkbGV3YXJlXCI7XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getUserAgentPlugin = exports.getUserAgentMiddlewareOptions = exports.userAgentMiddleware = void 0;\nvar tslib_1 = require(\"tslib\");\nvar protocol_http_1 = require(\"@aws-sdk/protocol-http\");\nfunction userAgentMiddleware(options) {\n    return function (next) { return function (args) {\n        var request = args.request;\n        if (!protocol_http_1.HttpRequest.isInstance(request))\n            return next(args);\n        var headers = request.headers;\n        var userAgentHeader = options.runtime === \"node\" ? \"user-agent\" : \"x-amz-user-agent\";\n        if (!headers[userAgentHeader]) {\n            headers[userAgentHeader] = \"\" + options.defaultUserAgent;\n        }\n        else {\n            headers[userAgentHeader] += \" \" + options.defaultUserAgent;\n        }\n        if (options.customUserAgent) {\n            headers[userAgentHeader] += \" \" + options.customUserAgent;\n        }\n        return next(tslib_1.__assign(tslib_1.__assign({}, args), { request: request }));\n    }; };\n}\nexports.userAgentMiddleware = userAgentMiddleware;\nexports.getUserAgentMiddlewareOptions = {\n    name: \"getUserAgentMiddleware\",\n    step: \"build\",\n    tags: [\"SET_USER_AGENT\", \"USER_AGENT\"],\n};\nexports.getUserAgentPlugin = function (config) { return ({\n    applyToStack: function (clientStack) {\n        clientStack.add(userAgentMiddleware(config), exports.getUserAgentMiddlewareOptions);\n    },\n}); };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx3REFBcUQ7QUFZckQsU0FBZ0IsbUJBQW1CLENBQUMsT0FBZ0M7SUFDbEUsT0FBTyxVQUFnQyxJQUE0QixJQUE2QixPQUFBLFVBQzlGLElBQWdDO1FBRXhCLElBQUEsT0FBTyxHQUFLLElBQUksUUFBVCxDQUFVO1FBQ3pCLElBQUksQ0FBQywyQkFBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFBLE9BQU8sR0FBSyxPQUFPLFFBQVosQ0FBYTtRQUM1QixJQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUN2RixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFHLE9BQU8sQ0FBQyxnQkFBa0IsQ0FBQztTQUMxRDthQUFNO1lBQ0wsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE1BQUksT0FBTyxDQUFDLGdCQUFrQixDQUFDO1NBQzVEO1FBQ0QsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxNQUFJLE9BQU8sQ0FBQyxlQUFpQixDQUFDO1NBQzNEO1FBQ0QsT0FBTyxJQUFJLHVDQUNOLElBQUksS0FDUCxPQUFPLFNBQUEsSUFDUCxDQUFDO0lBQ0wsQ0FBQyxFQW5CK0YsQ0FtQi9GLENBQUM7QUFDSixDQUFDO0FBckJELGtEQXFCQztBQUVZLFFBQUEsNkJBQTZCLEdBQXdCO0lBQ2hFLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsSUFBSSxFQUFFLE9BQU87SUFDYixJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUM7Q0FDdkMsQ0FBQztBQUVXLFFBQUEsa0JBQWtCLEdBQUcsVUFBQyxNQUErQixJQUEwQixPQUFBLENBQUM7SUFDM0YsWUFBWSxFQUFFLFVBQUMsV0FBVztRQUN4QixXQUFXLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLHFDQUE2QixDQUFDLENBQUM7SUFDOUUsQ0FBQztDQUNGLENBQUMsRUFKMEYsQ0FJMUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSBcIkBhd3Mtc2RrL3Byb3RvY29sLWh0dHBcIjtcbmltcG9ydCB7XG4gIEJ1aWxkSGFuZGxlcixcbiAgQnVpbGRIYW5kbGVyQXJndW1lbnRzLFxuICBCdWlsZEhhbmRsZXJPcHRpb25zLFxuICBCdWlsZEhhbmRsZXJPdXRwdXQsXG4gIE1ldGFkYXRhQmVhcmVyLFxuICBQbHVnZ2FibGUsXG59IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5pbXBvcnQgeyBVc2VyQWdlbnRSZXNvbHZlZENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25zXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyQWdlbnRNaWRkbGV3YXJlKG9wdGlvbnM6IFVzZXJBZ2VudFJlc29sdmVkQ29uZmlnKSB7XG4gIHJldHVybiA8T3V0cHV0IGV4dGVuZHMgTWV0YWRhdGFCZWFyZXI+KG5leHQ6IEJ1aWxkSGFuZGxlcjxhbnksIGFueT4pOiBCdWlsZEhhbmRsZXI8YW55LCBhbnk+ID0+IChcbiAgICBhcmdzOiBCdWlsZEhhbmRsZXJBcmd1bWVudHM8YW55PlxuICApOiBQcm9taXNlPEJ1aWxkSGFuZGxlck91dHB1dDxPdXRwdXQ+PiA9PiB7XG4gICAgY29uc3QgeyByZXF1ZXN0IH0gPSBhcmdzO1xuICAgIGlmICghSHR0cFJlcXVlc3QuaXNJbnN0YW5jZShyZXF1ZXN0KSkgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXF1ZXN0O1xuICAgIGNvbnN0IHVzZXJBZ2VudEhlYWRlciA9IG9wdGlvbnMucnVudGltZSA9PT0gXCJub2RlXCIgPyBcInVzZXItYWdlbnRcIiA6IFwieC1hbXotdXNlci1hZ2VudFwiO1xuICAgIGlmICghaGVhZGVyc1t1c2VyQWdlbnRIZWFkZXJdKSB7XG4gICAgICBoZWFkZXJzW3VzZXJBZ2VudEhlYWRlcl0gPSBgJHtvcHRpb25zLmRlZmF1bHRVc2VyQWdlbnR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyc1t1c2VyQWdlbnRIZWFkZXJdICs9IGAgJHtvcHRpb25zLmRlZmF1bHRVc2VyQWdlbnR9YDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY3VzdG9tVXNlckFnZW50KSB7XG4gICAgICBoZWFkZXJzW3VzZXJBZ2VudEhlYWRlcl0gKz0gYCAke29wdGlvbnMuY3VzdG9tVXNlckFnZW50fWA7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KHtcbiAgICAgIC4uLmFyZ3MsXG4gICAgICByZXF1ZXN0LFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VXNlckFnZW50TWlkZGxld2FyZU9wdGlvbnM6IEJ1aWxkSGFuZGxlck9wdGlvbnMgPSB7XG4gIG5hbWU6IFwiZ2V0VXNlckFnZW50TWlkZGxld2FyZVwiLFxuICBzdGVwOiBcImJ1aWxkXCIsXG4gIHRhZ3M6IFtcIlNFVF9VU0VSX0FHRU5UXCIsIFwiVVNFUl9BR0VOVFwiXSxcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyQWdlbnRQbHVnaW4gPSAoY29uZmlnOiBVc2VyQWdlbnRSZXNvbHZlZENvbmZpZyk6IFBsdWdnYWJsZTxhbnksIGFueT4gPT4gKHtcbiAgYXBwbHlUb1N0YWNrOiAoY2xpZW50U3RhY2spID0+IHtcbiAgICBjbGllbnRTdGFjay5hZGQodXNlckFnZW50TWlkZGxld2FyZShjb25maWcpLCBnZXRVc2VyQWdlbnRNaWRkbGV3YXJlT3B0aW9ucyk7XG4gIH0sXG59KTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProviderError = void 0;\nvar tslib_1 = require(\"tslib\");\n/**\n * An error representing a failure of an individual credential provider.\n *\n * This error class has special meaning to the {@link chain} method. If a\n * provider in the chain is rejected with an error, the chain will only proceed\n * to the next provider if the value of the `tryNextLink` property on the error\n * is truthy. This allows individual providers to halt the chain and also\n * ensures the chain will stop if an entirely unexpected error is encountered.\n */\nvar ProviderError = /** @class */ (function (_super) {\n    tslib_1.__extends(ProviderError, _super);\n    function ProviderError(message, tryNextLink) {\n        if (tryNextLink === void 0) { tryNextLink = true; }\n        var _this = _super.call(this, message) || this;\n        _this.tryNextLink = tryNextLink;\n        return _this;\n    }\n    return ProviderError;\n}(Error));\nexports.ProviderError = ProviderError;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXJFcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Qcm92aWRlckVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7Ozs7Ozs7R0FRRztBQUNIO0lBQW1DLHlDQUFLO0lBQ3RDLHVCQUFZLE9BQWUsRUFBa0IsV0FBMkI7UUFBM0IsNEJBQUEsRUFBQSxrQkFBMkI7UUFBeEUsWUFDRSxrQkFBTSxPQUFPLENBQUMsU0FDZjtRQUY0QyxpQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7O0lBRXhFLENBQUM7SUFDSCxvQkFBQztBQUFELENBQUMsQUFKRCxDQUFtQyxLQUFLLEdBSXZDO0FBSlksc0NBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuIGVycm9yIHJlcHJlc2VudGluZyBhIGZhaWx1cmUgb2YgYW4gaW5kaXZpZHVhbCBjcmVkZW50aWFsIHByb3ZpZGVyLlxuICpcbiAqIFRoaXMgZXJyb3IgY2xhc3MgaGFzIHNwZWNpYWwgbWVhbmluZyB0byB0aGUge0BsaW5rIGNoYWlufSBtZXRob2QuIElmIGFcbiAqIHByb3ZpZGVyIGluIHRoZSBjaGFpbiBpcyByZWplY3RlZCB3aXRoIGFuIGVycm9yLCB0aGUgY2hhaW4gd2lsbCBvbmx5IHByb2NlZWRcbiAqIHRvIHRoZSBuZXh0IHByb3ZpZGVyIGlmIHRoZSB2YWx1ZSBvZiB0aGUgYHRyeU5leHRMaW5rYCBwcm9wZXJ0eSBvbiB0aGUgZXJyb3JcbiAqIGlzIHRydXRoeS4gVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBwcm92aWRlcnMgdG8gaGFsdCB0aGUgY2hhaW4gYW5kIGFsc29cbiAqIGVuc3VyZXMgdGhlIGNoYWluIHdpbGwgc3RvcCBpZiBhbiBlbnRpcmVseSB1bmV4cGVjdGVkIGVycm9yIGlzIGVuY291bnRlcmVkLlxuICovXG5leHBvcnQgY2xhc3MgUHJvdmlkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgdHJ5TmV4dExpbms6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.chain = void 0;\nvar tslib_1 = require(\"tslib\");\nvar ProviderError_1 = require(\"./ProviderError\");\n/**\n * Compose a single credential provider function from multiple credential\n * providers. The first provider in the argument list will always be invoked;\n * subsequent providers in the list will be invoked in the order in which the\n * were received if the preceding provider did not successfully resolve.\n *\n * If no providers were received or no provider resolves successfully, the\n * returned promise will be rejected.\n */\nfunction chain() {\n    var providers = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        providers[_i] = arguments[_i];\n    }\n    return function () {\n        var e_1, _a;\n        var promise = Promise.reject(new ProviderError_1.ProviderError(\"No providers in chain\"));\n        var _loop_1 = function (provider) {\n            promise = promise.catch(function (err) {\n                if (err === null || err === void 0 ? void 0 : err.tryNextLink) {\n                    return provider();\n                }\n                throw err;\n            });\n        };\n        try {\n            for (var providers_1 = tslib_1.__values(providers), providers_1_1 = providers_1.next(); !providers_1_1.done; providers_1_1 = providers_1.next()) {\n                var provider = providers_1_1.value;\n                _loop_1(provider);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (providers_1_1 && !providers_1_1.done && (_a = providers_1.return)) _a.call(providers_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return promise;\n    };\n}\nexports.chain = chain;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLGlEQUFnRDtBQUVoRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLEtBQUs7SUFBSSxtQkFBZ0M7U0FBaEMsVUFBZ0MsRUFBaEMscUJBQWdDLEVBQWhDLElBQWdDO1FBQWhDLDhCQUFnQzs7SUFDdkQsT0FBTzs7UUFDTCxJQUFJLE9BQU8sR0FBZSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksNkJBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7Z0NBQzFFLFFBQVE7WUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBQyxHQUFRO2dCQUMvQixJQUFJLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxXQUFXLEVBQUU7b0JBQ3BCLE9BQU8sUUFBUSxFQUFFLENBQUM7aUJBQ25CO2dCQUVELE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7OztZQVBMLEtBQXVCLElBQUEsY0FBQSxpQkFBQSxTQUFTLENBQUEsb0NBQUE7Z0JBQTNCLElBQU0sUUFBUSxzQkFBQTt3QkFBUixRQUFRO2FBUWxCOzs7Ozs7Ozs7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7QUFDSixDQUFDO0FBZkQsc0JBZUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5pbXBvcnQgeyBQcm92aWRlckVycm9yIH0gZnJvbSBcIi4vUHJvdmlkZXJFcnJvclwiO1xuXG4vKipcbiAqIENvbXBvc2UgYSBzaW5nbGUgY3JlZGVudGlhbCBwcm92aWRlciBmdW5jdGlvbiBmcm9tIG11bHRpcGxlIGNyZWRlbnRpYWxcbiAqIHByb3ZpZGVycy4gVGhlIGZpcnN0IHByb3ZpZGVyIGluIHRoZSBhcmd1bWVudCBsaXN0IHdpbGwgYWx3YXlzIGJlIGludm9rZWQ7XG4gKiBzdWJzZXF1ZW50IHByb3ZpZGVycyBpbiB0aGUgbGlzdCB3aWxsIGJlIGludm9rZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZVxuICogd2VyZSByZWNlaXZlZCBpZiB0aGUgcHJlY2VkaW5nIHByb3ZpZGVyIGRpZCBub3Qgc3VjY2Vzc2Z1bGx5IHJlc29sdmUuXG4gKlxuICogSWYgbm8gcHJvdmlkZXJzIHdlcmUgcmVjZWl2ZWQgb3Igbm8gcHJvdmlkZXIgcmVzb2x2ZXMgc3VjY2Vzc2Z1bGx5LCB0aGVcbiAqIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluPFQ+KC4uLnByb3ZpZGVyczogQXJyYXk8UHJvdmlkZXI8VD4+KTogUHJvdmlkZXI8VD4ge1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGxldCBwcm9taXNlOiBQcm9taXNlPFQ+ID0gUHJvbWlzZS5yZWplY3QobmV3IFByb3ZpZGVyRXJyb3IoXCJObyBwcm92aWRlcnMgaW4gY2hhaW5cIikpO1xuICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgcHJvdmlkZXJzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVycj8udHJ5TmV4dExpbmspIHtcbiAgICAgICAgICByZXR1cm4gcHJvdmlkZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromStatic = void 0;\nexports.fromStatic = function (staticValue) { return function () { return Promise.resolve(staticValue); }; };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbVN0YXRpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mcm9tU3RhdGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVhLFFBQUEsVUFBVSxHQUFHLFVBQUksV0FBYyxJQUFrQixPQUFBLGNBQU0sT0FBQSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUE1QixDQUE0QixFQUFsQyxDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IGZyb21TdGF0aWMgPSA8VD4oc3RhdGljVmFsdWU6IFQpOiBQcm92aWRlcjxUPiA9PiAoKSA9PiBQcm9taXNlLnJlc29sdmUoc3RhdGljVmFsdWUpO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./chain\"), exports);\ntslib_1.__exportStar(require(\"./fromStatic\"), exports);\ntslib_1.__exportStar(require(\"./memoize\"), exports);\ntslib_1.__exportStar(require(\"./ProviderError\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBQXdCO0FBQ3hCLHVEQUE2QjtBQUM3QixvREFBMEI7QUFDMUIsMERBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY2hhaW5cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Zyb21TdGF0aWNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21lbW9pemVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Byb3ZpZGVyRXJyb3JcIjtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.memoize = void 0;\nvar tslib_1 = require(\"tslib\");\nexports.memoize = function (provider, isExpired, requiresRefresh) {\n    if (isExpired === undefined) {\n        // This is a static memoization; no need to incorporate refreshing\n        var result_1 = provider();\n        return function () { return result_1; };\n    }\n    var result = provider();\n    var isConstant = false;\n    return function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {\n        var resolved;\n        return tslib_1.__generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    if (isConstant) {\n                        return [2 /*return*/, result];\n                    }\n                    return [4 /*yield*/, result];\n                case 1:\n                    resolved = _a.sent();\n                    if (requiresRefresh && !requiresRefresh(resolved)) {\n                        isConstant = true;\n                        return [2 /*return*/, resolved];\n                    }\n                    if (isExpired(resolved)) {\n                        return [2 /*return*/, (result = provider())];\n                    }\n                    return [2 /*return*/, resolved];\n            }\n        });\n    }); };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZW1vaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUF3Q2EsUUFBQSxPQUFPLEdBQW9CLFVBQ3RDLFFBQXFCLEVBQ3JCLFNBQW9DLEVBQ3BDLGVBQTBDO0lBRTFDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtRQUMzQixrRUFBa0U7UUFDbEUsSUFBTSxRQUFNLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDMUIsT0FBTyxjQUFNLE9BQUEsUUFBTSxFQUFOLENBQU0sQ0FBQztLQUNyQjtJQUVELElBQUksTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3hCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUV2QixPQUFPOzs7OztvQkFDTCxJQUFJLFVBQVUsRUFBRTt3QkFDZCxzQkFBTyxNQUFNLEVBQUM7cUJBQ2Y7b0JBRWdCLHFCQUFNLE1BQU0sRUFBQTs7b0JBQXZCLFFBQVEsR0FBRyxTQUFZO29CQUM3QixJQUFJLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDakQsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDbEIsc0JBQU8sUUFBUSxFQUFDO3FCQUNqQjtvQkFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDdkIsc0JBQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBQztxQkFDOUI7b0JBQ0Qsc0JBQU8sUUFBUSxFQUFDOzs7U0FDakIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmludGVyZmFjZSBNZW1vaXplT3ZlcmxvYWQge1xuICAvKipcbiAgICpcbiAgICogRGVjb3JhdGVzIGEgcHJvdmlkZXIgZnVuY3Rpb24gd2l0aCBlaXRoZXIgc3RhdGljIG1lbW9pemF0aW9uLlxuICAgKlxuICAgKiBUbyBjcmVhdGUgYSBzdGF0aWNhbGx5IG1lbW9pemVkIHByb3ZpZGVyLCBzdXBwbHkgYSBwcm92aWRlciBhcyB0aGUgb25seVxuICAgKiBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uLiBUaGUgcHJvdmlkZXIgd2lsbCBiZSBpbnZva2VkIG9uY2UsIGFuZCBhbGxcbiAgICogaW52b2NhdGlvbnMgb2YgdGhlIHByb3ZpZGVyIHJldHVybmVkIGJ5IGBtZW1vaXplYCB3aWxsIHJldHVybiB0aGUgc2FtZVxuICAgKiBwcm9taXNlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVyIFRoZSBwcm92aWRlciB3aG9zZSByZXN1bHQgc2hvdWxkIGJlIGNhY2hlZCBpbmRlZmluaXRlbHkuXG4gICAqL1xuICA8VD4ocHJvdmlkZXI6IFByb3ZpZGVyPFQ+KTogUHJvdmlkZXI8VD47XG5cbiAgLyoqXG4gICAqIERlY29yYXRlcyBhIHByb3ZpZGVyIGZ1bmN0aW9uIHdpdGggcmVmcmVzaGluZyBtZW1vaXphdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVyICAgICAgICAgIFRoZSBwcm92aWRlciB3aG9zZSByZXN1bHQgc2hvdWxkIGJlIGNhY2hlZC5cbiAgICogQHBhcmFtIGlzRXhwaXJlZCAgICAgICAgIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGV2YWx1YXRlIHRoZSByZXNvbHZlZCB2YWx1ZSBhbmRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSBpZiBpdCBpcyBleHBpcmVkLiBGb3IgZXhhbXBsZSwgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6aW5nIEFXUyBjcmVkZW50aWFsIHByb3ZpZGVycywgdGhpcyBmdW5jdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJldHVybiBgdHJ1ZWAgd2hlbiB0aGUgY3JlZGVudGlhbCdzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uIGlzIGluIHRoZSBwYXN0IChvciB2ZXJ5IG5lYXIgZnV0dXJlKSBhbmRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKiBAcGFyYW0gcmVxdWlyZXNSZWZyZXNoICAgQSBmdW5jdGlvbiB0aGF0IHdpbGwgZXZhbHVhdGUgdGhlIHJlc29sdmVkIHZhbHVlIGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIGlmIGl0IHJlcHJlc2VudHMgc3RhdGljIHZhbHVlIG9yIG9uZSB0aGF0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGV2ZW50dWFsbHkgbmVlZCB0byBiZSByZWZyZXNoZWQuIEZvciBleGFtcGxlLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQVdTIGNyZWRlbnRpYWxzIHRoYXQgaGF2ZSBubyBkZWZpbmVkIGV4cGlyYXRpb24gd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV2ZXIgbmVlZCB0byBiZSByZWZyZXNoZWQsIHNvIHRoaXMgZnVuY3Rpb24gd291bGRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgdHJ1ZWAgaWYgdGhlIGNyZWRlbnRpYWxzIHJlc29sdmVkIGJ5IHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJseWluZyBwcm92aWRlciBoYWQgYW4gZXhwaXJhdGlvbiBhbmQgYGZhbHNlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgPFQ+KHByb3ZpZGVyOiBQcm92aWRlcjxUPiwgaXNFeHBpcmVkOiAocmVzb2x2ZWQ6IFQpID0+IGJvb2xlYW4sIHJlcXVpcmVzUmVmcmVzaD86IChyZXNvbHZlZDogVCkgPT4gYm9vbGVhbik6IFByb3ZpZGVyPFxuICAgIFRcbiAgPjtcbn1cblxuZXhwb3J0IGNvbnN0IG1lbW9pemU6IE1lbW9pemVPdmVybG9hZCA9IDxUPihcbiAgcHJvdmlkZXI6IFByb3ZpZGVyPFQ+LFxuICBpc0V4cGlyZWQ/OiAocmVzb2x2ZWQ6IFQpID0+IGJvb2xlYW4sXG4gIHJlcXVpcmVzUmVmcmVzaD86IChyZXNvbHZlZDogVCkgPT4gYm9vbGVhblxuKTogUHJvdmlkZXI8VD4gPT4ge1xuICBpZiAoaXNFeHBpcmVkID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3RhdGljIG1lbW9pemF0aW9uOyBubyBuZWVkIHRvIGluY29ycG9yYXRlIHJlZnJlc2hpbmdcbiAgICBjb25zdCByZXN1bHQgPSBwcm92aWRlcigpO1xuICAgIHJldHVybiAoKSA9PiByZXN1bHQ7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gcHJvdmlkZXIoKTtcbiAgbGV0IGlzQ29uc3RhbnQgPSBmYWxzZTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0NvbnN0YW50KSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzdWx0O1xuICAgIGlmIChyZXF1aXJlc1JlZnJlc2ggJiYgIXJlcXVpcmVzUmVmcmVzaChyZXNvbHZlZCkpIHtcbiAgICAgIGlzQ29uc3RhbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgIH1cbiAgICBpZiAoaXNFeHBpcmVkKHJlc29sdmVkKSkge1xuICAgICAgcmV0dXJuIChyZXN1bHQgPSBwcm92aWRlcigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9O1xufTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIYW5kbGVyT3B0aW9ucywgUmVxdWVzdEhhbmRsZXIgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tIFwiLi9odHRwUmVxdWVzdFwiO1xuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIi4vaHR0cFJlc3BvbnNlXCI7XG5cbmV4cG9ydCB0eXBlIEh0dHBIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXI8SHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSwgSHR0cEhhbmRsZXJPcHRpb25zPjtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpRequest = void 0;\nvar tslib_1 = require(\"tslib\");\nvar HttpRequest = /** @class */ (function () {\n    function HttpRequest(options) {\n        this.method = options.method || \"GET\";\n        this.hostname = options.hostname || \"localhost\";\n        this.port = options.port;\n        this.query = options.query || {};\n        this.headers = options.headers || {};\n        this.body = options.body;\n        this.protocol = options.protocol\n            ? options.protocol.substr(-1) !== \":\"\n                ? options.protocol + \":\"\n                : options.protocol\n            : \"https:\";\n        this.path = options.path ? (options.path.charAt(0) !== \"/\" ? \"/\" + options.path : options.path) : \"/\";\n    }\n    HttpRequest.isInstance = function (request) {\n        //determine if request is a valid httpRequest\n        if (!request)\n            return false;\n        var req = request;\n        return (\"method\" in req &&\n            \"protocol\" in req &&\n            \"hostname\" in req &&\n            \"path\" in req &&\n            typeof req[\"query\"] === \"object\" &&\n            typeof req[\"headers\"] === \"object\");\n    };\n    HttpRequest.prototype.clone = function () {\n        var cloned = new HttpRequest(tslib_1.__assign(tslib_1.__assign({}, this), { headers: tslib_1.__assign({}, this.headers) }));\n        if (cloned.query)\n            cloned.query = cloneQuery(cloned.query);\n        return cloned;\n    };\n    return HttpRequest;\n}());\nexports.HttpRequest = HttpRequest;\nfunction cloneQuery(query) {\n    return Object.keys(query).reduce(function (carry, paramName) {\n        var _a;\n        var param = query[paramName];\n        return tslib_1.__assign(tslib_1.__assign({}, carry), (_a = {}, _a[paramName] = Array.isArray(param) ? tslib_1.__spread(param) : param, _a));\n    }, {});\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cFJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cFJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQU1BO0lBVUUscUJBQVksT0FBMkI7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVE7WUFDOUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztnQkFDbkMsQ0FBQyxDQUFJLE9BQU8sQ0FBQyxRQUFRLE1BQUc7Z0JBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUNwQixDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBSSxPQUFPLENBQUMsSUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN4RyxDQUFDO0lBRU0sc0JBQVUsR0FBakIsVUFBa0IsT0FBZ0I7UUFDaEMsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0IsSUFBTSxHQUFHLEdBQVEsT0FBTyxDQUFDO1FBQ3pCLE9BQU8sQ0FDTCxRQUFRLElBQUksR0FBRztZQUNmLFVBQVUsSUFBSSxHQUFHO1lBQ2pCLFVBQVUsSUFBSSxHQUFHO1lBQ2pCLE1BQU0sSUFBSSxHQUFHO1lBQ2IsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUTtZQUNoQyxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRLENBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsMkJBQUssR0FBTDtRQUNFLElBQU0sTUFBTSxHQUFHLElBQUksV0FBVyx1Q0FDekIsSUFBSSxLQUNQLE9BQU8sdUJBQU8sSUFBSSxDQUFDLE9BQU8sS0FDMUIsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLEtBQUs7WUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FBQyxBQS9DRCxJQStDQztBQS9DWSxrQ0FBVztBQWlEeEIsU0FBUyxVQUFVLENBQUMsS0FBd0I7SUFDMUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEtBQXdCLEVBQUUsU0FBaUI7O1FBQzNFLElBQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQiw2Q0FDSyxLQUFLLGdCQUNQLFNBQVMsSUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQ3REO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVuZHBvaW50LCBIZWFkZXJCYWcsIEh0dHBNZXNzYWdlLCBIdHRwUmVxdWVzdCBhcyBJSHR0cFJlcXVlc3QsUXVlcnlQYXJhbWV0ZXJCYWcgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxudHlwZSBIdHRwUmVxdWVzdE9wdGlvbnMgPSBQYXJ0aWFsPEh0dHBNZXNzYWdlPiAmIFBhcnRpYWw8RW5kcG9pbnQ+ICYgeyBtZXRob2Q/OiBzdHJpbmcgfTtcblxuZXhwb3J0IGludGVyZmFjZSBIdHRwUmVxdWVzdCBleHRlbmRzIElIdHRwUmVxdWVzdCB7fVxuXG5leHBvcnQgY2xhc3MgSHR0cFJlcXVlc3QgaW1wbGVtZW50cyBIdHRwTWVzc2FnZSwgRW5kcG9pbnQge1xuICBwdWJsaWMgbWV0aG9kOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm90b2NvbDogc3RyaW5nO1xuICBwdWJsaWMgaG9zdG5hbWU6IHN0cmluZztcbiAgcHVibGljIHBvcnQ/OiBudW1iZXI7XG4gIHB1YmxpYyBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBxdWVyeTogUXVlcnlQYXJhbWV0ZXJCYWc7XG4gIHB1YmxpYyBoZWFkZXJzOiBIZWFkZXJCYWc7XG4gIHB1YmxpYyBib2R5PzogYW55O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEh0dHBSZXF1ZXN0T3B0aW9ucykge1xuICAgIHRoaXMubWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgXCJHRVRcIjtcbiAgICB0aGlzLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0bmFtZSB8fCBcImxvY2FsaG9zdFwiO1xuICAgIHRoaXMucG9ydCA9IG9wdGlvbnMucG9ydDtcbiAgICB0aGlzLnF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSB8fCB7fTtcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgdGhpcy5ib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgIHRoaXMucHJvdG9jb2wgPSBvcHRpb25zLnByb3RvY29sXG4gICAgICA/IG9wdGlvbnMucHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gXCI6XCJcbiAgICAgICAgPyBgJHtvcHRpb25zLnByb3RvY29sfTpgXG4gICAgICAgIDogb3B0aW9ucy5wcm90b2NvbFxuICAgICAgOiBcImh0dHBzOlwiO1xuICAgIHRoaXMucGF0aCA9IG9wdGlvbnMucGF0aCA/IChvcHRpb25zLnBhdGguY2hhckF0KDApICE9PSBcIi9cIiA/IGAvJHtvcHRpb25zLnBhdGh9YCA6IG9wdGlvbnMucGF0aCkgOiBcIi9cIjtcbiAgfVxuXG4gIHN0YXRpYyBpc0luc3RhbmNlKHJlcXVlc3Q6IHVua25vd24pOiByZXF1ZXN0IGlzIEh0dHBSZXF1ZXN0IHtcbiAgICAvL2RldGVybWluZSBpZiByZXF1ZXN0IGlzIGEgdmFsaWQgaHR0cFJlcXVlc3RcbiAgICBpZiAoIXJlcXVlc3QpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCByZXE6IGFueSA9IHJlcXVlc3Q7XG4gICAgcmV0dXJuIChcbiAgICAgIFwibWV0aG9kXCIgaW4gcmVxICYmXG4gICAgICBcInByb3RvY29sXCIgaW4gcmVxICYmXG4gICAgICBcImhvc3RuYW1lXCIgaW4gcmVxICYmXG4gICAgICBcInBhdGhcIiBpbiByZXEgJiZcbiAgICAgIHR5cGVvZiByZXFbXCJxdWVyeVwiXSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdHlwZW9mIHJlcVtcImhlYWRlcnNcIl0gPT09IFwib2JqZWN0XCJcbiAgICApO1xuICB9XG5cbiAgY2xvbmUoKTogSHR0cFJlcXVlc3Qge1xuICAgIGNvbnN0IGNsb25lZCA9IG5ldyBIdHRwUmVxdWVzdCh7XG4gICAgICAuLi50aGlzLFxuICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMgfSxcbiAgICB9KTtcbiAgICBpZiAoY2xvbmVkLnF1ZXJ5KSBjbG9uZWQucXVlcnkgPSBjbG9uZVF1ZXJ5KGNsb25lZC5xdWVyeSk7XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZVF1ZXJ5KHF1ZXJ5OiBRdWVyeVBhcmFtZXRlckJhZyk6IFF1ZXJ5UGFyYW1ldGVyQmFnIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGNhcnJ5OiBRdWVyeVBhcmFtZXRlckJhZywgcGFyYW1OYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwYXJhbSA9IHF1ZXJ5W3BhcmFtTmFtZV07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNhcnJ5LFxuICAgICAgW3BhcmFtTmFtZV06IEFycmF5LmlzQXJyYXkocGFyYW0pID8gWy4uLnBhcmFtXSA6IHBhcmFtLFxuICAgIH07XG4gIH0sIHt9KTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpResponse = void 0;\nvar HttpResponse = /** @class */ (function () {\n    function HttpResponse(options) {\n        this.statusCode = options.statusCode;\n        this.headers = options.headers || {};\n        this.body = options.body;\n    }\n    HttpResponse.isInstance = function (response) {\n        //determine if response is a valid HttpResponse\n        if (!response)\n            return false;\n        var resp = response;\n        return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n    };\n    return HttpResponse;\n}());\nexports.HttpResponse = HttpResponse;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cFJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2h0dHBSZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQTtJQUtFLHNCQUFZLE9BQTRCO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRU0sdUJBQVUsR0FBakIsVUFBa0IsUUFBaUI7UUFDakMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDNUIsSUFBTSxJQUFJLEdBQUcsUUFBZSxDQUFDO1FBQzdCLE9BQU8sT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQ2pGLENBQUM7SUFDSCxtQkFBQztBQUFELENBQUMsQUFqQkQsSUFpQkM7QUFqQlksb0NBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIZWFkZXJCYWcsIEh0dHBNZXNzYWdlLCBIdHRwUmVzcG9uc2UgYXMgSUh0dHBSZXNwb25zZSB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG50eXBlIEh0dHBSZXNwb25zZU9wdGlvbnMgPSBQYXJ0aWFsPEh0dHBNZXNzYWdlPiAmIHtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBIdHRwUmVzcG9uc2UgZXh0ZW5kcyBJSHR0cFJlc3BvbnNlIHt9XG5cbmV4cG9ydCBjbGFzcyBIdHRwUmVzcG9uc2Uge1xuICBwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBwdWJsaWMgaGVhZGVyczogSGVhZGVyQmFnO1xuICBwdWJsaWMgYm9keT86IGFueTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIdHRwUmVzcG9uc2VPcHRpb25zKSB7XG4gICAgdGhpcy5zdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICB0aGlzLmJvZHkgPSBvcHRpb25zLmJvZHk7XG4gIH1cblxuICBzdGF0aWMgaXNJbnN0YW5jZShyZXNwb25zZTogdW5rbm93bik6IHJlc3BvbnNlIGlzIEh0dHBSZXNwb25zZSB7XG4gICAgLy9kZXRlcm1pbmUgaWYgcmVzcG9uc2UgaXMgYSB2YWxpZCBIdHRwUmVzcG9uc2VcbiAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlIGFzIGFueTtcbiAgICByZXR1cm4gdHlwZW9mIHJlc3Auc3RhdHVzQ29kZSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcmVzcC5oZWFkZXJzID09PSBcIm9iamVjdFwiO1xuICB9XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./httpResponse\"), exports);\ntslib_1.__exportStar(require(\"./httpRequest\"), exports);\ntslib_1.__exportStar(require(\"./httpHandler\"), exports);\ntslib_1.__exportStar(require(\"./isValidHostname\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBQStCO0FBQy9CLHdEQUE4QjtBQUM5Qix3REFBOEI7QUFDOUIsNERBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vaHR0cFJlc3BvbnNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9odHRwUmVxdWVzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaHR0cEhhbmRsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzVmFsaWRIb3N0bmFtZVwiO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidHostname = void 0;\nfunction isValidHostname(hostname) {\n    var hostPattern = /^[a-zA-Z0-9]{1}$|^[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]$/;\n    return hostPattern.test(hostname);\n}\nexports.isValidHostname = isValidHostname;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNWYWxpZEhvc3RuYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lzVmFsaWRIb3N0bmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixlQUFlLENBQUMsUUFBZ0I7SUFDOUMsSUFBTSxXQUFXLEdBQUcseURBQXlELENBQUM7SUFDOUUsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFIRCwwQ0FHQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSG9zdG5hbWUoaG9zdG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBob3N0UGF0dGVybiA9IC9eW2EtekEtWjAtOV17MX0kfF5bYS16QS1aMC05XVthLXpBLVowLTlcXC1dKlthLXpBLVowLTldJC87XG4gIHJldHVybiBob3N0UGF0dGVybi50ZXN0KGhvc3RuYW1lKTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.buildQueryString = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_uri_escape_1 = require(\"@aws-sdk/util-uri-escape\");\nfunction buildQueryString(query) {\n    var e_1, _a;\n    var parts = [];\n    try {\n        for (var _b = tslib_1.__values(Object.keys(query).sort()), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var key = _c.value;\n            var value = query[key];\n            key = util_uri_escape_1.escapeUri(key);\n            if (Array.isArray(value)) {\n                for (var i = 0, iLen = value.length; i < iLen; i++) {\n                    parts.push(key + \"=\" + util_uri_escape_1.escapeUri(value[i]));\n                }\n            }\n            else {\n                var qsEntry = key;\n                if (value || typeof value === \"string\") {\n                    qsEntry += \"=\" + util_uri_escape_1.escapeUri(value);\n                }\n                parts.push(qsEntry);\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return parts.join(\"&\");\n}\nexports.buildQueryString = buildQueryString;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLDREQUFxRDtBQUVyRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUF3Qjs7SUFDdkQsSUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDOztRQUMzQixLQUFnQixJQUFBLEtBQUEsaUJBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQSxnQkFBQSw0QkFBRTtZQUF0QyxJQUFJLEdBQUcsV0FBQTtZQUNWLElBQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixHQUFHLEdBQUcsMkJBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2xELEtBQUssQ0FBQyxJQUFJLENBQUksR0FBRyxTQUFJLDJCQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFHLENBQUMsQ0FBQztpQkFDN0M7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDdEMsT0FBTyxJQUFJLE1BQUksMkJBQVMsQ0FBQyxLQUFLLENBQUcsQ0FBQztpQkFDbkM7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQjtTQUNGOzs7Ozs7Ozs7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQW5CRCw0Q0FtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeVBhcmFtZXRlckJhZyB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuaW1wb3J0IHsgZXNjYXBlVXJpIH0gZnJvbSBcIkBhd3Mtc2RrL3V0aWwtdXJpLWVzY2FwZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRRdWVyeVN0cmluZyhxdWVyeTogUXVlcnlQYXJhbWV0ZXJCYWcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHF1ZXJ5KS5zb3J0KCkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W2tleV07XG4gICAga2V5ID0gZXNjYXBlVXJpKGtleSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgaUxlbiA9IHZhbHVlLmxlbmd0aDsgaSA8IGlMZW47IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGAke2tleX09JHtlc2NhcGVVcmkodmFsdWVbaV0pfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcXNFbnRyeSA9IGtleTtcbiAgICAgIGlmICh2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcXNFbnRyeSArPSBgPSR7ZXNjYXBlVXJpKHZhbHVlKX1gO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaChxc0VudHJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbihcIiZcIik7XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseQueryString = void 0;\nvar tslib_1 = require(\"tslib\");\nfunction parseQueryString(querystring) {\n    var e_1, _a;\n    var query = {};\n    querystring = querystring.replace(/^\\?/, \"\");\n    if (querystring) {\n        try {\n            for (var _b = tslib_1.__values(querystring.split(\"&\")), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var pair = _c.value;\n                var _d = tslib_1.__read(pair.split(\"=\"), 2), key = _d[0], _e = _d[1], value = _e === void 0 ? null : _e;\n                key = decodeURIComponent(key);\n                if (value) {\n                    value = decodeURIComponent(value);\n                }\n                if (!(key in query)) {\n                    query[key] = value;\n                }\n                else if (Array.isArray(query[key])) {\n                    query[key].push(value);\n                }\n                else {\n                    query[key] = [query[key], value];\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    }\n    return query;\n}\nexports.parseQueryString = parseQueryString;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLFNBQWdCLGdCQUFnQixDQUFDLFdBQW1COztJQUNsRCxJQUFNLEtBQUssR0FBc0IsRUFBRSxDQUFDO0lBQ3BDLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU3QyxJQUFJLFdBQVcsRUFBRTs7WUFDZixLQUFtQixJQUFBLEtBQUEsaUJBQUEsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBdEMsSUFBTSxJQUFJLFdBQUE7Z0JBQ1QsSUFBQSxLQUFBLGVBQXNCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUEsRUFBcEMsR0FBRyxRQUFBLEVBQUUsVUFBWSxFQUFaLEtBQUssbUJBQUcsSUFBSSxLQUFtQixDQUFDO2dCQUMxQyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksS0FBSyxFQUFFO29CQUNULEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFO29CQUNuQixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUNwQjtxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ25DLEtBQUssQ0FBQyxHQUFHLENBQW1CLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDTCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFXLEVBQUUsS0FBZSxDQUFDLENBQUM7aUJBQ3REO2FBQ0Y7Ozs7Ozs7OztLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBdEJELDRDQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVyQmFnIH0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5c3RyaW5nOiBzdHJpbmcpOiBRdWVyeVBhcmFtZXRlckJhZyB7XG4gIGNvbnN0IHF1ZXJ5OiBRdWVyeVBhcmFtZXRlckJhZyA9IHt9O1xuICBxdWVyeXN0cmluZyA9IHF1ZXJ5c3RyaW5nLnJlcGxhY2UoL15cXD8vLCBcIlwiKTtcblxuICBpZiAocXVlcnlzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcXVlcnlzdHJpbmcuc3BsaXQoXCImXCIpKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWUgPSBudWxsXSA9IHBhaXIuc3BsaXQoXCI9XCIpO1xuICAgICAga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKCEoa2V5IGluIHF1ZXJ5KSkge1xuICAgICAgICBxdWVyeVtrZXldID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlba2V5XSkpIHtcbiAgICAgICAgKHF1ZXJ5W2tleV0gYXMgQXJyYXk8c3RyaW5nPikucHVzaCh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlba2V5XSA9IFtxdWVyeVtrZXldIGFzIHN0cmluZywgdmFsdWUgYXMgc3RyaW5nXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVlcnk7XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TRANSIENT_ERROR_STATUS_CODES = exports.TRANSIENT_ERROR_CODES = exports.THROTTLING_ERROR_CODES = exports.CLOCK_SKEW_ERROR_CODES = void 0;\n/**\n * Errors encountered when the client clock and server clock cannot agree on the\n * current time.\n *\n * These errors are retryable, assuming the SDK has enabled clock skew\n * correction.\n */\nexports.CLOCK_SKEW_ERROR_CODES = [\n    \"AuthFailure\",\n    \"InvalidSignatureException\",\n    \"RequestExpired\",\n    \"RequestInTheFuture\",\n    \"RequestTimeTooSkewed\",\n    \"SignatureDoesNotMatch\",\n];\n/**\n * Errors that indicate the SDK is being throttled.\n *\n * These errors are always retryable.\n */\nexports.THROTTLING_ERROR_CODES = [\n    \"Throttling\",\n    \"ThrottlingException\",\n    \"ThrottledException\",\n    \"RequestThrottledException\",\n    \"TooManyRequestsException\",\n    \"ProvisionedThroughputExceededException\",\n    \"TransactionInProgressException\",\n    \"RequestLimitExceeded\",\n    \"BandwidthLimitExceeded\",\n    \"LimitExceededException\",\n    \"RequestThrottled\",\n    \"SlowDown\",\n    \"PriorRequestNotComplete\",\n    \"EC2ThrottledException\",\n];\n/**\n * Error codes that indicate transient issues\n */\nexports.TRANSIENT_ERROR_CODES = [\"AbortError\", \"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\n/**\n * Error codes that indicate transient issues\n */\nexports.TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0dBTUc7QUFDVSxRQUFBLHNCQUFzQixHQUFHO0lBQ3BDLGFBQWE7SUFDYiwyQkFBMkI7SUFDM0IsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsdUJBQXVCO0NBQ3hCLENBQUM7QUFFRjs7OztHQUlHO0FBQ1UsUUFBQSxzQkFBc0IsR0FBRztJQUNwQyxZQUFZO0lBQ1oscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQiwyQkFBMkI7SUFDM0IsMEJBQTBCO0lBQzFCLHdDQUF3QztJQUN4QyxnQ0FBZ0M7SUFDaEMsc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVix5QkFBeUI7SUFDekIsdUJBQXVCO0NBQ3hCLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEscUJBQXFCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFFakg7O0dBRUc7QUFDVSxRQUFBLDRCQUE0QixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVycm9ycyBlbmNvdW50ZXJlZCB3aGVuIHRoZSBjbGllbnQgY2xvY2sgYW5kIHNlcnZlciBjbG9jayBjYW5ub3QgYWdyZWUgb24gdGhlXG4gKiBjdXJyZW50IHRpbWUuXG4gKlxuICogVGhlc2UgZXJyb3JzIGFyZSByZXRyeWFibGUsIGFzc3VtaW5nIHRoZSBTREsgaGFzIGVuYWJsZWQgY2xvY2sgc2tld1xuICogY29ycmVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IENMT0NLX1NLRVdfRVJST1JfQ09ERVMgPSBbXG4gIFwiQXV0aEZhaWx1cmVcIixcbiAgXCJJbnZhbGlkU2lnbmF0dXJlRXhjZXB0aW9uXCIsXG4gIFwiUmVxdWVzdEV4cGlyZWRcIixcbiAgXCJSZXF1ZXN0SW5UaGVGdXR1cmVcIixcbiAgXCJSZXF1ZXN0VGltZVRvb1NrZXdlZFwiLFxuICBcIlNpZ25hdHVyZURvZXNOb3RNYXRjaFwiLFxuXTtcblxuLyoqXG4gKiBFcnJvcnMgdGhhdCBpbmRpY2F0ZSB0aGUgU0RLIGlzIGJlaW5nIHRocm90dGxlZC5cbiAqXG4gKiBUaGVzZSBlcnJvcnMgYXJlIGFsd2F5cyByZXRyeWFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBUSFJPVFRMSU5HX0VSUk9SX0NPREVTID0gW1xuICBcIlRocm90dGxpbmdcIixcbiAgXCJUaHJvdHRsaW5nRXhjZXB0aW9uXCIsXG4gIFwiVGhyb3R0bGVkRXhjZXB0aW9uXCIsXG4gIFwiUmVxdWVzdFRocm90dGxlZEV4Y2VwdGlvblwiLFxuICBcIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvblwiLFxuICBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkRXhjZXB0aW9uXCIsXG4gIFwiVHJhbnNhY3Rpb25JblByb2dyZXNzRXhjZXB0aW9uXCIsXG4gIFwiUmVxdWVzdExpbWl0RXhjZWVkZWRcIixcbiAgXCJCYW5kd2lkdGhMaW1pdEV4Y2VlZGVkXCIsXG4gIFwiTGltaXRFeGNlZWRlZEV4Y2VwdGlvblwiLFxuICBcIlJlcXVlc3RUaHJvdHRsZWRcIixcbiAgXCJTbG93RG93blwiLFxuICBcIlByaW9yUmVxdWVzdE5vdENvbXBsZXRlXCIsXG4gIFwiRUMyVGhyb3R0bGVkRXhjZXB0aW9uXCIsXG5dO1xuXG4vKipcbiAqIEVycm9yIGNvZGVzIHRoYXQgaW5kaWNhdGUgdHJhbnNpZW50IGlzc3Vlc1xuICovXG5leHBvcnQgY29uc3QgVFJBTlNJRU5UX0VSUk9SX0NPREVTID0gW1wiQWJvcnRFcnJvclwiLCBcIlRpbWVvdXRFcnJvclwiLCBcIlJlcXVlc3RUaW1lb3V0XCIsIFwiUmVxdWVzdFRpbWVvdXRFeGNlcHRpb25cIl07XG5cbi8qKlxuICogRXJyb3IgY29kZXMgdGhhdCBpbmRpY2F0ZSB0cmFuc2llbnQgaXNzdWVzXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFOU0lFTlRfRVJST1JfU1RBVFVTX0NPREVTID0gWzUwMCwgNTAyLCA1MDMsIDUwNF07XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isTransientError = exports.isThrottlingError = exports.isClockSkewError = exports.isRetryableByTrait = void 0;\nvar constants_1 = require(\"./constants\");\nexports.isRetryableByTrait = function (error) { return error.$retryable !== undefined; };\nexports.isClockSkewError = function (error) { return constants_1.CLOCK_SKEW_ERROR_CODES.includes(error.name); };\nexports.isThrottlingError = function (error) { var _a; return constants_1.THROTTLING_ERROR_CODES.includes(error.name) || ((_a = error.$retryable) === null || _a === void 0 ? void 0 : _a.throttling) == true; };\nexports.isTransientError = function (error) {\n    var _a;\n    return constants_1.TRANSIENT_ERROR_CODES.includes(error.name) ||\n        constants_1.TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) || 0);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUNBS3FCO0FBRVIsUUFBQSxrQkFBa0IsR0FBRyxVQUFDLEtBQWUsSUFBSyxPQUFBLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUE5QixDQUE4QixDQUFDO0FBRXpFLFFBQUEsZ0JBQWdCLEdBQUcsVUFBQyxLQUFlLElBQUssT0FBQSxrQ0FBc0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUEzQyxDQUEyQyxDQUFDO0FBRXBGLFFBQUEsaUJBQWlCLEdBQUcsVUFBQyxLQUFlLFlBQy9DLE9BQUEsa0NBQXNCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLFVBQVUsS0FBSSxJQUFJLENBQUEsRUFBQSxDQUFDO0FBRXpFLFFBQUEsZ0JBQWdCLEdBQUcsVUFBQyxLQUFlOztJQUM5QyxPQUFBLGlDQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzFDLHdDQUE0QixDQUFDLFFBQVEsQ0FBQyxPQUFBLEtBQUssQ0FBQyxTQUFTLDBDQUFFLGNBQWMsS0FBSSxDQUFDLENBQUMsQ0FBQTtDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZGtFcnJvciB9IGZyb20gXCJAYXdzLXNkay9zbWl0aHktY2xpZW50XCI7XG5cbmltcG9ydCB7XG4gIENMT0NLX1NLRVdfRVJST1JfQ09ERVMsXG4gIFRIUk9UVExJTkdfRVJST1JfQ09ERVMsXG4gIFRSQU5TSUVOVF9FUlJPUl9DT0RFUyxcbiAgVFJBTlNJRU5UX0VSUk9SX1NUQVRVU19DT0RFUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBpc1JldHJ5YWJsZUJ5VHJhaXQgPSAoZXJyb3I6IFNka0Vycm9yKSA9PiBlcnJvci4kcmV0cnlhYmxlICE9PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBpc0Nsb2NrU2tld0Vycm9yID0gKGVycm9yOiBTZGtFcnJvcikgPT4gQ0xPQ0tfU0tFV19FUlJPUl9DT0RFUy5pbmNsdWRlcyhlcnJvci5uYW1lKTtcblxuZXhwb3J0IGNvbnN0IGlzVGhyb3R0bGluZ0Vycm9yID0gKGVycm9yOiBTZGtFcnJvcikgPT5cbiAgVEhST1RUTElOR19FUlJPUl9DT0RFUy5pbmNsdWRlcyhlcnJvci5uYW1lKSB8fCBlcnJvci4kcmV0cnlhYmxlPy50aHJvdHRsaW5nID09IHRydWU7XG5cbmV4cG9ydCBjb25zdCBpc1RyYW5zaWVudEVycm9yID0gKGVycm9yOiBTZGtFcnJvcikgPT5cbiAgVFJBTlNJRU5UX0VSUk9SX0NPREVTLmluY2x1ZGVzKGVycm9yLm5hbWUpIHx8XG4gIFRSQU5TSUVOVF9FUlJPUl9TVEFUVVNfQ09ERVMuaW5jbHVkZXMoZXJyb3IuJG1ldGFkYXRhPy5odHRwU3RhdHVzQ29kZSB8fCAwKTtcbiJdfQ==","import { __awaiter, __generator, __read } from \"tslib\";\nimport { toHex } from \"@aws-sdk/util-hex-encoding\";\nimport { ALGORITHM_IDENTIFIER, ALGORITHM_QUERY_PARAM, AMZ_DATE_HEADER, AMZ_DATE_QUERY_PARAM, AUTH_HEADER, CREDENTIAL_QUERY_PARAM, EVENT_ALGORITHM_IDENTIFIER, EXPIRES_QUERY_PARAM, MAX_PRESIGNED_TTL, SHA256_HEADER, SIGNATURE_QUERY_PARAM, SIGNED_HEADERS_QUERY_PARAM, TOKEN_HEADER, TOKEN_QUERY_PARAM, } from \"./constants\";\nimport { createScope, getSigningKey } from \"./credentialDerivation\";\nimport { getCanonicalHeaders } from \"./getCanonicalHeaders\";\nimport { getCanonicalQuery } from \"./getCanonicalQuery\";\nimport { getPayloadHash } from \"./getPayloadHash\";\nimport { hasHeader } from \"./hasHeader\";\nimport { moveHeadersToQuery } from \"./moveHeadersToQuery\";\nimport { prepareRequest } from \"./prepareRequest\";\nimport { iso8601 } from \"./utilDate\";\nvar SignatureV4 = /** @class */ (function () {\n    function SignatureV4(_a) {\n        var applyChecksum = _a.applyChecksum, credentials = _a.credentials, region = _a.region, service = _a.service, sha256 = _a.sha256, _b = _a.uriEscapePath, uriEscapePath = _b === void 0 ? true : _b;\n        this.service = service;\n        this.sha256 = sha256;\n        this.uriEscapePath = uriEscapePath;\n        // default to true if applyChecksum isn't set\n        this.applyChecksum = typeof applyChecksum === \"boolean\" ? applyChecksum : true;\n        if (typeof region === \"string\") {\n            var promisified_1 = Promise.resolve(region);\n            this.regionProvider = function () { return promisified_1; };\n        }\n        else {\n            this.regionProvider = region;\n        }\n        if (typeof credentials === \"object\") {\n            var promisified_2 = Promise.resolve(credentials);\n            this.credentialProvider = function () { return promisified_2; };\n        }\n        else {\n            this.credentialProvider = credentials;\n        }\n    }\n    SignatureV4.prototype.presign = function (originalRequest, options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, region, credentials, _b, signingDate, _c, expiresIn, unsignableHeaders, signableHeaders, _d, longDate, shortDate, scope, request, canonicalHeaders, _e, _f, _g, _h, _j, _k;\n            return __generator(this, function (_l) {\n                switch (_l.label) {\n                    case 0: return [4 /*yield*/, Promise.all([this.regionProvider(), this.credentialProvider()])];\n                    case 1:\n                        _a = __read.apply(void 0, [_l.sent(), 2]), region = _a[0], credentials = _a[1];\n                        _b = options.signingDate, signingDate = _b === void 0 ? new Date() : _b, _c = options.expiresIn, expiresIn = _c === void 0 ? 3600 : _c, unsignableHeaders = options.unsignableHeaders, signableHeaders = options.signableHeaders;\n                        _d = formatDate(signingDate), longDate = _d.longDate, shortDate = _d.shortDate;\n                        if (expiresIn > MAX_PRESIGNED_TTL) {\n                            return [2 /*return*/, Promise.reject(\"Signature version 4 presigned URLs\" + \" must have an expiration date less than one week in\" + \" the future\")];\n                        }\n                        scope = createScope(shortDate, region, this.service);\n                        request = moveHeadersToQuery(prepareRequest(originalRequest));\n                        if (credentials.sessionToken) {\n                            request.query[TOKEN_QUERY_PARAM] = credentials.sessionToken;\n                        }\n                        request.query[ALGORITHM_QUERY_PARAM] = ALGORITHM_IDENTIFIER;\n                        request.query[CREDENTIAL_QUERY_PARAM] = credentials.accessKeyId + \"/\" + scope;\n                        request.query[AMZ_DATE_QUERY_PARAM] = longDate;\n                        request.query[EXPIRES_QUERY_PARAM] = expiresIn.toString(10);\n                        canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n                        request.query[SIGNED_HEADERS_QUERY_PARAM] = getCanonicalHeaderList(canonicalHeaders);\n                        _e = request.query;\n                        _f = SIGNATURE_QUERY_PARAM;\n                        _g = this.getSignature;\n                        _h = [longDate,\n                            scope,\n                            this.getSigningKey(credentials, region, shortDate)];\n                        _j = this.createCanonicalRequest;\n                        _k = [request, canonicalHeaders];\n                        return [4 /*yield*/, getPayloadHash(originalRequest, this.sha256)];\n                    case 2: return [4 /*yield*/, _g.apply(this, _h.concat([_j.apply(this, _k.concat([_l.sent()]))]))];\n                    case 3:\n                        _e[_f] = _l.sent();\n                        return [2 /*return*/, request];\n                }\n            });\n        });\n    };\n    SignatureV4.prototype.sign = function (toSign, options) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                if (typeof toSign === \"string\") {\n                    return [2 /*return*/, this.signString(toSign, options)];\n                }\n                else if (toSign.headers && toSign.payload) {\n                    return [2 /*return*/, this.signEvent(toSign, options)];\n                }\n                else {\n                    return [2 /*return*/, this.signRequest(toSign, options)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    SignatureV4.prototype.signEvent = function (_a, _b) {\n        var headers = _a.headers, payload = _a.payload;\n        var _c = _b.signingDate, signingDate = _c === void 0 ? new Date() : _c, priorSignature = _b.priorSignature;\n        return __awaiter(this, void 0, void 0, function () {\n            var _d, region, _e, shortDate, longDate, scope, hashedPayload, hash, hashedHeaders, _f, stringToSign;\n            return __generator(this, function (_g) {\n                switch (_g.label) {\n                    case 0: return [4 /*yield*/, Promise.all([this.regionProvider(), this.credentialProvider()])];\n                    case 1:\n                        _d = __read.apply(void 0, [_g.sent(), 1]), region = _d[0];\n                        _e = formatDate(signingDate), shortDate = _e.shortDate, longDate = _e.longDate;\n                        scope = createScope(shortDate, region, this.service);\n                        return [4 /*yield*/, getPayloadHash({ headers: {}, body: payload }, this.sha256)];\n                    case 2:\n                        hashedPayload = _g.sent();\n                        hash = new this.sha256();\n                        hash.update(headers);\n                        _f = toHex;\n                        return [4 /*yield*/, hash.digest()];\n                    case 3:\n                        hashedHeaders = _f.apply(void 0, [_g.sent()]);\n                        stringToSign = [\n                            EVENT_ALGORITHM_IDENTIFIER,\n                            longDate,\n                            scope,\n                            priorSignature,\n                            hashedHeaders,\n                            hashedPayload,\n                        ].join(\"\\n\");\n                        return [2 /*return*/, this.signString(stringToSign, { signingDate: signingDate })];\n                }\n            });\n        });\n    };\n    SignatureV4.prototype.signString = function (stringToSign, _a) {\n        var _b = (_a === void 0 ? {} : _a).signingDate, signingDate = _b === void 0 ? new Date() : _b;\n        return __awaiter(this, void 0, void 0, function () {\n            var _c, region, credentials, shortDate, hash, _d, _e, _f;\n            return __generator(this, function (_g) {\n                switch (_g.label) {\n                    case 0: return [4 /*yield*/, Promise.all([this.regionProvider(), this.credentialProvider()])];\n                    case 1:\n                        _c = __read.apply(void 0, [_g.sent(), 2]), region = _c[0], credentials = _c[1];\n                        shortDate = formatDate(signingDate).shortDate;\n                        _e = (_d = this.sha256).bind;\n                        return [4 /*yield*/, this.getSigningKey(credentials, region, shortDate)];\n                    case 2:\n                        hash = new (_e.apply(_d, [void 0, _g.sent()]))();\n                        hash.update(stringToSign);\n                        _f = toHex;\n                        return [4 /*yield*/, hash.digest()];\n                    case 3: return [2 /*return*/, _f.apply(void 0, [_g.sent()])];\n                }\n            });\n        });\n    };\n    SignatureV4.prototype.signRequest = function (requestToSign, _a) {\n        var _b = _a === void 0 ? {} : _a, _c = _b.signingDate, signingDate = _c === void 0 ? new Date() : _c, signableHeaders = _b.signableHeaders, unsignableHeaders = _b.unsignableHeaders;\n        return __awaiter(this, void 0, void 0, function () {\n            var _d, region, credentials, request, _e, longDate, shortDate, scope, payloadHash, canonicalHeaders, signature;\n            return __generator(this, function (_f) {\n                switch (_f.label) {\n                    case 0: return [4 /*yield*/, Promise.all([this.regionProvider(), this.credentialProvider()])];\n                    case 1:\n                        _d = __read.apply(void 0, [_f.sent(), 2]), region = _d[0], credentials = _d[1];\n                        request = prepareRequest(requestToSign);\n                        _e = formatDate(signingDate), longDate = _e.longDate, shortDate = _e.shortDate;\n                        scope = createScope(shortDate, region, this.service);\n                        request.headers[AMZ_DATE_HEADER] = longDate;\n                        if (credentials.sessionToken) {\n                            request.headers[TOKEN_HEADER] = credentials.sessionToken;\n                        }\n                        return [4 /*yield*/, getPayloadHash(request, this.sha256)];\n                    case 2:\n                        payloadHash = _f.sent();\n                        if (!hasHeader(SHA256_HEADER, request.headers) && this.applyChecksum) {\n                            request.headers[SHA256_HEADER] = payloadHash;\n                        }\n                        canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n                        return [4 /*yield*/, this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate), this.createCanonicalRequest(request, canonicalHeaders, payloadHash))];\n                    case 3:\n                        signature = _f.sent();\n                        request.headers[AUTH_HEADER] =\n                            ALGORITHM_IDENTIFIER + \" \" +\n                                (\"Credential=\" + credentials.accessKeyId + \"/\" + scope + \", \") +\n                                (\"SignedHeaders=\" + getCanonicalHeaderList(canonicalHeaders) + \", \") +\n                                (\"Signature=\" + signature);\n                        return [2 /*return*/, request];\n                }\n            });\n        });\n    };\n    SignatureV4.prototype.createCanonicalRequest = function (request, canonicalHeaders, payloadHash) {\n        var sortedHeaders = Object.keys(canonicalHeaders).sort();\n        return request.method + \"\\n\" + this.getCanonicalPath(request) + \"\\n\" + getCanonicalQuery(request) + \"\\n\" + sortedHeaders.map(function (name) { return name + \":\" + canonicalHeaders[name]; }).join(\"\\n\") + \"\\n\\n\" + sortedHeaders.join(\";\") + \"\\n\" + payloadHash;\n    };\n    SignatureV4.prototype.createStringToSign = function (longDate, credentialScope, canonicalRequest) {\n        return __awaiter(this, void 0, void 0, function () {\n            var hash, hashedRequest;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        hash = new this.sha256();\n                        hash.update(canonicalRequest);\n                        return [4 /*yield*/, hash.digest()];\n                    case 1:\n                        hashedRequest = _a.sent();\n                        return [2 /*return*/, ALGORITHM_IDENTIFIER + \"\\n\" + longDate + \"\\n\" + credentialScope + \"\\n\" + toHex(hashedRequest)];\n                }\n            });\n        });\n    };\n    SignatureV4.prototype.getCanonicalPath = function (_a) {\n        var path = _a.path;\n        if (this.uriEscapePath) {\n            var doubleEncoded = encodeURIComponent(path.replace(/^\\//, \"\"));\n            return \"/\" + doubleEncoded.replace(/%2F/g, \"/\");\n        }\n        return path;\n    };\n    SignatureV4.prototype.getSignature = function (longDate, credentialScope, keyPromise, canonicalRequest) {\n        return __awaiter(this, void 0, void 0, function () {\n            var stringToSign, hash, _a, _b, _c;\n            return __generator(this, function (_d) {\n                switch (_d.label) {\n                    case 0: return [4 /*yield*/, this.createStringToSign(longDate, credentialScope, canonicalRequest)];\n                    case 1:\n                        stringToSign = _d.sent();\n                        _b = (_a = this.sha256).bind;\n                        return [4 /*yield*/, keyPromise];\n                    case 2:\n                        hash = new (_b.apply(_a, [void 0, _d.sent()]))();\n                        hash.update(stringToSign);\n                        _c = toHex;\n                        return [4 /*yield*/, hash.digest()];\n                    case 3: return [2 /*return*/, _c.apply(void 0, [_d.sent()])];\n                }\n            });\n        });\n    };\n    SignatureV4.prototype.getSigningKey = function (credentials, region, shortDate) {\n        return getSigningKey(this.sha256, credentials, shortDate, region, this.service);\n    };\n    return SignatureV4;\n}());\nexport { SignatureV4 };\nfunction formatDate(now) {\n    var longDate = iso8601(now).replace(/[\\-:]/g, \"\");\n    return {\n        longDate: longDate,\n        shortDate: longDate.substr(0, 8),\n    };\n}\nfunction getCanonicalHeaderList(headers) {\n    return Object.keys(headers).sort().join(\";\");\n}\n//# sourceMappingURL=SignatureV4.js.map","import { __assign, __read, __rest, __spread } from \"tslib\";\n/**\n * @internal\n */\nexport function cloneRequest(_a) {\n    var headers = _a.headers, query = _a.query, rest = __rest(_a, [\"headers\", \"query\"]);\n    return __assign(__assign({}, rest), { headers: __assign({}, headers), query: query ? cloneQuery(query) : undefined });\n}\nfunction cloneQuery(query) {\n    return Object.keys(query).reduce(function (carry, paramName) {\n        var _a;\n        var param = query[paramName];\n        return __assign(__assign({}, carry), (_a = {}, _a[paramName] = Array.isArray(param) ? __spread(param) : param, _a));\n    }, {});\n}\n//# sourceMappingURL=cloneRequest.js.map","export var ALGORITHM_QUERY_PARAM = \"X-Amz-Algorithm\";\nexport var CREDENTIAL_QUERY_PARAM = \"X-Amz-Credential\";\nexport var AMZ_DATE_QUERY_PARAM = \"X-Amz-Date\";\nexport var SIGNED_HEADERS_QUERY_PARAM = \"X-Amz-SignedHeaders\";\nexport var EXPIRES_QUERY_PARAM = \"X-Amz-Expires\";\nexport var SIGNATURE_QUERY_PARAM = \"X-Amz-Signature\";\nexport var TOKEN_QUERY_PARAM = \"X-Amz-Security-Token\";\nexport var AUTH_HEADER = \"authorization\";\nexport var AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase();\nexport var DATE_HEADER = \"date\";\nexport var GENERATED_HEADERS = [AUTH_HEADER, AMZ_DATE_HEADER, DATE_HEADER];\nexport var SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase();\nexport var SHA256_HEADER = \"x-amz-content-sha256\";\nexport var TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase();\nexport var HOST_HEADER = \"host\";\nexport var ALWAYS_UNSIGNABLE_HEADERS = {\n    authorization: true,\n    \"cache-control\": true,\n    connection: true,\n    expect: true,\n    from: true,\n    \"keep-alive\": true,\n    \"max-forwards\": true,\n    pragma: true,\n    referer: true,\n    te: true,\n    trailer: true,\n    \"transfer-encoding\": true,\n    upgrade: true,\n    \"user-agent\": true,\n    \"x-amzn-trace-id\": true,\n};\nexport var PROXY_HEADER_PATTERN = /^proxy-/;\nexport var SEC_HEADER_PATTERN = /^sec-/;\nexport var UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];\nexport var ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256\";\nexport var EVENT_ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256-PAYLOAD\";\nexport var UNSIGNED_PAYLOAD = \"UNSIGNED-PAYLOAD\";\nexport var MAX_CACHE_SIZE = 50;\nexport var KEY_TYPE_IDENTIFIER = \"aws4_request\";\nexport var MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;\n//# sourceMappingURL=constants.js.map","import { __values } from \"tslib\";\nimport { KEY_TYPE_IDENTIFIER, MAX_CACHE_SIZE } from \"./constants\";\nvar signingKeyCache = {};\nvar cacheQueue = [];\n/**\n * Create a string describing the scope of credentials used to sign a request.\n *\n * @param shortDate The current calendar date in the form YYYYMMDD.\n * @param region    The AWS region in which the service resides.\n * @param service   The service to which the signed request is being sent.\n */\nexport function createScope(shortDate, region, service) {\n    return shortDate + \"/\" + region + \"/\" + service + \"/\" + KEY_TYPE_IDENTIFIER;\n}\n/**\n * Derive a signing key from its composite parts\n *\n * @param sha256Constructor A constructor function that can instantiate SHA-256\n *                          hash objects.\n * @param credentials       The credentials with which the request will be\n *                          signed.\n * @param shortDate         The current calendar date in the form YYYYMMDD.\n * @param region            The AWS region in which the service resides.\n * @param service           The service to which the signed request is being\n *                          sent.\n */\nexport function getSigningKey(sha256Constructor, credentials, shortDate, region, service) {\n    var cacheKey = shortDate + \":\" + region + \":\" + service + \":\" + (credentials.accessKeyId + \":\" + credentials.sessionToken);\n    if (cacheKey in signingKeyCache) {\n        return signingKeyCache[cacheKey];\n    }\n    cacheQueue.push(cacheKey);\n    while (cacheQueue.length > MAX_CACHE_SIZE) {\n        delete signingKeyCache[cacheQueue.shift()];\n    }\n    return (signingKeyCache[cacheKey] = new Promise(function (resolve, reject) {\n        var e_1, _a;\n        var keyPromise = Promise.resolve(\"AWS4\" + credentials.secretAccessKey);\n        var _loop_1 = function (signable) {\n            keyPromise = keyPromise.then(function (intermediateKey) { return hmac(sha256Constructor, intermediateKey, signable); });\n            keyPromise.catch(function () { });\n        };\n        try {\n            for (var _b = __values([shortDate, region, service, KEY_TYPE_IDENTIFIER]), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var signable = _c.value;\n                _loop_1(signable);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        keyPromise.then(resolve, function (reason) {\n            delete signingKeyCache[cacheKey];\n            reject(reason);\n        });\n    }));\n}\n/**\n * @internal\n */\nexport function clearCredentialCache() {\n    cacheQueue.length = 0;\n    Object.keys(signingKeyCache).forEach(function (cacheKey) {\n        delete signingKeyCache[cacheKey];\n    });\n}\nfunction hmac(ctor, secret, data) {\n    var hash = new ctor(secret);\n    hash.update(data);\n    return hash.digest();\n}\n//# sourceMappingURL=credentialDerivation.js.map","import { __values } from \"tslib\";\nimport { ALWAYS_UNSIGNABLE_HEADERS, PROXY_HEADER_PATTERN, SEC_HEADER_PATTERN } from \"./constants\";\n/**\n * @internal\n */\nexport function getCanonicalHeaders(_a, unsignableHeaders, signableHeaders) {\n    var e_1, _b;\n    var headers = _a.headers;\n    var canonical = {};\n    try {\n        for (var _c = __values(Object.keys(headers).sort()), _d = _c.next(); !_d.done; _d = _c.next()) {\n            var headerName = _d.value;\n            var canonicalHeaderName = headerName.toLowerCase();\n            if (canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS || (unsignableHeaders === null || unsignableHeaders === void 0 ? void 0 : unsignableHeaders.has(canonicalHeaderName)) ||\n                PROXY_HEADER_PATTERN.test(canonicalHeaderName) ||\n                SEC_HEADER_PATTERN.test(canonicalHeaderName)) {\n                if (!signableHeaders || (signableHeaders && !signableHeaders.has(canonicalHeaderName))) {\n                    continue;\n                }\n            }\n            canonical[canonicalHeaderName] = headers[headerName].trim().replace(/\\s+/g, \" \");\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return canonical;\n}\n//# sourceMappingURL=getCanonicalHeaders.js.map","import { __values } from \"tslib\";\nimport { escapeUri } from \"@aws-sdk/util-uri-escape\";\nimport { SIGNATURE_HEADER } from \"./constants\";\n/**\n * @internal\n */\nexport function getCanonicalQuery(_a) {\n    var e_1, _b;\n    var _c = _a.query, query = _c === void 0 ? {} : _c;\n    var keys = [];\n    var serialized = {};\n    var _loop_1 = function (key) {\n        if (key.toLowerCase() === SIGNATURE_HEADER) {\n            return \"continue\";\n        }\n        keys.push(key);\n        var value = query[key];\n        if (typeof value === \"string\") {\n            serialized[key] = escapeUri(key) + \"=\" + escapeUri(value);\n        }\n        else if (Array.isArray(value)) {\n            serialized[key] = value\n                .slice(0)\n                .sort()\n                .reduce(function (encoded, value) { return encoded.concat([escapeUri(key) + \"=\" + escapeUri(value)]); }, [])\n                .join(\"&\");\n        }\n    };\n    try {\n        for (var _d = __values(Object.keys(query).sort()), _e = _d.next(); !_e.done; _e = _d.next()) {\n            var key = _e.value;\n            _loop_1(key);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return keys\n        .map(function (key) { return serialized[key]; })\n        .filter(function (serialized) { return serialized; }) // omit any falsy values\n        .join(\"&\");\n}\n//# sourceMappingURL=getCanonicalQuery.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayBuffer } from \"@aws-sdk/is-array-buffer\";\nimport { toHex } from \"@aws-sdk/util-hex-encoding\";\nimport { SHA256_HEADER, UNSIGNED_PAYLOAD } from \"./constants\";\n/**\n * @internal\n */\nexport function getPayloadHash(_a, hashConstructor) {\n    var headers = _a.headers, body = _a.body;\n    return __awaiter(this, void 0, void 0, function () {\n        var _b, _c, headerName, hashCtor, _d;\n        var e_1, _e;\n        return __generator(this, function (_f) {\n            switch (_f.label) {\n                case 0:\n                    try {\n                        for (_b = __values(Object.keys(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                            headerName = _c.value;\n                            if (headerName.toLowerCase() === SHA256_HEADER) {\n                                return [2 /*return*/, headers[headerName]];\n                            }\n                        }\n                    }\n                    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                    finally {\n                        try {\n                            if (_c && !_c.done && (_e = _b.return)) _e.call(_b);\n                        }\n                        finally { if (e_1) throw e_1.error; }\n                    }\n                    if (!(body == undefined)) return [3 /*break*/, 1];\n                    return [2 /*return*/, \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"];\n                case 1:\n                    if (!(typeof body === \"string\" || ArrayBuffer.isView(body) || isArrayBuffer(body))) return [3 /*break*/, 3];\n                    hashCtor = new hashConstructor();\n                    hashCtor.update(body);\n                    _d = toHex;\n                    return [4 /*yield*/, hashCtor.digest()];\n                case 2: return [2 /*return*/, _d.apply(void 0, [_f.sent()])];\n                case 3: \n                // As any defined body that is not a string or binary data is a stream, this\n                // body is unsignable. Attempt to send the request with an unsigned payload,\n                // which may or may not be accepted by the service.\n                return [2 /*return*/, UNSIGNED_PAYLOAD];\n            }\n        });\n    });\n}\n//# sourceMappingURL=getPayloadHash.js.map","import { __values } from \"tslib\";\nexport function hasHeader(soughtHeader, headers) {\n    var e_1, _a;\n    soughtHeader = soughtHeader.toLowerCase();\n    try {\n        for (var _b = __values(Object.keys(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var headerName = _c.value;\n            if (soughtHeader === headerName.toLowerCase()) {\n                return true;\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return false;\n}\n//# sourceMappingURL=hasHeader.js.map","export * from \"./credentialDerivation\";\nexport * from \"./SignatureV4\";\n//# sourceMappingURL=index.js.map","import { __assign, __values } from \"tslib\";\nimport { cloneRequest } from \"./cloneRequest\";\n/**\n * @internal\n */\nexport function moveHeadersToQuery(request) {\n    var e_1, _a;\n    var _b = typeof request.clone === \"function\" ? request.clone() : cloneRequest(request), headers = _b.headers, _c = _b.query, query = _c === void 0 ? {} : _c;\n    try {\n        for (var _d = __values(Object.keys(headers)), _e = _d.next(); !_e.done; _e = _d.next()) {\n            var name = _e.value;\n            var lname = name.toLowerCase();\n            if (lname.substr(0, 6) === \"x-amz-\") {\n                query[name] = headers[name];\n                delete headers[name];\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return __assign(__assign({}, request), { headers: headers,\n        query: query });\n}\n//# sourceMappingURL=moveHeadersToQuery.js.map","import { __values } from \"tslib\";\nimport { cloneRequest } from \"./cloneRequest\";\nimport { GENERATED_HEADERS } from \"./constants\";\n/**\n * @internal\n */\nexport function prepareRequest(request) {\n    var e_1, _a;\n    // Create a clone of the request object that does not clone the body\n    request = typeof request.clone === \"function\" ? request.clone() : cloneRequest(request);\n    try {\n        for (var _b = __values(Object.keys(request.headers)), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var headerName = _c.value;\n            if (GENERATED_HEADERS.indexOf(headerName.toLowerCase()) > -1) {\n                delete request.headers[headerName];\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return request;\n}\n//# sourceMappingURL=prepareRequest.js.map","export function iso8601(time) {\n    return toDate(time)\n        .toISOString()\n        .replace(/\\.\\d{3}Z$/, \"Z\");\n}\nexport function toDate(time) {\n    if (typeof time === \"number\") {\n        return new Date(time * 1000);\n    }\n    if (typeof time === \"string\") {\n        if (Number(time)) {\n            return new Date(Number(time) * 1000);\n        }\n        return new Date(time);\n    }\n    return time;\n}\n//# sourceMappingURL=utilDate.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = void 0;\nvar middleware_stack_1 = require(\"@aws-sdk/middleware-stack\");\nvar Client = /** @class */ (function () {\n    function Client(config) {\n        this.middlewareStack = new middleware_stack_1.MiddlewareStack();\n        this.config = config;\n    }\n    Client.prototype.send = function (command, optionsOrCb, cb) {\n        var options = typeof optionsOrCb !== \"function\" ? optionsOrCb : undefined;\n        var callback = typeof optionsOrCb === \"function\" ? optionsOrCb : cb;\n        var handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n        if (callback) {\n            handler(command)\n                .then(function (result) { return callback(null, result.output); }, function (err) { return callback(err); })\n                .catch(\n            // prevent any errors thrown in the callback from triggering an\n            // unhandled promise rejection\n            function () { });\n        }\n        else {\n            return handler(command).then(function (result) { return result.output; });\n        }\n    };\n    Client.prototype.destroy = function () {\n        if (this.config.requestHandler.destroy)\n            this.config.requestHandler.destroy();\n    };\n    return Client;\n}());\nexports.Client = Client;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBNEQ7QUFVNUQ7SUFRRSxnQkFBWSxNQUFtQztRQUZ4QyxvQkFBZSxHQUFHLElBQUksa0NBQWUsRUFBNkIsQ0FBQztRQUd4RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBY0QscUJBQUksR0FBSixVQUNFLE9BQStHLEVBQy9HLFdBQXNFLEVBQ3RFLEVBQTBDO1FBRTFDLElBQU0sT0FBTyxHQUFHLE9BQU8sV0FBVyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUUsSUFBTSxRQUFRLEdBQUcsT0FBTyxXQUFXLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBRSxXQUFxRCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakgsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFzQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0YsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPLENBQUMsT0FBTyxDQUFDO2lCQUNiLElBQUksQ0FDSCxVQUFDLE1BQU0sSUFBSyxPQUFBLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUE3QixDQUE2QixFQUN6QyxVQUFDLEdBQVEsSUFBSyxPQUFBLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBYixDQUFhLENBQzVCO2lCQUNBLEtBQUs7WUFDSiwrREFBK0Q7WUFDL0QsOEJBQThCO1lBQzlCLGNBQU8sQ0FBQyxDQUNULENBQUM7U0FDTDthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBTSxJQUFLLE9BQUEsTUFBTSxDQUFDLE1BQU0sRUFBYixDQUFhLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFFRCx3QkFBTyxHQUFQO1FBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0UsQ0FBQztJQUNILGFBQUM7QUFBRCxDQUFDLEFBbkRELElBbURDO0FBbkRZLHdCQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWlkZGxld2FyZVN0YWNrIH0gZnJvbSBcIkBhd3Mtc2RrL21pZGRsZXdhcmUtc3RhY2tcIjtcbmltcG9ydCB7IENsaWVudCBhcyBJQ2xpZW50LENvbW1hbmQsIE1ldGFkYXRhQmVhcmVyLCBSZXF1ZXN0SGFuZGxlciB9IGZyb20gXCJAYXdzLXNkay90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNtaXRoeUNvbmZpZ3VyYXRpb248SGFuZGxlck9wdGlvbnM+IHtcbiAgcmVxdWVzdEhhbmRsZXI6IFJlcXVlc3RIYW5kbGVyPGFueSwgYW55LCBIYW5kbGVyT3B0aW9ucz47XG4gIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU21pdGh5UmVzb2x2ZWRDb25maWd1cmF0aW9uPEhhbmRsZXJPcHRpb25zPiA9IFNtaXRoeUNvbmZpZ3VyYXRpb248SGFuZGxlck9wdGlvbnM+O1xuXG5leHBvcnQgY2xhc3MgQ2xpZW50PFxuICBIYW5kbGVyT3B0aW9ucyxcbiAgQ2xpZW50SW5wdXQgZXh0ZW5kcyBvYmplY3QsXG4gIENsaWVudE91dHB1dCBleHRlbmRzIE1ldGFkYXRhQmVhcmVyLFxuICBSZXNvbHZlZENsaWVudENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBTbWl0aHlSZXNvbHZlZENvbmZpZ3VyYXRpb248SGFuZGxlck9wdGlvbnM+XG4+IGltcGxlbWVudHMgSUNsaWVudDxDbGllbnRJbnB1dCwgQ2xpZW50T3V0cHV0LCBSZXNvbHZlZENsaWVudENvbmZpZ3VyYXRpb24+IHtcbiAgcHVibGljIG1pZGRsZXdhcmVTdGFjayA9IG5ldyBNaWRkbGV3YXJlU3RhY2s8Q2xpZW50SW5wdXQsIENsaWVudE91dHB1dD4oKTtcbiAgcmVhZG9ubHkgY29uZmlnOiBSZXNvbHZlZENsaWVudENvbmZpZ3VyYXRpb247XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUmVzb2x2ZWRDbGllbnRDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cbiAgc2VuZDxJbnB1dFR5cGUgZXh0ZW5kcyBDbGllbnRJbnB1dCwgT3V0cHV0VHlwZSBleHRlbmRzIENsaWVudE91dHB1dD4oXG4gICAgY29tbWFuZDogQ29tbWFuZDxDbGllbnRJbnB1dCwgSW5wdXRUeXBlLCBDbGllbnRPdXRwdXQsIE91dHB1dFR5cGUsIFNtaXRoeVJlc29sdmVkQ29uZmlndXJhdGlvbjxIYW5kbGVyT3B0aW9ucz4+LFxuICAgIG9wdGlvbnM/OiBIYW5kbGVyT3B0aW9uc1xuICApOiBQcm9taXNlPE91dHB1dFR5cGU+O1xuICBzZW5kPElucHV0VHlwZSBleHRlbmRzIENsaWVudElucHV0LCBPdXRwdXRUeXBlIGV4dGVuZHMgQ2xpZW50T3V0cHV0PihcbiAgICBjb21tYW5kOiBDb21tYW5kPENsaWVudElucHV0LCBJbnB1dFR5cGUsIENsaWVudE91dHB1dCwgT3V0cHV0VHlwZSwgU21pdGh5UmVzb2x2ZWRDb25maWd1cmF0aW9uPEhhbmRsZXJPcHRpb25zPj4sXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IE91dHB1dFR5cGUpID0+IHZvaWRcbiAgKTogdm9pZDtcbiAgc2VuZDxJbnB1dFR5cGUgZXh0ZW5kcyBDbGllbnRJbnB1dCwgT3V0cHV0VHlwZSBleHRlbmRzIENsaWVudE91dHB1dD4oXG4gICAgY29tbWFuZDogQ29tbWFuZDxDbGllbnRJbnB1dCwgSW5wdXRUeXBlLCBDbGllbnRPdXRwdXQsIE91dHB1dFR5cGUsIFNtaXRoeVJlc29sdmVkQ29uZmlndXJhdGlvbjxIYW5kbGVyT3B0aW9ucz4+LFxuICAgIG9wdGlvbnM6IEhhbmRsZXJPcHRpb25zLFxuICAgIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBPdXRwdXRUeXBlKSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHNlbmQ8SW5wdXRUeXBlIGV4dGVuZHMgQ2xpZW50SW5wdXQsIE91dHB1dFR5cGUgZXh0ZW5kcyBDbGllbnRPdXRwdXQ+KFxuICAgIGNvbW1hbmQ6IENvbW1hbmQ8Q2xpZW50SW5wdXQsIElucHV0VHlwZSwgQ2xpZW50T3V0cHV0LCBPdXRwdXRUeXBlLCBTbWl0aHlSZXNvbHZlZENvbmZpZ3VyYXRpb248SGFuZGxlck9wdGlvbnM+PixcbiAgICBvcHRpb25zT3JDYj86IEhhbmRsZXJPcHRpb25zIHwgKChlcnI6IGFueSwgZGF0YT86IE91dHB1dFR5cGUpID0+IHZvaWQpLFxuICAgIGNiPzogKGVycjogYW55LCBkYXRhPzogT3V0cHV0VHlwZSkgPT4gdm9pZFxuICApOiBQcm9taXNlPE91dHB1dFR5cGU+IHwgdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJmdW5jdGlvblwiID8gb3B0aW9uc09yQ2IgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2FsbGJhY2sgPSB0eXBlb2Ygb3B0aW9uc09yQ2IgPT09IFwiZnVuY3Rpb25cIiA/IChvcHRpb25zT3JDYiBhcyAoZXJyOiBhbnksIGRhdGE/OiBPdXRwdXRUeXBlKSA9PiB2b2lkKSA6IGNiO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBjb21tYW5kLnJlc29sdmVNaWRkbGV3YXJlKHRoaXMubWlkZGxld2FyZVN0YWNrIGFzIGFueSwgdGhpcy5jb25maWcsIG9wdGlvbnMpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgaGFuZGxlcihjb21tYW5kKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAocmVzdWx0KSA9PiBjYWxsYmFjayhudWxsLCByZXN1bHQub3V0cHV0KSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IGNhbGxiYWNrKGVycilcbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goXG4gICAgICAgICAgLy8gcHJldmVudCBhbnkgZXJyb3JzIHRocm93biBpbiB0aGUgY2FsbGJhY2sgZnJvbSB0cmlnZ2VyaW5nIGFuXG4gICAgICAgICAgLy8gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXG4gICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGhhbmRsZXIoY29tbWFuZCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQub3V0cHV0KTtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5yZXF1ZXN0SGFuZGxlci5kZXN0cm95KSB0aGlzLmNvbmZpZy5yZXF1ZXN0SGFuZGxlci5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Command = void 0;\nvar middleware_stack_1 = require(\"@aws-sdk/middleware-stack\");\nvar Command = /** @class */ (function () {\n    function Command() {\n        this.middlewareStack = new middleware_stack_1.MiddlewareStack();\n    }\n    return Command;\n}());\nexports.Command = Command;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhEQUE0RDtBQUc1RDtJQUFBO1FBUVcsb0JBQWUsR0FBb0MsSUFBSSxrQ0FBZSxFQUFpQixDQUFDO0lBTW5HLENBQUM7SUFBRCxjQUFDO0FBQUQsQ0FBQyxBQWRELElBY0M7QUFkcUIsMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaWRkbGV3YXJlU3RhY2sgfSBmcm9tIFwiQGF3cy1zZGsvbWlkZGxld2FyZS1zdGFja1wiO1xuaW1wb3J0IHsgQ29tbWFuZCBhcyBJQ29tbWFuZCwgSGFuZGxlciwgTWV0YWRhdGFCZWFyZXIsIE1pZGRsZXdhcmVTdGFjayBhcyBJTWlkZGxld2FyZVN0YWNrIH0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tYW5kPFxuICBJbnB1dCBleHRlbmRzIENsaWVudElucHV0LFxuICBPdXRwdXQgZXh0ZW5kcyBDbGllbnRPdXRwdXQsXG4gIFJlc29sdmVkQ2xpZW50Q29uZmlndXJhdGlvbixcbiAgQ2xpZW50SW5wdXQgZXh0ZW5kcyBvYmplY3QgPSBhbnksXG4gIENsaWVudE91dHB1dCBleHRlbmRzIE1ldGFkYXRhQmVhcmVyID0gYW55XG4+IGltcGxlbWVudHMgSUNvbW1hbmQ8Q2xpZW50SW5wdXQsIElucHV0LCBDbGllbnRPdXRwdXQsIE91dHB1dCwgUmVzb2x2ZWRDbGllbnRDb25maWd1cmF0aW9uPiB7XG4gIGFic3RyYWN0IGlucHV0OiBJbnB1dDtcbiAgcmVhZG9ubHkgbWlkZGxld2FyZVN0YWNrOiBJTWlkZGxld2FyZVN0YWNrPElucHV0LCBPdXRwdXQ+ID0gbmV3IE1pZGRsZXdhcmVTdGFjazxJbnB1dCwgT3V0cHV0PigpO1xuICBhYnN0cmFjdCByZXNvbHZlTWlkZGxld2FyZShcbiAgICBzdGFjazogTWlkZGxld2FyZVN0YWNrPENsaWVudElucHV0LCBDbGllbnRPdXRwdXQ+LFxuICAgIGNvbmZpZ3VyYXRpb246IFJlc29sdmVkQ2xpZW50Q29uZmlndXJhdGlvbixcbiAgICBvcHRpb25zOiBhbnlcbiAgKTogSGFuZGxlcjxJbnB1dCwgT3V0cHV0Pjtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SENSITIVE_STRING = void 0;\nexports.SENSITIVE_STRING = \"***SensitiveInformation***\";\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLGdCQUFnQixHQUFHLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNFTlNJVElWRV9TVFJJTkcgPSBcIioqKlNlbnNpdGl2ZUluZm9ybWF0aW9uKioqXCI7XG4iXX0=","\"use strict\";\n/**\n * Builds a proper UTC HttpDate timestamp from a Date object\n * since not all environments will have this as the expected\n * format.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n * > Prior to ECMAScript 2018, the format of the return value\n * > varied according to the platform. The most common return\n * > value was an RFC-1123 formatted date stamp, which is a\n * > slightly updated version of RFC-822 date stamps.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dateToUtcString = void 0;\n// Build indexes outside so we allocate them once.\nvar days = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n// prettier-ignore\nvar months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nfunction dateToUtcString(date) {\n    var year = date.getUTCFullYear();\n    var month = date.getUTCMonth();\n    var dayOfWeek = date.getUTCDay();\n    var dayOfMonthInt = date.getUTCDate();\n    var hoursInt = date.getUTCHours();\n    var minutesInt = date.getUTCMinutes();\n    var secondsInt = date.getUTCSeconds();\n    // Build 0 prefixed strings for contents that need to be\n    // two digits and where we get an integer back.\n    var dayOfMonthString = dayOfMonthInt < 10 ? \"0\" + dayOfMonthInt : \"\" + dayOfMonthInt;\n    var hoursString = hoursInt < 10 ? \"0\" + hoursInt : \"\" + hoursInt;\n    var minutesString = minutesInt < 10 ? \"0\" + minutesInt : \"\" + minutesInt;\n    var secondsString = secondsInt < 10 ? \"0\" + secondsInt : \"\" + secondsInt;\n    return days[dayOfWeek] + \", \" + dayOfMonthString + \" \" + months[month] + \" \" + year + \" \" + hoursString + \":\" + minutesString + \":\" + secondsString + \" GMT\";\n}\nexports.dateToUtcString = dateToUtcString;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOzs7QUFFSCxrREFBa0Q7QUFDbEQsSUFBTSxJQUFJLEdBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUUsa0JBQWtCO0FBQ2xCLElBQU0sTUFBTSxHQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFbkgsU0FBZ0IsZUFBZSxDQUFDLElBQVU7SUFDeEMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ25DLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkMsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3hDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEMsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRXhDLHdEQUF3RDtJQUN4RCwrQ0FBK0M7SUFDL0MsSUFBTSxnQkFBZ0IsR0FBRyxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFJLGFBQWUsQ0FBQyxDQUFDLENBQUMsS0FBRyxhQUFlLENBQUM7SUFDdkYsSUFBTSxXQUFXLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBSSxRQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUcsUUFBVSxDQUFDO0lBQ25FLElBQU0sYUFBYSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQUksVUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFHLFVBQVksQ0FBQztJQUMzRSxJQUFNLGFBQWEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFJLFVBQVksQ0FBQyxDQUFDLENBQUMsS0FBRyxVQUFZLENBQUM7SUFFM0UsT0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQUssZ0JBQWdCLFNBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFJLElBQUksU0FBSSxXQUFXLFNBQUksYUFBYSxTQUFJLGFBQWEsU0FBTSxDQUFDO0FBQ2pJLENBQUM7QUFqQkQsMENBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCdWlsZHMgYSBwcm9wZXIgVVRDIEh0dHBEYXRlIHRpbWVzdGFtcCBmcm9tIGEgRGF0ZSBvYmplY3RcbiAqIHNpbmNlIG5vdCBhbGwgZW52aXJvbm1lbnRzIHdpbGwgaGF2ZSB0aGlzIGFzIHRoZSBleHBlY3RlZFxuICogZm9ybWF0LlxuICpcbiAqIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZS90b1VUQ1N0cmluZ1xuICogPiBQcmlvciB0byBFQ01BU2NyaXB0IDIwMTgsIHRoZSBmb3JtYXQgb2YgdGhlIHJldHVybiB2YWx1ZVxuICogPiB2YXJpZWQgYWNjb3JkaW5nIHRvIHRoZSBwbGF0Zm9ybS4gVGhlIG1vc3QgY29tbW9uIHJldHVyblxuICogPiB2YWx1ZSB3YXMgYW4gUkZDLTExMjMgZm9ybWF0dGVkIGRhdGUgc3RhbXAsIHdoaWNoIGlzIGFcbiAqID4gc2xpZ2h0bHkgdXBkYXRlZCB2ZXJzaW9uIG9mIFJGQy04MjIgZGF0ZSBzdGFtcHMuXG4gKi9cblxuLy8gQnVpbGQgaW5kZXhlcyBvdXRzaWRlIHNvIHdlIGFsbG9jYXRlIHRoZW0gb25jZS5cbmNvbnN0IGRheXM6IEFycmF5PFN0cmluZz4gPSBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl07XG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IG1vbnRoczogQXJyYXk8U3RyaW5nPiA9IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb1V0Y1N0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgY29uc3QgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIGNvbnN0IGRheU9mTW9udGhJbnQgPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgY29uc3QgaG91cnNJbnQgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gIGNvbnN0IG1pbnV0ZXNJbnQgPSBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbiAgY29uc3Qgc2Vjb25kc0ludCA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xuXG4gIC8vIEJ1aWxkIDAgcHJlZml4ZWQgc3RyaW5ncyBmb3IgY29udGVudHMgdGhhdCBuZWVkIHRvIGJlXG4gIC8vIHR3byBkaWdpdHMgYW5kIHdoZXJlIHdlIGdldCBhbiBpbnRlZ2VyIGJhY2suXG4gIGNvbnN0IGRheU9mTW9udGhTdHJpbmcgPSBkYXlPZk1vbnRoSW50IDwgMTAgPyBgMCR7ZGF5T2ZNb250aEludH1gIDogYCR7ZGF5T2ZNb250aEludH1gO1xuICBjb25zdCBob3Vyc1N0cmluZyA9IGhvdXJzSW50IDwgMTAgPyBgMCR7aG91cnNJbnR9YCA6IGAke2hvdXJzSW50fWA7XG4gIGNvbnN0IG1pbnV0ZXNTdHJpbmcgPSBtaW51dGVzSW50IDwgMTAgPyBgMCR7bWludXRlc0ludH1gIDogYCR7bWludXRlc0ludH1gO1xuICBjb25zdCBzZWNvbmRzU3RyaW5nID0gc2Vjb25kc0ludCA8IDEwID8gYDAke3NlY29uZHNJbnR9YCA6IGAke3NlY29uZHNJbnR9YDtcblxuICByZXR1cm4gYCR7ZGF5c1tkYXlPZldlZWtdfSwgJHtkYXlPZk1vbnRoU3RyaW5nfSAke21vbnRoc1ttb250aF19ICR7eWVhcn0gJHtob3Vyc1N0cmluZ306JHttaW51dGVzU3RyaW5nfToke3NlY29uZHNTdHJpbmd9IEdNVGA7XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb2N1bWVudC10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNtaXRoeSBkb2N1bWVudCB0eXBlIHZhbHVlcy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbmV4cG9ydCBuYW1lc3BhY2UgRG9jdW1lbnRUeXBlIHtcbiAgZXhwb3J0IHR5cGUgVmFsdWUgPSBTY2FsYXIgfCBTdHJ1Y3R1cmUgfCBMaXN0O1xuICBleHBvcnQgdHlwZSBTY2FsYXIgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbDtcbiAgZXhwb3J0IHR5cGUgU3RydWN0dXJlID0geyBbbWVtYmVyOiBzdHJpbmddOiBWYWx1ZSB9O1xuICBleHBvcnQgaW50ZXJmYWNlIExpc3QgZXh0ZW5kcyBBcnJheTxWYWx1ZT4ge31cbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4Y2VwdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmV0cnlhYmxlVHJhaXQgfSBmcm9tIFwiLi9yZXRyeWFibGUtdHJhaXRcIjtcblxuLyoqXG4gKiBUeXBlIHRoYXQgaXMgaW1wbGVtZW50ZWQgYnkgYWxsIFNtaXRoeSBzaGFwZXMgbWFya2VkIHdpdGggdGhlXG4gKiBlcnJvciB0cmFpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbWl0aHlFeGNlcHRpb24ge1xuICAvKipcbiAgICogVGhlIHNoYXBlIElEIG5hbWUgb2YgdGhlIGV4Y2VwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2xpZW50IG9yIHNlcnZlciBhcmUgYXQgZmF1bHQuXG4gICAqL1xuICByZWFkb25seSAkZmF1bHQ6IFwiY2xpZW50XCIgfCBcInNlcnZlclwiO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSB0aGF0IGVuY291bnRlcmVkIHRoZSBleGNlcHRpb24uXG4gICAqL1xuICByZWFkb25seSAkc2VydmljZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYW4gZXJyb3IgTUFZIGJlIHJldHJpZWQgYnkgdGhlIGNsaWVudC5cbiAgICovXG4gIHJlYWRvbmx5ICRyZXRyeWFibGU/OiBSZXRyeWFibGVUcmFpdDtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendedEncodeURIComponent = void 0;\n/**\n * Function that wraps encodeURIComponent to encode additional characters\n * to fully adhere to RFC 3986.\n */\nfunction extendedEncodeURIComponent(str) {\n    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n        return \"%\" + c.charCodeAt(0).toString(16);\n    });\n}\nexports.extendedEncodeURIComponent = extendedEncodeURIComponent;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kZWQtZW5jb2RlLXVyaS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXh0ZW5kZWQtZW5jb2RlLXVyaS1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7OztHQUdHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQUMsR0FBVztJQUNwRCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQzVELE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELGdFQUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHdyYXBzIGVuY29kZVVSSUNvbXBvbmVudCB0byBlbmNvZGUgYWRkaXRpb25hbCBjaGFyYWN0ZXJzXG4gKiB0byBmdWxseSBhZGhlcmUgdG8gUkZDIDM5ODYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmRlZEVuY29kZVVSSUNvbXBvbmVudChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIFwiJVwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgfSk7XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getArrayIfSingleItem = void 0;\n/**\n * The XML parser will set one K:V for a member that could\n * return multiple entries but only has one.\n */\nexports.getArrayIfSingleItem = function (mayBeArray) {\n    return Array.isArray(mayBeArray) ? mayBeArray : [mayBeArray];\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFycmF5LWlmLXNpbmdsZS1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dldC1hcnJheS1pZi1zaW5nbGUtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDVSxRQUFBLG9CQUFvQixHQUFHLFVBQUksVUFBYTtJQUNuRCxPQUFBLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFBckQsQ0FBcUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIFhNTCBwYXJzZXIgd2lsbCBzZXQgb25lIEs6ViBmb3IgYSBtZW1iZXIgdGhhdCBjb3VsZFxuICogcmV0dXJuIG11bHRpcGxlIGVudHJpZXMgYnV0IG9ubHkgaGFzIG9uZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFycmF5SWZTaW5nbGVJdGVtID0gPFQ+KG1heUJlQXJyYXk6IFQpOiBUIHwgVFtdID0+XG4gIEFycmF5LmlzQXJyYXkobWF5QmVBcnJheSkgPyBtYXlCZUFycmF5IDogW21heUJlQXJyYXldO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getValueFromTextNode = void 0;\n/**\n * Recursively parses object and populates value is node from\n * \"#text\" key if it's available\n */\nexports.getValueFromTextNode = function (obj) {\n    var textNodeName = \"#text\";\n    for (var key in obj) {\n        if (obj.hasOwnProperty(key) && obj[key][textNodeName] !== undefined) {\n            obj[key] = obj[key][textNodeName];\n        }\n        else if (typeof obj[key] === \"object\" && obj[key] !== null) {\n            obj[key] = exports.getValueFromTextNode(obj[key]);\n        }\n    }\n    return obj;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXZhbHVlLWZyb20tdGV4dC1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dldC12YWx1ZS1mcm9tLXRleHQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDVSxRQUFBLG9CQUFvQixHQUFHLFVBQUMsR0FBUTtJQUMzQyxJQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7SUFDN0IsS0FBSyxJQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDckIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDbkUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuQzthQUFNLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDNUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLDRCQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzNDO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVjdXJzaXZlbHkgcGFyc2VzIG9iamVjdCBhbmQgcG9wdWxhdGVzIHZhbHVlIGlzIG5vZGUgZnJvbVxuICogXCIjdGV4dFwiIGtleSBpZiBpdCdzIGF2YWlsYWJsZVxuICovXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVGcm9tVGV4dE5vZGUgPSAob2JqOiBhbnkpID0+IHtcbiAgY29uc3QgdGV4dE5vZGVOYW1lID0gXCIjdGV4dFwiO1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkgJiYgb2JqW2tleV1bdGV4dE5vZGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmpba2V5XSA9IG9ialtrZXldW3RleHROb2RlTmFtZV07XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgIG9ialtrZXldID0gZ2V0VmFsdWVGcm9tVGV4dE5vZGUob2JqW2tleV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufTtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./client\"), exports);\ntslib_1.__exportStar(require(\"./command\"), exports);\ntslib_1.__exportStar(require(\"./document-type\"), exports);\ntslib_1.__exportStar(require(\"./exception\"), exports);\ntslib_1.__exportStar(require(\"./extended-encode-uri-component\"), exports);\ntslib_1.__exportStar(require(\"./get-array-if-single-item\"), exports);\ntslib_1.__exportStar(require(\"./get-value-from-text-node\"), exports);\ntslib_1.__exportStar(require(\"./isa\"), exports);\ntslib_1.__exportStar(require(\"./lazy-json\"), exports);\ntslib_1.__exportStar(require(\"./date-utils\"), exports);\ntslib_1.__exportStar(require(\"./split-every\"), exports);\ntslib_1.__exportStar(require(\"./constants\"), exports);\ntslib_1.__exportStar(require(\"./retryable-trait\"), exports);\ntslib_1.__exportStar(require(\"./sdk-error\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXlCO0FBQ3pCLG9EQUEwQjtBQUMxQiwwREFBZ0M7QUFDaEMsc0RBQTRCO0FBQzVCLDBFQUFnRDtBQUNoRCxxRUFBMkM7QUFDM0MscUVBQTJDO0FBQzNDLGdEQUFzQjtBQUN0QixzREFBNEI7QUFDNUIsdURBQTZCO0FBQzdCLHdEQUE4QjtBQUM5QixzREFBNEI7QUFDNUIsNERBQWtDO0FBQ2xDLHNEQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NsaWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tbWFuZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG9jdW1lbnQtdHlwZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhjZXB0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHRlbmRlZC1lbmNvZGUtdXJpLWNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2V0LWFycmF5LWlmLXNpbmdsZS1pdGVtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZXQtdmFsdWUtZnJvbS10ZXh0LW5vZGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGF6eS1qc29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRlLXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zcGxpdC1ldmVyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXRyeWFibGUtdHJhaXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Nkay1lcnJvclwiO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isa = void 0;\n/**\n * Checks if the given value is a Smithy structure of the given type.\n */\nfunction isa(o) {\n    var ids = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        ids[_i - 1] = arguments[_i];\n    }\n    return (typeof o === \"object\" &&\n        // Checks for name after __type, as name is used instead for errors.\n        ((\"__type\" in o && ids.indexOf(o[\"__type\"]) > -1) || (\"name\" in o && ids.indexOf(o[\"name\"]) > -1)));\n}\nexports.isa = isa;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lzYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILFNBQWdCLEdBQUcsQ0FBSSxDQUFNO0lBQUUsYUFBZ0I7U0FBaEIsVUFBZ0IsRUFBaEIscUJBQWdCLEVBQWhCLElBQWdCO1FBQWhCLDRCQUFnQjs7SUFDN0MsT0FBTyxDQUNMLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFDckIsb0VBQW9FO1FBQ3BFLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25HLENBQUM7QUFDSixDQUFDO0FBTkQsa0JBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBTbWl0aHkgc3RydWN0dXJlIG9mIHRoZSBnaXZlbiB0eXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNhPFQ+KG86IGFueSwgLi4uaWRzOiBzdHJpbmdbXSk6IG8gaXMgVCB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG8gPT09IFwib2JqZWN0XCIgJiZcbiAgICAvLyBDaGVja3MgZm9yIG5hbWUgYWZ0ZXIgX190eXBlLCBhcyBuYW1lIGlzIHVzZWQgaW5zdGVhZCBmb3IgZXJyb3JzLlxuICAgICgoXCJfX3R5cGVcIiBpbiBvICYmIGlkcy5pbmRleE9mKG9bXCJfX3R5cGVcIl0pID4gLTEpIHx8IChcIm5hbWVcIiBpbiBvICYmIGlkcy5pbmRleE9mKG9bXCJuYW1lXCJdKSA+IC0xKSlcbiAgKTtcbn1cbiJdfQ==","\"use strict\";\n/**\n * Lazy String holder for JSON typed contents.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LazyJsonString = exports.StringWrapper = void 0;\nvar tslib_1 = require(\"tslib\");\n/**\n * Because of https://github.com/microsoft/tslib/issues/95,\n * TS 'extends' shim doesn't support extending native types like String.\n * So here we create StringWrapper that duplicate everything from String\n * class including its prototype chain. So we can extend from here.\n */\n// @ts-ignore StringWrapper implementation is not a simple constructor\nexports.StringWrapper = function () {\n    //@ts-ignore 'this' cannot be assigned to any, but Object.getPrototypeOf accepts any\n    var Class = Object.getPrototypeOf(this).constructor;\n    var Constructor = Function.bind.apply(String, tslib_1.__spread([null], arguments));\n    //@ts-ignore Call wrapped String constructor directly, don't bother typing it.\n    var instance = new Constructor();\n    Object.setPrototypeOf(instance, Class.prototype);\n    return instance;\n};\nexports.StringWrapper.prototype = Object.create(String.prototype, {\n    constructor: {\n        value: exports.StringWrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true,\n    },\n});\nObject.setPrototypeOf(exports.StringWrapper, String);\nvar LazyJsonString = /** @class */ (function (_super) {\n    tslib_1.__extends(LazyJsonString, _super);\n    function LazyJsonString() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LazyJsonString.prototype.deserializeJSON = function () {\n        return JSON.parse(_super.prototype.toString.call(this));\n    };\n    LazyJsonString.prototype.toJSON = function () {\n        return _super.prototype.toString.call(this);\n    };\n    LazyJsonString.fromObject = function (object) {\n        if (object instanceof LazyJsonString) {\n            return object;\n        }\n        else if (object instanceof String || typeof object === \"string\") {\n            return new LazyJsonString(object);\n        }\n        return new LazyJsonString(JSON.stringify(object));\n    };\n    return LazyJsonString;\n}(exports.StringWrapper));\nexports.LazyJsonString = LazyJsonString;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1qc29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xhenktanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7QUFNSDs7Ozs7R0FLRztBQUNILHNFQUFzRTtBQUN6RCxRQUFBLGFBQWEsR0FBa0I7SUFDMUMsb0ZBQW9GO0lBQ3BGLElBQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3RELElBQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sb0JBQUcsSUFBVyxHQUFLLFNBQVMsRUFBRSxDQUFDO0lBQzdFLDhFQUE4RTtJQUM5RSxJQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ25DLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxPQUFPLFFBQWtCLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBQ0YscUJBQWEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO0lBQ3hELFdBQVcsRUFBRTtRQUNYLEtBQUssRUFBRSxxQkFBYTtRQUNwQixVQUFVLEVBQUUsS0FBSztRQUNqQixRQUFRLEVBQUUsSUFBSTtRQUNkLFlBQVksRUFBRSxJQUFJO0tBQ25CO0NBQ0YsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxxQkFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTdDO0lBQW9DLDBDQUFhO0lBQWpEOztJQWlCQSxDQUFDO0lBaEJDLHdDQUFlLEdBQWY7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQU0sUUFBUSxXQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsK0JBQU0sR0FBTjtRQUNFLE9BQU8saUJBQU0sUUFBUSxXQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLHlCQUFVLEdBQWpCLFVBQWtCLE1BQVc7UUFDM0IsSUFBSSxNQUFNLFlBQVksY0FBYyxFQUFFO1lBQ3BDLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7YUFBTSxJQUFJLE1BQU0sWUFBWSxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBakJELENBQW9DLHFCQUFhLEdBaUJoRDtBQWpCWSx3Q0FBYyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGF6eSBTdHJpbmcgaG9sZGVyIGZvciBKU09OIHR5cGVkIGNvbnRlbnRzLlxuICovXG5cbmludGVyZmFjZSBTdHJpbmdXcmFwcGVyIHtcbiAgbmV3IChhcmc6IGFueSk6IFN0cmluZztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvdHNsaWIvaXNzdWVzLzk1LFxuICogVFMgJ2V4dGVuZHMnIHNoaW0gZG9lc24ndCBzdXBwb3J0IGV4dGVuZGluZyBuYXRpdmUgdHlwZXMgbGlrZSBTdHJpbmcuXG4gKiBTbyBoZXJlIHdlIGNyZWF0ZSBTdHJpbmdXcmFwcGVyIHRoYXQgZHVwbGljYXRlIGV2ZXJ5dGhpbmcgZnJvbSBTdHJpbmdcbiAqIGNsYXNzIGluY2x1ZGluZyBpdHMgcHJvdG90eXBlIGNoYWluLiBTbyB3ZSBjYW4gZXh0ZW5kIGZyb20gaGVyZS5cbiAqL1xuLy8gQHRzLWlnbm9yZSBTdHJpbmdXcmFwcGVyIGltcGxlbWVudGF0aW9uIGlzIG5vdCBhIHNpbXBsZSBjb25zdHJ1Y3RvclxuZXhwb3J0IGNvbnN0IFN0cmluZ1dyYXBwZXI6IFN0cmluZ1dyYXBwZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8vQHRzLWlnbm9yZSAndGhpcycgY2Fubm90IGJlIGFzc2lnbmVkIHRvIGFueSwgYnV0IE9iamVjdC5nZXRQcm90b3R5cGVPZiBhY2NlcHRzIGFueVxuICBjb25zdCBDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgY29uc3QgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFN0cmluZywgW251bGwgYXMgYW55LCAuLi5hcmd1bWVudHNdKTtcbiAgLy9AdHMtaWdub3JlIENhbGwgd3JhcHBlZCBTdHJpbmcgY29uc3RydWN0b3IgZGlyZWN0bHksIGRvbid0IGJvdGhlciB0eXBpbmcgaXQuXG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgcmV0dXJuIGluc3RhbmNlIGFzIFN0cmluZztcbn07XG5TdHJpbmdXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RyaW5nLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3Rvcjoge1xuICAgIHZhbHVlOiBTdHJpbmdXcmFwcGVyLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSxcbn0pO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFN0cmluZ1dyYXBwZXIsIFN0cmluZyk7XG5cbmV4cG9ydCBjbGFzcyBMYXp5SnNvblN0cmluZyBleHRlbmRzIFN0cmluZ1dyYXBwZXIge1xuICBkZXNlcmlhbGl6ZUpTT04oKTogYW55IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdXBlci50b1N0cmluZygpKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXBlci50b1N0cmluZygpO1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqZWN0OiBhbnkpOiBMYXp5SnNvblN0cmluZyB7XG4gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIExhenlKc29uU3RyaW5nKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBvYmplY3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBuZXcgTGF6eUpzb25TdHJpbmcob2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBMYXp5SnNvblN0cmluZyhKU09OLnN0cmluZ2lmeShvYmplY3QpKTtcbiAgfVxufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnlhYmxlLXRyYWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JldHJ5YWJsZS10cmFpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHN0cnVjdHVyZSBzaGFwZSB3aXRoIHRoZSBlcnJvciB0cmFpdC5cbiAqIGh0dHBzOi8vYXdzbGFicy5naXRodWIuaW8vc21pdGh5L3NwZWMvY29yZS5odG1sI3JldHJ5YWJsZS10cmFpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5YWJsZVRyYWl0IHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBlcnJvciBpcyBhIHJldHJ5YWJsZSB0aHJvdHRsaW5nIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGluZz86IGJvb2xlYW47XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nkay1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWV0YWRhdGFCZWFyZXIgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuaW1wb3J0IHsgU21pdGh5RXhjZXB0aW9uIH0gZnJvbSBcIi4vZXhjZXB0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFNka0Vycm9yID0gRXJyb3IgJiBTbWl0aHlFeGNlcHRpb24gJiBNZXRhZGF0YUJlYXJlcjtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitEvery = void 0;\n/**\n * Given an input string, splits based on the delimiter after a given\n * number of delimiters has been encountered.\n *\n * @param value The input string to split.\n * @param delimiter The delimiter to split on.\n * @param numDelimiters The number of delimiters to have encountered to split.\n */\nfunction splitEvery(value, delimiter, numDelimiters) {\n    // Fail if we don't have a clear number to split on.\n    if (numDelimiters <= 0 || !Number.isInteger(numDelimiters)) {\n        throw new Error(\"Invalid number of delimiters (\" + numDelimiters + \") for splitEvery.\");\n    }\n    var segments = value.split(delimiter);\n    // Short circuit extra logic for the simple case.\n    if (numDelimiters === 1) {\n        return segments;\n    }\n    var compoundSegments = [];\n    var currentSegment = \"\";\n    for (var i = 0; i < segments.length; i++) {\n        if (currentSegment === \"\") {\n            // Start a new segment.\n            currentSegment = segments[i];\n        }\n        else {\n            // Compound the current segment with the delimiter.\n            currentSegment += delimiter + segments[i];\n        }\n        if ((i + 1) % numDelimiters === 0) {\n            // We encountered the right number of delimiters, so add the entry.\n            compoundSegments.push(currentSegment);\n            // And reset the current segment.\n            currentSegment = \"\";\n        }\n    }\n    // Handle any leftover segment portion.\n    if (currentSegment !== \"\") {\n        compoundSegments.push(currentSegment);\n    }\n    return compoundSegments;\n}\nexports.splitEvery = splitEvery;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtZXZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BsaXQtZXZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxhQUFxQjtJQUNoRixvREFBb0Q7SUFDcEQsSUFBSSxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxHQUFHLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3pGO0lBRUQsSUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxpREFBaUQ7SUFDakQsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0lBRUQsSUFBTSxnQkFBZ0IsR0FBa0IsRUFBRSxDQUFDO0lBQzNDLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxJQUFJLGNBQWMsS0FBSyxFQUFFLEVBQUU7WUFDekIsdUJBQXVCO1lBQ3ZCLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7YUFBTTtZQUNMLG1EQUFtRDtZQUNuRCxjQUFjLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxLQUFLLENBQUMsRUFBRTtZQUNqQyxtRUFBbUU7WUFDbkUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLGlDQUFpQztZQUNqQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1NBQ3JCO0tBQ0Y7SUFFRCx1Q0FBdUM7SUFDdkMsSUFBSSxjQUFjLEtBQUssRUFBRSxFQUFFO1FBQ3pCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUN2QztJQUVELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQXJDRCxnQ0FxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdpdmVuIGFuIGlucHV0IHN0cmluZywgc3BsaXRzIGJhc2VkIG9uIHRoZSBkZWxpbWl0ZXIgYWZ0ZXIgYSBnaXZlblxuICogbnVtYmVyIG9mIGRlbGltaXRlcnMgaGFzIGJlZW4gZW5jb3VudGVyZWQuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSBpbnB1dCBzdHJpbmcgdG8gc3BsaXQuXG4gKiBAcGFyYW0gZGVsaW1pdGVyIFRoZSBkZWxpbWl0ZXIgdG8gc3BsaXQgb24uXG4gKiBAcGFyYW0gbnVtRGVsaW1pdGVycyBUaGUgbnVtYmVyIG9mIGRlbGltaXRlcnMgdG8gaGF2ZSBlbmNvdW50ZXJlZCB0byBzcGxpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0RXZlcnkodmFsdWU6IHN0cmluZywgZGVsaW1pdGVyOiBzdHJpbmcsIG51bURlbGltaXRlcnM6IG51bWJlcik6IEFycmF5PHN0cmluZz4ge1xuICAvLyBGYWlsIGlmIHdlIGRvbid0IGhhdmUgYSBjbGVhciBudW1iZXIgdG8gc3BsaXQgb24uXG4gIGlmIChudW1EZWxpbWl0ZXJzIDw9IDAgfHwgIU51bWJlci5pc0ludGVnZXIobnVtRGVsaW1pdGVycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBkZWxpbWl0ZXJzIChcIiArIG51bURlbGltaXRlcnMgKyBcIikgZm9yIHNwbGl0RXZlcnkuXCIpO1xuICB9XG5cbiAgY29uc3Qgc2VnbWVudHMgPSB2YWx1ZS5zcGxpdChkZWxpbWl0ZXIpO1xuICAvLyBTaG9ydCBjaXJjdWl0IGV4dHJhIGxvZ2ljIGZvciB0aGUgc2ltcGxlIGNhc2UuXG4gIGlmIChudW1EZWxpbWl0ZXJzID09PSAxKSB7XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgY29uc3QgY29tcG91bmRTZWdtZW50czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBsZXQgY3VycmVudFNlZ21lbnQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGN1cnJlbnRTZWdtZW50ID09PSBcIlwiKSB7XG4gICAgICAvLyBTdGFydCBhIG5ldyBzZWdtZW50LlxuICAgICAgY3VycmVudFNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcG91bmQgdGhlIGN1cnJlbnQgc2VnbWVudCB3aXRoIHRoZSBkZWxpbWl0ZXIuXG4gICAgICBjdXJyZW50U2VnbWVudCArPSBkZWxpbWl0ZXIgKyBzZWdtZW50c1tpXTtcbiAgICB9XG5cbiAgICBpZiAoKGkgKyAxKSAlIG51bURlbGltaXRlcnMgPT09IDApIHtcbiAgICAgIC8vIFdlIGVuY291bnRlcmVkIHRoZSByaWdodCBudW1iZXIgb2YgZGVsaW1pdGVycywgc28gYWRkIHRoZSBlbnRyeS5cbiAgICAgIGNvbXBvdW5kU2VnbWVudHMucHVzaChjdXJyZW50U2VnbWVudCk7XG4gICAgICAvLyBBbmQgcmVzZXQgdGhlIGN1cnJlbnQgc2VnbWVudC5cbiAgICAgIGN1cnJlbnRTZWdtZW50ID0gXCJcIjtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgYW55IGxlZnRvdmVyIHNlZ21lbnQgcG9ydGlvbi5cbiAgaWYgKGN1cnJlbnRTZWdtZW50ICE9PSBcIlwiKSB7XG4gICAgY29tcG91bmRTZWdtZW50cy5wdXNoKGN1cnJlbnRTZWdtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb21wb3VuZFNlZ21lbnRzO1xufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseUrl = void 0;\nvar querystring_parser_1 = require(\"@aws-sdk/querystring-parser\");\nexports.parseUrl = function (url) {\n    var _a = new URL(url), hostname = _a.hostname, pathname = _a.pathname, port = _a.port, protocol = _a.protocol, search = _a.search;\n    var query;\n    if (search) {\n        query = querystring_parser_1.parseQueryString(search);\n    }\n    return {\n        hostname: hostname,\n        port: port ? parseInt(port) : undefined,\n        protocol: protocol,\n        path: pathname,\n        query: query,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0VBQStEO0FBR2xELFFBQUEsUUFBUSxHQUFjLFVBQUMsR0FBVztJQUN2QyxJQUFBLEtBQWlELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUEzRCxRQUFRLGNBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxJQUFJLFVBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxNQUFNLFlBQWlCLENBQUM7SUFFcEUsSUFBSSxLQUFvQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxFQUFFO1FBQ1YsS0FBSyxHQUFHLHFDQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsT0FBTztRQUNMLFFBQVEsVUFBQTtRQUNSLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN2QyxRQUFRLFVBQUE7UUFDUixJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssT0FBQTtLQUNOLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZVF1ZXJ5U3RyaW5nIH0gZnJvbSBcIkBhd3Mtc2RrL3F1ZXJ5c3RyaW5nLXBhcnNlclwiO1xuaW1wb3J0IHsgRW5kcG9pbnQsIFF1ZXJ5UGFyYW1ldGVyQmFnLCBVcmxQYXJzZXIgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVXJsOiBVcmxQYXJzZXIgPSAodXJsOiBzdHJpbmcpOiBFbmRwb2ludCA9PiB7XG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgVVJMKHVybCk7XG5cbiAgbGV0IHF1ZXJ5OiBRdWVyeVBhcmFtZXRlckJhZyB8IHVuZGVmaW5lZDtcbiAgaWYgKHNlYXJjaCkge1xuICAgIHF1ZXJ5ID0gcGFyc2VRdWVyeVN0cmluZyhzZWFyY2gpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBob3N0bmFtZSxcbiAgICBwb3J0OiBwb3J0ID8gcGFyc2VJbnQocG9ydCkgOiB1bmRlZmluZWQsXG4gICAgcHJvdG9jb2wsXG4gICAgcGF0aDogcGF0aG5hbWUsXG4gICAgcXVlcnksXG4gIH07XG59O1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBase64 = exports.fromBase64 = void 0;\nvar alphabetByEncoding = {};\nvar alphabetByValue = new Array(64);\nfor (var i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n    var char = String.fromCharCode(i + start);\n    alphabetByEncoding[char] = i;\n    alphabetByValue[i] = char;\n}\nfor (var i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n    var char = String.fromCharCode(i + start);\n    var index = i + 26;\n    alphabetByEncoding[char] = index;\n    alphabetByValue[index] = char;\n}\nfor (var i = 0; i < 10; i++) {\n    alphabetByEncoding[i.toString(10)] = i + 52;\n    var char = i.toString(10);\n    var index = i + 52;\n    alphabetByEncoding[char] = index;\n    alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nvar bitsPerLetter = 6;\nvar bitsPerByte = 8;\nvar maxLetterValue = 63;\n/**\n * Converts a base-64 encoded string to a Uint8Array of bytes.\n *\n * @param input The base-64 encoded string\n *\n * @see https://tools.ietf.org/html/rfc4648#section-4\n */\nfunction fromBase64(input) {\n    var totalByteLength = (input.length / 4) * 3;\n    if (input.substr(-2) === \"==\") {\n        totalByteLength -= 2;\n    }\n    else if (input.substr(-1) === \"=\") {\n        totalByteLength--;\n    }\n    var out = new ArrayBuffer(totalByteLength);\n    var dataView = new DataView(out);\n    for (var i = 0; i < input.length; i += 4) {\n        var bits = 0;\n        var bitLength = 0;\n        for (var j = i, limit = i + 3; j <= limit; j++) {\n            if (input[j] !== \"=\") {\n                bits |= alphabetByEncoding[input[j]] << ((limit - j) * bitsPerLetter);\n                bitLength += bitsPerLetter;\n            }\n            else {\n                bits >>= bitsPerLetter;\n            }\n        }\n        var chunkOffset = (i / 4) * 3;\n        bits >>= bitLength % bitsPerByte;\n        var byteLength = Math.floor(bitLength / bitsPerByte);\n        for (var k = 0; k < byteLength; k++) {\n            var offset = (byteLength - k - 1) * bitsPerByte;\n            dataView.setUint8(chunkOffset + k, (bits & (255 << offset)) >> offset);\n        }\n    }\n    return new Uint8Array(out);\n}\nexports.fromBase64 = fromBase64;\n/**\n * Converts a Uint8Array of binary data to a base-64 encoded string.\n *\n * @param input The binary data to encode\n *\n * @see https://tools.ietf.org/html/rfc4648#section-4\n */\nfunction toBase64(input) {\n    var str = \"\";\n    for (var i = 0; i < input.length; i += 3) {\n        var bits = 0;\n        var bitLength = 0;\n        for (var j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n            bits |= input[j] << ((limit - j - 1) * bitsPerByte);\n            bitLength += bitsPerByte;\n        }\n        var bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n        bits <<= bitClusterCount * bitsPerLetter - bitLength;\n        for (var k = 1; k <= bitClusterCount; k++) {\n            var offset = (bitClusterCount - k) * bitsPerLetter;\n            str += alphabetByValue[(bits & (maxLetterValue << offset)) >> offset];\n        }\n        str += \"==\".slice(0, 4 - bitClusterCount);\n    }\n    return str;\n}\nexports.toBase64 = toBase64;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBTSxrQkFBa0IsR0FBOEIsRUFBRSxDQUFDO0FBQ3pELElBQU0sZUFBZSxHQUFrQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUVyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM3RixJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUM1QyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUMzQjtBQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzdGLElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzVDLElBQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDckIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDL0I7QUFFRCxLQUFLLElBQUks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ZUFBZSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7U0FDdkU7UUFFRCxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0tBQzNDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBckJELDRCQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGFscGhhYmV0QnlFbmNvZGluZzogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuY29uc3QgYWxwaGFiZXRCeVZhbHVlOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5KDY0KTtcblxuZm9yIChsZXQgaSA9IDAsIHN0YXJ0ID0gXCJBXCIuY2hhckNvZGVBdCgwKSwgbGltaXQgPSBcIlpcIi5jaGFyQ29kZUF0KDApOyBpICsgc3RhcnQgPD0gbGltaXQ7IGkrKykge1xuICBjb25zdCBjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShpICsgc3RhcnQpO1xuICBhbHBoYWJldEJ5RW5jb2RpbmdbY2hhcl0gPSBpO1xuICBhbHBoYWJldEJ5VmFsdWVbaV0gPSBjaGFyO1xufVxuXG5mb3IgKGxldCBpID0gMCwgc3RhcnQgPSBcImFcIi5jaGFyQ29kZUF0KDApLCBsaW1pdCA9IFwielwiLmNoYXJDb2RlQXQoMCk7IGkgKyBzdGFydCA8PSBsaW1pdDsgaSsrKSB7XG4gIGNvbnN0IGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyBzdGFydCk7XG4gIGNvbnN0IGluZGV4ID0gaSArIDI2O1xuICBhbHBoYWJldEJ5RW5jb2RpbmdbY2hhcl0gPSBpbmRleDtcbiAgYWxwaGFiZXRCeVZhbHVlW2luZGV4XSA9IGNoYXI7XG59XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICBhbHBoYWJldEJ5RW5jb2RpbmdbaS50b1N0cmluZygxMCldID0gaSArIDUyO1xuICBjb25zdCBjaGFyID0gaS50b1N0cmluZygxMCk7XG4gIGNvbnN0IGluZGV4ID0gaSArIDUyO1xuICBhbHBoYWJldEJ5RW5jb2RpbmdbY2hhcl0gPSBpbmRleDtcbiAgYWxwaGFiZXRCeVZhbHVlW2luZGV4XSA9IGNoYXI7XG59XG5cbmFscGhhYmV0QnlFbmNvZGluZ1tcIitcIl0gPSA2MjtcbmFscGhhYmV0QnlWYWx1ZVs2Ml0gPSBcIitcIjtcbmFscGhhYmV0QnlFbmNvZGluZ1tcIi9cIl0gPSA2MztcbmFscGhhYmV0QnlWYWx1ZVs2M10gPSBcIi9cIjtcblxuY29uc3QgYml0c1BlckxldHRlciA9IDY7XG5jb25zdCBiaXRzUGVyQnl0ZSA9IDg7XG5jb25zdCBtYXhMZXR0ZXJWYWx1ZSA9IDBiMTExMTExO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgYmFzZS02NCBlbmNvZGVkIHN0cmluZyB0byBhIFVpbnQ4QXJyYXkgb2YgYnl0ZXMuXG4gKlxuICogQHBhcmFtIGlucHV0IFRoZSBiYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gKlxuICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCNzZWN0aW9uLTRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21CYXNlNjQoaW5wdXQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICBsZXQgdG90YWxCeXRlTGVuZ3RoID0gKGlucHV0Lmxlbmd0aCAvIDQpICogMztcbiAgaWYgKGlucHV0LnN1YnN0cigtMikgPT09IFwiPT1cIikge1xuICAgIHRvdGFsQnl0ZUxlbmd0aCAtPSAyO1xuICB9IGVsc2UgaWYgKGlucHV0LnN1YnN0cigtMSkgPT09IFwiPVwiKSB7XG4gICAgdG90YWxCeXRlTGVuZ3RoLS07XG4gIH1cbiAgY29uc3Qgb3V0ID0gbmV3IEFycmF5QnVmZmVyKHRvdGFsQnl0ZUxlbmd0aCk7XG4gIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KG91dCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpICs9IDQpIHtcbiAgICBsZXQgYml0cyA9IDA7XG4gICAgbGV0IGJpdExlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IGksIGxpbWl0ID0gaSArIDM7IGogPD0gbGltaXQ7IGorKykge1xuICAgICAgaWYgKGlucHV0W2pdICE9PSBcIj1cIikge1xuICAgICAgICBiaXRzIHw9IGFscGhhYmV0QnlFbmNvZGluZ1tpbnB1dFtqXV0gPDwgKChsaW1pdCAtIGopICogYml0c1BlckxldHRlcik7XG4gICAgICAgIGJpdExlbmd0aCArPSBiaXRzUGVyTGV0dGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYml0cyA+Pj0gYml0c1BlckxldHRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaHVua09mZnNldCA9IChpIC8gNCkgKiAzO1xuICAgIGJpdHMgPj49IGJpdExlbmd0aCAlIGJpdHNQZXJCeXRlO1xuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBNYXRoLmZsb29yKGJpdExlbmd0aCAvIGJpdHNQZXJCeXRlKTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGJ5dGVMZW5ndGg7IGsrKykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gKGJ5dGVMZW5ndGggLSBrIC0gMSkgKiBiaXRzUGVyQnl0ZTtcbiAgICAgIGRhdGFWaWV3LnNldFVpbnQ4KGNodW5rT2Zmc2V0ICsgaywgKGJpdHMgJiAoMjU1IDw8IG9mZnNldCkpID4+IG9mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG91dCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBVaW50OEFycmF5IG9mIGJpbmFyeSBkYXRhIHRvIGEgYmFzZS02NCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgVGhlIGJpbmFyeSBkYXRhIHRvIGVuY29kZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgjc2VjdGlvbi00XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Jhc2U2NChpbnB1dDogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIGxldCBzdHIgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSArPSAzKSB7XG4gICAgbGV0IGJpdHMgPSAwO1xuICAgIGxldCBiaXRMZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGogPSBpLCBsaW1pdCA9IE1hdGgubWluKGkgKyAzLCBpbnB1dC5sZW5ndGgpOyBqIDwgbGltaXQ7IGorKykge1xuICAgICAgYml0cyB8PSBpbnB1dFtqXSA8PCAoKGxpbWl0IC0gaiAtIDEpICogYml0c1BlckJ5dGUpO1xuICAgICAgYml0TGVuZ3RoICs9IGJpdHNQZXJCeXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdENsdXN0ZXJDb3VudCA9IE1hdGguY2VpbChiaXRMZW5ndGggLyBiaXRzUGVyTGV0dGVyKTtcbiAgICBiaXRzIDw8PSBiaXRDbHVzdGVyQ291bnQgKiBiaXRzUGVyTGV0dGVyIC0gYml0TGVuZ3RoO1xuICAgIGZvciAobGV0IGsgPSAxOyBrIDw9IGJpdENsdXN0ZXJDb3VudDsgaysrKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSAoYml0Q2x1c3RlckNvdW50IC0gaykgKiBiaXRzUGVyTGV0dGVyO1xuICAgICAgc3RyICs9IGFscGhhYmV0QnlWYWx1ZVsoYml0cyAmIChtYXhMZXR0ZXJWYWx1ZSA8PCBvZmZzZXQpKSA+PiBvZmZzZXRdO1xuICAgIH1cblxuICAgIHN0ciArPSBcIj09XCIuc2xpY2UoMCwgNCAtIGJpdENsdXN0ZXJDb3VudCk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.calculateBodyLength = void 0;\nfunction calculateBodyLength(body) {\n    if (typeof body === \"string\") {\n        return new Blob([body]).size;\n    }\n    else if (typeof body.byteLength === \"number\") {\n        // handles Uint8Array, ArrayBuffer, Buffer, and ArrayBufferView\n        return body.byteLength;\n    }\n    else if (typeof body.size === \"number\") {\n        // handles browser File object\n        return body.size;\n    }\n}\nexports.calculateBodyLength = calculateBodyLength;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsbUJBQW1CLENBQUMsSUFBUztJQUMzQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDOUI7U0FBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7UUFDOUMsK0RBQStEO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUN4QjtTQUFNLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUN4Qyw4QkFBOEI7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQVZELGtEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUJvZHlMZW5ndGgoYm9keTogYW55KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtib2R5XSkuc2l6ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYm9keS5ieXRlTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgLy8gaGFuZGxlcyBVaW50OEFycmF5LCBBcnJheUJ1ZmZlciwgQnVmZmVyLCBhbmQgQXJyYXlCdWZmZXJWaWV3XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYm9keS5zaXplID09PSBcIm51bWJlclwiKSB7XG4gICAgLy8gaGFuZGxlcyBicm93c2VyIEZpbGUgb2JqZWN0XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toHex = exports.fromHex = void 0;\nvar SHORT_TO_HEX = {};\nvar HEX_TO_SHORT = {};\nfor (var i = 0; i < 256; i++) {\n    var encodedByte = i.toString(16).toLowerCase();\n    if (encodedByte.length === 1) {\n        encodedByte = \"0\" + encodedByte;\n    }\n    SHORT_TO_HEX[i] = encodedByte;\n    HEX_TO_SHORT[encodedByte] = i;\n}\n/**\n * Converts a hexadecimal encoded string to a Uint8Array of bytes.\n *\n * @param encoded The hexadecimal encoded string\n */\nfunction fromHex(encoded) {\n    if (encoded.length % 2 !== 0) {\n        throw new Error(\"Hex encoded strings must have an even number length\");\n    }\n    var out = new Uint8Array(encoded.length / 2);\n    for (var i = 0; i < encoded.length; i += 2) {\n        var encodedByte = encoded.substr(i, 2).toLowerCase();\n        if (encodedByte in HEX_TO_SHORT) {\n            out[i / 2] = HEX_TO_SHORT[encodedByte];\n        }\n        else {\n            throw new Error(\"Cannot decode unrecognized sequence \" + encodedByte + \" as hexadecimal\");\n        }\n    }\n    return out;\n}\nexports.fromHex = fromHex;\n/**\n * Converts a Uint8Array of binary data to a hexadecimal encoded string.\n *\n * @param bytes The binary data to encode\n */\nfunction toHex(bytes) {\n    var out = \"\";\n    for (var i = 0; i < bytes.byteLength; i++) {\n        out += SHORT_TO_HEX[bytes[i]];\n    }\n    return out;\n}\nexports.toHex = toHex;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFlBQVksR0FBOEIsRUFBRSxDQUFDO0FBQ25ELElBQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7QUFFbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM1QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9DLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDNUIsV0FBVyxHQUFHLE1BQUksV0FBYSxDQUFDO0tBQ2pDO0lBRUQsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztJQUM5QixZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQy9CO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxPQUFlO0lBQ3JDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztLQUN4RTtJQUVELElBQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxQyxJQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2RCxJQUFJLFdBQVcsSUFBSSxZQUFZLEVBQUU7WUFDL0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDeEM7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXVDLFdBQVcsb0JBQWlCLENBQUMsQ0FBQztTQUN0RjtLQUNGO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBaEJELDBCQWdCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixLQUFLLENBQUMsS0FBaUI7SUFDckMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMvQjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQVBELHNCQU9DIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU0hPUlRfVE9fSEVYOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge307XG5jb25zdCBIRVhfVE9fU0hPUlQ6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICBsZXQgZW5jb2RlZEJ5dGUgPSBpLnRvU3RyaW5nKDE2KS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZW5jb2RlZEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgZW5jb2RlZEJ5dGUgPSBgMCR7ZW5jb2RlZEJ5dGV9YDtcbiAgfVxuXG4gIFNIT1JUX1RPX0hFWFtpXSA9IGVuY29kZWRCeXRlO1xuICBIRVhfVE9fU0hPUlRbZW5jb2RlZEJ5dGVdID0gaTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGhleGFkZWNpbWFsIGVuY29kZWQgc3RyaW5nIHRvIGEgVWludDhBcnJheSBvZiBieXRlcy5cbiAqXG4gKiBAcGFyYW0gZW5jb2RlZCBUaGUgaGV4YWRlY2ltYWwgZW5jb2RlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21IZXgoZW5jb2RlZDogc3RyaW5nKTogVWludDhBcnJheSB7XG4gIGlmIChlbmNvZGVkLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJIZXggZW5jb2RlZCBzdHJpbmdzIG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBsZW5ndGhcIik7XG4gIH1cblxuICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShlbmNvZGVkLmxlbmd0aCAvIDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVuY29kZWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBlbmNvZGVkQnl0ZSA9IGVuY29kZWQuc3Vic3RyKGksIDIpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGVuY29kZWRCeXRlIGluIEhFWF9UT19TSE9SVCkge1xuICAgICAgb3V0W2kgLyAyXSA9IEhFWF9UT19TSE9SVFtlbmNvZGVkQnl0ZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlY29kZSB1bnJlY29nbml6ZWQgc2VxdWVuY2UgJHtlbmNvZGVkQnl0ZX0gYXMgaGV4YWRlY2ltYWxgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVWludDhBcnJheSBvZiBiaW5hcnkgZGF0YSB0byBhIGhleGFkZWNpbWFsIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBieXRlcyBUaGUgYmluYXJ5IGRhdGEgdG8gZW5jb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0hleChieXRlczogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIGxldCBvdXQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgIG91dCArPSBTSE9SVF9UT19IRVhbYnl0ZXNbaV1dO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==","var fallbackWindow = {};\n/**\n * Locates the global scope for a browser or browser-like environment. If\n * neither `window` nor `self` is defined by the environment, the same object\n * will be returned on each invocation.\n */\nexport function locateWindow() {\n    if (typeof window !== \"undefined\") {\n        return window;\n    }\n    else if (typeof self !== \"undefined\") {\n        return self;\n    }\n    return fallbackWindow;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxjQUFjLEdBQUcsRUFBWSxDQUFDO0FBRXBDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWTtJQUMxQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUNqQyxPQUFPLE1BQU0sQ0FBQztLQUNmO1NBQU0sSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLEVBQUU7UUFDdEMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBmYWxsYmFja1dpbmRvdyA9IHt9IGFzIFdpbmRvdztcblxuLyoqXG4gKiBMb2NhdGVzIHRoZSBnbG9iYWwgc2NvcGUgZm9yIGEgYnJvd3NlciBvciBicm93c2VyLWxpa2UgZW52aXJvbm1lbnQuIElmXG4gKiBuZWl0aGVyIGB3aW5kb3dgIG5vciBgc2VsZmAgaXMgZGVmaW5lZCBieSB0aGUgZW52aXJvbm1lbnQsIHRoZSBzYW1lIG9iamVjdFxuICogd2lsbCBiZSByZXR1cm5lZCBvbiBlYWNoIGludm9jYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGVXaW5kb3coKTogV2luZG93IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2tXaW5kb3c7XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeUriPath = void 0;\nvar tslib_1 = require(\"tslib\");\nvar escape_uri_1 = require(\"./escape-uri\");\nfunction escapeUriPath(uri) {\n    var e_1, _a;\n    var parts = [];\n    try {\n        for (var _b = tslib_1.__values(uri.split(\"/\")), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var sub = _c.value;\n            parts.push(escape_uri_1.escapeUri(sub));\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return parts.join(\"/\");\n}\nexports.escapeUriPath = escapeUriPath;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLXVyaS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VzY2FwZS11cmktcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXlDO0FBQ3pDLFNBQWdCLGFBQWEsQ0FBQyxHQUFXOztJQUN2QyxJQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7O1FBQzNCLEtBQWtCLElBQUEsS0FBQSxpQkFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBLGdCQUFBLDRCQUFFO1lBQTdCLElBQU0sR0FBRyxXQUFBO1lBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxzQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUI7Ozs7Ozs7OztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBTkQsc0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlc2NhcGVVcmkgfSBmcm9tIFwiLi9lc2NhcGUtdXJpXCI7XG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlVXJpUGF0aCh1cmk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHN1YiBvZiB1cmkuc3BsaXQoXCIvXCIpKSB7XG4gICAgcGFydHMucHVzaChlc2NhcGVVcmkoc3ViKSk7XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmpvaW4oXCIvXCIpO1xufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeUri = void 0;\nfunction escapeUri(uri) {\n    var output = encodeURIComponent(uri);\n    // AWS percent-encodes some extra non-standard characters in a URI\n    output = output.replace(/[!'()*]/g, hexEncode);\n    return output;\n}\nexports.escapeUri = escapeUri;\nfunction hexEncode(c) {\n    return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLXVyaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lc2NhcGUtdXJpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLFNBQVMsQ0FBQyxHQUFXO0lBQ25DLElBQUksTUFBTSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXJDLGtFQUFrRTtJQUNsRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFL0MsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQVBELDhCQU9DO0FBRUQsU0FBUyxTQUFTLENBQUMsQ0FBUztJQUMxQixPQUFPLE1BQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFJLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBlc2NhcGVVcmkodXJpOiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgb3V0cHV0ID0gZW5jb2RlVVJJQ29tcG9uZW50KHVyaSk7XG5cbiAgLy8gQVdTIHBlcmNlbnQtZW5jb2RlcyBzb21lIGV4dHJhIG5vbi1zdGFuZGFyZCBjaGFyYWN0ZXJzIGluIGEgVVJJXG4gIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9bIScoKSpdL2csIGhleEVuY29kZSk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gaGV4RW5jb2RlKGM6IHN0cmluZykge1xuICByZXR1cm4gYCUke2MuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1gO1xufVxuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./escape-uri\"), exports);\ntslib_1.__exportStar(require(\"./escape-uri-path\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQTZCO0FBQzdCLDREQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2VzY2FwZS11cmlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VzY2FwZS11cmktcGF0aFwiO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultUserAgent = void 0;\nfunction defaultUserAgent(packageName, packageVersion) {\n    var originUserAgent = typeof navigator !== \"undefined\" && typeof navigator.userAgent === \"string\" ? navigator.userAgent : \"\";\n    return \"aws-sdk-js-v3-\" + packageName + \"/\" + packageVersion + \" \" + originUserAgent;\n}\nexports.defaultUserAgent = defaultUserAgent;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsZ0JBQWdCLENBQUMsV0FBbUIsRUFBRSxjQUFzQjtJQUMxRSxJQUFNLGVBQWUsR0FDbkIsT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLE9BQU8sU0FBUyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RyxPQUFPLG1CQUFpQixXQUFXLFNBQUksY0FBYyxTQUFJLGVBQWlCLENBQUM7QUFDN0UsQ0FBQztBQUpELDRDQUlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRVc2VyQWdlbnQocGFja2FnZU5hbWU6IHN0cmluZywgcGFja2FnZVZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG9yaWdpblVzZXJBZ2VudCA9XG4gICAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PT0gXCJzdHJpbmdcIiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiBcIlwiO1xuICByZXR1cm4gYGF3cy1zZGstanMtdjMtJHtwYWNrYWdlTmFtZX0vJHtwYWNrYWdlVmVyc2lvbn0gJHtvcmlnaW5Vc2VyQWdlbnR9YDtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toUtf8 = exports.fromUtf8 = void 0;\nvar pureJs_1 = require(\"./pureJs\");\nvar whatwgEncodingApi_1 = require(\"./whatwgEncodingApi\");\nfunction fromUtf8(input) {\n    if (typeof TextEncoder === \"function\") {\n        return whatwgEncodingApi_1.fromUtf8(input);\n    }\n    return pureJs_1.fromUtf8(input);\n}\nexports.fromUtf8 = fromUtf8;\nfunction toUtf8(input) {\n    if (typeof TextDecoder === \"function\") {\n        return whatwgEncodingApi_1.toUtf8(input);\n    }\n    return pureJs_1.toUtf8(input);\n}\nexports.toUtf8 = toUtf8;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXNFO0FBQ3RFLHlEQUFtRztBQUtuRyxTQUFnQixRQUFRLENBQUMsS0FBYTtJQUNwQyxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRTtRQUNyQyxPQUFPLDRCQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ25DO0lBRUQsT0FBTyxpQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFORCw0QkFNQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxLQUFpQjtJQUN0QyxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRTtRQUNyQyxPQUFPLDBCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2pDO0lBRUQsT0FBTyxlQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQU5ELHdCQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnJvbVV0ZjggYXMganNGcm9tVXRmOCwgdG9VdGY4IGFzIGpzVG9VdGY4IH0gZnJvbSBcIi4vcHVyZUpzXCI7XG5pbXBvcnQgeyBmcm9tVXRmOCBhcyB0ZXh0RW5jb2RlckZyb21VdGY4LCB0b1V0ZjggYXMgdGV4dEVuY29kZXJUb1V0ZjggfSBmcm9tIFwiLi93aGF0d2dFbmNvZGluZ0FwaVwiO1xuXG5kZWNsYXJlIGNvbnN0IFRleHREZWNvZGVyOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbmRlY2xhcmUgY29uc3QgVGV4dEVuY29kZXI6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVV0ZjgoaW5wdXQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICBpZiAodHlwZW9mIFRleHRFbmNvZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdGV4dEVuY29kZXJGcm9tVXRmOChpbnB1dCk7XG4gIH1cblxuICByZXR1cm4ganNGcm9tVXRmOChpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1V0ZjgoaW5wdXQ6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIFRleHREZWNvZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdGV4dEVuY29kZXJUb1V0ZjgoaW5wdXQpO1xuICB9XG5cbiAgcmV0dXJuIGpzVG9VdGY4KGlucHV0KTtcbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toUtf8 = exports.fromUtf8 = void 0;\n/**\n * Converts a JS string from its native UCS-2/UTF-16 representation into a\n * Uint8Array of the bytes used to represent the equivalent characters in UTF-8.\n *\n * Cribbed from the `goog.crypt.stringToUtf8ByteArray` function in the Google\n * Closure library, though updated to use typed arrays.\n */\nfunction fromUtf8(input) {\n    var bytes = [];\n    for (var i = 0, len = input.length; i < len; i++) {\n        var value = input.charCodeAt(i);\n        if (value < 0x80) {\n            bytes.push(value);\n        }\n        else if (value < 0x800) {\n            bytes.push((value >> 6) | 192, (value & 63) | 128);\n        }\n        else if (i + 1 < input.length && (value & 0xfc00) === 0xd800 && (input.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n            var surrogatePair = 0x10000 + ((value & 1023) << 10) + (input.charCodeAt(++i) & 1023);\n            bytes.push((surrogatePair >> 18) | 240, ((surrogatePair >> 12) & 63) | 128, ((surrogatePair >> 6) & 63) | 128, (surrogatePair & 63) | 128);\n        }\n        else {\n            bytes.push((value >> 12) | 224, ((value >> 6) & 63) | 128, (value & 63) | 128);\n        }\n    }\n    return Uint8Array.from(bytes);\n}\nexports.fromUtf8 = fromUtf8;\n/**\n * Converts a typed array of bytes containing UTF-8 data into a native JS\n * string.\n *\n * Partly cribbed from the `goog.crypt.utf8ByteArrayToString` function in the\n * Google Closure library, though updated to use typed arrays and to better\n * handle astral plane code points.\n */\nfunction toUtf8(input) {\n    var decoded = \"\";\n    for (var i = 0, len = input.length; i < len; i++) {\n        var byte = input[i];\n        if (byte < 0x80) {\n            decoded += String.fromCharCode(byte);\n        }\n        else if (192 <= byte && byte < 224) {\n            var nextByte = input[++i];\n            decoded += String.fromCharCode(((byte & 31) << 6) | (nextByte & 63));\n        }\n        else if (240 <= byte && byte < 365) {\n            var surrogatePair = [byte, input[++i], input[++i], input[++i]];\n            var encoded = \"%\" + surrogatePair.map(function (byteValue) { return byteValue.toString(16); }).join(\"%\");\n            decoded += decodeURIComponent(encoded);\n        }\n        else {\n            decoded += String.fromCharCode(((byte & 15) << 12) | ((input[++i] & 63) << 6) | (input[++i] & 63));\n        }\n    }\n    return decoded;\n}\nexports.toUtf8 = toUtf8;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyZUpzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1cmVKcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxTQUFnQixRQUFRLENBQUMsS0FBYTtJQUNwQyxJQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEQsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7WUFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQjthQUFNLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRTtZQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFRLENBQUMsR0FBRyxHQUFVLENBQUMsQ0FBQztTQUN4RTthQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLE1BQU0sRUFBRTtZQUMvRyxJQUFNLGFBQWEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFZLENBQUMsQ0FBQztZQUN4RyxLQUFLLENBQUMsSUFBSSxDQUNSLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQVUsRUFDbEMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFRLENBQUMsR0FBRyxHQUFVLEVBQy9DLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBUSxDQUFDLEdBQUcsR0FBVSxFQUM5QyxDQUFDLGFBQWEsR0FBRyxFQUFRLENBQUMsR0FBRyxHQUFVLENBQ3hDLENBQUM7U0FDSDthQUFNO1lBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFRLENBQUMsR0FBRyxHQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBUSxDQUFDLEdBQUcsR0FBVSxDQUFDLENBQUM7U0FDakg7S0FDRjtJQUVELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBdEJELDRCQXNCQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixNQUFNLENBQUMsS0FBaUI7SUFDdEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEQsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtZQUNmLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxHQUFVLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFVLEVBQUU7WUFDbEQsSUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxFQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2pGO2FBQU0sSUFBSSxHQUFVLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFXLEVBQUU7WUFDbkQsSUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxJQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFDLFNBQVMsSUFBSyxPQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQXRCLENBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekYsT0FBTyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO2FBQU07WUFDTCxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVksQ0FDNUIsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFRLENBQUMsQ0FDbkYsQ0FBQztTQUNIO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBckJELHdCQXFCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgYSBKUyBzdHJpbmcgZnJvbSBpdHMgbmF0aXZlIFVDUy0yL1VURi0xNiByZXByZXNlbnRhdGlvbiBpbnRvIGFcbiAqIFVpbnQ4QXJyYXkgb2YgdGhlIGJ5dGVzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBlcXVpdmFsZW50IGNoYXJhY3RlcnMgaW4gVVRGLTguXG4gKlxuICogQ3JpYmJlZCBmcm9tIHRoZSBgZ29vZy5jcnlwdC5zdHJpbmdUb1V0ZjhCeXRlQXJyYXlgIGZ1bmN0aW9uIGluIHRoZSBHb29nbGVcbiAqIENsb3N1cmUgbGlicmFyeSwgdGhvdWdoIHVwZGF0ZWQgdG8gdXNlIHR5cGVkIGFycmF5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21VdGY4KGlucHV0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgY29uc3QgYnl0ZXM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlucHV0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmICh2YWx1ZSA8IDB4ODApIHtcbiAgICAgIGJ5dGVzLnB1c2godmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPCAweDgwMCkge1xuICAgICAgYnl0ZXMucHVzaCgodmFsdWUgPj4gNikgfCAwYjExMDAwMDAwLCAodmFsdWUgJiAwYjExMTExMSkgfCAwYjEwMDAwMDAwKTtcbiAgICB9IGVsc2UgaWYgKGkgKyAxIDwgaW5wdXQubGVuZ3RoICYmICh2YWx1ZSAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAoaW5wdXQuY2hhckNvZGVBdChpICsgMSkgJiAweGZjMDApID09PSAweGRjMDApIHtcbiAgICAgIGNvbnN0IHN1cnJvZ2F0ZVBhaXIgPSAweDEwMDAwICsgKCh2YWx1ZSAmIDBiMTExMTExMTExMSkgPDwgMTApICsgKGlucHV0LmNoYXJDb2RlQXQoKytpKSAmIDBiMTExMTExMTExMSk7XG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICAoc3Vycm9nYXRlUGFpciA+PiAxOCkgfCAwYjExMTEwMDAwLFxuICAgICAgICAoKHN1cnJvZ2F0ZVBhaXIgPj4gMTIpICYgMGIxMTExMTEpIHwgMGIxMDAwMDAwMCxcbiAgICAgICAgKChzdXJyb2dhdGVQYWlyID4+IDYpICYgMGIxMTExMTEpIHwgMGIxMDAwMDAwMCxcbiAgICAgICAgKHN1cnJvZ2F0ZVBhaXIgJiAwYjExMTExMSkgfCAwYjEwMDAwMDAwXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcy5wdXNoKCh2YWx1ZSA+PiAxMikgfCAwYjExMTAwMDAwLCAoKHZhbHVlID4+IDYpICYgMGIxMTExMTEpIHwgMGIxMDAwMDAwMCwgKHZhbHVlICYgMGIxMTExMTEpIHwgMGIxMDAwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShieXRlcyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB0eXBlZCBhcnJheSBvZiBieXRlcyBjb250YWluaW5nIFVURi04IGRhdGEgaW50byBhIG5hdGl2ZSBKU1xuICogc3RyaW5nLlxuICpcbiAqIFBhcnRseSBjcmliYmVkIGZyb20gdGhlIGBnb29nLmNyeXB0LnV0ZjhCeXRlQXJyYXlUb1N0cmluZ2AgZnVuY3Rpb24gaW4gdGhlXG4gKiBHb29nbGUgQ2xvc3VyZSBsaWJyYXJ5LCB0aG91Z2ggdXBkYXRlZCB0byB1c2UgdHlwZWQgYXJyYXlzIGFuZCB0byBiZXR0ZXJcbiAqIGhhbmRsZSBhc3RyYWwgcGxhbmUgY29kZSBwb2ludHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1V0ZjgoaW5wdXQ6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICBsZXQgZGVjb2RlZCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbnB1dC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXTtcbiAgICBpZiAoYnl0ZSA8IDB4ODApIHtcbiAgICAgIGRlY29kZWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKTtcbiAgICB9IGVsc2UgaWYgKDBiMTEwMDAwMDAgPD0gYnl0ZSAmJiBieXRlIDwgMGIxMTEwMDAwMCkge1xuICAgICAgY29uc3QgbmV4dEJ5dGUgPSBpbnB1dFsrK2ldO1xuICAgICAgZGVjb2RlZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYnl0ZSAmIDBiMTExMTEpIDw8IDYpIHwgKG5leHRCeXRlICYgMGIxMTExMTEpKTtcbiAgICB9IGVsc2UgaWYgKDBiMTExMTAwMDAgPD0gYnl0ZSAmJiBieXRlIDwgMGIxMDExMDExMDEpIHtcbiAgICAgIGNvbnN0IHN1cnJvZ2F0ZVBhaXIgPSBbYnl0ZSwgaW5wdXRbKytpXSwgaW5wdXRbKytpXSwgaW5wdXRbKytpXV07XG4gICAgICBjb25zdCBlbmNvZGVkID0gXCIlXCIgKyBzdXJyb2dhdGVQYWlyLm1hcCgoYnl0ZVZhbHVlKSA9PiBieXRlVmFsdWUudG9TdHJpbmcoMTYpKS5qb2luKFwiJVwiKTtcbiAgICAgIGRlY29kZWQgKz0gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvZGVkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgICAgICgoYnl0ZSAmIDBiMTExMSkgPDwgMTIpIHwgKChpbnB1dFsrK2ldICYgMGIxMTExMTEpIDw8IDYpIHwgKGlucHV0WysraV0gJiAwYjExMTExMSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZWQ7XG59XG4iXX0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toUtf8 = exports.fromUtf8 = void 0;\nfunction fromUtf8(input) {\n    return new TextEncoder().encode(input);\n}\nexports.fromUtf8 = fromUtf8;\nfunction toUtf8(input) {\n    return new TextDecoder(\"utf-8\").decode(input);\n}\nexports.toUtf8 = toUtf8;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hhdHdnRW5jb2RpbmdBcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2hhdHdnRW5jb2RpbmdBcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUNBLFNBQWdCLFFBQVEsQ0FBQyxLQUFhO0lBQ3BDLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUZELDRCQUVDO0FBRUQsU0FBZ0IsTUFBTSxDQUFDLEtBQWlCO0lBQ3RDLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCx3QkFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBkZWNsYXJhdGlvbiBvZiB0aGUgZ2xvYmFsIFRleHRFbmNvZGVyIGFuZCBUZXh0RGVjb2RlciBjb25zdHJ1Y3RvcnMuXG4gKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy9cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2Vcbm5hbWVzcGFjZSBFbmNvZGluZyB7XG4gIGludGVyZmFjZSBUZXh0RGVjb2Rlck9wdGlvbnMge1xuICAgIGZhdGFsPzogYm9vbGVhbjtcbiAgICBpZ25vcmVCT00/OiBib29sZWFuO1xuICB9XG5cbiAgaW50ZXJmYWNlIFRleHREZWNvZGVPcHRpb25zIHtcbiAgICBzdHJlYW0/OiBib29sZWFuO1xuICB9XG5cbiAgaW50ZXJmYWNlIFRleHREZWNvZGVyIHtcbiAgICByZWFkb25seSBlbmNvZGluZzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGZhdGFsOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGlnbm9yZUJPTTogYm9vbGVhbjtcbiAgICBkZWNvZGUoaW5wdXQ/OiBBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlldywgb3B0aW9ucz86IFRleHREZWNvZGVPcHRpb25zKTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBUZXh0RGVjb2RlckNvbnN0cnVjdG9yIHtcbiAgICBuZXcgKGxhYmVsPzogc3RyaW5nLCBvcHRpb25zPzogVGV4dERlY29kZXJPcHRpb25zKTogVGV4dERlY29kZXI7XG4gIH1cblxuICBpbnRlcmZhY2UgVGV4dEVuY29kZXIge1xuICAgIHJlYWRvbmx5IGVuY29kaW5nOiBcInV0Zi04XCI7XG4gICAgZW5jb2RlKGlucHV0Pzogc3RyaW5nKTogVWludDhBcnJheTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGV4dEVuY29kZXJDb25zdHJ1Y3RvciB7XG4gICAgbmV3ICgpOiBUZXh0RW5jb2RlcjtcbiAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IFRleHREZWNvZGVyOiBFbmNvZGluZy5UZXh0RGVjb2RlckNvbnN0cnVjdG9yO1xuXG5kZWNsYXJlIGNvbnN0IFRleHRFbmNvZGVyOiBFbmNvZGluZy5UZXh0RW5jb2RlckNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVV0ZjgoaW5wdXQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVXRmOChpbnB1dDogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKS5kZWNvZGUoaW5wdXQpO1xufVxuIl19","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\nmodule.exports = _defineProperty;","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar AuthenticationDetails = /*#__PURE__*/function () {\n  /**\n   * Constructs a new AuthenticationDetails object\n   * @param {object=} data Creation options.\n   * @param {string} data.Username User being authenticated.\n   * @param {string} data.Password Plain-text password to authenticate with.\n   * @param {(AttributeArg[])?} data.ValidationData Application extra metadata.\n   * @param {(AttributeArg[])?} data.AuthParamaters Authentication paramaters for custom auth.\n   */\n  function AuthenticationDetails(data) {\n    var _ref = data || {},\n        ValidationData = _ref.ValidationData,\n        Username = _ref.Username,\n        Password = _ref.Password,\n        AuthParameters = _ref.AuthParameters,\n        ClientMetadata = _ref.ClientMetadata;\n\n    this.validationData = ValidationData || {};\n    this.authParameters = AuthParameters || {};\n    this.clientMetadata = ClientMetadata || {};\n    this.username = Username;\n    this.password = Password;\n  }\n  /**\n   * @returns {string} the record's username\n   */\n\n\n  var _proto = AuthenticationDetails.prototype;\n\n  _proto.getUsername = function getUsername() {\n    return this.username;\n  }\n  /**\n   * @returns {string} the record's password\n   */\n  ;\n\n  _proto.getPassword = function getPassword() {\n    return this.password;\n  }\n  /**\n   * @returns {Array} the record's validationData\n   */\n  ;\n\n  _proto.getValidationData = function getValidationData() {\n    return this.validationData;\n  }\n  /**\n   * @returns {Array} the record's authParameters\n   */\n  ;\n\n  _proto.getAuthParameters = function getAuthParameters() {\n    return this.authParameters;\n  }\n  /**\n   * @returns {ClientMetadata} the clientMetadata for a Lambda trigger\n   */\n  ;\n\n  _proto.getClientMetadata = function getClientMetadata() {\n    return this.clientMetadata;\n  };\n\n  return AuthenticationDetails;\n}();\n\nexport { AuthenticationDetails as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\nimport CryptoJS from 'crypto-js/core';\nimport 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport SHA256 from 'crypto-js/sha256';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\n\nvar randomBytes = function randomBytes(nBytes) {\n  return Buffer.from(CryptoJS.lib.WordArray.random(nBytes).toString(), 'hex');\n};\n\nimport BigInteger from './BigInteger';\nvar initN = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1' + '29024E088A67CC74020BBEA63B139B22514A08798E3404DD' + 'EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245' + 'E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D' + 'C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F' + '83655D23DCA3AD961C62F356208552BB9ED529077096966D' + '670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9' + 'DE2BCBF6955817183995497CEA956AE515D2261898FA0510' + '15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64' + 'ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' + 'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B' + 'F12FFA06D98A0864D87602733EC86A64521F2B18177B200C' + 'BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31' + '43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';\nvar newPasswordRequiredChallengeUserAttributePrefix = 'userAttributes.';\n/** @class */\n\nvar AuthenticationHelper = /*#__PURE__*/function () {\n  /**\n   * Constructs a new AuthenticationHelper object\n   * @param {string} PoolName Cognito user pool name.\n   */\n  function AuthenticationHelper(PoolName) {\n    this.N = new BigInteger(initN, 16);\n    this.g = new BigInteger('2', 16);\n    this.k = new BigInteger(this.hexHash(\"00\" + this.N.toString(16) + \"0\" + this.g.toString(16)), 16);\n    this.smallAValue = this.generateRandomSmallA();\n    this.getLargeAValue(function () {});\n    this.infoBits = Buffer.from('Caldera Derived Key', 'utf8');\n    this.poolName = PoolName;\n  }\n  /**\n   * @returns {BigInteger} small A, a random number\n   */\n\n\n  var _proto = AuthenticationHelper.prototype;\n\n  _proto.getSmallAValue = function getSmallAValue() {\n    return this.smallAValue;\n  }\n  /**\n   * @param {nodeCallback<BigInteger>} callback Called with (err, largeAValue)\n   * @returns {void}\n   */\n  ;\n\n  _proto.getLargeAValue = function getLargeAValue(callback) {\n    var _this = this;\n\n    if (this.largeAValue) {\n      callback(null, this.largeAValue);\n    } else {\n      this.calculateA(this.smallAValue, function (err, largeAValue) {\n        if (err) {\n          callback(err, null);\n        }\n\n        _this.largeAValue = largeAValue;\n        callback(null, _this.largeAValue);\n      });\n    }\n  }\n  /**\n   * helper function to generate a random big integer\n   * @returns {BigInteger} a random value.\n   * @private\n   */\n  ;\n\n  _proto.generateRandomSmallA = function generateRandomSmallA() {\n    var hexRandom = randomBytes(128).toString('hex');\n    var randomBigInt = new BigInteger(hexRandom, 16);\n    var smallABigInt = randomBigInt.mod(this.N);\n    return smallABigInt;\n  }\n  /**\n   * helper function to generate a random string\n   * @returns {string} a random value.\n   * @private\n   */\n  ;\n\n  _proto.generateRandomString = function generateRandomString() {\n    return randomBytes(40).toString('base64');\n  }\n  /**\n   * @returns {string} Generated random value included in password hash.\n   */\n  ;\n\n  _proto.getRandomPassword = function getRandomPassword() {\n    return this.randomPassword;\n  }\n  /**\n   * @returns {string} Generated random value included in devices hash.\n   */\n  ;\n\n  _proto.getSaltDevices = function getSaltDevices() {\n    return this.SaltToHashDevices;\n  }\n  /**\n   * @returns {string} Value used to verify devices.\n   */\n  ;\n\n  _proto.getVerifierDevices = function getVerifierDevices() {\n    return this.verifierDevices;\n  }\n  /**\n   * Generate salts and compute verifier.\n   * @param {string} deviceGroupKey Devices to generate verifier for.\n   * @param {string} username User to generate verifier for.\n   * @param {nodeCallback<null>} callback Called with (err, null)\n   * @returns {void}\n   */\n  ;\n\n  _proto.generateHashDevice = function generateHashDevice(deviceGroupKey, username, callback) {\n    var _this2 = this;\n\n    this.randomPassword = this.generateRandomString();\n    var combinedString = \"\" + deviceGroupKey + username + \":\" + this.randomPassword;\n    var hashedString = this.hash(combinedString);\n    var hexRandom = randomBytes(16).toString('hex');\n    this.SaltToHashDevices = this.padHex(new BigInteger(hexRandom, 16));\n    this.g.modPow(new BigInteger(this.hexHash(this.SaltToHashDevices + hashedString), 16), this.N, function (err, verifierDevicesNotPadded) {\n      if (err) {\n        callback(err, null);\n      }\n\n      _this2.verifierDevices = _this2.padHex(verifierDevicesNotPadded);\n      callback(null, null);\n    });\n  }\n  /**\n   * Calculate the client's public value A = g^a%N\n   * with the generated random number a\n   * @param {BigInteger} a Randomly generated small A.\n   * @param {nodeCallback<BigInteger>} callback Called with (err, largeAValue)\n   * @returns {void}\n   * @private\n   */\n  ;\n\n  _proto.calculateA = function calculateA(a, callback) {\n    var _this3 = this;\n\n    this.g.modPow(a, this.N, function (err, A) {\n      if (err) {\n        callback(err, null);\n      }\n\n      if (A.mod(_this3.N).equals(BigInteger.ZERO)) {\n        callback(new Error('Illegal paramater. A mod N cannot be 0.'), null);\n      }\n\n      callback(null, A);\n    });\n  }\n  /**\n   * Calculate the client's value U which is the hash of A and B\n   * @param {BigInteger} A Large A value.\n   * @param {BigInteger} B Server B value.\n   * @returns {BigInteger} Computed U value.\n   * @private\n   */\n  ;\n\n  _proto.calculateU = function calculateU(A, B) {\n    this.UHexHash = this.hexHash(this.padHex(A) + this.padHex(B));\n    var finalU = new BigInteger(this.UHexHash, 16);\n    return finalU;\n  }\n  /**\n   * Calculate a hash from a bitArray\n   * @param {Buffer} buf Value to hash.\n   * @returns {String} Hex-encoded hash.\n   * @private\n   */\n  ;\n\n  _proto.hash = function hash(buf) {\n    var str = buf instanceof Buffer ? CryptoJS.lib.WordArray.create(buf) : buf;\n    var hashHex = SHA256(str).toString();\n    return new Array(64 - hashHex.length).join('0') + hashHex;\n  }\n  /**\n   * Calculate a hash from a hex string\n   * @param {String} hexStr Value to hash.\n   * @returns {String} Hex-encoded hash.\n   * @private\n   */\n  ;\n\n  _proto.hexHash = function hexHash(hexStr) {\n    return this.hash(Buffer.from(hexStr, 'hex'));\n  }\n  /**\n   * Standard hkdf algorithm\n   * @param {Buffer} ikm Input key material.\n   * @param {Buffer} salt Salt value.\n   * @returns {Buffer} Strong key material.\n   * @private\n   */\n  ;\n\n  _proto.computehkdf = function computehkdf(ikm, salt) {\n    var infoBitsWordArray = CryptoJS.lib.WordArray.create(Buffer.concat([this.infoBits, Buffer.from(String.fromCharCode(1), 'utf8')]));\n    var ikmWordArray = ikm instanceof Buffer ? CryptoJS.lib.WordArray.create(ikm) : ikm;\n    var saltWordArray = salt instanceof Buffer ? CryptoJS.lib.WordArray.create(salt) : salt;\n    var prk = HmacSHA256(ikmWordArray, saltWordArray);\n    var hmac = HmacSHA256(infoBitsWordArray, prk);\n    return Buffer.from(hmac.toString(), 'hex').slice(0, 16);\n  }\n  /**\n   * Calculates the final hkdf based on computed S value, and computed U value and the key\n   * @param {String} username Username.\n   * @param {String} password Password.\n   * @param {BigInteger} serverBValue Server B value.\n   * @param {BigInteger} salt Generated salt.\n   * @param {nodeCallback<Buffer>} callback Called with (err, hkdfValue)\n   * @returns {void}\n   */\n  ;\n\n  _proto.getPasswordAuthenticationKey = function getPasswordAuthenticationKey(username, password, serverBValue, salt, callback) {\n    var _this4 = this;\n\n    if (serverBValue.mod(this.N).equals(BigInteger.ZERO)) {\n      throw new Error('B cannot be zero.');\n    }\n\n    this.UValue = this.calculateU(this.largeAValue, serverBValue);\n\n    if (this.UValue.equals(BigInteger.ZERO)) {\n      throw new Error('U cannot be zero.');\n    }\n\n    var usernamePassword = \"\" + this.poolName + username + \":\" + password;\n    var usernamePasswordHash = this.hash(usernamePassword);\n    var xValue = new BigInteger(this.hexHash(this.padHex(salt) + usernamePasswordHash), 16);\n    this.calculateS(xValue, serverBValue, function (err, sValue) {\n      if (err) {\n        callback(err, null);\n      }\n\n      var hkdf = _this4.computehkdf(Buffer.from(_this4.padHex(sValue), 'hex'), Buffer.from(_this4.padHex(_this4.UValue.toString(16)), 'hex'));\n\n      callback(null, hkdf);\n    });\n  }\n  /**\n   * Calculates the S value used in getPasswordAuthenticationKey\n   * @param {BigInteger} xValue Salted password hash value.\n   * @param {BigInteger} serverBValue Server B value.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.calculateS = function calculateS(xValue, serverBValue, callback) {\n    var _this5 = this;\n\n    this.g.modPow(xValue, this.N, function (err, gModPowXN) {\n      if (err) {\n        callback(err, null);\n      }\n\n      var intValue2 = serverBValue.subtract(_this5.k.multiply(gModPowXN));\n      intValue2.modPow(_this5.smallAValue.add(_this5.UValue.multiply(xValue)), _this5.N, function (err2, result) {\n        if (err2) {\n          callback(err2, null);\n        }\n\n        callback(null, result.mod(_this5.N));\n      });\n    });\n  }\n  /**\n   * Return constant newPasswordRequiredChallengeUserAttributePrefix\n   * @return {newPasswordRequiredChallengeUserAttributePrefix} constant prefix value\n   */\n  ;\n\n  _proto.getNewPasswordRequiredChallengeUserAttributePrefix = function getNewPasswordRequiredChallengeUserAttributePrefix() {\n    return newPasswordRequiredChallengeUserAttributePrefix;\n  }\n  /**\n   * Converts a BigInteger (or hex string) to hex format padded with zeroes for hashing\n   * @param {BigInteger|String} bigInt Number or string to pad.\n   * @returns {String} Padded hex string.\n   */\n  ;\n\n  _proto.padHex = function padHex(bigInt) {\n    var hashStr = bigInt.toString(16);\n\n    if (hashStr.length % 2 === 1) {\n      hashStr = \"0\" + hashStr;\n    } else if ('89ABCDEFabcdef'.indexOf(hashStr[0]) !== -1) {\n      hashStr = \"00\" + hashStr;\n    }\n\n    return hashStr;\n  };\n\n  return AuthenticationHelper;\n}();\n\nexport { AuthenticationHelper as default };","// A small implementation of BigInteger based on http://www-cs-students.stanford.edu/~tjw/jsbn/\n//\n// All public methods have been removed except the following:\n//   new BigInteger(a, b) (only radix 2, 4, 8, 16 and 32 supported)\n//   toString (only radix 2, 4, 8, 16 and 32 supported)\n//   negate\n//   abs\n//   compareTo\n//   bitLength\n//   mod\n//   equals\n//   add\n//   subtract\n//   multiply\n//   divide\n//   modPow\nexport default BigInteger;\n/*\n * Copyright (c) 2003-2005  Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n// (public) Constructor\n\nfunction BigInteger(a, b) {\n  if (a != null) this.fromString(a, b);\n} // return new, unset BigInteger\n\n\nfunction nbi() {\n  return new BigInteger(null);\n} // Bits per digit\n\n\nvar dbits; // JavaScript engine analysis\n\nvar canary = 0xdeadbeefcafe;\nvar j_lm = (canary & 0xffffff) == 0xefcafe; // am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n\nfunction am1(i, x, w, j, c, n) {\n  while (--n >= 0) {\n    var v = x * this[i++] + w[j] + c;\n    c = Math.floor(v / 0x4000000);\n    w[j++] = v & 0x3ffffff;\n  }\n\n  return c;\n} // am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n\n\nfunction am2(i, x, w, j, c, n) {\n  var xl = x & 0x7fff,\n      xh = x >> 15;\n\n  while (--n >= 0) {\n    var l = this[i] & 0x7fff;\n    var h = this[i++] >> 15;\n    var m = xh * l + h * xl;\n    l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n    c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n    w[j++] = l & 0x3fffffff;\n  }\n\n  return c;\n} // Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\n\n\nfunction am3(i, x, w, j, c, n) {\n  var xl = x & 0x3fff,\n      xh = x >> 14;\n\n  while (--n >= 0) {\n    var l = this[i] & 0x3fff;\n    var h = this[i++] >> 14;\n    var m = xh * l + h * xl;\n    l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n    c = (l >> 28) + (m >> 14) + xh * h;\n    w[j++] = l & 0xfffffff;\n  }\n\n  return c;\n}\n\nvar inBrowser = typeof navigator !== 'undefined';\n\nif (inBrowser && j_lm && navigator.appName == 'Microsoft Internet Explorer') {\n  BigInteger.prototype.am = am2;\n  dbits = 30;\n} else if (inBrowser && j_lm && navigator.appName != 'Netscape') {\n  BigInteger.prototype.am = am1;\n  dbits = 26;\n} else {\n  // Mozilla/Netscape seems to prefer am3\n  BigInteger.prototype.am = am3;\n  dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP; // Digit conversions\n\nvar BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz';\nvar BI_RC = new Array();\nvar rr, vv;\nrr = '0'.charCodeAt(0);\n\nfor (vv = 0; vv <= 9; ++vv) {\n  BI_RC[rr++] = vv;\n}\n\nrr = 'a'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n  BI_RC[rr++] = vv;\n}\n\nrr = 'A'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n  BI_RC[rr++] = vv;\n}\n\nfunction int2char(n) {\n  return BI_RM.charAt(n);\n}\n\nfunction intAt(s, i) {\n  var c = BI_RC[s.charCodeAt(i)];\n  return c == null ? -1 : c;\n} // (protected) copy this to r\n\n\nfunction bnpCopyTo(r) {\n  for (var i = this.t - 1; i >= 0; --i) {\n    r[i] = this[i];\n  }\n\n  r.t = this.t;\n  r.s = this.s;\n} // (protected) set from integer value x, -DV <= x < DV\n\n\nfunction bnpFromInt(x) {\n  this.t = 1;\n  this.s = x < 0 ? -1 : 0;\n  if (x > 0) this[0] = x;else if (x < -1) this[0] = x + this.DV;else this.t = 0;\n} // return bigint initialized to value\n\n\nfunction nbv(i) {\n  var r = nbi();\n  r.fromInt(i);\n  return r;\n} // (protected) set from string and radix\n\n\nfunction bnpFromString(s, b) {\n  var k;\n  if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error('Only radix 2, 4, 8, 16, 32 are supported');\n  this.t = 0;\n  this.s = 0;\n  var i = s.length,\n      mi = false,\n      sh = 0;\n\n  while (--i >= 0) {\n    var x = intAt(s, i);\n\n    if (x < 0) {\n      if (s.charAt(i) == '-') mi = true;\n      continue;\n    }\n\n    mi = false;\n    if (sh == 0) this[this.t++] = x;else if (sh + k > this.DB) {\n      this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;\n      this[this.t++] = x >> this.DB - sh;\n    } else this[this.t - 1] |= x << sh;\n    sh += k;\n    if (sh >= this.DB) sh -= this.DB;\n  }\n\n  this.clamp();\n  if (mi) BigInteger.ZERO.subTo(this, this);\n} // (protected) clamp off excess high words\n\n\nfunction bnpClamp() {\n  var c = this.s & this.DM;\n\n  while (this.t > 0 && this[this.t - 1] == c) {\n    --this.t;\n  }\n} // (public) return string representation in given radix\n\n\nfunction bnToString(b) {\n  if (this.s < 0) return '-' + this.negate().toString(b);\n  var k;\n  if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error('Only radix 2, 4, 8, 16, 32 are supported');\n  var km = (1 << k) - 1,\n      d,\n      m = false,\n      r = '',\n      i = this.t;\n  var p = this.DB - i * this.DB % k;\n\n  if (i-- > 0) {\n    if (p < this.DB && (d = this[i] >> p) > 0) {\n      m = true;\n      r = int2char(d);\n    }\n\n    while (i >= 0) {\n      if (p < k) {\n        d = (this[i] & (1 << p) - 1) << k - p;\n        d |= this[--i] >> (p += this.DB - k);\n      } else {\n        d = this[i] >> (p -= k) & km;\n\n        if (p <= 0) {\n          p += this.DB;\n          --i;\n        }\n      }\n\n      if (d > 0) m = true;\n      if (m) r += int2char(d);\n    }\n  }\n\n  return m ? r : '0';\n} // (public) -this\n\n\nfunction bnNegate() {\n  var r = nbi();\n  BigInteger.ZERO.subTo(this, r);\n  return r;\n} // (public) |this|\n\n\nfunction bnAbs() {\n  return this.s < 0 ? this.negate() : this;\n} // (public) return + if this > a, - if this < a, 0 if equal\n\n\nfunction bnCompareTo(a) {\n  var r = this.s - a.s;\n  if (r != 0) return r;\n  var i = this.t;\n  r = i - a.t;\n  if (r != 0) return this.s < 0 ? -r : r;\n\n  while (--i >= 0) {\n    if ((r = this[i] - a[i]) != 0) return r;\n  }\n\n  return 0;\n} // returns bit length of the integer x\n\n\nfunction nbits(x) {\n  var r = 1,\n      t;\n\n  if ((t = x >>> 16) != 0) {\n    x = t;\n    r += 16;\n  }\n\n  if ((t = x >> 8) != 0) {\n    x = t;\n    r += 8;\n  }\n\n  if ((t = x >> 4) != 0) {\n    x = t;\n    r += 4;\n  }\n\n  if ((t = x >> 2) != 0) {\n    x = t;\n    r += 2;\n  }\n\n  if ((t = x >> 1) != 0) {\n    x = t;\n    r += 1;\n  }\n\n  return r;\n} // (public) return the number of bits in \"this\"\n\n\nfunction bnBitLength() {\n  if (this.t <= 0) return 0;\n  return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM);\n} // (protected) r = this << n*DB\n\n\nfunction bnpDLShiftTo(n, r) {\n  var i;\n\n  for (i = this.t - 1; i >= 0; --i) {\n    r[i + n] = this[i];\n  }\n\n  for (i = n - 1; i >= 0; --i) {\n    r[i] = 0;\n  }\n\n  r.t = this.t + n;\n  r.s = this.s;\n} // (protected) r = this >> n*DB\n\n\nfunction bnpDRShiftTo(n, r) {\n  for (var i = n; i < this.t; ++i) {\n    r[i - n] = this[i];\n  }\n\n  r.t = Math.max(this.t - n, 0);\n  r.s = this.s;\n} // (protected) r = this << n\n\n\nfunction bnpLShiftTo(n, r) {\n  var bs = n % this.DB;\n  var cbs = this.DB - bs;\n  var bm = (1 << cbs) - 1;\n  var ds = Math.floor(n / this.DB),\n      c = this.s << bs & this.DM,\n      i;\n\n  for (i = this.t - 1; i >= 0; --i) {\n    r[i + ds + 1] = this[i] >> cbs | c;\n    c = (this[i] & bm) << bs;\n  }\n\n  for (i = ds - 1; i >= 0; --i) {\n    r[i] = 0;\n  }\n\n  r[ds] = c;\n  r.t = this.t + ds + 1;\n  r.s = this.s;\n  r.clamp();\n} // (protected) r = this >> n\n\n\nfunction bnpRShiftTo(n, r) {\n  r.s = this.s;\n  var ds = Math.floor(n / this.DB);\n\n  if (ds >= this.t) {\n    r.t = 0;\n    return;\n  }\n\n  var bs = n % this.DB;\n  var cbs = this.DB - bs;\n  var bm = (1 << bs) - 1;\n  r[0] = this[ds] >> bs;\n\n  for (var i = ds + 1; i < this.t; ++i) {\n    r[i - ds - 1] |= (this[i] & bm) << cbs;\n    r[i - ds] = this[i] >> bs;\n  }\n\n  if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\n  r.t = this.t - ds;\n  r.clamp();\n} // (protected) r = this - a\n\n\nfunction bnpSubTo(a, r) {\n  var i = 0,\n      c = 0,\n      m = Math.min(a.t, this.t);\n\n  while (i < m) {\n    c += this[i] - a[i];\n    r[i++] = c & this.DM;\n    c >>= this.DB;\n  }\n\n  if (a.t < this.t) {\n    c -= a.s;\n\n    while (i < this.t) {\n      c += this[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n\n    c += this.s;\n  } else {\n    c += this.s;\n\n    while (i < a.t) {\n      c -= a[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n\n    c -= a.s;\n  }\n\n  r.s = c < 0 ? -1 : 0;\n  if (c < -1) r[i++] = this.DV + c;else if (c > 0) r[i++] = c;\n  r.t = i;\n  r.clamp();\n} // (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\n\n\nfunction bnpMultiplyTo(a, r) {\n  var x = this.abs(),\n      y = a.abs();\n  var i = x.t;\n  r.t = i + y.t;\n\n  while (--i >= 0) {\n    r[i] = 0;\n  }\n\n  for (i = 0; i < y.t; ++i) {\n    r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n  }\n\n  r.s = 0;\n  r.clamp();\n  if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\n} // (protected) r = this^2, r != this (HAC 14.16)\n\n\nfunction bnpSquareTo(r) {\n  var x = this.abs();\n  var i = r.t = 2 * x.t;\n\n  while (--i >= 0) {\n    r[i] = 0;\n  }\n\n  for (i = 0; i < x.t - 1; ++i) {\n    var c = x.am(i, x[i], r, 2 * i, 0, 1);\n\n    if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n      r[i + x.t] -= x.DV;\n      r[i + x.t + 1] = 1;\n    }\n  }\n\n  if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n  r.s = 0;\n  r.clamp();\n} // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m.  q or r may be null.\n\n\nfunction bnpDivRemTo(m, q, r) {\n  var pm = m.abs();\n  if (pm.t <= 0) return;\n  var pt = this.abs();\n\n  if (pt.t < pm.t) {\n    if (q != null) q.fromInt(0);\n    if (r != null) this.copyTo(r);\n    return;\n  }\n\n  if (r == null) r = nbi();\n  var y = nbi(),\n      ts = this.s,\n      ms = m.s;\n  var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n\n  if (nsh > 0) {\n    pm.lShiftTo(nsh, y);\n    pt.lShiftTo(nsh, r);\n  } else {\n    pm.copyTo(y);\n    pt.copyTo(r);\n  }\n\n  var ys = y.t;\n  var y0 = y[ys - 1];\n  if (y0 == 0) return;\n  var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);\n  var d1 = this.FV / yt,\n      d2 = (1 << this.F1) / yt,\n      e = 1 << this.F2;\n  var i = r.t,\n      j = i - ys,\n      t = q == null ? nbi() : q;\n  y.dlShiftTo(j, t);\n\n  if (r.compareTo(t) >= 0) {\n    r[r.t++] = 1;\n    r.subTo(t, r);\n  }\n\n  BigInteger.ONE.dlShiftTo(ys, t);\n  t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n\n  while (y.t < ys) {\n    y[y.t++] = 0;\n  }\n\n  while (--j >= 0) {\n    // Estimate quotient digit\n    var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n\n    if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\n      // Try it out\n      y.dlShiftTo(j, t);\n      r.subTo(t, r);\n\n      while (r[i] < --qd) {\n        r.subTo(t, r);\n      }\n    }\n  }\n\n  if (q != null) {\n    r.drShiftTo(ys, q);\n    if (ts != ms) BigInteger.ZERO.subTo(q, q);\n  }\n\n  r.t = ys;\n  r.clamp();\n  if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder\n\n  if (ts < 0) BigInteger.ZERO.subTo(r, r);\n} // (public) this mod a\n\n\nfunction bnMod(a) {\n  var r = nbi();\n  this.abs().divRemTo(a, null, r);\n  if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\n  return r;\n} // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n//         xy == 1 (mod m)\n//         xy =  1+km\n//   xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\n\n\nfunction bnpInvDigit() {\n  if (this.t < 1) return 0;\n  var x = this[0];\n  if ((x & 1) == 0) return 0;\n  var y = x & 3; // y == 1/x mod 2^2\n\n  y = y * (2 - (x & 0xf) * y) & 0xf; // y == 1/x mod 2^4\n\n  y = y * (2 - (x & 0xff) * y) & 0xff; // y == 1/x mod 2^8\n\n  y = y * (2 - ((x & 0xffff) * y & 0xffff)) & 0xffff; // y == 1/x mod 2^16\n  // last step - calculate inverse mod DV directly;\n  // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n\n  y = y * (2 - x * y % this.DV) % this.DV; // y == 1/x mod 2^dbits\n  // we really want the negative inverse, and -DV < y < DV\n\n  return y > 0 ? this.DV - y : -y;\n}\n\nfunction bnEquals(a) {\n  return this.compareTo(a) == 0;\n} // (protected) r = this + a\n\n\nfunction bnpAddTo(a, r) {\n  var i = 0,\n      c = 0,\n      m = Math.min(a.t, this.t);\n\n  while (i < m) {\n    c += this[i] + a[i];\n    r[i++] = c & this.DM;\n    c >>= this.DB;\n  }\n\n  if (a.t < this.t) {\n    c += a.s;\n\n    while (i < this.t) {\n      c += this[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n\n    c += this.s;\n  } else {\n    c += this.s;\n\n    while (i < a.t) {\n      c += a[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n\n    c += a.s;\n  }\n\n  r.s = c < 0 ? -1 : 0;\n  if (c > 0) r[i++] = c;else if (c < -1) r[i++] = this.DV + c;\n  r.t = i;\n  r.clamp();\n} // (public) this + a\n\n\nfunction bnAdd(a) {\n  var r = nbi();\n  this.addTo(a, r);\n  return r;\n} // (public) this - a\n\n\nfunction bnSubtract(a) {\n  var r = nbi();\n  this.subTo(a, r);\n  return r;\n} // (public) this * a\n\n\nfunction bnMultiply(a) {\n  var r = nbi();\n  this.multiplyTo(a, r);\n  return r;\n} // (public) this / a\n\n\nfunction bnDivide(a) {\n  var r = nbi();\n  this.divRemTo(a, r, null);\n  return r;\n} // Montgomery reduction\n\n\nfunction Montgomery(m) {\n  this.m = m;\n  this.mp = m.invDigit();\n  this.mpl = this.mp & 0x7fff;\n  this.mph = this.mp >> 15;\n  this.um = (1 << m.DB - 15) - 1;\n  this.mt2 = 2 * m.t;\n} // xR mod m\n\n\nfunction montConvert(x) {\n  var r = nbi();\n  x.abs().dlShiftTo(this.m.t, r);\n  r.divRemTo(this.m, null, r);\n  if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\n  return r;\n} // x/R mod m\n\n\nfunction montRevert(x) {\n  var r = nbi();\n  x.copyTo(r);\n  this.reduce(r);\n  return r;\n} // x = x/R mod m (HAC 14.32)\n\n\nfunction montReduce(x) {\n  while (x.t <= this.mt2) {\n    // pad x so am has enough room later\n    x[x.t++] = 0;\n  }\n\n  for (var i = 0; i < this.m.t; ++i) {\n    // faster way of calculating u0 = x[i]*mp mod DV\n    var j = x[i] & 0x7fff;\n    var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM; // use am to combine the multiply-shift-add into one call\n\n    j = i + this.m.t;\n    x[j] += this.m.am(0, u0, x, i, 0, this.m.t); // propagate carry\n\n    while (x[j] >= x.DV) {\n      x[j] -= x.DV;\n      x[++j]++;\n    }\n  }\n\n  x.clamp();\n  x.drShiftTo(this.m.t, x);\n  if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n} // r = \"x^2/R mod m\"; x != r\n\n\nfunction montSqrTo(x, r) {\n  x.squareTo(r);\n  this.reduce(r);\n} // r = \"xy/R mod m\"; x,y != r\n\n\nfunction montMulTo(x, y, r) {\n  x.multiplyTo(y, r);\n  this.reduce(r);\n}\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo; // (public) this^e % m (HAC 14.85)\n\nfunction bnModPow(e, m, callback) {\n  var i = e.bitLength(),\n      k,\n      r = nbv(1),\n      z = new Montgomery(m);\n  if (i <= 0) return r;else if (i < 18) k = 1;else if (i < 48) k = 3;else if (i < 144) k = 4;else if (i < 768) k = 5;else k = 6; // precomputation\n\n  var g = new Array(),\n      n = 3,\n      k1 = k - 1,\n      km = (1 << k) - 1;\n  g[1] = z.convert(this);\n\n  if (k > 1) {\n    var g2 = nbi();\n    z.sqrTo(g[1], g2);\n\n    while (n <= km) {\n      g[n] = nbi();\n      z.mulTo(g2, g[n - 2], g[n]);\n      n += 2;\n    }\n  }\n\n  var j = e.t - 1,\n      w,\n      is1 = true,\n      r2 = nbi(),\n      t;\n  i = nbits(e[j]) - 1;\n\n  while (j >= 0) {\n    if (i >= k1) w = e[j] >> i - k1 & km;else {\n      w = (e[j] & (1 << i + 1) - 1) << k1 - i;\n      if (j > 0) w |= e[j - 1] >> this.DB + i - k1;\n    }\n    n = k;\n\n    while ((w & 1) == 0) {\n      w >>= 1;\n      --n;\n    }\n\n    if ((i -= n) < 0) {\n      i += this.DB;\n      --j;\n    }\n\n    if (is1) {\n      // ret == 1, don't bother squaring or multiplying it\n      g[w].copyTo(r);\n      is1 = false;\n    } else {\n      while (n > 1) {\n        z.sqrTo(r, r2);\n        z.sqrTo(r2, r);\n        n -= 2;\n      }\n\n      if (n > 0) z.sqrTo(r, r2);else {\n        t = r;\n        r = r2;\n        r2 = t;\n      }\n      z.mulTo(r2, g[w], r);\n    }\n\n    while (j >= 0 && (e[j] & 1 << i) == 0) {\n      z.sqrTo(r, r2);\n      t = r;\n      r = r2;\n      r2 = t;\n\n      if (--i < 0) {\n        i = this.DB - 1;\n        --j;\n      }\n    }\n  }\n\n  var result = z.revert(r);\n  callback(null, result);\n  return result;\n} // protected\n\n\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.addTo = bnpAddTo; // public\n\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.modPow = bnModPow; // \"constants\"\n\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport 'isomorphic-unfetch';\nimport UserAgent from './UserAgent';\n\nvar CognitoError = /*#__PURE__*/function (_Error) {\n  _inheritsLoose(CognitoError, _Error);\n\n  function CognitoError(message, code, name, statusCode) {\n    var _this;\n\n    _this = _Error.call(this, message) || this;\n    _this.code = code;\n    _this.name = name;\n    _this.statusCode = statusCode;\n    return _this;\n  }\n\n  return CognitoError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n/** @class */\n\n\nvar Client = /*#__PURE__*/function () {\n  /**\n   * Constructs a new AWS Cognito Identity Provider client object\n   * @param {string} region AWS region\n   * @param {string} endpoint endpoint\n   * @param {object} fetchOptions options for fetch API (only credentials is supported)\n   */\n  function Client(region, endpoint, fetchOptions) {\n    this.endpoint = endpoint || \"https://cognito-idp.\" + region + \".amazonaws.com/\";\n\n    var _ref = fetchOptions || {},\n        credentials = _ref.credentials;\n\n    this.fetchOptions = credentials ? {\n      credentials: credentials\n    } : {};\n  }\n  /**\n   * Makes an unauthenticated request on AWS Cognito Identity Provider API\n   * using fetch\n   * @param {string} operation API operation\n   * @param {object} params Input parameters\n   * @returns Promise<object>\n   */\n\n\n  var _proto = Client.prototype;\n\n  _proto.promisifyRequest = function promisifyRequest(operation, params) {\n    var _this2 = this;\n\n    return new Promise(function (resolve, reject) {\n      _this2.request(operation, params, function (err, data) {\n        if (err) {\n          reject(new CognitoError(err.message, err.code, err.name, err.statusCode));\n        } else {\n          resolve(data);\n        }\n      });\n    });\n  }\n  /**\n   * Makes an unauthenticated request on AWS Cognito Identity Provider API\n   * using fetch\n   * @param {string} operation API operation\n   * @param {object} params Input parameters\n   * @param {function} callback Callback called when a response is returned\n   * @returns {void}\n   */\n  ;\n\n  _proto.request = function request(operation, params, callback) {\n    var headers = {\n      'Content-Type': 'application/x-amz-json-1.1',\n      'X-Amz-Target': \"AWSCognitoIdentityProviderService.\" + operation,\n      'X-Amz-User-Agent': UserAgent.prototype.userAgent\n    };\n    var options = Object.assign({}, this.fetchOptions, {\n      headers: headers,\n      method: 'POST',\n      mode: 'cors',\n      cache: 'no-cache',\n      body: JSON.stringify(params)\n    });\n    var response;\n    var responseJsonData;\n    fetch(this.endpoint, options).then(function (resp) {\n      response = resp;\n      return resp;\n    }, function (err) {\n      // If error happens here, the request failed\n      // if it is TypeError throw network error\n      if (err instanceof TypeError) {\n        throw new Error('Network error');\n      }\n\n      throw err;\n    }).then(function (resp) {\n      return resp.json()[\"catch\"](function () {\n        return {};\n      });\n    }).then(function (data) {\n      // return parsed body stream\n      if (response.ok) return callback(null, data);\n      responseJsonData = data; // Taken from aws-sdk-js/lib/protocol/json.js\n      // eslint-disable-next-line no-underscore-dangle\n\n      var code = (data.__type || data.code).split('#').pop();\n      var error = {\n        code: code,\n        name: code,\n        message: data.message || data.Message || null\n      };\n      return callback(error);\n    })[\"catch\"](function (err) {\n      // first check if we have a service error\n      if (response && response.headers && response.headers.get('x-amzn-errortype')) {\n        try {\n          var code = response.headers.get('x-amzn-errortype').split(':')[0];\n          var error = {\n            code: code,\n            name: code,\n            statusCode: response.status,\n            message: response.status ? response.status.toString() : null\n          };\n          return callback(error);\n        } catch (ex) {\n          return callback(err);\n        } // otherwise check if error is Network error\n\n      } else if (err instanceof Error && err.message === 'Network error') {\n        var _error = {\n          code: 'NetworkError',\n          name: err.name,\n          message: err.message\n        };\n        return callback(_error);\n      } else {\n        return callback(err);\n      }\n    });\n  };\n\n  return Client;\n}();\n\nexport { Client as default };","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoAccessToken = /*#__PURE__*/function (_CognitoJwtToken) {\n  _inheritsLoose(CognitoAccessToken, _CognitoJwtToken);\n\n  /**\n   * Constructs a new CognitoAccessToken object\n   * @param {string=} AccessToken The JWT access token.\n   */\n  function CognitoAccessToken(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        AccessToken = _ref.AccessToken;\n\n    return _CognitoJwtToken.call(this, AccessToken || '') || this;\n  }\n\n  return CognitoAccessToken;\n}(CognitoJwtToken);\n\nexport { CognitoAccessToken as default };","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoIdToken = /*#__PURE__*/function (_CognitoJwtToken) {\n  _inheritsLoose(CognitoIdToken, _CognitoJwtToken);\n\n  /**\n   * Constructs a new CognitoIdToken object\n   * @param {string=} IdToken The JWT Id token\n   */\n  function CognitoIdToken(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        IdToken = _ref.IdToken;\n\n    return _CognitoJwtToken.call(this, IdToken || '') || this;\n  }\n\n  return CognitoIdToken;\n}(CognitoJwtToken);\n\nexport { CognitoIdToken as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\n/** @class */\n\nvar CognitoJwtToken = /*#__PURE__*/function () {\n  /**\n   * Constructs a new CognitoJwtToken object\n   * @param {string=} token The JWT token.\n   */\n  function CognitoJwtToken(token) {\n    // Assign object\n    this.jwtToken = token || '';\n    this.payload = this.decodePayload();\n  }\n  /**\n   * @returns {string} the record's token.\n   */\n\n\n  var _proto = CognitoJwtToken.prototype;\n\n  _proto.getJwtToken = function getJwtToken() {\n    return this.jwtToken;\n  }\n  /**\n   * @returns {int} the token's expiration (exp member).\n   */\n  ;\n\n  _proto.getExpiration = function getExpiration() {\n    return this.payload.exp;\n  }\n  /**\n   * @returns {int} the token's \"issued at\" (iat member).\n   */\n  ;\n\n  _proto.getIssuedAt = function getIssuedAt() {\n    return this.payload.iat;\n  }\n  /**\n   * @returns {object} the token's payload.\n   */\n  ;\n\n  _proto.decodePayload = function decodePayload() {\n    var payload = this.jwtToken.split('.')[1];\n\n    try {\n      return JSON.parse(Buffer.from(payload, 'base64').toString('utf8'));\n    } catch (err) {\n      return {};\n    }\n  };\n\n  return CognitoJwtToken;\n}();\n\nexport { CognitoJwtToken as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoRefreshToken = /*#__PURE__*/function () {\n  /**\n   * Constructs a new CognitoRefreshToken object\n   * @param {string=} RefreshToken The JWT refresh token.\n   */\n  function CognitoRefreshToken(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        RefreshToken = _ref.RefreshToken;\n\n    // Assign object\n    this.token = RefreshToken || '';\n  }\n  /**\n   * @returns {string} the record's token.\n   */\n\n\n  var _proto = CognitoRefreshToken.prototype;\n\n  _proto.getToken = function getToken() {\n    return this.token;\n  };\n\n  return CognitoRefreshToken;\n}();\n\nexport { CognitoRefreshToken as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\nimport CryptoJS from 'crypto-js/core';\nimport TypedArrays from 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport Base64 from 'crypto-js/enc-base64';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\nimport BigInteger from './BigInteger';\nimport AuthenticationHelper from './AuthenticationHelper';\nimport CognitoAccessToken from './CognitoAccessToken';\nimport CognitoIdToken from './CognitoIdToken';\nimport CognitoRefreshToken from './CognitoRefreshToken';\nimport CognitoUserSession from './CognitoUserSession';\nimport DateHelper from './DateHelper';\nimport CognitoUserAttribute from './CognitoUserAttribute';\nimport StorageHelper from './StorageHelper';\n/**\n * @callback nodeCallback\n * @template T result\n * @param {*} err The operation failure reason, or null.\n * @param {T} result The operation result.\n */\n\n/**\n * @callback onFailure\n * @param {*} err Failure reason.\n */\n\n/**\n * @callback onSuccess\n * @template T result\n * @param {T} result The operation result.\n */\n\n/**\n * @callback mfaRequired\n * @param {*} details MFA challenge details.\n */\n\n/**\n * @callback customChallenge\n * @param {*} details Custom challenge details.\n */\n\n/**\n * @callback inputVerificationCode\n * @param {*} data Server response.\n */\n\n/**\n * @callback authSuccess\n * @param {CognitoUserSession} session The new session.\n * @param {bool=} userConfirmationNecessary User must be confirmed.\n */\n\nvar isBrowser = typeof navigator !== 'undefined';\nvar userAgent = isBrowser ? navigator.userAgent : 'nodejs';\n/** @class */\n\nvar CognitoUser = /*#__PURE__*/function () {\n  /**\n   * Constructs a new CognitoUser object\n   * @param {object} data Creation options\n   * @param {string} data.Username The user's username.\n   * @param {CognitoUserPool} data.Pool Pool containing the user.\n   * @param {object} data.Storage Optional storage object.\n   */\n  function CognitoUser(data) {\n    if (data == null || data.Username == null || data.Pool == null) {\n      throw new Error('Username and pool information are required.');\n    }\n\n    this.username = data.Username || '';\n    this.pool = data.Pool;\n    this.Session = null;\n    this.client = data.Pool.client;\n    this.signInUserSession = null;\n    this.authenticationFlowType = 'USER_SRP_AUTH';\n    this.storage = data.Storage || new StorageHelper().getStorage();\n    this.keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n    this.userDataKey = this.keyPrefix + \".\" + this.username + \".userData\";\n  }\n  /**\n   * Sets the session for this user\n   * @param {CognitoUserSession} signInUserSession the session\n   * @returns {void}\n   */\n\n\n  var _proto = CognitoUser.prototype;\n\n  _proto.setSignInUserSession = function setSignInUserSession(signInUserSession) {\n    this.clearCachedUserData();\n    this.signInUserSession = signInUserSession;\n    this.cacheTokens();\n  }\n  /**\n   * @returns {CognitoUserSession} the current session for this user\n   */\n  ;\n\n  _proto.getSignInUserSession = function getSignInUserSession() {\n    return this.signInUserSession;\n  }\n  /**\n   * @returns {string} the user's username\n   */\n  ;\n\n  _proto.getUsername = function getUsername() {\n    return this.username;\n  }\n  /**\n   * @returns {String} the authentication flow type\n   */\n  ;\n\n  _proto.getAuthenticationFlowType = function getAuthenticationFlowType() {\n    return this.authenticationFlowType;\n  }\n  /**\n   * sets authentication flow type\n   * @param {string} authenticationFlowType New value.\n   * @returns {void}\n   */\n  ;\n\n  _proto.setAuthenticationFlowType = function setAuthenticationFlowType(authenticationFlowType) {\n    this.authenticationFlowType = authenticationFlowType;\n  }\n  /**\n   * This is used for authenticating the user through the custom authentication flow.\n   * @param {AuthenticationDetails} authDetails Contains the authentication data\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {customChallenge} callback.customChallenge Custom challenge\n   *        response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n  ;\n\n  _proto.initiateAuth = function initiateAuth(authDetails, callback) {\n    var _this = this;\n\n    var authParameters = authDetails.getAuthParameters();\n    authParameters.USERNAME = this.username;\n    var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n    var jsonReq = {\n      AuthFlow: 'CUSTOM_AUTH',\n      ClientId: this.pool.getClientId(),\n      AuthParameters: authParameters,\n      ClientMetadata: clientMetaData\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('InitiateAuth', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      var challengeName = data.ChallengeName;\n      var challengeParameters = data.ChallengeParameters;\n\n      if (challengeName === 'CUSTOM_CHALLENGE') {\n        _this.Session = data.Session;\n        return callback.customChallenge(challengeParameters);\n      }\n\n      _this.signInUserSession = _this.getCognitoUserSession(data.AuthenticationResult);\n\n      _this.cacheTokens();\n\n      return callback.onSuccess(_this.signInUserSession);\n    });\n  }\n  /**\n   * This is used for authenticating the user.\n   * stuff\n   * @param {AuthenticationDetails} authDetails Contains the authentication data\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {newPasswordRequired} callback.newPasswordRequired new\n   *        password and any required attributes are required to continue\n   * @param {mfaRequired} callback.mfaRequired MFA code\n   *        required to continue.\n   * @param {customChallenge} callback.customChallenge Custom challenge\n   *        response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n  ;\n\n  _proto.authenticateUser = function authenticateUser(authDetails, callback) {\n    if (this.authenticationFlowType === 'USER_PASSWORD_AUTH') {\n      return this.authenticateUserPlainUsernamePassword(authDetails, callback);\n    } else if (this.authenticationFlowType === 'USER_SRP_AUTH' || this.authenticationFlowType === 'CUSTOM_AUTH') {\n      return this.authenticateUserDefaultAuth(authDetails, callback);\n    }\n\n    return callback.onFailure(new Error('Authentication flow type is invalid.'));\n  }\n  /**\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   * It calls the AuthenticationHelper for SRP related\n   * stuff\n   * @param {AuthenticationDetails} authDetails Contains the authentication data\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {newPasswordRequired} callback.newPasswordRequired new\n   *        password and any required attributes are required to continue\n   * @param {mfaRequired} callback.mfaRequired MFA code\n   *        required to continue.\n   * @param {customChallenge} callback.customChallenge Custom challenge\n   *        response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n  ;\n\n  _proto.authenticateUserDefaultAuth = function authenticateUserDefaultAuth(authDetails, callback) {\n    var _this2 = this;\n\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    var dateHelper = new DateHelper();\n    var serverBValue;\n    var salt;\n    var authParameters = {};\n\n    if (this.deviceKey != null) {\n      authParameters.DEVICE_KEY = this.deviceKey;\n    }\n\n    authParameters.USERNAME = this.username;\n    authenticationHelper.getLargeAValue(function (errOnAValue, aValue) {\n      // getLargeAValue callback start\n      if (errOnAValue) {\n        callback.onFailure(errOnAValue);\n      }\n\n      authParameters.SRP_A = aValue.toString(16);\n\n      if (_this2.authenticationFlowType === 'CUSTOM_AUTH') {\n        authParameters.CHALLENGE_NAME = 'SRP_A';\n      }\n\n      var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n      var jsonReq = {\n        AuthFlow: _this2.authenticationFlowType,\n        ClientId: _this2.pool.getClientId(),\n        AuthParameters: authParameters,\n        ClientMetadata: clientMetaData\n      };\n\n      if (_this2.getUserContextData(_this2.username)) {\n        jsonReq.UserContextData = _this2.getUserContextData(_this2.username);\n      }\n\n      _this2.client.request('InitiateAuth', jsonReq, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        var challengeParameters = data.ChallengeParameters;\n        _this2.username = challengeParameters.USER_ID_FOR_SRP;\n        serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n        salt = new BigInteger(challengeParameters.SALT, 16);\n\n        _this2.getCachedDeviceKeyAndPassword();\n\n        authenticationHelper.getPasswordAuthenticationKey(_this2.username, authDetails.getPassword(), serverBValue, salt, function (errOnHkdf, hkdf) {\n          // getPasswordAuthenticationKey callback start\n          if (errOnHkdf) {\n            callback.onFailure(errOnHkdf);\n          }\n\n          var dateNow = dateHelper.getNowString();\n          var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this2.pool.getUserPoolId().split('_')[1], 'utf8'), Buffer.from(_this2.username, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n          var key = CryptoJS.lib.WordArray.create(hkdf);\n          var signatureString = Base64.stringify(HmacSHA256(message, key));\n          var challengeResponses = {};\n          challengeResponses.USERNAME = _this2.username;\n          challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n          challengeResponses.TIMESTAMP = dateNow;\n          challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n\n          if (_this2.deviceKey != null) {\n            challengeResponses.DEVICE_KEY = _this2.deviceKey;\n          }\n\n          var respondToAuthChallenge = function respondToAuthChallenge(challenge, challengeCallback) {\n            return _this2.client.request('RespondToAuthChallenge', challenge, function (errChallenge, dataChallenge) {\n              if (errChallenge && errChallenge.code === 'ResourceNotFoundException' && errChallenge.message.toLowerCase().indexOf('device') !== -1) {\n                challengeResponses.DEVICE_KEY = null;\n                _this2.deviceKey = null;\n                _this2.randomPassword = null;\n                _this2.deviceGroupKey = null;\n\n                _this2.clearCachedDeviceKeyAndPassword();\n\n                return respondToAuthChallenge(challenge, challengeCallback);\n              }\n\n              return challengeCallback(errChallenge, dataChallenge);\n            });\n          };\n\n          var jsonReqResp = {\n            ChallengeName: 'PASSWORD_VERIFIER',\n            ClientId: _this2.pool.getClientId(),\n            ChallengeResponses: challengeResponses,\n            Session: data.Session,\n            ClientMetadata: clientMetaData\n          };\n\n          if (_this2.getUserContextData()) {\n            jsonReqResp.UserContextData = _this2.getUserContextData();\n          }\n\n          respondToAuthChallenge(jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n            if (errAuthenticate) {\n              return callback.onFailure(errAuthenticate);\n            }\n\n            return _this2.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n          });\n          return undefined; // getPasswordAuthenticationKey callback end\n        });\n        return undefined;\n      }); // getLargeAValue callback end\n\n    });\n  }\n  /**\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   * @param {AuthenticationDetails} authDetails Contains the authentication data.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {mfaRequired} callback.mfaRequired MFA code\n   *        required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n  ;\n\n  _proto.authenticateUserPlainUsernamePassword = function authenticateUserPlainUsernamePassword(authDetails, callback) {\n    var _this3 = this;\n\n    var authParameters = {};\n    authParameters.USERNAME = this.username;\n    authParameters.PASSWORD = authDetails.getPassword();\n\n    if (!authParameters.PASSWORD) {\n      callback.onFailure(new Error('PASSWORD parameter is required'));\n      return;\n    }\n\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    this.getCachedDeviceKeyAndPassword();\n\n    if (this.deviceKey != null) {\n      authParameters.DEVICE_KEY = this.deviceKey;\n    }\n\n    var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n    var jsonReq = {\n      AuthFlow: 'USER_PASSWORD_AUTH',\n      ClientId: this.pool.getClientId(),\n      AuthParameters: authParameters,\n      ClientMetadata: clientMetaData\n    };\n\n    if (this.getUserContextData(this.username)) {\n      jsonReq.UserContextData = this.getUserContextData(this.username);\n    } // USER_PASSWORD_AUTH happens in a single round-trip: client sends userName and password,\n    // Cognito UserPools verifies password and returns tokens.\n\n\n    this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return _this3.authenticateUserInternal(authResult, authenticationHelper, callback);\n    });\n  }\n  /**\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   * @param {object} dataAuthenticate authentication data\n   * @param {object} authenticationHelper helper created\n   * @param {callback} callback passed on from caller\n   * @returns {void}\n   */\n  ;\n\n  _proto.authenticateUserInternal = function authenticateUserInternal(dataAuthenticate, authenticationHelper, callback) {\n    var _this4 = this;\n\n    var challengeName = dataAuthenticate.ChallengeName;\n    var challengeParameters = dataAuthenticate.ChallengeParameters;\n\n    if (challengeName === 'SMS_MFA') {\n      this.Session = dataAuthenticate.Session;\n      return callback.mfaRequired(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'SELECT_MFA_TYPE') {\n      this.Session = dataAuthenticate.Session;\n      return callback.selectMFAType(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'MFA_SETUP') {\n      this.Session = dataAuthenticate.Session;\n      return callback.mfaSetup(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'SOFTWARE_TOKEN_MFA') {\n      this.Session = dataAuthenticate.Session;\n      return callback.totpRequired(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'CUSTOM_CHALLENGE') {\n      this.Session = dataAuthenticate.Session;\n      return callback.customChallenge(challengeParameters);\n    }\n\n    if (challengeName === 'NEW_PASSWORD_REQUIRED') {\n      this.Session = dataAuthenticate.Session;\n      var userAttributes = null;\n      var rawRequiredAttributes = null;\n      var requiredAttributes = [];\n      var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n      if (challengeParameters) {\n        userAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.userAttributes);\n        rawRequiredAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.requiredAttributes);\n      }\n\n      if (rawRequiredAttributes) {\n        for (var i = 0; i < rawRequiredAttributes.length; i++) {\n          requiredAttributes[i] = rawRequiredAttributes[i].substr(userAttributesPrefix.length);\n        }\n      }\n\n      return callback.newPasswordRequired(userAttributes, requiredAttributes);\n    }\n\n    if (challengeName === 'DEVICE_SRP_AUTH') {\n      this.getDeviceResponse(callback);\n      return undefined;\n    }\n\n    this.signInUserSession = this.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n    this.challengeName = challengeName;\n    this.cacheTokens();\n    var newDeviceMetadata = dataAuthenticate.AuthenticationResult.NewDeviceMetadata;\n\n    if (newDeviceMetadata == null) {\n      return callback.onSuccess(this.signInUserSession);\n    }\n\n    authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n      if (errGenHash) {\n        return callback.onFailure(errGenHash);\n      }\n\n      var deviceSecretVerifierConfig = {\n        Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n        PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n      };\n      _this4.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n      _this4.deviceGroupKey = newDeviceMetadata.DeviceGroupKey;\n      _this4.randomPassword = authenticationHelper.getRandomPassword();\n\n      _this4.client.request('ConfirmDevice', {\n        DeviceKey: newDeviceMetadata.DeviceKey,\n        AccessToken: _this4.signInUserSession.getAccessToken().getJwtToken(),\n        DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n        DeviceName: userAgent\n      }, function (errConfirm, dataConfirm) {\n        if (errConfirm) {\n          return callback.onFailure(errConfirm);\n        }\n\n        _this4.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n        _this4.cacheDeviceKeyAndPassword();\n\n        if (dataConfirm.UserConfirmationNecessary === true) {\n          return callback.onSuccess(_this4.signInUserSession, dataConfirm.UserConfirmationNecessary);\n        }\n\n        return callback.onSuccess(_this4.signInUserSession);\n      });\n\n      return undefined;\n    });\n    return undefined;\n  }\n  /**\n   * This method is user to complete the NEW_PASSWORD_REQUIRED challenge.\n   * Pass the new password with any new user attributes to be updated.\n   * User attribute keys must be of format userAttributes.<attribute_name>.\n   * @param {string} newPassword new password for this user\n   * @param {object} requiredAttributeData map with values for all required attributes\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {mfaRequired} callback.mfaRequired MFA code required to continue.\n   * @param {customChallenge} callback.customChallenge Custom challenge\n   *         response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.completeNewPasswordChallenge = function completeNewPasswordChallenge(newPassword, requiredAttributeData, callback, clientMetadata) {\n    var _this5 = this;\n\n    if (!newPassword) {\n      return callback.onFailure(new Error('New password is required.'));\n    }\n\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n    var finalUserAttributes = {};\n\n    if (requiredAttributeData) {\n      Object.keys(requiredAttributeData).forEach(function (key) {\n        finalUserAttributes[userAttributesPrefix + key] = requiredAttributeData[key];\n      });\n    }\n\n    finalUserAttributes.NEW_PASSWORD = newPassword;\n    finalUserAttributes.USERNAME = this.username;\n    var jsonReq = {\n      ChallengeName: 'NEW_PASSWORD_REQUIRED',\n      ClientId: this.pool.getClientId(),\n      ChallengeResponses: finalUserAttributes,\n      Session: this.Session,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('RespondToAuthChallenge', jsonReq, function (errAuthenticate, dataAuthenticate) {\n      if (errAuthenticate) {\n        return callback.onFailure(errAuthenticate);\n      }\n\n      return _this5.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n    });\n    return undefined;\n  }\n  /**\n   * This is used to get a session using device authentication. It is called at the end of user\n   * authentication\n   *\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   * @private\n   */\n  ;\n\n  _proto.getDeviceResponse = function getDeviceResponse(callback, clientMetadata) {\n    var _this6 = this;\n\n    var authenticationHelper = new AuthenticationHelper(this.deviceGroupKey);\n    var dateHelper = new DateHelper();\n    var authParameters = {};\n    authParameters.USERNAME = this.username;\n    authParameters.DEVICE_KEY = this.deviceKey;\n    authenticationHelper.getLargeAValue(function (errAValue, aValue) {\n      // getLargeAValue callback start\n      if (errAValue) {\n        callback.onFailure(errAValue);\n      }\n\n      authParameters.SRP_A = aValue.toString(16);\n      var jsonReq = {\n        ChallengeName: 'DEVICE_SRP_AUTH',\n        ClientId: _this6.pool.getClientId(),\n        ChallengeResponses: authParameters,\n        ClientMetadata: clientMetadata\n      };\n\n      if (_this6.getUserContextData()) {\n        jsonReq.UserContextData = _this6.getUserContextData();\n      }\n\n      _this6.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        var challengeParameters = data.ChallengeParameters;\n        var serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n        var salt = new BigInteger(challengeParameters.SALT, 16);\n        authenticationHelper.getPasswordAuthenticationKey(_this6.deviceKey, _this6.randomPassword, serverBValue, salt, function (errHkdf, hkdf) {\n          // getPasswordAuthenticationKey callback start\n          if (errHkdf) {\n            return callback.onFailure(errHkdf);\n          }\n\n          var dateNow = dateHelper.getNowString();\n          var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this6.deviceGroupKey, 'utf8'), Buffer.from(_this6.deviceKey, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n          var key = CryptoJS.lib.WordArray.create(hkdf);\n          var signatureString = Base64.stringify(HmacSHA256(message, key));\n          var challengeResponses = {};\n          challengeResponses.USERNAME = _this6.username;\n          challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n          challengeResponses.TIMESTAMP = dateNow;\n          challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n          challengeResponses.DEVICE_KEY = _this6.deviceKey;\n          var jsonReqResp = {\n            ChallengeName: 'DEVICE_PASSWORD_VERIFIER',\n            ClientId: _this6.pool.getClientId(),\n            ChallengeResponses: challengeResponses,\n            Session: data.Session\n          };\n\n          if (_this6.getUserContextData()) {\n            jsonReqResp.UserContextData = _this6.getUserContextData();\n          }\n\n          _this6.client.request('RespondToAuthChallenge', jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n            if (errAuthenticate) {\n              return callback.onFailure(errAuthenticate);\n            }\n\n            _this6.signInUserSession = _this6.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n            _this6.cacheTokens();\n\n            return callback.onSuccess(_this6.signInUserSession);\n          });\n\n          return undefined; // getPasswordAuthenticationKey callback end\n        });\n        return undefined;\n      }); // getLargeAValue callback end\n\n    });\n  }\n  /**\n   * This is used for a certain user to confirm the registration by using a confirmation code\n   * @param {string} confirmationCode Code entered by user.\n   * @param {bool} forceAliasCreation Allow migrating from an existing email / phone number.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.confirmRegistration = function confirmRegistration(confirmationCode, forceAliasCreation, callback, clientMetadata) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      ConfirmationCode: confirmationCode,\n      Username: this.username,\n      ForceAliasCreation: forceAliasCreation,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('ConfirmSignUp', jsonReq, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, 'SUCCESS');\n    });\n  }\n  /**\n   * This is used by the user once he has the responses to a custom challenge\n   * @param {string} answerChallenge The custom challenge answer.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {customChallenge} callback.customChallenge\n   *    Custom challenge response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.sendCustomChallengeAnswer = function sendCustomChallengeAnswer(answerChallenge, callback, clientMetadata) {\n    var _this7 = this;\n\n    var challengeResponses = {};\n    challengeResponses.USERNAME = this.username;\n    challengeResponses.ANSWER = answerChallenge;\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    this.getCachedDeviceKeyAndPassword();\n\n    if (this.deviceKey != null) {\n      challengeResponses.DEVICE_KEY = this.deviceKey;\n    }\n\n    var jsonReq = {\n      ChallengeName: 'CUSTOM_CHALLENGE',\n      ChallengeResponses: challengeResponses,\n      ClientId: this.pool.getClientId(),\n      Session: this.Session,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return _this7.authenticateUserInternal(data, authenticationHelper, callback);\n    });\n  }\n  /**\n   * This is used by the user once he has an MFA code\n   * @param {string} confirmationCode The MFA code entered by the user.\n   * @param {object} callback Result callback map.\n   * @param {string} mfaType The mfa we are replying to.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.sendMFACode = function sendMFACode(confirmationCode, callback, mfaType, clientMetadata) {\n    var _this8 = this;\n\n    var challengeResponses = {};\n    challengeResponses.USERNAME = this.username;\n    challengeResponses.SMS_MFA_CODE = confirmationCode;\n    var mfaTypeSelection = mfaType || 'SMS_MFA';\n\n    if (mfaTypeSelection === 'SOFTWARE_TOKEN_MFA') {\n      challengeResponses.SOFTWARE_TOKEN_MFA_CODE = confirmationCode;\n    }\n\n    if (this.deviceKey != null) {\n      challengeResponses.DEVICE_KEY = this.deviceKey;\n    }\n\n    var jsonReq = {\n      ChallengeName: mfaTypeSelection,\n      ChallengeResponses: challengeResponses,\n      ClientId: this.pool.getClientId(),\n      Session: this.Session,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('RespondToAuthChallenge', jsonReq, function (err, dataAuthenticate) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      var challengeName = dataAuthenticate.ChallengeName;\n\n      if (challengeName === 'DEVICE_SRP_AUTH') {\n        _this8.getDeviceResponse(callback);\n\n        return undefined;\n      }\n\n      _this8.signInUserSession = _this8.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n      _this8.cacheTokens();\n\n      if (dataAuthenticate.AuthenticationResult.NewDeviceMetadata == null) {\n        return callback.onSuccess(_this8.signInUserSession);\n      }\n\n      var authenticationHelper = new AuthenticationHelper(_this8.pool.getUserPoolId().split('_')[1]);\n      authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n        if (errGenHash) {\n          return callback.onFailure(errGenHash);\n        }\n\n        var deviceSecretVerifierConfig = {\n          Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n          PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n        };\n        _this8.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n        _this8.deviceGroupKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey;\n        _this8.randomPassword = authenticationHelper.getRandomPassword();\n\n        _this8.client.request('ConfirmDevice', {\n          DeviceKey: dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey,\n          AccessToken: _this8.signInUserSession.getAccessToken().getJwtToken(),\n          DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n          DeviceName: userAgent\n        }, function (errConfirm, dataConfirm) {\n          if (errConfirm) {\n            return callback.onFailure(errConfirm);\n          }\n\n          _this8.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n          _this8.cacheDeviceKeyAndPassword();\n\n          if (dataConfirm.UserConfirmationNecessary === true) {\n            return callback.onSuccess(_this8.signInUserSession, dataConfirm.UserConfirmationNecessary);\n          }\n\n          return callback.onSuccess(_this8.signInUserSession);\n        });\n\n        return undefined;\n      });\n      return undefined;\n    });\n  }\n  /**\n   * This is used by an authenticated user to change the current password\n   * @param {string} oldUserPassword The current password.\n   * @param {string} newUserPassword The requested new password.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.changePassword = function changePassword(oldUserPassword, newUserPassword, callback, clientMetadata) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('ChangePassword', {\n      PreviousPassword: oldUserPassword,\n      ProposedPassword: newUserPassword,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      ClientMetadata: clientMetadata\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used by an authenticated user to enable MFA for itself\n   * @deprecated\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.enableMFA = function enableMFA(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    var mfaOptions = [];\n    var mfaEnabled = {\n      DeliveryMedium: 'SMS',\n      AttributeName: 'phone_number'\n    };\n    mfaOptions.push(mfaEnabled);\n    this.client.request('SetUserSettings', {\n      MFAOptions: mfaOptions,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used by an authenticated user to enable MFA for itself\n   * @param {IMfaSettings} smsMfaSettings the sms mfa settings\n   * @param {IMFASettings} softwareTokenMfaSettings the software token mfa settings\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.setUserMfaPreference = function setUserMfaPreference(smsMfaSettings, softwareTokenMfaSettings, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('SetUserMFAPreference', {\n      SMSMfaSettings: smsMfaSettings,\n      SoftwareTokenMfaSettings: softwareTokenMfaSettings,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used by an authenticated user to disable MFA for itself\n   * @deprecated\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.disableMFA = function disableMFA(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    var mfaOptions = [];\n    this.client.request('SetUserSettings', {\n      MFAOptions: mfaOptions,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used by an authenticated user to delete itself\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.deleteUser = function deleteUser(callback, clientMetadata) {\n    var _this9 = this;\n\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('DeleteUser', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      ClientMetadata: clientMetadata\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      _this9.clearCachedUser();\n\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * @typedef {CognitoUserAttribute | { Name:string, Value:string }} AttributeArg\n   */\n\n  /**\n   * This is used by an authenticated user to change a list of attributes\n   * @param {AttributeArg[]} attributes A list of the new user attributes.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.updateAttributes = function updateAttributes(attributes, callback, clientMetadata) {\n    var _this10 = this;\n\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('UpdateUserAttributes', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      UserAttributes: attributes,\n      ClientMetadata: clientMetadata\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      } // update cached user\n\n\n      return _this10.getUserData(function () {\n        return callback(null, 'SUCCESS');\n      }, {\n        bypassCache: true\n      });\n    });\n    return undefined;\n  }\n  /**\n   * This is used by an authenticated user to get a list of attributes\n   * @param {nodeCallback<CognitoUserAttribute[]>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.getUserAttributes = function getUserAttributes(callback) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('GetUser', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err, userData) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      var attributeList = [];\n\n      for (var i = 0; i < userData.UserAttributes.length; i++) {\n        var attribute = {\n          Name: userData.UserAttributes[i].Name,\n          Value: userData.UserAttributes[i].Value\n        };\n        var userAttribute = new CognitoUserAttribute(attribute);\n        attributeList.push(userAttribute);\n      }\n\n      return callback(null, attributeList);\n    });\n    return undefined;\n  }\n  /**\n   * This is used by an authenticated user to get the MFAOptions\n   * @param {nodeCallback<MFAOptions>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.getMFAOptions = function getMFAOptions(callback) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('GetUser', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err, userData) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, userData.MFAOptions);\n    });\n    return undefined;\n  }\n  /**\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   */\n  ;\n\n  _proto.createGetUserRequest = function createGetUserRequest() {\n    return this.client.promisifyRequest('GetUser', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    });\n  }\n  /**\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   */\n  ;\n\n  _proto.refreshSessionIfPossible = function refreshSessionIfPossible() {\n    var _this11 = this;\n\n    // best effort, if not possible\n    return new Promise(function (resolve) {\n      var refresh = _this11.signInUserSession.getRefreshToken();\n\n      if (refresh && refresh.getToken()) {\n        _this11.refreshSession(refresh, resolve);\n      } else {\n        resolve();\n      }\n    });\n  }\n  /**\n   * This is used by an authenticated users to get the userData\n   * @param {nodeCallback<UserData>} callback Called on success or error.\n   * @param {GetUserDataOptions} params\n   * @returns {void}\n   */\n  ;\n\n  _proto.getUserData = function getUserData(callback, params) {\n    var _this12 = this;\n\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      this.clearCachedUserData();\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    var userData = this.getUserDataFromCache();\n\n    if (!userData) {\n      this.fetchUserData().then(function (data) {\n        callback(null, data);\n      })[\"catch\"](callback);\n      return;\n    }\n\n    if (this.isFetchUserDataAndTokenRequired(params)) {\n      this.fetchUserData().then(function (data) {\n        return _this12.refreshSessionIfPossible().then(function () {\n          return data;\n        });\n      }).then(function (data) {\n        return callback(null, data);\n      })[\"catch\"](callback);\n      return;\n    }\n\n    try {\n      callback(null, JSON.parse(userData));\n      return;\n    } catch (err) {\n      this.clearCachedUserData();\n      callback(err, null);\n      return;\n    }\n  }\n  /**\n   *\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   */\n  ;\n\n  _proto.getUserDataFromCache = function getUserDataFromCache() {\n    var userData = this.storage.getItem(this.userDataKey);\n    return userData;\n  }\n  /**\n   *\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   */\n  ;\n\n  _proto.isFetchUserDataAndTokenRequired = function isFetchUserDataAndTokenRequired(params) {\n    var _ref = params || {},\n        _ref$bypassCache = _ref.bypassCache,\n        bypassCache = _ref$bypassCache === void 0 ? false : _ref$bypassCache;\n\n    return bypassCache;\n  }\n  /**\n   *\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   */\n  ;\n\n  _proto.fetchUserData = function fetchUserData() {\n    var _this13 = this;\n\n    return this.createGetUserRequest().then(function (data) {\n      _this13.cacheUserData(data);\n\n      return data;\n    });\n  }\n  /**\n   * This is used by an authenticated user to delete a list of attributes\n   * @param {string[]} attributeList Names of the attributes to delete.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.deleteAttributes = function deleteAttributes(attributeList, callback) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('DeleteUserAttributes', {\n      UserAttributeNames: attributeList,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used by a user to resend a confirmation code\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.resendConfirmationCode = function resendConfirmationCode(callback, clientMetadata) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      Username: this.username,\n      ClientMetadata: clientMetadata\n    };\n    this.client.request('ResendConfirmationCode', jsonReq, function (err, result) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, result);\n    });\n  }\n  /**\n   * This is used to get a session, either from the session object\n   * or from  the local storage, or by using a refresh token\n   *\n   * @param {nodeCallback<CognitoUserSession>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.getSession = function getSession(callback) {\n    if (this.username == null) {\n      return callback(new Error('Username is null. Cannot retrieve a new session'), null);\n    }\n\n    if (this.signInUserSession != null && this.signInUserSession.isValid()) {\n      return callback(null, this.signInUserSession);\n    }\n\n    var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n    var idTokenKey = keyPrefix + \".idToken\";\n    var accessTokenKey = keyPrefix + \".accessToken\";\n    var refreshTokenKey = keyPrefix + \".refreshToken\";\n    var clockDriftKey = keyPrefix + \".clockDrift\";\n\n    if (this.storage.getItem(idTokenKey)) {\n      var idToken = new CognitoIdToken({\n        IdToken: this.storage.getItem(idTokenKey)\n      });\n      var accessToken = new CognitoAccessToken({\n        AccessToken: this.storage.getItem(accessTokenKey)\n      });\n      var refreshToken = new CognitoRefreshToken({\n        RefreshToken: this.storage.getItem(refreshTokenKey)\n      });\n      var clockDrift = parseInt(this.storage.getItem(clockDriftKey), 0) || 0;\n      var sessionData = {\n        IdToken: idToken,\n        AccessToken: accessToken,\n        RefreshToken: refreshToken,\n        ClockDrift: clockDrift\n      };\n      var cachedSession = new CognitoUserSession(sessionData);\n\n      if (cachedSession.isValid()) {\n        this.signInUserSession = cachedSession;\n        return callback(null, this.signInUserSession);\n      }\n\n      if (!refreshToken.getToken()) {\n        return callback(new Error('Cannot retrieve a new session. Please authenticate.'), null);\n      }\n\n      this.refreshSession(refreshToken, callback);\n    } else {\n      callback(new Error('Local storage is missing an ID Token, Please authenticate'), null);\n    }\n\n    return undefined;\n  }\n  /**\n   * This uses the refreshToken to retrieve a new session\n   * @param {CognitoRefreshToken} refreshToken A previous session's refresh token.\n   * @param {nodeCallback<CognitoUserSession>} callback Called on success or error.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.refreshSession = function refreshSession(refreshToken, callback, clientMetadata) {\n    var _this14 = this;\n\n    var authParameters = {};\n    authParameters.REFRESH_TOKEN = refreshToken.getToken();\n    var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n    var lastUserKey = keyPrefix + \".LastAuthUser\";\n\n    if (this.storage.getItem(lastUserKey)) {\n      this.username = this.storage.getItem(lastUserKey);\n      var deviceKeyKey = keyPrefix + \".\" + this.username + \".deviceKey\";\n      this.deviceKey = this.storage.getItem(deviceKeyKey);\n      authParameters.DEVICE_KEY = this.deviceKey;\n    }\n\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      AuthFlow: 'REFRESH_TOKEN_AUTH',\n      AuthParameters: authParameters,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n      if (err) {\n        if (err.code === 'NotAuthorizedException') {\n          _this14.clearCachedUser();\n        }\n\n        return callback(err, null);\n      }\n\n      if (authResult) {\n        var authenticationResult = authResult.AuthenticationResult;\n\n        if (!Object.prototype.hasOwnProperty.call(authenticationResult, 'RefreshToken')) {\n          authenticationResult.RefreshToken = refreshToken.getToken();\n        }\n\n        _this14.signInUserSession = _this14.getCognitoUserSession(authenticationResult);\n\n        _this14.cacheTokens();\n\n        return callback(null, _this14.signInUserSession);\n      }\n\n      return undefined;\n    });\n  }\n  /**\n   * This is used to save the session tokens to local storage\n   * @returns {void}\n   */\n  ;\n\n  _proto.cacheTokens = function cacheTokens() {\n    var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n    var idTokenKey = keyPrefix + \".\" + this.username + \".idToken\";\n    var accessTokenKey = keyPrefix + \".\" + this.username + \".accessToken\";\n    var refreshTokenKey = keyPrefix + \".\" + this.username + \".refreshToken\";\n    var clockDriftKey = keyPrefix + \".\" + this.username + \".clockDrift\";\n    var lastUserKey = keyPrefix + \".LastAuthUser\";\n    this.storage.setItem(idTokenKey, this.signInUserSession.getIdToken().getJwtToken());\n    this.storage.setItem(accessTokenKey, this.signInUserSession.getAccessToken().getJwtToken());\n    this.storage.setItem(refreshTokenKey, this.signInUserSession.getRefreshToken().getToken());\n    this.storage.setItem(clockDriftKey, \"\" + this.signInUserSession.getClockDrift());\n    this.storage.setItem(lastUserKey, this.username);\n  }\n  /**\n   * This is to cache user data\n   */\n  ;\n\n  _proto.cacheUserData = function cacheUserData(userData) {\n    this.storage.setItem(this.userDataKey, JSON.stringify(userData));\n  }\n  /**\n   * This is to remove cached user data\n   */\n  ;\n\n  _proto.clearCachedUserData = function clearCachedUserData() {\n    this.storage.removeItem(this.userDataKey);\n  };\n\n  _proto.clearCachedUser = function clearCachedUser() {\n    this.clearCachedTokens();\n    this.clearCachedUserData();\n  }\n  /**\n   * This is used to cache the device key and device group and device password\n   * @returns {void}\n   */\n  ;\n\n  _proto.cacheDeviceKeyAndPassword = function cacheDeviceKeyAndPassword() {\n    var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n    var deviceKeyKey = keyPrefix + \".deviceKey\";\n    var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n    var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n    this.storage.setItem(deviceKeyKey, this.deviceKey);\n    this.storage.setItem(randomPasswordKey, this.randomPassword);\n    this.storage.setItem(deviceGroupKeyKey, this.deviceGroupKey);\n  }\n  /**\n   * This is used to get current device key and device group and device password\n   * @returns {void}\n   */\n  ;\n\n  _proto.getCachedDeviceKeyAndPassword = function getCachedDeviceKeyAndPassword() {\n    var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n    var deviceKeyKey = keyPrefix + \".deviceKey\";\n    var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n    var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n\n    if (this.storage.getItem(deviceKeyKey)) {\n      this.deviceKey = this.storage.getItem(deviceKeyKey);\n      this.randomPassword = this.storage.getItem(randomPasswordKey);\n      this.deviceGroupKey = this.storage.getItem(deviceGroupKeyKey);\n    }\n  }\n  /**\n   * This is used to clear the device key info from local storage\n   * @returns {void}\n   */\n  ;\n\n  _proto.clearCachedDeviceKeyAndPassword = function clearCachedDeviceKeyAndPassword() {\n    var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n    var deviceKeyKey = keyPrefix + \".deviceKey\";\n    var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n    var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n    this.storage.removeItem(deviceKeyKey);\n    this.storage.removeItem(randomPasswordKey);\n    this.storage.removeItem(deviceGroupKeyKey);\n  }\n  /**\n   * This is used to clear the session tokens from local storage\n   * @returns {void}\n   */\n  ;\n\n  _proto.clearCachedTokens = function clearCachedTokens() {\n    var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n    var idTokenKey = keyPrefix + \".\" + this.username + \".idToken\";\n    var accessTokenKey = keyPrefix + \".\" + this.username + \".accessToken\";\n    var refreshTokenKey = keyPrefix + \".\" + this.username + \".refreshToken\";\n    var lastUserKey = keyPrefix + \".LastAuthUser\";\n    var clockDriftKey = keyPrefix + \".\" + this.username + \".clockDrift\";\n    this.storage.removeItem(idTokenKey);\n    this.storage.removeItem(accessTokenKey);\n    this.storage.removeItem(refreshTokenKey);\n    this.storage.removeItem(lastUserKey);\n    this.storage.removeItem(clockDriftKey);\n  }\n  /**\n   * This is used to build a user session from tokens retrieved in the authentication result\n   * @param {object} authResult Successful auth response from server.\n   * @returns {CognitoUserSession} The new user session.\n   * @private\n   */\n  ;\n\n  _proto.getCognitoUserSession = function getCognitoUserSession(authResult) {\n    var idToken = new CognitoIdToken(authResult);\n    var accessToken = new CognitoAccessToken(authResult);\n    var refreshToken = new CognitoRefreshToken(authResult);\n    var sessionData = {\n      IdToken: idToken,\n      AccessToken: accessToken,\n      RefreshToken: refreshToken\n    };\n    return new CognitoUserSession(sessionData);\n  }\n  /**\n   * This is used to initiate a forgot password request\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {inputVerificationCode?} callback.inputVerificationCode\n   *    Optional callback raised instead of onSuccess with response data.\n   * @param {onSuccess} callback.onSuccess Called on success.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.forgotPassword = function forgotPassword(callback, clientMetadata) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      Username: this.username,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('ForgotPassword', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      if (typeof callback.inputVerificationCode === 'function') {\n        return callback.inputVerificationCode(data);\n      }\n\n      return callback.onSuccess(data);\n    });\n  }\n  /**\n   * This is used to confirm a new password using a confirmationCode\n   * @param {string} confirmationCode Code entered by user.\n   * @param {string} newPassword Confirm new password.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<void>} callback.onSuccess Called on success.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.confirmPassword = function confirmPassword(confirmationCode, newPassword, callback, clientMetadata) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      Username: this.username,\n      ConfirmationCode: confirmationCode,\n      Password: newPassword,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('ConfirmForgotPassword', jsonReq, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return callback.onSuccess();\n    });\n  }\n  /**\n   * This is used to initiate an attribute confirmation request\n   * @param {string} attributeName User attribute that needs confirmation.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {inputVerificationCode} callback.inputVerificationCode Called on success.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.getAttributeVerificationCode = function getAttributeVerificationCode(attributeName, callback, clientMetadata) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('GetUserAttributeVerificationCode', {\n      AttributeName: attributeName,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      ClientMetadata: clientMetadata\n    }, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      if (typeof callback.inputVerificationCode === 'function') {\n        return callback.inputVerificationCode(data);\n      }\n\n      return callback.onSuccess();\n    });\n    return undefined;\n  }\n  /**\n   * This is used to confirm an attribute using a confirmation code\n   * @param {string} attributeName Attribute being confirmed.\n   * @param {string} confirmationCode Code entered by user.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n  ;\n\n  _proto.verifyAttribute = function verifyAttribute(attributeName, confirmationCode, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('VerifyUserAttribute', {\n      AttributeName: attributeName,\n      Code: confirmationCode,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used to get the device information using the current device key\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<*>} callback.onSuccess Called on success with device data.\n   * @returns {void}\n   */\n  ;\n\n  _proto.getDevice = function getDevice(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('GetDevice', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: this.deviceKey\n    }, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return callback.onSuccess(data);\n    });\n    return undefined;\n  }\n  /**\n   * This is used to forget a specific device\n   * @param {string} deviceKey Device key.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n  ;\n\n  _proto.forgetSpecificDevice = function forgetSpecificDevice(deviceKey, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('ForgetDevice', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: deviceKey\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used to forget the current device\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n  ;\n\n  _proto.forgetDevice = function forgetDevice(callback) {\n    var _this15 = this;\n\n    this.forgetSpecificDevice(this.deviceKey, {\n      onFailure: callback.onFailure,\n      onSuccess: function onSuccess(result) {\n        _this15.deviceKey = null;\n        _this15.deviceGroupKey = null;\n        _this15.randomPassword = null;\n\n        _this15.clearCachedDeviceKeyAndPassword();\n\n        return callback.onSuccess(result);\n      }\n    });\n  }\n  /**\n   * This is used to set the device status as remembered\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n  ;\n\n  _proto.setDeviceStatusRemembered = function setDeviceStatusRemembered(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('UpdateDeviceStatus', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: this.deviceKey,\n      DeviceRememberedStatus: 'remembered'\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used to set the device status as not remembered\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n  ;\n\n  _proto.setDeviceStatusNotRemembered = function setDeviceStatusNotRemembered(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('UpdateDeviceStatus', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: this.deviceKey,\n      DeviceRememberedStatus: 'not_remembered'\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used to list all devices for a user\n   *\n   * @param {int} limit the number of devices returned in a call\n   * @param {string | null} paginationToken the pagination token in case any was returned before\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<*>} callback.onSuccess Called on success with device list.\n   * @returns {void}\n   */\n  ;\n\n  _proto.listDevices = function listDevices(limit, paginationToken, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    var requestParams = {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      Limit: limit\n    };\n\n    if (paginationToken) {\n      requestParams.PaginationToken = paginationToken;\n    }\n\n    this.client.request('ListDevices', requestParams, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return callback.onSuccess(data);\n    });\n    return undefined;\n  }\n  /**\n   * This is used to globally revoke all tokens issued to a user\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n  ;\n\n  _proto.globalSignOut = function globalSignOut(callback) {\n    var _this16 = this;\n\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('GlobalSignOut', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      _this16.clearCachedUser();\n\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  }\n  /**\n   * This is used for the user to signOut of the application and clear the cached tokens.\n   * @returns {void}\n   */\n  ;\n\n  _proto.signOut = function signOut() {\n    this.signInUserSession = null;\n    this.clearCachedUser();\n  }\n  /**\n   * This is used by a user trying to select a given MFA\n   * @param {string} answerChallenge the mfa the user wants\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.sendMFASelectionAnswer = function sendMFASelectionAnswer(answerChallenge, callback) {\n    var _this17 = this;\n\n    var challengeResponses = {};\n    challengeResponses.USERNAME = this.username;\n    challengeResponses.ANSWER = answerChallenge;\n    var jsonReq = {\n      ChallengeName: 'SELECT_MFA_TYPE',\n      ChallengeResponses: challengeResponses,\n      ClientId: this.pool.getClientId(),\n      Session: this.Session\n    };\n\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      _this17.Session = data.Session;\n\n      if (answerChallenge === 'SMS_MFA') {\n        return callback.mfaRequired(data.ChallengeName, data.ChallengeParameters);\n      }\n\n      if (answerChallenge === 'SOFTWARE_TOKEN_MFA') {\n        return callback.totpRequired(data.ChallengeName, data.ChallengeParameters);\n      }\n\n      return undefined;\n    });\n  }\n  /**\n   * This returns the user context data for advanced security feature.\n   * @returns {void}\n   */\n  ;\n\n  _proto.getUserContextData = function getUserContextData() {\n    var pool = this.pool;\n    return pool.getUserContextData(this.username);\n  }\n  /**\n   * This is used by an authenticated or a user trying to authenticate to associate a TOTP MFA\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.associateSoftwareToken = function associateSoftwareToken(callback) {\n    var _this18 = this;\n\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      this.client.request('AssociateSoftwareToken', {\n        Session: this.Session\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        _this18.Session = data.Session;\n        return callback.associateSecretCode(data.SecretCode);\n      });\n    } else {\n      this.client.request('AssociateSoftwareToken', {\n        AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        return callback.associateSecretCode(data.SecretCode);\n      });\n    }\n  }\n  /**\n   * This is used by an authenticated or a user trying to authenticate to verify a TOTP MFA\n   * @param {string} totpCode The MFA code entered by the user.\n   * @param {string} friendlyDeviceName The device name we are assigning to the device.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n  ;\n\n  _proto.verifySoftwareToken = function verifySoftwareToken(totpCode, friendlyDeviceName, callback) {\n    var _this19 = this;\n\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      this.client.request('VerifySoftwareToken', {\n        Session: this.Session,\n        UserCode: totpCode,\n        FriendlyDeviceName: friendlyDeviceName\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        _this19.Session = data.Session;\n        var challengeResponses = {};\n        challengeResponses.USERNAME = _this19.username;\n        var jsonReq = {\n          ChallengeName: 'MFA_SETUP',\n          ClientId: _this19.pool.getClientId(),\n          ChallengeResponses: challengeResponses,\n          Session: _this19.Session\n        };\n\n        if (_this19.getUserContextData()) {\n          jsonReq.UserContextData = _this19.getUserContextData();\n        }\n\n        _this19.client.request('RespondToAuthChallenge', jsonReq, function (errRespond, dataRespond) {\n          if (errRespond) {\n            return callback.onFailure(errRespond);\n          }\n\n          _this19.signInUserSession = _this19.getCognitoUserSession(dataRespond.AuthenticationResult);\n\n          _this19.cacheTokens();\n\n          return callback.onSuccess(_this19.signInUserSession);\n        });\n\n        return undefined;\n      });\n    } else {\n      this.client.request('VerifySoftwareToken', {\n        AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n        UserCode: totpCode,\n        FriendlyDeviceName: friendlyDeviceName\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        return callback.onSuccess(data);\n      });\n    }\n  };\n\n  return CognitoUser;\n}();\n\nexport { CognitoUser as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserAttribute = /*#__PURE__*/function () {\n  /**\n   * Constructs a new CognitoUserAttribute object\n   * @param {string=} Name The record's name\n   * @param {string=} Value The record's value\n   */\n  function CognitoUserAttribute(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        Name = _ref.Name,\n        Value = _ref.Value;\n\n    this.Name = Name || '';\n    this.Value = Value || '';\n  }\n  /**\n   * @returns {string} the record's value.\n   */\n\n\n  var _proto = CognitoUserAttribute.prototype;\n\n  _proto.getValue = function getValue() {\n    return this.Value;\n  }\n  /**\n   * Sets the record's value.\n   * @param {string} value The new value.\n   * @returns {CognitoUserAttribute} The record for method chaining.\n   */\n  ;\n\n  _proto.setValue = function setValue(value) {\n    this.Value = value;\n    return this;\n  }\n  /**\n   * @returns {string} the record's name.\n   */\n  ;\n\n  _proto.getName = function getName() {\n    return this.Name;\n  }\n  /**\n   * Sets the record's name\n   * @param {string} name The new name.\n   * @returns {CognitoUserAttribute} The record for method chaining.\n   */\n  ;\n\n  _proto.setName = function setName(name) {\n    this.Name = name;\n    return this;\n  }\n  /**\n   * @returns {string} a string representation of the record.\n   */\n  ;\n\n  _proto.toString = function toString() {\n    return JSON.stringify(this);\n  }\n  /**\n   * @returns {object} a flat object representing the record.\n   */\n  ;\n\n  _proto.toJSON = function toJSON() {\n    return {\n      Name: this.Name,\n      Value: this.Value\n    };\n  };\n\n  return CognitoUserAttribute;\n}();\n\nexport { CognitoUserAttribute as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport Client from './Client';\nimport CognitoUser from './CognitoUser';\nimport StorageHelper from './StorageHelper';\n/** @class */\n\nvar CognitoUserPool = /*#__PURE__*/function () {\n  /**\n   * Constructs a new CognitoUserPool object\n   * @param {object} data Creation options.\n   * @param {string} data.UserPoolId Cognito user pool id.\n   * @param {string} data.ClientId User pool application client id.\n   * @param {string} data.endpoint Optional custom service endpoint.\n   * @param {object} data.fetchOptions Optional options for fetch API.\n   *        (only credentials option is supported)\n   * @param {object} data.Storage Optional storage object.\n   * @param {boolean} data.AdvancedSecurityDataCollectionFlag Optional:\n   *        boolean flag indicating if the data collection is enabled\n   *        to support cognito advanced security features. By default, this\n   *        flag is set to true.\n   */\n  function CognitoUserPool(data) {\n    var _ref = data || {},\n        UserPoolId = _ref.UserPoolId,\n        ClientId = _ref.ClientId,\n        endpoint = _ref.endpoint,\n        fetchOptions = _ref.fetchOptions,\n        AdvancedSecurityDataCollectionFlag = _ref.AdvancedSecurityDataCollectionFlag;\n\n    if (!UserPoolId || !ClientId) {\n      throw new Error('Both UserPoolId and ClientId are required.');\n    }\n\n    if (!/^[\\w-]+_.+$/.test(UserPoolId)) {\n      throw new Error('Invalid UserPoolId format.');\n    }\n\n    var region = UserPoolId.split('_')[0];\n    this.userPoolId = UserPoolId;\n    this.clientId = ClientId;\n    this.client = new Client(region, endpoint, fetchOptions);\n    /**\n     * By default, AdvancedSecurityDataCollectionFlag is set to true,\n     * if no input value is provided.\n     */\n\n    this.advancedSecurityDataCollectionFlag = AdvancedSecurityDataCollectionFlag !== false;\n    this.storage = data.Storage || new StorageHelper().getStorage();\n  }\n  /**\n   * @returns {string} the user pool id\n   */\n\n\n  var _proto = CognitoUserPool.prototype;\n\n  _proto.getUserPoolId = function getUserPoolId() {\n    return this.userPoolId;\n  }\n  /**\n   * @returns {string} the client id\n   */\n  ;\n\n  _proto.getClientId = function getClientId() {\n    return this.clientId;\n  }\n  /**\n   * @typedef {object} SignUpResult\n   * @property {CognitoUser} user New user.\n   * @property {bool} userConfirmed If the user is already confirmed.\n   */\n\n  /**\n   * method for signing up a user\n   * @param {string} username User's username.\n   * @param {string} password Plain-text initial password entered by user.\n   * @param {(AttributeArg[])=} userAttributes New user attributes.\n   * @param {(AttributeArg[])=} validationData Application metadata.\n   * @param {(AttributeArg[])=} clientMetadata Client metadata.\n   * @param {nodeCallback<SignUpResult>} callback Called on error or with the new user.\n   * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n   * @returns {void}\n   */\n  ;\n\n  _proto.signUp = function signUp(username, password, userAttributes, validationData, callback, clientMetadata) {\n    var _this = this;\n\n    var jsonReq = {\n      ClientId: this.clientId,\n      Username: username,\n      Password: password,\n      UserAttributes: userAttributes,\n      ValidationData: validationData,\n      ClientMetadata: clientMetadata\n    };\n\n    if (this.getUserContextData(username)) {\n      jsonReq.UserContextData = this.getUserContextData(username);\n    }\n\n    this.client.request('SignUp', jsonReq, function (err, data) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      var cognitoUser = {\n        Username: username,\n        Pool: _this,\n        Storage: _this.storage\n      };\n      var returnData = {\n        user: new CognitoUser(cognitoUser),\n        userConfirmed: data.UserConfirmed,\n        userSub: data.UserSub,\n        codeDeliveryDetails: data.CodeDeliveryDetails\n      };\n      return callback(null, returnData);\n    });\n  }\n  /**\n   * method for getting the current user of the application from the local storage\n   *\n   * @returns {CognitoUser} the user retrieved from storage\n   */\n  ;\n\n  _proto.getCurrentUser = function getCurrentUser() {\n    var lastUserKey = \"CognitoIdentityServiceProvider.\" + this.clientId + \".LastAuthUser\";\n    var lastAuthUser = this.storage.getItem(lastUserKey);\n\n    if (lastAuthUser) {\n      var cognitoUser = {\n        Username: lastAuthUser,\n        Pool: this,\n        Storage: this.storage\n      };\n      return new CognitoUser(cognitoUser);\n    }\n\n    return null;\n  }\n  /**\n   * This method returns the encoded data string used for cognito advanced security feature.\n   * This would be generated only when developer has included the JS used for collecting the\n   * data on their client. Please refer to documentation to know more about using AdvancedSecurity\n   * features\n   * @param {string} username the username for the context data\n   * @returns {string} the user context data\n   **/\n  ;\n\n  _proto.getUserContextData = function getUserContextData(username) {\n    if (typeof AmazonCognitoAdvancedSecurityData === 'undefined') {\n      return undefined;\n    }\n    /* eslint-disable */\n\n\n    var amazonCognitoAdvancedSecurityDataConst = AmazonCognitoAdvancedSecurityData;\n    /* eslint-enable */\n\n    if (this.advancedSecurityDataCollectionFlag) {\n      var advancedSecurityData = amazonCognitoAdvancedSecurityDataConst.getData(username, this.userPoolId, this.clientId);\n\n      if (advancedSecurityData) {\n        var userContextData = {\n          EncodedData: advancedSecurityData\n        };\n        return userContextData;\n      }\n    }\n\n    return {};\n  };\n\n  return CognitoUserPool;\n}();\n\nexport { CognitoUserPool as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserSession = /*#__PURE__*/function () {\n  /**\n   * Constructs a new CognitoUserSession object\n   * @param {CognitoIdToken} IdToken The session's Id token.\n   * @param {CognitoRefreshToken=} RefreshToken The session's refresh token.\n   * @param {CognitoAccessToken} AccessToken The session's access token.\n   * @param {int} ClockDrift The saved computer's clock drift or undefined to force calculation.\n   */\n  function CognitoUserSession(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        IdToken = _ref.IdToken,\n        RefreshToken = _ref.RefreshToken,\n        AccessToken = _ref.AccessToken,\n        ClockDrift = _ref.ClockDrift;\n\n    if (AccessToken == null || IdToken == null) {\n      throw new Error('Id token and Access Token must be present.');\n    }\n\n    this.idToken = IdToken;\n    this.refreshToken = RefreshToken;\n    this.accessToken = AccessToken;\n    this.clockDrift = ClockDrift === undefined ? this.calculateClockDrift() : ClockDrift;\n  }\n  /**\n   * @returns {CognitoIdToken} the session's Id token\n   */\n\n\n  var _proto = CognitoUserSession.prototype;\n\n  _proto.getIdToken = function getIdToken() {\n    return this.idToken;\n  }\n  /**\n   * @returns {CognitoRefreshToken} the session's refresh token\n   */\n  ;\n\n  _proto.getRefreshToken = function getRefreshToken() {\n    return this.refreshToken;\n  }\n  /**\n   * @returns {CognitoAccessToken} the session's access token\n   */\n  ;\n\n  _proto.getAccessToken = function getAccessToken() {\n    return this.accessToken;\n  }\n  /**\n   * @returns {int} the session's clock drift\n   */\n  ;\n\n  _proto.getClockDrift = function getClockDrift() {\n    return this.clockDrift;\n  }\n  /**\n   * @returns {int} the computer's clock drift\n   */\n  ;\n\n  _proto.calculateClockDrift = function calculateClockDrift() {\n    var now = Math.floor(new Date() / 1000);\n    var iat = Math.min(this.accessToken.getIssuedAt(), this.idToken.getIssuedAt());\n    return now - iat;\n  }\n  /**\n   * Checks to see if the session is still valid based on session expiry information found\n   * in tokens and the current time (adjusted with clock drift)\n   * @returns {boolean} if the session is still valid\n   */\n  ;\n\n  _proto.isValid = function isValid() {\n    var now = Math.floor(new Date() / 1000);\n    var adjusted = now - this.clockDrift;\n    return adjusted < this.accessToken.getExpiration() && adjusted < this.idToken.getExpiration();\n  };\n\n  return CognitoUserSession;\n}();\n\nexport { CognitoUserSession as default };","import * as Cookies from 'js-cookie';\n/** @class */\n\nvar CookieStorage = /*#__PURE__*/function () {\n  /**\n   * Constructs a new CookieStorage object\n   * @param {object} data Creation options.\n   * @param {string} data.domain Cookies domain (mandatory).\n   * @param {string} data.path Cookies path (default: '/')\n   * @param {integer} data.expires Cookie expiration (in days, default: 365)\n   * @param {boolean} data.secure Cookie secure flag (default: true)\n   * @param {string} data.sameSite Cookie request behaviour (default: null)\n   */\n  function CookieStorage(data) {\n    if (data.domain) {\n      this.domain = data.domain;\n    } else {\n      throw new Error('The domain of cookieStorage can not be undefined.');\n    }\n\n    if (data.path) {\n      this.path = data.path;\n    } else {\n      this.path = '/';\n    }\n\n    if (Object.prototype.hasOwnProperty.call(data, 'expires')) {\n      this.expires = data.expires;\n    } else {\n      this.expires = 365;\n    }\n\n    if (Object.prototype.hasOwnProperty.call(data, 'secure')) {\n      this.secure = data.secure;\n    } else {\n      this.secure = true;\n    }\n\n    if (Object.prototype.hasOwnProperty.call(data, 'sameSite')) {\n      if (!['strict', 'lax', 'none'].includes(data.sameSite)) {\n        throw new Error('The sameSite value of cookieStorage must be \"lax\", \"strict\" or \"none\".');\n      }\n\n      if (data.sameSite === 'none' && !this.secure) {\n        throw new Error('sameSite = None requires the Secure attribute in latest browser versions.');\n      }\n\n      this.sameSite = data.sameSite;\n    } else {\n      this.sameSite = null;\n    }\n  }\n  /**\n   * This is used to set a specific item in storage\n   * @param {string} key - the key for the item\n   * @param {object} value - the value\n   * @returns {string} value that was set\n   */\n\n\n  var _proto = CookieStorage.prototype;\n\n  _proto.setItem = function setItem(key, value) {\n    var options = {\n      path: this.path,\n      expires: this.expires,\n      domain: this.domain,\n      secure: this.secure\n    };\n\n    if (this.sameSite) {\n      options.sameSite = this.sameSite;\n    }\n\n    Cookies.set(key, value, options);\n    return Cookies.get(key);\n  }\n  /**\n   * This is used to get a specific key from storage\n   * @param {string} key - the key for the item\n   * This is used to clear the storage\n   * @returns {string} the data item\n   */\n  ;\n\n  _proto.getItem = function getItem(key) {\n    return Cookies.get(key);\n  }\n  /**\n   * This is used to remove an item from storage\n   * @param {string} key - the key being set\n   * @returns {string} value - value that was deleted\n   */\n  ;\n\n  _proto.removeItem = function removeItem(key) {\n    var options = {\n      path: this.path,\n      expires: this.expires,\n      domain: this.domain,\n      secure: this.secure\n    };\n\n    if (this.sameSite) {\n      options.sameSite = this.sameSite;\n    }\n\n    return Cookies.remove(key, options);\n  }\n  /**\n   * This is used to clear the storage\n   * @returns {string} nothing\n   */\n  ;\n\n  _proto.clear = function clear() {\n    var cookies = Cookies.get();\n    var index;\n\n    for (index = 0; index < cookies.length; ++index) {\n      Cookies.remove(cookies[index]);\n    }\n\n    return {};\n  };\n\n  return CookieStorage;\n}();\n\nexport { CookieStorage as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar weekNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n/** @class */\n\nvar DateHelper = /*#__PURE__*/function () {\n  function DateHelper() {}\n\n  var _proto = DateHelper.prototype;\n\n  /**\n   * @returns {string} The current time in \"ddd MMM D HH:mm:ss UTC YYYY\" format.\n   */\n  _proto.getNowString = function getNowString() {\n    var now = new Date();\n    var weekDay = weekNames[now.getUTCDay()];\n    var month = monthNames[now.getUTCMonth()];\n    var day = now.getUTCDate();\n    var hours = now.getUTCHours();\n\n    if (hours < 10) {\n      hours = \"0\" + hours;\n    }\n\n    var minutes = now.getUTCMinutes();\n\n    if (minutes < 10) {\n      minutes = \"0\" + minutes;\n    }\n\n    var seconds = now.getUTCSeconds();\n\n    if (seconds < 10) {\n      seconds = \"0\" + seconds;\n    }\n\n    var year = now.getUTCFullYear(); // ddd MMM D HH:mm:ss UTC YYYY\n\n    var dateNow = weekDay + \" \" + month + \" \" + day + \" \" + hours + \":\" + minutes + \":\" + seconds + \" UTC \" + year;\n    return dateNow;\n  };\n\n  return DateHelper;\n}();\n\nexport { DateHelper as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nvar dataMemory = {};\n/** @class */\n\nvar MemoryStorage = /*#__PURE__*/function () {\n  function MemoryStorage() {}\n\n  /**\n   * This is used to set a specific item in storage\n   * @param {string} key - the key for the item\n   * @param {object} value - the value\n   * @returns {string} value that was set\n   */\n  MemoryStorage.setItem = function setItem(key, value) {\n    dataMemory[key] = value;\n    return dataMemory[key];\n  }\n  /**\n   * This is used to get a specific key from storage\n   * @param {string} key - the key for the item\n   * This is used to clear the storage\n   * @returns {string} the data item\n   */\n  ;\n\n  MemoryStorage.getItem = function getItem(key) {\n    return Object.prototype.hasOwnProperty.call(dataMemory, key) ? dataMemory[key] : undefined;\n  }\n  /**\n   * This is used to remove an item from storage\n   * @param {string} key - the key being set\n   * @returns {string} value - value that was deleted\n   */\n  ;\n\n  MemoryStorage.removeItem = function removeItem(key) {\n    return delete dataMemory[key];\n  }\n  /**\n   * This is used to clear the storage\n   * @returns {string} nothing\n   */\n  ;\n\n  MemoryStorage.clear = function clear() {\n    dataMemory = {};\n    return dataMemory;\n  };\n\n  return MemoryStorage;\n}();\n/** @class */\n\n\nvar StorageHelper = /*#__PURE__*/function () {\n  /**\n   * This is used to get a storage object\n   * @returns {object} the storage\n   */\n  function StorageHelper() {\n    try {\n      this.storageWindow = window.localStorage;\n      this.storageWindow.setItem('aws.cognito.test-ls', 1);\n      this.storageWindow.removeItem('aws.cognito.test-ls');\n    } catch (exception) {\n      this.storageWindow = MemoryStorage;\n    }\n  }\n  /**\n   * This is used to return the storage\n   * @returns {object} the storage\n   */\n\n\n  var _proto = StorageHelper.prototype;\n\n  _proto.getStorage = function getStorage() {\n    return this.storageWindow;\n  };\n\n  return StorageHelper;\n}();\n\nexport { StorageHelper as default };","// constructor\nfunction UserAgent() {} // public\n\n\nUserAgent.prototype.userAgent = 'aws-amplify/0.1.x js';\nexport var appendToCognitoUserAgent = function appendToCognitoUserAgent(content) {\n  if (!content) {\n    return;\n  }\n\n  if (UserAgent.prototype.userAgent && !UserAgent.prototype.userAgent.includes(content)) {\n    UserAgent.prototype.userAgent = UserAgent.prototype.userAgent.concat(' ', content);\n  }\n\n  if (!UserAgent.prototype.userAgent || UserAgent.prototype.userAgent === '') {\n    UserAgent.prototype.userAgent = content;\n  }\n}; // class for defining the amzn user-agent\n\nexport default UserAgent;","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nexport { default as AuthenticationDetails } from './AuthenticationDetails';\nexport { default as AuthenticationHelper } from './AuthenticationHelper';\nexport { default as CognitoAccessToken } from './CognitoAccessToken';\nexport { default as CognitoIdToken } from './CognitoIdToken';\nexport { default as CognitoRefreshToken } from './CognitoRefreshToken';\nexport { default as CognitoUser } from './CognitoUser';\nexport { default as CognitoUserAttribute } from './CognitoUserAttribute';\nexport { default as CognitoUserPool } from './CognitoUserPool';\nexport { default as CognitoUserSession } from './CognitoUserSession';\nexport { default as CookieStorage } from './CookieStorage';\nexport { default as DateHelper } from './DateHelper';\nexport { appendToCognitoUserAgent } from './UserAgent';","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar decode = decodeURIComponent;\nvar encode = encodeURIComponent;\nvar pairSplitRegExp = /; */;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar   = VCHAR / obs-text\n * obs-text      = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {}\n  var opt = options || {};\n  var pairs = str.split(pairSplitRegExp);\n  var dec = opt.decode || decode;\n\n  for (var i = 0; i < pairs.length; i++) {\n    var pair = pairs[i];\n    var eq_idx = pair.indexOf('=');\n\n    // skip things that don't look like key=value\n    if (eq_idx < 0) {\n      continue;\n    }\n\n    var key = pair.substr(0, eq_idx).trim()\n    var val = pair.substr(++eq_idx, pair.length).trim();\n\n    // quoted values\n    if ('\"' == val[0]) {\n      val = val.slice(1, -1);\n    }\n\n    // only assign once\n    if (undefined == obj[key]) {\n      obj[key] = tryDecode(val, dec);\n    }\n  }\n\n  return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n  var opt = options || {};\n  var enc = opt.encode || encode;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (value && !fieldContentRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n\n  if (null != opt.maxAge) {\n    var maxAge = opt.maxAge - 0;\n    if (isNaN(maxAge)) throw new Error('maxAge should be a Number');\n    str += '; Max-Age=' + Math.floor(maxAge);\n  }\n\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    if (typeof opt.expires.toUTCString !== 'function') {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + opt.expires.toUTCString();\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n","module.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it) && it !== null) {\n    throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n  } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n","module.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var C = typeof this == 'function' ? this : Array;\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = iteratorMethod.call(O);\n    next = iterator.next;\n    result = new C();\n    for (;!(step = next.call(iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = toLength(O.length);\n    result = new C(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var anObject = require('../internals/an-object');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (error) {\n    var returnMethod = iterator['return'];\n    if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n    throw error;\n  }\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  return methods;\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty === typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n  return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n  if (/./[REPLACE]) {\n    return /./[REPLACE]('a', '$0') === '';\n  }\n  return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n  var SYMBOL = wellKnownSymbol(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n\n    if (KEY === 'split') {\n      // We can't use real regex here since it causes deoptimization\n      // and serious performance degradation in V8\n      // https://github.com/zloirock/core-js/issues/306\n      re = {};\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n      re.flags = '';\n      re[SYMBOL] = /./[SYMBOL];\n    }\n\n    re.exec = function () { execCalled = true; return null; };\n\n    re[SYMBOL]('');\n    return !execCalled;\n  });\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !(\n      REPLACE_SUPPORTS_NAMED_GROUPS &&\n      REPLACE_KEEPS_$0 &&\n      !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n    )) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      if (regexp.exec === regexpExec) {\n        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n          // The native String method already delegates to @@method (this\n          // polyfilled function), leasing to infinite recursion.\n          // We avoid it by directly calling the native @@method method.\n          return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n        }\n        return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n      }\n      return { done: false };\n    }, {\n      REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n      REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n    });\n    var stringMethod = methods[0];\n    var regexMethod = methods[1];\n\n    redefine(String.prototype, KEY, stringMethod);\n    redefine(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return regexMethod.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return regexMethod.call(string, this); }\n    );\n  }\n\n  if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n  return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n  var iteratorMethod = getIteratorMethod(it);\n  if (typeof iteratorMethod != 'function') {\n    throw TypeError(String(it) + ' is not iterable');\n  } return anObject(iteratorMethod.call(it));\n};\n","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line no-undef\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func\n  Function('return this')();\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","module.exports = {};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP) {\n  var store = new WeakMap();\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : typeof detection == 'function' ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = false;\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // Chrome 38 Symbol has incorrect toString conversion\n  // eslint-disable-next-line no-undef\n  return !String(Symbol());\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n  var url = new URL('b?a=1&b=2&c=3', 'http://a');\n  var searchParams = url.searchParams;\n  var result = '';\n  url.pathname = 'c%20d';\n  searchParams.forEach(function (value, key) {\n    searchParams['delete']('b');\n    result += key + value;\n  });\n  return (IS_PURE && !url.toJSON)\n    || !searchParams.sort\n    || url.href !== 'http://a/c%20d?a=1&c=3'\n    || searchParams.get('c') !== '3'\n    || String(new URLSearchParams('?a=1')) !== 'a=1'\n    || !searchParams[ITERATOR]\n    // throws in Edge\n    || new URL('https://a@b').username !== 'a'\n    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n    // not punycoded in Edge\n    || new URL('http://тест').host !== 'xn--e1aybc'\n    // not escaped in Chrome 62-\n    || new URL('http://a#б').hash !== '#%D0%B1'\n    // fails in Chrome 66-\n    || result !== 'a1c3'\n    // throws in Safari\n    || new URL('http://x', undefined).host !== 'x';\n});\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : nativeAssign;\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    /* global ActiveXObject */\n    activeXDocument = document.domain && new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  if (typeof value == 'function') {\n    if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n\n  if (classof(R) !== 'RegExp') {\n    throw TypeError('RegExp#exec called on incompatible receiver');\n  }\n\n  return regexpExec.call(R, S);\n};\n\n","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = regexpFlags.call(re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = flags.replace('y', '');\n      if (flags.indexOf('g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = String(str).slice(re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n        source = '(?: ' + source + ')';\n        strCopy = ' ' + strCopy;\n        charsAdded++;\n      }\n      // ^(? + rx + ) is needed, in combination with some str slicing, to\n      // simulate the 'y' flag.\n      reCopy = new RegExp('^(?:' + source + ')', flags);\n    }\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n    match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = match.input.slice(charsAdded);\n        match[0] = match[0].slice(charsAdded);\n        match.index = re.lastIndex;\n        re.lastIndex += match[0].length;\n      } else re.lastIndex = 0;\n    } else if (UPDATES_LAST_INDEX_WRONG && match) {\n      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n  return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n  // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n  var re = RE('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = RE('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') != null;\n});\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n  try {\n    createNonEnumerableProperty(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.6.5',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = String(requireObjectCoercible($this));\n    var position = toInteger(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = S.charCodeAt(position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING ? S.charAt(position) : first\n        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n  var output = [];\n  var counter = 0;\n  var length = string.length;\n  while (counter < length) {\n    var value = string.charCodeAt(counter++);\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      // It's a high surrogate, and there is a next character.\n      var extra = string.charCodeAt(counter++);\n      if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        // It's an unmatched surrogate; only append this code unit, in case the\n        // next code unit is the high surrogate of a surrogate pair.\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n  //  0..25 map to ASCII a..z or A..Z\n  // 26..35 map to ASCII 0..9\n  return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n  var k = 0;\n  delta = firstTime ? floor(delta / damp) : delta >> 1;\n  delta += floor(delta / numPoints);\n  for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n    delta = floor(delta / baseMinusTMin);\n  }\n  return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line  max-statements\nvar encode = function (input) {\n  var output = [];\n\n  // Convert the input in UCS-2 to an array of Unicode code points.\n  input = ucs2decode(input);\n\n  // Cache the length.\n  var inputLength = input.length;\n\n  // Initialize the state.\n  var n = initialN;\n  var delta = 0;\n  var bias = initialBias;\n  var i, currentValue;\n\n  // Handle the basic code points.\n  for (i = 0; i < input.length; i++) {\n    currentValue = input[i];\n    if (currentValue < 0x80) {\n      output.push(stringFromCharCode(currentValue));\n    }\n  }\n\n  var basicLength = output.length; // number of basic code points.\n  var handledCPCount = basicLength; // number of code points that have been handled;\n\n  // Finish the basic string with a delimiter unless it's empty.\n  if (basicLength) {\n    output.push(delimiter);\n  }\n\n  // Main encoding loop:\n  while (handledCPCount < inputLength) {\n    // All non-basic code points < n have been handled already. Find the next larger one:\n    var m = maxInt;\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue >= n && currentValue < m) {\n        m = currentValue;\n      }\n    }\n\n    // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n    var handledCPCountPlusOne = handledCPCount + 1;\n    if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n      throw RangeError(OVERFLOW_ERROR);\n    }\n\n    delta += (m - n) * handledCPCountPlusOne;\n    n = m;\n\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue < n && ++delta > maxInt) {\n        throw RangeError(OVERFLOW_ERROR);\n      }\n      if (currentValue == n) {\n        // Represent delta as a generalized variable-length integer.\n        var q = delta;\n        for (var k = base; /* no condition */; k += base) {\n          var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n          if (q < t) break;\n          var qMinusT = q - t;\n          var baseMinusT = base - t;\n          output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n          q = floor(qMinusT / baseMinusT);\n        }\n\n        output.push(stringFromCharCode(digitToBasic(q)));\n        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n        delta = 0;\n        ++handledCPCount;\n      }\n    }\n\n    ++delta;\n    ++n;\n  }\n  return output.join('');\n};\n\nmodule.exports = function (input) {\n  var encoded = [];\n  var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n  var i, label;\n  for (i = 0; i < labels.length; i++) {\n    label = labels[i];\n    encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n  }\n  return encoded.join('.');\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n  if (!isObject(input)) return input;\n  var fn, val;\n  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  // eslint-disable-next-line no-undef\n  && !Symbol.sham\n  // eslint-disable-next-line no-undef\n  && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!has(WellKnownSymbolsStore, name)) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.github.io/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n  'finally': function (onFinally) {\n    var C = speciesConstructor(this, getBuiltIn('Promise'));\n    var isFunction = typeof onFinally == 'function';\n    return this.then(\n      isFunction ? function (x) {\n        return promiseResolve(C, onFinally()).then(function () { return x; });\n      } : onFinally,\n      isFunction ? function (e) {\n        return promiseResolve(C, onFinally()).then(function () { throw e; });\n      } : onFinally\n    );\n  }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n  redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n  var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n  var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return replacer !== undefined\n        ? replacer.call(searchValue, O, replaceValue)\n        : nativeReplace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      if (\n        (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n        (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n      ) {\n        var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var rx = anObject(regexp);\n      var S = String(this);\n\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n\n        results.push(result);\n        if (!global) break;\n\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n  // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return nativeReplace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n  return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n  try {\n    return decodeURIComponent(sequence);\n  } catch (error) {\n    return sequence;\n  }\n};\n\nvar deserialize = function (it) {\n  var result = it.replace(plus, ' ');\n  var bytes = 4;\n  try {\n    return decodeURIComponent(result);\n  } catch (error) {\n    while (bytes) {\n      result = result.replace(percentSequence(bytes--), percentDecode);\n    }\n    return result;\n  }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n  '!': '%21',\n  \"'\": '%27',\n  '(': '%28',\n  ')': '%29',\n  '~': '%7E',\n  '%20': '+'\n};\n\nvar replacer = function (match) {\n  return replace[match];\n};\n\nvar serialize = function (it) {\n  return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n  if (query) {\n    var attributes = query.split('&');\n    var index = 0;\n    var attribute, entry;\n    while (index < attributes.length) {\n      attribute = attributes[index++];\n      if (attribute.length) {\n        entry = attribute.split('=');\n        result.push({\n          key: deserialize(entry.shift()),\n          value: deserialize(entry.join('='))\n        });\n      }\n    }\n  }\n};\n\nvar updateSearchParams = function (query) {\n  this.entries.length = 0;\n  parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n  if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n  setInternalState(this, {\n    type: URL_SEARCH_PARAMS_ITERATOR,\n    iterator: getIterator(getInternalParamsState(params).entries),\n    kind: kind\n  });\n}, 'Iterator', function next() {\n  var state = getInternalIteratorState(this);\n  var kind = state.kind;\n  var step = state.iterator.next();\n  var entry = step.value;\n  if (!step.done) {\n    step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n  } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n  anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n  var init = arguments.length > 0 ? arguments[0] : undefined;\n  var that = this;\n  var entries = [];\n  var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n  setInternalState(that, {\n    type: URL_SEARCH_PARAMS,\n    entries: entries,\n    updateURL: function () { /* empty */ },\n    updateSearchParams: updateSearchParams\n  });\n\n  if (init !== undefined) {\n    if (isObject(init)) {\n      iteratorMethod = getIteratorMethod(init);\n      if (typeof iteratorMethod === 'function') {\n        iterator = iteratorMethod.call(init);\n        next = iterator.next;\n        while (!(step = next.call(iterator)).done) {\n          entryIterator = getIterator(anObject(step.value));\n          entryNext = entryIterator.next;\n          if (\n            (first = entryNext.call(entryIterator)).done ||\n            (second = entryNext.call(entryIterator)).done ||\n            !entryNext.call(entryIterator).done\n          ) throw TypeError('Expected sequence with length 2');\n          entries.push({ key: first.value + '', value: second.value + '' });\n        }\n      } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n    } else {\n      parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n    }\n  }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n  // `URLSearchParams.prototype.appent` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n  append: function append(name, value) {\n    validateArgumentsLength(arguments.length, 2);\n    var state = getInternalParamsState(this);\n    state.entries.push({ key: name + '', value: value + '' });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.delete` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n  'delete': function (name) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index].key === key) entries.splice(index, 1);\n      else index++;\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.get` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n  get: function get(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) return entries[index].value;\n    }\n    return null;\n  },\n  // `URLSearchParams.prototype.getAll` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n  getAll: function getAll(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var result = [];\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) result.push(entries[index].value);\n    }\n    return result;\n  },\n  // `URLSearchParams.prototype.has` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n  has: function has(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index++].key === key) return true;\n    }\n    return false;\n  },\n  // `URLSearchParams.prototype.set` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n  set: function set(name, value) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var found = false;\n    var key = name + '';\n    var val = value + '';\n    var index = 0;\n    var entry;\n    for (; index < entries.length; index++) {\n      entry = entries[index];\n      if (entry.key === key) {\n        if (found) entries.splice(index--, 1);\n        else {\n          found = true;\n          entry.value = val;\n        }\n      }\n    }\n    if (!found) entries.push({ key: key, value: val });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.sort` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n  sort: function sort() {\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    // Array#sort is not stable in some engines\n    var slice = entries.slice();\n    var entry, entriesIndex, sliceIndex;\n    entries.length = 0;\n    for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n      entry = slice[sliceIndex];\n      for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n        if (entries[entriesIndex].key > entry.key) {\n          entries.splice(entriesIndex, 0, entry);\n          break;\n        }\n      }\n      if (entriesIndex === sliceIndex) entries.push(entry);\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.forEach` method\n  forEach: function forEach(callback /* , thisArg */) {\n    var entries = getInternalParamsState(this).entries;\n    var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n    var index = 0;\n    var entry;\n    while (index < entries.length) {\n      entry = entries[index++];\n      boundFunction(entry.value, entry.key, this);\n    }\n  },\n  // `URLSearchParams.prototype.keys` method\n  keys: function keys() {\n    return new URLSearchParamsIterator(this, 'keys');\n  },\n  // `URLSearchParams.prototype.values` method\n  values: function values() {\n    return new URLSearchParamsIterator(this, 'values');\n  },\n  // `URLSearchParams.prototype.entries` method\n  entries: function entries() {\n    return new URLSearchParamsIterator(this, 'entries');\n  }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n  var entries = getInternalParamsState(this).entries;\n  var result = [];\n  var index = 0;\n  var entry;\n  while (index < entries.length) {\n    entry = entries[index++];\n    result.push(serialize(entry.key) + '=' + serialize(entry.value));\n  } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n  URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n  $({ global: true, enumerable: true, forced: true }, {\n    fetch: function fetch(input /* , init */) {\n      var args = [input];\n      var init, body, headers;\n      if (arguments.length > 1) {\n        init = arguments[1];\n        if (isObject(init)) {\n          body = init.body;\n          if (classof(body) === URL_SEARCH_PARAMS) {\n            headers = init.headers ? new Headers(init.headers) : new Headers();\n            if (!headers.has('content-type')) {\n              headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            }\n            init = create(init, {\n              body: createPropertyDescriptor(0, String(body)),\n              headers: createPropertyDescriptor(0, headers)\n            });\n          }\n        }\n        args.push(init);\n      } return $fetch.apply(this, args);\n    }\n  });\n}\n\nmodule.exports = {\n  URLSearchParams: URLSearchParamsConstructor,\n  getState: getInternalParamsState\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\n// eslint-disable-next-line no-control-regex\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\nvar EOF;\n\nvar parseHost = function (url, input) {\n  var result, codePoints, index;\n  if (input.charAt(0) == '[') {\n    if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n    result = parseIPv6(input.slice(1, -1));\n    if (!result) return INVALID_HOST;\n    url.host = result;\n  // opaque host\n  } else if (!isSpecial(url)) {\n    if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n    result = '';\n    codePoints = arrayFrom(input);\n    for (index = 0; index < codePoints.length; index++) {\n      result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n    }\n    url.host = result;\n  } else {\n    input = toASCII(input);\n    if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n    result = parseIPv4(input);\n    if (result === null) return INVALID_HOST;\n    url.host = result;\n  }\n};\n\nvar parseIPv4 = function (input) {\n  var parts = input.split('.');\n  var partsLength, numbers, index, part, radix, number, ipv4;\n  if (parts.length && parts[parts.length - 1] == '') {\n    parts.pop();\n  }\n  partsLength = parts.length;\n  if (partsLength > 4) return input;\n  numbers = [];\n  for (index = 0; index < partsLength; index++) {\n    part = parts[index];\n    if (part == '') return input;\n    radix = 10;\n    if (part.length > 1 && part.charAt(0) == '0') {\n      radix = HEX_START.test(part) ? 16 : 8;\n      part = part.slice(radix == 8 ? 1 : 2);\n    }\n    if (part === '') {\n      number = 0;\n    } else {\n      if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n      number = parseInt(part, radix);\n    }\n    numbers.push(number);\n  }\n  for (index = 0; index < partsLength; index++) {\n    number = numbers[index];\n    if (index == partsLength - 1) {\n      if (number >= pow(256, 5 - partsLength)) return null;\n    } else if (number > 255) return null;\n  }\n  ipv4 = numbers.pop();\n  for (index = 0; index < numbers.length; index++) {\n    ipv4 += numbers[index] * pow(256, 3 - index);\n  }\n  return ipv4;\n};\n\n// eslint-disable-next-line max-statements\nvar parseIPv6 = function (input) {\n  var address = [0, 0, 0, 0, 0, 0, 0, 0];\n  var pieceIndex = 0;\n  var compress = null;\n  var pointer = 0;\n  var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n  var char = function () {\n    return input.charAt(pointer);\n  };\n\n  if (char() == ':') {\n    if (input.charAt(1) != ':') return;\n    pointer += 2;\n    pieceIndex++;\n    compress = pieceIndex;\n  }\n  while (char()) {\n    if (pieceIndex == 8) return;\n    if (char() == ':') {\n      if (compress !== null) return;\n      pointer++;\n      pieceIndex++;\n      compress = pieceIndex;\n      continue;\n    }\n    value = length = 0;\n    while (length < 4 && HEX.test(char())) {\n      value = value * 16 + parseInt(char(), 16);\n      pointer++;\n      length++;\n    }\n    if (char() == '.') {\n      if (length == 0) return;\n      pointer -= length;\n      if (pieceIndex > 6) return;\n      numbersSeen = 0;\n      while (char()) {\n        ipv4Piece = null;\n        if (numbersSeen > 0) {\n          if (char() == '.' && numbersSeen < 4) pointer++;\n          else return;\n        }\n        if (!DIGIT.test(char())) return;\n        while (DIGIT.test(char())) {\n          number = parseInt(char(), 10);\n          if (ipv4Piece === null) ipv4Piece = number;\n          else if (ipv4Piece == 0) return;\n          else ipv4Piece = ipv4Piece * 10 + number;\n          if (ipv4Piece > 255) return;\n          pointer++;\n        }\n        address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n        numbersSeen++;\n        if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n      }\n      if (numbersSeen != 4) return;\n      break;\n    } else if (char() == ':') {\n      pointer++;\n      if (!char()) return;\n    } else if (char()) return;\n    address[pieceIndex++] = value;\n  }\n  if (compress !== null) {\n    swaps = pieceIndex - compress;\n    pieceIndex = 7;\n    while (pieceIndex != 0 && swaps > 0) {\n      swap = address[pieceIndex];\n      address[pieceIndex--] = address[compress + swaps - 1];\n      address[compress + --swaps] = swap;\n    }\n  } else if (pieceIndex != 8) return;\n  return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n  var maxIndex = null;\n  var maxLength = 1;\n  var currStart = null;\n  var currLength = 0;\n  var index = 0;\n  for (; index < 8; index++) {\n    if (ipv6[index] !== 0) {\n      if (currLength > maxLength) {\n        maxIndex = currStart;\n        maxLength = currLength;\n      }\n      currStart = null;\n      currLength = 0;\n    } else {\n      if (currStart === null) currStart = index;\n      ++currLength;\n    }\n  }\n  if (currLength > maxLength) {\n    maxIndex = currStart;\n    maxLength = currLength;\n  }\n  return maxIndex;\n};\n\nvar serializeHost = function (host) {\n  var result, index, compress, ignore0;\n  // ipv4\n  if (typeof host == 'number') {\n    result = [];\n    for (index = 0; index < 4; index++) {\n      result.unshift(host % 256);\n      host = floor(host / 256);\n    } return result.join('.');\n  // ipv6\n  } else if (typeof host == 'object') {\n    result = '';\n    compress = findLongestZeroSequence(host);\n    for (index = 0; index < 8; index++) {\n      if (ignore0 && host[index] === 0) continue;\n      if (ignore0) ignore0 = false;\n      if (compress === index) {\n        result += index ? ':' : '::';\n        ignore0 = true;\n      } else {\n        result += host[index].toString(16);\n        if (index < 7) result += ':';\n      }\n    }\n    return '[' + result + ']';\n  } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n  ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n  '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n  '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n  var code = codeAt(char, 0);\n  return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n  ftp: 21,\n  file: null,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443\n};\n\nvar isSpecial = function (url) {\n  return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n  return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n  return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n  var second;\n  return string.length == 2 && ALPHA.test(string.charAt(0))\n    && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n  var third;\n  return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n    string.length == 2 ||\n    ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n  );\n};\n\nvar shortenURLsPath = function (url) {\n  var path = url.path;\n  var pathSize = path.length;\n  if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n    path.pop();\n  }\n};\n\nvar isSingleDot = function (segment) {\n  return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n  segment = segment.toLowerCase();\n  return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements\nvar parseURL = function (url, input, stateOverride, base) {\n  var state = stateOverride || SCHEME_START;\n  var pointer = 0;\n  var buffer = '';\n  var seenAt = false;\n  var seenBracket = false;\n  var seenPasswordToken = false;\n  var codePoints, char, bufferCodePoints, failure;\n\n  if (!stateOverride) {\n    url.scheme = '';\n    url.username = '';\n    url.password = '';\n    url.host = null;\n    url.port = null;\n    url.path = [];\n    url.query = null;\n    url.fragment = null;\n    url.cannotBeABaseURL = false;\n    input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n  }\n\n  input = input.replace(TAB_AND_NEW_LINE, '');\n\n  codePoints = arrayFrom(input);\n\n  while (pointer <= codePoints.length) {\n    char = codePoints[pointer];\n    switch (state) {\n      case SCHEME_START:\n        if (char && ALPHA.test(char)) {\n          buffer += char.toLowerCase();\n          state = SCHEME;\n        } else if (!stateOverride) {\n          state = NO_SCHEME;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case SCHEME:\n        if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n          buffer += char.toLowerCase();\n        } else if (char == ':') {\n          if (stateOverride && (\n            (isSpecial(url) != has(specialSchemes, buffer)) ||\n            (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n            (url.scheme == 'file' && !url.host)\n          )) return;\n          url.scheme = buffer;\n          if (stateOverride) {\n            if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n            return;\n          }\n          buffer = '';\n          if (url.scheme == 'file') {\n            state = FILE;\n          } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n            state = SPECIAL_RELATIVE_OR_AUTHORITY;\n          } else if (isSpecial(url)) {\n            state = SPECIAL_AUTHORITY_SLASHES;\n          } else if (codePoints[pointer + 1] == '/') {\n            state = PATH_OR_AUTHORITY;\n            pointer++;\n          } else {\n            url.cannotBeABaseURL = true;\n            url.path.push('');\n            state = CANNOT_BE_A_BASE_URL_PATH;\n          }\n        } else if (!stateOverride) {\n          buffer = '';\n          state = NO_SCHEME;\n          pointer = 0;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case NO_SCHEME:\n        if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n        if (base.cannotBeABaseURL && char == '#') {\n          url.scheme = base.scheme;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          url.cannotBeABaseURL = true;\n          state = FRAGMENT;\n          break;\n        }\n        state = base.scheme == 'file' ? FILE : RELATIVE;\n        continue;\n\n      case SPECIAL_RELATIVE_OR_AUTHORITY:\n        if (char == '/' && codePoints[pointer + 1] == '/') {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n          pointer++;\n        } else {\n          state = RELATIVE;\n          continue;\n        } break;\n\n      case PATH_OR_AUTHORITY:\n        if (char == '/') {\n          state = AUTHORITY;\n          break;\n        } else {\n          state = PATH;\n          continue;\n        }\n\n      case RELATIVE:\n        url.scheme = base.scheme;\n        if (char == EOF) {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n        } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n          state = RELATIVE_SLASH;\n        } else if (char == '?') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          state = FRAGMENT;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.path.pop();\n          state = PATH;\n          continue;\n        } break;\n\n      case RELATIVE_SLASH:\n        if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        } else if (char == '/') {\n          state = AUTHORITY;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          state = PATH;\n          continue;\n        } break;\n\n      case SPECIAL_AUTHORITY_SLASHES:\n        state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n        pointer++;\n        break;\n\n      case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n        if (char != '/' && char != '\\\\') {\n          state = AUTHORITY;\n          continue;\n        } break;\n\n      case AUTHORITY:\n        if (char == '@') {\n          if (seenAt) buffer = '%40' + buffer;\n          seenAt = true;\n          bufferCodePoints = arrayFrom(buffer);\n          for (var i = 0; i < bufferCodePoints.length; i++) {\n            var codePoint = bufferCodePoints[i];\n            if (codePoint == ':' && !seenPasswordToken) {\n              seenPasswordToken = true;\n              continue;\n            }\n            var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n            if (seenPasswordToken) url.password += encodedCodePoints;\n            else url.username += encodedCodePoints;\n          }\n          buffer = '';\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (seenAt && buffer == '') return INVALID_AUTHORITY;\n          pointer -= arrayFrom(buffer).length + 1;\n          buffer = '';\n          state = HOST;\n        } else buffer += char;\n        break;\n\n      case HOST:\n      case HOSTNAME:\n        if (stateOverride && url.scheme == 'file') {\n          state = FILE_HOST;\n          continue;\n        } else if (char == ':' && !seenBracket) {\n          if (buffer == '') return INVALID_HOST;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PORT;\n          if (stateOverride == HOSTNAME) return;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (isSpecial(url) && buffer == '') return INVALID_HOST;\n          if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PATH_START;\n          if (stateOverride) return;\n          continue;\n        } else {\n          if (char == '[') seenBracket = true;\n          else if (char == ']') seenBracket = false;\n          buffer += char;\n        } break;\n\n      case PORT:\n        if (DIGIT.test(char)) {\n          buffer += char;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          stateOverride\n        ) {\n          if (buffer != '') {\n            var port = parseInt(buffer, 10);\n            if (port > 0xFFFF) return INVALID_PORT;\n            url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n            buffer = '';\n          }\n          if (stateOverride) return;\n          state = PATH_START;\n          continue;\n        } else return INVALID_PORT;\n        break;\n\n      case FILE:\n        url.scheme = 'file';\n        if (char == '/' || char == '\\\\') state = FILE_SLASH;\n        else if (base && base.scheme == 'file') {\n          if (char == EOF) {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n          } else if (char == '?') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n            url.fragment = '';\n            state = FRAGMENT;\n          } else {\n            if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n              url.host = base.host;\n              url.path = base.path.slice();\n              shortenURLsPath(url);\n            }\n            state = PATH;\n            continue;\n          }\n        } else {\n          state = PATH;\n          continue;\n        } break;\n\n      case FILE_SLASH:\n        if (char == '/' || char == '\\\\') {\n          state = FILE_HOST;\n          break;\n        }\n        if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n          if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n          else url.host = base.host;\n        }\n        state = PATH;\n        continue;\n\n      case FILE_HOST:\n        if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n          if (!stateOverride && isWindowsDriveLetter(buffer)) {\n            state = PATH;\n          } else if (buffer == '') {\n            url.host = '';\n            if (stateOverride) return;\n            state = PATH_START;\n          } else {\n            failure = parseHost(url, buffer);\n            if (failure) return failure;\n            if (url.host == 'localhost') url.host = '';\n            if (stateOverride) return;\n            buffer = '';\n            state = PATH_START;\n          } continue;\n        } else buffer += char;\n        break;\n\n      case PATH_START:\n        if (isSpecial(url)) {\n          state = PATH;\n          if (char != '/' && char != '\\\\') continue;\n        } else if (!stateOverride && char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          state = PATH;\n          if (char != '/') continue;\n        } break;\n\n      case PATH:\n        if (\n          char == EOF || char == '/' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          (!stateOverride && (char == '?' || char == '#'))\n        ) {\n          if (isDoubleDot(buffer)) {\n            shortenURLsPath(url);\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else if (isSingleDot(buffer)) {\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else {\n            if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n              if (url.host) url.host = '';\n              buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n            }\n            url.path.push(buffer);\n          }\n          buffer = '';\n          if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n            while (url.path.length > 1 && url.path[0] === '') {\n              url.path.shift();\n            }\n          }\n          if (char == '?') {\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.fragment = '';\n            state = FRAGMENT;\n          }\n        } else {\n          buffer += percentEncode(char, pathPercentEncodeSet);\n        } break;\n\n      case CANNOT_BE_A_BASE_URL_PATH:\n        if (char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case QUERY:\n        if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          if (char == \"'\" && isSpecial(url)) url.query += '%27';\n          else if (char == '#') url.query += '%23';\n          else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case FRAGMENT:\n        if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n        break;\n    }\n\n    pointer++;\n  }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n  var that = anInstance(this, URLConstructor, 'URL');\n  var base = arguments.length > 1 ? arguments[1] : undefined;\n  var urlString = String(url);\n  var state = setInternalState(that, { type: 'URL' });\n  var baseState, failure;\n  if (base !== undefined) {\n    if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n    else {\n      failure = parseURL(baseState = {}, String(base));\n      if (failure) throw TypeError(failure);\n    }\n  }\n  failure = parseURL(state, urlString, null, baseState);\n  if (failure) throw TypeError(failure);\n  var searchParams = state.searchParams = new URLSearchParams();\n  var searchParamsState = getInternalSearchParamsState(searchParams);\n  searchParamsState.updateSearchParams(state.query);\n  searchParamsState.updateURL = function () {\n    state.query = String(searchParams) || null;\n  };\n  if (!DESCRIPTORS) {\n    that.href = serializeURL.call(that);\n    that.origin = getOrigin.call(that);\n    that.protocol = getProtocol.call(that);\n    that.username = getUsername.call(that);\n    that.password = getPassword.call(that);\n    that.host = getHost.call(that);\n    that.hostname = getHostname.call(that);\n    that.port = getPort.call(that);\n    that.pathname = getPathname.call(that);\n    that.search = getSearch.call(that);\n    that.searchParams = getSearchParams.call(that);\n    that.hash = getHash.call(that);\n  }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var username = url.username;\n  var password = url.password;\n  var host = url.host;\n  var port = url.port;\n  var path = url.path;\n  var query = url.query;\n  var fragment = url.fragment;\n  var output = scheme + ':';\n  if (host !== null) {\n    output += '//';\n    if (includesCredentials(url)) {\n      output += username + (password ? ':' + password : '') + '@';\n    }\n    output += serializeHost(host);\n    if (port !== null) output += ':' + port;\n  } else if (scheme == 'file') output += '//';\n  output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n  if (query !== null) output += '?' + query;\n  if (fragment !== null) output += '#' + fragment;\n  return output;\n};\n\nvar getOrigin = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var port = url.port;\n  if (scheme == 'blob') try {\n    return new URL(scheme.path[0]).origin;\n  } catch (error) {\n    return 'null';\n  }\n  if (scheme == 'file' || !isSpecial(url)) return 'null';\n  return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n  return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n  return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n  return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n  var url = getInternalURLState(this);\n  var host = url.host;\n  var port = url.port;\n  return host === null ? ''\n    : port === null ? serializeHost(host)\n    : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n  var host = getInternalURLState(this).host;\n  return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n  var port = getInternalURLState(this).port;\n  return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n  var url = getInternalURLState(this);\n  var path = url.path;\n  return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n  var query = getInternalURLState(this).query;\n  return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n  return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n  var fragment = getInternalURLState(this).fragment;\n  return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n  return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n  defineProperties(URLPrototype, {\n    // `URL.prototype.href` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-href\n    href: accessorDescriptor(serializeURL, function (href) {\n      var url = getInternalURLState(this);\n      var urlString = String(href);\n      var failure = parseURL(url, urlString);\n      if (failure) throw TypeError(failure);\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.origin` getter\n    // https://url.spec.whatwg.org/#dom-url-origin\n    origin: accessorDescriptor(getOrigin),\n    // `URL.prototype.protocol` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-protocol\n    protocol: accessorDescriptor(getProtocol, function (protocol) {\n      var url = getInternalURLState(this);\n      parseURL(url, String(protocol) + ':', SCHEME_START);\n    }),\n    // `URL.prototype.username` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-username\n    username: accessorDescriptor(getUsername, function (username) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(username));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.username = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.password` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-password\n    password: accessorDescriptor(getPassword, function (password) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(password));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.password = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.host` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-host\n    host: accessorDescriptor(getHost, function (host) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(host), HOST);\n    }),\n    // `URL.prototype.hostname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hostname\n    hostname: accessorDescriptor(getHostname, function (hostname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(hostname), HOSTNAME);\n    }),\n    // `URL.prototype.port` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-port\n    port: accessorDescriptor(getPort, function (port) {\n      var url = getInternalURLState(this);\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      port = String(port);\n      if (port == '') url.port = null;\n      else parseURL(url, port, PORT);\n    }),\n    // `URL.prototype.pathname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-pathname\n    pathname: accessorDescriptor(getPathname, function (pathname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      url.path = [];\n      parseURL(url, pathname + '', PATH_START);\n    }),\n    // `URL.prototype.search` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-search\n    search: accessorDescriptor(getSearch, function (search) {\n      var url = getInternalURLState(this);\n      search = String(search);\n      if (search == '') {\n        url.query = null;\n      } else {\n        if ('?' == search.charAt(0)) search = search.slice(1);\n        url.query = '';\n        parseURL(url, search, QUERY);\n      }\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.searchParams` getter\n    // https://url.spec.whatwg.org/#dom-url-searchparams\n    searchParams: accessorDescriptor(getSearchParams),\n    // `URL.prototype.hash` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hash\n    hash: accessorDescriptor(getHash, function (hash) {\n      var url = getInternalURLState(this);\n      hash = String(hash);\n      if (hash == '') {\n        url.fragment = null;\n        return;\n      }\n      if ('#' == hash.charAt(0)) hash = hash.slice(1);\n      url.fragment = '';\n      parseURL(url, hash, FRAGMENT);\n    })\n  });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n  var nativeCreateObjectURL = NativeURL.createObjectURL;\n  var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n  // `URL.createObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n  // eslint-disable-next-line no-unused-vars\n  if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n    return nativeCreateObjectURL.apply(NativeURL, arguments);\n  });\n  // `URL.revokeObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n  // eslint-disable-next-line no-unused-vars\n  if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n    return nativeRevokeObjectURL.apply(NativeURL, arguments);\n  });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n  URL: URLConstructor\n});\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t    /*\n\t     * Local polyfil of Object.create\n\t     */\n\t    var create = Object.create || (function () {\n\t        function F() {};\n\n\t        return function (obj) {\n\t            var subtype;\n\n\t            F.prototype = obj;\n\n\t            subtype = new F();\n\n\t            F.prototype = null;\n\n\t            return subtype;\n\t        };\n\t    }())\n\n\t    /**\n\t     * CryptoJS namespace.\n\t     */\n\t    var C = {};\n\n\t    /**\n\t     * Library namespace.\n\t     */\n\t    var C_lib = C.lib = {};\n\n\t    /**\n\t     * Base object for prototypal inheritance.\n\t     */\n\t    var Base = C_lib.Base = (function () {\n\n\n\t        return {\n\t            /**\n\t             * Creates a new object that inherits from this object.\n\t             *\n\t             * @param {Object} overrides Properties to copy into the new object.\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         field: 'value',\n\t             *\n\t             *         method: function () {\n\t             *         }\n\t             *     });\n\t             */\n\t            extend: function (overrides) {\n\t                // Spawn\n\t                var subtype = create(this);\n\n\t                // Augment\n\t                if (overrides) {\n\t                    subtype.mixIn(overrides);\n\t                }\n\n\t                // Create default initializer\n\t                if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t                    subtype.init = function () {\n\t                        subtype.$super.init.apply(this, arguments);\n\t                    };\n\t                }\n\n\t                // Initializer's prototype is the subtype object\n\t                subtype.init.prototype = subtype;\n\n\t                // Reference supertype\n\t                subtype.$super = this;\n\n\t                return subtype;\n\t            },\n\n\t            /**\n\t             * Extends this object and runs the init method.\n\t             * Arguments to create() will be passed to init().\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var instance = MyType.create();\n\t             */\n\t            create: function () {\n\t                var instance = this.extend();\n\t                instance.init.apply(instance, arguments);\n\n\t                return instance;\n\t            },\n\n\t            /**\n\t             * Initializes a newly created object.\n\t             * Override this method to add some logic when your objects are created.\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         init: function () {\n\t             *             // ...\n\t             *         }\n\t             *     });\n\t             */\n\t            init: function () {\n\t            },\n\n\t            /**\n\t             * Copies properties into this object.\n\t             *\n\t             * @param {Object} properties The properties to mix in.\n\t             *\n\t             * @example\n\t             *\n\t             *     MyType.mixIn({\n\t             *         field: 'value'\n\t             *     });\n\t             */\n\t            mixIn: function (properties) {\n\t                for (var propertyName in properties) {\n\t                    if (properties.hasOwnProperty(propertyName)) {\n\t                        this[propertyName] = properties[propertyName];\n\t                    }\n\t                }\n\n\t                // IE won't copy toString using the loop above\n\t                if (properties.hasOwnProperty('toString')) {\n\t                    this.toString = properties.toString;\n\t                }\n\t            },\n\n\t            /**\n\t             * Creates a copy of this object.\n\t             *\n\t             * @return {Object} The clone.\n\t             *\n\t             * @example\n\t             *\n\t             *     var clone = instance.clone();\n\t             */\n\t            clone: function () {\n\t                return this.init.prototype.extend(this);\n\t            }\n\t        };\n\t    }());\n\n\t    /**\n\t     * An array of 32-bit words.\n\t     *\n\t     * @property {Array} words The array of 32-bit words.\n\t     * @property {number} sigBytes The number of significant bytes in this word array.\n\t     */\n\t    var WordArray = C_lib.WordArray = Base.extend({\n\t        /**\n\t         * Initializes a newly created word array.\n\t         *\n\t         * @param {Array} words (Optional) An array of 32-bit words.\n\t         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.create();\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t         */\n\t        init: function (words, sigBytes) {\n\t            words = this.words = words || [];\n\n\t            if (sigBytes != undefined) {\n\t                this.sigBytes = sigBytes;\n\t            } else {\n\t                this.sigBytes = words.length * 4;\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts this word array to a string.\n\t         *\n\t         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t         *\n\t         * @return {string} The stringified word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     var string = wordArray + '';\n\t         *     var string = wordArray.toString();\n\t         *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t         */\n\t        toString: function (encoder) {\n\t            return (encoder || Hex).stringify(this);\n\t        },\n\n\t        /**\n\t         * Concatenates a word array to this word array.\n\t         *\n\t         * @param {WordArray} wordArray The word array to append.\n\t         *\n\t         * @return {WordArray} This word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray1.concat(wordArray2);\n\t         */\n\t        concat: function (wordArray) {\n\t            // Shortcuts\n\t            var thisWords = this.words;\n\t            var thatWords = wordArray.words;\n\t            var thisSigBytes = this.sigBytes;\n\t            var thatSigBytes = wordArray.sigBytes;\n\n\t            // Clamp excess bits\n\t            this.clamp();\n\n\t            // Concat\n\t            if (thisSigBytes % 4) {\n\t                // Copy one byte at a time\n\t                for (var i = 0; i < thatSigBytes; i++) {\n\t                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t                }\n\t            } else {\n\t                // Copy one word at a time\n\t                for (var i = 0; i < thatSigBytes; i += 4) {\n\t                    thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t                }\n\t            }\n\t            this.sigBytes += thatSigBytes;\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Removes insignificant bits.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray.clamp();\n\t         */\n\t        clamp: function () {\n\t            // Shortcuts\n\t            var words = this.words;\n\t            var sigBytes = this.sigBytes;\n\n\t            // Clamp\n\t            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t            words.length = Math.ceil(sigBytes / 4);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this word array.\n\t         *\n\t         * @return {WordArray} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = wordArray.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone.words = this.words.slice(0);\n\n\t            return clone;\n\t        },\n\n\t        /**\n\t         * Creates a word array filled with random bytes.\n\t         *\n\t         * @param {number} nBytes The number of random bytes to generate.\n\t         *\n\t         * @return {WordArray} The random word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.random(16);\n\t         */\n\t        random: function (nBytes) {\n\t            var words = [];\n\n\t            var r = (function (m_w) {\n\t                var m_w = m_w;\n\t                var m_z = 0x3ade68b1;\n\t                var mask = 0xffffffff;\n\n\t                return function () {\n\t                    m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t                    m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t                    var result = ((m_z << 0x10) + m_w) & mask;\n\t                    result /= 0x100000000;\n\t                    result += 0.5;\n\t                    return result * (Math.random() > .5 ? 1 : -1);\n\t                }\n\t            });\n\n\t            for (var i = 0, rcache; i < nBytes; i += 4) {\n\t                var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t                rcache = _r() * 0x3ade67b7;\n\t                words.push((_r() * 0x100000000) | 0);\n\t            }\n\n\t            return new WordArray.init(words, nBytes);\n\t        }\n\t    });\n\n\t    /**\n\t     * Encoder namespace.\n\t     */\n\t    var C_enc = C.enc = {};\n\n\t    /**\n\t     * Hex encoding strategy.\n\t     */\n\t    var Hex = C_enc.Hex = {\n\t        /**\n\t         * Converts a word array to a hex string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The hex string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var hexChars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                hexChars.push((bite >>> 4).toString(16));\n\t                hexChars.push((bite & 0x0f).toString(16));\n\t            }\n\n\t            return hexChars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a hex string to a word array.\n\t         *\n\t         * @param {string} hexStr The hex string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t         */\n\t        parse: function (hexStr) {\n\t            // Shortcut\n\t            var hexStrLength = hexStr.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < hexStrLength; i += 2) {\n\t                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t            }\n\n\t            return new WordArray.init(words, hexStrLength / 2);\n\t        }\n\t    };\n\n\t    /**\n\t     * Latin1 encoding strategy.\n\t     */\n\t    var Latin1 = C_enc.Latin1 = {\n\t        /**\n\t         * Converts a word array to a Latin1 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The Latin1 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var latin1Chars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                latin1Chars.push(String.fromCharCode(bite));\n\t            }\n\n\t            return latin1Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Latin1 string to a word array.\n\t         *\n\t         * @param {string} latin1Str The Latin1 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t         */\n\t        parse: function (latin1Str) {\n\t            // Shortcut\n\t            var latin1StrLength = latin1Str.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < latin1StrLength; i++) {\n\t                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t            }\n\n\t            return new WordArray.init(words, latin1StrLength);\n\t        }\n\t    };\n\n\t    /**\n\t     * UTF-8 encoding strategy.\n\t     */\n\t    var Utf8 = C_enc.Utf8 = {\n\t        /**\n\t         * Converts a word array to a UTF-8 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The UTF-8 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            try {\n\t                return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t            } catch (e) {\n\t                throw new Error('Malformed UTF-8 data');\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts a UTF-8 string to a word array.\n\t         *\n\t         * @param {string} utf8Str The UTF-8 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t         */\n\t        parse: function (utf8Str) {\n\t            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t        }\n\t    };\n\n\t    /**\n\t     * Abstract buffered block algorithm template.\n\t     *\n\t     * The property blockSize must be implemented in a concrete subtype.\n\t     *\n\t     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t     */\n\t    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t        /**\n\t         * Resets this block algorithm's data buffer to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm.reset();\n\t         */\n\t        reset: function () {\n\t            // Initial values\n\t            this._data = new WordArray.init();\n\t            this._nDataBytes = 0;\n\t        },\n\n\t        /**\n\t         * Adds new data to this block algorithm's buffer.\n\t         *\n\t         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm._append('data');\n\t         *     bufferedBlockAlgorithm._append(wordArray);\n\t         */\n\t        _append: function (data) {\n\t            // Convert string to WordArray, else assume WordArray already\n\t            if (typeof data == 'string') {\n\t                data = Utf8.parse(data);\n\t            }\n\n\t            // Append\n\t            this._data.concat(data);\n\t            this._nDataBytes += data.sigBytes;\n\t        },\n\n\t        /**\n\t         * Processes available data blocks.\n\t         *\n\t         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t         *\n\t         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t         *\n\t         * @return {WordArray} The processed data.\n\t         *\n\t         * @example\n\t         *\n\t         *     var processedData = bufferedBlockAlgorithm._process();\n\t         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t         */\n\t        _process: function (doFlush) {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\t            var dataSigBytes = data.sigBytes;\n\t            var blockSize = this.blockSize;\n\t            var blockSizeBytes = blockSize * 4;\n\n\t            // Count blocks ready\n\t            var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t            if (doFlush) {\n\t                // Round up to include partial blocks\n\t                nBlocksReady = Math.ceil(nBlocksReady);\n\t            } else {\n\t                // Round down to include only full blocks,\n\t                // less the number of blocks that must remain in the buffer\n\t                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t            }\n\n\t            // Count words ready\n\t            var nWordsReady = nBlocksReady * blockSize;\n\n\t            // Count bytes ready\n\t            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t            // Process blocks\n\t            if (nWordsReady) {\n\t                for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t                    // Perform concrete-algorithm logic\n\t                    this._doProcessBlock(dataWords, offset);\n\t                }\n\n\t                // Remove processed words\n\t                var processedWords = dataWords.splice(0, nWordsReady);\n\t                data.sigBytes -= nBytesReady;\n\t            }\n\n\t            // Return processed words\n\t            return new WordArray.init(processedWords, nBytesReady);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this object.\n\t         *\n\t         * @return {Object} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = bufferedBlockAlgorithm.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone._data = this._data.clone();\n\n\t            return clone;\n\t        },\n\n\t        _minBufferSize: 0\n\t    });\n\n\t    /**\n\t     * Abstract hasher template.\n\t     *\n\t     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t     */\n\t    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t        /**\n\t         * Configuration options.\n\t         */\n\t        cfg: Base.extend(),\n\n\t        /**\n\t         * Initializes a newly created hasher.\n\t         *\n\t         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hasher = CryptoJS.algo.SHA256.create();\n\t         */\n\t        init: function (cfg) {\n\t            // Apply config defaults\n\t            this.cfg = this.cfg.extend(cfg);\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this hasher to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.reset();\n\t         */\n\t        reset: function () {\n\t            // Reset data buffer\n\t            BufferedBlockAlgorithm.reset.call(this);\n\n\t            // Perform concrete-hasher logic\n\t            this._doReset();\n\t        },\n\n\t        /**\n\t         * Updates this hasher with a message.\n\t         *\n\t         * @param {WordArray|string} messageUpdate The message to append.\n\t         *\n\t         * @return {Hasher} This hasher.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.update('message');\n\t         *     hasher.update(wordArray);\n\t         */\n\t        update: function (messageUpdate) {\n\t            // Append\n\t            this._append(messageUpdate);\n\n\t            // Update the hash\n\t            this._process();\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Finalizes the hash computation.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t         *\n\t         * @return {WordArray} The hash.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hash = hasher.finalize();\n\t         *     var hash = hasher.finalize('message');\n\t         *     var hash = hasher.finalize(wordArray);\n\t         */\n\t        finalize: function (messageUpdate) {\n\t            // Final message update\n\t            if (messageUpdate) {\n\t                this._append(messageUpdate);\n\t            }\n\n\t            // Perform concrete-hasher logic\n\t            var hash = this._doFinalize();\n\n\t            return hash;\n\t        },\n\n\t        blockSize: 512/32,\n\n\t        /**\n\t         * Creates a shortcut function to a hasher's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to create a helper for.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHelper: function (hasher) {\n\t            return function (message, cfg) {\n\t                return new hasher.init(cfg).finalize(message);\n\t            };\n\t        },\n\n\t        /**\n\t         * Creates a shortcut function to the HMAC's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHmacHelper: function (hasher) {\n\t            return function (message, key) {\n\t                return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t            };\n\t        }\n\t    });\n\n\t    /**\n\t     * Algorithm namespace.\n\t     */\n\t    var C_algo = C.algo = {};\n\n\t    return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_enc = C.enc;\n\n\t    /**\n\t     * Base64 encoding strategy.\n\t     */\n\t    var Base64 = C_enc.Base64 = {\n\t        /**\n\t         * Converts a word array to a Base64 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The Base64 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\t            var map = this._map;\n\n\t            // Clamp excess bits\n\t            wordArray.clamp();\n\n\t            // Convert\n\t            var base64Chars = [];\n\t            for (var i = 0; i < sigBytes; i += 3) {\n\t                var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;\n\t                var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t                var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t                var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t                for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t                    base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t                }\n\t            }\n\n\t            // Add padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                while (base64Chars.length % 4) {\n\t                    base64Chars.push(paddingChar);\n\t                }\n\t            }\n\n\t            return base64Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Base64 string to a word array.\n\t         *\n\t         * @param {string} base64Str The Base64 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t         */\n\t        parse: function (base64Str) {\n\t            // Shortcuts\n\t            var base64StrLength = base64Str.length;\n\t            var map = this._map;\n\t            var reverseMap = this._reverseMap;\n\n\t            if (!reverseMap) {\n\t                    reverseMap = this._reverseMap = [];\n\t                    for (var j = 0; j < map.length; j++) {\n\t                        reverseMap[map.charCodeAt(j)] = j;\n\t                    }\n\t            }\n\n\t            // Ignore padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                var paddingIndex = base64Str.indexOf(paddingChar);\n\t                if (paddingIndex !== -1) {\n\t                    base64StrLength = paddingIndex;\n\t                }\n\t            }\n\n\t            // Convert\n\t            return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t        },\n\n\t        _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t    };\n\n\t    function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t      var words = [];\n\t      var nBytes = 0;\n\t      for (var i = 0; i < base64StrLength; i++) {\n\t          if (i % 4) {\n\t              var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t              var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t              words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t              nBytes++;\n\t          }\n\t      }\n\t      return WordArray.create(words, nBytes);\n\t    }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.HmacSHA256;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Base = C_lib.Base;\n\t    var C_enc = C.enc;\n\t    var Utf8 = C_enc.Utf8;\n\t    var C_algo = C.algo;\n\n\t    /**\n\t     * HMAC algorithm.\n\t     */\n\t    var HMAC = C_algo.HMAC = Base.extend({\n\t        /**\n\t         * Initializes a newly created HMAC.\n\t         *\n\t         * @param {Hasher} hasher The hash algorithm to use.\n\t         * @param {WordArray|string} key The secret key.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t         */\n\t        init: function (hasher, key) {\n\t            // Init hasher\n\t            hasher = this._hasher = new hasher.init();\n\n\t            // Convert string to WordArray, else assume WordArray already\n\t            if (typeof key == 'string') {\n\t                key = Utf8.parse(key);\n\t            }\n\n\t            // Shortcuts\n\t            var hasherBlockSize = hasher.blockSize;\n\t            var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t            // Allow arbitrary length keys\n\t            if (key.sigBytes > hasherBlockSizeBytes) {\n\t                key = hasher.finalize(key);\n\t            }\n\n\t            // Clamp excess bits\n\t            key.clamp();\n\n\t            // Clone key for inner and outer pads\n\t            var oKey = this._oKey = key.clone();\n\t            var iKey = this._iKey = key.clone();\n\n\t            // Shortcuts\n\t            var oKeyWords = oKey.words;\n\t            var iKeyWords = iKey.words;\n\n\t            // XOR keys with pad constants\n\t            for (var i = 0; i < hasherBlockSize; i++) {\n\t                oKeyWords[i] ^= 0x5c5c5c5c;\n\t                iKeyWords[i] ^= 0x36363636;\n\t            }\n\t            oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this HMAC to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     hmacHasher.reset();\n\t         */\n\t        reset: function () {\n\t            // Shortcut\n\t            var hasher = this._hasher;\n\n\t            // Reset\n\t            hasher.reset();\n\t            hasher.update(this._iKey);\n\t        },\n\n\t        /**\n\t         * Updates this HMAC with a message.\n\t         *\n\t         * @param {WordArray|string} messageUpdate The message to append.\n\t         *\n\t         * @return {HMAC} This HMAC instance.\n\t         *\n\t         * @example\n\t         *\n\t         *     hmacHasher.update('message');\n\t         *     hmacHasher.update(wordArray);\n\t         */\n\t        update: function (messageUpdate) {\n\t            this._hasher.update(messageUpdate);\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Finalizes the HMAC computation.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t         *\n\t         * @return {WordArray} The HMAC.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hmac = hmacHasher.finalize();\n\t         *     var hmac = hmacHasher.finalize('message');\n\t         *     var hmac = hmacHasher.finalize(wordArray);\n\t         */\n\t        finalize: function (messageUpdate) {\n\t            // Shortcut\n\t            var hasher = this._hasher;\n\n\t            // Compute HMAC\n\t            var innerHash = hasher.finalize(messageUpdate);\n\t            hasher.reset();\n\t            var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t            return hmac;\n\t        }\n\t    });\n\t}());\n\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Check if typed arrays are supported\n\t    if (typeof ArrayBuffer != 'function') {\n\t        return;\n\t    }\n\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\n\t    // Reference original init\n\t    var superInit = WordArray.init;\n\n\t    // Augment WordArray.init to handle typed arrays\n\t    var subInit = WordArray.init = function (typedArray) {\n\t        // Convert buffers to uint8\n\t        if (typedArray instanceof ArrayBuffer) {\n\t            typedArray = new Uint8Array(typedArray);\n\t        }\n\n\t        // Convert other array views to uint8\n\t        if (\n\t            typedArray instanceof Int8Array ||\n\t            (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t            typedArray instanceof Int16Array ||\n\t            typedArray instanceof Uint16Array ||\n\t            typedArray instanceof Int32Array ||\n\t            typedArray instanceof Uint32Array ||\n\t            typedArray instanceof Float32Array ||\n\t            typedArray instanceof Float64Array\n\t        ) {\n\t            typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t        }\n\n\t        // Handle Uint8Array\n\t        if (typedArray instanceof Uint8Array) {\n\t            // Shortcut\n\t            var typedArrayByteLength = typedArray.byteLength;\n\n\t            // Extract bytes\n\t            var words = [];\n\t            for (var i = 0; i < typedArrayByteLength; i++) {\n\t                words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t            }\n\n\t            // Initialize this word array\n\t            superInit.call(this, words, typedArrayByteLength);\n\t        } else {\n\t            // Else call normal init\n\t            superInit.apply(this, arguments);\n\t        }\n\t    };\n\n\t    subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_algo = C.algo;\n\n\t    // Initialization and round constants tables\n\t    var H = [];\n\t    var K = [];\n\n\t    // Compute constants\n\t    (function () {\n\t        function isPrime(n) {\n\t            var sqrtN = Math.sqrt(n);\n\t            for (var factor = 2; factor <= sqrtN; factor++) {\n\t                if (!(n % factor)) {\n\t                    return false;\n\t                }\n\t            }\n\n\t            return true;\n\t        }\n\n\t        function getFractionalBits(n) {\n\t            return ((n - (n | 0)) * 0x100000000) | 0;\n\t        }\n\n\t        var n = 2;\n\t        var nPrime = 0;\n\t        while (nPrime < 64) {\n\t            if (isPrime(n)) {\n\t                if (nPrime < 8) {\n\t                    H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t                }\n\t                K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t                nPrime++;\n\t            }\n\n\t            n++;\n\t        }\n\t    }());\n\n\t    // Reusable object\n\t    var W = [];\n\n\t    /**\n\t     * SHA-256 hash algorithm.\n\t     */\n\t    var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash = new WordArray.init(H.slice(0));\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcut\n\t            var H = this._hash.words;\n\n\t            // Working variables\n\t            var a = H[0];\n\t            var b = H[1];\n\t            var c = H[2];\n\t            var d = H[3];\n\t            var e = H[4];\n\t            var f = H[5];\n\t            var g = H[6];\n\t            var h = H[7];\n\n\t            // Computation\n\t            for (var i = 0; i < 64; i++) {\n\t                if (i < 16) {\n\t                    W[i] = M[offset + i] | 0;\n\t                } else {\n\t                    var gamma0x = W[i - 15];\n\t                    var gamma0  = ((gamma0x << 25) | (gamma0x >>> 7))  ^\n\t                                  ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t                                   (gamma0x >>> 3);\n\n\t                    var gamma1x = W[i - 2];\n\t                    var gamma1  = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t                                  ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t                                   (gamma1x >>> 10);\n\n\t                    W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t                }\n\n\t                var ch  = (e & f) ^ (~e & g);\n\t                var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t                var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t                var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7)  | (e >>> 25));\n\n\t                var t1 = h + sigma1 + ch + K[i] + W[i];\n\t                var t2 = sigma0 + maj;\n\n\t                h = g;\n\t                g = f;\n\t                f = e;\n\t                e = (d + t1) | 0;\n\t                d = c;\n\t                c = b;\n\t                b = a;\n\t                a = (t1 + t2) | 0;\n\t            }\n\n\t            // Intermediate hash value\n\t            H[0] = (H[0] + a) | 0;\n\t            H[1] = (H[1] + b) | 0;\n\t            H[2] = (H[2] + c) | 0;\n\t            H[3] = (H[3] + d) | 0;\n\t            H[4] = (H[4] + e) | 0;\n\t            H[5] = (H[5] + f) | 0;\n\t            H[6] = (H[6] + g) | 0;\n\t            H[7] = (H[7] + h) | 0;\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t            data.sigBytes = dataWords.length * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Return final computed hash\n\t            return this._hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA256('message');\n\t     *     var hash = CryptoJS.SHA256(wordArray);\n\t     */\n\t    C.SHA256 = Hasher._createHelper(SHA256);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA256(message, key);\n\t     */\n\t    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","/**\n * Dom7 3.0.0-alpha.7\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: July 14, 2020\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _construct(Parent, args, Class) {\n  if (_isNativeReflectConstruct()) {\n    _construct = Reflect.construct;\n  } else {\n    _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) _setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n\n  return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n  _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !_isNativeFunction(Class)) return Class;\n\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n\n      _cache.set(Class, Wrapper);\n    }\n\n    function Wrapper() {\n      return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n    }\n\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return _setPrototypeOf(Wrapper, Class);\n  };\n\n  return _wrapNativeSuper(Class);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n  var proto = obj.__proto__;\n  Object.defineProperty(obj, '__proto__', {\n    get: function get() {\n      return proto;\n    },\n    set: function set(value) {\n      proto.__proto__ = value;\n    }\n  });\n}\n\nvar Dom7 = /*#__PURE__*/function (_Array) {\n  _inheritsLoose(Dom7, _Array);\n\n  function Dom7(items) {\n    var _this;\n\n    _this = _Array.call.apply(_Array, [this].concat(items)) || this;\n    makeReactive(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  return Dom7;\n}( /*#__PURE__*/_wrapNativeSuper(Array));\n\nfunction arrayFlat(arr) {\n  if (arr === void 0) {\n    arr = [];\n  }\n\n  var res = [];\n  arr.forEach(function (el) {\n    if (Array.isArray(el)) {\n      res.push.apply(res, arrayFlat(el));\n    } else {\n      res.push(el);\n    }\n  });\n  return res;\n}\nfunction arrayFilter(arr, callback) {\n  return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n  var uniqueArray = [];\n\n  for (var i = 0; i < arr.length; i += 1) {\n    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n  }\n\n  return uniqueArray;\n}\nfunction toCamelCase(string) {\n  return string.toLowerCase().replace(/-(.)/g, function (match, group) {\n    return group.toUpperCase();\n  });\n}\n\nfunction qsa(selector, context) {\n  if (typeof selector !== 'string') {\n    return [selector];\n  }\n\n  var a = [];\n  var res = context.querySelectorAll(selector);\n\n  for (var i = 0; i < res.length; i += 1) {\n    a.push(res[i]);\n  }\n\n  return a;\n}\n\nfunction $(selector, context) {\n  var window = getWindow();\n  var document = getDocument();\n  var 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    var html = selector.trim();\n\n    if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n      var 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      var tempParent = document.createElement(toCreate);\n      tempParent.innerHTML = html;\n\n      for (var i = 0; i < tempParent.childNodes.length; i += 1) {\n        arr.push(tempParent.childNodes[i]);\n      }\n    } else {\n      arr = qsa(selector.trim(), context || document);\n    } // arr = qsa(selector, document);\n\n  } else if (selector.nodeType || selector === window || selector === document) {\n    arr.push(selector);\n  } else if (Array.isArray(selector)) {\n    if (selector instanceof Dom7) return selector;\n    arr = selector;\n  }\n\n  return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\nfunction addClass() {\n  for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {\n    classes[_key] = arguments[_key];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  this.forEach(function (el) {\n    var _el$classList;\n\n    (_el$classList = el.classList).add.apply(_el$classList, classNames);\n  });\n  return this;\n}\n\nfunction removeClass() {\n  for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    classes[_key2] = arguments[_key2];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  this.forEach(function (el) {\n    var _el$classList2;\n\n    (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames);\n  });\n  return this;\n}\n\nfunction toggleClass() {\n  for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    classes[_key3] = arguments[_key3];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  this.forEach(function (el) {\n    classNames.forEach(function (className) {\n      el.classList.toggle(className);\n    });\n  });\n}\n\nfunction hasClass() {\n  for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    classes[_key4] = arguments[_key4];\n  }\n\n  var classNames = arrayFlat(classes.map(function (c) {\n    return c.split(' ');\n  }));\n  return arrayFilter(this, function (el) {\n    return classNames.filter(function (className) {\n      return el.classList.contains(className);\n    }).length > 0;\n  }).length > 0;\n}\n\nfunction attr(attrs, value) {\n  if (arguments.length === 1 && typeof attrs === 'string') {\n    // Get attr\n    if (this[0]) return this[0].getAttribute(attrs);\n    return undefined;\n  } // Set attrs\n\n\n  for (var 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 (var attrName in attrs) {\n        this[i][attrName] = attrs[attrName];\n        this[i].setAttribute(attrName, attrs[attrName]);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction removeAttr(attr) {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].removeAttribute(attr);\n  }\n\n  return this;\n}\n\nfunction prop(props, value) {\n  if (arguments.length === 1 && typeof props === 'string') {\n    // Get prop\n    if (this[0]) return this[0][props];\n  } else {\n    // Set props\n    for (var i = 0; i < this.length; i += 1) {\n      if (arguments.length === 2) {\n        // String\n        this[i][props] = value;\n      } else {\n        // Object\n        for (var propName in props) {\n          this[i][propName] = props[propName];\n        }\n      }\n    }\n\n    return this;\n  }\n\n  return this;\n}\n\nfunction data(key, value) {\n  var el;\n\n  if (typeof value === 'undefined') {\n    el = this[0];\n    if (!el) return undefined; // Get value\n\n    if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n      return el.dom7ElementDataStorage[key];\n    }\n\n    var dataKey = el.getAttribute(\"data-\" + key);\n\n    if (dataKey) {\n      return dataKey;\n    }\n\n    return undefined;\n  } // Set value\n\n\n  for (var i = 0; i < this.length; i += 1) {\n    el = this[i];\n    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n    el.dom7ElementDataStorage[key] = value;\n  }\n\n  return this;\n}\n\nfunction removeData(key) {\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n      el.dom7ElementDataStorage[key] = null;\n      delete el.dom7ElementDataStorage[key];\n    }\n  }\n}\n\nfunction dataset() {\n  var el = this[0];\n  if (!el) return undefined;\n  var dataset = {}; // eslint-disable-line\n\n  if (el.dataset) {\n    for (var dataKey in el.dataset) {\n      dataset[dataKey] = el.dataset[dataKey];\n    }\n  } else {\n    for (var i = 0; i < el.attributes.length; i += 1) {\n      var _attr = el.attributes[i];\n\n      if (_attr.name.indexOf('data-') >= 0) {\n        dataset[toCamelCase(_attr.name.split('data-')[1])] = _attr.value;\n      }\n    }\n  }\n\n  for (var key in dataset) {\n    if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n  }\n\n  return dataset;\n}\n\nfunction val(value) {\n  if (typeof value === 'undefined') {\n    // get value\n    var el = this[0];\n    if (!el) return undefined;\n\n    if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n      var values = [];\n\n      for (var i = 0; i < el.selectedOptions.length; i += 1) {\n        values.push(el.selectedOptions[i].value);\n      }\n\n      return values;\n    }\n\n    return el.value;\n  } // set value\n\n\n  for (var _i = 0; _i < this.length; _i += 1) {\n    var _el = this[_i];\n\n    if (Array.isArray(value) && _el.multiple && _el.nodeName.toLowerCase() === 'select') {\n      for (var j = 0; j < _el.options.length; j += 1) {\n        _el.options[j].selected = value.indexOf(_el.options[j].value) >= 0;\n      }\n    } else {\n      _el.value = value;\n    }\n  }\n\n  return this;\n}\n\nfunction value(value) {\n  return this.val(value);\n}\n\nfunction transform(transform) {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].style.transform = transform;\n  }\n\n  return this;\n}\n\nfunction transition(duration) {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].style.transition = typeof duration !== 'string' ? duration + \"ms\" : duration;\n  }\n\n  return this;\n}\n\nfunction on() {\n  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n    args[_key5] = arguments[_key5];\n  }\n\n  var eventType = args[0],\n      targetSelector = args[1],\n      listener = args[2],\n      capture = args[3];\n\n  if (typeof args[1] === 'function') {\n    eventType = args[0];\n    listener = args[1];\n    capture = args[2];\n    targetSelector = undefined;\n  }\n\n  if (!capture) capture = false;\n\n  function handleLiveEvent(e) {\n    var target = e.target;\n    if (!target) return;\n    var eventData = e.target.dom7EventData || [];\n\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n\n    if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n      var _parents = $(target).parents(); // eslint-disable-line\n\n\n      for (var k = 0; k < _parents.length; k += 1) {\n        if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);\n      }\n    }\n  }\n\n  function handleEvent(e) {\n    var 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  var events = eventType.split(' ');\n  var j;\n\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (!targetSelector) {\n      for (j = 0; j < events.length; j += 1) {\n        var event = events[j];\n        if (!el.dom7Listeners) el.dom7Listeners = {};\n        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n        el.dom7Listeners[event].push({\n          listener: listener,\n          proxyListener: handleEvent\n        });\n        el.addEventListener(event, handleEvent, capture);\n      }\n    } else {\n      // Live events\n      for (j = 0; j < events.length; j += 1) {\n        var _event = events[j];\n        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n        if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];\n\n        el.dom7LiveListeners[_event].push({\n          listener: listener,\n          proxyListener: handleLiveEvent\n        });\n\n        el.addEventListener(_event, handleLiveEvent, capture);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction off() {\n  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n\n  var eventType = args[0],\n      targetSelector = args[1],\n      listener = args[2],\n      capture = args[3];\n\n  if (typeof args[1] === 'function') {\n    eventType = args[0];\n    listener = args[1];\n    capture = args[2];\n    targetSelector = undefined;\n  }\n\n  if (!capture) capture = false;\n  var events = eventType.split(' ');\n\n  for (var i = 0; i < events.length; i += 1) {\n    var event = events[i];\n\n    for (var j = 0; j < this.length; j += 1) {\n      var el = this[j];\n      var handlers = void 0;\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 (var k = handlers.length - 1; k >= 0; k -= 1) {\n          var handler = handlers[k];\n\n          if (listener && handler.listener === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (!listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          }\n        }\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction once() {\n  var dom = this;\n\n  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n    args[_key7] = arguments[_key7];\n  }\n\n  var eventName = args[0],\n      targetSelector = args[1],\n      listener = args[2],\n      capture = args[3];\n\n  if (typeof args[1] === 'function') {\n    eventName = args[0];\n    listener = args[1];\n    capture = args[2];\n    targetSelector = undefined;\n  }\n\n  function onceHandler() {\n    for (var _len8 = arguments.length, eventArgs = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n      eventArgs[_key8] = arguments[_key8];\n    }\n\n    listener.apply(this, eventArgs);\n    dom.off(eventName, targetSelector, onceHandler, capture);\n\n    if (onceHandler.dom7proxy) {\n      delete onceHandler.dom7proxy;\n    }\n  }\n\n  onceHandler.dom7proxy = listener;\n  return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger() {\n  var window = getWindow();\n\n  for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n    args[_key9] = arguments[_key9];\n  }\n\n  var events = args[0].split(' ');\n  var eventData = args[1];\n\n  for (var i = 0; i < events.length; i += 1) {\n    var event = events[i];\n\n    for (var j = 0; j < this.length; j += 1) {\n      var el = this[j];\n\n      if (window.CustomEvent) {\n        var evt = new window.CustomEvent(event, {\n          detail: eventData,\n          bubbles: true,\n          cancelable: true\n        });\n        el.dom7EventData = args.filter(function (data, dataIndex) {\n          return dataIndex > 0;\n        });\n        el.dispatchEvent(evt);\n        el.dom7EventData = [];\n        delete el.dom7EventData;\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction transitionEnd(callback) {\n  var dom = this;\n\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    dom.off('transitionend', fireCallBack);\n  }\n\n  if (callback) {\n    dom.on('transitionend', fireCallBack);\n  }\n\n  return this;\n}\n\nfunction animationEnd(callback) {\n  var dom = this;\n\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    dom.off('animationend', fireCallBack);\n  }\n\n  if (callback) {\n    dom.on('animationend', fireCallBack);\n  }\n\n  return this;\n}\n\nfunction width() {\n  var window = getWindow();\n\n  if (this[0] === window) {\n    return window.innerWidth;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('width'));\n  }\n\n  return null;\n}\n\nfunction outerWidth(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      var _styles = this.styles();\n\n      return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));\n    }\n\n    return this[0].offsetWidth;\n  }\n\n  return null;\n}\n\nfunction height() {\n  var window = getWindow();\n\n  if (this[0] === window) {\n    return window.innerHeight;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('height'));\n  }\n\n  return null;\n}\n\nfunction outerHeight(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      var _styles2 = this.styles();\n\n      return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));\n    }\n\n    return this[0].offsetHeight;\n  }\n\n  return null;\n}\n\nfunction offset() {\n  if (this.length > 0) {\n    var window = getWindow();\n    var document = getDocument();\n    var el = this[0];\n    var box = el.getBoundingClientRect();\n    var body = document.body;\n    var clientTop = el.clientTop || body.clientTop || 0;\n    var clientLeft = el.clientLeft || body.clientLeft || 0;\n    var scrollTop = el === window ? window.scrollY : el.scrollTop;\n    var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n    return {\n      top: box.top + scrollTop - clientTop,\n      left: box.left + scrollLeft - clientLeft\n    };\n  }\n\n  return null;\n}\n\nfunction hide() {\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].style.display = 'none';\n  }\n\n  return this;\n}\n\nfunction show() {\n  var window = getWindow();\n\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (el.style.display === 'none') {\n      el.style.display = '';\n    }\n\n    if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n      // Still not visible\n      el.style.display = 'block';\n    }\n  }\n\n  return this;\n}\n\nfunction styles() {\n  var window = getWindow();\n  if (this[0]) return window.getComputedStyle(this[0], null);\n  return {};\n}\n\nfunction css(props, value) {\n  var window = getWindow();\n  var 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 (var _prop in props) {\n          this[i].style[_prop] = props[_prop];\n        }\n      }\n\n      return this;\n    }\n  }\n\n  if (arguments.length === 2 && typeof props === 'string') {\n    // .css('width', '100px')\n    for (i = 0; i < this.length; i += 1) {\n      this[i].style[props] = value;\n    }\n\n    return this;\n  }\n\n  return this;\n}\n\nfunction each(callback) {\n  if (!callback) return this;\n  this.forEach(function (el, index) {\n    callback.apply(el, [el, index]);\n  });\n  return this;\n}\n\nfunction filter(callback) {\n  var result = arrayFilter(this, callback);\n  return $(result);\n}\n\nfunction html(html) {\n  if (typeof html === 'undefined') {\n    return this[0] ? this[0].innerHTML : null;\n  }\n\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].innerHTML = html;\n  }\n\n  return this;\n}\n\nfunction text(text) {\n  if (typeof text === 'undefined') {\n    return this[0] ? this[0].textContent.trim() : null;\n  }\n\n  for (var i = 0; i < this.length; i += 1) {\n    this[i].textContent = text;\n  }\n\n  return this;\n}\n\nfunction is(selector) {\n  var window = getWindow();\n  var document = getDocument();\n  var el = this[0];\n  var compareWith;\n  var i;\n  if (!el || typeof selector === 'undefined') return false;\n\n  if (typeof selector === 'string') {\n    if (el.matches) return el.matches(selector);\n    if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n    if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n    compareWith = $(selector);\n\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n\n    return false;\n  }\n\n  if (selector === document) {\n    return el === document;\n  }\n\n  if (selector === window) {\n    return el === window;\n  }\n\n  if (selector.nodeType || selector instanceof Dom7) {\n    compareWith = selector.nodeType ? [selector] : selector;\n\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n\n    return false;\n  }\n\n  return false;\n}\n\nfunction index() {\n  var child = this[0];\n  var i;\n\n  if (child) {\n    i = 0; // eslint-disable-next-line\n\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n\n    return i;\n  }\n\n  return undefined;\n}\n\nfunction eq(index) {\n  if (typeof index === 'undefined') return this;\n  var length = this.length;\n\n  if (index > length - 1) {\n    return $([]);\n  }\n\n  if (index < 0) {\n    var returnIndex = length + index;\n    if (returnIndex < 0) return $([]);\n    return $([this[returnIndex]]);\n  }\n\n  return $([this[index]]);\n}\n\nfunction append() {\n  var newChild;\n  var document = getDocument();\n\n  for (var k = 0; k < arguments.length; k += 1) {\n    newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n    for (var i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        var 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 (var j = 0; j < newChild.length; j += 1) {\n          this[i].appendChild(newChild[j]);\n        }\n      } else {\n        this[i].appendChild(newChild);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction appendTo(parent) {\n  $(parent).append(this);\n  return this;\n}\n\nfunction prepend(newChild) {\n  var document = getDocument();\n  var i;\n  var j;\n\n  for (i = 0; i < this.length; i += 1) {\n    if (typeof newChild === 'string') {\n      var tempDiv = document.createElement('div');\n      tempDiv.innerHTML = newChild;\n\n      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n      }\n    } else if (newChild instanceof Dom7) {\n      for (j = 0; j < newChild.length; j += 1) {\n        this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n      }\n    } else {\n      this[i].insertBefore(newChild, this[i].childNodes[0]);\n    }\n  }\n\n  return this;\n}\n\nfunction prependTo(parent) {\n  $(parent).prepend(this);\n  return this;\n}\n\nfunction insertBefore(selector) {\n  var before = $(selector);\n\n  for (var i = 0; i < this.length; i += 1) {\n    if (before.length === 1) {\n      before[0].parentNode.insertBefore(this[i], before[0]);\n    } else if (before.length > 1) {\n      for (var j = 0; j < before.length; j += 1) {\n        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n      }\n    }\n  }\n}\n\nfunction insertAfter(selector) {\n  var after = $(selector);\n\n  for (var i = 0; i < this.length; i += 1) {\n    if (after.length === 1) {\n      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n    } else if (after.length > 1) {\n      for (var j = 0; j < after.length; j += 1) {\n        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n      }\n    }\n  }\n}\n\nfunction next(selector) {\n  if (this.length > 0) {\n    if (selector) {\n      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n        return $([this[0].nextElementSibling]);\n      }\n\n      return $([]);\n    }\n\n    if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n    return $([]);\n  }\n\n  return $([]);\n}\n\nfunction nextAll(selector) {\n  var nextEls = [];\n  var el = this[0];\n  if (!el) return $([]);\n\n  while (el.nextElementSibling) {\n    var _next = el.nextElementSibling; // eslint-disable-line\n\n    if (selector) {\n      if ($(_next).is(selector)) nextEls.push(_next);\n    } else nextEls.push(_next);\n\n    el = _next;\n  }\n\n  return $(nextEls);\n}\n\nfunction prev(selector) {\n  if (this.length > 0) {\n    var el = this[0];\n\n    if (selector) {\n      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n        return $([el.previousElementSibling]);\n      }\n\n      return $([]);\n    }\n\n    if (el.previousElementSibling) return $([el.previousElementSibling]);\n    return $([]);\n  }\n\n  return $([]);\n}\n\nfunction prevAll(selector) {\n  var prevEls = [];\n  var el = this[0];\n  if (!el) return $([]);\n\n  while (el.previousElementSibling) {\n    var _prev = el.previousElementSibling; // eslint-disable-line\n\n    if (selector) {\n      if ($(_prev).is(selector)) prevEls.push(_prev);\n    } else prevEls.push(_prev);\n\n    el = _prev;\n  }\n\n  return $(prevEls);\n}\n\nfunction siblings(selector) {\n  return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n  var parents = []; // eslint-disable-line\n\n  for (var i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode !== null) {\n      if (selector) {\n        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n      } else {\n        parents.push(this[i].parentNode);\n      }\n    }\n  }\n\n  return $(parents);\n}\n\nfunction parents(selector) {\n  var parents = []; // eslint-disable-line\n\n  for (var i = 0; i < this.length; i += 1) {\n    var _parent = this[i].parentNode; // eslint-disable-line\n\n    while (_parent) {\n      if (selector) {\n        if ($(_parent).is(selector)) parents.push(_parent);\n      } else {\n        parents.push(_parent);\n      }\n\n      _parent = _parent.parentNode;\n    }\n  }\n\n  return $(parents);\n}\n\nfunction closest(selector) {\n  var closest = this; // eslint-disable-line\n\n  if (typeof selector === 'undefined') {\n    return $([]);\n  }\n\n  if (!closest.is(selector)) {\n    closest = closest.parents(selector).eq(0);\n  }\n\n  return closest;\n}\n\nfunction find(selector) {\n  var foundElements = [];\n\n  for (var i = 0; i < this.length; i += 1) {\n    var found = this[i].querySelectorAll(selector);\n\n    for (var j = 0; j < found.length; j += 1) {\n      foundElements.push(found[j]);\n    }\n  }\n\n  return $(foundElements);\n}\n\nfunction children(selector) {\n  var children = []; // eslint-disable-line\n\n  for (var i = 0; i < this.length; i += 1) {\n    var childNodes = this[i].children;\n\n    for (var j = 0; j < childNodes.length; j += 1) {\n      if (!selector || $(childNodes[j]).is(selector)) {\n        children.push(childNodes[j]);\n      }\n    }\n  }\n\n  return $(children);\n}\n\nfunction remove() {\n  for (var i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n  }\n\n  return this;\n}\n\nfunction detach() {\n  return this.remove();\n}\n\nfunction add() {\n  var dom = this;\n  var i;\n  var j;\n\n  for (var _len10 = arguments.length, els = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n    els[_key10] = arguments[_key10];\n  }\n\n  for (i = 0; i < els.length; i += 1) {\n    var toAdd = $(els[i]);\n\n    for (j = 0; j < toAdd.length; j += 1) {\n      dom.push(toAdd[j]);\n    }\n  }\n\n  return dom;\n}\n\nfunction empty() {\n  for (var i = 0; i < this.length; i += 1) {\n    var el = this[i];\n\n    if (el.nodeType === 1) {\n      for (var j = 0; j < el.childNodes.length; j += 1) {\n        if (el.childNodes[j].parentNode) {\n          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n        }\n      }\n\n      el.textContent = '';\n    }\n  }\n\n  return this;\n}\n\nfunction scrollTo() {\n  var window = getWindow();\n\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var left = args[0],\n      top = args[1],\n      duration = args[2],\n      easing = args[3],\n      callback = args[4];\n\n  if (args.length === 4 && typeof easing === 'function') {\n    callback = easing;\n    left = args[0];\n    top = args[1];\n    duration = args[2];\n    callback = args[3];\n    easing = args[4];\n  }\n\n  if (typeof easing === 'undefined') easing = 'swing';\n  return this.each(function animate() {\n    var el = this;\n    var currentTop;\n    var currentLeft;\n    var maxTop;\n    var maxLeft;\n    var newTop;\n    var newLeft;\n    var scrollTop; // eslint-disable-line\n\n    var scrollLeft; // eslint-disable-line\n\n    var animateTop = top > 0 || top === 0;\n    var animateLeft = left > 0 || left === 0;\n\n    if (typeof easing === 'undefined') {\n      easing = 'swing';\n    }\n\n    if (animateTop) {\n      currentTop = el.scrollTop;\n\n      if (!duration) {\n        el.scrollTop = top;\n      }\n    }\n\n    if (animateLeft) {\n      currentLeft = el.scrollLeft;\n\n      if (!duration) {\n        el.scrollLeft = left;\n      }\n    }\n\n    if (!duration) return;\n\n    if (animateTop) {\n      maxTop = el.scrollHeight - el.offsetHeight;\n      newTop = Math.max(Math.min(top, maxTop), 0);\n    }\n\n    if (animateLeft) {\n      maxLeft = el.scrollWidth - el.offsetWidth;\n      newLeft = Math.max(Math.min(left, maxLeft), 0);\n    }\n\n    var startTime = null;\n    if (animateTop && newTop === currentTop) animateTop = false;\n    if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n    function render(time) {\n      if (time === void 0) {\n        time = new Date().getTime();\n      }\n\n      if (startTime === null) {\n        startTime = time;\n      }\n\n      var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n      var easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n      var done;\n      if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n      if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n      if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n\n      if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n\n      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (done) {\n        if (callback) callback();\n        return;\n      }\n\n      if (animateTop) el.scrollTop = scrollTop;\n      if (animateLeft) el.scrollLeft = scrollLeft;\n      window.requestAnimationFrame(render);\n    }\n\n    window.requestAnimationFrame(render);\n  });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  var top = args[0],\n      duration = args[1],\n      easing = args[2],\n      callback = args[3];\n\n  if (args.length === 3 && typeof easing === 'function') {\n    top = args[0];\n    duration = args[1];\n    callback = args[2];\n    easing = args[3];\n  }\n\n  var dom = this;\n\n  if (typeof top === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollTop;\n    return null;\n  }\n\n  return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft() {\n  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    args[_key3] = arguments[_key3];\n  }\n\n  var left = args[0],\n      duration = args[1],\n      easing = args[2],\n      callback = args[3];\n\n  if (args.length === 3 && typeof easing === 'function') {\n    left = args[0];\n    duration = args[1];\n    callback = args[2];\n    easing = args[3];\n  }\n\n  var dom = this;\n\n  if (typeof left === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollLeft;\n    return null;\n  }\n\n  return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n  var window = getWindow();\n  var els = this;\n  var a = {\n    props: Object.assign({}, initialProps),\n    params: Object.assign({\n      duration: 300,\n      easing: 'swing' // or 'linear'\n\n      /* Callbacks\n      begin(elements)\n      complete(elements)\n      progress(elements, complete, remaining, start, tweenValue)\n      */\n\n    }, initialParams),\n    elements: els,\n    animating: false,\n    que: [],\n    easingProgress: function easingProgress(easing, progress) {\n      if (easing === 'swing') {\n        return 0.5 - Math.cos(progress * Math.PI) / 2;\n      }\n\n      if (typeof easing === 'function') {\n        return easing(progress);\n      }\n\n      return progress;\n    },\n    stop: function stop() {\n      if (a.frameId) {\n        window.cancelAnimationFrame(a.frameId);\n      }\n\n      a.animating = false;\n      a.elements.each(function (el) {\n        var element = el;\n        delete element.dom7AnimateInstance;\n      });\n      a.que = [];\n    },\n    done: function done(complete) {\n      a.animating = false;\n      a.elements.each(function (el) {\n        var element = el;\n        delete element.dom7AnimateInstance;\n      });\n      if (complete) complete(els);\n\n      if (a.que.length > 0) {\n        var que = a.que.shift();\n        a.animate(que[0], que[1]);\n      }\n    },\n    animate: function animate(props, params) {\n      if (a.animating) {\n        a.que.push([props, params]);\n        return a;\n      }\n\n      var elements = []; // Define & Cache Initials & Units\n\n      a.elements.each(function (el, index) {\n        var initialFullValue;\n        var initialValue;\n        var unit;\n        var finalValue;\n        var finalFullValue;\n        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n        elements[index] = {\n          container: el\n        };\n        Object.keys(props).forEach(function (prop) {\n          initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n          initialValue = parseFloat(initialFullValue);\n          unit = initialFullValue.replace(initialValue, '');\n          finalValue = parseFloat(props[prop]);\n          finalFullValue = props[prop] + unit;\n          elements[index][prop] = {\n            initialFullValue: initialFullValue,\n            initialValue: initialValue,\n            unit: unit,\n            finalValue: finalValue,\n            finalFullValue: finalFullValue,\n            currentValue: initialValue\n          };\n        });\n      });\n      var startTime = null;\n      var time;\n      var elementsDone = 0;\n      var propsDone = 0;\n      var done;\n      var began = false;\n      a.animating = true;\n\n      function render() {\n        time = new Date().getTime();\n        var progress;\n        var easeProgress; // let el;\n\n        if (!began) {\n          began = true;\n          if (params.begin) params.begin(els);\n        }\n\n        if (startTime === null) {\n          startTime = time;\n        }\n\n        if (params.progress) {\n          // eslint-disable-next-line\n          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n        }\n\n        elements.forEach(function (element) {\n          var el = element;\n          if (done || el.done) return;\n          Object.keys(props).forEach(function (prop) {\n            if (done || el.done) return;\n            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n            easeProgress = a.easingProgress(params.easing, progress);\n            var _el$prop = el[prop],\n                initialValue = _el$prop.initialValue,\n                finalValue = _el$prop.finalValue,\n                unit = _el$prop.unit;\n            el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n            var currentValue = el[prop].currentValue;\n\n            if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n              el.container.style[prop] = finalValue + unit;\n              propsDone += 1;\n\n              if (propsDone === Object.keys(props).length) {\n                el.done = true;\n                elementsDone += 1;\n              }\n\n              if (elementsDone === elements.length) {\n                done = true;\n              }\n            }\n\n            if (done) {\n              a.done(params.complete);\n              return;\n            }\n\n            el.container.style[prop] = currentValue + unit;\n          });\n        });\n        if (done) return; // Then call\n\n        a.frameId = window.requestAnimationFrame(render);\n      }\n\n      a.frameId = window.requestAnimationFrame(render);\n      return a;\n    }\n  };\n\n  if (a.elements.length === 0) {\n    return els;\n  }\n\n  var animateInstance;\n\n  for (var i = 0; i < a.elements.length; i += 1) {\n    if (a.elements[i].dom7AnimateInstance) {\n      animateInstance = a.elements[i].dom7AnimateInstance;\n    } else a.elements[i].dom7AnimateInstance = a;\n  }\n\n  if (!animateInstance) {\n    animateInstance = a;\n  }\n\n  if (initialProps === 'stop') {\n    animateInstance.stop();\n  } else {\n    animateInstance.animate(a.props, a.params);\n  }\n\n  return els;\n}\n\nfunction stop() {\n  var els = this;\n\n  for (var i = 0; i < els.length; i += 1) {\n    if (els[i].dom7AnimateInstance) {\n      els[i].dom7AnimateInstance.stop();\n    }\n  }\n}\n\nvar noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n  function eventHandler() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (typeof args[0] === 'undefined') {\n      for (var i = 0; i < this.length; i += 1) {\n        if (noTrigger.indexOf(name) < 0) {\n          if (name in this[i]) this[i][name]();else {\n            $(this[i]).trigger(name);\n          }\n        }\n      }\n\n      return this;\n    }\n\n    return this.on.apply(this, [name].concat(args));\n  }\n\n  return eventHandler;\n}\n\nvar click = shortcut('click');\nvar blur = shortcut('blur');\nvar focus = shortcut('focus');\nvar focusin = shortcut('focusin');\nvar focusout = shortcut('focusout');\nvar keyup = shortcut('keyup');\nvar keydown = shortcut('keydown');\nvar keypress = shortcut('keypress');\nvar submit = shortcut('submit');\nvar change = shortcut('change');\nvar mousedown = shortcut('mousedown');\nvar mousemove = shortcut('mousemove');\nvar mouseup = shortcut('mouseup');\nvar mouseenter = shortcut('mouseenter');\nvar mouseleave = shortcut('mouseleave');\nvar mouseout = shortcut('mouseout');\nvar mouseover = shortcut('mouseover');\nvar touchstart = shortcut('touchstart');\nvar touchend = shortcut('touchend');\nvar touchmove = shortcut('touchmove');\nvar resize = shortcut('resize');\nvar scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","module.exports = window.fetch || (window.fetch = require('unfetch').default || require('unfetch'));\n","/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t//     character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","/**\n * SSR Window 3.0.0-alpha.4\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 20, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n    return (obj !== null &&\n        typeof obj === 'object' &&\n        'constructor' in obj &&\n        obj.constructor === Object);\n}\nfunction extend(target, src) {\n    if (target === void 0) { target = {}; }\n    if (src === void 0) { src = {}; }\n    Object.keys(src).forEach(function (key) {\n        if (typeof target[key] === 'undefined')\n            target[key] = src[key];\n        else if (isObject(src[key]) &&\n            isObject(target[key]) &&\n            Object.keys(src[key]).length > 0) {\n            extend(target[key], src[key]);\n        }\n    });\n}\n\nvar ssrDocument = {\n    body: {},\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    activeElement: {\n        blur: function () { },\n        nodeName: '',\n    },\n    querySelector: function () {\n        return null;\n    },\n    querySelectorAll: function () {\n        return [];\n    },\n    getElementById: function () {\n        return null;\n    },\n    createEvent: function () {\n        return {\n            initEvent: function () { },\n        };\n    },\n    createElement: function () {\n        return {\n            children: [],\n            childNodes: [],\n            style: {},\n            setAttribute: function () { },\n            getElementsByTagName: function () {\n                return [];\n            },\n        };\n    },\n    createElementNS: function () {\n        return {};\n    },\n    importNode: function () {\n        return null;\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n};\nfunction getDocument() {\n    var doc = typeof document !== 'undefined' ? document : {};\n    extend(doc, ssrDocument);\n    return doc;\n}\n\nvar 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: function () { },\n        pushState: function () { },\n        go: function () { },\n        back: function () { },\n    },\n    CustomEvent: function CustomEvent() {\n        return this;\n    },\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    getComputedStyle: function () {\n        return {\n            getPropertyValue: function () {\n                return '';\n            },\n        };\n    },\n    Image: function () { },\n    Date: function () { },\n    screen: {},\n    setTimeout: function () { },\n    clearTimeout: function () { },\n    matchMedia: function () {\n        return {};\n    },\n    requestAnimationFrame: function (callback) {\n        if (typeof setTimeout === 'undefined') {\n            callback();\n            return null;\n        }\n        return setTimeout(callback, 0);\n    },\n    cancelAnimationFrame: function (id) {\n        if (typeof setTimeout === 'undefined') {\n            return;\n        }\n        clearTimeout(id);\n    },\n};\nfunction getWindow() {\n    var win = typeof window !== 'undefined' ? window : {};\n    extend(win, ssrWindow);\n    return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar A11y = {\n  makeElFocusable: function makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n    return $el;\n  },\n  makeElNotFocusable: function makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n    return $el;\n  },\n  addElRole: function addElRole($el, role) {\n    $el.attr('role', role);\n    return $el;\n  },\n  addElLabel: function addElLabel($el, label) {\n    $el.attr('aria-label', label);\n    return $el;\n  },\n  disableEl: function disableEl($el) {\n    $el.attr('aria-disabled', true);\n    return $el;\n  },\n  enableEl: function enableEl($el) {\n    $el.attr('aria-disabled', false);\n    return $el;\n  },\n  onEnterKey: function onEnterKey(e) {\n    var swiper = this;\n    var params = swiper.params.a11y;\n    if (e.keyCode !== 13) return;\n    var $targetEl = $(e.target);\n\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        swiper.a11y.notify(params.lastSlideMessage);\n      } else {\n        swiper.a11y.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        swiper.a11y.notify(params.firstSlideMessage);\n      } else {\n        swiper.a11y.notify(params.prevSlideMessage);\n      }\n    }\n\n    if (swiper.pagination && $targetEl.is(\".\" + swiper.params.pagination.bulletClass)) {\n      $targetEl[0].click();\n    }\n  },\n  notify: function notify(message) {\n    var swiper = this;\n    var notification = swiper.a11y.liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  },\n  updateNavigation: function updateNavigation() {\n    var swiper = this;\n    if (swiper.params.loop || !swiper.navigation) return;\n    var _swiper$navigation = swiper.navigation,\n        $nextEl = _swiper$navigation.$nextEl,\n        $prevEl = _swiper$navigation.$prevEl;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        swiper.a11y.disableEl($prevEl);\n        swiper.a11y.makeElNotFocusable($prevEl);\n      } else {\n        swiper.a11y.enableEl($prevEl);\n        swiper.a11y.makeElFocusable($prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        swiper.a11y.disableEl($nextEl);\n        swiper.a11y.makeElNotFocusable($nextEl);\n      } else {\n        swiper.a11y.enableEl($nextEl);\n        swiper.a11y.makeElFocusable($nextEl);\n      }\n    }\n  },\n  updatePagination: function updatePagination() {\n    var swiper = this;\n    var params = swiper.params.a11y;\n\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.bullets.each(function (bulletEl) {\n        var $bulletEl = $(bulletEl);\n        swiper.a11y.makeElFocusable($bulletEl);\n        swiper.a11y.addElRole($bulletEl, 'button');\n        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n      });\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    swiper.$el.append(swiper.a11y.liveRegion); // Navigation\n\n    var params = swiper.params.a11y;\n    var $nextEl;\n    var $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      swiper.a11y.makeElFocusable($nextEl);\n      swiper.a11y.addElRole($nextEl, 'button');\n      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n      $nextEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n\n    if ($prevEl) {\n      swiper.a11y.makeElFocusable($prevEl);\n      swiper.a11y.addElRole($prevEl, 'button');\n      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n      $prevEl.on('keydown', swiper.a11y.onEnterKey);\n    } // Pagination\n\n\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.on('keydown', \".\" + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n    var $nextEl;\n    var $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', swiper.a11y.onEnterKey);\n    }\n\n    if ($prevEl) {\n      $prevEl.off('keydown', swiper.a11y.onEnterKey);\n    } // Pagination\n\n\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.off('keydown', \".\" + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);\n    }\n  }\n};\nexport default {\n  name: 'a11y',\n  params: {\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      a11y: _extends(_extends({}, A11y), {}, {\n        liveRegion: $(\"<span class=\\\"\" + swiper.params.a11y.notificationClass + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")\n      })\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.init();\n      swiper.a11y.updateNavigation();\n    },\n    toEdge: function toEdge(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    fromEdge: function fromEdge(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    paginationUpdate: function paginationUpdate(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updatePagination();\n    },\n    destroy: function destroy(swiper) {\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.destroy();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/* eslint no-underscore-dangle: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick, bindModuleMethods } from '../../utils/utils';\nvar Autoplay = {\n  run: function run() {\n    var swiper = this;\n    var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n    var delay = swiper.params.autoplay.delay;\n\n    if ($activeSlideEl.attr('data-swiper-autoplay')) {\n      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n    }\n\n    clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.timeout = nextTick(function () {\n      if (swiper.params.autoplay.reverseDirection) {\n        if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isBeginning) {\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      } else if (swiper.params.loop) {\n        swiper.loopFix();\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.isEnd) {\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.params.autoplay.stopOnLastSlide) {\n        swiper.slideTo(0, swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else {\n        swiper.autoplay.stop();\n      }\n\n      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n    }, delay);\n  },\n  start: function start() {\n    var swiper = this;\n    if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n    if (swiper.autoplay.running) return false;\n    swiper.autoplay.running = true;\n    swiper.emit('autoplayStart');\n    swiper.autoplay.run();\n    return true;\n  },\n  stop: function stop() {\n    var swiper = this;\n    if (!swiper.autoplay.running) return false;\n    if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n    if (swiper.autoplay.timeout) {\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = undefined;\n    }\n\n    swiper.autoplay.running = false;\n    swiper.emit('autoplayStop');\n    return true;\n  },\n  pause: function pause(speed) {\n    var swiper = this;\n    if (!swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) return;\n    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.paused = true;\n\n    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n      swiper.autoplay.paused = false;\n      swiper.autoplay.run();\n    } else {\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n    }\n  },\n  onVisibilityChange: function onVisibilityChange() {\n    var swiper = this;\n    var document = getDocument();\n\n    if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n      swiper.autoplay.pause();\n    }\n\n    if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n      swiper.autoplay.run();\n      swiper.autoplay.paused = false;\n    }\n  },\n  onTransitionEnd: function onTransitionEnd(e) {\n    var swiper = this;\n    if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n    if (e.target !== swiper.$wrapperEl[0]) return;\n    swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n    swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n    swiper.autoplay.paused = false;\n\n    if (!swiper.autoplay.running) {\n      swiper.autoplay.stop();\n    } else {\n      swiper.autoplay.run();\n    }\n  }\n};\nexport default {\n  name: 'autoplay',\n  params: {\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: true,\n      stopOnLastSlide: false,\n      reverseDirection: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      autoplay: _extends(_extends({}, Autoplay), {}, {\n        running: false,\n        paused: false\n      })\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.autoplay.enabled) {\n        swiper.autoplay.start();\n        var document = getDocument();\n        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      }\n    },\n    beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) {\n      if (swiper.autoplay.running) {\n        if (internal || !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.pause(speed);\n        } else {\n          swiper.autoplay.stop();\n        }\n      }\n    },\n    sliderFirstMove: function sliderFirstMove(swiper) {\n      if (swiper.autoplay.running) {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.stop();\n        } else {\n          swiper.autoplay.pause();\n        }\n      }\n    },\n    touchEnd: function touchEnd(swiper) {\n      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n        swiper.autoplay.run();\n      }\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      }\n\n      var document = getDocument();\n      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick, bindModuleMethods } from '../../utils/utils';\nvar Controller = {\n  LinearSpline: function LinearSpline(x, y) {\n    var binarySearch = function search() {\n      var maxIndex;\n      var minIndex;\n      var guess;\n      return function (array, val) {\n        minIndex = -1;\n        maxIndex = array.length;\n\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    var i1;\n    var 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  },\n  // xxx: for now i will just save one spline function to to\n  getInterpolateFunction: function getInterpolateFunction(c) {\n    var swiper = this;\n\n    if (!swiper.controller.spline) {\n      swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n  },\n  setTranslate: function setTranslate(_setTranslate, byController) {\n    var swiper = this;\n    var controlled = swiper.controller.control;\n    var multiplier;\n    var controlledTranslate;\n    var 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      var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n      if (swiper.params.controller.by === 'slide') {\n        swiper.controller.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 (var i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  },\n  setTransition: function setTransition(duration, byController) {\n    var swiper = this;\n    var Swiper = swiper.constructor;\n    var controlled = swiper.controller.control;\n    var 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(function () {\n            c.updateAutoHeight();\n          });\n        }\n\n        c.$wrapperEl.transitionEnd(function () {\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};\nexport default {\n  name: 'controller',\n  params: {\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide' // or 'container'\n\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      controller: _extends({\n        control: swiper.params.controller.control\n      }, Controller)\n    });\n  },\n  on: {\n    update: function update(swiper) {\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    resize: function resize(swiper) {\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    observerUpdate: function observerUpdate(swiper) {\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    setTranslate: function setTranslate(swiper, translate, byController) {\n      if (!swiper.controller.control) return;\n      swiper.controller.setTranslate(translate, byController);\n    },\n    setTransition: function setTransition(swiper, duration, byController) {\n      if (!swiper.controller.control) return;\n      swiper.controller.setTransition(duration, byController);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Coverflow = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var swiperWidth = swiper.width,\n        swiperHeight = swiper.height,\n        slides = swiper.slides,\n        slidesSizesGrid = swiper.slidesSizesGrid;\n    var params = swiper.params.coverflowEffect;\n    var isHorizontal = swiper.isHorizontal();\n    var transform = swiper.translate;\n    var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n    var rotate = isHorizontal ? params.rotate : -params.rotate;\n    var translate = params.depth; // Each slide offset from center\n\n    for (var i = 0, length = slides.length; i < length; i += 1) {\n      var $slideEl = slides.eq(i);\n      var slideSize = slidesSizesGrid[i];\n      var slideOffset = $slideEl[0].swiperSlideOffset;\n      var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;\n      var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n      var translateZ = -translate * Math.abs(offsetMultiplier);\n      var 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      var translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n      var translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n      var 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      var slideTransform = \"translate3d(\" + translateX + \"px,\" + translateY + \"px,\" + translateZ + \"px)  rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg) scale(\" + scale + \")\";\n      $slideEl.transform(slideTransform);\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n      if (params.slideShadows) {\n        // Set shadows\n        var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n        if ($shadowBeforeEl.length === 0) {\n          $shadowBeforeEl = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\");\n          $slideEl.append($shadowBeforeEl);\n        }\n\n        if ($shadowAfterEl.length === 0) {\n          $shadowAfterEl = $(\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\");\n          $slideEl.append($shadowAfterEl);\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  setTransition: function setTransition(duration) {\n    var swiper = this;\n    swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n  }\n};\nexport default {\n  name: 'effect-coverflow',\n  params: {\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      scale: 1,\n      modifier: 1,\n      slideShadows: true\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      coverflowEffect: _extends({}, Coverflow)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"coverflow\");\n      swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Cube = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var $el = swiper.$el,\n        $wrapperEl = swiper.$wrapperEl,\n        slides = swiper.slides,\n        swiperWidth = swiper.width,\n        swiperHeight = swiper.height,\n        rtl = swiper.rtlTranslate,\n        swiperSize = swiper.size,\n        browser = swiper.browser;\n    var params = swiper.params.cubeEffect;\n    var isHorizontal = swiper.isHorizontal();\n    var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    var wrapperRotate = 0;\n    var $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 (var i = 0; i < slides.length; i += 1) {\n      var $slideEl = slides.eq(i);\n      var slideIndex = i;\n\n      if (isVirtual) {\n        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n      }\n\n      var slideAngle = slideIndex * 90;\n      var round = Math.floor(slideAngle / 360);\n\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n\n      var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      var tx = 0;\n      var ty = 0;\n      var 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      var 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        var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        var 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      '-moz-transform-origin': \"50% 50% -\" + swiperSize / 2 + \"px\",\n      '-ms-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        var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n        var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n        var scale1 = params.shadowScale;\n        var scale2 = params.shadowScale / multiplier;\n        var 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    var 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  setTransition: function setTransition(duration) {\n    var swiper = this;\n    var $el = swiper.$el,\n        slides = swiper.slides;\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};\nexport default {\n  name: 'effect-cube',\n  params: {\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      cubeEffect: _extends({}, Cube)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'cube') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"cube\");\n      swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n      var overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        resistanceRatio: 0,\n        spaceBetween: 0,\n        centeredSlides: false,\n        virtualTranslate: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Fade = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var slides = swiper.slides;\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var $slideEl = swiper.slides.eq(i);\n      var offset = $slideEl[0].swiperSlideOffset;\n      var tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      var ty = 0;\n\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n\n      var 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      $slideEl.css({\n        opacity: slideOpacity\n      }).transform(\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\");\n    }\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    var slides = swiper.slides,\n        $wrapperEl = swiper.$wrapperEl;\n    slides.transition(duration);\n\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      var eventTriggered = false;\n      slides.transitionEnd(function () {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n        for (var i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  }\n};\nexport default {\n  name: 'effect-fade',\n  params: {\n    fadeEffect: {\n      crossFade: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      fadeEffect: _extends({}, Fade)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'fade') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"fade\");\n      var overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Flip = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var slides = swiper.slides,\n        rtl = swiper.rtlTranslate;\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var $slideEl = slides.eq(i);\n      var 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      var offset = $slideEl[0].swiperSlideOffset;\n      var rotate = -180 * progress;\n      var rotateY = rotate;\n      var rotateX = 0;\n      var tx = -offset;\n      var 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 (swiper.params.flipEffect.slideShadows) {\n        // Set shadows\n        var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        var shadowAfter = swiper.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-\" + (swiper.isHorizontal() ? 'left' : 'top') + \"\\\"></div>\");\n          $slideEl.append(shadowBefore);\n        }\n\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(\"<div class=\\\"swiper-slide-shadow-\" + (swiper.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      $slideEl.transform(\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\");\n    }\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    var slides = swiper.slides,\n        activeIndex = swiper.activeIndex,\n        $wrapperEl = swiper.$wrapperEl;\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.virtualTranslate && duration !== 0) {\n      var eventTriggered = false; // eslint-disable-next-line\n\n      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return; // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n\n        eventTriggered = true;\n        swiper.animating = false;\n        var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n        for (var i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  }\n};\nexport default {\n  name: 'effect-flip',\n  params: {\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      flipEffect: _extends({}, Flip)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.effect !== 'flip') return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"flip\");\n      swiper.classNames.push(swiper.params.containerModifierClass + \"3d\");\n      var overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar HashNavigation = {\n  onHashCange: function onHashCange() {\n    var swiper = this;\n    var document = getDocument();\n    swiper.emit('hashChange');\n    var newHash = document.location.hash.replace('#', '');\n    var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n    if (newHash !== activeSlideHash) {\n      var newIndex = swiper.$wrapperEl.children(\".\" + swiper.params.slideClass + \"[data-hash=\\\"\" + newHash + \"\\\"]\").index();\n      if (typeof newIndex === 'undefined') return;\n      swiper.slideTo(newIndex);\n    }\n  },\n  setHash: function setHash() {\n    var swiper = this;\n    var window = getWindow();\n    var document = getDocument();\n    if (!swiper.hashNavigation.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      swiper.emit('hashSet');\n    } else {\n      var slide = swiper.slides.eq(swiper.activeIndex);\n      var hash = slide.attr('data-hash') || slide.attr('data-history');\n      document.location.hash = hash || '';\n      swiper.emit('hashSet');\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    var document = getDocument();\n    var window = getWindow();\n    if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n    swiper.hashNavigation.initialized = true;\n    var hash = document.location.hash.replace('#', '');\n\n    if (hash) {\n      var speed = 0;\n\n      for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n        var slide = swiper.slides.eq(i);\n        var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          var 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', swiper.hashNavigation.onHashCange);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var window = getWindow();\n\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  }\n};\nexport default {\n  name: 'hash-navigation',\n  params: {\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      hashNavigation: _extends({\n        initialized: false\n      }, HashNavigation)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.init();\n      }\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.destroy();\n      }\n    },\n    transitionEnd: function transitionEnd(swiper) {\n      if (swiper.hashNavigation.initialized) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n        swiper.hashNavigation.setHash();\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow } from 'ssr-window';\nimport { bindModuleMethods } from '../../utils/utils';\nvar History = {\n  init: function init() {\n    var swiper = this;\n    var 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    var history = swiper.history;\n    history.initialized = true;\n    history.paths = History.getPathValues(swiper.params.url);\n    if (!history.paths.key && !history.paths.value) return;\n    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var window = getWindow();\n\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  setHistoryPopState: function setHistoryPopState() {\n    var swiper = this;\n    swiper.history.paths = History.getPathValues(swiper.params.url);\n    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n  },\n  getPathValues: function getPathValues(urlOverride) {\n    var window = getWindow();\n    var location;\n\n    if (urlOverride) {\n      location = new URL(urlOverride);\n    } else {\n      location = window.location;\n    }\n\n    var pathArray = location.pathname.slice(1).split('/').filter(function (part) {\n      return part !== '';\n    });\n    var total = pathArray.length;\n    var key = pathArray[total - 2];\n    var value = pathArray[total - 1];\n    return {\n      key: key,\n      value: value\n    };\n  },\n  setHistory: function setHistory(key, index) {\n    var swiper = this;\n    var window = getWindow();\n    if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n    var location;\n\n    if (swiper.params.url) {\n      location = new URL(swiper.params.url);\n    } else {\n      location = window.location;\n    }\n\n    var slide = swiper.slides.eq(index);\n    var value = History.slugify(slide.attr('data-history'));\n\n    if (!location.pathname.includes(key)) {\n      value = key + \"/\" + value;\n    }\n\n    var 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: value\n      }, null, value);\n    } else {\n      window.history.pushState({\n        value: value\n      }, null, value);\n    }\n  },\n  slugify: function slugify(text) {\n    return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n  },\n  scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n    var swiper = this;\n\n    if (value) {\n      for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n        var slide = swiper.slides.eq(i);\n        var slideHistory = History.slugify(slide.attr('data-history'));\n\n        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          var index = slide.index();\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  }\n};\nexport default {\n  name: 'history',\n  params: {\n    history: {\n      enabled: false,\n      replaceState: false,\n      key: 'slides'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      history: _extends({}, History)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.history.enabled) {\n        swiper.history.init();\n      }\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.params.history.enabled) {\n        swiper.history.destroy();\n      }\n    },\n    transitionEnd: function transitionEnd(swiper) {\n      if (swiper.history.initialized) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      if (swiper.history.initialized && swiper.params.cssMode) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Keyboard = {\n  handle: function handle(event) {\n    var swiper = this;\n    var window = getWindow();\n    var document = getDocument();\n    var rtl = swiper.rtlTranslate;\n    var e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n    var kc = e.keyCode || e.charCode;\n    var pageUpDown = swiper.params.keyboard.pageUpDown;\n    var isPageUp = pageUpDown && kc === 33;\n    var isPageDown = pageUpDown && kc === 34;\n    var isArrowLeft = kc === 37;\n    var isArrowRight = kc === 39;\n    var isArrowUp = kc === 38;\n    var 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      var 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      var windowWidth = window.innerWidth;\n      var windowHeight = window.innerHeight;\n      var swiperOffset = swiper.$el.offset();\n      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n      var 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 (var i = 0; i < swiperCoord.length; i += 1) {\n        var point = swiperCoord[i];\n\n        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\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    swiper.emit('keyPress', kc);\n    return undefined;\n  },\n  enable: function enable() {\n    var swiper = this;\n    var document = getDocument();\n    if (swiper.keyboard.enabled) return;\n    $(document).on('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = true;\n  },\n  disable: function disable() {\n    var swiper = this;\n    var document = getDocument();\n    if (!swiper.keyboard.enabled) return;\n    $(document).off('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = false;\n  }\n};\nexport default {\n  name: 'keyboard',\n  params: {\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n      pageUpDown: true\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      keyboard: _extends({\n        enabled: false\n      }, Keyboard)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.keyboard.enabled) {\n        swiper.keyboard.enable();\n      }\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.keyboard.enabled) {\n        swiper.keyboard.disable();\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Lazy = {\n  loadInSlide: function loadInSlide(index, loadInDuplicate) {\n    if (loadInDuplicate === void 0) {\n      loadInDuplicate = true;\n    }\n\n    var swiper = this;\n    var params = swiper.params.lazy;\n    if (typeof index === 'undefined') return;\n    if (swiper.slides.length === 0) return;\n    var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    var $slideEl = isVirtual ? swiper.$wrapperEl.children(\".\" + swiper.params.slideClass + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\") : swiper.slides.eq(index);\n    var $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(function (imageEl) {\n      var $imageEl = $(imageEl);\n      $imageEl.addClass(params.loadingClass);\n      var background = $imageEl.attr('data-background');\n      var src = $imageEl.attr('data-src');\n      var srcset = $imageEl.attr('data-srcset');\n      var sizes = $imageEl.attr('data-sizes');\n      var $pictureEl = $imageEl.parent('picture');\n      swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {\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(function (sourceEl) {\n              var $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          var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n            var originalSlide = swiper.$wrapperEl.children(\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + swiper.params.slideDuplicateClass + \")\");\n            swiper.lazy.loadInSlide(originalSlide.index(), false);\n          } else {\n            var duplicatedSlide = swiper.$wrapperEl.children(\".\" + swiper.params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\");\n            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n          }\n        }\n\n        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      });\n      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n    });\n  },\n  load: function load() {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl,\n        swiperParams = swiper.params,\n        slides = swiper.slides,\n        activeIndex = swiper.activeIndex;\n    var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n    var params = swiperParams.lazy;\n    var 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 (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n\n    if (swiper.params.watchSlidesVisibility) {\n      $wrapperEl.children(\".\" + swiperParams.slideVisibleClass).each(function (slideEl) {\n        var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n        swiper.lazy.loadInSlide(index);\n      });\n    } else if (slidesPerView > 1) {\n      for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n        if (slideExist(i)) swiper.lazy.loadInSlide(i);\n      }\n    } else {\n      swiper.lazy.loadInSlide(activeIndex);\n    }\n\n    if (params.loadPrevNext) {\n      if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n        var amount = params.loadPrevNextAmount;\n        var spv = slidesPerView;\n        var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n        var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n        for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) {\n          if (slideExist(_i)) swiper.lazy.loadInSlide(_i);\n        } // Prev Slides\n\n\n        for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) {\n          if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2);\n        }\n      } else {\n        var nextSlide = $wrapperEl.children(\".\" + swiperParams.slideNextClass);\n        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n        var prevSlide = $wrapperEl.children(\".\" + swiperParams.slidePrevClass);\n        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n      }\n    }\n  }\n};\nexport default {\n  name: 'lazy',\n  params: {\n    lazy: {\n      enabled: false,\n      loadPrevNext: false,\n      loadPrevNextAmount: 1,\n      loadOnTransitionStart: false,\n      elementClass: 'swiper-lazy',\n      loadingClass: 'swiper-lazy-loading',\n      loadedClass: 'swiper-lazy-loaded',\n      preloaderClass: 'swiper-lazy-preloader'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      lazy: _extends({\n        initialImageLoaded: false\n      }, Lazy)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n        swiper.params.preloadImages = false;\n      }\n    },\n    init: function init(swiper) {\n      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n        swiper.lazy.load();\n      }\n    },\n    scroll: function scroll(swiper) {\n      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n        swiper.lazy.load();\n      }\n    },\n    resize: function resize(swiper) {\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    scrollbarDragMove: function scrollbarDragMove(swiper) {\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    transitionStart: function transitionStart(swiper) {\n      if (swiper.params.lazy.enabled) {\n        if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {\n          swiper.lazy.load();\n        }\n      }\n    },\n    transitionEnd: function transitionEnd(swiper) {\n      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n        swiper.lazy.load();\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n        swiper.lazy.load();\n      }\n    }\n  }\n};","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { now, nextTick, bindModuleMethods } from '../../utils/utils';\n\nfunction isEventSupported() {\n  var document = getDocument();\n  var eventName = 'onwheel';\n  var isSupported = (eventName in document);\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard.\n  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n  document.implementation.hasFeature('', '') !== true) {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nvar Mousewheel = {\n  lastScrollTime: now(),\n  lastEventBeforeSnap: undefined,\n  recentWheelEvents: [],\n  event: function event() {\n    var window = getWindow();\n    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n    return isEventSupported() ? 'wheel' : 'mousewheel';\n  },\n  normalize: function normalize(e) {\n    // Reasonable defaults\n    var PIXEL_STEP = 10;\n    var LINE_HEIGHT = 40;\n    var PAGE_HEIGHT = 800;\n    var sX = 0;\n    var sY = 0; // spinX, spinY\n\n    var pX = 0;\n    var 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  handleMouseEnter: function handleMouseEnter() {\n    var swiper = this;\n    swiper.mouseEntered = true;\n  },\n  handleMouseLeave: function handleMouseLeave() {\n    var swiper = this;\n    swiper.mouseEntered = false;\n  },\n  handle: function handle(event) {\n    var e = event;\n    var swiper = this;\n    var params = swiper.params.mousewheel;\n\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n\n    var 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    var delta = 0;\n    var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n    var data = Mousewheel.normalize(e);\n\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;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;\n\n    if (!swiper.params.freeMode) {\n      // Register the new event in a variable which stores the relevant data\n      var 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      var recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n\n      var 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          swiper.mousewheel.animateSlider(newEvent);\n        }\n      } else {\n        swiper.mousewheel.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 (swiper.mousewheel.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      var _newEvent = {\n        time: now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta)\n      };\n      var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;\n      var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;\n\n      if (!ignoreWheelEvents) {\n        swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n\n        var position = swiper.getTranslate() + delta * params.sensitivity;\n        var wasBeginning = swiper.isBeginning;\n        var 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.freeModeSticky) {\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\n          // 1. do all N events have decreasing or same (absolute value) delta?\n          // 2. did all N events arrive in the last M (M=500?) msecs?\n          // 3. does the earliest event have an (absolute value) delta that's\n          //    at least P (P=1?) larger than the most recent event's delta?\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n          // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n          // Snap immediately and ignore remaining wheel events in this scroll.\n          // See comment above for \"remaining wheel events in this scroll\" determination.\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n          clearTimeout(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = undefined;\n          var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n\n          if (_recentWheelEvents.length >= 15) {\n            _recentWheelEvents.shift(); // only store the last N events\n\n          }\n\n          var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;\n\n          var firstEvent = _recentWheelEvents[0];\n\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            var snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            swiper.mousewheel.lastEventBeforeSnap = _newEvent;\n\n            _recentWheelEvents.splice(0);\n\n            swiper.mousewheel.timeout = nextTick(function () {\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n\n          if (!swiper.mousewheel.timeout) {\n            // if we get here, then we haven't detected the end of a momentum scroll, so\n            // we'll consider a scroll \"complete\" when there haven't been any wheel events\n            // for 500ms.\n            swiper.mousewheel.timeout = nextTick(function () {\n              var snapToThreshold = 0.5;\n              swiper.mousewheel.lastEventBeforeSnap = _newEvent;\n\n              _recentWheelEvents.splice(0);\n\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        } // Emit event\n\n\n        if (!ignoreWheelEvents) swiper.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  animateSlider: function animateSlider(newEvent) {\n    var swiper = this;\n    var window = getWindow(); // 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    if (newEvent.delta >= 6 && now() - swiper.mousewheel.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        swiper.emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      swiper.emit('scroll', newEvent.raw);\n    } // If you got here is because an animation has been triggered so store the current time\n\n\n    swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n    return false;\n  },\n  releaseScroll: function releaseScroll(newEvent) {\n    var swiper = this;\n    var 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  enable: function enable() {\n    var swiper = this;\n    var event = Mousewheel.event();\n\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n\n    if (!event) return false;\n    if (swiper.mousewheel.enabled) return false;\n    var target = swiper.$el;\n\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarget);\n    }\n\n    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n    target.on(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = true;\n    return true;\n  },\n  disable: function disable() {\n    var swiper = this;\n    var event = Mousewheel.event();\n\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n\n    if (!event) return false;\n    if (!swiper.mousewheel.enabled) return false;\n    var target = swiper.$el;\n\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarget);\n    }\n\n    target.off(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = false;\n    return true;\n  }\n};\nexport default {\n  name: 'mousewheel',\n  params: {\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarget: 'container'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      mousewheel: {\n        enabled: false,\n        lastScrollTime: now(),\n        lastEventBeforeSnap: undefined,\n        recentWheelEvents: [],\n        enable: Mousewheel.enable,\n        disable: Mousewheel.disable,\n        handle: Mousewheel.handle,\n        handleMouseEnter: Mousewheel.handleMouseEnter,\n        handleMouseLeave: Mousewheel.handleMouseLeave,\n        animateSlider: Mousewheel.animateSlider,\n        releaseScroll: Mousewheel.releaseScroll\n      }\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n        swiper.mousewheel.disable();\n      }\n\n      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n    },\n    destroy: function destroy(swiper) {\n      if (swiper.params.cssMode) {\n        swiper.mousewheel.enable();\n      }\n\n      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Navigation = {\n  update: function update() {\n    // Update Navigation Buttons\n    var swiper = this;\n    var params = swiper.params.navigation;\n    if (swiper.params.loop) return;\n    var _swiper$navigation = swiper.navigation,\n        $nextEl = _swiper$navigation.$nextEl,\n        $prevEl = _swiper$navigation.$prevEl;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        $prevEl.addClass(params.disabledClass);\n      } else {\n        $prevEl.removeClass(params.disabledClass);\n      }\n\n      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        $nextEl.addClass(params.disabledClass);\n      } else {\n        $nextEl.removeClass(params.disabledClass);\n      }\n\n      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  },\n  onPrevClick: function onPrevClick(e) {\n    var swiper = this;\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  },\n  onNextClick: function onNextClick(e) {\n    var swiper = this;\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  },\n  init: function init() {\n    var swiper = this;\n    var params = swiper.params.navigation;\n    if (!(params.nextEl || params.prevEl)) return;\n    var $nextEl;\n    var $prevEl;\n\n    if (params.nextEl) {\n      $nextEl = $(params.nextEl);\n\n      if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {\n        $nextEl = swiper.$el.find(params.nextEl);\n      }\n    }\n\n    if (params.prevEl) {\n      $prevEl = $(params.prevEl);\n\n      if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {\n        $prevEl = swiper.$el.find(params.prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', swiper.navigation.onNextClick);\n    }\n\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', swiper.navigation.onPrevClick);\n    }\n\n    extend(swiper.navigation, {\n      $nextEl: $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl: $prevEl,\n      prevEl: $prevEl && $prevEl[0]\n    });\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var _swiper$navigation2 = swiper.navigation,\n        $nextEl = _swiper$navigation2.$nextEl,\n        $prevEl = _swiper$navigation2.$prevEl;\n\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', swiper.navigation.onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', swiper.navigation.onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  }\n};\nexport default {\n  name: 'navigation',\n  params: {\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  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      navigation: _extends({}, Navigation)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.navigation.init();\n      swiper.navigation.update();\n    },\n    toEdge: function toEdge(swiper) {\n      swiper.navigation.update();\n    },\n    fromEdge: function fromEdge(swiper) {\n      swiper.navigation.update();\n    },\n    destroy: function destroy(swiper) {\n      swiper.navigation.destroy();\n    },\n    click: function click(swiper, e) {\n      var _swiper$navigation3 = swiper.navigation,\n          $nextEl = _swiper$navigation3.$nextEl,\n          $prevEl = _swiper$navigation3.$prevEl;\n\n      if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) {\n        var 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          swiper.emit('navigationShow');\n        } else {\n          swiper.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  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Pagination = {\n  update: function update() {\n    // Render || Update Pagination bullets/items\n    var swiper = this;\n    var rtl = swiper.rtl;\n    var params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    var $el = swiper.pagination.$el; // Current/Total\n\n    var current;\n    var 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      var bullets = swiper.pagination.bullets;\n      var firstIndex;\n      var lastIndex;\n      var midIndex;\n\n      if (params.dynamicBullets) {\n        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + \"px\");\n\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;\n\n          if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {\n            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (swiper.pagination.dynamicBulletIndex < 0) {\n            swiper.pagination.dynamicBulletIndex = 0;\n          }\n        }\n\n        firstIndex = current - swiper.pagination.dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n\n      bullets.removeClass(params.bulletActiveClass + \" \" + params.bulletActiveClass + \"-next \" + params.bulletActiveClass + \"-next-next \" + params.bulletActiveClass + \"-prev \" + params.bulletActiveClass + \"-prev-prev \" + params.bulletActiveClass + \"-main\");\n\n      if ($el.length > 1) {\n        bullets.each(function (bullet) {\n          var $bullet = $(bullet);\n          var 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              $bullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n            }\n\n            if (bulletIndex === lastIndex) {\n              $bullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n            }\n          }\n        });\n      } else {\n        var $bullet = bullets.eq(current);\n        var bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n\n        if (params.dynamicBullets) {\n          var $firstDisplayedBullet = bullets.eq(firstIndex);\n          var $lastDisplayedBullet = bullets.eq(lastIndex);\n\n          for (var 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 (var _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              $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n              $lastDisplayedBullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n            }\n          } else {\n            $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + \"-prev\").prev().addClass(params.bulletActiveClass + \"-prev-prev\");\n            $lastDisplayedBullet.next().addClass(params.bulletActiveClass + \"-next\").next().addClass(params.bulletActiveClass + \"-next-next\");\n          }\n        }\n      }\n\n      if (params.dynamicBullets) {\n        var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;\n        var offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + \"px\");\n      }\n    }\n\n    if (params.type === 'fraction') {\n      $el.find(\".\" + params.currentClass).text(params.formatFractionCurrent(current + 1));\n      $el.find(\".\" + params.totalClass).text(params.formatFractionTotal(total));\n    }\n\n    if (params.type === 'progressbar') {\n      var progressbarDirection;\n\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n\n      var scale = (current + 1) / total;\n      var scaleX = 1;\n      var scaleY = 1;\n\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n\n      $el.find(\".\" + 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      swiper.emit('paginationRender', $el[0]);\n    } else {\n      swiper.emit('paginationUpdate', $el[0]);\n    }\n\n    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n  },\n  render: function render() {\n    // Render Container\n    var swiper = this;\n    var params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    var $el = swiper.pagination.$el;\n    var paginationHTML = '';\n\n    if (params.type === 'bullets') {\n      var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n      for (var i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          paginationHTML += \"<\" + params.bulletElement + \" class=\\\"\" + params.bulletClass + \"\\\"></\" + params.bulletElement + \">\";\n        }\n      }\n\n      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(\".\" + 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      swiper.emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    var params = swiper.params.pagination;\n    if (!params.el) return;\n    var $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);\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(\"\" + params.modifierClass + params.type + \"-dynamic\");\n      swiper.pagination.dynamicBulletIndex = 0;\n\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', \".\" + params.bulletClass, function onClick(e) {\n        e.preventDefault();\n        var index = $(this).index() * swiper.params.slidesPerGroup;\n        if (swiper.params.loop) index += swiper.loopedSlides;\n        swiper.slideTo(index);\n      });\n    }\n\n    extend(swiper.pagination, {\n      $el: $el,\n      el: $el[0]\n    });\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    var params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    var $el = swiper.pagination.$el;\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n    if (params.clickable) {\n      $el.off('click', \".\" + params.bulletClass);\n    }\n  }\n};\nexport default {\n  name: 'pagination',\n  params: {\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets',\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: function formatFractionCurrent(number) {\n        return number;\n      },\n      formatFractionTotal: function formatFractionTotal(number) {\n        return number;\n      },\n      bulletClass: 'swiper-pagination-bullet',\n      bulletActiveClass: 'swiper-pagination-bullet-active',\n      modifierClass: 'swiper-pagination-',\n      // NEW\n      currentClass: 'swiper-pagination-current',\n      totalClass: 'swiper-pagination-total',\n      hiddenClass: 'swiper-pagination-hidden',\n      progressbarFillClass: 'swiper-pagination-progressbar-fill',\n      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n      clickableClass: 'swiper-pagination-clickable',\n      // NEW\n      lockClass: 'swiper-pagination-lock'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      pagination: _extends({\n        dynamicBulletIndex: 0\n      }, Pagination)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.pagination.init();\n      swiper.pagination.render();\n      swiper.pagination.update();\n    },\n    activeIndexChange: function activeIndexChange(swiper) {\n      if (swiper.params.loop) {\n        swiper.pagination.update();\n      } else if (typeof swiper.snapIndex === 'undefined') {\n        swiper.pagination.update();\n      }\n    },\n    snapIndexChange: function snapIndexChange(swiper) {\n      if (!swiper.params.loop) {\n        swiper.pagination.update();\n      }\n    },\n    slidesLengthChange: function slidesLengthChange(swiper) {\n      if (swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    snapGridLengthChange: function snapGridLengthChange(swiper) {\n      if (!swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    destroy: function destroy(swiper) {\n      swiper.pagination.destroy();\n    },\n    click: function click(swiper, e) {\n      if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) {\n        var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n\n        if (isHidden === true) {\n          swiper.emit('paginationShow');\n        } else {\n          swiper.emit('paginationHide');\n        }\n\n        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Parallax = {\n  setTransform: function setTransform(el, progress) {\n    var swiper = this;\n    var rtl = swiper.rtl;\n    var $el = $(el);\n    var rtlFactor = rtl ? -1 : 1;\n    var p = $el.attr('data-swiper-parallax') || '0';\n    var x = $el.attr('data-swiper-parallax-x');\n    var y = $el.attr('data-swiper-parallax-y');\n    var scale = $el.attr('data-swiper-parallax-scale');\n    var 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      var 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      var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n      $el.transform(\"translate3d(\" + x + \", \" + y + \", 0px) scale(\" + currentScale + \")\");\n    }\n  },\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    var $el = swiper.$el,\n        slides = swiper.slides,\n        progress = swiper.progress,\n        snapGrid = swiper.snapGrid;\n    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) {\n      swiper.parallax.setTransform(el, progress);\n    });\n    slides.each(function (slideEl, slideIndex) {\n      var 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(function (el) {\n        swiper.parallax.setTransform(el, slideProgress);\n      });\n    });\n  },\n  setTransition: function setTransition(duration) {\n    if (duration === void 0) {\n      duration = this.params.speed;\n    }\n\n    var swiper = this;\n    var $el = swiper.$el;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) {\n      var $parallaxEl = $(parallaxEl);\n      var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n      if (duration === 0) parallaxDuration = 0;\n      $parallaxEl.transition(parallaxDuration);\n    });\n  }\n};\nexport default {\n  name: 'parallax',\n  params: {\n    parallax: {\n      enabled: false\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      parallax: _extends({}, Parallax)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    init: function init(swiper) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTransition(duration);\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getDocument } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport { extend, nextTick, bindModuleMethods } from '../../utils/utils';\nvar Scrollbar = {\n  setTranslate: function setTranslate() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    var scrollbar = swiper.scrollbar,\n        rtl = swiper.rtlTranslate,\n        progress = swiper.progress;\n    var dragSize = scrollbar.dragSize,\n        trackSize = scrollbar.trackSize,\n        $dragEl = scrollbar.$dragEl,\n        $el = scrollbar.$el;\n    var params = swiper.params.scrollbar;\n    var newSize = dragSize;\n    var 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(swiper.scrollbar.timeout);\n      $el[0].style.opacity = 1;\n      swiper.scrollbar.timeout = setTimeout(function () {\n        $el[0].style.opacity = 0;\n        $el.transition(400);\n      }, 1000);\n    }\n  },\n  setTransition: function setTransition(duration) {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.$dragEl.transition(duration);\n  },\n  updateSize: function updateSize() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    var scrollbar = swiper.scrollbar;\n    var $dragEl = scrollbar.$dragEl,\n        $el = scrollbar.$el;\n    $dragEl[0].style.width = '';\n    $dragEl[0].style.height = '';\n    var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n    var divider = swiper.size / swiper.virtualSize;\n    var moveDivider = divider * (trackSize / swiper.size);\n    var dragSize;\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    extend(scrollbar, {\n      trackSize: trackSize,\n      divider: divider,\n      moveDivider: moveDivider,\n      dragSize: dragSize\n    });\n    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n  },\n  getPointerPosition: function getPointerPosition(e) {\n    var swiper = this;\n\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  setDragPosition: function setDragPosition(e) {\n    var swiper = this;\n    var scrollbar = swiper.scrollbar,\n        rtl = swiper.rtlTranslate;\n    var $el = scrollbar.$el,\n        dragSize = scrollbar.dragSize,\n        trackSize = scrollbar.trackSize,\n        dragStartPos = scrollbar.dragStartPos;\n    var positionRatio;\n    positionRatio = (scrollbar.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    var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  },\n  onDragStart: function onDragStart(e) {\n    var swiper = this;\n    var params = swiper.params.scrollbar;\n    var scrollbar = swiper.scrollbar,\n        $wrapperEl = swiper.$wrapperEl;\n    var $el = scrollbar.$el,\n        $dragEl = scrollbar.$dragEl;\n    swiper.scrollbar.isTouched = true;\n    swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.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    scrollbar.setDragPosition(e);\n    clearTimeout(swiper.scrollbar.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    swiper.emit('scrollbarDragStart', e);\n  },\n  onDragMove: function onDragMove(e) {\n    var swiper = this;\n    var scrollbar = swiper.scrollbar,\n        $wrapperEl = swiper.$wrapperEl;\n    var $el = scrollbar.$el,\n        $dragEl = scrollbar.$dragEl;\n    if (!swiper.scrollbar.isTouched) return;\n    if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n    scrollbar.setDragPosition(e);\n    $wrapperEl.transition(0);\n    $el.transition(0);\n    $dragEl.transition(0);\n    swiper.emit('scrollbarDragMove', e);\n  },\n  onDragEnd: function onDragEnd(e) {\n    var swiper = this;\n    var params = swiper.params.scrollbar;\n    var scrollbar = swiper.scrollbar,\n        $wrapperEl = swiper.$wrapperEl;\n    var $el = scrollbar.$el;\n    if (!swiper.scrollbar.isTouched) return;\n    swiper.scrollbar.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(swiper.scrollbar.dragTimeout);\n      swiper.scrollbar.dragTimeout = nextTick(function () {\n        $el.css('opacity', 0);\n        $el.transition(400);\n      }, 1000);\n    }\n\n    swiper.emit('scrollbarDragEnd', e);\n\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  },\n  enableDraggable: function enableDraggable() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    var document = getDocument();\n    var scrollbar = swiper.scrollbar,\n        touchEventsTouch = swiper.touchEventsTouch,\n        touchEventsDesktop = swiper.touchEventsDesktop,\n        params = swiper.params,\n        support = swiper.support;\n    var $el = scrollbar.$el;\n    var target = $el[0];\n    var activeListener = support.passiveListener && params.passiveListeners ? {\n      passive: false,\n      capture: false\n    } : false;\n    var passiveListener = support.passiveListener && params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n\n    if (!support.touch) {\n      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  disableDraggable: function disableDraggable() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    var document = getDocument();\n    var scrollbar = swiper.scrollbar,\n        touchEventsTouch = swiper.touchEventsTouch,\n        touchEventsDesktop = swiper.touchEventsDesktop,\n        params = swiper.params,\n        support = swiper.support;\n    var $el = scrollbar.$el;\n    var target = $el[0];\n    var activeListener = support.passiveListener && params.passiveListeners ? {\n      passive: false,\n      capture: false\n    } : false;\n    var passiveListener = support.passiveListener && params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n\n    if (!support.touch) {\n      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  init: function init() {\n    var swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    var scrollbar = swiper.scrollbar,\n        $swiperEl = swiper.$el;\n    var params = swiper.params.scrollbar;\n    var $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    var $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    extend(scrollbar, {\n      $el: $el,\n      el: $el[0],\n      $dragEl: $dragEl,\n      dragEl: $dragEl[0]\n    });\n\n    if (params.draggable) {\n      scrollbar.enableDraggable();\n    }\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    swiper.scrollbar.disableDraggable();\n  }\n};\nexport default {\n  name: 'scrollbar',\n  params: {\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  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      scrollbar: _extends({\n        isTouched: false,\n        timeout: null,\n        dragTimeout: null\n      }, Scrollbar)\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.scrollbar.init();\n      swiper.scrollbar.updateSize();\n      swiper.scrollbar.setTranslate();\n    },\n    update: function update(swiper) {\n      swiper.scrollbar.updateSize();\n    },\n    resize: function resize(swiper) {\n      swiper.scrollbar.updateSize();\n    },\n    observerUpdate: function observerUpdate(swiper) {\n      swiper.scrollbar.updateSize();\n    },\n    setTranslate: function setTranslate(swiper) {\n      swiper.scrollbar.setTranslate();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      swiper.scrollbar.setTransition(duration);\n    },\n    destroy: function destroy(swiper) {\n      swiper.scrollbar.destroy();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { extend, isObject, bindModuleMethods } from '../../utils/utils';\nimport $ from '../../utils/dom';\nvar Thumbs = {\n  init: function init() {\n    var swiper = this;\n    var thumbsParams = swiper.params.thumbs;\n    if (swiper.thumbs.initialized) return false;\n    swiper.thumbs.initialized = true;\n    var SwiperClass = swiper.constructor;\n\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      extend(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      extend(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n    } else if (isObject(thumbsParams.swiper)) {\n      swiper.thumbs.swiper = new SwiperClass(extend({}, thumbsParams.swiper, {\n        watchSlidesVisibility: true,\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      }));\n      swiper.thumbs.swiperCreated = true;\n    }\n\n    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n    return true;\n  },\n  onThumbClick: function onThumbClick() {\n    var swiper = this;\n    var thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    var clickedIndex = thumbsSwiper.clickedIndex;\n    var clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    var 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      var 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      var prevIndex = swiper.slides.eq(currentIndex).prevAll(\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\").eq(0).index();\n      var 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  update: function update(initial) {\n    var swiper = this;\n    var thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n    var autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    var useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      var currentThumbsIndex = thumbsSwiper.activeIndex;\n      var newThumbsIndex;\n      var 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        var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(\"[data-swiper-slide-index=\\\"\" + swiper.realIndex + \"\\\"]\").eq(0).index();\n        var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(\"[data-swiper-slide-index=\\\"\" + swiper.realIndex + \"\\\"]\").eq(0).index();\n        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;else newThumbsIndex = prevThumbsIndex;\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) {\n          newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n        }\n\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    } // Activate thumbs\n\n\n    var thumbsToActivate = 1;\n    var 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 (var i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.$wrapperEl.children(\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex + i) + \"\\\"]\").addClass(thumbActiveClass);\n      }\n    } else {\n      for (var _i = 0; _i < thumbsToActivate; _i += 1) {\n        thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass);\n      }\n    }\n  }\n};\nexport default {\n  name: 'thumbs',\n  params: {\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-container-thumbs'\n    }\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      thumbs: _extends({\n        swiper: null,\n        initialized: false\n      }, Thumbs)\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      var thumbs = swiper.params.thumbs;\n      if (!thumbs || !thumbs.swiper) return;\n      swiper.thumbs.init();\n      swiper.thumbs.update(true);\n    },\n    slideChange: function slideChange(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    update: function update(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    resize: function resize(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    observerUpdate: function observerUpdate(swiper) {\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    setTransition: function setTransition(swiper, duration) {\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      thumbsSwiper.setTransition(duration);\n    },\n    beforeDestroy: function beforeDestroy(swiper) {\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n\n      if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n        thumbsSwiper.destroy();\n      }\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Virtual = {\n  update: function update(force) {\n    var swiper = this;\n    var _swiper$params = swiper.params,\n        slidesPerView = _swiper$params.slidesPerView,\n        slidesPerGroup = _swiper$params.slidesPerGroup,\n        centeredSlides = _swiper$params.centeredSlides;\n    var _swiper$params$virtua = swiper.params.virtual,\n        addSlidesBefore = _swiper$params$virtua.addSlidesBefore,\n        addSlidesAfter = _swiper$params$virtua.addSlidesAfter;\n    var _swiper$virtual = swiper.virtual,\n        previousFrom = _swiper$virtual.from,\n        previousTo = _swiper$virtual.to,\n        slides = _swiper$virtual.slides,\n        previousSlidesGrid = _swiper$virtual.slidesGrid,\n        renderSlide = _swiper$virtual.renderSlide,\n        previousOffset = _swiper$virtual.offset;\n    swiper.updateActiveIndex();\n    var activeIndex = swiper.activeIndex || 0;\n    var offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n    var slidesAfter;\n    var 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    var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n    var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n    var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n    extend(swiper.virtual, {\n      from: from,\n      to: to,\n      offset: 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: offset,\n        from: from,\n        to: to,\n        slides: function getSlides() {\n          var slidesToRender = [];\n\n          for (var 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    var prependIndexes = [];\n    var appendIndexes = [];\n\n    if (force) {\n      swiper.$wrapperEl.find(\".\" + swiper.params.slideClass).remove();\n    } else {\n      for (var 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 (var _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(function (index) {\n      swiper.$wrapperEl.append(renderSlide(slides[index], index));\n    });\n    prependIndexes.sort(function (a, b) {\n      return b - a;\n    }).forEach(function (index) {\n      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n    });\n    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + \"px\");\n    onRendered();\n  },\n  renderSlide: function renderSlide(slide, index) {\n    var swiper = this;\n    var params = swiper.params.virtual;\n\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n\n    var $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  appendSlide: function appendSlide(slides) {\n    var swiper = this;\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var 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    swiper.virtual.update(true);\n  },\n  prependSlide: function prependSlide(slides) {\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var newActiveIndex = activeIndex + 1;\n    var numberOfNewSlides = 1;\n\n    if (Array.isArray(slides)) {\n      for (var 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      var cache = swiper.virtual.cache;\n      var newCache = {};\n      Object.keys(cache).forEach(function (cachedIndex) {\n        var $cachedEl = cache[cachedIndex];\n        var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n        if (cachedElIndex) {\n          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n        }\n\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n\n    swiper.virtual.update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  },\n  removeSlide: function removeSlide(slidesIndexes) {\n    var swiper = this;\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    var activeIndex = swiper.activeIndex;\n\n    if (Array.isArray(slidesIndexes)) {\n      for (var 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    swiper.virtual.update(true);\n    swiper.slideTo(activeIndex, 0);\n  },\n  removeAllSlides: function removeAllSlides() {\n    var swiper = this;\n    swiper.virtual.slides = [];\n\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n\n    swiper.virtual.update(true);\n    swiper.slideTo(0, 0);\n  }\n};\nexport default {\n  name: 'virtual',\n  params: {\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  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      virtual: _extends(_extends({}, Virtual), {}, {\n        slides: swiper.params.virtual.slides,\n        cache: {}\n      })\n    });\n  },\n  on: {\n    beforeInit: function beforeInit(swiper) {\n      if (!swiper.params.virtual.enabled) return;\n      swiper.classNames.push(swiper.params.containerModifierClass + \"virtual\");\n      var overwriteParams = {\n        watchSlidesProgress: true\n      };\n      extend(swiper.params, overwriteParams);\n      extend(swiper.originalParams, overwriteParams);\n\n      if (!swiper.params.initialSlide) {\n        swiper.virtual.update();\n      }\n    },\n    setTranslate: function setTranslate(swiper) {\n      if (!swiper.params.virtual.enabled) return;\n      swiper.virtual.update();\n    }\n  }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { bindModuleMethods, getTranslate } from '../../utils/utils';\nvar Zoom = {\n  // Calc Scale From Multi-touches\n  getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n    if (e.targetTouches.length < 2) return 1;\n    var x1 = e.targetTouches[0].pageX;\n    var y1 = e.targetTouches[0].pageY;\n    var x2 = e.targetTouches[1].pageX;\n    var y2 = e.targetTouches[1].pageY;\n    var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n    return distance;\n  },\n  // Events\n  onGestureStart: function onGestureStart(e) {\n    var swiper = this;\n    var support = swiper.support;\n    var params = swiper.params.zoom;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\n    zoom.fakeGestureTouched = false;\n    zoom.fakeGestureMoved = false;\n\n    if (!support.gestures) {\n      if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n        return;\n      }\n\n      zoom.fakeGestureTouched = true;\n      gesture.scaleStart = Zoom.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('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    swiper.zoom.isScaling = true;\n  },\n  onGestureChange: function onGestureChange(e) {\n    var swiper = this;\n    var support = swiper.support;\n    var params = swiper.params.zoom;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\n\n    if (!support.gestures) {\n      if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n        return;\n      }\n\n      zoom.fakeGestureMoved = true;\n      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n    }\n\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n      if (e.type === 'gesturechange') zoom.onGestureStart(e);\n      return;\n    }\n\n    if (support.gestures) {\n      zoom.scale = e.scale * zoom.currentScale;\n    } else {\n      zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;\n    }\n\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);\n    }\n\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);\n    }\n\n    gesture.$imageEl.transform(\"translate3d(0,0,0) scale(\" + zoom.scale + \")\");\n  },\n  onGestureEnd: function onGestureEnd(e) {\n    var swiper = this;\n    var device = swiper.device;\n    var support = swiper.support;\n    var params = swiper.params.zoom;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\n\n    if (!support.gestures) {\n      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n        return;\n      }\n\n      if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n        return;\n      }\n\n      zoom.fakeGestureTouched = false;\n      zoom.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    zoom.currentScale = zoom.scale;\n    zoom.isScaling = false;\n    if (zoom.scale === 1) gesture.$slideEl = undefined;\n  },\n  onTouchStart: function onTouchStart(e) {\n    var swiper = this;\n    var device = swiper.device;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image;\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  onTouchMove: function onTouchMove(e) {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image,\n        velocity = zoom.velocity;\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\n      if (swiper.rtl) {\n        image.startX = -image.startX;\n        image.startY = -image.startY;\n      }\n    } // Define if we need image drag\n\n\n    var scaledWidth = image.width * zoom.scale;\n    var 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 && !zoom.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 - Math.pow(image.minX - image.currentX + 1, 0.8);\n    }\n\n    if (image.currentX > image.maxX) {\n      image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);\n    }\n\n    if (image.currentY < image.minY) {\n      image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);\n    }\n\n    if (image.currentY > image.maxY) {\n      image.currentY = image.maxY - 1 + Math.pow(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  onTouchEnd: function onTouchEnd() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image,\n        velocity = zoom.velocity;\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    var momentumDurationX = 300;\n    var momentumDurationY = 300;\n    var momentumDistanceX = velocity.x * momentumDurationX;\n    var newPositionX = image.currentX + momentumDistanceX;\n    var momentumDistanceY = velocity.y * momentumDurationY;\n    var 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    var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n    image.currentX = newPositionX;\n    image.currentY = newPositionY; // Define if we need image drag\n\n    var scaledWidth = image.width * zoom.scale;\n    var 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  onTransitionEnd: function onTransitionEnd() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var gesture = zoom.gesture;\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      zoom.currentScale = 1;\n      gesture.$slideEl = undefined;\n      gesture.$imageEl = undefined;\n      gesture.$imageWrapEl = undefined;\n    }\n  },\n  // Toggle Zoom\n  toggle: function toggle(e) {\n    var swiper = this;\n    var zoom = swiper.zoom;\n\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoom.out();\n    } else {\n      // Zoom In\n      zoom.in(e);\n    }\n  },\n  in: function _in(e) {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var params = swiper.params.zoom;\n    var gesture = zoom.gesture,\n        image = zoom.image;\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('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) return;\n    gesture.$slideEl.addClass(\"\" + params.zoomedSlideClass);\n    var touchX;\n    var touchY;\n    var offsetX;\n    var offsetY;\n    var diffX;\n    var diffY;\n    var translateX;\n    var translateY;\n    var imageWidth;\n    var imageHeight;\n    var scaledWidth;\n    var scaledHeight;\n    var translateMinX;\n    var translateMinY;\n    var translateMaxX;\n    var translateMaxY;\n    var slideWidth;\n    var 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    zoom.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;\n      offsetY = gesture.$slideEl.offset().top;\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  out: function out() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var params = swiper.params.zoom;\n    var gesture = zoom.gesture;\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('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) return;\n    zoom.scale = 1;\n    zoom.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  },\n  toggleGestures: function toggleGestures(method) {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    var selector = zoom.slideSelector,\n        passive = zoom.passiveListener;\n    swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive);\n    swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive);\n    swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive);\n  },\n  enableGestures: function enableGestures() {\n    if (this.zoom.gesturesEnabled) return;\n    this.zoom.gesturesEnabled = true;\n    this.zoom.toggleGestures('on');\n  },\n  disableGestures: function disableGestures() {\n    if (!this.zoom.gesturesEnabled) return;\n    this.zoom.gesturesEnabled = false;\n    this.zoom.toggleGestures('off');\n  },\n  // Attach/Detach Events\n  enable: function enable() {\n    var swiper = this;\n    var support = swiper.support;\n    var zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n    var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    var activeListenerWithCapture = support.passiveListener ? {\n      passive: false,\n      capture: true\n    } : true;\n    var slideSelector = \".\" + swiper.params.slideClass;\n    swiper.zoom.passiveListener = passiveListener;\n    swiper.zoom.slideSelector = slideSelector; // Scale image\n\n    if (support.gestures) {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    } // Move image\n\n\n    swiper.$wrapperEl.on(swiper.touchEvents.move, \".\" + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);\n  },\n  disable: function disable() {\n    var swiper = this;\n    var zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n    var support = swiper.support;\n    swiper.zoom.enabled = false;\n    var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    var activeListenerWithCapture = support.passiveListener ? {\n      passive: false,\n      capture: true\n    } : true;\n    var slideSelector = \".\" + swiper.params.slideClass; // Scale image\n\n    if (support.gestures) {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    } // Move image\n\n\n    swiper.$wrapperEl.off(swiper.touchEvents.move, \".\" + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture);\n  }\n};\nexport default {\n  name: 'zoom',\n  params: {\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  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      zoom: _extends({\n        enabled: false,\n        scale: 1,\n        currentScale: 1,\n        isScaling: false,\n        gesture: {\n          $slideEl: undefined,\n          slideWidth: undefined,\n          slideHeight: undefined,\n          $imageEl: undefined,\n          $imageWrapEl: undefined,\n          maxRatio: 3\n        },\n        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        velocity: {\n          x: undefined,\n          y: undefined,\n          prevPositionX: undefined,\n          prevPositionY: undefined,\n          prevTime: undefined\n        }\n      }, Zoom)\n    });\n    var scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n      get: function get() {\n        return scale;\n      },\n      set: function set(value) {\n        if (scale !== value) {\n          var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n          var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n          swiper.emit('zoomChange', value, imageEl, slideEl);\n        }\n\n        scale = value;\n      }\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      if (swiper.params.zoom.enabled) {\n        swiper.zoom.enable();\n      }\n    },\n    destroy: function destroy(swiper) {\n      swiper.zoom.disable();\n    },\n    touchStart: function touchStart(swiper, e) {\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchStart(e);\n    },\n    touchEnd: function touchEnd(swiper, e) {\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchEnd(e);\n    },\n    doubleTap: function doubleTap(swiper, e) {\n      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n        swiper.zoom.toggle(e);\n      }\n    },\n    transitionEnd: function transitionEnd(swiper) {\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n    slideChange: function slideChange(swiper) {\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n        swiper.zoom.onTransitionEnd();\n      }\n    }\n  }\n};","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nvar Methods = {\n  addClass: addClass,\n  removeClass: removeClass,\n  hasClass: hasClass,\n  toggleClass: toggleClass,\n  attr: attr,\n  removeAttr: removeAttr,\n  transform: transform,\n  transition: transition,\n  on: on,\n  off: off,\n  trigger: trigger,\n  transitionEnd: transitionEnd,\n  outerWidth: outerWidth,\n  outerHeight: outerHeight,\n  styles: styles,\n  offset: offset,\n  css: css,\n  each: each,\n  html: html,\n  text: text,\n  is: is,\n  index: index,\n  eq: eq,\n  append: append,\n  prepend: prepend,\n  next: next,\n  nextAll: nextAll,\n  prev: prev,\n  prevAll: prevAll,\n  parent: parent,\n  parents: parents,\n  closest: closest,\n  find: find,\n  children: children,\n  filter: filter,\n  remove: remove\n};\nObject.keys(Methods).forEach(function (methodName) {\n  $.fn[methodName] = Methods[methodName];\n});\nexport default $;","import { getWindow } from 'ssr-window';\nvar browser;\n\nfunction calcBrowser() {\n  var window = getWindow();\n\n  function isSafari() {\n    var ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n\n  return {\n    isEdge: !!window.navigator.userAgent.match(/Edge/g),\n    isSafari: isSafari(),\n    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n  };\n}\n\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n\n  return browser;\n}\n\nexport { getBrowser };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support';\nvar device;\n\nfunction calcDevice(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      userAgent = _ref.userAgent;\n\n  var support = getSupport();\n  var window = getWindow();\n  var platform = window.navigator.platform;\n  var ua = userAgent || window.navigator.userAgent;\n  var device = {\n    ios: false,\n    android: false\n  };\n  var screenWidth = window.screen.width;\n  var screenHeight = window.screen.height;\n  var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n  var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  var windows = platform === 'Win32';\n  var macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n  var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768'];\n\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + \"x\" + screenHeight) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  } // Android\n\n\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  } // Export object\n\n\n  return device;\n}\n\nfunction getDevice(overrides) {\n  if (overrides === void 0) {\n    overrides = {};\n  }\n\n  if (!device) {\n    device = calcDevice(overrides);\n  }\n\n  return device;\n}\n\nexport { getDevice };","import { getWindow, getDocument } from 'ssr-window';\nvar support;\n\nfunction calcSupport() {\n  var window = getWindow();\n  var document = getDocument();\n  return {\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n    pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0,\n    observer: function checkObserver() {\n      return 'MutationObserver' in window || 'WebkitMutationObserver' in window;\n    }(),\n    passiveListener: function checkPassiveListener() {\n      var supportsPassive = false;\n\n      try {\n        var opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get: function get() {\n            supportsPassive = true;\n          }\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {// No support\n      }\n\n      return supportsPassive;\n    }(),\n    gestures: function checkGestures() {\n      return 'ongesturestart' in window;\n    }()\n  };\n}\n\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n\n  return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n  var object = obj;\n  Object.keys(object).forEach(function (key) {\n    try {\n      object[key] = null;\n    } catch (e) {// no getter for object\n    }\n\n    try {\n      delete object[key];\n    } catch (e) {// something got wrong\n    }\n  });\n}\n\nfunction nextTick(callback, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n\n  return setTimeout(callback, delay);\n}\n\nfunction now() {\n  return Date.now();\n}\n\nfunction getTranslate(el, axis) {\n  if (axis === void 0) {\n    axis = 'x';\n  }\n\n  var window = getWindow();\n  var matrix;\n  var curTransform;\n  var transformMatrix;\n  var curStyle = window.getComputedStyle(el, null);\n\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(function (a) {\n        return a.replace(',', '.');\n      }).join(', ');\n    } // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n\n\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n      else curTransform = parseFloat(matrix[4]);\n  }\n\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n      else curTransform = parseFloat(matrix[5]);\n  }\n\n  return curTransform || 0;\n}\n\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n}\n\nfunction extend() {\n  var to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n\n  for (var i = 1; i < arguments.length; i += 1) {\n    var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n    if (nextSource !== undefined && nextSource !== null) {\n      var keysArray = Object.keys(Object(nextSource));\n\n      for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        var nextKey = keysArray[nextIndex];\n        var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            extend(to[nextKey], nextSource[nextKey]);\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n            extend(to[nextKey], nextSource[nextKey]);\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n\n  return to;\n}\n\nfunction bindModuleMethods(instance, obj) {\n  Object.keys(obj).forEach(function (key) {\n    if (isObject(obj[key])) {\n      Object.keys(obj[key]).forEach(function (subKey) {\n        if (typeof obj[key][subKey] === 'function') {\n          obj[key][subKey] = obj[key][subKey].bind(instance);\n        }\n      });\n    }\n\n    instance[key] = obj[key];\n  });\n}\n\nexport { deleteProps, nextTick, now, getTranslate, isObject, extend, bindModuleMethods };","/**\n * Swiper 6.0.4\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: July 15, 2020\n */\n\nimport $ from './esm/utils/dom';\nimport { extend, getTranslate, nextTick, now, deleteProps, bindModuleMethods } from './esm/utils/utils';\nimport { getSupport } from './esm/utils/get-support';\nimport { getDevice } from './esm/utils/get-device';\nimport { getBrowser } from './esm/utils/get-browser';\nimport { getWindow, getDocument } from 'ssr-window';\nexport { default as Virtual } from './esm/components/virtual/virtual';\nexport { default as Keyboard } from './esm/components/keyboard/keyboard';\nexport { default as Mousewheel } from './esm/components/mousewheel/mousewheel';\nexport { default as Navigation } from './esm/components/navigation/navigation';\nexport { default as Pagination } from './esm/components/pagination/pagination';\nexport { default as Scrollbar } from './esm/components/scrollbar/scrollbar';\nexport { default as Parallax } from './esm/components/parallax/parallax';\nexport { default as Zoom } from './esm/components/zoom/zoom';\nexport { default as Lazy } from './esm/components/lazy/lazy';\nexport { default as Controller } from './esm/components/controller/controller';\nexport { default as A11y } from './esm/components/a11y/a11y';\nexport { default as History } from './esm/components/history/history';\nexport { default as HashNavigation } from './esm/components/hash-navigation/hash-navigation';\nexport { default as Autoplay } from './esm/components/autoplay/autoplay';\nexport { default as EffectFade } from './esm/components/effect-fade/effect-fade';\nexport { default as EffectCube } from './esm/components/effect-cube/effect-cube';\nexport { default as EffectFlip } from './esm/components/effect-flip/effect-flip';\nexport { default as EffectCoverflow } from './esm/components/effect-coverflow/effect-coverflow';\nexport { default as Thumbs } from './esm/components/thumbs/thumbs';\n\nfunction _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\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _extends() {\n  _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  return _extends.apply(this, arguments);\n}\n\nvar modular = {\n  useParams: function useParams(instanceParams) {\n    var instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName]; // Extend params\n\n      if (module.params) {\n        extend(instanceParams, module.params);\n      }\n    });\n  },\n  useModules: function useModules(modulesParams) {\n    if (modulesParams === void 0) {\n      modulesParams = {};\n    }\n\n    var instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      var moduleParams = modulesParams[moduleName] || {}; // Add event listeners\n\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach(function (moduleEventName) {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      } // Module create callback\n\n\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  }\n};\n\n/* eslint-disable no-underscore-dangle */\nvar eventsEmitter = {\n  on: function on(events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') return self;\n    var method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(function (event) {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n  once: function once(events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') return self;\n\n    function onceHandler() {\n      self.off(events, onceHandler);\n\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      handler.apply(self, args);\n    }\n\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n  onAny: function onAny(handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') return self;\n    var method = priority ? 'unshift' : 'push';\n\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n\n    return self;\n  },\n  offAny: function offAny(handler) {\n    var self = this;\n    if (!self.eventsAnyListeners) return self;\n    var index = self.eventsAnyListeners.indexOf(handler);\n\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n\n    return self;\n  },\n  off: function off(events, handler) {\n    var self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(function (event) {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(function (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  emit: function emit() {\n    var self = this;\n    if (!self.eventsListeners) return self;\n    var events;\n    var data;\n    var context;\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\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    var eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(function (event) {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        var handlers = [];\n        self.eventsListeners[event].forEach(function (eventHandler) {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach(function (eventHandler) {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n};\n\nfunction updateSize() {\n  var swiper = this;\n  var width;\n  var height;\n  var $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.width !== 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  extend(swiper, {\n    width: width,\n    height: height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}\n\nfunction updateSlides() {\n  var swiper = this;\n  var window = getWindow();\n  var params = swiper.params;\n  var $wrapperEl = swiper.$wrapperEl,\n      swiperSize = swiper.size,\n      rtl = swiper.rtlTranslate,\n      wrongRTL = swiper.wrongRTL;\n  var isVirtual = swiper.virtual && params.virtual.enabled;\n  var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  var slides = $wrapperEl.children(\".\" + swiper.params.slideClass);\n  var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  var snapGrid = [];\n  var slidesGrid = [];\n  var slidesSizesGrid = [];\n\n  function slidesForMargin(slideEl, slideIndex) {\n    if (!params.cssMode) return true;\n\n    if (slideIndex === slides.length - 1) {\n      return false;\n    }\n\n    return true;\n  }\n\n  var offsetBefore = params.slidesOffsetBefore;\n\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  var offsetAfter = params.slidesOffsetAfter;\n\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  var previousSnapGridLength = swiper.snapGrid.length;\n  var previousSlidesGridLength = swiper.snapGrid.length;\n  var spaceBetween = params.spaceBetween;\n  var slidePosition = -offsetBefore;\n  var prevSlideSize = 0;\n  var 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    marginTop: ''\n  });else slides.css({\n    marginRight: '',\n    marginBottom: ''\n  });\n  var slidesNumberEvenToRows;\n\n  if (params.slidesPerColumn > 1) {\n    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n    }\n\n    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n    }\n  } // Calc slides\n\n\n  var slideSize;\n  var slidesPerColumn = params.slidesPerColumn;\n  var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n  var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n\n  for (var i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    var slide = slides.eq(i);\n\n    if (params.slidesPerColumn > 1) {\n      // Set slides order\n      var newSlideOrderIndex = void 0;\n      var column = void 0;\n      var row = void 0;\n\n      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n        var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n        var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n        var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n        row = Math.floor(slideIndexInGroup / columnsInGroup);\n        column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;\n        newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n        slide.css({\n          '-webkit-box-ordinal-group': newSlideOrderIndex,\n          '-moz-box-ordinal-group': newSlideOrderIndex,\n          '-ms-flex-order': newSlideOrderIndex,\n          '-webkit-order': newSlideOrderIndex,\n          order: newSlideOrderIndex\n        });\n      } else if (params.slidesPerColumnFill === 'column') {\n        column = Math.floor(i / slidesPerColumn);\n        row = i - column * slidesPerColumn;\n\n        if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {\n          row += 1;\n\n          if (row >= slidesPerColumn) {\n            row = 0;\n            column += 1;\n          }\n        }\n      } else {\n        row = Math.floor(i / slidesPerRow);\n        column = i - row * slidesPerRow;\n      }\n\n      slide.css(\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + \"px\");\n    }\n\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      var slideStyles = window.getComputedStyle(slide[0], null);\n      var currentTransform = slide[0].style.transform;\n      var 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        if (swiper.isHorizontal()) {\n          var width = parseFloat(slideStyles.getPropertyValue('width') || 0);\n          var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left') || 0);\n          var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right') || 0);\n          var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left') || 0);\n          var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right') || 0);\n          var boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = width + marginLeft + marginRight;\n          } else {\n            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n          }\n        } else {\n          var height = parseFloat(slideStyles.getPropertyValue('height') || 0);\n          var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top') || 0);\n          var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom') || 0);\n          var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top') || 0);\n          var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom') || 0);\n\n          var _boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n          if (_boxSizing && _boxSizing === 'border-box') {\n            slideSize = height + marginTop + marginBottom;\n          } else {\n            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n          }\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        if (swiper.isHorizontal()) {\n          slides[i].style.width = slideSize + \"px\";\n        } else {\n          slides[i].style.height = slideSize + \"px\";\n        }\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  var newSlidesGrid;\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    if (swiper.isHorizontal()) $wrapperEl.css({\n      width: swiper.virtualSize + params.spaceBetween + \"px\"\n    });else $wrapperEl.css({\n      height: swiper.virtualSize + params.spaceBetween + \"px\"\n    });\n  }\n\n  if (params.slidesPerColumn > 1) {\n    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n    if (swiper.isHorizontal()) $wrapperEl.css({\n      width: swiper.virtualSize + params.spaceBetween + \"px\"\n    });else $wrapperEl.css({\n      height: swiper.virtualSize + params.spaceBetween + \"px\"\n    });\n\n    if (params.centeredSlides) {\n      newSlidesGrid = [];\n\n      for (var _i = 0; _i < snapGrid.length; _i += 1) {\n        var slidesGridItem = snapGrid[_i];\n        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n\n      snapGrid = newSlidesGrid;\n    }\n  } // Remove last grid elements depending on width\n\n\n  if (!params.centeredSlides) {\n    newSlidesGrid = [];\n\n    for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {\n      var _slidesGridItem = snapGrid[_i2];\n      if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);\n\n      if (snapGrid[_i2] <= 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    if (swiper.isHorizontal()) {\n      if (rtl) slides.filter(slidesForMargin).css({\n        marginLeft: spaceBetween + \"px\"\n      });else slides.filter(slidesForMargin).css({\n        marginRight: spaceBetween + \"px\"\n      });\n    } else slides.filter(slidesForMargin).css({\n      marginBottom: spaceBetween + \"px\"\n    });\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    var allSlidesSize = 0;\n    slidesSizesGrid.forEach(function (slideSizeValue) {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    var maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map(function (snap) {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    var _allSlidesSize = 0;\n    slidesSizesGrid.forEach(function (slideSizeValue) {\n      _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    _allSlidesSize -= params.spaceBetween;\n\n    if (_allSlidesSize < swiperSize) {\n      var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;\n      snapGrid.forEach(function (snap, snapIndex) {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach(function (snap, snapIndex) {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  extend(swiper, {\n    slides: slides,\n    snapGrid: snapGrid,\n    slidesGrid: slidesGrid,\n    slidesSizesGrid: slidesSizesGrid\n  });\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n\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 || params.watchSlidesVisibility) {\n    swiper.updateSlidesOffset();\n  }\n}\n\nfunction updateAutoHeight(speed) {\n  var swiper = this;\n  var activeSlides = [];\n  var newHeight = 0;\n  var i;\n\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\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(function (slide) {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        var index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) break;\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    }\n  } else {\n    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\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      var 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\nfunction updateSlidesOffset() {\n  var swiper = this;\n  var slides = swiper.slides;\n\n  for (var i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}\n\nfunction updateSlidesProgress(translate) {\n  if (translate === void 0) {\n    translate = this && this.translate || 0;\n  }\n\n  var swiper = this;\n  var params = swiper.params;\n  var slides = swiper.slides,\n      rtl = swiper.rtlTranslate;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  var offsetCenter = -translate;\n  if (rtl) offsetCenter = translate; // Visible Slides\n\n  slides.removeClass(params.slideVisibleClass);\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (var i = 0; i < slides.length; i += 1) {\n    var slide = slides[i];\n    var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n\n    if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {\n      var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n      var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n      var 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\n    slide.progress = rtl ? -slideProgress : slideProgress;\n  }\n\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}\n\nfunction updateProgress(translate) {\n  var swiper = this;\n\n  if (typeof translate === 'undefined') {\n    var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n\n  var params = swiper.params;\n  var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  var progress = swiper.progress,\n      isBeginning = swiper.isBeginning,\n      isEnd = swiper.isEnd;\n  var wasBeginning = isBeginning;\n  var 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  extend(swiper, {\n    progress: progress,\n    isBeginning: isBeginning,\n    isEnd: isEnd\n  });\n  if (params.watchSlidesProgress || params.watchSlidesVisibility || 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\nfunction updateSlidesClasses() {\n  var swiper = this;\n  var slides = swiper.slides,\n      params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      activeIndex = swiper.activeIndex,\n      realIndex = swiper.realIndex;\n  var isVirtual = swiper.virtual && params.virtual.enabled;\n  slides.removeClass(params.slideActiveClass + \" \" + params.slideNextClass + \" \" + params.slidePrevClass + \" \" + params.slideDuplicateActiveClass + \" \" + params.slideDuplicateNextClass + \" \" + params.slideDuplicatePrevClass);\n  var 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  var 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  var 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\nfunction updateActiveIndex(newActiveIndex) {\n  var swiper = this;\n  var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  var slidesGrid = swiper.slidesGrid,\n      snapGrid = swiper.snapGrid,\n      params = swiper.params,\n      previousIndex = swiper.activeIndex,\n      previousRealIndex = swiper.realIndex,\n      previousSnapIndex = swiper.snapIndex;\n  var activeIndex = newActiveIndex;\n  var snapIndex;\n\n  if (typeof activeIndex === 'undefined') {\n    for (var i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n          activeIndex = i;\n        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n          activeIndex = i + 1;\n        }\n      } else if (translate >= slidesGrid[i]) {\n        activeIndex = i;\n      }\n    } // 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    var 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  var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n  extend(swiper, {\n    snapIndex: snapIndex,\n    realIndex: realIndex,\n    previousIndex: previousIndex,\n    activeIndex: 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\nfunction updateClickedSlide(e) {\n  var swiper = this;\n  var params = swiper.params;\n  var slide = $(e.target).closest(\".\" + params.slideClass)[0];\n  var slideFound = false;\n\n  if (slide) {\n    for (var i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) slideFound = true;\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = $(slide).index();\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n\nvar update = {\n  updateSize: updateSize,\n  updateSlides: updateSlides,\n  updateAutoHeight: updateAutoHeight,\n  updateSlidesOffset: updateSlidesOffset,\n  updateSlidesProgress: updateSlidesProgress,\n  updateProgress: updateProgress,\n  updateSlidesClasses: updateSlidesClasses,\n  updateActiveIndex: updateActiveIndex,\n  updateClickedSlide: updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n  if (axis === void 0) {\n    axis = this.isHorizontal() ? 'x' : 'y';\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      rtl = swiper.rtlTranslate,\n      translate = swiper.translate,\n      $wrapperEl = swiper.$wrapperEl;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n\n  if (params.cssMode) {\n    return translate;\n  }\n\n  var currentTranslate = getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n  var swiper = this;\n  var rtl = swiper.rtlTranslate,\n      params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      wrapperEl = swiper.wrapperEl,\n      progress = swiper.progress;\n  var x = 0;\n  var y = 0;\n  var z = 0;\n\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    $wrapperEl.transform(\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\");\n  }\n\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n  var newProgress;\n  var 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\nfunction minTranslate() {\n  return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n  if (translate === void 0) {\n    translate = 0;\n  }\n\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  if (translateBounds === void 0) {\n    translateBounds = true;\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      wrapperEl = swiper.wrapperEl;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  var minTranslate = swiper.minTranslate();\n  var maxTranslate = swiper.maxTranslate();\n  var newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    var isH = swiper.isHorizontal();\n\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        var _wrapperEl$scrollTo;\n\n        wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\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\nvar translate = {\n  getTranslate: getSwiperTranslate,\n  setTranslate: setTranslate,\n  minTranslate: minTranslate,\n  maxTranslate: maxTranslate,\n  translateTo: translateTo\n};\n\nfunction setTransition(duration, byController) {\n  var swiper = this;\n\n  if (!swiper.params.cssMode) {\n    swiper.$wrapperEl.transition(duration);\n  }\n\n  swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionStart(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var activeIndex = swiper.activeIndex,\n      params = swiper.params,\n      previousIndex = swiper.previousIndex;\n  if (params.cssMode) return;\n\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  var 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('transitionStart');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionStart');\n      return;\n    }\n\n    swiper.emit('slideChangeTransitionStart');\n\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionStart');\n    } else {\n      swiper.emit('slidePrevTransitionStart');\n    }\n  }\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var activeIndex = swiper.activeIndex,\n      previousIndex = swiper.previousIndex,\n      params = swiper.params;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  var 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('transitionEnd');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionEnd');\n      return;\n    }\n\n    swiper.emit('slideChangeTransitionEnd');\n\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionEnd');\n    } else {\n      swiper.emit('slidePrevTransitionEnd');\n    }\n  }\n}\n\nvar transition = {\n  setTransition: setTransition,\n  transitionStart: transitionStart,\n  transitionEnd: transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal) {\n  if (index === void 0) {\n    index = 0;\n  }\n\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  var params = swiper.params,\n      snapGrid = swiper.snapGrid,\n      slidesGrid = swiper.slidesGrid,\n      previousIndex = swiper.previousIndex,\n      activeIndex = swiper.activeIndex,\n      rtl = swiper.rtlTranslate,\n      wrapperEl = swiper.wrapperEl;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  var 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  var translate = -snapGrid[snapIndex]; // Update progress\n\n  swiper.updateProgress(translate); // Normalize slideIndex\n\n  if (params.normalizeSlideIndex) {\n    for (var i = 0; i < slidesGrid.length; i += 1) {\n      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n        slideIndex = i;\n      }\n    }\n  } // 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  var 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    var isH = swiper.isHorizontal();\n    var t = -translate;\n\n    if (rtl) {\n      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n    }\n\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        var _wrapperEl$scrollTo;\n\n        wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\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\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n  if (index === void 0) {\n    index = 0;\n  }\n\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var 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\" */\nfunction slideNext(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      animating = swiper.animating;\n  var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\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\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  var params = swiper.params,\n      animating = swiper.animating,\n      snapGrid = swiper.snapGrid,\n      slidesGrid = swiper.slidesGrid,\n      rtlTranslate = swiper.rtlTranslate;\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  var 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  var normalizedTranslate = normalize(translate);\n  var normalizedSnapGrid = snapGrid.map(function (val) {\n    return normalize(val);\n  });\n  var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n  var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    snapGrid.forEach(function (snap) {\n      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n    });\n  }\n\n  var prevIndex;\n\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n  }\n\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  var swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n\n  if (threshold === void 0) {\n    threshold = 0.5;\n  }\n\n  var swiper = this;\n  var index = swiper.activeIndex;\n  var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    var currentSnap = swiper.snapGrid[snapIndex];\n    var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    var prevSnap = swiper.snapGrid[snapIndex - 1];\n    var _currentSnap = 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\nfunction slideToClickedSlide() {\n  var swiper = this;\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl;\n  var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  var slideToIndex = swiper.clickedIndex;\n  var 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(function () {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl.children(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + params.slideDuplicateClass + \")\").eq(0).index();\n      nextTick(function () {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n\nvar slide = {\n  slideTo: slideTo,\n  slideToLoop: slideToLoop,\n  slideNext: slideNext,\n  slidePrev: slidePrev,\n  slideReset: slideReset,\n  slideToClosest: slideToClosest,\n  slideToClickedSlide: slideToClickedSlide\n};\n\nfunction loopCreate() {\n  var swiper = this;\n  var document = getDocument();\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides\n\n  $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass).remove();\n  var slides = $wrapperEl.children(\".\" + params.slideClass);\n\n  if (params.loopFillGroupWithBlank) {\n    var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (var i = 0; i < blankSlidesNum; i += 1) {\n        var 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  var prependSlides = [];\n  var appendSlides = [];\n  slides.each(function (el, index) {\n    var 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 (var _i = 0; _i < appendSlides.length; _i += 1) {\n    $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n\n  for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) {\n    $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}\n\nfunction loopFix() {\n  var swiper = this;\n  swiper.emit('beforeLoopFix');\n  var activeIndex = swiper.activeIndex,\n      slides = swiper.slides,\n      loopedSlides = swiper.loopedSlides,\n      allowSlidePrev = swiper.allowSlidePrev,\n      allowSlideNext = swiper.allowSlideNext,\n      snapGrid = swiper.snapGrid,\n      rtl = swiper.rtlTranslate;\n  var newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  var snapTranslate = -snapGrid[activeIndex];\n  var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n  if (activeIndex < loopedSlides) {\n    newIndex = slides.length - loopedSlides * 3 + activeIndex;\n    newIndex += loopedSlides;\n    var 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\n    var _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\nfunction loopDestroy() {\n  var swiper = this;\n  var $wrapperEl = swiper.$wrapperEl,\n      params = swiper.params,\n      slides = swiper.slides;\n  $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \",.\" + params.slideClass + \".\" + params.slideBlankClass).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}\n\nvar loop = {\n  loopCreate: loopCreate,\n  loopFix: loopFix,\n  loopDestroy: loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n  var swiper = this;\n  if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  var el = swiper.el;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n\nfunction unsetGrabCursor() {\n  var swiper = this;\n\n  if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n\n  swiper.el.style.cursor = '';\n}\n\nvar grabCursor = {\n  setGrabCursor: setGrabCursor,\n  unsetGrabCursor: unsetGrabCursor\n};\n\nfunction appendSlide(slides) {\n  var swiper = this;\n  var $wrapperEl = swiper.$wrapperEl,\n      params = swiper.params;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (var i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && swiper.support.observer)) {\n    swiper.update();\n  }\n}\n\nfunction prependSlide(slides) {\n  var swiper = this;\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      activeIndex = swiper.activeIndex;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n\n  var newActiveIndex = activeIndex + 1;\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (var i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.prepend(slides[i]);\n    }\n\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 && swiper.support.observer)) {\n    swiper.update();\n  }\n\n  swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide(index, slides) {\n  var swiper = this;\n  var $wrapperEl = swiper.$wrapperEl,\n      params = swiper.params,\n      activeIndex = swiper.activeIndex;\n  var activeIndexBuffer = activeIndex;\n\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n  }\n\n  var 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  var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n  var slidesBuffer = [];\n\n  for (var i = baseLength - 1; i >= index; i -= 1) {\n    var currentSlide = swiper.slides.eq(i);\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (var _i = 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 (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) {\n    $wrapperEl.append(slidesBuffer[_i2]);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && swiper.support.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\nfunction removeSlide(slidesIndexes) {\n  var swiper = this;\n  var params = swiper.params,\n      $wrapperEl = swiper.$wrapperEl,\n      activeIndex = swiper.activeIndex;\n  var activeIndexBuffer = activeIndex;\n\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n  }\n\n  var newActiveIndex = activeIndexBuffer;\n  var indexToRemove;\n\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (var i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n\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 && swiper.support.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\nfunction removeAllSlides() {\n  var swiper = this;\n  var slidesIndexes = [];\n\n  for (var i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n\n  swiper.removeSlide(slidesIndexes);\n}\n\nvar manipulation = {\n  appendSlide: appendSlide,\n  prependSlide: prependSlide,\n  addSlide: addSlide,\n  removeSlide: removeSlide,\n  removeAllSlides: removeAllSlides\n};\n\nfunction onTouchStart(event) {\n  var swiper = this;\n  var document = getDocument();\n  var window = getWindow();\n  var data = swiper.touchEventsData;\n  var params = swiper.params,\n      touches = swiper.touches;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n\n  var e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  var $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n\n  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : \".\" + params.noSwipingClass)[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  var startX = touches.currentX;\n  var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.screen.width - edgeSwipeThreshold)) {\n    return;\n  }\n\n  extend(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    var preventDefault = true;\n    if ($targetEl.is(data.formElements)) preventDefault = false;\n\n    if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) {\n      document.activeElement.blur();\n    }\n\n    var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n    if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n      e.preventDefault();\n    }\n  }\n\n  swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n  var document = getDocument();\n  var swiper = this;\n  var data = swiper.touchEventsData;\n  var params = swiper.params,\n      touches = swiper.touches,\n      rtl = swiper.rtlTranslate;\n  var 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  var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\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      extend(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.formElements)) {\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  var diffX = touches.currentX - touches.startX;\n  var diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    var touchAngle;\n\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) {\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  var 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  var disableParentSwiper = true;\n  var 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 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);\n  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);\n  }\n\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  } // 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  } // 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.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n\n  if (params.freeMode) {\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime\n      });\n    }\n\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: now()\n    });\n  } // Update progress\n\n\n  swiper.updateProgress(data.currentTranslate); // Update translate\n\n  swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n  var swiper = this;\n  var data = swiper.touchEventsData;\n  var params = swiper.params,\n      touches = swiper.touches,\n      rtl = swiper.rtlTranslate,\n      $wrapperEl = swiper.$wrapperEl,\n      slidesGrid = swiper.slidesGrid,\n      snapGrid = swiper.snapGrid;\n  var 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  var touchEndTime = now();\n  var 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(function () {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  var 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 (params.freeMode) {\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.freeModeMomentum) {\n      if (data.velocities.length > 1) {\n        var lastMoveEvent = data.velocities.pop();\n        var velocityEvent = data.velocities.pop();\n        var distance = lastMoveEvent.position - velocityEvent.position;\n        var time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n\n        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\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.freeModeMomentumVelocityRatio;\n      data.velocities.length = 0;\n      var momentumDuration = 1000 * params.freeModeMomentumRatio;\n      var momentumDistance = swiper.velocity * momentumDuration;\n      var newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n      var doBounce = false;\n      var afterBouncePosition;\n      var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n      var needsLoopFix;\n\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeModeMomentumBounce) {\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.freeModeMomentumBounce) {\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.freeModeSticky) {\n        var nextSlide;\n\n        for (var j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n          newPosition = snapGrid[nextSlide];\n        } else {\n          newPosition = snapGrid[nextSlide - 1];\n        }\n\n        newPosition = -newPosition;\n      }\n\n      if (needsLoopFix) {\n        swiper.once('transitionEnd', function () {\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.freeModeSticky) {\n          // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (params.freeModeMomentumBounce && doBounce) {\n        swiper.updateProgress(afterBouncePosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        swiper.animating = true;\n        $wrapperEl.transitionEnd(function () {\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n          swiper.emit('momentumBounce');\n          swiper.setTransition(params.speed);\n          setTimeout(function () {\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }, 0);\n        });\n      } else if (swiper.velocity) {\n        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n\n        if (!swiper.animating) {\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(function () {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.updateProgress(newPosition);\n      }\n\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeModeSticky) {\n      swiper.slideToClosest();\n      return;\n    }\n\n    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n\n    return;\n  } // Find current slide\n\n\n  var stopIndex = 0;\n  var groupSize = swiper.slidesSizesGrid[0];\n\n  for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    var _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  var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  var 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    var 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\nfunction onResize() {\n  var swiper = this;\n  var params = swiper.params,\n      el = swiper.el;\n  if (el && el.offsetWidth === 0) return; // Breakpoints\n\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  } // Save locks\n\n\n  var allowSlideNext = swiper.allowSlideNext,\n      allowSlidePrev = swiper.allowSlidePrev,\n      snapGrid = swiper.snapGrid; // 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\nfunction onClick(e) {\n  var swiper = this;\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\nfunction onScroll() {\n  var swiper = this;\n  var wrapperEl = swiper.wrapperEl,\n      rtlTranslate = swiper.rtlTranslate;\n  swiper.previousTranslate = swiper.translate;\n\n  if (swiper.isHorizontal()) {\n    if (rtlTranslate) {\n      swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;\n    } else {\n      swiper.translate = -wrapperEl.scrollLeft;\n    }\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  var newProgress;\n  var 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\nvar dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n  var swiper = this;\n  var document = getDocument();\n  var params = swiper.params,\n      touchEvents = swiper.touchEvents,\n      el = swiper.el,\n      wrapperEl = swiper.wrapperEl,\n      device = swiper.device,\n      support = swiper.support;\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  var capture = !!params.nested; // Touch Events\n\n  if (!support.touch && support.pointerEvents) {\n    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (support.touch) {\n      var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n        passive: false,\n        capture: capture\n      } : capture);\n      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n      if (touchEvents.cancel) {\n        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n\n      if (!dummyEventAttached) {\n        document.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n    }\n\n    if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n      el.addEventListener('mousedown', swiper.onTouchStart, false);\n      document.addEventListener('mousemove', swiper.onTouchMove, capture);\n      document.addEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  } // Prevent Links Clicks\n\n\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.addEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.addEventListener('scroll', swiper.onScroll);\n  } // Resize handler\n\n\n  if (params.updateOnWindowResize) {\n    swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper.on('observerUpdate', onResize, true);\n  }\n}\n\nfunction detachEvents() {\n  var swiper = this;\n  var document = getDocument();\n  var params = swiper.params,\n      touchEvents = swiper.touchEvents,\n      el = swiper.el,\n      wrapperEl = swiper.wrapperEl,\n      device = swiper.device,\n      support = swiper.support;\n  var capture = !!params.nested; // Touch Events\n\n  if (!support.touch && support.pointerEvents) {\n    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (support.touch) {\n      var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? {\n        passive: true,\n        capture: false\n      } : false;\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n      if (touchEvents.cancel) {\n        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n    }\n\n    if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n      el.removeEventListener('mousedown', swiper.onTouchStart, false);\n      document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n      document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  } // Prevent Links Clicks\n\n\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.removeEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.removeEventListener('scroll', swiper.onScroll);\n  } // Resize handler\n\n\n  swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);\n}\n\nvar events = {\n  attachEvents: attachEvents,\n  detachEvents: detachEvents\n};\n\nfunction setBreakpoint() {\n  var swiper = this;\n  var activeIndex = swiper.activeIndex,\n      initialized = swiper.initialized,\n      _swiper$loopedSlides = swiper.loopedSlides,\n      loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,\n      params = swiper.params,\n      $el = swiper.$el;\n  var breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n  var breakpoint = swiper.getBreakpoint(breakpoints);\n\n  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n    var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n\n    if (breakpointOnlyParams) {\n      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {\n        var paramValue = breakpointOnlyParams[param];\n        if (typeof paramValue === 'undefined') return;\n\n        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n          breakpointOnlyParams[param] = 'auto';\n        } else if (param === 'slidesPerView') {\n          breakpointOnlyParams[param] = parseFloat(paramValue);\n        } else {\n          breakpointOnlyParams[param] = parseInt(paramValue, 10);\n        }\n      });\n    }\n\n    var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n    var wasMultiRow = params.slidesPerColumn > 1;\n    var isMultiRow = breakpointParams.slidesPerColumn > 1;\n\n    if (wasMultiRow && !isMultiRow) {\n      $el.removeClass(params.containerModifierClass + \"multirow \" + params.containerModifierClass + \"multirow-column\");\n      swiper.emitContainerClasses();\n    } else if (!wasMultiRow && isMultiRow) {\n      $el.addClass(params.containerModifierClass + \"multirow\");\n\n      if (breakpointParams.slidesPerColumnFill === 'column') {\n        $el.addClass(params.containerModifierClass + \"multirow-column\");\n      }\n\n      swiper.emitContainerClasses();\n    }\n\n    var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n    var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n    if (directionChanged && initialized) {\n      swiper.changeDirection();\n    }\n\n    extend(swiper.params, breakpointParams);\n    extend(swiper, {\n      allowTouchMove: swiper.params.allowTouchMove,\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev\n    });\n    swiper.currentBreakpoint = breakpoint;\n\n    if (needsReLoop && initialized) {\n      swiper.loopDestroy();\n      swiper.loopCreate();\n      swiper.updateSlides();\n      swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n    }\n\n    swiper.emit('breakpoint', breakpointParams);\n  }\n}\n\nfunction getBreakpoints(breakpoints) {\n  var window = getWindow(); // Get breakpoint for window width\n\n  if (!breakpoints) return undefined;\n  var breakpoint = false;\n  var points = Object.keys(breakpoints).map(function (point) {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      var minRatio = parseFloat(point.substr(1));\n      var value = window.innerHeight * minRatio;\n      return {\n        value: value,\n        point: point\n      };\n    }\n\n    return {\n      value: point,\n      point: point\n    };\n  });\n  points.sort(function (a, b) {\n    return parseInt(a.value, 10) - parseInt(b.value, 10);\n  });\n\n  for (var i = 0; i < points.length; i += 1) {\n    var _points$i = points[i],\n        point = _points$i.point,\n        value = _points$i.value;\n\n    if (value <= window.innerWidth) {\n      breakpoint = point;\n    }\n  }\n\n  return breakpoint || 'max';\n}\n\nvar breakpoints = {\n  setBreakpoint: setBreakpoint,\n  getBreakpoint: getBreakpoints\n};\n\nfunction addClasses() {\n  var swiper = this;\n  var classNames = swiper.classNames,\n      params = swiper.params,\n      rtl = swiper.rtl,\n      $el = swiper.$el,\n      device = swiper.device;\n  var suffixes = [];\n  suffixes.push('initialized');\n  suffixes.push(params.direction);\n\n  if (params.freeMode) {\n    suffixes.push('free-mode');\n  }\n\n  if (params.autoHeight) {\n    suffixes.push('autoheight');\n  }\n\n  if (rtl) {\n    suffixes.push('rtl');\n  }\n\n  if (params.slidesPerColumn > 1) {\n    suffixes.push('multirow');\n\n    if (params.slidesPerColumnFill === 'column') {\n      suffixes.push('multirow-column');\n    }\n  }\n\n  if (device.android) {\n    suffixes.push('android');\n  }\n\n  if (device.ios) {\n    suffixes.push('ios');\n  }\n\n  if (params.cssMode) {\n    suffixes.push('css-mode');\n  }\n\n  suffixes.forEach(function (suffix) {\n    classNames.push(params.containerModifierClass + suffix);\n  });\n  $el.addClass(classNames.join(' '));\n  swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n  var swiper = this;\n  var $el = swiper.$el,\n      classNames = swiper.classNames;\n  $el.removeClass(classNames.join(' '));\n  swiper.emitContainerClasses();\n}\n\nvar classes = {\n  addClasses: addClasses,\n  removeClasses: removeClasses\n};\n\nfunction loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n  var window = getWindow();\n  var image;\n\n  function onReady() {\n    if (callback) callback();\n  }\n\n  var 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\nfunction preloadImages() {\n  var 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 (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    var 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\nvar images = {\n  loadImage: loadImage,\n  preloadImages: preloadImages\n};\n\nfunction checkOverflow() {\n  var swiper = this;\n  var params = swiper.params;\n  var wasLocked = swiper.isLocked;\n  var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;\n\n  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n    swiper.isLocked = lastSlidePosition <= swiper.size;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  swiper.allowSlideNext = !swiper.isLocked;\n  swiper.allowSlidePrev = !swiper.isLocked; // events\n\n  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n    if (swiper.navigation) swiper.navigation.update();\n  }\n}\n\nvar checkOverflow$1 = {\n  checkOverflow: checkOverflow\n};\n\nvar defaults = {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'container',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\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  // Free mode\n  freeMode: false,\n  freeModeMomentum: true,\n  freeModeMomentumRatio: 1,\n  freeModeMomentumBounce: true,\n  freeModeMomentumBounceRatio: 1,\n  freeModeMomentumVelocityRatio: 1,\n  freeModeSticky: false,\n  freeModeMinimumVelocity: 0.02,\n  // 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  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerColumn: 1,\n  slidesPerColumnFill: 'column',\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\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: false,\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  watchSlidesVisibility: 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-container-',\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\nvar prototypes = {\n  modular: modular,\n  eventsEmitter: eventsEmitter,\n  update: update,\n  translate: translate,\n  transition: transition,\n  slide: slide,\n  loop: loop,\n  grabCursor: grabCursor,\n  manipulation: manipulation,\n  events: events,\n  breakpoints: breakpoints,\n  checkOverflow: checkOverflow$1,\n  classes: classes,\n  images: images\n};\nvar extendedDefaults = {};\n\nvar Swiper = /*#__PURE__*/function () {\n  function Swiper() {\n    var el;\n    var params;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n      params = args[0];\n    } else {\n      el = args[0];\n      params = args[1];\n    }\n\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el; // Swiper Instance\n\n    var swiper = this;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n    Object.keys(prototypes).forEach(function (prototypeGroup) {\n      Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n        if (!Swiper.prototype[protoMethod]) {\n          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n        }\n      });\n    });\n\n    if (typeof swiper.modules === 'undefined') {\n      swiper.modules = {};\n    }\n\n    Object.keys(swiper.modules).forEach(function (moduleName) {\n      var module = swiper.modules[moduleName];\n\n      if (module.params) {\n        var moduleParamName = Object.keys(module.params)[0];\n        var moduleParams = module.params[moduleParamName];\n        if (typeof moduleParams !== 'object' || moduleParams === null) return;\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n\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      }\n    }); // Extend defaults with modules params\n\n    var swiperParams = extend({}, defaults);\n    swiper.useParams(swiperParams); // 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(function (eventName) {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    } // Save Dom lib\n\n\n    swiper.$ = $; // Find el\n\n    var $el = $(swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return undefined;\n    }\n\n    if ($el.length > 1) {\n      var swipers = [];\n      $el.each(function (containerEl) {\n        var newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    }\n\n    el.swiper = swiper; // Find Wrapper\n\n    var $wrapperEl;\n\n    if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n      $wrapperEl = $(el.shadowRoot.querySelector(\".\" + swiper.params.wrapperClass)); // Children needs to return slot items\n\n      $wrapperEl.children = function (options) {\n        return $el.children(options);\n      };\n    } else {\n      $wrapperEl = $el.children(\".\" + swiper.params.wrapperClass);\n    } // Extend Swiper\n\n\n    extend(swiper, {\n      $el: $el,\n      el: el,\n      $wrapperEl: $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n      // Classes\n      classNames: [],\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n      // isDirection\n      isHorizontal: function isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical: function isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n      // 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        var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        var desktop = ['mousedown', 'mousemove', 'mouseup'];\n\n        if (swiper.support.pointerEvents) {\n          desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        }\n\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3]\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2]\n        };\n        return 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        formElements: 'input, select, option, textarea, button, video, label',\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    }); // Install Modules\n\n    swiper.useModules();\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  var _proto = Swiper.prototype;\n\n  _proto.emitContainerClasses = function emitContainerClasses() {\n    var swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    var classes = swiper.el.className.split(' ').filter(function (className) {\n      return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', classes.join(' '));\n  };\n\n  _proto.emitSlidesClasses = function emitSlidesClasses() {\n    var swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    swiper.slides.each(function (slideEl) {\n      var classes = slideEl.className.split(' ').filter(function (className) {\n        return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n      });\n      swiper.emit('_slideClass', slideEl, classes.join(' '));\n    });\n  };\n\n  _proto.slidesPerViewDynamic = function slidesPerViewDynamic() {\n    var swiper = this;\n    var params = swiper.params,\n        slides = swiper.slides,\n        slidesGrid = swiper.slidesGrid,\n        swiperSize = swiper.size,\n        activeIndex = swiper.activeIndex;\n    var spv = 1;\n\n    if (params.centeredSlides) {\n      var slideSize = slides[activeIndex].swiperSlideSize;\n      var breakLoop;\n\n      for (var i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n\n      for (var _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      for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) {\n        if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) {\n          spv += 1;\n        }\n      }\n    }\n\n    return spv;\n  };\n\n  _proto.update = function update() {\n    var swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    var snapGrid = swiper.snapGrid,\n        params = swiper.params; // 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      var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n\n    var translated;\n\n    if (swiper.params.freeMode) {\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  _proto.changeDirection = function changeDirection(newDirection, needUpdate) {\n    if (needUpdate === void 0) {\n      needUpdate = true;\n    }\n\n    var swiper = this;\n    var 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(function (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  _proto.init = function init() {\n    var swiper = this;\n    if (swiper.initialized) return;\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) {\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);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n    } // Attach events\n\n\n    swiper.attachEvents(); // Init Flag\n\n    swiper.initialized = true; // Emit\n\n    swiper.emit('init');\n  };\n\n  _proto.destroy = function destroy(deleteInstance, cleanStyles) {\n    if (deleteInstance === void 0) {\n      deleteInstance = true;\n    }\n\n    if (cleanStyles === void 0) {\n      cleanStyles = true;\n    }\n\n    var swiper = this;\n    var params = swiper.params,\n        $el = swiper.$el,\n        $wrapperEl = swiper.$wrapperEl,\n        slides = swiper.slides;\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(function (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  Swiper.extendDefaults = function extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  };\n\n  Swiper.installModule = function installModule(module) {\n    if (!Swiper.prototype.modules) Swiper.prototype.modules = {};\n    var name = module.name || Object.keys(Swiper.prototype.modules).length + \"_\" + now();\n    Swiper.prototype.modules[name] = module;\n  };\n\n  Swiper.use = function use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(function (m) {\n        return Swiper.installModule(m);\n      });\n      return Swiper;\n    }\n\n    Swiper.installModule(module);\n    return Swiper;\n  };\n\n  _createClass(Swiper, null, [{\n    key: \"extendedDefaults\",\n    get: function get() {\n      return extendedDefaults;\n    }\n  }, {\n    key: \"defaults\",\n    get: function get() {\n      return defaults;\n    }\n  }]);\n\n  return Swiper;\n}();\n\nvar Resize = {\n  name: 'resize',\n  create: function create() {\n    var swiper = this;\n    extend(swiper, {\n      resize: {\n        resizeHandler: function resizeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('beforeResize');\n          swiper.emit('resize');\n        },\n        orientationChangeHandler: function orientationChangeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('orientationchange');\n        }\n      }\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      var window = getWindow(); // Emit resize\n\n      window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange\n\n      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n    destroy: function destroy(swiper) {\n      var window = getWindow();\n      window.removeEventListener('resize', swiper.resize.resizeHandler);\n      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    }\n  }\n};\n\nvar Observer = {\n  attach: function attach(target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var window = getWindow();\n    var swiper = this;\n    var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    var observer = new ObserverFunc(function (mutations) {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (mutations.length === 1) {\n        swiper.emit('observerUpdate', mutations[0]);\n        return;\n      }\n\n      var observerUpdate = function observerUpdate() {\n        swiper.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    swiper.observer.observers.push(observer);\n  },\n  init: function init() {\n    var swiper = this;\n    if (!swiper.support.observer || !swiper.params.observer) return;\n\n    if (swiper.params.observeParents) {\n      var containerParents = swiper.$el.parents();\n\n      for (var i = 0; i < containerParents.length; i += 1) {\n        swiper.observer.attach(containerParents[i]);\n      }\n    } // Observe container\n\n\n    swiper.observer.attach(swiper.$el[0], {\n      childList: swiper.params.observeSlideChildren\n    }); // Observe wrapper\n\n    swiper.observer.attach(swiper.$wrapperEl[0], {\n      attributes: false\n    });\n  },\n  destroy: function destroy() {\n    var swiper = this;\n    swiper.observer.observers.forEach(function (observer) {\n      observer.disconnect();\n    });\n    swiper.observer.observers = [];\n  }\n};\nvar Observer$1 = {\n  name: 'observer',\n  params: {\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  },\n  create: function create() {\n    var swiper = this;\n    bindModuleMethods(swiper, {\n      observer: _extends(_extends({}, Observer), {}, {\n        observers: []\n      })\n    });\n  },\n  on: {\n    init: function init(swiper) {\n      swiper.observer.init();\n    },\n    destroy: function destroy(swiper) {\n      swiper.observer.destroy();\n    }\n  }\n};\n\n// Swiper Class\nvar components = [Resize, Observer$1];\nSwiper.use(components);\n\nexport default Swiper;\nexport { Swiper };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","export default function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(JSON.parse(s.responseText))},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}\n//# sourceMappingURL=unfetch.mjs.map\n","import * as cookie from 'cookie';\r\nimport { hasDocumentCookie, parseCookies, readCookie } from './utils';\r\n// We can't please Rollup and TypeScript at the same time\r\n// Only way to make both of them work\r\nvar objectAssign = require('object-assign');\r\nvar Cookies = /** @class */ (function () {\r\n    function Cookies(cookies, options) {\r\n        var _this = this;\r\n        this.changeListeners = [];\r\n        this.HAS_DOCUMENT_COOKIE = false;\r\n        this.cookies = parseCookies(cookies, options);\r\n        new Promise(function () {\r\n            _this.HAS_DOCUMENT_COOKIE = hasDocumentCookie();\r\n        }).catch(function () { });\r\n    }\r\n    Cookies.prototype._updateBrowserValues = function (parseOptions) {\r\n        if (!this.HAS_DOCUMENT_COOKIE) {\r\n            return;\r\n        }\r\n        this.cookies = cookie.parse(document.cookie, parseOptions);\r\n    };\r\n    Cookies.prototype._emitChange = function (params) {\r\n        for (var i = 0; i < this.changeListeners.length; ++i) {\r\n            this.changeListeners[i](params);\r\n        }\r\n    };\r\n    Cookies.prototype.get = function (name, options, parseOptions) {\r\n        if (options === void 0) { options = {}; }\r\n        this._updateBrowserValues(parseOptions);\r\n        return readCookie(this.cookies[name], options);\r\n    };\r\n    Cookies.prototype.getAll = function (options, parseOptions) {\r\n        if (options === void 0) { options = {}; }\r\n        this._updateBrowserValues(parseOptions);\r\n        var result = {};\r\n        for (var name_1 in this.cookies) {\r\n            result[name_1] = readCookie(this.cookies[name_1], options);\r\n        }\r\n        return result;\r\n    };\r\n    Cookies.prototype.set = function (name, value, options) {\r\n        var _a;\r\n        if (typeof value === 'object') {\r\n            value = JSON.stringify(value);\r\n        }\r\n        this.cookies = objectAssign({}, this.cookies, (_a = {}, _a[name] = value, _a));\r\n        if (this.HAS_DOCUMENT_COOKIE) {\r\n            document.cookie = cookie.serialize(name, value, options);\r\n        }\r\n        this._emitChange({ name: name, value: value, options: options });\r\n    };\r\n    Cookies.prototype.remove = function (name, options) {\r\n        var finalOptions = (options = objectAssign({}, options, {\r\n            expires: new Date(1970, 1, 1, 0, 0, 1),\r\n            maxAge: 0\r\n        }));\r\n        this.cookies = objectAssign({}, this.cookies);\r\n        delete this.cookies[name];\r\n        if (this.HAS_DOCUMENT_COOKIE) {\r\n            document.cookie = cookie.serialize(name, '', finalOptions);\r\n        }\r\n        this._emitChange({ name: name, value: undefined, options: options });\r\n    };\r\n    Cookies.prototype.addChangeListener = function (callback) {\r\n        this.changeListeners.push(callback);\r\n    };\r\n    Cookies.prototype.removeChangeListener = function (callback) {\r\n        var idx = this.changeListeners.indexOf(callback);\r\n        if (idx >= 0) {\r\n            this.changeListeners.splice(idx, 1);\r\n        }\r\n    };\r\n    return Cookies;\r\n}());\r\nexport default Cookies;\r\n","import Cookies from './Cookies';\r\nexport default Cookies;\r\n","import * as cookie from 'cookie';\r\nexport function hasDocumentCookie() {\r\n    // Can we get/set cookies on document.cookie?\r\n    return typeof document === 'object' && typeof document.cookie === 'string';\r\n}\r\nexport function cleanCookies() {\r\n    document.cookie.split(';').forEach(function (c) {\r\n        document.cookie = c\r\n            .replace(/^ +/, '')\r\n            .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/');\r\n    });\r\n}\r\nexport function parseCookies(cookies, options) {\r\n    if (typeof cookies === 'string') {\r\n        return cookie.parse(cookies, options);\r\n    }\r\n    else if (typeof cookies === 'object' && cookies !== null) {\r\n        return cookies;\r\n    }\r\n    else {\r\n        return {};\r\n    }\r\n}\r\nexport function isParsingCookie(value, doNotParse) {\r\n    if (typeof doNotParse === 'undefined') {\r\n        // We guess if the cookie start with { or [, it has been serialized\r\n        doNotParse =\r\n            !value || (value[0] !== '{' && value[0] !== '[' && value[0] !== '\"');\r\n    }\r\n    return !doNotParse;\r\n}\r\nexport function readCookie(value, options) {\r\n    if (options === void 0) { options = {}; }\r\n    var cleanValue = cleanupCookieValue(value);\r\n    if (isParsingCookie(cleanValue, options.doNotParse)) {\r\n        try {\r\n            return JSON.parse(cleanValue);\r\n        }\r\n        catch (e) {\r\n            // At least we tried\r\n        }\r\n    }\r\n    // Ignore clean value if we failed the deserialization\r\n    // It is not relevant anymore to trim those values\r\n    return value;\r\n}\r\nfunction cleanupCookieValue(value) {\r\n    // express prepend j: before serializing a cookie\r\n    if (value && value[0] === 'j' && value[1] === ':') {\r\n        return value.substr(2);\r\n    }\r\n    return value;\r\n}\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n","'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]]\n  ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","(function(window) {\n\tvar YouTubeIframeLoader = {\n\t\tsrc: 'https://www.youtube.com/iframe_api',\n\t\tloading: false,\n\t\tloaded: false,\n\t\tlisteners: [],\n\n\t\tload: function(callback) {\n\t\t\tvar _this = this;\n\t\t\tthis.listeners.push(callback);\n\n\t\t\tif(this.loaded) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t_this.done();\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.loading = true;\n\n\t\t\twindow.onYouTubeIframeAPIReady = function() {\n\t\t\t\t_this.loaded = true;\n\t\t\t\t_this.done();\n\t\t\t};\n\n\t\t\tvar script = document.createElement('script');\n\t\t\tscript.type = 'text/javascript';\n\t\t\tscript.src = this.src;\n\t\t\tdocument.body.appendChild(script);\n\t\t},\n\n\t\tdone: function() {\n\t\t\tdelete window.onYouTubeIframeAPIReady;\n\n\t\t\twhile(this.listeners.length) {\n\t\t\t\tthis.listeners.pop()(window.YT);\n\t\t\t}\n\t\t}\n\t};\n\n\tif(typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = YouTubeIframeLoader;\n\t} else {\n\t\twindow.YouTubeIframeLoader = YouTubeIframeLoader;\n\t}\n}(window));\n","import zenObservable from 'zen-observable';\n\nvar Observable = zenObservable;\n\nexport default Observable;\nexport { Observable };\n//# sourceMappingURL=bundle.esm.js.map\n","module.exports = require('./lib/Observable.js').Observable;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Observable = void 0;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n  return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n  return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n  return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n  Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n  var value = obj[key];\n  if (value == null) return undefined;\n  if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n  return value;\n}\n\nfunction getSpecies(obj) {\n  var ctor = obj.constructor;\n\n  if (ctor !== undefined) {\n    ctor = ctor[SymbolSpecies];\n\n    if (ctor === null) {\n      ctor = undefined;\n    }\n  }\n\n  return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n  return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n  if (hostReportError.log) {\n    hostReportError.log(e);\n  } else {\n    setTimeout(function () {\n      throw e;\n    });\n  }\n}\n\nfunction enqueue(fn) {\n  Promise.resolve().then(function () {\n    try {\n      fn();\n    } catch (e) {\n      hostReportError(e);\n    }\n  });\n}\n\nfunction cleanupSubscription(subscription) {\n  var cleanup = subscription._cleanup;\n  if (cleanup === undefined) return;\n  subscription._cleanup = undefined;\n\n  if (!cleanup) {\n    return;\n  }\n\n  try {\n    if (typeof cleanup === 'function') {\n      cleanup();\n    } else {\n      var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n      if (unsubscribe) {\n        unsubscribe.call(cleanup);\n      }\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n}\n\nfunction closeSubscription(subscription) {\n  subscription._observer = undefined;\n  subscription._queue = undefined;\n  subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n  var queue = subscription._queue;\n\n  if (!queue) {\n    return;\n  }\n\n  subscription._queue = undefined;\n  subscription._state = 'ready';\n\n  for (var i = 0; i < queue.length; ++i) {\n    notifySubscription(subscription, queue[i].type, queue[i].value);\n    if (subscription._state === 'closed') break;\n  }\n}\n\nfunction notifySubscription(subscription, type, value) {\n  subscription._state = 'running';\n  var observer = subscription._observer;\n\n  try {\n    var m = getMethod(observer, type);\n\n    switch (type) {\n      case 'next':\n        if (m) m.call(observer, value);\n        break;\n\n      case 'error':\n        closeSubscription(subscription);\n        if (m) m.call(observer, value);else throw value;\n        break;\n\n      case 'complete':\n        closeSubscription(subscription);\n        if (m) m.call(observer);\n        break;\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n\n  if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n  if (subscription._state === 'closed') return;\n\n  if (subscription._state === 'buffering') {\n    subscription._queue.push({\n      type: type,\n      value: value\n    });\n\n    return;\n  }\n\n  if (subscription._state !== 'ready') {\n    subscription._state = 'buffering';\n    subscription._queue = [{\n      type: type,\n      value: value\n    }];\n    enqueue(function () {\n      return flushSubscription(subscription);\n    });\n    return;\n  }\n\n  notifySubscription(subscription, type, value);\n}\n\nvar Subscription =\n/*#__PURE__*/\nfunction () {\n  function Subscription(observer, subscriber) {\n    _classCallCheck(this, Subscription);\n\n    // ASSERT: observer is an object\n    // ASSERT: subscriber is callable\n    this._cleanup = undefined;\n    this._observer = observer;\n    this._queue = undefined;\n    this._state = 'initializing';\n    var subscriptionObserver = new SubscriptionObserver(this);\n\n    try {\n      this._cleanup = subscriber.call(undefined, subscriptionObserver);\n    } catch (e) {\n      subscriptionObserver.error(e);\n    }\n\n    if (this._state === 'initializing') this._state = 'ready';\n  }\n\n  _createClass(Subscription, [{\n    key: \"unsubscribe\",\n    value: function unsubscribe() {\n      if (this._state !== 'closed') {\n        closeSubscription(this);\n        cleanupSubscription(this);\n      }\n    }\n  }, {\n    key: \"closed\",\n    get: function () {\n      return this._state === 'closed';\n    }\n  }]);\n\n  return Subscription;\n}();\n\nvar SubscriptionObserver =\n/*#__PURE__*/\nfunction () {\n  function SubscriptionObserver(subscription) {\n    _classCallCheck(this, SubscriptionObserver);\n\n    this._subscription = subscription;\n  }\n\n  _createClass(SubscriptionObserver, [{\n    key: \"next\",\n    value: function next(value) {\n      onNotify(this._subscription, 'next', value);\n    }\n  }, {\n    key: \"error\",\n    value: function error(value) {\n      onNotify(this._subscription, 'error', value);\n    }\n  }, {\n    key: \"complete\",\n    value: function complete() {\n      onNotify(this._subscription, 'complete');\n    }\n  }, {\n    key: \"closed\",\n    get: function () {\n      return this._subscription._state === 'closed';\n    }\n  }]);\n\n  return SubscriptionObserver;\n}();\n\nvar Observable =\n/*#__PURE__*/\nfunction () {\n  function Observable(subscriber) {\n    _classCallCheck(this, Observable);\n\n    if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n    if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n    this._subscriber = subscriber;\n  }\n\n  _createClass(Observable, [{\n    key: \"subscribe\",\n    value: function subscribe(observer) {\n      if (typeof observer !== 'object' || observer === null) {\n        observer = {\n          next: observer,\n          error: arguments[1],\n          complete: arguments[2]\n        };\n      }\n\n      return new Subscription(observer, this._subscriber);\n    }\n  }, {\n    key: \"forEach\",\n    value: function forEach(fn) {\n      var _this = this;\n\n      return new Promise(function (resolve, reject) {\n        if (typeof fn !== 'function') {\n          reject(new TypeError(fn + ' is not a function'));\n          return;\n        }\n\n        function done() {\n          subscription.unsubscribe();\n          resolve();\n        }\n\n        var subscription = _this.subscribe({\n          next: function (value) {\n            try {\n              fn(value, done);\n            } catch (e) {\n              reject(e);\n              subscription.unsubscribe();\n            }\n          },\n          error: reject,\n          complete: resolve\n        });\n      });\n    }\n  }, {\n    key: \"map\",\n    value: function map(fn) {\n      var _this2 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n      var C = getSpecies(this);\n      return new C(function (observer) {\n        return _this2.subscribe({\n          next: function (value) {\n            try {\n              value = fn(value);\n            } catch (e) {\n              return observer.error(e);\n            }\n\n            observer.next(value);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            observer.complete();\n          }\n        });\n      });\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(fn) {\n      var _this3 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n      var C = getSpecies(this);\n      return new C(function (observer) {\n        return _this3.subscribe({\n          next: function (value) {\n            try {\n              if (!fn(value)) return;\n            } catch (e) {\n              return observer.error(e);\n            }\n\n            observer.next(value);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            observer.complete();\n          }\n        });\n      });\n    }\n  }, {\n    key: \"reduce\",\n    value: function reduce(fn) {\n      var _this4 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n      var C = getSpecies(this);\n      var hasSeed = arguments.length > 1;\n      var hasValue = false;\n      var seed = arguments[1];\n      var acc = seed;\n      return new C(function (observer) {\n        return _this4.subscribe({\n          next: function (value) {\n            var first = !hasValue;\n            hasValue = true;\n\n            if (!first || hasSeed) {\n              try {\n                acc = fn(acc, value);\n              } catch (e) {\n                return observer.error(e);\n              }\n            } else {\n              acc = value;\n            }\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n            observer.next(acc);\n            observer.complete();\n          }\n        });\n      });\n    }\n  }, {\n    key: \"concat\",\n    value: function concat() {\n      var _this5 = this;\n\n      for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n        sources[_key] = arguments[_key];\n      }\n\n      var C = getSpecies(this);\n      return new C(function (observer) {\n        var subscription;\n        var index = 0;\n\n        function startNext(next) {\n          subscription = next.subscribe({\n            next: function (v) {\n              observer.next(v);\n            },\n            error: function (e) {\n              observer.error(e);\n            },\n            complete: function () {\n              if (index === sources.length) {\n                subscription = undefined;\n                observer.complete();\n              } else {\n                startNext(C.from(sources[index++]));\n              }\n            }\n          });\n        }\n\n        startNext(_this5);\n        return function () {\n          if (subscription) {\n            subscription.unsubscribe();\n            subscription = undefined;\n          }\n        };\n      });\n    }\n  }, {\n    key: \"flatMap\",\n    value: function flatMap(fn) {\n      var _this6 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n      var C = getSpecies(this);\n      return new C(function (observer) {\n        var subscriptions = [];\n\n        var outer = _this6.subscribe({\n          next: function (value) {\n            if (fn) {\n              try {\n                value = fn(value);\n              } catch (e) {\n                return observer.error(e);\n              }\n            }\n\n            var inner = C.from(value).subscribe({\n              next: function (value) {\n                observer.next(value);\n              },\n              error: function (e) {\n                observer.error(e);\n              },\n              complete: function () {\n                var i = subscriptions.indexOf(inner);\n                if (i >= 0) subscriptions.splice(i, 1);\n                completeIfDone();\n              }\n            });\n            subscriptions.push(inner);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            completeIfDone();\n          }\n        });\n\n        function completeIfDone() {\n          if (outer.closed && subscriptions.length === 0) observer.complete();\n        }\n\n        return function () {\n          subscriptions.forEach(function (s) {\n            return s.unsubscribe();\n          });\n          outer.unsubscribe();\n        };\n      });\n    }\n  }, {\n    key: SymbolObservable,\n    value: function () {\n      return this;\n    }\n  }], [{\n    key: \"from\",\n    value: function from(x) {\n      var C = typeof this === 'function' ? this : Observable;\n      if (x == null) throw new TypeError(x + ' is not an object');\n      var method = getMethod(x, SymbolObservable);\n\n      if (method) {\n        var observable = method.call(x);\n        if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n        if (isObservable(observable) && observable.constructor === C) return observable;\n        return new C(function (observer) {\n          return observable.subscribe(observer);\n        });\n      }\n\n      if (hasSymbol('iterator')) {\n        method = getMethod(x, SymbolIterator);\n\n        if (method) {\n          return new C(function (observer) {\n            enqueue(function () {\n              if (observer.closed) return;\n              var _iteratorNormalCompletion = true;\n              var _didIteratorError = false;\n              var _iteratorError = undefined;\n\n              try {\n                for (var _iterator = method.call(x)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var _item = _step.value;\n                  observer.next(_item);\n                  if (observer.closed) return;\n                }\n              } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion && _iterator.return != null) {\n                    _iterator.return();\n                  }\n                } finally {\n                  if (_didIteratorError) {\n                    throw _iteratorError;\n                  }\n                }\n              }\n\n              observer.complete();\n            });\n          });\n        }\n      }\n\n      if (Array.isArray(x)) {\n        return new C(function (observer) {\n          enqueue(function () {\n            if (observer.closed) return;\n\n            for (var i = 0; i < x.length; ++i) {\n              observer.next(x[i]);\n              if (observer.closed) return;\n            }\n\n            observer.complete();\n          });\n        });\n      }\n\n      throw new TypeError(x + ' is not observable');\n    }\n  }, {\n    key: \"of\",\n    value: function of() {\n      for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        items[_key2] = arguments[_key2];\n      }\n\n      var C = typeof this === 'function' ? this : Observable;\n      return new C(function (observer) {\n        enqueue(function () {\n          if (observer.closed) return;\n\n          for (var i = 0; i < items.length; ++i) {\n            observer.next(items[i]);\n            if (observer.closed) return;\n          }\n\n          observer.complete();\n        });\n      });\n    }\n  }, {\n    key: SymbolSpecies,\n    get: function () {\n      return this;\n    }\n  }]);\n\n  return Observable;\n}();\n\nexports.Observable = Observable;\n\nif (hasSymbols()) {\n  Object.defineProperty(Observable, Symbol('extensions'), {\n    value: {\n      symbol: SymbolObservable,\n      hostReportError: hostReportError\n    },\n    configurable: true\n  });\n}"],"sourceRoot":""}