{"version":3,"file":"main.dadf94e04fd0977ceb21.js","mappings":"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","sources":["webpack:///../../node_modules/@honeybadger-io/js/dist/browser/honeybadger.js","webpack:///../../node_modules/@honeybadger-io/react/dist/honeybadger-react.esm.js","webpack:///../../node_modules/accounting/accounting.js","webpack:///../../config/webpack/availableLocales.js","webpack:///./boot/common/exportReact.js","webpack:///./boot/common/i18nSetup.js","webpack:///./boot/common/reactMount.js","webpack:///./boot/common/setMomentLocale.js","webpack:///./utils/getCookies.js","webpack:///./utils/cookieConsent.js","webpack:///../../node_modules/uuid/dist/esm-browser/stringify.js","webpack:///../../node_modules/uuid/dist/esm-browser/regex.js","webpack:///../../node_modules/uuid/dist/esm-browser/validate.js","webpack:///../../node_modules/uuid/dist/esm-browser/parse.js","webpack:///../../node_modules/uuid/dist/esm-browser/sha1.js","webpack:///../../node_modules/uuid/dist/esm-browser/v5.js","webpack:///../../node_modules/uuid/dist/esm-browser/v35.js","webpack:///./utils/trackingUserId.js","webpack:///./boot/main/globalSetup/analytics/remarketing.js","webpack:///./boot/main/globalSetup/initializeAnalytics.js","webpack:///./boot/main/globalSetup/external-tools.js","webpack:///./boot/main/globalSetup/foundation.js","webpack:///./boot/main/globalSetup/stickySidebar.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/display.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/catchUserErrors.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/monitor.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/polyfills.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/getGlobalObject.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/byteUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/getZoneJsOriginalValue.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/timer.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/functionUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/serialisation/jsonStringify.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/objectUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/context/customerDataTracker.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/typeUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/mergeInto.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/serialisation/sanitize.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/observable.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/context/contextManager.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/trackingConsent.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/addEventListener.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/context/storeContextManager.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/encoder.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/stackTrace/computeStackTrace.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/stackTrace/handlingStack.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/error/error.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/experimentalFeatures.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/intakeSites.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/numberUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/timeUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/sendToExtension.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/connectivity/connectivity.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/arrayUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/boundedBuffer.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/telemetry/rawTelemetryEvent.types.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/telemetry/telemetry.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/user/user.js","webpack:///../../node_modules/@datadog/browser-core/esm/boot/displayAlreadyInitializedError.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/stringUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/vital/vitalCollection.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/eventBridge.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/instrumentMethod.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/urlPolyfill.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/fetchObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/cookie.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/synthetics/syntheticsWorkerValues.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/browserDetection.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionStoreStrategy.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionConstants.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionStateValidation.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionState.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/oldCookiesMigration.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionInCookie.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/storeStrategies/sessionInLocalStorage.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionStoreOperations.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionStore.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/endpointBuilder.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/tags.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/transportConfiguration.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/configuration/configuration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/identifier.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/matchOption.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/crypto.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/tracer.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/sampler.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/configuration/configuration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/configuration/remoteConfiguration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/boot/preStartRum.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/plugins.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/pageExitObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/domMutationObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/error/error.types.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/eventRateLimiter/createEventRateLimiter.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/syntheticsContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/limitModification.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/assembly.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/abstractLifeCycle.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/lifeCycle.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/valueHistory.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/viewHistory.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/xhrObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/resourceUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/requestCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/performanceObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/utils/responseUtils.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/readBytesFromStream.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/discardNegativeDuration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/trackEventCounts.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/firstInputPolyfill.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/waitPageActivityEnd.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/polyfills.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/htmlDomUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/privacy.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/getActionNameFromElement.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/getSelectorFromElement.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/clickChain.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/listenActionEvents.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/computeFrustration.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/interactionSelectorCache.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/trackClickActions.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/action/actionCollection.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/error/trackRuntimeError.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/console/consoleObservable.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/report/reportObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/error/errorCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/error/trackConsoleError.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/error/trackReportError.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/requestIdleCallback.js","webpack:///../../node_modules/@datadog/browser-core/esm/tools/taskQueue.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/matchRequestResourceEntry.js","webpack:///../../node_modules/@datadog/browser-core/esm/browser/runOnReadyState.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/tracing/getDocumentTraceId.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/performanceUtils.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/retrieveInitialDocumentResourceTiming.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/resource/resourceCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackNavigationTimings.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstHidden.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackInitialViewMetrics.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackFirstInput.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/interactionCountPolyfill.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/viewportObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/scroll.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackScrollMetrics.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackCommonViewMetrics.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewMetrics/trackLoadingTime.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/trackViews.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/trackViewEventCounts.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/view/viewCollection.js","webpack:///../../node_modules/@datadog/browser-core/esm/domain/session/sessionManager.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/rumSessionManager.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/batch.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/sendWithRetryStrategy.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/httpRequest.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/flushController.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/transport/startRumBatch.js","webpack:///../../node_modules/@datadog/browser-core/esm/transport/startBatchWithReplica.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/urlContexts.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/locationChangeObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/featureFlagContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/startCustomerDataTelemetry.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/pageStateHistory.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/cookieObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/ciVisibilityContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/getSessionReplayUrl.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/replayStats.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationUtils.js","webpack:///../../node_modules/@datadog/browser-rum/esm/types/sessionReplayConstants.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeStyleSheets.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttribute.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttributes.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeNode.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeDocument.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/eventsUtils.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/viewports.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/assembly.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMove.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMouseInteraction.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackScroll.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewportResize.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMediaInteraction.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackStyleSheet.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFocus.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFrustration.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewEnd.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackInput.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/mutationBatch.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMutation.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/shadowRootsController.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/record.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/elementsScrollPositions.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/startFullSnapshots.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/record/recordIds.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segment.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segmentCollection.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/segmentCollection/buildReplayPayload.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/deflate/deflateEncoder.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/deflate/deflateWorker.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/isBrowserSupported.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/getSessionReplayLink.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/postStartStrategy.js","webpack:///../../node_modules/@datadog/browser-rum/esm/entries/main.js","webpack:///../../node_modules/@datadog/browser-core/esm/boot/init.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/recorderApi.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/preStartStrategy.js","webpack:///../../node_modules/@datadog/browser-rum/esm/boot/startRecording.js","webpack:///../../node_modules/@datadog/browser-rum/esm/domain/startRecordBridge.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/boot/rumPublicApi.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/commonContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/boot/startRum.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/transport/startRumEventBridge.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/browser/windowOpenObservable.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/displayContext.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/longAnimationFrame/longAnimationFrameCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/longTask/longTaskCollection.js","webpack:///../../node_modules/@datadog/browser-rum-core/esm/domain/contexts/internalContext.js","webpack:///./boot/main/globalSetup/setupDatadog.js","webpack:///./boot/main/globalSetup/setupHoneybadger.js","webpack:///./boot/main/globalSetup/index.js","webpack:///./admin/instructionVideoEmbed/components/InstructionVideoEmbed.js","webpack:///./boot/main/components.lazy.js","webpack:///./boot/main/exposeComponents.js","webpack:///./boot/main/actionEntryPoints.js","webpack:///./boot/main/hookActionSpecificSetup.js","webpack:///./boot/main/index.js","webpack:///./boot/vendor.js","webpack:///./boot/webpackPublicPath.js","webpack:///./common/components/Button.js","webpack:///./common/components/ErrorComponent.js","webpack:///./common/json/extract/match.js","webpack:///./common/json/extract/array.js","webpack:///./common/json/extract/array/items.js","webpack:///./common/json/extract/object.js","webpack:///./common/json/extract/object/record.js","webpack:///./common/json/extract/object/map.js","webpack:///./common/json/extract/nullable.js","webpack:///./common/json/extract/withDefault.js","webpack:///./common/json/extract/oneOf.js","webpack:///./common/json/extract/exactly.js","webpack:///./common/json/extract/rails/decimal.js","webpack:///./common/json/extract/rails/id.js","webpack:///./common/json/extract/failure.js","webpack:///./common/json/extract/primitive.js","webpack:///./common/json/extract/dates.js","webpack:///./common/json/extract/locale.js","webpack:///./common/json/extract/money.js","webpack:///./common/types/locale.js","webpack:///./common/types/money.js","webpack:///./site/allSites.js","webpack:///./site/currentSite.js","webpack:///./utils/analyticsModules/analyticsLinkTracking.js","webpack:///./utils/analytics.js","webpack:///./utils/currencyUtils.js","webpack:///./utils/satisfiesMediaQuery.js","webpack:///../../lib/javascript/putki/index.js","webpack:///../../node_modules/i18n-js/app/assets/javascripts/i18n.js","webpack:///../../node_modules/jquery.cookie/jquery.cookie.js","webpack:///../../node_modules/moment/locale/da.js","webpack:///../../node_modules/moment/moment.js","webpack:///../../node_modules/object-assign/index.js","webpack:///../../node_modules/react-dom/index.js","webpack:///../../node_modules/react/index.js","webpack:///../../node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///../../node_modules/scheduler/index.js","webpack:///../../node_modules/what-input/dist/what-input.js","webpack:///external var \"Modernizr\"","webpack:///external var \"jQuery\"","webpack:///../../node_modules/classnames/index.js"],"sourcesContent":["(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Honeybadger = factory());\n})(this, (function () { 'use strict';\n\n\tvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\tfunction getDefaultExportFromCjs (x) {\n\t\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n\t}\n\n\tfunction getAugmentedNamespace(n) {\n\t  var f = n.default;\n\t\tif (typeof f == \"function\") {\n\t\t\tvar a = function () {\n\t\t\t\treturn f.apply(this, arguments);\n\t\t\t};\n\t\t\ta.prototype = f.prototype;\n\t  } else a = {};\n\t  Object.defineProperty(a, '__esModule', {value: true});\n\t\tObject.keys(n).forEach(function (k) {\n\t\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: function () {\n\t\t\t\t\treturn n[k];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn a;\n\t}\n\n\tvar browser$1 = {};\n\n\tvar src = {};\n\n\tvar events = {};\n\n\tvar util$1 = {};\n\n\tvar UNKNOWN_FUNCTION = '<unknown>';\n\t/**\n\t * This parses the different stack traces and puts them into one format\n\t * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n\t */\n\n\tfunction parse(stackString) {\n\t  var lines = stackString.split('\\n');\n\t  return lines.reduce(function (stack, line) {\n\t    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n\t    if (parseResult) {\n\t      stack.push(parseResult);\n\t    }\n\n\t    return stack;\n\t  }, []);\n\t}\n\tvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\tvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n\tfunction parseChrome(line) {\n\t  var parts = chromeRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n\t  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n\t  var submatch = chromeEvalRe.exec(parts[2]);\n\n\t  if (isEval && submatch != null) {\n\t    // throw out eval line/column and use top-most line/column number\n\t    parts[2] = submatch[1]; // url\n\n\t    parts[3] = submatch[2]; // line\n\n\t    parts[4] = submatch[3]; // column\n\t  }\n\n\t  return {\n\t    file: !isNative ? parts[2] : null,\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: isNative ? [parts[2]] : [],\n\t    lineNumber: parts[3] ? +parts[3] : null,\n\t    column: parts[4] ? +parts[4] : null\n\t  };\n\t}\n\n\tvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\n\tfunction parseWinjs(line) {\n\t  var parts = winjsRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  return {\n\t    file: parts[2],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: [],\n\t    lineNumber: +parts[3],\n\t    column: parts[4] ? +parts[4] : null\n\t  };\n\t}\n\n\tvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n\tvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\n\tfunction parseGecko(line) {\n\t  var parts = geckoRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n\t  var submatch = geckoEvalRe.exec(parts[3]);\n\n\t  if (isEval && submatch != null) {\n\t    // throw out eval line/column and use top-most line number\n\t    parts[3] = submatch[1];\n\t    parts[4] = submatch[2];\n\t    parts[5] = null; // no column when eval\n\t  }\n\n\t  return {\n\t    file: parts[3],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: parts[2] ? parts[2].split(',') : [],\n\t    lineNumber: parts[4] ? +parts[4] : null,\n\t    column: parts[5] ? +parts[5] : null\n\t  };\n\t}\n\n\tvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\n\tfunction parseJSC(line) {\n\t  var parts = javaScriptCoreRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  return {\n\t    file: parts[3],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: [],\n\t    lineNumber: +parts[4],\n\t    column: parts[5] ? +parts[5] : null\n\t  };\n\t}\n\n\tvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\n\tfunction parseNode(line) {\n\t  var parts = nodeRe.exec(line);\n\n\t  if (!parts) {\n\t    return null;\n\t  }\n\n\t  return {\n\t    file: parts[2],\n\t    methodName: parts[1] || UNKNOWN_FUNCTION,\n\t    arguments: [],\n\t    lineNumber: +parts[3],\n\t    column: parts[4] ? +parts[4] : null\n\t  };\n\t}\n\n\tvar stackTraceParser_esm = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tparse: parse\n\t});\n\n\tvar require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);\n\n\t(function (exports) {\n\t\tvar __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    var desc = Object.getOwnPropertyDescriptor(m, k);\n\t\t    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n\t\t      desc = { enumerable: true, get: function() { return m[k]; } };\n\t\t    }\n\t\t    Object.defineProperty(o, k2, desc);\n\t\t}) : (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    o[k2] = m[k];\n\t\t}));\n\t\tvar __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {\n\t\t    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n\t\t}) : function(o, v) {\n\t\t    o[\"default\"] = v;\n\t\t});\n\t\tvar __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {\n\t\t    if (mod && mod.__esModule) return mod;\n\t\t    var result = {};\n\t\t    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n\t\t    __setModuleDefault(result, mod);\n\t\t    return result;\n\t\t};\n\t\tvar __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t\t    });\n\t\t};\n\t\tvar __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t\t    function step(op) {\n\t\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t\t        while (_) try {\n\t\t            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\t\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t\t            switch (op[0]) {\n\t\t                case 0: case 1: t = op; break;\n\t\t                case 4: _.label++; return { value: op[1], done: false };\n\t\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t\t                default:\n\t\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t\t                    if (t[2]) _.ops.pop();\n\t\t                    _.trys.pop(); continue;\n\t\t            }\n\t\t            op = body.call(thisArg, _);\n\t\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t\t    }\n\t\t};\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.logDeprecatedMethod = exports.globalThisOrWindow = exports.isBrowserConfig = exports.clone = exports.formatCGIData = exports.filterUrl = exports.filter = exports.generateStackTrace = exports.endpoint = exports.instrumentConsole = exports.instrument = exports.isErrorObject = exports.makeNotice = exports.logger = exports.sanitize = exports.shallowClone = exports.runAfterNotifyHandlers = exports.runBeforeNotifyHandlers = exports.getSourceForBacktrace = exports.getCauses = exports.calculateBacktraceShift = exports.DEFAULT_BACKTRACE_SHIFT = exports.makeBacktrace = exports.objectIsExtensible = exports.objectIsEmpty = exports.mergeNotice = exports.merge = void 0;\n\t\t/* eslint-disable prefer-rest-params */\n\t\tvar stackTraceParser = __importStar(require$$0$1);\n\t\tfunction merge(obj1, obj2) {\n\t\t    var result = {};\n\t\t    for (var k in obj1) {\n\t\t        result[k] = obj1[k];\n\t\t    }\n\t\t    for (var k in obj2) {\n\t\t        result[k] = obj2[k];\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\texports.merge = merge;\n\t\tfunction mergeNotice(notice1, notice2) {\n\t\t    var result = merge(notice1, notice2);\n\t\t    if (notice1.context && notice2.context) {\n\t\t        result.context = merge(notice1.context, notice2.context);\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\texports.mergeNotice = mergeNotice;\n\t\tfunction objectIsEmpty(obj) {\n\t\t    for (var k in obj) {\n\t\t        if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t\t            return false;\n\t\t        }\n\t\t    }\n\t\t    return true;\n\t\t}\n\t\texports.objectIsEmpty = objectIsEmpty;\n\t\tfunction objectIsExtensible(obj) {\n\t\t    if (typeof Object.isExtensible !== 'function') {\n\t\t        return true;\n\t\t    }\n\t\t    return Object.isExtensible(obj);\n\t\t}\n\t\texports.objectIsExtensible = objectIsExtensible;\n\t\tfunction makeBacktrace(stack, filterHbSourceCode, logger) {\n\t\t    if (filterHbSourceCode === void 0) { filterHbSourceCode = false; }\n\t\t    if (logger === void 0) { logger = console; }\n\t\t    if (!stack) {\n\t\t        return [];\n\t\t    }\n\t\t    try {\n\t\t        var backtrace = stackTraceParser\n\t\t            .parse(stack)\n\t\t            .map(function (line) {\n\t\t            return {\n\t\t                file: line.file,\n\t\t                method: line.methodName,\n\t\t                number: line.lineNumber,\n\t\t                column: line.column\n\t\t            };\n\t\t        });\n\t\t        if (filterHbSourceCode) {\n\t\t            backtrace.splice(0, calculateBacktraceShift(backtrace));\n\t\t        }\n\t\t        return backtrace;\n\t\t    }\n\t\t    catch (err) {\n\t\t        logger.debug(err);\n\t\t        return [];\n\t\t    }\n\t\t}\n\t\texports.makeBacktrace = makeBacktrace;\n\t\tfunction isFrameFromHbSourceCode(frame) {\n\t\t    var hasHbFile = false;\n\t\t    var hasHbMethod = false;\n\t\t    if (frame.file) {\n\t\t        hasHbFile = frame.file.toLowerCase().indexOf('@honeybadger-io') > -1;\n\t\t    }\n\t\t    if (frame.method) {\n\t\t        hasHbMethod = frame.method.toLowerCase().indexOf('@honeybadger-io') > -1;\n\t\t    }\n\t\t    return hasHbFile || hasHbMethod;\n\t\t}\n\t\texports.DEFAULT_BACKTRACE_SHIFT = 3;\n\t\t/**\n\t\t * If {@link generateStackTrace} is used, we want to exclude frames that come from\n\t\t * Honeybadger's source code.\n\t\t *\n\t\t * Logic:\n\t\t * - For each frame, increment the shift if source code is from Honeybadger\n\t\t * - If a frame from an <anonymous> file is encountered increment the shift ONLY if between Honeybadger source code\n\t\t *   (i.e. previous and next frames are from Honeybadger)\n\t\t * - Exit when frame encountered is not from Honeybadger source code\n\t\t *\n\t\t * Note: this will not always work, especially in browser versions where code\n\t\t *       is minified, uglified and bundled.\n\t\t *       For those cases we default to 3:\n\t\t *       - generateStackTrace\n\t\t *       - makeNotice\n\t\t *       - notify\n\t\t */\n\t\tfunction calculateBacktraceShift(backtrace) {\n\t\t    var shift = 0;\n\t\t    for (var i = 0; i < backtrace.length; i++) {\n\t\t        var frame = backtrace[i];\n\t\t        if (isFrameFromHbSourceCode(frame)) {\n\t\t            shift++;\n\t\t            continue;\n\t\t        }\n\t\t        if (!frame.file || frame.file === '<anonymous>') {\n\t\t            var nextFrame = backtrace[i + 1];\n\t\t            if (nextFrame && isFrameFromHbSourceCode(nextFrame)) {\n\t\t                shift++;\n\t\t                continue;\n\t\t            }\n\t\t        }\n\t\t        break;\n\t\t    }\n\t\t    return shift || exports.DEFAULT_BACKTRACE_SHIFT;\n\t\t}\n\t\texports.calculateBacktraceShift = calculateBacktraceShift;\n\t\tfunction getCauses(notice, logger) {\n\t\t    if (notice.cause) {\n\t\t        var causes = [];\n\t\t        var cause = notice;\n\t\t        // @ts-ignore this throws an error if tsconfig.json has strict: true\n\t\t        while (causes.length < 3 && (cause = cause.cause)) {\n\t\t            causes.push({\n\t\t                class: cause.name,\n\t\t                message: cause.message,\n\t\t                backtrace: typeof cause.stack == 'string' ? makeBacktrace(cause.stack, false, logger) : null\n\t\t            });\n\t\t        }\n\t\t        return causes;\n\t\t    }\n\t\t    return [];\n\t\t}\n\t\texports.getCauses = getCauses;\n\t\tfunction getSourceForBacktrace(backtrace, getSourceFileHandler) {\n\t\t    return __awaiter(this, void 0, void 0, function () {\n\t\t        var result, index, trace, fileContent;\n\t\t        return __generator(this, function (_a) {\n\t\t            switch (_a.label) {\n\t\t                case 0:\n\t\t                    result = [];\n\t\t                    if (!getSourceFileHandler || !backtrace || !backtrace.length) {\n\t\t                        return [2 /*return*/, result];\n\t\t                    }\n\t\t                    index = 0;\n\t\t                    _a.label = 1;\n\t\t                case 1:\n\t\t                    if (!backtrace.length) return [3 /*break*/, 3];\n\t\t                    trace = backtrace.splice(0)[index];\n\t\t                    return [4 /*yield*/, getSourceFileHandler(trace.file)];\n\t\t                case 2:\n\t\t                    fileContent = _a.sent();\n\t\t                    result[index] = getSourceCodeSnippet(fileContent, trace.number, trace.column, 2);\n\t\t                    index++;\n\t\t                    return [3 /*break*/, 1];\n\t\t                case 3: return [2 /*return*/, result];\n\t\t            }\n\t\t        });\n\t\t    });\n\t\t}\n\t\texports.getSourceForBacktrace = getSourceForBacktrace;\n\t\tfunction runBeforeNotifyHandlers(notice, handlers) {\n\t\t    var results = [];\n\t\t    var result = true;\n\t\t    for (var i = 0, len = handlers.length; i < len; i++) {\n\t\t        var handler = handlers[i];\n\t\t        var handlerResult = handler(notice);\n\t\t        if (handlerResult === false) {\n\t\t            result = false;\n\t\t        }\n\t\t        results.push(handlerResult);\n\t\t    }\n\t\t    return {\n\t\t        results: results,\n\t\t        result: result\n\t\t    };\n\t\t}\n\t\texports.runBeforeNotifyHandlers = runBeforeNotifyHandlers;\n\t\tfunction runAfterNotifyHandlers(notice, handlers, error) {\n\t\t    if (notice && notice.afterNotify) {\n\t\t        notice.afterNotify(error, notice);\n\t\t    }\n\t\t    for (var i = 0, len = handlers.length; i < len; i++) {\n\t\t        handlers[i](error, notice);\n\t\t    }\n\t\t    return true;\n\t\t}\n\t\texports.runAfterNotifyHandlers = runAfterNotifyHandlers;\n\t\t// Returns a new object with properties from other object.\n\t\tfunction shallowClone(obj) {\n\t\t    if (typeof (obj) !== 'object' || obj === null) {\n\t\t        return {};\n\t\t    }\n\t\t    var result = {};\n\t\t    for (var k in obj) {\n\t\t        result[k] = obj[k];\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\texports.shallowClone = shallowClone;\n\t\tfunction sanitize(obj, maxDepth) {\n\t\t    if (maxDepth === void 0) { maxDepth = 8; }\n\t\t    var seenObjects = [];\n\t\t    function seen(obj) {\n\t\t        if (!obj || typeof (obj) !== 'object') {\n\t\t            return false;\n\t\t        }\n\t\t        for (var i = 0; i < seenObjects.length; i++) {\n\t\t            var value = seenObjects[i];\n\t\t            if (value === obj) {\n\t\t                return true;\n\t\t            }\n\t\t        }\n\t\t        seenObjects.push(obj);\n\t\t        return false;\n\t\t    }\n\t\t    function canSerialize(obj) {\n\t\t        var typeOfObj = typeof obj;\n\t\t        // Functions are TMI\n\t\t        if (/function/.test(typeOfObj)) {\n\t\t            // Let special toJSON method pass as it's used by JSON.stringify (#722)\n\t\t            return obj.name === 'toJSON';\n\t\t        }\n\t\t        // Symbols can't convert to strings.\n\t\t        if (/symbol/.test(typeOfObj)) {\n\t\t            return false;\n\t\t        }\n\t\t        if (obj === null) {\n\t\t            return false;\n\t\t        }\n\t\t        // No prototype, likely created with `Object.create(null)`.\n\t\t        if (typeof obj === 'object' && typeof obj.hasOwnProperty === 'undefined') {\n\t\t            return false;\n\t\t        }\n\t\t        return true;\n\t\t    }\n\t\t    function serialize(obj, depth) {\n\t\t        if (depth === void 0) { depth = 0; }\n\t\t        if (depth >= maxDepth) {\n\t\t            return '[DEPTH]';\n\t\t        }\n\t\t        // Inspect invalid types\n\t\t        if (!canSerialize(obj)) {\n\t\t            return Object.prototype.toString.call(obj);\n\t\t        }\n\t\t        // Halt circular references\n\t\t        if (seen(obj)) {\n\t\t            return '[RECURSION]';\n\t\t        }\n\t\t        // Serialize inside arrays\n\t\t        if (Array.isArray(obj)) {\n\t\t            return obj.map(function (o) { return safeSerialize(o, depth + 1); });\n\t\t        }\n\t\t        // Serialize inside objects\n\t\t        if (typeof (obj) === 'object') {\n\t\t            var ret = {};\n\t\t            for (var k in obj) {\n\t\t                var v = obj[k];\n\t\t                if (Object.prototype.hasOwnProperty.call(obj, k) && (k != null) && (v != null)) {\n\t\t                    ret[k] = safeSerialize(v, depth + 1);\n\t\t                }\n\t\t            }\n\t\t            return ret;\n\t\t        }\n\t\t        // Return everything else untouched\n\t\t        return obj;\n\t\t    }\n\t\t    function safeSerialize(obj, depth) {\n\t\t        if (depth === void 0) { depth = 0; }\n\t\t        try {\n\t\t            return serialize(obj, depth);\n\t\t        }\n\t\t        catch (e) {\n\t\t            return \"[ERROR] \".concat(e);\n\t\t        }\n\t\t    }\n\t\t    return safeSerialize(obj);\n\t\t}\n\t\texports.sanitize = sanitize;\n\t\tfunction logger(client) {\n\t\t    var log = function (method) {\n\t\t        return function () {\n\t\t            var _a;\n\t\t            var args = [];\n\t\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t\t                args[_i] = arguments[_i];\n\t\t            }\n\t\t            if (method === 'debug') {\n\t\t                if (!client.config.debug) {\n\t\t                    return;\n\t\t                }\n\t\t                // Log at default level so that you don't need to also enable verbose\n\t\t                // logging in Chrome.\n\t\t                method = 'log';\n\t\t            }\n\t\t            args.unshift('[Honeybadger]');\n\t\t            (_a = client.config.logger)[method].apply(_a, args);\n\t\t        };\n\t\t    };\n\t\t    return {\n\t\t        log: log('log'),\n\t\t        info: log('info'),\n\t\t        debug: log('debug'),\n\t\t        warn: log('warn'),\n\t\t        error: log('error')\n\t\t    };\n\t\t}\n\t\texports.logger = logger;\n\t\t/**\n\t\t * Converts any object into a notice object (which at minimum has the same\n\t\t * properties as Error, but supports additional Honeybadger properties.)\n\t\t */\n\t\tfunction makeNotice(thing) {\n\t\t    var notice;\n\t\t    if (!thing) {\n\t\t        notice = {};\n\t\t    }\n\t\t    else if (isErrorObject(thing)) {\n\t\t        var e = thing;\n\t\t        notice = merge(thing, { name: e.name, message: e.message, stack: e.stack, cause: e.cause });\n\t\t    }\n\t\t    else if (typeof thing === 'object') {\n\t\t        notice = shallowClone(thing);\n\t\t    }\n\t\t    else {\n\t\t        var m = String(thing);\n\t\t        notice = { message: m };\n\t\t    }\n\t\t    return notice;\n\t\t}\n\t\texports.makeNotice = makeNotice;\n\t\tfunction isErrorObject(thing) {\n\t\t    return thing instanceof Error\n\t\t        || Object.prototype.toString.call(thing) === '[object Error]'; // Important for cross-realm objects\n\t\t}\n\t\texports.isErrorObject = isErrorObject;\n\t\t/**\n\t\t * Instrument an existing function inside an object (usually global).\n\t\t * @param {!Object} object\n\t\t * @param {!String} name\n\t\t * @param {!Function} replacement\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tfunction instrument(object, name, replacement) {\n\t\t    if (!object || !name || !replacement || !(name in object)) {\n\t\t        return;\n\t\t    }\n\t\t    try {\n\t\t        var original = object[name];\n\t\t        while (original && original.__hb_original) {\n\t\t            original = original.__hb_original;\n\t\t        }\n\t\t        object[name] = replacement(original);\n\t\t        object[name].__hb_original = original;\n\t\t    }\n\t\t    catch (_e) {\n\t\t        // Ignores errors where \"original\" is a restricted object (see #1001)\n\t\t        // Uncaught Error: Permission denied to access property \"__hb_original\"\n\t\t        // Also ignores:\n\t\t        //   Error: TypeError: Cannot set property onunhandledrejection of [object Object] which has only a getter\n\t\t        //   User-Agent: Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/12.1 Chrome/79.0.3945.136 Mobile Safari/537.36\n\t\t    }\n\t\t}\n\t\texports.instrument = instrument;\n\t\tvar _consoleAlreadyInstrumented = false;\n\t\tvar listeners = [];\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tfunction instrumentConsole(_window, handler) {\n\t\t    if (!_window || !_window.console || !handler) {\n\t\t        return;\n\t\t    }\n\t\t    listeners.push(handler);\n\t\t    if (_consoleAlreadyInstrumented) {\n\t\t        return;\n\t\t    }\n\t\t    _consoleAlreadyInstrumented = true;\n\t\t    ['debug', 'info', 'warn', 'error', 'log'].forEach(function (level) {\n\t\t        instrument(_window.console, level, function hbLogger(original) {\n\t\t            return function () {\n\t\t                var args = Array.prototype.slice.call(arguments);\n\t\t                listeners.forEach(function (listener) {\n\t\t                    try {\n\t\t                        listener(level, args);\n\t\t                    }\n\t\t                    catch (_e) {\n\t\t                        // ignore\n\t\t                        // should never reach here because instrument method already wraps with try/catch block\n\t\t                    }\n\t\t                });\n\t\t                if (typeof original === 'function') {\n\t\t                    Function.prototype.apply.call(original, _window.console, arguments);\n\t\t                }\n\t\t            };\n\t\t        });\n\t\t    });\n\t\t}\n\t\texports.instrumentConsole = instrumentConsole;\n\t\tfunction endpoint(base, path) {\n\t\t    var endpoint = base.trim().replace(/\\/$/, '');\n\t\t    path = path.trim().replace(/(^\\/|\\/$)/g, '');\n\t\t    return \"\".concat(endpoint, \"/\").concat(path);\n\t\t}\n\t\texports.endpoint = endpoint;\n\t\tfunction generateStackTrace() {\n\t\t    try {\n\t\t        throw new Error('');\n\t\t    }\n\t\t    catch (e) {\n\t\t        if (e.stack) {\n\t\t            return e.stack;\n\t\t        }\n\t\t    }\n\t\t    var maxStackSize = 10;\n\t\t    var stack = [];\n\t\t    var curr = arguments.callee;\n\t\t    while (curr && stack.length < maxStackSize) {\n\t\t        if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n\t\t            stack.push(RegExp.$1 || '<anonymous>');\n\t\t        }\n\t\t        else {\n\t\t            stack.push('<anonymous>');\n\t\t        }\n\t\t        try {\n\t\t            curr = curr.caller;\n\t\t        }\n\t\t        catch (e) {\n\t\t            break;\n\t\t        }\n\t\t    }\n\t\t    return stack.join('\\n');\n\t\t}\n\t\texports.generateStackTrace = generateStackTrace;\n\t\tfunction filter(obj, filters) {\n\t\t    if (!is('Object', obj)) {\n\t\t        return;\n\t\t    }\n\t\t    if (!is('Array', filters)) {\n\t\t        filters = [];\n\t\t    }\n\t\t    var seen = [];\n\t\t    function filter(obj) {\n\t\t        var k, newObj;\n\t\t        if (is('Object', obj) || is('Array', obj)) {\n\t\t            if (seen.indexOf(obj) !== -1) {\n\t\t                return '[CIRCULAR DATA STRUCTURE]';\n\t\t            }\n\t\t            seen.push(obj);\n\t\t        }\n\t\t        if (is('Object', obj)) {\n\t\t            newObj = {};\n\t\t            for (k in obj) {\n\t\t                if (filterMatch(k, filters)) {\n\t\t                    newObj[k] = '[FILTERED]';\n\t\t                }\n\t\t                else {\n\t\t                    newObj[k] = filter(obj[k]);\n\t\t                }\n\t\t            }\n\t\t            return newObj;\n\t\t        }\n\t\t        if (is('Array', obj)) {\n\t\t            return obj.map(function (v) {\n\t\t                return filter(v);\n\t\t            });\n\t\t        }\n\t\t        if (is('Function', obj)) {\n\t\t            return '[FUNC]';\n\t\t        }\n\t\t        return obj;\n\t\t    }\n\t\t    return filter(obj);\n\t\t}\n\t\texports.filter = filter;\n\t\tfunction filterMatch(key, filters) {\n\t\t    for (var i = 0; i < filters.length; i++) {\n\t\t        if (key.toLowerCase().indexOf(filters[i].toLowerCase()) !== -1) {\n\t\t            return true;\n\t\t        }\n\t\t    }\n\t\t    return false;\n\t\t}\n\t\tfunction is(type, obj) {\n\t\t    var klass = Object.prototype.toString.call(obj).slice(8, -1);\n\t\t    return obj !== undefined && obj !== null && klass === type;\n\t\t}\n\t\tfunction filterUrl(url, filters) {\n\t\t    if (!filters) {\n\t\t        return url;\n\t\t    }\n\t\t    if (typeof url !== 'string') {\n\t\t        return url;\n\t\t    }\n\t\t    var query = url.split(/\\?/, 2)[1];\n\t\t    if (!query) {\n\t\t        return url;\n\t\t    }\n\t\t    var result = url;\n\t\t    query.split(/[&]\\s?/).forEach(function (pair) {\n\t\t        var _a = pair.split('=', 2), key = _a[0], value = _a[1];\n\t\t        if (filterMatch(key, filters)) {\n\t\t            result = result.replace(\"\".concat(key, \"=\").concat(value), \"\".concat(key, \"=[FILTERED]\"));\n\t\t        }\n\t\t    });\n\t\t    return result;\n\t\t}\n\t\texports.filterUrl = filterUrl;\n\t\tfunction formatCGIData(vars, prefix) {\n\t\t    if (prefix === void 0) { prefix = ''; }\n\t\t    var formattedVars = {};\n\t\t    Object.keys(vars).forEach(function (key) {\n\t\t        var formattedKey = prefix + key.replace(/\\W/g, '_').toUpperCase();\n\t\t        formattedVars[formattedKey] = vars[key];\n\t\t    });\n\t\t    return formattedVars;\n\t\t}\n\t\texports.formatCGIData = formatCGIData;\n\t\tfunction clone(obj) {\n\t\t    return JSON.parse(JSON.stringify(obj));\n\t\t}\n\t\texports.clone = clone;\n\t\tvar THRESHOLD_COLUMN_NUMBER = 10000;\n\t\tvar THRESHOLD_LINE_LENGTH = 10000;\n\t\tvar THRESHOLD_FILE_SIZE = 200000; // 200KB threshold\n\t\tfunction getThresholdExceededSnippet(lineNumber) {\n\t\t    var _a;\n\t\t    return _a = {}, _a[lineNumber] = 'SOURCE_SIZE_TOO_LARGE', _a;\n\t\t}\n\t\tfunction getSourceCodeSnippet(fileData, lineNumber, columnNumber, sourceRadius) {\n\t\t    if (sourceRadius === void 0) { sourceRadius = 2; }\n\t\t    if (!fileData) {\n\t\t        return null;\n\t\t    }\n\t\t    // If column number is provided and very high, it's likely a bundled/minified file\n\t\t    if (columnNumber && columnNumber > THRESHOLD_COLUMN_NUMBER) {\n\t\t        return getThresholdExceededSnippet(lineNumber);\n\t\t    }\n\t\t    // If file is very large, it's likely bundled\n\t\t    if (fileData.length > THRESHOLD_FILE_SIZE) {\n\t\t        return getThresholdExceededSnippet(lineNumber);\n\t\t    }\n\t\t    var lines = fileData.split('\\n');\n\t\t    // add one empty line because array index starts from 0, but error line number is counted from 1\n\t\t    lines.unshift('');\n\t\t    // Check if the target line is extremely long\n\t\t    var targetLine = lines[lineNumber];\n\t\t    if (targetLine && targetLine.length > THRESHOLD_LINE_LENGTH) {\n\t\t        return getThresholdExceededSnippet(lineNumber);\n\t\t    }\n\t\t    var start = lineNumber - sourceRadius;\n\t\t    var end = lineNumber + sourceRadius;\n\t\t    var result = {};\n\t\t    for (var i = start; i <= end; i++) {\n\t\t        var line = lines[i];\n\t\t        if (typeof line === 'string') {\n\t\t            result[i] = line;\n\t\t        }\n\t\t    }\n\t\t    return result;\n\t\t}\n\t\tfunction isBrowserConfig(config) {\n\t\t    return config.async !== undefined;\n\t\t}\n\t\texports.isBrowserConfig = isBrowserConfig;\n\t\t/** globalThis has fairly good support. But just in case, lets check its defined.\n\t\t * @see {https://caniuse.com/?search=globalThis}\n\t\t */\n\t\tfunction globalThisOrWindow() {\n\t\t    if (typeof globalThis !== 'undefined') {\n\t\t        return globalThis;\n\t\t    }\n\t\t    if (typeof self !== 'undefined') {\n\t\t        return self;\n\t\t    }\n\t\t    return window;\n\t\t}\n\t\texports.globalThisOrWindow = globalThisOrWindow;\n\t\tvar _deprecatedMethodCalls = {};\n\t\t/**\n\t\t * Logs a deprecation warning, every X calls to the method.\n\t\t */\n\t\tfunction logDeprecatedMethod(logger, oldMethod, newMethod, callCountThreshold) {\n\t\t    if (callCountThreshold === void 0) { callCountThreshold = 100; }\n\t\t    var key = \"\".concat(oldMethod, \"-\").concat(newMethod);\n\t\t    if (typeof _deprecatedMethodCalls[key] === 'undefined') {\n\t\t        _deprecatedMethodCalls[key] = 0;\n\t\t    }\n\t\t    if (_deprecatedMethodCalls[key] % callCountThreshold !== 0) {\n\t\t        _deprecatedMethodCalls[key]++;\n\t\t        return;\n\t\t    }\n\t\t    var msg = \"Deprecation warning: \".concat(oldMethod, \" has been deprecated; please use \").concat(newMethod, \" instead.\");\n\t\t    logger.warn(msg);\n\t\t    _deprecatedMethodCalls[key]++;\n\t\t}\n\t\texports.logDeprecatedMethod = logDeprecatedMethod;\n\t\t\n\t} (util$1));\n\n\tObject.defineProperty(events, \"__esModule\", { value: true });\n\tvar util_1$4 = util$1;\n\tfunction default_1$4(_window) {\n\t    if (_window === void 0) { _window = (0, util_1$4.globalThisOrWindow)(); }\n\t    return {\n\t        shouldReloadOnConfigure: false,\n\t        load: function (client) {\n\t            function sendEventsToInsights() {\n\t                return client.config.eventsEnabled;\n\t            }\n\t            if (!sendEventsToInsights()) {\n\t                return;\n\t            }\n\t            (0, util_1$4.instrumentConsole)(_window, function (level, args) {\n\t                if (!sendEventsToInsights()) {\n\t                    return;\n\t                }\n\t                if (args.length === 0) {\n\t                    return;\n\t                }\n\t                var data = {\n\t                    severity: level,\n\t                };\n\t                if (typeof args[0] === 'string') {\n\t                    data.message = args[0];\n\t                    data.args = args.slice(1);\n\t                }\n\t                else {\n\t                    data.args = args;\n\t                }\n\t                client.event('log', data);\n\t            });\n\t        }\n\t    };\n\t}\n\tevents.default = default_1$4;\n\n\tvar client = {};\n\n\tvar store = {};\n\n\tObject.defineProperty(store, \"__esModule\", { value: true });\n\tstore.GlobalStore = void 0;\n\tvar util_1$3 = util$1;\n\tvar GlobalStore = /** @class */ (function () {\n\t    function GlobalStore(contents, breadcrumbsLimit) {\n\t        this.contents = contents;\n\t        this.breadcrumbsLimit = breadcrumbsLimit;\n\t    }\n\t    GlobalStore.create = function (contents, breadcrumbsLimit) {\n\t        return new GlobalStore(contents, breadcrumbsLimit);\n\t    };\n\t    GlobalStore.prototype.available = function () {\n\t        return true;\n\t    };\n\t    GlobalStore.prototype.getContents = function (key) {\n\t        var value = key ? this.contents[key] : this.contents;\n\t        return JSON.parse(JSON.stringify(value));\n\t    };\n\t    GlobalStore.prototype.setContext = function (context) {\n\t        this.contents.context = (0, util_1$3.merge)(this.contents.context, context || {});\n\t    };\n\t    GlobalStore.prototype.addBreadcrumb = function (breadcrumb) {\n\t        if (this.contents.breadcrumbs.length == this.breadcrumbsLimit) {\n\t            this.contents.breadcrumbs.shift();\n\t        }\n\t        this.contents.breadcrumbs.push(breadcrumb);\n\t    };\n\t    GlobalStore.prototype.clear = function () {\n\t        this.contents.context = {};\n\t        this.contents.breadcrumbs = [];\n\t    };\n\t    GlobalStore.prototype.run = function (callback) {\n\t        return callback();\n\t    };\n\t    return GlobalStore;\n\t}());\n\tstore.GlobalStore = GlobalStore;\n\n\tvar throttled_events_logger = {};\n\n\tclass NdJson {\n\t    static parse(data) {\n\t        const lines = data.trim().split('\\n');\n\t        return lines.map(line => JSON.parse(line));\n\t    }\n\t    static stringify(data) {\n\t        return data.map(item => JSON.stringify(item)).join('\\n');\n\t    }\n\t}\n\n\tvar module = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tNdJson: NdJson\n\t});\n\n\tvar require$$0 = /*@__PURE__*/getAugmentedNamespace(module);\n\n\tvar defaults = {};\n\n\tObject.defineProperty(defaults, \"__esModule\", { value: true });\n\tdefaults.CONFIG = void 0;\n\tdefaults.CONFIG = {\n\t    apiKey: null,\n\t    endpoint: 'https://api.honeybadger.io',\n\t    appEndpoint: 'https://app.honeybadger.io',\n\t    environment: null,\n\t    hostname: null,\n\t    projectRoot: null,\n\t    component: null,\n\t    action: null,\n\t    revision: null,\n\t    reportData: null,\n\t    breadcrumbsEnabled: true,\n\t    // we could decide the value of eventsEnabled based on `env` and `developmentEnvironments`\n\t    eventsEnabled: false,\n\t    maxBreadcrumbs: 40,\n\t    maxObjectDepth: 8,\n\t    logger: console,\n\t    developmentEnvironments: ['dev', 'development', 'test'],\n\t    debug: false,\n\t    tags: null,\n\t    enableUncaught: true,\n\t    enableUnhandledRejection: true,\n\t    afterUncaught: function () { return true; },\n\t    filters: ['creditcard', 'password'],\n\t    __plugins: [],\n\t};\n\n\tvar __assign$2 = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t    __assign$2 = Object.assign || function(t) {\n\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t            s = arguments[i];\n\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t                t[p] = s[p];\n\t        }\n\t        return t;\n\t    };\n\t    return __assign$2.apply(this, arguments);\n\t};\n\tvar __awaiter$2 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t    });\n\t};\n\tvar __generator$2 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t    function step(op) {\n\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t        while (_) try {\n\t            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\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t            switch (op[0]) {\n\t                case 0: case 1: t = op; break;\n\t                case 4: _.label++; return { value: op[1], done: false };\n\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t                default:\n\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t                    if (t[2]) _.ops.pop();\n\t                    _.trys.pop(); continue;\n\t            }\n\t            op = body.call(thisArg, _);\n\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t    }\n\t};\n\tObject.defineProperty(throttled_events_logger, \"__esModule\", { value: true });\n\tthrottled_events_logger.ThrottledEventsLogger = void 0;\n\tvar json_nd_1 = require$$0;\n\tvar util_1$2 = util$1;\n\tvar defaults_1$1 = defaults;\n\tvar ThrottledEventsLogger = /** @class */ (function () {\n\t    function ThrottledEventsLogger(config, transport) {\n\t        this.config = config;\n\t        this.transport = transport;\n\t        this.queue = [];\n\t        this.isProcessing = false;\n\t        this.config = __assign$2(__assign$2({}, defaults_1$1.CONFIG), config);\n\t        this.logger = this.originalLogger();\n\t    }\n\t    ThrottledEventsLogger.prototype.configure = function (opts) {\n\t        for (var k in opts) {\n\t            this.config[k] = opts[k];\n\t        }\n\t    };\n\t    ThrottledEventsLogger.prototype.log = function (payload) {\n\t        this.queue.push(payload);\n\t        if (!this.isProcessing) {\n\t            this.processQueue();\n\t        }\n\t    };\n\t    ThrottledEventsLogger.prototype.flushAsync = function () {\n\t        this.logger.debug('[Honeybadger] Flushing events');\n\t        return this.send();\n\t    };\n\t    ThrottledEventsLogger.prototype.processQueue = function () {\n\t        var _this = this;\n\t        if (this.queue.length === 0 || this.isProcessing) {\n\t            return;\n\t        }\n\t        this.isProcessing = true;\n\t        this.send()\n\t            .then(function () {\n\t            setTimeout(function () {\n\t                _this.isProcessing = false;\n\t                _this.processQueue();\n\t            }, 50);\n\t        })\n\t            .catch(function (error) {\n\t            _this.logger.error('[Honeybadger] Error making HTTP request:', error);\n\t            // Continue processing the queue even if there's an error\n\t            setTimeout(function () {\n\t                _this.isProcessing = false;\n\t                _this.processQueue();\n\t            }, 50);\n\t        });\n\t    };\n\t    ThrottledEventsLogger.prototype.send = function () {\n\t        return __awaiter$2(this, void 0, void 0, function () {\n\t            var eventsData, data;\n\t            return __generator$2(this, function (_a) {\n\t                if (this.queue.length === 0) {\n\t                    return [2 /*return*/];\n\t                }\n\t                eventsData = this.queue.slice();\n\t                this.queue = [];\n\t                data = json_nd_1.NdJson.stringify(eventsData);\n\t                return [2 /*return*/, this.makeHttpRequest(data)];\n\t            });\n\t        });\n\t    };\n\t    ThrottledEventsLogger.prototype.makeHttpRequest = function (data) {\n\t        return __awaiter$2(this, void 0, void 0, function () {\n\t            var _this = this;\n\t            return __generator$2(this, function (_a) {\n\t                return [2 /*return*/, this.transport\n\t                        .send({\n\t                        headers: {\n\t                            'X-API-Key': this.config.apiKey,\n\t                            'Content-Type': 'application/json',\n\t                        },\n\t                        method: 'POST',\n\t                        endpoint: (0, util_1$2.endpoint)(this.config.endpoint, '/v1/events'),\n\t                        maxObjectDepth: this.config.maxObjectDepth,\n\t                        logger: this.logger,\n\t                    }, data)\n\t                        .then(function () {\n\t                        if (_this.config.debug) {\n\t                            _this.logger.debug('[Honeybadger] Events sent successfully');\n\t                        }\n\t                    })\n\t                        .catch(function (err) {\n\t                        _this.logger.error(\"[Honeybadger] Error sending events: \".concat(err.message));\n\t                    })];\n\t            });\n\t        });\n\t    };\n\t    /**\n\t     * todo: improve this\n\t     *\n\t     * The EventsLogger overrides the console methods to enable automatic instrumentation\n\t     * of console logs to the Honeybadger API.\n\t     * So if we want to log something in here we need to use the original methods.\n\t     */\n\t    ThrottledEventsLogger.prototype.originalLogger = function () {\n\t        var _a, _b, _c, _d, _e;\n\t        return {\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            log: (_a = console.log.__hb_original) !== null && _a !== void 0 ? _a : console.log,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            info: (_b = console.info.__hb_original) !== null && _b !== void 0 ? _b : console.info,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            debug: (_c = console.debug.__hb_original) !== null && _c !== void 0 ? _c : console.debug,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            warn: (_d = console.warn.__hb_original) !== null && _d !== void 0 ? _d : console.warn,\n\t            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t            error: (_e = console.error.__hb_original) !== null && _e !== void 0 ? _e : console.error,\n\t        };\n\t    };\n\t    return ThrottledEventsLogger;\n\t}());\n\tthrottled_events_logger.ThrottledEventsLogger = ThrottledEventsLogger;\n\n\tvar __assign$1 = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t    __assign$1 = Object.assign || function(t) {\n\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t            s = arguments[i];\n\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t                t[p] = s[p];\n\t        }\n\t        return t;\n\t    };\n\t    return __assign$1.apply(this, arguments);\n\t};\n\tvar __awaiter$1 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t    });\n\t};\n\tvar __generator$1 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t    function step(op) {\n\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t        while (_) try {\n\t            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\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t            switch (op[0]) {\n\t                case 0: case 1: t = op; break;\n\t                case 4: _.label++; return { value: op[1], done: false };\n\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t                default:\n\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t                    if (t[2]) _.ops.pop();\n\t                    _.trys.pop(); continue;\n\t            }\n\t            op = body.call(thisArg, _);\n\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t    }\n\t};\n\tObject.defineProperty(client, \"__esModule\", { value: true });\n\tclient.Client = void 0;\n\tvar util_1$1 = util$1;\n\tvar store_1 = store;\n\tvar throttled_events_logger_1 = throttled_events_logger;\n\tvar defaults_1 = defaults;\n\t// Split at commas and spaces\n\tvar TAG_SEPARATOR = /,|\\s+/;\n\t// Checks for non-blank characters\n\tvar NOT_BLANK = /\\S/;\n\tvar Client = /** @class */ (function () {\n\t    function Client(opts, transport) {\n\t        if (opts === void 0) { opts = {}; }\n\t        this.__pluginsLoaded = false;\n\t        this.__store = null;\n\t        this.__beforeNotifyHandlers = [];\n\t        this.__afterNotifyHandlers = [];\n\t        this.__notifier = {\n\t            name: '@honeybadger-io/core',\n\t            url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/core',\n\t            version: '6.12.3'\n\t        };\n\t        this.config = __assign$1(__assign$1({}, defaults_1.CONFIG), opts);\n\t        this.__initStore();\n\t        this.__transport = transport;\n\t        this.__eventsLogger = new throttled_events_logger_1.ThrottledEventsLogger(this.config, this.__transport);\n\t        this.logger = (0, util_1$1.logger)(this);\n\t    }\n\t    Client.prototype.getVersion = function () {\n\t        return this.__notifier.version;\n\t    };\n\t    Client.prototype.getNotifier = function () {\n\t        return this.__notifier;\n\t    };\n\t    /**\n\t     * CAREFUL: When adding a new notifier or updating the name of an existing notifier,\n\t     * the Honeybadger rails project may need its mappings updated.\n\t     * See https://github.com/honeybadger-io/honeybadger/blob/master/app/presenters/breadcrumbs_presenter.rb\n\t     *     https://github.com/honeybadger-io/honeybadger/blob/master/app/models/parser/java_script.rb\n\t     *     https://github.com/honeybadger-io/honeybadger/blob/master/app/models/language.rb\n\t     **/\n\t    Client.prototype.setNotifier = function (notifier) {\n\t        this.__notifier = notifier;\n\t    };\n\t    Client.prototype.configure = function (opts) {\n\t        if (opts === void 0) { opts = {}; }\n\t        for (var k in opts) {\n\t            this.config[k] = opts[k];\n\t        }\n\t        this.__eventsLogger.configure(this.config);\n\t        this.loadPlugins();\n\t        return this;\n\t    };\n\t    Client.prototype.loadPlugins = function () {\n\t        var _this = this;\n\t        var pluginsToLoad = this.__pluginsLoaded\n\t            ? this.config.__plugins.filter(function (plugin) { return plugin.shouldReloadOnConfigure; })\n\t            : this.config.__plugins;\n\t        pluginsToLoad.forEach(function (plugin) { return plugin.load(_this); });\n\t        this.__pluginsLoaded = true;\n\t    };\n\t    Client.prototype.__initStore = function () {\n\t        this.__store = new store_1.GlobalStore({ context: {}, breadcrumbs: [] }, this.config.maxBreadcrumbs);\n\t    };\n\t    Client.prototype.beforeNotify = function (handler) {\n\t        this.__beforeNotifyHandlers.push(handler);\n\t        return this;\n\t    };\n\t    Client.prototype.afterNotify = function (handler) {\n\t        this.__afterNotifyHandlers.push(handler);\n\t        return this;\n\t    };\n\t    Client.prototype.setContext = function (context) {\n\t        if (typeof context === 'object' && context != null) {\n\t            this.__store.setContext(context);\n\t        }\n\t        return this;\n\t    };\n\t    Client.prototype.resetContext = function (context) {\n\t        this.logger.warn('Deprecation warning: `Honeybadger.resetContext()` has been deprecated; please use `Honeybadger.clear()` instead.');\n\t        this.__store.clear();\n\t        if (typeof context === 'object' && context !== null) {\n\t            this.__store.setContext(context);\n\t        }\n\t        return this;\n\t    };\n\t    Client.prototype.clear = function () {\n\t        this.__store.clear();\n\t        return this;\n\t    };\n\t    Client.prototype.notify = function (noticeable, name, extra) {\n\t        var _this = this;\n\t        if (name === void 0) { name = undefined; }\n\t        if (extra === void 0) { extra = undefined; }\n\t        var notice = this.makeNotice(noticeable, name, extra);\n\t        // we need to have the source file data before the beforeNotifyHandlers,\n\t        // in case they modify them\n\t        var sourceCodeData = notice && notice.backtrace ? notice.backtrace.map(function (trace) { return (0, util_1$1.shallowClone)(trace); }) : null;\n\t        var preConditionsResult = this.__runPreconditions(notice);\n\t        if (preConditionsResult instanceof Error) {\n\t            (0, util_1$1.runAfterNotifyHandlers)(notice, this.__afterNotifyHandlers, preConditionsResult);\n\t            return false;\n\t        }\n\t        if (preConditionsResult instanceof Promise) {\n\t            preConditionsResult.then(function (result) {\n\t                if (result instanceof Error) {\n\t                    (0, util_1$1.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, result);\n\t                    return false;\n\t                }\n\t                return _this.__send(notice, sourceCodeData);\n\t            });\n\t            return true;\n\t        }\n\t        this.__send(notice, sourceCodeData).catch(function (_err) { });\n\t        return true;\n\t    };\n\t    /**\n\t     * An async version of {@link notify} that resolves only after the notice has been reported to Honeybadger.\n\t     * Implemented using the {@link afterNotify} hook.\n\t     * Rejects if for any reason the report failed to be reported.\n\t     * Useful in serverless environments (AWS Lambda).\n\t     */\n\t    Client.prototype.notifyAsync = function (noticeable, name, extra) {\n\t        var _this = this;\n\t        if (name === void 0) { name = undefined; }\n\t        if (extra === void 0) { extra = undefined; }\n\t        return new Promise(function (resolve, reject) {\n\t            var applyAfterNotify = function (partialNotice) {\n\t                var originalAfterNotify = partialNotice.afterNotify;\n\t                partialNotice.afterNotify = function (err) {\n\t                    originalAfterNotify === null || originalAfterNotify === void 0 ? void 0 : originalAfterNotify.call(_this, err);\n\t                    if (err) {\n\t                        return reject(err);\n\t                    }\n\t                    resolve();\n\t                };\n\t            };\n\t            // We have to respect any afterNotify hooks that come from the arguments\n\t            var objectToOverride;\n\t            if (noticeable.afterNotify) {\n\t                objectToOverride = noticeable;\n\t            }\n\t            else if (name && name.afterNotify) {\n\t                objectToOverride = name;\n\t            }\n\t            else if (extra && extra.afterNotify) {\n\t                objectToOverride = extra;\n\t            }\n\t            else if (name && typeof name === 'object') {\n\t                objectToOverride = name;\n\t            }\n\t            else if (extra) {\n\t                objectToOverride = extra;\n\t            }\n\t            else {\n\t                objectToOverride = name = {};\n\t            }\n\t            applyAfterNotify(objectToOverride);\n\t            _this.notify(noticeable, name, extra);\n\t        });\n\t    };\n\t    Client.prototype.makeNotice = function (noticeable, name, extra) {\n\t        if (name === void 0) { name = undefined; }\n\t        if (extra === void 0) { extra = undefined; }\n\t        var notice = (0, util_1$1.makeNotice)(noticeable);\n\t        if (name && !(typeof name === 'object')) {\n\t            var n = String(name);\n\t            name = { name: n };\n\t        }\n\t        if (name) {\n\t            notice = (0, util_1$1.mergeNotice)(notice, name);\n\t        }\n\t        if (typeof extra === 'object' && extra !== null) {\n\t            notice = (0, util_1$1.mergeNotice)(notice, extra);\n\t        }\n\t        if ((0, util_1$1.objectIsEmpty)(notice)) {\n\t            return null;\n\t        }\n\t        var context = this.__store.getContents('context');\n\t        var noticeTags = this.__constructTags(notice.tags);\n\t        var contextTags = this.__constructTags(context['tags']);\n\t        var configTags = this.__constructTags(this.config.tags);\n\t        // Turning into a Set will remove duplicates\n\t        var tags = noticeTags.concat(contextTags).concat(configTags);\n\t        var uniqueTags = tags.filter(function (item, index) { return tags.indexOf(item) === index; });\n\t        notice = (0, util_1$1.merge)(notice, {\n\t            name: notice.name || 'Error',\n\t            context: (0, util_1$1.merge)(context, notice.context),\n\t            projectRoot: notice.projectRoot || this.config.projectRoot,\n\t            environment: notice.environment || this.config.environment,\n\t            component: notice.component || this.config.component,\n\t            action: notice.action || this.config.action,\n\t            revision: notice.revision || this.config.revision,\n\t            tags: uniqueTags,\n\t        });\n\t        // If we're passed a custom backtrace array, use it\n\t        // Otherwise we make one.\n\t        if (!Array.isArray(notice.backtrace) || !notice.backtrace.length) {\n\t            if (typeof notice.stack !== 'string' || !notice.stack.trim()) {\n\t                notice.stack = (0, util_1$1.generateStackTrace)();\n\t                notice.backtrace = (0, util_1$1.makeBacktrace)(notice.stack, true, this.logger);\n\t            }\n\t            else {\n\t                notice.backtrace = (0, util_1$1.makeBacktrace)(notice.stack, false, this.logger);\n\t            }\n\t        }\n\t        return notice;\n\t    };\n\t    Client.prototype.addBreadcrumb = function (message, opts) {\n\t        if (!this.config.breadcrumbsEnabled) {\n\t            return;\n\t        }\n\t        opts = opts || {};\n\t        var metadata = (0, util_1$1.shallowClone)(opts.metadata);\n\t        var category = opts.category || 'custom';\n\t        var timestamp = new Date().toISOString();\n\t        this.__store.addBreadcrumb({\n\t            category: category,\n\t            message: message,\n\t            metadata: metadata,\n\t            timestamp: timestamp\n\t        });\n\t        return this;\n\t    };\n\t    /**\n\t     * @deprecated Use {@link event} instead.\n\t     */\n\t    Client.prototype.logEvent = function (data) {\n\t        (0, util_1$1.logDeprecatedMethod)(this.logger, 'Honeybadger.logEvent', 'Honeybadger.event');\n\t        this.event('log', data);\n\t    };\n\t    Client.prototype.event = function (type, data) {\n\t        var _a;\n\t        if (typeof type === 'object') {\n\t            data = type;\n\t            type = (_a = type['event_type']) !== null && _a !== void 0 ? _a : undefined;\n\t        }\n\t        this.__eventsLogger.log(__assign$1({ event_type: type, ts: new Date().toISOString() }, data));\n\t    };\n\t    /**\n\t     * This method currently flushes the event (Insights) queue.\n\t     * In the future, it should also flush the error queue (assuming an error throttler is implemented).\n\t     */\n\t    Client.prototype.flushAsync = function () {\n\t        return this.__eventsLogger.flushAsync();\n\t    };\n\t    Client.prototype.__getBreadcrumbs = function () {\n\t        return this.__store.getContents('breadcrumbs').slice();\n\t    };\n\t    Client.prototype.__getContext = function () {\n\t        return this.__store.getContents('context');\n\t    };\n\t    Client.prototype.__developmentMode = function () {\n\t        if (this.config.reportData === true) {\n\t            return false;\n\t        }\n\t        return (this.config.environment && this.config.developmentEnvironments.includes(this.config.environment));\n\t    };\n\t    Client.prototype.__buildPayload = function (notice) {\n\t        var headers = (0, util_1$1.filter)(notice.headers, this.config.filters) || {};\n\t        var cgiData = (0, util_1$1.filter)(__assign$1(__assign$1({}, notice.cgiData), (0, util_1$1.formatCGIData)(headers, 'HTTP_')), this.config.filters);\n\t        return {\n\t            notifier: this.__notifier,\n\t            breadcrumbs: {\n\t                enabled: !!this.config.breadcrumbsEnabled,\n\t                trail: notice.__breadcrumbs || []\n\t            },\n\t            error: {\n\t                class: notice.name,\n\t                message: notice.message,\n\t                backtrace: notice.backtrace,\n\t                fingerprint: notice.fingerprint,\n\t                tags: notice.tags,\n\t                causes: (0, util_1$1.getCauses)(notice, this.logger),\n\t            },\n\t            request: {\n\t                url: (0, util_1$1.filterUrl)(notice.url, this.config.filters),\n\t                component: notice.component,\n\t                action: notice.action,\n\t                context: notice.context,\n\t                cgi_data: cgiData,\n\t                params: (0, util_1$1.filter)(notice.params, this.config.filters) || {},\n\t                session: (0, util_1$1.filter)(notice.session, this.config.filters) || {}\n\t            },\n\t            server: {\n\t                project_root: notice.projectRoot,\n\t                environment_name: notice.environment,\n\t                revision: notice.revision,\n\t                hostname: this.config.hostname,\n\t                time: new Date().toUTCString()\n\t            },\n\t            details: notice.details || {}\n\t        };\n\t    };\n\t    Client.prototype.__constructTags = function (tags) {\n\t        if (!tags) {\n\t            return [];\n\t        }\n\t        return tags.toString().split(TAG_SEPARATOR).filter(function (tag) { return NOT_BLANK.test(tag); });\n\t    };\n\t    Client.prototype.__runPreconditions = function (notice) {\n\t        var _this = this;\n\t        var preConditionError = null;\n\t        if (!notice) {\n\t            this.logger.debug('failed to build error report');\n\t            preConditionError = new Error('failed to build error report');\n\t        }\n\t        if (this.config.reportData === false) {\n\t            this.logger.debug('skipping error report: honeybadger.js is disabled', notice);\n\t            preConditionError = new Error('honeybadger.js is disabled');\n\t        }\n\t        if (this.__developmentMode()) {\n\t            this.logger.log('honeybadger.js is in development mode; the following error report will be sent in production.', notice);\n\t            preConditionError = new Error('honeybadger.js is in development mode');\n\t        }\n\t        if (!this.config.apiKey) {\n\t            this.logger.warn('could not send error report: no API key has been configured', notice);\n\t            preConditionError = new Error('missing API key');\n\t        }\n\t        var beforeNotifyResult = (0, util_1$1.runBeforeNotifyHandlers)(notice, this.__beforeNotifyHandlers);\n\t        if (!preConditionError && !beforeNotifyResult.result) {\n\t            this.logger.debug('skipping error report: one or more beforeNotify handlers returned false', notice);\n\t            preConditionError = new Error('beforeNotify handlers returned false');\n\t        }\n\t        if (beforeNotifyResult.results.length && beforeNotifyResult.results.some(function (result) { return result instanceof Promise; })) {\n\t            return Promise.allSettled(beforeNotifyResult.results)\n\t                .then(function (results) {\n\t                if (!preConditionError && (results.some(function (result) { return result.status === 'rejected' || result.value === false; }))) {\n\t                    _this.logger.debug('skipping error report: one or more beforeNotify handlers returned false', notice);\n\t                    preConditionError = new Error('beforeNotify handlers (async) returned false');\n\t                }\n\t                if (preConditionError) {\n\t                    return preConditionError;\n\t                }\n\t            });\n\t        }\n\t        return preConditionError;\n\t    };\n\t    Client.prototype.__send = function (notice, originalBacktrace) {\n\t        var _this = this;\n\t        if (this.config.breadcrumbsEnabled) {\n\t            this.addBreadcrumb('Honeybadger Notice', {\n\t                category: 'notice',\n\t                metadata: {\n\t                    message: notice.message,\n\t                    name: notice.name,\n\t                    stack: notice.stack\n\t                }\n\t            });\n\t            notice.__breadcrumbs = this.__store.getContents('breadcrumbs');\n\t        }\n\t        else {\n\t            notice.__breadcrumbs = [];\n\t        }\n\t        return (0, util_1$1.getSourceForBacktrace)(originalBacktrace, this.__getSourceFileHandler)\n\t            .then(function (sourcePerTrace) { return __awaiter$1(_this, void 0, void 0, function () {\n\t            var payload;\n\t            return __generator$1(this, function (_a) {\n\t                sourcePerTrace.forEach(function (source, index) {\n\t                    notice.backtrace[index].source = source;\n\t                });\n\t                payload = this.__buildPayload(notice);\n\t                return [2 /*return*/, this.__transport\n\t                        .send({\n\t                        headers: {\n\t                            'X-API-Key': this.config.apiKey,\n\t                            'Content-Type': 'application/json',\n\t                            'Accept': 'text/json, application/json'\n\t                        },\n\t                        method: 'POST',\n\t                        endpoint: (0, util_1$1.endpoint)(this.config.endpoint, '/v1/notices/js'),\n\t                        maxObjectDepth: this.config.maxObjectDepth,\n\t                        logger: this.logger,\n\t                    }, payload)];\n\t            });\n\t        }); })\n\t            .then(function (res) {\n\t            if (res.statusCode !== 201) {\n\t                (0, util_1$1.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, new Error(\"Bad HTTP response: \".concat(res.statusCode)));\n\t                _this.logger.warn(\"Error report failed: unknown response from server. code=\".concat(res.statusCode));\n\t                return false;\n\t            }\n\t            var uuid = JSON.parse(res.body).id;\n\t            (0, util_1$1.runAfterNotifyHandlers)((0, util_1$1.merge)(notice, {\n\t                id: uuid\n\t            }), _this.__afterNotifyHandlers);\n\t            var noticeUrl = (0, util_1$1.endpoint)(_this.config.appEndpoint, \"notice/\".concat(uuid));\n\t            _this.logger.info(\"Error report sent \\u26A1 \".concat(noticeUrl));\n\t            return true;\n\t        })\n\t            .catch(function (err) {\n\t            _this.logger.error('Error report failed: an unknown error occurred.', \"message=\".concat(err.message));\n\t            (0, util_1$1.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, err);\n\t            return false;\n\t        });\n\t    };\n\t    return Client;\n\t}());\n\tclient.Client = Client;\n\n\tvar types = {};\n\n\tObject.defineProperty(types, \"__esModule\", { value: true });\n\n\t(function (exports) {\n\t\tvar __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    var desc = Object.getOwnPropertyDescriptor(m, k);\n\t\t    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n\t\t      desc = { enumerable: true, get: function() { return m[k]; } };\n\t\t    }\n\t\t    Object.defineProperty(o, k2, desc);\n\t\t}) : (function(o, m, k, k2) {\n\t\t    if (k2 === undefined) k2 = k;\n\t\t    o[k2] = m[k];\n\t\t}));\n\t\tvar __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {\n\t\t    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n\t\t}) : function(o, v) {\n\t\t    o[\"default\"] = v;\n\t\t});\n\t\tvar __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {\n\t\t    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n\t\t};\n\t\tvar __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {\n\t\t    if (mod && mod.__esModule) return mod;\n\t\t    var result = {};\n\t\t    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n\t\t    __setModuleDefault(result, mod);\n\t\t    return result;\n\t\t};\n\t\tvar __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {\n\t\t    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n\t\t};\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.Plugins = exports.Defaults = exports.Util = exports.Types = exports.Client = void 0;\n\t\tvar events_1 = __importDefault(events);\n\t\tvar client_1 = client;\n\t\tObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return client_1.Client; } });\n\t\t__exportStar(store, exports);\n\t\texports.Types = __importStar(types);\n\t\texports.Util = __importStar(util$1);\n\t\texports.Defaults = __importStar(defaults);\n\t\texports.Plugins = {\n\t\t    events: events_1.default\n\t\t};\n\t\t\n\t} (src));\n\n\tvar util = {};\n\n\tObject.defineProperty(util, \"__esModule\", { value: true });\n\tutil.preferCatch = util.encodeCookie = util.decodeCookie = util.localURLPathname = util.parseURL = util.nativeFetch = util.stringTextOfElement = util.stringSelectorOfElement = util.stringNameOfElement = void 0;\n\tvar core_1$7 = src;\n\tvar globalThisOrWindow$7 = core_1$7.Util.globalThisOrWindow;\n\t/**\n\t * Converts an HTMLElement into a human-readable string.\n\t * @param {!HTMLElement} element\n\t * @return {string}\n\t */\n\tfunction stringNameOfElement(element) {\n\t    if (!element || !element.tagName) {\n\t        return '';\n\t    }\n\t    var name = element.tagName.toLowerCase();\n\t    // Ignore the root <html> element in selectors and events.\n\t    if (name === 'html') {\n\t        return '';\n\t    }\n\t    if (element.id) {\n\t        name += \"#\".concat(element.id);\n\t    }\n\t    var stringClassNames = element.getAttribute('class');\n\t    if (stringClassNames) {\n\t        stringClassNames.split(/\\s+/).forEach(function (className) {\n\t            name += \".\".concat(className);\n\t        });\n\t    }\n\t    ['alt', 'name', 'title', 'type'].forEach(function (attrName) {\n\t        var attr = element.getAttribute(attrName);\n\t        if (attr) {\n\t            name += \"[\".concat(attrName, \"=\\\"\").concat(attr, \"\\\"]\");\n\t        }\n\t    });\n\t    var siblings = getSiblings(element);\n\t    if (siblings.length > 1) {\n\t        name += \":nth-child(\".concat(Array.prototype.indexOf.call(siblings, element) + 1, \")\");\n\t    }\n\t    return name;\n\t}\n\tutil.stringNameOfElement = stringNameOfElement;\n\tfunction stringSelectorOfElement(element) {\n\t    var name = stringNameOfElement(element);\n\t    if (element.parentNode && element.parentNode.tagName) {\n\t        var parentName = stringSelectorOfElement(element.parentNode);\n\t        if (parentName.length > 0) {\n\t            return \"\".concat(parentName, \" > \").concat(name);\n\t        }\n\t    }\n\t    return name;\n\t}\n\tutil.stringSelectorOfElement = stringSelectorOfElement;\n\tfunction stringTextOfElement(element) {\n\t    var text = element.textContent || element.innerText || '';\n\t    if (!text && (element.type === 'submit' || element.type === 'button')) {\n\t        text = element.value;\n\t    }\n\t    return truncate(text.trim(), 300);\n\t}\n\tutil.stringTextOfElement = stringTextOfElement;\n\tfunction nativeFetch() {\n\t    var global = globalThisOrWindow$7();\n\t    if (!global.fetch) {\n\t        return false;\n\t    }\n\t    if (isNative(global.fetch)) {\n\t        return true;\n\t    }\n\t    if (typeof document === 'undefined') {\n\t        return false;\n\t    }\n\t    // If fetch isn't native, it may be wrapped by someone else. Try to get\n\t    // a pristine function from an iframe.\n\t    try {\n\t        var sandbox = document.createElement('iframe');\n\t        sandbox.style.display = 'none';\n\t        document.head.appendChild(sandbox);\n\t        var result = sandbox.contentWindow.fetch && isNative(sandbox.contentWindow.fetch);\n\t        document.head.removeChild(sandbox);\n\t        return result;\n\t    }\n\t    catch (err) {\n\t        if (console && console.warn) {\n\t            console.warn('failed to detect native fetch via iframe: ' + err);\n\t        }\n\t    }\n\t    return false;\n\t}\n\tutil.nativeFetch = nativeFetch;\n\tfunction isNative(func) {\n\t    return func.toString().indexOf('native') !== -1;\n\t}\n\tfunction parseURL(url) {\n\t    // Regexp: https://tools.ietf.org/html/rfc3986#appendix-B\n\t    var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/) || {};\n\t    return {\n\t        protocol: match[2],\n\t        host: match[4],\n\t        pathname: match[5]\n\t    };\n\t}\n\tutil.parseURL = parseURL;\n\tfunction localURLPathname(url) {\n\t    var parsed = parseURL(url);\n\t    var parsedDocURL = parseURL(document.URL);\n\t    // URL must be relative\n\t    if (!parsed.host || !parsed.protocol) {\n\t        return parsed.pathname;\n\t    }\n\t    // Same domain\n\t    if (parsed.protocol === parsedDocURL.protocol && parsed.host === parsedDocURL.host) {\n\t        return parsed.pathname;\n\t    }\n\t    // x-domain\n\t    return \"\".concat(parsed.protocol, \"://\").concat(parsed.host).concat(parsed.pathname);\n\t}\n\tutil.localURLPathname = localURLPathname;\n\tfunction decodeCookie(string) {\n\t    var result = {};\n\t    string.split(/[;,]\\s?/).forEach(function (pair) {\n\t        var _a = pair.split('=', 2), key = _a[0], value = _a[1];\n\t        result[key] = value;\n\t    });\n\t    return result;\n\t}\n\tutil.decodeCookie = decodeCookie;\n\tfunction encodeCookie(object) {\n\t    if (typeof object !== 'object') {\n\t        return undefined;\n\t    }\n\t    var cookies = [];\n\t    for (var k in object) {\n\t        cookies.push(k + '=' + object[k]);\n\t    }\n\t    return cookies.join(';');\n\t}\n\tutil.encodeCookie = encodeCookie;\n\t// Helpers\n\tfunction getSiblings(element) {\n\t    try {\n\t        var nodes = element.parentNode.childNodes;\n\t        var siblings_1 = [];\n\t        Array.prototype.forEach.call(nodes, function (node) {\n\t            if (node.tagName && node.tagName === element.tagName) {\n\t                siblings_1.push(node);\n\t            }\n\t        });\n\t        return siblings_1;\n\t    }\n\t    catch (e) {\n\t        return [];\n\t    }\n\t}\n\tfunction truncate(string, length) {\n\t    if (string.length > length) {\n\t        string = string.substr(0, length) + '...';\n\t    }\n\t    return string;\n\t}\n\t// Used to decide which error handling method to use when wrapping async\n\t// handlers: try/catch, or `window.onerror`. When available, `window.onerror`\n\t// will provide more information in modern browsers.\n\tutil.preferCatch = (function () {\n\t    var preferCatch = true;\n\t    // In case we're in an environment without access to \"window\", lets make sure theres a window.\n\t    if (typeof window === 'undefined')\n\t        return preferCatch;\n\t    // IE < 10\n\t    if (!window.atob) {\n\t        preferCatch = false;\n\t    }\n\t    // Modern browsers support the full ErrorEvent API\n\t    // See https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent\n\t    if (window.ErrorEvent) {\n\t        try {\n\t            if ((new window.ErrorEvent('')).colno === 0) {\n\t                preferCatch = false;\n\t            }\n\t            // eslint-disable-next-line no-empty\n\t        }\n\t        catch (_e) { }\n\t    }\n\t    return preferCatch;\n\t})();\n\n\tvar onerror = {};\n\n\tObject.defineProperty(onerror, \"__esModule\", { value: true });\n\tonerror.onError = onerror.ignoreNextOnError = void 0;\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$6 = src;\n\tvar instrument$4 = core_1$6.Util.instrument, makeNotice = core_1$6.Util.makeNotice, globalThisOrWindow$6 = core_1$6.Util.globalThisOrWindow;\n\tvar ignoreOnError = 0;\n\tvar currentTimeout;\n\tfunction ignoreNextOnError() {\n\t    ignoreOnError += 1;\n\t    clearTimeout(currentTimeout);\n\t    currentTimeout = setTimeout(function () {\n\t        ignoreOnError = 0;\n\t    });\n\t}\n\tonerror.ignoreNextOnError = ignoreNextOnError;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tfunction onError(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$6(); }\n\t    return {\n\t        load: function (client) {\n\t            instrument$4(_window, 'onerror', function (original) {\n\t                var onerror = function (msg, url, line, col, err) {\n\t                    client.logger.debug('window.onerror callback invoked', arguments);\n\t                    if (ignoreOnError > 0) {\n\t                        client.logger.debug('Ignoring window.onerror (error likely reported earlier)', arguments);\n\t                        ignoreOnError -= 1;\n\t                        return;\n\t                    }\n\t                    // See https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers/onerror#Notes\n\t                    if (line === 0 && /Script error\\.?/.test(msg)) {\n\t                        if (client.config.enableUncaught) {\n\t                            // Log only if the user wants to report uncaught errors\n\t                            client.logger.warn('Ignoring cross-domain script error: enable CORS to track these types of errors', arguments);\n\t                        }\n\t                        return;\n\t                    }\n\t                    var notice = makeNotice(err);\n\t                    if (!notice.name) {\n\t                        notice.name = 'window.onerror';\n\t                    }\n\t                    if (!notice.message) {\n\t                        notice.message = msg;\n\t                    }\n\t                    if (!notice.stack) {\n\t                        // Simulate v8 stack\n\t                        notice.stack = [notice.message, '\\n    at ? (', url || 'unknown', ':', line || 0, ':', col || 0, ')'].join('');\n\t                    }\n\t                    client.addBreadcrumb((notice.name === 'window.onerror' || !notice.name) ? 'window.onerror' : \"window.onerror: \".concat(notice.name), {\n\t                        category: 'error',\n\t                        metadata: {\n\t                            name: notice.name,\n\t                            message: notice.message,\n\t                            stack: notice.stack\n\t                        }\n\t                    });\n\t                    if (client.config.enableUncaught) {\n\t                        client.notify(notice);\n\t                    }\n\t                };\n\t                return function (msg, url, line, col, err) {\n\t                    onerror(msg, url, line, col, err);\n\t                    if (typeof original === 'function') {\n\t                        return original.apply(_window, arguments);\n\t                    }\n\t                    return false;\n\t                };\n\t            });\n\t        }\n\t    };\n\t}\n\tonerror.onError = onError;\n\n\tvar onunhandledrejection = {};\n\n\tObject.defineProperty(onunhandledrejection, \"__esModule\", { value: true });\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$5 = src;\n\tvar instrument$3 = core_1$5.Util.instrument, globalThisOrWindow$5 = core_1$5.Util.globalThisOrWindow;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tfunction default_1$3(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$5(); }\n\t    return {\n\t        load: function (client) {\n\t            if (!client.config.enableUnhandledRejection) {\n\t                return;\n\t            }\n\t            instrument$3(_window, 'onunhandledrejection', function (original) {\n\t                // See https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event\n\t                function onunhandledrejection(promiseRejectionEvent) {\n\t                    var _a;\n\t                    client.logger.debug('window.onunhandledrejection callback invoked', arguments);\n\t                    if (!client.config.enableUnhandledRejection) {\n\t                        return;\n\t                    }\n\t                    var reason = promiseRejectionEvent.reason;\n\t                    if (reason instanceof Error) {\n\t                        // simulate v8 stack\n\t                        // const fileName = reason.fileName || 'unknown'\n\t                        // const lineNumber = reason.lineNumber || 0\n\t                        var fileName = 'unknown';\n\t                        var lineNumber = 0;\n\t                        var stackFallback = \"\".concat(reason.message, \"\\n    at ? (\").concat(fileName, \":\").concat(lineNumber, \")\");\n\t                        var stack = reason.stack || stackFallback;\n\t                        var err = {\n\t                            name: reason.name,\n\t                            message: \"UnhandledPromiseRejectionWarning: \".concat(reason),\n\t                            stack: stack\n\t                        };\n\t                        client.addBreadcrumb(\"window.onunhandledrejection: \".concat(err.name), {\n\t                            category: 'error',\n\t                            metadata: err\n\t                        });\n\t                        client.notify(err);\n\t                        return;\n\t                    }\n\t                    var message = typeof reason === 'string' ? reason : ((_a = JSON.stringify(reason)) !== null && _a !== void 0 ? _a : 'Unspecified reason');\n\t                    client.notify({\n\t                        name: 'window.onunhandledrejection',\n\t                        message: \"UnhandledPromiseRejectionWarning: \".concat(message)\n\t                    });\n\t                }\n\t                return function (promiseRejectionEvent) {\n\t                    onunhandledrejection(promiseRejectionEvent);\n\t                    if (typeof original === 'function') {\n\t                        original.apply(this, arguments);\n\t                    }\n\t                };\n\t            });\n\t        }\n\t    };\n\t}\n\tonunhandledrejection.default = default_1$3;\n\n\tvar breadcrumbs = {};\n\n\tObject.defineProperty(breadcrumbs, \"__esModule\", { value: true });\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$4 = src;\n\tvar util_1 = util;\n\tvar sanitize$1 = core_1$4.Util.sanitize, instrument$2 = core_1$4.Util.instrument, instrumentConsole = core_1$4.Util.instrumentConsole, globalThisOrWindow$4 = core_1$4.Util.globalThisOrWindow;\n\tfunction default_1$2(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$4(); }\n\t    return {\n\t        load: function (client) {\n\t            function breadcrumbsEnabled(type) {\n\t                if (client.config.breadcrumbsEnabled === true) {\n\t                    return true;\n\t                }\n\t                if (type) {\n\t                    return client.config.breadcrumbsEnabled[type] === true;\n\t                }\n\t                return client.config.breadcrumbsEnabled !== false;\n\t            }\n\t            // Breadcrumbs: instrument console\n\t            (function () {\n\t                if (!breadcrumbsEnabled('console')) {\n\t                    return;\n\t                }\n\t                function inspectArray(obj) {\n\t                    if (!Array.isArray(obj)) {\n\t                        return '';\n\t                    }\n\t                    return obj.map(function (value) {\n\t                        try {\n\t                            return String(value);\n\t                        }\n\t                        catch (e) {\n\t                            return '[unknown]';\n\t                        }\n\t                    }).join(' ');\n\t                }\n\t                instrumentConsole(_window, function (level, args) {\n\t                    var message = inspectArray(args);\n\t                    var opts = {\n\t                        category: 'log',\n\t                        metadata: {\n\t                            level: level,\n\t                            arguments: sanitize$1(args, 3)\n\t                        }\n\t                    };\n\t                    client.addBreadcrumb(message, opts);\n\t                });\n\t            })();\n\t            // Breadcrumbs: instrument click events\n\t            (function () {\n\t                if (!breadcrumbsEnabled('dom')) {\n\t                    return;\n\t                }\n\t                if (typeof _window.addEventListener !== 'function') {\n\t                    return;\n\t                }\n\t                _window.addEventListener('click', function (event) {\n\t                    var message, selector, text;\n\t                    try {\n\t                        message = (0, util_1.stringNameOfElement)(event.target);\n\t                        selector = (0, util_1.stringSelectorOfElement)(event.target);\n\t                        text = (0, util_1.stringTextOfElement)(event.target);\n\t                    }\n\t                    catch (e) {\n\t                        message = 'UI Click';\n\t                        selector = '[unknown]';\n\t                        text = '[unknown]';\n\t                    }\n\t                    // There's nothing to display\n\t                    if (message.length === 0) {\n\t                        return;\n\t                    }\n\t                    client.addBreadcrumb(message, {\n\t                        category: 'ui.click',\n\t                        metadata: {\n\t                            selector: selector,\n\t                            text: text,\n\t                            event: event\n\t                        }\n\t                    });\n\t                }, _window.location ? true : false); // In CloudFlare workers useCapture must be false. window.location is a hacky way to detect it.\n\t            })();\n\t            // Breadcrumbs: instrument XMLHttpRequest\n\t            (function () {\n\t                if (!breadcrumbsEnabled('network')) {\n\t                    return;\n\t                }\n\t                // Some environments may not support XMLHttpRequest.\n\t                if (typeof XMLHttpRequest === 'undefined') {\n\t                    return;\n\t                }\n\t                // -- On xhr.open: capture initial metadata\n\t                instrument$2(XMLHttpRequest.prototype, 'open', function (original) {\n\t                    return function () {\n\t                        // eslint-disable-next-line @typescript-eslint/no-this-alias\n\t                        var xhr = this;\n\t                        var rawUrl = arguments[1];\n\t                        // in case of url being URL object (which is valid input) we need to stringify it\n\t                        var url = typeof rawUrl === 'string' ? rawUrl : String(rawUrl);\n\t                        var method = typeof arguments[0] === 'string' ? arguments[0].toUpperCase() : arguments[0];\n\t                        var message = \"\".concat(method, \" \").concat((0, util_1.localURLPathname)(url));\n\t                        this.__hb_xhr = {\n\t                            type: 'xhr',\n\t                            method: method,\n\t                            url: url,\n\t                            message: message\n\t                        };\n\t                        if (typeof original === 'function') {\n\t                            original.apply(xhr, arguments);\n\t                        }\n\t                    };\n\t                });\n\t                // -- On xhr.send: set up xhr.onreadystatechange to report breadcrumb\n\t                instrument$2(XMLHttpRequest.prototype, 'send', function (original) {\n\t                    return function () {\n\t                        // eslint-disable-next-line @typescript-eslint/no-this-alias\n\t                        var xhr = this;\n\t                        function onreadystatechangeHandler() {\n\t                            if (xhr.readyState === 4) {\n\t                                var message = void 0;\n\t                                if (xhr.__hb_xhr) {\n\t                                    xhr.__hb_xhr.status_code = xhr.status;\n\t                                    message = xhr.__hb_xhr.message;\n\t                                    delete xhr.__hb_xhr.message;\n\t                                }\n\t                                client.addBreadcrumb(message || 'XMLHttpRequest', {\n\t                                    category: 'request',\n\t                                    metadata: xhr.__hb_xhr\n\t                                });\n\t                            }\n\t                        }\n\t                        if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n\t                            instrument$2(xhr, 'onreadystatechange', function (original) {\n\t                                return function () {\n\t                                    onreadystatechangeHandler();\n\t                                    if (typeof original === 'function') {\n\t                                        // eslint-disable-next-line prefer-rest-params\n\t                                        original.apply(this, arguments);\n\t                                    }\n\t                                };\n\t                            });\n\t                        }\n\t                        else {\n\t                            xhr.onreadystatechange = onreadystatechangeHandler;\n\t                        }\n\t                        if (typeof original === 'function') {\n\t                            // eslint-disable-next-line prefer-rest-params\n\t                            original.apply(xhr, arguments);\n\t                        }\n\t                    };\n\t                });\n\t            })();\n\t            // Breadcrumbs: instrument fetch\n\t            (function () {\n\t                if (!breadcrumbsEnabled('network')) {\n\t                    return;\n\t                }\n\t                if (!(0, util_1.nativeFetch)()) {\n\t                    // Polyfills use XHR.\n\t                    return;\n\t                }\n\t                instrument$2(_window, 'fetch', function (original) {\n\t                    return function () {\n\t                        // eslint-disable-next-line prefer-rest-params\n\t                        var input = arguments[0];\n\t                        var method = 'GET';\n\t                        var url;\n\t                        if (typeof input === 'string') {\n\t                            url = input;\n\t                        }\n\t                        else if ('Request' in _window && input instanceof Request) {\n\t                            url = input.url;\n\t                            if (input.method) {\n\t                                method = input.method;\n\t                            }\n\t                        }\n\t                        else {\n\t                            url = String(input);\n\t                        }\n\t                        if (arguments[1] && arguments[1].method) {\n\t                            method = arguments[1].method;\n\t                        }\n\t                        if (typeof method === 'string') {\n\t                            method = method.toUpperCase();\n\t                        }\n\t                        // localURLPathname cant be constructed for CF workers due to reliance on \"document\".\n\t                        var message = \"\".concat(method, \" \").concat(typeof document === 'undefined' ? url : (0, util_1.localURLPathname)(url));\n\t                        var metadata = {\n\t                            type: 'fetch',\n\t                            method: method,\n\t                            url: url\n\t                        };\n\t                        return original\n\t                            .apply(this, arguments)\n\t                            .then(function (response) {\n\t                            metadata['status_code'] = response.status;\n\t                            client.addBreadcrumb(message, {\n\t                                category: 'request',\n\t                                metadata: metadata\n\t                            });\n\t                            return response;\n\t                        })\n\t                            .catch(function (error) {\n\t                            client.addBreadcrumb('fetch error', {\n\t                                category: 'error',\n\t                                metadata: metadata\n\t                            });\n\t                            throw error;\n\t                        });\n\t                    };\n\t                });\n\t            })();\n\t            // Breadcrumbs: instrument navigation\n\t            (function () {\n\t                if (!breadcrumbsEnabled('navigation')) {\n\t                    return;\n\t                }\n\t                if (_window.location == null) {\n\t                    // Most likely in a CF worker, we should be listening to fetch requests instead.\n\t                    return;\n\t                }\n\t                // The last known href of the current page\n\t                var lastHref = _window.location.href;\n\t                function recordUrlChange(from, to) {\n\t                    lastHref = to;\n\t                    client.addBreadcrumb('Page changed', {\n\t                        category: 'navigation',\n\t                        metadata: {\n\t                            from: from,\n\t                            to: to\n\t                        }\n\t                    });\n\t                }\n\t                if (typeof addEventListener === 'function') {\n\t                    addEventListener('popstate', function (_event) {\n\t                        recordUrlChange(lastHref, _window.location.href);\n\t                    });\n\t                }\n\t                if (typeof _window.history === 'undefined') {\n\t                    return;\n\t                }\n\t                // https://developer.mozilla.org/en-US/docs/Web/API/History/pushState\n\t                // https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState\n\t                function historyWrapper(original) {\n\t                    return function () {\n\t                        var url = arguments.length > 2 ? arguments[2] : undefined;\n\t                        if (url) {\n\t                            recordUrlChange(lastHref, String(url));\n\t                        }\n\t                        return original.apply(this, arguments);\n\t                    };\n\t                }\n\t                instrument$2(_window.history, 'pushState', historyWrapper);\n\t                instrument$2(_window.history, 'replaceState', historyWrapper);\n\t            })();\n\t        }\n\t    };\n\t}\n\tbreadcrumbs.default = default_1$2;\n\n\tvar timers = {};\n\n\tObject.defineProperty(timers, \"__esModule\", { value: true });\n\t/* eslint-disable prefer-rest-params */\n\tvar core_1$3 = src;\n\tvar instrument$1 = core_1$3.Util.instrument, globalThisOrWindow$3 = core_1$3.Util.globalThisOrWindow;\n\tfunction default_1$1(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$3(); }\n\t    return {\n\t        load: function (client) {\n\t            // Wrap timers\n\t            (function () {\n\t                function instrumentTimer(wrapOpts) {\n\t                    return function (original) {\n\t                        // See https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout\n\t                        return function (func, delay) {\n\t                            if (typeof func === 'function') {\n\t                                var args_1 = Array.prototype.slice.call(arguments, 2);\n\t                                func = client.__wrap(func, wrapOpts);\n\t                                return original(function () {\n\t                                    func.apply(void 0, args_1);\n\t                                }, delay);\n\t                            }\n\t                            else {\n\t                                return original(func, delay);\n\t                            }\n\t                        };\n\t                    };\n\t                }\n\t                instrument$1(_window, 'setTimeout', instrumentTimer({ component: 'setTimeout' }));\n\t                instrument$1(_window, 'setInterval', instrumentTimer({ component: 'setInterval' }));\n\t            })();\n\t        }\n\t    };\n\t}\n\ttimers.default = default_1$1;\n\n\tvar event_listeners = {};\n\n\tObject.defineProperty(event_listeners, \"__esModule\", { value: true });\n\tvar core_1$2 = src;\n\tvar instrument = core_1$2.Util.instrument, globalThisOrWindow$2 = core_1$2.Util.globalThisOrWindow;\n\tfunction default_1(_window) {\n\t    if (_window === void 0) { _window = globalThisOrWindow$2(); }\n\t    return {\n\t        load: function (client) {\n\t            // Wrap event listeners\n\t            // Event targets borrowed from bugsnag-js:\n\t            // See https://github.com/bugsnag/bugsnag-js/blob/d55af916a4d3c7757f979d887f9533fe1a04cc93/src/bugsnag.js#L542\n\t            var targets = ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'];\n\t            targets.forEach(function (prop) {\n\t                var prototype = _window[prop] && _window[prop].prototype;\n\t                if (prototype && Object.prototype.hasOwnProperty.call(prototype, 'addEventListener')) {\n\t                    instrument(prototype, 'addEventListener', function (original) {\n\t                        var wrapOpts = { component: \"\".concat(prop, \".prototype.addEventListener\") };\n\t                        // See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n\t                        return function (type, listener, useCapture, wantsUntrusted) {\n\t                            try {\n\t                                if (listener && listener.handleEvent != null) {\n\t                                    listener.handleEvent = client.__wrap(listener.handleEvent, wrapOpts);\n\t                                }\n\t                            }\n\t                            catch (e) {\n\t                                // Ignore 'Permission denied to access property \"handleEvent\"' errors.\n\t                                client.logger.error(e);\n\t                            }\n\t                            return original.call(this, type, client.__wrap(listener, wrapOpts), useCapture, wantsUntrusted);\n\t                        };\n\t                    });\n\t                    instrument(prototype, 'removeEventListener', function (original) {\n\t                        return function (type, listener, useCapture, wantsUntrusted) {\n\t                            original.call(this, type, listener, useCapture, wantsUntrusted);\n\t                            return original.call(this, type, client.__wrap(listener), useCapture, wantsUntrusted);\n\t                        };\n\t                    });\n\t                }\n\t            });\n\t        }\n\t    };\n\t}\n\tevent_listeners.default = default_1;\n\n\tvar transport = {};\n\n\tvar __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t    });\n\t};\n\tvar __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t    function step(op) {\n\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t        while (_) try {\n\t            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\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t            switch (op[0]) {\n\t                case 0: case 1: t = op; break;\n\t                case 4: _.label++; return { value: op[1], done: false };\n\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t                default:\n\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t                    if (t[2]) _.ops.pop();\n\t                    _.trys.pop(); continue;\n\t            }\n\t            op = body.call(thisArg, _);\n\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t    }\n\t};\n\tObject.defineProperty(transport, \"__esModule\", { value: true });\n\ttransport.BrowserTransport = void 0;\n\tvar core_1$1 = src;\n\tvar sanitize = core_1$1.Util.sanitize, globalThisOrWindow$1 = core_1$1.Util.globalThisOrWindow;\n\t/**\n\t * Helper function to get typesafe Object.entries()\n\t * https://twitter.com/mattpocockuk/status/1502264005251018754?lang=en\n\t */\n\tfunction objectEntries(obj) {\n\t    return Object.entries(obj);\n\t}\n\tvar BrowserTransport = /** @class */ (function () {\n\t    function BrowserTransport(headers) {\n\t        if (headers === void 0) { headers = {}; }\n\t        this.headers = {};\n\t        this.headers = headers;\n\t    }\n\t    BrowserTransport.prototype.defaultHeaders = function () {\n\t        return this.headers;\n\t    };\n\t    BrowserTransport.prototype.send = function (options, payload) {\n\t        return __awaiter(this, void 0, void 0, function () {\n\t            var headerArray, headers, requestInit, response, body;\n\t            return __generator(this, function (_a) {\n\t                switch (_a.label) {\n\t                    case 0:\n\t                        headerArray = options.headers ? objectEntries(options.headers) : [];\n\t                        headers = this.defaultHeaders();\n\t                        headerArray.forEach(function (_a) {\n\t                            var key = _a[0], value = _a[1];\n\t                            if (key != null && value != null) {\n\t                                headers[String(key)] = String(value);\n\t                            }\n\t                        });\n\t                        requestInit = {\n\t                            method: options.method,\n\t                            headers: headers\n\t                        };\n\t                        // GET methods cannot have a body.\n\t                        if (options.method === 'POST' && payload) {\n\t                            requestInit.body = typeof payload === 'string' ? payload : JSON.stringify(sanitize(payload, options.maxObjectDepth));\n\t                        }\n\t                        return [4 /*yield*/, globalThisOrWindow$1().fetch(options.endpoint, requestInit)];\n\t                    case 1:\n\t                        response = _a.sent();\n\t                        return [4 /*yield*/, response.text()];\n\t                    case 2:\n\t                        body = _a.sent();\n\t                        return [2 /*return*/, Promise.resolve({ statusCode: response.status, body: body })];\n\t                }\n\t            });\n\t        });\n\t    };\n\t    return BrowserTransport;\n\t}());\n\ttransport.BrowserTransport = BrowserTransport;\n\n\tvar feedbackForm = {};\n\n\tvar __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t    __assign = Object.assign || function(t) {\n\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t            s = arguments[i];\n\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t                t[p] = s[p];\n\t        }\n\t        return t;\n\t    };\n\t    return __assign.apply(this, arguments);\n\t};\n\tObject.defineProperty(feedbackForm, \"__esModule\", { value: true });\n\tfeedbackForm.BrowserFeedbackForm = void 0;\n\tvar core_1 = src;\n\tvar globalThisOrWindow = core_1.Util.globalThisOrWindow;\n\tvar BrowserFeedbackForm = /** @class */ (function () {\n\t    function BrowserFeedbackForm(config, logger, scriptUrl) {\n\t        this.config = config;\n\t        this.logger = logger;\n\t        this.scriptUrl = scriptUrl;\n\t    }\n\t    /* ROLLUP_STRIP_CODE_CHROME_EXTENSION_START */\n\t    BrowserFeedbackForm.prototype.appendUserFeedbackTag = function (window, options) {\n\t        if (options === void 0) { options = {}; }\n\t        var script = window.document.createElement('script');\n\t        script.setAttribute('src', this.scriptUrl);\n\t        script.setAttribute('async', 'true');\n\t        if (options.onLoad) {\n\t            script.onload = options.onLoad;\n\t        }\n\t        (commonjsGlobal.document.head || commonjsGlobal.document.body).appendChild(script);\n\t    };\n\t    BrowserFeedbackForm.prototype.isUserFeedbackUrlAlreadyVisible = function () {\n\t        var global = globalThisOrWindow();\n\t        var feedbackScriptUrl = this.scriptUrl;\n\t        for (var i = 0; i < global.document.scripts.length; i++) {\n\t            var script = global.document.scripts[i];\n\t            if (script.src === feedbackScriptUrl) {\n\t                return true;\n\t            }\n\t        }\n\t        return false;\n\t    };\n\t    /* ROLLUP_STRIP_CODE_CHROME_EXTENSION_END */\n\t    BrowserFeedbackForm.prototype.show = function (lastNoticeId, options) {\n\t        if (options === void 0) { options = {}; }\n\t        if (typeof (this.appendUserFeedbackTag) !== 'function') {\n\t            this.logger.debug('Feedback form is not available in this environment');\n\t            return;\n\t        }\n\t        if (!this.config || !this.config.apiKey) {\n\t            this.logger.debug('Client not initialized');\n\t            return;\n\t        }\n\t        if (!lastNoticeId) {\n\t            this.logger.debug(\"Can't show user feedback form without a notice already reported\");\n\t            return;\n\t        }\n\t        var global = globalThisOrWindow();\n\t        if (typeof global.document === 'undefined') {\n\t            this.logger.debug('global.document is undefined. Cannot attach script');\n\t            return;\n\t        }\n\t        if (this.isUserFeedbackUrlAlreadyVisible()) {\n\t            this.logger.debug('User feedback form is already visible');\n\t            return;\n\t        }\n\t        global['honeybadgerUserFeedbackOptions'] = __assign(__assign({}, options), { apiKey: this.config.apiKey, endpoint: this.config.userFeedbackEndpoint, noticeId: lastNoticeId });\n\t        this.appendUserFeedbackTag(global, options);\n\t    };\n\t    return BrowserFeedbackForm;\n\t}());\n\tfeedbackForm.BrowserFeedbackForm = BrowserFeedbackForm;\n\n\t(function (exports) {\n\t\tvar __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () {\n\t\t    var extendStatics = function (d, b) {\n\t\t        extendStatics = Object.setPrototypeOf ||\n\t\t            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t\t            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n\t\t        return extendStatics(d, b);\n\t\t    };\n\t\t    return function (d, b) {\n\t\t        if (typeof b !== \"function\" && b !== null)\n\t\t            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\t\t        extendStatics(d, b);\n\t\t        function __() { this.constructor = d; }\n\t\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t\t    };\n\t\t})();\n\t\tvar __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () {\n\t\t    __assign = Object.assign || function(t) {\n\t\t        for (var s, i = 1, n = arguments.length; i < n; i++) {\n\t\t            s = arguments[i];\n\t\t            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n\t\t                t[p] = s[p];\n\t\t        }\n\t\t        return t;\n\t\t    };\n\t\t    return __assign.apply(this, arguments);\n\t\t};\n\t\tvar __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {\n\t\t    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n\t\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t\t        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n\t\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t\t    });\n\t\t};\n\t\tvar __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {\n\t\t    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n\t\t    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n\t\t    function verb(n) { return function (v) { return step([n, v]); }; }\n\t\t    function step(op) {\n\t\t        if (f) throw new TypeError(\"Generator is already executing.\");\n\t\t        while (_) try {\n\t\t            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\t\t            if (y = 0, t) op = [op[0] & 2, t.value];\n\t\t            switch (op[0]) {\n\t\t                case 0: case 1: t = op; break;\n\t\t                case 4: _.label++; return { value: op[1], done: false };\n\t\t                case 5: _.label++; y = op[1]; op = [0]; continue;\n\t\t                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n\t\t                default:\n\t\t                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n\t\t                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n\t\t                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n\t\t                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n\t\t                    if (t[2]) _.ops.pop();\n\t\t                    _.trys.pop(); continue;\n\t\t            }\n\t\t            op = body.call(thisArg, _);\n\t\t        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n\t\t        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n\t\t    }\n\t\t};\n\t\tvar __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {\n\t\t    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n\t\t};\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.Types = exports.getUserFeedbackScriptUrl = void 0;\n\t\tvar core_1 = src;\n\t\tvar util_1 = util;\n\t\tvar onerror_1 = onerror;\n\t\tvar onunhandledrejection_1 = __importDefault(onunhandledrejection);\n\t\tvar breadcrumbs_1 = __importDefault(breadcrumbs);\n\t\tvar timers_1 = __importDefault(timers);\n\t\tvar event_listeners_1 = __importDefault(event_listeners);\n\t\tvar transport_1 = transport;\n\t\tvar feedback_form_1 = feedbackForm;\n\t\tvar merge = core_1.Util.merge, filter = core_1.Util.filter, objectIsExtensible = core_1.Util.objectIsExtensible, globalThisOrWindow = core_1.Util.globalThisOrWindow;\n\t\tvar getProjectRoot = function () {\n\t\t    var global = globalThisOrWindow();\n\t\t    var projectRoot = '';\n\t\t    // Cloudflare workers do not have access to location API.\n\t\t    if (global.location != null) {\n\t\t        projectRoot = global.location.protocol + '//' + global.location.host;\n\t\t    }\n\t\t    return projectRoot;\n\t\t};\n\t\tvar getUserFeedbackScriptUrl = function (version) {\n\t\t    var majorMinorVersion = version.split('.').slice(0, 2).join('.');\n\t\t    return \"https://js.honeybadger.io/v\".concat(majorMinorVersion, \"/honeybadger-feedback-form.js\");\n\t\t};\n\t\texports.getUserFeedbackScriptUrl = getUserFeedbackScriptUrl;\n\t\tvar Honeybadger = /** @class */ (function (_super) {\n\t\t    __extends(Honeybadger, _super);\n\t\t    function Honeybadger(opts) {\n\t\t        if (opts === void 0) { opts = {}; }\n\t\t        var _this = _super.call(this, __assign({ userFeedbackEndpoint: 'https://api.honeybadger.io/v2/feedback', async: true, maxErrors: null, projectRoot: getProjectRoot() }, opts), new transport_1.BrowserTransport({\n\t\t            'User-Agent': userAgent(),\n\t\t        })) || this;\n\t\t        /** @internal */\n\t\t        _this.__errorsSent = 0;\n\t\t        /** @internal */\n\t\t        _this.__lastWrapErr = undefined;\n\t\t        /** @internal */\n\t\t        _this.__lastNoticeId = undefined;\n\t\t        /** @internal */\n\t\t        _this.__beforeNotifyHandlers = [\n\t\t            function (notice) {\n\t\t                if (_this.__exceedsMaxErrors()) {\n\t\t                    _this.logger.debug('Dropping notice: max errors exceeded', notice);\n\t\t                    return false;\n\t\t                }\n\t\t                if (notice && !notice.url && typeof document !== 'undefined') {\n\t\t                    notice.url = document.URL;\n\t\t                }\n\t\t                _this.__incrementErrorsCount();\n\t\t                return true;\n\t\t            }\n\t\t        ];\n\t\t        _this.__afterNotifyHandlers = [\n\t\t            function (_error, notice) {\n\t\t                if (notice) {\n\t\t                    _this.__lastNoticeId = notice.id;\n\t\t                }\n\t\t            }\n\t\t        ];\n\t\t        return _this;\n\t\t    }\n\t\t    Honeybadger.prototype.configure = function (opts) {\n\t\t        if (opts === void 0) { opts = {}; }\n\t\t        return _super.prototype.configure.call(this, opts);\n\t\t    };\n\t\t    Honeybadger.prototype.resetMaxErrors = function () {\n\t\t        return (this.__errorsSent = 0);\n\t\t    };\n\t\t    Honeybadger.prototype.factory = function (opts) {\n\t\t        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t        var clone = new Honeybadger(opts);\n\t\t        clone.setNotifier(this.getNotifier());\n\t\t        return clone;\n\t\t    };\n\t\t    Honeybadger.prototype.checkIn = function (_id) {\n\t\t        throw new Error('Honeybadger.checkIn() is not supported on the browser');\n\t\t    };\n\t\t    Honeybadger.prototype.showUserFeedbackForm = function (options) {\n\t\t        if (options === void 0) { options = {}; }\n\t\t        return __awaiter(this, void 0, void 0, function () {\n\t\t            var form;\n\t\t            return __generator(this, function (_a) {\n\t\t                form = new feedback_form_1.BrowserFeedbackForm(this.config, this.logger, this.getUserFeedbackSubmitUrl());\n\t\t                form.show(this.__lastNoticeId, options);\n\t\t                return [2 /*return*/];\n\t\t            });\n\t\t        });\n\t\t    };\n\t\t    Honeybadger.prototype.getUserFeedbackSubmitUrl = function () {\n\t\t        return (0, exports.getUserFeedbackScriptUrl)(this.getVersion());\n\t\t    };\n\t\t    /** @internal */\n\t\t    Honeybadger.prototype.__buildPayload = function (notice) {\n\t\t        var cgiData = {\n\t\t            HTTP_USER_AGENT: undefined,\n\t\t            HTTP_REFERER: undefined,\n\t\t            HTTP_COOKIE: undefined\n\t\t        };\n\t\t        if (typeof navigator !== 'undefined' && navigator.userAgent) {\n\t\t            cgiData.HTTP_USER_AGENT = navigator.userAgent;\n\t\t        }\n\t\t        if (typeof document !== 'undefined' && document.referrer.match(/\\S/)) {\n\t\t            cgiData.HTTP_REFERER = document.referrer;\n\t\t        }\n\t\t        var cookiesObject;\n\t\t        if (typeof notice.cookies === 'string') {\n\t\t            cookiesObject = (0, util_1.decodeCookie)(notice.cookies);\n\t\t        }\n\t\t        else {\n\t\t            cookiesObject = notice.cookies;\n\t\t        }\n\t\t        if (cookiesObject) {\n\t\t            cgiData.HTTP_COOKIE = (0, util_1.encodeCookie)(filter(cookiesObject, this.config.filters));\n\t\t        }\n\t\t        var payload = _super.prototype.__buildPayload.call(this, notice);\n\t\t        payload.request.cgi_data = merge(cgiData, payload.request.cgi_data);\n\t\t        return payload;\n\t\t    };\n\t\t    /**\n\t\t     * wrap always returns the same function so that callbacks can be removed via\n\t\t     * removeEventListener.\n\t\t     * @internal\n\t\t     */\n\t\t    Honeybadger.prototype.__wrap = function (f, opts) {\n\t\t        if (opts === void 0) { opts = {}; }\n\t\t        var func = f;\n\t\t        if (!opts) {\n\t\t            opts = {};\n\t\t        }\n\t\t        try {\n\t\t            if (typeof func !== 'function') {\n\t\t                return func;\n\t\t            }\n\t\t            if (!objectIsExtensible(func)) {\n\t\t                return func;\n\t\t            }\n\t\t            if (!func.___hb) {\n\t\t                // eslint-disable-next-line @typescript-eslint/no-this-alias\n\t\t                var client_1 = this;\n\t\t                func.___hb = function () {\n\t\t                    if (util_1.preferCatch) {\n\t\t                        try {\n\t\t                            // eslint-disable-next-line prefer-rest-params\n\t\t                            return func.apply(this, arguments);\n\t\t                        }\n\t\t                        catch (err) {\n\t\t                            if (client_1.__lastWrapErr === err) {\n\t\t                                throw (err);\n\t\t                            }\n\t\t                            client_1.__lastWrapErr = err;\n\t\t                            (0, onerror_1.ignoreNextOnError)();\n\t\t                            client_1.addBreadcrumb(opts.component ? \"\".concat(opts.component, \": \").concat(err.name) : err.name, {\n\t\t                                category: 'error',\n\t\t                                metadata: {\n\t\t                                    message: err.message,\n\t\t                                    name: err.name,\n\t\t                                    stack: err.stack\n\t\t                                }\n\t\t                            });\n\t\t                            if (client_1.config.enableUncaught) {\n\t\t                                client_1.notify(err);\n\t\t                            }\n\t\t                            throw (err);\n\t\t                        }\n\t\t                    }\n\t\t                    else {\n\t\t                        // eslint-disable-next-line prefer-rest-params\n\t\t                        return func.apply(this, arguments);\n\t\t                    }\n\t\t                };\n\t\t            }\n\t\t            func.___hb.___hb = func.___hb;\n\t\t            return func.___hb;\n\t\t        }\n\t\t        catch (_e) {\n\t\t            return func;\n\t\t        }\n\t\t    };\n\t\t    /** @internal */\n\t\t    Honeybadger.prototype.__incrementErrorsCount = function () {\n\t\t        return this.__errorsSent++;\n\t\t    };\n\t\t    /** @internal */\n\t\t    Honeybadger.prototype.__exceedsMaxErrors = function () {\n\t\t        return this.config.maxErrors && this.__errorsSent >= this.config.maxErrors;\n\t\t    };\n\t\t    return Honeybadger;\n\t\t}(core_1.Client));\n\t\tvar NOTIFIER = {\n\t\t    name: '@honeybadger-io/js',\n\t\t    url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/js',\n\t\t    version: '6.12.3'\n\t\t};\n\t\tvar userAgent = function () {\n\t\t    if (typeof navigator !== 'undefined') {\n\t\t        return \"Honeybadger JS Browser Client \".concat(NOTIFIER.version, \"; \").concat(navigator.userAgent);\n\t\t    }\n\t\t    return \"Honeybadger JS Browser Client \".concat(NOTIFIER.version, \"; n/a; n/a\");\n\t\t};\n\t\tvar singleton = new Honeybadger({\n\t\t    __plugins: [\n\t\t        (0, onerror_1.onError)(),\n\t\t        (0, onunhandledrejection_1.default)(),\n\t\t        (0, timers_1.default)(),\n\t\t        (0, event_listeners_1.default)(),\n\t\t        (0, breadcrumbs_1.default)(),\n\t\t        core_1.Plugins.events(),\n\t\t    ]\n\t\t});\n\t\tsingleton.setNotifier(NOTIFIER);\n\t\tvar core_2 = src;\n\t\tObject.defineProperty(exports, \"Types\", { enumerable: true, get: function () { return core_2.Types; } });\n\t\texports.default = singleton;\n\t\t\n\t} (browser$1));\n\n\tvar browser = /*@__PURE__*/getDefaultExportFromCjs(browser$1);\n\n\treturn browser;\n\n}));\n//# sourceMappingURL=honeybadger.js.map\n","import Honeybadger from '@honeybadger-io/js';\nexport { default as Honeybadger } from '@honeybadger-io/js';\nimport React, { Component } from 'react';\n\nfunction DefaultErrorComponent({ error, info }) {\n    return (React.createElement(\"div\", { className: 'error' },\n        React.createElement(\"div\", null, \"An Error Occurred\"),\n        React.createElement(\"div\", null, error ? error.toString() : ''),\n        React.createElement(\"div\", null, info ? JSON.stringify(info, null, 2) : '')));\n}\n\nclass HoneybadgerErrorBoundary extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            error: null,\n            info: null,\n            errorOccurred: false\n        };\n    }\n    static getDerivedStateFromError(error) {\n        return { error: error, errorOccurred: true, info: null };\n    }\n    componentDidMount() {\n        this.props.honeybadger.afterNotify((error, _notice) => {\n            if (!error && this.props.showUserFeedbackFormOnError) {\n                this.props.honeybadger.showUserFeedbackForm();\n            }\n        });\n    }\n    componentDidCatch(error, errorInfo) {\n        this.setState({ error, info: errorInfo });\n        this.props.honeybadger.notify(error, { context: errorInfo });\n    }\n    getErrorComponent() {\n        return this.props.ErrorComponent\n            ? React.createElement(this.props.ErrorComponent, { ...this.state })\n            : React.createElement(DefaultErrorComponent, { ...this.state });\n    }\n    render() {\n        return (React.createElement(React.Fragment, null, this.state.errorOccurred\n            ? this.getErrorComponent()\n            : this.props.children));\n    }\n}\nHoneybadgerErrorBoundary.defaultProps = {\n    showUserFeedbackFormOnError: false\n};\n\nconst NOTIFIER = {\n    name: '@honeybadger-io/react',\n    url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/react',\n    version: '6.1.27'\n};\nHoneybadger.setNotifier(NOTIFIER);\n\nexport { HoneybadgerErrorBoundary };\n//# sourceMappingURL=honeybadger-react.esm.js.map\n","/*!\n * accounting.js v0.4.1\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.1';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '')         // strip out any cruft\n\t\t\t\t.replace(decimal, '.')      // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\t\tvar power = Math.pow(10, precision);\n\n\t\t// Multiply up by precision, round accurately, then divide and use native toFixed():\n\t\treturn (Math.round(lib.unformat(value) * power) / power).toFixed(precision);\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (typeof exports !== 'undefined') {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n","// @flow\n// NOTE: This file is also imported from frontend JS application so that this\n//       file is the only one acting as the source of truth of what are the\n//       available locales!\n\n// Use a tuple type for locales as that disallows both adding new locales\n// or removing old locales without changing types.\n\n// Note: this file is not auto-formatted with Prettier as it would remove the\n// flow comments\n\nconst locales /*: ['fi', 'sv', 'en', 'da', 'pl', 'es', 'de', 'tra'] */ = [\n  'fi',\n  'sv',\n  'en',\n  'da',\n  'pl',\n  'es',\n  'de',\n  'tra'\n];\n\n/*::\nexport type Locale = 'fi' | 'sv' | 'en' | 'da' | 'pl' | 'es' | 'de' | 'tra';\n\n// This makes sure that all defined locales are specified in Locale type above\n(locales.map(locale => (locale: Locale)));\n*/\n\nmodule.exports = { locales };\n","import * as React from 'react';\nwindow.React = React;\n","import i18nFallbacks from 'railsRoot/config/i18n_fallbacks.json';\nimport I18n from 'i18n-js';\n\nexport default function i18nSetup() {\n  window.I18n = I18n;\n  I18n.locale = __LOCALE__;\n  I18n.defaultLocale = 'fi';\n  I18n.translations = I18N_RUNTIME_TRANSLATIONS;\n  I18n.placeholder = /%\\{(.*?)\\}/gm;\n\n  // Configure runtime I18n.t to test each fallback locale in the\n  // defined order before falling back to the default missing translation\n  // logic -- which most likely would show an error.\n  //\n  // This replicates the logic we see on Rails side.\n  const originalMissingTranslation = I18n.missingTranslation;\n  I18n.missingTranslation = function (scope, options) {\n    // English translation doesn't define fallback locales, so we\n    // default to an empty array of fallback locales to not crash when\n    // fallback locales don't exist.\n    //\n    // This makes a missing translation error show up in case I18n.t\n    // ends up using a translation that doesn't exist and we use English.\n    const fallbackLocales = i18nFallbacks[this.locale] || [];\n    if (options.__usedFallbackLocales >= fallbackLocales.length) {\n      return originalMissingTranslation.call(this, scope, options);\n    }\n    const nextFallbackLocaleIndex =\n      typeof options.__usedFallbackLocales === 'undefined'\n        ? 0\n        : options.__usedFallbackLocales + 1;\n    return I18n.t(scope, {\n      ...options,\n      locale: fallbackLocales[nextFallbackLocaleIndex],\n      __usedFallbackLocales: nextFallbackLocaleIndex\n    });\n  };\n\n  // We want missing placeholders to not output anything in order for the In-Context\n  // translation mode to pick the original translation as it was in the language under\n  // translation -- that is, we want to effectively disable interpolation altogether.\n  if (__LOCALE__ === 'tra') {\n    I18n.missingPlaceholder = placeholder => placeholder;\n  }\n}\n","// @flow\n\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport Honeybadger from '@honeybadger-io/js';\n\nimport { HoneybadgerErrorBoundary } from '@honeybadger-io/react';\nimport ErrorComponent from 'common/components/ErrorComponent.js';\n\ntype AnyProps = {| [string]: any |};\n\ntype ComponentMap = any;\ntype LazyComponentMap = any;\n\nexport function exposeComponents(mountableComponents: ComponentMap) {\n  window.Venuu.REACT_COMPONENTS = {\n    ...window.Venuu.REACT_COMPONENTS,\n    ...mountableComponents\n  };\n}\n\nexport function exposeLazyComponents(mountableComponents: LazyComponentMap) {\n  window.Venuu.REACT_LAZY_COMPONENTS = {\n    ...window.Venuu.REACT_LAZY_COMPONENTS,\n    ...mountableComponents\n  };\n}\n\nexport function createElement(\n  component: React.ComponentType<AnyProps>,\n  props: AnyProps\n): React.Node {\n  // $FlowFixMe[not-a-function] -- Suppressed during Flow upgrade to 0.241.0. Delete this comment to view the error.\n  return React.createElement(component, props);\n}\n\nconst mountComponentFromNode = (node: HTMLElement) => {\n  const componentName = node.getAttribute('data-react-class');\n  const componentId = node.getAttribute('data-component-id');\n  if (!componentName || !componentId) {\n    throw new Error(\"Can't mount react node\");\n  }\n  const props = window.Venuu.REACT_PROPS[`${componentName}:${componentId}`];\n  mountComponent(componentName, props, node);\n};\n\nfunction mountComponent(\n  componentName: string,\n  props: AnyProps,\n  node: HTMLElement\n) {\n  const normalComponent =\n    window.Venuu.REACT_COMPONENTS &&\n    window.Venuu.REACT_COMPONENTS[componentName];\n  const loadLazyComponent =\n    window.Venuu.REACT_LAZY_COMPONENTS &&\n    window.Venuu.REACT_LAZY_COMPONENTS[componentName];\n\n  if (normalComponent) {\n    render(normalComponent, props, node);\n  } else if (loadLazyComponent) {\n    loadLazyComponent()\n      .then(component => {\n        render(component, props, node);\n      })\n      .catch(err => {\n        // eslint-disable-next-line no-console\n        console.error(err);\n      });\n  } else {\n    throw new Error(\n      `Could not find mountable component ${componentName}. ` +\n        'You need to expose it through REACT_COMPONENTS or REACT_LAZY_COMPONENTS.'\n    );\n  }\n}\n\nfunction render(component: any, props: AnyProps, node: HTMLElement) {\n  try {\n    Honeybadger.setContext({ component: component.name, props });\n    // $FlowFixMe[incompatible-type] createElement() has a too wide potential return type\n    const element: React.Element<React.ElementType> = createElement(\n      component,\n      props\n    );\n    // TODO: Call ReactDOM.hydrate instead when the component has been server-rendered\n    ReactDOM.render(\n      <HoneybadgerErrorBoundary\n        honeybadger={Honeybadger}\n        ErrorComponent={ErrorComponent}\n      >\n        {element}\n      </HoneybadgerErrorBoundary>,\n      node\n    );\n  } finally {\n    Honeybadger.setContext({ component: null, props: null });\n  }\n}\n\nexport function mountAllComponents() {\n  const reactNodes = document.querySelectorAll('[data-react-class]');\n\n  // YYyeah, document.querySelectorAll doesn't return an Array but a NodeList object. And that\n  // fucker naturally doesn't support .map function, because DOM API sucks balls, so we have to\n  // rely on normal for-loop to iterate the nodes.\n  // https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array\n  for (let i = 0; i < reactNodes.length; i++) {\n    mountComponentFromNode(reactNodes[i]);\n  }\n}\n","// Setup moment.js locale bundle-wide\nimport moment from 'moment';\nimport 'moment/locale/current';\nmoment.locale(__LOCALE__ === 'en' ? 'en-gb' : __LOCALE__);\n","/**\n * Function to get cookies as an object of name/value pairs\n *\n * TODO: should we be / are we using jquery.cookie instead?\n */\nexport default function getCookies() {\n  const cookies = {};\n  const all = document.cookie;\n  if (all === '') {\n    return cookies;\n  }\n  const list = all.split('; ');\n  for (let i = 0; i < list.length; i++) {\n    const cookie = list[i];\n    const p = cookie.indexOf('=');\n    const name = cookie.substring(0, p);\n    let value = cookie.substring(p + 1);\n    value = decodeURIComponent(value);\n    cookies[name] = value;\n  }\n  return cookies;\n}\n","// @flow\n\nimport { oneOf } from 'common/json/extract';\n\ntype CookieCategory =\n  | 'necessary'\n  | 'functional'\n  | 'performance'\n  | 'analytics'\n  | 'advertisement'\n  | 'other';\n\nconst cookieCategories: Array<CookieCategory> = [\n  'necessary',\n  'functional',\n  'performance',\n  'analytics',\n  'advertisement',\n  'other'\n];\n\nexport function getConsentedCookieCategories(\n  cookies: string\n): Array<CookieCategory> {\n  const re = new RegExp('cookieyes-consent=([^;]+)');\n  const rawValue = re.exec(cookies);\n  const cookieValue = rawValue !== null ? unescape(rawValue[1]) : null;\n\n  if (cookieValue) {\n    const cookiePairs = cookieValue.split(',').map(pair => pair.trim());\n    const cookieArr = [];\n    cookiePairs.forEach(pair => {\n      const [key, value] = pair.split(':');\n      if (cookieCategories.includes(key) && value === 'yes') {\n        const category = oneOf(cookieCategories)(key);\n        cookieArr.push(category);\n      }\n    });\n\n    return cookieArr;\n  }\n  return [];\n}\n\nexport function consentGivenForCategory(category: CookieCategory): boolean {\n  return getConsentedCookieCategories(document.cookie).includes(category);\n}\n","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n\nfunction parse(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  let v;\n  const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nexport default parse;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n  switch (s) {\n    case 0:\n      return x & y ^ ~x & z;\n\n    case 1:\n      return x ^ y ^ z;\n\n    case 2:\n      return x & y ^ x & z ^ y & z;\n\n    case 3:\n      return x ^ y ^ z;\n  }\n}\n\nfunction ROTL(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n  const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n  const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n  if (typeof bytes === 'string') {\n    const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = [];\n\n    for (let i = 0; i < msg.length; ++i) {\n      bytes.push(msg.charCodeAt(i));\n    }\n  } else if (!Array.isArray(bytes)) {\n    // Convert Array-like to Array\n    bytes = Array.prototype.slice.call(bytes);\n  }\n\n  bytes.push(0x80);\n  const l = bytes.length / 4 + 2;\n  const N = Math.ceil(l / 16);\n  const M = new Array(N);\n\n  for (let i = 0; i < N; ++i) {\n    const arr = new Uint32Array(16);\n\n    for (let j = 0; j < 16; ++j) {\n      arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n    }\n\n    M[i] = arr;\n  }\n\n  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n  M[N - 1][14] = Math.floor(M[N - 1][14]);\n  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n  for (let i = 0; i < N; ++i) {\n    const W = new Uint32Array(80);\n\n    for (let t = 0; t < 16; ++t) {\n      W[t] = M[i][t];\n    }\n\n    for (let t = 16; t < 80; ++t) {\n      W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n    }\n\n    let a = H[0];\n    let b = H[1];\n    let c = H[2];\n    let d = H[3];\n    let e = H[4];\n\n    for (let t = 0; t < 80; ++t) {\n      const s = Math.floor(t / 20);\n      const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n      e = d;\n      d = c;\n      c = ROTL(b, 30) >>> 0;\n      b = a;\n      a = T;\n    }\n\n    H[0] = H[0] + a >>> 0;\n    H[1] = H[1] + b >>> 0;\n    H[2] = H[2] + c >>> 0;\n    H[3] = H[3] + d >>> 0;\n    H[4] = H[4] + e >>> 0;\n  }\n\n  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  const bytes = [];\n\n  for (let i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    var _namespace;\n\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = parse(namespace);\n    }\n\n    if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    let bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (let i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return unsafeStringify(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","// @flow\n\nimport { v5 as uuidv5 } from 'uuid';\n\n// NOTE: Keep in sync with lib/tracking/user_id.rb\n\n// These are the bytes from string 'Venuu/tracking_d'.\nconst FIRST_16_BYTES = [\n  86, 101, 110, 117, 117, 47, 116, 114, 97, 99, 107, 105, 110, 103, 95, 100\n];\n// This is the remaining part of 'Venuu/tracking_distinct_id' after the first 16 bytes\nconst REMAINING_STRING = 'istinct_id';\n\nexport function generateUserId({ userEmail }: {| userEmail: string |}): string {\n  // We can only provide 16 bytes worth of data as the UUID v5 namespace value\n  // for the `uuid` npm package, so 'istinct_id' part needs to be prepended\n  // to the uuidv5 input value.\n  //\n  // This way we get the same output on JS side as we would get on Ruby side\n  // if we ran this:\n  //\n  // Digest::UUID.uuid_v5('Venuu/tracking_distinct_id', user_email.downcase.to_s)\n  return uuidv5(\n    `${REMAINING_STRING}${userEmail.toLowerCase()}`,\n    FIRST_16_BYTES\n  );\n}\n","// @flow\n\nimport { retrieve } from 'putki';\nimport { object, record, nullable, id, oneOf } from 'common/json/extract';\n\ntype PageType =\n  | 'conversionintent'\n  | 'offerdetail'\n  | 'home'\n  | 'searchresults'\n  | 'others';\n\ntype GoogleTagParams = {|\n  hrental_id: string,\n  hrental_pagetype: PageType,\n  hrental_totalvalue: number\n|};\n\nconst extractRemarketingDetails = nullable(\n  object(\n    record({\n      page: oneOf(['conversionintent', 'offerdetail', 'home', 'searchresults']),\n      id: nullable(id)\n    })\n  )\n);\n\nexport function retrieveRemarketingProperties(): GoogleTagParams {\n  const remarketingDetails = extractRemarketingDetails(\n    retrieve('remarketing_details')\n  ) || {\n    page: 'others'\n  };\n\n  return {\n    hrental_id: remarketingDetails.id || '',\n    hrental_pagetype: remarketingDetails.page,\n    hrental_totalvalue: 0\n  };\n}\n","// @flow\n\nimport $ from 'jquery';\nimport { retrieve } from 'putki';\nimport currentSite from 'site/currentSite';\nimport getCookies from 'utils/getCookies';\nimport { consentGivenForCategory } from 'utils/cookieConsent';\nimport { generateUserId } from 'utils/trackingUserId';\nimport { trackClicksOn } from 'utils/analytics';\nimport {\n  object,\n  record,\n  nullable,\n  string,\n  withDefault\n} from 'common/json/extract';\n\nimport { retrieveRemarketingProperties } from './analytics/remarketing';\n\nfunction loadAnalytics() {\n  // Now it's time to inject Jitsu on the page if we can\n  const jitsuDomain = retrieve('jitsu_domain');\n  const jitsuBrowserWriteKey = retrieve('jitsu_browser_write_key');\n  if (\n    typeof jitsuDomain !== 'string' ||\n    typeof jitsuBrowserWriteKey !== 'string'\n  ) {\n    return;\n  }\n\n  // Inject the Jitsu script tag to the page, triggering the loading of it once done.\n  // This is similar to what Segment's analytics.load() did when we used Segment.\n  const jitsuScriptTag = document.createElement('script');\n  jitsuScriptTag.async = true;\n  jitsuScriptTag.src = `https://${jitsuDomain}/p.js`;\n\n  // Configure Jitsu with data tags as that works the best when loading the JS\n  // code asynchronously. For example, we can't stop Jitsu from automatically\n  // sending a `page` tracking event otherwise.\n  // Full configuration reference: https://docs.jitsu.com/sending-data/js-reference\n  jitsuScriptTag.setAttribute('data-write-key', jitsuBrowserWriteKey);\n  jitsuScriptTag.setAttribute('data-init-only', 'true');\n  jitsuScriptTag.setAttribute(\n    'data-cookie-names',\n    JSON.stringify({\n      // Replicate the anonymous ID cookie names we used to have from Segment era.\n      // This way the cookie values set on JS side are kept the same as before.\n      anonymousId: 'ajs_anonymous_id',\n      userId: 'ajs_user_id'\n    })\n  );\n  // eslint-disable-next-line no-restricted-globals -- global location usage is expected\n  if (location.search.includes('debugJitsu=1')) {\n    jitsuScriptTag.setAttribute('data-debug', 'true');\n  }\n  // Once Jitsu has loaded, we'll set the anonymous ID as the very first thing so all\n  // the queued events will already have the correct anonymous ID set.\n  window.jitsuOnLoadCallback = jitsu => {\n    const serverSideAnonymousId = getCookies()['cheekify_a'];\n    if (serverSideAnonymousId) {\n      jitsu.setAnonymousId(getCookies()['cheekify_a']);\n    }\n  };\n  jitsuScriptTag.setAttribute('data-onload', 'jitsuOnLoadCallback');\n\n  // Now we inject the tag to the DOM the same way Segment analytics.js would do\n  const firstScriptTag = document.getElementsByTagName('script')[0];\n  firstScriptTag.parentNode?.insertBefore(jitsuScriptTag, firstScriptTag);\n}\n\nfunction loadAnalyticsOnConsent() {\n  document.addEventListener('cookieyes_consent_update', eventData => {\n    // $FlowIgnore[prop-missing] -- https://www.cookieyes.com/documentation/events-on-cookie-banner-interactions/\n    const data = eventData.detail;\n    if (data.accepted.includes('analytics')) {\n      loadAnalytics();\n    }\n  });\n}\n\n/**\n * Rebinds tracking of anchor elements with data-venuu-t attributes.\n */\nfunction rebindTrackedLinks() {\n  trackClicksOn($('a[data-venuu-t]:not([data-venuu-t-react])'));\n}\n\nconst extractUserTrackingData = withDefault(\n  object(\n    record({\n      email: nullable(string),\n      customer_type: nullable(string)\n    })\n  ),\n  { email: null, customer_type: null }\n);\n\n/**\n * Persists the gclid parameter from the url or the _gcl_aw-cookie to our own cookie.\n *\n * This is done to ensure that we are not fully dependent on the poorly documented\n * Google conversion linker and the corresponding _gcl_aw cookie.\n */\nfunction persistGclid() {\n  let gclidFromUrl: ?string;\n  try {\n    // URLs which purl can't parse might throw. Don't throw in that case.\n    gclidFromUrl = $.url().param('gclid');\n  } catch (e) {\n    // no-op\n  }\n\n  const gclidCookie: ?string = $.cookie('_gcl_aw');\n  const gclidFromCookie: ?string = gclidCookie && gclidCookie.split('.')[2];\n\n  const gclid = gclidFromUrl || gclidFromCookie;\n\n  if (gclid) {\n    $.cookie('venuu_gclid', gclid, { expires: 90, path: '/' });\n  }\n}\n\nfunction distinctIdFromUrl() {\n  try {\n    // URLs which purl can't parse might throw. Don't throw in that case.\n    // See https://github.com/venuu/venuu/issues/749\n    return $.url().param('distinct_id');\n  } catch (e) {\n    return null;\n  }\n}\n\nfunction emailIdFromUrl() {\n  let rawEmailDistinctId: string | null = null;\n  try {\n    // URLs which purl can't parse might throw. Don't throw in that case.\n    // See https://github.com/venuu/venuu/issues/749\n    rawEmailDistinctId = $.url().param('email_distinct_id');\n  } catch (e) {\n    // no-op\n  }\n  if (!rawEmailDistinctId) {\n    return null;\n  }\n  return generateUserId({ userEmail: rawEmailDistinctId });\n}\n\n/**\n * The following functions are a part of the improved user tracking scheme.\n * ------------------------------------------------\n * Documentation: https://github.com/venuu/venuu/pull/7368\n */\nfunction identifyUser() {\n  const userIdFromUrl = distinctIdFromUrl();\n  const emailUserIdFromUrl = emailIdFromUrl();\n  const userIdFromCookie = getCookies()['cheekify_uid'];\n  const { email, customer_type: customerType } = extractUserTrackingData(\n    retrieve('user_tracking_data')\n  );\n\n  const commonTraits = {\n    'Application Version': retrieve('application_version'),\n    'Site Key': currentSite().key\n  };\n\n  const identify = (...args: any) => {\n    (window.jitsuQ = window.jitsuQ || []).push(jitsu => {\n      jitsu.identify(...args);\n    });\n  };\n\n  if (userIdFromCookie && email) {\n    const traits = {\n      ...commonTraits,\n      Source: 'Venuu web app',\n      'Customer Type': customerType,\n      email: email\n    };\n    if (traits['Customer Type'] === null) {\n      // $FlowFixMe[incompatible-type] -- Suppressed during Flow upgrade to 0.201.0. Delete this comment to view the error.\n      delete traits['Customer Type'];\n    }\n    identify(userIdFromCookie, traits);\n  } else if (userIdFromUrl) {\n    // These are returning users\n    // so they should customer identification traits set.\n    identify(userIdFromUrl, commonTraits);\n  } else if (emailUserIdFromUrl) {\n    identify(emailUserIdFromUrl, commonTraits);\n  }\n}\n\nexport default function initializeAnalytics() {\n  if (consentGivenForCategory('analytics')) {\n    loadAnalytics();\n  } else {\n    loadAnalyticsOnConsent();\n  }\n\n  identifyUser();\n\n  const pageOpts = retrieveRemarketingProperties();\n\n  (window.jitsuQ = window.jitsuQ || []).push(jitsu => {\n    jitsu.page(pageOpts);\n  });\n\n  // Track special links\n  rebindTrackedLinks();\n\n  persistGclid();\n}\n","// Load all social media plugins only after page has been fully loaded. This\n// reduces the payload needed to get the page visible and running -- not any of\n// these plugins is the reason why the user comes to the site, so they should be\n// lazily loaded.\n//\n// Also, these plugins are loaded only on certain pages on the site, so we need\n// to specify those conditions first using a custom callback.\n\nimport { retrieve } from 'putki';\n\nconst socialMediaInitCondition = () => {\n  const controller = retrieve('controller');\n  const action = retrieve('action');\n\n  if (controller === 'price_requests' && action === 'thanks') {\n    return true;\n  } else {\n    // No-one else needs it.\n    return false;\n  }\n};\n\nconst lazyloadPlugins = () => {\n  if (retrieve('disable_external_js')) return;\n\n  $(window).load(() => {\n    // Facebook\n    window.fbAsyncInit = function () {\n      /* global FB */\n      FB.init({\n        xfbml: true\n      });\n    };\n\n    // Disable warnings about copypasta\n    /* eslint-disable prefer-const, one-var */\n    (function (d, s, id) {\n      let js,\n        fjs = d.getElementsByTagName(s)[0];\n      if (d.getElementById(id)) return;\n      js = d.createElement(s);\n      js.id = id;\n      js.async = true;\n      js.src = `https://connect.facebook.net/${__(\n        'locale_and_country_code'\n      )}/all.js`;\n      fjs.parentNode.insertBefore(js, fjs);\n    })(document, 'script', 'facebook-jssdk');\n    /* eslint-enable */\n  });\n};\n\n$(document).ready(() => {\n  if (socialMediaInitCondition()) {\n    lazyloadPlugins();\n  }\n});\n","const initializeFoundation = () => {\n  /*\n   * FIXME: hack to make Magellan work in a sidebar.\n   * Can be replaced by the offset_by_height option in Foundation 5.5.\n   * https://github.com/zurb/foundation/pull/5801\n   */\n  const sidebarMenuHeight = $('[data-magellan-expedition]').outerHeight();\n\n  const BLANK_RE = /^\\s*$/;\n\n  $(document).foundation({\n    'magellan-expedition': {\n      active_class: 'is-current',\n      destination_threshold: -sidebarMenuHeight,\n      throttle_delay: 100\n    },\n    tooltip: {\n      touch_close_text: __('foundation.tooltip.touch_close_text')\n    },\n    abide: {\n      validators: {\n        valuePlaceholder: function (el, required) {\n          // At least one, non-whitespace character should be present in the textarea.\n          // So newlines alone will not be valid.\n          if (required && BLANK_RE.test(el.value)) {\n            return false;\n          } else if (el.value === el.getAttribute('data-placeholder')) {\n            return false;\n          } else {\n            return true;\n          }\n        }\n      }\n    }\n  });\n\n  function toggleSidebarNavigationBasedOnTopbarVisibility() {\n    const $topBar = $('.top-bar').first();\n    const isTopNavigationExpanded = $topBar.hasClass('expanded');\n    $('.m-navigation').toggleClass(\n      'm-navigation--expanded',\n      isTopNavigationExpanded\n    );\n  }\n\n  const originalTopBarToggle = window.Foundation.libs.topbar.toggle;\n  window.Foundation.libs.topbar.toggle = function (...args) {\n    originalTopBarToggle.call(this, ...args);\n    toggleSidebarNavigationBasedOnTopbarVisibility();\n  };\n};\n\nexport default initializeFoundation;\n","import satisfiesMediaQuery from 'utils/satisfiesMediaQuery';\n\n$(() => {\n  if (!$('.m-box-sticky-container').length) {\n    return;\n  }\n\n  const $sidebar = $('.m-box-sticky-container');\n\n  const $footer = $('.js-sticky-sidebar-end, footer').first();\n  const $wrapper = () => $('.sticky-wrapper');\n  const wrapperWidth = () => $wrapper().outerWidth();\n\n  $sidebar.waypoint('sticky', {\n    stuckClass: 'm-box-sticky',\n    offset: 20,\n    handler: () => $sidebar.css({ width: wrapperWidth() })\n  });\n\n  $footer.waypoint(\n    direction => {\n      if (direction === 'down') {\n        const offset =\n          $footer.offset().top -\n          $wrapper().offset().top -\n          $sidebar.outerHeight();\n        $sidebar.css({\n          position: 'absolute',\n          top: offset,\n          width: wrapperWidth()\n        });\n      } else if (direction === 'up') {\n        $sidebar\n          .removeAttr('style')\n          .css({ width: wrapperWidth() })\n          .addClass('m-box-sticky');\n      }\n    },\n    {\n      offset: () => $sidebar.outerHeight() + 20\n    }\n  );\n\n  const resize = function () {\n    if (satisfiesMediaQuery('middle')) {\n      $.waypoints('enable');\n    } else {\n      $sidebar.attr('style', '').removeClass('m-box-sticky');\n      $wrapper().removeAttr('style');\n      $.waypoints('disable');\n    }\n  };\n  $(window).on('resize', resize);\n  resize();\n});\n","/* eslint-disable local-rules/disallow-side-effects */\n/**\n * Keep references on console methods to avoid triggering patched behaviors\n *\n * NB: in some setup, console could already be patched by another SDK.\n * In this case, some display messages can be sent by the other SDK\n * but we should be safe from infinite loop nonetheless.\n */\nexport var ConsoleApiName = {\n    log: 'log',\n    debug: 'debug',\n    info: 'info',\n    warn: 'warn',\n    error: 'error',\n};\n/**\n * When building JS bundles, some users might use a plugin[1] or configuration[2] to remove\n * \"console.*\" references. This causes some issue as we expect `console.*` to be defined.\n * As a workaround, let's use a variable alias, so those expressions won't be taken into account by\n * simple static analysis.\n *\n * [1]: https://babeljs.io/docs/babel-plugin-transform-remove-console/\n * [2]: https://github.com/terser/terser#compress-options (look for drop_console)\n */\nexport var globalConsole = console;\nexport var originalConsoleMethods = {};\nObject.keys(ConsoleApiName).forEach(function (name) {\n    originalConsoleMethods[name] = globalConsole[name];\n});\nvar PREFIX = 'Datadog Browser SDK:';\nexport var display = {\n    debug: originalConsoleMethods.debug.bind(globalConsole, PREFIX),\n    log: originalConsoleMethods.log.bind(globalConsole, PREFIX),\n    info: originalConsoleMethods.info.bind(globalConsole, PREFIX),\n    warn: originalConsoleMethods.warn.bind(globalConsole, PREFIX),\n    error: originalConsoleMethods.error.bind(globalConsole, PREFIX),\n};\nexport var DOCS_ORIGIN = 'https://docs.datadoghq.com';\nexport var DOCS_TROUBLESHOOTING = \"\".concat(DOCS_ORIGIN, \"/real_user_monitoring/browser/troubleshooting\");\nexport var MORE_DETAILS = 'More details:';\n//# sourceMappingURL=display.js.map","import { display } from './display';\nexport function catchUserErrors(fn, errorMsg) {\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        try {\n            return fn.apply(void 0, args);\n        }\n        catch (err) {\n            display.error(errorMsg, err);\n        }\n    };\n}\n//# sourceMappingURL=catchUserErrors.js.map","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { display } from './display';\nvar onMonitorErrorCollected;\nvar debugMode = false;\nexport function startMonitorErrorCollection(newOnMonitorErrorCollected) {\n    onMonitorErrorCollected = newOnMonitorErrorCollected;\n}\nexport function setDebugMode(newDebugMode) {\n    debugMode = newDebugMode;\n}\nexport function resetMonitor() {\n    onMonitorErrorCollected = undefined;\n    debugMode = false;\n}\nexport function monitored(_, __, descriptor) {\n    var originalMethod = descriptor.value;\n    descriptor.value = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var decorated = onMonitorErrorCollected ? monitor(originalMethod) : originalMethod;\n        return decorated.apply(this, args);\n    };\n}\nexport function monitor(fn) {\n    return function () {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return callMonitored(fn, this, arguments);\n    }; // consider output type has input type\n}\nexport function callMonitored(fn, context, args) {\n    try {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return fn.apply(context, args);\n    }\n    catch (e) {\n        displayIfDebugEnabled(e);\n        if (onMonitorErrorCollected) {\n            try {\n                onMonitorErrorCollected(e);\n            }\n            catch (e) {\n                displayIfDebugEnabled(e);\n            }\n        }\n    }\n}\nexport function displayIfDebugEnabled() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    if (debugMode) {\n        display.error.apply(display, __spreadArray(['[MONITOR]'], args, false));\n    }\n}\n//# sourceMappingURL=monitor.js.map","export function includes(candidate, search) {\n    return candidate.indexOf(search) !== -1;\n}\nexport function arrayFrom(arrayLike) {\n    if (Array.from) {\n        return Array.from(arrayLike);\n    }\n    var array = [];\n    if (arrayLike instanceof Set) {\n        arrayLike.forEach(function (item) { return array.push(item); });\n    }\n    else {\n        for (var i = 0; i < arrayLike.length; i++) {\n            array.push(arrayLike[i]);\n        }\n    }\n    return array;\n}\nexport function find(array, predicate) {\n    for (var i = 0; i < array.length; i += 1) {\n        var item = array[i];\n        if (predicate(item, i)) {\n            return item;\n        }\n    }\n    return undefined;\n}\nexport function findLast(array, predicate) {\n    for (var i = array.length - 1; i >= 0; i -= 1) {\n        var item = array[i];\n        if (predicate(item, i, array)) {\n            return item;\n        }\n    }\n    return undefined;\n}\nexport function forEach(list, callback) {\n    Array.prototype.forEach.call(list, callback);\n}\nexport function objectValues(object) {\n    return Object.keys(object).map(function (key) { return object[key]; });\n}\nexport function objectEntries(object) {\n    return Object.keys(object).map(function (key) { return [key, object[key]]; });\n}\nexport function startsWith(candidate, search) {\n    return candidate.slice(0, search.length) === search;\n}\nexport function endsWith(candidate, search) {\n    return candidate.slice(-search.length) === search;\n}\nexport function assign(target) {\n    var toAssign = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        toAssign[_i - 1] = arguments[_i];\n    }\n    toAssign.forEach(function (source) {\n        for (var key in source) {\n            if (Object.prototype.hasOwnProperty.call(source, key)) {\n                target[key] = source[key];\n            }\n        }\n    });\n    return target;\n}\n//# sourceMappingURL=polyfills.js.map","/**\n * inspired by https://mathiasbynens.be/notes/globalthis\n */\nexport function getGlobalObject() {\n    if (typeof globalThis === 'object') {\n        return globalThis;\n    }\n    Object.defineProperty(Object.prototype, '_dd_temp_', {\n        get: function () {\n            return this;\n        },\n        configurable: true,\n    });\n    // @ts-ignore _dd_temp is defined using defineProperty\n    var globalObject = _dd_temp_;\n    // @ts-ignore _dd_temp is defined using defineProperty\n    delete Object.prototype._dd_temp_;\n    if (typeof globalObject !== 'object') {\n        // on safari _dd_temp_ is available on window but not globally\n        // fallback on other browser globals check\n        if (typeof self === 'object') {\n            globalObject = self;\n        }\n        else if (typeof window === 'object') {\n            globalObject = window;\n        }\n        else {\n            globalObject = {};\n        }\n    }\n    return globalObject;\n}\n//# sourceMappingURL=getGlobalObject.js.map","export var ONE_KIBI_BYTE = 1024;\nexport var ONE_MEBI_BYTE = 1024 * ONE_KIBI_BYTE;\n// eslint-disable-next-line no-control-regex\nvar HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/;\nexport function computeBytesCount(candidate) {\n    // Accurate bytes count computations can degrade performances when there is a lot of events to process\n    if (!HAS_MULTI_BYTES_CHARACTERS.test(candidate)) {\n        return candidate.length;\n    }\n    if (window.TextEncoder !== undefined) {\n        return new TextEncoder().encode(candidate).length;\n    }\n    return new Blob([candidate]).size;\n}\nexport function concatBuffers(buffers) {\n    var length = buffers.reduce(function (total, buffer) { return total + buffer.length; }, 0);\n    var result = new Uint8Array(length);\n    var offset = 0;\n    for (var _i = 0, buffers_1 = buffers; _i < buffers_1.length; _i++) {\n        var buffer = buffers_1[_i];\n        result.set(buffer, offset);\n        offset += buffer.length;\n    }\n    return result;\n}\n//# sourceMappingURL=byteUtils.js.map","import { getGlobalObject } from './getGlobalObject';\n/**\n * Gets the original value for a DOM API that was potentially patched by Zone.js.\n *\n * Zone.js[1] is a library that patches a bunch of JS and DOM APIs. It usually stores the original\n * value of the patched functions/constructors/methods in a hidden property prefixed by\n * __zone_symbol__.\n *\n * In multiple occasions, we observed that Zone.js is the culprit of important issues leading to\n * browser resource exhaustion (memory leak, high CPU usage). This method is used as a workaround to\n * use the original DOM API instead of the one patched by Zone.js.\n *\n * [1]: https://github.com/angular/angular/tree/main/packages/zone.js\n */\nexport function getZoneJsOriginalValue(target, name) {\n    var browserWindow = getGlobalObject();\n    var original;\n    if (browserWindow.Zone && typeof browserWindow.Zone.__symbol__ === 'function') {\n        original = target[browserWindow.Zone.__symbol__(name)];\n    }\n    if (!original) {\n        original = target[name];\n    }\n    return original;\n}\n//# sourceMappingURL=getZoneJsOriginalValue.js.map","import { getZoneJsOriginalValue } from './getZoneJsOriginalValue';\nimport { monitor } from './monitor';\nimport { getGlobalObject } from './getGlobalObject';\nexport function setTimeout(callback, delay) {\n    return getZoneJsOriginalValue(getGlobalObject(), 'setTimeout')(monitor(callback), delay);\n}\nexport function clearTimeout(timeoutId) {\n    getZoneJsOriginalValue(getGlobalObject(), 'clearTimeout')(timeoutId);\n}\nexport function setInterval(callback, delay) {\n    return getZoneJsOriginalValue(getGlobalObject(), 'setInterval')(monitor(callback), delay);\n}\nexport function clearInterval(timeoutId) {\n    getZoneJsOriginalValue(getGlobalObject(), 'clearInterval')(timeoutId);\n}\n//# sourceMappingURL=timer.js.map","import { setTimeout, clearTimeout } from '../timer';\n// use lodash API\nexport function throttle(fn, wait, options) {\n    var needLeadingExecution = options && options.leading !== undefined ? options.leading : true;\n    var needTrailingExecution = options && options.trailing !== undefined ? options.trailing : true;\n    var inWaitPeriod = false;\n    var pendingExecutionWithParameters;\n    var pendingTimeoutId;\n    return {\n        throttled: function () {\n            var parameters = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                parameters[_i] = arguments[_i];\n            }\n            if (inWaitPeriod) {\n                pendingExecutionWithParameters = parameters;\n                return;\n            }\n            if (needLeadingExecution) {\n                fn.apply(void 0, parameters);\n            }\n            else {\n                pendingExecutionWithParameters = parameters;\n            }\n            inWaitPeriod = true;\n            pendingTimeoutId = setTimeout(function () {\n                if (needTrailingExecution && pendingExecutionWithParameters) {\n                    fn.apply(void 0, pendingExecutionWithParameters);\n                }\n                inWaitPeriod = false;\n                pendingExecutionWithParameters = undefined;\n            }, wait);\n        },\n        cancel: function () {\n            clearTimeout(pendingTimeoutId);\n            inWaitPeriod = false;\n            pendingExecutionWithParameters = undefined;\n        },\n    };\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() { }\n//# sourceMappingURL=functionUtils.js.map","import { noop } from '../utils/functionUtils';\n/**\n * Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that\n * because some sites badly override toJSON on certain objects. Removing all toJSON methods from\n * nested values would be too costly, so we just detach them from the root value, and native classes\n * used to build JSON values (Array and Object).\n *\n * Note: this still assumes that JSON.stringify is correct.\n */\nexport function jsonStringify(value, replacer, space) {\n    if (typeof value !== 'object' || value === null) {\n        return JSON.stringify(value);\n    }\n    // Note: The order matter here. We need to detach toJSON methods on parent classes before their\n    // subclasses.\n    var restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype);\n    var restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype);\n    var restoreValuePrototypeToJson = detachToJsonMethod(Object.getPrototypeOf(value));\n    var restoreValueToJson = detachToJsonMethod(value);\n    try {\n        return JSON.stringify(value, replacer, space);\n    }\n    catch (_a) {\n        return '<error: unable to serialize object>';\n    }\n    finally {\n        restoreObjectPrototypeToJson();\n        restoreArrayPrototypeToJson();\n        restoreValuePrototypeToJson();\n        restoreValueToJson();\n    }\n}\nexport function detachToJsonMethod(value) {\n    var object = value;\n    var objectToJson = object.toJSON;\n    if (objectToJson) {\n        delete object.toJSON;\n        return function () {\n            object.toJSON = objectToJson;\n        };\n    }\n    return noop;\n}\n//# sourceMappingURL=jsonStringify.js.map","import { assign } from './polyfills';\nexport function shallowClone(object) {\n    return assign({}, object);\n}\nexport function objectHasValue(object, value) {\n    return Object.keys(object).some(function (key) { return object[key] === value; });\n}\nexport function isEmptyObject(object) {\n    return Object.keys(object).length === 0;\n}\nexport function mapValues(object, fn) {\n    var newObject = {};\n    for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) {\n        var key = _a[_i];\n        newObject[key] = fn(object[key]);\n    }\n    return newObject;\n}\n//# sourceMappingURL=objectUtils.js.map","import { ONE_KIBI_BYTE, computeBytesCount } from '../../tools/utils/byteUtils';\nimport { throttle } from '../../tools/utils/functionUtils';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { DOCS_TROUBLESHOOTING, MORE_DETAILS, display } from '../../tools/display';\nimport { isEmptyObject } from '../../tools/utils/objectUtils';\n// RUM and logs batch bytes limit is 16KB\n// ensure that we leave room for other event attributes and maintain a decent amount of event per batch\n// (3KB (customer data) + 1KB (other attributes)) * 4 (events per batch) = 16KB\nexport var CUSTOMER_DATA_BYTES_LIMIT = 3 * ONE_KIBI_BYTE;\n// We observed that the compression ratio is around 8 in general, but we also want to keep a margin\n// because some data might not be compressed (ex: last view update on page exit). We chose 16KiB\n// because it is also the limit of the 'batchBytesCount' that we use for RUM and Logs data, but this\n// is a bit arbitrary.\nexport var CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT = 16 * ONE_KIBI_BYTE;\nexport var BYTES_COMPUTATION_THROTTLING_DELAY = 200;\nexport function createCustomerDataTrackerManager(compressionStatus) {\n    if (compressionStatus === void 0) { compressionStatus = 2 /* CustomerDataCompressionStatus.Disabled */; }\n    var customerDataTrackers = new Map();\n    var alreadyWarned = false;\n    function checkCustomerDataLimit(initialBytesCount) {\n        if (initialBytesCount === void 0) { initialBytesCount = 0; }\n        if (alreadyWarned || compressionStatus === 0 /* CustomerDataCompressionStatus.Unknown */) {\n            return;\n        }\n        var bytesCountLimit = compressionStatus === 2 /* CustomerDataCompressionStatus.Disabled */\n            ? CUSTOMER_DATA_BYTES_LIMIT\n            : CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT;\n        var bytesCount = initialBytesCount;\n        customerDataTrackers.forEach(function (tracker) {\n            bytesCount += tracker.getBytesCount();\n        });\n        if (bytesCount > bytesCountLimit) {\n            displayCustomerDataLimitReachedWarning(bytesCountLimit);\n            alreadyWarned = true;\n        }\n    }\n    return {\n        /**\n         * Creates a detached tracker. The manager will not store a reference to that tracker, and the\n         * bytes count will be counted independently from other detached trackers.\n         *\n         * This is particularly useful when we don't know when the tracker will be unused, so we don't\n         * leak memory (ex: when used in Logger instances).\n         */\n        createDetachedTracker: function () {\n            var tracker = createCustomerDataTracker(function () { return checkCustomerDataLimit(tracker.getBytesCount()); });\n            return tracker;\n        },\n        /**\n         * Creates a tracker if it doesn't exist, and returns it.\n         */\n        getOrCreateTracker: function (type) {\n            if (!customerDataTrackers.has(type)) {\n                customerDataTrackers.set(type, createCustomerDataTracker(checkCustomerDataLimit));\n            }\n            return customerDataTrackers.get(type);\n        },\n        setCompressionStatus: function (newCompressionStatus) {\n            if (compressionStatus === 0 /* CustomerDataCompressionStatus.Unknown */) {\n                compressionStatus = newCompressionStatus;\n                checkCustomerDataLimit();\n            }\n        },\n        getCompressionStatus: function () { return compressionStatus; },\n        stop: function () {\n            customerDataTrackers.forEach(function (tracker) { return tracker.stop(); });\n            customerDataTrackers.clear();\n        },\n    };\n}\nexport function createCustomerDataTracker(checkCustomerDataLimit) {\n    var bytesCountCache = 0;\n    // Throttle the bytes computation to minimize the impact on performance.\n    // Especially useful if the user call context APIs synchronously multiple times in a row\n    var _a = throttle(function (context) {\n        bytesCountCache = computeBytesCount(jsonStringify(context));\n        checkCustomerDataLimit();\n    }, BYTES_COMPUTATION_THROTTLING_DELAY), computeBytesCountThrottled = _a.throttled, cancelComputeBytesCount = _a.cancel;\n    var resetBytesCount = function () {\n        cancelComputeBytesCount();\n        bytesCountCache = 0;\n    };\n    return {\n        updateCustomerData: function (context) {\n            if (isEmptyObject(context)) {\n                resetBytesCount();\n            }\n            else {\n                computeBytesCountThrottled(context);\n            }\n        },\n        resetCustomerData: resetBytesCount,\n        getBytesCount: function () { return bytesCountCache; },\n        stop: function () {\n            cancelComputeBytesCount();\n        },\n    };\n}\nfunction displayCustomerDataLimitReachedWarning(bytesCountLimit) {\n    display.warn(\"Customer data exceeds the recommended \".concat(bytesCountLimit / ONE_KIBI_BYTE, \"KiB threshold. \").concat(MORE_DETAILS, \" \").concat(DOCS_TROUBLESHOOTING, \"/#customer-data-exceeds-the-recommended-threshold-warning\"));\n}\n//# sourceMappingURL=customerDataTracker.js.map","/**\n * Similar to `typeof`, but distinguish plain objects from `null` and arrays\n */\nexport function getType(value) {\n    if (value === null) {\n        return 'null';\n    }\n    if (Array.isArray(value)) {\n        return 'array';\n    }\n    return typeof value;\n}\n//# sourceMappingURL=typeUtils.js.map","import { getType } from './utils/typeUtils';\n/**\n * Iterate over source and affect its sub values into destination, recursively.\n * If the source and destination can't be merged, return source.\n */\nexport function mergeInto(destination, source, circularReferenceChecker) {\n    if (circularReferenceChecker === void 0) { circularReferenceChecker = createCircularReferenceChecker(); }\n    // ignore the source if it is undefined\n    if (source === undefined) {\n        return destination;\n    }\n    if (typeof source !== 'object' || source === null) {\n        // primitive values - just return source\n        return source;\n    }\n    else if (source instanceof Date) {\n        return new Date(source.getTime());\n    }\n    else if (source instanceof RegExp) {\n        var flags = source.flags ||\n            // old browsers compatibility\n            [\n                source.global ? 'g' : '',\n                source.ignoreCase ? 'i' : '',\n                source.multiline ? 'm' : '',\n                source.sticky ? 'y' : '',\n                source.unicode ? 'u' : '',\n            ].join('');\n        return new RegExp(source.source, flags);\n    }\n    if (circularReferenceChecker.hasAlreadyBeenSeen(source)) {\n        // remove circular references\n        return undefined;\n    }\n    else if (Array.isArray(source)) {\n        var merged_1 = Array.isArray(destination) ? destination : [];\n        for (var i = 0; i < source.length; ++i) {\n            merged_1[i] = mergeInto(merged_1[i], source[i], circularReferenceChecker);\n        }\n        return merged_1;\n    }\n    var merged = getType(destination) === 'object' ? destination : {};\n    for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n            merged[key] = mergeInto(merged[key], source[key], circularReferenceChecker);\n        }\n    }\n    return merged;\n}\n/**\n * A simplistic implementation of a deep clone algorithm.\n * Caveats:\n * - It doesn't maintain prototype chains - don't use with instances of custom classes.\n * - It doesn't handle Map and Set\n */\nexport function deepClone(value) {\n    return mergeInto(undefined, value);\n}\nexport function combine() {\n    var sources = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        sources[_i] = arguments[_i];\n    }\n    var destination;\n    for (var _a = 0, sources_1 = sources; _a < sources_1.length; _a++) {\n        var source = sources_1[_a];\n        // Ignore any undefined or null sources.\n        if (source === undefined || source === null) {\n            continue;\n        }\n        destination = mergeInto(destination, source);\n    }\n    return destination;\n}\nfunction createCircularReferenceChecker() {\n    if (typeof WeakSet !== 'undefined') {\n        var set_1 = new WeakSet();\n        return {\n            hasAlreadyBeenSeen: function (value) {\n                var has = set_1.has(value);\n                if (!has) {\n                    set_1.add(value);\n                }\n                return has;\n            },\n        };\n    }\n    var array = [];\n    return {\n        hasAlreadyBeenSeen: function (value) {\n            var has = array.indexOf(value) >= 0;\n            if (!has) {\n                array.push(value);\n            }\n            return has;\n        },\n    };\n}\n//# sourceMappingURL=mergeInto.js.map","import { display } from '../display';\nimport { ONE_KIBI_BYTE } from '../utils/byteUtils';\nimport { detachToJsonMethod } from './jsonStringify';\n// The maximum size of a single event is 256KiB. By default, we ensure that user-provided data\n// going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...\nvar SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE;\n// Symbol for the root element of the JSONPath used for visited objects\nvar JSON_PATH_ROOT_ELEMENT = '$';\n// When serializing (using JSON.stringify) a key of an object, { key: 42 } gets wrapped in quotes as \"key\".\n// With the separator (:), we need to add 3 characters to the count.\nvar KEY_DECORATION_LENGTH = 3;\nexport function sanitize(source, maxCharacterCount) {\n    if (maxCharacterCount === void 0) { maxCharacterCount = SANITIZE_DEFAULT_MAX_CHARACTER_COUNT; }\n    // Unbind any toJSON function we may have on [] or {} prototypes\n    var restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype);\n    var restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype);\n    // Initial call to sanitizeProcessor - will populate containerQueue if source is an Array or a plain Object\n    var containerQueue = [];\n    var visitedObjectsWithPath = new WeakMap();\n    var sanitizedData = sanitizeProcessor(source, JSON_PATH_ROOT_ELEMENT, undefined, containerQueue, visitedObjectsWithPath);\n    var serializedSanitizedData = JSON.stringify(sanitizedData);\n    var accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0;\n    if (accumulatedCharacterCount > maxCharacterCount) {\n        warnOverCharacterLimit(maxCharacterCount, 'discarded', source);\n        return undefined;\n    }\n    while (containerQueue.length > 0 && accumulatedCharacterCount < maxCharacterCount) {\n        var containerToProcess = containerQueue.shift();\n        var separatorLength = 0; // 0 for the first element, 1 for subsequent elements\n        // Arrays and Objects have to be handled distinctly to ensure\n        // we do not pick up non-numerical properties from Arrays\n        if (Array.isArray(containerToProcess.source)) {\n            for (var key = 0; key < containerToProcess.source.length; key++) {\n                var targetData = sanitizeProcessor(containerToProcess.source[key], containerToProcess.path, key, containerQueue, visitedObjectsWithPath);\n                if (targetData !== undefined) {\n                    accumulatedCharacterCount += JSON.stringify(targetData).length;\n                }\n                else {\n                    // When an element of an Array (targetData) is undefined, it is serialized as null:\n                    // JSON.stringify([undefined]) => '[null]' - This accounts for 4 characters\n                    accumulatedCharacterCount += 4;\n                }\n                accumulatedCharacterCount += separatorLength;\n                separatorLength = 1;\n                if (accumulatedCharacterCount > maxCharacterCount) {\n                    warnOverCharacterLimit(maxCharacterCount, 'truncated', source);\n                    break;\n                }\n                ;\n                containerToProcess.target[key] = targetData;\n            }\n        }\n        else {\n            for (var key in containerToProcess.source) {\n                if (Object.prototype.hasOwnProperty.call(containerToProcess.source, key)) {\n                    var targetData = sanitizeProcessor(containerToProcess.source[key], containerToProcess.path, key, containerQueue, visitedObjectsWithPath);\n                    // When a property of an object has an undefined value, it will be dropped during serialization:\n                    // JSON.stringify({a:undefined}) => '{}'\n                    if (targetData !== undefined) {\n                        accumulatedCharacterCount +=\n                            JSON.stringify(targetData).length + separatorLength + key.length + KEY_DECORATION_LENGTH;\n                        separatorLength = 1;\n                    }\n                    if (accumulatedCharacterCount > maxCharacterCount) {\n                        warnOverCharacterLimit(maxCharacterCount, 'truncated', source);\n                        break;\n                    }\n                    ;\n                    containerToProcess.target[key] = targetData;\n                }\n            }\n        }\n    }\n    // Rebind detached toJSON functions\n    restoreObjectPrototypeToJson();\n    restoreArrayPrototypeToJson();\n    return sanitizedData;\n}\n/**\n * Internal function to factorize the process common to the\n * initial call to sanitize, and iterations for Arrays and Objects\n *\n */\nfunction sanitizeProcessor(source, parentPath, key, queue, visitedObjectsWithPath) {\n    // Start by handling toJSON, as we want to sanitize its output\n    var sourceToSanitize = tryToApplyToJSON(source);\n    if (!sourceToSanitize || typeof sourceToSanitize !== 'object') {\n        return sanitizePrimitivesAndFunctions(sourceToSanitize);\n    }\n    var sanitizedSource = sanitizeObjects(sourceToSanitize);\n    if (sanitizedSource !== '[Object]' && sanitizedSource !== '[Array]' && sanitizedSource !== '[Error]') {\n        return sanitizedSource;\n    }\n    // Handle potential cyclic references\n    // We need to use source as sourceToSanitize could be a reference to a new object\n    // At this stage, we know the source is an object type\n    var sourceAsObject = source;\n    if (visitedObjectsWithPath.has(sourceAsObject)) {\n        return \"[Reference seen at \".concat(visitedObjectsWithPath.get(sourceAsObject), \"]\");\n    }\n    // Add processed source to queue\n    var currentPath = key !== undefined ? \"\".concat(parentPath, \".\").concat(key) : parentPath;\n    var target = Array.isArray(sourceToSanitize) ? [] : {};\n    visitedObjectsWithPath.set(sourceAsObject, currentPath);\n    queue.push({ source: sourceToSanitize, target: target, path: currentPath });\n    return target;\n}\n/**\n * Handles sanitization of simple, non-object types\n *\n */\nfunction sanitizePrimitivesAndFunctions(value) {\n    // BigInt cannot be serialized by JSON.stringify(), convert it to a string representation\n    if (typeof value === 'bigint') {\n        return \"[BigInt] \".concat(value.toString());\n    }\n    // Functions cannot be serialized by JSON.stringify(). Moreover, if a faulty toJSON is present, it needs to be converted\n    // so it won't prevent stringify from serializing later\n    if (typeof value === 'function') {\n        return \"[Function] \".concat(value.name || 'unknown');\n    }\n    // JSON.stringify() does not serialize symbols.\n    if (typeof value === 'symbol') {\n        return \"[Symbol] \".concat(value.description || value.toString());\n    }\n    return value;\n}\n/**\n * Handles sanitization of object types\n *\n * LIMITATIONS\n * - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.\n * To avoid this, a toJSON method can be defined.\n * - IE11 does not return a distinct type for objects such as Map, WeakMap, ... These objects will pass through and their\n * properties enumerated if any.\n *\n */\nfunction sanitizeObjects(value) {\n    try {\n        // Handle events - Keep a simple implementation to avoid breaking changes\n        if (value instanceof Event) {\n            return {\n                isTrusted: value.isTrusted,\n            };\n        }\n        // Handle all remaining object types in a generic way\n        var result = Object.prototype.toString.call(value);\n        var match = result.match(/\\[object (.*)\\]/);\n        if (match && match[1]) {\n            return \"[\".concat(match[1], \"]\");\n        }\n    }\n    catch (_a) {\n        // If the previous serialization attempts failed, and we cannot convert using\n        // Object.prototype.toString, declare the value unserializable\n    }\n    return '[Unserializable]';\n}\n/**\n * Checks if a toJSON function exists and tries to execute it\n *\n */\nfunction tryToApplyToJSON(value) {\n    var object = value;\n    if (object && typeof object.toJSON === 'function') {\n        try {\n            return object.toJSON();\n        }\n        catch (_a) {\n            // If toJSON fails, we continue by trying to serialize the value manually\n        }\n    }\n    return value;\n}\n/**\n * Helper function to display the warning when the accumulated character count is over the limit\n */\nfunction warnOverCharacterLimit(maxCharacterCount, changeType, source) {\n    display.warn(\"The data provided has been \".concat(changeType, \" as it is over the limit of \").concat(maxCharacterCount, \" characters:\"), source);\n}\n//# sourceMappingURL=sanitize.js.map","// eslint-disable-next-line no-restricted-syntax\nvar Observable = /** @class */ (function () {\n    function Observable(onFirstSubscribe) {\n        this.onFirstSubscribe = onFirstSubscribe;\n        this.observers = [];\n    }\n    Observable.prototype.subscribe = function (f) {\n        var _this = this;\n        this.observers.push(f);\n        if (this.observers.length === 1 && this.onFirstSubscribe) {\n            this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined;\n        }\n        return {\n            unsubscribe: function () {\n                _this.observers = _this.observers.filter(function (other) { return f !== other; });\n                if (!_this.observers.length && _this.onLastUnsubscribe) {\n                    _this.onLastUnsubscribe();\n                }\n            },\n        };\n    };\n    Observable.prototype.notify = function (data) {\n        this.observers.forEach(function (observer) { return observer(data); });\n    };\n    return Observable;\n}());\nexport { Observable };\nexport function mergeObservables() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i] = arguments[_i];\n    }\n    return new Observable(function (globalObservable) {\n        var subscriptions = observables.map(function (observable) {\n            return observable.subscribe(function (data) { return globalObservable.notify(data); });\n        });\n        return function () { return subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); }); };\n    });\n}\n//# sourceMappingURL=observable.js.map","import { deepClone } from '../../tools/mergeInto';\nimport { getType } from '../../tools/utils/typeUtils';\nimport { sanitize } from '../../tools/serialisation/sanitize';\nimport { Observable } from '../../tools/observable';\nexport function createContextManager(customerDataTracker) {\n    var context = {};\n    var changeObservable = new Observable();\n    var contextManager = {\n        getContext: function () { return deepClone(context); },\n        setContext: function (newContext) {\n            if (getType(newContext) === 'object') {\n                context = sanitize(newContext);\n                customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.updateCustomerData(context);\n            }\n            else {\n                contextManager.clearContext();\n            }\n            changeObservable.notify();\n        },\n        setContextProperty: function (key, property) {\n            context[key] = sanitize(property);\n            customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.updateCustomerData(context);\n            changeObservable.notify();\n        },\n        removeContextProperty: function (key) {\n            delete context[key];\n            customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.updateCustomerData(context);\n            changeObservable.notify();\n        },\n        clearContext: function () {\n            context = {};\n            customerDataTracker === null || customerDataTracker === void 0 ? void 0 : customerDataTracker.resetCustomerData();\n            changeObservable.notify();\n        },\n        changeObservable: changeObservable,\n    };\n    return contextManager;\n}\n//# sourceMappingURL=contextManager.js.map","import { Observable } from '../tools/observable';\nexport var TrackingConsent = {\n    GRANTED: 'granted',\n    NOT_GRANTED: 'not-granted',\n};\nexport function createTrackingConsentState(currentConsent) {\n    var observable = new Observable();\n    return {\n        tryToInit: function (trackingConsent) {\n            if (!currentConsent) {\n                currentConsent = trackingConsent;\n            }\n        },\n        update: function (trackingConsent) {\n            currentConsent = trackingConsent;\n            observable.notify();\n        },\n        isGranted: function () {\n            return currentConsent === TrackingConsent.GRANTED;\n        },\n        observable: observable,\n    };\n}\n//# sourceMappingURL=trackingConsent.js.map","import { monitor } from '../tools/monitor';\nimport { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue';\n/**\n * Add an event listener to an event target object (Window, Element, mock object...).  This provides\n * a few conveniences compared to using `element.addEventListener` directly:\n *\n * * supports IE11 by: using an option object only if needed and emulating the `once` option\n *\n * * wraps the listener with a `monitor` function\n *\n * * returns a `stop` function to remove the listener\n */\nexport function addEventListener(configuration, eventTarget, eventName, listener, options) {\n    return addEventListeners(configuration, eventTarget, [eventName], listener, options);\n}\n/**\n * Add event listeners to an event target object (Window, Element, mock object...).  This provides\n * a few conveniences compared to using `element.addEventListener` directly:\n *\n * * supports IE11 by: using an option object only if needed and emulating the `once` option\n *\n * * wraps the listener with a `monitor` function\n *\n * * returns a `stop` function to remove the listener\n *\n * * with `once: true`, the listener will be called at most once, even if different events are listened\n */\nexport function addEventListeners(configuration, eventTarget, eventNames, listener, _a) {\n    var _b = _a === void 0 ? {} : _a, once = _b.once, capture = _b.capture, passive = _b.passive;\n    var listenerWithMonitor = monitor(function (event) {\n        if (!event.isTrusted && !event.__ddIsTrusted && !configuration.allowUntrustedEvents) {\n            return;\n        }\n        if (once) {\n            stop();\n        }\n        listener(event);\n    });\n    var options = passive ? { capture: capture, passive: passive } : capture;\n    // Use the window.EventTarget.prototype when possible to avoid wrong overrides (e.g: https://github.com/salesforce/lwc/issues/1824)\n    var listenerTarget = window.EventTarget && eventTarget instanceof EventTarget ? window.EventTarget.prototype : eventTarget;\n    var add = getZoneJsOriginalValue(listenerTarget, 'addEventListener');\n    eventNames.forEach(function (eventName) { return add.call(eventTarget, eventName, listenerWithMonitor, options); });\n    function stop() {\n        var remove = getZoneJsOriginalValue(listenerTarget, 'removeEventListener');\n        eventNames.forEach(function (eventName) { return remove.call(eventTarget, eventName, listenerWithMonitor, options); });\n    }\n    return {\n        stop: stop,\n    };\n}\n//# sourceMappingURL=addEventListener.js.map","import { addEventListener } from '../../browser/addEventListener';\nimport { combine } from '../../tools/mergeInto';\nvar CONTEXT_STORE_KEY_PREFIX = '_dd_c';\nvar storageListeners = [];\nexport function storeContextManager(configuration, contextManager, productKey, customerDataType) {\n    var storageKey = buildStorageKey(productKey, customerDataType);\n    storageListeners.push(addEventListener(configuration, window, \"storage\" /* DOM_EVENT.STORAGE */, function (_a) {\n        var key = _a.key;\n        if (storageKey === key) {\n            synchronizeWithStorage();\n        }\n    }));\n    contextManager.changeObservable.subscribe(dumpToStorage);\n    contextManager.setContext(combine(getFromStorage(), contextManager.getContext()));\n    function synchronizeWithStorage() {\n        contextManager.setContext(getFromStorage());\n    }\n    function dumpToStorage() {\n        localStorage.setItem(storageKey, JSON.stringify(contextManager.getContext()));\n    }\n    function getFromStorage() {\n        var rawContext = localStorage.getItem(storageKey);\n        return rawContext !== null ? JSON.parse(rawContext) : {};\n    }\n}\nexport function buildStorageKey(productKey, customerDataType) {\n    return \"\".concat(CONTEXT_STORE_KEY_PREFIX, \"_\").concat(productKey, \"_\").concat(customerDataType);\n}\nexport function removeStorageListeners() {\n    storageListeners.map(function (listener) { return listener.stop(); });\n}\n//# sourceMappingURL=storeContextManager.js.map","import { computeBytesCount } from './utils/byteUtils';\nexport function createIdentityEncoder() {\n    var output = '';\n    var outputBytesCount = 0;\n    return {\n        isAsync: false,\n        get isEmpty() {\n            return !output;\n        },\n        write: function (data, callback) {\n            var additionalEncodedBytesCount = computeBytesCount(data);\n            outputBytesCount += additionalEncodedBytesCount;\n            output += data;\n            if (callback) {\n                callback(additionalEncodedBytesCount);\n            }\n        },\n        finish: function (callback) {\n            callback(this.finishSync());\n        },\n        finishSync: function () {\n            var result = {\n                output: output,\n                outputBytesCount: outputBytesCount,\n                rawBytesCount: outputBytesCount,\n                pendingData: '',\n            };\n            output = '';\n            outputBytesCount = 0;\n            return result;\n        },\n        estimateEncodedBytesCount: function (data) {\n            return data.length;\n        },\n    };\n}\n//# sourceMappingURL=encoder.js.map","/**\n * Cross-browser stack trace computation.\n *\n * Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js\n */\nimport { startsWith } from '../utils/polyfills';\nvar UNKNOWN_FUNCTION = '?';\nexport function computeStackTrace(ex) {\n    var stack = [];\n    var stackProperty = tryToGetString(ex, 'stack');\n    var exString = String(ex);\n    if (stackProperty && startsWith(stackProperty, exString)) {\n        stackProperty = stackProperty.slice(exString.length);\n    }\n    if (stackProperty) {\n        stackProperty.split('\\n').forEach(function (line) {\n            var stackFrame = parseChromeLine(line) || parseChromeAnonymousLine(line) || parseWinLine(line) || parseGeckoLine(line);\n            if (stackFrame) {\n                if (!stackFrame.func && stackFrame.line) {\n                    stackFrame.func = UNKNOWN_FUNCTION;\n                }\n                stack.push(stackFrame);\n            }\n        });\n    }\n    return {\n        message: tryToGetString(ex, 'message'),\n        name: tryToGetString(ex, 'name'),\n        stack: stack,\n    };\n}\nvar fileUrl = '((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\\\w+\\\\.|\\\\/).*?)';\nvar filePosition = '(?::(\\\\d+))';\nvar CHROME_LINE_RE = new RegExp(\"^\\\\s*at (.*?) ?\\\\(\".concat(fileUrl).concat(filePosition, \"?\").concat(filePosition, \"?\\\\)?\\\\s*$\"), 'i');\nvar CHROME_EVAL_RE = new RegExp(\"\\\\((\\\\S*)\".concat(filePosition).concat(filePosition, \"\\\\)\"));\nfunction parseChromeLine(line) {\n    var parts = CHROME_LINE_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n    var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n    var submatch = CHROME_EVAL_RE.exec(parts[2]);\n    if (isEval && submatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = submatch[1]; // url\n        parts[3] = submatch[2]; // line\n        parts[4] = submatch[3]; // column\n    }\n    return {\n        args: isNative ? [parts[2]] : [],\n        column: parts[4] ? +parts[4] : undefined,\n        func: parts[1] || UNKNOWN_FUNCTION,\n        line: parts[3] ? +parts[3] : undefined,\n        url: !isNative ? parts[2] : undefined,\n    };\n}\nvar CHROME_ANONYMOUS_FUNCTION_RE = new RegExp(\"^\\\\s*at ?\".concat(fileUrl).concat(filePosition, \"?\").concat(filePosition, \"??\\\\s*$\"), 'i');\nfunction parseChromeAnonymousLine(line) {\n    var parts = CHROME_ANONYMOUS_FUNCTION_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    return {\n        args: [],\n        column: parts[3] ? +parts[3] : undefined,\n        func: UNKNOWN_FUNCTION,\n        line: parts[2] ? +parts[2] : undefined,\n        url: parts[1],\n    };\n}\nvar WINJS_LINE_RE = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nfunction parseWinLine(line) {\n    var parts = WINJS_LINE_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    return {\n        args: [],\n        column: parts[4] ? +parts[4] : undefined,\n        func: parts[1] || UNKNOWN_FUNCTION,\n        line: +parts[3],\n        url: parts[2],\n    };\n}\nvar GECKO_LINE_RE = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar GECKO_EVAL_RE = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nfunction parseGeckoLine(line) {\n    var parts = GECKO_LINE_RE.exec(line);\n    if (!parts) {\n        return;\n    }\n    var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    var submatch = GECKO_EVAL_RE.exec(parts[3]);\n    if (isEval && submatch) {\n        // throw out eval line/column and use top-most line number\n        parts[3] = submatch[1];\n        parts[4] = submatch[2];\n        parts[5] = undefined; // no column when eval\n    }\n    return {\n        args: parts[2] ? parts[2].split(',') : [],\n        column: parts[5] ? +parts[5] : undefined,\n        func: parts[1] || UNKNOWN_FUNCTION,\n        line: parts[4] ? +parts[4] : undefined,\n        url: parts[3],\n    };\n}\nfunction tryToGetString(candidate, property) {\n    if (typeof candidate !== 'object' || !candidate || !(property in candidate)) {\n        return undefined;\n    }\n    var value = candidate[property];\n    return typeof value === 'string' ? value : undefined;\n}\nexport function computeStackTraceFromOnErrorMessage(messageObj, url, line, column) {\n    var stack = [{ url: url, column: column, line: line }];\n    var _a = tryToParseMessage(messageObj), name = _a.name, message = _a.message;\n    return {\n        name: name,\n        message: message,\n        stack: stack,\n    };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?([\\s\\S]*)$/;\nfunction tryToParseMessage(messageObj) {\n    var _a;\n    var name;\n    var message;\n    if ({}.toString.call(messageObj) === '[object String]') {\n        ;\n        _a = ERROR_TYPES_RE.exec(messageObj), name = _a[1], message = _a[2];\n    }\n    return { name: name, message: message };\n}\n//# sourceMappingURL=computeStackTrace.js.map","import { callMonitored } from '../monitor';\nimport { noop } from '../utils/functionUtils';\nimport { computeStackTrace } from './computeStackTrace';\n/**\n * Creates a stacktrace without SDK internal frames.\n * Constraints:\n * - Has to be called at the utmost position of the call stack.\n * - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.\n */\nexport function createHandlingStack() {\n    /**\n     * Skip the two internal frames:\n     * - SDK API (console.error, ...)\n     * - this function\n     * in order to keep only the user calls\n     */\n    var internalFramesToSkip = 2;\n    var error = new Error();\n    var formattedStack;\n    // IE needs to throw the error to fill in the stack trace\n    if (!error.stack) {\n        try {\n            throw error;\n        }\n        catch (_a) {\n            noop();\n        }\n    }\n    callMonitored(function () {\n        var stackTrace = computeStackTrace(error);\n        stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip);\n        formattedStack = toStackTraceString(stackTrace);\n    });\n    return formattedStack;\n}\nexport function toStackTraceString(stack) {\n    var result = formatErrorMessage(stack);\n    stack.stack.forEach(function (frame) {\n        var func = frame.func === '?' ? '<anonymous>' : frame.func;\n        var args = frame.args && frame.args.length > 0 ? \"(\".concat(frame.args.join(', '), \")\") : '';\n        var line = frame.line ? \":\".concat(frame.line) : '';\n        var column = frame.line && frame.column ? \":\".concat(frame.column) : '';\n        result += \"\\n  at \".concat(func).concat(args, \" @ \").concat(frame.url).concat(line).concat(column);\n    });\n    return result;\n}\nexport function formatErrorMessage(stack) {\n    return \"\".concat(stack.name || 'Error', \": \").concat(stack.message);\n}\n//# sourceMappingURL=handlingStack.js.map","import { sanitize } from '../../tools/serialisation/sanitize';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace';\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack';\nexport var NO_ERROR_STACK_PRESENT_MESSAGE = 'No stack, consider using an instance of Error';\nexport function computeRawError(_a) {\n    var stackTrace = _a.stackTrace, originalError = _a.originalError, handlingStack = _a.handlingStack, startClocks = _a.startClocks, nonErrorPrefix = _a.nonErrorPrefix, source = _a.source, handling = _a.handling;\n    var isErrorInstance = isError(originalError);\n    var message = computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError);\n    var stack = hasUsableStack(isErrorInstance, stackTrace)\n        ? toStackTraceString(stackTrace)\n        : NO_ERROR_STACK_PRESENT_MESSAGE;\n    var causes = isErrorInstance ? flattenErrorCauses(originalError, source) : undefined;\n    var type = stackTrace ? stackTrace.name : undefined;\n    var fingerprint = tryToGetFingerprint(originalError);\n    return {\n        startClocks: startClocks,\n        source: source,\n        handling: handling,\n        handlingStack: handlingStack,\n        originalError: originalError,\n        type: type,\n        message: message,\n        stack: stack,\n        causes: causes,\n        fingerprint: fingerprint,\n    };\n}\nfunction computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError) {\n    // Favor stackTrace message only if tracekit has really been able to extract something meaningful (message + name)\n    // TODO rework tracekit integration to avoid scattering error building logic\n    return (stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.message) && (stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.name)\n        ? stackTrace.message\n        : !isErrorInstance\n            ? \"\".concat(nonErrorPrefix, \" \").concat(jsonStringify(sanitize(originalError)))\n            : 'Empty message';\n}\nfunction hasUsableStack(isErrorInstance, stackTrace) {\n    if (stackTrace === undefined) {\n        return false;\n    }\n    if (isErrorInstance) {\n        return true;\n    }\n    // handle cases where tracekit return stack = [] or stack = [{url: undefined, line: undefined, column: undefined}]\n    // TODO rework tracekit integration to avoid generating those unusable stack\n    return stackTrace.stack.length > 0 && (stackTrace.stack.length > 1 || stackTrace.stack[0].url !== undefined);\n}\nexport function tryToGetFingerprint(originalError) {\n    return isError(originalError) && 'dd_fingerprint' in originalError ? String(originalError.dd_fingerprint) : undefined;\n}\nexport function getFileFromStackTraceString(stack) {\n    var _a;\n    return (_a = /@ (.+)/.exec(stack)) === null || _a === void 0 ? void 0 : _a[1];\n}\nexport function isError(error) {\n    return error instanceof Error || Object.prototype.toString.call(error) === '[object Error]';\n}\nexport function flattenErrorCauses(error, parentSource) {\n    var currentError = error;\n    var causes = [];\n    while (isError(currentError === null || currentError === void 0 ? void 0 : currentError.cause) && causes.length < 10) {\n        var stackTrace = computeStackTrace(currentError.cause);\n        causes.push({\n            message: currentError.cause.message,\n            source: parentSource,\n            type: stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.name,\n            stack: stackTrace && toStackTraceString(stackTrace),\n        });\n        currentError = currentError.cause;\n    }\n    return causes.length ? causes : undefined;\n}\n//# sourceMappingURL=error.js.map","/**\n * LIMITATION:\n * For NPM setup, this feature flag singleton is shared between RUM and Logs product.\n * This means that an experimental flag set on the RUM product will be set on the Logs product.\n * So keep in mind that in certain configurations, your experimental feature flag may affect other products.\n *\n * FORMAT:\n * All feature flags should be snake_cased\n */\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected feature flag\nimport { objectHasValue } from './utils/objectUtils';\n// eslint-disable-next-line no-restricted-syntax\nexport var ExperimentalFeature;\n(function (ExperimentalFeature) {\n    ExperimentalFeature[\"WRITABLE_RESOURCE_GRAPHQL\"] = \"writable_resource_graphql\";\n    ExperimentalFeature[\"REMOTE_CONFIGURATION\"] = \"remote_configuration\";\n    ExperimentalFeature[\"LONG_ANIMATION_FRAME\"] = \"long_animation_frame\";\n    ExperimentalFeature[\"ANONYMOUS_USER_TRACKING\"] = \"anonymous_user_tracking\";\n    ExperimentalFeature[\"ACTION_NAME_MASKING\"] = \"action_name_masking\";\n    ExperimentalFeature[\"CONSISTENT_TRACE_SAMPLING\"] = \"consistent_trace_sampling\";\n    ExperimentalFeature[\"DELAY_VIEWPORT_COLLECTION\"] = \"delay_viewport_collection\";\n})(ExperimentalFeature || (ExperimentalFeature = {}));\nvar enabledExperimentalFeatures = new Set();\nexport function initFeatureFlags(enableExperimentalFeatures) {\n    if (Array.isArray(enableExperimentalFeatures)) {\n        addExperimentalFeatures(enableExperimentalFeatures.filter(function (flag) {\n            return objectHasValue(ExperimentalFeature, flag);\n        }));\n    }\n}\nexport function addExperimentalFeatures(enabledFeatures) {\n    enabledFeatures.forEach(function (flag) {\n        enabledExperimentalFeatures.add(flag);\n    });\n}\nexport function isExperimentalFeatureEnabled(featureName) {\n    return enabledExperimentalFeatures.has(featureName);\n}\nexport function resetExperimentalFeatures() {\n    enabledExperimentalFeatures.clear();\n}\nexport function getExperimentalFeatures() {\n    return enabledExperimentalFeatures;\n}\n//# sourceMappingURL=experimentalFeatures.js.map","export var INTAKE_SITE_STAGING = 'datad0g.com';\nexport var INTAKE_SITE_FED_STAGING = 'dd0g-gov.com';\nexport var INTAKE_SITE_US1 = 'datadoghq.com';\nexport var INTAKE_SITE_EU1 = 'datadoghq.eu';\nexport var INTAKE_SITE_US1_FED = 'ddog-gov.com';\nexport var PCI_INTAKE_HOST_US1 = 'pci.browser-intake-datadoghq.com';\nexport var INTAKE_URL_PARAMETERS = ['ddsource', 'ddtags'];\n//# sourceMappingURL=intakeSites.js.map","/**\n * Return true if the draw is successful\n * @param threshold between 0 and 100\n */\nexport function performDraw(threshold) {\n    return threshold !== 0 && Math.random() * 100 <= threshold;\n}\nexport function round(num, decimals) {\n    return +num.toFixed(decimals);\n}\nexport function isPercentage(value) {\n    return isNumber(value) && value >= 0 && value <= 100;\n}\nexport function isNumber(value) {\n    return typeof value === 'number';\n}\n//# sourceMappingURL=numberUtils.js.map","import { isNumber, round } from './numberUtils';\nexport var ONE_SECOND = 1000;\nexport var ONE_MINUTE = 60 * ONE_SECOND;\nexport var ONE_HOUR = 60 * ONE_MINUTE;\nexport var ONE_DAY = 24 * ONE_HOUR;\nexport var ONE_YEAR = 365 * ONE_DAY;\nexport function relativeToClocks(relative) {\n    return { relative: relative, timeStamp: getCorrectedTimeStamp(relative) };\n}\nexport function timeStampToClocks(timeStamp) {\n    return { relative: getRelativeTime(timeStamp), timeStamp: timeStamp };\n}\nfunction getCorrectedTimeStamp(relativeTime) {\n    var correctedOrigin = (dateNow() - performance.now());\n    // apply correction only for positive drift\n    if (correctedOrigin > getNavigationStart()) {\n        return Math.round(addDuration(correctedOrigin, relativeTime));\n    }\n    return getTimeStamp(relativeTime);\n}\nexport function currentDrift() {\n    return Math.round(dateNow() - addDuration(getNavigationStart(), performance.now()));\n}\nexport function toServerDuration(duration) {\n    if (!isNumber(duration)) {\n        return duration;\n    }\n    return round(duration * 1e6, 0);\n}\nexport function dateNow() {\n    // Do not use `Date.now` because sometimes websites are wrongly \"polyfilling\" it. For example, we\n    // had some users using a very old version of `datejs`, which patched `Date.now` to return a Date\n    // instance instead of a timestamp[1]. Those users are unlikely to fix this, so let's handle this\n    // case ourselves.\n    // [1]: https://github.com/datejs/Datejs/blob/97f5c7c58c5bc5accdab8aa7602b6ac56462d778/src/core-debug.js#L14-L16\n    return new Date().getTime();\n}\nexport function timeStampNow() {\n    return dateNow();\n}\nexport function relativeNow() {\n    return performance.now();\n}\nexport function clocksNow() {\n    return { relative: relativeNow(), timeStamp: timeStampNow() };\n}\nexport function clocksOrigin() {\n    return { relative: 0, timeStamp: getNavigationStart() };\n}\nexport function elapsed(start, end) {\n    return (end - start);\n}\nexport function addDuration(a, b) {\n    return a + b;\n}\n/**\n * Get the time since the navigation was started.\n *\n * Note: this does not use `performance.timeOrigin` because it doesn't seem to reflect the actual\n * time on which the navigation has started: it may be much farther in the past, at least in Firefox 71.\n * Related issue in Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1429926\n */\nexport function getRelativeTime(timestamp) {\n    return (timestamp - getNavigationStart());\n}\nexport function getTimeStamp(relativeTime) {\n    return Math.round(addDuration(getNavigationStart(), relativeTime));\n}\nexport function looksLikeRelativeTime(time) {\n    return time < ONE_YEAR;\n}\n/**\n * Navigation start slightly change on some rare cases\n */\nvar navigationStart;\nfunction getNavigationStart() {\n    if (navigationStart === undefined) {\n        navigationStart = performance.timing.navigationStart;\n    }\n    return navigationStart;\n}\n//# sourceMappingURL=timeUtils.js.map","export function sendToExtension(type, payload) {\n    var callback = window.__ddBrowserSdkExtensionCallback;\n    if (callback) {\n        callback({ type: type, payload: payload });\n    }\n}\n//# sourceMappingURL=sendToExtension.js.map","export function getConnectivity() {\n    var _a;\n    var navigator = window.navigator;\n    return {\n        status: navigator.onLine ? 'connected' : 'not_connected',\n        interfaces: navigator.connection && navigator.connection.type ? [navigator.connection.type] : undefined,\n        effective_type: (_a = navigator.connection) === null || _a === void 0 ? void 0 : _a.effectiveType,\n    };\n}\n//# sourceMappingURL=connectivity.js.map","import { arrayFrom } from './polyfills';\nexport function removeDuplicates(array) {\n    var set = new Set();\n    array.forEach(function (item) { return set.add(item); });\n    return arrayFrom(set);\n}\nexport function removeItem(array, item) {\n    var index = array.indexOf(item);\n    if (index >= 0) {\n        array.splice(index, 1);\n    }\n}\n//# sourceMappingURL=arrayUtils.js.map","import { removeItem } from './utils/arrayUtils';\nvar BUFFER_LIMIT = 500;\nexport function createBoundedBuffer() {\n    var buffer = [];\n    var add = function (callback) {\n        var length = buffer.push(callback);\n        if (length > BUFFER_LIMIT) {\n            buffer.splice(0, 1);\n        }\n    };\n    var remove = function (callback) {\n        removeItem(buffer, callback);\n    };\n    var drain = function (arg) {\n        buffer.forEach(function (callback) { return callback(arg); });\n        buffer.length = 0;\n    };\n    return {\n        add: add,\n        remove: remove,\n        drain: drain,\n    };\n}\n//# sourceMappingURL=boundedBuffer.js.map","export var TelemetryType = {\n    log: 'log',\n    configuration: 'configuration',\n    usage: 'usage',\n};\n//# sourceMappingURL=rawTelemetryEvent.types.js.map","import { ConsoleApiName } from '../../tools/display';\nimport { NO_ERROR_STACK_PRESENT_MESSAGE, isError } from '../error/error';\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack';\nimport { getExperimentalFeatures } from '../../tools/experimentalFeatures';\nimport { INTAKE_SITE_STAGING, INTAKE_SITE_US1_FED } from '../configuration';\nimport { Observable } from '../../tools/observable';\nimport { timeStampNow } from '../../tools/utils/timeUtils';\nimport { displayIfDebugEnabled, startMonitorErrorCollection } from '../../tools/monitor';\nimport { sendToExtension } from '../../tools/sendToExtension';\nimport { startsWith, arrayFrom, includes, assign } from '../../tools/utils/polyfills';\nimport { performDraw } from '../../tools/utils/numberUtils';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { combine } from '../../tools/mergeInto';\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace';\nimport { getConnectivity } from '../connectivity';\nimport { createBoundedBuffer } from '../../tools/boundedBuffer';\nimport { TelemetryType } from './rawTelemetryEvent.types';\nvar ALLOWED_FRAME_URLS = [\n    'https://www.datadoghq-browser-agent.com',\n    'https://www.datad0g-browser-agent.com',\n    'https://d3uc069fcn7uxw.cloudfront.net',\n    'https://d20xtzwzcl0ceb.cloudfront.net',\n    'http://localhost',\n    '<anonymous>',\n];\nvar TELEMETRY_EXCLUDED_SITES = [INTAKE_SITE_US1_FED];\n// eslint-disable-next-line local-rules/disallow-side-effects\nvar preStartTelemetryBuffer = createBoundedBuffer();\nvar onRawTelemetryEventCollected = function (event) {\n    preStartTelemetryBuffer.add(function () { return onRawTelemetryEventCollected(event); });\n};\nexport function startTelemetry(telemetryService, configuration) {\n    var _a;\n    var contextProvider;\n    var observable = new Observable();\n    var alreadySentEvents = new Set();\n    var telemetryEnabled = !includes(TELEMETRY_EXCLUDED_SITES, configuration.site) && performDraw(configuration.telemetrySampleRate);\n    var telemetryEnabledPerType = (_a = {},\n        _a[TelemetryType.log] = telemetryEnabled,\n        _a[TelemetryType.configuration] = telemetryEnabled && performDraw(configuration.telemetryConfigurationSampleRate),\n        _a[TelemetryType.usage] = telemetryEnabled && performDraw(configuration.telemetryUsageSampleRate),\n        _a);\n    var runtimeEnvInfo = getRuntimeEnvInfo();\n    onRawTelemetryEventCollected = function (rawEvent) {\n        var stringifiedEvent = jsonStringify(rawEvent);\n        if (telemetryEnabledPerType[rawEvent.type] &&\n            alreadySentEvents.size < configuration.maxTelemetryEventsPerPage &&\n            !alreadySentEvents.has(stringifiedEvent)) {\n            var event_1 = toTelemetryEvent(telemetryService, rawEvent, runtimeEnvInfo);\n            observable.notify(event_1);\n            sendToExtension('telemetry', event_1);\n            alreadySentEvents.add(stringifiedEvent);\n        }\n    };\n    startMonitorErrorCollection(addTelemetryError);\n    function toTelemetryEvent(telemetryService, event, runtimeEnvInfo) {\n        return combine({\n            type: 'telemetry',\n            date: timeStampNow(),\n            service: telemetryService,\n            version: \"5.35.1\",\n            source: 'browser',\n            _dd: {\n                format_version: 2,\n            },\n            telemetry: combine(event, {\n                runtime_env: runtimeEnvInfo,\n                connectivity: getConnectivity(),\n                sdk_setup: \"npm\",\n            }),\n            experimental_features: arrayFrom(getExperimentalFeatures()),\n        }, contextProvider !== undefined ? contextProvider() : {});\n    }\n    return {\n        setContextProvider: function (provider) {\n            contextProvider = provider;\n        },\n        observable: observable,\n        enabled: telemetryEnabled,\n    };\n}\nfunction getRuntimeEnvInfo() {\n    return {\n        is_local_file: window.location.protocol === 'file:',\n        is_worker: 'WorkerGlobalScope' in self,\n    };\n}\nexport function startFakeTelemetry() {\n    var events = [];\n    onRawTelemetryEventCollected = function (event) {\n        events.push(event);\n    };\n    return events;\n}\n// need to be called after telemetry context is provided and observers are registered\nexport function drainPreStartTelemetry() {\n    preStartTelemetryBuffer.drain();\n}\nexport function resetTelemetry() {\n    preStartTelemetryBuffer = createBoundedBuffer();\n    onRawTelemetryEventCollected = function (event) {\n        preStartTelemetryBuffer.add(function () { return onRawTelemetryEventCollected(event); });\n    };\n}\n/**\n * Avoid mixing telemetry events from different data centers\n * but keep replicating staging events for reliability\n */\nexport function isTelemetryReplicationAllowed(configuration) {\n    return configuration.site === INTAKE_SITE_STAGING;\n}\nexport function addTelemetryDebug(message, context) {\n    displayIfDebugEnabled(ConsoleApiName.debug, message, context);\n    onRawTelemetryEventCollected(assign({\n        type: TelemetryType.log,\n        message: message,\n        status: \"debug\" /* StatusType.debug */,\n    }, context));\n}\nexport function addTelemetryError(e, context) {\n    onRawTelemetryEventCollected(assign({\n        type: TelemetryType.log,\n        status: \"error\" /* StatusType.error */,\n    }, formatError(e), context));\n}\nexport function addTelemetryConfiguration(configuration) {\n    onRawTelemetryEventCollected({\n        type: TelemetryType.configuration,\n        configuration: configuration,\n    });\n}\nexport function addTelemetryUsage(usage) {\n    onRawTelemetryEventCollected({\n        type: TelemetryType.usage,\n        usage: usage,\n    });\n}\nexport function formatError(e) {\n    if (isError(e)) {\n        var stackTrace = computeStackTrace(e);\n        return {\n            error: {\n                kind: stackTrace.name,\n                stack: toStackTraceString(scrubCustomerFrames(stackTrace)),\n            },\n            message: stackTrace.message,\n        };\n    }\n    return {\n        error: {\n            stack: NO_ERROR_STACK_PRESENT_MESSAGE,\n        },\n        message: \"\".concat(\"Uncaught\" /* NonErrorPrefix.UNCAUGHT */, \" \").concat(jsonStringify(e)),\n    };\n}\nexport function scrubCustomerFrames(stackTrace) {\n    stackTrace.stack = stackTrace.stack.filter(function (frame) { return !frame.url || ALLOWED_FRAME_URLS.some(function (allowedFrameUrl) { return startsWith(frame.url, allowedFrameUrl); }); });\n    return stackTrace;\n}\n//# sourceMappingURL=telemetry.js.map","import { display } from '../../tools/display';\nimport { getType } from '../../tools/utils/typeUtils';\nimport { assign } from '../../tools/utils/polyfills';\n/**\n * Clone input data and ensure known user properties (id, name, email)\n * are strings, as defined here:\n * https://docs.datadoghq.com/logs/log_configuration/attributes_naming_convention/#user-related-attributes\n */\nexport function sanitizeUser(newUser) {\n    // We shallow clone only to prevent mutation of user data.\n    var user = assign({}, newUser);\n    var keys = ['id', 'name', 'email'];\n    keys.forEach(function (key) {\n        if (key in user) {\n            /* eslint-disable @typescript-eslint/no-base-to-string */\n            user[key] = String(user[key]);\n        }\n    });\n    return user;\n}\n/**\n * Simple check to ensure user is valid\n */\nexport function checkUser(newUser) {\n    var isValid = getType(newUser) === 'object';\n    if (!isValid) {\n        display.error('Unsupported user:', newUser);\n    }\n    return isValid;\n}\nexport function generateAnonymousId() {\n    return Math.floor(Math.random() * Math.pow(2, 53)).toString(36);\n}\n//# sourceMappingURL=user.js.map","import { display } from '../tools/display';\nexport function displayAlreadyInitializedError(sdkName, initConfiguration) {\n    if (!initConfiguration.silentMultipleInit) {\n        display.error(\"\".concat(sdkName, \" is already initialized.\"));\n    }\n}\n//# sourceMappingURL=displayAlreadyInitializedError.js.map","/**\n * UUID v4\n * from https://gist.github.com/jed/982883\n */\nexport function generateUUID(placeholder) {\n    return placeholder\n        ? // eslint-disable-next-line  no-bitwise\n            (parseInt(placeholder, 10) ^ ((Math.random() * 16) >> (parseInt(placeholder, 10) / 4))).toString(16)\n        : \"\".concat(1e7, \"-\").concat(1e3, \"-\").concat(4e3, \"-\").concat(8e3, \"-\").concat(1e11).replace(/[018]/g, generateUUID);\n}\nvar COMMA_SEPARATED_KEY_VALUE = /([\\w-]+)\\s*=\\s*([^;]+)/g;\nexport function findCommaSeparatedValue(rawString, name) {\n    COMMA_SEPARATED_KEY_VALUE.lastIndex = 0;\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        var match = COMMA_SEPARATED_KEY_VALUE.exec(rawString);\n        if (match) {\n            if (match[1] === name) {\n                return match[2];\n            }\n        }\n        else {\n            break;\n        }\n    }\n}\nexport function findCommaSeparatedValues(rawString) {\n    var result = new Map();\n    COMMA_SEPARATED_KEY_VALUE.lastIndex = 0;\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        var match = COMMA_SEPARATED_KEY_VALUE.exec(rawString);\n        if (match) {\n            result.set(match[1], match[2]);\n        }\n        else {\n            break;\n        }\n    }\n    return result;\n}\nexport function safeTruncate(candidate, length, suffix) {\n    if (suffix === void 0) { suffix = ''; }\n    var lastChar = candidate.charCodeAt(length - 1);\n    var isLastCharSurrogatePair = lastChar >= 0xd800 && lastChar <= 0xdbff;\n    var correctedLength = isLastCharSurrogatePair ? length + 1 : length;\n    if (candidate.length <= correctedLength) {\n        return candidate;\n    }\n    return \"\".concat(candidate.slice(0, correctedLength)).concat(suffix);\n}\n//# sourceMappingURL=stringUtils.js.map","import { clocksNow, combine, elapsed, generateUUID, toServerDuration } from '@datadog/browser-core';\nexport function createCustomVitalsState() {\n    var vitalsByName = new Map();\n    var vitalsByReference = new WeakMap();\n    return { vitalsByName: vitalsByName, vitalsByReference: vitalsByReference };\n}\nexport function startVitalCollection(lifeCycle, pageStateHistory, customVitalsState) {\n    function isValid(vital) {\n        return !pageStateHistory.wasInPageStateDuringPeriod(\"frozen\" /* PageState.FROZEN */, vital.startClocks.relative, vital.duration);\n    }\n    function addDurationVital(vital) {\n        if (isValid(vital)) {\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, processVital(vital, true));\n        }\n    }\n    return {\n        addDurationVital: addDurationVital,\n        startDurationVital: function (name, options) {\n            if (options === void 0) { options = {}; }\n            return startDurationVital(customVitalsState, name, options);\n        },\n        stopDurationVital: function (nameOrRef, options) {\n            if (options === void 0) { options = {}; }\n            stopDurationVital(addDurationVital, customVitalsState, nameOrRef, options);\n        },\n    };\n}\nexport function startDurationVital(_a, name, options) {\n    var vitalsByName = _a.vitalsByName, vitalsByReference = _a.vitalsByReference;\n    if (options === void 0) { options = {}; }\n    var vital = {\n        name: name,\n        startClocks: clocksNow(),\n        context: options.context,\n        description: options.description,\n    };\n    // To avoid leaking implementation details of the vital, we return a reference to it.\n    var reference = { __dd_vital_reference: true };\n    vitalsByName.set(name, vital);\n    // To avoid memory leaks caused by the creation of numerous references (e.g., from improper useEffect implementations), we use a WeakMap.\n    vitalsByReference.set(reference, vital);\n    return reference;\n}\nexport function stopDurationVital(stopCallback, _a, nameOrRef, options) {\n    var vitalsByName = _a.vitalsByName, vitalsByReference = _a.vitalsByReference;\n    if (options === void 0) { options = {}; }\n    var vitalStart = typeof nameOrRef === 'string' ? vitalsByName.get(nameOrRef) : vitalsByReference.get(nameOrRef);\n    if (!vitalStart) {\n        return;\n    }\n    stopCallback(buildDurationVital(vitalStart, vitalStart.startClocks, options, clocksNow()));\n    if (typeof nameOrRef === 'string') {\n        vitalsByName.delete(nameOrRef);\n    }\n    else {\n        vitalsByReference.delete(nameOrRef);\n    }\n}\nfunction buildDurationVital(vitalStart, startClocks, stopOptions, stopClocks) {\n    var _a;\n    return {\n        name: vitalStart.name,\n        type: \"duration\" /* VitalType.DURATION */,\n        startClocks: startClocks,\n        duration: elapsed(startClocks.timeStamp, stopClocks.timeStamp),\n        context: combine(vitalStart.context, stopOptions.context),\n        description: (_a = stopOptions.description) !== null && _a !== void 0 ? _a : vitalStart.description,\n    };\n}\nfunction processVital(vital, valueComputedBySdk) {\n    var rawRumEvent = {\n        date: vital.startClocks.timeStamp,\n        vital: {\n            id: generateUUID(),\n            type: vital.type,\n            name: vital.name,\n            duration: toServerDuration(vital.duration),\n            description: vital.description,\n        },\n        type: \"vital\" /* RumEventType.VITAL */,\n    };\n    if (valueComputedBySdk) {\n        rawRumEvent._dd = {\n            vital: {\n                computed_value: true,\n            },\n        };\n    }\n    return {\n        rawRumEvent: rawRumEvent,\n        startTime: vital.startClocks.relative,\n        customerContext: vital.context,\n        domainContext: {},\n    };\n}\n//# sourceMappingURL=vitalCollection.js.map","import { endsWith, includes } from '../tools/utils/polyfills';\nimport { getGlobalObject } from '../tools/getGlobalObject';\nexport function getEventBridge() {\n    var eventBridgeGlobal = getEventBridgeGlobal();\n    if (!eventBridgeGlobal) {\n        return;\n    }\n    return {\n        getCapabilities: function () {\n            var _a;\n            return JSON.parse(((_a = eventBridgeGlobal.getCapabilities) === null || _a === void 0 ? void 0 : _a.call(eventBridgeGlobal)) || '[]');\n        },\n        getPrivacyLevel: function () {\n            var _a;\n            return (_a = eventBridgeGlobal.getPrivacyLevel) === null || _a === void 0 ? void 0 : _a.call(eventBridgeGlobal);\n        },\n        getAllowedWebViewHosts: function () {\n            return JSON.parse(eventBridgeGlobal.getAllowedWebViewHosts());\n        },\n        send: function (eventType, event, viewId) {\n            var view = viewId ? { id: viewId } : undefined;\n            eventBridgeGlobal.send(JSON.stringify({ eventType: eventType, event: event, view: view }));\n        },\n    };\n}\nexport function bridgeSupports(capability) {\n    var bridge = getEventBridge();\n    return !!bridge && includes(bridge.getCapabilities(), capability);\n}\nexport function canUseEventBridge(currentHost) {\n    var _a;\n    if (currentHost === void 0) { currentHost = (_a = getGlobalObject().location) === null || _a === void 0 ? void 0 : _a.hostname; }\n    var bridge = getEventBridge();\n    return (!!bridge &&\n        bridge\n            .getAllowedWebViewHosts()\n            .some(function (allowedHost) { return currentHost === allowedHost || endsWith(currentHost, \".\".concat(allowedHost)); }));\n}\nfunction getEventBridgeGlobal() {\n    return getGlobalObject().DatadogEventBridge;\n}\n//# sourceMappingURL=eventBridge.js.map","import { setTimeout } from './timer';\nimport { callMonitored } from './monitor';\nimport { noop } from './utils/functionUtils';\nimport { arrayFrom, startsWith } from './utils/polyfills';\nimport { createHandlingStack } from './stackTrace/handlingStack';\n/**\n * Instruments a method on a object, calling the given callback before the original method is\n * invoked. The callback receives an object with information about the method call.\n *\n * This function makes sure that we are \"good citizens\" regarding third party instrumentations: when\n * removing the instrumentation, the original method is usually restored, but if a third party\n * instrumentation was set after ours, we keep it in place and just replace our instrumentation with\n * a noop.\n *\n * Note: it is generally better to instrument methods that are \"owned\" by the object instead of ones\n * that are inherited from the prototype chain. Example:\n * * do:    `instrumentMethod(Array.prototype, 'push', ...)`\n * * don't: `instrumentMethod([], 'push', ...)`\n *\n * This method is also used to set event handler properties (ex: window.onerror = ...), as it has\n * the same requirements as instrumenting a method:\n * * if the event handler is already set by a third party, we need to call it and not just blindly\n * override it.\n * * if the event handler is set by a third party after us, we need to keep it in place when\n * removing ours.\n *\n * @example\n *\n *  instrumentMethod(window, 'fetch', ({ target, parameters, onPostCall }) => {\n *    console.log('Before calling fetch on', target, 'with parameters', parameters)\n *\n *    onPostCall((result) => {\n *      console.log('After fetch calling on', target, 'with parameters', parameters, 'and result', result)\n *    })\n *  })\n */\nexport function instrumentMethod(targetPrototype, method, onPreCall, _a) {\n    var _b = _a === void 0 ? {} : _a, computeHandlingStack = _b.computeHandlingStack;\n    var original = targetPrototype[method];\n    if (typeof original !== 'function') {\n        if (method in targetPrototype && startsWith(method, 'on')) {\n            original = noop;\n        }\n        else {\n            return { stop: noop };\n        }\n    }\n    var stopped = false;\n    var instrumentation = function () {\n        if (stopped) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n            return original.apply(this, arguments);\n        }\n        var parameters = arrayFrom(arguments);\n        var postCallCallback;\n        callMonitored(onPreCall, null, [\n            {\n                target: this,\n                parameters: parameters,\n                onPostCall: function (callback) {\n                    postCallCallback = callback;\n                },\n                handlingStack: computeHandlingStack ? createHandlingStack() : undefined,\n            },\n        ]);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        var result = original.apply(this, parameters);\n        if (postCallCallback) {\n            callMonitored(postCallCallback, null, [result]);\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return result;\n    };\n    targetPrototype[method] = instrumentation;\n    return {\n        stop: function () {\n            stopped = true;\n            // If the instrumentation has been removed by a third party, keep the last one\n            if (targetPrototype[method] === instrumentation) {\n                targetPrototype[method] = original;\n            }\n        },\n    };\n}\nexport function instrumentSetter(targetPrototype, property, after) {\n    var originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property);\n    if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {\n        return { stop: noop };\n    }\n    var stoppedInstrumentation = noop;\n    var instrumentation = function (target, value) {\n        // put hooked setter into event loop to avoid of set latency\n        setTimeout(function () {\n            if (instrumentation !== stoppedInstrumentation) {\n                after(target, value);\n            }\n        }, 0);\n    };\n    var instrumentationWrapper = function (value) {\n        originalDescriptor.set.call(this, value);\n        instrumentation(this, value);\n    };\n    Object.defineProperty(targetPrototype, property, {\n        set: instrumentationWrapper,\n    });\n    return {\n        stop: function () {\n            var _a;\n            if (((_a = Object.getOwnPropertyDescriptor(targetPrototype, property)) === null || _a === void 0 ? void 0 : _a.set) === instrumentationWrapper) {\n                Object.defineProperty(targetPrototype, property, originalDescriptor);\n            }\n            instrumentation = stoppedInstrumentation;\n        },\n    };\n}\n//# sourceMappingURL=instrumentMethod.js.map","import { jsonStringify } from '../serialisation/jsonStringify';\nexport function normalizeUrl(url) {\n    return buildUrl(url, location.href).href;\n}\nexport function isValidUrl(url) {\n    try {\n        return !!buildUrl(url);\n    }\n    catch (_a) {\n        return false;\n    }\n}\nexport function getPathName(url) {\n    var pathname = buildUrl(url).pathname;\n    return pathname[0] === '/' ? pathname : \"/\".concat(pathname);\n}\nexport function buildUrl(url, base) {\n    var supportedURL = getSupportedUrl();\n    if (supportedURL) {\n        try {\n            return base !== undefined ? new supportedURL(url, base) : new supportedURL(url);\n        }\n        catch (error) {\n            throw new Error(\"Failed to construct URL: \".concat(String(error), \" \").concat(jsonStringify({ url: url, base: base })));\n        }\n    }\n    if (base === undefined && !/:/.test(url)) {\n        throw new Error(\"Invalid URL: '\".concat(url, \"'\"));\n    }\n    var doc = document;\n    var anchorElement = doc.createElement('a');\n    if (base !== undefined) {\n        doc = document.implementation.createHTMLDocument('');\n        var baseElement = doc.createElement('base');\n        baseElement.href = base;\n        doc.head.appendChild(baseElement);\n        doc.body.appendChild(anchorElement);\n    }\n    anchorElement.href = url;\n    return anchorElement;\n}\nvar originalURL = URL;\nvar isURLSupported;\nfunction getSupportedUrl() {\n    if (isURLSupported === undefined) {\n        try {\n            var url = new originalURL('http://test/path');\n            isURLSupported = url.href === 'http://test/path';\n        }\n        catch (_a) {\n            isURLSupported = false;\n        }\n    }\n    return isURLSupported ? originalURL : undefined;\n}\n//# sourceMappingURL=urlPolyfill.js.map","import { instrumentMethod } from '../tools/instrumentMethod';\nimport { monitor } from '../tools/monitor';\nimport { Observable } from '../tools/observable';\nimport { assign } from '../tools/utils/polyfills';\nimport { clocksNow } from '../tools/utils/timeUtils';\nimport { normalizeUrl } from '../tools/utils/urlPolyfill';\nvar fetchObservable;\nexport function initFetchObservable() {\n    if (!fetchObservable) {\n        fetchObservable = createFetchObservable();\n    }\n    return fetchObservable;\n}\nexport function resetFetchObservable() {\n    fetchObservable = undefined;\n}\nfunction createFetchObservable() {\n    return new Observable(function (observable) {\n        if (!window.fetch) {\n            return;\n        }\n        var stop = instrumentMethod(window, 'fetch', function (call) { return beforeSend(call, observable); }, {\n            computeHandlingStack: true,\n        }).stop;\n        return stop;\n    });\n}\nfunction beforeSend(_a, observable) {\n    var parameters = _a.parameters, onPostCall = _a.onPostCall, handlingStack = _a.handlingStack;\n    var input = parameters[0], init = parameters[1];\n    var methodFromParams = init && init.method;\n    if (methodFromParams === undefined && input instanceof Request) {\n        methodFromParams = input.method;\n    }\n    var method = methodFromParams !== undefined ? String(methodFromParams).toUpperCase() : 'GET';\n    var url = input instanceof Request ? input.url : normalizeUrl(String(input));\n    var startClocks = clocksNow();\n    var context = {\n        state: 'start',\n        init: init,\n        input: input,\n        method: method,\n        startClocks: startClocks,\n        url: url,\n        handlingStack: handlingStack,\n    };\n    observable.notify(context);\n    // Those properties can be changed by observable subscribers\n    parameters[0] = context.input;\n    parameters[1] = context.init;\n    onPostCall(function (responsePromise) { return afterSend(observable, responsePromise, context); });\n}\nfunction afterSend(observable, responsePromise, startContext) {\n    var context = startContext;\n    function reportFetch(partialContext) {\n        context.state = 'resolve';\n        assign(context, partialContext);\n        observable.notify(context);\n    }\n    responsePromise.then(monitor(function (response) {\n        reportFetch({\n            response: response,\n            responseType: response.type,\n            status: response.status,\n            isAborted: false,\n        });\n    }), monitor(function (error) {\n        var _a, _b;\n        reportFetch({\n            status: 0,\n            isAborted: ((_b = (_a = context.init) === null || _a === void 0 ? void 0 : _a.signal) === null || _b === void 0 ? void 0 : _b.aborted) || (error instanceof DOMException && error.code === DOMException.ABORT_ERR),\n            error: error,\n        });\n    }));\n}\n//# sourceMappingURL=fetchObservable.js.map","import { display } from '../tools/display';\nimport { ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils';\nimport { findCommaSeparatedValue, findCommaSeparatedValues, generateUUID } from '../tools/utils/stringUtils';\nexport function setCookie(name, value, expireDelay, options) {\n    if (expireDelay === void 0) { expireDelay = 0; }\n    var date = new Date();\n    date.setTime(date.getTime() + expireDelay);\n    var expires = \"expires=\".concat(date.toUTCString());\n    var sameSite = options && options.crossSite ? 'none' : 'strict';\n    var domain = options && options.domain ? \";domain=\".concat(options.domain) : '';\n    var secure = options && options.secure ? ';secure' : '';\n    var partitioned = options && options.partitioned ? ';partitioned' : '';\n    document.cookie = \"\".concat(name, \"=\").concat(value, \";\").concat(expires, \";path=/;samesite=\").concat(sameSite).concat(domain).concat(secure).concat(partitioned);\n}\nexport function getCookie(name) {\n    return findCommaSeparatedValue(document.cookie, name);\n}\nvar initCookieParsed;\n/**\n * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)\n * to avoid accessing document.cookie multiple times.\n */\nexport function getInitCookie(name) {\n    if (!initCookieParsed) {\n        initCookieParsed = findCommaSeparatedValues(document.cookie);\n    }\n    return initCookieParsed.get(name);\n}\nexport function resetInitCookies() {\n    initCookieParsed = undefined;\n}\nexport function deleteCookie(name, options) {\n    setCookie(name, '', 0, options);\n}\nexport function areCookiesAuthorized(options) {\n    if (document.cookie === undefined || document.cookie === null) {\n        return false;\n    }\n    try {\n        // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n        // the test cookie lifetime\n        var testCookieName = \"dd_cookie_test_\".concat(generateUUID());\n        var testCookieValue = 'test';\n        setCookie(testCookieName, testCookieValue, ONE_MINUTE, options);\n        var isCookieCorrectlySet = getCookie(testCookieName) === testCookieValue;\n        deleteCookie(testCookieName, options);\n        return isCookieCorrectlySet;\n    }\n    catch (error) {\n        display.error(error);\n        return false;\n    }\n}\n/**\n * No API to retrieve it, number of levels for subdomain and suffix are unknown\n * strategy: find the minimal domain on which cookies are allowed to be set\n * https://web.dev/same-site-same-origin/#site\n */\nvar getCurrentSiteCache;\nexport function getCurrentSite() {\n    if (getCurrentSiteCache === undefined) {\n        // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n        // the test cookie lifetime\n        var testCookieName = \"dd_site_test_\".concat(generateUUID());\n        var testCookieValue = 'test';\n        var domainLevels = window.location.hostname.split('.');\n        var candidateDomain = domainLevels.pop();\n        while (domainLevels.length && !getCookie(testCookieName)) {\n            candidateDomain = \"\".concat(domainLevels.pop(), \".\").concat(candidateDomain);\n            setCookie(testCookieName, testCookieValue, ONE_SECOND, { domain: candidateDomain });\n        }\n        deleteCookie(testCookieName, { domain: candidateDomain });\n        getCurrentSiteCache = candidateDomain;\n    }\n    return getCurrentSiteCache;\n}\n//# sourceMappingURL=cookie.js.map","import { getInitCookie } from '../../browser/cookie';\nexport var SYNTHETICS_TEST_ID_COOKIE_NAME = 'datadog-synthetics-public-id';\nexport var SYNTHETICS_RESULT_ID_COOKIE_NAME = 'datadog-synthetics-result-id';\nexport var SYNTHETICS_INJECTS_RUM_COOKIE_NAME = 'datadog-synthetics-injects-rum';\nexport function willSyntheticsInjectRum() {\n    return Boolean(window._DATADOG_SYNTHETICS_INJECTS_RUM || getInitCookie(SYNTHETICS_INJECTS_RUM_COOKIE_NAME));\n}\nexport function getSyntheticsTestId() {\n    var value = window._DATADOG_SYNTHETICS_PUBLIC_ID || getInitCookie(SYNTHETICS_TEST_ID_COOKIE_NAME);\n    return typeof value === 'string' ? value : undefined;\n}\nexport function getSyntheticsResultId() {\n    var value = window._DATADOG_SYNTHETICS_RESULT_ID || getInitCookie(SYNTHETICS_RESULT_ID_COOKIE_NAME);\n    return typeof value === 'string' ? value : undefined;\n}\n//# sourceMappingURL=syntheticsWorkerValues.js.map","export function isIE() {\n    return detectBrowserCached() === 0 /* Browser.IE */;\n}\nexport function isChromium() {\n    return detectBrowserCached() === 1 /* Browser.CHROMIUM */;\n}\nexport function isSafari() {\n    return detectBrowserCached() === 2 /* Browser.SAFARI */;\n}\nvar browserCache;\nfunction detectBrowserCached() {\n    return browserCache !== null && browserCache !== void 0 ? browserCache : (browserCache = detectBrowser());\n}\n// Exported only for tests\nexport function detectBrowser(browserWindow) {\n    var _a;\n    if (browserWindow === void 0) { browserWindow = window; }\n    var userAgent = browserWindow.navigator.userAgent;\n    if (browserWindow.chrome || /HeadlessChrome/.test(userAgent)) {\n        return 1 /* Browser.CHROMIUM */;\n    }\n    if (\n    // navigator.vendor is deprecated, but it is the most resilient way we found to detect\n    // \"Apple maintained browsers\" (AKA Safari). If one day it gets removed, we still have the\n    // useragent test as a semi-working fallback.\n    ((_a = browserWindow.navigator.vendor) === null || _a === void 0 ? void 0 : _a.indexOf('Apple')) === 0 ||\n        (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))) {\n        return 2 /* Browser.SAFARI */;\n    }\n    if (browserWindow.document.documentMode) {\n        return 0 /* Browser.IE */;\n    }\n    return 3 /* Browser.OTHER */;\n}\n//# sourceMappingURL=browserDetection.js.map","export var SESSION_STORE_KEY = '_dd_s';\n//# sourceMappingURL=sessionStoreStrategy.js.map","import { ONE_HOUR, ONE_MINUTE, ONE_YEAR } from '../../tools/utils/timeUtils';\nexport var SESSION_TIME_OUT_DELAY = 4 * ONE_HOUR;\nexport var SESSION_EXPIRATION_DELAY = 15 * ONE_MINUTE;\nexport var SESSION_COOKIE_EXPIRATION_DELAY = ONE_YEAR;\nexport var SessionPersistence = {\n    COOKIE: 'cookie',\n    LOCAL_STORAGE: 'local-storage',\n};\n//# sourceMappingURL=sessionConstants.js.map","export var SESSION_ENTRY_REGEXP = /^([a-zA-Z]+)=([a-z0-9-]+)$/;\nexport var SESSION_ENTRY_SEPARATOR = '&';\nexport function isValidSessionString(sessionString) {\n    return (!!sessionString &&\n        (sessionString.indexOf(SESSION_ENTRY_SEPARATOR) !== -1 || SESSION_ENTRY_REGEXP.test(sessionString)));\n}\n//# sourceMappingURL=sessionStateValidation.js.map","import { ExperimentalFeature, isExperimentalFeatureEnabled } from '../../tools/experimentalFeatures';\nimport { isEmptyObject } from '../../tools/utils/objectUtils';\nimport { objectEntries } from '../../tools/utils/polyfills';\nimport { dateNow } from '../../tools/utils/timeUtils';\nimport { generateAnonymousId } from '../user';\nimport { SESSION_EXPIRATION_DELAY, SESSION_TIME_OUT_DELAY } from './sessionConstants';\nimport { isValidSessionString, SESSION_ENTRY_REGEXP, SESSION_ENTRY_SEPARATOR } from './sessionStateValidation';\nexport var EXPIRED = '1';\nexport function getExpiredSessionState(previousSessionState) {\n    var expiredSessionState = {\n        isExpired: EXPIRED,\n    };\n    if (isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING)) {\n        if (previousSessionState === null || previousSessionState === void 0 ? void 0 : previousSessionState.anonymousId) {\n            expiredSessionState.anonymousId = previousSessionState === null || previousSessionState === void 0 ? void 0 : previousSessionState.anonymousId;\n        }\n        else {\n            expiredSessionState.anonymousId = generateAnonymousId();\n        }\n    }\n    return expiredSessionState;\n}\nexport function isSessionInNotStartedState(session) {\n    return isEmptyObject(session);\n}\nexport function isSessionStarted(session) {\n    return !isSessionInNotStartedState(session);\n}\nexport function isSessionInExpiredState(session) {\n    return session.isExpired !== undefined || !isActiveSession(session);\n}\n// An active session is a session in either `Tracked` or `NotTracked` state\nfunction isActiveSession(sessionState) {\n    // created and expire can be undefined for versions which was not storing them\n    // these checks could be removed when older versions will not be available/live anymore\n    return ((sessionState.created === undefined || dateNow() - Number(sessionState.created) < SESSION_TIME_OUT_DELAY) &&\n        (sessionState.expire === undefined || dateNow() < Number(sessionState.expire)));\n}\nexport function expandSessionState(session) {\n    session.expire = String(dateNow() + SESSION_EXPIRATION_DELAY);\n}\nexport function toSessionString(session) {\n    return (objectEntries(session)\n        // we use `aid` as a key for anonymousId\n        .map(function (_a) {\n        var key = _a[0], value = _a[1];\n        return (key === 'anonymousId' ? \"aid=\".concat(value) : \"\".concat(key, \"=\").concat(value));\n    })\n        .join(SESSION_ENTRY_SEPARATOR));\n}\nexport function toSessionState(sessionString) {\n    var session = {};\n    if (isValidSessionString(sessionString)) {\n        sessionString.split(SESSION_ENTRY_SEPARATOR).forEach(function (entry) {\n            var matches = SESSION_ENTRY_REGEXP.exec(entry);\n            if (matches !== null) {\n                var key = matches[1], value = matches[2];\n                if (key === 'aid') {\n                    // we use `aid` as a key for anonymousId\n                    session.anonymousId = value;\n                }\n                else {\n                    session[key] = value;\n                }\n            }\n        });\n    }\n    return session;\n}\n//# sourceMappingURL=sessionState.js.map","import { getInitCookie } from '../../browser/cookie';\nimport { SESSION_STORE_KEY } from './storeStrategies/sessionStoreStrategy';\nimport { expandSessionState, isSessionStarted } from './sessionState';\nexport var OLD_SESSION_COOKIE_NAME = '_dd';\nexport var OLD_RUM_COOKIE_NAME = '_dd_r';\nexport var OLD_LOGS_COOKIE_NAME = '_dd_l';\n// duplicate values to avoid dependency issues\nexport var RUM_SESSION_KEY = 'rum';\nexport var LOGS_SESSION_KEY = 'logs';\n/**\n * This migration should remain in the codebase as long as older versions are available/live\n * to allow older sdk versions to be upgraded to newer versions without compatibility issues.\n */\nexport function tryOldCookiesMigration(cookieStoreStrategy) {\n    var sessionString = getInitCookie(SESSION_STORE_KEY);\n    if (!sessionString) {\n        var oldSessionId = getInitCookie(OLD_SESSION_COOKIE_NAME);\n        var oldRumType = getInitCookie(OLD_RUM_COOKIE_NAME);\n        var oldLogsType = getInitCookie(OLD_LOGS_COOKIE_NAME);\n        var session = {};\n        if (oldSessionId) {\n            session.id = oldSessionId;\n        }\n        if (oldLogsType && /^[01]$/.test(oldLogsType)) {\n            session[LOGS_SESSION_KEY] = oldLogsType;\n        }\n        if (oldRumType && /^[012]$/.test(oldRumType)) {\n            session[RUM_SESSION_KEY] = oldRumType;\n        }\n        if (isSessionStarted(session)) {\n            expandSessionState(session);\n            cookieStoreStrategy.persistSession(session);\n        }\n    }\n}\n//# sourceMappingURL=oldCookiesMigration.js.map","import { isChromium } from '../../../tools/utils/browserDetection';\nimport { ExperimentalFeature, isExperimentalFeatureEnabled } from '../../../tools/experimentalFeatures';\nimport { getCurrentSite, areCookiesAuthorized, getCookie, setCookie } from '../../../browser/cookie';\nimport { tryOldCookiesMigration } from '../oldCookiesMigration';\nimport { SESSION_COOKIE_EXPIRATION_DELAY, SESSION_EXPIRATION_DELAY, SESSION_TIME_OUT_DELAY, SessionPersistence, } from '../sessionConstants';\nimport { toSessionString, toSessionState, getExpiredSessionState } from '../sessionState';\nimport { SESSION_STORE_KEY } from './sessionStoreStrategy';\nexport function selectCookieStrategy(initConfiguration) {\n    var cookieOptions = buildCookieOptions(initConfiguration);\n    return areCookiesAuthorized(cookieOptions) ? { type: SessionPersistence.COOKIE, cookieOptions: cookieOptions } : undefined;\n}\nexport function initCookieStrategy(cookieOptions) {\n    var cookieStore = {\n        /**\n         * Lock strategy allows mitigating issues due to concurrent access to cookie.\n         * This issue concerns only chromium browsers and enabling this on firefox increases cookie write failures.\n         */\n        isLockEnabled: isChromium(),\n        persistSession: persistSessionCookie(cookieOptions),\n        retrieveSession: retrieveSessionCookie,\n        expireSession: function (sessionState) { return expireSessionCookie(cookieOptions, sessionState); },\n    };\n    tryOldCookiesMigration(cookieStore);\n    return cookieStore;\n}\nfunction persistSessionCookie(options) {\n    return function (session) {\n        setCookie(SESSION_STORE_KEY, toSessionString(session), SESSION_EXPIRATION_DELAY, options);\n    };\n}\nfunction expireSessionCookie(options, sessionState) {\n    var expiredSessionState = getExpiredSessionState(sessionState);\n    setCookie(SESSION_STORE_KEY, toSessionString(expiredSessionState), isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING)\n        ? SESSION_COOKIE_EXPIRATION_DELAY\n        : SESSION_TIME_OUT_DELAY, options);\n}\nfunction retrieveSessionCookie() {\n    var sessionString = getCookie(SESSION_STORE_KEY);\n    var sessionState = toSessionState(sessionString);\n    return sessionState;\n}\nexport function buildCookieOptions(initConfiguration) {\n    var cookieOptions = {};\n    cookieOptions.secure =\n        !!initConfiguration.useSecureSessionCookie ||\n            !!initConfiguration.usePartitionedCrossSiteSessionCookie ||\n            !!initConfiguration.useCrossSiteSessionCookie;\n    cookieOptions.crossSite =\n        !!initConfiguration.usePartitionedCrossSiteSessionCookie || !!initConfiguration.useCrossSiteSessionCookie;\n    cookieOptions.partitioned = !!initConfiguration.usePartitionedCrossSiteSessionCookie;\n    if (initConfiguration.trackSessionAcrossSubdomains) {\n        cookieOptions.domain = getCurrentSite();\n    }\n    return cookieOptions;\n}\n//# sourceMappingURL=sessionInCookie.js.map","import { generateUUID } from '../../../tools/utils/stringUtils';\nimport { SessionPersistence } from '../sessionConstants';\nimport { toSessionString, toSessionState, getExpiredSessionState } from '../sessionState';\nimport { SESSION_STORE_KEY } from './sessionStoreStrategy';\nvar LOCAL_STORAGE_TEST_KEY = '_dd_test_';\nexport function selectLocalStorageStrategy() {\n    try {\n        var id = generateUUID();\n        var testKey = \"\".concat(LOCAL_STORAGE_TEST_KEY).concat(id);\n        localStorage.setItem(testKey, id);\n        var retrievedId = localStorage.getItem(testKey);\n        localStorage.removeItem(testKey);\n        return id === retrievedId ? { type: SessionPersistence.LOCAL_STORAGE } : undefined;\n    }\n    catch (_a) {\n        return undefined;\n    }\n}\nexport function initLocalStorageStrategy() {\n    return {\n        isLockEnabled: false,\n        persistSession: persistInLocalStorage,\n        retrieveSession: retrieveSessionFromLocalStorage,\n        expireSession: expireSessionFromLocalStorage,\n    };\n}\nfunction persistInLocalStorage(sessionState) {\n    localStorage.setItem(SESSION_STORE_KEY, toSessionString(sessionState));\n}\nfunction retrieveSessionFromLocalStorage() {\n    var sessionString = localStorage.getItem(SESSION_STORE_KEY);\n    return toSessionState(sessionString);\n}\nfunction expireSessionFromLocalStorage(previousSessionState) {\n    persistInLocalStorage(getExpiredSessionState(previousSessionState));\n}\n//# sourceMappingURL=sessionInLocalStorage.js.map","import { setTimeout } from '../../tools/timer';\nimport { generateUUID } from '../../tools/utils/stringUtils';\nimport { assign } from '../../tools/utils/polyfills';\nimport { expandSessionState, isSessionInExpiredState } from './sessionState';\nexport var LOCK_RETRY_DELAY = 10;\nexport var LOCK_MAX_TRIES = 100;\nvar bufferedOperations = [];\nvar ongoingOperations;\nexport function processSessionStoreOperations(operations, sessionStoreStrategy, numberOfRetries) {\n    var _a;\n    if (numberOfRetries === void 0) { numberOfRetries = 0; }\n    var isLockEnabled = sessionStoreStrategy.isLockEnabled, persistSession = sessionStoreStrategy.persistSession, expireSession = sessionStoreStrategy.expireSession;\n    var persistWithLock = function (session) { return persistSession(assign({}, session, { lock: currentLock })); };\n    var retrieveStore = function () {\n        var session = sessionStoreStrategy.retrieveSession();\n        var lock = session.lock;\n        if (session.lock) {\n            delete session.lock;\n        }\n        return {\n            session: session,\n            lock: lock,\n        };\n    };\n    if (!ongoingOperations) {\n        ongoingOperations = operations;\n    }\n    if (operations !== ongoingOperations) {\n        bufferedOperations.push(operations);\n        return;\n    }\n    if (isLockEnabled && numberOfRetries >= LOCK_MAX_TRIES) {\n        next(sessionStoreStrategy);\n        return;\n    }\n    var currentLock;\n    var currentStore = retrieveStore();\n    if (isLockEnabled) {\n        // if someone has lock, retry later\n        if (currentStore.lock) {\n            retryLater(operations, sessionStoreStrategy, numberOfRetries);\n            return;\n        }\n        // acquire lock\n        currentLock = generateUUID();\n        persistWithLock(currentStore.session);\n        // if lock is not acquired, retry later\n        currentStore = retrieveStore();\n        if (currentStore.lock !== currentLock) {\n            retryLater(operations, sessionStoreStrategy, numberOfRetries);\n            return;\n        }\n    }\n    var processedSession = operations.process(currentStore.session);\n    if (isLockEnabled) {\n        // if lock corrupted after process, retry later\n        currentStore = retrieveStore();\n        if (currentStore.lock !== currentLock) {\n            retryLater(operations, sessionStoreStrategy, numberOfRetries);\n            return;\n        }\n    }\n    if (processedSession) {\n        if (isSessionInExpiredState(processedSession)) {\n            expireSession(processedSession);\n        }\n        else {\n            expandSessionState(processedSession);\n            if (isLockEnabled) {\n                persistWithLock(processedSession);\n            }\n            else {\n                persistSession(processedSession);\n            }\n        }\n    }\n    if (isLockEnabled) {\n        // correctly handle lock around expiration would require to handle this case properly at several levels\n        // since we don't have evidence of lock issues around expiration, let's just not do the corruption check for it\n        if (!(processedSession && isSessionInExpiredState(processedSession))) {\n            // if lock corrupted after persist, retry later\n            currentStore = retrieveStore();\n            if (currentStore.lock !== currentLock) {\n                retryLater(operations, sessionStoreStrategy, numberOfRetries);\n                return;\n            }\n            persistSession(currentStore.session);\n            processedSession = currentStore.session;\n        }\n    }\n    // call after even if session is not persisted in order to perform operations on\n    // up-to-date session state value => the value could have been modified by another tab\n    (_a = operations.after) === null || _a === void 0 ? void 0 : _a.call(operations, processedSession || currentStore.session);\n    next(sessionStoreStrategy);\n}\nfunction retryLater(operations, sessionStore, currentNumberOfRetries) {\n    setTimeout(function () {\n        processSessionStoreOperations(operations, sessionStore, currentNumberOfRetries + 1);\n    }, LOCK_RETRY_DELAY);\n}\nfunction next(sessionStore) {\n    ongoingOperations = undefined;\n    var nextOperations = bufferedOperations.shift();\n    if (nextOperations) {\n        processSessionStoreOperations(nextOperations, sessionStore);\n    }\n}\n//# sourceMappingURL=sessionStoreOperations.js.map","import { clearInterval, setInterval } from '../../tools/timer';\nimport { Observable } from '../../tools/observable';\nimport { ONE_SECOND, dateNow } from '../../tools/utils/timeUtils';\nimport { throttle } from '../../tools/utils/functionUtils';\nimport { generateUUID } from '../../tools/utils/stringUtils';\nimport { assign } from '../../tools/utils/polyfills';\nimport { display } from '../../tools/display';\nimport { selectCookieStrategy, initCookieStrategy } from './storeStrategies/sessionInCookie';\nimport { getExpiredSessionState, isSessionInExpiredState, isSessionInNotStartedState, isSessionStarted, } from './sessionState';\nimport { initLocalStorageStrategy, selectLocalStorageStrategy } from './storeStrategies/sessionInLocalStorage';\nimport { processSessionStoreOperations } from './sessionStoreOperations';\nimport { SessionPersistence } from './sessionConstants';\n/**\n * Every second, the storage will be polled to check for any change that can occur\n * to the session state in another browser tab, or another window.\n * This value has been determined from our previous cookie-only implementation.\n */\nexport var STORAGE_POLL_DELAY = ONE_SECOND;\n/**\n * Selects the correct session store strategy type based on the configuration and storage\n * availability.\n */\nexport function selectSessionStoreStrategyType(initConfiguration) {\n    switch (initConfiguration.sessionPersistence) {\n        case SessionPersistence.COOKIE:\n            return selectCookieStrategy(initConfiguration);\n        case SessionPersistence.LOCAL_STORAGE:\n            return selectLocalStorageStrategy();\n        case undefined: {\n            var sessionStoreStrategyType = selectCookieStrategy(initConfiguration);\n            if (!sessionStoreStrategyType && initConfiguration.allowFallbackToLocalStorage) {\n                sessionStoreStrategyType = selectLocalStorageStrategy();\n            }\n            return sessionStoreStrategyType;\n        }\n        default:\n            display.error(\"Invalid session persistence '\".concat(String(initConfiguration.sessionPersistence), \"'\"));\n    }\n}\n/**\n * Different session concepts:\n * - tracked, the session has an id and is updated along the user navigation\n * - not tracked, the session does not have an id but it is updated along the user navigation\n * - inactive, no session in store or session expired, waiting for a renew session\n */\nexport function startSessionStore(sessionStoreStrategyType, productKey, computeSessionState) {\n    var renewObservable = new Observable();\n    var expireObservable = new Observable();\n    var sessionStateUpdateObservable = new Observable();\n    var sessionStoreStrategy = sessionStoreStrategyType.type === SessionPersistence.COOKIE\n        ? initCookieStrategy(sessionStoreStrategyType.cookieOptions)\n        : initLocalStorageStrategy();\n    var expireSession = sessionStoreStrategy.expireSession;\n    var watchSessionTimeoutId = setInterval(watchSession, STORAGE_POLL_DELAY);\n    var sessionCache;\n    startSession();\n    var _a = throttle(function () {\n        processSessionStoreOperations({\n            process: function (sessionState) {\n                if (isSessionInNotStartedState(sessionState)) {\n                    return;\n                }\n                var synchronizedSession = synchronizeSession(sessionState);\n                expandOrRenewSessionState(synchronizedSession);\n                return synchronizedSession;\n            },\n            after: function (sessionState) {\n                if (isSessionStarted(sessionState) && !hasSessionInCache()) {\n                    renewSessionInCache(sessionState);\n                }\n                sessionCache = sessionState;\n            },\n        }, sessionStoreStrategy);\n    }, STORAGE_POLL_DELAY), throttledExpandOrRenewSession = _a.throttled, cancelExpandOrRenewSession = _a.cancel;\n    function expandSession() {\n        processSessionStoreOperations({\n            process: function (sessionState) { return (hasSessionInCache() ? synchronizeSession(sessionState) : undefined); },\n        }, sessionStoreStrategy);\n    }\n    /**\n     * allows two behaviors:\n     * - if the session is active, synchronize the session cache without updating the session store\n     * - if the session is not active, clear the session store and expire the session cache\n     */\n    function watchSession() {\n        processSessionStoreOperations({\n            process: function (sessionState) {\n                return isSessionInExpiredState(sessionState) ? getExpiredSessionState(sessionState) : undefined;\n            },\n            after: synchronizeSession,\n        }, sessionStoreStrategy);\n    }\n    function synchronizeSession(sessionState) {\n        if (isSessionInExpiredState(sessionState)) {\n            sessionState = getExpiredSessionState(sessionState);\n        }\n        if (hasSessionInCache()) {\n            if (isSessionInCacheOutdated(sessionState)) {\n                expireSessionInCache();\n            }\n            else {\n                sessionStateUpdateObservable.notify({ previousState: sessionCache, newState: sessionState });\n                sessionCache = sessionState;\n            }\n        }\n        return sessionState;\n    }\n    function startSession() {\n        processSessionStoreOperations({\n            process: function (sessionState) {\n                if (isSessionInNotStartedState(sessionState)) {\n                    return getExpiredSessionState(sessionState);\n                }\n            },\n            after: function (sessionState) {\n                sessionCache = sessionState;\n            },\n        }, sessionStoreStrategy);\n    }\n    function expandOrRenewSessionState(sessionState) {\n        if (isSessionInNotStartedState(sessionState)) {\n            return false;\n        }\n        var _a = computeSessionState(sessionState[productKey]), trackingType = _a.trackingType, isTracked = _a.isTracked;\n        sessionState[productKey] = trackingType;\n        delete sessionState.isExpired;\n        if (isTracked && !sessionState.id) {\n            sessionState.id = generateUUID();\n            sessionState.created = String(dateNow());\n        }\n    }\n    function hasSessionInCache() {\n        return sessionCache[productKey] !== undefined;\n    }\n    function isSessionInCacheOutdated(sessionState) {\n        return sessionCache.id !== sessionState.id || sessionCache[productKey] !== sessionState[productKey];\n    }\n    function expireSessionInCache() {\n        sessionCache = getExpiredSessionState(sessionCache);\n        expireObservable.notify();\n    }\n    function renewSessionInCache(sessionState) {\n        sessionCache = sessionState;\n        renewObservable.notify();\n    }\n    function updateSessionState(partialSessionState) {\n        processSessionStoreOperations({\n            process: function (sessionState) { return assign({}, sessionState, partialSessionState); },\n            after: synchronizeSession,\n        }, sessionStoreStrategy);\n    }\n    return {\n        expandOrRenewSession: throttledExpandOrRenewSession,\n        expandSession: expandSession,\n        getSession: function () { return sessionCache; },\n        renewObservable: renewObservable,\n        expireObservable: expireObservable,\n        sessionStateUpdateObservable: sessionStateUpdateObservable,\n        restartSession: startSession,\n        expire: function () {\n            cancelExpandOrRenewSession();\n            expireSession(sessionCache);\n            synchronizeSession(getExpiredSessionState(sessionCache));\n        },\n        stop: function () {\n            clearInterval(watchSessionTimeoutId);\n        },\n        updateSessionState: updateSessionState,\n    };\n}\n//# sourceMappingURL=sessionStore.js.map","import { timeStampNow } from '../../tools/utils/timeUtils';\nimport { normalizeUrl } from '../../tools/utils/urlPolyfill';\nimport { generateUUID } from '../../tools/utils/stringUtils';\nimport { INTAKE_SITE_US1, INTAKE_SITE_FED_STAGING, PCI_INTAKE_HOST_US1 } from './intakeSites';\nexport function createEndpointBuilder(initConfiguration, trackType, configurationTags) {\n    var buildUrlWithParameters = createEndpointUrlWithParametersBuilder(initConfiguration, trackType);\n    return {\n        build: function (api, payload) {\n            var parameters = buildEndpointParameters(initConfiguration, trackType, configurationTags, api, payload);\n            return buildUrlWithParameters(parameters);\n        },\n        urlPrefix: buildUrlWithParameters(''),\n        trackType: trackType,\n    };\n}\n/**\n * Create a function used to build a full endpoint url from provided parameters. The goal of this\n * function is to pre-compute some parts of the URL to avoid re-computing everything on every\n * request, as only parameters are changing.\n */\nfunction createEndpointUrlWithParametersBuilder(initConfiguration, trackType) {\n    var path = \"/api/v2/\".concat(trackType);\n    var proxy = initConfiguration.proxy;\n    if (typeof proxy === 'string') {\n        var normalizedProxyUrl_1 = normalizeUrl(proxy);\n        return function (parameters) { return \"\".concat(normalizedProxyUrl_1, \"?ddforward=\").concat(encodeURIComponent(\"\".concat(path, \"?\").concat(parameters))); };\n    }\n    if (typeof proxy === 'function') {\n        return function (parameters) { return proxy({ path: path, parameters: parameters }); };\n    }\n    var host = buildEndpointHost(trackType, initConfiguration);\n    return function (parameters) { return \"https://\".concat(host).concat(path, \"?\").concat(parameters); };\n}\nfunction buildEndpointHost(trackType, initConfiguration) {\n    var _a = initConfiguration.site, site = _a === void 0 ? INTAKE_SITE_US1 : _a, internalAnalyticsSubdomain = initConfiguration.internalAnalyticsSubdomain;\n    if (trackType === 'logs' && initConfiguration.usePciIntake && site === INTAKE_SITE_US1) {\n        return PCI_INTAKE_HOST_US1;\n    }\n    if (internalAnalyticsSubdomain && site === INTAKE_SITE_US1) {\n        return \"\".concat(internalAnalyticsSubdomain, \".\").concat(INTAKE_SITE_US1);\n    }\n    if (site === INTAKE_SITE_FED_STAGING) {\n        return \"http-intake.logs.\".concat(site);\n    }\n    var domainParts = site.split('.');\n    var extension = domainParts.pop();\n    return \"browser-intake-\".concat(domainParts.join('-'), \".\").concat(extension);\n}\n/**\n * Build parameters to be used for an intake request. Parameters should be re-built for each\n * request, as they change randomly.\n */\nfunction buildEndpointParameters(_a, trackType, configurationTags, api, _b) {\n    var clientToken = _a.clientToken, internalAnalyticsSubdomain = _a.internalAnalyticsSubdomain;\n    var retry = _b.retry, encoding = _b.encoding;\n    var tags = [\"sdk_version:\".concat(\"5.35.1\"), \"api:\".concat(api)].concat(configurationTags);\n    if (retry) {\n        tags.push(\"retry_count:\".concat(retry.count), \"retry_after:\".concat(retry.lastFailureStatus));\n    }\n    var parameters = [\n        'ddsource=browser',\n        \"ddtags=\".concat(encodeURIComponent(tags.join(','))),\n        \"dd-api-key=\".concat(clientToken),\n        \"dd-evp-origin-version=\".concat(encodeURIComponent(\"5.35.1\")),\n        'dd-evp-origin=browser',\n        \"dd-request-id=\".concat(generateUUID()),\n    ];\n    if (encoding) {\n        parameters.push(\"dd-evp-encoding=\".concat(encoding));\n    }\n    if (trackType === 'rum') {\n        parameters.push(\"batch_time=\".concat(timeStampNow()));\n    }\n    if (internalAnalyticsSubdomain) {\n        parameters.reverse();\n    }\n    return parameters.join('&');\n}\n//# sourceMappingURL=endpointBuilder.js.map","import { DOCS_ORIGIN, MORE_DETAILS, display } from '../../tools/display';\nexport var TAG_SIZE_LIMIT = 200;\nexport function buildTags(configuration) {\n    var env = configuration.env, service = configuration.service, version = configuration.version, datacenter = configuration.datacenter;\n    var tags = [];\n    if (env) {\n        tags.push(buildTag('env', env));\n    }\n    if (service) {\n        tags.push(buildTag('service', service));\n    }\n    if (version) {\n        tags.push(buildTag('version', version));\n    }\n    if (datacenter) {\n        tags.push(buildTag('datacenter', datacenter));\n    }\n    return tags;\n}\nexport function buildTag(key, rawValue) {\n    // See https://docs.datadoghq.com/getting_started/tagging/#defining-tags for tags syntax. Note\n    // that the backend may not follow the exact same rules, so we only want to display an informal\n    // warning.\n    var valueSizeLimit = TAG_SIZE_LIMIT - key.length - 1;\n    if (rawValue.length > valueSizeLimit || hasForbiddenCharacters(rawValue)) {\n        display.warn(\"\".concat(key, \" value doesn't meet tag requirements and will be sanitized. \").concat(MORE_DETAILS, \" \").concat(DOCS_ORIGIN, \"/getting_started/tagging/#defining-tags\"));\n    }\n    // Let the backend do most of the sanitization, but still make sure multiple tags can't be crafted\n    // by forging a value containing commas.\n    var sanitizedValue = rawValue.replace(/,/g, '_');\n    return \"\".concat(key, \":\").concat(sanitizedValue);\n}\nfunction hasForbiddenCharacters(rawValue) {\n    // Unicode property escapes is not supported in all browsers, so we use a try/catch.\n    // Todo: Remove the try/catch when dropping IE11.\n    if (!supportUnicodePropertyEscapes()) {\n        return false;\n    }\n    // We use the Unicode property escapes to match any character that is a letter including other languages like Chinese, Japanese, etc.\n    // p{Ll} matches a lowercase letter.\n    // p{Lo} matches a letter that is neither uppercase nor lowercase (ex: Japanese characters).\n    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Unicode_character_class_escape#unicode_property_escapes_vs._character_classes\n    return new RegExp('[^\\\\p{Ll}\\\\p{Lo}0-9_:./-]', 'u').test(rawValue);\n}\nexport function supportUnicodePropertyEscapes() {\n    try {\n        new RegExp('[\\\\p{Ll}]', 'u');\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\n//# sourceMappingURL=tags.js.map","import { assign, includes } from '../../tools/utils/polyfills';\nimport { createEndpointBuilder } from './endpointBuilder';\nimport { buildTags } from './tags';\nimport { INTAKE_SITE_US1, INTAKE_URL_PARAMETERS } from './intakeSites';\nexport function computeTransportConfiguration(initConfiguration) {\n    var site = initConfiguration.site || INTAKE_SITE_US1;\n    var tags = buildTags(initConfiguration);\n    var endpointBuilders = computeEndpointBuilders(initConfiguration, tags);\n    var replicaConfiguration = computeReplicaConfiguration(initConfiguration, tags);\n    return assign({\n        replica: replicaConfiguration,\n        site: site,\n    }, endpointBuilders);\n}\nfunction computeEndpointBuilders(initConfiguration, tags) {\n    return {\n        logsEndpointBuilder: createEndpointBuilder(initConfiguration, 'logs', tags),\n        rumEndpointBuilder: createEndpointBuilder(initConfiguration, 'rum', tags),\n        sessionReplayEndpointBuilder: createEndpointBuilder(initConfiguration, 'replay', tags),\n    };\n}\nfunction computeReplicaConfiguration(initConfiguration, tags) {\n    if (!initConfiguration.replica) {\n        return;\n    }\n    var replicaConfiguration = assign({}, initConfiguration, {\n        site: INTAKE_SITE_US1,\n        clientToken: initConfiguration.replica.clientToken,\n    });\n    var replicaEndpointBuilders = {\n        logsEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'logs', tags),\n        rumEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'rum', tags),\n    };\n    return assign({ applicationId: initConfiguration.replica.applicationId }, replicaEndpointBuilders);\n}\nexport function isIntakeUrl(url) {\n    // check if tags is present in the query string\n    return INTAKE_URL_PARAMETERS.every(function (param) { return includes(url, param); });\n}\n//# sourceMappingURL=transportConfiguration.js.map","import { catchUserErrors } from '../../tools/catchUserErrors';\nimport { DOCS_ORIGIN, MORE_DETAILS, display } from '../../tools/display';\nimport { ONE_SECOND } from '../../tools/utils/timeUtils';\nimport { isPercentage } from '../../tools/utils/numberUtils';\nimport { ONE_KIBI_BYTE } from '../../tools/utils/byteUtils';\nimport { objectHasValue } from '../../tools/utils/objectUtils';\nimport { assign } from '../../tools/utils/polyfills';\nimport { selectSessionStoreStrategyType } from '../session/sessionStore';\nimport { TrackingConsent } from '../trackingConsent';\nimport { computeTransportConfiguration } from './transportConfiguration';\nexport var DefaultPrivacyLevel = {\n    ALLOW: 'allow',\n    MASK: 'mask',\n    MASK_USER_INPUT: 'mask-user-input',\n};\nexport var TraceContextInjection = {\n    ALL: 'all',\n    SAMPLED: 'sampled',\n};\nfunction isString(tag, tagName) {\n    if (tag !== undefined && tag !== null && typeof tag !== 'string') {\n        display.error(\"\".concat(tagName, \" must be defined as a string\"));\n        return false;\n    }\n    return true;\n}\nfunction isDatadogSite(site) {\n    if (site && typeof site === 'string' && !/(datadog|ddog|datad0g|dd0g)/.test(site)) {\n        display.error(\"Site should be a valid Datadog site. \".concat(MORE_DETAILS, \" \").concat(DOCS_ORIGIN, \"/getting_started/site/.\"));\n        return false;\n    }\n    return true;\n}\nexport function isSampleRate(sampleRate, name) {\n    if (sampleRate !== undefined && !isPercentage(sampleRate)) {\n        display.error(\"\".concat(name, \" Sample Rate should be a number between 0 and 100\"));\n        return false;\n    }\n    return true;\n}\nexport function validateAndBuildConfiguration(initConfiguration) {\n    var _a, _b, _c, _d, _e;\n    if (!initConfiguration || !initConfiguration.clientToken) {\n        display.error('Client Token is not configured, we will not send any data.');\n        return;\n    }\n    if (!isDatadogSite(initConfiguration.site) ||\n        !isSampleRate(initConfiguration.sessionSampleRate, 'Session') ||\n        !isSampleRate(initConfiguration.telemetrySampleRate, 'Telemetry') ||\n        !isSampleRate(initConfiguration.telemetryConfigurationSampleRate, 'Telemetry Configuration') ||\n        !isSampleRate(initConfiguration.telemetryUsageSampleRate, 'Telemetry Usage') ||\n        !isString(initConfiguration.version, 'Version') ||\n        !isString(initConfiguration.env, 'Env') ||\n        !isString(initConfiguration.service, 'Service')) {\n        return;\n    }\n    if (initConfiguration.trackingConsent !== undefined &&\n        !objectHasValue(TrackingConsent, initConfiguration.trackingConsent)) {\n        display.error('Tracking Consent should be either \"granted\" or \"not-granted\"');\n        return;\n    }\n    return assign({\n        beforeSend: initConfiguration.beforeSend && catchUserErrors(initConfiguration.beforeSend, 'beforeSend threw an error:'),\n        sessionStoreStrategyType: selectSessionStoreStrategyType(initConfiguration),\n        sessionSampleRate: (_a = initConfiguration.sessionSampleRate) !== null && _a !== void 0 ? _a : 100,\n        telemetrySampleRate: (_b = initConfiguration.telemetrySampleRate) !== null && _b !== void 0 ? _b : 20,\n        telemetryConfigurationSampleRate: (_c = initConfiguration.telemetryConfigurationSampleRate) !== null && _c !== void 0 ? _c : 5,\n        telemetryUsageSampleRate: (_d = initConfiguration.telemetryUsageSampleRate) !== null && _d !== void 0 ? _d : 5,\n        service: initConfiguration.service || undefined,\n        silentMultipleInit: !!initConfiguration.silentMultipleInit,\n        allowUntrustedEvents: !!initConfiguration.allowUntrustedEvents,\n        trackingConsent: (_e = initConfiguration.trackingConsent) !== null && _e !== void 0 ? _e : TrackingConsent.GRANTED,\n        storeContextsAcrossPages: !!initConfiguration.storeContextsAcrossPages,\n        /**\n         * beacon payload max queue size implementation is 64kb\n         * ensure that we leave room for logs, rum and potential other users\n         */\n        batchBytesLimit: 16 * ONE_KIBI_BYTE,\n        eventRateLimiterThreshold: 3000,\n        maxTelemetryEventsPerPage: 15,\n        /**\n         * flush automatically, aim to be lower than ALB connection timeout\n         * to maximize connection reuse.\n         */\n        flushTimeout: (30 * ONE_SECOND),\n        /**\n         * Logs intake limit\n         */\n        batchMessagesLimit: 50,\n        messageBytesLimit: 256 * ONE_KIBI_BYTE,\n    }, computeTransportConfiguration(initConfiguration));\n}\nexport function serializeConfiguration(initConfiguration) {\n    return {\n        session_sample_rate: initConfiguration.sessionSampleRate,\n        telemetry_sample_rate: initConfiguration.telemetrySampleRate,\n        telemetry_configuration_sample_rate: initConfiguration.telemetryConfigurationSampleRate,\n        telemetry_usage_sample_rate: initConfiguration.telemetryUsageSampleRate,\n        use_before_send: !!initConfiguration.beforeSend,\n        use_cross_site_session_cookie: initConfiguration.useCrossSiteSessionCookie,\n        use_partitioned_cross_site_session_cookie: initConfiguration.usePartitionedCrossSiteSessionCookie,\n        use_secure_session_cookie: initConfiguration.useSecureSessionCookie,\n        use_proxy: !!initConfiguration.proxy,\n        silent_multiple_init: initConfiguration.silentMultipleInit,\n        track_session_across_subdomains: initConfiguration.trackSessionAcrossSubdomains,\n        session_persistence: initConfiguration.sessionPersistence,\n        allow_fallback_to_local_storage: !!initConfiguration.allowFallbackToLocalStorage,\n        store_contexts_across_pages: !!initConfiguration.storeContextsAcrossPages,\n        allow_untrusted_events: !!initConfiguration.allowUntrustedEvents,\n        tracking_consent: initConfiguration.trackingConsent,\n    };\n}\n//# sourceMappingURL=configuration.js.map","import { ExperimentalFeature, isExperimentalFeatureEnabled } from '@datadog/browser-core';\nimport { getCrypto } from '../../browser/crypto';\nexport function createTraceIdentifier() {\n    return createIdentifier(64);\n}\nexport function createSpanIdentifier() {\n    return createIdentifier(63);\n}\nvar createIdentifierImplementationCache;\nfunction createIdentifier(bits) {\n    if (!createIdentifierImplementationCache) {\n        createIdentifierImplementationCache =\n            isExperimentalFeatureEnabled(ExperimentalFeature.CONSISTENT_TRACE_SAMPLING) && areBigIntIdentifiersSupported()\n                ? createIdentifierUsingBigInt\n                : createIdentifierUsingUint32Array;\n    }\n    return createIdentifierImplementationCache(bits);\n}\nexport function areBigIntIdentifiersSupported() {\n    try {\n        crypto.getRandomValues(new BigUint64Array(1));\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\nfunction createIdentifierUsingBigInt(bits) {\n    var id = crypto.getRandomValues(new BigUint64Array(1))[0];\n    if (bits === 63) {\n        // eslint-disable-next-line no-bitwise\n        id >>= BigInt('1');\n    }\n    return id;\n}\n// TODO: remove this when all browser we support have BigInt support\nfunction createIdentifierUsingUint32Array(bits) {\n    var buffer = getCrypto().getRandomValues(new Uint32Array(2));\n    if (bits === 63) {\n        // eslint-disable-next-line no-bitwise\n        buffer[buffer.length - 1] >>>= 1; // force 63-bit\n    }\n    return {\n        toString: function (radix) {\n            if (radix === void 0) { radix = 10; }\n            var high = buffer[1];\n            var low = buffer[0];\n            var str = '';\n            do {\n                var mod = (high % radix) * 4294967296 + low;\n                high = Math.floor(high / radix);\n                low = Math.floor(mod / radix);\n                str = (mod % radix).toString(radix) + str;\n            } while (high || low);\n            return str;\n        },\n    };\n}\nexport function toPaddedHexadecimalString(id) {\n    var traceId = id.toString(16);\n    // TODO: replace with String.prototype.padStart when we drop IE11 support\n    return Array(17 - traceId.length).join('0') + traceId;\n}\n//# sourceMappingURL=identifier.js.map","import { startsWith } from './utils/polyfills';\nimport { display } from './display';\nimport { getType } from './utils/typeUtils';\nexport function isMatchOption(item) {\n    var itemType = getType(item);\n    return itemType === 'string' || itemType === 'function' || item instanceof RegExp;\n}\n/**\n * Returns true if value can be matched by at least one of the provided MatchOptions.\n * When comparing strings, setting useStartsWith to true will compare the value with the start of\n * the option, instead of requiring an exact match.\n */\nexport function matchList(list, value, useStartsWith) {\n    if (useStartsWith === void 0) { useStartsWith = false; }\n    return list.some(function (item) {\n        try {\n            if (typeof item === 'function') {\n                return item(value);\n            }\n            else if (item instanceof RegExp) {\n                return item.test(value);\n            }\n            else if (typeof item === 'string') {\n                return useStartsWith ? startsWith(value, item) : item === value;\n            }\n        }\n        catch (e) {\n            display.error(e);\n        }\n        return false;\n    });\n}\n//# sourceMappingURL=matchOption.js.map","export function getCrypto() {\n    // TODO: remove msCrypto when IE11 support is dropped\n    return window.crypto || window.msCrypto;\n}\n//# sourceMappingURL=crypto.js.map","import { objectEntries, shallowClone, assign, find, getType, isMatchOption, matchList, TraceContextInjection, } from '@datadog/browser-core';\nimport { getCrypto } from '../../browser/crypto';\nimport { createSpanIdentifier, createTraceIdentifier, toPaddedHexadecimalString } from './identifier';\nimport { isTraceSampled } from './sampler';\nexport function isTracingOption(item) {\n    var expectedItem = item;\n    return (getType(expectedItem) === 'object' &&\n        isMatchOption(expectedItem.match) &&\n        Array.isArray(expectedItem.propagatorTypes));\n}\n/**\n * Clear tracing information to avoid incomplete traces. Ideally, we should do it when the\n * request did not reach the server, but the browser does not expose this. So, we clear tracing\n * information if the request ended with status 0 without being aborted by the application.\n *\n * Reasoning:\n *\n * * Applications are usually aborting requests after a bit of time, for example when the user is\n * typing (autocompletion) or navigating away (in a SPA). With a performant device and good\n * network conditions, the request is likely to reach the server before being canceled.\n *\n * * Requests aborted otherwise (ex: lack of internet, CORS issue, blocked by a privacy extension)\n * are likely to finish quickly and without reaching the server.\n *\n * Of course, it might not be the case every time, but it should limit having incomplete traces a\n * bit.\n * */\nexport function clearTracingIfNeeded(context) {\n    if (context.status === 0 && !context.isAborted) {\n        context.traceId = undefined;\n        context.spanId = undefined;\n        context.traceSampled = undefined;\n    }\n}\nexport function startTracer(configuration, sessionManager) {\n    return {\n        clearTracingIfNeeded: clearTracingIfNeeded,\n        traceFetch: function (context) {\n            return injectHeadersIfTracingAllowed(configuration, context, sessionManager, function (tracingHeaders) {\n                var _a;\n                if (context.input instanceof Request && !((_a = context.init) === null || _a === void 0 ? void 0 : _a.headers)) {\n                    context.input = new Request(context.input);\n                    Object.keys(tracingHeaders).forEach(function (key) {\n                        ;\n                        context.input.headers.append(key, tracingHeaders[key]);\n                    });\n                }\n                else {\n                    context.init = shallowClone(context.init);\n                    var headers_1 = [];\n                    if (context.init.headers instanceof Headers) {\n                        context.init.headers.forEach(function (value, key) {\n                            headers_1.push([key, value]);\n                        });\n                    }\n                    else if (Array.isArray(context.init.headers)) {\n                        context.init.headers.forEach(function (header) {\n                            headers_1.push(header);\n                        });\n                    }\n                    else if (context.init.headers) {\n                        Object.keys(context.init.headers).forEach(function (key) {\n                            headers_1.push([key, context.init.headers[key]]);\n                        });\n                    }\n                    context.init.headers = headers_1.concat(objectEntries(tracingHeaders));\n                }\n            });\n        },\n        traceXhr: function (context, xhr) {\n            return injectHeadersIfTracingAllowed(configuration, context, sessionManager, function (tracingHeaders) {\n                Object.keys(tracingHeaders).forEach(function (name) {\n                    xhr.setRequestHeader(name, tracingHeaders[name]);\n                });\n            });\n        },\n    };\n}\nfunction injectHeadersIfTracingAllowed(configuration, context, sessionManager, inject) {\n    if (!isTracingSupported() || !sessionManager.findTrackedSession()) {\n        return;\n    }\n    var tracingOption = find(configuration.allowedTracingUrls, function (tracingOption) {\n        return matchList([tracingOption.match], context.url, true);\n    });\n    if (!tracingOption) {\n        return;\n    }\n    var traceId = createTraceIdentifier();\n    context.traceSampled = isTraceSampled(traceId, configuration.traceSampleRate);\n    var shouldInjectHeaders = context.traceSampled || configuration.traceContextInjection === TraceContextInjection.ALL;\n    if (!shouldInjectHeaders) {\n        return;\n    }\n    context.traceId = traceId;\n    context.spanId = createSpanIdentifier();\n    inject(makeTracingHeaders(context.traceId, context.spanId, context.traceSampled, tracingOption.propagatorTypes));\n}\nexport function isTracingSupported() {\n    return getCrypto() !== undefined;\n}\n/**\n * When trace is not sampled, set priority to '0' instead of not adding the tracing headers\n * to prepare the implementation for sampling delegation.\n */\nfunction makeTracingHeaders(traceId, spanId, traceSampled, propagatorTypes) {\n    var tracingHeaders = {};\n    propagatorTypes.forEach(function (propagatorType) {\n        switch (propagatorType) {\n            case 'datadog': {\n                assign(tracingHeaders, {\n                    'x-datadog-origin': 'rum',\n                    'x-datadog-parent-id': spanId.toString(),\n                    'x-datadog-sampling-priority': traceSampled ? '1' : '0',\n                    'x-datadog-trace-id': traceId.toString(),\n                });\n                break;\n            }\n            // https://www.w3.org/TR/trace-context/\n            case 'tracecontext': {\n                assign(tracingHeaders, {\n                    traceparent: \"00-0000000000000000\".concat(toPaddedHexadecimalString(traceId), \"-\").concat(toPaddedHexadecimalString(spanId), \"-0\").concat(traceSampled ? '1' : '0'),\n                });\n                break;\n            }\n            // https://github.com/openzipkin/b3-propagation\n            case 'b3': {\n                assign(tracingHeaders, {\n                    b3: \"\".concat(toPaddedHexadecimalString(traceId), \"-\").concat(toPaddedHexadecimalString(spanId), \"-\").concat(traceSampled ? '1' : '0'),\n                });\n                break;\n            }\n            case 'b3multi': {\n                assign(tracingHeaders, {\n                    'X-B3-TraceId': toPaddedHexadecimalString(traceId),\n                    'X-B3-SpanId': toPaddedHexadecimalString(spanId),\n                    'X-B3-Sampled': traceSampled ? '1' : '0',\n                });\n                break;\n            }\n        }\n    });\n    return tracingHeaders;\n}\n//# sourceMappingURL=tracer.js.map","import { performDraw } from '@datadog/browser-core';\nexport function isTraceSampled(identifier, sampleRate) {\n    // Shortcuts for common cases. This is not strictly necessary, but it makes the code faster for\n    // customers willing to ingest all traces.\n    if (sampleRate === 100) {\n        return true;\n    }\n    if (sampleRate === 0) {\n        return false;\n    }\n    // For simplicity, we don't use consistent sampling for browser that don't support BigInt\n    // TODO: remove this when all browser we support have BigInt support\n    if (typeof identifier !== 'bigint') {\n        return performDraw(sampleRate);\n    }\n    // Offer consistent sampling for the same trace id across different environments. The rule is:\n    //\n    //   (identifier * knuthFactor) % 2^64 < sampleRate * 2^64\n    //\n    // Because JavaScript numbers are 64-bit floats, we can't represent 64-bit integers, and the\n    // modulo would be incorrect. Thus, we are using BigInts here.\n    //\n    // Implementation in other languages:\n    // * Go     https://github.com/DataDog/dd-trace-go/blob/ec6fbb1f2d517b7b8e69961052adf7136f3af773/ddtrace/tracer/sampler.go#L86-L91\n    // * Python https://github.com/DataDog/dd-trace-py/blob/0cee2f066fb6e79aa15947c1514c0f406dea47c5/ddtrace/sampling_rule.py#L197\n    // * Ruby   https://github.com/DataDog/dd-trace-rb/blob/1a6e255cdcb7e7e22235ea5955f90f6dfa91045d/lib/datadog/tracing/sampling/rate_sampler.rb#L42\n    // * C++    https://github.com/DataDog/dd-trace-cpp/blob/159629edc438ae45f2bb318eb7bd51abd05e94b5/src/datadog/trace_sampler.cpp#L58\n    // * Java   https://github.com/DataDog/dd-trace-java/blob/896dd6b380533216e0bdee59614606c8272d313e/dd-trace-core/src/main/java/datadog/trace/common/sampling/DeterministicSampler.java#L48\n    //\n    // Note: All implementations have slight variations. Some of them use '<=' instead of '<', and\n    // use `sampleRate * 2^64 - 1` instead of `sampleRate * 2^64`. The following implementation\n    // should adhere to the spec and is a bit simpler than using a 2^64-1 limit as there are less\n    // BigInt arithmetic to write. In practice this does not matter, as we are using floating point\n    // numbers in the end, and Number(2n**64n-1n) === Number(2n**64n).\n    var knuthFactor = BigInt('1111111111111111111');\n    var twoPow64 = BigInt('0x10000000000000000'); // 2n ** 64n\n    var hash = (identifier * knuthFactor) % twoPow64;\n    return Number(hash) <= (sampleRate / 100) * Number(twoPow64);\n}\n//# sourceMappingURL=sampler.js.map","import { getType, arrayFrom, isMatchOption, serializeConfiguration, assign, DefaultPrivacyLevel, TraceContextInjection, display, objectHasValue, validateAndBuildConfiguration, isSampleRate, isNumber, } from '@datadog/browser-core';\nimport { isTracingOption } from '../tracing/tracer';\nexport var DEFAULT_PROPAGATOR_TYPES = ['tracecontext', 'datadog'];\nexport function validateAndBuildRumConfiguration(initConfiguration) {\n    var _a, _b, _c;\n    if (!initConfiguration.applicationId) {\n        display.error('Application ID is not configured, no RUM data will be collected.');\n        return;\n    }\n    if (!isSampleRate(initConfiguration.sessionReplaySampleRate, 'Session Replay') ||\n        !isSampleRate(initConfiguration.traceSampleRate, 'Trace')) {\n        return;\n    }\n    if (initConfiguration.excludedActivityUrls !== undefined && !Array.isArray(initConfiguration.excludedActivityUrls)) {\n        display.error('Excluded Activity Urls should be an array');\n        return;\n    }\n    var allowedTracingUrls = validateAndBuildTracingOptions(initConfiguration);\n    if (!allowedTracingUrls) {\n        return;\n    }\n    var baseConfiguration = validateAndBuildConfiguration(initConfiguration);\n    if (!baseConfiguration) {\n        return;\n    }\n    var sessionReplaySampleRate = (_a = initConfiguration.sessionReplaySampleRate) !== null && _a !== void 0 ? _a : 0;\n    return assign({\n        applicationId: initConfiguration.applicationId,\n        version: initConfiguration.version || undefined,\n        actionNameAttribute: initConfiguration.actionNameAttribute,\n        sessionReplaySampleRate: sessionReplaySampleRate,\n        startSessionReplayRecordingManually: initConfiguration.startSessionReplayRecordingManually !== undefined\n            ? !!initConfiguration.startSessionReplayRecordingManually\n            : sessionReplaySampleRate === 0,\n        traceSampleRate: (_b = initConfiguration.traceSampleRate) !== null && _b !== void 0 ? _b : 100,\n        rulePsr: isNumber(initConfiguration.traceSampleRate) ? initConfiguration.traceSampleRate / 100 : undefined,\n        allowedTracingUrls: allowedTracingUrls,\n        excludedActivityUrls: (_c = initConfiguration.excludedActivityUrls) !== null && _c !== void 0 ? _c : [],\n        workerUrl: initConfiguration.workerUrl,\n        compressIntakeRequests: !!initConfiguration.compressIntakeRequests,\n        trackUserInteractions: !!initConfiguration.trackUserInteractions,\n        trackViewsManually: !!initConfiguration.trackViewsManually,\n        trackResources: !!initConfiguration.trackResources,\n        trackLongTasks: !!initConfiguration.trackLongTasks,\n        subdomain: initConfiguration.subdomain,\n        defaultPrivacyLevel: objectHasValue(DefaultPrivacyLevel, initConfiguration.defaultPrivacyLevel)\n            ? initConfiguration.defaultPrivacyLevel\n            : DefaultPrivacyLevel.MASK,\n        enablePrivacyForActionName: !!initConfiguration.enablePrivacyForActionName,\n        customerDataTelemetrySampleRate: 1,\n        traceContextInjection: objectHasValue(TraceContextInjection, initConfiguration.traceContextInjection)\n            ? initConfiguration.traceContextInjection\n            : TraceContextInjection.ALL,\n        plugins: initConfiguration.plugins || [],\n    }, baseConfiguration);\n}\n/**\n * Validates allowedTracingUrls and converts match options to tracing options\n */\nfunction validateAndBuildTracingOptions(initConfiguration) {\n    if (initConfiguration.allowedTracingUrls === undefined) {\n        return [];\n    }\n    if (!Array.isArray(initConfiguration.allowedTracingUrls)) {\n        display.error('Allowed Tracing URLs should be an array');\n        return;\n    }\n    if (initConfiguration.allowedTracingUrls.length !== 0 && initConfiguration.service === undefined) {\n        display.error('Service needs to be configured when tracing is enabled');\n        return;\n    }\n    // Convert from (MatchOption | TracingOption) to TracingOption, remove unknown properties\n    var tracingOptions = [];\n    initConfiguration.allowedTracingUrls.forEach(function (option) {\n        if (isMatchOption(option)) {\n            tracingOptions.push({ match: option, propagatorTypes: DEFAULT_PROPAGATOR_TYPES });\n        }\n        else if (isTracingOption(option)) {\n            tracingOptions.push(option);\n        }\n        else {\n            display.warn('Allowed Tracing Urls parameters should be a string, RegExp, function, or an object. Ignoring parameter', option);\n        }\n    });\n    return tracingOptions;\n}\n/**\n * Combines the selected tracing propagators from the different options in allowedTracingUrls\n */\nfunction getSelectedTracingPropagators(configuration) {\n    var usedTracingPropagators = new Set();\n    if (Array.isArray(configuration.allowedTracingUrls) && configuration.allowedTracingUrls.length > 0) {\n        configuration.allowedTracingUrls.forEach(function (option) {\n            if (isMatchOption(option)) {\n                DEFAULT_PROPAGATOR_TYPES.forEach(function (propagatorType) { return usedTracingPropagators.add(propagatorType); });\n            }\n            else if (getType(option) === 'object' && Array.isArray(option.propagatorTypes)) {\n                // Ensure we have an array, as we cannot rely on types yet (configuration is provided by users)\n                option.propagatorTypes.forEach(function (propagatorType) { return usedTracingPropagators.add(propagatorType); });\n            }\n        });\n    }\n    return arrayFrom(usedTracingPropagators);\n}\nexport function serializeRumConfiguration(configuration) {\n    var _a;\n    var baseSerializedConfiguration = serializeConfiguration(configuration);\n    return assign({\n        session_replay_sample_rate: configuration.sessionReplaySampleRate,\n        start_session_replay_recording_manually: configuration.startSessionReplayRecordingManually,\n        trace_sample_rate: configuration.traceSampleRate,\n        trace_context_injection: configuration.traceContextInjection,\n        action_name_attribute: configuration.actionNameAttribute,\n        use_allowed_tracing_urls: Array.isArray(configuration.allowedTracingUrls) && configuration.allowedTracingUrls.length > 0,\n        selected_tracing_propagators: getSelectedTracingPropagators(configuration),\n        default_privacy_level: configuration.defaultPrivacyLevel,\n        enable_privacy_for_action_name: configuration.enablePrivacyForActionName,\n        use_excluded_activity_urls: Array.isArray(configuration.excludedActivityUrls) && configuration.excludedActivityUrls.length > 0,\n        use_worker_url: !!configuration.workerUrl,\n        compress_intake_requests: configuration.compressIntakeRequests,\n        track_views_manually: configuration.trackViewsManually,\n        track_user_interactions: configuration.trackUserInteractions,\n        track_resources: configuration.trackResources,\n        track_long_task: configuration.trackLongTasks,\n        plugins: (_a = configuration.plugins) === null || _a === void 0 ? void 0 : _a.map(function (plugin) { var _a; return assign({ name: plugin.name }, (_a = plugin.getConfigurationTelemetry) === null || _a === void 0 ? void 0 : _a.call(plugin)); }),\n    }, baseSerializedConfiguration);\n}\n//# sourceMappingURL=configuration.js.map","import { display, addEventListener, assign } from '@datadog/browser-core';\nexport var REMOTE_CONFIGURATION_URL = 'https://d3uc069fcn7uxw.cloudfront.net/configuration';\nexport function fetchAndApplyRemoteConfiguration(initConfiguration, callback) {\n    fetchRemoteConfiguration(initConfiguration, function (remoteInitConfiguration) {\n        callback(applyRemoteConfiguration(initConfiguration, remoteInitConfiguration));\n    });\n}\nexport function applyRemoteConfiguration(initConfiguration, remoteInitConfiguration) {\n    return assign({}, initConfiguration, remoteInitConfiguration);\n}\nexport function fetchRemoteConfiguration(configuration, callback) {\n    var xhr = new XMLHttpRequest();\n    addEventListener(configuration, xhr, 'load', function () {\n        if (xhr.status === 200) {\n            callback(JSON.parse(xhr.responseText));\n        }\n        else {\n            displayRemoteConfigurationFetchingError();\n        }\n    });\n    addEventListener(configuration, xhr, 'error', function () {\n        displayRemoteConfigurationFetchingError();\n    });\n    xhr.open('GET', \"\".concat(REMOTE_CONFIGURATION_URL, \"/\").concat(encodeURIComponent(configuration.remoteConfigurationId), \".json\"));\n    xhr.send();\n}\nfunction displayRemoteConfigurationFetchingError() {\n    display.error('Error fetching the remote configuration.');\n}\n//# sourceMappingURL=remoteConfiguration.js.map","import { createBoundedBuffer, display, canUseEventBridge, displayAlreadyInitializedError, willSyntheticsInjectRum, noop, timeStampNow, clocksNow, assign, getEventBridge, ExperimentalFeature, isExperimentalFeatureEnabled, initFeatureFlags, addTelemetryConfiguration, initFetchObservable, } from '@datadog/browser-core';\nimport { validateAndBuildRumConfiguration, } from '../domain/configuration';\nimport { startDurationVital, stopDurationVital } from '../domain/vital/vitalCollection';\nimport { fetchAndApplyRemoteConfiguration, serializeRumConfiguration } from '../domain/configuration';\nimport { callPluginsMethod } from '../domain/plugins';\nexport function createPreStartStrategy(_a, getCommonContext, trackingConsentState, customVitalsState, doStartRum) {\n    var ignoreInitIfSyntheticsWillInjectRum = _a.ignoreInitIfSyntheticsWillInjectRum, startDeflateWorker = _a.startDeflateWorker;\n    var bufferApiCalls = createBoundedBuffer();\n    var firstStartViewCall;\n    var deflateWorker;\n    var cachedInitConfiguration;\n    var cachedConfiguration;\n    var trackingConsentStateSubscription = trackingConsentState.observable.subscribe(tryStartRum);\n    function tryStartRum() {\n        if (!cachedInitConfiguration || !cachedConfiguration || !trackingConsentState.isGranted()) {\n            return;\n        }\n        trackingConsentStateSubscription.unsubscribe();\n        var initialViewOptions;\n        if (cachedConfiguration.trackViewsManually) {\n            if (!firstStartViewCall) {\n                return;\n            }\n            // An initial view is always created when starting RUM.\n            // When tracking views automatically, any startView call before RUM start creates an extra\n            // view.\n            // When tracking views manually, we use the ViewOptions from the first startView call as the\n            // initial view options, and we remove the actual startView call so we don't create an extra\n            // view.\n            bufferApiCalls.remove(firstStartViewCall.callback);\n            initialViewOptions = firstStartViewCall.options;\n        }\n        var startRumResult = doStartRum(cachedConfiguration, deflateWorker, initialViewOptions);\n        bufferApiCalls.drain(startRumResult);\n    }\n    function doInit(initConfiguration) {\n        var eventBridgeAvailable = canUseEventBridge();\n        if (eventBridgeAvailable) {\n            initConfiguration = overrideInitConfigurationForBridge(initConfiguration);\n        }\n        // Update the exposed initConfiguration to reflect the bridge and remote configuration overrides\n        cachedInitConfiguration = initConfiguration;\n        addTelemetryConfiguration(serializeRumConfiguration(initConfiguration));\n        if (cachedConfiguration) {\n            displayAlreadyInitializedError('DD_RUM', initConfiguration);\n            return;\n        }\n        var configuration = validateAndBuildRumConfiguration(initConfiguration);\n        if (!configuration) {\n            return;\n        }\n        if (!eventBridgeAvailable && !configuration.sessionStoreStrategyType) {\n            display.warn('No storage available for session. We will not send any data.');\n            return;\n        }\n        if (configuration.compressIntakeRequests && !eventBridgeAvailable && startDeflateWorker) {\n            deflateWorker = startDeflateWorker(configuration, 'Datadog RUM', \n            // Worker initialization can fail asynchronously, especially in Firefox where even CSP\n            // issues are reported asynchronously. For now, the SDK will continue its execution even if\n            // data won't be sent to Datadog. We could improve this behavior in the future.\n            noop);\n            if (!deflateWorker) {\n                // `startDeflateWorker` should have logged an error message explaining the issue\n                return;\n            }\n        }\n        cachedConfiguration = configuration;\n        // Instrumuent fetch to track network requests\n        // This is needed in case the consent is not granted and some cutsomer\n        // library (Apollo Client) is storing uninstrumented fetch to be used later\n        // The subscrption is needed so that the instrumentation process is completed\n        initFetchObservable().subscribe(noop);\n        trackingConsentState.tryToInit(configuration.trackingConsent);\n        tryStartRum();\n    }\n    var addDurationVital = function (vital) {\n        bufferApiCalls.add(function (startRumResult) { return startRumResult.addDurationVital(vital); });\n    };\n    return {\n        init: function (initConfiguration, publicApi) {\n            if (!initConfiguration) {\n                display.error('Missing configuration');\n                return;\n            }\n            // Set the experimental feature flags as early as possible, so we can use them in most places\n            initFeatureFlags(initConfiguration.enableExperimentalFeatures);\n            // Expose the initial configuration regardless of initialization success.\n            cachedInitConfiguration = initConfiguration;\n            // If we are in a Synthetics test configured to automatically inject a RUM instance, we want\n            // to completely discard the customer application RUM instance by ignoring their init() call.\n            // But, we should not ignore the init() call from the Synthetics-injected RUM instance, so the\n            // internal `ignoreInitIfSyntheticsWillInjectRum` option is here to bypass this condition.\n            if (ignoreInitIfSyntheticsWillInjectRum && willSyntheticsInjectRum()) {\n                return;\n            }\n            callPluginsMethod(initConfiguration.plugins, 'onInit', { initConfiguration: initConfiguration, publicApi: publicApi });\n            if (initConfiguration.remoteConfigurationId &&\n                isExperimentalFeatureEnabled(ExperimentalFeature.REMOTE_CONFIGURATION)) {\n                fetchAndApplyRemoteConfiguration(initConfiguration, doInit);\n            }\n            else {\n                doInit(initConfiguration);\n            }\n        },\n        get initConfiguration() {\n            return cachedInitConfiguration;\n        },\n        getInternalContext: noop,\n        stopSession: noop,\n        addTiming: function (name, time) {\n            if (time === void 0) { time = timeStampNow(); }\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addTiming(name, time); });\n        },\n        startView: function (options, startClocks) {\n            if (startClocks === void 0) { startClocks = clocksNow(); }\n            var callback = function (startRumResult) {\n                startRumResult.startView(options, startClocks);\n            };\n            bufferApiCalls.add(callback);\n            if (!firstStartViewCall) {\n                firstStartViewCall = { options: options, callback: callback };\n                tryStartRum();\n            }\n        },\n        setViewName: function (name) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.setViewName(name); });\n        },\n        setViewContext: function (context) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.setViewContext(context); });\n        },\n        setViewContextProperty: function (key, value) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.setViewContextProperty(key, value); });\n        },\n        addAction: function (action, commonContext) {\n            if (commonContext === void 0) { commonContext = getCommonContext(); }\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addAction(action, commonContext); });\n        },\n        addError: function (providedError, commonContext) {\n            if (commonContext === void 0) { commonContext = getCommonContext(); }\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addError(providedError, commonContext); });\n        },\n        addFeatureFlagEvaluation: function (key, value) {\n            bufferApiCalls.add(function (startRumResult) { return startRumResult.addFeatureFlagEvaluation(key, value); });\n        },\n        startDurationVital: function (name, options) {\n            return startDurationVital(customVitalsState, name, options);\n        },\n        stopDurationVital: function (name, options) {\n            stopDurationVital(addDurationVital, customVitalsState, name, options);\n        },\n        addDurationVital: addDurationVital,\n    };\n}\nfunction overrideInitConfigurationForBridge(initConfiguration) {\n    var _a, _b;\n    return assign({}, initConfiguration, {\n        applicationId: '00000000-aaaa-0000-aaaa-000000000000',\n        clientToken: 'empty',\n        sessionSampleRate: 100,\n        defaultPrivacyLevel: (_a = initConfiguration.defaultPrivacyLevel) !== null && _a !== void 0 ? _a : (_b = getEventBridge()) === null || _b === void 0 ? void 0 : _b.getPrivacyLevel(),\n    });\n}\n//# sourceMappingURL=preStartRum.js.map","export function callPluginsMethod(plugins, methodName, parameter) {\n    if (!plugins) {\n        return;\n    }\n    for (var _i = 0, plugins_1 = plugins; _i < plugins_1.length; _i++) {\n        var plugin = plugins_1[_i];\n        var method = plugin[methodName];\n        if (method) {\n            method(parameter);\n        }\n    }\n}\n//# sourceMappingURL=plugins.js.map","import { Observable } from '../tools/observable';\nimport { objectValues, includes } from '../tools/utils/polyfills';\nimport { addEventListeners, addEventListener } from './addEventListener';\nexport var PageExitReason = {\n    HIDDEN: 'visibility_hidden',\n    UNLOADING: 'before_unload',\n    PAGEHIDE: 'page_hide',\n    FROZEN: 'page_frozen',\n};\nexport function createPageExitObservable(configuration) {\n    return new Observable(function (observable) {\n        var stopListeners = addEventListeners(configuration, window, [\"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */, \"freeze\" /* DOM_EVENT.FREEZE */], function (event) {\n            if (event.type === \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */ && document.visibilityState === 'hidden') {\n                /**\n                 * Only event that guarantee to fire on mobile devices when the page transitions to background state\n                 * (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded.\n                 */\n                observable.notify({ reason: PageExitReason.HIDDEN });\n            }\n            else if (event.type === \"freeze\" /* DOM_EVENT.FREEZE */) {\n                /**\n                 * After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api)\n                 * Allow to collect events happening between hidden and frozen state.\n                 */\n                observable.notify({ reason: PageExitReason.FROZEN });\n            }\n        }, { capture: true }).stop;\n        var stopBeforeUnloadListener = addEventListener(configuration, window, \"beforeunload\" /* DOM_EVENT.BEFORE_UNLOAD */, function () {\n            observable.notify({ reason: PageExitReason.UNLOADING });\n        }).stop;\n        return function () {\n            stopListeners();\n            stopBeforeUnloadListener();\n        };\n    });\n}\nexport function isPageExitReason(reason) {\n    return includes(objectValues(PageExitReason), reason);\n}\n//# sourceMappingURL=pageExitObservable.js.map","import { monitor, noop, Observable, getZoneJsOriginalValue } from '@datadog/browser-core';\nexport function createDOMMutationObservable() {\n    var MutationObserver = getMutationObserverConstructor();\n    return new Observable(function (observable) {\n        if (!MutationObserver) {\n            return;\n        }\n        var observer = new MutationObserver(monitor(function () { return observable.notify(); }));\n        observer.observe(document, {\n            attributes: true,\n            characterData: true,\n            childList: true,\n            subtree: true,\n        });\n        return function () { return observer.disconnect(); };\n    });\n}\nexport function getMutationObserverConstructor() {\n    var constructor;\n    var browserWindow = window;\n    // Angular uses Zone.js to provide a context persisting across async tasks.  Zone.js replaces the\n    // global MutationObserver constructor with a patched version to support the context propagation.\n    // There is an ongoing issue[1][2] with this setup when using a MutationObserver within a Angular\n    // component: on some occasions, the callback is being called in an infinite loop, causing the\n    // page to freeze (even if the callback is completely empty).\n    //\n    // To work around this issue, we try to get the original MutationObserver constructor stored by\n    // Zone.js.\n    //\n    // [1] https://github.com/angular/angular/issues/26948\n    // [2] https://github.com/angular/angular/issues/31712\n    if (browserWindow.Zone) {\n        // Zone.js 0.8.6+ is storing original class constructors into the browser 'window' object[3].\n        //\n        // [3] https://github.com/angular/angular/blob/6375fa79875c0fe7b815efc45940a6e6f5c9c9eb/packages/zone.js/lib/common/utils.ts#L288\n        constructor = getZoneJsOriginalValue(browserWindow, 'MutationObserver');\n        if (browserWindow.MutationObserver && constructor === browserWindow.MutationObserver) {\n            // Anterior Zone.js versions (used in Angular 2) does not expose the original MutationObserver\n            // in the 'window' object. Luckily, the patched MutationObserver class is storing an original\n            // instance in its properties[4]. Let's get the original MutationObserver constructor from\n            // there.\n            //\n            // [4] https://github.com/angular/zone.js/blob/v0.8.5/lib/common/utils.ts#L412\n            var patchedInstance = new browserWindow.MutationObserver(noop);\n            var originalInstance = getZoneJsOriginalValue(patchedInstance, 'originalInstance');\n            constructor = originalInstance && originalInstance.constructor;\n        }\n    }\n    if (!constructor) {\n        constructor = browserWindow.MutationObserver;\n    }\n    return constructor;\n}\n//# sourceMappingURL=domMutationObservable.js.map","export var ErrorSource = {\n    AGENT: 'agent',\n    CONSOLE: 'console',\n    CUSTOM: 'custom',\n    LOGGER: 'logger',\n    NETWORK: 'network',\n    SOURCE: 'source',\n    REPORT: 'report',\n};\n//# sourceMappingURL=error.types.js.map","import { setTimeout } from '../../tools/timer';\nimport { clocksNow, ONE_MINUTE } from '../../tools/utils/timeUtils';\nimport { ErrorSource } from '../error/error.types';\nexport function createEventRateLimiter(eventType, limit, onLimitReached) {\n    var eventCount = 0;\n    var allowNextEvent = false;\n    return {\n        isLimitReached: function () {\n            if (eventCount === 0) {\n                setTimeout(function () {\n                    eventCount = 0;\n                }, ONE_MINUTE);\n            }\n            eventCount += 1;\n            if (eventCount <= limit || allowNextEvent) {\n                allowNextEvent = false;\n                return false;\n            }\n            if (eventCount === limit + 1) {\n                allowNextEvent = true;\n                try {\n                    onLimitReached({\n                        message: \"Reached max number of \".concat(eventType, \"s by minute: \").concat(limit),\n                        source: ErrorSource.AGENT,\n                        startClocks: clocksNow(),\n                    });\n                }\n                finally {\n                    allowNextEvent = false;\n                }\n            }\n            return true;\n        },\n    };\n}\n//# sourceMappingURL=createEventRateLimiter.js.map","import { getSyntheticsResultId, getSyntheticsTestId, willSyntheticsInjectRum } from '@datadog/browser-core';\nexport function getSyntheticsContext() {\n    var testId = getSyntheticsTestId();\n    var resultId = getSyntheticsResultId();\n    if (testId && resultId) {\n        return {\n            test_id: testId,\n            result_id: resultId,\n            injected: willSyntheticsInjectRum(),\n        };\n    }\n}\n//# sourceMappingURL=syntheticsContext.js.map","import { sanitize, deepClone, getType, objectEntries } from '@datadog/browser-core';\n/**\n * Current limitation:\n * - field path do not support array, 'a.b.c' only\n */\nexport function limitModification(object, modifiableFieldPaths, modifier) {\n    var clone = deepClone(object);\n    var result = modifier(clone);\n    objectEntries(modifiableFieldPaths).forEach(function (_a) {\n        var fieldPath = _a[0], fieldType = _a[1];\n        var newValue = get(clone, fieldPath);\n        var newType = getType(newValue);\n        if (newType === fieldType) {\n            set(object, fieldPath, sanitize(newValue));\n        }\n        else if (fieldType === 'object' && (newType === 'undefined' || newType === 'null')) {\n            set(object, fieldPath, {});\n        }\n    });\n    return result;\n}\nfunction get(object, path) {\n    var current = object;\n    for (var _i = 0, _a = path.split('.'); _i < _a.length; _i++) {\n        var field = _a[_i];\n        if (!isValidObjectContaining(current, field)) {\n            return;\n        }\n        current = current[field];\n    }\n    return current;\n}\nfunction set(object, path, value) {\n    var current = object;\n    var fields = path.split('.');\n    for (var i = 0; i < fields.length; i += 1) {\n        var field = fields[i];\n        if (!isValidObject(current)) {\n            return;\n        }\n        if (i !== fields.length - 1) {\n            current = current[field];\n        }\n        else {\n            current[field] = value;\n        }\n    }\n}\nfunction isValidObject(object) {\n    return getType(object) === 'object';\n}\nfunction isValidObjectContaining(object, field) {\n    return isValidObject(object) && Object.prototype.hasOwnProperty.call(object, field);\n}\n//# sourceMappingURL=limitModification.js.map","import { combine, isEmptyObject, timeStampNow, currentDrift, display, createEventRateLimiter, canUseEventBridge, assign, round, isExperimentalFeatureEnabled, ExperimentalFeature, getConnectivity, } from '@datadog/browser-core';\nimport { getSyntheticsContext } from './contexts/syntheticsContext';\nimport { limitModification } from './limitModification';\nvar VIEW_MODIFIABLE_FIELD_PATHS = {\n    'view.name': 'string',\n    'view.url': 'string',\n    'view.referrer': 'string',\n};\nvar USER_CUSTOMIZABLE_FIELD_PATHS = {\n    context: 'object',\n};\nvar ROOT_MODIFIABLE_FIELD_PATHS = {\n    service: 'string',\n    version: 'string',\n};\nvar modifiableFieldPathsByEvent;\nexport function startRumAssembly(configuration, lifeCycle, sessionManager, viewHistory, urlContexts, actionContexts, displayContext, ciVisibilityContext, getCommonContext, reportError) {\n    var _a, _b;\n    modifiableFieldPathsByEvent = (_a = {},\n        _a[\"view\" /* RumEventType.VIEW */] = assign({}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS),\n        _a[\"error\" /* RumEventType.ERROR */] = assign({\n            'error.message': 'string',\n            'error.stack': 'string',\n            'error.resource.url': 'string',\n            'error.fingerprint': 'string',\n        }, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS, ROOT_MODIFIABLE_FIELD_PATHS),\n        _a[\"resource\" /* RumEventType.RESOURCE */] = assign({\n            'resource.url': 'string',\n        }, isExperimentalFeatureEnabled(ExperimentalFeature.WRITABLE_RESOURCE_GRAPHQL)\n            ? {\n                'resource.graphql': 'object',\n            }\n            : {}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS, ROOT_MODIFIABLE_FIELD_PATHS),\n        _a[\"action\" /* RumEventType.ACTION */] = assign({\n            'action.target.name': 'string',\n        }, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS, ROOT_MODIFIABLE_FIELD_PATHS),\n        _a[\"long_task\" /* RumEventType.LONG_TASK */] = assign({}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS),\n        _a[\"vital\" /* RumEventType.VITAL */] = assign({}, USER_CUSTOMIZABLE_FIELD_PATHS, VIEW_MODIFIABLE_FIELD_PATHS),\n        _a);\n    var eventRateLimiters = (_b = {},\n        _b[\"error\" /* RumEventType.ERROR */] = createEventRateLimiter(\"error\" /* RumEventType.ERROR */, configuration.eventRateLimiterThreshold, reportError),\n        _b[\"action\" /* RumEventType.ACTION */] = createEventRateLimiter(\"action\" /* RumEventType.ACTION */, configuration.eventRateLimiterThreshold, reportError),\n        _b[\"vital\" /* RumEventType.VITAL */] = createEventRateLimiter(\"vital\" /* RumEventType.VITAL */, configuration.eventRateLimiterThreshold, reportError),\n        _b);\n    var syntheticsContext = getSyntheticsContext();\n    lifeCycle.subscribe(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, function (_a) {\n        var startTime = _a.startTime, rawRumEvent = _a.rawRumEvent, domainContext = _a.domainContext, savedCommonContext = _a.savedCommonContext, customerContext = _a.customerContext;\n        var viewHistoryEntry = viewHistory.findView(startTime);\n        var urlContext = urlContexts.findUrl(startTime);\n        var session = sessionManager.findTrackedSession(startTime);\n        if (session && viewHistoryEntry && urlContext) {\n            var commonContext = savedCommonContext || getCommonContext();\n            var actionId = actionContexts.findActionId(startTime);\n            var rumContext = {\n                _dd: {\n                    format_version: 2,\n                    drift: currentDrift(),\n                    configuration: {\n                        session_sample_rate: round(configuration.sessionSampleRate, 3),\n                        session_replay_sample_rate: round(configuration.sessionReplaySampleRate, 3),\n                    },\n                    browser_sdk_version: canUseEventBridge() ? \"5.35.1\" : undefined,\n                },\n                application: {\n                    id: configuration.applicationId,\n                },\n                date: timeStampNow(),\n                service: viewHistoryEntry.service || configuration.service,\n                version: viewHistoryEntry.version || configuration.version,\n                source: 'browser',\n                session: {\n                    id: session.id,\n                    type: syntheticsContext\n                        ? \"synthetics\" /* SessionType.SYNTHETICS */\n                        : ciVisibilityContext.get()\n                            ? \"ci_test\" /* SessionType.CI_TEST */\n                            : \"user\" /* SessionType.USER */,\n                },\n                view: {\n                    id: viewHistoryEntry.id,\n                    name: viewHistoryEntry.name,\n                    url: urlContext.url,\n                    referrer: urlContext.referrer,\n                },\n                action: needToAssembleWithAction(rawRumEvent) && actionId ? { id: actionId } : undefined,\n                synthetics: syntheticsContext,\n                ci_test: ciVisibilityContext.get(),\n                display: displayContext.get(),\n                connectivity: getConnectivity(),\n            };\n            var serverRumEvent = combine(rumContext, rawRumEvent);\n            serverRumEvent.context = combine(commonContext.context, viewHistoryEntry.context, customerContext);\n            if (!('has_replay' in serverRumEvent.session)) {\n                ;\n                serverRumEvent.session.has_replay = commonContext.hasReplay;\n            }\n            if (serverRumEvent.type === 'view') {\n                ;\n                serverRumEvent.session.sampled_for_replay =\n                    session.sessionReplay === 1 /* SessionReplayState.SAMPLED */;\n            }\n            if (\n            // TODO: remove ff and should always add anonymous user id\n            isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING) &&\n                !commonContext.user.anonymous_id) {\n                commonContext.user.anonymous_id = session.anonymousId;\n            }\n            if (!isEmptyObject(commonContext.user)) {\n                ;\n                serverRumEvent.usr = commonContext.user;\n            }\n            if (shouldSend(serverRumEvent, configuration.beforeSend, domainContext, eventRateLimiters)) {\n                if (isEmptyObject(serverRumEvent.context)) {\n                    delete serverRumEvent.context;\n                }\n                lifeCycle.notify(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, serverRumEvent);\n            }\n        }\n    });\n}\nfunction shouldSend(event, beforeSend, domainContext, eventRateLimiters) {\n    var _a;\n    if (beforeSend) {\n        var result = limitModification(event, modifiableFieldPathsByEvent[event.type], function (event) {\n            return beforeSend(event, domainContext);\n        });\n        if (result === false && event.type !== \"view\" /* RumEventType.VIEW */) {\n            return false;\n        }\n        if (result === false) {\n            display.warn(\"Can't dismiss view events using beforeSend!\");\n        }\n    }\n    var rateLimitReached = (_a = eventRateLimiters[event.type]) === null || _a === void 0 ? void 0 : _a.isLimitReached();\n    return !rateLimitReached;\n}\nfunction needToAssembleWithAction(event) {\n    return [\"error\" /* RumEventType.ERROR */, \"resource\" /* RumEventType.RESOURCE */, \"long_task\" /* RumEventType.LONG_TASK */].indexOf(event.type) !== -1;\n}\n//# sourceMappingURL=assembly.js.map","// eslint-disable-next-line no-restricted-syntax\nvar AbstractLifeCycle = /** @class */ (function () {\n    function AbstractLifeCycle() {\n        this.callbacks = {};\n    }\n    AbstractLifeCycle.prototype.notify = function (eventType, data) {\n        var eventCallbacks = this.callbacks[eventType];\n        if (eventCallbacks) {\n            eventCallbacks.forEach(function (callback) { return callback(data); });\n        }\n    };\n    AbstractLifeCycle.prototype.subscribe = function (eventType, callback) {\n        var _this = this;\n        if (!this.callbacks[eventType]) {\n            this.callbacks[eventType] = [];\n        }\n        this.callbacks[eventType].push(callback);\n        return {\n            unsubscribe: function () {\n                _this.callbacks[eventType] = _this.callbacks[eventType].filter(function (other) { return callback !== other; });\n            },\n        };\n    };\n    return AbstractLifeCycle;\n}());\nexport { AbstractLifeCycle };\n//# sourceMappingURL=abstractLifeCycle.js.map","import { AbstractLifeCycle } from '@datadog/browser-core';\nexport var LifeCycle = (AbstractLifeCycle);\n//# sourceMappingURL=lifeCycle.js.map","import { setInterval, clearInterval } from './timer';\nimport { removeItem } from './utils/arrayUtils';\nimport { addDuration, relativeNow, ONE_MINUTE } from './utils/timeUtils';\nvar END_OF_TIMES = Infinity;\nexport var CLEAR_OLD_VALUES_INTERVAL = ONE_MINUTE;\nexport function createValueHistory(_a) {\n    var expireDelay = _a.expireDelay, maxEntries = _a.maxEntries;\n    var entries = [];\n    var clearOldValuesInterval = setInterval(function () { return clearOldValues(); }, CLEAR_OLD_VALUES_INTERVAL);\n    function clearOldValues() {\n        var oldTimeThreshold = relativeNow() - expireDelay;\n        while (entries.length > 0 && entries[entries.length - 1].endTime < oldTimeThreshold) {\n            entries.pop();\n        }\n    }\n    /**\n     * Add a value to the history associated with a start time. Returns a reference to this newly\n     * added entry that can be removed or closed.\n     */\n    function add(value, startTime) {\n        var entry = {\n            value: value,\n            startTime: startTime,\n            endTime: END_OF_TIMES,\n            remove: function () {\n                removeItem(entries, entry);\n            },\n            close: function (endTime) {\n                entry.endTime = endTime;\n            },\n        };\n        if (maxEntries && entries.length >= maxEntries) {\n            entries.pop();\n        }\n        entries.unshift(entry);\n        return entry;\n    }\n    /**\n     * Return the latest value that was active during `startTime`, or the currently active value\n     * if no `startTime` is provided. This method assumes that entries are not overlapping.\n     *\n     * If `option.returnInactive` is true, returns the value at `startTime` (active or not).\n     */\n    function find(startTime, options) {\n        if (startTime === void 0) { startTime = END_OF_TIMES; }\n        if (options === void 0) { options = { returnInactive: false }; }\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.startTime <= startTime) {\n                if (options.returnInactive || startTime <= entry.endTime) {\n                    return entry.value;\n                }\n                break;\n            }\n        }\n    }\n    /**\n     * Helper function to close the currently active value, if any. This method assumes that entries\n     * are not overlapping.\n     */\n    function closeActive(endTime) {\n        var latestEntry = entries[0];\n        if (latestEntry && latestEntry.endTime === END_OF_TIMES) {\n            latestEntry.close(endTime);\n        }\n    }\n    /**\n     * Return all values with an active period overlapping with the duration,\n     * or all values that were active during `startTime` if no duration is provided,\n     * or all currently active values if no `startTime` is provided.\n     */\n    function findAll(startTime, duration) {\n        if (startTime === void 0) { startTime = END_OF_TIMES; }\n        if (duration === void 0) { duration = 0; }\n        var endTime = addDuration(startTime, duration);\n        return entries\n            .filter(function (entry) { return entry.startTime <= endTime && startTime <= entry.endTime; })\n            .map(function (entry) { return entry.value; });\n    }\n    /**\n     * Remove all entries from this collection.\n     */\n    function reset() {\n        entries = [];\n    }\n    /**\n     * Stop internal garbage collection of past entries.\n     */\n    function stop() {\n        clearInterval(clearOldValuesInterval);\n    }\n    return { add: add, find: find, closeActive: closeActive, findAll: findAll, reset: reset, stop: stop };\n}\n//# sourceMappingURL=valueHistory.js.map","import { SESSION_TIME_OUT_DELAY, createValueHistory } from '@datadog/browser-core';\nexport var VIEW_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport function startViewHistory(lifeCycle) {\n    var viewValueHistory = createValueHistory({ expireDelay: VIEW_CONTEXT_TIME_OUT_DELAY });\n    lifeCycle.subscribe(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, function (view) {\n        viewValueHistory.add(buildViewHistoryEntry(view), view.startClocks.relative);\n    });\n    lifeCycle.subscribe(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        viewValueHistory.closeActive(endClocks.relative);\n    });\n    lifeCycle.subscribe(3 /* LifeCycleEventType.BEFORE_VIEW_UPDATED */, function (viewUpdate) {\n        var currentView = viewValueHistory.find(viewUpdate.startClocks.relative);\n        if (currentView && viewUpdate.name) {\n            currentView.name = viewUpdate.name;\n        }\n        if (currentView && viewUpdate.context) {\n            currentView.context = viewUpdate.context;\n        }\n    });\n    lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n        viewValueHistory.reset();\n    });\n    function buildViewHistoryEntry(view) {\n        return {\n            service: view.service,\n            version: view.version,\n            context: view.context,\n            id: view.id,\n            name: view.name,\n            startClocks: view.startClocks,\n        };\n    }\n    return {\n        findView: function (startTime) { return viewValueHistory.find(startTime); },\n        stop: function () {\n            viewValueHistory.stop();\n        },\n    };\n}\n//# sourceMappingURL=viewHistory.js.map","import { instrumentMethod } from '../tools/instrumentMethod';\nimport { Observable } from '../tools/observable';\nimport { elapsed, clocksNow, timeStampNow } from '../tools/utils/timeUtils';\nimport { normalizeUrl } from '../tools/utils/urlPolyfill';\nimport { shallowClone } from '../tools/utils/objectUtils';\nimport { addEventListener } from './addEventListener';\nvar xhrObservable;\nvar xhrContexts = new WeakMap();\nexport function initXhrObservable(configuration) {\n    if (!xhrObservable) {\n        xhrObservable = createXhrObservable(configuration);\n    }\n    return xhrObservable;\n}\nfunction createXhrObservable(configuration) {\n    return new Observable(function (observable) {\n        var stopInstrumentingStart = instrumentMethod(XMLHttpRequest.prototype, 'open', openXhr).stop;\n        var stopInstrumentingSend = instrumentMethod(XMLHttpRequest.prototype, 'send', function (call) {\n            sendXhr(call, configuration, observable);\n        }, { computeHandlingStack: true }).stop;\n        var stopInstrumentingAbort = instrumentMethod(XMLHttpRequest.prototype, 'abort', abortXhr).stop;\n        return function () {\n            stopInstrumentingStart();\n            stopInstrumentingSend();\n            stopInstrumentingAbort();\n        };\n    });\n}\nfunction openXhr(_a) {\n    var xhr = _a.target, _b = _a.parameters, method = _b[0], url = _b[1];\n    xhrContexts.set(xhr, {\n        state: 'open',\n        method: String(method).toUpperCase(),\n        url: normalizeUrl(String(url)),\n    });\n}\nfunction sendXhr(_a, configuration, observable) {\n    var xhr = _a.target, handlingStack = _a.handlingStack;\n    var context = xhrContexts.get(xhr);\n    if (!context) {\n        return;\n    }\n    var startContext = context;\n    startContext.state = 'start';\n    startContext.startClocks = clocksNow();\n    startContext.isAborted = false;\n    startContext.xhr = xhr;\n    startContext.handlingStack = handlingStack;\n    var hasBeenReported = false;\n    var stopInstrumentingOnReadyStateChange = instrumentMethod(xhr, 'onreadystatechange', function () {\n        if (xhr.readyState === XMLHttpRequest.DONE) {\n            // Try to report the XHR as soon as possible, because the XHR may be mutated by the\n            // application during a future event. For example, Angular is calling .abort() on\n            // completed requests during an onreadystatechange event, so the status becomes '0'\n            // before the request is collected.\n            onEnd();\n        }\n    }).stop;\n    var onEnd = function () {\n        unsubscribeLoadEndListener();\n        stopInstrumentingOnReadyStateChange();\n        if (hasBeenReported) {\n            return;\n        }\n        hasBeenReported = true;\n        var completeContext = context;\n        completeContext.state = 'complete';\n        completeContext.duration = elapsed(startContext.startClocks.timeStamp, timeStampNow());\n        completeContext.status = xhr.status;\n        observable.notify(shallowClone(completeContext));\n    };\n    var unsubscribeLoadEndListener = addEventListener(configuration, xhr, 'loadend', onEnd).stop;\n    observable.notify(startContext);\n}\nfunction abortXhr(_a) {\n    var xhr = _a.target;\n    var context = xhrContexts.get(xhr);\n    if (context) {\n        context.isAborted = true;\n    }\n}\n//# sourceMappingURL=xhrObservable.js.map","import { addTelemetryDebug, elapsed, getPathName, includes, isValidUrl, toServerDuration, isIntakeUrl, } from '@datadog/browser-core';\nexport var FAKE_INITIAL_DOCUMENT = 'initial_document';\nvar RESOURCE_TYPES = [\n    [\"document\" /* ResourceType.DOCUMENT */, function (initiatorType) { return FAKE_INITIAL_DOCUMENT === initiatorType; }],\n    [\"xhr\" /* ResourceType.XHR */, function (initiatorType) { return 'xmlhttprequest' === initiatorType; }],\n    [\"fetch\" /* ResourceType.FETCH */, function (initiatorType) { return 'fetch' === initiatorType; }],\n    [\"beacon\" /* ResourceType.BEACON */, function (initiatorType) { return 'beacon' === initiatorType; }],\n    [\"css\" /* ResourceType.CSS */, function (_, path) { return /\\.css$/i.test(path); }],\n    [\"js\" /* ResourceType.JS */, function (_, path) { return /\\.js$/i.test(path); }],\n    [\n        \"image\" /* ResourceType.IMAGE */,\n        function (initiatorType, path) {\n            return includes(['image', 'img', 'icon'], initiatorType) || /\\.(gif|jpg|jpeg|tiff|png|svg|ico)$/i.exec(path) !== null;\n        },\n    ],\n    [\"font\" /* ResourceType.FONT */, function (_, path) { return /\\.(woff|eot|woff2|ttf)$/i.exec(path) !== null; }],\n    [\n        \"media\" /* ResourceType.MEDIA */,\n        function (initiatorType, path) {\n            return includes(['audio', 'video'], initiatorType) || /\\.(mp3|mp4)$/i.exec(path) !== null;\n        },\n    ],\n];\nexport function computeResourceEntryType(entry) {\n    var url = entry.name;\n    if (!isValidUrl(url)) {\n        addTelemetryDebug(\"Failed to construct URL for \\\"\".concat(entry.name, \"\\\"\"));\n        return \"other\" /* ResourceType.OTHER */;\n    }\n    var path = getPathName(url);\n    for (var _i = 0, RESOURCE_TYPES_1 = RESOURCE_TYPES; _i < RESOURCE_TYPES_1.length; _i++) {\n        var _a = RESOURCE_TYPES_1[_i], type = _a[0], isType = _a[1];\n        if (isType(entry.initiatorType, path)) {\n            return type;\n        }\n    }\n    return \"other\" /* ResourceType.OTHER */;\n}\nfunction areInOrder() {\n    var numbers = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        numbers[_i] = arguments[_i];\n    }\n    for (var i = 1; i < numbers.length; i += 1) {\n        if (numbers[i - 1] > numbers[i]) {\n            return false;\n        }\n    }\n    return true;\n}\nexport function isResourceEntryRequestType(entry) {\n    return entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch';\n}\nexport function computeResourceEntryDuration(entry) {\n    var duration = entry.duration, startTime = entry.startTime, responseEnd = entry.responseEnd;\n    // Safari duration is always 0 on timings blocked by cross origin policies.\n    if (duration === 0 && startTime < responseEnd) {\n        return toServerDuration(elapsed(startTime, responseEnd));\n    }\n    return toServerDuration(duration);\n}\nexport function computeResourceEntryDetails(entry) {\n    if (!hasValidResourceEntryTimings(entry)) {\n        return undefined;\n    }\n    var startTime = entry.startTime, fetchStart = entry.fetchStart, workerStart = entry.workerStart, redirectStart = entry.redirectStart, redirectEnd = entry.redirectEnd, domainLookupStart = entry.domainLookupStart, domainLookupEnd = entry.domainLookupEnd, connectStart = entry.connectStart, secureConnectionStart = entry.secureConnectionStart, connectEnd = entry.connectEnd, requestStart = entry.requestStart, responseStart = entry.responseStart, responseEnd = entry.responseEnd;\n    var details = {\n        download: formatTiming(startTime, responseStart, responseEnd),\n        first_byte: formatTiming(startTime, requestStart, responseStart),\n    };\n    // Make sure a worker processing time is recorded\n    if (0 < workerStart && workerStart < fetchStart) {\n        details.worker = formatTiming(startTime, workerStart, fetchStart);\n    }\n    // Make sure a connection occurred\n    if (fetchStart < connectEnd) {\n        details.connect = formatTiming(startTime, connectStart, connectEnd);\n        // Make sure a secure connection occurred\n        if (connectStart <= secureConnectionStart && secureConnectionStart <= connectEnd) {\n            details.ssl = formatTiming(startTime, secureConnectionStart, connectEnd);\n        }\n    }\n    // Make sure a domain lookup occurred\n    if (fetchStart < domainLookupEnd) {\n        details.dns = formatTiming(startTime, domainLookupStart, domainLookupEnd);\n    }\n    // Make sure a redirection occurred\n    if (startTime < redirectEnd) {\n        details.redirect = formatTiming(startTime, redirectStart, redirectEnd);\n    }\n    return details;\n}\n/**\n * Entries with negative duration are unexpected and should be dismissed. The intake will ignore RUM\n * Resource events with negative durations anyway.\n * Since Chromium 128, more entries have unexpected negative durations, see\n * https://issues.chromium.org/issues/363031537\n */\nexport function hasValidResourceEntryDuration(entry) {\n    return entry.duration >= 0;\n}\nexport function hasValidResourceEntryTimings(entry) {\n    // Ensure timings are in the right order. On top of filtering out potential invalid\n    // RumPerformanceResourceTiming, it will ignore entries from requests where timings cannot be\n    // collected, for example cross origin requests without a \"Timing-Allow-Origin\" header allowing\n    // it.\n    var areCommonTimingsInOrder = areInOrder(entry.startTime, entry.fetchStart, entry.domainLookupStart, entry.domainLookupEnd, entry.connectStart, entry.connectEnd, entry.requestStart, entry.responseStart, entry.responseEnd);\n    var areRedirectionTimingsInOrder = hasRedirection(entry)\n        ? areInOrder(entry.startTime, entry.redirectStart, entry.redirectEnd, entry.fetchStart)\n        : true;\n    return areCommonTimingsInOrder && areRedirectionTimingsInOrder;\n}\nfunction hasRedirection(entry) {\n    return entry.redirectEnd > entry.startTime;\n}\nfunction formatTiming(origin, start, end) {\n    if (origin <= start && start <= end) {\n        return {\n            duration: toServerDuration(elapsed(start, end)),\n            start: toServerDuration(elapsed(origin, start)),\n        };\n    }\n}\n/**\n * The 'nextHopProtocol' is an empty string for cross-origin resources without CORS headers,\n * meaning the protocol is unknown, and we shouldn't report it.\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/nextHopProtocol#cross-origin_resources\n */\nexport function computeResourceEntryProtocol(entry) {\n    return entry.nextHopProtocol === '' ? undefined : entry.nextHopProtocol;\n}\n/**\n * Handles the 'deliveryType' property to distinguish between supported values ('cache', 'navigational-prefetch'),\n * undefined (unsupported in some browsers), and other cases ('other' for unknown or unrecognized values).\n * see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/deliveryType\n */\nexport function computeResourceEntryDeliveryType(entry) {\n    return entry.deliveryType === '' ? 'other' : entry.deliveryType;\n}\nexport function computeResourceEntrySize(entry) {\n    // Make sure a request actually occurred\n    if (entry.startTime < entry.responseStart) {\n        var encodedBodySize = entry.encodedBodySize, decodedBodySize = entry.decodedBodySize, transferSize = entry.transferSize;\n        return {\n            size: decodedBodySize,\n            encoded_body_size: encodedBodySize,\n            decoded_body_size: decodedBodySize,\n            transfer_size: transferSize,\n        };\n    }\n    return {\n        size: undefined,\n        encoded_body_size: undefined,\n        decoded_body_size: undefined,\n        transfer_size: undefined,\n    };\n}\nexport function isAllowedRequestUrl(url) {\n    return url && !isIntakeUrl(url);\n}\nvar DATA_URL_REGEX = /data:(.+)?(;base64)?,/g;\nexport var MAX_ATTRIBUTE_VALUE_CHAR_LENGTH = 24000;\nexport function isLongDataUrl(url) {\n    if (url.length <= MAX_ATTRIBUTE_VALUE_CHAR_LENGTH) {\n        return false;\n    }\n    else if (url.substring(0, 5) === 'data:') {\n        // Avoid String.match RangeError: Maximum call stack size exceeded\n        url = url.substring(0, MAX_ATTRIBUTE_VALUE_CHAR_LENGTH);\n        return true;\n    }\n    return false;\n}\nexport function sanitizeDataUrl(url) {\n    return \"\".concat(url.match(DATA_URL_REGEX)[0], \"[...]\");\n}\n//# sourceMappingURL=resourceUtils.js.map","import { initFetchObservable, initXhrObservable, readBytesFromStream, elapsed, timeStampNow, tryToClone, } from '@datadog/browser-core';\nimport { isAllowedRequestUrl } from './resource/resourceUtils';\nimport { startTracer } from './tracing/tracer';\nvar nextRequestIndex = 1;\nexport function startRequestCollection(lifeCycle, configuration, sessionManager) {\n    var tracer = startTracer(configuration, sessionManager);\n    trackXhr(lifeCycle, configuration, tracer);\n    trackFetch(lifeCycle, tracer);\n}\nexport function trackXhr(lifeCycle, configuration, tracer) {\n    var subscription = initXhrObservable(configuration).subscribe(function (rawContext) {\n        var context = rawContext;\n        if (!isAllowedRequestUrl(context.url)) {\n            return;\n        }\n        switch (context.state) {\n            case 'start':\n                tracer.traceXhr(context, context.xhr);\n                context.requestIndex = getNextRequestIndex();\n                lifeCycle.notify(7 /* LifeCycleEventType.REQUEST_STARTED */, {\n                    requestIndex: context.requestIndex,\n                    url: context.url,\n                });\n                break;\n            case 'complete':\n                tracer.clearTracingIfNeeded(context);\n                lifeCycle.notify(8 /* LifeCycleEventType.REQUEST_COMPLETED */, {\n                    duration: context.duration,\n                    method: context.method,\n                    requestIndex: context.requestIndex,\n                    spanId: context.spanId,\n                    startClocks: context.startClocks,\n                    status: context.status,\n                    traceId: context.traceId,\n                    traceSampled: context.traceSampled,\n                    type: \"xhr\" /* RequestType.XHR */,\n                    url: context.url,\n                    xhr: context.xhr,\n                    isAborted: context.isAborted,\n                    handlingStack: context.handlingStack,\n                });\n                break;\n        }\n    });\n    return { stop: function () { return subscription.unsubscribe(); } };\n}\nexport function trackFetch(lifeCycle, tracer) {\n    var subscription = initFetchObservable().subscribe(function (rawContext) {\n        var context = rawContext;\n        if (!isAllowedRequestUrl(context.url)) {\n            return;\n        }\n        switch (context.state) {\n            case 'start':\n                tracer.traceFetch(context);\n                context.requestIndex = getNextRequestIndex();\n                lifeCycle.notify(7 /* LifeCycleEventType.REQUEST_STARTED */, {\n                    requestIndex: context.requestIndex,\n                    url: context.url,\n                });\n                break;\n            case 'resolve':\n                waitForResponseToComplete(context, function (duration) {\n                    tracer.clearTracingIfNeeded(context);\n                    lifeCycle.notify(8 /* LifeCycleEventType.REQUEST_COMPLETED */, {\n                        duration: duration,\n                        method: context.method,\n                        requestIndex: context.requestIndex,\n                        responseType: context.responseType,\n                        spanId: context.spanId,\n                        startClocks: context.startClocks,\n                        status: context.status,\n                        traceId: context.traceId,\n                        traceSampled: context.traceSampled,\n                        type: \"fetch\" /* RequestType.FETCH */,\n                        url: context.url,\n                        response: context.response,\n                        init: context.init,\n                        input: context.input,\n                        isAborted: context.isAborted,\n                        handlingStack: context.handlingStack,\n                    });\n                });\n                break;\n        }\n    });\n    return { stop: function () { return subscription.unsubscribe(); } };\n}\nfunction getNextRequestIndex() {\n    var result = nextRequestIndex;\n    nextRequestIndex += 1;\n    return result;\n}\nfunction waitForResponseToComplete(context, callback) {\n    var clonedResponse = context.response && tryToClone(context.response);\n    if (!clonedResponse || !clonedResponse.body) {\n        // do not try to wait for the response if the clone failed, fetch error or null body\n        callback(elapsed(context.startClocks.timeStamp, timeStampNow()));\n    }\n    else {\n        readBytesFromStream(clonedResponse.body, function () {\n            callback(elapsed(context.startClocks.timeStamp, timeStampNow()));\n        }, {\n            bytesLimit: Number.POSITIVE_INFINITY,\n            collectStreamBody: false,\n        });\n    }\n}\n//# sourceMappingURL=requestCollection.js.map","import { addEventListener, Observable, setTimeout, clearTimeout, monitor, includes } from '@datadog/browser-core';\nimport { hasValidResourceEntryDuration, isAllowedRequestUrl } from '../domain/resource/resourceUtils';\nimport { retrieveFirstInputTiming } from './firstInputPolyfill';\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected performance entry\n// eslint-disable-next-line no-restricted-syntax\nexport var RumPerformanceEntryType;\n(function (RumPerformanceEntryType) {\n    RumPerformanceEntryType[\"EVENT\"] = \"event\";\n    RumPerformanceEntryType[\"FIRST_INPUT\"] = \"first-input\";\n    RumPerformanceEntryType[\"LARGEST_CONTENTFUL_PAINT\"] = \"largest-contentful-paint\";\n    RumPerformanceEntryType[\"LAYOUT_SHIFT\"] = \"layout-shift\";\n    RumPerformanceEntryType[\"LONG_TASK\"] = \"longtask\";\n    RumPerformanceEntryType[\"LONG_ANIMATION_FRAME\"] = \"long-animation-frame\";\n    RumPerformanceEntryType[\"NAVIGATION\"] = \"navigation\";\n    RumPerformanceEntryType[\"PAINT\"] = \"paint\";\n    RumPerformanceEntryType[\"RESOURCE\"] = \"resource\";\n})(RumPerformanceEntryType || (RumPerformanceEntryType = {}));\nexport function createPerformanceObservable(configuration, options) {\n    return new Observable(function (observable) {\n        if (!window.PerformanceObserver) {\n            return;\n        }\n        var handlePerformanceEntries = function (entries) {\n            var rumPerformanceEntries = filterRumPerformanceEntries(entries);\n            if (rumPerformanceEntries.length > 0) {\n                observable.notify(rumPerformanceEntries);\n            }\n        };\n        var timeoutId;\n        var isObserverInitializing = true;\n        var observer = new PerformanceObserver(monitor(function (entries) {\n            // In Safari the performance observer callback is synchronous.\n            // Because the buffered performance entry list can be quite large we delay the computation to prevent the SDK from blocking the main thread on init\n            if (isObserverInitializing) {\n                timeoutId = setTimeout(function () { return handlePerformanceEntries(entries.getEntries()); });\n            }\n            else {\n                handlePerformanceEntries(entries.getEntries());\n            }\n        }));\n        try {\n            observer.observe(options);\n        }\n        catch (_a) {\n            // Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options\n            // In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes\n            // TODO: remove this fallback in the next major version\n            var fallbackSupportedEntryTypes = [\n                RumPerformanceEntryType.RESOURCE,\n                RumPerformanceEntryType.NAVIGATION,\n                RumPerformanceEntryType.LONG_TASK,\n                RumPerformanceEntryType.PAINT,\n            ];\n            if (includes(fallbackSupportedEntryTypes, options.type)) {\n                if (options.buffered) {\n                    timeoutId = setTimeout(function () { return handlePerformanceEntries(performance.getEntriesByType(options.type)); });\n                }\n                try {\n                    observer.observe({ entryTypes: [options.type] });\n                }\n                catch (_b) {\n                    // Old versions of Safari are throwing \"entryTypes contained only unsupported types\"\n                    // errors when observing only unsupported entry types.\n                    //\n                    // We could use `supportPerformanceTimingEvent` to make sure we don't invoke\n                    // `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support\n                    // `Performance.supportedEntryTypes`, so doing so would lose support for these versions\n                    // even if they do support the entry type.\n                    return;\n                }\n            }\n        }\n        isObserverInitializing = false;\n        manageResourceTimingBufferFull(configuration);\n        var stopFirstInputTiming;\n        if (!supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) &&\n            options.type === RumPerformanceEntryType.FIRST_INPUT) {\n            ;\n            (stopFirstInputTiming = retrieveFirstInputTiming(configuration, function (timing) {\n                handlePerformanceEntries([timing]);\n            }).stop);\n        }\n        return function () {\n            observer.disconnect();\n            if (stopFirstInputTiming) {\n                stopFirstInputTiming();\n            }\n            clearTimeout(timeoutId);\n        };\n    });\n}\nvar resourceTimingBufferFullListener;\nfunction manageResourceTimingBufferFull(configuration) {\n    if (!resourceTimingBufferFullListener && supportPerformanceObject() && 'addEventListener' in performance) {\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377\n        resourceTimingBufferFullListener = addEventListener(configuration, performance, 'resourcetimingbufferfull', function () {\n            performance.clearResourceTimings();\n        });\n    }\n    return function () {\n        resourceTimingBufferFullListener === null || resourceTimingBufferFullListener === void 0 ? void 0 : resourceTimingBufferFullListener.stop();\n    };\n}\nfunction supportPerformanceObject() {\n    return window.performance !== undefined && 'getEntries' in performance;\n}\nexport function supportPerformanceTimingEvent(entryType) {\n    return (window.PerformanceObserver &&\n        PerformanceObserver.supportedEntryTypes !== undefined &&\n        PerformanceObserver.supportedEntryTypes.includes(entryType));\n}\nfunction filterRumPerformanceEntries(entries) {\n    return entries.filter(function (entry) { return !isForbiddenResource(entry); });\n}\nfunction isForbiddenResource(entry) {\n    return (entry.entryType === RumPerformanceEntryType.RESOURCE &&\n        (!isAllowedRequestUrl(entry.name) || !hasValidResourceEntryDuration(entry)));\n}\n//# sourceMappingURL=performanceObservable.js.map","export function isServerError(status) {\n    return status >= 500;\n}\nexport function tryToClone(response) {\n    try {\n        return response.clone();\n    }\n    catch (_a) {\n        // clone can throw if the response has already been used by another instrumentation or is disturbed\n        return;\n    }\n}\n//# sourceMappingURL=responseUtils.js.map","import { monitor } from './monitor';\nimport { noop } from './utils/functionUtils';\n/**\n * Read bytes from a ReadableStream until at least `limit` bytes have been read (or until the end of\n * the stream). The callback is invoked with the at most `limit` bytes, and indicates that the limit\n * has been exceeded if more bytes were available.\n */\nexport function readBytesFromStream(stream, callback, options) {\n    var reader = stream.getReader();\n    var chunks = [];\n    var readBytesCount = 0;\n    readMore();\n    function readMore() {\n        reader.read().then(monitor(function (result) {\n            if (result.done) {\n                onDone();\n                return;\n            }\n            if (options.collectStreamBody) {\n                chunks.push(result.value);\n            }\n            readBytesCount += result.value.length;\n            if (readBytesCount > options.bytesLimit) {\n                onDone();\n            }\n            else {\n                readMore();\n            }\n        }), monitor(function (error) { return callback(error); }));\n    }\n    function onDone() {\n        reader.cancel().catch(\n        // we don't care if cancel fails, but we still need to catch the error to avoid reporting it\n        // as an unhandled rejection\n        noop);\n        var bytes;\n        var limitExceeded;\n        if (options.collectStreamBody) {\n            var completeBuffer_1;\n            if (chunks.length === 1) {\n                // optimization: if the response is small enough to fit in a single buffer (provided by the browser), just\n                // use it directly.\n                completeBuffer_1 = chunks[0];\n            }\n            else {\n                // else, we need to copy buffers into a larger buffer to concatenate them.\n                completeBuffer_1 = new Uint8Array(readBytesCount);\n                var offset_1 = 0;\n                chunks.forEach(function (chunk) {\n                    completeBuffer_1.set(chunk, offset_1);\n                    offset_1 += chunk.length;\n                });\n            }\n            bytes = completeBuffer_1.slice(0, options.bytesLimit);\n            limitExceeded = completeBuffer_1.length > options.bytesLimit;\n        }\n        callback(undefined, bytes, limitExceeded);\n    }\n}\n//# sourceMappingURL=readBytesFromStream.js.map","import { isNumber } from '@datadog/browser-core';\nexport function discardNegativeDuration(duration) {\n    return isNumber(duration) && duration < 0 ? undefined : duration;\n}\n//# sourceMappingURL=discardNegativeDuration.js.map","import { noop } from '@datadog/browser-core';\nexport function trackEventCounts(_a) {\n    var lifeCycle = _a.lifeCycle, isChildEvent = _a.isChildEvent, _b = _a.onChange, callback = _b === void 0 ? noop : _b;\n    var eventCounts = {\n        errorCount: 0,\n        longTaskCount: 0,\n        resourceCount: 0,\n        actionCount: 0,\n        frustrationCount: 0,\n    };\n    var subscription = lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (event) {\n        var _a;\n        if (event.type === 'view' || event.type === 'vital' || !isChildEvent(event)) {\n            return;\n        }\n        switch (event.type) {\n            case \"error\" /* RumEventType.ERROR */:\n                eventCounts.errorCount += 1;\n                callback();\n                break;\n            case \"action\" /* RumEventType.ACTION */:\n                eventCounts.actionCount += 1;\n                if (event.action.frustration) {\n                    eventCounts.frustrationCount += event.action.frustration.type.length;\n                }\n                callback();\n                break;\n            case \"long_task\" /* RumEventType.LONG_TASK */:\n                eventCounts.longTaskCount += 1;\n                callback();\n                break;\n            case \"resource\" /* RumEventType.RESOURCE */:\n                if (!((_a = event._dd) === null || _a === void 0 ? void 0 : _a.discarded)) {\n                    eventCounts.resourceCount += 1;\n                    callback();\n                }\n                break;\n        }\n    });\n    return {\n        stop: function () {\n            subscription.unsubscribe();\n        },\n        eventCounts: eventCounts,\n    };\n}\n//# sourceMappingURL=trackEventCounts.js.map","import { addEventListeners, dateNow, relativeNow } from '@datadog/browser-core';\n/**\n * first-input timing entry polyfill based on\n * https://github.com/GoogleChrome/web-vitals/blob/master/src/lib/polyfills/firstInputPolyfill.ts\n */\nexport function retrieveFirstInputTiming(configuration, callback) {\n    var startTimeStamp = dateNow();\n    var timingSent = false;\n    var removeEventListeners = addEventListeners(configuration, window, [\"click\" /* DOM_EVENT.CLICK */, \"mousedown\" /* DOM_EVENT.MOUSE_DOWN */, \"keydown\" /* DOM_EVENT.KEY_DOWN */, \"touchstart\" /* DOM_EVENT.TOUCH_START */, \"pointerdown\" /* DOM_EVENT.POINTER_DOWN */], function (evt) {\n        // Only count cancelable events, which should trigger behavior important to the user.\n        if (!evt.cancelable) {\n            return;\n        }\n        // This timing will be used to compute the \"first Input delay\", which is the delta between\n        // when the system received the event (e.g. evt.timeStamp) and when it could run the callback\n        // (e.g. performance.now()).\n        var timing = {\n            entryType: 'first-input',\n            processingStart: relativeNow(),\n            processingEnd: relativeNow(),\n            startTime: evt.timeStamp,\n            duration: 0, // arbitrary value to avoid nullable duration and simplify INP logic\n            name: '',\n            cancelable: false,\n            target: null,\n            toJSON: function () { return ({}); },\n        };\n        if (evt.type === \"pointerdown\" /* DOM_EVENT.POINTER_DOWN */) {\n            sendTimingIfPointerIsNotCancelled(configuration, timing);\n        }\n        else {\n            sendTiming(timing);\n        }\n    }, { passive: true, capture: true }).stop;\n    return { stop: removeEventListeners };\n    /**\n     * Pointer events are a special case, because they can trigger main or compositor thread behavior.\n     * We differentiate these cases based on whether or not we see a pointercancel event, which are\n     * fired when we scroll. If we're scrolling we don't need to report input delay since FID excludes\n     * scrolling and pinch/zooming.\n     */\n    function sendTimingIfPointerIsNotCancelled(configuration, timing) {\n        addEventListeners(configuration, window, [\"pointerup\" /* DOM_EVENT.POINTER_UP */, \"pointercancel\" /* DOM_EVENT.POINTER_CANCEL */], function (event) {\n            if (event.type === \"pointerup\" /* DOM_EVENT.POINTER_UP */) {\n                sendTiming(timing);\n            }\n        }, { once: true });\n    }\n    function sendTiming(timing) {\n        if (!timingSent) {\n            timingSent = true;\n            removeEventListeners();\n            // In some cases the recorded delay is clearly wrong, e.g. it's negative or it's larger than\n            // the time between now and when the page was loaded.\n            // - https://github.com/GoogleChromeLabs/first-input-delay/issues/4\n            // - https://github.com/GoogleChromeLabs/first-input-delay/issues/6\n            // - https://github.com/GoogleChromeLabs/first-input-delay/issues/7\n            var delay = timing.processingStart - timing.startTime;\n            if (delay >= 0 && delay < dateNow() - startTimeStamp) {\n                callback(timing);\n            }\n        }\n    }\n}\n//# sourceMappingURL=firstInputPolyfill.js.map","import { matchList, monitor, Observable, timeStampNow, setTimeout, clearTimeout } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../browser/performanceObservable';\n// Delay to wait for a page activity to validate the tracking process\nexport var PAGE_ACTIVITY_VALIDATION_DELAY = 100;\n// Delay to wait after a page activity to end the tracking process\nexport var PAGE_ACTIVITY_END_DELAY = 100;\n/**\n * Wait for the page activity end\n *\n * Detection lifecycle:\n * ```\n *                        Wait page activity end\n *              .-------------------'--------------------.\n *              v                                        v\n *     [Wait for a page activity ]          [Wait for a maximum duration]\n *     [timeout: VALIDATION_DELAY]          [  timeout: maxDuration     ]\n *          /                  \\                           |\n *         v                    v                          |\n *  [No page activity]   [Page activity]                   |\n *         |                   |,----------------------.   |\n *         v                   v                       |   |\n *     (Discard)     [Wait for a page activity]        |   |\n *                   [   timeout: END_DELAY   ]        |   |\n *                       /                \\            |   |\n *                      v                  v           |   |\n *             [No page activity]    [Page activity]   |   |\n *                      |                 |            |   |\n *                      |                 '------------'   |\n *                      '-----------. ,--------------------'\n *                                   v\n *                                 (End)\n * ```\n *\n * Note: by assuming that maxDuration is greater than VALIDATION_DELAY, we are sure that if the\n * process is still alive after maxDuration, it has been validated.\n */\nexport function waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, pageActivityEndCallback, maxDuration) {\n    var pageActivityObservable = createPageActivityObservable(lifeCycle, domMutationObservable, windowOpenObservable, configuration);\n    return doWaitPageActivityEnd(pageActivityObservable, pageActivityEndCallback, maxDuration);\n}\nexport function doWaitPageActivityEnd(pageActivityObservable, pageActivityEndCallback, maxDuration) {\n    var pageActivityEndTimeoutId;\n    var hasCompleted = false;\n    var validationTimeoutId = setTimeout(monitor(function () { return complete({ hadActivity: false }); }), PAGE_ACTIVITY_VALIDATION_DELAY);\n    var maxDurationTimeoutId = maxDuration !== undefined\n        ? setTimeout(monitor(function () { return complete({ hadActivity: true, end: timeStampNow() }); }), maxDuration)\n        : undefined;\n    var pageActivitySubscription = pageActivityObservable.subscribe(function (_a) {\n        var isBusy = _a.isBusy;\n        clearTimeout(validationTimeoutId);\n        clearTimeout(pageActivityEndTimeoutId);\n        var lastChangeTime = timeStampNow();\n        if (!isBusy) {\n            pageActivityEndTimeoutId = setTimeout(monitor(function () { return complete({ hadActivity: true, end: lastChangeTime }); }), PAGE_ACTIVITY_END_DELAY);\n        }\n    });\n    var stop = function () {\n        hasCompleted = true;\n        clearTimeout(validationTimeoutId);\n        clearTimeout(pageActivityEndTimeoutId);\n        clearTimeout(maxDurationTimeoutId);\n        pageActivitySubscription.unsubscribe();\n    };\n    function complete(event) {\n        if (hasCompleted) {\n            return;\n        }\n        stop();\n        pageActivityEndCallback(event);\n    }\n    return { stop: stop };\n}\nexport function createPageActivityObservable(lifeCycle, domMutationObservable, windowOpenObservable, configuration) {\n    return new Observable(function (observable) {\n        var subscriptions = [];\n        var firstRequestIndex;\n        var pendingRequestsCount = 0;\n        subscriptions.push(domMutationObservable.subscribe(notifyPageActivity), windowOpenObservable.subscribe(notifyPageActivity), createPerformanceObservable(configuration, { type: RumPerformanceEntryType.RESOURCE }).subscribe(function (entries) {\n            if (entries.some(function (entry) { return !isExcludedUrl(configuration, entry.name); })) {\n                notifyPageActivity();\n            }\n        }), lifeCycle.subscribe(7 /* LifeCycleEventType.REQUEST_STARTED */, function (startEvent) {\n            if (isExcludedUrl(configuration, startEvent.url)) {\n                return;\n            }\n            if (firstRequestIndex === undefined) {\n                firstRequestIndex = startEvent.requestIndex;\n            }\n            pendingRequestsCount += 1;\n            notifyPageActivity();\n        }), lifeCycle.subscribe(8 /* LifeCycleEventType.REQUEST_COMPLETED */, function (request) {\n            if (isExcludedUrl(configuration, request.url) ||\n                firstRequestIndex === undefined ||\n                // If the request started before the tracking start, ignore it\n                request.requestIndex < firstRequestIndex) {\n                return;\n            }\n            pendingRequestsCount -= 1;\n            notifyPageActivity();\n        }));\n        return function () {\n            subscriptions.forEach(function (s) { return s.unsubscribe(); });\n        };\n        function notifyPageActivity() {\n            observable.notify({ isBusy: pendingRequestsCount > 0 });\n        }\n    });\n}\nfunction isExcludedUrl(configuration, requestUrl) {\n    return matchList(configuration.excludedActivityUrls, requestUrl);\n}\n//# sourceMappingURL=waitPageActivityEnd.js.map","// https://github.com/jquery/jquery/blob/a684e6ba836f7c553968d7d026ed7941e1a612d8/src/selector/escapeSelector.js\nexport function cssEscape(str) {\n    if (window.CSS && window.CSS.escape) {\n        return window.CSS.escape(str);\n    }\n    // eslint-disable-next-line no-control-regex\n    return str.replace(/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g, function (ch, asCodePoint) {\n        if (asCodePoint) {\n            // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n            if (ch === '\\0') {\n                return '\\uFFFD';\n            }\n            // Control characters and (dependent upon position) numbers get escaped as code points\n            return \"\".concat(ch.slice(0, -1), \"\\\\\").concat(ch.charCodeAt(ch.length - 1).toString(16), \" \");\n        }\n        // Other potentially-special ASCII characters get backslash-escaped\n        return \"\\\\\".concat(ch);\n    });\n}\nexport function elementMatches(element, selector) {\n    if (element.matches) {\n        return element.matches(selector);\n    }\n    // IE11 support\n    if (element.msMatchesSelector) {\n        return element.msMatchesSelector(selector);\n    }\n    return false;\n}\n/**\n * Return the parentElement of an node\n *\n * In cases where parentElement is not supported, such as in IE11 for SVG nodes, we fallback to parentNode\n */\nexport function getParentElement(node) {\n    if (node.parentElement) {\n        return node.parentElement;\n    }\n    while (node.parentNode) {\n        if (node.parentNode.nodeType === Node.ELEMENT_NODE) {\n            return node.parentNode;\n        }\n        node = node.parentNode;\n    }\n    return null;\n}\n/**\n * Return the classList of an element or an array of classes if classList is not supported\n *\n * In cases where classList is not supported, such as in IE11 for SVG and MathML elements,\n * we fallback to using element.getAttribute('class').\n * We opt for element.getAttribute('class') over element.className because className returns an SVGAnimatedString for SVG elements.\n */\nexport function getClassList(element) {\n    if (element.classList) {\n        return element.classList;\n    }\n    var classes = (element.getAttribute('class') || '').trim();\n    return classes ? classes.split(/\\s+/) : [];\n}\n// ie11 supports WeakMap but not WeakSet\nvar PLACEHOLDER = 1;\n// eslint-disable-next-line no-restricted-syntax\nvar WeakSet = /** @class */ (function () {\n    function WeakSet(initialValues) {\n        var _this = this;\n        this.map = new WeakMap();\n        if (initialValues) {\n            initialValues.forEach(function (value) { return _this.map.set(value, PLACEHOLDER); });\n        }\n    }\n    WeakSet.prototype.add = function (value) {\n        this.map.set(value, PLACEHOLDER);\n        return this;\n    };\n    WeakSet.prototype.delete = function (value) {\n        return this.map.delete(value);\n    };\n    WeakSet.prototype.has = function (value) {\n        return this.map.has(value);\n    };\n    return WeakSet;\n}());\nexport { WeakSet };\n//# sourceMappingURL=polyfills.js.map","export function isTextNode(node) {\n    return node.nodeType === Node.TEXT_NODE;\n}\nexport function isCommentNode(node) {\n    return node.nodeType === Node.COMMENT_NODE;\n}\nexport function isElementNode(node) {\n    return node.nodeType === Node.ELEMENT_NODE;\n}\nexport function isNodeShadowHost(node) {\n    return isElementNode(node) && Boolean(node.shadowRoot);\n}\nexport function isNodeShadowRoot(node) {\n    var shadowRoot = node;\n    return !!shadowRoot.host && shadowRoot.nodeType === Node.DOCUMENT_FRAGMENT_NODE && isElementNode(shadowRoot.host);\n}\nexport function hasChildNodes(node) {\n    return node.childNodes.length > 0 || isNodeShadowHost(node);\n}\nexport function forEachChildNodes(node, callback) {\n    var child = node.firstChild;\n    while (child) {\n        callback(child);\n        child = child.nextSibling;\n    }\n    if (isNodeShadowHost(node)) {\n        callback(node.shadowRoot);\n    }\n}\n/**\n * Return `host` in case if the current node is a shadow root otherwise will return the `parentNode`\n */\nexport function getParentNode(node) {\n    return isNodeShadowRoot(node) ? node.host : node.parentNode;\n}\n//# sourceMappingURL=htmlDomUtils.js.map","import { DefaultPrivacyLevel } from '@datadog/browser-core';\nimport { isElementNode, getParentNode, isTextNode } from '../browser/htmlDomUtils';\nimport { elementMatches } from '../browser/polyfills';\nexport var NodePrivacyLevel = {\n    IGNORE: 'ignore',\n    HIDDEN: 'hidden',\n    ALLOW: DefaultPrivacyLevel.ALLOW,\n    MASK: DefaultPrivacyLevel.MASK,\n    MASK_USER_INPUT: DefaultPrivacyLevel.MASK_USER_INPUT,\n};\nexport var PRIVACY_ATTR_NAME = 'data-dd-privacy';\n// Privacy Attrs\nexport var PRIVACY_ATTR_VALUE_ALLOW = 'allow';\nexport var PRIVACY_ATTR_VALUE_MASK = 'mask';\nexport var PRIVACY_ATTR_VALUE_MASK_USER_INPUT = 'mask-user-input';\nexport var PRIVACY_ATTR_VALUE_HIDDEN = 'hidden';\n// Privacy Classes - not all customers can set plain HTML attributes, so support classes too\nexport var PRIVACY_CLASS_PREFIX = 'dd-privacy-';\n// Private Replacement Templates\nexport var CENSORED_STRING_MARK = '***';\nexport var CENSORED_IMG_MARK = 'data:image/gif;base64,R0lGODlhAQABAIAAAMLCwgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';\nexport var FORM_PRIVATE_TAG_NAMES = {\n    INPUT: true,\n    OUTPUT: true,\n    TEXTAREA: true,\n    SELECT: true,\n    OPTION: true,\n    DATALIST: true,\n    OPTGROUP: true,\n};\nvar TEXT_MASKING_CHAR = 'x';\n/**\n * Get node privacy level by iterating over its ancestors. When the direct parent privacy level is\n * know, it is best to use something like:\n *\n * derivePrivacyLevelGivenParent(getNodeSelfPrivacyLevel(node), parentNodePrivacyLevel)\n */\nexport function getNodePrivacyLevel(node, defaultPrivacyLevel, cache) {\n    if (cache && cache.has(node)) {\n        return cache.get(node);\n    }\n    var parentNode = getParentNode(node);\n    var parentNodePrivacyLevel = parentNode\n        ? getNodePrivacyLevel(parentNode, defaultPrivacyLevel, cache)\n        : defaultPrivacyLevel;\n    var selfNodePrivacyLevel = getNodeSelfPrivacyLevel(node);\n    var nodePrivacyLevel = reducePrivacyLevel(selfNodePrivacyLevel, parentNodePrivacyLevel);\n    if (cache) {\n        cache.set(node, nodePrivacyLevel);\n    }\n    return nodePrivacyLevel;\n}\n/**\n * Reduces the next privacy level based on self + parent privacy levels\n */\nexport function reducePrivacyLevel(childPrivacyLevel, parentNodePrivacyLevel) {\n    switch (parentNodePrivacyLevel) {\n        // These values cannot be overridden\n        case NodePrivacyLevel.HIDDEN:\n        case NodePrivacyLevel.IGNORE:\n            return parentNodePrivacyLevel;\n    }\n    switch (childPrivacyLevel) {\n        case NodePrivacyLevel.ALLOW:\n        case NodePrivacyLevel.MASK:\n        case NodePrivacyLevel.MASK_USER_INPUT:\n        case NodePrivacyLevel.HIDDEN:\n        case NodePrivacyLevel.IGNORE:\n            return childPrivacyLevel;\n        default:\n            return parentNodePrivacyLevel;\n    }\n}\n/**\n * Determines the node's own privacy level without checking for ancestors.\n */\nexport function getNodeSelfPrivacyLevel(node) {\n    // Only Element types can have a privacy level set\n    if (!isElementNode(node)) {\n        return;\n    }\n    // Overrules for replay purpose\n    if (node.tagName === 'BASE') {\n        return NodePrivacyLevel.ALLOW;\n    }\n    // Overrules to enforce end-user protection\n    if (node.tagName === 'INPUT') {\n        var inputElement = node;\n        if (inputElement.type === 'password' || inputElement.type === 'email' || inputElement.type === 'tel') {\n            return NodePrivacyLevel.MASK;\n        }\n        if (inputElement.type === 'hidden') {\n            return NodePrivacyLevel.MASK;\n        }\n        var autocomplete = inputElement.getAttribute('autocomplete');\n        // Handle input[autocomplete=cc-number/cc-csc/cc-exp/cc-exp-month/cc-exp-year/new-password/current-password]\n        if (autocomplete && (autocomplete.startsWith('cc-') || autocomplete.endsWith('-password'))) {\n            return NodePrivacyLevel.MASK;\n        }\n    }\n    // Check HTML privacy attributes and classes\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.HIDDEN))) {\n        return NodePrivacyLevel.HIDDEN;\n    }\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.MASK))) {\n        return NodePrivacyLevel.MASK;\n    }\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.MASK_USER_INPUT))) {\n        return NodePrivacyLevel.MASK_USER_INPUT;\n    }\n    if (elementMatches(node, getPrivacySelector(NodePrivacyLevel.ALLOW))) {\n        return NodePrivacyLevel.ALLOW;\n    }\n    if (shouldIgnoreElement(node)) {\n        return NodePrivacyLevel.IGNORE;\n    }\n}\n/**\n * Helper aiming to unify `mask` and `mask-user-input` privacy levels:\n *\n * In the `mask` case, it is trivial: we should mask the element.\n *\n * In the `mask-user-input` case, we should mask the element only if it is a \"form\" element or the\n * direct parent is a form element for text nodes).\n *\n * Other `shouldMaskNode` cases are edge cases that should not matter too much (ex: should we mask a\n * node if it is ignored or hidden? it doesn't matter since it won't be serialized).\n */\nexport function shouldMaskNode(node, privacyLevel) {\n    switch (privacyLevel) {\n        case NodePrivacyLevel.MASK:\n        case NodePrivacyLevel.HIDDEN:\n        case NodePrivacyLevel.IGNORE:\n            return true;\n        case NodePrivacyLevel.MASK_USER_INPUT:\n            return isTextNode(node) ? isFormElement(node.parentNode) : isFormElement(node);\n        default:\n            return false;\n    }\n}\nfunction isFormElement(node) {\n    if (!node || node.nodeType !== node.ELEMENT_NODE) {\n        return false;\n    }\n    var element = node;\n    if (element.tagName === 'INPUT') {\n        switch (element.type) {\n            case 'button':\n            case 'color':\n            case 'reset':\n            case 'submit':\n                return false;\n        }\n    }\n    return !!FORM_PRIVATE_TAG_NAMES[element.tagName];\n}\n/**\n * Text censoring non-destructively maintains whitespace characters in order to preserve text shape\n * during replay.\n */\nexport var censorText = function (text) { return text.replace(/\\S/g, TEXT_MASKING_CHAR); };\nexport function getTextContent(textNode, ignoreWhiteSpace, parentNodePrivacyLevel) {\n    var _a;\n    // The parent node may not be a html element which has a tagName attribute.\n    // So just let it be undefined which is ok in this use case.\n    var parentTagName = (_a = textNode.parentElement) === null || _a === void 0 ? void 0 : _a.tagName;\n    var textContent = textNode.textContent || '';\n    if (ignoreWhiteSpace && !textContent.trim()) {\n        return;\n    }\n    var nodePrivacyLevel = parentNodePrivacyLevel;\n    var isScript = parentTagName === 'SCRIPT';\n    if (isScript) {\n        // For perf reasons, we don't record script (heuristic)\n        textContent = CENSORED_STRING_MARK;\n    }\n    else if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        // Should never occur, but just in case, we set to CENSORED_MARK.\n        textContent = CENSORED_STRING_MARK;\n    }\n    else if (shouldMaskNode(textNode, nodePrivacyLevel)) {\n        if (\n        // Scrambling the child list breaks text nodes for DATALIST/SELECT/OPTGROUP\n        parentTagName === 'DATALIST' ||\n            parentTagName === 'SELECT' ||\n            parentTagName === 'OPTGROUP') {\n            if (!textContent.trim()) {\n                return;\n            }\n        }\n        else if (parentTagName === 'OPTION') {\n            // <Option> has low entropy in charset + text length, so use `CENSORED_STRING_MARK` when masked\n            textContent = CENSORED_STRING_MARK;\n        }\n        else {\n            textContent = censorText(textContent);\n        }\n    }\n    return textContent;\n}\n/**\n * TODO: Preserve CSS element order, and record the presence of the tag, just don't render\n * We don't need this logic on the recorder side.\n * For security related meta's, customer can mask themmanually given they\n * are easy to identify in the HEAD tag.\n */\nexport function shouldIgnoreElement(element) {\n    if (element.nodeName === 'SCRIPT') {\n        return true;\n    }\n    if (element.nodeName === 'LINK') {\n        var relAttribute = getLowerCaseAttribute('rel');\n        return (\n        // Link as script - Ignore only when rel=preload, modulepreload or prefetch\n        (/preload|prefetch/i.test(relAttribute) && getLowerCaseAttribute('as') === 'script') ||\n            // Favicons\n            relAttribute === 'shortcut icon' ||\n            relAttribute === 'icon');\n    }\n    if (element.nodeName === 'META') {\n        var nameAttribute = getLowerCaseAttribute('name');\n        var relAttribute = getLowerCaseAttribute('rel');\n        var propertyAttribute = getLowerCaseAttribute('property');\n        return (\n        // Favicons\n        /^msapplication-tile(image|color)$/.test(nameAttribute) ||\n            nameAttribute === 'application-name' ||\n            relAttribute === 'icon' ||\n            relAttribute === 'apple-touch-icon' ||\n            relAttribute === 'shortcut icon' ||\n            // Description\n            nameAttribute === 'keywords' ||\n            nameAttribute === 'description' ||\n            // Social\n            /^(og|twitter|fb):/.test(propertyAttribute) ||\n            /^(og|twitter):/.test(nameAttribute) ||\n            nameAttribute === 'pinterest' ||\n            // Robots\n            nameAttribute === 'robots' ||\n            nameAttribute === 'googlebot' ||\n            nameAttribute === 'bingbot' ||\n            // Http headers. Ex: X-UA-Compatible, Content-Type, Content-Language, cache-control,\n            // X-Translated-By\n            element.hasAttribute('http-equiv') ||\n            // Authorship\n            nameAttribute === 'author' ||\n            nameAttribute === 'generator' ||\n            nameAttribute === 'framework' ||\n            nameAttribute === 'publisher' ||\n            nameAttribute === 'progid' ||\n            /^article:/.test(propertyAttribute) ||\n            /^product:/.test(propertyAttribute) ||\n            // Verification\n            nameAttribute === 'google-site-verification' ||\n            nameAttribute === 'yandex-verification' ||\n            nameAttribute === 'csrf-token' ||\n            nameAttribute === 'p:domain_verify' ||\n            nameAttribute === 'verify-v1' ||\n            nameAttribute === 'verification' ||\n            nameAttribute === 'shopify-checkout-api-token');\n    }\n    function getLowerCaseAttribute(name) {\n        return (element.getAttribute(name) || '').toLowerCase();\n    }\n    return false;\n}\nexport function getPrivacySelector(privacyLevel) {\n    return \"[\".concat(PRIVACY_ATTR_NAME, \"=\\\"\").concat(privacyLevel, \"\\\"], .\").concat(PRIVACY_CLASS_PREFIX).concat(privacyLevel);\n}\n//# sourceMappingURL=privacy.js.map","import { safeTruncate, isIE, find } from '@datadog/browser-core';\nimport { getParentElement } from '../../browser/polyfills';\nimport { NodePrivacyLevel, getPrivacySelector } from '../privacy';\n/**\n * Get the action name from the attribute 'data-dd-action-name' on the element or any of its parent.\n * It can also be retrieved from a user defined attribute.\n */\nexport var DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE = 'data-dd-action-name';\nexport var ACTION_NAME_PLACEHOLDER = 'Masked Element';\nexport function getActionNameFromElement(element, _a, nodePrivacyLevel) {\n    var enablePrivacyForActionName = _a.enablePrivacyForActionName, userProgrammaticAttribute = _a.actionNameAttribute;\n    // Proceed to get the action name in two steps:\n    // * first, get the name programmatically, explicitly defined by the user.\n    // * then, if privacy is set to mask, return a placeholder for the undefined.\n    // * if privacy is not set to mask, use strategies that are known to return good results.\n    //   Those strategies will be used on the element and a few parents, but it's likely that they won't succeed at all.\n    // * if no name is found this way, use strategies returning less accurate names as a fallback.\n    //   Those are much likely to succeed.\n    var defaultActionName = getActionNameFromElementProgrammatically(element, DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE) ||\n        (userProgrammaticAttribute && getActionNameFromElementProgrammatically(element, userProgrammaticAttribute));\n    if (defaultActionName) {\n        return { name: defaultActionName, nameSource: \"custom_attribute\" /* ActionNameSource.CUSTOM_ATTRIBUTE */ };\n    }\n    else if (nodePrivacyLevel === NodePrivacyLevel.MASK) {\n        return { name: ACTION_NAME_PLACEHOLDER, nameSource: \"mask_placeholder\" /* ActionNameSource.MASK_PLACEHOLDER */ };\n    }\n    return (getActionNameFromElementForStrategies(element, userProgrammaticAttribute, priorityStrategies, enablePrivacyForActionName) ||\n        getActionNameFromElementForStrategies(element, userProgrammaticAttribute, fallbackStrategies, enablePrivacyForActionName) || { name: '', nameSource: \"blank\" /* ActionNameSource.BLANK */ });\n}\nfunction getActionNameFromElementProgrammatically(targetElement, programmaticAttribute) {\n    var elementWithAttribute;\n    // We don't use getActionNameFromElementForStrategies here, because we want to consider all parents,\n    // without limit. It is up to the user to declare a relevant naming strategy.\n    // If available, use element.closest() to match get the attribute from the element or any of its\n    // parent.  Else fallback to a more traditional implementation.\n    if (supportsElementClosest()) {\n        elementWithAttribute = targetElement.closest(\"[\".concat(programmaticAttribute, \"]\"));\n    }\n    else {\n        var element = targetElement;\n        while (element) {\n            if (element.hasAttribute(programmaticAttribute)) {\n                elementWithAttribute = element;\n                break;\n            }\n            element = getParentElement(element);\n        }\n    }\n    if (!elementWithAttribute) {\n        return;\n    }\n    var name = elementWithAttribute.getAttribute(programmaticAttribute);\n    return truncate(normalizeWhitespace(name.trim()));\n}\nvar priorityStrategies = [\n    // associated LABEL text\n    function (element, userProgrammaticAttribute, privacy) {\n        // IE does not support element.labels, so we fallback to a CSS selector based on the element id\n        // instead\n        if (supportsLabelProperty()) {\n            if ('labels' in element && element.labels && element.labels.length > 0) {\n                return getActionNameFromTextualContent(element.labels[0], userProgrammaticAttribute);\n            }\n        }\n        else if (element.id) {\n            var label = element.ownerDocument &&\n                find(element.ownerDocument.querySelectorAll('label'), function (label) { return label.htmlFor === element.id; });\n            return label && getActionNameFromTextualContent(label, userProgrammaticAttribute, privacy);\n        }\n    },\n    // INPUT button (and associated) value\n    function (element) {\n        if (element.nodeName === 'INPUT') {\n            var input = element;\n            var type = input.getAttribute('type');\n            if (type === 'button' || type === 'submit' || type === 'reset') {\n                return { name: input.value, nameSource: \"text_content\" /* ActionNameSource.TEXT_CONTENT */ };\n            }\n        }\n    },\n    // BUTTON, LABEL or button-like element text\n    function (element, userProgrammaticAttribute, privacyEnabledActionName) {\n        if (element.nodeName === 'BUTTON' || element.nodeName === 'LABEL' || element.getAttribute('role') === 'button') {\n            return getActionNameFromTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName);\n        }\n    },\n    function (element) { return getActionNameFromStandardAttribute(element, 'aria-label'); },\n    // associated element text designated by the aria-labelledby attribute\n    function (element, userProgrammaticAttribute, privacyEnabledActionName) {\n        var labelledByAttribute = element.getAttribute('aria-labelledby');\n        if (labelledByAttribute) {\n            return {\n                name: labelledByAttribute\n                    .split(/\\s+/)\n                    .map(function (id) { return getElementById(element, id); })\n                    .filter(function (label) { return Boolean(label); })\n                    .map(function (element) { return getTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName); })\n                    .join(' '),\n                nameSource: \"text_content\" /* ActionNameSource.TEXT_CONTENT */,\n            };\n        }\n    },\n    function (element) { return getActionNameFromStandardAttribute(element, 'alt'); },\n    function (element) { return getActionNameFromStandardAttribute(element, 'name'); },\n    function (element) { return getActionNameFromStandardAttribute(element, 'title'); },\n    function (element) { return getActionNameFromStandardAttribute(element, 'placeholder'); },\n    // SELECT first OPTION text\n    function (element, userProgrammaticAttribute) {\n        if ('options' in element && element.options.length > 0) {\n            return getActionNameFromTextualContent(element.options[0], userProgrammaticAttribute);\n        }\n    },\n];\nvar fallbackStrategies = [\n    function (element, userProgrammaticAttribute, privacyEnabledActionName) {\n        return getActionNameFromTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName);\n    },\n];\n/**\n * Iterates over the target element and its parent, using the strategies list to get an action name.\n * Each strategies are applied on each element, stopping as soon as a non-empty value is returned.\n */\nvar MAX_PARENTS_TO_CONSIDER = 10;\nfunction getActionNameFromElementForStrategies(targetElement, userProgrammaticAttribute, strategies, privacyEnabledActionName) {\n    var element = targetElement;\n    var recursionCounter = 0;\n    while (recursionCounter <= MAX_PARENTS_TO_CONSIDER &&\n        element &&\n        element.nodeName !== 'BODY' &&\n        element.nodeName !== 'HTML' &&\n        element.nodeName !== 'HEAD') {\n        for (var _i = 0, strategies_1 = strategies; _i < strategies_1.length; _i++) {\n            var strategy = strategies_1[_i];\n            var actionName = strategy(element, userProgrammaticAttribute, privacyEnabledActionName);\n            if (actionName) {\n                var name_1 = actionName.name, nameSource = actionName.nameSource;\n                var trimmedName = name_1 && name_1.trim();\n                if (trimmedName) {\n                    return { name: truncate(normalizeWhitespace(trimmedName)), nameSource: nameSource };\n                }\n            }\n        }\n        // Consider a FORM as a contextual limit to get the action name.  This is experimental and may\n        // be reconsidered in the future.\n        if (element.nodeName === 'FORM') {\n            break;\n        }\n        element = getParentElement(element);\n        recursionCounter += 1;\n    }\n}\nfunction normalizeWhitespace(s) {\n    return s.replace(/\\s+/g, ' ');\n}\nfunction truncate(s) {\n    return s.length > 100 ? \"\".concat(safeTruncate(s, 100), \" [...]\") : s;\n}\nfunction getElementById(refElement, id) {\n    // Use the element ownerDocument here, because tests are executed in an iframe, so\n    // document.getElementById won't work.\n    return refElement.ownerDocument ? refElement.ownerDocument.getElementById(id) : null;\n}\nfunction getActionNameFromStandardAttribute(element, attribute) {\n    return {\n        name: element.getAttribute(attribute) || '',\n        nameSource: \"standard_attribute\" /* ActionNameSource.STANDARD_ATTRIBUTE */,\n    };\n}\nfunction getActionNameFromTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName) {\n    return {\n        name: getTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName) || '',\n        nameSource: \"text_content\" /* ActionNameSource.TEXT_CONTENT */,\n    };\n}\nfunction getTextualContent(element, userProgrammaticAttribute, privacyEnabledActionName) {\n    if (element.isContentEditable) {\n        return;\n    }\n    if ('innerText' in element) {\n        var text_1 = element.innerText;\n        var removeTextFromElements = function (query) {\n            var list = element.querySelectorAll(query);\n            for (var index = 0; index < list.length; index += 1) {\n                var element_1 = list[index];\n                if ('innerText' in element_1) {\n                    var textToReplace = element_1.innerText;\n                    if (textToReplace && textToReplace.trim().length > 0) {\n                        text_1 = text_1.replace(textToReplace, '');\n                    }\n                }\n            }\n        };\n        if (!supportsInnerTextScriptAndStyleRemoval()) {\n            // remove the inner text of SCRIPT and STYLES from the result. This is a bit dirty, but should\n            // be relatively fast and work in most cases.\n            removeTextFromElements('script, style');\n        }\n        // remove the text of elements with programmatic attribute value\n        removeTextFromElements(\"[\".concat(DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE, \"]\"));\n        if (userProgrammaticAttribute) {\n            removeTextFromElements(\"[\".concat(userProgrammaticAttribute, \"]\"));\n        }\n        if (privacyEnabledActionName) {\n            // remove the text of elements with privacy override\n            removeTextFromElements(\"\".concat(getPrivacySelector(NodePrivacyLevel.HIDDEN), \", \").concat(getPrivacySelector(NodePrivacyLevel.MASK)));\n        }\n        return text_1;\n    }\n    return element.textContent;\n}\n/**\n * Returns true if element.innerText excludes the text from inline SCRIPT and STYLE element. This\n * should be the case everywhere except on Internet Explorer 10 and 11 (see [1])\n *\n * The innerText property relies on what is actually rendered to compute its output, so to check if\n * it actually excludes SCRIPT and STYLE content, a solution would be to create a style element, set\n * its content to '*', inject it in the document body, and check if the style element innerText\n * property returns '*'. Using a new `document` instance won't work as it is not rendered.\n *\n * This solution requires specific CSP rules (see [2]) to be set by the customer. We want to avoid\n * this, so instead we rely on browser detection. In case of false negative, the impact should be\n * low, since we rely on this result to remove the SCRIPT and STYLE innerText (which will be empty)\n * from a parent element innerText.\n *\n * [1]: https://web.archive.org/web/20210602165716/http://perfectionkills.com/the-poor-misunderstood-innerText/#diff-with-textContent\n * [2]: https://github.com/DataDog/browser-sdk/issues/1084\n */\nfunction supportsInnerTextScriptAndStyleRemoval() {\n    return !isIE();\n}\n/**\n * Returns true if the browser supports the element.labels property.  This should be the case\n * everywhere except on Internet Explorer.\n * Note: The result is computed lazily, because we don't want any DOM access when the SDK is\n * evaluated.\n */\nvar supportsLabelPropertyResult;\nfunction supportsLabelProperty() {\n    if (supportsLabelPropertyResult === undefined) {\n        supportsLabelPropertyResult = 'labels' in HTMLInputElement.prototype;\n    }\n    return supportsLabelPropertyResult;\n}\n/**\n * Returns true if the browser supports the element.closest method.  This should be the case\n * everywhere except on Internet Explorer.\n * Note: The result is computed lazily, because we don't want any DOM access when the SDK is\n * evaluated.\n */\nvar supportsElementClosestResult;\nfunction supportsElementClosest() {\n    if (supportsElementClosestResult === undefined) {\n        supportsElementClosestResult = 'closest' in HTMLElement.prototype;\n    }\n    return supportsElementClosestResult;\n}\n//# sourceMappingURL=getActionNameFromElement.js.map","import { cssEscape, elementMatches, getClassList, getParentElement } from '../browser/polyfills';\nimport { DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE } from './action/getActionNameFromElement';\n/**\n * Stable attributes are attributes that are commonly used to identify parts of a UI (ex:\n * component). Those attribute values should not be generated randomly (hardcoded most of the time)\n * and stay the same across deploys. They are not necessarily unique across the document.\n */\nexport var STABLE_ATTRIBUTES = [\n    DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE,\n    // Common test attributes (list provided by google recorder)\n    'data-testid',\n    'data-test',\n    'data-qa',\n    'data-cy',\n    'data-test-id',\n    'data-qa-id',\n    'data-testing',\n    // FullStory decorator attributes:\n    'data-component',\n    'data-element',\n    'data-source-file',\n];\n// Selectors to use if they target a single element on the whole document. Those selectors are\n// considered as \"stable\" and uniquely identify an element regardless of the page state. If we find\n// one, we should consider the selector \"complete\" and stop iterating over ancestors.\nvar GLOBALLY_UNIQUE_SELECTOR_GETTERS = [getStableAttributeSelector, getIDSelector];\n// Selectors to use if they target a single element among an element descendants. Those selectors\n// are more brittle than \"globally unique\" selectors and should be combined with ancestor selectors\n// to improve specificity.\nvar UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS = [\n    getStableAttributeSelector,\n    getClassSelector,\n    getTagNameSelector,\n];\nexport function getSelectorFromElement(targetElement, actionNameAttribute) {\n    if (!isConnected(targetElement)) {\n        // We cannot compute a selector for a detached element, as we don't have access to all of its\n        // parents, and we cannot determine if it's unique in the document.\n        return;\n    }\n    var targetElementSelector;\n    var currentElement = targetElement;\n    while (currentElement && currentElement.nodeName !== 'HTML') {\n        var globallyUniqueSelector = findSelector(currentElement, GLOBALLY_UNIQUE_SELECTOR_GETTERS, isSelectorUniqueGlobally, actionNameAttribute, targetElementSelector);\n        if (globallyUniqueSelector) {\n            return globallyUniqueSelector;\n        }\n        var uniqueSelectorAmongChildren = findSelector(currentElement, UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS, isSelectorUniqueAmongSiblings, actionNameAttribute, targetElementSelector);\n        targetElementSelector =\n            uniqueSelectorAmongChildren || combineSelector(getPositionSelector(currentElement), targetElementSelector);\n        currentElement = getParentElement(currentElement);\n    }\n    return targetElementSelector;\n}\nfunction isGeneratedValue(value) {\n    // To compute the \"URL path group\", the backend replaces every URL path parts as a question mark\n    // if it thinks the part is an identifier. The condition it uses is to checks whether a digit is\n    // present.\n    //\n    // Here, we use the same strategy: if the value contains a digit, we consider it generated. This\n    // strategy might be a bit naive and fail in some cases, but there are many fallbacks to generate\n    // CSS selectors so it should be fine most of the time.\n    return /[0-9]/.test(value);\n}\nfunction getIDSelector(element) {\n    if (element.id && !isGeneratedValue(element.id)) {\n        return \"#\".concat(cssEscape(element.id));\n    }\n}\nfunction getClassSelector(element) {\n    if (element.tagName === 'BODY') {\n        return;\n    }\n    var classList = getClassList(element);\n    for (var i = 0; i < classList.length; i += 1) {\n        var className = classList[i];\n        if (isGeneratedValue(className)) {\n            continue;\n        }\n        return \"\".concat(cssEscape(element.tagName), \".\").concat(cssEscape(className));\n    }\n}\nfunction getTagNameSelector(element) {\n    return cssEscape(element.tagName);\n}\nfunction getStableAttributeSelector(element, actionNameAttribute) {\n    if (actionNameAttribute) {\n        var selector = getAttributeSelector(actionNameAttribute);\n        if (selector) {\n            return selector;\n        }\n    }\n    for (var _i = 0, STABLE_ATTRIBUTES_1 = STABLE_ATTRIBUTES; _i < STABLE_ATTRIBUTES_1.length; _i++) {\n        var attributeName = STABLE_ATTRIBUTES_1[_i];\n        var selector = getAttributeSelector(attributeName);\n        if (selector) {\n            return selector;\n        }\n    }\n    function getAttributeSelector(attributeName) {\n        if (element.hasAttribute(attributeName)) {\n            return \"\".concat(cssEscape(element.tagName), \"[\").concat(attributeName, \"=\\\"\").concat(cssEscape(element.getAttribute(attributeName)), \"\\\"]\");\n        }\n    }\n}\nfunction getPositionSelector(element) {\n    var sibling = getParentElement(element).firstElementChild;\n    var elementIndex = 1;\n    while (sibling && sibling !== element) {\n        if (sibling.tagName === element.tagName) {\n            elementIndex += 1;\n        }\n        sibling = sibling.nextElementSibling;\n    }\n    return \"\".concat(cssEscape(element.tagName), \":nth-of-type(\").concat(elementIndex, \")\");\n}\nfunction findSelector(element, selectorGetters, predicate, actionNameAttribute, childSelector) {\n    for (var _i = 0, selectorGetters_1 = selectorGetters; _i < selectorGetters_1.length; _i++) {\n        var selectorGetter = selectorGetters_1[_i];\n        var elementSelector = selectorGetter(element, actionNameAttribute);\n        if (!elementSelector) {\n            continue;\n        }\n        if (predicate(element, elementSelector, childSelector)) {\n            return combineSelector(elementSelector, childSelector);\n        }\n    }\n}\n/**\n * Check whether the selector is unique among the whole document.\n */\nfunction isSelectorUniqueGlobally(element, elementSelector, childSelector) {\n    return element.ownerDocument.querySelectorAll(combineSelector(elementSelector, childSelector)).length === 1;\n}\n/**\n * Check whether the selector is unique among the element siblings. In other words, it returns true\n * if \"ELEMENT_PARENT > CHILD_SELECTOR\" returns a single element.\n *\n * @param {Element} currentElement - the element being considered while iterating over the target\n * element ancestors.\n *\n * @param {string} currentElementSelector - a selector that matches the current element. That\n * selector is not a composed selector (i.e. it might be a single tag name, class name...).\n *\n * @param {string|undefined} childSelector - child selector is a selector that targets a descendant\n * of the current element. When undefined, the current element is the target element.\n *\n * # Scope selector usage\n *\n * When composed together, the final selector will be joined with `>` operators to make sure we\n * target direct descendants at each level. In this function, we'll use `querySelector` to check if\n * a selector matches descendants of the current element. But by default, the query selector match\n * elements at any level. Example:\n *\n * ```html\n * <main>\n *   <div>\n *     <span></span>\n *   </div>\n *   <marquee>\n *     <div>\n *       <span></span>\n *     </div>\n *   </marquee>\n * </main>\n * ```\n *\n * `sibling.querySelector('DIV > SPAN')` will match both span elements, so we would consider the\n * selector to be not unique, even if it is unique when we'll compose it with the parent with a `>`\n * operator (`MAIN > DIV > SPAN`).\n *\n * To avoid this, we can use the `:scope` selector to make sure the selector starts from the current\n * sibling (i.e. `sibling.querySelector('DIV:scope > SPAN')` will only match the first span).\n *\n * The result will be less accurate on browsers that don't support :scope (i. e. IE): it will check\n * for any element matching the selector contained in the parent (in other words,\n * \"ELEMENT_PARENT CHILD_SELECTOR\" returns a single element), regardless of whether the selector is\n * a direct descendant of the element parent. This should not impact results too much: if it\n * inaccurately returns false, we'll just fall back to another strategy.\n *\n * [1]: https://developer.mozilla.org/fr/docs/Web/CSS/:scope\n *\n * # Performance considerations\n *\n * We compute selectors in performance-critical operations (ex: during a click), so we need to make\n * sure the function is as fast as possible. We observed that naively using `querySelectorAll` to\n * check if the selector matches more than 1 element is quite expensive, so we want to avoid it.\n *\n * Because we are iterating the DOM upward and we use that function at every level, we know the\n * child selector is already unique among the current element children, so we don't need to check\n * for the current element subtree.\n *\n * Instead, we can focus on the current element siblings. If we find a single element matching the\n * selector within a sibling, we know that it's not unique. This allows us to use `querySelector`\n * (or `matches`, when the current element is the target element) instead of `querySelectorAll`.\n */\nexport function isSelectorUniqueAmongSiblings(currentElement, currentElementSelector, childSelector) {\n    var isSiblingMatching;\n    if (childSelector === undefined) {\n        // If the child selector is undefined (meaning `currentElement` is the target element, not one\n        // of its ancestor), we need to use `matches` to check if the sibling is matching the selector,\n        // as `querySelector` only returns a descendant of the element.\n        isSiblingMatching = function (sibling) { return elementMatches(sibling, currentElementSelector); };\n    }\n    else {\n        var scopedSelector_1 = supportScopeSelector()\n            ? combineSelector(\"\".concat(currentElementSelector, \":scope\"), childSelector)\n            : combineSelector(currentElementSelector, childSelector);\n        isSiblingMatching = function (sibling) { return sibling.querySelector(scopedSelector_1) !== null; };\n    }\n    var parent = getParentElement(currentElement);\n    var sibling = parent.firstElementChild;\n    while (sibling) {\n        if (sibling !== currentElement && isSiblingMatching(sibling)) {\n            return false;\n        }\n        sibling = sibling.nextElementSibling;\n    }\n    return true;\n}\nfunction combineSelector(parent, child) {\n    return child ? \"\".concat(parent, \">\").concat(child) : parent;\n}\nvar supportScopeSelectorCache;\nexport function supportScopeSelector() {\n    if (supportScopeSelectorCache === undefined) {\n        try {\n            document.querySelector(':scope');\n            supportScopeSelectorCache = true;\n        }\n        catch (_a) {\n            supportScopeSelectorCache = false;\n        }\n    }\n    return supportScopeSelectorCache;\n}\n/**\n * Polyfill-utility for the `isConnected` property not supported in IE11\n */\nfunction isConnected(element) {\n    if ('isConnected' in\n        // cast is to make sure `element` is not inferred as `never` after the check\n        element) {\n        return element.isConnected;\n    }\n    return element.ownerDocument.documentElement.contains(element);\n}\n//# sourceMappingURL=getSelectorFromElement.js.map","import { ONE_SECOND, clearTimeout, setTimeout } from '@datadog/browser-core';\nexport var MAX_DURATION_BETWEEN_CLICKS = ONE_SECOND;\nexport var MAX_DISTANCE_BETWEEN_CLICKS = 100;\nexport function createClickChain(firstClick, onFinalize) {\n    var bufferedClicks = [];\n    var status = 0 /* ClickChainStatus.WaitingForMoreClicks */;\n    var maxDurationBetweenClicksTimeoutId;\n    appendClick(firstClick);\n    function appendClick(click) {\n        click.stopObservable.subscribe(tryFinalize);\n        bufferedClicks.push(click);\n        clearTimeout(maxDurationBetweenClicksTimeoutId);\n        maxDurationBetweenClicksTimeoutId = setTimeout(dontAcceptMoreClick, MAX_DURATION_BETWEEN_CLICKS);\n    }\n    function tryFinalize() {\n        if (status === 1 /* ClickChainStatus.WaitingForClicksToStop */ && bufferedClicks.every(function (click) { return click.isStopped(); })) {\n            status = 2 /* ClickChainStatus.Finalized */;\n            onFinalize(bufferedClicks);\n        }\n    }\n    function dontAcceptMoreClick() {\n        clearTimeout(maxDurationBetweenClicksTimeoutId);\n        if (status === 0 /* ClickChainStatus.WaitingForMoreClicks */) {\n            status = 1 /* ClickChainStatus.WaitingForClicksToStop */;\n            tryFinalize();\n        }\n    }\n    return {\n        tryAppend: function (click) {\n            if (status !== 0 /* ClickChainStatus.WaitingForMoreClicks */) {\n                return false;\n            }\n            if (bufferedClicks.length > 0 &&\n                !areEventsSimilar(bufferedClicks[bufferedClicks.length - 1].event, click.event)) {\n                dontAcceptMoreClick();\n                return false;\n            }\n            appendClick(click);\n            return true;\n        },\n        stop: function () {\n            dontAcceptMoreClick();\n        },\n    };\n}\n/**\n * Checks whether two events are similar by comparing their target, position and timestamp\n */\nfunction areEventsSimilar(first, second) {\n    return (first.target === second.target &&\n        mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS &&\n        first.timeStamp - second.timeStamp <= MAX_DURATION_BETWEEN_CLICKS);\n}\nfunction mouseEventDistance(origin, other) {\n    return Math.sqrt(Math.pow(origin.clientX - other.clientX, 2) + Math.pow(origin.clientY - other.clientY, 2));\n}\n//# sourceMappingURL=clickChain.js.map","import { addEventListener } from '@datadog/browser-core';\nexport function listenActionEvents(configuration, _a) {\n    var onPointerDown = _a.onPointerDown, onPointerUp = _a.onPointerUp;\n    var selectionEmptyAtPointerDown;\n    var userActivity = {\n        selection: false,\n        input: false,\n        scroll: false,\n    };\n    var clickContext;\n    var listeners = [\n        addEventListener(configuration, window, \"pointerdown\" /* DOM_EVENT.POINTER_DOWN */, function (event) {\n            if (isValidPointerEvent(event)) {\n                selectionEmptyAtPointerDown = isSelectionEmpty();\n                userActivity = {\n                    selection: false,\n                    input: false,\n                    scroll: false,\n                };\n                clickContext = onPointerDown(event);\n            }\n        }, { capture: true }),\n        addEventListener(configuration, window, \"selectionchange\" /* DOM_EVENT.SELECTION_CHANGE */, function () {\n            if (!selectionEmptyAtPointerDown || !isSelectionEmpty()) {\n                userActivity.selection = true;\n            }\n        }, { capture: true }),\n        addEventListener(configuration, window, \"scroll\" /* DOM_EVENT.SCROLL */, function () {\n            userActivity.scroll = true;\n        }, { capture: true, passive: true }),\n        addEventListener(configuration, window, \"pointerup\" /* DOM_EVENT.POINTER_UP */, function (event) {\n            if (isValidPointerEvent(event) && clickContext) {\n                // Use a scoped variable to make sure the value is not changed by other clicks\n                var localUserActivity_1 = userActivity;\n                onPointerUp(clickContext, event, function () { return localUserActivity_1; });\n                clickContext = undefined;\n            }\n        }, { capture: true }),\n        addEventListener(configuration, window, \"input\" /* DOM_EVENT.INPUT */, function () {\n            userActivity.input = true;\n        }, { capture: true }),\n    ];\n    return {\n        stop: function () {\n            listeners.forEach(function (listener) { return listener.stop(); });\n        },\n    };\n}\nfunction isSelectionEmpty() {\n    var selection = window.getSelection();\n    return !selection || selection.isCollapsed;\n}\nfunction isValidPointerEvent(event) {\n    return (event.target instanceof Element &&\n        // Only consider 'primary' pointer events for now. Multi-touch support could be implemented in\n        // the future.\n        event.isPrimary !== false);\n}\n//# sourceMappingURL=listenActionEvents.js.map","import { ONE_SECOND } from '@datadog/browser-core';\nimport { elementMatches } from '../../browser/polyfills';\nvar MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE = 3;\nexport function computeFrustration(clicks, rageClick) {\n    if (isRage(clicks)) {\n        rageClick.addFrustration(\"rage_click\" /* FrustrationType.RAGE_CLICK */);\n        if (clicks.some(isDead)) {\n            rageClick.addFrustration(\"dead_click\" /* FrustrationType.DEAD_CLICK */);\n        }\n        if (rageClick.hasError) {\n            rageClick.addFrustration(\"error_click\" /* FrustrationType.ERROR_CLICK */);\n        }\n        return { isRage: true };\n    }\n    var hasSelectionChanged = clicks.some(function (click) { return click.getUserActivity().selection; });\n    clicks.forEach(function (click) {\n        if (click.hasError) {\n            click.addFrustration(\"error_click\" /* FrustrationType.ERROR_CLICK */);\n        }\n        if (isDead(click) &&\n            // Avoid considering clicks part of a double-click or triple-click selections as dead clicks\n            !hasSelectionChanged) {\n            click.addFrustration(\"dead_click\" /* FrustrationType.DEAD_CLICK */);\n        }\n    });\n    return { isRage: false };\n}\nexport function isRage(clicks) {\n    if (clicks.some(function (click) { return click.getUserActivity().selection || click.getUserActivity().scroll; })) {\n        return false;\n    }\n    for (var i = 0; i < clicks.length - (MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1); i += 1) {\n        if (clicks[i + MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1].event.timeStamp - clicks[i].event.timeStamp <=\n            ONE_SECOND) {\n            return true;\n        }\n    }\n    return false;\n}\nvar DEAD_CLICK_EXCLUDE_SELECTOR = \n// inputs that don't trigger a meaningful event like \"input\" when clicked, including textual\n// inputs (using a negative selector is shorter here)\n'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"button\"]):not([type=\"submit\"]):not([type=\"reset\"]):not([type=\"range\"]),' +\n    'textarea,' +\n    'select,' +\n    // contenteditable and their descendants don't always trigger meaningful changes when manipulated\n    '[contenteditable],' +\n    '[contenteditable] *,' +\n    // canvas, as there is no good way to detect activity occurring on them\n    'canvas,' +\n    // links that are interactive (have an href attribute) or any of their descendants, as they can\n    // open a new tab or navigate to a hash without triggering a meaningful event\n    'a[href],' +\n    'a[href] *';\nexport function isDead(click) {\n    if (click.hasPageActivity || click.getUserActivity().input || click.getUserActivity().scroll) {\n        return false;\n    }\n    return !elementMatches(click.event.target, DEAD_CLICK_EXCLUDE_SELECTOR);\n}\n//# sourceMappingURL=computeFrustration.js.map","import { elapsed, ONE_SECOND, relativeNow } from '@datadog/browser-core';\n// Maximum duration for click actions\nexport var CLICK_ACTION_MAX_DURATION = 10 * ONE_SECOND;\nexport var interactionSelectorCache = new Map();\nexport function getInteractionSelector(relativeTimestamp) {\n    var selector = interactionSelectorCache.get(relativeTimestamp);\n    interactionSelectorCache.delete(relativeTimestamp);\n    return selector;\n}\nexport function updateInteractionSelector(relativeTimestamp, selector) {\n    interactionSelectorCache.set(relativeTimestamp, selector);\n    interactionSelectorCache.forEach(function (_, relativeTimestamp) {\n        if (elapsed(relativeTimestamp, relativeNow()) > CLICK_ACTION_MAX_DURATION) {\n            interactionSelectorCache.delete(relativeTimestamp);\n        }\n    });\n}\n//# sourceMappingURL=interactionSelectorCache.js.map","import { includes, timeStampNow, Observable, assign, getRelativeTime, ONE_MINUTE, generateUUID, clocksNow, elapsed, createValueHistory, } from '@datadog/browser-core';\nimport { trackEventCounts } from '../trackEventCounts';\nimport { PAGE_ACTIVITY_VALIDATION_DELAY, waitPageActivityEnd } from '../waitPageActivityEnd';\nimport { getSelectorFromElement } from '../getSelectorFromElement';\nimport { getNodePrivacyLevel, NodePrivacyLevel } from '../privacy';\nimport { createClickChain } from './clickChain';\nimport { getActionNameFromElement } from './getActionNameFromElement';\nimport { listenActionEvents } from './listenActionEvents';\nimport { computeFrustration } from './computeFrustration';\nimport { CLICK_ACTION_MAX_DURATION, updateInteractionSelector } from './interactionSelectorCache';\nexport var ACTION_CONTEXT_TIME_OUT_DELAY = 5 * ONE_MINUTE; // arbitrary\nexport function trackClickActions(lifeCycle, domMutationObservable, windowOpenObservable, configuration) {\n    var history = createValueHistory({ expireDelay: ACTION_CONTEXT_TIME_OUT_DELAY });\n    var stopObservable = new Observable();\n    var currentClickChain;\n    lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n        history.reset();\n    });\n    lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, stopClickChain);\n    var stopActionEventsListener = listenActionEvents(configuration, {\n        onPointerDown: function (pointerDownEvent) {\n            return processPointerDown(configuration, lifeCycle, domMutationObservable, pointerDownEvent, windowOpenObservable);\n        },\n        onPointerUp: function (_a, startEvent, getUserActivity) {\n            var clickActionBase = _a.clickActionBase, hadActivityOnPointerDown = _a.hadActivityOnPointerDown;\n            startClickAction(configuration, lifeCycle, domMutationObservable, windowOpenObservable, history, stopObservable, appendClickToClickChain, clickActionBase, startEvent, getUserActivity, hadActivityOnPointerDown);\n        },\n    }).stop;\n    var actionContexts = {\n        findActionId: function (startTime) { return history.findAll(startTime); },\n    };\n    return {\n        stop: function () {\n            stopClickChain();\n            stopObservable.notify();\n            stopActionEventsListener();\n        },\n        actionContexts: actionContexts,\n    };\n    function appendClickToClickChain(click) {\n        if (!currentClickChain || !currentClickChain.tryAppend(click)) {\n            var rageClick_1 = click.clone();\n            currentClickChain = createClickChain(click, function (clicks) {\n                finalizeClicks(clicks, rageClick_1);\n            });\n        }\n    }\n    function stopClickChain() {\n        if (currentClickChain) {\n            currentClickChain.stop();\n        }\n    }\n}\nfunction processPointerDown(configuration, lifeCycle, domMutationObservable, pointerDownEvent, windowOpenObservable) {\n    var nodePrivacyLevel = configuration.enablePrivacyForActionName\n        ? getNodePrivacyLevel(pointerDownEvent.target, configuration.defaultPrivacyLevel)\n        : NodePrivacyLevel.ALLOW;\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        return undefined;\n    }\n    var clickActionBase = computeClickActionBase(pointerDownEvent, nodePrivacyLevel, configuration);\n    var hadActivityOnPointerDown = false;\n    waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, function (pageActivityEndEvent) {\n        hadActivityOnPointerDown = pageActivityEndEvent.hadActivity;\n    }, \n    // We don't care about the activity duration, we just want to know whether an activity did happen\n    // within the \"validation delay\" or not. Limit the duration so the callback is called sooner.\n    PAGE_ACTIVITY_VALIDATION_DELAY);\n    return { clickActionBase: clickActionBase, hadActivityOnPointerDown: function () { return hadActivityOnPointerDown; } };\n}\nfunction startClickAction(configuration, lifeCycle, domMutationObservable, windowOpenObservable, history, stopObservable, appendClickToClickChain, clickActionBase, startEvent, getUserActivity, hadActivityOnPointerDown) {\n    var _a;\n    var click = newClick(lifeCycle, history, getUserActivity, clickActionBase, startEvent);\n    appendClickToClickChain(click);\n    var selector = (_a = clickActionBase === null || clickActionBase === void 0 ? void 0 : clickActionBase.target) === null || _a === void 0 ? void 0 : _a.selector;\n    if (selector) {\n        updateInteractionSelector(startEvent.timeStamp, selector);\n    }\n    var stopWaitPageActivityEnd = waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, function (pageActivityEndEvent) {\n        if (pageActivityEndEvent.hadActivity && pageActivityEndEvent.end < click.startClocks.timeStamp) {\n            // If the clock is looking weird, just discard the click\n            click.discard();\n        }\n        else {\n            if (pageActivityEndEvent.hadActivity) {\n                click.stop(pageActivityEndEvent.end);\n            }\n            else if (hadActivityOnPointerDown()) {\n                click.stop(\n                // using the click start as activity end, so the click will have some activity but its\n                // duration will be 0 (as the activity started before the click start)\n                click.startClocks.timeStamp);\n            }\n            else {\n                click.stop();\n            }\n        }\n    }, CLICK_ACTION_MAX_DURATION).stop;\n    var viewEndedSubscription = lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        click.stop(endClocks.timeStamp);\n    });\n    var stopSubscription = stopObservable.subscribe(function () {\n        click.stop();\n    });\n    click.stopObservable.subscribe(function () {\n        viewEndedSubscription.unsubscribe();\n        stopWaitPageActivityEnd();\n        stopSubscription.unsubscribe();\n    });\n}\nfunction computeClickActionBase(event, nodePrivacyLevel, configuration) {\n    var rect = event.target.getBoundingClientRect();\n    var selector = getSelectorFromElement(event.target, configuration.actionNameAttribute);\n    if (selector) {\n        updateInteractionSelector(event.timeStamp, selector);\n    }\n    var actionName = getActionNameFromElement(event.target, configuration, nodePrivacyLevel);\n    return {\n        type: \"click\" /* ActionType.CLICK */,\n        target: {\n            width: Math.round(rect.width),\n            height: Math.round(rect.height),\n            selector: selector,\n        },\n        position: {\n            // Use clientX and Y because for SVG element offsetX and Y are relatives to the <svg> element\n            x: Math.round(event.clientX - rect.left),\n            y: Math.round(event.clientY - rect.top),\n        },\n        name: actionName.name,\n        nameSource: actionName.nameSource,\n    };\n}\nfunction newClick(lifeCycle, history, getUserActivity, clickActionBase, startEvent) {\n    var id = generateUUID();\n    var startClocks = clocksNow();\n    var historyEntry = history.add(id, startClocks.relative);\n    var eventCountsSubscription = trackEventCounts({\n        lifeCycle: lifeCycle,\n        isChildEvent: function (event) {\n            return event.action !== undefined &&\n                (Array.isArray(event.action.id) ? includes(event.action.id, id) : event.action.id === id);\n        },\n    });\n    var status = 0 /* ClickStatus.ONGOING */;\n    var activityEndTime;\n    var frustrationTypes = [];\n    var stopObservable = new Observable();\n    function stop(newActivityEndTime) {\n        if (status !== 0 /* ClickStatus.ONGOING */) {\n            return;\n        }\n        activityEndTime = newActivityEndTime;\n        status = 1 /* ClickStatus.STOPPED */;\n        if (activityEndTime) {\n            historyEntry.close(getRelativeTime(activityEndTime));\n        }\n        else {\n            historyEntry.remove();\n        }\n        eventCountsSubscription.stop();\n        stopObservable.notify();\n    }\n    return {\n        event: startEvent,\n        stop: stop,\n        stopObservable: stopObservable,\n        get hasError() {\n            return eventCountsSubscription.eventCounts.errorCount > 0;\n        },\n        get hasPageActivity() {\n            return activityEndTime !== undefined;\n        },\n        getUserActivity: getUserActivity,\n        addFrustration: function (frustrationType) {\n            frustrationTypes.push(frustrationType);\n        },\n        startClocks: startClocks,\n        isStopped: function () { return status === 1 /* ClickStatus.STOPPED */ || status === 2 /* ClickStatus.FINALIZED */; },\n        clone: function () { return newClick(lifeCycle, history, getUserActivity, clickActionBase, startEvent); },\n        validate: function (domEvents) {\n            stop();\n            if (status !== 1 /* ClickStatus.STOPPED */) {\n                return;\n            }\n            var _a = eventCountsSubscription.eventCounts, resourceCount = _a.resourceCount, errorCount = _a.errorCount, longTaskCount = _a.longTaskCount;\n            var clickAction = assign({\n                type: \"click\" /* ActionType.CLICK */,\n                duration: activityEndTime && elapsed(startClocks.timeStamp, activityEndTime),\n                startClocks: startClocks,\n                id: id,\n                frustrationTypes: frustrationTypes,\n                counts: {\n                    resourceCount: resourceCount,\n                    errorCount: errorCount,\n                    longTaskCount: longTaskCount,\n                },\n                events: domEvents !== null && domEvents !== void 0 ? domEvents : [startEvent],\n                event: startEvent,\n            }, clickActionBase);\n            lifeCycle.notify(0 /* LifeCycleEventType.AUTO_ACTION_COMPLETED */, clickAction);\n            status = 2 /* ClickStatus.FINALIZED */;\n        },\n        discard: function () {\n            stop();\n            status = 2 /* ClickStatus.FINALIZED */;\n        },\n    };\n}\nexport function finalizeClicks(clicks, rageClick) {\n    var isRage = computeFrustration(clicks, rageClick).isRage;\n    if (isRage) {\n        clicks.forEach(function (click) { return click.discard(); });\n        rageClick.stop(timeStampNow());\n        rageClick.validate(clicks.map(function (click) { return click.event; }));\n    }\n    else {\n        rageClick.discard();\n        clicks.forEach(function (click) { return click.validate(); });\n    }\n}\n//# sourceMappingURL=trackClickActions.js.map","import { noop, assign, combine, toServerDuration, generateUUID, ExperimentalFeature, isExperimentalFeatureEnabled, } from '@datadog/browser-core';\nimport { discardNegativeDuration } from '../discardNegativeDuration';\nimport { trackClickActions } from './trackClickActions';\nexport function startActionCollection(lifeCycle, domMutationObservable, windowOpenObservable, configuration, pageStateHistory) {\n    var _a;\n    lifeCycle.subscribe(0 /* LifeCycleEventType.AUTO_ACTION_COMPLETED */, function (action) {\n        return lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, processAction(action, pageStateHistory));\n    });\n    var actionContexts = { findActionId: noop };\n    var stop = noop;\n    if (configuration.trackUserInteractions) {\n        ;\n        (_a = trackClickActions(lifeCycle, domMutationObservable, windowOpenObservable, configuration), actionContexts = _a.actionContexts, stop = _a.stop);\n    }\n    return {\n        addAction: function (action, savedCommonContext) {\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, assign({\n                savedCommonContext: savedCommonContext,\n            }, processAction(action, pageStateHistory)));\n        },\n        actionContexts: actionContexts,\n        stop: stop,\n    };\n}\nfunction processAction(action, pageStateHistory) {\n    var autoActionProperties = isAutoAction(action)\n        ? {\n            action: {\n                id: action.id,\n                loading_time: discardNegativeDuration(toServerDuration(action.duration)),\n                frustration: {\n                    type: action.frustrationTypes,\n                },\n                error: {\n                    count: action.counts.errorCount,\n                },\n                long_task: {\n                    count: action.counts.longTaskCount,\n                },\n                resource: {\n                    count: action.counts.resourceCount,\n                },\n            },\n            _dd: {\n                action: {\n                    target: action.target,\n                    position: action.position,\n                    name_source: isExperimentalFeatureEnabled(ExperimentalFeature.ACTION_NAME_MASKING)\n                        ? action.nameSource\n                        : undefined,\n                },\n            },\n        }\n        : undefined;\n    var customerContext = !isAutoAction(action) ? action.context : undefined;\n    var actionEvent = combine({\n        action: {\n            id: generateUUID(),\n            target: {\n                name: action.name,\n            },\n            type: action.type,\n        },\n        date: action.startClocks.timeStamp,\n        type: \"action\" /* RumEventType.ACTION */,\n        view: { in_foreground: pageStateHistory.wasInPageStateAt(\"active\" /* PageState.ACTIVE */, action.startClocks.relative) },\n    }, autoActionProperties);\n    var domainContext = isAutoAction(action) ? { events: action.events } : {};\n    if (!isAutoAction(action) && action.handlingStack) {\n        domainContext.handlingStack = action.handlingStack;\n    }\n    return {\n        customerContext: customerContext,\n        rawRumEvent: actionEvent,\n        startTime: action.startClocks.relative,\n        domainContext: domainContext,\n    };\n}\nfunction isAutoAction(action) {\n    return action.type !== \"custom\" /* ActionType.CUSTOM */;\n}\n//# sourceMappingURL=actionCollection.js.map","import { instrumentMethod } from '../../tools/instrumentMethod';\nimport { clocksNow } from '../../tools/utils/timeUtils';\nimport { computeStackTrace, computeStackTraceFromOnErrorMessage } from '../../tools/stackTrace/computeStackTrace';\nimport { computeRawError, isError } from './error';\nimport { ErrorSource } from './error.types';\nexport function trackRuntimeError(errorObservable) {\n    var handleRuntimeError = function (stackTrace, originalError) {\n        var rawError = computeRawError({\n            stackTrace: stackTrace,\n            originalError: originalError,\n            startClocks: clocksNow(),\n            nonErrorPrefix: \"Uncaught\" /* NonErrorPrefix.UNCAUGHT */,\n            source: ErrorSource.SOURCE,\n            handling: \"unhandled\" /* ErrorHandling.UNHANDLED */,\n        });\n        errorObservable.notify(rawError);\n    };\n    var stopInstrumentingOnError = instrumentOnError(handleRuntimeError).stop;\n    var stopInstrumentingOnUnhandledRejection = instrumentUnhandledRejection(handleRuntimeError).stop;\n    return {\n        stop: function () {\n            stopInstrumentingOnError();\n            stopInstrumentingOnUnhandledRejection();\n        },\n    };\n}\nexport function instrumentOnError(callback) {\n    return instrumentMethod(window, 'onerror', function (_a) {\n        var _b = _a.parameters, messageObj = _b[0], url = _b[1], line = _b[2], column = _b[3], errorObj = _b[4];\n        var stackTrace;\n        if (isError(errorObj)) {\n            stackTrace = computeStackTrace(errorObj);\n        }\n        else {\n            stackTrace = computeStackTraceFromOnErrorMessage(messageObj, url, line, column);\n        }\n        callback(stackTrace, errorObj !== null && errorObj !== void 0 ? errorObj : messageObj);\n    });\n}\nexport function instrumentUnhandledRejection(callback) {\n    return instrumentMethod(window, 'onunhandledrejection', function (_a) {\n        var e = _a.parameters[0];\n        var reason = e.reason || 'Empty reason';\n        var stack = computeStackTrace(reason);\n        callback(stack, reason);\n    });\n}\n//# sourceMappingURL=trackRuntimeError.js.map","import { flattenErrorCauses, isError, tryToGetFingerprint } from '../error/error';\nimport { mergeObservables, Observable } from '../../tools/observable';\nimport { ConsoleApiName, globalConsole } from '../../tools/display';\nimport { callMonitored } from '../../tools/monitor';\nimport { sanitize } from '../../tools/serialisation/sanitize';\nimport { find } from '../../tools/utils/polyfills';\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify';\nimport { ErrorSource } from '../error/error.types';\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace';\nimport { createHandlingStack, toStackTraceString, formatErrorMessage } from '../../tools/stackTrace/handlingStack';\nimport { clocksNow } from '../../tools/utils/timeUtils';\nvar consoleObservablesByApi = {};\nexport function initConsoleObservable(apis) {\n    var consoleObservables = apis.map(function (api) {\n        if (!consoleObservablesByApi[api]) {\n            consoleObservablesByApi[api] = createConsoleObservable(api); // we are sure that the observable created for this api will yield the expected ConsoleLog type\n        }\n        return consoleObservablesByApi[api];\n    });\n    return mergeObservables.apply(void 0, consoleObservables);\n}\nexport function resetConsoleObservable() {\n    consoleObservablesByApi = {};\n}\nfunction createConsoleObservable(api) {\n    return new Observable(function (observable) {\n        var originalConsoleApi = globalConsole[api];\n        globalConsole[api] = function () {\n            var params = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                params[_i] = arguments[_i];\n            }\n            originalConsoleApi.apply(console, params);\n            var handlingStack = createHandlingStack();\n            callMonitored(function () {\n                observable.notify(buildConsoleLog(params, api, handlingStack));\n            });\n        };\n        return function () {\n            globalConsole[api] = originalConsoleApi;\n        };\n    });\n}\nfunction buildConsoleLog(params, api, handlingStack) {\n    var message = params.map(function (param) { return formatConsoleParameters(param); }).join(' ');\n    var error;\n    if (api === ConsoleApiName.error) {\n        var firstErrorParam = find(params, isError);\n        error = {\n            stack: firstErrorParam ? toStackTraceString(computeStackTrace(firstErrorParam)) : undefined,\n            fingerprint: tryToGetFingerprint(firstErrorParam),\n            causes: firstErrorParam ? flattenErrorCauses(firstErrorParam, 'console') : undefined,\n            startClocks: clocksNow(),\n            message: message,\n            source: ErrorSource.CONSOLE,\n            handling: \"handled\" /* ErrorHandling.HANDLED */,\n            handlingStack: handlingStack,\n        };\n    }\n    return {\n        api: api,\n        message: message,\n        error: error,\n        handlingStack: handlingStack,\n    };\n}\nfunction formatConsoleParameters(param) {\n    if (typeof param === 'string') {\n        return sanitize(param);\n    }\n    if (isError(param)) {\n        return formatErrorMessage(computeStackTrace(param));\n    }\n    return jsonStringify(sanitize(param), undefined, 2);\n}\n//# sourceMappingURL=consoleObservable.js.map","import { toStackTraceString } from '../../tools/stackTrace/handlingStack';\nimport { monitor } from '../../tools/monitor';\nimport { mergeObservables, Observable } from '../../tools/observable';\nimport { addEventListener } from '../../browser/addEventListener';\nimport { assign, includes } from '../../tools/utils/polyfills';\nimport { safeTruncate } from '../../tools/utils/stringUtils';\nimport { ErrorSource } from '../error/error.types';\nimport { clocksNow } from '../../tools/utils/timeUtils';\nexport var RawReportType = {\n    intervention: 'intervention',\n    deprecation: 'deprecation',\n    cspViolation: 'csp_violation',\n};\nexport function initReportObservable(configuration, apis) {\n    var observables = [];\n    if (includes(apis, RawReportType.cspViolation)) {\n        observables.push(createCspViolationReportObservable(configuration));\n    }\n    var reportTypes = apis.filter(function (api) { return api !== RawReportType.cspViolation; });\n    if (reportTypes.length) {\n        observables.push(createReportObservable(reportTypes));\n    }\n    return mergeObservables.apply(void 0, observables);\n}\nfunction createReportObservable(reportTypes) {\n    return new Observable(function (observable) {\n        if (!window.ReportingObserver) {\n            return;\n        }\n        var handleReports = monitor(function (reports, _) {\n            return reports.forEach(function (report) { return observable.notify(buildRawReportErrorFromReport(report)); });\n        });\n        var observer = new window.ReportingObserver(handleReports, {\n            types: reportTypes,\n            buffered: true,\n        });\n        observer.observe();\n        return function () {\n            observer.disconnect();\n        };\n    });\n}\nfunction createCspViolationReportObservable(configuration) {\n    return new Observable(function (observable) {\n        var stop = addEventListener(configuration, document, \"securitypolicyviolation\" /* DOM_EVENT.SECURITY_POLICY_VIOLATION */, function (event) {\n            observable.notify(buildRawReportErrorFromCspViolation(event));\n        }).stop;\n        return stop;\n    });\n}\nfunction buildRawReportErrorFromReport(report) {\n    var type = report.type, body = report.body;\n    return buildRawReportError({\n        type: body.id,\n        message: \"\".concat(type, \": \").concat(body.message),\n        originalError: report,\n        stack: buildStack(body.id, body.message, body.sourceFile, body.lineNumber, body.columnNumber),\n    });\n}\nfunction buildRawReportErrorFromCspViolation(event) {\n    var message = \"'\".concat(event.blockedURI, \"' blocked by '\").concat(event.effectiveDirective, \"' directive\");\n    return buildRawReportError({\n        type: event.effectiveDirective,\n        message: \"\".concat(RawReportType.cspViolation, \": \").concat(message),\n        originalError: event,\n        csp: {\n            disposition: event.disposition,\n        },\n        stack: buildStack(event.effectiveDirective, event.originalPolicy\n            ? \"\".concat(message, \" of the policy \\\"\").concat(safeTruncate(event.originalPolicy, 100, '...'), \"\\\"\")\n            : 'no policy', event.sourceFile, event.lineNumber, event.columnNumber),\n    });\n}\nfunction buildRawReportError(partial) {\n    return assign({\n        startClocks: clocksNow(),\n        source: ErrorSource.REPORT,\n        handling: \"unhandled\" /* ErrorHandling.UNHANDLED */,\n    }, partial);\n}\nfunction buildStack(name, message, sourceFile, lineNumber, columnNumber) {\n    return sourceFile\n        ? toStackTraceString({\n            name: name,\n            message: message,\n            stack: [\n                {\n                    func: '?',\n                    url: sourceFile,\n                    line: lineNumber !== null && lineNumber !== void 0 ? lineNumber : undefined,\n                    column: columnNumber !== null && columnNumber !== void 0 ? columnNumber : undefined,\n                },\n            ],\n        })\n        : undefined;\n}\n//# sourceMappingURL=reportObservable.js.map","import { isEmptyObject, assign, ErrorSource, generateUUID, computeRawError, computeStackTrace, Observable, trackRuntimeError, isError, } from '@datadog/browser-core';\nimport { trackConsoleError } from './trackConsoleError';\nimport { trackReportError } from './trackReportError';\nexport function startErrorCollection(lifeCycle, configuration, pageStateHistory, featureFlagContexts) {\n    var errorObservable = new Observable();\n    trackConsoleError(errorObservable);\n    trackRuntimeError(errorObservable);\n    trackReportError(configuration, errorObservable);\n    errorObservable.subscribe(function (error) { return lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error: error }); });\n    return doStartErrorCollection(lifeCycle, pageStateHistory, featureFlagContexts);\n}\nexport function doStartErrorCollection(lifeCycle, pageStateHistory, featureFlagContexts) {\n    lifeCycle.subscribe(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, function (_a) {\n        var error = _a.error, customerContext = _a.customerContext, savedCommonContext = _a.savedCommonContext;\n        lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, assign({\n            customerContext: customerContext,\n            savedCommonContext: savedCommonContext,\n        }, processError(error, pageStateHistory, featureFlagContexts)));\n    });\n    return {\n        addError: function (_a, savedCommonContext) {\n            var error = _a.error, handlingStack = _a.handlingStack, startClocks = _a.startClocks, customerContext = _a.context;\n            var stackTrace = isError(error) ? computeStackTrace(error) : undefined;\n            var rawError = computeRawError({\n                stackTrace: stackTrace,\n                originalError: error,\n                handlingStack: handlingStack,\n                startClocks: startClocks,\n                nonErrorPrefix: \"Provided\" /* NonErrorPrefix.PROVIDED */,\n                source: ErrorSource.CUSTOM,\n                handling: \"handled\" /* ErrorHandling.HANDLED */,\n            });\n            lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, {\n                customerContext: customerContext,\n                savedCommonContext: savedCommonContext,\n                error: rawError,\n            });\n        },\n    };\n}\nfunction processError(error, pageStateHistory, featureFlagContexts) {\n    var rawRumEvent = {\n        date: error.startClocks.timeStamp,\n        error: {\n            id: generateUUID(),\n            message: error.message,\n            source: error.source,\n            stack: error.stack,\n            handling_stack: error.handlingStack,\n            type: error.type,\n            handling: error.handling,\n            causes: error.causes,\n            source_type: 'browser',\n            fingerprint: error.fingerprint,\n            csp: error.csp,\n        },\n        type: \"error\" /* RumEventType.ERROR */,\n        view: { in_foreground: pageStateHistory.wasInPageStateAt(\"active\" /* PageState.ACTIVE */, error.startClocks.relative) },\n    };\n    var featureFlagContext = featureFlagContexts.findFeatureFlagEvaluations(error.startClocks.relative);\n    if (featureFlagContext && !isEmptyObject(featureFlagContext)) {\n        rawRumEvent.feature_flags = featureFlagContext;\n    }\n    var domainContext = {\n        error: error.originalError,\n        handlingStack: error.handlingStack,\n    };\n    return {\n        rawRumEvent: rawRumEvent,\n        startTime: error.startClocks.relative,\n        domainContext: domainContext,\n    };\n}\n//# sourceMappingURL=errorCollection.js.map","import { initConsoleObservable, ConsoleApiName } from '@datadog/browser-core';\nexport function trackConsoleError(errorObservable) {\n    var subscription = initConsoleObservable([ConsoleApiName.error]).subscribe(function (consoleLog) {\n        return errorObservable.notify(consoleLog.error);\n    });\n    return {\n        stop: function () {\n            subscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackConsoleError.js.map","import { initReportObservable, RawReportType } from '@datadog/browser-core';\nexport function trackReportError(configuration, errorObservable) {\n    var subscription = initReportObservable(configuration, [\n        RawReportType.cspViolation,\n        RawReportType.intervention,\n    ]).subscribe(function (rawError) { return errorObservable.notify(rawError); });\n    return {\n        stop: function () {\n            subscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackReportError.js.map","import { setTimeout, clearTimeout } from './timer';\nimport { monitor } from './monitor';\nimport { dateNow } from './utils/timeUtils';\n/**\n * 'requestIdleCallback' with a shim.\n */\nexport function requestIdleCallback(callback, opts) {\n    // Note: check both 'requestIdleCallback' and 'cancelIdleCallback' existence because some polyfills only implement 'requestIdleCallback'.\n    if (window.requestIdleCallback && window.cancelIdleCallback) {\n        var id_1 = window.requestIdleCallback(monitor(callback), opts);\n        return function () { return window.cancelIdleCallback(id_1); };\n    }\n    return requestIdleCallbackShim(callback);\n}\nexport var MAX_TASK_TIME = 50;\n/*\n * Shim from https://developer.chrome.com/blog/using-requestidlecallback#checking_for_requestidlecallback\n * Note: there is no simple way to support the \"timeout\" option, so we ignore it.\n */\nexport function requestIdleCallbackShim(callback) {\n    var start = dateNow();\n    var timeoutId = setTimeout(function () {\n        callback({\n            didTimeout: false,\n            timeRemaining: function () { return Math.max(0, MAX_TASK_TIME - (dateNow() - start)); },\n        });\n    }, 0);\n    return function () { return clearTimeout(timeoutId); };\n}\n//# sourceMappingURL=requestIdleCallback.js.map","import { ONE_SECOND } from './utils/timeUtils';\nimport { requestIdleCallback } from './requestIdleCallback';\n/**\n * Maximum delay before starting to execute tasks in the queue. We don't want to wait too long\n * before running tasks, as it might hurt reliability (ex: if the user navigates away, we might lose\n * the opportunity to send some data). We also don't want to run tasks too often, as it might hurt\n * performance.\n */\nvar IDLE_CALLBACK_TIMEOUT = ONE_SECOND;\n/**\n * Maximum amount of time allocated to running tasks when a timeout (`IDLE_CALLBACK_TIMEOUT`) is\n * reached. We should not run tasks for too long as it will hurt performance, but we should still\n * run some tasks to avoid postponing them forever.\n *\n * Rational: Running tasks for 30ms every second (IDLE_CALLBACK_TIMEOUT) should be acceptable.\n */\nexport var MAX_EXECUTION_TIME_ON_TIMEOUT = 30;\nexport function createTaskQueue() {\n    var pendingTasks = [];\n    function run(deadline) {\n        var executionTimeRemaining;\n        if (deadline.didTimeout) {\n            var start_1 = performance.now();\n            executionTimeRemaining = function () { return MAX_EXECUTION_TIME_ON_TIMEOUT - (performance.now() - start_1); };\n        }\n        else {\n            executionTimeRemaining = deadline.timeRemaining.bind(deadline);\n        }\n        while (executionTimeRemaining() > 0 && pendingTasks.length) {\n            pendingTasks.shift()();\n        }\n        if (pendingTasks.length) {\n            scheduleNextRun();\n        }\n    }\n    function scheduleNextRun() {\n        requestIdleCallback(run, { timeout: IDLE_CALLBACK_TIMEOUT });\n    }\n    return {\n        push: function (task) {\n            if (pendingTasks.push(task) === 1) {\n                scheduleNextRun();\n            }\n        },\n    };\n}\n//# sourceMappingURL=taskQueue.js.map","import { addDuration } from '@datadog/browser-core';\nimport { WeakSet } from '../../browser/polyfills';\nimport { hasValidResourceEntryDuration, hasValidResourceEntryTimings } from './resourceUtils';\nvar alreadyMatchedEntries = new WeakSet();\n/**\n * Look for corresponding timing in resource timing buffer\n *\n * Observations:\n * - Timing (start, end) are nested inside the request (start, end)\n * - Some timing can be not exactly nested, being off by < 1 ms\n *\n * Strategy:\n * - from valid nested entries (with 1 ms error margin)\n * - filter out timing that were already matched to a request\n * - then, if a single timing match, return the timing\n * - otherwise we can't decide, return undefined\n */\nexport function matchRequestResourceEntry(request) {\n    if (!performance || !('getEntriesByName' in performance)) {\n        return;\n    }\n    var sameNameEntries = performance.getEntriesByName(request.url, 'resource');\n    if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {\n        return;\n    }\n    var candidates = sameNameEntries\n        .filter(function (entry) { return !alreadyMatchedEntries.has(entry); })\n        .filter(function (entry) { return hasValidResourceEntryDuration(entry) && hasValidResourceEntryTimings(entry); })\n        .filter(function (entry) {\n        return isBetween(entry, request.startClocks.relative, endTime({ startTime: request.startClocks.relative, duration: request.duration }));\n    });\n    if (candidates.length === 1) {\n        alreadyMatchedEntries.add(candidates[0]);\n        return candidates[0].toJSON();\n    }\n    return;\n}\nfunction endTime(timing) {\n    return addDuration(timing.startTime, timing.duration);\n}\nfunction isBetween(timing, start, end) {\n    var errorMargin = 1;\n    return timing.startTime >= start - errorMargin && endTime(timing) <= addDuration(end, errorMargin);\n}\n//# sourceMappingURL=matchRequestResourceEntry.js.map","import { noop } from '../tools/utils/functionUtils';\nimport { addEventListener } from './addEventListener';\nexport function runOnReadyState(configuration, expectedReadyState, callback) {\n    if (document.readyState === expectedReadyState || document.readyState === 'complete') {\n        callback();\n        return { stop: noop };\n    }\n    var eventName = expectedReadyState === 'complete' ? \"load\" /* DOM_EVENT.LOAD */ : \"DOMContentLoaded\" /* DOM_EVENT.DOM_CONTENT_LOADED */;\n    return addEventListener(configuration, window, eventName, callback, { once: true });\n}\n//# sourceMappingURL=runOnReadyState.js.map","import { dateNow, findCommaSeparatedValue, ONE_MINUTE } from '@datadog/browser-core';\nimport { isCommentNode, isTextNode } from '../../browser/htmlDomUtils';\nexport var INITIAL_DOCUMENT_OUTDATED_TRACE_ID_THRESHOLD = 2 * ONE_MINUTE;\nexport function getDocumentTraceId(document) {\n    var data = getDocumentTraceDataFromMeta(document) || getDocumentTraceDataFromComment(document);\n    if (!data || data.traceTime <= dateNow() - INITIAL_DOCUMENT_OUTDATED_TRACE_ID_THRESHOLD) {\n        return undefined;\n    }\n    return data.traceId;\n}\nexport function getDocumentTraceDataFromMeta(document) {\n    var traceIdMeta = document.querySelector('meta[name=dd-trace-id]');\n    var traceTimeMeta = document.querySelector('meta[name=dd-trace-time]');\n    return createDocumentTraceData(traceIdMeta && traceIdMeta.content, traceTimeMeta && traceTimeMeta.content);\n}\nexport function getDocumentTraceDataFromComment(document) {\n    var comment = findTraceComment(document);\n    if (!comment) {\n        return undefined;\n    }\n    return createDocumentTraceData(findCommaSeparatedValue(comment, 'trace-id'), findCommaSeparatedValue(comment, 'trace-time'));\n}\nexport function createDocumentTraceData(traceId, rawTraceTime) {\n    var traceTime = rawTraceTime && Number(rawTraceTime);\n    if (!traceId || !traceTime) {\n        return undefined;\n    }\n    return {\n        traceId: traceId,\n        traceTime: traceTime,\n    };\n}\nexport function findTraceComment(document) {\n    // 1. Try to find the comment as a direct child of the document\n    // Note: TSLint advises to use a 'for of', but TS doesn't allow to use 'for of' if the iterated\n    // value is not an array or string (here, a NodeList).\n    for (var i = 0; i < document.childNodes.length; i += 1) {\n        var comment = getTraceCommentFromNode(document.childNodes[i]);\n        if (comment) {\n            return comment;\n        }\n    }\n    // 2. If the comment is placed after the </html> tag, but have some space or new lines before or\n    // after, the DOM parser will lift it (and the surrounding text) at the end of the <body> tag.\n    // Try to look for the comment at the end of the <body> by by iterating over its child nodes in\n    // reverse order, stopping if we come across a non-text node.\n    if (document.body) {\n        for (var i = document.body.childNodes.length - 1; i >= 0; i -= 1) {\n            var node = document.body.childNodes[i];\n            var comment = getTraceCommentFromNode(node);\n            if (comment) {\n                return comment;\n            }\n            if (!isTextNode(node)) {\n                break;\n            }\n        }\n    }\n}\nfunction getTraceCommentFromNode(node) {\n    if (node && isCommentNode(node)) {\n        var match = /^\\s*DATADOG;(.*?)\\s*$/.exec(node.data);\n        if (match) {\n            return match[1];\n        }\n    }\n}\n//# sourceMappingURL=getDocumentTraceId.js.map","import { assign, getRelativeTime, isNumber } from '@datadog/browser-core';\nimport { RumPerformanceEntryType, supportPerformanceTimingEvent, } from './performanceObservable';\nexport function getNavigationEntry() {\n    if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {\n        var navigationEntry = performance.getEntriesByType(RumPerformanceEntryType.NAVIGATION)[0];\n        if (navigationEntry) {\n            return navigationEntry;\n        }\n    }\n    var timings = computeTimingsFromDeprecatedPerformanceTiming();\n    var entry = assign({\n        entryType: RumPerformanceEntryType.NAVIGATION,\n        initiatorType: 'navigation',\n        name: window.location.href,\n        startTime: 0,\n        duration: timings.responseEnd,\n        decodedBodySize: 0,\n        encodedBodySize: 0,\n        transferSize: 0,\n        workerStart: 0,\n        toJSON: function () { return assign({}, entry, { toJSON: undefined }); },\n    }, timings);\n    return entry;\n}\nexport function computeTimingsFromDeprecatedPerformanceTiming() {\n    var result = {};\n    var timing = performance.timing;\n    for (var key in timing) {\n        if (isNumber(timing[key])) {\n            var numberKey = key;\n            var timingElement = timing[numberKey];\n            result[numberKey] = timingElement === 0 ? 0 : getRelativeTime(timingElement);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=performanceUtils.js.map","import { assign, runOnReadyState } from '@datadog/browser-core';\nimport { RumPerformanceEntryType } from '../../browser/performanceObservable';\nimport { getDocumentTraceId } from '../tracing/getDocumentTraceId';\nimport { getNavigationEntry } from '../../browser/performanceUtils';\nimport { FAKE_INITIAL_DOCUMENT } from './resourceUtils';\nexport function retrieveInitialDocumentResourceTiming(configuration, callback) {\n    runOnReadyState(configuration, 'interactive', function () {\n        var entry = assign(getNavigationEntry().toJSON(), {\n            entryType: RumPerformanceEntryType.RESOURCE,\n            initiatorType: FAKE_INITIAL_DOCUMENT,\n            traceId: getDocumentTraceId(document),\n            toJSON: function () { return assign({}, entry, { toJSON: undefined }); },\n        });\n        callback(entry);\n    });\n}\n//# sourceMappingURL=retrieveInitialDocumentResourceTiming.js.map","import { combine, generateUUID, toServerDuration, relativeToClocks, assign, createTaskQueue, } from '@datadog/browser-core';\nimport { RumPerformanceEntryType, createPerformanceObservable, } from '../../browser/performanceObservable';\nimport { createSpanIdentifier } from '../tracing/identifier';\nimport { matchRequestResourceEntry } from './matchRequestResourceEntry';\nimport { computeResourceEntryDetails, computeResourceEntryDuration, computeResourceEntryType, computeResourceEntrySize, computeResourceEntryProtocol, computeResourceEntryDeliveryType, isResourceEntryRequestType, isLongDataUrl, sanitizeDataUrl, } from './resourceUtils';\nimport { retrieveInitialDocumentResourceTiming } from './retrieveInitialDocumentResourceTiming';\nexport function startResourceCollection(lifeCycle, configuration, pageStateHistory, taskQueue, retrieveInitialDocumentResourceTimingImpl) {\n    if (taskQueue === void 0) { taskQueue = createTaskQueue(); }\n    if (retrieveInitialDocumentResourceTimingImpl === void 0) { retrieveInitialDocumentResourceTimingImpl = retrieveInitialDocumentResourceTiming; }\n    lifeCycle.subscribe(8 /* LifeCycleEventType.REQUEST_COMPLETED */, function (request) {\n        handleResource(function () { return processRequest(request, configuration, pageStateHistory); });\n    });\n    var performanceResourceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.RESOURCE,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var _loop_1 = function (entry) {\n            if (!isResourceEntryRequestType(entry)) {\n                handleResource(function () { return processResourceEntry(entry, configuration); });\n            }\n        };\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            _loop_1(entry);\n        }\n    });\n    retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {\n        handleResource(function () { return processResourceEntry(timing, configuration); });\n    });\n    function handleResource(computeRawEvent) {\n        taskQueue.push(function () {\n            var rawEvent = computeRawEvent();\n            if (rawEvent) {\n                lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, rawEvent);\n            }\n        });\n    }\n    return {\n        stop: function () {\n            performanceResourceSubscription.unsubscribe();\n        },\n    };\n}\nfunction processRequest(request, configuration, pageStateHistory) {\n    var matchingTiming = matchRequestResourceEntry(request);\n    var startClocks = matchingTiming ? relativeToClocks(matchingTiming.startTime) : request.startClocks;\n    var tracingInfo = computeRequestTracingInfo(request, configuration);\n    if (!configuration.trackResources && !tracingInfo) {\n        return;\n    }\n    var type = request.type === \"xhr\" /* RequestType.XHR */ ? \"xhr\" /* ResourceType.XHR */ : \"fetch\" /* ResourceType.FETCH */;\n    var correspondingTimingOverrides = matchingTiming ? computeResourceEntryMetrics(matchingTiming) : undefined;\n    var duration = computeRequestDuration(pageStateHistory, startClocks, request.duration);\n    var resourceEvent = combine({\n        date: startClocks.timeStamp,\n        resource: {\n            id: generateUUID(),\n            type: type,\n            duration: duration,\n            method: request.method,\n            status_code: request.status,\n            protocol: matchingTiming && computeResourceEntryProtocol(matchingTiming),\n            url: isLongDataUrl(request.url) ? sanitizeDataUrl(request.url) : request.url,\n            delivery_type: matchingTiming && computeResourceEntryDeliveryType(matchingTiming),\n        },\n        type: \"resource\" /* RumEventType.RESOURCE */,\n        _dd: {\n            discarded: !configuration.trackResources,\n        },\n    }, tracingInfo, correspondingTimingOverrides);\n    return {\n        startTime: startClocks.relative,\n        rawRumEvent: resourceEvent,\n        domainContext: {\n            performanceEntry: matchingTiming,\n            xhr: request.xhr,\n            response: request.response,\n            requestInput: request.input,\n            requestInit: request.init,\n            error: request.error,\n            isAborted: request.isAborted,\n            handlingStack: request.handlingStack,\n        },\n    };\n}\nfunction processResourceEntry(entry, configuration) {\n    var startClocks = relativeToClocks(entry.startTime);\n    var tracingInfo = computeResourceEntryTracingInfo(entry, configuration);\n    if (!configuration.trackResources && !tracingInfo) {\n        return;\n    }\n    var type = computeResourceEntryType(entry);\n    var entryMetrics = computeResourceEntryMetrics(entry);\n    var resourceEvent = combine({\n        date: startClocks.timeStamp,\n        resource: {\n            id: generateUUID(),\n            type: type,\n            url: entry.name,\n            status_code: discardZeroStatus(entry.responseStatus),\n            protocol: computeResourceEntryProtocol(entry),\n            delivery_type: computeResourceEntryDeliveryType(entry),\n        },\n        type: \"resource\" /* RumEventType.RESOURCE */,\n        _dd: {\n            discarded: !configuration.trackResources,\n        },\n    }, tracingInfo, entryMetrics);\n    return {\n        startTime: startClocks.relative,\n        rawRumEvent: resourceEvent,\n        domainContext: {\n            performanceEntry: entry,\n        },\n    };\n}\nfunction computeResourceEntryMetrics(entry) {\n    var renderBlockingStatus = entry.renderBlockingStatus;\n    return {\n        resource: assign({\n            duration: computeResourceEntryDuration(entry),\n            render_blocking_status: renderBlockingStatus,\n        }, computeResourceEntrySize(entry), computeResourceEntryDetails(entry)),\n    };\n}\nfunction computeRequestTracingInfo(request, configuration) {\n    var hasBeenTraced = request.traceSampled && request.traceId && request.spanId;\n    if (!hasBeenTraced) {\n        return undefined;\n    }\n    return {\n        _dd: {\n            span_id: request.spanId.toString(),\n            trace_id: request.traceId.toString(),\n            rule_psr: configuration.rulePsr,\n        },\n    };\n}\nfunction computeResourceEntryTracingInfo(entry, configuration) {\n    var hasBeenTraced = entry.traceId;\n    if (!hasBeenTraced) {\n        return undefined;\n    }\n    return {\n        _dd: {\n            trace_id: entry.traceId,\n            span_id: createSpanIdentifier().toString(),\n            rule_psr: configuration.rulePsr,\n        },\n    };\n}\nfunction computeRequestDuration(pageStateHistory, startClocks, duration) {\n    return !pageStateHistory.wasInPageStateDuringPeriod(\"frozen\" /* PageState.FROZEN */, startClocks.relative, duration)\n        ? toServerDuration(duration)\n        : undefined;\n}\n/**\n * The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes\n */\nfunction discardZeroStatus(statusCode) {\n    return statusCode === 0 ? undefined : statusCode;\n}\n//# sourceMappingURL=resourceCollection.js.map","import { ONE_MINUTE, find } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../../browser/performanceObservable';\n// Discard FCP timings above a certain delay to avoid incorrect data\n// It happens in some cases like sleep mode or some browser implementations\nexport var FCP_MAXIMUM_DELAY = 10 * ONE_MINUTE;\nexport function trackFirstContentfulPaint(configuration, firstHidden, callback) {\n    var performanceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.PAINT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var fcpEntry = find(entries, function (entry) {\n            return entry.name === 'first-contentful-paint' &&\n                entry.startTime < firstHidden.timeStamp &&\n                entry.startTime < FCP_MAXIMUM_DELAY;\n        });\n        if (fcpEntry) {\n            callback(fcpEntry.startTime);\n        }\n    });\n    return {\n        stop: performanceSubscription.unsubscribe,\n    };\n}\n//# sourceMappingURL=trackFirstContentfulPaint.js.map","import { setTimeout, relativeNow, runOnReadyState, clearTimeout } from '@datadog/browser-core';\nimport { getNavigationEntry } from '../../../browser/performanceUtils';\nexport function trackNavigationTimings(configuration, callback, getNavigationEntryImpl) {\n    if (getNavigationEntryImpl === void 0) { getNavigationEntryImpl = getNavigationEntry; }\n    return waitAfterLoadEvent(configuration, function () {\n        var entry = getNavigationEntryImpl();\n        if (!isIncompleteNavigation(entry)) {\n            callback(processNavigationEntry(entry));\n        }\n    });\n}\nfunction processNavigationEntry(entry) {\n    return {\n        domComplete: entry.domComplete,\n        domContentLoaded: entry.domContentLoadedEventEnd,\n        domInteractive: entry.domInteractive,\n        loadEvent: entry.loadEventEnd,\n        // In some cases the value reported is negative or is larger\n        // than the current page time. Ignore these cases:\n        // https://github.com/GoogleChrome/web-vitals/issues/137\n        // https://github.com/GoogleChrome/web-vitals/issues/162\n        firstByte: entry.responseStart >= 0 && entry.responseStart <= relativeNow() ? entry.responseStart : undefined,\n    };\n}\nfunction isIncompleteNavigation(entry) {\n    return entry.loadEventEnd <= 0;\n}\nfunction waitAfterLoadEvent(configuration, callback) {\n    var timeoutId;\n    var stopOnReadyState = runOnReadyState(configuration, 'complete', function () {\n        // Invoke the callback a bit after the actual load event, so the \"loadEventEnd\" timing is accurate\n        timeoutId = setTimeout(function () { return callback(); });\n    }).stop;\n    return {\n        stop: function () {\n            stopOnReadyState();\n            clearTimeout(timeoutId);\n        },\n    };\n}\n//# sourceMappingURL=trackNavigationTimings.js.map","import { ONE_MINUTE, addEventListeners, findLast } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\n// Discard LCP timings above a certain delay to avoid incorrect data\n// It happens in some cases like sleep mode or some browser implementations\nexport var LCP_MAXIMUM_DELAY = 10 * ONE_MINUTE;\n/**\n * Track the largest contentful paint (LCP) occurring during the initial View.  This can yield\n * multiple values, only the most recent one should be used.\n * Documentation: https://web.dev/lcp/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/onLCP.ts\n */\nexport function trackLargestContentfulPaint(configuration, firstHidden, eventTarget, callback) {\n    // Ignore entries that come after the first user interaction. According to the documentation, the\n    // browser should not send largest-contentful-paint entries after a user interact with the page,\n    // but the web-vitals reference implementation uses this as a safeguard.\n    var firstInteractionTimestamp = Infinity;\n    var stopEventListener = addEventListeners(configuration, eventTarget, [\"pointerdown\" /* DOM_EVENT.POINTER_DOWN */, \"keydown\" /* DOM_EVENT.KEY_DOWN */], function (event) {\n        firstInteractionTimestamp = event.timeStamp;\n    }, { capture: true, once: true }).stop;\n    var biggestLcpSize = 0;\n    var performanceLcpSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var lcpEntry = findLast(entries, function (entry) {\n            return entry.entryType === RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT &&\n                entry.startTime < firstInteractionTimestamp &&\n                entry.startTime < firstHidden.timeStamp &&\n                entry.startTime < LCP_MAXIMUM_DELAY &&\n                // Ensure to get the LCP entry with the biggest size, see\n                // https://bugs.chromium.org/p/chromium/issues/detail?id=1516655\n                entry.size > biggestLcpSize;\n        });\n        if (lcpEntry) {\n            var lcpTargetSelector = void 0;\n            if (lcpEntry.element) {\n                lcpTargetSelector = getSelectorFromElement(lcpEntry.element, configuration.actionNameAttribute);\n            }\n            callback({\n                value: lcpEntry.startTime,\n                targetSelector: lcpTargetSelector,\n            });\n            biggestLcpSize = lcpEntry.size;\n        }\n    });\n    return {\n        stop: function () {\n            stopEventListener();\n            performanceLcpSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackLargestContentfulPaint.js.map","import { addEventListeners } from '@datadog/browser-core';\nexport function trackFirstHidden(configuration, eventTarget) {\n    if (eventTarget === void 0) { eventTarget = window; }\n    var timeStamp;\n    var stopListeners;\n    if (document.visibilityState === 'hidden') {\n        timeStamp = 0;\n    }\n    else {\n        timeStamp = Infinity;\n        (stopListeners = addEventListeners(configuration, eventTarget, [\"pagehide\" /* DOM_EVENT.PAGE_HIDE */, \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */], function (event) {\n            if (event.type === \"pagehide\" /* DOM_EVENT.PAGE_HIDE */ || document.visibilityState === 'hidden') {\n                timeStamp = event.timeStamp;\n                stopListeners();\n            }\n        }, { capture: true }).stop);\n    }\n    return {\n        get timeStamp() {\n            return timeStamp;\n        },\n        stop: function () {\n            stopListeners === null || stopListeners === void 0 ? void 0 : stopListeners();\n        },\n    };\n}\n//# sourceMappingURL=trackFirstHidden.js.map","import { trackFirstContentfulPaint } from './trackFirstContentfulPaint';\nimport { trackFirstInput } from './trackFirstInput';\nimport { trackNavigationTimings } from './trackNavigationTimings';\nimport { trackLargestContentfulPaint } from './trackLargestContentfulPaint';\nimport { trackFirstHidden } from './trackFirstHidden';\nexport function trackInitialViewMetrics(configuration, setLoadEvent, scheduleViewUpdate) {\n    var initialViewMetrics = {};\n    var stopNavigationTracking = trackNavigationTimings(configuration, function (navigationTimings) {\n        setLoadEvent(navigationTimings.loadEvent);\n        initialViewMetrics.navigationTimings = navigationTimings;\n        scheduleViewUpdate();\n    }).stop;\n    var firstHidden = trackFirstHidden(configuration);\n    var stopFCPTracking = trackFirstContentfulPaint(configuration, firstHidden, function (firstContentfulPaint) {\n        initialViewMetrics.firstContentfulPaint = firstContentfulPaint;\n        scheduleViewUpdate();\n    }).stop;\n    var stopLCPTracking = trackLargestContentfulPaint(configuration, firstHidden, window, function (largestContentfulPaint) {\n        initialViewMetrics.largestContentfulPaint = largestContentfulPaint;\n        scheduleViewUpdate();\n    }).stop;\n    var stopFIDTracking = trackFirstInput(configuration, firstHidden, function (firstInput) {\n        initialViewMetrics.firstInput = firstInput;\n        scheduleViewUpdate();\n    }).stop;\n    function stop() {\n        stopNavigationTracking();\n        stopFCPTracking();\n        stopLCPTracking();\n        stopFIDTracking();\n        firstHidden.stop();\n    }\n    return {\n        stop: stop,\n        initialViewMetrics: initialViewMetrics,\n    };\n}\n//# sourceMappingURL=trackInitialViewMetrics.js.map","import { elapsed, find } from '@datadog/browser-core';\nimport { isElementNode } from '../../../browser/htmlDomUtils';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\n/**\n * Track the first input occurring during the initial View to return:\n * - First Input Delay\n * - First Input Time\n * Callback is called at most one time.\n * Documentation: https://web.dev/fid/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/getFID.ts\n */\nexport function trackFirstInput(configuration, firstHidden, callback) {\n    var performanceFirstInputSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.FIRST_INPUT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        var firstInputEntry = find(entries, function (entry) { return entry.startTime < firstHidden.timeStamp; });\n        if (firstInputEntry) {\n            var firstInputDelay = elapsed(firstInputEntry.startTime, firstInputEntry.processingStart);\n            var firstInputTargetSelector = void 0;\n            if (firstInputEntry.target && isElementNode(firstInputEntry.target)) {\n                firstInputTargetSelector = getSelectorFromElement(firstInputEntry.target, configuration.actionNameAttribute);\n            }\n            callback({\n                // Ensure firstInputDelay to be positive, see\n                // https://bugs.chromium.org/p/chromium/issues/detail?id=1185815\n                delay: firstInputDelay >= 0 ? firstInputDelay : 0,\n                time: firstInputEntry.startTime,\n                targetSelector: firstInputTargetSelector,\n            });\n        }\n    });\n    return {\n        stop: function () {\n            performanceFirstInputSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackFirstInput.js.map","import { round, find, ONE_SECOND, noop, elapsed } from '@datadog/browser-core';\nimport { isElementNode } from '../../../browser/htmlDomUtils';\nimport { supportPerformanceTimingEvent, RumPerformanceEntryType, createPerformanceObservable, } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\n/**\n * Track the cumulative layout shifts (CLS).\n * Layout shifts are grouped into session windows.\n * The minimum gap between session windows is 1 second.\n * The maximum duration of a session window is 5 second.\n * The session window layout shift value is the sum of layout shifts inside it.\n * The CLS value is the max of session windows values.\n *\n * This yields a new value whenever the CLS value is updated (a higher session window value is computed).\n *\n * See isLayoutShiftSupported to check for browser support.\n *\n * Documentation:\n * https://web.dev/cls/\n * https://web.dev/evolving-cls/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/master/src/getCLS.ts\n */\nexport function trackCumulativeLayoutShift(configuration, viewStart, callback) {\n    if (!isLayoutShiftSupported()) {\n        return {\n            stop: noop,\n        };\n    }\n    var maxClsValue = 0;\n    var maxClsTarget;\n    var maxClsStartTime;\n    // if no layout shift happen the value should be reported as 0\n    callback({\n        value: 0,\n    });\n    var window = slidingSessionWindow();\n    var performanceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LAYOUT_SHIFT,\n        buffered: true,\n    }).subscribe(function (entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.hadRecentInput || entry.startTime < viewStart) {\n                continue;\n            }\n            var _a = window.update(entry), cumulatedValue = _a.cumulatedValue, isMaxValue = _a.isMaxValue;\n            if (isMaxValue) {\n                var target = getTargetFromSource(entry.sources);\n                maxClsTarget = target ? new WeakRef(target) : undefined;\n                maxClsStartTime = elapsed(viewStart, entry.startTime);\n            }\n            if (cumulatedValue > maxClsValue) {\n                maxClsValue = cumulatedValue;\n                var target = maxClsTarget === null || maxClsTarget === void 0 ? void 0 : maxClsTarget.deref();\n                callback({\n                    value: round(maxClsValue, 4),\n                    targetSelector: target && getSelectorFromElement(target, configuration.actionNameAttribute),\n                    time: maxClsStartTime,\n                });\n            }\n        }\n    });\n    return {\n        stop: function () {\n            performanceSubscription.unsubscribe();\n        },\n    };\n}\nfunction getTargetFromSource(sources) {\n    var _a;\n    if (!sources) {\n        return;\n    }\n    return (_a = find(sources, function (source) { return !!source.node && isElementNode(source.node); })) === null || _a === void 0 ? void 0 : _a.node;\n}\nexport var MAX_WINDOW_DURATION = 5 * ONE_SECOND;\nvar MAX_UPDATE_GAP = ONE_SECOND;\nfunction slidingSessionWindow() {\n    var cumulatedValue = 0;\n    var startTime;\n    var endTime;\n    var maxValue = 0;\n    return {\n        update: function (entry) {\n            var shouldCreateNewWindow = startTime === undefined ||\n                entry.startTime - endTime >= MAX_UPDATE_GAP ||\n                entry.startTime - startTime >= MAX_WINDOW_DURATION;\n            var isMaxValue;\n            if (shouldCreateNewWindow) {\n                startTime = endTime = entry.startTime;\n                maxValue = cumulatedValue = entry.value;\n                isMaxValue = true;\n            }\n            else {\n                cumulatedValue += entry.value;\n                endTime = entry.startTime;\n                isMaxValue = entry.value > maxValue;\n                if (isMaxValue) {\n                    maxValue = entry.value;\n                }\n            }\n            return {\n                cumulatedValue: cumulatedValue,\n                isMaxValue: isMaxValue,\n            };\n        },\n    };\n}\n/**\n * Check whether `layout-shift` is supported by the browser.\n */\nexport function isLayoutShiftSupported() {\n    return supportPerformanceTimingEvent(RumPerformanceEntryType.LAYOUT_SHIFT) && 'WeakRef' in window;\n}\n//# sourceMappingURL=trackCumulativeLayoutShift.js.map","/**\n * performance.interactionCount polyfill\n *\n * The interactionCount is an integer which counts the total number of distinct user interactions,\n * for which there was a unique interactionId.\n *\n * The interactionCount polyfill is an estimate based on a convention specific to Chrome. Cf: https://github.com/GoogleChrome/web-vitals/pull/213\n * This is currently not an issue as the polyfill is only used for INP which is currently only supported on Chrome.\n * Hopefully when/if other browsers will support INP, they will also implement performance.interactionCount at the same time, so we won't need that polyfill.\n *\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/main/src/lib/polyfills/interactionCountPolyfill.ts\n */\nimport { monitor } from '@datadog/browser-core';\nvar observer;\nvar interactionCountEstimate = 0;\nvar minKnownInteractionId = Infinity;\nvar maxKnownInteractionId = 0;\nexport function initInteractionCountPolyfill() {\n    if ('interactionCount' in performance || observer) {\n        return;\n    }\n    observer = new window.PerformanceObserver(monitor(function (entries) {\n        entries.getEntries().forEach(function (e) {\n            var entry = e;\n            if (entry.interactionId) {\n                minKnownInteractionId = Math.min(minKnownInteractionId, entry.interactionId);\n                maxKnownInteractionId = Math.max(maxKnownInteractionId, entry.interactionId);\n                interactionCountEstimate = (maxKnownInteractionId - minKnownInteractionId) / 7 + 1;\n            }\n        });\n    }));\n    observer.observe({ type: 'event', buffered: true, durationThreshold: 0 });\n}\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport var getInteractionCount = function () {\n    return observer ? interactionCountEstimate : window.performance.interactionCount || 0;\n};\n//# sourceMappingURL=interactionCountPolyfill.js.map","import { Observable, throttle, addEventListener } from '@datadog/browser-core';\nvar viewportObservable;\nexport function initViewportObservable(configuration) {\n    if (!viewportObservable) {\n        viewportObservable = createViewportObservable(configuration);\n    }\n    return viewportObservable;\n}\nexport function createViewportObservable(configuration) {\n    return new Observable(function (observable) {\n        var updateDimension = throttle(function () {\n            observable.notify(getViewportDimension());\n        }, 200).throttled;\n        return addEventListener(configuration, window, \"resize\" /* DOM_EVENT.RESIZE */, updateDimension, { capture: true, passive: true })\n            .stop;\n    });\n}\n// excludes the width and height of any rendered classic scrollbar that is fixed to the visual viewport\nexport function getViewportDimension() {\n    var visual = window.visualViewport;\n    if (visual) {\n        return {\n            width: Number(visual.width * visual.scale),\n            height: Number(visual.height * visual.scale),\n        };\n    }\n    return {\n        width: Number(window.innerWidth || 0),\n        height: Number(window.innerHeight || 0),\n    };\n}\n//# sourceMappingURL=viewportObservable.js.map","import { elapsed, noop, ONE_MINUTE } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType, supportPerformanceTimingEvent, } from '../../../browser/performanceObservable';\nimport { getSelectorFromElement } from '../../getSelectorFromElement';\nimport { isElementNode } from '../../../browser/htmlDomUtils';\nimport { getInteractionSelector } from '../../action/interactionSelectorCache';\nimport { getInteractionCount, initInteractionCountPolyfill } from './interactionCountPolyfill';\n// Arbitrary value to prevent unnecessary memory usage on views with lots of interactions.\nvar MAX_INTERACTION_ENTRIES = 10;\n// Arbitrary value to cap INP outliers\nexport var MAX_INP_VALUE = (1 * ONE_MINUTE);\n/**\n * Track the interaction to next paint (INP).\n * To avoid outliers, return the p98 worst interaction of the view.\n * Documentation: https://web.dev/inp/\n * Reference implementation: https://github.com/GoogleChrome/web-vitals/blob/main/src/onINP.ts\n */\nexport function trackInteractionToNextPaint(configuration, viewStart, viewLoadingType) {\n    if (!isInteractionToNextPaintSupported()) {\n        return {\n            getInteractionToNextPaint: function () { return undefined; },\n            setViewEnd: noop,\n            stop: noop,\n        };\n    }\n    var _a = trackViewInteractionCount(viewLoadingType), getViewInteractionCount = _a.getViewInteractionCount, stopViewInteractionCount = _a.stopViewInteractionCount;\n    var viewEnd = Infinity;\n    var longestInteractions = trackLongestInteractions(getViewInteractionCount);\n    var interactionToNextPaint = -1;\n    var interactionToNextPaintTargetSelector;\n    var interactionToNextPaintStartTime;\n    function handleEntries(entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.interactionId &&\n                // Check the entry start time is inside the view bounds because some view interactions can be reported after the view end (if long duration).\n                entry.startTime >= viewStart &&\n                entry.startTime <= viewEnd) {\n                longestInteractions.process(entry);\n            }\n        }\n        var newInteraction = longestInteractions.estimateP98Interaction();\n        if (newInteraction && newInteraction.duration !== interactionToNextPaint) {\n            interactionToNextPaint = newInteraction.duration;\n            interactionToNextPaintStartTime = elapsed(viewStart, newInteraction.startTime);\n            interactionToNextPaintTargetSelector = getInteractionSelector(newInteraction.startTime);\n            if (!interactionToNextPaintTargetSelector && newInteraction.target && isElementNode(newInteraction.target)) {\n                interactionToNextPaintTargetSelector = getSelectorFromElement(newInteraction.target, configuration.actionNameAttribute);\n            }\n        }\n    }\n    var firstInputSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.FIRST_INPUT,\n        buffered: true,\n    }).subscribe(handleEntries);\n    var eventSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.EVENT,\n        // durationThreshold only impact PerformanceEventTiming entries used for INP computation which requires a threshold at 40 (default is 104ms)\n        // cf: https://github.com/GoogleChrome/web-vitals/blob/3806160ffbc93c3c4abf210a167b81228172b31c/src/onINP.ts#L202-L210\n        durationThreshold: 40,\n        buffered: true,\n    }).subscribe(handleEntries);\n    return {\n        getInteractionToNextPaint: function () {\n            // If no INP duration where captured because of the performanceObserver 40ms threshold\n            // but the view interaction count > 0 then report 0\n            if (interactionToNextPaint >= 0) {\n                return {\n                    value: Math.min(interactionToNextPaint, MAX_INP_VALUE),\n                    targetSelector: interactionToNextPaintTargetSelector,\n                    time: interactionToNextPaintStartTime,\n                };\n            }\n            else if (getViewInteractionCount()) {\n                return {\n                    value: 0,\n                };\n            }\n        },\n        setViewEnd: function (viewEndTime) {\n            viewEnd = viewEndTime;\n            stopViewInteractionCount();\n        },\n        stop: function () {\n            eventSubscription.unsubscribe();\n            firstInputSubscription.unsubscribe();\n        },\n    };\n}\nfunction trackLongestInteractions(getViewInteractionCount) {\n    var longestInteractions = [];\n    function sortAndTrimLongestInteractions() {\n        longestInteractions.sort(function (a, b) { return b.duration - a.duration; }).splice(MAX_INTERACTION_ENTRIES);\n    }\n    return {\n        /**\n         * Process the performance entry:\n         * - if its duration is long enough, add the performance entry to the list of worst interactions\n         * - if an entry with the same interaction id exists and its duration is lower than the new one, then replace it in the list of worst interactions\n         */\n        process: function (entry) {\n            var interactionIndex = longestInteractions.findIndex(function (interaction) { return entry.interactionId === interaction.interactionId; });\n            var minLongestInteraction = longestInteractions[longestInteractions.length - 1];\n            if (interactionIndex !== -1) {\n                if (entry.duration > longestInteractions[interactionIndex].duration) {\n                    longestInteractions[interactionIndex] = entry;\n                    sortAndTrimLongestInteractions();\n                }\n            }\n            else if (longestInteractions.length < MAX_INTERACTION_ENTRIES ||\n                entry.duration > minLongestInteraction.duration) {\n                longestInteractions.push(entry);\n                sortAndTrimLongestInteractions();\n            }\n        },\n        /**\n         * Compute the p98 longest interaction.\n         * For better performance the computation is based on 10 longest interactions and the interaction count of the current view.\n         */\n        estimateP98Interaction: function () {\n            var interactionIndex = Math.min(longestInteractions.length - 1, Math.floor(getViewInteractionCount() / 50));\n            return longestInteractions[interactionIndex];\n        },\n    };\n}\nexport function trackViewInteractionCount(viewLoadingType) {\n    initInteractionCountPolyfill();\n    var previousInteractionCount = viewLoadingType === \"initial_load\" /* ViewLoadingType.INITIAL_LOAD */ ? 0 : getInteractionCount();\n    var state = { stopped: false };\n    function computeViewInteractionCount() {\n        return getInteractionCount() - previousInteractionCount;\n    }\n    return {\n        getViewInteractionCount: function () {\n            if (state.stopped) {\n                return state.interactionCount;\n            }\n            return computeViewInteractionCount();\n        },\n        stopViewInteractionCount: function () {\n            state = { stopped: true, interactionCount: computeViewInteractionCount() };\n        },\n    };\n}\nexport function isInteractionToNextPaintSupported() {\n    return (supportPerformanceTimingEvent(RumPerformanceEntryType.EVENT) &&\n        window.PerformanceEventTiming &&\n        'interactionId' in PerformanceEventTiming.prototype);\n}\n//# sourceMappingURL=trackInteractionToNextPaint.js.map","export function getScrollX() {\n    var scrollX;\n    var visual = window.visualViewport;\n    if (visual) {\n        scrollX = visual.pageLeft - visual.offsetLeft;\n    }\n    else if (window.scrollX !== undefined) {\n        scrollX = window.scrollX;\n    }\n    else {\n        scrollX = window.pageXOffset || 0;\n    }\n    return Math.round(scrollX);\n}\nexport function getScrollY() {\n    var scrollY;\n    var visual = window.visualViewport;\n    if (visual) {\n        scrollY = visual.pageTop - visual.offsetTop;\n    }\n    else if (window.scrollY !== undefined) {\n        scrollY = window.scrollY;\n    }\n    else {\n        scrollY = window.pageYOffset || 0;\n    }\n    return Math.round(scrollY);\n}\n//# sourceMappingURL=scroll.js.map","import { Observable, ONE_SECOND, elapsed, relativeNow, throttle, addEventListener, monitor, } from '@datadog/browser-core';\nimport { getScrollY } from '../../../browser/scroll';\nimport { getViewportDimension } from '../../../browser/viewportObservable';\n/** Arbitrary scroll throttle duration */\nexport var THROTTLE_SCROLL_DURATION = ONE_SECOND;\nexport function trackScrollMetrics(configuration, viewStart, callback, scrollValues) {\n    if (scrollValues === void 0) { scrollValues = createScrollValuesObservable(configuration); }\n    var maxScrollDepth = 0;\n    var maxScrollHeight = 0;\n    var maxScrollHeightTime = 0;\n    var subscription = scrollValues.subscribe(function (_a) {\n        var scrollDepth = _a.scrollDepth, scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight;\n        var shouldUpdate = false;\n        if (scrollDepth > maxScrollDepth) {\n            maxScrollDepth = scrollDepth;\n            shouldUpdate = true;\n        }\n        if (scrollHeight > maxScrollHeight) {\n            maxScrollHeight = scrollHeight;\n            var now = relativeNow();\n            maxScrollHeightTime = elapsed(viewStart.relative, now);\n            shouldUpdate = true;\n        }\n        if (shouldUpdate) {\n            callback({\n                maxDepth: Math.min(maxScrollDepth, maxScrollHeight),\n                maxDepthScrollTop: scrollTop,\n                maxScrollHeight: maxScrollHeight,\n                maxScrollHeightTime: maxScrollHeightTime,\n            });\n        }\n    });\n    return {\n        stop: function () { return subscription.unsubscribe(); },\n    };\n}\nexport function computeScrollValues() {\n    var scrollTop = getScrollY();\n    var height = getViewportDimension().height;\n    var scrollHeight = Math.round((document.scrollingElement || document.documentElement).scrollHeight);\n    var scrollDepth = Math.round(height + scrollTop);\n    return {\n        scrollHeight: scrollHeight,\n        scrollDepth: scrollDepth,\n        scrollTop: scrollTop,\n    };\n}\nexport function createScrollValuesObservable(configuration, throttleDuration) {\n    if (throttleDuration === void 0) { throttleDuration = THROTTLE_SCROLL_DURATION; }\n    return new Observable(function (observable) {\n        function notify() {\n            observable.notify(computeScrollValues());\n        }\n        if (window.ResizeObserver) {\n            var throttledNotify_1 = throttle(notify, throttleDuration, {\n                leading: false,\n                trailing: true,\n            });\n            var observerTarget = document.scrollingElement || document.documentElement;\n            var resizeObserver_1 = new ResizeObserver(monitor(throttledNotify_1.throttled));\n            if (observerTarget) {\n                resizeObserver_1.observe(observerTarget);\n            }\n            var eventListener_1 = addEventListener(configuration, window, \"scroll\" /* DOM_EVENT.SCROLL */, throttledNotify_1.throttled, {\n                passive: true,\n            });\n            return function () {\n                throttledNotify_1.cancel();\n                resizeObserver_1.disconnect();\n                eventListener_1.stop();\n            };\n        }\n    });\n}\n//# sourceMappingURL=trackScrollMetrics.js.map","import { trackCumulativeLayoutShift } from './trackCumulativeLayoutShift';\nimport { trackInteractionToNextPaint } from './trackInteractionToNextPaint';\nimport { trackLoadingTime } from './trackLoadingTime';\nimport { trackScrollMetrics } from './trackScrollMetrics';\nexport function trackCommonViewMetrics(lifeCycle, domMutationObservable, windowOpenObservable, configuration, scheduleViewUpdate, loadingType, viewStart) {\n    var commonViewMetrics = {};\n    var _a = trackLoadingTime(lifeCycle, domMutationObservable, windowOpenObservable, configuration, loadingType, viewStart, function (newLoadingTime) {\n        commonViewMetrics.loadingTime = newLoadingTime;\n        scheduleViewUpdate();\n    }), stopLoadingTimeTracking = _a.stop, setLoadEvent = _a.setLoadEvent;\n    var stopScrollMetricsTracking = trackScrollMetrics(configuration, viewStart, function (newScrollMetrics) {\n        commonViewMetrics.scroll = newScrollMetrics;\n    }).stop;\n    var stopCLSTracking = trackCumulativeLayoutShift(configuration, viewStart.relative, function (cumulativeLayoutShift) {\n        commonViewMetrics.cumulativeLayoutShift = cumulativeLayoutShift;\n        scheduleViewUpdate();\n    }).stop;\n    var _b = trackInteractionToNextPaint(configuration, viewStart.relative, loadingType), stopINPTracking = _b.stop, getInteractionToNextPaint = _b.getInteractionToNextPaint, setViewEnd = _b.setViewEnd;\n    return {\n        stop: function () {\n            stopLoadingTimeTracking();\n            stopCLSTracking();\n            stopScrollMetricsTracking();\n        },\n        stopINPTracking: stopINPTracking,\n        setLoadEvent: setLoadEvent,\n        setViewEnd: setViewEnd,\n        getCommonViewMetrics: function () {\n            commonViewMetrics.interactionToNextPaint = getInteractionToNextPaint();\n            return commonViewMetrics;\n        },\n    };\n}\n//# sourceMappingURL=trackCommonViewMetrics.js.map","import { elapsed } from '@datadog/browser-core';\nimport { waitPageActivityEnd } from '../../waitPageActivityEnd';\nimport { trackFirstHidden } from './trackFirstHidden';\nexport function trackLoadingTime(lifeCycle, domMutationObservable, windowOpenObservable, configuration, loadType, viewStart, callback) {\n    var isWaitingForLoadEvent = loadType === \"initial_load\" /* ViewLoadingType.INITIAL_LOAD */;\n    var isWaitingForActivityLoadingTime = true;\n    var loadingTimeCandidates = [];\n    var firstHidden = trackFirstHidden(configuration);\n    function invokeCallbackIfAllCandidatesAreReceived() {\n        if (!isWaitingForActivityLoadingTime && !isWaitingForLoadEvent && loadingTimeCandidates.length > 0) {\n            var loadingTime = Math.max.apply(Math, loadingTimeCandidates);\n            if (loadingTime < firstHidden.timeStamp) {\n                callback(loadingTime);\n            }\n        }\n    }\n    var stop = waitPageActivityEnd(lifeCycle, domMutationObservable, windowOpenObservable, configuration, function (event) {\n        if (isWaitingForActivityLoadingTime) {\n            isWaitingForActivityLoadingTime = false;\n            if (event.hadActivity) {\n                loadingTimeCandidates.push(elapsed(viewStart.timeStamp, event.end));\n            }\n            invokeCallbackIfAllCandidatesAreReceived();\n        }\n    }).stop;\n    return {\n        stop: function () {\n            stop();\n            firstHidden.stop();\n        },\n        setLoadEvent: function (loadEvent) {\n            if (isWaitingForLoadEvent) {\n                isWaitingForLoadEvent = false;\n                loadingTimeCandidates.push(loadEvent);\n                invokeCallbackIfAllCandidatesAreReceived();\n            }\n        },\n    };\n}\n//# sourceMappingURL=trackLoadingTime.js.map","import { noop, PageExitReason, shallowClone, elapsed, generateUUID, ONE_MINUTE, throttle, clocksNow, clocksOrigin, timeStampNow, display, looksLikeRelativeTime, setInterval, clearInterval, setTimeout, Observable, createContextManager, } from '@datadog/browser-core';\nimport { trackViewEventCounts } from './trackViewEventCounts';\nimport { trackInitialViewMetrics } from './viewMetrics/trackInitialViewMetrics';\nimport { trackCommonViewMetrics } from './viewMetrics/trackCommonViewMetrics';\nexport var THROTTLE_VIEW_UPDATE_PERIOD = 3000;\nexport var SESSION_KEEP_ALIVE_INTERVAL = 5 * ONE_MINUTE;\n// Some events or metrics can be captured after the end of the view. To avoid missing those;\n// an arbitrary delay is added for stopping their tracking after the view ends.\n//\n// Ideally, we would not stop and keep tracking events or metrics until the end of the session.\n// But this might have a small performance impact if there are many many views.\n// So let's have a fairly short delay improving the situation in most cases and avoid impacting performances too much.\nexport var KEEP_TRACKING_AFTER_VIEW_DELAY = 5 * ONE_MINUTE;\nexport function trackViews(location, lifeCycle, domMutationObservable, windowOpenObservable, configuration, locationChangeObservable, areViewsTrackedAutomatically, initialViewOptions) {\n    var activeViews = new Set();\n    var currentView = startNewView(\"initial_load\" /* ViewLoadingType.INITIAL_LOAD */, clocksOrigin(), initialViewOptions);\n    startViewLifeCycle();\n    var locationChangeSubscription;\n    if (areViewsTrackedAutomatically) {\n        locationChangeSubscription = renewViewOnLocationChange(locationChangeObservable);\n    }\n    function startNewView(loadingType, startClocks, viewOptions) {\n        var newlyCreatedView = newView(lifeCycle, domMutationObservable, windowOpenObservable, configuration, location, loadingType, startClocks, viewOptions);\n        activeViews.add(newlyCreatedView);\n        newlyCreatedView.stopObservable.subscribe(function () {\n            activeViews.delete(newlyCreatedView);\n        });\n        return newlyCreatedView;\n    }\n    function startViewLifeCycle() {\n        lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n            // Renew view on session renewal\n            currentView = startNewView(\"route_change\" /* ViewLoadingType.ROUTE_CHANGE */, undefined, {\n                name: currentView.name,\n                service: currentView.service,\n                version: currentView.version,\n                context: currentView.contextManager.getContext(),\n            });\n        });\n        lifeCycle.subscribe(9 /* LifeCycleEventType.SESSION_EXPIRED */, function () {\n            currentView.end({ sessionIsActive: false });\n        });\n        // End the current view on page unload\n        lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_EXITED */, function (pageExitEvent) {\n            if (pageExitEvent.reason === PageExitReason.UNLOADING) {\n                currentView.end();\n            }\n        });\n    }\n    function renewViewOnLocationChange(locationChangeObservable) {\n        return locationChangeObservable.subscribe(function (_a) {\n            var oldLocation = _a.oldLocation, newLocation = _a.newLocation;\n            if (areDifferentLocation(oldLocation, newLocation)) {\n                currentView.end();\n                currentView = startNewView(\"route_change\" /* ViewLoadingType.ROUTE_CHANGE */);\n            }\n        });\n    }\n    return {\n        addTiming: function (name, time) {\n            if (time === void 0) { time = timeStampNow(); }\n            currentView.addTiming(name, time);\n        },\n        startView: function (options, startClocks) {\n            currentView.end({ endClocks: startClocks });\n            currentView = startNewView(\"route_change\" /* ViewLoadingType.ROUTE_CHANGE */, startClocks, options);\n        },\n        setViewContext: function (context) {\n            currentView.contextManager.setContext(context);\n        },\n        setViewContextProperty: function (key, value) {\n            currentView.contextManager.setContextProperty(key, value);\n        },\n        setViewName: function (name) {\n            currentView.setViewName(name);\n        },\n        stop: function () {\n            if (locationChangeSubscription) {\n                locationChangeSubscription.unsubscribe();\n            }\n            currentView.end();\n            activeViews.forEach(function (view) { return view.stop(); });\n        },\n    };\n}\nfunction newView(lifeCycle, domMutationObservable, windowOpenObservable, configuration, initialLocation, loadingType, startClocks, viewOptions) {\n    if (startClocks === void 0) { startClocks = clocksNow(); }\n    // Setup initial values\n    var id = generateUUID();\n    var stopObservable = new Observable();\n    var customTimings = {};\n    var documentVersion = 0;\n    var endClocks;\n    var location = shallowClone(initialLocation);\n    var contextManager = createContextManager();\n    var sessionIsActive = true;\n    var name;\n    var service;\n    var version;\n    var context;\n    if (viewOptions) {\n        name = viewOptions.name;\n        service = viewOptions.service || undefined;\n        version = viewOptions.version || undefined;\n        if (viewOptions.context) {\n            context = viewOptions.context;\n            // use ContextManager to update the context so we always sanitize it\n            contextManager.setContext(context);\n        }\n    }\n    var viewCreatedEvent = {\n        id: id,\n        name: name,\n        startClocks: startClocks,\n        service: service,\n        version: version,\n        context: context,\n    };\n    lifeCycle.notify(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, viewCreatedEvent);\n    lifeCycle.notify(2 /* LifeCycleEventType.VIEW_CREATED */, viewCreatedEvent);\n    // Update the view every time the measures are changing\n    var _a = throttle(triggerViewUpdate, THROTTLE_VIEW_UPDATE_PERIOD, {\n        leading: false,\n    }), scheduleViewUpdate = _a.throttled, cancelScheduleViewUpdate = _a.cancel;\n    var _b = trackCommonViewMetrics(lifeCycle, domMutationObservable, windowOpenObservable, configuration, scheduleViewUpdate, loadingType, startClocks), setLoadEvent = _b.setLoadEvent, setViewEnd = _b.setViewEnd, stopCommonViewMetricsTracking = _b.stop, stopINPTracking = _b.stopINPTracking, getCommonViewMetrics = _b.getCommonViewMetrics;\n    var _c = loadingType === \"initial_load\" /* ViewLoadingType.INITIAL_LOAD */\n        ? trackInitialViewMetrics(configuration, setLoadEvent, scheduleViewUpdate)\n        : { stop: noop, initialViewMetrics: {} }, stopInitialViewMetricsTracking = _c.stop, initialViewMetrics = _c.initialViewMetrics;\n    var _d = trackViewEventCounts(lifeCycle, id, scheduleViewUpdate), stopEventCountsTracking = _d.stop, eventCounts = _d.eventCounts;\n    // Session keep alive\n    var keepAliveIntervalId = setInterval(triggerViewUpdate, SESSION_KEEP_ALIVE_INTERVAL);\n    // Initial view update\n    triggerViewUpdate();\n    // View context update should always be throttled\n    contextManager.changeObservable.subscribe(function () {\n        lifeCycle.notify(3 /* LifeCycleEventType.BEFORE_VIEW_UPDATED */, {\n            id: id,\n            name: name,\n            context: contextManager.getContext(),\n            startClocks: startClocks,\n        });\n        scheduleViewUpdate();\n    });\n    function triggerViewUpdate() {\n        cancelScheduleViewUpdate();\n        documentVersion += 1;\n        var currentEnd = endClocks === undefined ? timeStampNow() : endClocks.timeStamp;\n        lifeCycle.notify(4 /* LifeCycleEventType.VIEW_UPDATED */, {\n            customTimings: customTimings,\n            documentVersion: documentVersion,\n            id: id,\n            name: name,\n            service: service,\n            version: version,\n            context: contextManager.getContext(),\n            loadingType: loadingType,\n            location: location,\n            startClocks: startClocks,\n            commonViewMetrics: getCommonViewMetrics(),\n            initialViewMetrics: initialViewMetrics,\n            duration: elapsed(startClocks.timeStamp, currentEnd),\n            isActive: endClocks === undefined,\n            sessionIsActive: sessionIsActive,\n            eventCounts: eventCounts,\n        });\n    }\n    return {\n        get name() {\n            return name;\n        },\n        service: service,\n        version: version,\n        contextManager: contextManager,\n        stopObservable: stopObservable,\n        end: function (options) {\n            var _this = this;\n            var _a, _b;\n            if (options === void 0) { options = {}; }\n            if (endClocks) {\n                // view already ended\n                return;\n            }\n            endClocks = (_a = options.endClocks) !== null && _a !== void 0 ? _a : clocksNow();\n            sessionIsActive = (_b = options.sessionIsActive) !== null && _b !== void 0 ? _b : true;\n            lifeCycle.notify(5 /* LifeCycleEventType.VIEW_ENDED */, { endClocks: endClocks });\n            lifeCycle.notify(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, { endClocks: endClocks });\n            clearInterval(keepAliveIntervalId);\n            setViewEnd(endClocks.relative);\n            stopCommonViewMetricsTracking();\n            triggerViewUpdate();\n            setTimeout(function () {\n                _this.stop();\n            }, KEEP_TRACKING_AFTER_VIEW_DELAY);\n        },\n        stop: function () {\n            stopInitialViewMetricsTracking();\n            stopEventCountsTracking();\n            stopINPTracking();\n            stopObservable.notify();\n        },\n        addTiming: function (name, time) {\n            if (endClocks) {\n                return;\n            }\n            var relativeTime = looksLikeRelativeTime(time) ? time : elapsed(startClocks.timeStamp, time);\n            customTimings[sanitizeTiming(name)] = relativeTime;\n            scheduleViewUpdate();\n        },\n        setViewName: function (updatedName) {\n            name = updatedName;\n            triggerViewUpdate();\n        },\n    };\n}\n/**\n * Timing name is used as facet path that must contain only letters, digits, or the characters - _ . @ $\n */\nfunction sanitizeTiming(name) {\n    var sanitized = name.replace(/[^a-zA-Z0-9-_.@$]/g, '_');\n    if (sanitized !== name) {\n        display.warn(\"Invalid timing name: \".concat(name, \", sanitized to: \").concat(sanitized));\n    }\n    return sanitized;\n}\nfunction areDifferentLocation(currentLocation, otherLocation) {\n    return (currentLocation.pathname !== otherLocation.pathname ||\n        (!isHashAnAnchor(otherLocation.hash) &&\n            getPathFromHash(otherLocation.hash) !== getPathFromHash(currentLocation.hash)));\n}\nfunction isHashAnAnchor(hash) {\n    var correspondingId = hash.substring(1);\n    // check if the correspondingId is empty because on Firefox an empty string passed to getElementById() prints a consol warning\n    return correspondingId !== '' && !!document.getElementById(correspondingId);\n}\nfunction getPathFromHash(hash) {\n    var index = hash.indexOf('?');\n    return index < 0 ? hash : hash.slice(0, index);\n}\n//# sourceMappingURL=trackViews.js.map","import { trackEventCounts } from '../trackEventCounts';\nexport function trackViewEventCounts(lifeCycle, viewId, onChange) {\n    var _a = trackEventCounts({\n        lifeCycle: lifeCycle,\n        isChildEvent: function (event) { return event.view.id === viewId; },\n        onChange: onChange,\n    }), stop = _a.stop, eventCounts = _a.eventCounts;\n    return {\n        stop: stop,\n        eventCounts: eventCounts,\n    };\n}\n//# sourceMappingURL=trackViewEventCounts.js.map","import { isEmptyObject, mapValues, toServerDuration } from '@datadog/browser-core';\nimport { discardNegativeDuration } from '../discardNegativeDuration';\nimport { trackViews } from './trackViews';\nexport function startViewCollection(lifeCycle, configuration, location, domMutationObservable, pageOpenObserable, locationChangeObservable, featureFlagContexts, pageStateHistory, recorderApi, initialViewOptions) {\n    lifeCycle.subscribe(4 /* LifeCycleEventType.VIEW_UPDATED */, function (view) {\n        return lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, processViewUpdate(view, configuration, featureFlagContexts, recorderApi, pageStateHistory));\n    });\n    return trackViews(location, lifeCycle, domMutationObservable, pageOpenObserable, configuration, locationChangeObservable, !configuration.trackViewsManually, initialViewOptions);\n}\nfunction processViewUpdate(view, configuration, featureFlagContexts, recorderApi, pageStateHistory) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;\n    var replayStats = recorderApi.getReplayStats(view.id);\n    var featureFlagContext = featureFlagContexts.findFeatureFlagEvaluations(view.startClocks.relative);\n    var pageStates = pageStateHistory.findAll(view.startClocks.relative, view.duration);\n    var viewEvent = {\n        _dd: {\n            document_version: view.documentVersion,\n            replay_stats: replayStats,\n            page_states: pageStates,\n            configuration: {\n                start_session_replay_recording_manually: configuration.startSessionReplayRecordingManually,\n            },\n        },\n        date: view.startClocks.timeStamp,\n        type: \"view\" /* RumEventType.VIEW */,\n        view: {\n            action: {\n                count: view.eventCounts.actionCount,\n            },\n            frustration: {\n                count: view.eventCounts.frustrationCount,\n            },\n            cumulative_layout_shift: (_a = view.commonViewMetrics.cumulativeLayoutShift) === null || _a === void 0 ? void 0 : _a.value,\n            cumulative_layout_shift_time: toServerDuration((_b = view.commonViewMetrics.cumulativeLayoutShift) === null || _b === void 0 ? void 0 : _b.time),\n            cumulative_layout_shift_target_selector: (_c = view.commonViewMetrics.cumulativeLayoutShift) === null || _c === void 0 ? void 0 : _c.targetSelector,\n            first_byte: toServerDuration((_d = view.initialViewMetrics.navigationTimings) === null || _d === void 0 ? void 0 : _d.firstByte),\n            dom_complete: toServerDuration((_e = view.initialViewMetrics.navigationTimings) === null || _e === void 0 ? void 0 : _e.domComplete),\n            dom_content_loaded: toServerDuration((_f = view.initialViewMetrics.navigationTimings) === null || _f === void 0 ? void 0 : _f.domContentLoaded),\n            dom_interactive: toServerDuration((_g = view.initialViewMetrics.navigationTimings) === null || _g === void 0 ? void 0 : _g.domInteractive),\n            error: {\n                count: view.eventCounts.errorCount,\n            },\n            first_contentful_paint: toServerDuration(view.initialViewMetrics.firstContentfulPaint),\n            first_input_delay: toServerDuration((_h = view.initialViewMetrics.firstInput) === null || _h === void 0 ? void 0 : _h.delay),\n            first_input_time: toServerDuration((_j = view.initialViewMetrics.firstInput) === null || _j === void 0 ? void 0 : _j.time),\n            first_input_target_selector: (_k = view.initialViewMetrics.firstInput) === null || _k === void 0 ? void 0 : _k.targetSelector,\n            interaction_to_next_paint: toServerDuration((_l = view.commonViewMetrics.interactionToNextPaint) === null || _l === void 0 ? void 0 : _l.value),\n            interaction_to_next_paint_time: toServerDuration((_m = view.commonViewMetrics.interactionToNextPaint) === null || _m === void 0 ? void 0 : _m.time),\n            interaction_to_next_paint_target_selector: (_o = view.commonViewMetrics.interactionToNextPaint) === null || _o === void 0 ? void 0 : _o.targetSelector,\n            is_active: view.isActive,\n            name: view.name,\n            largest_contentful_paint: toServerDuration((_p = view.initialViewMetrics.largestContentfulPaint) === null || _p === void 0 ? void 0 : _p.value),\n            largest_contentful_paint_target_selector: (_q = view.initialViewMetrics.largestContentfulPaint) === null || _q === void 0 ? void 0 : _q.targetSelector,\n            load_event: toServerDuration((_r = view.initialViewMetrics.navigationTimings) === null || _r === void 0 ? void 0 : _r.loadEvent),\n            loading_time: discardNegativeDuration(toServerDuration(view.commonViewMetrics.loadingTime)),\n            loading_type: view.loadingType,\n            long_task: {\n                count: view.eventCounts.longTaskCount,\n            },\n            resource: {\n                count: view.eventCounts.resourceCount,\n            },\n            time_spent: toServerDuration(view.duration),\n        },\n        feature_flags: featureFlagContext && !isEmptyObject(featureFlagContext) ? featureFlagContext : undefined,\n        display: view.commonViewMetrics.scroll\n            ? {\n                scroll: {\n                    max_depth: view.commonViewMetrics.scroll.maxDepth,\n                    max_depth_scroll_top: view.commonViewMetrics.scroll.maxDepthScrollTop,\n                    max_scroll_height: view.commonViewMetrics.scroll.maxScrollHeight,\n                    max_scroll_height_time: toServerDuration(view.commonViewMetrics.scroll.maxScrollHeightTime),\n                },\n            }\n            : undefined,\n        session: {\n            has_replay: replayStats ? true : undefined,\n            is_active: view.sessionIsActive ? undefined : false,\n        },\n        privacy: {\n            replay_level: configuration.defaultPrivacyLevel,\n        },\n    };\n    if (!isEmptyObject(view.customTimings)) {\n        viewEvent.view.custom_timings = mapValues(view.customTimings, toServerDuration);\n    }\n    return {\n        rawRumEvent: viewEvent,\n        startTime: view.startClocks.relative,\n        domainContext: {\n            location: view.location,\n        },\n    };\n}\n//# sourceMappingURL=viewCollection.js.map","import { Observable } from '../../tools/observable';\nimport { createValueHistory } from '../../tools/valueHistory';\nimport { relativeNow, clocksOrigin, ONE_MINUTE } from '../../tools/utils/timeUtils';\nimport { addEventListener, addEventListeners } from '../../browser/addEventListener';\nimport { clearInterval, setInterval } from '../../tools/timer';\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants';\nimport { startSessionStore } from './sessionStore';\nexport var VISIBILITY_CHECK_DELAY = ONE_MINUTE;\nvar SESSION_CONTEXT_TIMEOUT_DELAY = SESSION_TIME_OUT_DELAY;\nvar stopCallbacks = [];\nexport function startSessionManager(configuration, productKey, computeSessionState, trackingConsentState) {\n    var renewObservable = new Observable();\n    var expireObservable = new Observable();\n    // TODO - Improve configuration type and remove assertion\n    var sessionStore = startSessionStore(configuration.sessionStoreStrategyType, productKey, computeSessionState);\n    stopCallbacks.push(function () { return sessionStore.stop(); });\n    var sessionContextHistory = createValueHistory({\n        expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY,\n    });\n    stopCallbacks.push(function () { return sessionContextHistory.stop(); });\n    sessionStore.renewObservable.subscribe(function () {\n        sessionContextHistory.add(buildSessionContext(), relativeNow());\n        renewObservable.notify();\n    });\n    sessionStore.expireObservable.subscribe(function () {\n        expireObservable.notify();\n        sessionContextHistory.closeActive(relativeNow());\n    });\n    // We expand/renew session unconditionally as tracking consent is always granted when the session\n    // manager is started.\n    sessionStore.expandOrRenewSession();\n    sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative);\n    trackingConsentState.observable.subscribe(function () {\n        if (trackingConsentState.isGranted()) {\n            sessionStore.expandOrRenewSession();\n        }\n        else {\n            sessionStore.expire();\n        }\n    });\n    trackActivity(configuration, function () {\n        if (trackingConsentState.isGranted()) {\n            sessionStore.expandOrRenewSession();\n        }\n    });\n    trackVisibility(configuration, function () { return sessionStore.expandSession(); });\n    trackResume(configuration, function () { return sessionStore.restartSession(); });\n    function buildSessionContext() {\n        return {\n            id: sessionStore.getSession().id,\n            trackingType: sessionStore.getSession()[productKey],\n            isReplayForced: !!sessionStore.getSession().forcedReplay,\n            anonymousId: sessionStore.getSession().anonymousId,\n        };\n    }\n    return {\n        findSession: function (startTime, options) { return sessionContextHistory.find(startTime, options); },\n        renewObservable: renewObservable,\n        expireObservable: expireObservable,\n        sessionStateUpdateObservable: sessionStore.sessionStateUpdateObservable,\n        expire: sessionStore.expire,\n        updateSessionState: sessionStore.updateSessionState,\n    };\n}\nexport function stopSessionManager() {\n    stopCallbacks.forEach(function (e) { return e(); });\n    stopCallbacks = [];\n}\nfunction trackActivity(configuration, expandOrRenewSession) {\n    var stop = addEventListeners(configuration, window, [\"click\" /* DOM_EVENT.CLICK */, \"touchstart\" /* DOM_EVENT.TOUCH_START */, \"keydown\" /* DOM_EVENT.KEY_DOWN */, \"scroll\" /* DOM_EVENT.SCROLL */], expandOrRenewSession, { capture: true, passive: true }).stop;\n    stopCallbacks.push(stop);\n}\nfunction trackVisibility(configuration, expandSession) {\n    var expandSessionWhenVisible = function () {\n        if (document.visibilityState === 'visible') {\n            expandSession();\n        }\n    };\n    var stop = addEventListener(configuration, document, \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */, expandSessionWhenVisible).stop;\n    stopCallbacks.push(stop);\n    var visibilityCheckInterval = setInterval(expandSessionWhenVisible, VISIBILITY_CHECK_DELAY);\n    stopCallbacks.push(function () {\n        clearInterval(visibilityCheckInterval);\n    });\n}\nfunction trackResume(configuration, cb) {\n    var stop = addEventListener(configuration, window, \"resume\" /* DOM_EVENT.RESUME */, cb, { capture: true }).stop;\n    stopCallbacks.push(stop);\n}\n//# sourceMappingURL=sessionManager.js.map","import { Observable, bridgeSupports, noop, performDraw, startSessionManager, } from '@datadog/browser-core';\nexport var RUM_SESSION_KEY = 'rum';\nexport function startRumSessionManager(configuration, lifeCycle, trackingConsentState) {\n    var sessionManager = startSessionManager(configuration, RUM_SESSION_KEY, function (rawTrackingType) { return computeSessionState(configuration, rawTrackingType); }, trackingConsentState);\n    sessionManager.expireObservable.subscribe(function () {\n        lifeCycle.notify(9 /* LifeCycleEventType.SESSION_EXPIRED */);\n    });\n    sessionManager.renewObservable.subscribe(function () {\n        lifeCycle.notify(10 /* LifeCycleEventType.SESSION_RENEWED */);\n    });\n    sessionManager.sessionStateUpdateObservable.subscribe(function (_a) {\n        var previousState = _a.previousState, newState = _a.newState;\n        if (!previousState.forcedReplay && newState.forcedReplay) {\n            var sessionEntity = sessionManager.findSession();\n            if (sessionEntity) {\n                sessionEntity.isReplayForced = true;\n            }\n        }\n    });\n    return {\n        findTrackedSession: function (startTime) {\n            var session = sessionManager.findSession(startTime);\n            if (!session || !isTypeTracked(session.trackingType)) {\n                return;\n            }\n            return {\n                id: session.id,\n                sessionReplay: session.trackingType === \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */\n                    ? 1 /* SessionReplayState.SAMPLED */\n                    : session.isReplayForced\n                        ? 2 /* SessionReplayState.FORCED */\n                        : 0 /* SessionReplayState.OFF */,\n                anonymousId: session.anonymousId,\n            };\n        },\n        expire: sessionManager.expire,\n        expireObservable: sessionManager.expireObservable,\n        setForcedReplay: function () { return sessionManager.updateSessionState({ forcedReplay: '1' }); },\n    };\n}\n/**\n * Start a tracked replay session stub\n */\nexport function startRumSessionManagerStub() {\n    var session = {\n        id: '00000000-aaaa-0000-aaaa-000000000000',\n        sessionReplay: bridgeSupports(\"records\" /* BridgeCapability.RECORDS */) ? 1 /* SessionReplayState.SAMPLED */ : 0 /* SessionReplayState.OFF */,\n    };\n    return {\n        findTrackedSession: function () { return session; },\n        expire: noop,\n        expireObservable: new Observable(),\n        setForcedReplay: noop,\n    };\n}\nfunction computeSessionState(configuration, rawTrackingType) {\n    var trackingType;\n    if (hasValidRumSession(rawTrackingType)) {\n        trackingType = rawTrackingType;\n    }\n    else if (!performDraw(configuration.sessionSampleRate)) {\n        trackingType = \"0\" /* RumTrackingType.NOT_TRACKED */;\n    }\n    else if (!performDraw(configuration.sessionReplaySampleRate)) {\n        trackingType = \"2\" /* RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY */;\n    }\n    else {\n        trackingType = \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */;\n    }\n    return {\n        trackingType: trackingType,\n        isTracked: isTypeTracked(trackingType),\n    };\n}\nfunction hasValidRumSession(trackingType) {\n    return (trackingType === \"0\" /* RumTrackingType.NOT_TRACKED */ ||\n        trackingType === \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */ ||\n        trackingType === \"2\" /* RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY */);\n}\nfunction isTypeTracked(rumSessionType) {\n    return (rumSessionType === \"2\" /* RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY */ ||\n        rumSessionType === \"1\" /* RumTrackingType.TRACKED_WITH_SESSION_REPLAY */);\n}\n//# sourceMappingURL=rumSessionManager.js.map","import { DOCS_TROUBLESHOOTING, MORE_DETAILS, display } from '../tools/display';\nimport { objectValues } from '../tools/utils/polyfills';\nimport { isPageExitReason } from '../browser/pageExitObservable';\nimport { jsonStringify } from '../tools/serialisation/jsonStringify';\nimport { computeBytesCount } from '../tools/utils/byteUtils';\nexport function createBatch(_a) {\n    var encoder = _a.encoder, request = _a.request, flushController = _a.flushController, messageBytesLimit = _a.messageBytesLimit;\n    var upsertBuffer = {};\n    var flushSubscription = flushController.flushObservable.subscribe(function (event) { return flush(event); });\n    function push(serializedMessage, estimatedMessageBytesCount, key) {\n        flushController.notifyBeforeAddMessage(estimatedMessageBytesCount);\n        if (key !== undefined) {\n            upsertBuffer[key] = serializedMessage;\n            flushController.notifyAfterAddMessage();\n        }\n        else {\n            encoder.write(encoder.isEmpty ? serializedMessage : \"\\n\".concat(serializedMessage), function (realMessageBytesCount) {\n                flushController.notifyAfterAddMessage(realMessageBytesCount - estimatedMessageBytesCount);\n            });\n        }\n    }\n    function hasMessageFor(key) {\n        return key !== undefined && upsertBuffer[key] !== undefined;\n    }\n    function remove(key) {\n        var removedMessage = upsertBuffer[key];\n        delete upsertBuffer[key];\n        var messageBytesCount = encoder.estimateEncodedBytesCount(removedMessage);\n        flushController.notifyAfterRemoveMessage(messageBytesCount);\n    }\n    function addOrUpdate(message, key) {\n        var serializedMessage = jsonStringify(message);\n        var estimatedMessageBytesCount = encoder.estimateEncodedBytesCount(serializedMessage);\n        if (estimatedMessageBytesCount >= messageBytesLimit) {\n            display.warn(\"Discarded a message whose size was bigger than the maximum allowed size \".concat(messageBytesLimit, \"KB. \").concat(MORE_DETAILS, \" \").concat(DOCS_TROUBLESHOOTING, \"/#technical-limitations\"));\n            return;\n        }\n        if (hasMessageFor(key)) {\n            remove(key);\n        }\n        push(serializedMessage, estimatedMessageBytesCount, key);\n    }\n    function flush(event) {\n        var upsertMessages = objectValues(upsertBuffer).join('\\n');\n        upsertBuffer = {};\n        var isPageExit = isPageExitReason(event.reason);\n        var send = isPageExit ? request.sendOnExit : request.send;\n        if (isPageExit &&\n            // Note: checking that the encoder is async is not strictly needed, but it's an optimization:\n            // if the encoder is async we need to send two requests in some cases (one for encoded data\n            // and the other for non-encoded data). But if it's not async, we don't have to worry about\n            // it and always send a single request.\n            encoder.isAsync) {\n            var encoderResult = encoder.finishSync();\n            // Send encoded messages\n            if (encoderResult.outputBytesCount) {\n                send(formatPayloadFromEncoder(encoderResult));\n            }\n            // Send messages that are not yet encoded at this point\n            var pendingMessages = [encoderResult.pendingData, upsertMessages].filter(Boolean).join('\\n');\n            if (pendingMessages) {\n                send({\n                    data: pendingMessages,\n                    bytesCount: computeBytesCount(pendingMessages),\n                });\n            }\n        }\n        else {\n            if (upsertMessages) {\n                encoder.write(encoder.isEmpty ? upsertMessages : \"\\n\".concat(upsertMessages));\n            }\n            encoder.finish(function (encoderResult) {\n                send(formatPayloadFromEncoder(encoderResult));\n            });\n        }\n    }\n    return {\n        flushController: flushController,\n        add: addOrUpdate,\n        upsert: addOrUpdate,\n        stop: flushSubscription.unsubscribe,\n    };\n}\nfunction formatPayloadFromEncoder(encoderResult) {\n    var data;\n    if (typeof encoderResult.output === 'string') {\n        data = encoderResult.output;\n    }\n    else {\n        data = new Blob([encoderResult.output], {\n            // This will set the 'Content-Type: text/plain' header. Reasoning:\n            // * The intake rejects the request if there is no content type.\n            // * The browser will issue CORS preflight requests if we set it to 'application/json', which\n            // could induce higher intake load (and maybe has other impacts).\n            // * Also it's not quite JSON, since we are concatenating multiple JSON objects separated by\n            // new lines.\n            type: 'text/plain',\n        });\n    }\n    return {\n        data: data,\n        bytesCount: encoderResult.outputBytesCount,\n        encoding: encoderResult.encoding,\n    };\n}\n//# sourceMappingURL=batch.js.map","import { setTimeout } from '../tools/timer';\nimport { clocksNow, ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils';\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../tools/utils/byteUtils';\nimport { isServerError } from '../tools/utils/responseUtils';\nimport { ErrorSource } from '../domain/error/error.types';\nexport var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE;\nexport var MAX_ONGOING_REQUESTS = 32;\nexport var MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE;\nexport var MAX_BACKOFF_TIME = ONE_MINUTE;\nexport var INITIAL_BACKOFF_TIME = ONE_SECOND;\nexport function sendWithRetryStrategy(payload, state, sendStrategy, trackType, reportError) {\n    if (state.transportStatus === 0 /* TransportStatus.UP */ &&\n        state.queuedPayloads.size() === 0 &&\n        state.bandwidthMonitor.canHandle(payload)) {\n        send(payload, state, sendStrategy, {\n            onSuccess: function () { return retryQueuedPayloads(0 /* RetryReason.AFTER_SUCCESS */, state, sendStrategy, trackType, reportError); },\n            onFailure: function () {\n                state.queuedPayloads.enqueue(payload);\n                scheduleRetry(state, sendStrategy, trackType, reportError);\n            },\n        });\n    }\n    else {\n        state.queuedPayloads.enqueue(payload);\n    }\n}\nfunction scheduleRetry(state, sendStrategy, trackType, reportError) {\n    if (state.transportStatus !== 2 /* TransportStatus.DOWN */) {\n        return;\n    }\n    setTimeout(function () {\n        var payload = state.queuedPayloads.first();\n        send(payload, state, sendStrategy, {\n            onSuccess: function () {\n                state.queuedPayloads.dequeue();\n                state.currentBackoffTime = INITIAL_BACKOFF_TIME;\n                retryQueuedPayloads(1 /* RetryReason.AFTER_RESUME */, state, sendStrategy, trackType, reportError);\n            },\n            onFailure: function () {\n                state.currentBackoffTime = Math.min(MAX_BACKOFF_TIME, state.currentBackoffTime * 2);\n                scheduleRetry(state, sendStrategy, trackType, reportError);\n            },\n        });\n    }, state.currentBackoffTime);\n}\nfunction send(payload, state, sendStrategy, _a) {\n    var onSuccess = _a.onSuccess, onFailure = _a.onFailure;\n    state.bandwidthMonitor.add(payload);\n    sendStrategy(payload, function (response) {\n        state.bandwidthMonitor.remove(payload);\n        if (!shouldRetryRequest(response)) {\n            state.transportStatus = 0 /* TransportStatus.UP */;\n            onSuccess();\n        }\n        else {\n            // do not consider transport down if another ongoing request could succeed\n            state.transportStatus =\n                state.bandwidthMonitor.ongoingRequestCount > 0 ? 1 /* TransportStatus.FAILURE_DETECTED */ : 2 /* TransportStatus.DOWN */;\n            payload.retry = {\n                count: payload.retry ? payload.retry.count + 1 : 1,\n                lastFailureStatus: response.status,\n            };\n            onFailure();\n        }\n    });\n}\nfunction retryQueuedPayloads(reason, state, sendStrategy, trackType, reportError) {\n    if (reason === 0 /* RetryReason.AFTER_SUCCESS */ && state.queuedPayloads.isFull() && !state.queueFullReported) {\n        reportError({\n            message: \"Reached max \".concat(trackType, \" events size queued for upload: \").concat(MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE, \"MiB\"),\n            source: ErrorSource.AGENT,\n            startClocks: clocksNow(),\n        });\n        state.queueFullReported = true;\n    }\n    var previousQueue = state.queuedPayloads;\n    state.queuedPayloads = newPayloadQueue();\n    while (previousQueue.size() > 0) {\n        sendWithRetryStrategy(previousQueue.dequeue(), state, sendStrategy, trackType, reportError);\n    }\n}\nfunction shouldRetryRequest(response) {\n    return (response.type !== 'opaque' &&\n        ((response.status === 0 && !navigator.onLine) ||\n            response.status === 408 ||\n            response.status === 429 ||\n            isServerError(response.status)));\n}\nexport function newRetryState() {\n    return {\n        transportStatus: 0 /* TransportStatus.UP */,\n        currentBackoffTime: INITIAL_BACKOFF_TIME,\n        bandwidthMonitor: newBandwidthMonitor(),\n        queuedPayloads: newPayloadQueue(),\n        queueFullReported: false,\n    };\n}\nfunction newPayloadQueue() {\n    var queue = [];\n    return {\n        bytesCount: 0,\n        enqueue: function (payload) {\n            if (this.isFull()) {\n                return;\n            }\n            queue.push(payload);\n            this.bytesCount += payload.bytesCount;\n        },\n        first: function () {\n            return queue[0];\n        },\n        dequeue: function () {\n            var payload = queue.shift();\n            if (payload) {\n                this.bytesCount -= payload.bytesCount;\n            }\n            return payload;\n        },\n        size: function () {\n            return queue.length;\n        },\n        isFull: function () {\n            return this.bytesCount >= MAX_QUEUE_BYTES_COUNT;\n        },\n    };\n}\nfunction newBandwidthMonitor() {\n    return {\n        ongoingRequestCount: 0,\n        ongoingByteCount: 0,\n        canHandle: function (payload) {\n            return (this.ongoingRequestCount === 0 ||\n                (this.ongoingByteCount + payload.bytesCount <= MAX_ONGOING_BYTES_COUNT &&\n                    this.ongoingRequestCount < MAX_ONGOING_REQUESTS));\n        },\n        add: function (payload) {\n            this.ongoingRequestCount += 1;\n            this.ongoingByteCount += payload.bytesCount;\n        },\n        remove: function (payload) {\n            this.ongoingRequestCount -= 1;\n            this.ongoingByteCount -= payload.bytesCount;\n        },\n    };\n}\n//# sourceMappingURL=sendWithRetryStrategy.js.map","import { addTelemetryError } from '../domain/telemetry';\nimport { monitor } from '../tools/monitor';\nimport { addEventListener } from '../browser/addEventListener';\nimport { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy';\nexport function createHttpRequest(endpointBuilder, bytesLimit, reportError) {\n    var retryState = newRetryState();\n    var sendStrategyForRetry = function (payload, onResponse) {\n        return fetchKeepAliveStrategy(endpointBuilder, bytesLimit, payload, onResponse);\n    };\n    return {\n        send: function (payload) {\n            sendWithRetryStrategy(payload, retryState, sendStrategyForRetry, endpointBuilder.trackType, reportError);\n        },\n        /**\n         * Since fetch keepalive behaves like regular fetch on Firefox,\n         * keep using sendBeaconStrategy on exit\n         */\n        sendOnExit: function (payload) {\n            sendBeaconStrategy(endpointBuilder, bytesLimit, payload);\n        },\n    };\n}\nfunction sendBeaconStrategy(endpointBuilder, bytesLimit, payload) {\n    var canUseBeacon = !!navigator.sendBeacon && payload.bytesCount < bytesLimit;\n    if (canUseBeacon) {\n        try {\n            var beaconUrl = endpointBuilder.build('beacon', payload);\n            var isQueued = navigator.sendBeacon(beaconUrl, payload.data);\n            if (isQueued) {\n                return;\n            }\n        }\n        catch (e) {\n            reportBeaconError(e);\n        }\n    }\n    var xhrUrl = endpointBuilder.build('xhr', payload);\n    sendXHR(xhrUrl, payload.data);\n}\nvar hasReportedBeaconError = false;\nfunction reportBeaconError(e) {\n    if (!hasReportedBeaconError) {\n        hasReportedBeaconError = true;\n        addTelemetryError(e);\n    }\n}\nexport function fetchKeepAliveStrategy(endpointBuilder, bytesLimit, payload, onResponse) {\n    var canUseKeepAlive = isKeepAliveSupported() && payload.bytesCount < bytesLimit;\n    if (canUseKeepAlive) {\n        var fetchUrl = endpointBuilder.build('fetch', payload);\n        fetch(fetchUrl, { method: 'POST', body: payload.data, keepalive: true, mode: 'cors' }).then(monitor(function (response) { return onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: response.status, type: response.type }); }), monitor(function () {\n            var xhrUrl = endpointBuilder.build('xhr', payload);\n            // failed to queue the request\n            sendXHR(xhrUrl, payload.data, onResponse);\n        }));\n    }\n    else {\n        var xhrUrl = endpointBuilder.build('xhr', payload);\n        sendXHR(xhrUrl, payload.data, onResponse);\n    }\n}\nfunction isKeepAliveSupported() {\n    // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n    try {\n        return window.Request && 'keepalive' in new Request('http://a');\n    }\n    catch (_a) {\n        return false;\n    }\n}\nexport function sendXHR(url, data, onResponse) {\n    var request = new XMLHttpRequest();\n    request.open('POST', url, true);\n    if (data instanceof Blob) {\n        // When using a Blob instance, IE does not use its 'type' to define the 'Content-Type' header\n        // automatically, so the intake request ends up being rejected with an HTTP status 415\n        // Defining the header manually fixes this issue.\n        request.setRequestHeader('Content-Type', data.type);\n    }\n    addEventListener(\n    // allow untrusted event to acount for synthetic event dispatched by third party xhr wrapper\n    { allowUntrustedEvents: true }, request, 'loadend', function () {\n        onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: request.status });\n    }, {\n        // prevent multiple onResponse callbacks\n        // if the xhr instance is reused by a third party\n        once: true,\n    });\n    request.send(data);\n}\n//# sourceMappingURL=httpRequest.js.map","import { Observable } from '../tools/observable';\nimport { clearTimeout, setTimeout } from '../tools/timer';\n/**\n * Returns a \"flush controller\", responsible of notifying when flushing a pool of pending data needs\n * to happen. The implementation is designed to support both synchronous and asynchronous usages,\n * but relies on invariants described in each method documentation to keep a coherent state.\n */\nexport function createFlushController(_a) {\n    var messagesLimit = _a.messagesLimit, bytesLimit = _a.bytesLimit, durationLimit = _a.durationLimit, pageExitObservable = _a.pageExitObservable, sessionExpireObservable = _a.sessionExpireObservable;\n    var pageExitSubscription = pageExitObservable.subscribe(function (event) { return flush(event.reason); });\n    var sessionExpireSubscription = sessionExpireObservable.subscribe(function () { return flush('session_expire'); });\n    var flushObservable = new Observable(function () { return function () {\n        pageExitSubscription.unsubscribe();\n        sessionExpireSubscription.unsubscribe();\n    }; });\n    var currentBytesCount = 0;\n    var currentMessagesCount = 0;\n    function flush(flushReason) {\n        if (currentMessagesCount === 0) {\n            return;\n        }\n        var messagesCount = currentMessagesCount;\n        var bytesCount = currentBytesCount;\n        currentMessagesCount = 0;\n        currentBytesCount = 0;\n        cancelDurationLimitTimeout();\n        flushObservable.notify({\n            reason: flushReason,\n            messagesCount: messagesCount,\n            bytesCount: bytesCount,\n        });\n    }\n    var durationLimitTimeoutId;\n    function scheduleDurationLimitTimeout() {\n        if (durationLimitTimeoutId === undefined) {\n            durationLimitTimeoutId = setTimeout(function () {\n                flush('duration_limit');\n            }, durationLimit);\n        }\n    }\n    function cancelDurationLimitTimeout() {\n        clearTimeout(durationLimitTimeoutId);\n        durationLimitTimeoutId = undefined;\n    }\n    return {\n        flushObservable: flushObservable,\n        get messagesCount() {\n            return currentMessagesCount;\n        },\n        /**\n         * Notifies that a message will be added to a pool of pending messages waiting to be flushed.\n         *\n         * This function needs to be called synchronously, right before adding the message, so no flush\n         * event can happen after `notifyBeforeAddMessage` and before adding the message.\n         *\n         * @param estimatedMessageBytesCount: an estimation of the message bytes count once it is\n         * actually added.\n         */\n        notifyBeforeAddMessage: function (estimatedMessageBytesCount) {\n            if (currentBytesCount + estimatedMessageBytesCount >= bytesLimit) {\n                flush('bytes_limit');\n            }\n            // Consider the message to be added now rather than in `notifyAfterAddMessage`, because if no\n            // message was added yet and `notifyAfterAddMessage` is called asynchronously, we still want\n            // to notify when a flush is needed (for example on page exit).\n            currentMessagesCount += 1;\n            currentBytesCount += estimatedMessageBytesCount;\n            scheduleDurationLimitTimeout();\n        },\n        /**\n         * Notifies that a message *was* added to a pool of pending messages waiting to be flushed.\n         *\n         * This function can be called asynchronously after the message was added, but in this case it\n         * should not be called if a flush event occurred in between.\n         *\n         * @param messageBytesCountDiff: the difference between the estimated message bytes count and\n         * its actual bytes count once added to the pool.\n         */\n        notifyAfterAddMessage: function (messageBytesCountDiff) {\n            if (messageBytesCountDiff === void 0) { messageBytesCountDiff = 0; }\n            currentBytesCount += messageBytesCountDiff;\n            if (currentMessagesCount >= messagesLimit) {\n                flush('messages_limit');\n            }\n            else if (currentBytesCount >= bytesLimit) {\n                flush('bytes_limit');\n            }\n        },\n        /**\n         * Notifies that a message was removed from a pool of pending messages waiting to be flushed.\n         *\n         * This function needs to be called synchronously, right after removing the message, so no flush\n         * event can happen after removing the message and before `notifyAfterRemoveMessage`.\n         *\n         * @param messageBytesCount: the message bytes count that was added to the pool. Should\n         * correspond to the sum of bytes counts passed to `notifyBeforeAddMessage` and\n         * `notifyAfterAddMessage`.\n         */\n        notifyAfterRemoveMessage: function (messageBytesCount) {\n            currentBytesCount -= messageBytesCount;\n            currentMessagesCount -= 1;\n            if (currentMessagesCount === 0) {\n                cancelDurationLimitTimeout();\n            }\n        },\n    };\n}\n//# sourceMappingURL=flushController.js.map","import { combine, isTelemetryReplicationAllowed, startBatchWithReplica, } from '@datadog/browser-core';\nexport function startRumBatch(configuration, lifeCycle, telemetryEventObservable, reportError, pageExitObservable, sessionExpireObservable, createEncoder) {\n    var replica = configuration.replica;\n    var batch = startBatchWithReplica(configuration, {\n        endpoint: configuration.rumEndpointBuilder,\n        encoder: createEncoder(2 /* DeflateEncoderStreamId.RUM */),\n    }, replica && {\n        endpoint: replica.rumEndpointBuilder,\n        transformMessage: function (message) { return combine(message, { application: { id: replica.applicationId } }); },\n        encoder: createEncoder(3 /* DeflateEncoderStreamId.RUM_REPLICA */),\n    }, reportError, pageExitObservable, sessionExpireObservable);\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (serverRumEvent) {\n        if (serverRumEvent.type === \"view\" /* RumEventType.VIEW */) {\n            batch.upsert(serverRumEvent, serverRumEvent.view.id);\n        }\n        else {\n            batch.add(serverRumEvent);\n        }\n    });\n    telemetryEventObservable.subscribe(function (event) { return batch.add(event, isTelemetryReplicationAllowed(configuration)); });\n    return batch;\n}\n//# sourceMappingURL=startRumBatch.js.map","import { createBatch } from './batch';\nimport { createHttpRequest } from './httpRequest';\nimport { createFlushController } from './flushController';\nexport function startBatchWithReplica(configuration, primary, replica, reportError, pageExitObservable, sessionExpireObservable, batchFactoryImp) {\n    if (batchFactoryImp === void 0) { batchFactoryImp = createBatch; }\n    var primaryBatch = createBatchFromConfig(configuration, primary);\n    var replicaBatch = replica && createBatchFromConfig(configuration, replica);\n    function createBatchFromConfig(configuration, _a) {\n        var endpoint = _a.endpoint, encoder = _a.encoder;\n        return batchFactoryImp({\n            encoder: encoder,\n            request: createHttpRequest(endpoint, configuration.batchBytesLimit, reportError),\n            flushController: createFlushController({\n                messagesLimit: configuration.batchMessagesLimit,\n                bytesLimit: configuration.batchBytesLimit,\n                durationLimit: configuration.flushTimeout,\n                pageExitObservable: pageExitObservable,\n                sessionExpireObservable: sessionExpireObservable,\n            }),\n            messageBytesLimit: configuration.messageBytesLimit,\n        });\n    }\n    return {\n        flushObservable: primaryBatch.flushController.flushObservable,\n        add: function (message, replicated) {\n            if (replicated === void 0) { replicated = true; }\n            primaryBatch.add(message);\n            if (replicaBatch && replicated) {\n                replicaBatch.add(replica.transformMessage ? replica.transformMessage(message) : message);\n            }\n        },\n        upsert: function (message, key) {\n            primaryBatch.upsert(message, key);\n            if (replicaBatch) {\n                replicaBatch.upsert(replica.transformMessage ? replica.transformMessage(message) : message, key);\n            }\n        },\n        stop: function () {\n            primaryBatch.stop();\n            if (replicaBatch) {\n                replicaBatch.stop();\n            }\n        },\n    };\n}\n//# sourceMappingURL=startBatchWithReplica.js.map","import { SESSION_TIME_OUT_DELAY, relativeNow, createValueHistory } from '@datadog/browser-core';\n/**\n * We want to attach to an event:\n * - the url corresponding to its start\n * - the referrer corresponding to the previous view url (or document referrer for initial view)\n */\nexport var URL_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport function startUrlContexts(lifeCycle, locationChangeObservable, location) {\n    var urlContextHistory = createValueHistory({ expireDelay: URL_CONTEXT_TIME_OUT_DELAY });\n    var previousViewUrl;\n    lifeCycle.subscribe(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, function (_a) {\n        var startClocks = _a.startClocks;\n        var viewUrl = location.href;\n        urlContextHistory.add(buildUrlContext({\n            url: viewUrl,\n            referrer: !previousViewUrl ? document.referrer : previousViewUrl,\n        }), startClocks.relative);\n        previousViewUrl = viewUrl;\n    });\n    lifeCycle.subscribe(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        urlContextHistory.closeActive(endClocks.relative);\n    });\n    var locationChangeSubscription = locationChangeObservable.subscribe(function (_a) {\n        var newLocation = _a.newLocation;\n        var current = urlContextHistory.find();\n        if (current) {\n            var changeTime = relativeNow();\n            urlContextHistory.closeActive(changeTime);\n            urlContextHistory.add(buildUrlContext({\n                url: newLocation.href,\n                referrer: current.referrer,\n            }), changeTime);\n        }\n    });\n    function buildUrlContext(_a) {\n        var url = _a.url, referrer = _a.referrer;\n        return {\n            url: url,\n            referrer: referrer,\n        };\n    }\n    return {\n        findUrl: function (startTime) { return urlContextHistory.find(startTime); },\n        stop: function () {\n            locationChangeSubscription.unsubscribe();\n            urlContextHistory.stop();\n        },\n    };\n}\n//# sourceMappingURL=urlContexts.js.map","import { addEventListener, instrumentMethod, Observable, shallowClone } from '@datadog/browser-core';\nexport function createLocationChangeObservable(configuration, location) {\n    var currentLocation = shallowClone(location);\n    return new Observable(function (observable) {\n        var stopHistoryTracking = trackHistory(configuration, onLocationChange).stop;\n        var stopHashTracking = trackHash(configuration, onLocationChange).stop;\n        function onLocationChange() {\n            if (currentLocation.href === location.href) {\n                return;\n            }\n            var newLocation = shallowClone(location);\n            observable.notify({\n                newLocation: newLocation,\n                oldLocation: currentLocation,\n            });\n            currentLocation = newLocation;\n        }\n        return function () {\n            stopHistoryTracking();\n            stopHashTracking();\n        };\n    });\n}\nfunction trackHistory(configuration, onHistoryChange) {\n    var stopInstrumentingPushState = instrumentMethod(getHistoryInstrumentationTarget('pushState'), 'pushState', function (_a) {\n        var onPostCall = _a.onPostCall;\n        onPostCall(onHistoryChange);\n    }).stop;\n    var stopInstrumentingReplaceState = instrumentMethod(getHistoryInstrumentationTarget('replaceState'), 'replaceState', function (_a) {\n        var onPostCall = _a.onPostCall;\n        onPostCall(onHistoryChange);\n    }).stop;\n    var removeListener = addEventListener(configuration, window, \"popstate\" /* DOM_EVENT.POP_STATE */, onHistoryChange).stop;\n    return {\n        stop: function () {\n            stopInstrumentingPushState();\n            stopInstrumentingReplaceState();\n            removeListener();\n        },\n    };\n}\nfunction trackHash(configuration, onHashChange) {\n    return addEventListener(configuration, window, \"hashchange\" /* DOM_EVENT.HASH_CHANGE */, onHashChange);\n}\nfunction getHistoryInstrumentationTarget(methodName) {\n    // Ideally we should always instument the method on the prototype, however some frameworks (e.g [Next.js](https://github.com/vercel/next.js/blob/d3f5532065f3e3bb84fb54bd2dfd1a16d0f03a21/packages/next/src/client/components/app-router.tsx#L429))\n    // are wrapping the instance method. In that case we should also wrap the instance method.\n    return Object.prototype.hasOwnProperty.call(history, methodName) ? history : History.prototype;\n}\n//# sourceMappingURL=locationChangeObservable.js.map","import { SESSION_TIME_OUT_DELAY, createValueHistory } from '@datadog/browser-core';\nexport var FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport var BYTES_COMPUTATION_THROTTLING_DELAY = 200;\n/**\n * Start feature flag contexts\n *\n * Feature flag contexts follow the life of views.\n * A new context is added when a view is created and ended when the view is ended\n *\n * Note: we choose not to add a new context at each evaluation to save memory\n */\nexport function startFeatureFlagContexts(lifeCycle, customerDataTracker) {\n    var featureFlagContexts = createValueHistory({\n        expireDelay: FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY,\n    });\n    lifeCycle.subscribe(1 /* LifeCycleEventType.BEFORE_VIEW_CREATED */, function (_a) {\n        var startClocks = _a.startClocks;\n        featureFlagContexts.add({}, startClocks.relative);\n        customerDataTracker.resetCustomerData();\n    });\n    lifeCycle.subscribe(6 /* LifeCycleEventType.AFTER_VIEW_ENDED */, function (_a) {\n        var endClocks = _a.endClocks;\n        featureFlagContexts.closeActive(endClocks.relative);\n    });\n    return {\n        findFeatureFlagEvaluations: function (startTime) { return featureFlagContexts.find(startTime); },\n        addFeatureFlagEvaluation: function (key, value) {\n            var currentContext = featureFlagContexts.find();\n            if (currentContext) {\n                currentContext[key] = value;\n                customerDataTracker.updateCustomerData(currentContext);\n            }\n        },\n        stop: function () { return customerDataTracker.stop(); },\n    };\n}\n//# sourceMappingURL=featureFlagContext.js.map","import { includes, performDraw, ONE_SECOND, addTelemetryDebug, setInterval, } from '@datadog/browser-core';\nexport var MEASURES_PERIOD_DURATION = 10 * ONE_SECOND;\nvar currentPeriodMeasures;\nvar currentBatchMeasures;\nvar batchHasRumEvent;\nexport function startCustomerDataTelemetry(configuration, telemetry, lifeCycle, customerDataTrackerManager, batchFlushObservable) {\n    var customerDataTelemetryEnabled = telemetry.enabled && performDraw(configuration.customerDataTelemetrySampleRate);\n    if (!customerDataTelemetryEnabled) {\n        return;\n    }\n    initCurrentPeriodMeasures();\n    initCurrentBatchMeasures();\n    // We measure the data of every view updates even if there could only be one per batch due to the upsert\n    // It means that contexts bytes count sums can be higher than it really is\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (event) {\n        batchHasRumEvent = true;\n        updateMeasure(currentBatchMeasures.globalContextBytes, customerDataTrackerManager.getOrCreateTracker(2 /* CustomerDataType.GlobalContext */).getBytesCount());\n        updateMeasure(currentBatchMeasures.userContextBytes, customerDataTrackerManager.getOrCreateTracker(1 /* CustomerDataType.User */).getBytesCount());\n        updateMeasure(currentBatchMeasures.featureFlagBytes, includes([\"view\" /* RumEventType.VIEW */, \"error\" /* RumEventType.ERROR */], event.type)\n            ? customerDataTrackerManager.getOrCreateTracker(0 /* CustomerDataType.FeatureFlag */).getBytesCount()\n            : 0);\n    });\n    batchFlushObservable.subscribe(function (_a) {\n        var bytesCount = _a.bytesCount, messagesCount = _a.messagesCount;\n        // Don't measure batch that only contains telemetry events to avoid batch sending loop\n        // It could happen because after each batch we are adding a customer data measures telemetry event to the next one\n        if (!batchHasRumEvent) {\n            return;\n        }\n        currentPeriodMeasures.batchCount += 1;\n        updateMeasure(currentPeriodMeasures.batchBytesCount, bytesCount);\n        updateMeasure(currentPeriodMeasures.batchMessagesCount, messagesCount);\n        mergeMeasure(currentPeriodMeasures.globalContextBytes, currentBatchMeasures.globalContextBytes);\n        mergeMeasure(currentPeriodMeasures.userContextBytes, currentBatchMeasures.userContextBytes);\n        mergeMeasure(currentPeriodMeasures.featureFlagBytes, currentBatchMeasures.featureFlagBytes);\n        initCurrentBatchMeasures();\n    });\n    setInterval(sendCurrentPeriodMeasures, MEASURES_PERIOD_DURATION);\n}\nfunction sendCurrentPeriodMeasures() {\n    if (currentPeriodMeasures.batchCount === 0) {\n        return;\n    }\n    addTelemetryDebug('Customer data measures', currentPeriodMeasures);\n    initCurrentPeriodMeasures();\n}\nfunction createMeasure() {\n    return { min: Infinity, max: 0, sum: 0 };\n}\nfunction updateMeasure(measure, value) {\n    measure.sum += value;\n    measure.min = Math.min(measure.min, value);\n    measure.max = Math.max(measure.max, value);\n}\nfunction mergeMeasure(target, source) {\n    target.sum += source.sum;\n    target.min = Math.min(target.min, source.min);\n    target.max = Math.max(target.max, source.max);\n}\nfunction initCurrentPeriodMeasures() {\n    currentPeriodMeasures = {\n        batchCount: 0,\n        batchBytesCount: createMeasure(),\n        batchMessagesCount: createMeasure(),\n        globalContextBytes: createMeasure(),\n        userContextBytes: createMeasure(),\n        featureFlagBytes: createMeasure(),\n    };\n}\nfunction initCurrentBatchMeasures() {\n    batchHasRumEvent = false;\n    currentBatchMeasures = {\n        globalContextBytes: createMeasure(),\n        userContextBytes: createMeasure(),\n        featureFlagBytes: createMeasure(),\n    };\n}\n//# sourceMappingURL=startCustomerDataTelemetry.js.map","import { elapsed, createValueHistory, SESSION_TIME_OUT_DELAY, toServerDuration, addEventListeners, relativeNow, } from '@datadog/browser-core';\n// Arbitrary value to cap number of element for memory consumption in the browser\nexport var MAX_PAGE_STATE_ENTRIES = 4000;\n// Arbitrary value to cap number of element for backend & to save bandwidth\nexport var MAX_PAGE_STATE_ENTRIES_SELECTABLE = 500;\nexport var PAGE_STATE_CONTEXT_TIME_OUT_DELAY = SESSION_TIME_OUT_DELAY;\nexport function startPageStateHistory(configuration, maxPageStateEntriesSelectable) {\n    if (maxPageStateEntriesSelectable === void 0) { maxPageStateEntriesSelectable = MAX_PAGE_STATE_ENTRIES_SELECTABLE; }\n    var pageStateEntryHistory = createValueHistory({\n        expireDelay: PAGE_STATE_CONTEXT_TIME_OUT_DELAY,\n        maxEntries: MAX_PAGE_STATE_ENTRIES,\n    });\n    var currentPageState;\n    addPageState(getPageState(), relativeNow());\n    var stopEventListeners = addEventListeners(configuration, window, [\n        \"pageshow\" /* DOM_EVENT.PAGE_SHOW */,\n        \"focus\" /* DOM_EVENT.FOCUS */,\n        \"blur\" /* DOM_EVENT.BLUR */,\n        \"visibilitychange\" /* DOM_EVENT.VISIBILITY_CHANGE */,\n        \"resume\" /* DOM_EVENT.RESUME */,\n        \"freeze\" /* DOM_EVENT.FREEZE */,\n        \"pagehide\" /* DOM_EVENT.PAGE_HIDE */,\n    ], function (event) {\n        addPageState(computePageState(event), event.timeStamp);\n    }, { capture: true }).stop;\n    function addPageState(nextPageState, startTime) {\n        if (startTime === void 0) { startTime = relativeNow(); }\n        if (nextPageState === currentPageState) {\n            return;\n        }\n        currentPageState = nextPageState;\n        pageStateEntryHistory.closeActive(startTime);\n        pageStateEntryHistory.add({ state: currentPageState, startTime: startTime }, startTime);\n    }\n    var pageStateHistory = {\n        findAll: function (eventStartTime, duration) {\n            var pageStateEntries = pageStateEntryHistory.findAll(eventStartTime, duration);\n            if (pageStateEntries.length === 0) {\n                return;\n            }\n            var pageStateServerEntries = [];\n            // limit the number of entries to return\n            var limit = Math.max(0, pageStateEntries.length - maxPageStateEntriesSelectable);\n            // loop page state entries backward to return the selected ones in desc order\n            for (var index = pageStateEntries.length - 1; index >= limit; index--) {\n                var pageState = pageStateEntries[index];\n                // compute the start time relative to the event start time (ex: to be relative to the view start time)\n                var relativeStartTime = elapsed(eventStartTime, pageState.startTime);\n                pageStateServerEntries.push({\n                    state: pageState.state,\n                    start: toServerDuration(relativeStartTime),\n                });\n            }\n            return pageStateServerEntries;\n        },\n        wasInPageStateAt: function (state, startTime) {\n            return pageStateHistory.wasInPageStateDuringPeriod(state, startTime, 0);\n        },\n        wasInPageStateDuringPeriod: function (state, startTime, duration) {\n            return pageStateEntryHistory.findAll(startTime, duration).some(function (pageState) { return pageState.state === state; });\n        },\n        addPageState: addPageState,\n        stop: function () {\n            stopEventListeners();\n            pageStateEntryHistory.stop();\n        },\n    };\n    return pageStateHistory;\n}\nfunction computePageState(event) {\n    if (event.type === \"freeze\" /* DOM_EVENT.FREEZE */) {\n        return \"frozen\" /* PageState.FROZEN */;\n    }\n    else if (event.type === \"pagehide\" /* DOM_EVENT.PAGE_HIDE */) {\n        return event.persisted ? \"frozen\" /* PageState.FROZEN */ : \"terminated\" /* PageState.TERMINATED */;\n    }\n    return getPageState();\n}\nfunction getPageState() {\n    if (document.visibilityState === 'hidden') {\n        return \"hidden\" /* PageState.HIDDEN */;\n    }\n    if (document.hasFocus()) {\n        return \"active\" /* PageState.ACTIVE */;\n    }\n    return \"passive\" /* PageState.PASSIVE */;\n}\n//# sourceMappingURL=pageStateHistory.js.map","import { setInterval, clearInterval, Observable, addEventListener, ONE_SECOND, findCommaSeparatedValue, find, } from '@datadog/browser-core';\nexport function createCookieObservable(configuration, cookieName) {\n    var detectCookieChangeStrategy = window.cookieStore\n        ? listenToCookieStoreChange(configuration)\n        : watchCookieFallback;\n    return new Observable(function (observable) {\n        return detectCookieChangeStrategy(cookieName, function (event) { return observable.notify(event); });\n    });\n}\nfunction listenToCookieStoreChange(configuration) {\n    return function (cookieName, callback) {\n        var listener = addEventListener(configuration, window.cookieStore, \"change\" /* DOM_EVENT.CHANGE */, function (event) {\n            // Based on our experimentation, we're assuming that entries for the same cookie cannot be in both the 'changed' and 'deleted' arrays.\n            // However, due to ambiguity in the specification, we asked for clarification: https://github.com/WICG/cookie-store/issues/226\n            var changeEvent = find(event.changed, function (event) { return event.name === cookieName; }) ||\n                find(event.deleted, function (event) { return event.name === cookieName; });\n            if (changeEvent) {\n                callback(changeEvent.value);\n            }\n        });\n        return listener.stop;\n    };\n}\nexport var WATCH_COOKIE_INTERVAL_DELAY = ONE_SECOND;\nfunction watchCookieFallback(cookieName, callback) {\n    var previousCookieValue = findCommaSeparatedValue(document.cookie, cookieName);\n    var watchCookieIntervalId = setInterval(function () {\n        var cookieValue = findCommaSeparatedValue(document.cookie, cookieName);\n        if (cookieValue !== previousCookieValue) {\n            callback(cookieValue);\n        }\n    }, WATCH_COOKIE_INTERVAL_DELAY);\n    return function () {\n        clearInterval(watchCookieIntervalId);\n    };\n}\n//# sourceMappingURL=cookieObservable.js.map","import { getInitCookie } from '@datadog/browser-core';\nimport { createCookieObservable } from '../../browser/cookieObservable';\nexport var CI_VISIBILITY_TEST_ID_COOKIE_NAME = 'datadog-ci-visibility-test-execution-id';\nexport function startCiVisibilityContext(configuration, cookieObservable) {\n    var _a;\n    if (cookieObservable === void 0) { cookieObservable = createCookieObservable(configuration, CI_VISIBILITY_TEST_ID_COOKIE_NAME); }\n    var testExecutionId = getInitCookie(CI_VISIBILITY_TEST_ID_COOKIE_NAME) || ((_a = window.Cypress) === null || _a === void 0 ? void 0 : _a.env('traceId'));\n    var cookieObservableSubscription = cookieObservable.subscribe(function (value) {\n        testExecutionId = value;\n    });\n    return {\n        get: function () {\n            if (typeof testExecutionId === 'string') {\n                return {\n                    test_execution_id: testExecutionId,\n                };\n            }\n        },\n        stop: function () { return cookieObservableSubscription.unsubscribe(); },\n    };\n}\n//# sourceMappingURL=ciVisibilityContext.js.map","import { INTAKE_SITE_STAGING, INTAKE_SITE_US1, INTAKE_SITE_EU1 } from '@datadog/browser-core';\nexport function getSessionReplayUrl(configuration, _a) {\n    var session = _a.session, viewContext = _a.viewContext, errorType = _a.errorType;\n    var sessionId = session ? session.id : 'no-session-id';\n    var parameters = [];\n    if (errorType !== undefined) {\n        parameters.push(\"error-type=\".concat(errorType));\n    }\n    if (viewContext) {\n        parameters.push(\"seed=\".concat(viewContext.id));\n        parameters.push(\"from=\".concat(viewContext.startClocks.timeStamp));\n    }\n    var origin = getDatadogSiteUrl(configuration);\n    var path = \"/rum/replay/sessions/\".concat(sessionId);\n    return \"\".concat(origin).concat(path, \"?\").concat(parameters.join('&'));\n}\nexport function getDatadogSiteUrl(rumConfiguration) {\n    var site = rumConfiguration.site;\n    var subdomain = rumConfiguration.subdomain || getSiteDefaultSubdomain(rumConfiguration);\n    return \"https://\".concat(subdomain ? \"\".concat(subdomain, \".\") : '').concat(site);\n}\nfunction getSiteDefaultSubdomain(configuration) {\n    switch (configuration.site) {\n        case INTAKE_SITE_US1:\n        case INTAKE_SITE_EU1:\n            return 'app';\n        case INTAKE_SITE_STAGING:\n            return 'dd';\n        default:\n            return undefined;\n    }\n}\n//# sourceMappingURL=getSessionReplayUrl.js.map","export var MAX_STATS_HISTORY = 10;\nvar statsPerView;\nexport function getSegmentsCount(viewId) {\n    return getOrCreateReplayStats(viewId).segments_count;\n}\nexport function addSegment(viewId) {\n    getOrCreateReplayStats(viewId).segments_count += 1;\n}\nexport function addRecord(viewId) {\n    getOrCreateReplayStats(viewId).records_count += 1;\n}\nexport function addWroteData(viewId, additionalBytesCount) {\n    getOrCreateReplayStats(viewId).segments_total_raw_size += additionalBytesCount;\n}\nexport function getReplayStats(viewId) {\n    return statsPerView === null || statsPerView === void 0 ? void 0 : statsPerView.get(viewId);\n}\nexport function resetReplayStats() {\n    statsPerView = undefined;\n}\nfunction getOrCreateReplayStats(viewId) {\n    if (!statsPerView) {\n        statsPerView = new Map();\n    }\n    var replayStats;\n    if (statsPerView.has(viewId)) {\n        replayStats = statsPerView.get(viewId);\n    }\n    else {\n        replayStats = {\n            records_count: 0,\n            segments_count: 0,\n            segments_total_raw_size: 0,\n        };\n        statsPerView.set(viewId, replayStats);\n        if (statsPerView.size > MAX_STATS_HISTORY) {\n            deleteOldestStats();\n        }\n    }\n    return replayStats;\n}\nfunction deleteOldestStats() {\n    if (!statsPerView) {\n        return;\n    }\n    if (statsPerView.keys) {\n        var toDelete = statsPerView.keys().next().value;\n        if (toDelete) {\n            statsPerView.delete(toDelete);\n        }\n    }\n    else {\n        // IE11 doesn't support map.keys\n        var isFirst_1 = true;\n        statsPerView.forEach(function (_value, key) {\n            if (isFirst_1) {\n                statsPerView.delete(key);\n                isFirst_1 = false;\n            }\n        });\n    }\n}\n//# sourceMappingURL=replayStats.js.map","import { buildUrl } from '@datadog/browser-core';\nimport { getParentNode, isNodeShadowRoot, CENSORED_STRING_MARK, shouldMaskNode } from '@datadog/browser-rum-core';\nvar serializedNodeIds = new WeakMap();\nexport function hasSerializedNode(node) {\n    return serializedNodeIds.has(node);\n}\nexport function nodeAndAncestorsHaveSerializedNode(node) {\n    var current = node;\n    while (current) {\n        if (!hasSerializedNode(current) && !isNodeShadowRoot(current)) {\n            return false;\n        }\n        current = getParentNode(current);\n    }\n    return true;\n}\nexport function getSerializedNodeId(node) {\n    return serializedNodeIds.get(node);\n}\nexport function setSerializedNodeId(node, serializeNodeId) {\n    serializedNodeIds.set(node, serializeNodeId);\n}\n/**\n * Get the element \"value\" to be serialized as an attribute or an input update record. It respects\n * the input privacy mode of the element.\n * PERFROMANCE OPTIMIZATION: Assumes that privacy level `HIDDEN` is never encountered because of earlier checks.\n */\nexport function getElementInputValue(element, nodePrivacyLevel) {\n    /*\n     BROWSER SPEC NOTE: <input>, <select>\n     For some <input> elements, the `value` is an exceptional property/attribute that has the\n     value synced between el.value and el.getAttribute()\n     input[type=button,checkbox,hidden,image,radio,reset,submit]\n     */\n    var tagName = element.tagName;\n    var value = element.value;\n    if (shouldMaskNode(element, nodePrivacyLevel)) {\n        var type = element.type;\n        if (tagName === 'INPUT' && (type === 'button' || type === 'submit' || type === 'reset')) {\n            // Overrule `MASK` privacy level for button-like element values, as they are used during replay\n            // to display their label. They can still be hidden via the \"hidden\" privacy attribute or class name.\n            return value;\n        }\n        else if (!value || tagName === 'OPTION') {\n            // <Option> value provides no benefit\n            return;\n        }\n        return CENSORED_STRING_MARK;\n    }\n    if (tagName === 'OPTION' || tagName === 'SELECT') {\n        return element.value;\n    }\n    if (tagName !== 'INPUT' && tagName !== 'TEXTAREA') {\n        return;\n    }\n    return value;\n}\nexport var URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")([^\"]*)\"|([^)]*))\\)/gm;\nexport var ABSOLUTE_URL = /^[A-Za-z]+:|^\\/\\//;\nexport var DATA_URI = /^data:.*,/i;\nexport function switchToAbsoluteUrl(cssText, cssHref) {\n    return cssText.replace(URL_IN_CSS_REF, function (matchingSubstring, singleQuote, urlWrappedInSingleQuotes, doubleQuote, urlWrappedInDoubleQuotes, urlNotWrappedInQuotes) {\n        var url = urlWrappedInSingleQuotes || urlWrappedInDoubleQuotes || urlNotWrappedInQuotes;\n        if (!cssHref || !url || ABSOLUTE_URL.test(url) || DATA_URI.test(url)) {\n            return matchingSubstring;\n        }\n        var quote = singleQuote || doubleQuote || '';\n        return \"url(\".concat(quote).concat(makeUrlAbsolute(url, cssHref)).concat(quote, \")\");\n    });\n}\nexport function makeUrlAbsolute(url, baseUrl) {\n    try {\n        return buildUrl(url, baseUrl).href;\n    }\n    catch (_a) {\n        return url;\n    }\n}\nvar TAG_NAME_REGEX = /[^a-z1-6-_]/;\nexport function getValidTagName(tagName) {\n    var processedTagName = tagName.toLowerCase().trim();\n    if (TAG_NAME_REGEX.test(processedTagName)) {\n        // if the tag name is odd and we cannot extract\n        // anything from the string, then we return a\n        // generic div\n        return 'div';\n    }\n    return processedTagName;\n}\nexport function censoredImageForSize(width, height) {\n    return \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\".concat(width, \"' height='\").concat(height, \"' style='background-color:silver'%3E%3C/svg%3E\");\n}\n//# sourceMappingURL=serializationUtils.js.map","export var RecordType = {\n    FullSnapshot: 2,\n    IncrementalSnapshot: 3,\n    Meta: 4,\n    Focus: 6,\n    ViewEnd: 7,\n    VisualViewport: 8,\n    FrustrationRecord: 9,\n};\nexport var NodeType = {\n    Document: 0,\n    DocumentType: 1,\n    Element: 2,\n    Text: 3,\n    CDATA: 4,\n    DocumentFragment: 11,\n};\nexport var IncrementalSource = {\n    Mutation: 0,\n    MouseMove: 1,\n    MouseInteraction: 2,\n    Scroll: 3,\n    ViewportResize: 4,\n    Input: 5,\n    TouchMove: 6,\n    MediaInteraction: 7,\n    StyleSheetRule: 8,\n    // CanvasMutation : 9,\n    // Font : 10,\n};\nexport var MouseInteractionType = {\n    MouseUp: 0,\n    MouseDown: 1,\n    Click: 2,\n    ContextMenu: 3,\n    DblClick: 4,\n    Focus: 5,\n    Blur: 6,\n    TouchStart: 7,\n    TouchEnd: 9,\n};\nexport var MediaInteractionType = {\n    Play: 0,\n    Pause: 1,\n};\n//# sourceMappingURL=sessionReplayConstants.js.map","export function serializeStyleSheets(cssStyleSheets) {\n    if (cssStyleSheets === undefined || cssStyleSheets.length === 0) {\n        return undefined;\n    }\n    return cssStyleSheets.map(function (cssStyleSheet) {\n        var rules = cssStyleSheet.cssRules || cssStyleSheet.rules;\n        var cssRules = Array.from(rules, function (cssRule) { return cssRule.cssText; });\n        var styleSheet = {\n            cssRules: cssRules,\n            disabled: cssStyleSheet.disabled || undefined,\n            media: cssStyleSheet.media.length > 0 ? Array.from(cssStyleSheet.media) : undefined,\n        };\n        return styleSheet;\n    });\n}\n//# sourceMappingURL=serializeStyleSheets.js.map","import { startsWith } from '@datadog/browser-core';\nimport { NodePrivacyLevel, PRIVACY_ATTR_NAME, CENSORED_STRING_MARK, CENSORED_IMG_MARK, STABLE_ATTRIBUTES, isLongDataUrl, sanitizeDataUrl, } from '@datadog/browser-rum-core';\nimport { censoredImageForSize } from './serializationUtils';\nexport function serializeAttribute(element, nodePrivacyLevel, attributeName, configuration) {\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        // dup condition for direct access case\n        return null;\n    }\n    var attributeValue = element.getAttribute(attributeName);\n    if (nodePrivacyLevel === NodePrivacyLevel.MASK &&\n        attributeName !== PRIVACY_ATTR_NAME &&\n        !STABLE_ATTRIBUTES.includes(attributeName) &&\n        attributeName !== configuration.actionNameAttribute) {\n        var tagName = element.tagName;\n        switch (attributeName) {\n            // Mask Attribute text content\n            case 'title':\n            case 'alt':\n            case 'placeholder':\n                return CENSORED_STRING_MARK;\n        }\n        // mask image URLs\n        if (tagName === 'IMG' && (attributeName === 'src' || attributeName === 'srcset')) {\n            // generate image with similar dimension than the original to have the same rendering behaviour\n            var image = element;\n            if (image.naturalWidth > 0) {\n                return censoredImageForSize(image.naturalWidth, image.naturalHeight);\n            }\n            var _a = element.getBoundingClientRect(), width = _a.width, height = _a.height;\n            if (width > 0 || height > 0) {\n                return censoredImageForSize(width, height);\n            }\n            // if we can't get the image size, fallback to the censored image\n            return CENSORED_IMG_MARK;\n        }\n        // mask source URLs\n        if (tagName === 'SOURCE' && (attributeName === 'src' || attributeName === 'srcset')) {\n            return CENSORED_IMG_MARK;\n        }\n        // mask <a> URLs\n        if (tagName === 'A' && attributeName === 'href') {\n            return CENSORED_STRING_MARK;\n        }\n        // mask data-* attributes\n        if (attributeValue && startsWith(attributeName, 'data-')) {\n            // Exception: it's safe to reveal the `${PRIVACY_ATTR_NAME}` attr\n            return CENSORED_STRING_MARK;\n        }\n        // mask iframe srcdoc\n        if (tagName === 'IFRAME' && attributeName === 'srcdoc') {\n            return CENSORED_STRING_MARK;\n        }\n    }\n    if (!attributeValue || typeof attributeValue !== 'string') {\n        return attributeValue;\n    }\n    // Minimum Fix for customer.\n    if (isLongDataUrl(attributeValue)) {\n        return sanitizeDataUrl(attributeValue);\n    }\n    return attributeValue;\n}\n//# sourceMappingURL=serializeAttribute.js.map","import { NodePrivacyLevel, shouldMaskNode } from '@datadog/browser-rum-core';\nimport { isSafari } from '@datadog/browser-core';\nimport { getElementInputValue, switchToAbsoluteUrl, getValidTagName } from './serializationUtils';\nimport { serializeAttribute } from './serializeAttribute';\nexport function serializeAttributes(element, nodePrivacyLevel, options) {\n    var _a;\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        return {};\n    }\n    var safeAttrs = {};\n    var tagName = getValidTagName(element.tagName);\n    var doc = element.ownerDocument;\n    for (var i = 0; i < element.attributes.length; i += 1) {\n        var attribute = element.attributes.item(i);\n        var attributeName = attribute.name;\n        var attributeValue = serializeAttribute(element, nodePrivacyLevel, attributeName, options.configuration);\n        if (attributeValue !== null) {\n            safeAttrs[attributeName] = attributeValue;\n        }\n    }\n    if (element.value &&\n        (tagName === 'textarea' || tagName === 'select' || tagName === 'option' || tagName === 'input')) {\n        var formValue = getElementInputValue(element, nodePrivacyLevel);\n        if (formValue !== undefined) {\n            safeAttrs.value = formValue;\n        }\n    }\n    /**\n     * <Option> can be selected, which occurs if its `value` matches ancestor `<Select>.value`\n     */\n    if (tagName === 'option' && nodePrivacyLevel === NodePrivacyLevel.ALLOW) {\n        // For privacy=`MASK`, all the values would be the same, so skip.\n        var optionElement = element;\n        if (optionElement.selected) {\n            safeAttrs.selected = optionElement.selected;\n        }\n    }\n    // remote css\n    if (tagName === 'link') {\n        var stylesheet = Array.from(doc.styleSheets).find(function (s) { return s.href === element.href; });\n        var cssText = getCssRulesString(stylesheet);\n        if (cssText && stylesheet) {\n            safeAttrs._cssText = cssText;\n        }\n    }\n    // dynamic stylesheet\n    if (tagName === 'style' && element.sheet) {\n        var cssText = getCssRulesString(element.sheet);\n        if (cssText) {\n            safeAttrs._cssText = cssText;\n        }\n    }\n    /**\n     * Forms: input[type=checkbox,radio]\n     * The `checked` property for <input> is a little bit special:\n     * 1. el.checked is a setter that returns if truthy.\n     * 2. getAttribute returns the string value\n     * getAttribute('checked') does not sync with `Element.checked`, so use JS property\n     * NOTE: `checked` property exists on `HTMLInputElement`. For serializer assumptions, we check for type=radio|check.\n     */\n    var inputElement = element;\n    if (tagName === 'input' && (inputElement.type === 'radio' || inputElement.type === 'checkbox')) {\n        if (nodePrivacyLevel === NodePrivacyLevel.ALLOW) {\n            safeAttrs.checked = !!inputElement.checked;\n        }\n        else if (shouldMaskNode(inputElement, nodePrivacyLevel)) {\n            delete safeAttrs.checked;\n        }\n    }\n    /**\n     * Serialize the media playback state\n     */\n    if (tagName === 'audio' || tagName === 'video') {\n        var mediaElement = element;\n        safeAttrs.rr_mediaState = mediaElement.paused ? 'paused' : 'played';\n    }\n    /**\n     * Serialize the scroll state for each element only for full snapshot\n     */\n    var scrollTop;\n    var scrollLeft;\n    var serializationContext = options.serializationContext;\n    switch (serializationContext.status) {\n        case 0 /* SerializationContextStatus.INITIAL_FULL_SNAPSHOT */:\n            scrollTop = Math.round(element.scrollTop);\n            scrollLeft = Math.round(element.scrollLeft);\n            if (scrollTop || scrollLeft) {\n                serializationContext.elementsScrollPositions.set(element, { scrollTop: scrollTop, scrollLeft: scrollLeft });\n            }\n            break;\n        case 1 /* SerializationContextStatus.SUBSEQUENT_FULL_SNAPSHOT */:\n            if (serializationContext.elementsScrollPositions.has(element)) {\n                ;\n                (_a = serializationContext.elementsScrollPositions.get(element), scrollTop = _a.scrollTop, scrollLeft = _a.scrollLeft);\n            }\n            break;\n    }\n    if (scrollLeft) {\n        safeAttrs.rr_scrollLeft = scrollLeft;\n    }\n    if (scrollTop) {\n        safeAttrs.rr_scrollTop = scrollTop;\n    }\n    return safeAttrs;\n}\nexport function getCssRulesString(cssStyleSheet) {\n    if (!cssStyleSheet) {\n        return null;\n    }\n    var rules;\n    try {\n        rules = cssStyleSheet.rules || cssStyleSheet.cssRules;\n    }\n    catch (_a) {\n        // if css is protected by CORS we cannot access cssRules see: https://www.w3.org/TR/cssom-1/#the-cssstylesheet-interface\n    }\n    if (!rules) {\n        return null;\n    }\n    var styleSheetCssText = Array.from(rules, isSafari() ? getCssRuleStringForSafari : getCssRuleString).join('');\n    return switchToAbsoluteUrl(styleSheetCssText, cssStyleSheet.href);\n}\nfunction getCssRuleStringForSafari(rule) {\n    // Safari does not escape attribute selectors containing : properly\n    // https://bugs.webkit.org/show_bug.cgi?id=184604\n    if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n        // This regex replaces [foo:bar] by [foo\\\\:bar]\n        var escapeColon = /(\\[[\\w-]+[^\\\\])(:[^\\]]+\\])/g;\n        return rule.cssText.replace(escapeColon, '$1\\\\$2');\n    }\n    return getCssRuleString(rule);\n}\nfunction getCssRuleString(rule) {\n    // If it's an @import rule, try to inline sub-rules recursively with `getCssRulesString`. This\n    // operation can fail if the imported stylesheet is protected by CORS, in which case we fallback\n    // to the @import rule CSS text.\n    return (isCSSImportRule(rule) && getCssRulesString(rule.styleSheet)) || rule.cssText;\n}\nfunction isCSSImportRule(rule) {\n    return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n    return 'selectorText' in rule;\n}\n//# sourceMappingURL=serializeAttributes.js.map","import { reducePrivacyLevel, getNodeSelfPrivacyLevel, getTextContent, isNodeShadowRoot, hasChildNodes, forEachChildNodes, NodePrivacyLevel, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, } from '@datadog/browser-rum-core';\nimport { assign } from '@datadog/browser-core';\nimport { NodeType } from '../../../types';\nimport { getSerializedNodeId, getValidTagName, setSerializedNodeId } from './serializationUtils';\nimport { serializeStyleSheets } from './serializeStyleSheets';\nimport { serializeAttributes } from './serializeAttributes';\nexport function serializeNodeWithId(node, options) {\n    var serializedNode = serializeNode(node, options);\n    if (!serializedNode) {\n        return null;\n    }\n    // Try to reuse the previous id\n    var id = getSerializedNodeId(node) || generateNextId();\n    var serializedNodeWithId = serializedNode;\n    serializedNodeWithId.id = id;\n    setSerializedNodeId(node, id);\n    if (options.serializedNodeIds) {\n        options.serializedNodeIds.add(id);\n    }\n    return serializedNodeWithId;\n}\nvar _nextId = 1;\nexport function generateNextId() {\n    return _nextId++;\n}\nexport function serializeChildNodes(node, options) {\n    var result = [];\n    forEachChildNodes(node, function (childNode) {\n        var serializedChildNode = serializeNodeWithId(childNode, options);\n        if (serializedChildNode) {\n            result.push(serializedChildNode);\n        }\n    });\n    return result;\n}\nfunction serializeNode(node, options) {\n    switch (node.nodeType) {\n        case node.DOCUMENT_NODE:\n            return serializeDocumentNode(node, options);\n        case node.DOCUMENT_FRAGMENT_NODE:\n            return serializeDocumentFragmentNode(node, options);\n        case node.DOCUMENT_TYPE_NODE:\n            return serializeDocumentTypeNode(node);\n        case node.ELEMENT_NODE:\n            return serializeElementNode(node, options);\n        case node.TEXT_NODE:\n            return serializeTextNode(node, options);\n        case node.CDATA_SECTION_NODE:\n            return serializeCDataNode();\n    }\n}\nexport function serializeDocumentNode(document, options) {\n    return {\n        type: NodeType.Document,\n        childNodes: serializeChildNodes(document, options),\n        adoptedStyleSheets: serializeStyleSheets(document.adoptedStyleSheets),\n    };\n}\nfunction serializeDocumentFragmentNode(element, options) {\n    var isShadowRoot = isNodeShadowRoot(element);\n    if (isShadowRoot) {\n        options.serializationContext.shadowRootsController.addShadowRoot(element);\n    }\n    return {\n        type: NodeType.DocumentFragment,\n        childNodes: serializeChildNodes(element, options),\n        isShadowRoot: isShadowRoot,\n        adoptedStyleSheets: isShadowRoot ? serializeStyleSheets(element.adoptedStyleSheets) : undefined,\n    };\n}\nfunction serializeDocumentTypeNode(documentType) {\n    return {\n        type: NodeType.DocumentType,\n        name: documentType.name,\n        publicId: documentType.publicId,\n        systemId: documentType.systemId,\n    };\n}\n/**\n * Serializing Element nodes involves capturing:\n * 1. HTML ATTRIBUTES:\n * 2. JS STATE:\n * - scroll offsets\n * - Form fields (input value, checkbox checked, option selection, range)\n * - Canvas state,\n * - Media (video/audio) play mode + currentTime\n * - iframe contents\n * - webcomponents\n * 3. CUSTOM PROPERTIES:\n * - height+width for when `hidden` to cover the element\n * 4. EXCLUDED INTERACTION STATE:\n * - focus (possible, but not worth perf impact)\n * - hover (tracked only via mouse activity)\n * - fullscreen mode\n */\nfunction serializeElementNode(element, options) {\n    var _a;\n    var tagName = getValidTagName(element.tagName);\n    var isSVG = isSVGElement(element) || undefined;\n    // For performance reason, we don't use getNodePrivacyLevel directly: we leverage the\n    // parentNodePrivacyLevel option to avoid iterating over all parents\n    var nodePrivacyLevel = reducePrivacyLevel(getNodeSelfPrivacyLevel(element), options.parentNodePrivacyLevel);\n    if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n        var _b = element.getBoundingClientRect(), width = _b.width, height = _b.height;\n        return {\n            type: NodeType.Element,\n            tagName: tagName,\n            attributes: (_a = {\n                    rr_width: \"\".concat(width, \"px\"),\n                    rr_height: \"\".concat(height, \"px\")\n                },\n                _a[PRIVACY_ATTR_NAME] = PRIVACY_ATTR_VALUE_HIDDEN,\n                _a),\n            childNodes: [],\n            isSVG: isSVG,\n        };\n    }\n    // Ignore Elements like Script and some Link, Metas\n    if (nodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n        return;\n    }\n    var attributes = serializeAttributes(element, nodePrivacyLevel, options);\n    var childNodes = [];\n    if (hasChildNodes(element) &&\n        // Do not serialize style children as the css rules are already in the _cssText attribute\n        tagName !== 'style') {\n        // OBJECT POOLING OPTIMIZATION:\n        // We should not create a new object systematically as it could impact performances. Try to reuse\n        // the same object as much as possible, and clone it only if we need to.\n        var childNodesSerializationOptions = void 0;\n        if (options.parentNodePrivacyLevel === nodePrivacyLevel && options.ignoreWhiteSpace === (tagName === 'head')) {\n            childNodesSerializationOptions = options;\n        }\n        else {\n            childNodesSerializationOptions = assign({}, options, {\n                parentNodePrivacyLevel: nodePrivacyLevel,\n                ignoreWhiteSpace: tagName === 'head',\n            });\n        }\n        childNodes = serializeChildNodes(element, childNodesSerializationOptions);\n    }\n    return {\n        type: NodeType.Element,\n        tagName: tagName,\n        attributes: attributes,\n        childNodes: childNodes,\n        isSVG: isSVG,\n    };\n}\nfunction isSVGElement(el) {\n    return el.tagName === 'svg' || el instanceof SVGElement;\n}\n/**\n * Text Nodes are dependant on Element nodes\n * Privacy levels are set on elements so we check the parentElement of a text node\n * for privacy level.\n */\nfunction serializeTextNode(textNode, options) {\n    var textContent = getTextContent(textNode, options.ignoreWhiteSpace || false, options.parentNodePrivacyLevel);\n    if (textContent === undefined) {\n        return;\n    }\n    return {\n        type: NodeType.Text,\n        textContent: textContent,\n    };\n}\nfunction serializeCDataNode() {\n    return {\n        type: NodeType.CDATA,\n        textContent: '',\n    };\n}\n//# sourceMappingURL=serializeNode.js.map","import { serializeNodeWithId } from './serializeNode';\nexport function serializeDocument(document, configuration, serializationContext) {\n    // We are sure that Documents are never ignored, so this function never returns null\n    return serializeNodeWithId(document, {\n        serializationContext: serializationContext,\n        parentNodePrivacyLevel: configuration.defaultPrivacyLevel,\n        configuration: configuration,\n    });\n}\n//# sourceMappingURL=serializeDocument.js.map","import { isNodeShadowHost } from '@datadog/browser-rum-core';\nexport function isTouchEvent(event) {\n    return Boolean(event.changedTouches);\n}\nexport function getEventTarget(event) {\n    if (event.composed === true && isNodeShadowHost(event.target)) {\n        return event.composedPath()[0];\n    }\n    return event.target;\n}\n//# sourceMappingURL=eventsUtils.js.map","/**\n * Browsers have not standardized various dimension properties. Mobile devices typically report\n * dimensions in reference to the visual viewport, while desktop uses the layout viewport. For example,\n * Mobile Chrome will change innerWidth when a pinch zoom takes place, while Chrome Desktop (mac) will not.\n *\n * With the new Viewport API, we now calculate and normalize dimension properties to the layout viewport.\n * If the VisualViewport API is not supported by a browser, it isn't reasonably possible to detect or normalize\n * which viewport is being measured. Therefore these exported functions will fallback to assuming that the layout\n * viewport is being measured by the browser\n */\n// Scrollbar widths vary across properties on different devices and browsers\nvar TOLERANCE = 25;\n/**\n * Use the Visual Viewport API's properties to measure scrollX/Y in reference to the layout viewport\n * in order to determine if window.scrollX/Y is measuring the layout or visual viewport.\n * This finding corresponds to which viewport mouseEvent.clientX/Y and window.innerWidth/Height measures.\n */\nfunction isVisualViewportFactoredIn(visualViewport) {\n    return (Math.abs(visualViewport.pageTop - visualViewport.offsetTop - window.scrollY) > TOLERANCE ||\n        Math.abs(visualViewport.pageLeft - visualViewport.offsetLeft - window.scrollX) > TOLERANCE);\n}\nexport var convertMouseEventToLayoutCoordinates = function (clientX, clientY) {\n    var visualViewport = window.visualViewport;\n    var normalized = {\n        layoutViewportX: clientX,\n        layoutViewportY: clientY,\n        visualViewportX: clientX,\n        visualViewportY: clientY,\n    };\n    if (!visualViewport) {\n        // On old browsers, we cannot normalize, so fallback to clientX/Y\n        return normalized;\n    }\n    else if (isVisualViewportFactoredIn(visualViewport)) {\n        // Typically Mobile Devices\n        normalized.layoutViewportX = Math.round(clientX + visualViewport.offsetLeft);\n        normalized.layoutViewportY = Math.round(clientY + visualViewport.offsetTop);\n    }\n    else {\n        // Typically Desktop Devices\n        normalized.visualViewportX = Math.round(clientX - visualViewport.offsetLeft);\n        normalized.visualViewportY = Math.round(clientY - visualViewport.offsetTop);\n    }\n    return normalized;\n};\nexport var getVisualViewport = function (visualViewport) { return ({\n    scale: visualViewport.scale,\n    offsetLeft: visualViewport.offsetLeft,\n    offsetTop: visualViewport.offsetTop,\n    pageLeft: visualViewport.pageLeft,\n    pageTop: visualViewport.pageTop,\n    height: visualViewport.height,\n    width: visualViewport.width,\n}); };\n//# sourceMappingURL=viewports.js.map","import { assign, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nexport function assembleIncrementalSnapshot(source, data) {\n    return {\n        data: assign({\n            source: source,\n        }, data),\n        type: RecordType.IncrementalSnapshot,\n        timestamp: timeStampNow(),\n    };\n}\n//# sourceMappingURL=assembly.js.map","import { addEventListeners, addTelemetryDebug, throttle } from '@datadog/browser-core';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget, isTouchEvent } from '../eventsUtils';\nimport { convertMouseEventToLayoutCoordinates } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nvar MOUSE_MOVE_OBSERVER_THRESHOLD = 50;\nexport function trackMove(configuration, moveCb) {\n    var _a = throttle(function (event) {\n        var target = getEventTarget(event);\n        if (hasSerializedNode(target)) {\n            var coordinates = tryToComputeCoordinates(event);\n            if (!coordinates) {\n                return;\n            }\n            var position = {\n                id: getSerializedNodeId(target),\n                timeOffset: 0,\n                x: coordinates.x,\n                y: coordinates.y,\n            };\n            moveCb(assembleIncrementalSnapshot(isTouchEvent(event) ? IncrementalSource.TouchMove : IncrementalSource.MouseMove, { positions: [position] }));\n        }\n    }, MOUSE_MOVE_OBSERVER_THRESHOLD, {\n        trailing: false,\n    }), updatePosition = _a.throttled, cancelThrottle = _a.cancel;\n    var removeListener = addEventListeners(configuration, document, [\"mousemove\" /* DOM_EVENT.MOUSE_MOVE */, \"touchmove\" /* DOM_EVENT.TOUCH_MOVE */], updatePosition, {\n        capture: true,\n        passive: true,\n    }).stop;\n    return {\n        stop: function () {\n            removeListener();\n            cancelThrottle();\n        },\n    };\n}\nexport function tryToComputeCoordinates(event) {\n    var _a = isTouchEvent(event) ? event.changedTouches[0] : event, x = _a.clientX, y = _a.clientY;\n    if (window.visualViewport) {\n        var _b = convertMouseEventToLayoutCoordinates(x, y), visualViewportX = _b.visualViewportX, visualViewportY = _b.visualViewportY;\n        x = visualViewportX;\n        y = visualViewportY;\n    }\n    if (!Number.isFinite(x) || !Number.isFinite(y)) {\n        if (event.isTrusted) {\n            addTelemetryDebug('mouse/touch event without x/y');\n        }\n        return undefined;\n    }\n    return { x: x, y: y };\n}\n//# sourceMappingURL=trackMove.js.map","var _a;\nimport { assign, addEventListeners } from '@datadog/browser-core';\nimport { getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MouseInteractionType } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nimport { getEventTarget } from '../eventsUtils';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { tryToComputeCoordinates } from './trackMove';\nvar eventTypeToMouseInteraction = (_a = {},\n    // Listen for pointerup DOM events instead of mouseup for MouseInteraction/MouseUp records. This\n    // allows to reference such records from Frustration records.\n    //\n    // In the context of supporting Mobile Session Replay, we introduced `PointerInteraction` records\n    // used by the Mobile SDKs in place of `MouseInteraction`. In the future, we should replace\n    // `MouseInteraction` by `PointerInteraction` in the Browser SDK so we have an uniform way to\n    // convey such interaction. This would cleanly solve the issue since we would have\n    // `PointerInteraction/Up` records that we could reference from `Frustration` records.\n    _a[\"pointerup\" /* DOM_EVENT.POINTER_UP */] = MouseInteractionType.MouseUp,\n    _a[\"mousedown\" /* DOM_EVENT.MOUSE_DOWN */] = MouseInteractionType.MouseDown,\n    _a[\"click\" /* DOM_EVENT.CLICK */] = MouseInteractionType.Click,\n    _a[\"contextmenu\" /* DOM_EVENT.CONTEXT_MENU */] = MouseInteractionType.ContextMenu,\n    _a[\"dblclick\" /* DOM_EVENT.DBL_CLICK */] = MouseInteractionType.DblClick,\n    _a[\"focus\" /* DOM_EVENT.FOCUS */] = MouseInteractionType.Focus,\n    _a[\"blur\" /* DOM_EVENT.BLUR */] = MouseInteractionType.Blur,\n    _a[\"touchstart\" /* DOM_EVENT.TOUCH_START */] = MouseInteractionType.TouchStart,\n    _a[\"touchend\" /* DOM_EVENT.TOUCH_END */] = MouseInteractionType.TouchEnd,\n    _a);\nexport function trackMouseInteraction(configuration, mouseInteractionCb, recordIds) {\n    var handler = function (event) {\n        var target = getEventTarget(event);\n        if (getNodePrivacyLevel(target, configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN ||\n            !hasSerializedNode(target)) {\n            return;\n        }\n        var id = getSerializedNodeId(target);\n        var type = eventTypeToMouseInteraction[event.type];\n        var interaction;\n        if (type !== MouseInteractionType.Blur && type !== MouseInteractionType.Focus) {\n            var coordinates = tryToComputeCoordinates(event);\n            if (!coordinates) {\n                return;\n            }\n            interaction = { id: id, type: type, x: coordinates.x, y: coordinates.y };\n        }\n        else {\n            interaction = { id: id, type: type };\n        }\n        var record = assign({ id: recordIds.getIdForEvent(event) }, assembleIncrementalSnapshot(IncrementalSource.MouseInteraction, interaction));\n        mouseInteractionCb(record);\n    };\n    return addEventListeners(configuration, document, Object.keys(eventTypeToMouseInteraction), handler, {\n        capture: true,\n        passive: true,\n    });\n}\n//# sourceMappingURL=trackMouseInteraction.js.map","import { throttle, addEventListener } from '@datadog/browser-core';\nimport { getScrollX, getScrollY, getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { getEventTarget } from '../eventsUtils';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nvar SCROLL_OBSERVER_THRESHOLD = 100;\nexport function trackScroll(configuration, scrollCb, elementsScrollPositions, target) {\n    if (target === void 0) { target = document; }\n    var _a = throttle(function (event) {\n        var target = getEventTarget(event);\n        if (!target ||\n            getNodePrivacyLevel(target, configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN ||\n            !hasSerializedNode(target)) {\n            return;\n        }\n        var id = getSerializedNodeId(target);\n        var scrollPositions = target === document\n            ? {\n                scrollTop: getScrollY(),\n                scrollLeft: getScrollX(),\n            }\n            : {\n                scrollTop: Math.round(target.scrollTop),\n                scrollLeft: Math.round(target.scrollLeft),\n            };\n        elementsScrollPositions.set(target, scrollPositions);\n        scrollCb(assembleIncrementalSnapshot(IncrementalSource.Scroll, {\n            id: id,\n            x: scrollPositions.scrollLeft,\n            y: scrollPositions.scrollTop,\n        }));\n    }, SCROLL_OBSERVER_THRESHOLD), updatePosition = _a.throttled, cancelThrottle = _a.cancel;\n    var removeListener = addEventListener(configuration, target, \"scroll\" /* DOM_EVENT.SCROLL */, updatePosition, {\n        capture: true,\n        passive: true,\n    }).stop;\n    return {\n        stop: function () {\n            removeListener();\n            cancelThrottle();\n        },\n    };\n}\n//# sourceMappingURL=trackScroll.js.map","import { throttle, addEventListeners, timeStampNow, noop } from '@datadog/browser-core';\nimport { initViewportObservable } from '@datadog/browser-rum-core';\nimport { IncrementalSource, RecordType } from '../../../types';\nimport { getVisualViewport } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nvar VISUAL_VIEWPORT_OBSERVER_THRESHOLD = 200;\nexport function trackViewportResize(configuration, viewportResizeCb) {\n    var viewportResizeSubscription = initViewportObservable(configuration).subscribe(function (data) {\n        viewportResizeCb(assembleIncrementalSnapshot(IncrementalSource.ViewportResize, data));\n    });\n    return {\n        stop: function () {\n            viewportResizeSubscription.unsubscribe();\n        },\n    };\n}\nexport function trackVisualViewportResize(configuration, visualViewportResizeCb) {\n    var visualViewport = window.visualViewport;\n    if (!visualViewport) {\n        return { stop: noop };\n    }\n    var _a = throttle(function () {\n        visualViewportResizeCb({\n            data: getVisualViewport(visualViewport),\n            type: RecordType.VisualViewport,\n            timestamp: timeStampNow(),\n        });\n    }, VISUAL_VIEWPORT_OBSERVER_THRESHOLD, {\n        trailing: false,\n    }), updateDimension = _a.throttled, cancelThrottle = _a.cancel;\n    var removeListener = addEventListeners(configuration, visualViewport, [\"resize\" /* DOM_EVENT.RESIZE */, \"scroll\" /* DOM_EVENT.SCROLL */], updateDimension, {\n        capture: true,\n        passive: true,\n    }).stop;\n    return {\n        stop: function () {\n            removeListener();\n            cancelThrottle();\n        },\n    };\n}\n//# sourceMappingURL=trackViewportResize.js.map","import { addEventListeners } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MediaInteractionType } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackMediaInteraction(configuration, mediaInteractionCb) {\n    return addEventListeners(configuration, document, [\"play\" /* DOM_EVENT.PLAY */, \"pause\" /* DOM_EVENT.PAUSE */], function (event) {\n        var target = getEventTarget(event);\n        if (!target ||\n            getNodePrivacyLevel(target, configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN ||\n            !hasSerializedNode(target)) {\n            return;\n        }\n        mediaInteractionCb(assembleIncrementalSnapshot(IncrementalSource.MediaInteraction, {\n            id: getSerializedNodeId(target),\n            type: event.type === \"play\" /* DOM_EVENT.PLAY */ ? MediaInteractionType.Play : MediaInteractionType.Pause,\n        }));\n    }, {\n        capture: true,\n        passive: true,\n    });\n}\n//# sourceMappingURL=trackMediaInteraction.js.map","import { instrumentMethod } from '@datadog/browser-core';\nimport { IncrementalSource } from '../../../types';\nimport { getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackStyleSheet(styleSheetCb) {\n    function checkStyleSheetAndCallback(styleSheet, callback) {\n        if (styleSheet && hasSerializedNode(styleSheet.ownerNode)) {\n            callback(getSerializedNodeId(styleSheet.ownerNode));\n        }\n    }\n    var instrumentationStoppers = [\n        instrumentMethod(CSSStyleSheet.prototype, 'insertRule', function (_a) {\n            var styleSheet = _a.target, _b = _a.parameters, rule = _b[0], index = _b[1];\n            checkStyleSheetAndCallback(styleSheet, function (id) {\n                return styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                    id: id,\n                    adds: [{ rule: rule, index: index }],\n                }));\n            });\n        }),\n        instrumentMethod(CSSStyleSheet.prototype, 'deleteRule', function (_a) {\n            var styleSheet = _a.target, index = _a.parameters[0];\n            checkStyleSheetAndCallback(styleSheet, function (id) {\n                return styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                    id: id,\n                    removes: [{ index: index }],\n                }));\n            });\n        }),\n    ];\n    if (typeof CSSGroupingRule !== 'undefined') {\n        instrumentGroupingCSSRuleClass(CSSGroupingRule);\n    }\n    else {\n        instrumentGroupingCSSRuleClass(CSSMediaRule);\n        instrumentGroupingCSSRuleClass(CSSSupportsRule);\n    }\n    function instrumentGroupingCSSRuleClass(cls) {\n        instrumentationStoppers.push(instrumentMethod(cls.prototype, 'insertRule', function (_a) {\n            var styleSheet = _a.target, _b = _a.parameters, rule = _b[0], index = _b[1];\n            checkStyleSheetAndCallback(styleSheet.parentStyleSheet, function (id) {\n                var path = getPathToNestedCSSRule(styleSheet);\n                if (path) {\n                    path.push(index || 0);\n                    styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                        id: id,\n                        adds: [{ rule: rule, index: path }],\n                    }));\n                }\n            });\n        }), instrumentMethod(cls.prototype, 'deleteRule', function (_a) {\n            var styleSheet = _a.target, index = _a.parameters[0];\n            checkStyleSheetAndCallback(styleSheet.parentStyleSheet, function (id) {\n                var path = getPathToNestedCSSRule(styleSheet);\n                if (path) {\n                    path.push(index);\n                    styleSheetCb(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n                        id: id,\n                        removes: [{ index: path }],\n                    }));\n                }\n            });\n        }));\n    }\n    return {\n        stop: function () {\n            instrumentationStoppers.forEach(function (stopper) { return stopper.stop(); });\n        },\n    };\n}\nexport function getPathToNestedCSSRule(rule) {\n    var path = [];\n    var currentRule = rule;\n    while (currentRule.parentRule) {\n        var rules_1 = Array.from(currentRule.parentRule.cssRules);\n        var index_1 = rules_1.indexOf(currentRule);\n        path.unshift(index_1);\n        currentRule = currentRule.parentRule;\n    }\n    // A rule may not be attached to a stylesheet\n    if (!currentRule.parentStyleSheet) {\n        return;\n    }\n    var rules = Array.from(currentRule.parentStyleSheet.cssRules);\n    var index = rules.indexOf(currentRule);\n    path.unshift(index);\n    return path;\n}\n//# sourceMappingURL=trackStyleSheet.js.map","import { addEventListeners, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackFocus(configuration, focusCb) {\n    return addEventListeners(configuration, window, [\"focus\" /* DOM_EVENT.FOCUS */, \"blur\" /* DOM_EVENT.BLUR */], function () {\n        focusCb({\n            data: { has_focus: document.hasFocus() },\n            type: RecordType.Focus,\n            timestamp: timeStampNow(),\n        });\n    });\n}\n//# sourceMappingURL=trackFocus.js.map","import { RecordType } from '../../../types';\nexport function trackFrustration(lifeCycle, frustrationCb, recordIds) {\n    var frustrationSubscription = lifeCycle.subscribe(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, function (data) {\n        var _a, _b;\n        if (data.rawRumEvent.type === \"action\" /* RumEventType.ACTION */ &&\n            data.rawRumEvent.action.type === \"click\" /* ActionType.CLICK */ &&\n            ((_b = (_a = data.rawRumEvent.action.frustration) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.length) &&\n            'events' in data.domainContext &&\n            data.domainContext.events &&\n            data.domainContext.events.length) {\n            frustrationCb({\n                timestamp: data.rawRumEvent.date,\n                type: RecordType.FrustrationRecord,\n                data: {\n                    frustrationTypes: data.rawRumEvent.action.frustration.type,\n                    recordIds: data.domainContext.events.map(function (e) { return recordIds.getIdForEvent(e); }),\n                },\n            });\n        }\n    });\n    return {\n        stop: function () {\n            frustrationSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackFrustration.js.map","import { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackViewEnd(lifeCycle, viewEndCb) {\n    var viewEndSubscription = lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, function () {\n        viewEndCb({\n            timestamp: timeStampNow(),\n            type: RecordType.ViewEnd,\n        });\n    });\n    return {\n        stop: function () {\n            viewEndSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=trackViewEnd.js.map","import { instrumentSetter, assign, addEventListeners, forEach, noop } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel, shouldMaskNode, cssEscape } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { getElementInputValue, getSerializedNodeId, hasSerializedNode } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackInput(configuration, inputCb, target) {\n    if (target === void 0) { target = document; }\n    var defaultPrivacyLevel = configuration.defaultPrivacyLevel;\n    var lastInputStateMap = new WeakMap();\n    var isShadowRoot = target !== document;\n    var stopEventListeners = addEventListeners(configuration, target, \n    // The 'input' event bubbles across shadow roots, so we don't have to listen for it on shadow\n    // roots since it will be handled by the event listener that we did add to the document. Only\n    // the 'change' event is blocked and needs to be handled on shadow roots.\n    isShadowRoot ? [\"change\" /* DOM_EVENT.CHANGE */] : [\"input\" /* DOM_EVENT.INPUT */, \"change\" /* DOM_EVENT.CHANGE */], function (event) {\n        var target = getEventTarget(event);\n        if (target instanceof HTMLInputElement ||\n            target instanceof HTMLTextAreaElement ||\n            target instanceof HTMLSelectElement) {\n            onElementChange(target);\n        }\n    }, {\n        capture: true,\n        passive: true,\n    }).stop;\n    var stopPropertySetterInstrumentation;\n    if (!isShadowRoot) {\n        var instrumentationStoppers_1 = [\n            instrumentSetter(HTMLInputElement.prototype, 'value', onElementChange),\n            instrumentSetter(HTMLInputElement.prototype, 'checked', onElementChange),\n            instrumentSetter(HTMLSelectElement.prototype, 'value', onElementChange),\n            instrumentSetter(HTMLTextAreaElement.prototype, 'value', onElementChange),\n            instrumentSetter(HTMLSelectElement.prototype, 'selectedIndex', onElementChange),\n        ];\n        stopPropertySetterInstrumentation = function () {\n            instrumentationStoppers_1.forEach(function (stopper) { return stopper.stop(); });\n        };\n    }\n    else {\n        stopPropertySetterInstrumentation = noop;\n    }\n    return {\n        stop: function () {\n            stopPropertySetterInstrumentation();\n            stopEventListeners();\n        },\n    };\n    function onElementChange(target) {\n        var nodePrivacyLevel = getNodePrivacyLevel(target, defaultPrivacyLevel);\n        if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n            return;\n        }\n        var type = target.type;\n        var inputState;\n        if (type === 'radio' || type === 'checkbox') {\n            if (shouldMaskNode(target, nodePrivacyLevel)) {\n                return;\n            }\n            inputState = { isChecked: target.checked };\n        }\n        else {\n            var value = getElementInputValue(target, nodePrivacyLevel);\n            if (value === undefined) {\n                return;\n            }\n            inputState = { text: value };\n        }\n        // Can be multiple changes on the same node within the same batched mutation observation.\n        cbWithDedup(target, inputState);\n        // If a radio was checked, other radios with the same name attribute will be unchecked.\n        var name = target.name;\n        if (type === 'radio' && name && target.checked) {\n            forEach(document.querySelectorAll(\"input[type=\\\"radio\\\"][name=\\\"\".concat(cssEscape(name), \"\\\"]\")), function (el) {\n                if (el !== target) {\n                    // TODO: Consider the privacy implications for various differing input privacy levels\n                    cbWithDedup(el, { isChecked: false });\n                }\n            });\n        }\n    }\n    /**\n     * There can be multiple changes on the same node within the same batched mutation observation.\n     */\n    function cbWithDedup(target, inputState) {\n        if (!hasSerializedNode(target)) {\n            return;\n        }\n        var lastInputState = lastInputStateMap.get(target);\n        if (!lastInputState ||\n            lastInputState.text !== inputState.text ||\n            lastInputState.isChecked !== inputState.isChecked) {\n            lastInputStateMap.set(target, inputState);\n            inputCb(assembleIncrementalSnapshot(IncrementalSource.Input, assign({\n                id: getSerializedNodeId(target),\n            }, inputState)));\n        }\n    }\n}\n//# sourceMappingURL=trackInput.js.map","import { noop, throttle, requestIdleCallback } from '@datadog/browser-core';\n/**\n * Maximum duration to wait before processing mutations. If the browser is idle, mutations will be\n * processed more quickly. If the browser is busy executing small tasks (ex: rendering frames), the\n * mutations will wait MUTATION_PROCESS_MAX_DELAY milliseconds before being processed. If the\n * browser is busy executing a longer task, mutations will be processed after this task.\n */\nvar MUTATION_PROCESS_MAX_DELAY = 100;\n/**\n * Minimum duration to wait before processing mutations. This is used to batch mutations together\n * and be able to deduplicate them to save processing time and bandwidth.\n * 16ms is the duration of a frame at 60fps that ensure fluid UI.\n */\nexport var MUTATION_PROCESS_MIN_DELAY = 16;\nexport function createMutationBatch(processMutationBatch) {\n    var cancelScheduledFlush = noop;\n    var pendingMutations = [];\n    function flush() {\n        cancelScheduledFlush();\n        processMutationBatch(pendingMutations);\n        pendingMutations = [];\n    }\n    var _a = throttle(flush, MUTATION_PROCESS_MIN_DELAY, {\n        leading: false,\n    }), throttledFlush = _a.throttled, cancelThrottle = _a.cancel;\n    return {\n        addMutations: function (mutations) {\n            if (pendingMutations.length === 0) {\n                cancelScheduledFlush = requestIdleCallback(throttledFlush, { timeout: MUTATION_PROCESS_MAX_DELAY });\n            }\n            pendingMutations.push.apply(pendingMutations, mutations);\n        },\n        flush: flush,\n        stop: function () {\n            cancelScheduledFlush();\n            cancelThrottle();\n        },\n    };\n}\n//# sourceMappingURL=mutationBatch.js.map","import { monitor, noop } from '@datadog/browser-core';\nimport { isNodeShadowHost, getMutationObserverConstructor, getParentNode, forEachChildNodes, getNodePrivacyLevel, getTextContent, NodePrivacyLevel, } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { getElementInputValue, getSerializedNodeId, hasSerializedNode, nodeAndAncestorsHaveSerializedNode, serializeNodeWithId, serializeAttribute, } from '../serialization';\nimport { createMutationBatch } from '../mutationBatch';\nimport { assembleIncrementalSnapshot } from '../assembly';\n/**\n * Buffers and aggregate mutations generated by a MutationObserver into MutationPayload\n */\nexport function trackMutation(mutationCallback, configuration, shadowRootsController, target) {\n    var MutationObserver = getMutationObserverConstructor();\n    if (!MutationObserver) {\n        return { stop: noop, flush: noop };\n    }\n    var mutationBatch = createMutationBatch(function (mutations) {\n        processMutations(mutations.concat(observer.takeRecords()), mutationCallback, configuration, shadowRootsController);\n    });\n    var observer = new MutationObserver(monitor(mutationBatch.addMutations));\n    observer.observe(target, {\n        attributeOldValue: true,\n        attributes: true,\n        characterData: true,\n        characterDataOldValue: true,\n        childList: true,\n        subtree: true,\n    });\n    return {\n        stop: function () {\n            observer.disconnect();\n            mutationBatch.stop();\n        },\n        flush: function () {\n            mutationBatch.flush();\n        },\n    };\n}\nfunction processMutations(mutations, mutationCallback, configuration, shadowRootsController) {\n    var nodePrivacyLevelCache = new Map();\n    mutations\n        .filter(function (mutation) { return mutation.type === 'childList'; })\n        .forEach(function (mutation) {\n        mutation.removedNodes.forEach(function (removedNode) {\n            traverseRemovedShadowDom(removedNode, shadowRootsController.removeShadowRoot);\n        });\n    });\n    // Discard any mutation with a 'target' node that:\n    // * isn't injected in the current document or isn't known/serialized yet: those nodes are likely\n    // part of a mutation occurring in a parent Node\n    // * should be hidden or ignored\n    var filteredMutations = mutations.filter(function (mutation) {\n        return mutation.target.isConnected &&\n            nodeAndAncestorsHaveSerializedNode(mutation.target) &&\n            getNodePrivacyLevel(mutation.target, configuration.defaultPrivacyLevel, nodePrivacyLevelCache) !==\n                NodePrivacyLevel.HIDDEN;\n    });\n    var _a = processChildListMutations(filteredMutations.filter(function (mutation) { return mutation.type === 'childList'; }), configuration, shadowRootsController, nodePrivacyLevelCache), adds = _a.adds, removes = _a.removes, hasBeenSerialized = _a.hasBeenSerialized;\n    var texts = processCharacterDataMutations(filteredMutations.filter(function (mutation) {\n        return mutation.type === 'characterData' && !hasBeenSerialized(mutation.target);\n    }), configuration, nodePrivacyLevelCache);\n    var attributes = processAttributesMutations(filteredMutations.filter(function (mutation) {\n        return mutation.type === 'attributes' && !hasBeenSerialized(mutation.target);\n    }), configuration, nodePrivacyLevelCache);\n    if (!texts.length && !attributes.length && !removes.length && !adds.length) {\n        return;\n    }\n    mutationCallback(assembleIncrementalSnapshot(IncrementalSource.Mutation, { adds: adds, removes: removes, texts: texts, attributes: attributes }));\n}\nfunction processChildListMutations(mutations, configuration, shadowRootsController, nodePrivacyLevelCache) {\n    // First, we iterate over mutations to collect:\n    //\n    // * nodes that have been added in the document and not removed by a subsequent mutation\n    // * nodes that have been removed from the document but were not added in a previous mutation\n    //\n    // For this second category, we also collect their previous parent (mutation.target) because we'll\n    // need it to emit a 'remove' mutation.\n    //\n    // Those two categories may overlap: if a node moved from a position to another, it is reported as\n    // two mutation records, one with a \"removedNodes\" and the other with \"addedNodes\". In this case,\n    // the node will be in both sets.\n    var addedAndMovedNodes = new Set();\n    var removedNodes = new Map();\n    var _loop_1 = function (mutation) {\n        mutation.addedNodes.forEach(function (node) {\n            addedAndMovedNodes.add(node);\n        });\n        mutation.removedNodes.forEach(function (node) {\n            if (!addedAndMovedNodes.has(node)) {\n                removedNodes.set(node, mutation.target);\n            }\n            addedAndMovedNodes.delete(node);\n        });\n    };\n    for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n        var mutation = mutations_1[_i];\n        _loop_1(mutation);\n    }\n    // Then, we sort nodes that are still in the document by topological order, for two reasons:\n    //\n    // * We will serialize each added nodes with their descendants. We don't want to serialize a node\n    // twice, so we need to iterate over the parent nodes first and skip any node that is contained in\n    // a precedent node.\n    //\n    // * To emit \"add\" mutations, we need references to the parent and potential next sibling of each\n    // added node. So we need to iterate over the parent nodes first, and when multiple nodes are\n    // siblings, we want to iterate from last to first. This will ensure that any \"next\" node is\n    // already serialized and have an id.\n    var sortedAddedAndMovedNodes = Array.from(addedAndMovedNodes);\n    sortAddedAndMovedNodes(sortedAddedAndMovedNodes);\n    // Then, we iterate over our sorted node sets to emit mutations. We collect the newly serialized\n    // node ids in a set to be able to skip subsequent related mutations.\n    var serializedNodeIds = new Set();\n    var addedNodeMutations = [];\n    for (var _a = 0, sortedAddedAndMovedNodes_1 = sortedAddedAndMovedNodes; _a < sortedAddedAndMovedNodes_1.length; _a++) {\n        var node = sortedAddedAndMovedNodes_1[_a];\n        if (hasBeenSerialized(node)) {\n            continue;\n        }\n        var parentNodePrivacyLevel = getNodePrivacyLevel(node.parentNode, configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n        if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n            continue;\n        }\n        var serializedNode = serializeNodeWithId(node, {\n            serializedNodeIds: serializedNodeIds,\n            parentNodePrivacyLevel: parentNodePrivacyLevel,\n            serializationContext: { status: 2 /* SerializationContextStatus.MUTATION */, shadowRootsController: shadowRootsController },\n            configuration: configuration,\n        });\n        if (!serializedNode) {\n            continue;\n        }\n        var parentNode = getParentNode(node);\n        addedNodeMutations.push({\n            nextId: getNextSibling(node),\n            parentId: getSerializedNodeId(parentNode),\n            node: serializedNode,\n        });\n    }\n    // Finally, we emit remove mutations.\n    var removedNodeMutations = [];\n    removedNodes.forEach(function (parent, node) {\n        if (hasSerializedNode(node)) {\n            removedNodeMutations.push({\n                parentId: getSerializedNodeId(parent),\n                id: getSerializedNodeId(node),\n            });\n        }\n    });\n    return { adds: addedNodeMutations, removes: removedNodeMutations, hasBeenSerialized: hasBeenSerialized };\n    function hasBeenSerialized(node) {\n        return hasSerializedNode(node) && serializedNodeIds.has(getSerializedNodeId(node));\n    }\n    function getNextSibling(node) {\n        var nextSibling = node.nextSibling;\n        while (nextSibling) {\n            if (hasSerializedNode(nextSibling)) {\n                return getSerializedNodeId(nextSibling);\n            }\n            nextSibling = nextSibling.nextSibling;\n        }\n        return null;\n    }\n}\nfunction processCharacterDataMutations(mutations, configuration, nodePrivacyLevelCache) {\n    var _a;\n    var textMutations = [];\n    // Deduplicate mutations based on their target node\n    var handledNodes = new Set();\n    var filteredMutations = mutations.filter(function (mutation) {\n        if (handledNodes.has(mutation.target)) {\n            return false;\n        }\n        handledNodes.add(mutation.target);\n        return true;\n    });\n    // Emit mutations\n    for (var _i = 0, filteredMutations_1 = filteredMutations; _i < filteredMutations_1.length; _i++) {\n        var mutation = filteredMutations_1[_i];\n        var value = mutation.target.textContent;\n        if (value === mutation.oldValue) {\n            continue;\n        }\n        var parentNodePrivacyLevel = getNodePrivacyLevel(getParentNode(mutation.target), configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n        if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n            continue;\n        }\n        textMutations.push({\n            id: getSerializedNodeId(mutation.target),\n            // TODO: pass a valid \"ignoreWhiteSpace\" argument\n            value: (_a = getTextContent(mutation.target, false, parentNodePrivacyLevel)) !== null && _a !== void 0 ? _a : null,\n        });\n    }\n    return textMutations;\n}\nfunction processAttributesMutations(mutations, configuration, nodePrivacyLevelCache) {\n    var attributeMutations = [];\n    // Deduplicate mutations based on their target node and changed attribute\n    var handledElements = new Map();\n    var filteredMutations = mutations.filter(function (mutation) {\n        var handledAttributes = handledElements.get(mutation.target);\n        if (handledAttributes && handledAttributes.has(mutation.attributeName)) {\n            return false;\n        }\n        if (!handledAttributes) {\n            handledElements.set(mutation.target, new Set([mutation.attributeName]));\n        }\n        else {\n            handledAttributes.add(mutation.attributeName);\n        }\n        return true;\n    });\n    // Emit mutations\n    var emittedMutations = new Map();\n    for (var _i = 0, filteredMutations_2 = filteredMutations; _i < filteredMutations_2.length; _i++) {\n        var mutation = filteredMutations_2[_i];\n        var uncensoredValue = mutation.target.getAttribute(mutation.attributeName);\n        if (uncensoredValue === mutation.oldValue) {\n            continue;\n        }\n        var privacyLevel = getNodePrivacyLevel(mutation.target, configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n        var attributeValue = serializeAttribute(mutation.target, privacyLevel, mutation.attributeName, configuration);\n        var transformedValue = void 0;\n        if (mutation.attributeName === 'value') {\n            var inputValue = getElementInputValue(mutation.target, privacyLevel);\n            if (inputValue === undefined) {\n                continue;\n            }\n            transformedValue = inputValue;\n        }\n        else if (typeof attributeValue === 'string') {\n            transformedValue = attributeValue;\n        }\n        else {\n            transformedValue = null;\n        }\n        var emittedMutation = emittedMutations.get(mutation.target);\n        if (!emittedMutation) {\n            emittedMutation = {\n                id: getSerializedNodeId(mutation.target),\n                attributes: {},\n            };\n            attributeMutations.push(emittedMutation);\n            emittedMutations.set(mutation.target, emittedMutation);\n        }\n        emittedMutation.attributes[mutation.attributeName] = transformedValue;\n    }\n    return attributeMutations;\n}\nexport function sortAddedAndMovedNodes(nodes) {\n    nodes.sort(function (a, b) {\n        var position = a.compareDocumentPosition(b);\n        /* eslint-disable no-bitwise */\n        if (position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n            return -1;\n        }\n        else if (position & Node.DOCUMENT_POSITION_CONTAINS) {\n            return 1;\n        }\n        else if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n            return 1;\n        }\n        else if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n            return -1;\n        }\n        /* eslint-enable no-bitwise */\n        return 0;\n    });\n}\nfunction traverseRemovedShadowDom(removedNode, shadowDomRemovedCallback) {\n    if (isNodeShadowHost(removedNode)) {\n        shadowDomRemovedCallback(removedNode.shadowRoot);\n    }\n    forEachChildNodes(removedNode, function (childNode) { return traverseRemovedShadowDom(childNode, shadowDomRemovedCallback); });\n}\n//# sourceMappingURL=trackMutation.js.map","import { trackInput, trackMutation, trackScroll } from './trackers';\nexport var initShadowRootsController = function (configuration, callback, elementsScrollPositions) {\n    var controllerByShadowRoot = new Map();\n    var shadowRootsController = {\n        addShadowRoot: function (shadowRoot) {\n            if (controllerByShadowRoot.has(shadowRoot)) {\n                return;\n            }\n            var mutationTracker = trackMutation(callback, configuration, shadowRootsController, shadowRoot);\n            // The change event does not bubble up across the shadow root, we have to listen on the shadow root\n            var inputTracker = trackInput(configuration, callback, shadowRoot);\n            // The scroll event does not bubble up across the shadow root, we have to listen on the shadow root\n            var scrollTracker = trackScroll(configuration, callback, elementsScrollPositions, shadowRoot);\n            controllerByShadowRoot.set(shadowRoot, {\n                flush: function () { return mutationTracker.flush(); },\n                stop: function () {\n                    mutationTracker.stop();\n                    inputTracker.stop();\n                    scrollTracker.stop();\n                },\n            });\n        },\n        removeShadowRoot: function (shadowRoot) {\n            var entry = controllerByShadowRoot.get(shadowRoot);\n            if (!entry) {\n                // unidentified root cause: observed in some cases with shadow DOM added by browser extensions\n                return;\n            }\n            entry.stop();\n            controllerByShadowRoot.delete(shadowRoot);\n        },\n        stop: function () {\n            controllerByShadowRoot.forEach(function (_a) {\n                var stop = _a.stop;\n                return stop();\n            });\n        },\n        flush: function () {\n            controllerByShadowRoot.forEach(function (_a) {\n                var flush = _a.flush;\n                return flush();\n            });\n        },\n    };\n    return shadowRootsController;\n};\n//# sourceMappingURL=shadowRootsController.js.map","import { sendToExtension } from '@datadog/browser-core';\nimport * as replayStats from '../replayStats';\nimport { trackFocus, trackFrustration, trackInput, trackMediaInteraction, trackMouseInteraction, trackMove, trackMutation, trackScroll, trackStyleSheet, trackViewEnd, trackViewportResize, trackVisualViewportResize, } from './trackers';\nimport { createElementsScrollPositions } from './elementsScrollPositions';\nimport { initShadowRootsController } from './shadowRootsController';\nimport { startFullSnapshots } from './startFullSnapshots';\nimport { initRecordIds } from './recordIds';\nexport function record(options) {\n    var emit = options.emit, configuration = options.configuration, lifeCycle = options.lifeCycle;\n    // runtime checks for user options\n    if (!emit) {\n        throw new Error('emit function is required');\n    }\n    var emitAndComputeStats = function (record) {\n        emit(record);\n        sendToExtension('record', { record: record });\n        var view = options.viewHistory.findView();\n        replayStats.addRecord(view.id);\n    };\n    var elementsScrollPositions = createElementsScrollPositions();\n    var shadowRootsController = initShadowRootsController(configuration, emitAndComputeStats, elementsScrollPositions);\n    var stopFullSnapshots = startFullSnapshots(elementsScrollPositions, shadowRootsController, lifeCycle, configuration, flushMutations, function (records) { return records.forEach(function (record) { return emitAndComputeStats(record); }); }).stop;\n    function flushMutations() {\n        shadowRootsController.flush();\n        mutationTracker.flush();\n    }\n    var recordIds = initRecordIds();\n    var mutationTracker = trackMutation(emitAndComputeStats, configuration, shadowRootsController, document);\n    var trackers = [\n        mutationTracker,\n        trackMove(configuration, emitAndComputeStats),\n        trackMouseInteraction(configuration, emitAndComputeStats, recordIds),\n        trackScroll(configuration, emitAndComputeStats, elementsScrollPositions, document),\n        trackViewportResize(configuration, emitAndComputeStats),\n        trackInput(configuration, emitAndComputeStats),\n        trackMediaInteraction(configuration, emitAndComputeStats),\n        trackStyleSheet(emitAndComputeStats),\n        trackFocus(configuration, emitAndComputeStats),\n        trackVisualViewportResize(configuration, emitAndComputeStats),\n        trackFrustration(lifeCycle, emitAndComputeStats, recordIds),\n        trackViewEnd(lifeCycle, function (viewEndRecord) {\n            flushMutations();\n            emitAndComputeStats(viewEndRecord);\n        }),\n    ];\n    return {\n        stop: function () {\n            shadowRootsController.stop();\n            trackers.forEach(function (tracker) { return tracker.stop(); });\n            stopFullSnapshots();\n        },\n        flushMutations: flushMutations,\n        shadowRootsController: shadowRootsController,\n    };\n}\n//# sourceMappingURL=record.js.map","export function createElementsScrollPositions() {\n    var scrollPositionsByElement = new WeakMap();\n    return {\n        set: function (element, scrollPositions) {\n            if (element === document && !document.scrollingElement) {\n                // cf https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement,\n                // in some cases scrolling elements can not be defined, we don't support those for now\n                return;\n            }\n            scrollPositionsByElement.set(element === document ? document.scrollingElement : element, scrollPositions);\n        },\n        get: function (element) {\n            return scrollPositionsByElement.get(element);\n        },\n        has: function (element) {\n            return scrollPositionsByElement.has(element);\n        },\n    };\n}\n//# sourceMappingURL=elementsScrollPositions.js.map","import { getScrollX, getScrollY, getViewportDimension } from '@datadog/browser-rum-core';\nimport { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nimport { serializeDocument } from './serialization';\nimport { getVisualViewport } from './viewports';\nexport function startFullSnapshots(elementsScrollPositions, shadowRootsController, lifeCycle, configuration, flushMutations, fullSnapshotCallback) {\n    var takeFullSnapshot = function (timestamp, serializationContext) {\n        if (timestamp === void 0) { timestamp = timeStampNow(); }\n        if (serializationContext === void 0) { serializationContext = {\n            status: 0 /* SerializationContextStatus.INITIAL_FULL_SNAPSHOT */,\n            elementsScrollPositions: elementsScrollPositions,\n            shadowRootsController: shadowRootsController,\n        }; }\n        var _a = getViewportDimension(), width = _a.width, height = _a.height;\n        var records = [\n            {\n                data: {\n                    height: height,\n                    href: window.location.href,\n                    width: width,\n                },\n                type: RecordType.Meta,\n                timestamp: timestamp,\n            },\n            {\n                data: {\n                    has_focus: document.hasFocus(),\n                },\n                type: RecordType.Focus,\n                timestamp: timestamp,\n            },\n            {\n                data: {\n                    node: serializeDocument(document, configuration, serializationContext),\n                    initialOffset: {\n                        left: getScrollX(),\n                        top: getScrollY(),\n                    },\n                },\n                type: RecordType.FullSnapshot,\n                timestamp: timestamp,\n            },\n        ];\n        if (window.visualViewport) {\n            records.push({\n                data: getVisualViewport(window.visualViewport),\n                type: RecordType.VisualViewport,\n                timestamp: timestamp,\n            });\n        }\n        return records;\n    };\n    fullSnapshotCallback(takeFullSnapshot());\n    var unsubscribe = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, function (view) {\n        flushMutations();\n        fullSnapshotCallback(takeFullSnapshot(view.startClocks.timeStamp, {\n            shadowRootsController: shadowRootsController,\n            status: 1 /* SerializationContextStatus.SUBSEQUENT_FULL_SNAPSHOT */,\n            elementsScrollPositions: elementsScrollPositions,\n        }));\n    }).unsubscribe;\n    return {\n        stop: unsubscribe,\n    };\n}\n//# sourceMappingURL=startFullSnapshots.js.map","export function initRecordIds() {\n    var recordIds = new WeakMap();\n    var nextId = 1;\n    return {\n        getIdForEvent: function (event) {\n            if (!recordIds.has(event)) {\n                recordIds.set(event, nextId++);\n            }\n            return recordIds.get(event);\n        },\n    };\n}\n//# sourceMappingURL=recordIds.js.map","import { assign } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nimport * as replayStats from '../replayStats';\nexport function createSegment(_a) {\n    var context = _a.context, creationReason = _a.creationReason, encoder = _a.encoder;\n    var encodedBytesCount = 0;\n    var viewId = context.view.id;\n    var metadata = assign({\n        start: Infinity,\n        end: -Infinity,\n        creation_reason: creationReason,\n        records_count: 0,\n        has_full_snapshot: false,\n        index_in_view: replayStats.getSegmentsCount(viewId),\n        source: 'browser',\n    }, context);\n    replayStats.addSegment(viewId);\n    function addRecord(record, callback) {\n        metadata.start = Math.min(metadata.start, record.timestamp);\n        metadata.end = Math.max(metadata.end, record.timestamp);\n        metadata.records_count += 1;\n        metadata.has_full_snapshot || (metadata.has_full_snapshot = record.type === RecordType.FullSnapshot);\n        var prefix = encoder.isEmpty ? '{\"records\":[' : ',';\n        encoder.write(prefix + JSON.stringify(record), function (additionalEncodedBytesCount) {\n            encodedBytesCount += additionalEncodedBytesCount;\n            callback(encodedBytesCount);\n        });\n    }\n    function flush(callback) {\n        if (encoder.isEmpty) {\n            throw new Error('Empty segment flushed');\n        }\n        encoder.write(\"],\".concat(JSON.stringify(metadata).slice(1), \"\\n\"));\n        encoder.finish(function (encoderResult) {\n            replayStats.addWroteData(metadata.view.id, encoderResult.rawBytesCount);\n            callback(metadata, encoderResult);\n        });\n    }\n    return { addRecord: addRecord, flush: flush };\n}\n//# sourceMappingURL=segment.js.map","import { isPageExitReason, ONE_SECOND, clearTimeout, setTimeout } from '@datadog/browser-core';\nimport { buildReplayPayload } from './buildReplayPayload';\nimport { createSegment } from './segment';\nexport var SEGMENT_DURATION_LIMIT = 5 * ONE_SECOND;\n/**\n * beacon payload max queue size implementation is 64kb\n * ensure that we leave room for logs, rum and potential other users\n */\nexport var SEGMENT_BYTES_LIMIT = 60000;\n// Segments are the main data structure for session replays. They contain context information used\n// for indexing or UI needs, and a list of records (RRWeb 'events', renamed to avoid confusing\n// namings). They are stored without any processing from the intake, and fetched one after the\n// other while a session is being replayed. Their encoding (deflate) are carefully crafted to allow\n// concatenating multiple segments together. Segments have a size overhead (metadata), so our goal is to\n// build segments containing as many records as possible while complying with the various flush\n// strategies to guarantee a good replay quality.\n//\n// When the recording starts, a segment is initially created.  The segment is flushed (finalized and\n// sent) based on various events (non-exhaustive list):\n//\n// * the page visibility change or becomes to unload\n// * the segment duration reaches a limit\n// * the encoded segment bytes count reaches a limit\n// * ...\n//\n// A segment cannot be created without its context.  If the RUM session ends and no session id is\n// available when creating a new segment, records will be ignored, until the session is renewed and\n// a new session id is available.\n//\n// Empty segments (segments with no record) aren't useful and should be ignored.\n//\n// To help investigate session replays issues, each segment is created with a \"creation reason\",\n// indicating why the session has been created.\nexport function startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, httpRequest, encoder) {\n    return doStartSegmentCollection(lifeCycle, function () { return computeSegmentContext(configuration.applicationId, sessionManager, viewHistory); }, httpRequest, encoder);\n}\nexport function doStartSegmentCollection(lifeCycle, getSegmentContext, httpRequest, encoder) {\n    var state = {\n        status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n        nextSegmentCreationReason: 'init',\n    };\n    var unsubscribeViewCreated = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, function () {\n        flushSegment('view_change');\n    }).unsubscribe;\n    var unsubscribePageExited = lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_EXITED */, function (pageExitEvent) {\n        flushSegment(pageExitEvent.reason);\n    }).unsubscribe;\n    function flushSegment(flushReason) {\n        if (state.status === 1 /* SegmentCollectionStatus.SegmentPending */) {\n            state.segment.flush(function (metadata, encoderResult) {\n                var payload = buildReplayPayload(encoderResult.output, metadata, encoderResult.rawBytesCount);\n                if (isPageExitReason(flushReason)) {\n                    httpRequest.sendOnExit(payload);\n                }\n                else {\n                    httpRequest.send(payload);\n                }\n            });\n            clearTimeout(state.expirationTimeoutId);\n        }\n        if (flushReason !== 'stop') {\n            state = {\n                status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n                nextSegmentCreationReason: flushReason,\n            };\n        }\n        else {\n            state = {\n                status: 2 /* SegmentCollectionStatus.Stopped */,\n            };\n        }\n    }\n    return {\n        addRecord: function (record) {\n            if (state.status === 2 /* SegmentCollectionStatus.Stopped */) {\n                return;\n            }\n            if (state.status === 0 /* SegmentCollectionStatus.WaitingForInitialRecord */) {\n                var context = getSegmentContext();\n                if (!context) {\n                    return;\n                }\n                state = {\n                    status: 1 /* SegmentCollectionStatus.SegmentPending */,\n                    segment: createSegment({ encoder: encoder, context: context, creationReason: state.nextSegmentCreationReason }),\n                    expirationTimeoutId: setTimeout(function () {\n                        flushSegment('segment_duration_limit');\n                    }, SEGMENT_DURATION_LIMIT),\n                };\n            }\n            state.segment.addRecord(record, function (encodedBytesCount) {\n                if (encodedBytesCount > SEGMENT_BYTES_LIMIT) {\n                    flushSegment('segment_bytes_limit');\n                }\n            });\n        },\n        stop: function () {\n            flushSegment('stop');\n            unsubscribeViewCreated();\n            unsubscribePageExited();\n        },\n    };\n}\nexport function computeSegmentContext(applicationId, sessionManager, viewHistory) {\n    var session = sessionManager.findTrackedSession();\n    var viewContext = viewHistory.findView();\n    if (!session || !viewContext) {\n        return undefined;\n    }\n    return {\n        application: {\n            id: applicationId,\n        },\n        session: {\n            id: session.id,\n        },\n        view: {\n            id: viewContext.id,\n        },\n    };\n}\nexport function setSegmentBytesLimit(newSegmentBytesLimit) {\n    if (newSegmentBytesLimit === void 0) { newSegmentBytesLimit = 60000; }\n    SEGMENT_BYTES_LIMIT = newSegmentBytesLimit;\n}\n//# sourceMappingURL=segmentCollection.js.map","import { assign } from '@datadog/browser-core';\nexport function buildReplayPayload(data, metadata, rawSegmentBytesCount) {\n    var formData = new FormData();\n    formData.append('segment', new Blob([data], {\n        type: 'application/octet-stream',\n    }), \"\".concat(metadata.session.id, \"-\").concat(metadata.start));\n    var metadataAndSegmentSizes = assign({\n        raw_segment_size: rawSegmentBytesCount,\n        compressed_segment_size: data.byteLength,\n    }, metadata);\n    var serializedMetadataAndSegmentSizes = JSON.stringify(metadataAndSegmentSizes);\n    formData.append('event', new Blob([serializedMetadataAndSegmentSizes], { type: 'application/json' }));\n    return { data: formData, bytesCount: data.byteLength };\n}\n//# sourceMappingURL=buildReplayPayload.js.map","import { addEventListener, addTelemetryDebug, assign, concatBuffers } from '@datadog/browser-core';\nexport function createDeflateEncoder(configuration, worker, streamId) {\n    var rawBytesCount = 0;\n    var compressedData = [];\n    var compressedDataTrailer;\n    var nextWriteActionId = 0;\n    var pendingWriteActions = [];\n    var removeMessageListener = addEventListener(configuration, worker, 'message', function (_a) {\n        var workerResponse = _a.data;\n        if (workerResponse.type !== 'wrote' || workerResponse.streamId !== streamId) {\n            return;\n        }\n        rawBytesCount += workerResponse.additionalBytesCount;\n        compressedData.push(workerResponse.result);\n        compressedDataTrailer = workerResponse.trailer;\n        var nextPendingAction = pendingWriteActions.shift();\n        if (nextPendingAction && nextPendingAction.id === workerResponse.id) {\n            if (nextPendingAction.writeCallback) {\n                nextPendingAction.writeCallback(workerResponse.result.byteLength);\n            }\n            else if (nextPendingAction.finishCallback) {\n                nextPendingAction.finishCallback();\n            }\n        }\n        else {\n            removeMessageListener();\n            addTelemetryDebug('Worker responses received out of order.');\n        }\n    }).stop;\n    function consumeResult() {\n        var output = compressedData.length === 0 ? new Uint8Array(0) : concatBuffers(compressedData.concat(compressedDataTrailer));\n        var result = {\n            rawBytesCount: rawBytesCount,\n            output: output,\n            outputBytesCount: output.byteLength,\n            encoding: 'deflate',\n        };\n        rawBytesCount = 0;\n        compressedData = [];\n        return result;\n    }\n    function sendResetIfNeeded() {\n        if (nextWriteActionId > 0) {\n            worker.postMessage({\n                action: 'reset',\n                streamId: streamId,\n            });\n            nextWriteActionId = 0;\n        }\n    }\n    return {\n        isAsync: true,\n        get isEmpty() {\n            return nextWriteActionId === 0;\n        },\n        write: function (data, callback) {\n            worker.postMessage({\n                action: 'write',\n                id: nextWriteActionId,\n                data: data,\n                streamId: streamId,\n            });\n            pendingWriteActions.push({\n                id: nextWriteActionId,\n                writeCallback: callback,\n                data: data,\n            });\n            nextWriteActionId += 1;\n        },\n        finish: function (callback) {\n            sendResetIfNeeded();\n            if (!pendingWriteActions.length) {\n                callback(consumeResult());\n            }\n            else {\n                // Make sure we do not call any write callback\n                pendingWriteActions.forEach(function (pendingWriteAction) {\n                    delete pendingWriteAction.writeCallback;\n                });\n                // Wait for the last action to finish before calling the finish callback\n                pendingWriteActions[pendingWriteActions.length - 1].finishCallback = function () { return callback(consumeResult()); };\n            }\n        },\n        finishSync: function () {\n            sendResetIfNeeded();\n            var pendingData = pendingWriteActions\n                .map(function (pendingWriteAction) {\n                // Make sure we do not call any write or finish callback\n                delete pendingWriteAction.writeCallback;\n                delete pendingWriteAction.finishCallback;\n                return pendingWriteAction.data;\n            })\n                .join('');\n            return assign(consumeResult(), {\n                pendingData: pendingData,\n            });\n        },\n        estimateEncodedBytesCount: function (data) {\n            // This is a rough estimation of the data size once it'll be encoded by deflate. We observed\n            // that if it's the first chunk of data pushed to the stream, the ratio is lower (3-4), but\n            // after that the ratio is greater (10+). We chose 8 here, which (on average) seems to produce\n            // requests of the expected size.\n            return data.length / 8;\n        },\n        stop: function () {\n            removeMessageListener();\n        },\n    };\n}\n//# sourceMappingURL=deflateEncoder.js.map","import { addTelemetryError, display, includes, addEventListener, setTimeout, ONE_SECOND, DOCS_ORIGIN, } from '@datadog/browser-core';\nexport var INITIALIZATION_TIME_OUT_DELAY = 30 * ONE_SECOND;\nfunction createDeflateWorker(configuration) {\n    return new Worker(configuration.workerUrl || URL.createObjectURL(new Blob([\"!function(){\\\"use strict\\\";function t(t){for(var e=t.reduce((function(t,e){return t+e.length}),0),a=new Uint8Array(e),n=0,r=0,i=t;r<i.length;r++){var s=i[r];a.set(s,n),n+=s.length}return a}function e(t){for(var e=t.length;--e>=0;)t[e]=0}var a=256,n=286,r=30,i=15,s=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),h=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),l=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),_=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),o=new Array(576);e(o);var d=new Array(60);e(d);var u=new Array(512);e(u);var f=new Array(256);e(f);var c=new Array(29);e(c);var p,g,w,v=new Array(r);function b(t,e,a,n,r){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=n,this.max_length=r,this.has_stree=t&&t.length}function m(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}e(v);var y=function(t){return t<256?u[t]:u[256+(t>>>7)]},k=function(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},z=function(t,e,a){t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,k(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},x=function(t,e,a){z(t,a[2*e],a[2*e+1])},A=function(t,e){var a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},U=function(t,e,a){var n,r,s=new Array(16),h=0;for(n=1;n<=i;n++)s[n]=h=h+a[n-1]<<1;for(r=0;r<=e;r++){var l=t[2*r+1];0!==l&&(t[2*r]=A(s[l]++,l))}},I=function(t){var e;for(e=0;e<n;e++)t.dyn_ltree[2*e]=0;for(e=0;e<r;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0},B=function(t){t.bi_valid>8?k(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},E=function(t,e,a,n){var r=2*e,i=2*a;return t[r]<t[i]||t[r]===t[i]&&n[e]<=n[a]},S=function(t,e,a){for(var n=t.heap[a],r=a<<1;r<=t.heap_len&&(r<t.heap_len&&E(e,t.heap[r+1],t.heap[r],t.depth)&&r++,!E(e,n,t.heap[r],t.depth));)t.heap[a]=t.heap[r],a=r,r<<=1;t.heap[a]=n},C=function(t,e,n){var r,i,l,_,o=0;if(0!==t.last_lit)do{r=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],i=t.pending_buf[t.l_buf+o],o++,0===r?x(t,i,e):(l=f[i],x(t,l+a+1,e),0!==(_=s[l])&&(i-=c[l],z(t,i,_)),r--,l=y(r),x(t,l,n),0!==(_=h[l])&&(r-=v[l],z(t,r,_)))}while(o<t.last_lit);x(t,256,e)},D=function(t,e){var a,n,r,s=e.dyn_tree,h=e.stat_desc.static_tree,l=e.stat_desc.has_stree,_=e.stat_desc.elems,o=-1;for(t.heap_len=0,t.heap_max=573,a=0;a<_;a++)0!==s[2*a]?(t.heap[++t.heap_len]=o=a,t.depth[a]=0):s[2*a+1]=0;for(;t.heap_len<2;)s[2*(r=t.heap[++t.heap_len]=o<2?++o:0)]=1,t.depth[r]=0,t.opt_len--,l&&(t.static_len-=h[2*r+1]);for(e.max_code=o,a=t.heap_len>>1;a>=1;a--)S(t,s,a);r=_;do{a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],S(t,s,1),n=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=n,s[2*r]=s[2*a]+s[2*n],t.depth[r]=(t.depth[a]>=t.depth[n]?t.depth[a]:t.depth[n])+1,s[2*a+1]=s[2*n+1]=r,t.heap[1]=r++,S(t,s,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var a,n,r,s,h,l,_=e.dyn_tree,o=e.max_code,d=e.stat_desc.static_tree,u=e.stat_desc.has_stree,f=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,g=0;for(s=0;s<=i;s++)t.bl_count[s]=0;for(_[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;a<573;a++)(s=_[2*_[2*(n=t.heap[a])+1]+1]+1)>p&&(s=p,g++),_[2*n+1]=s,n>o||(t.bl_count[s]++,h=0,n>=c&&(h=f[n-c]),l=_[2*n],t.opt_len+=l*(s+h),u&&(t.static_len+=l*(d[2*n+1]+h)));if(0!==g){do{for(s=p-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[p]--,g-=2}while(g>0);for(s=p;0!==s;s--)for(n=t.bl_count[s];0!==n;)(r=t.heap[--a])>o||(_[2*r+1]!==s&&(t.opt_len+=(s-_[2*r+1])*_[2*r],_[2*r+1]=s),n--)}}(t,e),U(s,o,t.bl_count)},j=function(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,_=4;for(0===s&&(l=138,_=3),e[2*(a+1)+1]=65535,n=0;n<=a;n++)r=s,s=e[2*(n+1)+1],++h<l&&r===s||(h<_?t.bl_tree[2*r]+=h:0!==r?(r!==i&&t.bl_tree[2*r]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,i=r,0===s?(l=138,_=3):r===s?(l=6,_=3):(l=7,_=4))},M=function(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,_=4;for(0===s&&(l=138,_=3),n=0;n<=a;n++)if(r=s,s=e[2*(n+1)+1],!(++h<l&&r===s)){if(h<_)do{x(t,r,t.bl_tree)}while(0!=--h);else 0!==r?(r!==i&&(x(t,r,t.bl_tree),h--),x(t,16,t.bl_tree),z(t,h-3,2)):h<=10?(x(t,17,t.bl_tree),z(t,h-3,3)):(x(t,18,t.bl_tree),z(t,h-11,7));h=0,i=r,0===s?(l=138,_=3):r===s?(l=6,_=3):(l=7,_=4)}},L=!1,T=function(t,e,a,n){z(t,0+(n?1:0),3),function(t,e,a,n){B(t),n&&(k(t,a),k(t,~a)),t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a}(t,e,a,!0)},H=function(t,e,n,r){var i,s,h=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,n=4093624447;for(e=0;e<=31;e++,n>>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<a;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0}(t)),D(t,t.l_desc),D(t,t.d_desc),h=function(t){var e;for(j(t,t.dyn_ltree,t.l_desc.max_code),j(t,t.dyn_dtree,t.d_desc.max_code),D(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*_[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),i=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=i&&(i=s)):i=s=n+5,n+4<=i&&-1!==e?T(t,e,n,r):4===t.strategy||s===i?(z(t,2+(r?1:0),3),C(t,o,d)):(z(t,4+(r?1:0),3),function(t,e,a,n){var r;for(z(t,e-257,5),z(t,a-1,5),z(t,n-4,4),r=0;r<n;r++)z(t,t.bl_tree[2*_[r]+1],3);M(t,t.dyn_ltree,e-1),M(t,t.dyn_dtree,a-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,h+1),C(t,t.dyn_ltree,t.dyn_dtree)),I(t),r&&B(t)},R={_tr_init:function(t){L||(!function(){var t,e,a,_,m,y=new Array(16);for(a=0,_=0;_<28;_++)for(c[_]=a,t=0;t<1<<s[_];t++)f[a++]=_;for(f[a-1]=_,m=0,_=0;_<16;_++)for(v[_]=m,t=0;t<1<<h[_];t++)u[m++]=_;for(m>>=7;_<r;_++)for(v[_]=m<<7,t=0;t<1<<h[_]-7;t++)u[256+m++]=_;for(e=0;e<=i;e++)y[e]=0;for(t=0;t<=143;)o[2*t+1]=8,t++,y[8]++;for(;t<=255;)o[2*t+1]=9,t++,y[9]++;for(;t<=279;)o[2*t+1]=7,t++,y[7]++;for(;t<=287;)o[2*t+1]=8,t++,y[8]++;for(U(o,287,y),t=0;t<r;t++)d[2*t+1]=5,d[2*t]=A(t,5);p=new b(o,s,257,n,i),g=new b(d,h,0,r,i),w=new b(new Array(0),l,0,19,7)}(),L=!0),t.l_desc=new m(t.dyn_ltree,p),t.d_desc=new m(t.dyn_dtree,g),t.bl_desc=new m(t.bl_tree,w),t.bi_buf=0,t.bi_valid=0,I(t)},_tr_stored_block:T,_tr_flush_block:H,_tr_tally:function(t,e,n){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&n,t.last_lit++,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(f[n]+a+1)]++,t.dyn_dtree[2*y(e)]++),t.last_lit===t.lit_bufsize-1},_tr_align:function(t){z(t,2,3),x(t,256,o),function(t){16===t.bi_valid?(k(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},K=function(t,e,a,n){for(var r=65535&t,i=t>>>16&65535,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{i=i+(r=r+e[n++]|0)|0}while(--s);r%=65521,i%=65521}return r|i<<16},N=new Uint32Array(function(){for(var t,e=[],a=0;a<256;a++){t=a;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}()),O=function(t,e,a,n){var r=N,i=n+a;t^=-1;for(var s=n;s<i;s++)t=t>>>8^r[255&(t^e[s])];return~t},q={2:\\\"need dictionary\\\",1:\\\"stream end\\\",0:\\\"\\\",\\\"-1\\\":\\\"file error\\\",\\\"-2\\\":\\\"stream error\\\",\\\"-3\\\":\\\"data error\\\",\\\"-4\\\":\\\"insufficient memory\\\",\\\"-5\\\":\\\"buffer error\\\",\\\"-6\\\":\\\"incompatible version\\\"},F=0,G=2,J=3,P=4,Q=0,V=1,W=-1,X=0,Y=8,Z=R._tr_init,$=R._tr_stored_block,tt=R._tr_flush_block,et=R._tr_tally,at=R._tr_align,nt=F,rt=1,it=J,st=P,ht=5,lt=Q,_t=V,ot=-2,dt=-3,ut=-5,ft=W,ct=1,pt=2,gt=3,wt=4,vt=X,bt=2,mt=Y,yt=258,kt=262,zt=103,xt=113,At=666,Ut=function(t,e){return t.msg=q[e],e},It=function(t){return(t<<1)-(t>4?9:0)},Bt=function(t){for(var e=t.length;--e>=0;)t[e]=0},Et=function(t,e,a){return(e<<t.hash_shift^a)&t.hash_mask},St=function(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},Ct=function(t,e){tt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,St(t.strm)},Dt=function(t,e){t.pending_buf[t.pending++]=e},jt=function(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Mt=function(t,e){var a,n,r=t.max_chain_length,i=t.strstart,s=t.prev_length,h=t.nice_match,l=t.strstart>t.w_size-kt?t.strstart-(t.w_size-kt):0,_=t.window,o=t.w_mask,d=t.prev,u=t.strstart+yt,f=_[i+s-1],c=_[i+s];t.prev_length>=t.good_match&&(r>>=2),h>t.lookahead&&(h=t.lookahead);do{if(_[(a=e)+s]===c&&_[a+s-1]===f&&_[a]===_[i]&&_[++a]===_[i+1]){i+=2,a++;do{}while(_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&_[++i]===_[++a]&&i<u);if(n=yt-(u-i),i=u-yt,n>s){if(t.match_start=e,s=n,n>=h)break;f=_[i+s-1],c=_[i+s]}}}while((e=d[e&o])>l&&0!=--r);return s<=t.lookahead?s:t.lookahead},Lt=function(t){var e,a,n,r,i,s,h,l,_,o,d=t.w_size;do{if(r=t.window_size-t.lookahead-t.strstart,t.strstart>=d+(d-kt)){t.window.set(t.window.subarray(d,d+d),0),t.match_start-=d,t.strstart-=d,t.block_start-=d,e=a=t.hash_size;do{n=t.head[--e],t.head[e]=n>=d?n-d:0}while(--a);e=a=d;do{n=t.prev[--e],t.prev[e]=n>=d?n-d:0}while(--a);r+=d}if(0===t.strm.avail_in)break;if(s=t.strm,h=t.window,l=t.strstart+t.lookahead,_=r,o=void 0,(o=s.avail_in)>_&&(o=_),a=0===o?0:(s.avail_in-=o,h.set(s.input.subarray(s.next_in,s.next_in+o),l),1===s.state.wrap?s.adler=K(s.adler,h,o,l):2===s.state.wrap&&(s.adler=O(s.adler,h,o,l)),s.next_in+=o,s.total_in+=o,o),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Et(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Et(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<kt&&0!==t.strm.avail_in)},Tt=function(t,e){for(var a,n;;){if(t.lookahead<kt){if(Lt(t),t.lookahead<kt&&e===nt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-kt&&(t.match_length=Mt(t,a)),t.match_length>=3)if(n=et(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Et(t,t.ins_h,t.window[t.strstart+1]);else n=et(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2},Ht=function(t,e){for(var a,n,r;;){if(t.lookahead<kt){if(Lt(t),t.lookahead<kt&&e===nt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-kt&&(t.match_length=Mt(t,a),t.match_length<=5&&(t.strategy===ct||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,n=et(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=r&&(t.ins_h=Et(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,n&&(Ct(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if((n=et(t,0,t.window[t.strstart-1]))&&Ct(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=et(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2};function Rt(t,e,a,n,r){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=n,this.func=r}var Kt=[new Rt(0,0,0,0,(function(t,e){var a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(Lt(t),0===t.lookahead&&e===nt)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+a;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,Ct(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-kt&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(Ct(t,!1),t.strm.avail_out),1)})),new Rt(4,4,8,4,Tt),new Rt(4,5,16,8,Tt),new Rt(4,6,32,32,Tt),new Rt(4,4,16,16,Ht),new Rt(8,16,32,32,Ht),new Rt(8,16,128,128,Ht),new Rt(8,32,128,256,Ht),new Rt(32,128,258,1024,Ht),new Rt(32,258,258,4096,Ht)];function Nt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=mt,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Bt(this.dyn_ltree),Bt(this.dyn_dtree),Bt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Bt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Bt(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var Ot=function(t){if(!t||!t.state)return Ut(t,ot);t.total_in=t.total_out=0,t.data_type=bt;var e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?42:xt,t.adler=2===e.wrap?0:1,e.last_flush=nt,Z(e),lt},qt=function(t){var e,a=Ot(t);return a===lt&&((e=t.state).window_size=2*e.w_size,Bt(e.head),e.max_lazy_match=Kt[e.level].max_lazy,e.good_match=Kt[e.level].good_length,e.nice_match=Kt[e.level].nice_length,e.max_chain_length=Kt[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0),a},Ft=function(t,e,a,n,r,i){if(!t)return ot;var s=1;if(e===ft&&(e=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),r<1||r>9||a!==mt||n<8||n>15||e<0||e>9||i<0||i>wt)return Ut(t,ot);8===n&&(n=9);var h=new Nt;return t.state=h,h.strm=t,h.wrap=s,h.gzhead=null,h.w_bits=n,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=r+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<r+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.d_buf=1*h.lit_bufsize,h.l_buf=3*h.lit_bufsize,h.level=e,h.strategy=i,h.method=a,qt(t)},Gt={deflateInit:function(t,e){return Ft(t,e,mt,15,8,vt)},deflateInit2:Ft,deflateReset:qt,deflateResetKeep:Ot,deflateSetHeader:function(t,e){return t&&t.state?2!==t.state.wrap?ot:(t.state.gzhead=e,lt):ot},deflate:function(t,e){var a,n;if(!t||!t.state||e>ht||e<0)return t?Ut(t,ot):ot;var r=t.state;if(!t.output||!t.input&&0!==t.avail_in||r.status===At&&e!==st)return Ut(t,0===t.avail_out?ut:ot);r.strm=t;var i=r.last_flush;if(r.last_flush=e,42===r.status)if(2===r.wrap)t.adler=0,Dt(r,31),Dt(r,139),Dt(r,8),r.gzhead?(Dt(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Dt(r,255&r.gzhead.time),Dt(r,r.gzhead.time>>8&255),Dt(r,r.gzhead.time>>16&255),Dt(r,r.gzhead.time>>24&255),Dt(r,9===r.level?2:r.strategy>=pt||r.level<2?4:0),Dt(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(Dt(r,255&r.gzhead.extra.length),Dt(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=O(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(Dt(r,0),Dt(r,0),Dt(r,0),Dt(r,0),Dt(r,0),Dt(r,9===r.level?2:r.strategy>=pt||r.level<2?4:0),Dt(r,3),r.status=xt);else{var s=mt+(r.w_bits-8<<4)<<8;s|=(r.strategy>=pt||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(s|=32),s+=31-s%31,r.status=xt,jt(r,s),0!==r.strstart&&(jt(r,t.adler>>>16),jt(r,65535&t.adler)),t.adler=1}if(69===r.status)if(r.gzhead.extra){for(a=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),St(t),a=r.pending,r.pending!==r.pending_buf_size));)Dt(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),St(t),a=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindex<r.gzhead.name.length?255&r.gzhead.name.charCodeAt(r.gzindex++):0,Dt(r,n)}while(0!==n);r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),0===n&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),St(t),a=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindex<r.gzhead.comment.length?255&r.gzhead.comment.charCodeAt(r.gzindex++):0,Dt(r,n)}while(0!==n);r.gzhead.hcrc&&r.pending>a&&(t.adler=O(t.adler,r.pending_buf,r.pending-a,a)),0===n&&(r.status=zt)}else r.status=zt;if(r.status===zt&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&St(t),r.pending+2<=r.pending_buf_size&&(Dt(r,255&t.adler),Dt(r,t.adler>>8&255),t.adler=0,r.status=xt)):r.status=xt),0!==r.pending){if(St(t),0===t.avail_out)return r.last_flush=-1,lt}else if(0===t.avail_in&&It(e)<=It(i)&&e!==st)return Ut(t,ut);if(r.status===At&&0!==t.avail_in)return Ut(t,ut);if(0!==t.avail_in||0!==r.lookahead||e!==nt&&r.status!==At){var h=r.strategy===pt?function(t,e){for(var a;;){if(0===t.lookahead&&(Lt(t),0===t.lookahead)){if(e===nt)return 1;break}if(t.match_length=0,a=et(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2}(r,e):r.strategy===gt?function(t,e){for(var a,n,r,i,s=t.window;;){if(t.lookahead<=yt){if(Lt(t),t.lookahead<=yt&&e===nt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=s[r=t.strstart-1])===s[++r]&&n===s[++r]&&n===s[++r]){i=t.strstart+yt;do{}while(n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&r<i);t.match_length=yt-(i-r),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=et(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=et(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(Ct(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===st?(Ct(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(Ct(t,!1),0===t.strm.avail_out)?1:2}(r,e):Kt[r.level].func(r,e);if(3!==h&&4!==h||(r.status=At),1===h||3===h)return 0===t.avail_out&&(r.last_flush=-1),lt;if(2===h&&(e===rt?at(r):e!==ht&&($(r,0,0,!1),e===it&&(Bt(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),St(t),0===t.avail_out))return r.last_flush=-1,lt}return e!==st?lt:r.wrap<=0?_t:(2===r.wrap?(Dt(r,255&t.adler),Dt(r,t.adler>>8&255),Dt(r,t.adler>>16&255),Dt(r,t.adler>>24&255),Dt(r,255&t.total_in),Dt(r,t.total_in>>8&255),Dt(r,t.total_in>>16&255),Dt(r,t.total_in>>24&255)):(jt(r,t.adler>>>16),jt(r,65535&t.adler)),St(t),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?lt:_t)},deflateEnd:function(t){if(!t||!t.state)return ot;var e=t.state.status;return 42!==e&&69!==e&&73!==e&&91!==e&&e!==zt&&e!==xt&&e!==At?Ut(t,ot):(t.state=null,e===xt?Ut(t,dt):lt)},deflateSetDictionary:function(t,e){var a=e.length;if(!t||!t.state)return ot;var n=t.state,r=n.wrap;if(2===r||1===r&&42!==n.status||n.lookahead)return ot;if(1===r&&(t.adler=K(t.adler,e,a,0)),n.wrap=0,a>=n.w_size){0===r&&(Bt(n.head),n.strstart=0,n.block_start=0,n.insert=0);var i=new Uint8Array(n.w_size);i.set(e.subarray(a-n.w_size,a),0),e=i,a=n.w_size}var s=t.avail_in,h=t.next_in,l=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Lt(n);n.lookahead>=3;){var _=n.strstart,o=n.lookahead-2;do{n.ins_h=Et(n,n.ins_h,n.window[_+3-1]),n.prev[_&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=_,_++}while(--o);n.strstart=_,n.lookahead=2,Lt(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,t.next_in=h,t.input=l,t.avail_in=s,n.wrap=r,lt},deflateInfo:\\\"pako deflate (from Nodeca project)\\\"};for(var Jt=new Uint8Array(256),Pt=0;Pt<256;Pt++)Jt[Pt]=Pt>=252?6:Pt>=248?5:Pt>=240?4:Pt>=224?3:Pt>=192?2:1;Jt[254]=Jt[254]=1;var Qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\\\"\\\",this.state=null,this.data_type=2,this.adler=0},Vt=Object.prototype.toString,Wt=F,Xt=G,Yt=J,Zt=P,$t=Q,te=V,ee=W,ae=X,ne=Y;function re(){this.options={level:ee,method:ne,chunkSize:16384,windowBits:15,memLevel:8,strategy:ae};var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\\\"\\\",this.ended=!1,this.chunks=[],this.strm=new Qt,this.strm.avail_out=0;var e=Gt.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(e!==$t)throw new Error(q[e]);if(t.header&&Gt.deflateSetHeader(this.strm,t.header),t.dictionary){var a;if(a=\\\"[object ArrayBuffer]\\\"===Vt.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(e=Gt.deflateSetDictionary(this.strm,a))!==$t)throw new Error(q[e]);this._dict_set=!0}}function ie(t,e,a){try{t.postMessage({type:\\\"errored\\\",error:e,streamId:a})}catch(n){t.postMessage({type:\\\"errored\\\",error:String(e),streamId:a})}}function se(t){var e=t.strm.adler;return new Uint8Array([3,0,e>>>24&255,e>>>16&255,e>>>8&255,255&e])}re.prototype.push=function(t,e){var a,n,r=this.strm,i=this.options.chunkSize;if(this.ended)return!1;for(n=e===~~e?e:!0===e?Zt:Wt,\\\"[object ArrayBuffer]\\\"===Vt.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;)if(0===r.avail_out&&(r.output=new Uint8Array(i),r.next_out=0,r.avail_out=i),(n===Xt||n===Yt)&&r.avail_out<=6)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else{if((a=Gt.deflate(r,n))===te)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),a=Gt.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===$t;if(0!==r.avail_out){if(n>0&&r.next_out>0)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else if(0===r.avail_in)break}else this.onData(r.output)}return!0},re.prototype.onData=function(t){this.chunks.push(t)},re.prototype.onEnd=function(t){t===$t&&(this.result=function(t){for(var e=0,a=0,n=t.length;a<n;a++)e+=t[a].length;for(var r=new Uint8Array(e),i=0,s=0,h=t.length;i<h;i++){var l=t[i];r.set(l,s),s+=l.length}return r}(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},function(e){void 0===e&&(e=self);try{var a=new Map;e.addEventListener(\\\"message\\\",(function(n){try{var r=function(e,a){switch(a.action){case\\\"init\\\":return{type:\\\"initialized\\\",version:\\\"5.35.1\\\"};case\\\"write\\\":var n=e.get(a.streamId);n||(n=new re,e.set(a.streamId,n));var r=n.chunks.length,i=function(t){if(\\\"function\\\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);var e,a,n,r,i,s=t.length,h=0;for(r=0;r<s;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<s&&56320==(64512&(n=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(n-56320),r++),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),i=0,r=0;i<h;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<s&&56320==(64512&(n=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(n-56320),r++),a<128?e[i++]=a:a<2048?(e[i++]=192|a>>>6,e[i++]=128|63&a):a<65536?(e[i++]=224|a>>>12,e[i++]=128|a>>>6&63,e[i++]=128|63&a):(e[i++]=240|a>>>18,e[i++]=128|a>>>12&63,e[i++]=128|a>>>6&63,e[i++]=128|63&a);return e}(a.data);return n.push(i,G),{type:\\\"wrote\\\",id:a.id,streamId:a.streamId,result:t(n.chunks.slice(r)),trailer:se(n),additionalBytesCount:i.length};case\\\"reset\\\":e.delete(a.streamId)}}(a,n.data);r&&e.postMessage(r)}catch(t){ie(e,t,n.data&&\\\"streamId\\\"in n.data?n.data.streamId:void 0)}}))}catch(t){ie(e,t)}}()}();\"])));\n}\nvar state = { status: 0 /* DeflateWorkerStatus.Nil */ };\nexport function startDeflateWorker(configuration, source, onInitializationFailure, createDeflateWorkerImpl) {\n    if (createDeflateWorkerImpl === void 0) { createDeflateWorkerImpl = createDeflateWorker; }\n    if (state.status === 0 /* DeflateWorkerStatus.Nil */) {\n        // doStartDeflateWorker updates the state to \"loading\" or \"error\"\n        doStartDeflateWorker(configuration, source, createDeflateWorkerImpl);\n    }\n    switch (state.status) {\n        case 1 /* DeflateWorkerStatus.Loading */:\n            state.initializationFailureCallbacks.push(onInitializationFailure);\n            return state.worker;\n        case 3 /* DeflateWorkerStatus.Initialized */:\n            return state.worker;\n    }\n}\nexport function resetDeflateWorkerState() {\n    if (state.status === 3 /* DeflateWorkerStatus.Initialized */ || state.status === 1 /* DeflateWorkerStatus.Loading */) {\n        state.stop();\n    }\n    state = { status: 0 /* DeflateWorkerStatus.Nil */ };\n}\nexport function getDeflateWorkerStatus() {\n    return state.status;\n}\n/**\n * Starts the deflate worker and handle messages and errors\n *\n * The spec allow browsers to handle worker errors differently:\n * - Chromium throws an exception\n * - Firefox fires an error event\n *\n * more details: https://bugzilla.mozilla.org/show_bug.cgi?id=1736865#c2\n */\nexport function doStartDeflateWorker(configuration, source, createDeflateWorkerImpl) {\n    if (createDeflateWorkerImpl === void 0) { createDeflateWorkerImpl = createDeflateWorker; }\n    try {\n        var worker = createDeflateWorkerImpl(configuration);\n        var removeErrorListener_1 = addEventListener(configuration, worker, 'error', function (error) {\n            onError(configuration, source, error);\n        }).stop;\n        var removeMessageListener_1 = addEventListener(configuration, worker, 'message', function (_a) {\n            var data = _a.data;\n            if (data.type === 'errored') {\n                onError(configuration, source, data.error, data.streamId);\n            }\n            else if (data.type === 'initialized') {\n                onInitialized(data.version);\n            }\n        }).stop;\n        worker.postMessage({ action: 'init' });\n        setTimeout(function () { return onTimeout(source); }, INITIALIZATION_TIME_OUT_DELAY);\n        var stop_1 = function () {\n            removeErrorListener_1();\n            removeMessageListener_1();\n        };\n        state = { status: 1 /* DeflateWorkerStatus.Loading */, worker: worker, stop: stop_1, initializationFailureCallbacks: [] };\n    }\n    catch (error) {\n        onError(configuration, source, error);\n    }\n}\nfunction onTimeout(source) {\n    if (state.status === 1 /* DeflateWorkerStatus.Loading */) {\n        display.error(\"\".concat(source, \" failed to start: a timeout occurred while initializing the Worker\"));\n        state.initializationFailureCallbacks.forEach(function (callback) { return callback(); });\n        state = { status: 2 /* DeflateWorkerStatus.Error */ };\n    }\n}\nfunction onInitialized(version) {\n    if (state.status === 1 /* DeflateWorkerStatus.Loading */) {\n        state = { status: 3 /* DeflateWorkerStatus.Initialized */, worker: state.worker, stop: state.stop, version: version };\n    }\n}\nfunction onError(configuration, source, error, streamId) {\n    if (state.status === 1 /* DeflateWorkerStatus.Loading */ || state.status === 0 /* DeflateWorkerStatus.Nil */) {\n        display.error(\"\".concat(source, \" failed to start: an error occurred while creating the Worker:\"), error);\n        if (error instanceof Event || (error instanceof Error && isMessageCspRelated(error.message))) {\n            var baseMessage = void 0;\n            if (configuration.workerUrl) {\n                baseMessage = \"Please make sure the Worker URL \".concat(configuration.workerUrl, \" is correct and CSP is correctly configured.\");\n            }\n            else {\n                baseMessage = 'Please make sure CSP is correctly configured.';\n            }\n            display.error(\"\".concat(baseMessage, \" See documentation at \").concat(DOCS_ORIGIN, \"/integrations/content_security_policy_logs/#use-csp-with-real-user-monitoring-and-session-replay\"));\n        }\n        else {\n            addTelemetryError(error);\n        }\n        if (state.status === 1 /* DeflateWorkerStatus.Loading */) {\n            state.initializationFailureCallbacks.forEach(function (callback) { return callback(); });\n        }\n        state = { status: 2 /* DeflateWorkerStatus.Error */ };\n    }\n    else {\n        addTelemetryError(error, {\n            worker_version: state.status === 3 /* DeflateWorkerStatus.Initialized */ && state.version,\n            stream_id: streamId,\n        });\n    }\n}\nfunction isMessageCspRelated(message) {\n    return (includes(message, 'Content Security Policy') ||\n        // Related to `require-trusted-types-for` CSP: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for\n        includes(message, \"requires 'TrustedScriptURL'\"));\n}\n//# sourceMappingURL=deflateWorker.js.map","/**\n * Test for Browser features used while recording\n */\nexport function isBrowserSupported() {\n    return (\n    // Array.from is a bit less supported by browsers than CSSSupportsRule, but has higher chances\n    // to be polyfilled. Test for both to be more confident. We could add more things if we find out\n    // this test is not sufficient.\n    typeof Array.from === 'function' &&\n        typeof CSSSupportsRule === 'function' &&\n        typeof URL.createObjectURL === 'function' &&\n        'forEach' in NodeList.prototype);\n}\n//# sourceMappingURL=isBrowserSupported.js.map","import { getSessionReplayUrl } from '@datadog/browser-rum-core';\nimport { isBrowserSupported } from '../boot/isBrowserSupported';\nexport function getSessionReplayLink(configuration, sessionManager, viewHistory, isRecordingStarted) {\n    var session = sessionManager.findTrackedSession();\n    var errorType = getErrorType(session, isRecordingStarted);\n    var viewContext = viewHistory.findView();\n    return getSessionReplayUrl(configuration, {\n        viewContext: viewContext,\n        errorType: errorType,\n        session: session,\n    });\n}\nfunction getErrorType(session, isRecordingStarted) {\n    if (!isBrowserSupported()) {\n        return 'browser-not-supported';\n    }\n    if (!session) {\n        // possibilities:\n        // - rum sampled out\n        // - session expired (edge case)\n        return 'rum-not-tracked';\n    }\n    if (session.sessionReplay === 0 /* SessionReplayState.OFF */) {\n        // possibilities\n        // - replay sampled out\n        return 'incorrect-session-plan';\n    }\n    if (!isRecordingStarted) {\n        return 'replay-not-started';\n    }\n}\n//# sourceMappingURL=getSessionReplayLink.js.map","import { PageExitReason, runOnReadyState } from '@datadog/browser-core';\nimport { getSessionReplayLink } from '../domain/getSessionReplayLink';\nexport function createPostStartStrategy(configuration, lifeCycle, sessionManager, viewHistory, startRecordingImpl, getOrCreateDeflateEncoder) {\n    var status = 0 /* RecorderStatus.Stopped */;\n    lifeCycle.subscribe(9 /* LifeCycleEventType.SESSION_EXPIRED */, function () {\n        if (status === 2 /* RecorderStatus.Starting */ || status === 3 /* RecorderStatus.Started */) {\n            stop();\n            status = 1 /* RecorderStatus.IntentToStart */;\n        }\n    });\n    // Stop the recorder on page unload to avoid sending records after the page is ended.\n    lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_EXITED */, function (pageExitEvent) {\n        if (pageExitEvent.reason === PageExitReason.UNLOADING) {\n            stop();\n        }\n    });\n    lifeCycle.subscribe(10 /* LifeCycleEventType.SESSION_RENEWED */, function () {\n        if (status === 1 /* RecorderStatus.IntentToStart */) {\n            start();\n        }\n    });\n    function start(options) {\n        var session = sessionManager.findTrackedSession();\n        if (canStartRecording(session, options)) {\n            status = 1 /* RecorderStatus.IntentToStart */;\n            return;\n        }\n        if (isRecordingInProgress(status)) {\n            return;\n        }\n        status = 2 /* RecorderStatus.Starting */;\n        runOnReadyState(configuration, 'interactive', function () {\n            if (status !== 2 /* RecorderStatus.Starting */) {\n                return;\n            }\n            var deflateEncoder = getOrCreateDeflateEncoder();\n            if (!deflateEncoder) {\n                status = 0 /* RecorderStatus.Stopped */;\n                return;\n            }\n            ;\n            (stopRecording = startRecordingImpl(lifeCycle, configuration, sessionManager, viewHistory, deflateEncoder).stop);\n            status = 3 /* RecorderStatus.Started */;\n        });\n        if (shouldForceReplay(session, options)) {\n            sessionManager.setForcedReplay();\n        }\n    }\n    function stop() {\n        if (status !== 0 /* RecorderStatus.Stopped */ && status === 3 /* RecorderStatus.Started */) {\n            stopRecording === null || stopRecording === void 0 ? void 0 : stopRecording();\n        }\n        status = 0 /* RecorderStatus.Stopped */;\n    }\n    var stopRecording;\n    return {\n        start: start,\n        stop: stop,\n        getSessionReplayLink: function () {\n            return getSessionReplayLink(configuration, sessionManager, viewHistory, status !== 0 /* RecorderStatus.Stopped */);\n        },\n        isRecording: function () { return status === 3 /* RecorderStatus.Started */; },\n    };\n}\nfunction canStartRecording(session, options) {\n    return !session || (session.sessionReplay === 0 /* SessionReplayState.OFF */ && (!options || !options.force));\n}\nfunction isRecordingInProgress(status) {\n    return status === 2 /* RecorderStatus.Starting */ || status === 3 /* RecorderStatus.Started */;\n}\nfunction shouldForceReplay(session, options) {\n    return options && options.force && session.sessionReplay === 0 /* SessionReplayState.OFF */;\n}\n//# sourceMappingURL=postStartStrategy.js.map","// Keep the following in sync with packages/rum-slim/src/entries/main.ts\nimport { defineGlobal, getGlobalObject } from '@datadog/browser-core';\nimport { makeRumPublicApi, startRum } from '@datadog/browser-rum-core';\nimport { startRecording } from '../boot/startRecording';\nimport { makeRecorderApi } from '../boot/recorderApi';\nimport { createDeflateEncoder, startDeflateWorker } from '../domain/deflate';\nexport { DefaultPrivacyLevel } from '@datadog/browser-core';\nvar recorderApi = makeRecorderApi(startRecording);\nexport var datadogRum = makeRumPublicApi(startRum, recorderApi, { startDeflateWorker: startDeflateWorker, createDeflateEncoder: createDeflateEncoder });\ndefineGlobal(getGlobalObject(), 'DD_RUM', datadogRum);\n//# sourceMappingURL=main.js.map","import { catchUserErrors } from '../tools/catchUserErrors';\nimport { setDebugMode } from '../tools/monitor';\nimport { assign } from '../tools/utils/polyfills';\nimport { display } from '../tools/display';\nexport function makePublicApi(stub) {\n    var publicApi = assign({\n        version: \"5.35.1\",\n        // This API method is intentionally not monitored, since the only thing executed is the\n        // user-provided 'callback'.  All SDK usages executed in the callback should be monitored, and\n        // we don't want to interfere with the user uncaught exceptions.\n        onReady: function (callback) {\n            callback();\n        },\n    }, stub);\n    // Add a \"hidden\" property to set debug mode. We define it that way to hide it\n    // as much as possible but of course it's not a real protection.\n    Object.defineProperty(publicApi, '_setDebug', {\n        get: function () {\n            return setDebugMode;\n        },\n        enumerable: false,\n    });\n    return publicApi;\n}\nexport function defineGlobal(global, name, api) {\n    var existingGlobalVariable = global[name];\n    if (existingGlobalVariable && !existingGlobalVariable.q && existingGlobalVariable.version) {\n        display.warn('SDK is loaded more than once. This is unsupported and might have unexpected behavior.');\n    }\n    global[name] = api;\n    if (existingGlobalVariable && existingGlobalVariable.q) {\n        existingGlobalVariable.q.forEach(function (fn) { return catchUserErrors(fn, 'onReady callback threw an error:')(); });\n    }\n}\n//# sourceMappingURL=init.js.map","import { canUseEventBridge, noop, bridgeSupports, } from '@datadog/browser-core';\nimport { getReplayStats as getReplayStatsImpl } from '../domain/replayStats';\nimport { createDeflateEncoder, getDeflateWorkerStatus, startDeflateWorker, } from '../domain/deflate';\nimport { isBrowserSupported } from './isBrowserSupported';\nimport { createPostStartStrategy } from './postStartStrategy';\nimport { createPreStartStrategy } from './preStartStrategy';\nexport function makeRecorderApi(startRecordingImpl, createDeflateWorkerImpl) {\n    if ((canUseEventBridge() && !bridgeSupports(\"records\" /* BridgeCapability.RECORDS */)) || !isBrowserSupported()) {\n        return {\n            start: noop,\n            stop: noop,\n            getReplayStats: function () { return undefined; },\n            onRumStart: noop,\n            isRecording: function () { return false; },\n            getSessionReplayLink: function () { return undefined; },\n        };\n    }\n    // eslint-disable-next-line prefer-const\n    var _a = createPreStartStrategy(), strategy = _a.strategy, shouldStartImmediately = _a.shouldStartImmediately;\n    return {\n        start: function (options) { return strategy.start(options); },\n        stop: function () { return strategy.stop(); },\n        getSessionReplayLink: function () { return strategy.getSessionReplayLink(); },\n        onRumStart: onRumStart,\n        isRecording: function () {\n            // The worker is started optimistically, meaning we could have started to record but its\n            // initialization fails a bit later. This could happen when:\n            // * the worker URL (blob or plain URL) is blocked by CSP in Firefox only (Chromium and Safari\n            // throw an exception when instantiating the worker, and IE doesn't care about CSP)\n            // * the browser fails to load the worker in case the workerUrl is used\n            // * an unexpected error occurs in the Worker before initialization, ex:\n            //   * a runtime exception collected by monitor()\n            //   * a syntax error notified by the browser via an error event\n            // * the worker is unresponsive for some reason and timeouts\n            //\n            // It is not expected to happen often. Nonetheless, the \"replayable\" status on RUM events is\n            // an important part of the Datadog App:\n            // * If we have a false positive (we set has_replay: true even if no replay data is present),\n            // we might display broken links to the Session Replay player.\n            // * If we have a false negative (we don't set has_replay: true even if replay data is\n            // available), it is less noticeable because no link will be displayed.\n            //\n            // Thus, it is better to have false negative, so let's make sure the worker is correctly\n            // initialized before advertizing that we are recording.\n            //\n            // In the future, when the compression worker will also be used for RUM data, this will be\n            // less important since no RUM event will be sent when the worker fails to initialize.\n            return getDeflateWorkerStatus() === 3 /* DeflateWorkerStatus.Initialized */ && strategy.isRecording();\n        },\n        getReplayStats: function (viewId) {\n            return getDeflateWorkerStatus() === 3 /* DeflateWorkerStatus.Initialized */ ? getReplayStatsImpl(viewId) : undefined;\n        },\n    };\n    function onRumStart(lifeCycle, configuration, sessionManager, viewHistory, worker) {\n        var cachedDeflateEncoder;\n        function getOrCreateDeflateEncoder() {\n            if (!cachedDeflateEncoder) {\n                worker !== null && worker !== void 0 ? worker : (worker = startDeflateWorker(configuration, 'Datadog Session Replay', function () {\n                    strategy.stop();\n                }, createDeflateWorkerImpl));\n                if (worker) {\n                    cachedDeflateEncoder = createDeflateEncoder(configuration, worker, 1 /* DeflateEncoderStreamId.REPLAY */);\n                }\n            }\n            return cachedDeflateEncoder;\n        }\n        strategy = createPostStartStrategy(configuration, lifeCycle, sessionManager, viewHistory, startRecordingImpl, getOrCreateDeflateEncoder);\n        if (shouldStartImmediately(configuration)) {\n            strategy.start();\n        }\n    }\n}\n//# sourceMappingURL=recorderApi.js.map","import { noop } from '@datadog/browser-core';\nexport function createPreStartStrategy() {\n    var status = 0 /* PreStartRecorderStatus.None */;\n    return {\n        strategy: {\n            start: function () {\n                status = 1 /* PreStartRecorderStatus.HadManualStart */;\n            },\n            stop: function () {\n                status = 2 /* PreStartRecorderStatus.HadManualStop */;\n            },\n            isRecording: function () { return false; },\n            getSessionReplayLink: noop,\n        },\n        shouldStartImmediately: function (configuration) {\n            return (status === 1 /* PreStartRecorderStatus.HadManualStart */ ||\n                (status === 0 /* PreStartRecorderStatus.None */ && !configuration.startSessionReplayRecordingManually));\n        },\n    };\n}\n//# sourceMappingURL=preStartStrategy.js.map","import { createHttpRequest, addTelemetryDebug, canUseEventBridge } from '@datadog/browser-core';\nimport { record } from '../domain/record';\nimport { startSegmentCollection, SEGMENT_BYTES_LIMIT } from '../domain/segmentCollection';\nimport { startRecordBridge } from '../domain/startRecordBridge';\nexport function startRecording(lifeCycle, configuration, sessionManager, viewHistory, encoder, httpRequest) {\n    var cleanupTasks = [];\n    var reportError = function (error) {\n        lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error: error });\n        addTelemetryDebug('Error reported to customer', { 'error.message': error.message });\n    };\n    var replayRequest = httpRequest || createHttpRequest(configuration.sessionReplayEndpointBuilder, SEGMENT_BYTES_LIMIT, reportError);\n    var addRecord;\n    if (!canUseEventBridge()) {\n        var segmentCollection = startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, replayRequest, encoder);\n        addRecord = segmentCollection.addRecord;\n        cleanupTasks.push(segmentCollection.stop);\n    }\n    else {\n        ;\n        (addRecord = startRecordBridge(viewHistory).addRecord);\n    }\n    var stopRecording = record({\n        emit: addRecord,\n        configuration: configuration,\n        lifeCycle: lifeCycle,\n        viewHistory: viewHistory,\n    }).stop;\n    cleanupTasks.push(stopRecording);\n    return {\n        stop: function () {\n            cleanupTasks.forEach(function (task) { return task(); });\n        },\n    };\n}\n//# sourceMappingURL=startRecording.js.map","import { getEventBridge } from '@datadog/browser-core';\nexport function startRecordBridge(viewHistory) {\n    var bridge = getEventBridge();\n    return {\n        addRecord: function (record) {\n            // Get the current active view, not at the time of the record, aligning with the segment logic.\n            // This approach could potentially associate the record to an incorrect view, in case the record date is in the past (e.g. frustration records).\n            // However the risk is minimal. We could address the issue when potential negative impact are identified.\n            var view = viewHistory.findView();\n            bridge.send('record', record, view.id);\n        },\n    };\n}\n//# sourceMappingURL=startRecordBridge.js.map","import { addTelemetryUsage, assign, createContextManager, deepClone, makePublicApi, monitor, clocksNow, callMonitored, createHandlingStack, checkUser, sanitizeUser, sanitize, createIdentityEncoder, createCustomerDataTrackerManager, storeContextManager, displayAlreadyInitializedError, createTrackingConsentState, timeStampToClocks, } from '@datadog/browser-core';\nimport { buildCommonContext } from '../domain/contexts/commonContext';\nimport { createCustomVitalsState } from '../domain/vital/vitalCollection';\nimport { createPreStartStrategy } from './preStartRum';\nvar RUM_STORAGE_KEY = 'rum';\nexport function makeRumPublicApi(startRumImpl, recorderApi, options) {\n    if (options === void 0) { options = {}; }\n    var customerDataTrackerManager = createCustomerDataTrackerManager(0 /* CustomerDataCompressionStatus.Unknown */);\n    var globalContextManager = createContextManager(customerDataTrackerManager.getOrCreateTracker(2 /* CustomerDataType.GlobalContext */));\n    var userContextManager = createContextManager(customerDataTrackerManager.getOrCreateTracker(1 /* CustomerDataType.User */));\n    var trackingConsentState = createTrackingConsentState();\n    var customVitalsState = createCustomVitalsState();\n    function getCommonContext() {\n        return buildCommonContext(globalContextManager, userContextManager, recorderApi);\n    }\n    var strategy = createPreStartStrategy(options, getCommonContext, trackingConsentState, customVitalsState, function (configuration, deflateWorker, initialViewOptions) {\n        if (configuration.storeContextsAcrossPages) {\n            storeContextManager(configuration, globalContextManager, RUM_STORAGE_KEY, 2 /* CustomerDataType.GlobalContext */);\n            storeContextManager(configuration, userContextManager, RUM_STORAGE_KEY, 1 /* CustomerDataType.User */);\n        }\n        customerDataTrackerManager.setCompressionStatus(deflateWorker ? 1 /* CustomerDataCompressionStatus.Enabled */ : 2 /* CustomerDataCompressionStatus.Disabled */);\n        var startRumResult = startRumImpl(configuration, recorderApi, customerDataTrackerManager, getCommonContext, initialViewOptions, deflateWorker && options.createDeflateEncoder\n            ? function (streamId) { return options.createDeflateEncoder(configuration, deflateWorker, streamId); }\n            : createIdentityEncoder, trackingConsentState, customVitalsState);\n        recorderApi.onRumStart(startRumResult.lifeCycle, configuration, startRumResult.session, startRumResult.viewHistory, deflateWorker);\n        strategy = createPostStartStrategy(strategy, startRumResult);\n        return startRumResult;\n    });\n    var startView = monitor(function (options) {\n        var sanitizedOptions = typeof options === 'object' ? options : { name: options };\n        if (sanitizedOptions.context) {\n            customerDataTrackerManager.getOrCreateTracker(3 /* CustomerDataType.View */).updateCustomerData(sanitizedOptions.context);\n        }\n        strategy.startView(sanitizedOptions);\n        addTelemetryUsage({ feature: 'start-view' });\n    });\n    var rumPublicApi = makePublicApi({\n        init: monitor(function (initConfiguration) {\n            strategy.init(initConfiguration, rumPublicApi);\n        }),\n        setTrackingConsent: monitor(function (trackingConsent) {\n            trackingConsentState.update(trackingConsent);\n            addTelemetryUsage({ feature: 'set-tracking-consent', tracking_consent: trackingConsent });\n        }),\n        setViewName: monitor(function (name) {\n            strategy.setViewName(name);\n        }),\n        setViewContext: monitor(function (context) {\n            strategy.setViewContext(context);\n        }),\n        setViewContextProperty: monitor(function (key, value) {\n            strategy.setViewContextProperty(key, value);\n        }),\n        setGlobalContext: monitor(function (context) {\n            globalContextManager.setContext(context);\n            addTelemetryUsage({ feature: 'set-global-context' });\n        }),\n        getGlobalContext: monitor(function () { return globalContextManager.getContext(); }),\n        setGlobalContextProperty: monitor(function (key, value) {\n            globalContextManager.setContextProperty(key, value);\n            addTelemetryUsage({ feature: 'set-global-context' });\n        }),\n        removeGlobalContextProperty: monitor(function (key) { return globalContextManager.removeContextProperty(key); }),\n        clearGlobalContext: monitor(function () { return globalContextManager.clearContext(); }),\n        getInternalContext: monitor(function (startTime) { return strategy.getInternalContext(startTime); }),\n        getInitConfiguration: monitor(function () { return deepClone(strategy.initConfiguration); }),\n        addAction: function (name, context) {\n            var handlingStack = createHandlingStack();\n            callMonitored(function () {\n                strategy.addAction({\n                    name: sanitize(name),\n                    context: sanitize(context),\n                    startClocks: clocksNow(),\n                    type: \"custom\" /* ActionType.CUSTOM */,\n                    handlingStack: handlingStack,\n                });\n                addTelemetryUsage({ feature: 'add-action' });\n            });\n        },\n        addError: function (error, context) {\n            var handlingStack = createHandlingStack();\n            callMonitored(function () {\n                strategy.addError({\n                    error: error, // Do not sanitize error here, it is needed unserialized by computeRawError()\n                    handlingStack: handlingStack,\n                    context: sanitize(context),\n                    startClocks: clocksNow(),\n                });\n                addTelemetryUsage({ feature: 'add-error' });\n            });\n        },\n        addTiming: monitor(function (name, time) {\n            // TODO: next major decide to drop relative time support or update its behaviour\n            strategy.addTiming(sanitize(name), time);\n        }),\n        setUser: monitor(function (newUser) {\n            if (checkUser(newUser)) {\n                userContextManager.setContext(sanitizeUser(newUser));\n            }\n            addTelemetryUsage({ feature: 'set-user' });\n        }),\n        getUser: monitor(function () { return userContextManager.getContext(); }),\n        setUserProperty: monitor(function (key, property) {\n            var _a;\n            var sanitizedProperty = sanitizeUser((_a = {}, _a[key] = property, _a))[key];\n            userContextManager.setContextProperty(key, sanitizedProperty);\n            addTelemetryUsage({ feature: 'set-user' });\n        }),\n        removeUserProperty: monitor(function (key) { return userContextManager.removeContextProperty(key); }),\n        clearUser: monitor(function () { return userContextManager.clearContext(); }),\n        startView: startView,\n        stopSession: monitor(function () {\n            strategy.stopSession();\n            addTelemetryUsage({ feature: 'stop-session' });\n        }),\n        addFeatureFlagEvaluation: monitor(function (key, value) {\n            strategy.addFeatureFlagEvaluation(sanitize(key), sanitize(value));\n            addTelemetryUsage({ feature: 'add-feature-flag-evaluation' });\n        }),\n        getSessionReplayLink: monitor(function () { return recorderApi.getSessionReplayLink(); }),\n        startSessionReplayRecording: monitor(function (options) {\n            recorderApi.start(options);\n            addTelemetryUsage({ feature: 'start-session-replay-recording', force: options && options.force });\n        }),\n        stopSessionReplayRecording: monitor(function () { return recorderApi.stop(); }),\n        addDurationVital: monitor(function (name, options) {\n            addTelemetryUsage({ feature: 'add-duration-vital' });\n            strategy.addDurationVital({\n                name: sanitize(name),\n                type: \"duration\" /* VitalType.DURATION */,\n                startClocks: timeStampToClocks(options.startTime),\n                duration: options.duration,\n                context: sanitize(options && options.context),\n                description: sanitize(options && options.description),\n            });\n        }),\n        startDurationVital: monitor(function (name, options) {\n            addTelemetryUsage({ feature: 'start-duration-vital' });\n            return strategy.startDurationVital(sanitize(name), {\n                context: sanitize(options && options.context),\n                description: sanitize(options && options.description),\n            });\n        }),\n        stopDurationVital: monitor(function (nameOrRef, options) {\n            addTelemetryUsage({ feature: 'stop-duration-vital' });\n            strategy.stopDurationVital(typeof nameOrRef === 'string' ? sanitize(nameOrRef) : nameOrRef, {\n                context: sanitize(options && options.context),\n                description: sanitize(options && options.description),\n            });\n        }),\n    });\n    return rumPublicApi;\n}\nfunction createPostStartStrategy(preStartStrategy, startRumResult) {\n    return assign({\n        init: function (initConfiguration) {\n            displayAlreadyInitializedError('DD_RUM', initConfiguration);\n        },\n        initConfiguration: preStartStrategy.initConfiguration,\n    }, startRumResult);\n}\n//# sourceMappingURL=rumPublicApi.js.map","export function buildCommonContext(globalContextManager, userContextManager, recorderApi) {\n    return {\n        context: globalContextManager.getContext(),\n        user: userContextManager.getContext(),\n        hasReplay: recorderApi.isRecording() ? true : undefined,\n    };\n}\n//# sourceMappingURL=commonContext.js.map","import { sendToExtension, createPageExitObservable, startTelemetry, canUseEventBridge, getEventBridge, addTelemetryDebug, drainPreStartTelemetry, isExperimentalFeatureEnabled, ExperimentalFeature, } from '@datadog/browser-core';\nimport { createDOMMutationObservable } from '../browser/domMutationObservable';\nimport { createWindowOpenObservable } from '../browser/windowOpenObservable';\nimport { startRumAssembly } from '../domain/assembly';\nimport { startInternalContext } from '../domain/contexts/internalContext';\nimport { LifeCycle } from '../domain/lifeCycle';\nimport { startViewHistory } from '../domain/contexts/viewHistory';\nimport { startRequestCollection } from '../domain/requestCollection';\nimport { startActionCollection } from '../domain/action/actionCollection';\nimport { startErrorCollection } from '../domain/error/errorCollection';\nimport { startLongTaskCollection } from '../domain/longTask/longTaskCollection';\nimport { startResourceCollection } from '../domain/resource/resourceCollection';\nimport { startViewCollection } from '../domain/view/viewCollection';\nimport { startRumSessionManager, startRumSessionManagerStub } from '../domain/rumSessionManager';\nimport { startRumBatch } from '../transport/startRumBatch';\nimport { startRumEventBridge } from '../transport/startRumEventBridge';\nimport { startUrlContexts } from '../domain/contexts/urlContexts';\nimport { createLocationChangeObservable } from '../browser/locationChangeObservable';\nimport { startFeatureFlagContexts } from '../domain/contexts/featureFlagContext';\nimport { startCustomerDataTelemetry } from '../domain/startCustomerDataTelemetry';\nimport { startPageStateHistory } from '../domain/contexts/pageStateHistory';\nimport { startDisplayContext } from '../domain/contexts/displayContext';\nimport { startVitalCollection } from '../domain/vital/vitalCollection';\nimport { startCiVisibilityContext } from '../domain/contexts/ciVisibilityContext';\nimport { startLongAnimationFrameCollection } from '../domain/longAnimationFrame/longAnimationFrameCollection';\nexport function startRum(configuration, recorderApi, customerDataTrackerManager, getCommonContext, initialViewOptions, createEncoder, \n// `startRum` and its subcomponents assume tracking consent is granted initially and starts\n// collecting logs unconditionally. As such, `startRum` should be called with a\n// `trackingConsentState` set to \"granted\".\ntrackingConsentState, customVitalsState) {\n    var cleanupTasks = [];\n    var lifeCycle = new LifeCycle();\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (event) { return sendToExtension('rum', event); });\n    var telemetry = startRumTelemetry(configuration);\n    telemetry.setContextProvider(function () {\n        var _a, _b;\n        return ({\n            application: {\n                id: configuration.applicationId,\n            },\n            session: {\n                id: (_a = session.findTrackedSession()) === null || _a === void 0 ? void 0 : _a.id,\n            },\n            view: {\n                id: (_b = viewHistory.findView()) === null || _b === void 0 ? void 0 : _b.id,\n            },\n            action: {\n                id: actionContexts.findActionId(),\n            },\n        });\n    });\n    var reportError = function (error) {\n        lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error: error });\n        addTelemetryDebug('Error reported to customer', { 'error.message': error.message });\n    };\n    var featureFlagContexts = startFeatureFlagContexts(lifeCycle, customerDataTrackerManager.getOrCreateTracker(0 /* CustomerDataType.FeatureFlag */));\n    var pageExitObservable = createPageExitObservable(configuration);\n    var pageExitSubscription = pageExitObservable.subscribe(function (event) {\n        lifeCycle.notify(11 /* LifeCycleEventType.PAGE_EXITED */, event);\n    });\n    cleanupTasks.push(function () { return pageExitSubscription.unsubscribe(); });\n    var session = !canUseEventBridge()\n        ? startRumSessionManager(configuration, lifeCycle, trackingConsentState)\n        : startRumSessionManagerStub();\n    if (!canUseEventBridge()) {\n        var batch_1 = startRumBatch(configuration, lifeCycle, telemetry.observable, reportError, pageExitObservable, session.expireObservable, createEncoder);\n        cleanupTasks.push(function () { return batch_1.stop(); });\n        startCustomerDataTelemetry(configuration, telemetry, lifeCycle, customerDataTrackerManager, batch_1.flushObservable);\n    }\n    else {\n        startRumEventBridge(lifeCycle);\n    }\n    var domMutationObservable = createDOMMutationObservable();\n    var locationChangeObservable = createLocationChangeObservable(configuration, location);\n    var pageStateHistory = startPageStateHistory(configuration);\n    var _a = createWindowOpenObservable(), windowOpenObservable = _a.observable, stopWindowOpen = _a.stop;\n    cleanupTasks.push(stopWindowOpen);\n    var _b = startRumEventCollection(lifeCycle, configuration, location, session, pageStateHistory, locationChangeObservable, domMutationObservable, windowOpenObservable, getCommonContext, reportError), viewHistory = _b.viewHistory, urlContexts = _b.urlContexts, actionContexts = _b.actionContexts, addAction = _b.addAction, stopRumEventCollection = _b.stop;\n    cleanupTasks.push(stopRumEventCollection);\n    drainPreStartTelemetry();\n    var _c = startViewCollection(lifeCycle, configuration, location, domMutationObservable, windowOpenObservable, locationChangeObservable, featureFlagContexts, pageStateHistory, recorderApi, initialViewOptions), addTiming = _c.addTiming, startView = _c.startView, setViewName = _c.setViewName, setViewContext = _c.setViewContext, setViewContextProperty = _c.setViewContextProperty, stopViewCollection = _c.stop;\n    cleanupTasks.push(stopViewCollection);\n    var stopResourceCollection = startResourceCollection(lifeCycle, configuration, pageStateHistory).stop;\n    cleanupTasks.push(stopResourceCollection);\n    if (isExperimentalFeatureEnabled(ExperimentalFeature.LONG_ANIMATION_FRAME)) {\n        if (configuration.trackLongTasks) {\n            var stopLongAnimationFrameCollection = startLongAnimationFrameCollection(lifeCycle, configuration).stop;\n            cleanupTasks.push(stopLongAnimationFrameCollection);\n        }\n    }\n    else {\n        startLongTaskCollection(lifeCycle, configuration);\n    }\n    var addError = startErrorCollection(lifeCycle, configuration, pageStateHistory, featureFlagContexts).addError;\n    startRequestCollection(lifeCycle, configuration, session);\n    var vitalCollection = startVitalCollection(lifeCycle, pageStateHistory, customVitalsState);\n    var internalContext = startInternalContext(configuration.applicationId, session, viewHistory, actionContexts, urlContexts);\n    return {\n        addAction: addAction,\n        addError: addError,\n        addTiming: addTiming,\n        addFeatureFlagEvaluation: featureFlagContexts.addFeatureFlagEvaluation,\n        startView: startView,\n        setViewContext: setViewContext,\n        setViewContextProperty: setViewContextProperty,\n        setViewName: setViewName,\n        lifeCycle: lifeCycle,\n        viewHistory: viewHistory,\n        session: session,\n        stopSession: function () { return session.expire(); },\n        getInternalContext: internalContext.get,\n        startDurationVital: vitalCollection.startDurationVital,\n        stopDurationVital: vitalCollection.stopDurationVital,\n        addDurationVital: vitalCollection.addDurationVital,\n        stop: function () {\n            cleanupTasks.forEach(function (task) { return task(); });\n        },\n    };\n}\nfunction startRumTelemetry(configuration) {\n    var telemetry = startTelemetry(\"browser-rum-sdk\" /* TelemetryService.RUM */, configuration);\n    if (canUseEventBridge()) {\n        var bridge_1 = getEventBridge();\n        telemetry.observable.subscribe(function (event) { return bridge_1.send('internal_telemetry', event); });\n    }\n    return telemetry;\n}\nexport function startRumEventCollection(lifeCycle, configuration, location, sessionManager, pageStateHistory, locationChangeObservable, domMutationObservable, windowOpenObservable, getCommonContext, reportError) {\n    var viewHistory = startViewHistory(lifeCycle);\n    var urlContexts = startUrlContexts(lifeCycle, locationChangeObservable, location);\n    var actionCollection = startActionCollection(lifeCycle, domMutationObservable, windowOpenObservable, configuration, pageStateHistory);\n    var displayContext = startDisplayContext(configuration);\n    var ciVisibilityContext = startCiVisibilityContext(configuration);\n    startRumAssembly(configuration, lifeCycle, sessionManager, viewHistory, urlContexts, actionCollection.actionContexts, displayContext, ciVisibilityContext, getCommonContext, reportError);\n    return {\n        viewHistory: viewHistory,\n        pageStateHistory: pageStateHistory,\n        urlContexts: urlContexts,\n        addAction: actionCollection.addAction,\n        actionContexts: actionCollection.actionContexts,\n        stop: function () {\n            actionCollection.stop();\n            ciVisibilityContext.stop();\n            displayContext.stop();\n            urlContexts.stop();\n            viewHistory.stop();\n            pageStateHistory.stop();\n        },\n    };\n}\n//# sourceMappingURL=startRum.js.map","import { getEventBridge } from '@datadog/browser-core';\nexport function startRumEventBridge(lifeCycle) {\n    var bridge = getEventBridge();\n    lifeCycle.subscribe(13 /* LifeCycleEventType.RUM_EVENT_COLLECTED */, function (serverRumEvent) {\n        bridge.send('rum', serverRumEvent);\n    });\n}\n//# sourceMappingURL=startRumEventBridge.js.map","import { instrumentMethod, Observable } from '@datadog/browser-core';\nexport function createWindowOpenObservable() {\n    var observable = new Observable();\n    var stop = instrumentMethod(window, 'open', function () { return observable.notify(); }).stop;\n    return { observable: observable, stop: stop };\n}\n//# sourceMappingURL=windowOpenObservable.js.map","import { ExperimentalFeature, isExperimentalFeatureEnabled } from '@datadog/browser-core';\nimport { getViewportDimension, initViewportObservable } from '../../browser/viewportObservable';\nexport function startDisplayContext(configuration) {\n    var viewport;\n    var animationFrameId;\n    if (isExperimentalFeatureEnabled(ExperimentalFeature.DELAY_VIEWPORT_COLLECTION)) {\n        // Use requestAnimationFrame to delay the calculation of viewport dimensions until after SDK initialization, preventing long tasks.\n        animationFrameId = requestAnimationFrame(function () {\n            viewport = getViewportDimension();\n        });\n    }\n    else {\n        viewport = getViewportDimension();\n    }\n    var unsubscribeViewport = initViewportObservable(configuration).subscribe(function (viewportDimension) {\n        viewport = viewportDimension;\n    }).unsubscribe;\n    return {\n        get: function () { return (viewport ? { viewport: viewport } : undefined); },\n        stop: function () {\n            unsubscribeViewport();\n            if (animationFrameId) {\n                cancelAnimationFrame(animationFrameId);\n            }\n        },\n    };\n}\n//# sourceMappingURL=displayContext.js.map","import { toServerDuration, relativeToClocks, generateUUID } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../browser/performanceObservable';\nexport function startLongAnimationFrameCollection(lifeCycle, configuration) {\n    var performanceResourceSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LONG_ANIMATION_FRAME,\n        buffered: true,\n    }).subscribe(function (entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            var startClocks = relativeToClocks(entry.startTime);\n            var rawRumEvent = {\n                date: startClocks.timeStamp,\n                long_task: {\n                    id: generateUUID(),\n                    entry_type: \"long-animation-frame\" /* RumLongTaskEntryType.LONG_ANIMATION_FRAME */,\n                    duration: toServerDuration(entry.duration),\n                    blocking_duration: toServerDuration(entry.blockingDuration),\n                    first_ui_event_timestamp: toServerDuration(entry.firstUIEventTimestamp),\n                    render_start: toServerDuration(entry.renderStart),\n                    style_and_layout_start: toServerDuration(entry.styleAndLayoutStart),\n                    start_time: toServerDuration(entry.startTime),\n                    scripts: entry.scripts.map(function (script) { return ({\n                        duration: toServerDuration(script.duration),\n                        pause_duration: toServerDuration(script.pauseDuration),\n                        forced_style_and_layout_duration: toServerDuration(script.forcedStyleAndLayoutDuration),\n                        start_time: toServerDuration(script.startTime),\n                        execution_start: toServerDuration(script.executionStart),\n                        source_url: script.sourceURL,\n                        source_function_name: script.sourceFunctionName,\n                        source_char_position: script.sourceCharPosition,\n                        invoker: script.invoker,\n                        invoker_type: script.invokerType,\n                        window_attribution: script.windowAttribution,\n                    }); }),\n                },\n                type: \"long_task\" /* RumEventType.LONG_TASK */,\n                _dd: {\n                    discarded: false,\n                },\n            };\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, {\n                rawRumEvent: rawRumEvent,\n                startTime: startClocks.relative,\n                domainContext: { performanceEntry: entry },\n            });\n        }\n    });\n    return {\n        stop: function () { return performanceResourceSubscription.unsubscribe(); },\n    };\n}\n//# sourceMappingURL=longAnimationFrameCollection.js.map","import { toServerDuration, relativeToClocks, generateUUID } from '@datadog/browser-core';\nimport { createPerformanceObservable, RumPerformanceEntryType } from '../../browser/performanceObservable';\nexport function startLongTaskCollection(lifeCycle, configuration) {\n    var performanceLongTaskSubscription = createPerformanceObservable(configuration, {\n        type: RumPerformanceEntryType.LONG_TASK,\n        buffered: true,\n    }).subscribe(function (entries) {\n        for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n            var entry = entries_1[_i];\n            if (entry.entryType !== RumPerformanceEntryType.LONG_TASK) {\n                break;\n            }\n            if (!configuration.trackLongTasks) {\n                break;\n            }\n            var startClocks = relativeToClocks(entry.startTime);\n            var rawRumEvent = {\n                date: startClocks.timeStamp,\n                long_task: {\n                    id: generateUUID(),\n                    entry_type: \"long-task\" /* RumLongTaskEntryType.LONG_TASK */,\n                    duration: toServerDuration(entry.duration),\n                },\n                type: \"long_task\" /* RumEventType.LONG_TASK */,\n                _dd: {\n                    discarded: false,\n                },\n            };\n            lifeCycle.notify(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, {\n                rawRumEvent: rawRumEvent,\n                startTime: startClocks.relative,\n                domainContext: { performanceEntry: entry },\n            });\n        }\n    });\n    return {\n        stop: function () {\n            performanceLongTaskSubscription.unsubscribe();\n        },\n    };\n}\n//# sourceMappingURL=longTaskCollection.js.map","/**\n * Internal context keep returning v1 format\n * to not break compatibility with logs data format\n */\nexport function startInternalContext(applicationId, sessionManager, viewHistory, actionContexts, urlContexts) {\n    return {\n        get: function (startTime) {\n            var viewContext = viewHistory.findView(startTime);\n            var urlContext = urlContexts.findUrl(startTime);\n            var session = sessionManager.findTrackedSession(startTime);\n            if (session && viewContext && urlContext) {\n                var actionId = actionContexts.findActionId(startTime);\n                return {\n                    application_id: applicationId,\n                    session_id: session.id,\n                    user_action: actionId ? { id: actionId } : undefined,\n                    view: { id: viewContext.id, name: viewContext.name, referrer: urlContext.referrer, url: urlContext.url },\n                };\n            }\n        },\n    };\n}\n//# sourceMappingURL=internalContext.js.map","// @flow\n\nimport { datadogRum } from '@datadog/browser-rum';\nimport { retrieve } from 'putki';\nimport { consentGivenForCategory } from 'utils/cookieConsent';\n\nconst environment = window.__ENVIRONMENT__;\n\n// Regex patterns to identify known bot instances\n// Source: https://docs.datadoghq.com/real_user_monitoring/guide/identify-bots-in-the-ui/\nconst botPattern =\n  '(googlebot\\\\/|bot|Googlebot-Mobile|Googlebot-Image|Google favicon|Mediapartners-Google|bingbot|slurp|java|wget|curl|Commons-HttpClient|Python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|jyxobot|FAST-WebCrawler|FAST Enterprise Crawler|biglotron|teoma|convera|seekbot|gigablast|exabot|ngbot|ia_archiver|GingerCrawler|webmon |httrack|webcrawler|grub.org|UsineNouvelleCrawler|antibot|netresearchserver|speedy|fluffy|bibnum.bnf|findlink|msrbot|panscient|yacybot|AISearchBot|IOI|ips-agent|tagoobot|MJ12bot|dotbot|woriobot|yanga|buzzbot|mlbot|yandexbot|purebot|Linguee Bot|Voyager|CyberPatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|Adidxbot|blekkobot|ezooms|dotbot|Mail.RU_Bot|discobot|heritrix|findthatfile|europarchive.org|NerdByNature.Bot|sistrix crawler|ahrefsbot|Aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|facebookexternalhit|yeti|RetrevoPageAnalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|DuckDuckBot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnam gnam spider|web-archive-net.com.bot|backlinkcrawler|coccoc|integromedb|content crawler spider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler.com|siteexplorer.info|elisabot|proximic|changedetection|blexbot|arabot|WeSEE:Search|niki-bot|CrystalSemanticsBot|rogerbot|360Spider|psbot|InterfaxScanBot|Lipperhey SEO Service|CC Metadata Scaper|g00g1e.net|GrapeshotCrawler|urlappendbot|brainobot|fr-crawler|binlar|SimpleCrawler|Livelapbot|Twitterbot|cXensebot|smtbot|bnf.fr_bot|A6-Indexer|ADmantX|Facebot|Twitterbot|OrangeBot|memorybot|AdvBot|MegaIndex|SemanticScholarBot|ltx71|nerdybot|xovibot|BUbiNG|Qwantify|archive.org_bot|Applebot|TweetmemeBot|crawler4j|findxbot|SemrushBot|yoozBot|lipperhey|y!j-asr|Domain Re-Animator Bot|AddThis)';\n\nconst botRegex = new RegExp(botPattern, 'i');\n\nfunction isBotUserAgent() {\n  return botRegex.test(navigator.userAgent);\n}\n\nlet initialized = false;\nfunction initializeDatadogRum() {\n  if (initialized) return;\n  initialized = true;\n\n  // sessionSampleRate:\n  //   The percentage of sessions to track: 100 for all, 0 for none. Only\n  //   tracked sessions send RUM events. For more details about\n  //   sessionSampleRate, see the sampling configuration.\n  //    -> https://docs.datadoghq.com/real_user_monitoring/guide/sampling-browser-plans/\n  //\n  // sessionReplaySampleRate:\n  //   The percentage of tracked sessions with Browser RUM & Session Replay\n  //   pricing features: 100 for all, 0 for none. For more details about\n  //   sessionReplaySampleRate, see the sampling configuration.\n  //    -> https://www.datadoghq.com/pricing/?product=real-user-monitoring--session-replay#real-user-monitoring--session-replay\n  //    -> https://docs.datadoghq.com/real_user_monitoring/guide/sampling-browser-plans/\n\n  const { sessionSampleRate, sessionReplaySampleRate } = (() => {\n    // Filter out bots from RUM monitoring\n    // See: https://docs.datadoghq.com/real_user_monitoring/guide/identify-bots-in-the-ui/\n    if (isBotUserAgent()) {\n      return { sessionSampleRate: 0, sessionReplaySampleRate: 0 };\n    }\n\n    switch (environment) {\n      case 'test':\n        // We don't want test environment to send any RUM events but we do\n        // want our app to crash in test if for some reason the Datadog RUM\n        // code messes up our application.\n        return { sessionSampleRate: 0, sessionReplaySampleRate: 0 };\n      case 'development':\n        // We don't want to incur pricing costs in development.\n        // This number can be changed when we want to test the RUM code.\n        return { sessionSampleRate: 0, sessionReplaySampleRate: 0 };\n      default:\n        // We want to track all user sessions and let Datadog retention filters\n        // handle the actual retention (keeping only ~1K out of ~260K sessions).\n        // This allows us to capture all sessions for investigation while only\n        // retaining error cases and requests that take a long time.\n        //\n        // We are not using session replays, though, so we disable that.\n        return { sessionSampleRate: 100, sessionReplaySampleRate: 0 };\n    }\n  })();\n\n  const controller = retrieve('controller');\n  const action = retrieve('action');\n  datadogRum.init({\n    applicationId: '1b89e864-e532-4578-a391-cf29b0edb549',\n    clientToken: 'pubf765aeae3809f6105bb0c168ce3687bd',\n    site: 'datadoghq.eu',\n    service: 'venuu',\n    env: environment,\n    version: retrieve('application_version_git'),\n    sessionSampleRate,\n    sessionReplaySampleRate,\n    allowedTracingUrls: [/^https:\\/\\/(?:dev\\.|staging\\.)?venuu\\.(?:fi|se|com)/],\n    trackUserInteractions: true,\n    trackResources: true,\n    trackLongTasks: true,\n    beforeSend: event => {\n      if (typeof controller === 'string' && typeof action === 'string') {\n        // Datadog shows this in RUM session explorer for view names:\n        //\n        // > RUM SDK supports custom view names, which can be used to override\n        // > `url_path_group`. If not specified, it will have the same content\n        // > of `view.url_path_group`.\n        //\n        // So in order for venue pages, search pages etc. to be monitorable as\n        // their own groups, we can set up a custom view name that uses the\n        // Rails controller name and actions.\n        //\n        // This way, regardless of how pretty our URLs are, the grouping will\n        // match the way we write our pages. And we can finally monitor how long\n        // venue profile pages take to load.\n        event.view.name = `${controller}#${action}`;\n      }\n    },\n    defaultPrivacyLevel: 'mask-user-input'\n  });\n\n  datadogRum.startSessionReplayRecording();\n}\n\ndocument.addEventListener('cookieyes_consent_update', eventData => {\n  // $FlowIgnore[prop-missing] -- https://www.cookieyes.com/documentation/events-on-cookie-banner-interactions/\n  const data = eventData.detail;\n  if (data.accepted.includes('performance')) {\n    initializeDatadogRum();\n  }\n});\n\nif (consentGivenForCategory('performance') || environment === 'test') {\n  initializeDatadogRum();\n}\n","// @flow\n\nimport Honeybadger from '@honeybadger-io/js';\nimport { retrieve } from 'putki';\n\nconst environment = window.__ENVIRONMENT__;\n\nHoneybadger.configure({\n  apiKey: '087b96bb',\n  environment: environment,\n  revision: retrieve('application_version_git'),\n  // Paths inside our sourcemaps start with `webpack:///./` and to make Honeybadger\n  // be able to link the errors to our actual source files, we need to define the\n  // `projectRoot` as documented here:\n  // https://docs.honeybadger.io/lib/javascript/guides/using-source-maps/#improving-error-grouping-and-linking-to-source-code\n  projectRoot: 'webpack:///./',\n  enableUncaught: false,\n  // Reporting unhandled Promise rejections causes massive noise in our Honeybadger\n  // and is almost always non-actionable. Rather than reporting them, let's not.\n  enableUnhandledRejection: false\n});\n\nHoneybadger.beforeNotify(notice => {\n  if (suppressCurrentUserAgent()) {\n    return false;\n  }\n\n  notice.component = retrieve('controller');\n  notice.action = retrieve('action');\n  console.warn('[Honeybadger]', notice); // eslint-disable-line no-console\n\n  return true;\n});\n\nfunction suppressCurrentUserAgent() {\n  if (!window.navigator) return false;\n  return window.navigator.userAgent.includes('BingPreview');\n}\n","import initializeAnalytics from './initializeAnalytics';\n$(document).ready(initializeAnalytics);\n\nimport './external-tools';\nimport initializeFoundation from './foundation';\nimport './stickySidebar';\nimport './setupDatadog';\nimport './setupHoneybadger';\nimport './whatInput';\n\n$(document).ready(initializeFoundation);\n","// @flow\n\nimport * as React from 'react';\n\nimport styles from './InstructionVideoEmbed.module.scss';\n\ntype Props = {|\n  title: string,\n  embedUrl: string\n|};\n\nexport default function InstructionVideoEmbed(props: Props): React.Node {\n  return (\n    <div className={styles.container}>\n      <h3 className={styles.heading}>{props.title}</h3>\n      <div className={styles.frameResizer}>\n        <div className={styles.frame}>\n          <iframe src={props.embedUrl} frameBorder=\"0\" allowFullScreen />\n        </div>\n      </div>\n    </div>\n  );\n}\n","// @flow\n\nimport * as React from 'react';\nimport type { JSONProps } from 'common/types';\n\ntype LazyComponent = Promise<React.ComponentType<JSONProps<any>>>;\n\nexport async function ProfileEditRichTextEditor(): LazyComponent {\n  return (\n    await import(\n      'profiles/common/edit/components/ProfileEditRichTextEditor.rails'\n    )\n  ).default;\n}\n\nexport async function AvailabilitySourceForm(): LazyComponent {\n  return (await import('reservations/components/AvailabilitySourceForm'))\n    .default;\n}\n\nexport async function PhoneNumberForm(): LazyComponent {\n  return (await import('phoneNumbers/components/PhoneNumberForm')).default;\n}\n\nexport async function VenueMobileCTAs(): LazyComponent {\n  return (await import('phoneNumbers/components/VenueMobileCTAs.rails'))\n    .default;\n}\n\nexport async function Rating(): LazyComponent {\n  return (await import('common/components/Rating')).default;\n}\n\nexport async function RatingBoxAccordion(): LazyComponent {\n  return (await import('common/components/accordion/RatingBoxAccordion'))\n    .default;\n}\n\nexport async function AccordionPanel(): LazyComponent {\n  return (await import('common/components/accordion/AccordionPanel')).default;\n}\n\nexport async function CommissionRoot(): LazyComponent {\n  return (await import('commission/components/CommissionRoot.rails')).default;\n}\n\nexport async function PackageEditorRoot(): LazyComponent {\n  return (await import('packages/edit/components/PackageEditorRoot.rails'))\n    .default;\n}\n\nexport async function VenueInquiryConversationRoot(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/venueInquiry/conversation/ConversationRoot.rails'\n    )\n  ).default;\n}\n\nexport async function CateringInquiryConversationApp(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/cateringInquiry/ConversationApp.rails'\n    )\n  ).default;\n}\n\nexport async function ReadOnlyVenueInquiryConversationApp(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/venueInquiry/readOnly/ConversationApp.rails'\n    )\n  ).default;\n}\n\nexport async function MarkAsRepliedRoot(): LazyComponent {\n  return (\n    await import(\n      'conversations/show/components/venueInquiry/markAsReplied/MarkAsRepliedRoot.rails'\n    )\n  ).default;\n}\n\nexport async function VenueGroupEditorApp(): LazyComponent {\n  return (\n    await import('groups/venues/edit/components/VenueGroupEditorApp.rails')\n  ).default;\n}\n\nexport async function SendCopy(): LazyComponent {\n  return (await import('thanks/components/SendCopy')).default;\n}\n\nexport async function MessageTemplateEditorApp(): LazyComponent {\n  return (\n    await import('messageTemplates/components/MessageTemplateEditorApp.rails')\n  ).default;\n}\n\nexport async function MultiSelect(): LazyComponent {\n  return (await import('common/components/MultiSelect.rails')).default;\n}\n\nexport async function VenuePageInquiryFormNew(): LazyComponent {\n  return (await import('inquiry/components/VenuePageInquiryForm.rails'))\n    .default;\n}\n\nexport async function MultiVenueInquiryForm(): LazyComponent {\n  return (await import('inquiry/components/MultiVenueInquiryForm.rails'))\n    .default;\n}\n\nexport async function SearchableInquiryIndex(): LazyComponent {\n  return (\n    await import('conversations/index/components/SearchableInquiryIndex.rails')\n  ).default;\n}\n\nexport async function FeaturedEventTypeField(): LazyComponent {\n  return (\n    await import('staff/featuredVenuesEdit/components/FeaturedEventTypeField')\n  ).default;\n}\n\nexport async function FeaturedVenuesInventory(): LazyComponent {\n  return (\n    await import(\n      'staff/featuredVenuesInventory/components/FeaturedVenuesInventory.rails'\n    )\n  ).default;\n}\n\nexport async function EditOrganizationTabs(): LazyComponent {\n  return (await import('staff/organization/components/EditOrganizationTabs'))\n    .default;\n}\n\nexport async function SpamInquiriesTabs(): LazyComponent {\n  return (await import('staff/spamInquiries/components/SpamInquiriesTabs'))\n    .default;\n}\n\nexport async function EditVenueServices(): LazyComponent {\n  return (await import('staff/organization/components/EditVenueServices'))\n    .default;\n}\n\nexport async function EditVenueTypes(): LazyComponent {\n  return (await import('staff/organization/components/EditVenueTypes')).default;\n}\n\nexport async function ProfileAnnouncementsEditorApp(): LazyComponent {\n  return (\n    await import(\n      'staff/organization/components/ProfileAnnouncementsEditorApp.rails'\n    )\n  ).default;\n}\n\nexport async function CateringSearch(): LazyComponent {\n  return (await import('catering/search/components/CateringSearch.rails'))\n    .default;\n}\n\n// ============================================= START PROFILE PAGE RELATED COMPONENTS\n\nexport async function VenueProfileGallery(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/VenueProfileGallery.rails')\n  ).default;\n}\n\nexport async function VenueWishlistButton(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/venueProfileGallery/VenueWishlistButton.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileLocation(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/VenueProfileLocation.rails')\n  ).default;\n}\n\nexport async function VenueProfileVideoSection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileVideoSection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileVirtualTourSection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileVirtualTourSection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileStoriesOfPastEvents(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileStoriesOfPastEvents.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileCapacityDetails(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileCapacityDetails.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileCTASection(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/VenueProfileCTASection.rails')\n  ).default;\n}\n\nexport async function VenueProfileOtherSpacesInSameLocation(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileOtherSpacesInSameLocation.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileReviewList(): LazyComponent {\n  return (\n    await import('profiles/venues/show/components/VenueProfileReviewList.rails')\n  ).default;\n}\n\nexport async function VenueProfileServicesAndFacilities(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileServicesAndFacilities.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileSimilarVenues(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileSimilarVenues.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfilePricingSection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfilePricingSection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileAvailabilitySection(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileAvailabilitySection.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileBasicInformation(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileBasicInformation.rails'\n    )\n  ).default;\n}\n\nexport async function VenueProfileTranslatedDescription(): LazyComponent {\n  return (\n    await import(\n      'profiles/venues/show/components/VenueProfileTranslatedDescription.rails'\n    )\n  ).default;\n}\n\nexport async function CateringBasicInformation(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringBasicInformation;\n}\nexport async function CateringDetailedInformation(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringDetailedInformation;\n}\nexport async function CateringHeading(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringHeading;\n}\nexport async function ProfileImageCarousel(): LazyComponent {\n  return (\n    await import('profiles/common/show/components/ProfileImageCarousel.rails')\n  ).default;\n}\nexport async function CateringInquiry(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringInquiry;\n}\nexport async function CateringServicesAndPricing(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringServicesAndPricing;\n}\nexport async function CateringMenuList(): LazyComponent {\n  return (await import('profiles/catering/show/cateringComponents.rails'))\n    .CateringMenuList;\n}\n\nexport async function SupplierProfileServicesAndPricing(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileServicesAndPricing.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileHeading(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileHeading.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileContactInformation(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileContactInformation.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileVideo(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileVideo.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileInquiry(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileInquiry.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileContactImage(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileContactImage.rails'\n    )\n  ).default;\n}\nexport async function SupplierProfileBasicInformation(): LazyComponent {\n  return (\n    await import(\n      'profiles/suppliers/show/components/SupplierProfileBasicInformation.rails'\n    )\n  ).default;\n}\n\n// ============================================= END PROFILE PAGE RELATED COMPONENTS\n\nexport async function SupplierSearch(): LazyComponent {\n  return (\n    await import('profiles/suppliers/search/components/SupplierSearch.rails')\n  ).default;\n}\n\nexport async function LegalNotice(): LazyComponent {\n  return (await import('common/components/inquiry/legalNotice/LegalNotice'))\n    .default;\n}\n\nexport async function PipedriveIntegrationStatus(): LazyComponent {\n  return (\n    await import(\n      'staff/organization/components/pipedriveIntegrationStatus/PipedriveIntegrationStatus.rails'\n    )\n  ).default;\n}\n\nexport async function BillingDetails(): LazyComponent {\n  return (\n    await import('billing/admin/billingDetails/components/BillingDetails.rails')\n  ).default;\n}\nexport async function TinField(): LazyComponent {\n  return (await import('billing/admin/tin/components/TinField.rails')).default;\n}\nexport async function InvoicesOfDayStates(): LazyComponent {\n  return (\n    await import(\n      'billing/staff/dailyInvoices/components/InvoicesOfDayStates.rails'\n    )\n  ).default;\n}\nexport async function InvoicingFields(): LazyComponent {\n  return (\n    await import(\n      'billing/admin/invoicingFields/components/InvoicingFields.rails'\n    )\n  ).default;\n}\nexport async function OrganizationInvoices(): LazyComponent {\n  return (\n    await import(\n      'billing/staff/organizationInvoices/components/OrganizationInvoices.rails'\n    )\n  ).default;\n}\nexport async function StripeCustomerStatus(): LazyComponent {\n  return (\n    await import(\n      'billing/staff/stripeCustomerStatus/components/StripeCustomerStatus.rails'\n    )\n  ).default;\n}\n\nexport async function OutcomeFeedback(): LazyComponent {\n  return (await import('outcomes/thanks/components/OutcomeFeedback.rails'))\n    .default;\n}\n\nexport async function EditOpeningHours(): LazyComponent {\n  return (\n    await import('profiles/common/edit/components/EditOpeningHours.rails')\n  ).default;\n}\n","// @flow\n\nimport { exposeComponents, exposeLazyComponents } from 'boot/common/reactMount';\nimport * as components from './components';\nimport * as lazyComponents from './components.lazy';\n\nexposeComponents(components);\nexposeLazyComponents(lazyComponents);\n","// @flow\n\ntype ModuleWithDefaultExport = { +default: () => void, ... };\n\nconst actionEntryPoints: {\n  [actionName: string]: void | (() => Promise<ModuleWithDefaultExport>),\n  ...\n} = {\n  frontPageIndex: () => import('./actionSpecificSetup/frontPageIndex'),\n  landingPagesShow: () => import('./actionSpecificSetup/landingPagesShow'),\n  listsShow: () => import('./actionSpecificSetup/listsShow'),\n  reviewsEdit: () => import('./actionSpecificSetup/reviewsEdit'),\n  reviewsNew: () => import('./actionSpecificSetup/reviewsNew'),\n  'profiles/reviewsNew': () => import('./actionSpecificSetup/reviewsNew'),\n  'profiles/venueProfilesShow': () =>\n    import('./actionSpecificSetup/profiles/venueProfilesShow'),\n\n  'profiles/admin/cateringProfilesEdit': () =>\n    import('./actionSpecificSetup/profiles/admin/cateringProfilesEdit'),\n  'catering/admin/menusIndex': () =>\n    import('./actionSpecificSetup/catering/admin/menusIndex'),\n\n  'admin/archives': () => import('./actionSpecificSetup/admin/archives'),\n  'profiles/admin/venueProfilesEdit': () =>\n    import('./actionSpecificSetup/profiles/admin/venueProfilesEdit'),\n  'profiles/admin/venueProfilesIndex': () =>\n    import('./actionSpecificSetup/profiles/admin/venueProfilesIndex'),\n\n  'profiles/supplierProfilesEdit': () =>\n    import('./actionSpecificSetup/profiles/supplierProfilesEdit'),\n\n  'staff/imagesIndex': () => import('./actionSpecificSetup/staff/imagesIndex'),\n  'staff/prospectsIndex': () =>\n    import('./actionSpecificSetup/staff/prospectsIndex'),\n  'staff/invoicesNew': () => import('./actionSpecificSetup/staff/invoicesNew'),\n  'staff/organizationsEdit': () =>\n    import('./actionSpecificSetup/staff/organizationsEdit'),\n  'staff/landingPagesEdit': () =>\n    import('./actionSpecificSetup/staff/landingPagesEdit.js'),\n  'users/registrationsEdit': () =>\n    import('./actionSpecificSetup/users/registrationsEdit')\n};\n\nexport default actionEntryPoints;\n","// @flow\n\nimport Honeybadger from '@honeybadger-io/js';\nimport { retrieve } from 'putki';\nimport actionEntryPoints from './actionEntryPoints';\nimport $ from 'jquery';\n\nfunction buildModuleName(controller: string, action: string) {\n  const camelCaseController = controller.replace(/(_\\w)/g, match =>\n    match[1].toUpperCase()\n  );\n  const upcaseAction = action.replace(/^./, match => match.toUpperCase());\n  return `${camelCaseController}${upcaseAction}`;\n}\n\nfunction actionAlias(action: string): string {\n  const crudAliases: { [string]: ?string } = {\n    update: 'edit',\n    create: 'new'\n  };\n  return crudAliases[action] || action;\n}\n\nfunction findScript(controller: string, action: string) {\n  const moduleNameWithAction = buildModuleName(controller, actionAlias(action));\n  const moduleNameWithoutAction = buildModuleName(controller, '');\n\n  if (typeof actionEntryPoints[moduleNameWithAction] === 'function') {\n    const actionFunc = actionEntryPoints[moduleNameWithAction];\n    return actionFunc();\n  }\n\n  if (typeof actionEntryPoints[moduleNameWithoutAction] === 'function') {\n    const actionFunc = actionEntryPoints[moduleNameWithoutAction];\n    return actionFunc();\n  }\n\n  return Promise.resolve({ default: () => {} });\n}\n\nconst controller = retrieve('controller');\nconst action = retrieve('action');\n\nif (typeof controller === 'string' && typeof action === 'string') {\n  findScript(controller, action)\n    .then(module => module.default)\n    .then(initializer => {\n      $(document).ready(() => {\n        try {\n          initializer();\n        } catch (err) {\n          Honeybadger.notify(err);\n          // The error is thrown as that was what honeybadger-js v2.x used to do when\n          // we were wrapping the initializer with Honeybadger.wrap().\n          //\n          // It doesn't make much sense as nothing is going to catch this error.\n          //\n          // TODO: Handle an initializer error gracefully.\n          throw err;\n        }\n      });\n    })\n    .catch(err => {\n      // eslint-disable-next-line no-console\n      console.error(err);\n    });\n}\n","import 'boot/webpackPublicPath';\nimport 'boot/vendor';\nimport 'vendorized-fonts/font-awesome-v6-kit-f11102cc8a/font-awesome-v6-fonts.global.scss';\nimport 'boot/common/setMomentLocale';\nimport 'boot/common/exportReact';\n\nimport './globalSetup';\n\nimport './exposeComponents';\n\nimport { mountAllComponents } from 'boot/common/reactMount';\n$(document).ready(mountAllComponents);\n\nimport './hookActionSpecificSetup';\n\nimport i18nSetup from 'boot/common/i18nSetup';\ni18nSetup();\n","/**\n * Imports that used to come via Rails assets pipeline.\n *\n * We must use `require` to get the jQuery global registered before\n * loading scripts that rely on the global `jQuery` to be present\n */\nrequire('vendorJS/modernizr');\n\nconst jQuery = require('vendorJS/jquery');\nwindow.jQuery = jQuery;\nwindow.$ = jQuery;\n\nrequire('vendorJS/jquery_ujs');\nrequire('jquery.cookie');\nrequire('vendorJS/purl');\nrequire('vendorJS/waypoints');\nrequire('vendorJS/waypoints-sticky');\nrequire('vendorJS/cocoon');\n\nrequire('foundation-sites/js/foundation/foundation');\nrequire('foundation-sites/js/foundation/foundation.alert');\nrequire('foundation-sites/js/foundation/foundation.equalizer');\n// require('foundation-sites/js/foundation/foundation.clearing');\n// require('foundation-sites/js/foundation/foundation.cookie');\n// require('foundation-sites/js/foundation/foundation.dropdown');\n// require('foundation-sites/js/foundation/foundation.joyride');\nrequire('foundation-sites/js/foundation/foundation.magellan');\n// require('foundation-sites/js/foundation/foundation.orbit');\nrequire('foundation-sites/js/foundation/foundation.reveal');\nrequire('foundation-sites/js/foundation/foundation.tooltip');\nrequire('foundation-sites/js/foundation/foundation.topbar');\nrequire('foundation-sites/js/foundation/foundation.tab');\n// require('foundation-sites/js/foundation/foundation.interchange');\n// require('foundation-sites/js/foundation/foundation.placeholder');\nrequire('vendorJS/foundation.abide');\nrequire('vendorJS/foundation.topbar');\n","// https://webpack.js.org/configuration/output/#output-publicpath\n//\n// > In cases where the publicPath of output files can't be known at compile time, it can be\n// > left blank and set dynamically at runtime in the entry file using the free variable\n// > __webpack_public_path__\n\nimport { retrieve } from 'putki';\n\n// On server side, we set the public path as a global variable\n// instead of going through Putki as the value needs to be known\n// before Putki has been populated.\nif (typeof SERVER_RENDERER_PUBLIC_PATH === 'string') {\n  // eslint-disable-next-line no-undef, camelcase\n  __webpack_public_path__ = SERVER_RENDERER_PUBLIC_PATH;\n} else {\n  // On client side, though, we know the public path via Putki.\n\n  // eslint-disable-next-line no-undef, camelcase\n  __webpack_public_path__ = retrieve('webpack_public_path');\n}\n","// @flow\n\nimport * as React from 'react';\nimport classnames from 'classnames';\n\nimport styles from './Button.module.scss';\n\nexport type Props = {\n  children: React.Node,\n  className?: string,\n  type?: 'default' | 'success' | 'primary' | 'danger' | 'link' | 'text',\n  disabled?: boolean,\n  submit?: boolean,\n  onClick?: Event => mixed,\n  ...\n};\n\nexport default function Button(props: Props): React.Node {\n  const {\n    children,\n    onClick,\n    className,\n    type = 'default',\n    disabled = false,\n    submit,\n    ...otherProps\n  } = props;\n  const buttonClassName = classnames(className, styles[type]);\n\n  const handleClick = (e: Event) => {\n    if (onClick) {\n      e.preventDefault();\n      onClick(e);\n    }\n  };\n\n  return (\n    <button\n      {...otherProps}\n      type={submit ? 'submit' : 'button'}\n      onClick={handleClick}\n      className={buttonClassName}\n      tabIndex={props.disabled ? '-1' : '0'}\n      disabled={disabled}\n    >\n      {children}\n    </button>\n  );\n}\n","// @flow\n\n// This component is to be passed down as prop to\n// the HoneybadgerErrorBoundary component\n\nimport * as React from 'react';\nimport Button from 'common/components/Button';\nimport styles from './ErrorComponent.module.scss';\n\nexport default function ErrorComponent(): React.Node {\n  return (\n    <div>\n      <p className={styles.errorMessage}>{__('error.something_went_wrong')}</p>\n      <Button\n        onClick={() => {\n          window.location.reload();\n        }}\n        type=\"primary\"\n      >\n        {__('error.reload')}\n      </Button>\n    </div>\n  );\n}\n","// @flow\n\nimport type { JSONObject } from 'common/types';\n\nexport default function match<\n  Branches: { [string | boolean]: (JSONObject) => any, ... },\n  BranchValues: $Values<$ObjMap<Branches, <V>((any) => V) => V>>\n>(sentinelProperty: string, branches: Branches): JSONObject => BranchValues {\n  return (jsonObject: JSONObject): BranchValues => {\n    const type = jsonObject[sentinelProperty];\n    if (typeof type !== 'string' && typeof type !== 'boolean') {\n      throw new Error(\n        `Expected type of property \"${sentinelProperty}\" to be a string or boolean with value being one of [${Object.keys(\n          branches\n        ).join(\n          ', '\n        )}]. Received \"${sentinelProperty}\" typeof was: ${typeof type}.`\n      );\n    }\n    if (typeof branches[type] === 'undefined') {\n      throw new Error(\n        `Expected value of property \"${sentinelProperty}\" to be one of [${Object.keys(\n          branches\n        ).join(', ')}]. Received \"${sentinelProperty}\": ${String(type)}.`\n      );\n    }\n    return branches[type](jsonObject);\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONArray } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function array<V>(extract: JSONArray => V): JSONValue => V {\n  return json => {\n    if (!Array.isArray(json)) {\n      return failure(\n        `Expecting an array, got ${\n          json === null ? 'null' : typeof json\n        } instead`,\n        () => extract([])\n      );\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONArray } from 'common/types';\n\nexport default function items<V>(\n  extract: JSONValue => V\n): JSONArray => Array<V> {\n  return array => array.map(extract);\n}\n","// @flow\n\nimport type { JSONValue, JSONObject } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function object<V>(extract: JSONObject => V): JSONValue => V {\n  return json => {\n    if (!json) {\n      return failure('Expecting an object, got a falsy value instead', () =>\n        extract({})\n      );\n    }\n    if (typeof json !== 'object') {\n      return failure(`Expecting an object, got ${typeof json} instead`, () =>\n        extract({})\n      );\n    }\n    if (Array.isArray(json)) {\n      return failure('Expecting an object, got an array instead', () =>\n        extract({})\n      );\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONObject } from 'common/types';\n\nexport type ExtractValues<Shape: { ... }> = $ObjMap<\n  Shape,\n  <V>(extractor: (JSONValue) => V) => V\n>;\n\nexport default function record<Shape: { ... }>(\n  shape: Shape\n): JSONObject => ExtractValues<Shape> {\n  return (json: JSONObject) => {\n    return Object.keys(shape).reduce<{ [empty]: any }>((result, key) => {\n      result[key] = shape[key](json[key]);\n      return result;\n    }, {});\n  };\n}\n","// @flow\n\nimport type { JSONValue, JSONObject } from 'common/types';\n\ntype Map<K, V> = { [key: K]: V, ... };\ntype AnyObject = { +[key: string]: any, ... };\n\nexport default function map<K, V>(\n  extractKey: JSONValue => K,\n  extractValue: JSONValue => V\n): JSONObject => Map<K, V> {\n  return json =>\n    Object.keys((json: AnyObject)).reduce((m: Map<K, V>, key): Map<K, V> => {\n      m[extractKey(key)] = extractValue(json[key]);\n      return m;\n    }, {});\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\n\nexport default function nullable<V>(\n  extract: JSONValue => V\n): JSONValue => V | null {\n  return json => {\n    if (json === null || typeof json === 'undefined') {\n      return null;\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\n\nexport default function withDefault<V>(\n  extract: JSONValue => V,\n  defaultValue: V\n): JSONValue => V {\n  return json => {\n    if (json === null || typeof json === 'undefined') {\n      return defaultValue;\n    }\n    return extract(json);\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function oneOf<Enum: JSONValue>(\n  values: Array<Enum> | $ReadOnlyArray<Enum>\n): JSONValue => Enum {\n  return (json: JSONValue) => {\n    const index = values.indexOf(json);\n    if (index !== -1) {\n      return values[index];\n    }\n    return failure(\n      `Expecting one of [${values.join(', ')}], got ${String(json)}`,\n      () => values[0]\n    );\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport default function <V>(value: V): JSONValue => V {\n  return (json: JSONValue) => {\n    if (json === value) {\n      return value;\n    }\n    return failure(\n      `Expecting specific value of type ${typeof value}, got another value of type ${typeof json}`,\n      () => value\n    );\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nconst decimal: JSONValue => number = (json: JSONValue) => {\n  if (typeof json === 'number') {\n    return json;\n  } else if (typeof json === 'string') {\n    return Number(json);\n  }\n  return failure(\n    `Expecting decimal (number or string), got ${\n      json === null ? 'null' : typeof json\n    }`,\n    () => Number(json)\n  );\n};\n\nexport default decimal;\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nconst id: JSONValue => string = (json: JSONValue) => {\n  if (typeof json === 'string') {\n    return json;\n  } else if (typeof json === 'number') {\n    return String(json);\n  }\n  return failure(\n    `Expecting id (number or string), got ${\n      json === null ? 'null' : typeof json\n    }`,\n    () => String(json)\n  );\n};\n\nexport default id;\n","// @flow\n\nimport Honeybadger from '@honeybadger-io/js';\nimport type { JSONValue } from 'common/types';\n\nconst failureStack: Array<string> = [];\nlet usingFailureStack = false;\n// Wrap root-level extraction with this higher order function to get neat error\n// handling behavior\nexport function withFailureHandler<V>(extract: JSONValue => V): JSONValue => V {\n  return json => {\n    // Allow `failure` extractor to customize its logic based on whether the\n    // extraction has been wrapped with this function or not.\n    usingFailureStack = true;\n    try {\n      const returnValue = extract(json);\n      // Now `failureStack` should be populated if any errors happened when extracting.\n      //\n      // Do not handle this on the server side, though, as we get better error\n      // messages on browser side and debugging is also easier in the browser.\n      // Failures will be handled again when React mounts, and debugging extractor\n      // failures on browser-side is waaay easier than debugging an error\n      // raised when rendering a component on the server side.\n      if (failureStack.length > 0 && typeof document !== 'undefined') {\n        // Make a deep clone of the failure stack to ensure that the\n        // failureStack doesn't get modified from under us\n        const snapshotStack = JSON.parse(JSON.stringify(failureStack));\n\n        const error = new Error('Extraction error');\n\n        if (__DEV__) {\n          // Without the setTimeout, the console log can fail for some unknown reason\n          /* eslint-disable no-alert, no-console */\n          setTimeout(() => {\n            console.group('Extraction error');\n            console.error(snapshotStack.join('\\n* '), {\n              json\n            });\n            console.trace();\n            console.groupEnd();\n          }, 0);\n\n          alert('Extraction error! Check console for more information');\n          /* eslint-enable no-alert, no-console */\n        } else {\n          Honeybadger.notify(error, {\n            message: failureStack.join(', '),\n            context: { json }\n          });\n        }\n      }\n      return returnValue;\n    } catch (e) {\n      // Any errors that get here are result of real runtime errors, and we should\n      // not handle them.\n      throw e;\n    } finally {\n      // Reset the state regardless if there was an error or not\n      usingFailureStack = false;\n      failureStack.length = 0;\n    }\n  };\n}\n\nexport function failure<V>(errorMessage: string, fallback: () => V): V {\n  if (!usingFailureStack) {\n    // This situation means that the extraction pipeline for this particular case\n    // has not been wrapped with the failure handler function.\n    //\n    // In that case, handle the failures as before.\n    const error = new Error(errorMessage);\n    if (__DEV__) {\n      throw error;\n    } else {\n      Honeybadger.notify(error);\n      return fallback();\n    }\n  }\n  // This extraction pipeline has been wrapped with a failure handling pipeline.\n  // The failure handler will handle all errors received during extraction.\n  failureStack.push(errorMessage);\n  return fallback();\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport const boolean: JSONValue => boolean = (json: JSONValue) => {\n  if (typeof json === 'boolean') {\n    return json;\n  }\n  return failure(\n    `Expecting boolean, got ${json === null ? 'null' : typeof json}`,\n    () => Boolean(json)\n  );\n};\n\nexport const string: JSONValue => string = (json: JSONValue) => {\n  if (typeof json === 'string') {\n    return json;\n  }\n  return failure(\n    `Expecting string, got ${json === null ? 'null' : typeof json}`,\n    () => String(json)\n  );\n};\n\nexport const number: JSONValue => number = (json: JSONValue) => {\n  if (typeof json === 'number') {\n    return json;\n  }\n  return failure(\n    `Expecting number, got ${json === null ? 'null' : typeof json}`,\n    () => Number(json)\n  );\n};\n\nexport const mixed: JSONValue => mixed = (json: JSONValue) => {\n  return json;\n};\n","// @flow\n\nimport moment from 'moment';\n\nimport type { JSONValue } from 'common/types';\nimport { failure } from 'common/json/extract';\n\nexport opaque type DateString<DateFormat: string>: string = string;\n\nexport function dateString<DateFormat: string>(\n  format: DateFormat\n): JSONValue => DateString<DateFormat> {\n  return (json: JSONValue) => {\n    if (typeof json === 'string') {\n      if (moment.utc(json, format, true).isValid()) {\n        return json;\n      }\n      return failure(\n        `Expecting dateString (string with format ${format}), got a string \"${json}\"`,\n        () => String(json)\n      );\n    }\n    return failure(\n      `Expecting dateString (string with format ${format}), got ${\n        json === null ? 'null' : typeof json\n      }`,\n      () => String(json)\n    );\n  };\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { type Locale, locales } from 'common/types/locale';\nimport { oneOf } from 'common/json/extract';\n\nexport const locale: JSONValue => Locale = oneOf(locales);\n","// @flow\n\nimport type { JSONValue } from 'common/types';\nimport { type Money, money } from 'common/types/money';\nimport { object, record, decimal, locale } from 'common/json/extract';\n\nconst extractValues = object(\n  record({\n    currency: locale,\n    amount: decimal\n  })\n);\n\nexport default function moneyExtract(json: JSONValue): Money {\n  const extractedMoney = extractValues(json);\n  return money(extractedMoney.currency, extractedMoney.amount);\n}\n","// @flow\n\nimport {\n  type Locale,\n  locales as webpackLocales\n} from 'railsRoot/config/webpack/availableLocales';\nexport type { Locale } from 'railsRoot/config/webpack/availableLocales';\nexport const locales: $ReadOnlyArray<Locale> = webpackLocales;\n\nexport opaque type Localizable<LocalizableValue> = {|\n  locale: Locale,\n  value: LocalizableValue\n|};\n\nexport opaque type Localized<LocalizedValue>: LocalizedValue = LocalizedValue;\n\nexport function localizable<Value>(\n  locale: Locale,\n  value: Value\n): Localizable<Value> {\n  return {\n    locale,\n    value\n  };\n}\n\nexport function localize<Input, Output>(\n  { locale, value }: Localizable<Input>,\n  f: (Locale, Input) => Output\n): Localized<Output> {\n  return f(locale, value);\n}\n","// @flow\nimport { formatPrice } from 'utils/currencyUtils';\n\nimport {\n  type Locale,\n  type Localizable,\n  type Localized,\n  localizable,\n  localize\n} from './locale';\n\nexport opaque type RawMoney: number = number;\n\nexport function rawMoney(n: number): RawMoney {\n  return n;\n}\n\nexport type Money = Localizable<RawMoney>;\n\nexport function money(currency: Locale, n: number): Money {\n  return localizable(currency, n);\n}\n\nexport opaque type FormattedMoney: string = Localized<string>;\n\nexport type FormatMoneyOptions = {|\n  alwaysShowDecimals?: boolean\n|};\nconst defaultFormatMoneyOptions: FormatMoneyOptions = Object.freeze({});\n\nexport function formatMoney(\n  fm: Money,\n  options?: FormatMoneyOptions = defaultFormatMoneyOptions\n): FormattedMoney {\n  return localize(fm, (locale, number) => {\n    // If the price is a round number, leave the decimals out\n    if (!options.alwaysShowDecimals && Number.isInteger(number)) {\n      return formatPrice(number, { precision: 0, locale: locale });\n    }\n    // Otherwise render with locale specific precision\n    return formatPrice(number, { locale: locale });\n  });\n}\n\nexport function isEqual(a: Money, b: Money): boolean {\n  return JSON.stringify(a) === JSON.stringify(b);\n}\n","// @flow\n\nimport type {\n  Site,\n  PartnerSupport,\n  SalesPerson,\n  Bounds,\n  EInvoiceOperator\n} from './types';\nimport type { JSONObject, JSONValue } from 'common/types';\nimport {\n  object,\n  record,\n  string,\n  number,\n  locale,\n  nullable,\n  array,\n  items\n} from 'common/json/extract';\n\ntype SitesJSON = { [key: string]: JSONObject, ... };\nconst sitesJSON: SitesJSON = require('railsRoot/config/sites.json');\n\nexport default function allSites(): Array<Site> {\n  return Object.keys(sitesJSON).map(key => {\n    return siteFromJSON(key, sitesJSON[key]);\n  });\n}\n\nconst extractPartnerSupport: JSONValue => PartnerSupport = object(\n  record({\n    mail: string,\n    phone: nullable(string)\n  })\n);\n\nconst extractSalesPerson: JSONValue => SalesPerson = object(\n  record({\n    team_mail: string,\n    first_name: string,\n    image: string,\n    mail: string,\n    name: string,\n    phone: nullable(string)\n  })\n);\n\nconst requiredBounds: JSONValue => Bounds = object(\n  record({\n    south: number,\n    west: number,\n    north: number,\n    east: number\n  })\n);\n\nconst eInvoiceOperator: JSONValue => EInvoiceOperator = object(\n  record({\n    name: string,\n    id: string\n  })\n);\n\nconst extractEInvoiceoperators: JSONValue => Array<EInvoiceOperator> = array(\n  items(eInvoiceOperator)\n);\n\nfunction siteFromJSON(key: string, json: JSONObject): Site {\n  return {\n    key: key,\n    locale: locale(json.locale),\n    baseDomain: requiredString(json.base_domain),\n    countryInPath: optionalString(json.country_in_path),\n    defaultOgImage: optionalString(json.default_og_image),\n    defaultSearchBounds: requiredBounds(json.default_search_bounds),\n    defaultMapCenter: requiredLocation(json.default_map_center),\n    iso31661Alpha2: optionalString(json.iso_3166_1_alpha_2),\n    iso31661Alpha3: optionalString(json.iso_3166_1_alpha_3),\n    profileTimeZone: requiredString(json.profile_time_zone),\n    partnerSupport: extractPartnerSupport(json.partner_support),\n    salesPerson: extractSalesPerson(json.sales_person),\n    eInvoiceOperators: extractEInvoiceoperators(json.e_invoice_operators)\n  };\n}\n\nfunction requiredString(maybeString: JSONValue): string {\n  if (typeof maybeString !== 'string') {\n    throw new Error(\n      `Expected string, got ${typeof maybeString}: ${String(maybeString)}`\n    );\n  }\n  return maybeString;\n}\n\nfunction optionalString(maybeString: JSONValue): string | null {\n  if (typeof maybeString !== 'string') {\n    return null;\n  }\n  return maybeString;\n}\n\nfunction requiredLocation(maybeLocation: JSONValue): [number, number] {\n  // $FlowFixMe[incompatible-return]\n  return maybeLocation;\n}\n","// @flow\n\nimport type { Site } from './types';\nimport allSites from './allSites';\nimport { retrieve } from 'putki';\n\nexport default function currentSite(): Site {\n  const sites = allSites();\n  const key = retrieve('current_site');\n\n  const site = sites.find(s => s.key === key);\n  return site || sites[0];\n}\n","// @flow\n\n// Originally copied from segmentio/analytics-next library (MIT licensed)\n// https://github.com/segmentio/analytics-next/blob/b7d8563e461fb5aac6a2e517a537e89bd0f9fa45/packages/core/src/callback/index.ts#L4C1-L17C2\nfunction pTimeout<T>(promise: Promise<T>, timeout: number): Promise<T> {\n  return new Promise((resolve, reject) => {\n    const timeoutId = setTimeout(() => {\n      reject(Error('Promise timed out'));\n    }, timeout);\n\n    promise\n      .then(val => {\n        clearTimeout(timeoutId);\n        return resolve(val);\n      })\n      .catch(reject);\n  });\n}\n\n// Originally copied from segmentio/analytics-next library (MIT licensed)\n// https://github.com/segmentio/analytics-next/blob/b7d8563e461fb5aac6a2e517a537e89bd0f9fa45/packages/browser/src/core/auto-track.ts#L5-L96\ntype JQueryShim = {\n  toArray(): Array<HTMLElement>,\n  ...\n};\n\ntype EventProperties = Record<string, any>;\n\nexport function trackLink(\n  track: (event: string, props: { ... }) => Promise<any>,\n  links: HTMLElement | Array<HTMLElement> | JQueryShim | null,\n  event: string | (HTMLElement => string),\n  properties: EventProperties | (HTMLElement => EventProperties)\n) {\n  let elements: Array<HTMLElement> = [];\n  if (!links) return;\n\n  // always arrays, handles jquery\n  if (links instanceof HTMLElement) {\n    elements = [links];\n  } else if (links instanceof Array) {\n    elements = links;\n  } else if ('toArray' in links) {\n    elements = links.toArray();\n  }\n\n  elements.forEach((el: HTMLElement) => {\n    el.addEventListener(\n      'click',\n      (elementEvent: Event) => {\n        const ev = typeof event === 'function' ? event(el) : event;\n        const props =\n          typeof properties === 'function' ? properties(el) : properties;\n        const href =\n          el.getAttribute('href') ||\n          el.getAttributeNS('http://www.w3.org/1999/xlink', 'href') ||\n          el.getAttribute('xlink:href') ||\n          // flowlint-next-line unnecessary-optional-chain:off\n          el.getElementsByTagName('a')[0]?.getAttribute('href');\n\n        const trackEvent = pTimeout(\n          track(ev, props),\n          // this.settings.timeout ?? 500\n          500\n        );\n\n        if (\n          !linkNewTab(\n            // $FlowIgnore[incompatible-cast] -- Cast is copied over from the original source code\n            (el: HTMLAnchorElement),\n            href\n          ) &&\n          !userNewTab(elementEvent)\n        ) {\n          if (href) {\n            elementEvent.preventDefault();\n            trackEvent\n              // eslint-disable-next-line no-console\n              .catch(console.error)\n              .then(() => {\n                window.location.href = href;\n              })\n              // eslint-disable-next-line no-console\n              .catch(console.error);\n          }\n        }\n      },\n      false\n    );\n  });\n}\n\n// Check if a user is opening the link in a new tab\nfunction userNewTab(event: Event): boolean {\n  const typedEvent: Event | KeyboardEvent | MouseEvent = event;\n  if (\n    typedEvent.ctrlKey ||\n    typedEvent.shiftKey ||\n    typedEvent.metaKey ||\n    // flowlint-next-line sketchy-number-and:off\n    (typedEvent.button && typedEvent.button === 1)\n  ) {\n    return true;\n  }\n  return false;\n}\n\n// Check if the link opens in new tab\nfunction linkNewTab(\n  element: HTMLAnchorElement,\n  href: string | null | void\n): boolean {\n  if (element.target === '_blank' && href) {\n    return true;\n  }\n  return false;\n}\n","// @flow\n\nimport { retrieve } from 'putki';\nimport $ from 'jquery';\n\nimport { type JSONObject } from 'common/types';\nimport currentSite from 'site/currentSite';\nimport { trackLink } from './analyticsModules/analyticsLinkTracking';\n\nfunction getSocialMedia(input: string) {\n  switch (false) {\n    case input.indexOf('facebook.com') === -1:\n      return 'Facebook';\n    case input.indexOf('t.co') === -1:\n      return 'Twitter';\n    case input.indexOf('twitter.com') === -1:\n      return 'Twitter';\n    default:\n      return null;\n  }\n}\n\n// Copied from Mixpanel JS source code\n// https://github.com/mixpanel/mixpanel-js/blob/8ac526e5cb8563d11e2206046ab986c6491ac6d7/src/utils.js#L1571-L1593\nfunction inferOperatingSystem() {\n  const a = navigator.userAgent;\n  if (/Windows/i.test(a)) {\n    if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n      return 'Windows Phone';\n    }\n    return 'Windows';\n  } else if (/(iPhone|iPad|iPod)/.test(a)) {\n    return 'iOS';\n  } else if (/Android/.test(a)) {\n    return 'Android';\n  } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n    return 'BlackBerry';\n  } else if (/Mac/i.test(a)) {\n    return 'Mac OS X';\n  } else if (/Linux/.test(a)) {\n    return 'Linux';\n  } else if (/CrOS/.test(a)) {\n    return 'Chrome OS';\n  } else {\n    return '';\n  }\n}\n\nfunction defaultProperties() {\n  const site = currentSite();\n  const controller = String(retrieve('controller'));\n  const action = String(retrieve('action'));\n  return {\n    Path: document.location.pathname,\n    'Social Media': getSocialMedia(window.document.referrer),\n    Locale: __LOCALE__,\n    'Site Key': site.key,\n    // Use specifically `category` to set \"Event Category\" in Google Analytics.\n    category: site.key,\n    // Use specifically `label` to set \"Event Label\" in Google Analytics.\n    label: __LOCALE__,\n    'Is Language Version Active': site.locale !== __LOCALE__,\n    'Action ID': `${controller}#${action}`,\n    $os: inferOperatingSystem()\n  };\n}\n\nfunction defaultContext() {\n  return {\n    locale: __LOCALE__\n  };\n}\n\nconst propertiesFromTrackedLink = (link: HTMLElement) => {\n  const $link = $(link);\n  const linkData = $link.data('venuu-t') || {};\n  return {\n    ...defaultProperties(),\n    ...linkData,\n    'Link Text': $link.text().trim(),\n    URL: $link.attr('href')\n  };\n};\n\nconst allHaveData = ($elements: any, dataKey: string) => {\n  return $elements\n    .map(function (this: HTMLElement) {\n      return $(this).data(dataKey);\n    })\n    .get()\n    .every(data => !!data);\n};\n\nexport function venueAnalyticsProps(): JSONObject {\n  const dataFromBackend = retrieve('analytics');\n  if (\n    dataFromBackend !== null &&\n    typeof dataFromBackend === 'object' &&\n    !Array.isArray(dataFromBackend)\n  ) {\n    return dataFromBackend;\n  }\n  return {};\n}\n\n/**\n * Tracks clicks on the given element/s.\n *\n * @throws TypeError if all elements do not have a proper data-venuu-t attribute\n * @throws TypeError if all elements do not have a proper data-venuu-t-name attribute\n */\nexport function trackClicksOn(elements: HTMLElement | Array<HTMLElement>) {\n  const $elements = $(elements);\n\n  if ($elements.length === 0) {\n    return;\n  }\n\n  if (!allHaveData($elements, 'venuu-t')) {\n    throw new TypeError(\n      'trackClicksOn requires all elements to have a \"venuu-t\" data attribute'\n    );\n  }\n\n  if (!allHaveData($elements, 'venuu-t-name')) {\n    throw new TypeError(\n      'trackClicksOn requires all elements to have a \"venuu-t-name\" data attribute'\n    );\n  }\n\n  trackLink(\n    (event, props) =>\n      new Promise((resolve, reject) => {\n        (window.jitsuQ = window.jitsuQ || []).push(jitsu => {\n          jitsu.track(event, props).then(resolve).catch(reject);\n        });\n      }),\n    elements,\n    link => $(link).data('venuu-t-name'),\n    propertiesFromTrackedLink\n  );\n}\n\n/**\n * Removes the click tracking from the given element.\n *\n * @param {HTMLElement} element - The element which has its clicks tracked\n */\nexport function untrackClicksOn(_element: HTMLElement) {\n  // TODO: Support untracking clicks for an element\n}\n\n/**\n * Remember update the server-side matchers (lib/tracking/actor_inference.rb)\n * if you make changes here.\n */\nexport function isBot(userAgent: string): boolean {\n  const BOT_MATCHERS = [\n    /google web preview/i,\n    /baiduspider/i,\n    /yahoo! slurp/i,\n    /rsiteauditor/i,\n    // This matches most currently known bots and likely future bots as well.\n    /bot/i\n  ];\n  return BOT_MATCHERS.some(matcher => {\n    return matcher.test(userAgent);\n  });\n}\n\n/**\n * Tracks a single event.\n *\n * This function also adds some default properties to the event for convenience.\n *\n * @param {String} eventName - The name of the event\n * @param {Object} properties - Extra properties associated with the event\n */\nexport function trackEvent(eventName: string, properties: Object = {}) {\n  if (isBot(navigator.userAgent)) return;\n\n  (window.jitsuQ = window.jitsuQ || []).push(jitsu => {\n    jitsu.track(\n      eventName,\n      {\n        ...defaultProperties(),\n        ...properties\n      },\n      defaultContext()\n    );\n  });\n}\n","// @flow\n\nimport accounting from 'accounting';\n\nexport function formatPrice(\n  number: string | number,\n  options: Object = {}\n): string {\n  const translatedOptions = {\n    precision: I18n.t('number.currency.format.precision', options),\n    thousand: I18n.t('number.currency.format.delimiter', options),\n    decimal: I18n.t('number.currency.format.separator', options),\n    format: I18n.t('number.currency.format.accounting.format', options),\n    symbol: I18n.t('number.currency.format.unit', options),\n    ...options\n  };\n  return accounting.formatMoney(number, translatedOptions);\n}\n","import Modernizr from 'modernizr';\n\nconst mediaTypesToMediaQueries = {\n  // Same as Foundation ones, plus middle added by Venuu\n  small: 'only screen',\n  middle: 'only screen and (min-width: 1024px)',\n  medium: 'only screen and (min-width: 40.063em)',\n  large: 'only screen and (min-width: 64.063em)',\n  xlarge: 'only screen and (min-width: 90.063em)',\n  xxlarge: 'only screen and (min-width: 120.063em)',\n  smallDevice: 'only screen and (min-device-width: 768px)',\n  topbar: 'only screen and (min-width: 48em)'\n};\n\nexport default function satisfiesMediaQuery(mediaType) {\n  if (typeof mediaType !== 'string') {\n    throw new TypeError('Media type was not a string');\n  }\n  const mediaQuery = mediaTypesToMediaQueries[mediaType];\n  if (!mediaQuery) {\n    throw new TypeError(`Unknown media type \"${mediaType}\"`);\n  }\n  return Modernizr.mq(mediaQuery);\n}\n","// @flow\n\nimport type { JSONValue } from 'common/types';\n\nexport function retrieve(identifier: string): JSONValue {\n  const value = base()[identifier];\n\n  if (typeof value === 'undefined') {\n    return null;\n  }\n  return value;\n}\n\nfunction base() {\n  return (window && window.Putki) || {};\n}\n","// I18n.js\n// =======\n//\n// This small library provides the Rails I18n API on the Javascript.\n// You don't actually have to use Rails (or even Ruby) to use I18n.js.\n// Just make sure you export all translations in an object like this:\n//\n//     I18n.translations.en = {\n//       hello: \"Hello World\"\n//     };\n//\n// See tests for specific formatting like numbers and dates.\n//\n\n// Using UMD pattern from\n// https://github.com/umdjs/umd#regular-module\n// `returnExports.js` version\n;(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(\"i18n\", function(){ return factory(root);});\n  } else if (typeof module === 'object' && module.exports) {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(root);\n  } else {\n    // Browser globals (root is window)\n    root.I18n = factory(root);\n  }\n}(this, function(global) {\n  \"use strict\";\n\n  // Use previously defined object if exists in current scope\n  var I18n = global && global.I18n || {};\n\n  // Just cache the Array#slice function.\n  var slice = Array.prototype.slice;\n\n  // Apply number padding.\n  var padding = function(number) {\n    return (\"0\" + number.toString()).substr(-2);\n  };\n\n  // Improved toFixed number rounding function with support for unprecise floating points\n  // JavaScript's standard toFixed function does not round certain numbers correctly (for example 0.105 with precision 2).\n  var toFixed = function(number, precision) {\n    return decimalAdjust('round', number, -precision).toFixed(precision);\n  };\n\n  // Is a given variable an object?\n  // Borrowed from Underscore.js\n  var isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object'\n  };\n\n  var isFunction = function(func) {\n    var type = typeof func;\n    return type === 'function'\n  };\n\n  // Check if value is different than undefined and null;\n  var isSet = function(value) {\n    return typeof(value) !== 'undefined' && value !== null;\n  };\n\n  // Is a given value an array?\n  // Borrowed from Underscore.js\n  var isArray = function(val) {\n    if (Array.isArray) {\n      return Array.isArray(val);\n    }\n    return Object.prototype.toString.call(val) === '[object Array]';\n  };\n\n  var isString = function(val) {\n    return typeof val === 'string' || Object.prototype.toString.call(val) === '[object String]';\n  };\n\n  var isNumber = function(val) {\n    return typeof val === 'number' || Object.prototype.toString.call(val) === '[object Number]';\n  };\n\n  var isBoolean = function(val) {\n    return val === true || val === false;\n  };\n\n  var isNull = function(val) {\n    return val === null;\n  };\n\n  var decimalAdjust = function(type, value, exp) {\n    // If the exp is undefined or zero...\n    if (typeof exp === 'undefined' || +exp === 0) {\n      return Math[type](value);\n    }\n    value = +value;\n    exp = +exp;\n    // If the value is not a number or the exp is not an integer...\n    if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n      return NaN;\n    }\n    // Shift\n    value = value.toString().split('e');\n    value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));\n    // Shift back\n    value = value.toString().split('e');\n    return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));\n  };\n\n  var lazyEvaluate = function(message, scope) {\n    if (isFunction(message)) {\n      return message(scope);\n    } else {\n      return message;\n    }\n  };\n\n  var merge = function (dest, obj) {\n    var key, value;\n    for (key in obj) if (obj.hasOwnProperty(key)) {\n      value = obj[key];\n      if (isString(value) || isNumber(value) || isBoolean(value) || isArray(value) || isNull(value)) {\n        dest[key] = value;\n      } else {\n        if (dest[key] == null) dest[key] = {};\n        merge(dest[key], value);\n      }\n    }\n    return dest;\n  };\n\n  // Set default days/months translations.\n  var DATE = {\n      day_names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n    , abbr_day_names: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n    , month_names: [null, \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n    , abbr_month_names: [null, \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n    , meridian: [\"AM\", \"PM\"]\n  };\n\n  // Set default number format.\n  var NUMBER_FORMAT = {\n      precision: 3\n    , separator: \".\"\n    , delimiter: \",\"\n    , strip_insignificant_zeros: false\n  };\n\n  // Set default currency format.\n  var CURRENCY_FORMAT = {\n      unit: \"$\"\n    , precision: 2\n    , format: \"%u%n\"\n    , sign_first: true\n    , delimiter: \",\"\n    , separator: \".\"\n  };\n\n  // Set default percentage format.\n  var PERCENTAGE_FORMAT = {\n      unit: \"%\"\n    , precision: 3\n    , format: \"%n%u\"\n    , separator: \".\"\n    , delimiter: \"\"\n  };\n\n  // Set default size units.\n  var SIZE_UNITS = [null, \"kb\", \"mb\", \"gb\", \"tb\"];\n\n  // Other default options\n  var DEFAULT_OPTIONS = {\n    // Set default locale. This locale will be used when fallback is enabled and\n    // the translation doesn't exist in a particular locale.\n      defaultLocale: \"en\"\n    // Set the current locale to `en`.\n    , locale: \"en\"\n    // Set the translation key separator.\n    , defaultSeparator: \".\"\n    // Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`.\n    , placeholder: /(?:\\{\\{|%\\{)(.*?)(?:\\}\\}?)/gm\n    // Set if engine should fallback to the default locale when a translation\n    // is missing.\n    , fallbacks: false\n    // Set the default translation object.\n    , translations: {}\n    // Set missing translation behavior. 'message' will display a message\n    // that the translation is missing, 'guess' will try to guess the string\n    , missingBehaviour: 'message'\n    // if you use missingBehaviour with 'message', but want to know that the\n    // string is actually missing for testing purposes, you can prefix the\n    // guessed string by setting the value here. By default, no prefix!\n    , missingTranslationPrefix: ''\n  };\n\n  // Set default locale. This locale will be used when fallback is enabled and\n  // the translation doesn't exist in a particular locale.\n  I18n.reset = function() {\n    var key;\n    for (key in DEFAULT_OPTIONS) {\n      this[key] = DEFAULT_OPTIONS[key];\n    }\n  };\n\n  // Much like `reset`, but only assign options if not already assigned\n  I18n.initializeOptions = function() {\n    var key;\n    for (key in DEFAULT_OPTIONS) if (!isSet(this[key])) {\n      this[key] = DEFAULT_OPTIONS[key];\n    }\n  };\n  I18n.initializeOptions();\n\n  // Return a list of all locales that must be tried before returning the\n  // missing translation message. By default, this will consider the inline option,\n  // current locale and fallback locale.\n  //\n  //     I18n.locales.get(\"de-DE\");\n  //     // [\"de-DE\", \"de\", \"en\"]\n  //\n  // You can define custom rules for any locale. Just make sure you return a array\n  // containing all locales.\n  //\n  //     // Default the Wookie locale to English.\n  //     I18n.locales[\"wk\"] = function(locale) {\n  //       return [\"en\"];\n  //     };\n  //\n  I18n.locales = {};\n\n  // Retrieve locales based on inline locale, current locale or default to\n  // I18n's detection.\n  I18n.locales.get = function(locale) {\n    var result = this[locale] || this[I18n.locale] || this[\"default\"];\n\n    if (isFunction(result)) {\n      result = result(locale);\n    }\n\n    if (isArray(result) === false) {\n      result = [result];\n    }\n\n    return result;\n  };\n\n  // The default locale list.\n  I18n.locales[\"default\"] = function(locale) {\n    var locales = []\n      , list = []\n    ;\n\n    // Handle the inline locale option that can be provided to\n    // the `I18n.t` options.\n    if (locale) {\n      locales.push(locale);\n    }\n\n    // Add the current locale to the list.\n    if (!locale && I18n.locale) {\n      locales.push(I18n.locale);\n    }\n\n    // Add the default locale if fallback strategy is enabled.\n    if (I18n.fallbacks && I18n.defaultLocale) {\n      locales.push(I18n.defaultLocale);\n    }\n\n    // Locale code format 1:\n    // According to RFC4646 (https://www.ietf.org/rfc/rfc4646.txt)\n    // language codes for Traditional Chinese should be `zh-Hant`\n    //\n    // But due to backward compatibility\n    // We use older version of IETF language tag\n    // @see https://www.w3.org/TR/html401/struct/dirlang.html\n    // @see https://en.wikipedia.org/wiki/IETF_language_tag\n    //\n    // Format: `language-code = primary-code ( \"-\" subcode )*`\n    //\n    // primary-code uses ISO639-1\n    // @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n    // @see https://www.iso.org/iso/home/standards/language_codes.htm\n    //\n    // subcode uses ISO 3166-1 alpha-2\n    // @see https://en.wikipedia.org/wiki/ISO_3166\n    // @see https://www.iso.org/iso/country_codes.htm\n    //\n    // @note\n    //   subcode can be in upper case or lower case\n    //   defining it in upper case is a convention only\n\n\n    // Locale code format 2:\n    // Format: `code = primary-code ( \"-\" region-code )*`\n    // primary-code uses ISO 639-1\n    // script-code uses ISO 15924\n    // region-code uses ISO 3166-1 alpha-2\n    // Example: zh-Hant-TW, en-HK, zh-Hant-CN\n    //\n    // It is similar to RFC4646 (or actually the same),\n    // but seems to be limited to language, script, region\n\n    // Compute each locale with its country code.\n    // So this will return an array containing\n    // `de-DE` and `de`\n    // or\n    // `zh-hans-tw`, `zh-hans`, `zh`\n    // locales.\n    locales.forEach(function(locale) {\n      var localeParts = locale.split(\"-\");\n      var firstFallback = null;\n      var secondFallback = null;\n      if (localeParts.length === 3) {\n        firstFallback = [\n          localeParts[0],\n          localeParts[1]\n        ].join(\"-\");\n        secondFallback = localeParts[0];\n      }\n      else if (localeParts.length === 2) {\n        firstFallback = localeParts[0];\n      }\n\n      if (list.indexOf(locale) === -1) {\n        list.push(locale);\n      }\n\n      if (! I18n.fallbacks) {\n        return;\n      }\n\n      [\n        firstFallback,\n        secondFallback\n      ].forEach(function(nullableFallbackLocale) {\n        // We don't want null values\n        if (typeof nullableFallbackLocale === \"undefined\") { return; }\n        if (nullableFallbackLocale === null) { return; }\n        // We don't want duplicate values\n        //\n        // Comparing with `locale` first is faster than\n        // checking whether value's presence in the list\n        if (nullableFallbackLocale === locale) { return; }\n        if (list.indexOf(nullableFallbackLocale) !== -1) { return; }\n\n        list.push(nullableFallbackLocale);\n      });\n    });\n\n    // No locales set? English it is.\n    if (!locales.length) {\n      locales.push(\"en\");\n    }\n\n    return list;\n  };\n\n  // Hold pluralization rules.\n  I18n.pluralization = {};\n\n  // Return the pluralizer for a specific locale.\n  // If no specify locale is found, then I18n's default will be used.\n  I18n.pluralization.get = function(locale) {\n    return this[locale] || this[I18n.locale] || this[\"default\"];\n  };\n\n  // The default pluralizer rule.\n  // It detects the `zero`, `one`, and `other` scopes.\n  I18n.pluralization[\"default\"] = function(count) {\n    switch (count) {\n      case 0: return [\"zero\", \"other\"];\n      case 1: return [\"one\"];\n      default: return [\"other\"];\n    }\n  };\n\n  // Return current locale. If no locale has been set, then\n  // the current locale will be the default locale.\n  I18n.currentLocale = function() {\n    return this.locale || this.defaultLocale;\n  };\n\n  // Check if value is different than undefined and null;\n  I18n.isSet = isSet;\n\n  // Find and process the translation using the provided scope and options.\n  // This is used internally by some functions and should not be used as an\n  // public API.\n  I18n.lookup = function(scope, options) {\n    options = options || {};\n\n    var locales = this.locales.get(options.locale).slice()\n      , locale\n      , scopes\n      , fullScope\n      , translations\n    ;\n\n    fullScope = this.getFullScope(scope, options);\n\n    while (locales.length) {\n      locale = locales.shift();\n      scopes = fullScope.split(options.separator || this.defaultSeparator);\n      translations = this.translations[locale];\n\n      if (!translations) {\n        continue;\n      }\n      while (scopes.length) {\n        translations = translations[scopes.shift()];\n\n        if (translations === undefined || translations === null) {\n          break;\n        }\n      }\n\n      if (translations !== undefined && translations !== null) {\n        return translations;\n      }\n    }\n\n    if (isSet(options.defaultValue)) {\n      return lazyEvaluate(options.defaultValue, scope);\n    }\n  };\n\n  // lookup pluralization rule key into translations\n  I18n.pluralizationLookupWithoutFallback = function(count, locale, translations) {\n    var pluralizer = this.pluralization.get(locale)\n      , pluralizerKeys = pluralizer(count)\n      , pluralizerKey\n      , message;\n\n    if (translations && isObject(translations)) {\n      while (pluralizerKeys.length) {\n        pluralizerKey = pluralizerKeys.shift();\n        if (isSet(translations[pluralizerKey])) {\n          message = translations[pluralizerKey];\n          break;\n        }\n      }\n    }\n\n    return message;\n  };\n\n  // Lookup dedicated to pluralization\n  I18n.pluralizationLookup = function(count, scope, options) {\n    options = options || {};\n    var locales = this.locales.get(options.locale).slice()\n      , locale\n      , scopes\n      , translations\n      , message\n    ;\n    scope = this.getFullScope(scope, options);\n\n    while (locales.length) {\n      locale = locales.shift();\n      scopes = scope.split(options.separator || this.defaultSeparator);\n      translations = this.translations[locale];\n\n      if (!translations) {\n        continue;\n      }\n\n      while (scopes.length) {\n        translations = translations[scopes.shift()];\n        if (!isObject(translations)) {\n          break;\n        }\n        if (scopes.length === 0) {\n          message = this.pluralizationLookupWithoutFallback(count, locale, translations);\n        }\n      }\n      if (typeof message !== \"undefined\" && message !== null) {\n        break;\n      }\n    }\n\n    if (typeof message === \"undefined\" || message === null) {\n      if (isSet(options.defaultValue)) {\n        if (isObject(options.defaultValue)) {\n          message = this.pluralizationLookupWithoutFallback(count, options.locale, options.defaultValue);\n        } else {\n          message = options.defaultValue;\n        }\n        translations = options.defaultValue;\n      }\n    }\n\n    return { message: message, translations: translations };\n  };\n\n  // Rails changed the way the meridian is stored.\n  // It started with `date.meridian` returning an array,\n  // then it switched to `time.am` and `time.pm`.\n  // This function abstracts this difference and returns\n  // the correct meridian or the default value when none is provided.\n  I18n.meridian = function() {\n    var time = this.lookup(\"time\");\n    var date = this.lookup(\"date\");\n\n    if (time && time.am && time.pm) {\n      return [time.am, time.pm];\n    } else if (date && date.meridian) {\n      return date.meridian;\n    } else {\n      return DATE.meridian;\n    }\n  };\n\n  // Merge serveral hash options, checking if value is set before\n  // overwriting any value. The precedence is from left to right.\n  //\n  //     I18n.prepareOptions({name: \"John Doe\"}, {name: \"Mary Doe\", role: \"user\"});\n  //     #=> {name: \"John Doe\", role: \"user\"}\n  //\n  I18n.prepareOptions = function() {\n    var args = slice.call(arguments)\n      , options = {}\n      , subject\n    ;\n\n    while (args.length) {\n      subject = args.shift();\n\n      if (typeof(subject) != \"object\") {\n        continue;\n      }\n\n      for (var attr in subject) {\n        if (!subject.hasOwnProperty(attr)) {\n          continue;\n        }\n\n        if (isSet(options[attr])) {\n          continue;\n        }\n\n        options[attr] = subject[attr];\n      }\n    }\n\n    return options;\n  };\n\n  // Generate a list of translation options for default fallbacks.\n  // `defaultValue` is also deleted from options as it is returned as part of\n  // the translationOptions array.\n  I18n.createTranslationOptions = function(scope, options) {\n    var translationOptions = [{scope: scope}];\n\n    // Defaults should be an array of hashes containing either\n    // fallback scopes or messages\n    if (isSet(options.defaults)) {\n      translationOptions = translationOptions.concat(options.defaults);\n    }\n\n    // Maintain support for defaultValue. Since it is always a message\n    // insert it in to the translation options as such.\n    if (isSet(options.defaultValue)) {\n      translationOptions.push({ message: options.defaultValue });\n    }\n\n    return translationOptions;\n  };\n\n  // Translate the given scope with the provided options.\n  I18n.translate = function(scope, options) {\n    options = options || {};\n\n    var translationOptions = this.createTranslationOptions(scope, options);\n\n    var translation;\n    var usedScope = scope;\n\n    var optionsWithoutDefault = this.prepareOptions(options)\n    delete optionsWithoutDefault.defaultValue\n\n    // Iterate through the translation options until a translation\n    // or message is found.\n    var translationFound =\n      translationOptions.some(function(translationOption) {\n        if (isSet(translationOption.scope)) {\n          usedScope = translationOption.scope;\n          translation = this.lookup(usedScope, optionsWithoutDefault);\n        } else if (isSet(translationOption.message)) {\n          translation = lazyEvaluate(translationOption.message, scope);\n        }\n\n        if (translation !== undefined && translation !== null) {\n          return true;\n        }\n      }, this);\n\n    if (!translationFound) {\n      return this.missingTranslation(scope, options);\n    }\n\n    if (typeof(translation) === \"string\") {\n      translation = this.interpolate(translation, options);\n    } else if (isArray(translation)) {\n      translation = translation.map(function(t) {\n        return (typeof(t) === \"string\" ? this.interpolate(t, options) : t);\n      }, this);\n    } else if (isObject(translation) && isSet(options.count)) {\n      translation = this.pluralize(options.count, usedScope, options);\n    }\n\n    return translation;\n  };\n\n  // This function interpolates the all variables in the given message.\n  I18n.interpolate = function(message, options) {\n    if (message == null) {\n      return message;\n    }\n\n    options = options || {};\n    var matches = message.match(this.placeholder)\n      , placeholder\n      , value\n      , name\n      , regex\n    ;\n\n    if (!matches) {\n      return message;\n    }\n\n    while (matches.length) {\n      placeholder = matches.shift();\n      name = placeholder.replace(this.placeholder, \"$1\");\n\n      if (isSet(options[name])) {\n        value = options[name].toString().replace(/\\$/gm, \"_#$#_\");\n      } else if (name in options) {\n        value = this.nullPlaceholder(placeholder, message, options);\n      } else {\n        value = this.missingPlaceholder(placeholder, message, options);\n      }\n\n      regex = new RegExp(placeholder.replace(/{/gm, \"\\\\{\").replace(/}/gm, \"\\\\}\"));\n      message = message.replace(regex, value);\n    }\n\n    return message.replace(/_#\\$#_/g, \"$\");\n  };\n\n  // Pluralize the given scope using the `count` value.\n  // The pluralized translation may have other placeholders,\n  // which will be retrieved from `options`.\n  I18n.pluralize = function(count, scope, options) {\n    options = this.prepareOptions({count: String(count)}, options)\n    var pluralizer, result;\n\n    result = this.pluralizationLookup(count, scope, options);\n    if (typeof result.translations === \"undefined\" || result.translations == null) {\n      return this.missingTranslation(scope, options);\n    }\n\n    if (typeof result.message !== \"undefined\" && result.message != null) {\n      return this.interpolate(result.message, options);\n    }\n    else {\n      pluralizer = this.pluralization.get(options.locale);\n      return this.missingTranslation(scope + '.' + pluralizer(count)[0], options);\n    }\n  };\n\n  // Return a missing translation message for the given parameters.\n  I18n.missingTranslation = function(scope, options) {\n    //guess intended string\n    if(this.missingBehaviour === 'guess'){\n      //get only the last portion of the scope\n      var s = scope.split('.').slice(-1)[0];\n      //replace underscore with space && camelcase with space and lowercase letter\n      return (this.missingTranslationPrefix.length > 0 ? this.missingTranslationPrefix : '') +\n          s.replace(/_/g,' ').replace(/([a-z])([A-Z])/g,\n          function(match, p1, p2) {return p1 + ' ' + p2.toLowerCase()} );\n    }\n\n    var localeForTranslation = (options != null && options.locale != null) ? options.locale : this.currentLocale();\n    var fullScope           = this.getFullScope(scope, options);\n    var fullScopeWithLocale = [localeForTranslation, fullScope].join(options.separator || this.defaultSeparator);\n\n    return '[missing \"' + fullScopeWithLocale + '\" translation]';\n  };\n\n  // Return a missing placeholder message for given parameters\n  I18n.missingPlaceholder = function(placeholder, message, options) {\n    return \"[missing \" + placeholder + \" value]\";\n  };\n\n  I18n.nullPlaceholder = function() {\n    return I18n.missingPlaceholder.apply(I18n, arguments);\n  };\n\n  // Format number using localization rules.\n  // The options will be retrieved from the `number.format` scope.\n  // If this isn't present, then the following options will be used:\n  //\n  // - `precision`: `3`\n  // - `separator`: `\".\"`\n  // - `delimiter`: `\",\"`\n  // - `strip_insignificant_zeros`: `false`\n  //\n  // You can also override these options by providing the `options` argument.\n  //\n  I18n.toNumber = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.format\")\n      , NUMBER_FORMAT\n    );\n\n    var negative = number < 0\n      , string = toFixed(Math.abs(number), options.precision).toString()\n      , parts = string.split(\".\")\n      , precision\n      , buffer = []\n      , formattedNumber\n      , format = options.format || \"%n\"\n      , sign = negative ? \"-\" : \"\"\n    ;\n\n    number = parts[0];\n    precision = parts[1];\n\n    while (number.length > 0) {\n      buffer.unshift(number.substr(Math.max(0, number.length - 3), 3));\n      number = number.substr(0, number.length -3);\n    }\n\n    formattedNumber = buffer.join(options.delimiter);\n\n    if (options.strip_insignificant_zeros && precision) {\n      precision = precision.replace(/0+$/, \"\");\n    }\n\n    if (options.precision > 0 && precision) {\n      formattedNumber += options.separator + precision;\n    }\n\n    if (options.sign_first) {\n      format = \"%s\" + format;\n    }\n    else {\n      format = format.replace(\"%n\", \"%s%n\");\n    }\n\n    formattedNumber = format\n      .replace(\"%u\", options.unit)\n      .replace(\"%n\", formattedNumber)\n      .replace(\"%s\", sign)\n    ;\n\n    return formattedNumber;\n  };\n\n  // Format currency with localization rules.\n  // The options will be retrieved from the `number.currency.format` and\n  // `number.format` scopes, in that order.\n  //\n  // Any missing option will be retrieved from the `I18n.toNumber` defaults and\n  // the following options:\n  //\n  // - `unit`: `\"$\"`\n  // - `precision`: `2`\n  // - `format`: `\"%u%n\"`\n  // - `delimiter`: `\",\"`\n  // - `separator`: `\".\"`\n  //\n  // You can also override these options by providing the `options` argument.\n  //\n  I18n.toCurrency = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.currency.format\", options)\n      , this.lookup(\"number.format\", options)\n      , CURRENCY_FORMAT\n    );\n\n    return this.toNumber(number, options);\n  };\n\n  // Localize several values.\n  // You can provide the following scopes: `currency`, `number`, or `percentage`.\n  // If you provide a scope that matches the `/^(date|time)/` regular expression\n  // then the `value` will be converted by using the `I18n.toTime` function.\n  //\n  // It will default to the value's `toString` function.\n  //\n  I18n.localize = function(scope, value, options) {\n    options || (options = {});\n\n    switch (scope) {\n      case \"currency\":\n        return this.toCurrency(value, options);\n      case \"number\":\n        scope = this.lookup(\"number.format\", options);\n        return this.toNumber(value, scope);\n      case \"percentage\":\n        return this.toPercentage(value, options);\n      default:\n        var localizedValue;\n\n        if (scope.match(/^(date|time)/)) {\n          localizedValue = this.toTime(scope, value, options);\n        } else {\n          localizedValue = value.toString();\n        }\n\n        return this.interpolate(localizedValue, options);\n    }\n  };\n\n  // Parse a given `date` string into a JavaScript Date object.\n  // This function is time zone aware.\n  //\n  // The following string formats are recognized:\n  //\n  //    yyyy-mm-dd\n  //    yyyy-mm-dd[ T]hh:mm::ss\n  //    yyyy-mm-dd[ T]hh:mm::ss\n  //    yyyy-mm-dd[ T]hh:mm::ssZ\n  //    yyyy-mm-dd[ T]hh:mm::ss+0000\n  //    yyyy-mm-dd[ T]hh:mm::ss+00:00\n  //    yyyy-mm-dd[ T]hh:mm::ss.123Z\n  //\n  I18n.parseDate = function(date) {\n    var matches, convertedDate, fraction;\n    // A date input of `null` or `undefined` will be returned as-is\n    if (date == null) {\n      return date;\n    }\n    // we have a date, so just return it.\n    if (typeof(date) === \"object\") {\n      return date;\n    }\n\n    matches = date.toString().match(/(\\d{4})-(\\d{2})-(\\d{2})(?:[ T](\\d{2}):(\\d{2}):(\\d{2})([\\.,]\\d{1,3})?)?(Z|\\+00:?00)?/);\n\n    if (matches) {\n      for (var i = 1; i <= 6; i++) {\n        matches[i] = parseInt(matches[i], 10) || 0;\n      }\n\n      // month starts on 0\n      matches[2] -= 1;\n\n      fraction = matches[7] ? 1000 * (\"0\" + matches[7]) : null;\n\n      if (matches[8]) {\n        convertedDate = new Date(Date.UTC(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction));\n      } else {\n        convertedDate = new Date(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction);\n      }\n    } else if (typeof(date) == \"number\") {\n      // UNIX timestamp\n      convertedDate = new Date();\n      convertedDate.setTime(date);\n    } else if (date.match(/([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\\d+) (\\d+:\\d+:\\d+) ([+-]\\d+) (\\d+)/)) {\n      // This format `Wed Jul 20 13:03:39 +0000 2011` is parsed by\n      // webkit/firefox, but not by IE, so we must parse it manually.\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse([\n        RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$6, RegExp.$4, RegExp.$5\n      ].join(\" \")));\n    } else if (date.match(/\\d+ \\d+:\\d+:\\d+ [+-]\\d+ \\d+/)) {\n      // a valid javascript format with timezone info\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse(date));\n    } else {\n      // an arbitrary javascript string\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse(date));\n    }\n\n    return convertedDate;\n  };\n\n  // Formats time according to the directives in the given format string.\n  // The directives begins with a percent (%) character. Any text not listed as a\n  // directive will be passed through to the output string.\n  //\n  // The accepted formats are:\n  //\n  //     %a     - The abbreviated weekday name (Sun)\n  //     %A     - The full weekday name (Sunday)\n  //     %b     - The abbreviated month name (Jan)\n  //     %B     - The full month name (January)\n  //     %c     - The preferred local date and time representation\n  //     %d     - Day of the month (01..31)\n  //     %-d    - Day of the month (1..31)\n  //     %H     - Hour of the day, 24-hour clock (00..23)\n  //     %-H/%k - Hour of the day, 24-hour clock (0..23)\n  //     %I     - Hour of the day, 12-hour clock (01..12)\n  //     %-I/%l - Hour of the day, 12-hour clock (1..12)\n  //     %m     - Month of the year (01..12)\n  //     %-m    - Month of the year (1..12)\n  //     %M     - Minute of the hour (00..59)\n  //     %-M    - Minute of the hour (0..59)\n  //     %p     - Meridian indicator (AM  or  PM)\n  //     %P     - Meridian indicator (am  or  pm)\n  //     %S     - Second of the minute (00..60)\n  //     %-S    - Second of the minute (0..60)\n  //     %w     - Day of the week (Sunday is 0, 0..6)\n  //     %y     - Year without a century (00..99)\n  //     %-y    - Year without a century (0..99)\n  //     %Y     - Year with century\n  //     %z/%Z  - Timezone offset (+0545)\n  //\n  I18n.strftime = function(date, format, options) {\n    var options = this.lookup(\"date\", options)\n      , meridianOptions = I18n.meridian()\n    ;\n\n    if (!options) {\n      options = {};\n    }\n\n    options = this.prepareOptions(options, DATE);\n\n    if (isNaN(date.getTime())) {\n      throw new Error('I18n.strftime() requires a valid date object, but received an invalid date.');\n    }\n\n    var weekDay = date.getDay()\n      , day = date.getDate()\n      , year = date.getFullYear()\n      , month = date.getMonth() + 1\n      , hour = date.getHours()\n      , hour12 = hour\n      , meridian = hour > 11 ? 1 : 0\n      , secs = date.getSeconds()\n      , mins = date.getMinutes()\n      , offset = date.getTimezoneOffset()\n      , absOffsetHours = Math.floor(Math.abs(offset / 60))\n      , absOffsetMinutes = Math.abs(offset) - (absOffsetHours * 60)\n      , timezoneoffset = (offset > 0 ? \"-\" : \"+\") +\n          (absOffsetHours.toString().length < 2 ? \"0\" + absOffsetHours : absOffsetHours) +\n          (absOffsetMinutes.toString().length < 2 ? \"0\" + absOffsetMinutes : absOffsetMinutes)\n    ;\n\n    if (hour12 > 12) {\n      hour12 = hour12 - 12;\n    } else if (hour12 === 0) {\n      hour12 = 12;\n    }\n\n    format = format.replace(\"%a\", options.abbr_day_names[weekDay]);\n    format = format.replace(\"%A\", options.day_names[weekDay]);\n    format = format.replace(\"%b\", options.abbr_month_names[month]);\n    format = format.replace(\"%B\", options.month_names[month]);\n    format = format.replace(\"%d\", padding(day));\n    format = format.replace(\"%e\", day);\n    format = format.replace(\"%-d\", day);\n    format = format.replace(\"%H\", padding(hour));\n    format = format.replace(\"%-H\", hour);\n    format = format.replace(\"%k\", hour);\n    format = format.replace(\"%I\", padding(hour12));\n    format = format.replace(\"%-I\", hour12);\n    format = format.replace(\"%l\", hour12);\n    format = format.replace(\"%m\", padding(month));\n    format = format.replace(\"%-m\", month);\n    format = format.replace(\"%M\", padding(mins));\n    format = format.replace(\"%-M\", mins);\n    format = format.replace(\"%p\", meridianOptions[meridian]);\n    format = format.replace(\"%P\", meridianOptions[meridian].toLowerCase());\n    format = format.replace(\"%S\", padding(secs));\n    format = format.replace(\"%-S\", secs);\n    format = format.replace(\"%w\", weekDay);\n    format = format.replace(\"%y\", padding(year));\n    format = format.replace(\"%-y\", padding(year).replace(/^0+/, \"\"));\n    format = format.replace(\"%Y\", year);\n    format = format.replace(\"%z\", timezoneoffset);\n    format = format.replace(\"%Z\", timezoneoffset);\n\n    return format;\n  };\n\n  // Convert the given dateString into a formatted date.\n  I18n.toTime = function(scope, dateString, options) {\n    var date = this.parseDate(dateString)\n      , format = this.lookup(scope, options)\n    ;\n\n    // A date input of `null` or `undefined` will be returned as-is\n    if (date == null) {\n      return date;\n    }\n\n    var date_string = date.toString()\n    if (date_string.match(/invalid/i)) {\n      return date_string;\n    }\n\n    if (!format) {\n      return date_string;\n    }\n\n    return this.strftime(date, format, options);\n  };\n\n  // Convert a number into a formatted percentage value.\n  I18n.toPercentage = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.percentage.format\", options)\n      , this.lookup(\"number.format\", options)\n      , PERCENTAGE_FORMAT\n    );\n\n    return this.toNumber(number, options);\n  };\n\n  // Convert a number into a readable size representation.\n  I18n.toHumanSize = function(number, options) {\n    var kb = 1024\n      , size = number\n      , iterations = 0\n      , unit\n      , precision\n      , fullScope\n    ;\n\n    while (size >= kb && iterations < 4) {\n      size = size / kb;\n      iterations += 1;\n    }\n\n    if (iterations === 0) {\n      fullScope = this.getFullScope(\"number.human.storage_units.units.byte\", options);\n      unit = this.t(fullScope, {count: size});\n      precision = 0;\n    } else {\n      fullScope = this.getFullScope(\"number.human.storage_units.units.\" + SIZE_UNITS[iterations], options);\n      unit = this.t(fullScope);\n      precision = (size - Math.floor(size) === 0) ? 0 : 1;\n    }\n\n    options = this.prepareOptions(\n        options\n      , {unit: unit, precision: precision, format: \"%n%u\", delimiter: \"\"}\n    );\n\n    return this.toNumber(size, options);\n  };\n\n  I18n.getFullScope = function(scope, options) {\n    options = options || {};\n\n    // Deal with the scope as an array.\n    if (isArray(scope)) {\n      scope = scope.join(options.separator || this.defaultSeparator);\n    }\n\n    // Deal with the scope option provided through the second argument.\n    //\n    //    I18n.t('hello', {scope: 'greetings'});\n    //\n    if (options.scope) {\n      scope = [options.scope, scope].join(options.separator || this.defaultSeparator);\n    }\n\n    return scope;\n  };\n  /**\n   * Merge obj1 with obj2 (shallow merge), without modifying inputs\n   * @param {Object} obj1\n   * @param {Object} obj2\n   * @returns {Object} Merged values of obj1 and obj2\n   *\n   * In order to support ES3, `Object.prototype.hasOwnProperty.call` is used\n   * Idea is from:\n   * https://stackoverflow.com/questions/8157700/object-has-no-hasownproperty-method-i-e-its-undefined-ie8\n   */\n  I18n.extend = function ( obj1, obj2 ) {\n    if (typeof(obj1) === \"undefined\" && typeof(obj2) === \"undefined\") {\n      return {};\n    }\n    return merge(obj1, obj2);\n  };\n\n  // Set aliases, so we can save some typing.\n  I18n.t = I18n.translate.bind(I18n);\n  I18n.l = I18n.localize.bind(I18n);\n  I18n.p = I18n.pluralize.bind(I18n);\n\n  return I18n;\n}));\n","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return da;\n\n})));\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\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","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):F=0<a?Math.floor(1E3/a):5};var H=new MessageChannel,I=H.port2;H.port1.onmessage=\nfunction(){if(null!==D){var a=exports.unstable_now();G=a+F;try{D(!0,a)?I.postMessage(null):(C=!1,D=null)}catch(b){throw I.postMessage(null),b;}}else C=!1};f=function(a){D=a;C||(C=!0,I.postMessage(null))};g=function(a,b){E=y(function(){a(exports.unstable_now())},b)};h=function(){z(E);E=-1}}function J(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<K(e,b))a[d]=b,a[c]=e,c=d;else break a}}function L(a){a=a[0];return void 0===a?null:a}\nfunction M(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0<e?d+e:d;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v3.0.0\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports) {\n\n\tmodule.exports = (function() {\n\n\t  'use strict';\n\n\t  /*\n\t    ---------------\n\t    variables\n\t    ---------------\n\t  */\n\n\t  // array of actively pressed keys\n\t  var activeKeys = [];\n\n\t  // cache document.body\n\t  var body;\n\n\t  // boolean: true if touch buffer timer is running\n\t  var buffer = false;\n\n\t  // the last used input type\n\t  var currentInput = null;\n\n\t  // form input types\n\t  var formInputs = [\n\t    'button',\n\t    'input',\n\t    'select',\n\t    'textarea'\n\t  ];\n\n\t  // detect version of mouse wheel event to use\n\t  // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t  var mouseWheel = detectWheel();\n\n\t  // list of modifier keys commonly used with the mouse and\n\t  // can be safely ignored to prevent false keyboard detection\n\t  var ignoreMap = [\n\t    16, // shift\n\t    17, // control\n\t    18, // alt\n\t    91, // Windows key / left Apple cmd\n\t    93  // Windows menu / right Apple cmd\n\t  ];\n\n\t  // mapping of events to input types\n\t  var inputMap = {\n\t    'keydown': 'keyboard',\n\t    'keyup': 'keyboard',\n\t    'mousedown': 'mouse',\n\t    'mousemove': 'mouse',\n\t    'MSPointerDown': 'pointer',\n\t    'MSPointerMove': 'pointer',\n\t    'pointerdown': 'pointer',\n\t    'pointermove': 'pointer',\n\t    'touchstart': 'touch'\n\t  };\n\n\t  // add correct mouse wheel event mapping to `inputMap`\n\t  inputMap[detectWheel()] = 'mouse';\n\n\t  // array of all used input types\n\t  var inputTypes = [];\n\n\t  // mapping of key codes to a common name\n\t  var keyMap = {\n\t    9: 'tab',\n\t    13: 'enter',\n\t    16: 'shift',\n\t    27: 'esc',\n\t    32: 'space',\n\t    37: 'left',\n\t    38: 'up',\n\t    39: 'right',\n\t    40: 'down'\n\t  };\n\n\t  // map of IE 10 pointer events\n\t  var pointerMap = {\n\t    2: 'touch',\n\t    3: 'touch', // treat pen like touch\n\t    4: 'mouse'\n\t  };\n\n\t  // touch buffer timer\n\t  var timer;\n\n\n\t  /*\n\t    ---------------\n\t    functions\n\t    ---------------\n\t  */\n\n\t  // allows events that are also triggered to be filtered out for `touchstart`\n\t  function eventBuffer(event) {\n\t    clearTimer();\n\t    setInput(event);\n\n\t    buffer = true;\n\t    timer = window.setTimeout(function() {\n\t      buffer = false;\n\t    }, 650);\n\t  }\n\n\t  function bufferedEvent(event) {\n\t    if (!buffer) setInput(event);\n\t  }\n\n\t  function clearTimer() {\n\t    window.clearTimeout(timer);\n\t  }\n\n\t  function setInput(event) {\n\t    var eventKey = key(event);\n\t    var value = inputMap[event.type];\n\t    if (value === 'pointer') value = pointerType(event);\n\n\t    // don't do anything if the value matches the input type already set\n\t    if (currentInput !== value) {\n\t      var activeElement = document.activeElement.nodeName.toLowerCase();\n\n\t      if (\n\t        (\n\t          // only if the user flag to allow input switching\n\t          // while interacting with form fields isn't set\n\t          !body.hasAttribute('data-whatinput-formswitching') &&\n\n\t          // support for legacy keyword\n\t          !body.hasAttribute('data-whatinput-formtyping') &&\n\n\t          // only if currentInput has a value\n\t          currentInput &&\n\n\t          formInputs.indexOf(activeElement) > -1\n\t        ) || (\n\t          // ignore modifier keys\n\t          ignoreMap.indexOf(eventKey) > -1\n\t        )\n\t      ) {\n\t        // ignore keyboard typing and do nothing\n\t      } else {\n\t        switchInput(value);\n\t      }\n\t    }\n\n\t    if (value === 'keyboard') logKeys(eventKey);\n\t  }\n\n\t  function switchInput(string) {\n\t    currentInput = string;\n\t    body.setAttribute('data-whatinput', currentInput);\n\n\t    if (inputTypes.indexOf(currentInput) === -1) inputTypes.push(currentInput);\n\t  }\n\n\t  function key(event) {\n\t    return (event.keyCode) ? event.keyCode : event.which;\n\t  }\n\n\t  function target(event) {\n\t    return event.target || event.srcElement;\n\t  }\n\n\t  function pointerType(event) {\n\t    if (typeof event.pointerType === 'number') {\n\t      return pointerMap[event.pointerType];\n\t    } else {\n\t      return (event.pointerType === 'pen') ? 'touch' : event.pointerType; // treat pen like touch\n\t    }\n\t  }\n\n\t  // keyboard logging\n\t  function logKeys(eventKey) {\n\t    if (activeKeys.indexOf(keyMap[eventKey]) === -1 && keyMap[eventKey]) activeKeys.push(keyMap[eventKey]);\n\t  }\n\n\t  function unLogKeys(event) {\n\t    var eventKey = key(event);\n\t    var arrayPos = activeKeys.indexOf(keyMap[eventKey]);\n\n\t    if (arrayPos !== -1) activeKeys.splice(arrayPos, 1);\n\t  }\n\n\t  function bindEvents() {\n\t    body = document.body;\n\n\t    // pointer events (mouse, pen, touch)\n\t    if (window.PointerEvent) {\n\t      body.addEventListener('pointerdown', bufferedEvent);\n\t      body.addEventListener('pointermove', bufferedEvent);\n\t    } else if (window.MSPointerEvent) {\n\t      body.addEventListener('MSPointerDown', bufferedEvent);\n\t      body.addEventListener('MSPointerMove', bufferedEvent);\n\t    } else {\n\n\t      // mouse events\n\t      body.addEventListener('mousedown', bufferedEvent);\n\t      body.addEventListener('mousemove', bufferedEvent);\n\n\t      // touch events\n\t      if ('ontouchstart' in window) {\n\t        body.addEventListener('touchstart', eventBuffer);\n\t      }\n\t    }\n\n\t    // mouse wheel\n\t    body.addEventListener(mouseWheel, bufferedEvent);\n\n\t    // keyboard events\n\t    body.addEventListener('keydown', eventBuffer);\n\t    body.addEventListener('keyup', eventBuffer);\n\t    document.addEventListener('keyup', unLogKeys);\n\t  }\n\n\n\t  /*\n\t    ---------------\n\t    utilities\n\t    ---------------\n\t  */\n\n\t  // detect version of mouse wheel event to use\n\t  // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t  function detectWheel() {\n\t    return mouseWheel = 'onwheel' in document.createElement('div') ?\n\t      'wheel' : // Modern browsers support \"wheel\"\n\n\t      document.onmousewheel !== undefined ?\n\t        'mousewheel' : // Webkit and IE support at least \"mousewheel\"\n\t        'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox\n\t  }\n\n\n\t  /*\n\t    ---------------\n\t    init\n\n\t    don't start script unless browser cuts the mustard,\n\t    also passes if polyfills are used\n\t    ---------------\n\t  */\n\n\t  if (\n\t    'addEventListener' in window &&\n\t    Array.prototype.indexOf\n\t  ) {\n\n\t    // if the dom is already ready already (script was placed at bottom of <body>)\n\t    if (document.body) {\n\t      bindEvents();\n\n\t    // otherwise wait for the dom to load (script was placed in the <head>)\n\t    } else {\n\t      document.addEventListener('DOMContentLoaded', bindEvents);\n\t    }\n\t  }\n\n\n\t  /*\n\t    ---------------\n\t    api\n\t    ---------------\n\t  */\n\n\t  return {\n\n\t    // returns string: the current input type\n\t    ask: function() { return currentInput; },\n\n\t    // returns array: currently pressed keys\n\t    keys: function() { return activeKeys; },\n\n\t    // returns array: all the detected input types\n\t    types: function() { return inputTypes; },\n\n\t    // accepts string: manually set the input type\n\t    set: switchInput\n\t  };\n\n\t}());\n\n\n/***/ }\n/******/ ])\n});\n;","module.exports = Modernizr;","module.exports = jQuery;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n"],"names":["module","exports","commonjsGlobal","globalThis","window","g","self","getDefaultExportFromCjs","x","__esModule","Object","prototype","hasOwnProperty","call","getAugmentedNamespace","n","f","default","a","apply","this","arguments","defineProperty","value","keys","forEach","k","d","getOwnPropertyDescriptor","get","enumerable","browser$1","src","events","util$1","UNKNOWN_FUNCTION","parse","stackString","split","reduce","stack","line","parseResult","parseChrome","parseWinjs","parseGecko","parseNode","parseJSC","push","chromeRe","chromeEvalRe","parts","exec","isNative","indexOf","isEval","submatch","file","methodName","lineNumber","column","winjsRe","geckoRe","geckoEvalRe","javaScriptCoreRe","nodeRe","require$$0$1","freeze","__proto__","__createBinding","create","o","m","k2","undefined","desc","writable","configurable","__setModuleDefault","v","__importStar","mod","result","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","Promise","reject","fulfilled","step","next","e","rejected","done","then","__generator","body","y","t","_","label","sent","trys","ops","verb","Symbol","iterator","op","TypeError","pop","length","logDeprecatedMethod","globalThisOrWindow","isBrowserConfig","clone","formatCGIData","filterUrl","filter","generateStackTrace","endpoint","instrumentConsole","instrument","isErrorObject","makeNotice","logger","sanitize","shallowClone","runAfterNotifyHandlers","runBeforeNotifyHandlers","getSourceForBacktrace","getCauses","calculateBacktraceShift","DEFAULT_BACKTRACE_SHIFT","makeBacktrace","objectIsExtensible","objectIsEmpty","mergeNotice","merge","stackTraceParser","obj1","obj2","notice1","notice2","context","obj","isExtensible","filterHbSourceCode","console","backtrace","map","method","number","splice","err","debug","isFrameFromHbSourceCode","frame","hasHbFile","hasHbMethod","toLowerCase","shift","i","nextFrame","notice","cause","causes","class","name","message","getSourceFileHandler","index","trace","fileContent","_a","getSourceCodeSnippet","handlers","results","len","handlerResult","handler","error","afterNotify","maxDepth","seenObjects","seen","canSerialize","typeOfObj","test","serialize","depth","toString","Array","isArray","safeSerialize","ret","concat","client","log","args","_i","config","unshift","info","warn","thing","String","Error","object","replacement","original","__hb_original","_e","_consoleAlreadyInstrumented","listeners","_window","level","slice","listener","Function","base","path","trim","replace","maxStackSize","curr","callee","RegExp","$1","caller","join","filters","is","newObj","filterMatch","key","type","klass","url","query","pair","vars","prefix","formattedVars","formattedKey","toUpperCase","JSON","stringify","THRESHOLD_COLUMN_NUMBER","THRESHOLD_LINE_LENGTH","THRESHOLD_FILE_SIZE","getThresholdExceededSnippet","fileData","columnNumber","sourceRadius","lines","targetLine","end","async","_deprecatedMethodCalls","oldMethod","newMethod","callCountThreshold","msg","util_1$4","default_1$4","shouldReloadOnConfigure","load","sendEventsToInsights","eventsEnabled","data","severity","event","store","GlobalStore","util_1$3","contents","breadcrumbsLimit","available","getContents","setContext","addBreadcrumb","breadcrumb","breadcrumbs","clear","run","callback","throttled_events_logger","NdJson","item","require$$0","defaults","CONFIG","apiKey","appEndpoint","environment","hostname","projectRoot","component","action","revision","reportData","breadcrumbsEnabled","maxBreadcrumbs","maxObjectDepth","developmentEnvironments","tags","enableUncaught","enableUnhandledRejection","afterUncaught","__plugins","__assign$2","__assign","assign","s","p","__awaiter$2","__generator$2","ThrottledEventsLogger","json_nd_1","util_1$2","defaults_1$1","transport","queue","isProcessing","originalLogger","configure","opts","payload","processQueue","flushAsync","send","_this","setTimeout","catch","eventsData","makeHttpRequest","headers","_b","_c","_d","__assign$1","__awaiter$1","__generator$1","Client","util_1$1","store_1","throttled_events_logger_1","defaults_1","TAG_SEPARATOR","NOT_BLANK","__pluginsLoaded","__store","__beforeNotifyHandlers","__afterNotifyHandlers","__notifier","version","__initStore","__transport","__eventsLogger","getVersion","getNotifier","setNotifier","notifier","loadPlugins","plugin","beforeNotify","resetContext","notify","noticeable","extra","sourceCodeData","preConditionsResult","__runPreconditions","__send","_err","notifyAsync","partialNotice","originalAfterNotify","noticeTags","__constructTags","contextTags","configTags","uniqueTags","metadata","category","timestamp","Date","toISOString","logEvent","event_type","ts","__getBreadcrumbs","__getContext","__developmentMode","includes","__buildPayload","cgiData","enabled","trail","__breadcrumbs","fingerprint","request","cgi_data","params","session","server","project_root","environment_name","time","toUTCString","details","tag","preConditionError","beforeNotifyResult","some","allSettled","status","originalBacktrace","__getSourceFileHandler","sourcePerTrace","source","res","statusCode","uuid","id","noticeUrl","types","__exportStar","__importDefault","Plugins","Defaults","Util","Types","events_1","client_1","util","preferCatch","encodeCookie","decodeCookie","localURLPathname","parseURL","nativeFetch","stringTextOfElement","stringSelectorOfElement","stringNameOfElement","globalThisOrWindow$7","element","tagName","stringClassNames","getAttribute","className","attrName","attr","siblings","getSiblings","parentNode","parentName","text","textContent","innerText","truncate","global","fetch","document","sandbox","createElement","style","display","head","appendChild","contentWindow","removeChild","func","match","protocol","host","pathname","parsed","parsedDocURL","URL","string","cookies","nodes","childNodes","siblings_1","node","substr","atob","ErrorEvent","colno","onerror","onError","ignoreNextOnError","currentTimeout","core_1$6","instrument$4","globalThisOrWindow$6","ignoreOnError","clearTimeout","col","onunhandledrejection","core_1$5","instrument$3","globalThisOrWindow$5","default_1$3","promiseRejectionEvent","reason","fileName","stackFallback","core_1$4","util_1","sanitize$1","instrument$2","globalThisOrWindow$4","default_1$2","inspectArray","addEventListener","selector","target","location","XMLHttpRequest","xhr","rawUrl","__hb_xhr","onreadystatechangeHandler","readyState","status_code","onreadystatechange","input","Request","response","lastHref","href","_event","recordUrlChange","history","historyWrapper","from","to","timers","core_1$3","instrument$1","globalThisOrWindow$3","default_1$1","instrumentTimer","wrapOpts","delay","args_1","__wrap","event_listeners","core_1$2","globalThisOrWindow$2","default_1","prop","useCapture","wantsUntrusted","handleEvent","BrowserTransport","core_1$1","globalThisOrWindow$1","objectEntries","entries","defaultHeaders","options","headerArray","requestInit","feedbackForm","BrowserFeedbackForm","scriptUrl","appendUserFeedbackTag","script","setAttribute","onLoad","onload","isUserFeedbackUrlAlreadyVisible","feedbackScriptUrl","scripts","show","lastNoticeId","userFeedbackEndpoint","noticeId","extendStatics","__extends","b","setPrototypeOf","__","constructor","getUserFeedbackScriptUrl","core_1","onerror_1","onunhandledrejection_1","breadcrumbs_1","timers_1","event_listeners_1","transport_1","feedback_form_1","getProjectRoot","majorMinorVersion","Honeybadger","_super","maxErrors","userAgent","__errorsSent","__lastWrapErr","__lastNoticeId","__exceedsMaxErrors","__incrementErrorsCount","_error","resetMaxErrors","factory","checkIn","_id","showUserFeedbackForm","getUserFeedbackSubmitUrl","cookiesObject","HTTP_USER_AGENT","HTTP_REFERER","HTTP_COOKIE","navigator","referrer","___hb","NOTIFIER","singleton","core_2","DefaultErrorComponent","HoneybadgerErrorBoundary","Component","props","super","state","errorOccurred","getDerivedStateFromError","componentDidMount","honeybadger","_notice","showUserFeedbackFormOnError","componentDidCatch","errorInfo","setState","getErrorComponent","ErrorComponent","render","children","defaultProps","root","lib","currency","symbol","format","decimal","thousand","precision","grouping","nativeMap","nativeIsArray","isString","charCodeAt","isObject","defs","j","checkPrecision","val","Math","round","abs","isNaN","checkCurrencyFormat","settings","pos","neg","zero","unformat","regex","unformatted","parseFloat","toFixed","power","pow","formatNumber","usePrecision","negative","parseInt","formatMoney","formats","formatColumn","list","padAfterSymbol","maxLength","formatted","fVal","accounting","locales","React","i18nSetup","I18n","__LOCALE__","I18N_RUNTIME_TRANSLATIONS","originalMissingTranslation","scope","fallbackLocales","i18nFallbacks","locale","__usedFallbackLocales","nextFallbackLocaleIndex","exposeComponents","mountableComponents","Venuu","REACT_COMPONENTS","exposeLazyComponents","REACT_LAZY_COMPONENTS","mountComponentFromNode","componentName","componentId","normalComponent","loadLazyComponent","mountComponent","REACT_PROPS","ReactDOM","mountAllComponents","reactNodes","querySelectorAll","moment","getCookies","all","cookie","substring","decodeURIComponent","cookieCategories","consentGivenForCategory","rawValue","cookieValue","unescape","cookiePairs","cookieArr","oneOf","getConsentedCookieCategories","byteToHex","unsafeStringify","arr","offset","Uint8Array","z","ROTL","v5","hashfunc","generateUUID","namespace","buf","_namespace","str","encodeURIComponent","bytes","stringToBytes","set","DNS","v35","K","H","l","N","ceil","M","Uint32Array","floor","W","c","T","FIRST_16_BYTES","REMAINING_STRING","extractRemarketingDetails","nullable","record","page","loadAnalytics","jitsuDomain","retrieve","jitsuBrowserWriteKey","jitsuScriptTag","anonymousId","userId","search","jitsuOnLoadCallback","jitsu","setAnonymousId","firstScriptTag","getElementsByTagName","insertBefore","extractUserTrackingData","withDefault","email","customer_type","emailIdFromUrl","rawEmailDistinctId","$","param","userEmail","uuidv5","generateUserId","identifyUser","userIdFromUrl","distinctIdFromUrl","emailUserIdFromUrl","userIdFromCookie","customerType","commonTraits","currentSite","identify","jitsuQ","traits","Source","ready","socialMediaInitCondition","controller","fbAsyncInit","FB","init","xfbml","js","fjs","getElementById","initializeFoundation","sidebarMenuHeight","outerHeight","BLANK_RE","foundation","active_class","destination_threshold","throttle_delay","tooltip","touch_close_text","abide","validators","valuePlaceholder","el","required","originalTopBarToggle","Foundation","libs","topbar","toggle","isTopNavigationExpanded","first","hasClass","toggleClass","toggleSidebarNavigationBasedOnTopbarVisibility","$sidebar","$footer","$wrapper","wrapperWidth","outerWidth","waypoint","stuckClass","css","width","direction","top","position","removeAttr","addClass","resize","satisfiesMediaQuery","waypoints","removeClass","on","ConsoleApiName","globalConsole","originalConsoleMethods","PREFIX","bind","DOCS_ORIGIN","DOCS_TROUBLESHOOTING","MORE_DETAILS","catchUserErrors","fn","errorMsg","onMonitorErrorCollected","__spreadArray","pack","ar","debugMode","setDebugMode","newDebugMode","monitor","callMonitored","displayIfDebugEnabled","candidate","arrayLike","array","Set","find","predicate","objectValues","startsWith","toAssign","getGlobalObject","globalObject","_dd_temp_","ONE_KIBI_BYTE","ONE_MEBI_BYTE","HAS_MULTI_BYTES_CHARACTERS","computeBytesCount","TextEncoder","encode","Blob","size","getZoneJsOriginalValue","browserWindow","Zone","__symbol__","timeoutId","throttle","wait","pendingExecutionWithParameters","pendingTimeoutId","needLeadingExecution","leading","needTrailingExecution","trailing","inWaitPeriod","throttled","parameters","cancel","noop","jsonStringify","replacer","space","restoreObjectPrototypeToJson","detachToJsonMethod","restoreArrayPrototypeToJson","restoreValuePrototypeToJson","getPrototypeOf","restoreValueToJson","objectToJson","toJSON","objectHasValue","isEmptyObject","CUSTOMER_DATA_BYTES_LIMIT","CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT","BYTES_COMPUTATION_THROTTLING_DELAY","createCustomerDataTrackerManager","compressionStatus","customerDataTrackers","Map","alreadyWarned","checkCustomerDataLimit","initialBytesCount","bytesCountLimit","bytesCount","tracker","getBytesCount","displayCustomerDataLimitReachedWarning","createDetachedTracker","createCustomerDataTracker","getOrCreateTracker","has","setCompressionStatus","newCompressionStatus","getCompressionStatus","stop","bytesCountCache","computeBytesCountThrottled","cancelComputeBytesCount","resetBytesCount","updateCustomerData","resetCustomerData","getType","mergeInto","destination","circularReferenceChecker","WeakSet","set_1","hasAlreadyBeenSeen","add","createCircularReferenceChecker","getTime","flags","ignoreCase","multiline","sticky","unicode","merged_1","merged","deepClone","combine","sources","sources_1","SANITIZE_DEFAULT_MAX_CHARACTER_COUNT","JSON_PATH_ROOT_ELEMENT","KEY_DECORATION_LENGTH","maxCharacterCount","containerQueue","visitedObjectsWithPath","WeakMap","sanitizedData","sanitizeProcessor","serializedSanitizedData","accumulatedCharacterCount","containerToProcess","separatorLength","targetData","warnOverCharacterLimit","parentPath","sourceToSanitize","tryToApplyToJSON","description","sanitizePrimitivesAndFunctions","sanitizedSource","Event","isTrusted","sanitizeObjects","sourceAsObject","currentPath","changeType","Observable","onFirstSubscribe","observers","subscribe","onLastUnsubscribe","unsubscribe","other","observer","mergeObservables","observables","globalObservable","subscriptions","observable","subscription","createContextManager","customerDataTracker","changeObservable","contextManager","getContext","newContext","clearContext","setContextProperty","property","removeContextProperty","TrackingConsent","GRANTED","NOT_GRANTED","configuration","eventTarget","eventName","addEventListeners","eventNames","once","capture","passive","listenerWithMonitor","__ddIsTrusted","allowUntrustedEvents","listenerTarget","EventTarget","remove","CONTEXT_STORE_KEY_PREFIX","storageListeners","storeContextManager","productKey","customerDataType","storageKey","buildStorageKey","getFromStorage","rawContext","localStorage","getItem","setItem","createIdentityEncoder","output","outputBytesCount","isAsync","isEmpty","write","additionalEncodedBytesCount","finish","finishSync","rawBytesCount","pendingData","estimateEncodedBytesCount","computeStackTrace","ex","stackProperty","tryToGetString","exString","stackFrame","CHROME_LINE_RE","CHROME_EVAL_RE","parseChromeLine","CHROME_ANONYMOUS_FUNCTION_RE","parseChromeAnonymousLine","WINJS_LINE_RE","parseWinLine","GECKO_LINE_RE","GECKO_EVAL_RE","parseGeckoLine","fileUrl","filePosition","computeStackTraceFromOnErrorMessage","messageObj","ERROR_TYPES_RE","tryToParseMessage","createHandlingStack","formattedStack","stackTrace","toStackTraceString","formatErrorMessage","ExperimentalFeature","NO_ERROR_STACK_PRESENT_MESSAGE","computeRawError","originalError","handlingStack","startClocks","nonErrorPrefix","handling","isErrorInstance","isError","computeMessage","hasUsableStack","flattenErrorCauses","tryToGetFingerprint","dd_fingerprint","parentSource","currentError","enabledExperimentalFeatures","initFeatureFlags","enableExperimentalFeatures","flag","isExperimentalFeatureEnabled","featureName","getExperimentalFeatures","INTAKE_SITE_STAGING","INTAKE_SITE_FED_STAGING","INTAKE_SITE_US1","INTAKE_SITE_EU1","PCI_INTAKE_HOST_US1","INTAKE_URL_PARAMETERS","performDraw","threshold","random","num","decimals","isNumber","navigationStart","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_YEAR","relativeToClocks","relative","timeStamp","getCorrectedTimeStamp","relativeTime","correctedOrigin","dateNow","performance","now","getNavigationStart","addDuration","getTimeStamp","toServerDuration","duration","timeStampNow","relativeNow","clocksNow","clocksOrigin","elapsed","start","getRelativeTime","timing","sendToExtension","__ddBrowserSdkExtensionCallback","getConnectivity","onLine","interfaces","connection","effective_type","effectiveType","removeItem","BUFFER_LIMIT","buffer","drain","arg","TelemetryType","usage","ALLOWED_FRAME_URLS","TELEMETRY_EXCLUDED_SITES","preStartTelemetryBuffer","onRawTelemetryEventCollected","startTelemetry","telemetryService","contextProvider","alreadySentEvents","telemetryEnabled","site","telemetrySampleRate","telemetryEnabledPerType","telemetryConfigurationSampleRate","telemetryUsageSampleRate","runtimeEnvInfo","is_local_file","is_worker","rawEvent","stringifiedEvent","maxTelemetryEventsPerPage","event_1","date","service","_dd","format_version","telemetry","runtime_env","connectivity","sdk_setup","experimental_features","toTelemetryEvent","addTelemetryError","setContextProvider","provider","addTelemetryDebug","kind","scrubCustomerFrames","formatError","addTelemetryUsage","allowedFrameUrl","sanitizeUser","newUser","user","displayAlreadyInitializedError","sdkName","initConfiguration","silentMultipleInit","placeholder","COMMA_SEPARATED_KEY_VALUE","findCommaSeparatedValue","rawString","lastIndex","safeTruncate","suffix","lastChar","correctedLength","startVitalCollection","lifeCycle","pageStateHistory","customVitalsState","addDurationVital","vital","wasInPageStateDuringPeriod","isValid","valueComputedBySdk","rawRumEvent","computed_value","startTime","customerContext","domainContext","processVital","startDurationVital","stopDurationVital","nameOrRef","vitalsByName","vitalsByReference","reference","__dd_vital_reference","stopCallback","vitalStart","stopOptions","stopClocks","buildDurationVital","delete","getEventBridge","eventBridgeGlobal","DatadogEventBridge","getCapabilities","getPrivacyLevel","getAllowedWebViewHosts","eventType","viewId","view","bridgeSupports","capability","bridge","canUseEventBridge","currentHost","allowedHost","instrumentMethod","targetPrototype","onPreCall","computeHandlingStack","stopped","instrumentation","postCallCallback","onPostCall","instrumentSetter","after","originalDescriptor","stoppedInstrumentation","instrumentationWrapper","normalizeUrl","buildUrl","supportedURL","isURLSupported","originalURL","getSupportedUrl","doc","anchorElement","baseElement","implementation","createHTMLDocument","fetchObservable","initCookieParsed","getCurrentSiteCache","initFetchObservable","methodFromParams","responsePromise","startContext","reportFetch","partialContext","responseType","isAborted","signal","aborted","DOMException","code","ABORT_ERR","afterSend","beforeSend","setCookie","expireDelay","setTime","expires","sameSite","crossSite","domain","secure","partitioned","getCookie","getInitCookie","findCommaSeparatedValues","deleteCookie","browserCache","SYNTHETICS_TEST_ID_COOKIE_NAME","SYNTHETICS_RESULT_ID_COOKIE_NAME","SYNTHETICS_INJECTS_RUM_COOKIE_NAME","willSyntheticsInjectRum","Boolean","_DATADOG_SYNTHETICS_INJECTS_RUM","detectBrowserCached","chrome","vendor","documentMode","detectBrowser","SESSION_STORE_KEY","SESSION_TIME_OUT_DELAY","SESSION_EXPIRATION_DELAY","SESSION_COOKIE_EXPIRATION_DELAY","SessionPersistence","COOKIE","LOCAL_STORAGE","SESSION_ENTRY_REGEXP","SESSION_ENTRY_SEPARATOR","EXPIRED","getExpiredSessionState","previousSessionState","expiredSessionState","isExpired","ANONYMOUS_USER_TRACKING","isSessionInNotStartedState","isSessionStarted","isSessionInExpiredState","sessionState","created","Number","expire","expandSessionState","toSessionString","toSessionState","sessionString","isValidSessionString","entry","matches","OLD_SESSION_COOKIE_NAME","OLD_RUM_COOKIE_NAME","OLD_LOGS_COOKIE_NAME","RUM_SESSION_KEY","LOGS_SESSION_KEY","selectCookieStrategy","cookieOptions","useSecureSessionCookie","usePartitionedCrossSiteSessionCookie","useCrossSiteSessionCookie","trackSessionAcrossSubdomains","testCookieName","domainLevels","candidateDomain","getCurrentSite","buildCookieOptions","testCookieValue","isCookieCorrectlySet","areCookiesAuthorized","initCookieStrategy","cookieStore","isLockEnabled","persistSession","retrieveSession","retrieveSessionCookie","expireSession","expireSessionCookie","cookieStoreStrategy","oldSessionId","oldRumType","oldLogsType","tryOldCookiesMigration","LOCAL_STORAGE_TEST_KEY","selectLocalStorageStrategy","testKey","retrievedId","persistInLocalStorage","retrieveSessionFromLocalStorage","expireSessionFromLocalStorage","ongoingOperations","LOCK_RETRY_DELAY","LOCK_MAX_TRIES","bufferedOperations","processSessionStoreOperations","operations","sessionStoreStrategy","numberOfRetries","persistWithLock","lock","currentLock","retrieveStore","currentStore","retryLater","processedSession","process","sessionStore","currentNumberOfRetries","nextOperations","STORAGE_POLL_DELAY","selectSessionStoreStrategyType","sessionPersistence","sessionStoreStrategyType","allowFallbackToLocalStorage","startSessionStore","computeSessionState","sessionCache","renewObservable","expireObservable","sessionStateUpdateObservable","watchSessionTimeoutId","synchronizeSession","startSession","synchronizedSession","trackingType","isTracked","expandOrRenewSessionState","hasSessionInCache","renewSessionInCache","throttledExpandOrRenewSession","cancelExpandOrRenewSession","isSessionInCacheOutdated","previousState","newState","expandOrRenewSession","expandSession","getSession","restartSession","updateSessionState","partialSessionState","createEndpointBuilder","trackType","configurationTags","buildUrlWithParameters","proxy","normalizedProxyUrl_1","internalAnalyticsSubdomain","usePciIntake","domainParts","extension","buildEndpointHost","createEndpointUrlWithParametersBuilder","build","api","clientToken","retry","encoding","count","lastFailureStatus","reverse","buildEndpointParameters","urlPrefix","TAG_SIZE_LIMIT","buildTag","valueSizeLimit","supportUnicodePropertyEscapes","hasForbiddenCharacters","sanitizedValue","computeTransportConfiguration","env","datacenter","buildTags","endpointBuilders","logsEndpointBuilder","rumEndpointBuilder","sessionReplayEndpointBuilder","computeEndpointBuilders","replicaConfiguration","replica","replicaEndpointBuilders","applicationId","computeReplicaConfiguration","createIdentifierImplementationCache","DefaultPrivacyLevel","ALLOW","MASK","MASK_USER_INPUT","TraceContextInjection","ALL","SAMPLED","isSampleRate","sampleRate","validateAndBuildConfiguration","sessionSampleRate","trackingConsent","storeContextsAcrossPages","batchBytesLimit","eventRateLimiterThreshold","flushTimeout","batchMessagesLimit","messageBytesLimit","isMatchOption","itemType","matchList","useStartsWith","getCrypto","crypto","msCrypto","createSpanIdentifier","createIdentifier","bits","CONSISTENT_TRACE_SAMPLING","getRandomValues","BigUint64Array","areBigIntIdentifiersSupported","createIdentifierUsingBigInt","createIdentifierUsingUint32Array","BigInt","radix","high","low","toPaddedHexadecimalString","traceId","clearTracingIfNeeded","spanId","traceSampled","injectHeadersIfTracingAllowed","sessionManager","inject","findTrackedSession","tracingOption","allowedTracingUrls","identifier","knuthFactor","twoPow64","isTraceSampled","traceSampleRate","traceContextInjection","propagatorTypes","tracingHeaders","propagatorType","traceparent","b3","makeTracingHeaders","DEFAULT_PROPAGATOR_TYPES","validateAndBuildRumConfiguration","sessionReplaySampleRate","excludedActivityUrls","tracingOptions","option","expectedItem","validateAndBuildTracingOptions","baseConfiguration","actionNameAttribute","startSessionReplayRecordingManually","rulePsr","workerUrl","compressIntakeRequests","trackUserInteractions","trackViewsManually","trackResources","trackLongTasks","subdomain","defaultPrivacyLevel","enablePrivacyForActionName","customerDataTelemetrySampleRate","plugins","getSelectedTracingPropagators","usedTracingPropagators","REMOTE_CONFIGURATION_URL","fetchAndApplyRemoteConfiguration","responseText","displayRemoteConfigurationFetchingError","open","remoteConfigurationId","fetchRemoteConfiguration","remoteInitConfiguration","applyRemoteConfiguration","createPreStartStrategy","getCommonContext","trackingConsentState","doStartRum","firstStartViewCall","deflateWorker","cachedInitConfiguration","cachedConfiguration","ignoreInitIfSyntheticsWillInjectRum","startDeflateWorker","bufferApiCalls","trackingConsentStateSubscription","tryStartRum","isGranted","initialViewOptions","startRumResult","doInit","eventBridgeAvailable","overrideInitConfigurationForBridge","addTelemetryConfiguration","baseSerializedConfiguration","session_sample_rate","telemetry_sample_rate","telemetry_configuration_sample_rate","telemetry_usage_sample_rate","use_before_send","use_cross_site_session_cookie","use_partitioned_cross_site_session_cookie","use_secure_session_cookie","use_proxy","silent_multiple_init","track_session_across_subdomains","session_persistence","allow_fallback_to_local_storage","store_contexts_across_pages","allow_untrusted_events","tracking_consent","session_replay_sample_rate","start_session_replay_recording_manually","trace_sample_rate","trace_context_injection","action_name_attribute","use_allowed_tracing_urls","selected_tracing_propagators","default_privacy_level","enable_privacy_for_action_name","use_excluded_activity_urls","use_worker_url","compress_intake_requests","track_views_manually","track_user_interactions","track_resources","track_long_task","getConfigurationTelemetry","serializeRumConfiguration","tryToInit","publicApi","parameter","plugins_1","callPluginsMethod","REMOTE_CONFIGURATION","getInternalContext","stopSession","addTiming","startView","setViewName","setViewContext","setViewContextProperty","addAction","commonContext","addError","providedError","addFeatureFlagEvaluation","PageExitReason","HIDDEN","UNLOADING","PAGEHIDE","FROZEN","isPageExitReason","getMutationObserverConstructor","MutationObserver","originalInstance","ErrorSource","AGENT","CONSOLE","CUSTOM","LOGGER","NETWORK","SOURCE","REPORT","createEventRateLimiter","limit","onLimitReached","eventCount","allowNextEvent","isLimitReached","getSyntheticsContext","testId","_DATADOG_SYNTHETICS_PUBLIC_ID","resultId","_DATADOG_SYNTHETICS_RESULT_ID","getSyntheticsResultId","test_id","result_id","injected","limitModification","modifiableFieldPaths","modifier","fieldPath","fieldType","newValue","current","field","isValidObjectContaining","newType","fields","isValidObject","modifiableFieldPathsByEvent","VIEW_MODIFIABLE_FIELD_PATHS","USER_CUSTOMIZABLE_FIELD_PATHS","ROOT_MODIFIABLE_FIELD_PATHS","startRumAssembly","viewHistory","urlContexts","actionContexts","displayContext","ciVisibilityContext","reportError","WRITABLE_RESOURCE_GRAPHQL","eventRateLimiters","syntheticsContext","savedCommonContext","viewHistoryEntry","findView","urlContext","findUrl","actionId","findActionId","serverRumEvent","drift","browser_sdk_version","application","synthetics","ci_test","has_replay","hasReplay","sampled_for_replay","sessionReplay","anonymous_id","usr","rateLimitReached","shouldSend","LifeCycle","AbstractLifeCycle","callbacks","eventCallbacks","END_OF_TIMES","Infinity","CLEAR_OLD_VALUES_INTERVAL","createValueHistory","maxEntries","clearOldValuesInterval","oldTimeThreshold","endTime","clearOldValues","close","returnInactive","entries_1","closeActive","latestEntry","findAll","reset","xhrObservable","VIEW_CONTEXT_TIME_OUT_DELAY","xhrContexts","initXhrObservable","stopInstrumentingStart","openXhr","stopInstrumentingSend","hasBeenReported","stopInstrumentingOnReadyStateChange","DONE","onEnd","unsubscribeLoadEndListener","completeContext","sendXhr","stopInstrumentingAbort","abortXhr","createXhrObservable","FAKE_INITIAL_DOCUMENT","RESOURCE_TYPES","initiatorType","computeResourceEntryType","isValidUrl","getPathName","RESOURCE_TYPES_1","isType","areInOrder","numbers","computeResourceEntryDuration","responseEnd","computeResourceEntryDetails","hasValidResourceEntryTimings","fetchStart","workerStart","redirectStart","redirectEnd","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseStart","download","formatTiming","first_byte","worker","connect","ssl","dns","redirect","hasValidResourceEntryDuration","areCommonTimingsInOrder","areRedirectionTimingsInOrder","hasRedirection","origin","computeResourceEntryProtocol","nextHopProtocol","computeResourceEntryDeliveryType","deliveryType","computeResourceEntrySize","encodedBodySize","decodedBodySize","encoded_body_size","decoded_body_size","transfer_size","transferSize","isAllowedRequestUrl","every","isIntakeUrl","DATA_URL_REGEX","MAX_ATTRIBUTE_VALUE_CHAR_LENGTH","isLongDataUrl","sanitizeDataUrl","RumPerformanceEntryType","resourceTimingBufferFullListener","nextRequestIndex","startRequestCollection","tracer","traceFetch","append","headers_1","Headers","header","traceXhr","setRequestHeader","startTracer","requestIndex","getNextRequestIndex","trackXhr","clonedResponse","tryToClone","stream","reader","getReader","chunks","readBytesCount","onDone","limitExceeded","collectStreamBody","completeBuffer_1","offset_1","chunk","bytesLimit","readMore","read","readBytesFromStream","POSITIVE_INFINITY","waitForResponseToComplete","trackFetch","discardNegativeDuration","trackEventCounts","isChildEvent","onChange","eventCounts","errorCount","longTaskCount","resourceCount","actionCount","frustrationCount","frustration","discarded","retrieveFirstInputTiming","startTimeStamp","timingSent","removeEventListeners","evt","cancelable","entryType","processingStart","processingEnd","sendTiming","sendTimingIfPointerIsNotCancelled","createPerformanceObservable","PerformanceObserver","stopFirstInputTiming","handlePerformanceEntries","rumPerformanceEntries","RESOURCE","isForbiddenResource","filterRumPerformanceEntries","isObserverInitializing","getEntries","observe","NAVIGATION","LONG_TASK","PAINT","buffered","getEntriesByType","entryTypes","clearResourceTimings","manageResourceTimingBufferFull","supportPerformanceTimingEvent","FIRST_INPUT","disconnect","supportedEntryTypes","PAGE_ACTIVITY_VALIDATION_DELAY","PAGE_ACTIVITY_END_DELAY","waitPageActivityEnd","domMutationObservable","windowOpenObservable","pageActivityEndCallback","maxDuration","pageActivityObservable","firstRequestIndex","pendingRequestsCount","notifyPageActivity","isExcludedUrl","startEvent","isBusy","createPageActivityObservable","pageActivityEndTimeoutId","hasCompleted","validationTimeoutId","complete","hadActivity","maxDurationTimeoutId","pageActivitySubscription","lastChangeTime","doWaitPageActivityEnd","requestUrl","cssEscape","CSS","escape","ch","asCodePoint","elementMatches","msMatchesSelector","getParentElement","parentElement","nodeType","Node","ELEMENT_NODE","initialValues","isTextNode","TEXT_NODE","isElementNode","isNodeShadowHost","shadowRoot","isNodeShadowRoot","DOCUMENT_FRAGMENT_NODE","forEachChildNodes","child","firstChild","nextSibling","getParentNode","NodePrivacyLevel","IGNORE","PRIVACY_ATTR_NAME","PRIVACY_ATTR_VALUE_HIDDEN","PRIVACY_CLASS_PREFIX","CENSORED_STRING_MARK","CENSORED_IMG_MARK","FORM_PRIVATE_TAG_NAMES","INPUT","OUTPUT","TEXTAREA","SELECT","OPTION","DATALIST","OPTGROUP","getNodePrivacyLevel","cache","parentNodePrivacyLevel","nodePrivacyLevel","reducePrivacyLevel","getNodeSelfPrivacyLevel","childPrivacyLevel","inputElement","autocomplete","endsWith","getPrivacySelector","nodeName","relAttribute","getLowerCaseAttribute","nameAttribute","propertyAttribute","hasAttribute","shouldIgnoreElement","shouldMaskNode","privacyLevel","isFormElement","censorText","getTextContent","textNode","ignoreWhiteSpace","parentTagName","DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE","ACTION_NAME_PLACEHOLDER","getActionNameFromElementProgrammatically","targetElement","programmaticAttribute","elementWithAttribute","supportsElementClosestResult","HTMLElement","supportsElementClosest","closest","normalizeWhitespace","supportsLabelPropertyResult","priorityStrategies","userProgrammaticAttribute","privacy","HTMLInputElement","supportsLabelProperty","labels","getActionNameFromTextualContent","ownerDocument","htmlFor","nameSource","privacyEnabledActionName","getActionNameFromStandardAttribute","labelledByAttribute","refElement","getTextualContent","fallbackStrategies","MAX_PARENTS_TO_CONSIDER","getActionNameFromElementForStrategies","strategies","recursionCounter","strategies_1","actionName","strategy","name_1","trimmedName","attribute","isContentEditable","text_1","removeTextFromElements","element_1","textToReplace","supportScopeSelectorCache","STABLE_ATTRIBUTES","GLOBALLY_UNIQUE_SELECTOR_GETTERS","getStableAttributeSelector","isGeneratedValue","UNIQUE_AMONG_CHILDREN_SELECTOR_GETTERS","classList","classes","getClassList","getSelectorFromElement","isConnected","documentElement","contains","targetElementSelector","currentElement","globallyUniqueSelector","findSelector","isSelectorUniqueGlobally","isSelectorUniqueAmongSiblings","combineSelector","getPositionSelector","getAttributeSelector","STABLE_ATTRIBUTES_1","attributeName","sibling","firstElementChild","elementIndex","nextElementSibling","selectorGetters","childSelector","selectorGetters_1","elementSelector","selectorGetter","currentElementSelector","isSiblingMatching","scopedSelector_1","querySelector","supportScopeSelector","parent","MAX_DURATION_BETWEEN_CLICKS","MAX_DISTANCE_BETWEEN_CLICKS","createClickChain","firstClick","onFinalize","maxDurationBetweenClicksTimeoutId","bufferedClicks","appendClick","click","stopObservable","tryFinalize","dontAcceptMoreClick","isStopped","tryAppend","second","sqrt","clientX","clientY","isSelectionEmpty","selection","getSelection","isCollapsed","isValidPointerEvent","Element","isPrimary","MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE","computeFrustration","clicks","rageClick","getUserActivity","scroll","isRage","addFrustration","isDead","hasError","hasSelectionChanged","DEAD_CLICK_EXCLUDE_SELECTOR","hasPageActivity","CLICK_ACTION_MAX_DURATION","interactionSelectorCache","updateInteractionSelector","relativeTimestamp","ACTION_CONTEXT_TIME_OUT_DELAY","trackClickActions","currentClickChain","stopClickChain","stopActionEventsListener","selectionEmptyAtPointerDown","clickContext","onPointerDown","onPointerUp","userActivity","localUserActivity_1","listenActionEvents","pointerDownEvent","clickActionBase","rect","getBoundingClientRect","defaultActionName","getActionNameFromElement","height","left","computeClickActionBase","hadActivityOnPointerDown","pageActivityEndEvent","processPointerDown","appendClickToClickChain","newClick","stopWaitPageActivityEnd","discard","viewEndedSubscription","endClocks","stopSubscription","startClickAction","rageClick_1","validate","finalizeClicks","activityEndTime","historyEntry","eventCountsSubscription","frustrationTypes","newActivityEndTime","frustrationType","domEvents","clickAction","counts","processAction","autoActionProperties","isAutoAction","loading_time","long_task","resource","name_source","ACTION_NAME_MASKING","actionEvent","in_foreground","wasInPageStateAt","trackRuntimeError","errorObservable","handleRuntimeError","rawError","stopInstrumentingOnError","errorObj","stopInstrumentingOnUnhandledRejection","instrumentUnhandledRejection","consoleObservablesByApi","initConsoleObservable","apis","consoleObservables","originalConsoleApi","formatConsoleParameters","firstErrorParam","buildConsoleLog","createConsoleObservable","RawReportType","intervention","deprecation","cspViolation","initReportObservable","blockedURI","effectiveDirective","buildRawReportError","csp","disposition","buildStack","originalPolicy","sourceFile","buildRawReportErrorFromCspViolation","createCspViolationReportObservable","reportTypes","ReportingObserver","handleReports","reports","report","buildRawReportErrorFromReport","createReportObservable","partial","startErrorCollection","featureFlagContexts","consoleLog","trackConsoleError","trackReportError","handling_stack","source_type","featureFlagContext","findFeatureFlagEvaluations","feature_flags","processError","doStartErrorCollection","requestIdleCallback","cancelIdleCallback","id_1","didTimeout","timeRemaining","max","MAX_TASK_TIME","requestIdleCallbackShim","IDLE_CALLBACK_TIMEOUT","MAX_EXECUTION_TIME_ON_TIMEOUT","alreadyMatchedEntries","matchRequestResourceEntry","sameNameEntries","getEntriesByName","candidates","errorMargin","runOnReadyState","expectedReadyState","INITIAL_DOCUMENT_OUTDATED_TRACE_ID_THRESHOLD","getDocumentTraceId","traceIdMeta","traceTimeMeta","createDocumentTraceData","content","getDocumentTraceDataFromMeta","comment","getTraceCommentFromNode","findTraceComment","getDocumentTraceDataFromComment","traceTime","rawTraceTime","COMMENT_NODE","isCommentNode","getNavigationEntry","navigationEntry","timings","numberKey","timingElement","computeTimingsFromDeprecatedPerformanceTiming","retrieveInitialDocumentResourceTiming","startResourceCollection","taskQueue","retrieveInitialDocumentResourceTimingImpl","pendingTasks","deadline","executionTimeRemaining","start_1","scheduleNextRun","timeout","task","createTaskQueue","handleResource","matchingTiming","tracingInfo","hasBeenTraced","span_id","trace_id","rule_psr","computeRequestTracingInfo","correspondingTimingOverrides","computeResourceEntryMetrics","computeRequestDuration","resourceEvent","delivery_type","performanceEntry","requestInput","processRequest","performanceResourceSubscription","_loop_1","isResourceEntryRequestType","processResourceEntry","computeRawEvent","computeResourceEntryTracingInfo","entryMetrics","responseStatus","renderBlockingStatus","render_blocking_status","FCP_MAXIMUM_DELAY","trackNavigationTimings","getNavigationEntryImpl","stopOnReadyState","waitAfterLoadEvent","loadEventEnd","isIncompleteNavigation","domComplete","domContentLoaded","domContentLoadedEventEnd","domInteractive","loadEvent","firstByte","processNavigationEntry","LCP_MAXIMUM_DELAY","trackFirstHidden","stopListeners","visibilityState","trackInitialViewMetrics","setLoadEvent","scheduleViewUpdate","initialViewMetrics","stopNavigationTracking","navigationTimings","firstHidden","stopFCPTracking","fcpEntry","trackFirstContentfulPaint","firstContentfulPaint","stopLCPTracking","firstInteractionTimestamp","stopEventListener","biggestLcpSize","performanceLcpSubscription","LARGEST_CONTENTFUL_PAINT","lcpEntry","findLast","lcpTargetSelector","targetSelector","trackLargestContentfulPaint","largestContentfulPaint","stopFIDTracking","performanceFirstInputSubscription","firstInputEntry","firstInputDelay","firstInputTargetSelector","trackFirstInput","firstInput","trackCumulativeLayoutShift","viewStart","isLayoutShiftSupported","maxClsTarget","maxClsStartTime","maxClsValue","cumulatedValue","maxValue","update","isMaxValue","MAX_UPDATE_GAP","MAX_WINDOW_DURATION","slidingSessionWindow","performanceSubscription","LAYOUT_SHIFT","hadRecentInput","getTargetFromSource","WeakRef","deref","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","viewportObservable","getInteractionCount","interactionCount","MAX_INTERACTION_ENTRIES","MAX_INP_VALUE","trackInteractionToNextPaint","viewLoadingType","EVENT","PerformanceEventTiming","getInteractionToNextPaint","setViewEnd","interactionToNextPaintTargetSelector","interactionToNextPaintStartTime","interactionId","min","durationThreshold","previousInteractionCount","computeViewInteractionCount","getViewInteractionCount","stopViewInteractionCount","trackViewInteractionCount","viewEnd","longestInteractions","sortAndTrimLongestInteractions","sort","interactionIndex","findIndex","interaction","minLongestInteraction","estimateP98Interaction","trackLongestInteractions","interactionToNextPaint","handleEntries","newInteraction","firstInputSubscription","eventSubscription","viewEndTime","getScrollX","scrollX","visual","visualViewport","pageLeft","offsetLeft","pageXOffset","getScrollY","scrollY","pageTop","offsetTop","pageYOffset","initViewportObservable","updateDimension","getViewportDimension","createViewportObservable","scale","innerWidth","innerHeight","THROTTLE_SCROLL_DURATION","trackScrollMetrics","scrollValues","throttleDuration","scrollTop","scrollHeight","scrollDepth","scrollingElement","ResizeObserver","throttledNotify_1","observerTarget","resizeObserver_1","eventListener_1","createScrollValuesObservable","maxScrollDepth","maxScrollHeight","maxScrollHeightTime","shouldUpdate","maxDepthScrollTop","trackCommonViewMetrics","loadingType","commonViewMetrics","loadType","isWaitingForLoadEvent","isWaitingForActivityLoadingTime","loadingTimeCandidates","invokeCallbackIfAllCandidatesAreReceived","loadingTime","trackLoadingTime","newLoadingTime","stopLoadingTimeTracking","stopScrollMetricsTracking","newScrollMetrics","stopCLSTracking","cumulativeLayoutShift","stopINPTracking","getCommonViewMetrics","THROTTLE_VIEW_UPDATE_PERIOD","SESSION_KEEP_ALIVE_INTERVAL","KEEP_TRACKING_AFTER_VIEW_DELAY","trackViews","locationChangeObservable","areViewsTrackedAutomatically","locationChangeSubscription","activeViews","currentView","startNewView","viewOptions","newlyCreatedView","initialLocation","customTimings","documentVersion","sessionIsActive","viewCreatedEvent","triggerViewUpdate","cancelScheduleViewUpdate","stopCommonViewMetricsTracking","stopInitialViewMetricsTracking","trackViewEventCounts","stopEventCountsTracking","keepAliveIntervalId","currentEnd","isActive","looksLikeRelativeTime","sanitized","sanitizeTiming","updatedName","newView","pageExitEvent","currentLocation","otherLocation","hash","correspondingId","oldLocation","newLocation","getPathFromHash","renewViewOnLocationChange","startViewCollection","pageOpenObserable","recorderApi","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","replayStats","getReplayStats","pageStates","viewEvent","document_version","replay_stats","page_states","cumulative_layout_shift","cumulative_layout_shift_time","cumulative_layout_shift_target_selector","dom_complete","dom_content_loaded","dom_interactive","first_contentful_paint","first_input_delay","first_input_time","first_input_target_selector","interaction_to_next_paint","interaction_to_next_paint_time","interaction_to_next_paint_target_selector","is_active","largest_contentful_paint","largest_contentful_paint_target_selector","load_event","loading_type","time_spent","max_depth","max_depth_scroll_top","max_scroll_height","max_scroll_height_time","replay_level","custom_timings","newObject","mapValues","processViewUpdate","VISIBILITY_CHECK_DELAY","SESSION_CONTEXT_TIMEOUT_DELAY","stopCallbacks","startSessionManager","sessionContextHistory","buildSessionContext","isReplayForced","forcedReplay","trackActivity","expandSessionWhenVisible","visibilityCheckInterval","trackVisibility","cb","trackResume","findSession","startRumSessionManager","rawTrackingType","hasValidRumSession","isTypeTracked","sessionEntity","setForcedReplay","rumSessionType","createBatch","encoder","flushController","upsertBuffer","flushSubscription","flushObservable","upsertMessages","isPageExit","sendOnExit","encoderResult","formatPayloadFromEncoder","pendingMessages","flush","addOrUpdate","serializedMessage","estimatedMessageBytesCount","hasMessageFor","removedMessage","messageBytesCount","notifyAfterRemoveMessage","notifyBeforeAddMessage","notifyAfterAddMessage","realMessageBytesCount","upsert","MAX_ONGOING_BYTES_COUNT","MAX_ONGOING_REQUESTS","MAX_QUEUE_BYTES_COUNT","MAX_BACKOFF_TIME","INITIAL_BACKOFF_TIME","sendWithRetryStrategy","sendStrategy","transportStatus","queuedPayloads","bandwidthMonitor","canHandle","onSuccess","retryQueuedPayloads","onFailure","enqueue","scheduleRetry","dequeue","currentBackoffTime","shouldRetryRequest","ongoingRequestCount","isFull","queueFullReported","previousQueue","newPayloadQueue","createHttpRequest","endpointBuilder","retryState","ongoingByteCount","sendStrategyForRetry","onResponse","canUseKeepAlive","isKeepAliveSupported","fetchUrl","keepalive","mode","sendXHR","fetchKeepAliveStrategy","canUseBeacon","sendBeacon","beaconUrl","hasReportedBeaconError","reportBeaconError","xhrUrl","sendBeaconStrategy","createFlushController","durationLimitTimeoutId","messagesLimit","durationLimit","pageExitObservable","sessionExpireObservable","pageExitSubscription","sessionExpireSubscription","currentBytesCount","currentMessagesCount","flushReason","messagesCount","cancelDurationLimitTimeout","messageBytesCountDiff","startRumBatch","telemetryEventObservable","createEncoder","batch","primary","batchFactoryImp","primaryBatch","createBatchFromConfig","replicaBatch","replicated","transformMessage","startBatchWithReplica","isTelemetryReplicationAllowed","URL_CONTEXT_TIME_OUT_DELAY","createLocationChangeObservable","stopHistoryTracking","onHistoryChange","stopInstrumentingPushState","getHistoryInstrumentationTarget","stopInstrumentingReplaceState","removeListener","trackHistory","onLocationChange","stopHashTracking","onHashChange","trackHash","History","FEATURE_FLAG_CONTEXT_TIME_OUT_DELAY","currentPeriodMeasures","currentBatchMeasures","batchHasRumEvent","MEASURES_PERIOD_DURATION","sendCurrentPeriodMeasures","batchCount","initCurrentPeriodMeasures","updateMeasure","measure","sum","mergeMeasure","batchBytesCount","batchMessagesCount","globalContextBytes","userContextBytes","featureFlagBytes","initCurrentBatchMeasures","MAX_PAGE_STATE_ENTRIES","MAX_PAGE_STATE_ENTRIES_SELECTABLE","PAGE_STATE_CONTEXT_TIME_OUT_DELAY","startPageStateHistory","maxPageStateEntriesSelectable","currentPageState","pageStateEntryHistory","addPageState","getPageState","stopEventListeners","persisted","computePageState","nextPageState","eventStartTime","pageStateEntries","pageStateServerEntries","pageState","relativeStartTime","hasFocus","createCookieObservable","cookieName","detectCookieChangeStrategy","changeEvent","changed","deleted","listenToCookieStoreChange","watchCookieFallback","WATCH_COOKIE_INTERVAL_DELAY","previousCookieValue","watchCookieIntervalId","CI_VISIBILITY_TEST_ID_COOKIE_NAME","getSessionReplayUrl","viewContext","errorType","sessionId","rumConfiguration","getSiteDefaultSubdomain","statsPerView","MAX_STATS_HISTORY","getSegmentsCount","getOrCreateReplayStats","segments_count","records_count","segments_total_raw_size","toDelete","isFirst_1","_value","deleteOldestStats","serializedNodeIds","hasSerializedNode","getSerializedNodeId","getElementInputValue","URL_IN_CSS_REF","ABSOLUTE_URL","DATA_URI","switchToAbsoluteUrl","cssText","cssHref","matchingSubstring","singleQuote","urlWrappedInSingleQuotes","doubleQuote","urlWrappedInDoubleQuotes","urlNotWrappedInQuotes","quote","baseUrl","makeUrlAbsolute","TAG_NAME_REGEX","getValidTagName","processedTagName","censoredImageForSize","RecordType","FullSnapshot","IncrementalSnapshot","Meta","Focus","ViewEnd","VisualViewport","FrustrationRecord","NodeType","Document","DocumentType","Text","CDATA","DocumentFragment","IncrementalSource","Mutation","MouseMove","MouseInteraction","Scroll","ViewportResize","Input","TouchMove","MediaInteraction","StyleSheetRule","MouseInteractionType","MouseUp","MouseDown","Click","ContextMenu","DblClick","Blur","TouchStart","TouchEnd","MediaInteractionType","Play","Pause","serializeStyleSheets","cssStyleSheets","cssStyleSheet","rules","cssRules","cssRule","disabled","media","serializeAttribute","attributeValue","image","naturalWidth","naturalHeight","getCssRulesString","getCssRuleStringForSafari","getCssRuleString","rule","isCSSStyleRule","selectorText","isCSSImportRule","styleSheet","serializeNodeWithId","serializedNode","DOCUMENT_NODE","serializeChildNodes","adoptedStyleSheets","serializeDocumentNode","isShadowRoot","serializationContext","shadowRootsController","addShadowRoot","serializeDocumentFragmentNode","DOCUMENT_TYPE_NODE","documentType","publicId","systemId","isSVG","SVGElement","attributes","rr_width","rr_height","safeAttrs","formValue","optionElement","selected","stylesheet","styleSheets","_cssText","sheet","scrollLeft","checked","mediaElement","rr_mediaState","paused","elementsScrollPositions","rr_scrollLeft","rr_scrollTop","serializeAttributes","hasChildNodes","serializeElementNode","serializeTextNode","CDATA_SECTION_NODE","serializeNode","_nextId","serializedNodeWithId","serializeNodeId","setSerializedNodeId","childNode","serializedChildNode","serializeDocument","isTouchEvent","changedTouches","getEventTarget","composed","composedPath","convertMouseEventToLayoutCoordinates","normalized","layoutViewportX","layoutViewportY","visualViewportX","visualViewportY","isVisualViewportFactoredIn","getVisualViewport","assembleIncrementalSnapshot","MOUSE_MOVE_OBSERVER_THRESHOLD","trackMove","moveCb","coordinates","tryToComputeCoordinates","timeOffset","positions","updatePosition","cancelThrottle","isFinite","eventTypeToMouseInteraction","trackMouseInteraction","mouseInteractionCb","recordIds","getIdForEvent","SCROLL_OBSERVER_THRESHOLD","trackScroll","scrollCb","scrollPositions","VISUAL_VIEWPORT_OBSERVER_THRESHOLD","trackViewportResize","viewportResizeCb","viewportResizeSubscription","trackVisualViewportResize","visualViewportResizeCb","trackMediaInteraction","mediaInteractionCb","trackStyleSheet","styleSheetCb","checkStyleSheetAndCallback","ownerNode","instrumentationStoppers","CSSStyleSheet","adds","removes","instrumentGroupingCSSRuleClass","cls","parentStyleSheet","getPathToNestedCSSRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","stopper","currentRule","parentRule","index_1","trackFocus","focusCb","has_focus","trackFrustration","frustrationCb","frustrationSubscription","trackViewEnd","viewEndCb","viewEndSubscription","trackInput","inputCb","stopPropertySetterInstrumentation","lastInputStateMap","HTMLTextAreaElement","HTMLSelectElement","onElementChange","instrumentationStoppers_1","inputState","isChecked","cbWithDedup","lastInputState","MUTATION_PROCESS_MAX_DELAY","MUTATION_PROCESS_MIN_DELAY","trackMutation","mutationCallback","mutationBatch","processMutationBatch","cancelScheduledFlush","pendingMutations","throttledFlush","addMutations","mutations","createMutationBatch","nodePrivacyLevelCache","mutation","removedNodes","removedNode","traverseRemovedShadowDom","removeShadowRoot","filteredMutations","nodeAndAncestorsHaveSerializedNode","addedAndMovedNodes","addedNodes","mutations_1","sortedAddedAndMovedNodes","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","addedNodeMutations","sortedAddedAndMovedNodes_1","hasBeenSerialized","nextId","getNextSibling","parentId","removedNodeMutations","processChildListMutations","texts","textMutations","handledNodes","filteredMutations_1","oldValue","processCharacterDataMutations","attributeMutations","handledElements","handledAttributes","emittedMutations","filteredMutations_2","transformedValue","inputValue","emittedMutation","processAttributesMutations","processMutations","takeRecords","attributeOldValue","characterData","characterDataOldValue","childList","subtree","shadowDomRemovedCallback","initShadowRootsController","controllerByShadowRoot","mutationTracker","inputTracker","scrollTracker","emit","scrollPositionsByElement","emitAndComputeStats","stopFullSnapshots","flushMutations","fullSnapshotCallback","takeFullSnapshot","records","initialOffset","startFullSnapshots","initRecordIds","trackers","viewEndRecord","createSegment","creationReason","encodedBytesCount","creation_reason","has_full_snapshot","index_in_view","addRecord","additionalBytesCount","SEGMENT_DURATION_LIMIT","SEGMENT_BYTES_LIMIT","startSegmentCollection","httpRequest","getSegmentContext","nextSegmentCreationReason","unsubscribeViewCreated","flushSegment","unsubscribePageExited","segment","rawSegmentBytesCount","formData","FormData","metadataAndSegmentSizes","raw_segment_size","compressed_segment_size","byteLength","serializedMetadataAndSegmentSizes","buildReplayPayload","expirationTimeoutId","doStartSegmentCollection","computeSegmentContext","createDeflateEncoder","streamId","compressedDataTrailer","compressedData","nextWriteActionId","pendingWriteActions","removeMessageListener","workerResponse","trailer","nextPendingAction","writeCallback","finishCallback","consumeResult","buffers","total","buffers_1","concatBuffers","sendResetIfNeeded","postMessage","pendingWriteAction","INITIALIZATION_TIME_OUT_DELAY","createDeflateWorker","Worker","createObjectURL","onInitializationFailure","createDeflateWorkerImpl","removeErrorListener_1","removeMessageListener_1","initializationFailureCallbacks","onTimeout","doStartDeflateWorker","getDeflateWorkerStatus","baseMessage","worker_version","stream_id","isBrowserSupported","NodeList","getSessionReplayLink","isRecordingStarted","getErrorType","startRecordingImpl","getOrCreateDeflateEncoder","stopRecording","force","canStartRecording","isRecordingInProgress","deflateEncoder","shouldForceReplay","isRecording","existingGlobalVariable","onRumStart","shouldStartImmediately","cachedDeflateEncoder","makeRecorderApi","cleanupTasks","replayRequest","startRecordBridge","segmentCollection","datadogRum","startRumImpl","currentConsent","customerDataTrackerManager","globalContextManager","userContextManager","buildCommonContext","stub","preStartStrategy","createPostStartStrategy","sanitizedOptions","feature","rumPublicApi","setTrackingConsent","setGlobalContext","getGlobalContext","setGlobalContextProperty","removeGlobalContextProperty","clearGlobalContext","getInitConfiguration","setUser","checkUser","getUser","setUserProperty","sanitizedProperty","removeUserProperty","clearUser","startSessionReplayRecording","stopSessionReplayRecording","onReady","makeRumPublicApi","bridge_1","startRumTelemetry","currentContext","startFeatureFlagContexts","stopBeforeUnloadListener","createPageExitObservable","startRumSessionManagerStub","startRumEventBridge","batch_1","batchFlushObservable","startCustomerDataTelemetry","stopWindowOpen","viewValueHistory","buildViewHistoryEntry","viewUpdate","startViewHistory","previousViewUrl","urlContextHistory","viewUrl","buildUrlContext","changeTime","startUrlContexts","actionCollection","startActionCollection","viewport","animationFrameId","DELAY_VIEWPORT_COLLECTION","requestAnimationFrame","unsubscribeViewport","viewportDimension","cancelAnimationFrame","startDisplayContext","cookieObservable","testExecutionId","Cypress","cookieObservableSubscription","test_execution_id","startCiVisibilityContext","startRumEventCollection","stopRumEventCollection","stopViewCollection","stopResourceCollection","LONG_ANIMATION_FRAME","stopLongAnimationFrameCollection","entry_type","blocking_duration","blockingDuration","first_ui_event_timestamp","firstUIEventTimestamp","render_start","renderStart","style_and_layout_start","styleAndLayoutStart","start_time","pause_duration","pauseDuration","forced_style_and_layout_duration","forcedStyleAndLayoutDuration","execution_start","executionStart","source_url","sourceURL","source_function_name","sourceFunctionName","source_char_position","sourceCharPosition","invoker","invoker_type","invokerType","window_attribution","windowAttribution","startLongAnimationFrameCollection","performanceLongTaskSubscription","startLongTaskCollection","vitalCollection","internalContext","application_id","session_id","user_action","startInternalContext","q","__ENVIRONMENT__","botRegex","initialized","initializeDatadogRum","eventData","detail","accepted","pageOpts","remarketingDetails","hrental_id","hrental_pagetype","hrental_totalvalue","retrieveRemarketingProperties","trackClicksOn","gclidFromUrl","gclidCookie","gclidFromCookie","gclid","persistGclid","InstructionVideoEmbed","styles","container","heading","title","frameResizer","embedUrl","frameBorder","allowFullScreen","ProfileEditRichTextEditor","AvailabilitySourceForm","PhoneNumberForm","VenueMobileCTAs","Rating","RatingBoxAccordion","AccordionPanel","CommissionRoot","PackageEditorRoot","VenueInquiryConversationRoot","CateringInquiryConversationApp","ReadOnlyVenueInquiryConversationApp","MarkAsRepliedRoot","VenueGroupEditorApp","SendCopy","MessageTemplateEditorApp","MultiSelect","VenuePageInquiryFormNew","MultiVenueInquiryForm","SearchableInquiryIndex","FeaturedEventTypeField","FeaturedVenuesInventory","EditOrganizationTabs","SpamInquiriesTabs","EditVenueServices","EditVenueTypes","ProfileAnnouncementsEditorApp","CateringSearch","VenueProfileGallery","VenueWishlistButton","VenueProfileLocation","VenueProfileVideoSection","VenueProfileVirtualTourSection","VenueProfileStoriesOfPastEvents","VenueProfileCapacityDetails","VenueProfileCTASection","VenueProfileOtherSpacesInSameLocation","VenueProfileReviewList","VenueProfileServicesAndFacilities","VenueProfileSimilarVenues","VenueProfilePricingSection","VenueProfileAvailabilitySection","VenueProfileBasicInformation","VenueProfileTranslatedDescription","CateringBasicInformation","CateringDetailedInformation","CateringHeading","ProfileImageCarousel","CateringInquiry","CateringServicesAndPricing","CateringMenuList","SupplierProfileServicesAndPricing","SupplierProfileHeading","SupplierProfileContactInformation","SupplierProfileVideo","SupplierProfileInquiry","SupplierProfileContactImage","SupplierProfileBasicInformation","SupplierSearch","LegalNotice","PipedriveIntegrationStatus","BillingDetails","TinField","InvoicesOfDayStates","InvoicingFields","OrganizationInvoices","StripeCustomerStatus","OutcomeFeedback","EditOpeningHours","components","lazyComponents","frontPageIndex","landingPagesShow","listsShow","reviewsEdit","reviewsNew","profiles/reviewsNew","profiles/venueProfilesShow","profiles/admin/cateringProfilesEdit","catering/admin/menusIndex","admin/archives","profiles/admin/venueProfilesEdit","profiles/admin/venueProfilesIndex","profiles/supplierProfilesEdit","staff/imagesIndex","staff/prospectsIndex","staff/invoicesNew","staff/organizationsEdit","staff/landingPagesEdit","users/registrationsEdit","buildModuleName","moduleNameWithAction","actionAlias","moduleNameWithoutAction","actionEntryPoints","actionFunc","findScript","initializer","require","jQuery","SERVER_RENDERER_PUBLIC_PATH","__webpack_public_path__","Button","onClick","submit","otherProps","buttonClassName","classnames","_extends","preventDefault","tabIndex","errorMessage","reload","sentinelProperty","branches","jsonObject","extract","json","failure","items","shape","extractKey","extractValue","defaultValue","values","failureStack","usingFailureStack","withFailureHandler","returnValue","fallback","boolean","mixed","dateString","extractValues","amount","moneyExtract","extractedMoney","money","webpackLocales","localizable","localize","defaultFormatMoneyOptions","fm","alwaysShowDecimals","isInteger","formatPrice","isEqual","sitesJSON","allSites","baseDomain","requiredString","base_domain","countryInPath","optionalString","country_in_path","defaultOgImage","default_og_image","defaultSearchBounds","requiredBounds","default_search_bounds","defaultMapCenter","default_map_center","iso31661Alpha2","iso_3166_1_alpha_2","iso31661Alpha3","iso_3166_1_alpha_3","profileTimeZone","profile_time_zone","partnerSupport","extractPartnerSupport","partner_support","salesPerson","extractSalesPerson","sales_person","eInvoiceOperators","extractEInvoiceoperators","e_invoice_operators","siteFromJSON","mail","phone","team_mail","first_name","south","west","north","east","eInvoiceOperator","maybeString","sites","trackLink","track","links","properties","elements","toArray","elementEvent","ev","getAttributeNS","trackEvent","promise","linkNewTab","typedEvent","ctrlKey","shiftKey","metaKey","button","userNewTab","getSocialMedia","inferOperatingSystem","defaultProperties","Path","Locale","$os","propertiesFromTrackedLink","link","$link","linkData","allHaveData","$elements","dataKey","venueAnalyticsProps","dataFromBackend","matcher","translatedOptions","mediaTypesToMediaQueries","small","middle","medium","large","xlarge","xxlarge","smallDevice","mediaType","mediaQuery","Modernizr","Putki","padding","decimalAdjust","isFunction","isSet","isBoolean","isNull","exp","NaN","lazyEvaluate","dest","DATE","day_names","abbr_day_names","month_names","abbr_month_names","meridian","NUMBER_FORMAT","separator","delimiter","strip_insignificant_zeros","CURRENCY_FORMAT","unit","sign_first","PERCENTAGE_FORMAT","SIZE_UNITS","DEFAULT_OPTIONS","defaultLocale","defaultSeparator","fallbacks","translations","missingBehaviour","missingTranslationPrefix","initializeOptions","localeParts","firstFallback","secondFallback","nullableFallbackLocale","pluralization","currentLocale","lookup","scopes","fullScope","getFullScope","pluralizationLookupWithoutFallback","pluralizerKey","pluralizerKeys","pluralizer","pluralizationLookup","am","pm","prepareOptions","subject","createTranslationOptions","translationOptions","translate","translation","usedScope","optionsWithoutDefault","translationOption","interpolate","pluralize","missingTranslation","nullPlaceholder","missingPlaceholder","p1","p2","toNumber","formattedNumber","sign","toCurrency","toPercentage","localizedValue","toTime","parseDate","convertedDate","fraction","UTC","$2","$3","$6","$4","$5","strftime","meridianOptions","weekDay","getDay","day","getDate","year","getFullYear","month","getMonth","hour","getHours","hour12","secs","getSeconds","mins","getMinutes","getTimezoneOffset","absOffsetHours","absOffsetMinutes","timezoneoffset","date_string","toHumanSize","kb","iterations","extend","pluses","raw","decode","stringifyCookieValue","parseCookieValue","converter","days","removeCookie","defineLocale","months","monthsShort","weekdays","weekdaysShort","weekdaysMin","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","future","past","ss","mm","h","hh","dd","MM","yy","dayOfMonthOrdinalParse","ordinal","week","dow","doy","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","isDate","arrLen","valueOf","createUTC","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","_isValid","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","defaultCalendar","mom","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","w","ww","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","u","isLeapYear","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","setFullYear","createUTCDate","getUTCFullYear","setUTCFullYear","firstWeekOffset","fwd","getUTCDay","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","charAt","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","meridiemParse","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","getLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","quarter","weeks","isoWeek","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","model","local","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","period","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","keepOffset","toDate","inspect","datetime","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","test1","test2","fromCharCode","test3","letter","shouldUseNative","symbols","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","MessageChannel","unstable_now","unstable_forceFrameRate","A","B","C","D","F","G","I","port2","port1","onmessage","J","r","sortIndex","O","Q","R","S","U","V","expirationTime","X","priorityLevel","Y","Z","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","unstable_continueExecution","unstable_getCurrentPriorityLevel","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","unstable_shouldYield","unstable_wrapCallback","modules","installedModules","moduleId","loaded","activeKeys","currentInput","formInputs","mouseWheel","detectWheel","ignoreMap","inputMap","timer","inputTypes","keyMap","pointerMap","eventBuffer","setInput","bufferedEvent","eventKey","pointerType","activeElement","switchInput","logKeys","keyCode","which","unLogKeys","arrayPos","bindEvents","PointerEvent","MSPointerEvent","onmousewheel","ask","hasOwn","classNames","appendClass","parseValue","newClass"],"sourceRoot":""}