{"version":3,"file":"dash0.umd.cjs","sources":["modules/utils/fn.js","modules/utils/debug.js","modules/utils/obj.js","modules/utils/globals.js","modules/utils/id.js","modules/utils/listeners.js","modules/utils/local-storage.js","modules/utils/time.js","modules/utils/timers.js","modules/utils/performance.js","modules/utils/constants.js","modules/utils/math.js","modules/utils/url.js","modules/utils/origin.js","modules/utils/wrap.js","modules/vars.js","modules/semantic-conventions.js","modules/api/session.js","../node_modules/.pnpm/web-vitals@4.2.4/node_modules/web-vitals/dist/web-vitals.js","modules/utils/on-last-chance.js","modules/transport/batcher.js","modules/transport/fetch.js","modules/transport/index.js","modules/utils/rate-limit.js","modules/utils/otel/attributes.js","modules/utils/otel/trace-context.js","modules/utils/otel/span.js","modules/utils/session-storage.js","modules/utils/tab-id.js","modules/attributes/common.js","modules/attributes/url.js","modules/instrumentations/web-vitals.js","modules/utils/ignore-rules.js","modules/instrumentations/errors/unhandled-error.js","modules/instrumentations/errors/unhandled-promise-rejection.js","modules/instrumentations/errors/async-function-wrapping.js","modules/instrumentations/errors/event-handlers.js","modules/instrumentations/errors/timers.js","modules/instrumentations/errors/index.js","modules/instrumentations/http/utils.js","modules/instrumentations/http/fetch.js","modules/utils/otel/http.js","modules/utils/otel/error.js","modules/instrumentations/navigation/event.js","modules/instrumentations/navigation/page-load.js","modules/instrumentations/navigation/page-transition.js","modules/instrumentations/navigation/index.js","../node_modules/.pnpm/ts-deepmerge@7.0.3/node_modules/ts-deepmerge/esm/index.js","modules/api/init.js","modules/utils/pick.js","modules/api/attributes.js","modules/api/debug.js","modules/api/identify.js","modules/entrypoint/npm-package.js","modules/api/report-error.js","modules/api/events.js"],"sourcesContent":["export function noop() {\n    // This function is intentionally empty.\n}\n","import { noop } from \"./fn\";\nexport const log = createLogger(\"log\");\nexport const info = createLogger(\"info\");\nexport const warn = createLogger(\"warn\");\nexport const error = createLogger(\"error\");\nexport const debug = createLogger(\"debug\");\nfunction createLogger(method) {\n    if (typeof console === \"undefined\" || typeof console.log !== \"function\" || typeof console.log.apply !== \"function\") {\n        return noop;\n    }\n    if (console[method] && typeof console[method].apply === \"function\") {\n        return function () {\n            console[method].apply(console, arguments);\n        };\n    }\n    return function () {\n        console.log.apply(console, arguments);\n    };\n}\n","const globalHasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * protection against hasOwnProperty overrides.\n */\nexport function hasOwnProperty(obj, key) {\n    return globalHasOwnProperty.call(obj, key);\n}\nexport function hasKey(obj, key) {\n    return key in obj;\n}\n","// aliasing globals for improved minification\n// Avoid blowing up in an ssr context. It is important to check via typeof here because window might not even be declared when imported in ssr.\nexport const win = typeof window !== \"undefined\" ? window : undefined;\nexport const doc = win?.document;\nexport const nav = win?.navigator;\nexport const loc = typeof location !== \"undefined\" ? location : undefined;\nexport const perf = win?.performance || win?.webkitPerformance || win?.msPerformance || win?.mozPerformance;\nexport const encodeURIComponent = win?.encodeURIComponent;\nexport const fetch = win?.fetch;\nexport const localStorage = (function () {\n    try {\n        return win?.localStorage ?? null;\n    }\n    catch {\n        // localStorage access is not permitted in certain security modes, e.g.\n        // when cookies are completely disabled in web browsers.\n        return null;\n    }\n})();\nexport const sessionStorage = (function () {\n    try {\n        return win?.sessionStorage ?? null;\n    }\n    catch {\n        // sessionStorage access is not permitted in certain security modes, e.g.\n        // when cookies are completely disabled in web browsers.\n        return null;\n    }\n})();\n/**\n * Exposed via this module to enable testing.\n */\nexport function sendBeacon(url, data) {\n    return nav?.sendBeacon(url, data) ?? false;\n}\n/* eslint-enable no-restricted-globals */\n","export const SPAN_ID_BYTES = 8;\nexport const TRACE_ID_BYTES = 16;\nexport const PAGE_LOAD_ID_BYTES = TRACE_ID_BYTES;\nexport const SESSION_ID_BYTES = TRACE_ID_BYTES;\nexport const TAB_ID_BYTES = SPAN_ID_BYTES;\nconst SHARED_CHAR_CODES_ARRAY = Array(32);\nexport function generateUniqueId(byteCount) {\n    for (let i = 0; i < byteCount * 2; i++) {\n        SHARED_CHAR_CODES_ARRAY[i] = Math.floor(Math.random() * 16) + 48;\n        // valid hex characters in the range 48-57 and 97-102\n        if (SHARED_CHAR_CODES_ARRAY[i] >= 58) {\n            SHARED_CHAR_CODES_ARRAY[i] += 39;\n        }\n    }\n    return String.fromCharCode.apply(null, SHARED_CHAR_CODES_ARRAY.slice(0, byteCount * 2));\n}\n","// aliasing the global function for improved minification and\n// protection against hasOwnProperty overrides.\nexport function addEventListener(target, eventType, callback) {\n    if (target.addEventListener) {\n        target.addEventListener(eventType, callback, false);\n    }\n    else if (target.attachEvent) {\n        target.attachEvent(\"on\" + eventType, callback);\n    }\n}\nexport function removeEventListener(target, eventType, callback) {\n    if (target.removeEventListener) {\n        target.removeEventListener(eventType, callback, false);\n    }\n    else if (target.detachEvent) {\n        target.detachEvent(\"on\" + eventType, callback);\n    }\n}\n","// localStorage API re-exposed to allow testing.\nimport { localStorage } from \"./globals\";\nexport const isSupported = localStorage != null && typeof localStorage.getItem === \"function\" && typeof localStorage.setItem === \"function\";\nexport function getItem(k) {\n    if (isSupported && localStorage) {\n        return localStorage.getItem(k);\n    }\n    return null;\n}\nexport function setItem(k, v) {\n    if (isSupported && localStorage) {\n        localStorage.setItem(k, v);\n    }\n}\nexport function removeItem(k) {\n    if (isSupported && localStorage) {\n        localStorage.removeItem(k);\n    }\n}\n","import { perf } from \"./globals\";\nexport function now() {\n    return new Date().getTime();\n}\nexport function nowNanos() {\n    const timeOrigin = getTimeOrigin();\n    if (timeOrigin) {\n        return String((perf.now() + timeOrigin) * 1000000);\n    }\n    return toNanosTs(new Date());\n}\nexport function toNanosTs(time) {\n    if (typeof time === \"object\") {\n        return toNanosTs(time.getTime());\n    }\n    // We don't multiply, because we want to keep number precision\n    return String(time) + \"000000\";\n}\nexport function getTimeOrigin() {\n    let timeOrigin = perf?.timeOrigin;\n    if (typeof timeOrigin !== \"number\") {\n        timeOrigin = perf?.timing?.fetchStart;\n    }\n    return timeOrigin;\n}\nexport function domHRTimestampToNanos(ts) {\n    return String(Math.round((ts + getTimeOrigin()) * 1000000));\n}\n","import { warn, debug } from \"./debug\";\nimport { win } from \"./globals\";\n// This module contains wrappers around the standard timer API. These wrappers can be used to\n// ensure that execution of timers happens outside of any Angular specific zones. This in turn\n// means that this script will never disturb Angular's stabilization phase.\n// https://angular.io/api/core/ApplicationRef#isStable\n// Please note that it may sometimes be necessary to deliberately execute code inside of\n// Angular's Zones. Always take care to make a deliberate decision when to use and when not to\n// use these wrappers.\n// We take a copy of all globals to ensure that no other script will change them all of a sudden.\n// This ensures that when we register a timeout/interval on one global, that we will be able to\n// de-register it again in all cases.\nconst globals = {\n    setTimeout: win?.setTimeout,\n    clearTimeout: win?.clearTimeout,\n    setInterval: win?.setInterval,\n    clearInterval: win?.clearInterval,\n};\n// If the globals don't exist at execution time of this file, then we know that the globals stored\n// above are not wrapped by Zone.js. This in turn can mean better performance for Angular users.\nexport const isRunningZoneJs = win != null && win[\"Zone\"] != null && win[\"Zone\"][\"root\"] != null && typeof win[\"Zone\"][\"root\"][\"run\"] === \"function\";\nif (isRunningZoneJs) {\n    debug(\"Discovered Zone.js globals. Will attempt to register all timers inside the root Zone.\");\n}\nexport function setTimeout(..._) {\n    return executeGlobally.apply(\"setTimeout\", arguments);\n}\nexport function clearTimeout(..._) {\n    return executeGlobally.apply(\"clearTimeout\", arguments);\n}\nexport function setInterval(..._) {\n    return executeGlobally.apply(\"setInterval\", arguments);\n}\nexport function clearInterval(..._) {\n    return executeGlobally.apply(\"clearInterval\", arguments);\n}\nfunction executeGlobally() {\n    // We don't want to incur a performance penalty for all users just because some\n    // users are relying on zone.js. This API looks quite ridiculous, but it\n    // allows for concise and efficient code, e.g. arguments does not need to be\n    // translated into an array.\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const globalFunctionName = this;\n    if (isRunningZoneJs) {\n        try {\n            // Incurr a performance overhead for Zone.js users that we just cannot avoid:\n            // Copy the arguments passed in here so that we can use them inside the root\n            // zone.\n            const args = Array.prototype.slice.apply(arguments);\n            // @ts-expect-error necessary Zone.js types not added\n            return win[\"Zone\"][\"root\"][\"run\"](globals[globalFunctionName], win, args);\n        }\n        catch (e) {\n            warn(\"Failed to execute %s inside of zone (via Zone.js). Falling back to execution inside currently \" +\n                \"active zone.\", globalFunctionName, e);\n            // failure – maybe zone js not properly initialized? Fall back to execution\n            // outside of Zone.js as a last resort (outside of try/catch and if)\n        }\n    }\n    // Note: Explicitly passing win as 'this' even though we are getting the function from 'globals'\n    return globals[globalFunctionName]?.apply(win, arguments);\n}\n","import { doc, perf, win } from \"./globals\";\nimport { now } from \"./time\";\nimport { noop } from \"./fn\";\nimport { setTimeout } from \"./timers\";\nimport { addEventListener, removeEventListener } from \"./listeners\";\nconst TEN_MINUTES_IN_MILLIS = 1000 * 60 * 10;\nconst ONE_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;\nexport const isResourceTimingAvailable = !!(perf && perf.getEntriesByType);\nexport const isPerformanceObserverAvailable = perf && typeof win[\"PerformanceObserver\"] === \"function\" && typeof perf[\"now\"] === \"function\";\nexport const PerformanceTimingNames = Object.freeze({\n    CONNECT_END: \"connectEnd\",\n    CONNECT_START: \"connectStart\",\n    DECODED_BODY_SIZE: \"decodedBodySize\",\n    DOM_COMPLETE: \"domComplete\",\n    DOM_CONTENT_LOADED_EVENT_END: \"domContentLoadedEventEnd\",\n    DOM_CONTENT_LOADED_EVENT_START: \"domContentLoadedEventStart\",\n    DOM_INTERACTIVE: \"domInteractive\",\n    DOMAIN_LOOKUP_END: \"domainLookupEnd\",\n    DOMAIN_LOOKUP_START: \"domainLookupStart\",\n    ENCODED_BODY_SIZE: \"encodedBodySize\",\n    FETCH_START: \"fetchStart\",\n    LOAD_EVENT_END: \"loadEventEnd\",\n    LOAD_EVENT_START: \"loadEventStart\",\n    NAVIGATION_START: \"navigationStart\",\n    REDIRECT_END: \"redirectEnd\",\n    REDIRECT_START: \"redirectStart\",\n    REQUEST_START: \"requestStart\",\n    RESPONSE_END: \"responseEnd\",\n    RESPONSE_START: \"responseStart\",\n    SECURE_CONNECTION_START: \"secureConnectionStart\",\n    START_TIME: \"startTime\",\n    UNLOAD_EVENT_END: \"unloadEventEnd\",\n    UNLOAD_EVENT_START: \"unloadEventStart\",\n});\nexport function observeResourcePerformance(opts) {\n    if (!isPerformanceObserverAvailable)\n        return observeWithoutPerformanceObserverSupport(opts.onEnd);\n    // Used to calculate the duration when no resource was found.\n    let startTime;\n    let endTime;\n    let resource;\n    // Global resources that will need to be disposed\n    let observer;\n    let fallbackNoResourceFoundTimerHandle;\n    let fallbackEndNeverCalledTimerHandle;\n    return {\n        start: onStart,\n        end: onEnd,\n        cancel: disposeGlobalResources,\n    };\n    function onStart() {\n        startTime = perf.now();\n        try {\n            const PerformanceObserver = win?.PerformanceObserver;\n            if (PerformanceObserver) {\n                observer = new PerformanceObserver(onResourceFound);\n                observer?.observe({ type: \"resource\" });\n            }\n        }\n        catch (_e) {\n            // Some browsers may not support the passed entryTypes and decide to throw an error.\n            // This would then result in an error with a message like:\n            //\n            // entryTypes only contained unsupported types\n            //\n            // Swallow and ignore the error. Treat it like unavailable performance observer data.\n        }\n        fallbackEndNeverCalledTimerHandle = setTimeout(disposeGlobalResources, TEN_MINUTES_IN_MILLIS);\n    }\n    function onEnd() {\n        endTime = perf.now();\n        cancelFallbackEndNeverCalledTimer();\n        if (resource || !isWaitingAcceptable()) {\n            end();\n        }\n        else {\n            addEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n            fallbackNoResourceFoundTimerHandle = setTimeout(end, opts.maxWaitForResourceMillis);\n        }\n    }\n    function end() {\n        disposeGlobalResources();\n        // In some old web browsers, e.g. Chrome 31, the value provided as the duration\n        // can be very wrong. We have seen cases where this value is measured in years.\n        // If this does seem be the case, then we will ignore the duration property and\n        // instead prefer our approximation.\n        if (resource?.duration && resource.duration < ONE_DAY_IN_MILLIS) {\n            opts.onEnd({ resource, duration: Math.round(resource.duration) });\n        }\n        else {\n            opts.onEnd({ resource, duration: Math.round(endTime - startTime) });\n        }\n    }\n    function onResourceFound(list) {\n        const r = list.getEntriesByType(\"resource\").find((e) => {\n            // This polymorphism is not properly represented in the api types. The cast is safe since we're only accessing the resource timings.\n            const entry = e;\n            return (entry.startTime >= startTime &&\n                (!endTime || endTime + opts.maxToleranceForResourceTimingsMillis >= entry.responseEnd) &&\n                opts.resourceMatcher(entry));\n        });\n        if (!r)\n            return;\n        resource = r;\n        if (endTime)\n            end();\n    }\n    function onVisibilityChanged() {\n        if (!isWaitingAcceptable())\n            end();\n    }\n    function disposeGlobalResources() {\n        disconnectResourceObserver();\n        cancelFallbackNoResourceFoundTimer();\n        cancelFallbackEndNeverCalledTimer();\n        stopVisibilityObservation();\n    }\n    function disconnectResourceObserver() {\n        if (observer) {\n            try {\n                observer?.disconnect();\n            }\n            catch (_e) {\n                // Observer disconnect may throw when connect attempt wasn't successful. Ignore this.\n            }\n            observer = undefined;\n        }\n    }\n    function cancelFallbackNoResourceFoundTimer() {\n        if (fallbackNoResourceFoundTimerHandle) {\n            clearTimeout(fallbackNoResourceFoundTimerHandle);\n            fallbackNoResourceFoundTimerHandle = undefined;\n        }\n    }\n    function cancelFallbackEndNeverCalledTimer() {\n        if (fallbackEndNeverCalledTimerHandle) {\n            clearTimeout(fallbackEndNeverCalledTimerHandle);\n            fallbackEndNeverCalledTimerHandle = undefined;\n        }\n    }\n    function stopVisibilityObservation() {\n        if (!doc)\n            return;\n        removeEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n    }\n}\n// We may only wait for resource data to arrive as long as the document is visible or in the process\n// of becoming visible. In all other cases we might lose data when waiting, e.g. when the document\n// is in the process of being disposed.\nfunction isWaitingAcceptable() {\n    return doc?.visibilityState === \"visible\" || doc?.visibilityState === \"prerender\";\n}\nfunction observeWithoutPerformanceObserverSupport(onEnd) {\n    let start = 0;\n    return {\n        start: () => {\n            start = now();\n        },\n        end: () => onEnd({ duration: now() - start }),\n        cancel: noop,\n    };\n}\n","export const NO_VALUE_FALLBACK = \"undefined\";\nexport const INIT_MESSAGE = \"Initializing Dash0 Web SDK\";\n","export function roundToTwoDecimals(n) {\n    return Math.round(n * 100) / 100;\n}\n","import { doc, loc } from \"./globals\";\n/**\n * Parses url using URL constructor. Supports URL objects as passthrough input to simplify implementations\n * May throw if parsing fails\n * @param url\n */\nexport function parseUrl(url) {\n    if (typeof url !== \"string\")\n        return url;\n    return new URL(url, doc?.baseURI ?? loc?.href);\n}\n","import { parseUrl } from \"./url\";\n/** Returns the origin if present (if in browser context). */\nfunction getOrigin() {\n    return typeof location !== \"undefined\" ? location.origin : undefined;\n}\nexport function isSameOrigin(url) {\n    try {\n        const parsedUrl = parseUrl(url);\n        return parsedUrl.origin === getOrigin();\n    }\n    catch (_e) {\n        return false;\n    }\n}\n","import { debug } from \"./debug\";\nconst INSTRUMENTED_BY_DASH0_SYMBOL = Symbol.for(\"INSTRUMENTED_BY_DASH0\");\nfunction isAlreadyInstrumented(objOrFunction) {\n    // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n    return objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] === true;\n}\nfunction markAsInstrumented(objOrFunction) {\n    // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n    objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] = true;\n}\nexport function wrap(module, target, wrapper) {\n    const original = module[target];\n    if (!original) {\n        debug(`${String(target)} is not defined, unable to instrument`);\n        return;\n    }\n    if (isAlreadyInstrumented(original)) {\n        debug(`${String(target)} has already been instrumented, skipping`);\n    }\n    markAsInstrumented(original);\n    module[target] = wrapper(original);\n}\n","// TODO use OTel types here?\nexport const vars = {\n    endpoints: [],\n    resource: {\n        attributes: [],\n    },\n    scope: {\n        name: \"dash0-web-sdk\",\n        version: __sdkVersion,\n        attributes: [],\n    },\n    signalAttributes: [],\n    ignoreUrls: [],\n    ignoreErrorMessages: [],\n    wrapEventHandlers: true,\n    wrapTimers: true,\n    propagateTraceHeadersCorsURLs: [],\n    maxWaitForResourceTimingsMillis: 10000,\n    maxToleranceForResourceTimingsMillis: 3000,\n    headersToCapture: [],\n    pageViewInstrumentation: {\n        trackVirtualPageViews: true,\n    },\n};\n","// Resource Attribute Keys\nexport const SERVICE_NAME = \"service.name\";\nexport const SERVICE_VERSION = \"service.version\";\nexport const DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\nexport const DEPLOYMENT_NAME = \"deployment.name\";\nexport const DEPLOYMENT_ID = \"deployment.id\";\n// Misc Signal Attribute Keys\nexport const EVENT_NAME = \"event.name\";\nexport const PAGE_LOAD_ID = \"page.load.id\";\nexport const SESSION_ID = \"session.id\";\nexport const USER_AGENT = \"user_agent.original\";\nexport const BROWSER_TAB_ID = \"browser.tab.id\";\nexport const WINDOW_WIDTH = \"browser.window.width\";\nexport const WINDOW_HEIGHT = \"browser.window.height\";\nexport const NETWORK_CONNECTION_TYPE = \"network.connection.subtype\";\nexport const EXCEPTION_COMPONENT_STACK = \"exception.component_stack\";\n// User Attribute Keys\nexport const USER_ID = \"user.id\";\nexport const USER_NAME = \"user.name\";\nexport const USER_FULL_NAME = \"user.full_name\";\nexport const USER_EMAIL = \"user.email\";\nexport const USER_HASH = \"user.hash\";\nexport const USER_ROLES = \"user.roles\";\n// Exception Attribute Keys\nexport const EXCEPTION_MESSAGE = \"exception.message\";\nexport const EXCEPTION_TYPE = \"exception.type\";\nexport const EXCEPTION_STACKTRACE = \"exception.stacktrace\";\n// URL Attribute Keys\nexport const URL_DOMAIN = \"url.domain\";\nexport const URL_FRAGMENT = \"url.fragment\";\nexport const URL_FULL = \"url.full\";\nexport const URL_PATH = \"url.path\";\nexport const URL_QUERY = \"url.query\";\nexport const URL_SCHEME = \"url.scheme\";\n// Http Attribute Keys\nexport const HTTP_REQUEST_METHOD = \"http.request.method\";\nexport const HTTP_REQUEST_METHOD_ORIGINAL = \"http.request.method_original\";\nexport const HTTP_REQUEST_HEADER = \"http.request.header\";\nexport const HTTP_RESPONSE_STATUS_CODE = \"http.response.status_code\";\nexport const HTTP_RESPONSE_HEADER = \"http.response.header\";\nexport const HTTP_RESPONSE_BODY_SIZE = \"http.response.body.size\";\n// Event Names\nexport const PAGE_VIEW = \"browser.page_view\";\nexport const NAVIGATION_TIMING = \"browser.navigation_timing\";\nexport const WEB_VITAL = \"browser.web_vital\";\nexport const ERROR = \"browser.error\";\nexport const SPAN_EVENT_NAME_EXCEPTION = \"exception\";\n// Log Severities\nexport const LOG_SEVERITIES = {\n    UNSPECIFIED: 0,\n    TRACE: 1,\n    DEBUG: 5,\n    INFO: 9,\n    WARN: 13,\n    ERROR: 17,\n    FATAL: 21,\n};\n// Page View Event Attributes\n// SEE: https://github.com/open-telemetry/semantic-conventions/pull/1910/files\nexport const PAGE_VIEW_TYPE = \"type\";\nexport const PAGE_VIEW_TYPE_VALUES = {\n    INITIAL: 0,\n    VIRTUAL: 1,\n};\nexport const PAGE_VIEW_CHANGE_STATE = \"change_state\";\nexport const PAGE_VIEW_CHANGE_STATE_VALUES = {\n    PUSH: \"pushState\",\n    REPLACE: \"replaceState\",\n};\n// Span Status\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1; // This is here for completion, status ok is reserved for use by application developers\nexport const SPAN_STATUS_ERROR = 2;\n// Span Kind\n// See: https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\nexport const SPAN_KIND_CLIENT = 3;\n","import { isSupported, getItem, setItem, removeItem, SESSION_ID_BYTES } from \"../utils\";\nimport { debug, generateUniqueId, now } from \"../utils\";\nimport { info, warn } from \"../utils\";\nconst SESSION_STORAGE_KEY = \"d0_session\";\nconst STORAGE_SEPARATOR_KEY = \"#\";\nconst DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS = 1000 * 60 * 60 * 3;\nconst DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 6;\nconst MAX_ALLOWED_SESSION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 24;\nexport let sessionId = null;\nexport function trackSessions(sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n    if (!isSupported) {\n        debug(\"Storage API is not available and session tracking is therefore not supported.\");\n        return;\n    }\n    if (!sessionInactivityTimeoutMillis) {\n        sessionInactivityTimeoutMillis = DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS;\n    }\n    if (!sessionTerminationTimeoutMillis) {\n        sessionTerminationTimeoutMillis = DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS;\n    }\n    sessionInactivityTimeoutMillis = Math.min(sessionInactivityTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n    sessionTerminationTimeoutMillis = Math.min(sessionTerminationTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n    try {\n        const storedValue = getItem(SESSION_STORAGE_KEY);\n        let session = parseSession(storedValue);\n        if (session && !isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis)) {\n            session = null;\n        }\n        if (session) {\n            session.lastActivityTime = now();\n        }\n        else {\n            session = {\n                id: generateUniqueId(SESSION_ID_BYTES),\n                startTime: now(),\n                lastActivityTime: now(),\n            };\n        }\n        setItem(SESSION_STORAGE_KEY, serializeSession(session));\n        sessionId = session.id;\n    }\n    catch (e) {\n        warn(\"Failed to record session information\", e);\n    }\n}\nexport function terminateSession() {\n    sessionId = null;\n    if (!isSupported) {\n        return;\n    }\n    try {\n        removeItem(SESSION_STORAGE_KEY);\n    }\n    catch (e) {\n        info(\"Failed to terminate session\", e);\n    }\n}\nfunction parseSession(storedValue) {\n    if (!storedValue) {\n        return null;\n    }\n    const values = storedValue.split(STORAGE_SEPARATOR_KEY);\n    if (values.length < 3) {\n        return null;\n    }\n    const id = values[0];\n    const startTime = parseInt(values[1], 10);\n    const lastActivityTime = parseInt(values[2], 10);\n    if (!id || isNaN(startTime) || isNaN(lastActivityTime)) {\n        return null;\n    }\n    return {\n        id,\n        startTime,\n        lastActivityTime,\n    };\n}\nfunction serializeSession(session) {\n    return session.id + STORAGE_SEPARATOR_KEY + session.startTime + STORAGE_SEPARATOR_KEY + session.lastActivityTime;\n}\nfunction isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n    const minAllowedLastActivityTime = now() - sessionInactivityTimeoutMillis;\n    if (session.lastActivityTime < minAllowedLastActivityTime) {\n        return false;\n    }\n    const minAllowedStartTime = now() - sessionTerminationTimeoutMillis;\n    return session.startTime >= minAllowedStartTime;\n}\n","var e,n,t,r,i,o=-1,a=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(o=n.timeStamp,e(n))}),!0)},c=function(){var e=self.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),r=\"navigate\";o>=0?r=\"back-forward-cache\":t&&(document.prerendering||u()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":t.type&&(r=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v4-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},t||{})),r}}catch(e){}},d=function(e,n,t,r){var i,o;return function(a){n.value>=0&&(a||r)&&((o=n.value-(i||0))||void 0===i)&&(i=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){document.addEventListener(\"visibilitychange\",(function(){\"hidden\"===document.visibilityState&&e()}))},v=function(e){var n=!1;return function(){n||(e(),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),a((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},b=[1800,3e3],S=function(e,n){n=n||{},C((function(){var t,r=E(),i=f(\"FCP\"),o=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(o.disconnect(),e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries.push(e),t(!0)))}))}));o&&(t=d(e,i,b,n.reportAllChanges),a((function(r){i=f(\"FCP\"),t=d(e,i,b,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,t(!0)}))})))}))},L=[.1,.25],w=function(e,n){n=n||{},S(v((function(){var t,r=f(\"CLS\",0),i=0,o=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=o[0],t=o[o.length-1];i&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(i+=e.value,o.push(e)):(i=e.value,o=[e])}})),i>r.value&&(r.value=i,r.entries=o,t())},u=s(\"layout-shift\",c);u&&(t=d(e,r,L,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),a((function(){i=0,r=f(\"CLS\",0),t=d(e,r,L,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A=0,I=1/0,P=0,M=function(e){e.forEach((function(e){e.interactionId&&(I=Math.min(I,e.interactionId),P=Math.max(P,e.interactionId),A=P?(P-I)/7+1:0)}))},k=function(){return e?A:performance.interactionCount||0},F=function(){\"interactionCount\"in performance||e||(e=s(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))},D=[],x=new Map,R=0,B=function(){var e=Math.min(D.length-1,Math.floor((k()-R)/50));return D[e]},H=[],q=function(e){if(H.forEach((function(n){return n(e)})),e.interactionId||\"first-input\"===e.entryType){var n=D[D.length-1],t=x.get(e.interactionId);if(t||D.length<10||e.duration>n.latency){if(t)e.duration>t.latency?(t.entries=[e],t.latency=e.duration):e.duration===t.latency&&e.startTime===t.entries[0].startTime&&t.entries.push(e);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};x.set(r.id,r),D.push(r)}D.sort((function(e,n){return n.latency-e.latency})),D.length>10&&D.splice(10).forEach((function(e){return x.delete(e.id)}))}}},O=function(e){var n=self.requestIdleCallback||self.setTimeout,t=-1;return e=v(e),\"hidden\"===document.visibilityState?e():(t=n(e),p(e)),t},N=[200,500],j=function(e,n){\"PerformanceEventTiming\"in self&&\"interactionId\"in PerformanceEventTiming.prototype&&(n=n||{},C((function(){var t;F();var r,i=f(\"INP\"),o=function(e){O((function(){e.forEach(q);var n=B();n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r())}))},c=s(\"event\",o,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});r=d(e,i,N,n.reportAllChanges),c&&(c.observe({type:\"first-input\",buffered:!0}),p((function(){o(c.takeRecords()),r(!0)})),a((function(){R=k(),D.length=0,x.clear(),i=f(\"INP\"),r=d(e,i,N,n.reportAllChanges)})))})))},_=[2500,4e3],z={},G=function(e,n){n=n||{},C((function(){var t,r=E(),i=f(\"LCP\"),o=function(e){n.reportAllChanges||(e=e.slice(-1)),e.forEach((function(e){e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-u(),0),i.entries=[e],t())}))},c=s(\"largest-contentful-paint\",o);if(c){t=d(e,i,_,n.reportAllChanges);var m=v((function(){z[i.id]||(o(c.takeRecords()),c.disconnect(),z[i.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return O(m)}),{once:!0,capture:!0})})),p(m),a((function(r){i=f(\"LCP\"),t=d(e,i,_,n.reportAllChanges),l((function(){i.value=performance.now()-r.timeStamp,z[i.id]=!0,t(!0)}))}))}}))},J=[800,1800],K=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Q=function(e,n){n=n||{};var t=f(\"TTFB\"),r=d(e,t,J,n.reportAllChanges);K((function(){var i=c();i&&(t.value=Math.max(i.responseStart-u(),0),t.entries=[i],r(!0),a((function(){t=f(\"TTFB\",0),(r=d(e,t,J,n.reportAllChanges))(!0)})))}))},U={passive:!0,capture:!0},V=new Date,W=function(e,i){n||(n=i,t=e,r=new Date,Z(removeEventListener),X())},X=function(){if(t>=0&&t<r-V){var e={entryType:\"first-input\",name:n.type,target:n.target,cancelable:n.cancelable,startTime:n.timeStamp,processingStart:n.timeStamp+t};i.forEach((function(n){n(e)})),i=[]}},Y=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){W(e,n),i()},r=function(){i()},i=function(){removeEventListener(\"pointerup\",t,U),removeEventListener(\"pointercancel\",r,U)};addEventListener(\"pointerup\",t,U),addEventListener(\"pointercancel\",r,U)}(n,e):W(n,e)}},Z=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,Y,U)}))},$=[100,300],ee=function(e,r){r=r||{},C((function(){var o,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),o(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);o=d(e,u,$,r.reportAllChanges),h&&(p(v((function(){m(h.takeRecords()),h.disconnect()}))),a((function(){var a;u=f(\"FID\"),o=d(e,u,$,r.reportAllChanges),i=[],t=-1,n=null,Z(addEventListener),a=l,i.push(a),X()})))}))};export{L as CLSThresholds,b as FCPThresholds,$ as FIDThresholds,N as INPThresholds,_ as LCPThresholds,J as TTFBThresholds,w as onCLS,S as onFCP,ee as onFID,j as onINP,G as onLCP,Q as onTTFB};\n","import { addEventListener } from \"./listeners\";\nimport { doc, win } from \"./globals\";\nlet isUnloading = false;\n/**\n * Triggers the `fn` when the HTML document is getting unloaded\n * (or when it looks like it might be). Useful to flush batch activities.\n */\nexport function onLastChance(fn) {\n    if (isUnloading) {\n        fn();\n    }\n    if (!doc || !win)\n        return;\n    addEventListener(doc, \"visibilitychange\", function () {\n        if (doc.visibilityState !== \"visible\") {\n            fn();\n        }\n    });\n    addEventListener(win, \"pagehide\", function () {\n        isUnloading = true;\n        fn();\n    });\n    // According to the spec visibilitychange should be a replacement for\n    // beforeunload, but the reality is different (as of 2019-04-17). Chrome will\n    // close tabs without firing visibilitychange. beforeunload on the other hand\n    // is fired.\n    addEventListener(win, \"beforeunload\", function () {\n        isUnloading = true;\n        fn();\n    });\n}\n","import { onLastChance } from \"../utils/on-last-chance\";\nimport { doc } from \"../utils\";\nimport { setTimeout } from \"../utils/timers\";\nconst SCHEDULE_DELAY_MILLIS = 1000;\nconst MAX_QUEUE_SIZE = 15;\nexport function newBatcher(sendInternal) {\n    const queuedItems = [];\n    let pendingFlushTimeout;\n    // We attempt batching of messages to be more efficient on the client, network and\n    // server-side. While the connection is either a persistent HTTP 2 connection or\n    // an HTTP 1.1 connection with keep-alive, there is still some overhead involved\n    // in having many small messages.\n    //\n    // For this reason we attempt batching. When batching we must be careful to\n    // force a transmission when the document is unloaded.\n    onLastChance(flush);\n    return {\n        send(item) {\n            if (isWindowHidden()) {\n                // We cannot guarantee that we will ever get time to transmit data in a batched\n                // format when the window is hidden, as this might occur while the document is\n                // being unloaded. Immediately force a transmission in these cases.\n                sendInternal([item]);\n                return;\n            }\n            queuedItems.push(item);\n            if (queuedItems.length >= MAX_QUEUE_SIZE) {\n                flush();\n            }\n            else if (pendingFlushTimeout == null) {\n                pendingFlushTimeout = setTimeout(flush, SCHEDULE_DELAY_MILLIS);\n            }\n        },\n    };\n    function flush() {\n        if (pendingFlushTimeout != null) {\n            clearTimeout(pendingFlushTimeout);\n            pendingFlushTimeout = null;\n        }\n        if (queuedItems.length > 0) {\n            sendInternal(queuedItems.slice());\n            queuedItems.length = 0;\n        }\n    }\n}\nfunction isWindowHidden() {\n    return doc?.visibilityState !== \"visible\";\n}\n","import { vars } from \"../vars\";\nimport { noop, warn, fetch } from \"../utils\";\nconst BEACON_BODY_SIZE_LIMIT = 60000;\nexport async function send(path, body) {\n    const jsonString = JSON.stringify(body);\n    let requestBody = jsonString;\n    let byteLength = jsonString.length;\n    let isCompressed = false;\n    // Try to compress if supported\n    if (typeof CompressionStream !== \"undefined\") {\n        requestBody = await compressWithGzip(jsonString);\n        byteLength = requestBody.byteLength;\n        isCompressed = true;\n    }\n    // Send to all endpoints in parallel\n    await Promise.all(vars.endpoints.map(async (endpoint) => {\n        try {\n            const url = new URL(endpoint[\"url\"]);\n            url.pathname = url.pathname + (url.pathname.endsWith(\"/\") ? path.substring(1) : path);\n            const headers = {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${endpoint[\"authToken\"]}`,\n            };\n            if (endpoint.dataset) {\n                headers[\"Dash0-Dataset\"] = endpoint[\"dataset\"];\n            }\n            // Try to compress if supported\n            if (isCompressed) {\n                headers[\"Content-Encoding\"] = \"gzip\";\n            }\n            if (!fetch) {\n                warn(\"Unable to send telemetry, fetch is not defined\");\n                return;\n            }\n            const response = await fetch(url, {\n                method: \"POST\",\n                headers,\n                body: requestBody,\n                // The keepalive flag is related to the window.sendBeacon API. This in turn has size limitations.\n                keepalive: byteLength <= BEACON_BODY_SIZE_LIMIT,\n            });\n            // read the body so the connection can be closed\n            response.text().catch(noop);\n            if (!response.ok) {\n                warn(`Failed to send telemetry to ${url}: ${response.status} ${response.statusText}`);\n            }\n        }\n        catch (error) {\n            warn(`Error sending telemetry to ${endpoint.url}${path}:`, error);\n        }\n    }));\n}\nasync function compressWithGzip(data) {\n    const blob = new Blob([data]);\n    const stream = blob.stream();\n    const compressedStream = stream.pipeThrough(new CompressionStream(\"gzip\"));\n    return new Response(compressedStream).arrayBuffer();\n}\n","import { newBatcher } from \"./batcher\";\nimport { send } from \"./fetch\";\nimport { vars } from \"../vars\";\nimport { createRateLimiter } from \"../utils/rate-limit\";\nimport { debug, error } from \"../utils\";\nconst logBatcher = newBatcher(sendLogs);\nconst spanBatcher = newBatcher(sendSpans);\nlet rateLimiter;\nfunction isRateLimited() {\n    if (!rateLimiter) {\n        rateLimiter = createRateLimiter({\n            maxCalls: 8096,\n            maxCallsPerTenMinutes: 4096,\n            maxCallsPerTenSeconds: 128,\n        });\n    }\n    return rateLimiter();\n}\nexport function sendLog(log) {\n    if (isRateLimited()) {\n        debug(\"Transport rate limit. Will not send item.\", log);\n        return;\n    }\n    logBatcher.send(log);\n}\nfunction sendLogs(logs) {\n    send(\"/v1/logs\", {\n        resourceLogs: [\n            {\n                resource: vars.resource,\n                scopeLogs: [\n                    {\n                        scope: vars.scope,\n                        logRecords: logs,\n                    },\n                ],\n            },\n        ],\n    }).catch((err) => {\n        error(\"Failed to transmit logs\", err);\n    });\n}\nexport function sendSpan(span) {\n    if (isRateLimited()) {\n        debug(\"Transport rate limit. Will not send item.\", span);\n        return;\n    }\n    spanBatcher.send(span);\n}\nfunction sendSpans(spans) {\n    send(\"/v1/traces\", {\n        resourceSpans: [\n            {\n                resource: vars.resource,\n                scopeSpans: [\n                    {\n                        scope: vars.scope,\n                        spans: spans,\n                    },\n                ],\n            },\n        ],\n    }).catch((err) => {\n        error(\"Failed to transmit spans\", err);\n    });\n}\n","import { setInterval } from \"./timers\";\nexport function createRateLimiter(opts) {\n    const maxCalls = opts.maxCalls || 4096;\n    const maxCallsPerTenMinutes = opts.maxCallsPerTenMinutes || 128;\n    const maxCallsPerTenSeconds = opts.maxCallsPerTenSeconds || 32;\n    let totalCalls = 0;\n    let totalCallsInLastTenMinutes = 0;\n    let totalCallsInLastTenSeconds = 0;\n    setInterval(function () {\n        totalCallsInLastTenMinutes = 0;\n    }, 1000 * 60 * 10);\n    setInterval(function () {\n        totalCallsInLastTenSeconds = 0;\n    }, 1000 * 10);\n    return function isExcessiveUsage() {\n        return (++totalCalls > maxCalls ||\n            ++totalCallsInLastTenMinutes > maxCallsPerTenMinutes ||\n            ++totalCallsInLastTenSeconds > maxCallsPerTenSeconds);\n    };\n}\n","const ANY_VALUE_KEYS = [\n    \"stringValue\",\n    \"boolValue\",\n    \"intValue\",\n    \"doubleValue\",\n    \"arrayValue\",\n    \"kvlistValue\",\n    \"bytesValue\",\n];\nfunction isAnyValue(value) {\n    if (value == null || typeof value !== \"object\")\n        return false;\n    const keys = Object.keys(value);\n    return keys.length === 1 && ANY_VALUE_KEYS.includes(keys[0]);\n}\nexport function toAnyValue(value) {\n    if (value == null) {\n        return undefined;\n    }\n    let anyValue = {};\n    if (Array.isArray(value)) {\n        anyValue[\"arrayValue\"] = { values: value.map((e) => toAnyValue(e)) };\n    }\n    else if (typeof value === \"string\") {\n        anyValue[\"stringValue\"] = value;\n    }\n    else if (typeof value === \"number\") {\n        anyValue[\"doubleValue\"] = value;\n    }\n    else if (typeof value === \"boolean\") {\n        anyValue[\"boolValue\"] = value;\n    }\n    else if (isAnyValue(value)) {\n        anyValue = value;\n    }\n    else if (typeof value === \"object\") {\n        anyValue[\"kvlistValue\"] = { values: Object.entries(value).map(([key, value]) => toKeyValue(key, value)) };\n    }\n    return anyValue;\n}\nexport function toKeyValue(key, value) {\n    return {\n        key: key,\n        value: toAnyValue(value),\n    };\n}\nexport function addAttribute(attributes, key, value) {\n    attributes.push(toKeyValue(key, value));\n}\nexport function removeAttribute(attributes, key) {\n    const index = attributes.findIndex((attr) => attr[\"key\"] === key);\n    if (index !== -1) {\n        attributes.splice(index, 1);\n    }\n}\n","import { doc } from \"../globals\";\nimport { perf } from \"../globals\";\nconst TRACE_PARENT_HEADER = \"traceparent\";\n/**\n * See https://www.w3.org/TR/trace-context/#traceparent-header\n */\nconst w3cTraceparentFormat = /^00-([a-f0-9]{32})-([a-f0-9]{16})-[0-9]{1,2}$/;\nexport function getTraceContextForPageLoad() {\n    const match = getTraceparentFromMetaElement().match(w3cTraceparentFormat) ||\n        getTraceparentFromNavigationTiming().match(w3cTraceparentFormat);\n    if (match) {\n        return {\n            traceId: match[1],\n            spanId: match[2],\n        };\n    }\n    return undefined;\n}\nfunction getTraceparentFromMetaElement() {\n    return (Array.from(doc?.getElementsByTagName(\"meta\") ?? [])\n        .find((e) => e.getAttribute(\"name\")?.toLowerCase() === TRACE_PARENT_HEADER)\n        ?.content.trim() || \"\");\n}\nfunction getTraceparentFromNavigationTiming() {\n    const nt = perf.getEntriesByType(\"navigation\")[0];\n    if (!nt) {\n        return \"\";\n    }\n    if (!nt.serverTiming) {\n        return \"\";\n    }\n    return getTraceparentFromServerTiming(nt.serverTiming);\n}\nfunction getTraceparentFromServerTiming(serverTimings) {\n    for (const serverEntry of serverTimings) {\n        if (serverEntry.name === TRACE_PARENT_HEADER) {\n            return serverEntry.description.trim();\n        }\n    }\n    return \"\";\n}\nexport function addTraceContextHttpHeaders(fn, ctx, span) {\n    /**\n     * W3C Traceparent header.\n     * General format is ${version}-${trace-id}-${parent-id}-${trace-flags}\n     *\n     * The only spec'd version is currently 00\n     * Trace flags are an 8 bit field of bit flags:\n     * Sampled: 00000001 - Should only be set if a definite decision to record the trace was made.\n     * If set downstream processors should also record the trace\n     * Random Trace ID: 00000010 - IF set the component guarantees that the seven right most bytes of the trace-id\n     * are randomly generated. Downstream processors are then able to rely on this for technical things like shard keys.\n     *\n     * References:\n     * https://www.w3.org/TR/trace-context-2/#traceparent-header\n     * https://www.w3.org/TR/trace-context-2/#trace-flags\n     * https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\n     */\n    fn.call(ctx, \"traceparent\", `00-${span.traceId}-${span.traceId}-02`);\n}\n","import { nowNanos } from \"../time\";\nimport { generateUniqueId, SPAN_ID_BYTES, TRACE_ID_BYTES } from \"../id\";\nimport { SPAN_KIND_CLIENT, SPAN_STATUS_UNSET } from \"../../semantic-conventions\";\nexport function startSpan(name) {\n    return {\n        traceId: generateUniqueId(TRACE_ID_BYTES),\n        spanId: generateUniqueId(SPAN_ID_BYTES),\n        name,\n        // Always CLIENT for now https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\n        // Note: we directly define otlp here, this differs from the values used by oteljs internally.\n        kind: SPAN_KIND_CLIENT,\n        startTimeUnixNano: nowNanos(),\n        attributes: [],\n        events: [],\n        links: [],\n        status: { code: SPAN_STATUS_UNSET },\n    };\n}\nexport function endSpan(span, status, durationNano) {\n    // We cast here to avoid having to instantiate a copy of the span\n    const s = span;\n    if (status) {\n        s.status = status;\n    }\n    s.endTimeUnixNano =\n        durationNano != null ? String(Math.round(parseInt(s.startTimeUnixNano) + durationNano)) : nowNanos();\n    return s;\n}\n/**\n * Adds an event to a span. Can optionally accept the events timestamp and attributes for the event.\n * The timestamp needs to be specified as nanoseconds since unix epoch in string format.\n */\nexport function addSpanEvent(span, name, attributesOrTs, attributes) {\n    let ts = undefined;\n    let attr = undefined;\n    if (typeof attributesOrTs === \"string\") {\n        ts = attributesOrTs;\n    }\n    else if (Array.isArray(attributesOrTs)) {\n        attr = attributesOrTs;\n    }\n    if (attributes) {\n        attr = attributes;\n    }\n    span.events.push({\n        name,\n        timeUnixNano: ts != null ? ts : nowNanos(),\n        attributes: attr ?? [],\n    });\n}\nexport function setSpanStatus(span, code, message) {\n    span.status = {\n        code,\n        message,\n    };\n}\n","// sessionStorage API re-exposed to allow testing.\nimport { sessionStorage } from \"./globals\";\nexport const isSupported = sessionStorage != null &&\n    typeof sessionStorage.getItem === \"function\" &&\n    typeof sessionStorage.setItem === \"function\";\nexport function getItem(k) {\n    if (isSupported && sessionStorage) {\n        return sessionStorage.getItem(k);\n    }\n    return null;\n}\nexport function setItem(k, v) {\n    if (isSupported && sessionStorage) {\n        sessionStorage.setItem(k, v);\n    }\n}\nexport function removeItem(k) {\n    if (isSupported && sessionStorage) {\n        sessionStorage.removeItem(k);\n    }\n}\n","import { getItem, isSupported, setItem } from \"./session-storage\";\nimport { debug, warn } from \"./debug\";\nimport { generateUniqueId, TAB_ID_BYTES } from \"./id\";\nconst TAB_ID_STORAGE_KEY = \"d0_tab\";\nexport let tabId = null;\n/**\n * We want to be able to identify what browser tab the user is looking at. We do this by identifying tabs through\n * random-generated IDs that are kept in session storage. To quote MDN:\n *\n * > sessionStorage is partitioned by both origin and browser tabs (top-level browsing contexts)\n */\nexport function initializeTabId() {\n    if (!isSupported) {\n        debug(\"Storage API is not available and tab tracking is therefore not supported.\");\n        return;\n    }\n    try {\n        const storedValue = getItem(TAB_ID_STORAGE_KEY);\n        if (storedValue) {\n            tabId = storedValue;\n            return;\n        }\n        tabId = generateUniqueId(TAB_ID_BYTES);\n        setItem(TAB_ID_STORAGE_KEY, tabId);\n    }\n    catch (e) {\n        warn(\"Failed to record tab ID information\", e);\n    }\n}\n","import { nav, NO_VALUE_FALLBACK, win } from \"../utils\";\nimport { BROWSER_TAB_ID, NETWORK_CONNECTION_TYPE, SESSION_ID, WINDOW_HEIGHT, WINDOW_WIDTH, } from \"../semantic-conventions\";\nimport { sessionId } from \"../api/session\";\nimport { vars } from \"../vars\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addUrlAttributes } from \"./url\";\nimport { tabId } from \"../utils/tab-id\";\nexport function addCommonAttributes(attributes, options) {\n    for (let i = 0; i < vars.signalAttributes.length; i++) {\n        attributes.push(vars.signalAttributes[i]);\n    }\n    addUrlAttributes(attributes, options?.url ?? win?.location.href ?? NO_VALUE_FALLBACK);\n    if (sessionId) {\n        addAttribute(attributes, SESSION_ID, sessionId);\n    }\n    if (tabId) {\n        addAttribute(attributes, BROWSER_TAB_ID, tabId);\n    }\n    addAttribute(attributes, WINDOW_WIDTH, win?.innerWidth ?? NO_VALUE_FALLBACK);\n    addAttribute(attributes, WINDOW_HEIGHT, win?.innerHeight ?? NO_VALUE_FALLBACK);\n    // @ts-expect-error -- TypeScript is not aware of navigator.connection.effectiveType\n    const connectionType = nav?.connection?.effectiveType;\n    if (connectionType) {\n        addAttribute(attributes, NETWORK_CONNECTION_TYPE, connectionType);\n    }\n}\n","import { addAttribute } from \"../utils/otel\";\nimport { URL_DOMAIN, URL_FRAGMENT, URL_FULL, URL_PATH, URL_QUERY, URL_SCHEME } from \"../semantic-conventions\";\nimport { parseUrl } from \"../utils/url\";\nexport function addUrlAttributes(attributes, url) {\n    try {\n        const parsed = parseUrl(url);\n        if (parsed.username)\n            parsed.username = \"REDACTED\";\n        if (parsed.password)\n            parsed.password = \"REDACTED\";\n        addAttribute(attributes, URL_FULL, parsed.href);\n        addAttribute(attributes, URL_PATH, parsed.pathname);\n        addAttribute(attributes, URL_DOMAIN, parsed.hostname);\n        addAttribute(attributes, URL_SCHEME, parsed.protocol.replace(\":\", \"\"));\n        if (parsed.hash) {\n            addAttribute(attributes, URL_FRAGMENT, parsed.hash.replace(\"#\", \"\"));\n        }\n        if (parsed.search) {\n            addAttribute(attributes, URL_QUERY, parsed.search.replace(\"?\", \"\"));\n        }\n    }\n    catch (_e) {\n        addAttribute(attributes, URL_FULL, String(url));\n    }\n}\n","import { onLCP, onINP, onCLS } from \"web-vitals\";\nimport { EVENT_NAME, LOG_SEVERITIES, WEB_VITAL } from \"../semantic-conventions\";\nimport { nowNanos, roundToTwoDecimals } from \"../utils\";\nimport { sendLog } from \"../transport\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addCommonAttributes } from \"../attributes\";\nexport function startWebVitalsInstrumentation() {\n    onLCP(onWebVital);\n    onINP(onWebVital);\n    onCLS(onWebVital);\n}\nfunction onWebVital(metric) {\n    const attributes = [];\n    addAttribute(attributes, EVENT_NAME, WEB_VITAL);\n    const bodyAttributes = [];\n    addAttribute(bodyAttributes, \"name\", metric.name);\n    addAttribute(bodyAttributes, \"value\", roundToTwoDecimals(metric.value));\n    addAttribute(bodyAttributes, \"delta\", roundToTwoDecimals(metric.delta));\n    const log = {\n        timeUnixNano: nowNanos(),\n        attributes: attributes,\n        severityNumber: LOG_SEVERITIES.INFO,\n        severityText: \"INFO\",\n        body: {\n            kvlistValue: {\n                values: bodyAttributes,\n            },\n        },\n    };\n    addCommonAttributes(log.attributes);\n    sendLog(log);\n}\n","import { vars } from \"../vars\";\nexport function matchesAny(regexp, s) {\n    for (let i = 0, len = regexp.length; i < len; i++) {\n        if (regexp[i].test(s)) {\n            return true;\n        }\n    }\n    return false;\n}\nconst DATA_URL_PREFIX = \"data:\";\nexport function isUrlIgnored(url) {\n    if (!url) {\n        return true;\n    }\n    // Force string conversion. During runtime we have seen that some URLs passed into this code path aren't actually\n    // strings. Reason currently unknown.\n    url = String(url);\n    if (!url) {\n        return true;\n    }\n    // We never want to track data URLs. Instead of matching these via regular expressions (which might be expensive),\n    // we are explicitly doing a startsWith ignore case check\n    // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n    if (url.substring == null || url.substring(0, DATA_URL_PREFIX.length).toLowerCase() === DATA_URL_PREFIX) {\n        return true;\n    }\n    // Disable monitoring of data transmission requests. The data transmission strategy already ensures\n    // that data transmission requests are not picked up internally. However, we have seen some users\n    // leverage custom (broken) XMLHttpRequest instrumentation to implement application code which\n    // then break the detection of data transmission requests.\n    if (isTransportRequest(url)) {\n        return true;\n    }\n    return matchesAny(vars.ignoreUrls, url);\n}\nfunction isTransportRequest(url) {\n    const lowerCaseUrl = url.toLowerCase();\n    for (let i = 0, len = vars.endpoints.length; i < len; i++) {\n        const endpoint = vars.endpoints[i];\n        if (lowerCaseUrl.startsWith(endpoint.url)) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function isErrorMessageIgnored(message) {\n    return !message || matchesAny(vars.ignoreErrorMessages, message);\n}\n","import { hasOwnProperty, nowNanos, win } from \"../../utils\";\nimport { isErrorMessageIgnored } from \"../../utils/ignore-rules\";\nimport { sendLog } from \"../../transport\";\nimport { ERROR, EVENT_NAME, EXCEPTION_COMPONENT_STACK, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, LOG_SEVERITIES, } from \"../../semantic-conventions\";\nimport { addAttribute } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nconst MAX_ERRORS_TO_REPORT = 100;\nconst MAX_STACK_SIZE = 30;\nconst MAX_NUMBER_OF_TRACKED_ERRORS = 20;\nlet reportedErrors = 0;\nlet numberOfDifferentErrorsSeen = 0;\nlet seenErrors = {};\nlet scheduledTransmissionTimeoutHandle;\n// We are wrapping global listeners. In these, we are catching and rethrowing errors.\n// In older browsers, rethrowing errors actually manipulates the error objects. As a\n// result, it is not possible to just mark an error as reported. The simplest way to\n// avoid double reporting is to temporarily disable the global onError handler…\nlet ignoreNextOnError = false;\nexport function ignoreNextOnErrorEvent() {\n    ignoreNextOnError = true;\n}\nexport function startOnErrorInstrumentation() {\n    if (!win)\n        return;\n    const globalOnError = win.onerror;\n    win.onerror = function (message, fileName, lineNumber, columnNumber, error) {\n        if (ignoreNextOnError) {\n            ignoreNextOnError = false;\n            if (typeof globalOnError === \"function\") {\n                return globalOnError.apply(this, arguments);\n            }\n            return;\n        }\n        let stack = error && error.stack;\n        if (!stack) {\n            stack = \"at \" + fileName + \" \" + lineNumber;\n            if (columnNumber != null) {\n                stack += \":\" + columnNumber;\n            }\n        }\n        onUnhandledError({ message: String(message), stack });\n        if (typeof globalOnError === \"function\") {\n            return globalOnError.apply(this, arguments);\n        }\n    };\n}\nexport function reportError(error, opts) {\n    if (!error) {\n        return;\n    }\n    if (typeof error === \"string\") {\n        onUnhandledError({ message: error, opts });\n    }\n    else {\n        onUnhandledError({ message: error.message, type: error.name, stack: error.stack, opts });\n    }\n}\nfunction onUnhandledError({ message, type, stack, opts }) {\n    if (!message || reportedErrors > MAX_ERRORS_TO_REPORT) {\n        return;\n    }\n    if (isErrorMessageIgnored(message)) {\n        return;\n    }\n    if (numberOfDifferentErrorsSeen >= MAX_NUMBER_OF_TRACKED_ERRORS) {\n        seenErrors = {};\n        numberOfDifferentErrorsSeen = 0;\n    }\n    message = String(message).substring(0, 300);\n    stack = shortenStackTrace(stack);\n    const location = win?.location.href;\n    const key = message + stack + location;\n    let trackedError = seenErrors[key];\n    if (trackedError) {\n        trackedError.seenCount++;\n    }\n    else {\n        const attributes = [];\n        addAttribute(attributes, EVENT_NAME, ERROR);\n        addAttribute(attributes, EXCEPTION_MESSAGE, message);\n        if (type) {\n            addAttribute(attributes, EXCEPTION_TYPE, type);\n        }\n        if (stack) {\n            addAttribute(attributes, EXCEPTION_STACKTRACE, stack);\n        }\n        if (opts?.componentStack) {\n            addAttribute(attributes, EXCEPTION_COMPONENT_STACK, opts?.componentStack.substring(0, 2048));\n        }\n        addCommonAttributes(attributes);\n        trackedError = {\n            seenCount: 1,\n            transmittedCount: 0,\n            log: {\n                timeUnixNano: nowNanos(),\n                attributes: attributes,\n                severityNumber: LOG_SEVERITIES.ERROR,\n                severityText: \"ERROR\",\n                body: {\n                    stringValue: message,\n                },\n            },\n        };\n        seenErrors[key] = trackedError;\n        numberOfDifferentErrorsSeen++;\n    }\n    scheduleTransmission();\n}\nexport function shortenStackTrace(stack) {\n    return String(stack || \"\")\n        .split(\"\\n\")\n        .slice(0, MAX_STACK_SIZE)\n        .join(\"\\n\");\n}\nfunction scheduleTransmission() {\n    if (scheduledTransmissionTimeoutHandle) {\n        return;\n    }\n    scheduledTransmissionTimeoutHandle = setTimeout(send, 1000);\n}\nfunction send() {\n    if (scheduledTransmissionTimeoutHandle) {\n        clearTimeout(scheduledTransmissionTimeoutHandle);\n        scheduledTransmissionTimeoutHandle = null;\n    }\n    for (const key in seenErrors) {\n        if (hasOwnProperty(seenErrors, key)) {\n            const seenError = seenErrors[key];\n            if (seenError.seenCount > seenError.transmittedCount) {\n                sendLog(seenError.log);\n                reportedErrors++;\n            }\n        }\n    }\n    seenErrors = {};\n    numberOfDifferentErrorsSeen = 0;\n}\n","import { win } from \"../../utils\";\nimport { reportError } from \"./unhandled-error\";\nconst MESSAGE_PREFIX = \"Unhandled promise rejection: \";\nconst STACK_UNAVAILABLE_MESSAGE = \"<unavailable because Promise wasn't rejected with an Error object>\";\nexport function startUnhandledRejectionInstrumentation() {\n    if (typeof win?.addEventListener === \"function\") {\n        win.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n    }\n}\nexport function onUnhandledRejection(event) {\n    if (event.reason == null) {\n        reportError({\n            message: MESSAGE_PREFIX + \"<no reason defined>\",\n            stack: STACK_UNAVAILABLE_MESSAGE,\n        });\n    }\n    else if (typeof event.reason.message === \"string\") {\n        reportError({\n            message: MESSAGE_PREFIX + event.reason.message,\n            stack: typeof event.reason.stack === \"string\" ? event.reason.stack : STACK_UNAVAILABLE_MESSAGE,\n        });\n    }\n    else if (typeof event.reason !== \"object\") {\n        reportError({\n            message: MESSAGE_PREFIX + event.reason,\n            stack: STACK_UNAVAILABLE_MESSAGE,\n        });\n    }\n}\n","const WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY = \"__dash0OriginalFunctions\";\n// Asynchronous function wrapping: The process of wrapping a listener which goes into one function, e.g.\n//\n//  - EventTarget#addEventListener\n//  - EventEmitter#on\n//\n// and is removed via another function, e.g.\n//\n//  - EventTarget#removeEventListener\n//  - EventEmitter#off\n//\n// What is complicated about this, is that these methods identify registered listeners by function reference.\n// When we wrap a function, we naturally change the reference. We must therefore keep track of which\n// original function belongs to what wrapped function.\n//\n// This file provides helpers that help in the typical cases. It is removed from all browser specific APIs\n// in order to allow simple unit test execution.\n//\n// Note that this file follows the behavior outlined in DOM specification. Among others, this means that it is not\n// possible to register the same listener twice.\n// http://dom.spec.whatwg.org\nexport function addWrappedFunction(storageTarget, wrappedFunction, valuesForEqualityCheck) {\n    if (!storageTarget)\n        return wrappedFunction;\n    const storage = (storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] =\n        storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] || []);\n    const index = findInStorage(storageTarget, valuesForEqualityCheck);\n    if (index !== -1) {\n        // already registered. Do not allow re-registration\n        return storage[index].wrappedFunction;\n    }\n    storage.push({\n        wrappedFunction,\n        valuesForEqualityCheck,\n    });\n    return wrappedFunction;\n}\nfunction findInStorage(storageTarget, valuesForEqualityCheck) {\n    const storage = storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n    for (let i = 0; i < storage.length; i++) {\n        const storageItem = storage[i];\n        if (matchesEqualityCheck(storageItem.valuesForEqualityCheck, valuesForEqualityCheck)) {\n            return i;\n        }\n    }\n    return -1;\n}\nexport function popWrappedFunction(storageTarget, valuesForEqualityCheck, fallback) {\n    const storage = storageTarget?.[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n    if (storage == null) {\n        return fallback;\n    }\n    const index = findInStorage(storageTarget, valuesForEqualityCheck);\n    if (index === -1) {\n        return fallback;\n    }\n    const storageItem = storage[index];\n    storage.splice(index, 1);\n    return storageItem.wrappedFunction;\n}\nfunction matchesEqualityCheck(valuesForEqualityCheckA, valuesForEqualityCheckB) {\n    if (valuesForEqualityCheckA.length !== valuesForEqualityCheckB.length) {\n        return false;\n    }\n    for (let i = 0; i < valuesForEqualityCheckA.length; i++) {\n        if (valuesForEqualityCheckA[i] !== valuesForEqualityCheckB[i]) {\n            return false;\n        }\n    }\n    return true;\n}\nexport function addWrappedDomEventListener(storageTarget, wrappedFunction, eventName, eventListener, optionsOrCapture) {\n    return addWrappedFunction(storageTarget, wrappedFunction, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture));\n}\nfunction getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture) {\n    return [eventName, eventListener, getDomEventListenerCaptureValue(optionsOrCapture)];\n}\nexport function getDomEventListenerCaptureValue(optionsOrCapture) {\n    // > Let capture, passive, and once be the result of flattening more options.\n    // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n    //\n    // > To flatten more options, run these steps:\n    // > 1. Let capture be the result of flattening options.\n    // https://dom.spec.whatwg.org/#event-flatten-more\n    //\n    // > To flatten options, run these steps:\n    // > 1. If options is a boolean, then return options.\n    // > 2. Return options’s capture.\n    // https://dom.spec.whatwg.org/#concept-flatten-options\n    //\n    // > dictionary EventListenerOptions {\n    // >   boolean capture = false;\n    // > };\n    // https://dom.spec.whatwg.org/#dom-eventlisteneroptions-capture\n    if (optionsOrCapture == null) {\n        return false;\n    }\n    else if (typeof optionsOrCapture === \"object\") {\n        return Boolean(optionsOrCapture.capture);\n    }\n    return Boolean(optionsOrCapture);\n}\nexport function popWrappedDomEventListener(storageTarget, eventName, eventListener, optionsOrCapture, fallback) {\n    return popWrappedFunction(storageTarget, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture), fallback);\n}\n","import { vars } from \"../../vars\";\nimport { win } from \"../../utils\";\nimport { addWrappedDomEventListener, popWrappedDomEventListener, } from \"./async-function-wrapping\";\nimport { ignoreNextOnErrorEvent } from \"./unhandled-error\";\nexport function startEventHandlerInstrumentation() {\n    if (vars.wrapEventHandlers) {\n        wrapEventTarget(win?.EventTarget);\n    }\n}\nfunction wrapEventTarget(EventTarget) {\n    if (!EventTarget ||\n        typeof EventTarget.prototype.addEventListener !== \"function\" ||\n        typeof EventTarget.prototype.removeEventListener !== \"function\") {\n        return;\n    }\n    const originalAddEventListener = EventTarget.prototype.addEventListener;\n    const originalRemoveEventListener = EventTarget.prototype.removeEventListener;\n    EventTarget.prototype.addEventListener = function wrappedAddEventListener(eventName, fn, optionsOrCapture) {\n        if (typeof fn !== \"function\") {\n            return originalAddEventListener.apply(this, arguments);\n        }\n        // non-deopt arguments copy\n        const args = new Array(arguments.length);\n        for (let i = 0; i < arguments.length; i++) {\n            args[i] = arguments[i];\n        }\n        args[1] = function wrappedEventListener() {\n            try {\n                return fn.apply(this, arguments);\n            }\n            catch (e) {\n                reportError(e);\n                ignoreNextOnErrorEvent();\n                throw e;\n            }\n        };\n        args[1] = addWrappedDomEventListener(this, args[1], eventName, fn, optionsOrCapture);\n        return originalAddEventListener.apply(this, args);\n    };\n    EventTarget.prototype.removeEventListener = function wrappedRemoveEventListener(eventName, fn, optionsOrCapture) {\n        if (typeof fn !== \"function\") {\n            return originalRemoveEventListener.apply(this, arguments);\n        }\n        // non-deopt arguments copy\n        const args = new Array(arguments.length);\n        for (let i = 0; i < arguments.length; i++) {\n            args[i] = arguments[i];\n        }\n        args[1] = popWrappedDomEventListener(this, eventName, fn, optionsOrCapture, fn);\n        return originalRemoveEventListener.apply(this, args);\n    };\n}\n","import { vars } from \"../../vars\";\nimport { isRunningZoneJs } from \"../../utils/timers\";\nimport { warn, win } from \"../../utils\";\nimport { ignoreNextOnErrorEvent } from \"./unhandled-error\";\nexport function startTimerInstrumentation() {\n    if (vars.wrapTimers) {\n        if (isRunningZoneJs) {\n            warn(\"We discovered a usage of Zone.js. In order to avoid any incompatibility issues timer wrapping is not going to be enabled.\");\n            return;\n        }\n        wrapTimer(\"setTimeout\");\n        wrapTimer(\"setInterval\");\n    }\n}\nfunction wrapTimer(name) {\n    const original = win?.[name];\n    if (typeof original !== \"function\") {\n        // cannot wrap because fn is not a function – should actually never happen\n        return;\n    }\n    win[name] = function wrappedTimerSetter(fn) {\n        // non-deopt arguments copy\n        const args = new Array(arguments.length);\n        for (let i = 0; i < arguments.length; i++) {\n            args[i] = arguments[i];\n        }\n        args[0] = wrap(fn);\n        return original.apply(this, args);\n    };\n}\nfunction wrap(fn) {\n    if (typeof fn !== \"function\") {\n        // cannot wrap because fn is not a function\n        return fn;\n    }\n    return function wrappedTimerHandler() {\n        try {\n            return fn.apply(this, arguments);\n        }\n        catch (e) {\n            reportError(e);\n            ignoreNextOnErrorEvent();\n            throw e;\n        }\n    };\n}\n","import { startOnErrorInstrumentation } from \"./unhandled-error\";\nimport { startUnhandledRejectionInstrumentation } from \"./unhandled-promise-rejection\";\nimport { startEventHandlerInstrumentation } from \"./event-handlers\";\nimport { startTimerInstrumentation } from \"./timers\";\nexport function startErrorInstrumentation() {\n    startOnErrorInstrumentation();\n    startUnhandledRejectionInstrumentation();\n    startEventHandlerInstrumentation();\n    startTimerInstrumentation();\n}\n","import { addAttribute, addSpanEvent } from \"../../utils/otel\";\nimport { domHRTimestampToNanos, hasKey, PerformanceTimingNames } from \"../../utils\";\nimport { HTTP_RESPONSE_BODY_SIZE } from \"../../semantic-conventions\";\n// SEE: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/attributes-registry/http.md?plain=1#L67\nconst KNOWN_HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"CONNECT\", \"OPTIONS\", \"TRACE\", \"PATCH\"];\nexport const HTTP_METHOD_OTHER = \"_OTHER\";\nexport function isWellKnownHttpMethod(method) {\n    return KNOWN_HTTP_METHODS.includes(method);\n}\nexport function addResourceNetworkEvents(span, resource) {\n    const ignoreZeros = resource.startTime !== 0;\n    addSpanNetworkEvent(span, PerformanceTimingNames.FETCH_START, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_START, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_END, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_START, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.SECURE_CONNECTION_START, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_END, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.REQUEST_START, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_START, resource, ignoreZeros);\n    addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_END, resource, ignoreZeros);\n}\nfunction addSpanNetworkEvent(span, propertyName, resource, ignoreZeros = true) {\n    if (!hasKey(resource, propertyName) ||\n        typeof resource[propertyName] !== \"number\" ||\n        (ignoreZeros && resource[propertyName] === 0)) {\n        return;\n    }\n    addSpanEvent(span, propertyName, domHRTimestampToNanos(resource[propertyName]));\n}\nexport function addResourceSize(span, resource) {\n    const encodedLength = resource.encodedBodySize;\n    if (encodedLength != undefined) {\n        addAttribute(span.attributes, HTTP_RESPONSE_BODY_SIZE, encodedLength);\n    }\n}\n","import { debug, observeResourcePerformance, win } from \"../../utils\";\nimport { isUrlIgnored, matchesAny } from \"../../utils/ignore-rules\";\nimport { addAttribute, setSpanStatus, addTraceContextHttpHeaders, endSpan, errorToSpanStatus, recordException, startSpan, } from \"../../utils/otel\";\nimport { HTTP_REQUEST_METHOD, HTTP_REQUEST_METHOD_ORIGINAL, HTTP_RESPONSE_STATUS_CODE, SPAN_STATUS_ERROR, SPAN_STATUS_UNSET, } from \"../../semantic-conventions\";\nimport { isSameOrigin, wrap, parseUrl } from \"../../utils\";\nimport { vars } from \"../../vars\";\nimport { httpRequestHeaderKey, httpResponseHeaderKey } from \"../../utils/otel/http\";\nimport { sendSpan } from \"../../transport\";\nimport { addResourceNetworkEvents, addResourceSize, HTTP_METHOD_OTHER, isWellKnownHttpMethod } from \"./utils\";\nimport { addCommonAttributes } from \"../../attributes\";\nexport function instrumentFetch() {\n    if (!win || !win.fetch || !win.Request) {\n        debug(\"Browser does not support the Fetch API, skipping instrumentation\");\n        return;\n    }\n    wrap(win, \"fetch\", wrapFetch);\n}\n// eslint-disable-next-line no-restricted-globals -- only used as type here\nfunction wrapFetch(original) {\n    return async function fetchWithInstrumentation(input, init) {\n        let copyOfInit = init ? Object.assign({}, init) : init;\n        let body = null;\n        if (copyOfInit?.body) {\n            body = copyOfInit.body;\n            copyOfInit.body = undefined;\n        }\n        const request = new Request(input, copyOfInit);\n        if (body && copyOfInit) {\n            copyOfInit.body = body;\n        }\n        const url = request.url;\n        if (isUrlIgnored(url)) {\n            debug(`Not creating span for fetch call because the url is ignored, URL: ${url}`);\n            return original(input instanceof Request ? request : input, init);\n        }\n        // https://fetch.spec.whatwg.org/#concept-request-method\n        // We'll match methods case insensitive here to make the user experience a bit less painful\n        const originalMethod = request.method ?? \"GET\";\n        const isWellKnownMethod = isWellKnownHttpMethod(originalMethod);\n        const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n        const method = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n        const span = startSpan(`HTTP ${method}`);\n        // The url namespace of a http span has a different meaning than for common rum signals.\n        addCommonAttributes(span.attributes, { url });\n        addGraphQlProperties(input, init, span);\n        addAttribute(span.attributes, HTTP_REQUEST_METHOD, method);\n        if (!isWellKnownMethod) {\n            addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, originalMethod);\n        }\n        const shouldSetCorrelationHeaders = isSameOrigin(url) || matchesAny(vars.propagateTraceHeadersCorsURLs, url);\n        if (shouldSetCorrelationHeaders) {\n            if (copyOfInit?.headers) {\n                // ensure we have a unified container for the headers\n                copyOfInit.headers = new Headers(copyOfInit.headers);\n                addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span);\n            }\n            else if (input instanceof Request) {\n                addTraceContextHttpHeaders(request.headers.append, request.headers, span);\n            }\n            else {\n                if (!copyOfInit) {\n                    copyOfInit = {};\n                }\n                copyOfInit.headers = new Headers();\n                addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span);\n            }\n        }\n        tryCaptureHttpHeaders(request.headers, span, (k) => httpRequestHeaderKey(k));\n        const performanceObserver = observeResourcePerformance({\n            // We match on both fetch and XHR here to support polyfills\n            resourceMatcher: ({ initiatorType, name }) => (initiatorType === \"fetch\" || initiatorType === \"xmlhttprequest\") && name === parseUrl(url).href,\n            maxWaitForResourceMillis: vars.maxWaitForResourceTimingsMillis,\n            maxToleranceForResourceTimingsMillis: vars.maxToleranceForResourceTimingsMillis,\n            onEnd: ({ duration, resource }) => {\n                if (resource) {\n                    addResourceNetworkEvents(span, resource);\n                    addResourceSize(span, resource);\n                }\n                // duration is millis we need to convert to nanos\n                sendSpan(endSpan(span, undefined, duration * 1000000));\n            },\n        });\n        performanceObserver.start();\n        try {\n            const response = await original(input instanceof Request ? request : input, copyOfInit);\n            addResponseData(span, response);\n            // We use a separate promise here because this needs to happen in parallel to application code consuming the response\n            waitForFullResponse(response)\n                .then(() => performanceObserver.end())\n                .catch((e) => {\n                performanceObserver.cancel();\n                endSpanOnError(span, e);\n            });\n            return response;\n        }\n        catch (e) {\n            performanceObserver.cancel();\n            endSpanOnError(span, e);\n            throw e;\n        }\n    };\n}\n// @ts-expect-error -- WIP\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction addGraphQlProperties(input, init, span) {\n    try {\n        if (!isGraphQLQuery(input, init))\n            return;\n    }\n    catch (e) {\n        debug(\"failed to analyze request for GraphQL insights\", e, input, init);\n    }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction isGraphQLQuery(input, init) {\n    /**\n     * TODO: Add GraphQL support.\n     * GraphQL queries are either POST or GET requests.\n     * Identified by either setting Accept=application/graphql-response+json or the url matching a config field for graphql urls.\n     * See: https://graphql.github.io/graphql-over-http/draft/\n     * GET requests are queries carrying a query search param\n     * POST requests are either queries or mutations, See: https://graphql.org/learn/serving-over-http/#post-request-and-body\n     * and https://github.com/instana/weasel/blob/main/lib/hooks/Fetch.ts#L201\n     */\n    return false;\n}\nfunction tryCaptureHttpHeaders(headers, span, getAttributeKey) {\n    try {\n        headers.forEach((value, key) => {\n            if (vars.headersToCapture.some((rxp) => rxp.test(key))) {\n                addAttribute(span.attributes, getAttributeKey(key), value);\n            }\n        });\n    }\n    catch (_e) {\n        debug(\"unable to capture http headers due to CORS policy\");\n    }\n}\nfunction addResponseData(span, response) {\n    const status = response.status;\n    setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR, response.statusText);\n    addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n    tryCaptureHttpHeaders(response.headers, span, (k) => httpResponseHeaderKey(k));\n}\nfunction waitForFullResponse(response) {\n    return new Promise((resolve) => {\n        const clonedResponse = response.clone();\n        const body = clonedResponse.body;\n        if (!body)\n            return resolve();\n        const reader = body.getReader();\n        const read = async () => {\n            const { done } = await reader.read();\n            if (done)\n                return resolve();\n            return read();\n        };\n        return read();\n    });\n}\nfunction endSpanOnError(span, error) {\n    recordException(span, error);\n    sendSpan(endSpan(span, errorToSpanStatus(error), undefined));\n}\n","import { HTTP_REQUEST_HEADER, HTTP_RESPONSE_HEADER } from \"../../semantic-conventions\";\nexport function httpRequestHeaderKey(key) {\n    return `${HTTP_REQUEST_HEADER}.${key.toLowerCase()}`;\n}\nexport function httpResponseHeaderKey(key) {\n    return `${HTTP_RESPONSE_HEADER}.${key.toLowerCase()}`;\n}\n","import { addSpanEvent } from \"./span\";\nimport { addAttribute } from \"./attributes\";\nimport { SPAN_EVENT_NAME_EXCEPTION, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, SPAN_STATUS_ERROR, } from \"../../semantic-conventions\";\nexport function recordException(span, exception) {\n    const attributes = [];\n    if (typeof exception === \"string\") {\n        addAttribute(attributes, EXCEPTION_MESSAGE, exception);\n    }\n    else if (exception) {\n        if (exception.code) {\n            addAttribute(attributes, EXCEPTION_TYPE, exception.code.toString());\n        }\n        else if (exception.name) {\n            addAttribute(attributes, EXCEPTION_TYPE, exception.name);\n        }\n        if (exception.message) {\n            addAttribute(attributes, EXCEPTION_MESSAGE, exception.message);\n        }\n        if (exception.stack) {\n            addAttribute(attributes, EXCEPTION_STACKTRACE, exception.stack);\n        }\n        addSpanEvent(span, SPAN_EVENT_NAME_EXCEPTION, attributes);\n    }\n}\nexport function errorToSpanStatus(e) {\n    return {\n        code: SPAN_STATUS_ERROR,\n        message: e && typeof e === \"object\" && \"message\" in e ? e.message : String(e),\n    };\n}\n","import { addAttribute, getTraceContextForPageLoad } from \"../../utils/otel\";\nimport { EVENT_NAME, LOG_SEVERITIES, PAGE_VIEW, PAGE_VIEW_CHANGE_STATE, PAGE_VIEW_CHANGE_STATE_VALUES, PAGE_VIEW_TYPE, PAGE_VIEW_TYPE_VALUES, } from \"../../semantic-conventions\";\nimport { doc, NO_VALUE_FALLBACK } from \"../../utils\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { sendLog } from \"../../transport\";\nimport { vars } from \"../../vars\";\nfunction getPageViewMeta(url) {\n    if (!url)\n        return {};\n    return vars.pageViewInstrumentation.generateMetadata?.(url) ?? {};\n}\nexport function transmitPageViewEvent(timeUnixNano, url, virtual, replaced) {\n    const meta = getPageViewMeta(url);\n    const attributes = [];\n    addAttribute(attributes, EVENT_NAME, PAGE_VIEW);\n    if (meta.attributes) {\n        Object.entries(meta.attributes).forEach(([key, value]) => addAttribute(attributes, key, value));\n    }\n    addCommonAttributes(attributes, { url });\n    const bodyAttributes = [];\n    addAttribute(bodyAttributes, \"title\", meta.title ?? doc?.title ?? NO_VALUE_FALLBACK);\n    if (doc?.referrer) {\n        addAttribute(bodyAttributes, \"referrer\", doc.referrer);\n    }\n    addAttribute(bodyAttributes, PAGE_VIEW_TYPE, virtual ? PAGE_VIEW_TYPE_VALUES.VIRTUAL : PAGE_VIEW_TYPE_VALUES.INITIAL);\n    addAttribute(bodyAttributes, PAGE_VIEW_CHANGE_STATE, replaced ? PAGE_VIEW_CHANGE_STATE_VALUES.REPLACE : PAGE_VIEW_CHANGE_STATE_VALUES.PUSH);\n    const log = {\n        timeUnixNano: timeUnixNano,\n        attributes: attributes,\n        severityNumber: LOG_SEVERITIES.INFO,\n        severityText: \"INFO\",\n        body: {\n            kvlistValue: {\n                values: bodyAttributes,\n            },\n        },\n    };\n    const traceContext = getTraceContextForPageLoad();\n    if (traceContext) {\n        log.traceId = traceContext.traceId;\n        log.spanId = traceContext.spanId;\n    }\n    sendLog(log);\n}\n","import { addEventListener, debug, doc, win, roundToTwoDecimals, error, toNanosTs, getTimeOrigin } from \"../../utils\";\nimport { EVENT_NAME, LOG_SEVERITIES, NAVIGATION_TIMING } from \"../../semantic-conventions\";\nimport { sendLog } from \"../../transport\";\nimport { getTraceContextForPageLoad, addAttribute } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { transmitPageViewEvent } from \"./event\";\n/**\n * Tracks page loads as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageLoadInstrumentation() {\n    try {\n        transmitPageViewEvent(getStartTimeUnixNanos(), win?.location.href ? new URL(win?.location.href) : undefined);\n    }\n    catch (e) {\n        error(\"Failed to transmit initial page view event\", e);\n    }\n    if (doc?.readyState === \"complete\") {\n        return onLoaded();\n    }\n    if (win) {\n        addEventListener(win, \"load\", function () {\n            // we want to get timing data for loadEventEnd,\n            // so asynchronously process this\n            setTimeout(onLoaded, 0);\n        });\n    }\n}\n/**\n * See https://github.com/open-telemetry/semantic-conventions/pull/1919\n */\nfunction onLoaded() {\n    const nt = win?.performance.getEntriesByType(\"navigation\")[0];\n    if (!nt) {\n        debug(\"Navigation timings not available. Cannot emit navigation timing log\");\n        return;\n    }\n    const attributes = [];\n    addAttribute(attributes, EVENT_NAME, NAVIGATION_TIMING);\n    const bodyAttributes = [];\n    addAttribute(bodyAttributes, \"name\", nt.name);\n    addNavigationTiming(bodyAttributes, nt, \"responseStatus\");\n    addNavigationTiming(bodyAttributes, nt, \"fetchStart\");\n    addNavigationTiming(bodyAttributes, nt, \"requestStart\");\n    addNavigationTiming(bodyAttributes, nt, \"responseStart\");\n    addNavigationTiming(bodyAttributes, nt, \"domInteractive\");\n    addNavigationTiming(bodyAttributes, nt, \"domContentLoadedEventEnd\");\n    addNavigationTiming(bodyAttributes, nt, \"domComplete\");\n    addNavigationTiming(bodyAttributes, nt, \"loadEventEnd\");\n    addNavigationTiming(bodyAttributes, nt, \"transferSize\");\n    addNavigationTiming(bodyAttributes, nt, \"encodedBodySize\");\n    addNavigationTiming(bodyAttributes, nt, \"decodedBodySize\");\n    const log = {\n        timeUnixNano: getStartTimeUnixNanos(),\n        attributes: attributes,\n        severityNumber: LOG_SEVERITIES.INFO,\n        severityText: \"INFO\",\n        body: {\n            kvlistValue: {\n                values: bodyAttributes,\n            },\n        },\n    };\n    addCommonAttributes(log.attributes);\n    const traceContext = getTraceContextForPageLoad();\n    if (traceContext) {\n        log.traceId = traceContext.traceId;\n        log.spanId = traceContext.spanId;\n    }\n    sendLog(log);\n}\nfunction addNavigationTiming(attributes, nt, field) {\n    // @ts-expect-error index access not recognized by TS, but this makes the code more reusable\n    const value = nt[field];\n    if (typeof value === \"number\" && !isNaN(value)) {\n        addAttribute(attributes, field, Number.isInteger(value) ? value : roundToTwoDecimals(value));\n    }\n}\nfunction getStartTimeUnixNanos() {\n    return toNanosTs(Math.round(getTimeOrigin()));\n}\n","import { debug, nowNanos, win, wrap } from \"../../utils\";\nimport { vars } from \"../../vars\";\nimport { transmitPageViewEvent } from \"./event\";\nlet currentLocation = {};\nlet shouldIgnoreHashChanges = false;\nlet shouldIgnoreSearchChanges = false;\n/**\n * Tracks page transitions (virtual page views) as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageTransitionInstrumentation() {\n    if (!win || !win.history) {\n        debug(\"Browser does not support history API, skipping instrumentation\");\n        return;\n    }\n    if (!vars.pageViewInstrumentation.trackVirtualPageViews) {\n        return;\n    }\n    shouldIgnoreSearchChanges = vars.pageViewInstrumentation.ignoreParts?.includes(\"SEARCH\") ?? false;\n    shouldIgnoreHashChanges = vars.pageViewInstrumentation.ignoreParts?.includes(\"HASH\") ?? false;\n    /**\n     * Not wrapping history.go, history.backward and history.forward here, because their call signatures don't receive\n     * url information. For these cases we can use the popstate and hashchange events.\n     */\n    wrap(win.history, \"replaceState\", (original) => function (state, unused, url) {\n        onUrlChange(url ? String(url) : undefined, true);\n        return original.apply(this, [state, unused, url]);\n    });\n    wrap(win.history, \"pushState\", (original) => function (state, unused, url) {\n        onUrlChange(url ? String(url) : undefined);\n        return original.apply(this, [state, unused, url]);\n    });\n    win.addEventListener(\"hashchange\", onHashChange);\n    win.addEventListener(\"popstate\", onPopState);\n    try {\n        updateCurrentLocation(new URL(win.location.href));\n    }\n    catch { }\n}\nfunction onPopState() {\n    // popState event is fired after the location entry has been updated, so the location should already contain the new url.\n    onUrlChange(win?.location.href);\n}\nfunction onHashChange(event) {\n    onUrlChange(event.newURL);\n}\nfunction onUrlChange(url, replaced) {\n    if (!url)\n        return;\n    try {\n        const parsedUrl = new URL(url, win?.location.href);\n        if (isLocationChange(parsedUrl)) {\n            updateCurrentLocation(parsedUrl);\n            transmitPageViewEvent(nowNanos(), parsedUrl, true, Boolean(replaced));\n        }\n    }\n    catch (e) {\n        debug(\"Failed to handle url change\", e);\n    }\n}\nfunction updateCurrentLocation(url) {\n    currentLocation.path = url.pathname;\n    currentLocation.search = url.search;\n    currentLocation.hash = url.hash;\n}\nfunction isLocationChange(newUrl) {\n    return (newUrl.pathname !== currentLocation.path ||\n        (!shouldIgnoreSearchChanges && newUrl.search !== currentLocation.search) ||\n        (!shouldIgnoreHashChanges && newUrl.hash !== currentLocation.hash));\n}\n","import { startPageLoadInstrumentation } from \"./page-load\";\nimport { startPageTransitionInstrumentation } from \"./page-transition\";\nexport function startNavigationInstrumentation() {\n    startPageLoadInstrumentation();\n    startPageTransitionInstrumentation();\n}\n","// istanbul ignore next\nconst isObject = (obj) => {\n    if (typeof obj === \"object\" && obj !== null) {\n        if (typeof Object.getPrototypeOf === \"function\") {\n            const prototype = Object.getPrototypeOf(obj);\n            return prototype === Object.prototype || prototype === null;\n        }\n        return Object.prototype.toString.call(obj) === \"[object Object]\";\n    }\n    return false;\n};\nexport const merge = (...objects) => objects.reduce((result, current) => {\n    if (current === undefined) {\n        return result;\n    }\n    if (Array.isArray(current)) {\n        throw new TypeError(\"Arguments provided to ts-deepmerge must be objects, not arrays.\");\n    }\n    Object.keys(current).forEach((key) => {\n        if ([\"__proto__\", \"constructor\", \"prototype\"].includes(key)) {\n            return;\n        }\n        if (Array.isArray(result[key]) && Array.isArray(current[key])) {\n            result[key] = merge.options.mergeArrays\n                ? merge.options.uniqueArrayItems\n                    ? Array.from(new Set(result[key].concat(current[key])))\n                    : [...result[key], ...current[key]]\n                : current[key];\n        }\n        else if (isObject(result[key]) && isObject(current[key])) {\n            result[key] = merge(result[key], current[key]);\n        }\n        else if (!isObject(result[key]) && isObject(current[key])) {\n            result[key] = merge(current[key], undefined);\n        }\n        else {\n            result[key] =\n                current[key] === undefined\n                    ? merge.options.allowUndefinedOverrides\n                        ? current[key]\n                        : result[key]\n                    : current[key];\n        }\n    });\n    return result;\n}, {});\nconst defaultOptions = {\n    allowUndefinedOverrides: true,\n    mergeArrays: true,\n    uniqueArrayItems: true,\n};\nmerge.options = defaultOptions;\nmerge.withOptions = (options, ...objects) => {\n    merge.options = Object.assign(Object.assign({}, defaultOptions), options);\n    const result = merge(...objects);\n    merge.options = defaultOptions;\n    return result;\n};\n","import { vars } from \"../vars\";\nimport { DEPLOYMENT_ENVIRONMENT_NAME, DEPLOYMENT_ID, DEPLOYMENT_NAME, PAGE_LOAD_ID, SERVICE_NAME, SERVICE_VERSION, USER_AGENT, } from \"../semantic-conventions\";\nimport { fetch, generateUniqueId, PAGE_LOAD_ID_BYTES, warn, debug, perf, nav, win, NO_VALUE_FALLBACK } from \"../utils\";\nimport { trackSessions } from \"./session\";\nimport { startWebVitalsInstrumentation } from \"../instrumentations/web-vitals\";\nimport { startErrorInstrumentation } from \"../instrumentations/errors\";\nimport { addAttribute } from \"../utils/otel\";\nimport { instrumentFetch } from \"../instrumentations/http/fetch\";\nimport { startNavigationInstrumentation } from \"../instrumentations/navigation\";\nimport { pick } from \"../utils/pick\";\nimport { merge } from \"ts-deepmerge\";\nimport { initializeTabId } from \"../utils/tab-id\";\nlet hasBeenInitialised = false;\nexport function init(opts) {\n    if (hasBeenInitialised) {\n        debug(\"Dash0 SDK is being reinitialized, skipping ...\");\n        return;\n    }\n    if (!isClient()) {\n        debug(\"Looks like we are not running in a browser context. Stopping Dash0 Web SDK initialization.\");\n        return;\n    }\n    if (!isSupported()) {\n        debug(\"Stopping Dash0 Web SDK initialization. This browser does not support the necessary APIs\");\n        return;\n    }\n    vars.endpoints = opts.endpoint instanceof Array ? opts.endpoint : [opts.endpoint];\n    if (vars.endpoints.length === 0) {\n        warn(\"No telemetry endpoint configured. Aborting Dash0 Web SDK initialization process.\");\n        return;\n    }\n    Object.assign(vars, merge(vars, pick(opts, [\n        \"ignoreUrls\",\n        \"ignoreErrorMessages\",\n        \"wrapEventHandlers\",\n        \"wrapTimers\",\n        \"propagateTraceHeadersCorsURLs\",\n        \"maxWaitForResourceTimingsMillis\",\n        \"maxToleranceForResourceTimingsMillis\",\n        \"headersToCapture\",\n        \"pageViewInstrumentation\",\n    ])));\n    initializeResourceAttributes(opts);\n    initializeSignalAttributes(opts);\n    initializeTabId();\n    trackSessions(opts.sessionInactivityTimeoutMillis, opts.sessionTerminationTimeoutMillis);\n    startNavigationInstrumentation();\n    startWebVitalsInstrumentation();\n    startErrorInstrumentation();\n    instrumentFetch();\n    hasBeenInitialised = true;\n}\nfunction initializeResourceAttributes(opts) {\n    addAttribute(vars.resource.attributes, SERVICE_NAME, opts[\"serviceName\"]);\n    if (opts.serviceVersion) {\n        addAttribute(vars.resource.attributes, SERVICE_VERSION, opts[\"serviceVersion\"]);\n    }\n    const env = detectEnvironment(opts);\n    if (env) {\n        addAttribute(vars.resource.attributes, DEPLOYMENT_ENVIRONMENT_NAME, env);\n    }\n    const deploymentName = detectDeploymentName(opts);\n    if (deploymentName) {\n        addAttribute(vars.resource.attributes, DEPLOYMENT_NAME, deploymentName);\n    }\n    const deploymentId = detectDeploymentId(opts);\n    if (deploymentId) {\n        addAttribute(vars.resource.attributes, DEPLOYMENT_ID, deploymentId);\n    }\n}\nfunction initializeSignalAttributes(opts) {\n    addAttribute(vars.signalAttributes, PAGE_LOAD_ID, generateUniqueId(PAGE_LOAD_ID_BYTES));\n    addAttribute(vars.signalAttributes, USER_AGENT, nav?.userAgent ?? NO_VALUE_FALLBACK);\n    if (opts.additionalSignalAttributes) {\n        Object.entries(opts.additionalSignalAttributes).forEach(([key, value]) => {\n            addAttribute(vars.signalAttributes, key, value);\n        });\n    }\n}\nfunction isSupported() {\n    return typeof fetch === \"function\" && perf && perf.getEntriesByType;\n}\nfunction isClient() {\n    return win != null;\n}\nfunction detectEnvironment(opts) {\n    // if there is a manually specified value we use that\n    if (opts.environment) {\n        return opts.environment;\n    }\n    // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n    // plugins like webpack define work.\n    try {\n        // vercel\n        // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n        return process?.env?.NEXT_PUBLIC_VERCEL_ENV;\n    }\n    catch (_ignored) {\n        return undefined;\n    }\n}\nfunction detectDeploymentName(opts) {\n    if (opts.deploymentName) {\n        return opts.deploymentName;\n    }\n    // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n    // plugins like webpack define work.\n    try {\n        // vercel\n        // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n        return process?.env?.NEXT_PUBLIC_VERCEL_TARGET_ENV;\n    }\n    catch (_ignored) {\n        return undefined;\n    }\n}\nfunction detectDeploymentId(opts) {\n    if (opts.deploymentId) {\n        return opts.deploymentId;\n    }\n    // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n    // plugins like webpack define work.\n    try {\n        // vercel\n        // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n        return process?.env?.NEXT_PUBLIC_VERCEL_BRANCH_URL;\n    }\n    catch (_ignored) {\n        return undefined;\n    }\n}\n","/**\n * Creates a new object by picking specified properties from the source object.\n * Similar to TypeScript's Pick<T, K> utility type but as a runtime function.\n *\n * @param obj - The source object to pick properties from\n * @param keys - Array of property keys to pick from the source object\n * @returns A new object containing only the specified properties\n */\nexport function pick(obj, keys) {\n    const result = {};\n    for (const key of keys) {\n        if (key in obj) {\n            result[key] = obj[key];\n        }\n    }\n    return result;\n}\n","import { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { vars } from \"../vars\";\n/**\n * Adds a signal attribute to be transmitted with every signal.\n * Note: if you need to ensure attributes are included with signals transmitted on initial page load, you should use\n * the \"additionalSignalAttributes\" property of the init call instead\n */\nexport function addSignalAttribute(name, value) {\n    addAttribute(vars.signalAttributes, name, value);\n}\n/**\n * Removes a previously added signal attribute\n */\nexport function removeSignalAttribute(name) {\n    removeAttribute(vars.signalAttributes, name);\n}\n","import { vars } from \"../vars\";\nimport { debug as debugLogger } from \"../utils/debug\";\nexport function debug() {\n    debugLogger(\"Dash0 Web SDK configuration state:\", vars);\n}\n","import { vars } from \"../vars\";\nimport { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { USER_EMAIL, USER_FULL_NAME, USER_HASH, USER_ID, USER_NAME, USER_ROLES } from \"../semantic-conventions\";\nexport function identify(id, opts) {\n    removeAttribute(vars.signalAttributes, USER_ID);\n    if (id != null) {\n        addAttribute(vars.signalAttributes, USER_ID, id);\n    }\n    removeAttribute(vars.signalAttributes, USER_NAME);\n    if (opts?.name != null) {\n        addAttribute(vars.signalAttributes, USER_NAME, opts.name);\n    }\n    removeAttribute(vars.signalAttributes, USER_FULL_NAME);\n    if (opts?.fullName != null) {\n        addAttribute(vars.signalAttributes, USER_FULL_NAME, opts.fullName);\n    }\n    removeAttribute(vars.signalAttributes, USER_EMAIL);\n    if (opts?.email != null) {\n        addAttribute(vars.signalAttributes, USER_EMAIL, opts.email);\n    }\n    removeAttribute(vars.signalAttributes, USER_HASH);\n    if (opts?.hash != null) {\n        addAttribute(vars.signalAttributes, USER_HASH, opts.hash);\n    }\n    removeAttribute(vars.signalAttributes, USER_ROLES);\n    if (opts?.roles != null) {\n        addAttribute(vars.signalAttributes, USER_ROLES, opts.roles);\n    }\n}\n","import { debug, INIT_MESSAGE } from \"../utils\";\nimport { init as initApi } from \"../api/init\";\nexport * from \"../api/identify\";\nexport * from \"../api/debug\";\nexport * from \"../api/attributes\";\nexport * from \"../api/events\";\nexport { terminateSession } from \"../api/session\";\nexport { reportError } from \"../api/report-error\";\nexport function init(opts) {\n    debug(`${INIT_MESSAGE} (via package)`);\n    initApi(opts);\n}\n","import { reportError as reportErrorInternal } from \"../instrumentations/errors/unhandled-error\";\nexport function reportError(error, opts) {\n    reportErrorInternal(error, opts);\n}\n","import { EVENT_NAME, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { sendLog } from \"../transport\";\nimport { addCommonAttributes } from \"../attributes\";\nimport { addAttribute, toAnyValue } from \"../utils/otel\";\nimport { nowNanos, toNanosTs } from \"../utils\";\nexport function sendEvent(name, opts) {\n    const attributes = [];\n    addCommonAttributes(attributes);\n    Object.entries(opts?.attributes ?? {}).forEach(([key, value]) => addAttribute(attributes, key, value));\n    addAttribute(attributes, EVENT_NAME, name);\n    sendLog({\n        timeUnixNano: opts?.timestamp != null ? toNanosTs(opts.timestamp) : nowNanos(),\n        attributes,\n        body: toAnyValue(opts?.data),\n        severityText: opts?.severity,\n        severityNumber: opts?.severity ? LOG_SEVERITIES[opts.severity] : undefined,\n    });\n}\n"],"names":["noop","createLogger","info","warn","error","debug","method","console","log","apply","arguments","globalHasOwnProperty","Object","prototype","hasOwnProperty","obj","key","call","win","window","undefined","doc","document","nav","navigator","loc","location","perf","performance","webkitPerformance","msPerformance","mozPerformance","encodeURIComponent","fetch","localStorage","_win$localStorage","_unused","sessionStorage","_win$sessionStorage","_unused2","SHARED_CHAR_CODES_ARRAY","Array","generateUniqueId","byteCount","i","Math","floor","random","String","fromCharCode","slice","addEventListener","target","eventType","callback","attachEvent","isSupported","getItem","setItem","now","Date","getTime","nowNanos","timeOrigin","getTimeOrigin","toNanosTs","time","_typeof","_perf$timing","timing","fetchStart","globals","setTimeout","clearTimeout","setInterval","clearInterval","isRunningZoneJs","_len","length","_","_key","executeGlobally","_len3","_key3","_globals$globalFuncti","globalFunctionName","this","args","e","getEntriesByType","isPerformanceObserverAvailable","PerformanceTimingNames","freeze","CONNECT_END","CONNECT_START","DECODED_BODY_SIZE","DOM_COMPLETE","DOM_CONTENT_LOADED_EVENT_END","DOM_CONTENT_LOADED_EVENT_START","DOM_INTERACTIVE","DOMAIN_LOOKUP_END","DOMAIN_LOOKUP_START","ENCODED_BODY_SIZE","FETCH_START","LOAD_EVENT_END","LOAD_EVENT_START","NAVIGATION_START","REDIRECT_END","REDIRECT_START","REQUEST_START","RESPONSE_END","RESPONSE_START","SECURE_CONNECTION_START","START_TIME","UNLOAD_EVENT_END","UNLOAD_EVENT_START","observeResourcePerformance","opts","start","startTime","_observer","PerformanceObserver","observer","onResourceFound","observe","type","_e","fallbackEndNeverCalledTimerHandle","disposeGlobalResources","end","endTime","cancelFallbackEndNeverCalledTimer","resource","isWaitingAcceptable","onVisibilityChanged","fallbackNoResourceFoundTimerHandle","maxWaitForResourceMillis","cancel","onEnd","duration","observeWithoutPerformanceObserverSupport","_resource","round","list","r","find","entry","maxToleranceForResourceTimingsMillis","responseEnd","resourceMatcher","_observer2","disconnect","disconnectResourceObserver","removeEventListener","detachEvent","stopVisibilityObservation","visibilityState","NO_VALUE_FALLBACK","roundToTwoDecimals","n","parseUrl","url","_doc$baseURI","URL","baseURI","href","isSameOrigin","origin","INSTRUMENTED_BY_DASH0_SYMBOL","Symbol","for","wrap","module","wrapper","original","concat","objOrFunction","markAsInstrumented","vars","endpoints","attributes","scope","name","version","__sdkVersion","signalAttributes","ignoreUrls","ignoreErrorMessages","wrapEventHandlers","wrapTimers","propagateTraceHeadersCorsURLs","maxWaitForResourceTimingsMillis","headersToCapture","pageViewInstrumentation","trackVirtualPageViews","SERVICE_NAME","SERVICE_VERSION","DEPLOYMENT_ENVIRONMENT_NAME","DEPLOYMENT_NAME","DEPLOYMENT_ID","EVENT_NAME","PAGE_LOAD_ID","USER_AGENT","USER_ID","USER_NAME","USER_FULL_NAME","USER_EMAIL","USER_HASH","USER_ROLES","EXCEPTION_MESSAGE","EXCEPTION_TYPE","EXCEPTION_STACKTRACE","URL_FULL","LOG_SEVERITIES","UNSPECIFIED","TRACE","DEBUG","INFO","WARN","ERROR","FATAL","PAGE_VIEW_TYPE_VALUES","PAGE_VIEW_CHANGE_STATE_VALUES","SESSION_STORAGE_KEY","STORAGE_SEPARATOR_KEY","MAX_ALLOWED_SESSION_TIMEOUT_MILLIS","sessionId","trackSessions","sessionInactivityTimeoutMillis","sessionTerminationTimeoutMillis","min","storedValue","k","session","values","split","id","parseInt","lastActivityTime","isNaN","parseSession","minAllowedLastActivityTime","minAllowedStartTime","isSessionValid","v","serializeSession","o","a","persisted","timeStamp","c","self","responseStart","u","activationStart","f","t","prerendering","wasDiscarded","replace","value","rating","delta","entries","navigationType","s","supportedEntryTypes","includes","Promise","resolve","then","getEntries","assign","buffered","d","l","requestAnimationFrame","p","m","h","g","T","y","E","firstHiddenTime","C","b","L","w","forEach","max","push","reportAllChanges","S","hadRecentInput","takeRecords","A","I","P","M","interactionId","interactionCount","F","durationThreshold","D","x","Map","R","H","q","entryType","get","latency","set","sort","splice","delete","O","requestIdleCallback","N","j","PerformanceEventTiming","B","clear","z","isUnloading","newBatcher","sendInternal","pendingFlushTimeout","fn","queuedItems","flush","send","item","_x","_x2","_send","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","path","body","jsonString","requestBody","byteLength","isCompressed","_context2","prev","next","JSON","stringify","CompressionStream","compressWithGzip","sent","all","map","_ref","_callee","endpoint","headers","response","_context","pathname","endsWith","substring","Authorization","dataset","abrupt","keepalive","text","catch","ok","status","statusText","t0","stop","_x4","_x3","_compressWithGzip","_callee3","data","blob","stream","compressedStream","_context3","Blob","pipeThrough","Response","arrayBuffer","rateLimiter","logBatcher","logs","resourceLogs","scopeLogs","logRecords","err","spanBatcher","spans","resourceSpans","scopeSpans","isRateLimited","maxCalls","maxCallsPerTenMinutes","maxCallsPerTenSeconds","totalCalls","totalCallsInLastTenMinutes","totalCallsInLastTenSeconds","sendLog","sendSpan","span","ANY_VALUE_KEYS","toAnyValue","anyValue","isArray","keys","isAnyValue","_ref2","_slicedToArray","toKeyValue","addAttribute","removeAttribute","index","findIndex","attr","TRACE_PARENT_HEADER","w3cTraceparentFormat","getTraceContextForPageLoad","_Array$from$find","_doc$getElementsByTag","match","from","getElementsByTagName","_e$getAttribute","getAttribute","toLowerCase","content","trim","nt","serverTiming","serverTimings","_step","_iterator","_createForOfIteratorHelper","done","serverEntry","description","getTraceparentFromServerTiming","getTraceparentFromNavigationTiming","traceId","spanId","addTraceContextHttpHeaders","ctx","endSpan","durationNano","endTimeUnixNano","startTimeUnixNano","addSpanEvent","attributesOrTs","ts","events","timeUnixNano","TAB_ID_STORAGE_KEY","tabId","initializeTabId","addCommonAttributes","options","_options$url","_win$innerWidth","_win$innerHeight","_nav$connection","parsed","username","password","hostname","protocol","hash","search","addUrlAttributes","innerWidth","innerHeight","connectionType","connection","effectiveType","startWebVitalsInstrumentation","once","capture","onLCP","onWebVital","onINP","onCLS","metric","bodyAttributes","severityNumber","severityText","kvlistValue","matchesAny","regexp","len","test","DATA_URL_PREFIX","isUrlIgnored","lowerCaseUrl","startsWith","isTransportRequest","scheduledTransmissionTimeoutHandle","reportedErrors","numberOfDifferentErrorsSeen","seenErrors","ignoreNextOnError","ignoreNextOnErrorEvent","reportError","onUnhandledError","message","stack","isErrorMessageIgnored","join","shortenStackTrace","trackedError","seenCount","componentStack","transmittedCount","stringValue","scheduleTransmission","seenError","MESSAGE_PREFIX","STACK_UNAVAILABLE_MESSAGE","onUnhandledRejection","event","reason","WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY","findInStorage","storageTarget","valuesForEqualityCheck","storage","matchesEqualityCheck","valuesForEqualityCheckA","valuesForEqualityCheckB","addWrappedDomEventListener","wrappedFunction","eventName","eventListener","optionsOrCapture","addWrappedFunction","getDomEventListenerValuesForEqualityCheck","getDomEventListenerCaptureValue","Boolean","popWrappedDomEventListener","fallback","storageItem","popWrappedFunction","startEventHandlerInstrumentation","EventTarget","originalAddEventListener","originalRemoveEventListener","wrapEventTarget","wrapTimer","startErrorInstrumentation","globalOnError","onerror","fileName","lineNumber","columnNumber","startOnErrorInstrumentation","startTimerInstrumentation","KNOWN_HTTP_METHODS","isWellKnownHttpMethod","addResourceNetworkEvents","ignoreZeros","addSpanNetworkEvent","propertyName","addResourceSize","encodedLength","encodedBodySize","wrapFetch","_fetchWithInstrumentation","input","init","_copyOfInit","_request$method","copyOfInit","request","originalMethod","isWellKnownMethod","isWellKnownMethodMatchingLeniently","_copyOfInit2","performanceObserver","Request","toUpperCase","kind","links","code","addGraphQlProperties","Headers","append","tryCaptureHttpHeaders","initiatorType","addResponseData","waitForFullResponse","endSpanOnError","getAttributeKey","some","rxp","setSpanStatus","clone","reader","getReader","read","_ref3","_yield$reader$read","exception","toString","recordException","errorToSpanStatus","transmitPageViewEvent","virtual","replaced","_meta$title","meta","_vars$pageViewInstrum","_vars$pageViewInstrum2","_vars$pageViewInstrum3","generateMetadata","getPageViewMeta","title","referrer","traceContext","onLoaded","addNavigationTiming","getStartTimeUnixNanos","field","Number","isInteger","currentLocation","shouldIgnoreHashChanges","shouldIgnoreSearchChanges","onPopState","onUrlChange","onHashChange","newURL","newUrl","parsedUrl","updateCurrentLocation","startNavigationInstrumentation","readyState","startPageLoadInstrumentation","_vars$pageViewInstrum4","history","ignoreParts","state","unused","startPageTransitionInstrumentation","isObject","getPrototypeOf","merge","objects","reduce","result","current","TypeError","mergeArrays","uniqueArrayItems","Set","_toConsumableArray","allowUndefinedOverrides","defaultOptions","withOptions","_len2","_key2","hasBeenInitialised","pick","serviceVersion","env","environment","_process","process","NEXT_PUBLIC_VERCEL_ENV","_ignored","detectEnvironment","deploymentName","_process2","NEXT_PUBLIC_VERCEL_TARGET_ENV","detectDeploymentName","deploymentId","_process3","NEXT_PUBLIC_VERCEL_BRANCH_URL","detectDeploymentId","initializeResourceAttributes","_nav$userAgent","userAgent","additionalSignalAttributes","initializeSignalAttributes","debugLogger","fullName","email","roles","initApi","reportErrorInternal","_opts$attributes","timestamp","severity","removeItem"],"mappings":"6OAAO,SAASA,IACZ,CCAeC,EAAa,OACzB,IAAMC,EAAOD,EAAa,QACpBE,EAAOF,EAAa,QACpBG,EAAQH,EAAa,SACrBI,EAAQJ,EAAa,SAClC,SAASA,EAAaK,GAClB,MAAuB,oBAAZC,SAAkD,mBAAhBA,QAAQC,KAAmD,mBAAtBD,QAAQC,IAAIC,MACnFT,EAEPO,QAAQD,IAA4C,mBAA1BC,QAAQD,GAAQG,MACnC,WACHF,QAAQD,GAAQG,MAAMF,QAASG,UAClC,EAEE,WACHH,QAAQC,IAAIC,MAAMF,QAASG,UAC9B,CACL,CClBA,IAAMC,EAAuBC,OAAOC,UAAUC,eAIvC,SAASA,EAAeC,EAAKC,GAChC,OAAOL,EAAqBM,KAAKF,EAAKC,EAC1C,CCJO,IAAME,EAAwB,oBAAXC,OAAyBA,YAASC,EAC/CC,EAAMH,aAAG,EAAHA,EAAKI,SACXC,EAAML,aAAG,EAAHA,EAAKM,UACXC,EAA0B,oBAAbC,SAA2BA,cAAWN,EACnDO,GAAOT,aAAAA,EAAAA,EAAKU,eAAeV,aAAAA,EAAAA,EAAKW,qBAAqBX,eAAAA,EAAKY,iBAAiBZ,aAAAA,EAAAA,EAAKa,gBAC3Db,SAAAA,EAAKc,mBAChC,IAAMC,EAAQf,aAAG,EAAHA,EAAKe,MACbC,EAAgB,WACzB,IAAI,IAAAC,EACA,OAAwBA,QAAxBA,EAAOjB,aAAAA,EAAAA,EAAKgB,oBAAYC,IAAAA,EAAAA,EAAI,IAC/B,CACD,MAAAC,GAGI,OAAO,IACX,CACJ,CAT6B,GAUhBC,EAAkB,WAC3B,IAAI,IAAAC,EACA,OAA0BA,QAA1BA,EAAOpB,aAAAA,EAAAA,EAAKmB,sBAAcC,IAAAA,EAAAA,EAAI,IACjC,CACD,MAAAC,GAGI,OAAO,IACX,CACJ,CAT+B,GCdzBC,EAA0BC,MAAM,IAC/B,SAASC,EAAiBC,GAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAgB,EAAZD,EAAeC,IAC/BJ,EAAwBI,GAAKC,KAAKC,MAAsB,GAAhBD,KAAKE,UAAiB,GAE1DP,EAAwBI,IAAM,KAC9BJ,EAAwBI,IAAM,IAGtC,OAAOI,OAAOC,aAAaxC,MAAM,KAAM+B,EAAwBU,MAAM,EAAe,EAAZP,GAC5E,CCbO,SAASQ,EAAiBC,EAAQC,EAAWC,GAC5CF,EAAOD,iBACPC,EAAOD,iBAAiBE,EAAWC,GAAU,GAExCF,EAAOG,aACZH,EAAOG,YAAY,KAAOF,EAAWC,EAE7C,CCPO,IAAME,EAA8B,MAAhBtB,GAAwD,mBAAzBA,EAAauB,SAA0D,mBAAzBvB,EAAawB,q0RCD9G,SAASC,IACZ,OAAO,IAAIC,MAAOC,SACtB,CACO,SAASC,IACZ,IAAMC,EAAaC,IACnB,OAAID,EACOf,OAAmC,KAA3BrB,EAAKgC,MAAQI,IAEzBE,EAAU,IAAIL,KACzB,CACO,SAASK,EAAUC,GACtB,MAAoB,WAAhBC,EAAOD,GACAD,EAAUC,EAAKL,WAGnBb,OAAOkB,GAAQ,QAC1B,CACO,SAASF,IACZ,IACoCI,EADhCL,EAAapC,aAAAA,EAAAA,EAAMoC,WACG,iBAAfA,IACPA,EAAapC,SAAYyC,QAARA,EAAJzC,EAAM0C,cAAND,IAAYA,OAAZA,EAAAA,EAAcE,YAE/B,OAAOP,CACX,CCZA,IAAMQ,EAAU,CACZC,WAAYtD,aAAAA,EAAAA,EAAKsD,WACjBC,aAAcvD,aAAAA,EAAAA,EAAKuD,aACnBC,YAAaxD,aAAAA,EAAAA,EAAKwD,YAClBC,cAAezD,aAAG,EAAHA,EAAKyD,eAIXC,EAAyB,MAAP1D,GAA8B,MAAfA,EAAU,MAAoC,MAAvBA,EAAU,KAAQ,MAAmD,mBAA/BA,EAAU,KAAQ,KAAO,IAI7H,SAASsD,IAAiB,IAAA,IAAAK,EAAAnE,UAAAoE,OAAHC,EAACtC,IAAAA,MAAAoC,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAADD,EAACC,GAAAtE,UAAAsE,GAC3B,OAAOC,EAAgBxE,MAAM,aAAcC,UAC/C,CAIO,SAASgE,IAAkB,IAAA,IAAAQ,EAAAxE,UAAAoE,OAAHC,EAACtC,IAAAA,MAAAyC,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAADJ,EAACI,GAAAzE,UAAAyE,GAC5B,OAAOF,EAAgBxE,MAAM,cAAeC,UAChD,CAIA,SAASuE,IAAkB,IAAAG,EAMjBC,EAAqBC,KAC3B,GAAIV,EACA,IAII,IAAMW,EAAO9C,MAAM5B,UAAUqC,MAAMzC,MAAMC,WAEzC,OAAOQ,EAAU,KAAQ,KAAO,IAAEqD,EAAQc,GAAqBnE,EAAKqE,EACvE,CACD,MAAOC,GACHrF,EAAK,6GACekF,EAAoBG,EAG5C,CAGJ,OAAkCJ,QAAlCA,EAAOb,EAAQc,UAARD,IAA2BA,OAA3BA,EAAAA,EAA6B3E,MAAMS,EAAKR,UACnD,CAxCIkE,GACAvE,EAAM,yFCfkCsB,GAAQA,EAAK8D,iBAClD,IAAMC,EAAiC/D,GAA8C,mBAA/BT,EAAyB,qBAA2C,mBAAhBS,EAAU,IAC9GgE,EAAyB/E,OAAOgF,OAAO,CAChDC,YAAa,aACbC,cAAe,eACfC,kBAAmB,kBACnBC,aAAc,cACdC,6BAA8B,2BAC9BC,+BAAgC,6BAChCC,gBAAiB,iBACjBC,kBAAmB,kBACnBC,oBAAqB,oBACrBC,kBAAmB,kBACnBC,YAAa,aACbC,eAAgB,eAChBC,iBAAkB,iBAClBC,iBAAkB,kBAClBC,aAAc,cACdC,eAAgB,gBAChBC,cAAe,eACfC,aAAc,cACdC,eAAgB,gBAChBC,wBAAyB,wBACzBC,WAAY,YACZC,iBAAkB,iBAClBC,mBAAoB,qBAEjB,SAASC,EAA2BC,GACvC,OAAK3B,EAUE,CACH4B,MAIJ,WACIC,EAAY5F,EAAKgC,MACjB,IACI,IACyB6D,EADnBC,EAAsBvG,aAAAA,EAAAA,EAAKuG,oBACjC,GAAIA,EAEQ,QAARD,EADAE,EAAW,IAAID,EAAoBE,UACnCH,IAAQA,GAARA,EAAUI,QAAQ,CAAEC,KAAM,YAEjC,CACD,MAAOC,GAMH,CAEJC,EAAoCvD,EAAWwD,EA9DzB,IA+D1B,EArBIC,IAsBJ,WACIC,EAAUvG,EAAKgC,MACfwE,IACIC,IAAaC,IACbJ,KAGA9E,EAAiB9B,EAAK,mBAAoBiH,GAC1CC,EAAqC/D,EAAWyD,EAAKZ,EAAKmB,0BAElE,EA/BIC,OAAQT,GAwGhB,SAAkDU,GAC9C,IAAIpB,EAAQ,EACZ,MAAO,CACHA,MAAO,WACHA,EAAQ3D,GACX,EACDsE,IAAK,WAAF,OAAQS,EAAM,CAAEC,SAAUhF,IAAQ2D,GAAQ,EAC7CmB,OAAQzI,EAEhB,CA7He4I,CAAyCvB,EAAKqB,OAEzD,IAAInB,EACAW,EACAE,EAEAV,EACAa,EACAR,EAoCJ,SAASE,IAAM,IAAAY,EACXb,IAKY,QAARa,EAAAT,SAAAS,IAAQA,GAARA,EAAUF,UAAYP,EAASO,SAhFjB,MAiFdtB,EAAKqB,MAAM,CAAEN,SAAAA,EAAUO,SAAU9F,KAAKiG,MAAMV,EAASO,YAGrDtB,EAAKqB,MAAM,CAAEN,SAAAA,EAAUO,SAAU9F,KAAKiG,MAAMZ,EAAUX,IAE9D,CACA,SAASI,EAAgBoB,GACrB,IAAMC,EAAID,EAAKtD,iBAAiB,YAAYwD,MAAK,SAACzD,GAE9C,IAAM0D,EAAQ1D,EACd,OAAQ0D,EAAM3B,WAAaA,KACrBW,GAAWA,EAAUb,EAAK8B,sCAAwCD,EAAME,cAC1E/B,EAAKgC,gBAAgBH,EAC7B,IACKF,IAELZ,EAAWY,EACPd,GACAD,IACR,CACA,SAASK,IACAD,KACDJ,GACR,CACA,SAASD,KAMT,WACI,GAAIN,EAAU,CACV,IAAI,IAAA4B,EACQA,QAARA,EAAA5B,aAAQ4B,GAARA,EAAUC,YACb,CACD,MAAOzB,GACH,CAEJJ,OAAWtG,CACf,CACJ,CAfIoI,GAiBIjB,IACA9D,aAAa8D,GACbA,OAAqCnH,GAjBzC+G,IA0BJ,WACI,IAAK9G,EACD,OJpIwB+B,EIqIR/B,EJrIgBgC,EIqIX,mBJrIsBC,EIqIFgF,EJpI7ClF,EAAOqG,oBACPrG,EAAOqG,oBAAoBpG,EAAWC,GAAU,GAE3CF,EAAOsG,aACZtG,EAAOsG,YAAY,KAAOrG,EAAWC,GALtC,IAA6BF,EAAQC,EAAWC,CIsInD,CA7BIqG,EACJ,CAkBA,SAASxB,IACDJ,IACAtD,aAAasD,GACbA,OAAoC3G,EAE5C,CAMJ,CAIA,SAASiH,IACL,MAAgC,aAAzBhH,eAAAA,EAAKuI,kBAA0D,eAAzBvI,aAAG,EAAHA,EAAKuI,gBACtD,CCvJO,IAAMC,EAAoB,YCA1B,SAASC,EAAmBC,GAC/B,OAAOlH,KAAKiG,MAAU,IAAJiB,GAAW,GACjC,CCIO,SAASC,EAASC,GAAK,IAAAC,EAC1B,MAAmB,iBAARD,EACAA,EACJ,IAAIE,IAAIF,EAAiBC,QAAdA,EAAE7I,aAAG,EAAHA,EAAK+I,eAAOF,IAAAA,EAAAA,EAAIzI,aAAAA,EAAAA,EAAK4I,KAC7C,CCLO,SAASC,EAAaL,GACzB,IAEI,OADkBD,EAASC,GACVM,UALM,oBAAb7I,SAA2BA,SAAS6I,YAASnJ,EAM1D,CACD,MAAO0G,GACH,OAAO,CACX,CACJ,CCZA,IAAM0C,EAA+BC,OAAOC,IAAI,yBASzC,SAASC,EAAKC,EAAQxH,EAAQyH,GACjC,IAAMC,EAAWF,EAAOxH,GACnB0H,IARkD,IAY7BA,EAZLN,IAajBnK,EAAK,GAAA0K,OAAI/H,OAAOI,gDAXxB,SAA4B4H,GAExBA,EAAcR,IAAgC,CAClD,CAUIS,CAAmBH,GACnBF,EAAOxH,GAAUyH,EAAQC,IAPrBzK,EAAK,GAAA0K,OAAI/H,OAAOI,4CAQxB,CCpBO,IAAM8H,EAAO,CAChBC,UAAW,GACX/C,SAAU,CACNgD,WAAY,IAEhBC,MAAO,CACHC,KAAM,gBACNC,QAASC,QACTJ,WAAY,IAEhBK,iBAAkB,GAClBC,WAAY,GACZC,oBAAqB,GACrBC,mBAAmB,EACnBC,YAAY,EACZC,8BAA+B,GAC/BC,gCAAiC,IACjC5C,qCAAsC,IACtC6C,iBAAkB,GAClBC,wBAAyB,CACrBC,uBAAuB,ICpBlBC,EAAe,eACfC,EAAkB,kBAClBC,EAA8B,8BAC9BC,EAAkB,kBAClBC,GAAgB,gBAEhBC,GAAa,aACbC,GAAe,eAEfC,GAAa,sBAObC,GAAU,UACVC,GAAY,YACZC,GAAiB,iBACjBC,GAAa,aACbC,GAAY,YACZC,GAAa,aAEbC,GAAoB,oBACpBC,GAAiB,iBACjBC,GAAuB,uBAIvBC,GAAW,WAkBXC,GAAiB,CAC1BC,YAAa,EACbC,MAAO,EACPC,MAAO,EACPC,KAAM,EACNC,KAAM,GACNC,MAAO,GACPC,MAAO,IAKEC,GACA,EADAA,GAEA,EAGAC,GACH,YADGA,GAEA,eChEPC,GAAsB,aACtBC,GAAwB,IAGxBC,GAAqC,MAChCC,GAAY,KAChB,SAASC,GAAcC,EAAgCC,GAC1D,GAAK7K,EAAL,CAIK4K,IACDA,EAV0C,OAYzCC,IACDA,EAZ2C,OAc/CD,EAAiCvL,KAAKyL,IAAIF,EAAgCH,IAC1EI,EAAkCxL,KAAKyL,IAAID,EAAiCJ,IAC5E,IACI,IAAMM,EXpBP,SAAiBC,GACpB,OAAIhL,GAAetB,EACRA,EAAauB,QAAQ+K,GAEzB,IACX,CWe4B/K,CAAQsK,IACxBU,EAiCZ,SAAsBF,GAClB,IAAKA,EACD,OAAO,KAEX,IAAMG,EAASH,EAAYI,MAAMX,IACjC,GAAIU,EAAO5J,OAAS,EAChB,OAAO,KAEX,IAAM8J,EAAKF,EAAO,GACZnH,EAAYsH,SAASH,EAAO,GAAI,IAChCI,EAAmBD,SAASH,EAAO,GAAI,IAC7C,IAAKE,GAAMG,MAAMxH,IAAcwH,MAAMD,GACjC,OAAO,KAEX,MAAO,CACHF,GAAAA,EACArH,UAAAA,EACAuH,iBAAAA,EAER,CApDsBE,CAAaT,GACvBE,IAuDZ,SAAwBA,EAASL,EAAgCC,GAC7D,IAAMY,EAA6BtL,IAAQyK,EAC3C,GAAIK,EAAQK,iBAAmBG,EAC3B,OAAO,EAEX,IAAMC,EAAsBvL,IAAQ0K,EACpC,OAAOI,EAAQlH,WAAa2H,CAChC,CA9DwBC,CAAeV,EAASL,EAAgCC,KACpEI,EAAU,MAEVA,EACAA,EAAQK,iBAAmBnL,IAG3B8K,EAAU,CACNG,GAAIlM,EbhCU,IaiCd6E,UAAW5D,IACXmL,iBAAkBnL,KX1B3B,SAAiB6K,EAAGY,GACnB5L,GAAetB,GACfA,EAAawB,QAAQ8K,EAAGY,EAEhC,CWyBQ1L,CAAQqK,GAuChB,SAA0BU,GACtB,OAAOA,EAAQG,GAAKZ,GAAwBS,EAAQlH,UAAYyG,GAAwBS,EAAQK,gBACpG,CAzCqCO,CAAiBZ,IAC9CP,GAAYO,EAAQG,EACvB,CACD,MAAOpJ,GACHrF,EAAK,uCAAwCqF,EACjD,CA9BA,MAFInF,EAAM,gFAiCd,CC5CA,IAAImF,GAAU8J,IAAI,EAACC,GAAE,SAAS/J,GAAGrC,iBAAiB,YAAY,SAAS4G,GAAGA,EAAEyF,YAAYF,GAAEvF,EAAE0F,UAAUjK,EAAEuE,GAAI,IAAE,EAAI,EAAC2F,GAAE,WAAW,IAAIlK,EAAEmK,KAAK/N,aAAaA,YAAY6D,kBAAkB7D,YAAY6D,iBAAiB,cAAc,GAAG,GAAGD,GAAGA,EAAEoK,cAAc,GAAGpK,EAAEoK,cAAchO,YAAY+B,MAAM,OAAO6B,CAAE,EAACqK,GAAE,WAAW,IAAIrK,EAAEkK,KAAI,OAAOlK,GAAGA,EAAEsK,iBAAiB,CAAE,EAACC,GAAE,SAASvK,EAAEuE,GAAG,IAAIiG,EAAEN,KAAI1G,EAAE,WAA8J,OAAnJsG,IAAG,EAAEtG,EAAE,qBAAqBgH,IAAI1O,SAAS2O,cAAcJ,KAAI,EAAE7G,EAAE,YAAY1H,SAAS4O,aAAalH,EAAE,UAAUgH,EAAEnI,OAAOmB,EAAEgH,EAAEnI,KAAKsI,QAAQ,KAAK,OAAa,CAAC7E,KAAK9F,EAAE4K,WAAM,IAASrG,GAAE,EAAGA,EAAEsG,OAAO,OAAOC,MAAM,EAAEC,QAAQ,GAAG3B,GAAG,MAAM7D,OAAOnH,KAAKD,MAAM,KAAKoH,OAAOlI,KAAKC,MAAM,cAAcD,KAAKE,UAAU,MAAMyN,eAAexH,EAAG,EAACyH,GAAE,SAASjL,EAAEuE,EAAEiG,GAAG,IAAI,GAAGvI,oBAAoBiJ,oBAAoBC,SAASnL,GAAG,CAAC,IAAIwD,EAAE,IAAIvB,qBAAqB,SAASjC,GAAGoL,QAAQC,UAAUC,MAAM,WAAW/G,EAAEvE,EAAEuL,aAAa,GAAG,IAAI,OAAO/H,EAAEpB,QAAQhH,OAAOoQ,OAAO,CAACnJ,KAAKrC,EAAEyL,UAAS,GAAIjB,GAAG,KAAKhH,CAAC,CAAE,CAAA,MAAMxD,GAAE,CAAG,EAAC0L,GAAE,SAAS1L,EAAEuE,EAAEiG,EAAEhH,GAAG,IAAIpG,EAAE0M,EAAE,OAAO,SAASC,GAAGxF,EAAEqG,OAAO,IAAIb,GAAGvG,MAAMsG,EAAEvF,EAAEqG,OAAOxN,GAAG,UAAK,IAASA,KAAKA,EAAEmH,EAAEqG,MAAMrG,EAAEuG,MAAMhB,EAAEvF,EAAEsG,OAAO,SAAS7K,EAAEuE,GAAG,OAAOvE,EAAEuE,EAAE,GAAG,OAAOvE,EAAEuE,EAAE,GAAG,oBAAoB,MAAM,CAApE,CAAsEA,EAAEqG,MAAMJ,GAAGxK,EAAEuE,GAAI,CAAC,EAACoH,GAAE,SAAS3L,GAAG4L,uBAAuB,WAAW,OAAOA,uBAAuB,WAAW,OAAO5L,GAAG,GAAG,GAAI,EAAC6L,GAAE,SAAS7L,GAAGlE,SAAS6B,iBAAiB,oBAAoB,WAAW,WAAW7B,SAASsI,iBAAiBpE,GAAG,GAAI,EAAC4J,GAAE,SAAS5J,GAAG,IAAIuE,GAAE,EAAG,OAAO,WAAWA,IAAIvE,IAAIuE,GAAE,EAAI,CAAC,EAACuH,IAAI,EAACC,GAAE,WAAW,MAAM,WAAWjQ,SAASsI,iBAAiBtI,SAAS2O,aAAa,IAAI,CAAE,EAACuB,GAAE,SAAShM,GAAG,WAAWlE,SAASsI,iBAAiB0H,IAAE,IAAKA,GAAE,qBAAqB9L,EAAEqC,KAAKrC,EAAEiK,UAAU,EAAEgC,KAAK,EAACC,GAAE,WAAWvO,iBAAiB,mBAAmBqO,IAAE,GAAIrO,iBAAiB,qBAAqBqO,IAAE,EAAI,EAACC,GAAE,WAAWhI,oBAAoB,mBAAmB+H,IAAE,GAAI/H,oBAAoB,qBAAqB+H,IAAE,EAAI,EAACG,GAAE,WAAW,OAAOL,GAAE,IAAIA,GAAEC,KAAIG,KAAInC,IAAG,WAAW/K,YAAY,WAAW8M,GAAEC,KAAIG,IAAI,GAAE,EAAI,KAAG,CAAC,mBAAIE,GAAkB,OAAON,EAAC,EAAG,EAACO,GAAE,SAASrM,GAAGlE,SAAS2O,aAAa9M,iBAAiB,sBAAsB,WAAW,OAAOqC,GAAG,IAAG,GAAIA,GAAI,EAACsM,GAAE,CAAC,KAAK,KAAwaC,GAAE,CAAC,GAAG,KAAKC,GAAE,SAASxM,EAAEuE,GAAGA,EAAEA,GAAG,CAAA,EAAjc,SAASvE,EAAEuE,GAAGA,EAAEA,GAAG,GAAG8H,IAAG,WAAW,IAAI7B,EAAEhH,EAAE2I,KAAI/O,EAAEmN,GAAE,OAAOT,EAAEmB,GAAE,SAAS,SAASjL,GAAGA,EAAEyM,SAAS,SAASzM,GAAG,2BAA2BA,EAAE8F,OAAOgE,EAAE/F,aAAa/D,EAAE+B,UAAUyB,EAAE4I,kBAAkBhP,EAAEwN,MAAMvN,KAAKqP,IAAI1M,EAAE+B,UAAUsI,KAAI,GAAGjN,EAAE2N,QAAQ4B,KAAK3M,GAAGwK,GAAE,IAAK,GAAG,IAAIV,IAAIU,EAAEkB,GAAE1L,EAAE5C,EAAEkP,GAAE/H,EAAEqI,kBAAkB7C,IAAG,SAASvG,GAAGpG,EAAEmN,GAAE,OAAOC,EAAEkB,GAAE1L,EAAE5C,EAAEkP,GAAE/H,EAAEqI,kBAAkBjB,IAAG,WAAWvO,EAAEwN,MAAMxO,YAAY+B,MAAMqF,EAAEyG,UAAUO,GAAE,EAAG,GAAG,IAAI,GAAI,CAAoCqC,CAAEjD,IAAG,WAAW,IAAIY,EAAEhH,EAAE+G,GAAE,MAAM,GAAGnN,EAAE,EAAE0M,EAAE,GAAGI,EAAE,SAASlK,GAAGA,EAAEyM,SAAS,SAASzM,GAAG,IAAIA,EAAE8M,eAAe,CAAC,IAAIvI,EAAEuF,EAAE,GAAGU,EAAEV,EAAEA,EAAExK,OAAO,GAAGlC,GAAG4C,EAAE+B,UAAUyI,EAAEzI,UAAU,KAAK/B,EAAE+B,UAAUwC,EAAExC,UAAU,KAAK3E,GAAG4C,EAAE4K,MAAMd,EAAE6C,KAAK3M,KAAK5C,EAAE4C,EAAE4K,MAAMd,EAAE,CAAC9J,GAAG,CAAG,IAAE5C,EAAEoG,EAAEoH,QAAQpH,EAAEoH,MAAMxN,EAAEoG,EAAEuH,QAAQjB,EAAEU,IAAK,EAACH,EAAEY,GAAE,eAAef,GAAGG,IAAIG,EAAEkB,GAAE1L,EAAEwD,EAAE+I,GAAEhI,EAAEqI,kBAAkBf,IAAG,WAAW3B,EAAEG,EAAE0C,eAAevC,GAAE,EAAG,IAAIT,IAAG,WAAW3M,EAAE,EAAEoG,EAAE+G,GAAE,MAAM,GAAGC,EAAEkB,GAAE1L,EAAEwD,EAAE+I,GAAEhI,EAAEqI,kBAAkBjB,IAAG,WAAW,OAAOnB,GAAG,GAAK,IAAExL,WAAWwL,EAAE,GAAG,IAAK,EAACwC,GAAE,EAAEC,GAAE,IAAIC,GAAE,EAAEC,GAAE,SAASnN,GAAGA,EAAEyM,SAAS,SAASzM,GAAGA,EAAEoN,gBAAgBH,GAAE5P,KAAKyL,IAAImE,GAAEjN,EAAEoN,eAAeF,GAAE7P,KAAKqP,IAAIQ,GAAElN,EAAEoN,eAAeJ,GAAEE,IAAGA,GAAED,IAAG,EAAE,EAAE,EAAE,GAAI,EAACjE,GAAE,WAAW,OAAOhJ,GAAEgN,GAAE5Q,YAAYiR,kBAAkB,CAAE,EAACC,GAAE,WAAW,qBAAqBlR,aAAa4D,KAAIA,GAAEiL,GAAE,QAAQkC,GAAE,CAAC9K,KAAK,QAAQoJ,UAAS,EAAG8B,kBAAkB,IAAK,EAACC,GAAE,GAAGC,GAAE,IAAIC,IAAIC,GAAE,EAA8EC,GAAE,GAAGC,GAAE,SAAS7N,GAAG,GAAG4N,GAAEnB,SAAS,SAASlI,GAAG,OAAOA,EAAEvE,EAAI,IAAEA,EAAEoN,eAAe,gBAAgBpN,EAAE8N,UAAU,CAAC,IAAIvJ,EAAEiJ,GAAEA,GAAElO,OAAO,GAAGkL,EAAEiD,GAAEM,IAAI/N,EAAEoN,eAAe,GAAG5C,GAAGgD,GAAElO,OAAO,IAAIU,EAAEmD,SAASoB,EAAEyJ,QAAQ,CAAC,GAAGxD,EAAExK,EAAEmD,SAASqH,EAAEwD,SAASxD,EAAEO,QAAQ,CAAC/K,GAAGwK,EAAEwD,QAAQhO,EAAEmD,UAAUnD,EAAEmD,WAAWqH,EAAEwD,SAAShO,EAAE+B,YAAYyI,EAAEO,QAAQ,GAAGhJ,WAAWyI,EAAEO,QAAQ4B,KAAK3M,OAAO,CAAC,IAAIwD,EAAE,CAAC4F,GAAGpJ,EAAEoN,cAAcY,QAAQhO,EAAEmD,SAAS4H,QAAQ,CAAC/K,IAAIyN,GAAEQ,IAAIzK,EAAE4F,GAAG5F,GAAGgK,GAAEb,KAAKnJ,EAAE,CAACgK,GAAEU,MAAM,SAASlO,EAAEuE,GAAG,OAAOA,EAAEyJ,QAAQhO,EAAEgO,OAAO,IAAIR,GAAElO,OAAO,IAAIkO,GAAEW,OAAO,IAAI1B,SAAS,SAASzM,GAAG,OAAOyN,GAAEW,OAAOpO,EAAEoJ,GAAG,GAAG,CAAC,CAAE,EAACiF,GAAE,SAASrO,GAAG,IAAIuE,EAAE4F,KAAKmE,qBAAqBnE,KAAKnL,WAAWwL,GAAI,EAAC,OAAOxK,EAAE4J,GAAE5J,GAAG,WAAWlE,SAASsI,gBAAgBpE,KAAKwK,EAAEjG,EAAEvE,GAAG6L,GAAE7L,IAAIwK,CAAE,EAAC+D,GAAE,CAAC,IAAI,KAAKC,GAAE,SAASxO,EAAEuE,GAAG,2BAA2B4F,MAAM,kBAAkBsE,uBAAuBpT,YAAYkJ,EAAEA,GAAG,GAAG8H,IAAG,WAAW,IAAI7B,EAAE8C,KAAI,IAAI9J,EAAEpG,EAAEmN,GAAE,OAAOT,EAAE,SAAS9J,GAAGqO,IAAG,WAAWrO,EAAEyM,QAAQoB,IAAG,IAAItJ,EAAz8B,WAAW,IAAIvE,EAAE3C,KAAKyL,IAAI0E,GAAElO,OAAO,EAAEjC,KAAKC,OAAO0L,KAAI2E,IAAG,KAAK,OAAOH,GAAExN,EAAG,CAAk4B0O,GAAInK,GAAGA,EAAEyJ,UAAU5Q,EAAEwN,QAAQxN,EAAEwN,MAAMrG,EAAEyJ,QAAQ5Q,EAAE2N,QAAQxG,EAAEwG,QAAQvH,IAAI,GAAI,EAAC0G,EAAEe,GAAE,QAAQnB,EAAE,CAACyD,kBAAkB,QAAQ/C,EAAEjG,EAAEgJ,yBAAoB,IAAS/C,EAAEA,EAAE,KAAKhH,EAAEkI,GAAE1L,EAAE5C,EAAEmR,GAAEhK,EAAEqI,kBAAkB1C,IAAIA,EAAE9H,QAAQ,CAACC,KAAK,cAAcoJ,UAAS,IAAKI,IAAG,WAAW/B,EAAEI,EAAE6C,eAAevJ,GAAE,EAAG,IAAIuG,IAAG,WAAW4D,GAAE3E,KAAIwE,GAAElO,OAAO,EAAEmO,GAAEkB,QAAQvR,EAAEmN,GAAE,OAAO/G,EAAEkI,GAAE1L,EAAE5C,EAAEmR,GAAEhK,EAAEqI,iBAAiB,IAAI,IAAK,EAACrN,GAAE,CAAC,KAAK,KAAKqP,GAAE,CAAE,ECEppJC,IAAc,ECGX,SAASC,GAAWC,GACvB,IACIC,EDAqBC,ECDnBC,EAAc,GAUpB,ODTyBD,ECQZE,EDPTN,IACAI,IAECpT,GAAQH,IAEbiC,EAAiB9B,EAAK,oBAAoB,WACV,YAAxBA,EAAIuI,iBACJ6K,GAER,IACAtR,EAAiBjC,EAAK,YAAY,WAC9BmT,IAAc,EACdI,GACJ,IAKAtR,EAAiBjC,EAAK,gBAAgB,WAClCmT,IAAc,EACdI,GACJ,KCbO,CACHG,KAAAA,SAAKC,GA6BuB,aAAzBxT,eAAAA,EAAKuI,kBArBJ8K,EAAYvC,KAAK0C,GACbH,EAAY5P,QAtBL,GAuBP6P,IAE4B,MAAvBH,IACLA,EAAsBhQ,EAAWmQ,EA3BnB,OAmBdJ,EAAa,CAACM,GAUtB,GAEJ,SAASF,IACsB,MAAvBH,IACA/P,aAAa+P,GACbA,EAAsB,MAEtBE,EAAY5P,OAAS,IACrByP,EAAaG,EAAYxR,SACzBwR,EAAY5P,OAAS,EAE7B,CACJ,CCzCA,SAAsB8P,GAAIE,EAAAC,GAAA,OAAAC,GAAAvU,MAAA6E,KAAA5E,UAAA,CAgDzB,SAAAsU,KAAA,OAAAA,GAAAC,EAAAC,IAAAC,MAhDM,SAAAC,EAAoBC,EAAMC,GAAI,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAR,IAAAvK,MAAA,SAAAgL,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAKjC,GAJMN,EAAaO,KAAKC,UAAUT,GAC9BE,EAAcD,EACdE,EAAaF,EAAWzQ,OACxB4Q,GAAe,EAEc,oBAAtBM,kBAAiC,CAAAL,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,KAAA,EACpBI,GAAiBV,GAAW,KAAA,EAAhDC,EAAWG,EAAAO,KACXT,EAAaD,EAAYC,WACzBC,GAAe,EAAK,KAAA,GAAA,OAAAC,EAAAE,KAAA,GAGlBjF,QAAQuF,IAAIjL,EAAKC,UAAUiL,IAAG,WAAA,IAAAC,EAAApB,EAAAC,IAAAC,MAAC,SAAAmB,EAAOC,GAAQ,IAAAtM,EAAAuM,EAAAC,EAAA,OAAAvB,IAAAvK,MAAA,SAAA+L,GAAA,cAAAA,EAAAd,KAAAc,EAAAb,MAAA,KAAA,EAc3C,GAd2Ca,EAAAd,KAAA,GAEtC3L,EAAM,IAAIE,IAAIoM,EAAc,MAC9BI,SAAW1M,EAAI0M,UAAY1M,EAAI0M,SAASC,SAAS,KAAOvB,EAAKwB,UAAU,GAAKxB,GAC1EmB,EAAU,CACZ,eAAgB,mBAChBM,wBAAa/L,OAAYwL,EAAoB,YAE7CA,EAASQ,UACTP,EAAQ,iBAAmBD,EAAkB,SAG7Cb,IACAc,EAAQ,oBAAsB,QAE7BvU,EAAK,CAAAyU,EAAAb,KAAA,EAAA,KAAA,CACiD,OAAvD1V,EAAK,kDAAkDuW,EAAAM,OAAA,UAAA,KAAA,EAAA,OAAAN,EAAAb,KAAA,GAGpC5T,EAAMgI,EAAK,CAC9B3J,OAAQ,OACRkW,QAAAA,EACAlB,KAAME,EAENyB,UAAWxB,GArCI,MAsCjB,KAAA,IANIgB,EAAQC,EAAAR,MAQLgB,OAAOC,MAAMnX,GACjByW,EAASW,IACVjX,iCAAI4K,OAAgCd,EAAG,MAAAc,OAAK0L,EAASY,YAAMtM,OAAI0L,EAASa,aAC3EZ,EAAAb,KAAA,GAAA,MAAA,KAAA,GAAAa,EAAAd,KAAA,GAAAc,EAAAa,GAAAb,EAAA,MAAA,GAGDvW,EAAI4K,8BAAAA,OAA+BwL,EAAStM,KAAGc,OAAGsK,EAAI,KAAAqB,EAAAa,IAAY,KAAA,GAAA,IAAA,MAAA,OAAAb,EAAAc,OAAA,GAAAlB,EAAA,KAAA,CAAA,CAAA,EAAA,UAEzE,OAAA,SAAAmB,GAAA,OAAApB,EAAA5V,MAAA6E,KAAA5E,UAAA,CAAA,CAnCmC,KAmCjC,KAAA,GAAA,IAAA,MAAA,OAAAiV,EAAA6B,OAAA,GAAApC,OACNJ,GAAAvU,MAAA6E,KAAA5E,UAAA,CAAA,SACcuV,GAAgByB,GAAA,OAAAC,GAAAlX,MAAA6E,KAAA5E,UAAA,CAAA,SAAAiX,KAK9B,OAL8BA,GAAA1C,EAAAC,IAAAC,MAA/B,SAAAyC,EAAgCC,GAAI,IAAAC,EAAAC,EAAAC,EAAA,OAAA9C,IAAAvK,MAAA,SAAAsN,GAAA,cAAAA,EAAArC,KAAAqC,EAAApC,MAAA,KAAA,EAG0C,OAFpEiC,EAAO,IAAII,KAAK,CAACL,IACjBE,EAASD,EAAKC,SACdC,EAAmBD,EAAOI,YAAY,IAAInC,kBAAkB,SAAQiC,EAAAjB,OAAA,SACnE,IAAIoB,SAASJ,GAAkBK,eAAa,KAAA,EAAA,IAAA,MAAA,OAAAJ,EAAAT,OAAA,GAAAI,QACtDnX,MAAA6E,KAAA5E,UAAA,CCpDD,IAEI4X,GAFEC,GAAajE,IAoBnB,SAAkBkE,GACd5D,GAAK,WAAY,CACb6D,aAAc,CACV,CACIrQ,SAAU8C,EAAK9C,SACfsQ,UAAW,CACP,CACIrN,MAAOH,EAAKG,MACZsN,WAAYH,QAK7BrB,OAAM,SAACyB,GACNxY,EAAM,0BAA2BwY,EACrC,GACJ,IAnCMC,GAAcvE,IA2CpB,SAAmBwE,GACflE,GAAK,aAAc,CACfmE,cAAe,CACX,CACI3Q,SAAU8C,EAAK9C,SACf4Q,WAAY,CACR,CACI3N,MAAOH,EAAKG,MACZyN,MAAOA,QAKxB3B,OAAM,SAACyB,GACNxY,EAAM,2BAA4BwY,EACtC,GACJ,IAzDA,SAASK,KCPF,IAA2B5R,EACxB6R,EACAC,EACAC,EACFC,EACAC,EACAC,EDSJ,OAPKjB,KCPCY,GADwB7R,EDSM,CAC5B6R,SAAU,KACVC,sBAAuB,KACvBC,sBAAuB,MCXTF,SAChBC,EAAwB9R,EAAK8R,sBAC7BC,EAAwB/R,EAAK+R,sBAC/BC,EAAa,EACbC,EAA6B,EAC7BC,EAA6B,EACjC7U,GAAY,WACR4U,EAA6B,CACjC,GAAG,KACH5U,GAAY,WACR6U,EAA6B,CACjC,GAAG,KDHCjB,GCIG,WACH,QAAUe,EAAaH,KACjBI,EAA6BH,KAC7BI,EAA6BH,CACtC,GDFMd,IACX,CACO,SAASkB,GAAQhZ,GAChByY,KACA5Y,EAAM,4CAA6CG,GAGvD+X,GAAW3D,KAAKpU,EACpB,CAkBO,SAASiZ,GAASC,GACjBT,KACA5Y,EAAM,4CAA6CqZ,GAGvDb,GAAYjE,KAAK8E,EACrB,CEhDA,IAAMC,GAAiB,CACnB,cACA,YACA,WACA,cACA,aACA,cACA,cAQG,SAASC,GAAWxJ,GACvB,GAAa,MAATA,EAAJ,CAGA,IAAIyJ,EAAW,CAAE,EAmBjB,OAlBIpX,MAAMqX,QAAQ1J,GACdyJ,EAAqB,WAAI,CAAEnL,OAAQ0B,EAAMgG,KAAI,SAAC5Q,GAAC,OAAKoU,GAAWpU,EAAE,KAE3C,iBAAV4K,EACZyJ,EAAsB,YAAIzJ,EAEJ,iBAAVA,EACZyJ,EAAsB,YAAIzJ,EAEJ,kBAAVA,EACZyJ,EAAoB,UAAIzJ,GArBhC,SAAoBA,GAChB,GAAa,MAATA,GAAkC,WAAjBjM,EAAOiM,GACxB,OAAO,EACX,IAAM2J,EAAOnZ,OAAOmZ,KAAK3J,GACzB,OAAuB,IAAhB2J,EAAKjV,QAAgB6U,GAAehJ,SAASoJ,EAAK,GAC7D,CAkBaC,CAAW5J,GAGM,WAAjBjM,EAAOiM,KACZyJ,EAAsB,YAAI,CAAEnL,OAAQ9N,OAAO2P,QAAQH,GAAOgG,KAAI,SAAAC,GAAA,IAAA4D,EAAAC,EAAA7D,EAAA,GAAY,OAAM8D,GAAbF,EAAA,GAAOA,EAAA,GAA4B,MAHtGJ,EAAWzJ,EAKRyJ,CApBP,CAqBJ,CACO,SAASM,GAAWnZ,EAAKoP,GAC5B,MAAO,CACHpP,IAAKA,EACLoP,MAAOwJ,GAAWxJ,GAE1B,CACO,SAASgK,GAAahP,EAAYpK,EAAKoP,GAC1ChF,EAAW+G,KAAKgI,GAAWnZ,EAAKoP,GACpC,CACO,SAASiK,GAAgBjP,EAAYpK,GACxC,IAAMsZ,EAAQlP,EAAWmP,WAAU,SAACC,GAAI,OAAKA,EAAU,MAAMxZ,MAC/C,IAAVsZ,GACAlP,EAAWuI,OAAO2G,EAAO,EAEjC,CCpDA,IAAMG,GAAsB,cAItBC,GAAuB,gDACtB,SAASC,KACZ,IAUqCC,EAAAC,EAV/BC,IAYyE,QADvEF,EAAAnY,MAAMsY,KAAsCF,QAAlCA,EAACxZ,eAAAA,EAAK2Z,qBAAqB,eAAOH,IAAAA,EAAAA,EAAI,IACnD5R,MAAK,SAACzD,GAAC,IAAAyV,EAAA,OAA2BA,QAAtBA,EAAAzV,EAAE0V,aAAa,mBAAOD,SAAtBA,EAAwBE,iBAAkBV,aAAoB,IAAAG,OAAA,EADvEA,EAEFQ,QAAQC,SAAU,IAbsBP,MAAMJ,KAexD,WACI,IAAMY,EAAK3Z,EAAK8D,iBAAiB,cAAc,GAC/C,IAAK6V,EACD,MAAO,GAEX,IAAKA,EAAGC,aACJ,MAAO,GAEX,OAEJ,SAAwCC,GAAe,IACZC,EADYC,EAAAC,EACzBH,GAAa,IAAvC,IAAAE,EAAAjL,MAAAgL,EAAAC,EAAA3R,KAAA6R,MAAyC,CAAA,IAA9BC,EAAWJ,EAAArL,MAClB,GAAIyL,EAAYvQ,OAASmP,GACrB,OAAOoB,EAAYC,YAAYT,MAEvC,CAAC,CAAA,MAAAzC,GAAA8C,EAAAlW,EAAAoT,EAAA,CAAA,QAAA8C,EAAA3L,GAAA,CACD,MAAO,EACX,CATWgM,CAA+BT,EAAGC,aAC7C,CAvBQS,GAAqClB,MAAMJ,IAC/C,GAAII,EACA,MAAO,CACHmB,QAASnB,EAAM,GACfoB,OAAQpB,EAAM,GAI1B,CAwBO,SAASqB,GAA2B1H,EAAI2H,EAAK1C,GAiBhDjF,EAAGxT,KAAKmb,EAAK,oBAAarR,OAAQ2O,EAAKuC,aAAOlR,OAAI2O,EAAKuC,eAC3D,CCzCO,SAASI,GAAQ3C,EAAMrC,EAAQiF,GAElC,IAAM7L,EAAIiJ,EAMV,OALIrC,IACA5G,EAAE4G,OAASA,GAEf5G,EAAE8L,gBACkB,MAAhBD,EAAuBtZ,OAAOH,KAAKiG,MAAM+F,SAAS4B,EAAE+L,mBAAqBF,IAAiBxY,IACvF2M,CACX,CAKO,SAASgM,GAAa/C,EAAMpO,EAAMoR,EAAgBtR,GACrD,IAAIuR,OAAKvb,EACLoZ,OAAOpZ,EACmB,iBAAnBsb,EACPC,EAAKD,EAEAja,MAAMqX,QAAQ4C,KACnBlC,EAAOkC,GAKXhD,EAAKkD,OAAOzK,KAAK,CACb7G,KAAAA,EACAuR,aAAoB,MAANF,EAAaA,EAAK7Y,IAChCsH,WAAYoP,QAAAA,EAAQ,IAE5B,CC/CO,IAAMhX,GAAgC,MAAlBnB,GACW,mBAA3BA,EAAeoB,SACY,mBAA3BpB,EAAeqB,QCD1B,IAAMoZ,GAAqB,SAChBC,GAAQ,KAOZ,SAASC,KACZ,GAAKxZ,GAIL,IACI,IAAM+K,EDZP,SAAiBC,GACpB,OAAIhL,IAAenB,EACRA,EAAeoB,QAAQ+K,GAE3B,IACX,CCO4B/K,CAAQqZ,IAC5B,GAAIvO,EAEA,YADAwO,GAAQxO,GAGZwO,GAAQra,ExBtBa,GuBWtB,SAAiB8L,EAAGY,GACnB5L,IAAenB,GACfA,EAAeqB,QAAQ8K,EAAGY,EAElC,CCQQ1L,CAAQoZ,GAAoBC,GAC/B,CACD,MAAOvX,GACHrF,EAAK,sCAAuCqF,EAChD,MAdInF,EAAM,4EAed,CCrBO,SAAS4c,GAAoB7R,EAAY8R,GAC5C,IADqD,IAAA7G,EAAA8G,EAAAC,EAAAC,EAAAC,EAC5C1a,EAAI,EAAGA,EAAIsI,EAAKO,iBAAiB3G,OAAQlC,IAC9CwI,EAAW+G,KAAKjH,EAAKO,iBAAiB7I,KCNvC,SAA0BwI,EAAYnB,GACzC,IACI,IAAMsT,EAASvT,EAASC,GACpBsT,EAAOC,WACPD,EAAOC,SAAW,YAClBD,EAAOE,WACPF,EAAOE,SAAW,YACtBrD,GAAahP,EAAYgC,GAAUmQ,EAAOlT,MAC1C+P,GAAahP,EdoBG,WcpBmBmS,EAAO5G,UAC1CyD,GAAahP,EdgBK,achBmBmS,EAAOG,UAC5CtD,GAAahP,EdoBK,acpBmBmS,EAAOI,SAASxN,QAAQ,IAAK,KAC9DoN,EAAOK,MACPxD,GAAahP,EdcG,ecduBmS,EAAOK,KAAKzN,QAAQ,IAAK,KAEhEoN,EAAOM,QACPzD,GAAahP,EdcA,YcduBmS,EAAOM,OAAO1N,QAAQ,IAAK,IAEtE,CACD,MAAOrI,GACHsS,GAAahP,EAAYgC,GAAUpK,OAAOiH,GAC9C,CACJ,CDbI6T,CAAiB1S,UAAUiL,UAAA8G,EAAED,aAAAA,EAAAA,EAASjT,WAAG,IAAAkT,EAAAA,EAAIjc,aAAG,EAAHA,EAAKQ,SAAS2I,YAAI,IAAAgM,EAAAA,EAAIxM,GAC/DqE,IACAkM,GAAahP,EbJK,aaImB8C,IAErC6O,IACA3C,GAAahP,EbLS,iBaKmB2R,IAE7C3C,GAAahP,EbNW,uBaM8BgS,QAAjBA,EAAElc,eAAAA,EAAK6c,sBAAUX,EAAAA,EAAIvT,GAC1DuQ,GAAahP,EbNY,wBaM+BiS,QAAlBA,EAAEnc,eAAAA,EAAK8c,uBAAWX,EAAAA,EAAIxT,GAE5D,IAAMoU,EAAiB1c,SAAe+b,QAAZA,EAAH/b,EAAK2c,kBAALZ,IAAeA,OAAfA,EAAAA,EAAiBa,cACpCF,GACA7D,GAAahP,EbTkB,6BaSmB6S,EAE1D,CEnBO,SAASG,MbN2oJ,SAAS5Y,EAAEuE,GAAGA,EAAEA,GAAG,GAAG8H,IAAG,WAAW,IAAI7B,EAAEhH,EAAE2I,KAAI/O,EAAEmN,GAAE,OAAOT,EAAE,SAAS9J,GAAGuE,EAAEqI,mBAAmB5M,EAAEA,EAAEtC,WAAWsC,EAAEyM,SAAS,SAASzM,GAAGA,EAAE+B,UAAUyB,EAAE4I,kBAAkBhP,EAAEwN,MAAMvN,KAAKqP,IAAI1M,EAAE+B,UAAUsI,KAAI,GAAGjN,EAAE2N,QAAQ,CAAC/K,GAAGwK,IAAI,GAAI,EAACN,EAAEe,GAAE,2BAA2BnB,GAAG,GAAGI,EAAE,CAACM,EAAEkB,GAAE1L,EAAE5C,EAAEmC,GAAEgF,EAAEqI,kBAAkB,IAAId,EAAElC,IAAG,WAAWgF,GAAExR,EAAEgM,MAAMU,EAAEI,EAAE6C,eAAe7C,EAAEnG,aAAa6K,GAAExR,EAAEgM,KAAI,EAAGoB,GAAE,GAAI,IAAI,CAAC,UAAU,SAASiC,SAAS,SAASzM,GAAGrC,iBAAiBqC,GAAG,WAAW,OAAOqO,GAAEvC,EAAE,GAAG,CAAC+M,MAAK,EAAGC,SAAQ,GAAM,IAAEjN,GAAEC,GAAG/B,IAAG,SAASvG,GAAGpG,EAAEmN,GAAE,OAAOC,EAAEkB,GAAE1L,EAAE5C,EAAEmC,GAAEgF,EAAEqI,kBAAkBjB,IAAG,WAAWvO,EAAEwN,MAAMxO,YAAY+B,MAAMqF,EAAEyG,UAAU2E,GAAExR,EAAEgM,KAAI,EAAGoB,GAAE,EAAG,GAAG,GAAG,CAAC,GAAI,CaO5wKuO,CAAMC,IACNC,GAAMD,IACNE,GAAMF,GACV,CACA,SAASA,GAAWG,GAChB,IAAMvT,EAAa,GACnBgP,GAAahP,EAAYoB,Gf+BJ,qBe9BrB,IAAMoS,EAAiB,GACvBxE,GAAawE,EAAgB,OAAQD,EAAOrT,MAC5C8O,GAAawE,EAAgB,QAAS9U,EAAmB6U,EAAOvO,QAChEgK,GAAawE,EAAgB,QAAS9U,EAAmB6U,EAAOrO,QAChE,IAAM9P,EAAM,CACRqc,aAAc/Y,IACdsH,WAAYA,EACZyT,eAAgBxR,GAAeI,KAC/BqR,aAAc,OACdxJ,KAAM,CACFyJ,YAAa,CACTrQ,OAAQkQ,KAIpB3B,GAAoBzc,EAAI4K,YACxBoO,GAAQhZ,EACZ,CC9BO,SAASwe,GAAWC,EAAQxO,GAC/B,IAAK,IAAI7N,EAAI,EAAGsc,EAAMD,EAAOna,OAAQlC,EAAIsc,EAAKtc,IAC1C,GAAIqc,EAAOrc,GAAGuc,KAAK1O,GACf,OAAO,EAGf,OAAO,CACX,CACA,IAAM2O,GAAkB,QACjB,SAASC,GAAapV,GACzB,OAAKA,MAKLA,EAAMjH,OAAOiH,MAOQ,MAAjBA,EAAI4M,WAAqB5M,EAAI4M,UAAU,EAAGuI,GAAwBjE,gBAAkBiE,OAY5F,SAA4BnV,GAExB,IADA,IAAMqV,EAAerV,EAAIkR,cAChBvY,EAAI,EAAGsc,EAAMhU,EAAKC,UAAUrG,OAAQlC,EAAIsc,EAAKtc,IAAK,CACvD,IAAM2T,EAAWrL,EAAKC,UAAUvI,GAChC,GAAI0c,EAAaC,WAAWhJ,EAAStM,KACjC,OAAO,CAEf,CACA,OAAO,CACX,CAdQuV,CAAmBvV,IAGhB+U,GAAW9T,EAAKQ,WAAYzB,KACvC,CC5BA,IAMIwV,GAHAC,GAAiB,EACjBC,GAA8B,EAC9BC,GAAa,CAAE,EAMfC,IAAoB,EACjB,SAASC,KACZD,IAAoB,CACxB,CA0BO,SAASE,GAAY3f,EAAOiH,GAC1BjH,GAID4f,GADiB,iBAAV5f,EACU,CAAE6f,QAAS7f,EAAOiH,KAAAA,GAGlB,CAAE4Y,QAAS7f,EAAM6f,QAASpY,KAAMzH,EAAMkL,KAAM4U,MAAO9f,EAAM8f,MAAO7Y,KAAAA,GAEzF,CACA,SAAS2Y,GAAgB3J,GAAiC,IAA9B4J,EAAO5J,EAAP4J,QAASpY,EAAIwO,EAAJxO,KAAMqY,EAAK7J,EAAL6J,MAAO7Y,EAAIgP,EAAJhP,KAC9C,GAAK4Y,KAAWP,GApDS,ODuCtB,SAA+BO,GAClC,OAAQA,GAAWjB,GAAW9T,EAAKS,oBAAqBsU,EAC5D,CCcQE,CAAsBF,GAA1B,CAGIN,IAxD6B,KAyD7BC,GAAa,CAAE,EACfD,GAA8B,GAIlC,IACM3e,GAHNif,EAAUjd,OAAOid,GAASpJ,UAAU,EAAG,OACvCqJ,EAuCG,SAA2BA,GAC9B,OAAOld,OAAOkd,GAAS,IAClBvR,MAAM,MACNzL,MAAM,EAxGQ,IAyGdkd,KAAK,KACd,CA5CYC,CAAkBH,KACThf,eAAAA,EAAKQ,SAAS2I,MAE3BiW,EAAeV,GAAW5e,GAC9B,GAAIsf,EACAA,EAAaC,gBAEZ,CACD,IAAMnV,EAAa,GACnBgP,GAAahP,EAAYoB,GjBjCZ,iBiBkCb4N,GAAahP,EAAY6B,GAAmBgT,GACxCpY,GACAuS,GAAahP,EAAY8B,GAAgBrF,GAEzCqY,GACA9F,GAAahP,EAAY+B,GAAsB+S,GAE/C7Y,SAAAA,EAAMmZ,gBACNpG,GAAahP,EjBxEgB,4BiBwEuB/D,aAAI,EAAJA,EAAMmZ,eAAe3J,UAAU,EAAG,OAE1FoG,GAAoB7R,GACpBkV,EAAe,CACXC,UAAW,EACXE,iBAAkB,EAClBjgB,IAAK,CACDqc,aAAc/Y,IACdsH,WAAYA,EACZyT,eAAgBxR,GAAeM,MAC/BmR,aAAc,QACdxJ,KAAM,CACFoL,YAAaT,KAIzBL,GAAW5e,GAAOsf,EAClBX,IACJ,EASJ,WACI,GAAIF,GACA,OAEJA,GAAqCjb,WAAWoQ,GAAM,IAC1D,CAbI+L,EA3CA,CA4CJ,CAaA,SAAS/L,KAKL,IAAK,IAAM5T,KAJPye,KACAhb,aAAagb,IACbA,GAAqC,MAEvBG,GACd,GAAI9e,EAAe8e,GAAY5e,GAAM,CACjC,IAAM4f,EAAYhB,GAAW5e,GACzB4f,EAAUL,UAAYK,EAAUH,mBAChCjH,GAAQoH,EAAUpgB,KAClBkf,KAER,CAEJE,GAAa,CAAE,EACfD,GAA8B,CAClC,CCtIA,IAAMkB,GAAiB,gCACjBC,GAA4B,qEAM3B,SAASC,GAAqBC,GACb,MAAhBA,EAAMC,OACNlB,GAAY,CACRE,QAASY,GAAiB,sBAC1BX,MAAOY,KAG0B,iBAAzBE,EAAMC,OAAOhB,QACzBF,GAAY,CACRE,QAASY,GAAiBG,EAAMC,OAAOhB,QACvCC,MAAqC,iBAAvBc,EAAMC,OAAOf,MAAqBc,EAAMC,OAAOf,MAAQY,KAG5C,WAAxB3c,EAAO6c,EAAMC,SAClBlB,GAAY,CACRE,QAASY,GAAiBG,EAAMC,OAChCf,MAAOY,IAGnB,CC5BA,IAAMI,GAAuD,2BAqC7D,SAASC,GAAcC,EAAeC,GAElC,IADA,IAAMC,EAAUF,EAAcF,IACrBte,EAAI,EAAGA,EAAI0e,EAAQxc,OAAQlC,IAAK,CAErC,GAAI2e,GADgBD,EAAQ1e,GACSye,uBAAwBA,GACzD,OAAOze,CAEf,CACA,OAAS,CACb,CAcA,SAAS2e,GAAqBC,EAAyBC,GACnD,GAAID,EAAwB1c,SAAW2c,EAAwB3c,OAC3D,OAAO,EAEX,IAAK,IAAIlC,EAAI,EAAGA,EAAI4e,EAAwB1c,OAAQlC,IAChD,GAAI4e,EAAwB5e,KAAO6e,EAAwB7e,GACvD,OAAO,EAGf,OAAO,CACX,CACO,SAAS8e,GAA2BN,EAAeO,EAAiBC,EAAWC,EAAeC,GACjG,OAnDG,SAA4BV,EAAeO,EAAiBN,GAC/D,IAAKD,EACD,OAAOO,EACX,IAAML,EAAWF,EAAcF,IAC3BE,EAAcF,KAAyD,GACrE5G,EAAQ6G,GAAcC,EAAeC,GAC3C,OAAc,IAAV/G,EAEOgH,EAAQhH,GAAOqH,iBAE1BL,EAAQnP,KAAK,CACTwP,gBAAAA,EACAN,uBAAAA,IAEGM,EACX,CAoCWI,CAAmBX,EAAeO,EAAiBK,GAA0CJ,EAAWC,EAAeC,GAClI,CACA,SAASE,GAA0CJ,EAAWC,EAAeC,GACzE,MAAO,CAACF,EAAWC,EAAeI,GAAgCH,GACtE,CACO,SAASG,GAAgCH,GAiB5C,OAAwB,MAApBA,IAGiC,WAA5B3d,EAAO2d,GACLI,QAAQJ,EAAiBxD,SAE7B4D,QAAQJ,GACnB,CACO,SAASK,GAA2Bf,EAAeQ,EAAWC,EAAeC,EAAkBM,GAClG,OAxDG,SAA4BhB,EAAeC,EAAwBe,GACtE,IAAMd,EAAUF,aAAAA,EAAAA,EAAgBF,IAChC,GAAe,MAAXI,EACA,OAAOc,EAEX,IAAM9H,EAAQ6G,GAAcC,EAAeC,GAC3C,IAAc,IAAV/G,EACA,OAAO8H,EAEX,IAAMC,EAAcf,EAAQhH,GAE5B,OADAgH,EAAQ3N,OAAO2G,EAAO,GACf+H,EAAYV,eACvB,CA4CWW,CAAmBlB,EAAeY,GAA0CJ,EAAWC,EAAeC,GAAmBM,EACpI,CCpGO,SAASG,KACRrX,EAAKU,mBAIb,SAAyB4W,GACrB,IAAKA,GACiD,mBAA3CA,EAAY3hB,UAAUsC,kBACwB,mBAA9Cqf,EAAY3hB,UAAU4I,oBAC7B,OAEJ,IAAMgZ,EAA2BD,EAAY3hB,UAAUsC,iBACjDuf,EAA8BF,EAAY3hB,UAAU4I,oBAC1D+Y,EAAY3hB,UAAUsC,iBAAmB,SAAiCye,EAAWnN,EAAIqN,GACrF,GAAkB,mBAAPrN,EACP,OAAOgO,EAAyBhiB,MAAM6E,KAAM5E,WAIhD,IADA,IAAM6E,EAAO,IAAI9C,MAAM/B,UAAUoE,QACxBlC,EAAI,EAAGA,EAAIlC,UAAUoE,OAAQlC,IAClC2C,EAAK3C,GAAKlC,UAAUkC,GAaxB,OAXA2C,EAAK,GAAK,WACN,IACI,OAAOkP,EAAGhU,MAAM6E,KAAM5E,UACzB,CACD,MAAO8E,GAGH,MAFAua,YAAYva,GACZsa,KACMta,CACV,CACH,EACDD,EAAK,GAAKmc,GAA2Bpc,KAAMC,EAAK,GAAIqc,EAAWnN,EAAIqN,GAC5DW,EAAyBhiB,MAAM6E,KAAMC,EAC/C,EACDid,EAAY3hB,UAAU4I,oBAAsB,SAAoCmY,EAAWnN,EAAIqN,GAC3F,GAAkB,mBAAPrN,EACP,OAAOiO,EAA4BjiB,MAAM6E,KAAM5E,WAInD,IADA,IAAM6E,EAAO,IAAI9C,MAAM/B,UAAUoE,QACxBlC,EAAI,EAAGA,EAAIlC,UAAUoE,OAAQlC,IAClC2C,EAAK3C,GAAKlC,UAAUkC,GAGxB,OADA2C,EAAK,GAAK4c,GAA2B7c,KAAMsc,EAAWnN,EAAIqN,EAAkBrN,GACrEiO,EAA4BjiB,MAAM6E,KAAMC,EAClD,CACL,CA7CQod,CAAgBzhB,eAAAA,EAAKshB,YAE7B,CCMA,SAASI,GAAUtX,GACf,IAAMR,EAAW5J,aAAAA,EAAAA,EAAMoK,GACC,mBAAbR,IAIX5J,EAAIoK,GAAQ,SAA4BmJ,GAGpC,IADA,IAAMlP,EAAO,IAAI9C,MAAM/B,UAAUoE,QACxBlC,EAAI,EAAGA,EAAIlC,UAAUoE,OAAQlC,IAClC2C,EAAK3C,GAAKlC,UAAUkC,GAGxB,OADA2C,EAAK,GAIb,SAAckP,GACV,GAAkB,mBAAPA,EAEP,OAAOA,EAEX,OAAO,WACH,IACI,OAAOA,EAAGhU,MAAM6E,KAAM5E,UACzB,CACD,MAAO8E,GAGH,MAFAua,YAAYva,GACZsa,KACMta,CACV,CACH,CACL,CAnBkBmF,CAAK8J,GACR3J,EAASrK,MAAM6E,KAAMC,EAC/B,EACL,CCzBO,SAASsd,MLiBT,WACH,GAAK3hB,EAAL,CAEA,IAAM4hB,EAAgB5hB,EAAI6hB,QAC1B7hB,EAAI6hB,QAAU,SAAU9C,EAAS+C,EAAUC,EAAYC,EAAc9iB,GACjE,GAAIyf,GAEA,OADAA,IAAoB,EACS,mBAAlBiD,EACAA,EAAcriB,MAAM6E,KAAM5E,gBAErC,EAEJ,IAAIwf,EAAQ9f,GAASA,EAAM8f,MAQ3B,OAPKA,IACDA,EAAQ,MAAQ8C,EAAW,IAAMC,EACb,MAAhBC,IACAhD,GAAS,IAAMgD,IAGvBlD,GAAiB,CAAEC,QAASjd,OAAOid,GAAUC,MAAAA,IAChB,mBAAlB4C,EACAA,EAAcriB,MAAM6E,KAAM5E,gBADrC,CAGH,CArBG,CAsBR,CKxCIyiB,GJAqC,mBAA1BjiB,aAAG,EAAHA,EAAKiC,mBACZjC,EAAIiC,iBAAiB,qBAAsB4d,IIC/CwB,KDHG,WACH,GAAIrX,EAAKW,WAAY,CACjB,GAAIjH,EAEA,YADAzE,EAAK,6HAGTyiB,GAAU,cACVA,GAAU,cACd,CACJ,CCLIQ,EACJ,CCLA,IAAMC,GAAqB,CAAC,MAAO,OAAQ,OAAQ,MAAO,SAAU,UAAW,UAAW,QAAS,SAE5F,SAASC,GAAsBhjB,GAClC,OAAO+iB,GAAmB1S,SAASrQ,EACvC,CACO,SAASijB,GAAyB7J,EAAMtR,GAC3C,IAAMob,EAAqC,IAAvBpb,EAASb,UAC7Bkc,GAAoB/J,EAAM/T,EAAuBY,YAAa6B,EAAUob,GACxEC,GAAoB/J,EAAM/T,EAAuBU,oBAAqB+B,EAAUob,GAChFC,GAAoB/J,EAAM/T,EAAuBS,kBAAmBgC,EAAUob,GAC9EC,GAAoB/J,EAAM/T,EAAuBG,cAAesC,EAAUob,GAC1EC,GAAoB/J,EAAM/T,EAAuBqB,wBAAyBoB,EAAUob,GACpFC,GAAoB/J,EAAM/T,EAAuBE,YAAauC,EAAUob,GACxEC,GAAoB/J,EAAM/T,EAAuBkB,cAAeuB,EAAUob,GAC1EC,GAAoB/J,EAAM/T,EAAuBoB,eAAgBqB,EAAUob,GAC3EC,GAAoB/J,EAAM/T,EAAuBmB,aAAcsB,EAAUob,EAC7E,CACA,SAASC,GAAoB/J,EAAMgK,EAActb,GAA8B,IhCIzCuU,EgCJqB6G,IAAW9iB,UAAAoE,OAAA,QAAA1D,IAAAV,UAAA,KAAAA,UAAA,KAC5CgjB,KAAVtb,IAC0B,iBAA3BA,EAASsb,IACfF,GAA0C,IAA3Bpb,EAASsb,IAG7BjH,GAAa/C,EAAMgK,GhCFe/G,EgCEqBvU,EAASsb,GhCDzD1gB,OAAOH,KAAKiG,MAA+B,KAAxB6T,EAAK3Y,QgCEnC,CACO,SAAS2f,GAAgBjK,EAAMtR,GAClC,IAAMwb,EAAgBxb,EAASyb,gBACVziB,MAAjBwiB,GACAxJ,GAAaV,EAAKtO,WvBQa,0BuBRwBwY,EAE/D,CChBA,SAASE,GAAUhZ,GACf,OAAA,WAAA,IAAAiZ,EAAA9O,EAAAC,IAAAC,MAAO,SAAAmB,EAAwC0N,EAAOC,GAAI,IAAAC,EAAAC,EAAAC,EAAA9O,EAAA+O,EAAApa,EAAAqa,EAAAC,EAAAC,EAAAlkB,EAAAoZ,EAAA+K,EAAAC,EAAAjO,EAAA,OAAAvB,IAAAvK,MAAA,SAAA+L,GAAA,cAAAA,EAAAd,KAAAc,EAAAb,MAAA,KAAA,EAW/B,GAVnBuO,EAAaH,EAAOrjB,OAAOoQ,OAAO,CAAE,EAAEiT,GAAQA,EAC9C3O,EAAO,KACG,QAAd4O,EAAIE,SAAAF,IAAUA,GAAVA,EAAY5O,OACZA,EAAO8O,EAAW9O,KAClB8O,EAAW9O,UAAOlU,GAEhBijB,EAAU,IAAIM,QAAQX,EAAOI,GAC/B9O,GAAQ8O,IACRA,EAAW9O,KAAOA,IAGlB+J,GADEpV,EAAMoa,EAAQpa,KACC,CAAAyM,EAAAb,KAAA,EAAA,KAAA,CACiE,OAAlFxV,EAAK0K,qEAAAA,OAAsEd,IAAOyM,EAAAM,OAAA,SAC3ElM,EAASkZ,aAAiBW,QAAUN,EAAUL,EAAOC,IAAK,KAAA,EAiDzC,OA7CtBK,EAA+B,QAAjBH,EAAGE,EAAQ/jB,cAAM,IAAA6jB,EAAAA,EAAI,MACnCI,EAAoBjB,GAAsBgB,GAC1CE,EAAqClB,GAAsBgB,EAAeM,eAC1EtkB,EAASkkB,EAAqCF,EAAeM,cDnC1C,SbFPtZ,EcsCIP,QAAAA,OAASzK,GAE/B2c,IAFMvD,EdrCH,CACHuC,QAASvZ,EtBJa,IsBKtBwZ,OAAQxZ,EtBNa,GsBOrB4I,KAAAA,EAGAuZ,KViEwB,EUhExBrI,kBAAmB1Y,IACnBsH,WAAY,GACZwR,OAAQ,GACRkI,MAAO,GACPzN,OAAQ,CAAE0N,KVuDe,KwB3BA3Z,WAAY,CAAEnB,IAAAA,IACvC+a,GAAqBhB,EAAOC,GAC5B7J,GAAaV,EAAKtO,WxBVS,sBwBUwB9K,GAC9CikB,GACDnK,GAAaV,EAAKtO,WxBXc,+BwBW4BkZ,IAE5Bha,EAAaL,IAAQ+U,GAAW9T,EAAKY,8BAA+B7B,MAEtF,QAAdwa,EAAIL,SAAAK,IAAUA,GAAVA,EAAYjO,SAEZ4N,EAAW5N,QAAU,IAAIyO,QAAQb,EAAW5N,SAC5C2F,GAA2BiI,EAAW5N,QAAQ0O,OAAQd,EAAW5N,QAASkD,IAErEsK,aAAiBW,QACtBxI,GAA2BkI,EAAQ7N,QAAQ0O,OAAQb,EAAQ7N,QAASkD,IAG/D0K,IACDA,EAAa,CAAE,GAEnBA,EAAW5N,QAAU,IAAIyO,QACzB9I,GAA2BiI,EAAW5N,QAAQ0O,OAAQd,EAAW5N,QAASkD,KAGlFyL,GAAsBd,EAAQ7N,QAASkD,GAAM,SAAClL,GAAC,OClElBxN,EDkE4CwN,ECjE7EzD,GAAAA,OzBmC+B,sByBnCFA,KAAAA,OAAI/J,EAAIma,eADlC,IAA8Bna,KDmEvB0jB,EAAsBtd,EAA2B,CAEnDiC,gBAAiB,SAAFgN,GAAA,IAAK+O,EAAa/O,EAAb+O,cAAe9Z,EAAI+K,EAAJ/K,KAAI,OAA0B,UAAlB8Z,GAA+C,mBAAlBA,IAAuC9Z,IAAStB,EAASC,GAAKI,IAAI,EAC9I7B,yBAA0B0C,EAAKa,gCAC/B5C,qCAAsC+B,EAAK/B,qCAC3CT,MAAO,SAAFuR,GAA8B,IAAzBtR,EAAQsR,EAARtR,SAAUP,EAAQ6R,EAAR7R,SACZA,IACAmb,GAAyB7J,EAAMtR,GAC/Bub,GAAgBjK,EAAMtR,IAG1BqR,GAAS4C,GAAQ3C,OAAMtY,EAAsB,IAAXuH,GACtC,IAEJ+b,EAAoBpd,QAAQoP,EAAAd,KAAA,GAAAc,EAAAb,KAAA,GAED/K,EAASkZ,aAAiBW,QAAUN,EAAUL,EAAOI,GAAW,KAAA,GAQpF,OARG3N,EAAQC,EAAAR,KACdmP,GAAgB3L,EAAMjD,GAEtB6O,GAAoB7O,GACf3F,MAAK,WAAA,OAAM4T,EAAoBzc,KAAK,IACpCkP,OAAM,SAAC3R,GACRkf,EAAoBjc,SACpB8c,GAAe7L,EAAMlU,EACzB,IAAGkR,EAAAM,OAAA,SACIP,GAAQ,KAAA,GAIS,MAJTC,EAAAd,KAAA,GAAAc,EAAAa,GAAAb,EAAA,MAAA,IAGfgO,EAAoBjc,SACpB8c,GAAe7L,EAAIhD,EAAAa,IAAKb,EAAAa,GAAA,KAAA,GAAA,IAAA,MAAA,OAAAb,EAAAc,Od9F7B,IAAmBlM,Cc8FU,GAAAgL,EAAA,KAAA,CAAA,CAAA,GAAA,UA9Ec,OAiF7C,SAjF6CxB,EAAAC,GAAA,OAAAgP,EAAAtjB,MAAA6E,KAAA5E,UAAA,CAAA,CAA9C,EAkFJ,CAGA,SAASskB,GAAqBhB,EAAOC,EAAMvK,GACvC,IAEQ,aACP,CACD,MAAOlU,GACHnF,EAAM,iDAAkDmF,EAAGwe,EAAOC,EACtE,CACJ,CAcA,SAASkB,GAAsB3O,EAASkD,EAAM8L,GAC1C,IACIhP,EAAQvE,SAAQ,SAAC7B,EAAOpP,GAChBkK,EAAKc,iBAAiByZ,MAAK,SAACC,GAAG,OAAKA,EAAIvG,KAAKne,EAAI,KACjDoZ,GAAaV,EAAKtO,WAAYoa,EAAgBxkB,GAAMoP,EAE5D,GACH,CACD,MAAOtI,GACHzH,EAAM,oDACV,CACJ,CACA,SAASglB,GAAgB3L,EAAMjD,GAC3B,IAAMY,EAASZ,EAASY,QdzFrB,SAAuBqC,EAAMqL,EAAM9E,GACtCvG,EAAKrC,OAAS,CACV0N,KAAAA,EACA9E,QAAAA,EAER,CcqFI0F,CAAcjM,EAAMrC,GAAU,KAAOA,EAAS,IxBtEjB,EAEA,EwBoE8DZ,EAASa,YACpG8C,GAAaV,EAAKtO,WxBvGmB,4BwBuGoBpI,OAAOqU,IAChE8N,GAAsB1O,EAASD,QAASkD,GAAM,SAAClL,GAAC,OC1IdxN,ED0IyCwN,ECzI3EzD,GAAAA,OzBkCgC,uByBlCFA,KAAAA,OAAI/J,EAAIma,eADnC,IAA+Bna,ID2ItC,CACA,SAASskB,GAAoB7O,GACzB,OAAO,IAAI7F,SAAQ,SAACC,GAChB,IACMyE,EADiBmB,EAASmP,QACJtQ,KAC5B,IAAKA,EACD,OAAOzE,IACX,IAAMgV,EAASvQ,EAAKwQ,YACdC,EAAI,WAAA,IAAAC,EAAA/Q,EAAAC,IAAAC,MAAG,SAAAC,IAAA,IAAA6Q,EAAA,OAAA/Q,IAAAvK,MAAA,SAAAgL,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAAA,OAAAF,EAAAE,KAAA,EACcgQ,EAAOE,OAAM,KAAA,EAAxB,GAAwBE,EAAAtQ,EAAAO,MAAxB+P,EAAJrK,KACA,CAAAjG,EAAAE,KAAA,EAAA,KAAA,CAAA,OAAAF,EAAAqB,OACGnG,SAAAA,KAAS,KAAA,EAAA,OAAA8E,EAAAqB,OACb+O,SAAAA,KAAM,KAAA,EAAA,IAAA,MAAA,OAAApQ,EAAA6B,OAAA,GAAApC,OAChB,OAAA,WALS,OAAA4Q,EAAAvlB,MAAA6E,KAAA5E,UAAA,EAAA,GAMV,OAAOqlB,GACX,GACJ,CACA,SAASR,GAAe7L,EAAMtZ,IE7JvB,SAAyBsZ,EAAMwM,GAClC,IAAM9a,EAAa,GACM,iBAAd8a,EACP9L,GAAahP,EAAY6B,GAAmBiZ,GAEvCA,IACDA,EAAUnB,KACV3K,GAAahP,EAAY8B,GAAgBgZ,EAAUnB,KAAKoB,YAEnDD,EAAU5a,MACf8O,GAAahP,EAAY8B,GAAgBgZ,EAAU5a,MAEnD4a,EAAUjG,SACV7F,GAAahP,EAAY6B,GAAmBiZ,EAAUjG,SAEtDiG,EAAUhG,OACV9F,GAAahP,EAAY+B,GAAsB+Y,EAAUhG,OAE7DzD,GAAa/C,E1ByBoB,Y0BzBatO,GAEtD,CF0IIgb,CAAgB1M,EAAMtZ,GACtBqZ,GAAS4C,GAAQ3C,EE1Id,SAA2BlU,GAC9B,MAAO,CACHuf,K1B8CyB,E0B7CzB9E,QAASza,GAAkB,WAAbrB,EAAOqB,IAAkB,YAAaA,EAAIA,EAAEya,QAAUjd,OAAOwC,GAEnF,CFqI2B6gB,CAAkBjmB,QAAQgB,GACrD,CGxJO,SAASklB,GAAsBzJ,EAAc5S,EAAKsc,EAASC,GAAU,IAAAR,EAAAS,EAClEC,EANV,SAAyBzc,GAAK,IAAA0c,EAAAC,EAAAC,EAC1B,OAAK5c,GAEsD,QAA3D0c,EAAoDC,QAApDA,GAAOC,EAAA3b,EAAKe,yBAAwB6a,wBAA7BF,IAA6CA,OAA7CA,EAAAA,EAAA3lB,KAAA4lB,EAAgD5c,UAAI,IAAA0c,EAAAA,EADhD,CAAE,CAEjB,CAEiBI,CAAgB9c,GACvBmB,EAAa,GACnBgP,GAAahP,EAAYoB,G3B4BJ,qB2B3BjBka,EAAKtb,YACLxK,OAAO2P,QAAQmW,EAAKtb,YAAY6G,SAAQ,SAAAoE,GAAA,IAAA4D,EAAAC,EAAA7D,EAAA,GAAErV,EAAGiZ,EAAA,GAAE7J,EAAK6J,EAAA,GAAA,OAAMG,GAAahP,EAAYpK,EAAKoP,MAE5F6M,GAAoB7R,EAAY,CAAEnB,IAAAA,IAClC,IAAM2U,EAAiB,GACvBxE,GAAawE,EAAgB,QAAiC,QAA1BoH,UAAAS,EAAEC,EAAKM,aAAK,IAAAP,EAAAA,EAAIplB,aAAG,EAAHA,EAAK2lB,aAAK,IAAAhB,EAAAA,EAAInc,GAC9DxI,SAAAA,EAAK4lB,UACL7M,GAAawE,EAAgB,WAAYvd,EAAI4lB,UAEjD7M,GAAawE,E3BmCa,O2BnCmB2H,EAAU1Y,GAAgCA,IACvFuM,GAAawE,E3BuCqB,e2BvCmB4H,EAAW1Y,GAAwCA,IACxG,IAAMtN,EAAM,CACRqc,aAAcA,EACdzR,WAAYA,EACZyT,eAAgBxR,GAAeI,KAC/BqR,aAAc,OACdxJ,KAAM,CACFyJ,YAAa,CACTrQ,OAAQkQ,KAIdsI,EAAevM,KACjBuM,IACA1mB,EAAIyb,QAAUiL,EAAajL,QAC3Bzb,EAAI0b,OAASgL,EAAahL,QAE9B1C,GAAQhZ,EACZ,CCVA,SAAS2mB,KACL,IAAM7L,EAAKpa,eAAAA,EAAKU,YAAY6D,iBAAiB,cAAc,GAC3D,GAAK6V,EAAL,CAIA,IAAMlQ,EAAa,GACnBgP,GAAahP,EAAYoB,G5BGI,6B4BF7B,IAAMoS,EAAiB,GACvBxE,GAAawE,EAAgB,OAAQtD,EAAGhQ,MACxC8b,GAAoBxI,EAAgBtD,EAAI,kBACxC8L,GAAoBxI,EAAgBtD,EAAI,cACxC8L,GAAoBxI,EAAgBtD,EAAI,gBACxC8L,GAAoBxI,EAAgBtD,EAAI,iBACxC8L,GAAoBxI,EAAgBtD,EAAI,kBACxC8L,GAAoBxI,EAAgBtD,EAAI,4BACxC8L,GAAoBxI,EAAgBtD,EAAI,eACxC8L,GAAoBxI,EAAgBtD,EAAI,gBACxC8L,GAAoBxI,EAAgBtD,EAAI,gBACxC8L,GAAoBxI,EAAgBtD,EAAI,mBACxC8L,GAAoBxI,EAAgBtD,EAAI,mBACxC,IAAM9a,EAAM,CACRqc,aAAcwK,KACdjc,WAAYA,EACZyT,eAAgBxR,GAAeI,KAC/BqR,aAAc,OACdxJ,KAAM,CACFyJ,YAAa,CACTrQ,OAAQkQ,KAIpB3B,GAAoBzc,EAAI4K,YACxB,IAAM8b,EAAevM,KACjBuM,IACA1mB,EAAIyb,QAAUiL,EAAajL,QAC3Bzb,EAAI0b,OAASgL,EAAahL,QAE9B1C,GAAQhZ,EAjCR,MAFIH,EAAM,sEAoCd,CACA,SAAS+mB,GAAoBhc,EAAYkQ,EAAIgM,GAEzC,IAAMlX,EAAQkL,EAAGgM,GACI,iBAAVlX,GAAuBrB,MAAMqB,IACpCgK,GAAahP,EAAYkc,EAAOC,OAAOC,UAAUpX,GAASA,EAAQtG,EAAmBsG,GAE7F,CACA,SAASiX,KACL,OAAOpjB,EAAUpB,KAAKiG,MAAM9E,KAChC,CC/EA,IAAIyjB,GAAkB,CAAE,EACpBC,IAA0B,EAC1BC,IAA4B,EAoChC,SAASC,KAELC,GAAY3mB,aAAG,EAAHA,EAAKQ,SAAS2I,KAC9B,CACA,SAASyd,GAAa9G,GAClB6G,GAAY7G,EAAM+G,OACtB,CACA,SAASF,GAAY5d,EAAKuc,GAmB1B,IAA0BwB,EAlBtB,GAAK/d,EAEL,IACI,IAAMge,EAAY,IAAI9d,IAAIF,EAAK/I,eAAAA,EAAKQ,SAAS2I,QAe3B2d,EAdGC,GAeVtR,WAAa8Q,GAAgBpS,OACtCsS,IAA6BK,EAAOnK,SAAW4J,GAAgB5J,SAC/D6J,IAA2BM,EAAOpK,OAAS6J,GAAgB7J,QAhBzDsK,GAAsBD,GACtB3B,GAAsBxiB,IAAYmkB,GAAW,EAAM/F,QAAQsE,IAElE,CACD,MAAOhhB,GACHnF,EAAM,8BAA+BmF,EACzC,CACJ,CACA,SAAS0iB,GAAsBje,GAC3Bwd,GAAgBpS,KAAOpL,EAAI0M,SAC3B8Q,GAAgB5J,OAAS5T,EAAI4T,OAC7B4J,GAAgB7J,KAAO3T,EAAI2T,IAC/B,CChEO,SAASuK,MFUT,WACH,IACI7B,GAAsBe,KAAyBnmB,SAAAA,EAAKQ,SAAS2I,KAAO,IAAIF,IAAIjJ,aAAAA,EAAAA,EAAKQ,SAAS2I,WAAQjJ,EACrG,CACD,MAAOoE,GACHpF,EAAM,6CAA8CoF,EACxD,CACA,GAAwB,cAApBnE,aAAG,EAAHA,EAAK+mB,YACL,OAAOjB,KAEPjmB,GACAiC,EAAiBjC,EAAK,QAAQ,WAG1BsD,WAAW2iB,GAAU,EACzB,GAER,CE1BIkB,GDSG,WAA8C,IAAA1B,EAAAC,EAAAC,EAAAyB,EACjD,GAAKpnB,GAAQA,EAAIqnB,SAIjB,GAAKrd,EAAKe,wBAAwBC,sBAAlC,CAGAyb,WAAyBhB,EAA2CC,QAA3CA,EAAG1b,EAAKe,wBAAwBuc,uBAAW5B,SAAxCA,EAA0CjW,SAAS,iBAAS,IAAAgW,GAAAA,EACxFe,WAAuBb,EAA2CyB,QAA3CA,EAAGpd,EAAKe,wBAAwBuc,uBAAWF,SAAxCA,EAA0C3X,SAAS,eAAO,IAAAkW,GAAAA,EAKpFlc,EAAKzJ,EAAIqnB,QAAS,gBAAgB,SAACzd,GAAQ,OAAK,SAAU2d,EAAOC,EAAQze,GAErE,OADA4d,GAAY5d,EAAMjH,OAAOiH,QAAO7I,GAAW,GACpC0J,EAASrK,MAAM6E,KAAM,CAACmjB,EAAOC,EAAQze,GAC/C,KACDU,EAAKzJ,EAAIqnB,QAAS,aAAa,SAACzd,GAAQ,OAAK,SAAU2d,EAAOC,EAAQze,GAElE,OADA4d,GAAY5d,EAAMjH,OAAOiH,QAAO7I,GACzB0J,EAASrK,MAAM6E,KAAM,CAACmjB,EAAOC,EAAQze,GAC/C,KACD/I,EAAIiC,iBAAiB,aAAc2kB,IACnC5mB,EAAIiC,iBAAiB,WAAYykB,IACjC,IACIM,GAAsB,IAAI/d,IAAIjJ,EAAIQ,SAAS2I,MAC9C,CACD,MAAAjI,GAAM,CApBN,OALI/B,EAAM,iEA0Bd,CCpCIsoB,EACJ,CCJA,IAAMC,GAAW,SAAC7nB,GACd,GAAmB,WAAfoD,EAAOpD,IAA4B,OAARA,EAAc,CACzC,GAAqC,mBAA1BH,OAAOioB,eAA+B,CAC7C,IAAMhoB,EAAYD,OAAOioB,eAAe9nB,GACxC,OAAOF,IAAcD,OAAOC,WAA2B,OAAdA,CAC7C,CACA,MAA+C,oBAAxCD,OAAOC,UAAUslB,SAASllB,KAAKF,EAC1C,CACA,OAAO,CACX,EACa+nB,GAAQ,WAAH,IAAA,IAAAjkB,EAAAnE,UAAAoE,OAAOikB,EAAOtmB,IAAAA,MAAAoC,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAP+jB,EAAO/jB,GAAAtE,UAAAsE,GAAA,OAAK+jB,EAAQC,QAAO,SAACC,EAAQC,GACzD,QAAgB9nB,IAAZ8nB,EACA,OAAOD,EAEX,GAAIxmB,MAAMqX,QAAQoP,GACd,MAAM,IAAIC,UAAU,mEA4BxB,OA1BAvoB,OAAOmZ,KAAKmP,GAASjX,SAAQ,SAACjR,GACtB,CAAC,YAAa,cAAe,aAAa2P,SAAS3P,KAGnDyB,MAAMqX,QAAQmP,EAAOjoB,KAASyB,MAAMqX,QAAQoP,EAAQloB,IACpDioB,EAAOjoB,GAAO8nB,GAAM5L,QAAQkM,YACtBN,GAAM5L,QAAQmM,iBACV5mB,MAAMsY,KAAK,IAAIuO,IAAIL,EAAOjoB,GAAK+J,OAAOme,EAAQloB,MAAO,GAAA+J,OAAAwe,EACjDN,EAAOjoB,IAAIuoB,EAAKL,EAAQloB,KAChCkoB,EAAQloB,GAET4nB,GAASK,EAAOjoB,KAAS4nB,GAASM,EAAQloB,IAC/CioB,EAAOjoB,GAAO8nB,GAAMG,EAAOjoB,GAAMkoB,EAAQloB,KAEnC4nB,GAASK,EAAOjoB,KAAS4nB,GAASM,EAAQloB,IAChDioB,EAAOjoB,GAAO8nB,GAAMI,EAAQloB,QAAMI,GAGlC6nB,EAAOjoB,QACcI,IAAjB8nB,EAAQloB,GACF8nB,GAAM5L,QAAQsM,wBACVN,EAAQloB,GACRioB,EAAOjoB,GACXkoB,EAAQloB,GAE1B,IACOioB,CACV,GAAE,GAAG,EACAQ,GAAiB,CACnBD,yBAAyB,EACzBJ,aAAa,EACbC,kBAAkB,GAEtBP,GAAM5L,QAAUuM,GAChBX,GAAMY,YAAc,SAACxM,GACjB4L,GAAM5L,QAAUtc,OAAOoQ,OAAOpQ,OAAOoQ,OAAO,CAAE,EAAEyY,IAAiBvM,GAAS,IAAAyM,IAAAA,EAAAjpB,UAAAoE,OAD7CikB,MAAOtmB,MAAAknB,EAAAA,EAAAA,OAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPb,EAAOa,EAAAlpB,GAAAA,UAAAkpB,GAEpC,IAAMX,EAASH,GAAKroB,WAAA,EAAIsoB,GAExB,OADAD,GAAM5L,QAAUuM,GACTR,CACX,EC7CA,IAAIY,IAAqB,EAClB,SAAS5F,GAAK5c,GACbwiB,GACAxpB,EAAM,kDAoEI,MAAPa,EAHiB,mBAAVe,GAAwBN,GAAQA,EAAK8D,kBAtDnDyF,EAAKC,UAAY9D,EAAKkP,oBAAoB9T,MAAQ4E,EAAKkP,SAAW,CAAClP,EAAKkP,UAC1C,IAA1BrL,EAAKC,UAAUrG,QAInBlE,OAAOoQ,OAAO9F,EAAM4d,GAAM5d,ECvBvB,SAAcnK,EAAKgZ,GACtB,IACsB0B,EADhBwN,EAAS,CAAE,EAACvN,EAAAC,EACA5B,GAAI,IAAtB,IAAA2B,EAAAjL,MAAAgL,EAAAC,EAAA3R,KAAA6R,MAAwB,CAAA,IAAb5a,EAAGya,EAAArL,MACNpP,KAAOD,IACPkoB,EAAOjoB,GAAOD,EAAIC,GAE1B,CAAC,CAAA,MAAA4X,GAAA8C,EAAAlW,EAAAoT,EAAA,CAAA,QAAA8C,EAAA3L,GAAA,CACD,OAAOkZ,CACX,CDeoCa,CAAKziB,EAAM,CACvC,aACA,sBACA,oBACA,aACA,gCACA,kCACA,uCACA,mBACA,8BAYR,SAAsCA,GAClC+S,GAAalP,EAAK9C,SAASgD,WAAYe,EAAc9E,EAAkB,aACnEA,EAAK0iB,gBACL3P,GAAalP,EAAK9C,SAASgD,WAAYgB,EAAiB/E,EAAqB,gBAEjF,IAAM2iB,EA4BV,SAA2B3iB,GAEvB,GAAIA,EAAK4iB,YACL,OAAO5iB,EAAK4iB,YAIhB,IAAI,IAAAC,EAGA,OAAcA,QAAdA,EAAOC,mBAAOD,GAAKA,QAALA,EAAPA,EAASF,WAATE,IAAYA,OAAZA,EAAAA,EAAcE,sBACxB,CACD,MAAOC,GACH,MACJ,CACJ,CA3CgBC,CAAkBjjB,GAC1B2iB,GACA5P,GAAalP,EAAK9C,SAASgD,WAAYiB,EAA6B2d,GAExE,IAAMO,EAwCV,SAA8BljB,GAC1B,GAAIA,EAAKkjB,eACL,OAAOljB,EAAKkjB,eAIhB,IAAI,IAAAC,EAGA,OAAcA,QAAdA,EAAOL,mBAAOK,GAAKA,QAALA,EAAPA,EAASR,WAATQ,IAAYA,OAAZA,EAAAA,EAAcC,6BACxB,CACD,MAAOJ,GACH,MACJ,CACJ,CAtD2BK,CAAqBrjB,GACxCkjB,GACAnQ,GAAalP,EAAK9C,SAASgD,WAAYkB,EAAiBie,GAE5D,IAAMI,EAmDV,SAA4BtjB,GACxB,GAAIA,EAAKsjB,aACL,OAAOtjB,EAAKsjB,aAIhB,IAAI,IAAAC,EAGA,OAAcA,QAAdA,EAAOT,mBAAOS,GAAKA,QAALA,EAAPA,EAASZ,WAATY,IAAYA,OAAZA,EAAAA,EAAcC,6BACxB,CACD,MAAOR,GACH,MACJ,CACJ,CAjEyBS,CAAmBzjB,GACpCsjB,GACAvQ,GAAalP,EAAK9C,SAASgD,WAAYmB,GAAeoe,EAE9D,CA3BII,CAA6B1jB,GA4BjC,SAAoCA,GAAM,IAAA2jB,EACtC5Q,GAAalP,EAAKO,iBAAkBgB,GAAc/J,E5CtExB,K4CuE1B0X,GAAalP,EAAKO,iBAAkBiB,GAA0B,QAAhBse,EAAEzpB,aAAAA,EAAAA,EAAK0pB,iBAASD,IAAAA,EAAAA,EAAInhB,GAC9DxC,EAAK6jB,4BACLtqB,OAAO2P,QAAQlJ,EAAK6jB,4BAA4BjZ,SAAQ,SAAAoE,GAAkB,IAAA4D,EAAAC,EAAA7D,EAAA,GAAhBrV,EAAGiZ,EAAA,GAAE7J,EAAK6J,EAAA,GAChEG,GAAalP,EAAKO,iBAAkBzK,EAAKoP,EAC7C,GAER,CAnCI+a,CAA2B9jB,GAC3B2V,KACA7O,GAAc9G,EAAK+G,+BAAgC/G,EAAKgH,iCACxD8Z,KACA/J,KACAyE,KRrCK3hB,GAAQA,EAAIe,OAAUf,EAAIyjB,QAI/Bha,EAAKzJ,EAAK,QAAS4iB,IAHfzjB,EAAM,oEQsCVwpB,IAAqB,GAtBjB1pB,EAAK,qFALLE,EAAM,2FAJNA,EAAM,6FAgCd,sBE5CO,SAA4BiL,EAAM8E,GACrCgK,GAAalP,EAAKO,iBAAkBH,EAAM8E,EAC9C,UCPO,WACHgb,EAAY,qCAAsClgB,EACtD,aCDO,SAAkB0D,EAAIvH,GACzBgT,GAAgBnP,EAAKO,iBAAkBkB,IAC7B,MAANiC,GACAwL,GAAalP,EAAKO,iBAAkBkB,GAASiC,GAEjDyL,GAAgBnP,EAAKO,iBAAkBmB,IACrB,OAAdvF,aAAI,EAAJA,EAAMiE,OACN8O,GAAalP,EAAKO,iBAAkBmB,GAAWvF,EAAKiE,MAExD+O,GAAgBnP,EAAKO,iBAAkBoB,IACjB,OAAlBxF,aAAI,EAAJA,EAAMgkB,WACNjR,GAAalP,EAAKO,iBAAkBoB,GAAgBxF,EAAKgkB,UAE7DhR,GAAgBnP,EAAKO,iBAAkBqB,IACpB,OAAfzF,aAAI,EAAJA,EAAMikB,QACNlR,GAAalP,EAAKO,iBAAkBqB,GAAYzF,EAAKikB,OAEzDjR,GAAgBnP,EAAKO,iBAAkBsB,IACrB,OAAd1F,aAAI,EAAJA,EAAMuW,OACNxD,GAAalP,EAAKO,iBAAkBsB,GAAW1F,EAAKuW,MAExDvD,GAAgBnP,EAAKO,iBAAkBuB,IACpB,OAAf3F,aAAI,EAAJA,EAAMkkB,QACNnR,GAAalP,EAAKO,iBAAkBuB,GAAY3F,EAAKkkB,MAE7D,SCpBO,SAAclkB,GACjBhH,EAAK0K,GAAAA,O3CRmB,gD2CSxBygB,GAAQnkB,EACZ,0BHEO,SAA+BiE,GAClC+O,GAAgBnP,EAAKO,iBAAkBH,EAC3C,gBIdO,SAAqBlL,EAAOiH,GAC/BokB,GAAoBrrB,EAAOiH,EAC/B,cCEO,SAAmBiE,EAAMjE,GAAM,IAAAqkB,EAC5BtgB,EAAa,GACnB6R,GAAoB7R,GACpBxK,OAAO2P,gBAAOmb,EAACrkB,aAAAA,EAAAA,EAAM+D,kBAAU,IAAAsgB,EAAAA,EAAI,CAAA,GAAIzZ,SAAQ,SAAAoE,GAAA,IAAA4D,EAAAC,EAAA7D,EAAA,GAAErV,EAAGiZ,EAAA,GAAE7J,EAAK6J,EAAA,GAAA,OAAMG,GAAahP,EAAYpK,EAAKoP,MAC/FgK,GAAahP,EAAYoB,GAAYlB,GACrCkO,GAAQ,CACJqD,aAAiC,OAAnBxV,aAAAA,EAAAA,EAAMskB,WAAoB1nB,EAAUoD,EAAKskB,WAAa7nB,IACpEsH,WAAAA,EACAkK,KAAMsE,GAAWvS,aAAAA,EAAAA,EAAMwQ,MACvBiH,aAAczX,aAAAA,EAAAA,EAAMukB,SACpB/M,eAAgBxX,SAAAA,EAAMukB,SAAWve,GAAehG,EAAKukB,eAAYxqB,GAEzE,qBtC4BO,WAEH,GADA8M,GAAY,KACP1K,EAGL,KXpCG,SAAoBgL,GACnBhL,GAAetB,GACfA,EAAa2pB,WAAWrd,EAEhC,CWiCQqd,CAAW9d,GACd,CACD,MAAOvI,GACHtF,EAAK,8BAA+BsF,EACxC,CACJ","x_google_ignoreList":[18,47]}