{"version":3,"sources":["../src/index.ts","../src/core/error-isolator.ts","../src/core/noop.ts","../src/core/options.ts","../src/core/session.ts","../src/core/user.ts","../src/core/redactor.ts","../src/core/browser-context.ts","../src/otel/attributes.ts","../src/otel/setup.ts","../src/otel/span-processor.ts","../package.json","../src/version.ts","../node_modules/@opentelemetry/core/src/ExportResult.ts","../src/otlp/encode.ts","../src/pipeline/retry-controller.ts","../src/pipeline/offline-queue.ts","../src/pipeline/exporter.ts","../src/instrumentation/otel.ts","../src/instrumentation/fetch-propagation.ts","../src/instrumentation/custom.ts","../src/instance.ts"],"sourcesContent":["import type { RumInstance, RumOptions } from './types';\nimport { ErrorIsolator } from './core/error-isolator';\nimport { createNoopRumInstance } from './core/noop';\nimport { normalizeOptions } from './core/options';\nimport { SessionManager } from './core/session';\nimport { UserIdentifierStore } from './core/user';\nimport { browserContextAttributes } from './core/browser-context';\nimport { AttributeStore } from './otel/attributes';\nimport { setupOpenTelemetry } from './otel/setup';\nimport { registerOtelInstrumentations } from './instrumentation/otel';\nimport { enableCustomInstrumentations } from './instrumentation/custom';\nimport { enableFetchTracePropagation } from './instrumentation/fetch-propagation';\nimport { OpenTelemetryRumInstance } from './instance';\n\nexport type { AttributeValue, Attributes, InstrumentationName, LogApi, RumInstance, RumOptions, RumUserOptions, Severity, SpanHandle, TelemetryBatchMetadata } from './types';\nexport { redactHeaders, redactInteractionText, redactUrl } from './core/redactor';\n\ndeclare global {\n  interface Window {\n    __rumWebSdkInstance?: RumInstance;\n  }\n}\n\nlet activeInstance: RumInstance | undefined;\n\nexport function start(appName: string, authToken: string, options?: RumOptions): RumInstance {\n  const isolator = new ErrorIsolator();\n  return isolator.guard('start', () => {\n    const existing = getActiveInstance();\n    if (existing) {\n      isolator.warn('duplicate-start', 'rumtrace.start() was called more than once; returning the first instance');\n      return existing;\n    }\n\n    if (typeof appName !== 'string' || appName.trim() === '' || typeof authToken !== 'string' || authToken.trim() === '') {\n      isolator.warn('invalid-start-arguments', 'appName and authToken must be non-empty strings');\n      return createNoopRumInstance();\n    }\n\n    const normalized = normalizeOptions(options, isolator);\n    if (!normalized) return createNoopRumInstance();\n\n    const session = new SessionManager(normalized.sampleRate);\n    if (!session.sampled) {\n      return setActiveInstance(createNoopRumInstance());\n    }\n\n    const users = new UserIdentifierStore(isolator);\n    setInitialUser(users, normalized.user);\n    const contextAttributes = browserContextAttributes(normalized);\n    const attributes = new AttributeStore(session, users, () => browserContextAttributes(normalized));\n    const runtime = setupOpenTelemetry(\n      appName,\n      authToken,\n      normalized,\n      { ...contextAttributes, 'session.id': session.id, 'session.sampled': session.sampled, ...users.resourceAttributes() },\n      () => attributes.current(),\n      isolator\n    );\n    const otelInstrumentations = registerOtelInstrumentations(normalized, {\n      tracerProvider: runtime.tracerProvider\n    });\n    const instance = new OpenTelemetryRumInstance(runtime, session, users, attributes, isolator, []);\n    const cleanup = [\n      ...runtime.cleanup,\n      enableFetchTracePropagation(normalized, () => instance.getActiveSpanContext()),\n      ...otelInstrumentations.map((instrumentation) => () => instrumentation.disable()),\n      ...enableCustomInstrumentations({\n        tracer: runtime.tracer,\n        logger: runtime.logger,\n        session,\n        options: normalized,\n        isolator,\n        attributes: () => attributes.current()\n      })\n    ];\n    instance.addCleanup(cleanup);\n    return setActiveInstance(instance);\n  }, createNoopRumInstance());\n}\n\nfunction setInitialUser(users: UserIdentifierStore, user: RumOptions['user']): void {\n  if (typeof user === 'string') {\n    users.setUser(user);\n    return;\n  }\n  if (user && typeof user === 'object') users.setUser(user.id, user.attributes);\n}\n\nfunction getActiveInstance(): RumInstance | undefined {\n  return activeInstance ?? (typeof window === 'undefined' ? undefined : window.__rumWebSdkInstance);\n}\n\nfunction setActiveInstance(instance: RumInstance): RumInstance {\n  let shutdownPromise: Promise<void> | undefined;\n  const originalShutdown = instance.shutdown.bind(instance);\n  instance.shutdown = () => {\n    shutdownPromise ??= originalShutdown().finally(() => clearActiveInstance(instance));\n    return shutdownPromise;\n  };\n  activeInstance = instance;\n  if (typeof window !== 'undefined') window.__rumWebSdkInstance = instance;\n  return instance;\n}\n\nfunction clearActiveInstance(instance: RumInstance): void {\n  if (activeInstance === instance) activeInstance = undefined;\n  if (typeof window !== 'undefined' && window.__rumWebSdkInstance === instance) delete window.__rumWebSdkInstance;\n}\n\nexport const rumtrace = { start };\nexport default rumtrace;\n","export class ErrorIsolator {\n  private readonly lastWarnAt = new Map<string, number>();\n\n  constructor(private readonly now: () => number = () => Date.now()) {}\n\n  guard<T>(signature: string, fn: () => T, fallback: T): T {\n    try {\n      return fn();\n    } catch (err) {\n      this.warn(signature, err);\n      return fallback;\n    }\n  }\n\n  async guardAsync<T>(signature: string, fn: () => Promise<T>, fallback: T): Promise<T> {\n    try {\n      return await fn();\n    } catch (err) {\n      this.warn(signature, err);\n      return fallback;\n    }\n  }\n\n  warn(signature: string, err: unknown): void {\n    const now = this.now();\n    const last = this.lastWarnAt.get(signature) ?? Number.NEGATIVE_INFINITY;\n    if (now - last < 60_000) return;\n    this.lastWarnAt.set(signature, now);\n    if (typeof console !== 'undefined' && console.warn) {\n      console.warn('[rum-web-sdk]', signature, err);\n    }\n  }\n\n  error(signature: string, message: string): void {\n    const now = this.now();\n    const last = this.lastWarnAt.get(`error:${signature}`) ?? Number.NEGATIVE_INFINITY;\n    if (now - last < 60_000) return;\n    this.lastWarnAt.set(`error:${signature}`, now);\n    if (typeof console !== 'undefined' && console.error) {\n      console.error('[rum-web-sdk]', message);\n    }\n  }\n}\n","import type { LogApi, RumInstance, SpanHandle } from '../types';\n\nconst noop = () => undefined;\n\nconst noopHandle: SpanHandle = {\n  setAttribute: noop,\n  addEvent: noop,\n  setStatus: noop,\n  end: noop\n};\n\nfunction makeLog(): LogApi {\n  const log = ((_severity, _body, _attributes) => undefined) as LogApi;\n  log.trace = noop;\n  log.debug = noop;\n  log.info = noop;\n  log.warn = noop;\n  log.error = noop;\n  log.fatal = noop;\n  return log;\n}\n\nexport function createNoopRumInstance(): RumInstance {\n  return {\n    log: makeLog(),\n    startSpan: () => noopHandle,\n    addEvent: noop,\n    setGlobalAttribute: noop,\n    removeGlobalAttribute: noop,\n    setUser: noop,\n    clearUser: noop,\n    flush: async () => undefined,\n    shutdown: async () => undefined\n  };\n}\n","import type { InstrumentationName, RumOptions } from '../types';\nimport { ErrorIsolator } from './error-isolator';\n\nexport const DEFAULT_COLLECTOR_URL = 'https://ingest.rumtrace.com/';\n\nexport const ALL_INSTRUMENTATIONS: InstrumentationName[] = [\n  'page-load',\n  'route-change',\n  'network',\n  'error',\n  'interaction',\n  'web-vitals',\n  'resource-timing'\n];\n\nexport interface NormalizedOptions extends RumOptions {\n  collectorUrl: string;\n  headers: Record<string, string>;\n  sampleRate: number;\n  release?: string;\n  enabledInstrumentations: InstrumentationName[];\n  ignoreUrls: Array<string | RegExp>;\n  propagateTraceHeaders: boolean;\n  propagateTraceHeadersAllowList: Array<string | RegExp>;\n  captureBodies: boolean;\n  payloadCompression: 'gzip' | 'none';\n}\n\nexport function normalizeOptions(options: RumOptions | undefined, isolator: ErrorIsolator): NormalizedOptions | undefined {\n  const collectorUrl = trimTrailingSlash(options?.collectorUrl ?? DEFAULT_COLLECTOR_URL);\n  if (!collectorUrl.startsWith('https://')) {\n    isolator.error('invalid-collector-url', 'collectorUrl must start with https://');\n    return undefined;\n  }\n\n  let sampleRate = options?.sampleRate ?? 1;\n  if (!Number.isFinite(sampleRate) || sampleRate < 0 || sampleRate > 1) {\n    isolator.warn('invalid-sample-rate', `Invalid sampleRate ${String(options?.sampleRate)}; using 1.0`);\n    sampleRate = 1;\n  }\n\n  const enabledInstrumentations = options?.enabledInstrumentations ?? ALL_INSTRUMENTATIONS;\n  const headers = options?.headers ?? {};\n  const release = firstNonEmpty([options?.release, options?.websiteVersion]);\n  if (Object.keys(headers).some((key) => key.toLowerCase() === 'authorization')) {\n    isolator.warn('authorization-header-override', 'options.headers overrides the built-in Authorization header');\n  }\n\n  return {\n    ...options,\n    collectorUrl,\n    headers,\n    sampleRate,\n    release,\n    enabledInstrumentations,\n    ignoreUrls: options?.ignoreUrls ?? [],\n    propagateTraceHeaders: options?.propagateTraceHeaders ?? false,\n    propagateTraceHeadersAllowList: options?.propagateTraceHeadersAllowList ?? [],\n    captureBodies: options?.captureBodies ?? false,\n    payloadCompression: options?.payloadCompression ?? 'gzip'\n  };\n}\n\nfunction trimTrailingSlash(value: string): string {\n  return value.replace(/\\/+$/, '');\n}\n\nfunction firstNonEmpty(values: Array<string | undefined>): string | undefined {\n  return values.find((value) => typeof value === 'string' && value.trim() !== '')?.trim();\n}\n","export interface SessionState {\n  id: string;\n  createdAt: number;\n  lastSeenAt: number;\n  sampled: boolean;\n  routeCurrent?: string;\n}\n\nconst SESSION_KEY = 'rum-web-sdk.session.id';\nconst ABSOLUTE_MAX_AGE_MS = 4 * 60 * 60 * 1000;\nconst IDLE_MAX_AGE_MS = 30 * 60 * 1000;\n\nexport class SessionManager {\n  private state: SessionState;\n  private storage: Storage | undefined;\n\n  constructor(sampleRate: number, private readonly now: () => number = () => Date.now()) {\n    this.storage = safeSessionStorage();\n    this.state = this.load(sampleRate);\n    this.persist();\n  }\n\n  get id(): string {\n    this.touch();\n    return this.state.id;\n  }\n\n  get sampled(): boolean {\n    return this.state.sampled;\n  }\n\n  get routeCurrent(): string | undefined {\n    return this.state.routeCurrent;\n  }\n\n  setRouteCurrent(route: string): void {\n    this.state.routeCurrent = route;\n    this.touch();\n  }\n\n  private load(sampleRate: number): SessionState {\n    const now = this.now();\n    const stored = this.storage?.getItem(SESSION_KEY);\n    if (stored) {\n      try {\n        const parsed = JSON.parse(stored) as SessionState;\n        const absoluteAge = now - parsed.createdAt;\n        const idleAge = now - parsed.lastSeenAt;\n        if (isUuidV4(parsed.id) && absoluteAge <= ABSOLUTE_MAX_AGE_MS && idleAge <= IDLE_MAX_AGE_MS) {\n          return { ...parsed, lastSeenAt: now };\n        }\n      } catch {\n        // Invalid persisted data is treated as an expired session.\n      }\n    }\n    return {\n      id: uuidV4(),\n      createdAt: now,\n      lastSeenAt: now,\n      sampled: Math.random() < sampleRate\n    };\n  }\n\n  private touch(): void {\n    this.state.lastSeenAt = this.now();\n    this.persist();\n  }\n\n  private persist(): void {\n    try {\n      this.storage?.setItem(SESSION_KEY, JSON.stringify(this.state));\n    } catch {\n      this.storage = undefined;\n    }\n  }\n}\n\nfunction safeSessionStorage(): Storage | undefined {\n  try {\n    return typeof sessionStorage === 'undefined' ? undefined : sessionStorage;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction uuidV4(): string {\n  const webCrypto = typeof globalThis.crypto === 'undefined' ? undefined : globalThis.crypto;\n  if (typeof webCrypto?.randomUUID === 'function') return webCrypto.randomUUID();\n\n  const bytes = new Uint8Array(16);\n  if (webCrypto?.getRandomValues) {\n    webCrypto.getRandomValues(bytes);\n  } else {\n    for (let i = 0; i < bytes.length; i += 1) bytes[i] = Math.floor(Math.random() * 256);\n  }\n  bytes[6] = (bytes[6] & 0x0f) | 0x40;\n  bytes[8] = (bytes[8] & 0x3f) | 0x80;\n  const hex = [...bytes].map((b) => b.toString(16).padStart(2, '0'));\n  return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10).join('')}`;\n}\n\nfunction isUuidV4(value: string): boolean {\n  return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n}\n","import type { Attributes } from '../types';\nimport { ErrorIsolator } from './error-isolator';\n\nexport class UserIdentifierStore {\n  private userId: string | undefined;\n  private attributes: Attributes = {};\n\n  constructor(private readonly isolator: ErrorIsolator) {}\n\n  setUser(userId: string, attributes: Attributes = {}): void {\n    if (typeof userId !== 'string' || userId.trim() === '') {\n      this.isolator.warn('invalid-user-id', 'userId must be a non-empty string');\n      return;\n    }\n    this.userId = userId;\n    this.attributes = attributes;\n  }\n\n  clearUser(): void {\n    this.userId = undefined;\n    this.attributes = {};\n  }\n\n  resourceAttributes(): Attributes {\n    if (!this.userId) return {};\n    const out: Attributes = { 'enduser.id': this.userId };\n    for (const [key, value] of Object.entries(this.attributes)) out[`enduser.${key}`] = value;\n    return out;\n  }\n}\n","const DEFAULT_QUERY_KEYS = ['password', 'token', 'secret', 'api_key', 'authorization'];\n\nexport function redactUrl(rawUrl: string, extraKeys: string[] = []): string {\n  const sensitive = new Set([...DEFAULT_QUERY_KEYS, ...extraKeys].map((key) => key.toLowerCase()));\n  try {\n    const url = new URL(rawUrl, typeof location !== 'undefined' ? location.href : 'https://example.invalid');\n    url.searchParams.forEach((_value, key) => {\n      if (sensitive.has(key.toLowerCase())) url.searchParams.set(key, '[REDACTED]');\n    });\n    return rawUrl.startsWith('http') ? url.toString() : `${url.pathname}${url.search}${url.hash}`;\n  } catch {\n    return rawUrl;\n  }\n}\n\nexport function redactHeaders(headers: Record<string, string>, keys: string[] = []): Record<string, string> {\n  const sensitive = new Set(keys.map((key) => key.toLowerCase()));\n  return Object.fromEntries(Object.entries(headers).filter(([key]) => !sensitive.has(key.toLowerCase())));\n}\n\nexport function redactStackTrace(stack: string, extraKeys: string[] = []): string {\n  return stack.replace(/https?:\\/\\/[^\\s\"'<>]+/g, (match) => {\n    const trailing = match.match(/[)\\].,;]+$/)?.[0] ?? '';\n    const url = trailing ? match.slice(0, -trailing.length) : match;\n    return `${redactUrl(url, extraKeys)}${trailing}`;\n  });\n}\n\nexport function redactInteractionText(element: Element | null, text: string): string {\n  if (element instanceof HTMLInputElement) {\n    const type = element.type.toLowerCase();\n    if (type === 'password' || type === 'email' || type === 'tel' || type === 'credit-card') {\n      return '[REDACTED]';\n    }\n  }\n  return text.length > 100 ? text.slice(0, 100) : text;\n}\n","import type { Attributes } from '../types';\nimport type { NormalizedOptions } from './options';\nimport { redactUrl } from './redactor';\n\ninterface NavigatorUserAgentDataBrand {\n  brand: string;\n  version: string;\n}\n\ninterface NavigatorUserAgentData {\n  brands?: NavigatorUserAgentDataBrand[];\n  mobile?: boolean;\n  platform?: string;\n}\n\ninterface NavigatorWithUserAgentData extends Navigator {\n  userAgentData?: NavigatorUserAgentData;\n}\n\ninterface NameVersion {\n  name: string;\n  version?: string;\n}\n\nexport function browserContextAttributes(options: NormalizedOptions): Attributes {\n  const attributes: Attributes = {};\n  const nav = typeof navigator === 'undefined' ? undefined : navigator as NavigatorWithUserAgentData;\n  const userAgent = nav?.userAgent ?? '';\n  const browser = browserFromUserAgent(userAgent) ?? browserFromUserAgentData(nav?.userAgentData);\n  const os = osFromUserAgent(userAgent, nav?.userAgentData?.platform);\n  const device = deviceFromUserAgent(userAgent, nav?.userAgentData?.mobile);\n  const language = firstNonEmpty([nav?.language, nav?.languages?.[0]]);\n  const country = normalizeCountry(options.country);\n  const version = firstNonEmpty([options.release, options.websiteVersion]);\n  const page = pageAttributes(options);\n  const display = displayAttributes();\n\n  if (browser?.name) attributes['browser.name'] = browser.name;\n  if (browser?.version) attributes['browser.version'] = browser.version;\n  if (language) attributes['browser.language'] = language;\n  if (os?.name) attributes['os.name'] = os.name;\n  if (os?.version) attributes['os.version'] = os.version;\n  if (device.type) attributes['device.type'] = device.type;\n  if (device.model) attributes['device.model'] = device.model;\n  if (country) attributes['geo.country.iso_code'] = country;\n  if (version) attributes['service.version'] = version;\n  Object.assign(attributes, page, display);\n\n  return attributes;\n}\n\nfunction pageAttributes(options: NormalizedOptions): Attributes {\n  if (typeof document === 'undefined') return {};\n  const attributes: Attributes = {};\n  if (document.title) attributes['page.title'] = document.title;\n  if (document.referrer) attributes['page.referrer'] = redactUrl(document.referrer, options.redact?.urlQueryKeys);\n  return attributes;\n}\n\nfunction displayAttributes(): Attributes {\n  const attributes: Attributes = {};\n  if (typeof screen !== 'undefined') {\n    setNumber(attributes, 'screen.width', screen.width);\n    setNumber(attributes, 'screen.height', screen.height);\n    setNumber(attributes, 'screen.avail_width', screen.availWidth);\n    setNumber(attributes, 'screen.avail_height', screen.availHeight);\n  }\n  if (typeof window !== 'undefined') {\n    setNumber(attributes, 'viewport.width', window.innerWidth);\n    setNumber(attributes, 'viewport.height', window.innerHeight);\n  }\n  return attributes;\n}\n\nfunction browserFromUserAgent(userAgent: string): NameVersion | undefined {\n  if (!userAgent) return undefined;\n  const matchers: Array<[RegExp, string]> = [\n    [/EdgA?\\/([\\d.]+)/, 'Microsoft Edge'],\n    [/OPR\\/([\\d.]+)/, 'Opera'],\n    [/SamsungBrowser\\/([\\d.]+)/, 'Samsung Internet'],\n    [/Firefox\\/([\\d.]+)/, 'Firefox'],\n    [/FxiOS\\/([\\d.]+)/, 'Firefox'],\n    [/CriOS\\/([\\d.]+)/, 'Chrome'],\n    [/Chrome\\/([\\d.]+)/, 'Chrome'],\n    [/Version\\/([\\d.]+).*Safari\\//, 'Safari']\n  ];\n  if (/; wv\\)|\\bwv\\b/.test(userAgent)) return { name: 'Android WebView', version: match(userAgent, /Chrome\\/([\\d.]+)/) };\n  for (const [pattern, name] of matchers) {\n    const version = match(userAgent, pattern);\n    if (version) return { name, version };\n  }\n  return undefined;\n}\n\nfunction browserFromUserAgentData(userAgentData: NavigatorUserAgentData | undefined): NameVersion | undefined {\n  const brands = userAgentData?.brands?.filter((brand) => !/not.*brand/i.test(brand.brand));\n  if (!brands?.length) return undefined;\n  const brand = brands.find((item) => !/^Chromium$/i.test(item.brand)) ?? brands[0];\n  return { name: brand.brand, version: brand.version };\n}\n\nfunction osFromUserAgent(userAgent: string, platform: string | undefined): NameVersion | undefined {\n  const source = `${platform ?? ''} ${userAgent}`;\n  if (/Windows/i.test(source)) return { name: 'Windows', version: match(userAgent, /Windows NT ([\\d.]+)/) };\n  if (/Android/i.test(source)) return { name: 'Android', version: match(userAgent, /Android ([\\d.]+)/) };\n  if (/(iPhone|iPad|iPod)/i.test(source)) return { name: 'iOS', version: match(userAgent, /OS ([\\d_]+)/)?.replace(/_/g, '.') };\n  if (/Mac OS X|macOS|MacIntel/i.test(source)) return { name: 'macOS', version: match(userAgent, /Mac OS X ([\\d_]+)/)?.replace(/_/g, '.') };\n  if (/CrOS/i.test(source)) return { name: 'Chrome OS', version: match(userAgent, /CrOS [^\\s]+ ([\\d.]+)/) };\n  if (/Linux/i.test(source)) return { name: 'Linux' };\n  return undefined;\n}\n\nfunction deviceFromUserAgent(userAgent: string, mobile: boolean | undefined): { type: string; model?: string } {\n  if (/bot|crawler|spider|crawling/i.test(userAgent)) return { type: 'bot' };\n  if (/iPad/i.test(userAgent)) return { type: 'tablet', model: 'iPad' };\n  if (/iPhone/i.test(userAgent)) return { type: 'mobile', model: 'iPhone' };\n  if (/iPod/i.test(userAgent)) return { type: 'mobile', model: 'iPod' };\n  if (/Android/i.test(userAgent) && !/Mobile/i.test(userAgent)) return { type: 'tablet' };\n  if (mobile || /Mobi|Android|BlackBerry|IEMobile|Opera Mini/i.test(userAgent)) return { type: 'mobile' };\n  return { type: 'desktop' };\n}\n\nfunction normalizeCountry(country: string | undefined): string | undefined {\n  const value = country?.trim();\n  if (!value) return undefined;\n  return value.length === 2 ? value.toUpperCase() : value;\n}\n\nfunction match(value: string, pattern: RegExp): string | undefined {\n  return pattern.exec(value)?.[1];\n}\n\nfunction setNumber(attributes: Attributes, key: string, value: unknown): void {\n  if (typeof value === 'number' && Number.isFinite(value)) attributes[key] = value;\n}\n\nfunction firstNonEmpty(values: Array<string | undefined>): string | undefined {\n  return values.find((value) => typeof value === 'string' && value.trim() !== '')?.trim();\n}\n","import type { Attributes, AttributeValue } from '../types';\nimport { SessionManager } from '../core/session';\nimport { UserIdentifierStore } from '../core/user';\n\nexport class AttributeStore {\n  private readonly globalAttributes = new Map<string, AttributeValue>();\n\n  constructor(\n    private readonly session: SessionManager,\n    private readonly users: UserIdentifierStore,\n    private readonly baseAttributes: Attributes | (() => Attributes) = {}\n  ) {}\n\n  setGlobalAttribute(key: string, value: AttributeValue): void {\n    this.globalAttributes.set(key, normalizeAttributeValue(value));\n  }\n\n  removeGlobalAttribute(key: string): void {\n    this.globalAttributes.delete(key);\n  }\n\n  current(extra: Attributes = {}): Attributes {\n    const baseAttributes = typeof this.baseAttributes === 'function' ? this.baseAttributes() : this.baseAttributes;\n    const out: Attributes = {\n      ...baseAttributes,\n      'session.id': this.session.id,\n      'session.sampled': this.session.sampled,\n      ...Object.fromEntries(this.globalAttributes),\n      ...this.users.resourceAttributes()\n    };\n    if (this.session.routeCurrent) out['route.current'] = this.session.routeCurrent;\n    for (const [key, value] of Object.entries(extra)) out[key] = normalizeAttributeValue(value);\n    return out;\n  }\n}\n\nfunction normalizeAttributeValue(value: unknown): AttributeValue {\n  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return value;\n  if (Array.isArray(value)) {\n    return value.filter((item): item is string | number | boolean => {\n      return typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean';\n    });\n  }\n  try {\n    return JSON.stringify(value) ?? String(value);\n  } catch {\n    return String(value);\n  }\n}\n","import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { LoggerProvider, BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';\nimport { resourceFromAttributes } from '@opentelemetry/resources';\nimport { trace } from '@opentelemetry/api';\nimport type { Attributes } from '../types';\nimport type { NormalizedOptions } from '../core/options';\nimport { RumAttributeSpanProcessor } from './span-processor';\nimport { SDK_VERSION } from '../version';\nimport { HttpTelemetryExporter, RumLogExporter, RumSpanExporter } from '../pipeline/exporter';\nimport { ErrorIsolator } from '../core/error-isolator';\n\nexport interface OTelRuntime {\n  tracerProvider: WebTracerProvider;\n  loggerProvider: LoggerProvider;\n  tracer: ReturnType<typeof trace.getTracer>;\n  logger: ReturnType<LoggerProvider['getLogger']>;\n  cleanup: Array<() => void>;\n}\n\nexport function setupOpenTelemetry(\n  appName: string,\n  token: string,\n  options: NormalizedOptions,\n  resourceAttributes: Attributes,\n  spanAttributes: () => Attributes,\n  isolator: ErrorIsolator = new ErrorIsolator()\n): OTelRuntime {\n  const resource = resourceFromAttributes({\n    'service.name': appName,\n    'telemetry.sdk.name': 'rum-web-sdk',\n    'telemetry.sdk.version': SDK_VERSION,\n    'service.version': options.release,\n    'deployment.environment': options.environment,\n    ...resourceAttributes\n  });\n  const httpExporter = new HttpTelemetryExporter({\n    collectorUrl: options.collectorUrl,\n    authToken: token,\n    headers: options.headers,\n    payloadCompression: options.payloadCompression,\n    beforeSendBatch: options.beforeSendBatch,\n    isolator\n  });\n  const traceExporter = new RumSpanExporter(httpExporter);\n  const logExporter = new RumLogExporter(httpExporter);\n\n  const tracerProvider = new WebTracerProvider({\n    resource,\n    spanProcessors: [\n      new RumAttributeSpanProcessor(spanAttributes) as never,\n      new BatchSpanProcessor(traceExporter, { maxExportBatchSize: 512, scheduledDelayMillis: 5000 })\n    ]\n  });\n  tracerProvider.register();\n\n  const loggerProvider = new LoggerProvider({\n    resource,\n    processors: [new BatchLogRecordProcessor(logExporter, { maxExportBatchSize: 512, scheduledDelayMillis: 5000 })]\n  });\n\n  const cleanup = [enablePageExitFlush(httpExporter, async () => {\n    await Promise.all([\n      tracerProvider.forceFlush(),\n      loggerProvider.forceFlush()\n    ]);\n  }, isolator)];\n\n  return {\n    tracerProvider,\n    loggerProvider,\n    tracer: tracerProvider.getTracer('rum-web-sdk', SDK_VERSION),\n    logger: loggerProvider.getLogger('rum-web-sdk', SDK_VERSION),\n    cleanup\n  };\n}\n\nfunction enablePageExitFlush(httpExporter: HttpTelemetryExporter, forceFlush: () => Promise<void>, isolator: ErrorIsolator): () => void {\n  if (typeof window === 'undefined') return () => undefined;\n  let pending: Promise<unknown> | undefined;\n  const flush = () => {\n    if (pending) return;\n    pending = httpExporter.withUnloadDelivery(() => isolator.guardAsync('page-exit-flush', forceFlush, undefined)).finally(() => {\n      pending = undefined;\n    });\n  };\n  const onVisibilityChange = () => {\n    if (typeof document !== 'undefined' && document.visibilityState === 'hidden') flush();\n  };\n  window.addEventListener('pagehide', flush, true);\n  if (typeof document !== 'undefined') document.addEventListener('visibilitychange', onVisibilityChange, true);\n  return () => {\n    window.removeEventListener('pagehide', flush, true);\n    if (typeof document !== 'undefined') document.removeEventListener('visibilitychange', onVisibilityChange, true);\n  };\n}\n","import type { Attributes } from '../types';\n\nexport interface SpanLike {\n  setAttributes(attributes: Attributes): void;\n}\n\nexport class RumAttributeSpanProcessor {\n  constructor(private readonly getAttributes: () => Attributes) {}\n\n  onStart(span: SpanLike): void {\n    span.setAttributes(this.getAttributes());\n  }\n\n  onEnd(): void {}\n\n  shutdown(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  forceFlush(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n","{\n  \"name\": \"@rumtrace/web-sdk\",\n  \"version\": \"0.5.0\",\n  \"description\": \"Browser RUM SDK built on OpenTelemetry JS.\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/rumtracehq/web-sdk.git\"\n  },\n  \"type\": \"module\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\"\n    },\n    \"./react-router\": {\n      \"types\": \"./dist/react-router.d.ts\",\n      \"import\": \"./dist/react-router.js\",\n      \"require\": \"./dist/react-router.cjs\"\n    },\n    \"./next-pages-router\": {\n      \"types\": \"./dist/next-pages-router.d.ts\",\n      \"import\": \"./dist/next-pages-router.js\",\n      \"require\": \"./dist/next-pages-router.cjs\"\n    },\n    \"./next-app-router\": {\n      \"types\": \"./dist/next-app-router.d.ts\",\n      \"import\": \"./dist/next-app-router.js\",\n      \"require\": \"./dist/next-app-router.cjs\"\n    }\n  },\n  \"sideEffects\": false,\n  \"files\": [\n    \"dist\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\",\n    \"registry\": \"https://registry.npmjs.org/\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup src/index.ts src/react-router.ts src/next-pages-router.ts src/next-app-router.ts --format esm,cjs --dts --sourcemap --clean\",\n    \"changeset\": \"changeset\",\n    \"version-packages\": \"changeset version\",\n    \"release\": \"npm run build && changeset publish\",\n    \"test\": \"vitest run\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"size\": \"size-limit\"\n  },\n  \"dependencies\": {\n    \"@opentelemetry/api\": \"1.9.1\",\n    \"@opentelemetry/instrumentation\": \"0.217.0\",\n    \"@opentelemetry/instrumentation-document-load\": \"0.62.0\",\n    \"@opentelemetry/instrumentation-fetch\": \"0.217.0\",\n    \"@opentelemetry/instrumentation-xml-http-request\": \"0.217.0\",\n    \"@opentelemetry/otlp-transformer\": \"0.218.0\",\n    \"@opentelemetry/resources\": \"2.7.1\",\n    \"@opentelemetry/sdk-logs\": \"0.217.0\",\n    \"@opentelemetry/sdk-trace-base\": \"2.7.1\",\n    \"@opentelemetry/sdk-trace-web\": \"2.7.1\",\n    \"web-vitals\": \"5.2.0\"\n  },\n  \"peerDependencies\": {\n    \"next\": \">=13\",\n    \"react\": \">=18\",\n    \"react-router\": \">=6\"\n  },\n  \"peerDependenciesMeta\": {\n    \"next\": {\n      \"optional\": true\n    },\n    \"react\": {\n      \"optional\": true\n    },\n    \"react-router\": {\n      \"optional\": true\n    }\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.31.0\",\n    \"@size-limit/preset-small-lib\": \"12.1.0\",\n    \"@types/node\": \"25.6.2\",\n    \"@types/react\": \"^19.2.14\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"fake-indexeddb\": \"6.2.5\",\n    \"fast-check\": \"4.7.0\",\n    \"happy-dom\": \"20.9.0\",\n    \"react\": \"19.2.6\",\n    \"react-dom\": \"19.2.6\",\n    \"react-router\": \"7.15.0\",\n    \"size-limit\": \"12.1.0\",\n    \"tsup\": \"8.5.1\",\n    \"typescript\": \"6.0.3\",\n    \"vitest\": \"4.1.5\"\n  }\n}\n","import packageJson from '../package.json';\n\nexport const SDK_VERSION = packageJson.version;\n","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface ExportResult {\n  code: ExportResultCode;\n  error?: Error;\n}\n\nexport enum ExportResultCode {\n  SUCCESS,\n  FAILED,\n}\n","import { ProtobufLogsSerializer, ProtobufTraceSerializer } from '@opentelemetry/otlp-transformer';\nimport type { ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport type { ReadableLogRecord } from '@opentelemetry/sdk-logs';\n\nexport function encodeTraceRequest(spans: ReadableSpan[]): Uint8Array {\n  return ProtobufTraceSerializer.serializeRequest(spans) ?? new Uint8Array();\n}\n\nexport function encodeLogsRequest(logs: ReadableLogRecord[]): Uint8Array {\n  return ProtobufLogsSerializer.serializeRequest(logs) ?? new Uint8Array();\n}\n","import { ErrorIsolator } from '../core/error-isolator';\n\nexport interface RetryControllerOptions {\n  maxRetries?: number;\n  initialBackoffMs?: number;\n  sleep?: (ms: number) => Promise<void>;\n  now?: () => number;\n  onDroppedBatch?: () => void;\n}\n\nexport class RetryController {\n  private readonly maxRetries: number;\n  private readonly initialBackoffMs: number;\n  private readonly sleep: (ms: number) => Promise<void>;\n\n  constructor(private readonly isolator: ErrorIsolator, options: RetryControllerOptions = {}) {\n    this.maxRetries = options.maxRetries ?? 3;\n    this.initialBackoffMs = options.initialBackoffMs ?? 1000;\n    this.sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));\n    this.onDroppedBatch = options.onDroppedBatch;\n  }\n\n  private readonly onDroppedBatch: (() => void) | undefined;\n\n  async run(send: () => Promise<Response>): Promise<Response | undefined> {\n    let attempt = 0;\n    while (true) {\n      const response = await send();\n      if (response.status >= 200 && response.status < 300) return response;\n      if (response.status >= 500 && response.status <= 599) {\n        if (attempt >= this.maxRetries) return this.drop();\n        await this.sleep(this.initialBackoffMs * 2 ** attempt);\n        attempt += 1;\n        continue;\n      }\n      if (response.status === 429) {\n        if (attempt >= this.maxRetries) return this.drop();\n        await this.sleep(parseRetryAfter(response.headers.get('Retry-After')) ?? this.initialBackoffMs);\n        attempt += 1;\n        continue;\n      }\n      if (response.status === 401 || response.status === 403) {\n        this.isolator.warn('export-auth-failed', `Collector returned ${response.status}; dropping telemetry batch`);\n        return this.drop();\n      }\n      if (response.status >= 400 && response.status <= 499) return this.drop();\n      return response;\n    }\n  }\n\n  private drop(): undefined {\n    this.onDroppedBatch?.();\n    return undefined;\n  }\n}\n\nexport function parseRetryAfter(value: string | null): number | undefined {\n  if (!value) return undefined;\n  const seconds = Number(value);\n  if (Number.isFinite(seconds) && seconds >= 0) return seconds * 1000;\n  const date = Date.parse(value);\n  if (Number.isFinite(date)) return Math.max(0, date - Date.now());\n  return undefined;\n}\n","export interface OfflineBatch {\n  path: string;\n  contentType: string;\n  body: ArrayBuffer;\n  headers: Record<string, string>;\n  enqueuedAt: number;\n}\n\nexport interface OfflineQueueOptions {\n  dbName?: string;\n  indexedDbCapBytes?: number;\n  memoryCapBytes?: number;\n  now?: () => number;\n}\n\ninterface StoredBatch extends OfflineBatch {\n  id?: number;\n  size: number;\n}\n\nexport class OfflineQueue {\n  private readonly indexedDbCapBytes: number;\n  private readonly memoryCapBytes: number;\n  private readonly now: () => number;\n  private readonly dbName: string;\n  private memory: StoredBatch[] = [];\n  private dbPromise: Promise<IDBDatabase | undefined> | undefined;\n\n  constructor(options: OfflineQueueOptions = {}) {\n    this.indexedDbCapBytes = options.indexedDbCapBytes ?? 5 * 1024 * 1024;\n    this.memoryCapBytes = options.memoryCapBytes ?? 1024 * 1024;\n    this.now = options.now ?? (() => Date.now());\n    this.dbName = options.dbName ?? 'rum-web-sdk-offline';\n  }\n\n  async enqueue(batch: Omit<OfflineBatch, 'enqueuedAt'> & { enqueuedAt?: number }): Promise<void> {\n    const stored: StoredBatch = {\n      ...batch,\n      enqueuedAt: batch.enqueuedAt ?? this.now(),\n      size: batch.body.byteLength\n    };\n    const db = await this.openDb();\n    if (!db) {\n      this.enqueueMemory(stored);\n      return;\n    }\n    try {\n      await requestToPromise(db.transaction('batches', 'readwrite').objectStore('batches').add(stored));\n    } catch {\n      this.disableIdb(db);\n      this.enqueueMemory(stored);\n      return;\n    }\n    try {\n      await this.evictIdb(db);\n    } catch {\n      this.disableIdb(db);\n    }\n  }\n\n  async drain(send: (batch: OfflineBatch) => Promise<void>, batchesPerSecond = 2): Promise<void> {\n    const delay = batchesPerSecond > 0 ? 1000 / batchesPerSecond : 0;\n    while (true) {\n      const batch = await this.peek();\n      if (!batch) return;\n      await send(batch);\n      await this.remove(batch);\n      if (!(await this.peek())) return;\n      if (delay > 0) await sleep(delay);\n    }\n  }\n\n  async sizeBytes(): Promise<number> {\n    const db = await this.openDb();\n    if (!db) return this.memory.reduce((sum, item) => sum + item.size, 0);\n    try {\n      const batches = await this.getAll(db);\n      return batches.reduce((sum, item) => sum + item.size, 0);\n    } catch {\n      this.disableIdb(db);\n      return this.memory.reduce((sum, item) => sum + item.size, 0);\n    }\n  }\n\n  private async peek(): Promise<StoredBatch | undefined> {\n    const db = await this.openDb();\n    if (!db) return this.memory[0];\n    try {\n      const tx = db.transaction('batches', 'readonly');\n      const store = tx.objectStore('batches');\n      const cursor = await requestToPromise<IDBCursorWithValue | null>(store.openCursor());\n      if (!cursor) return undefined;\n      const batch = cursor.value as StoredBatch;\n      if (batch.id === undefined && typeof cursor.primaryKey === 'number') batch.id = cursor.primaryKey;\n      return batch;\n    } catch {\n      this.disableIdb(db);\n      return this.memory[0];\n    }\n  }\n\n  private async remove(batch: StoredBatch): Promise<void> {\n    const db = await this.openDb();\n    if (!db) {\n      if (this.memory[0] === batch) this.memory.shift();\n      return;\n    }\n    if (batch.id === undefined) return;\n    try {\n      await requestToPromise(db.transaction('batches', 'readwrite').objectStore('batches').delete(batch.id));\n    } catch {\n      this.disableIdb(db);\n    }\n  }\n\n  private enqueueMemory(batch: StoredBatch): void {\n    this.memory.push(batch);\n    while (this.memory.reduce((sum, item) => sum + item.size, 0) > this.memoryCapBytes) this.memory.shift();\n  }\n\n  private async evictIdb(db: IDBDatabase): Promise<void> {\n    let batches = await this.getAll(db);\n    while (batches.reduce((sum, item) => sum + item.size, 0) > this.indexedDbCapBytes && batches.length > 0) {\n      const oldest = batches[0];\n      if (oldest.id !== undefined) {\n        await requestToPromise(db.transaction('batches', 'readwrite').objectStore('batches').delete(oldest.id));\n      }\n      batches = batches.slice(1);\n    }\n  }\n\n  private async getAll(db: IDBDatabase): Promise<StoredBatch[]> {\n    return requestToPromise<StoredBatch[]>(db.transaction('batches', 'readonly').objectStore('batches').getAll());\n  }\n\n  private async openDb(): Promise<IDBDatabase | undefined> {\n    if (this.dbPromise) return this.dbPromise;\n    this.dbPromise = new Promise((resolve) => {\n      if (typeof indexedDB === 'undefined') {\n        resolve(undefined);\n        return;\n      }\n      const request = indexedDB.open(this.dbName, 1);\n      request.onupgradeneeded = () => {\n        const db = request.result;\n        if (!db.objectStoreNames.contains('batches')) db.createObjectStore('batches', { keyPath: 'id', autoIncrement: true });\n      };\n      request.onerror = () => resolve(undefined);\n      request.onsuccess = () => resolve(request.result);\n    });\n    return this.dbPromise;\n  }\n\n  private disableIdb(db: IDBDatabase): void {\n    try {\n      db.close();\n    } catch {\n      // Ignore close failures; future queue operations will use memory storage.\n    }\n    this.dbPromise = Promise.resolve(undefined);\n  }\n}\n\nfunction requestToPromise<T = unknown>(request: IDBRequest<T>): Promise<T> {\n  return new Promise((resolve, reject) => {\n    request.onerror = () => reject(request.error);\n    request.onsuccess = () => resolve(request.result);\n  });\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { ExportResultCode } from '@opentelemetry/core';\nimport type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport type { LogRecordExporter, ReadableLogRecord } from '@opentelemetry/sdk-logs';\nimport { encodeLogsRequest, encodeTraceRequest } from '../otlp/encode';\nimport type { NormalizedOptions } from '../core/options';\nimport { ErrorIsolator } from '../core/error-isolator';\nimport { RetryController } from './retry-controller';\nimport { OfflineQueue } from './offline-queue';\n\ntype TelemetryKind = 'traces' | 'logs';\n\nconst KEEPALIVE_MAX_BODY_BYTES = 60 * 1024;\n\nexport interface HttpTelemetryExporterOptions {\n  collectorUrl: string;\n  authToken: string;\n  headers: Record<string, string>;\n  payloadCompression?: NormalizedOptions['payloadCompression'];\n  beforeSendBatch?: NormalizedOptions['beforeSendBatch'];\n  fetchImpl?: typeof fetch;\n  beacon?: Navigator['sendBeacon'];\n  offlineQueue?: OfflineQueue;\n  retryController?: RetryController;\n  isolator?: ErrorIsolator;\n}\n\nexport class HttpTelemetryExporter {\n  private readonly collectorUrl: string;\n  private readonly headers: Record<string, string>;\n  private readonly fetchImpl: typeof fetch;\n  private readonly offlineQueue: OfflineQueue;\n  private readonly retryController: RetryController;\n  private readonly isolator: ErrorIsolator;\n  private readonly removeOnlineListener: (() => void) | undefined;\n  private drainingOffline = false;\n  private offlineDrainPromise: Promise<void> | undefined;\n  private shutdownPromise: Promise<void> | undefined;\n  private isShutdown = false;\n  private unloadDeliveryDepth = 0;\n\n  constructor(private readonly options: HttpTelemetryExporterOptions) {\n    this.collectorUrl = options.collectorUrl.replace(/\\/+$/, '');\n    this.headers = exporterHeaders(options.authToken, options.headers);\n    this.fetchImpl = options.fetchImpl ?? fetch.bind(globalThis);\n    this.offlineQueue = options.offlineQueue ?? new OfflineQueue();\n    this.isolator = options.isolator ?? new ErrorIsolator();\n    this.retryController = options.retryController ?? new RetryController(this.isolator);\n    this.removeOnlineListener = this.listenForOnlineReplay();\n    if (typeof navigator !== 'undefined' && navigator.onLine !== false) void this.drainOffline();\n  }\n\n  async exportBytes(kind: TelemetryKind, body: Uint8Array, unload = false): Promise<void> {\n    if (body.byteLength === 0) return;\n    const unloading = unload || this.unloadDeliveryDepth > 0;\n    if (this.options.beforeSendBatch) {\n      try {\n        const decision = this.options.beforeSendBatch({ kind, size: body.byteLength });\n        if (decision === false) return;\n      } catch (err) {\n        this.isolator.warn('before-send-batch', err);\n      }\n    }\n    const path = `/v1/${kind}`;\n    const compressed = await compressBody(body, this.options.payloadCompression ?? 'gzip');\n    const headers = {\n      'Content-Type': 'application/x-protobuf',\n      ...(compressed.encoding ? { 'Content-Encoding': compressed.encoding } : {}),\n      ...this.headers\n    };\n    const bodyBuffer = toArrayBuffer(compressed.body);\n    const batch = { path, contentType: headers['Content-Type'], body: bodyBuffer, headers };\n    if (unloading && bodyBuffer.byteLength > KEEPALIVE_MAX_BODY_BYTES) {\n      await this.offlineQueue.enqueue(batch);\n      return;\n    }\n    if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n      await this.offlineQueue.enqueue(batch);\n      return;\n    }\n    // Authenticated exports need fetch keepalive because sendBeacon cannot attach custom headers.\n    if (unloading && this.canBeacon(bodyBuffer, headers)) {\n      const ok = (this.options.beacon ?? navigator.sendBeacon.bind(navigator))(`${this.collectorUrl}${path}`, new Blob([bodyBuffer], { type: 'application/x-protobuf' }));\n      if (ok) return;\n    }\n    try {\n      const request = () => this.fetchImpl(`${this.collectorUrl}${path}`, {\n        method: 'POST',\n        headers: { ...headers, 'x-rum-skip': '1' },\n        body: bodyBuffer,\n        keepalive: unloading\n      });\n      const response = unloading ? await request() : await this.retryController.run(request);\n      if (response && (response.status === 429 || response.status >= 500)) {\n        await this.offlineQueue.enqueue(batch);\n      }\n    } catch {\n      await this.offlineQueue.enqueue(batch);\n    }\n  }\n\n  withUnloadDelivery<T>(work: () => Promise<T>): Promise<T> {\n    this.unloadDeliveryDepth += 1;\n    return Promise.resolve().then(work).finally(() => {\n      this.unloadDeliveryDepth = Math.max(0, this.unloadDeliveryDepth - 1);\n    });\n  }\n\n  drainOffline(): Promise<void> {\n    if (this.isShutdown) return Promise.resolve();\n    if (this.drainingOffline && this.offlineDrainPromise) return this.offlineDrainPromise;\n\n    this.drainingOffline = true;\n    this.offlineDrainPromise = this.isolator.guardAsync('offline-drain', async () => {\n      await this.offlineQueue.drain(async (batch) => {\n        await this.retryController.run(() => this.fetchImpl(`${this.collectorUrl}${batch.path}`, {\n          method: 'POST',\n          headers: { ...batch.headers, 'x-rum-skip': '1' },\n          body: batch.body\n        }));\n      });\n    }, undefined).finally(() => {\n      this.drainingOffline = false;\n      this.offlineDrainPromise = undefined;\n    });\n    return this.offlineDrainPromise;\n  }\n\n  shutdown(): Promise<void> {\n    if (this.shutdownPromise) return this.shutdownPromise;\n    this.shutdownPromise = Promise.resolve().then(() => {\n      this.isShutdown = true;\n      this.removeOnlineListener?.();\n    });\n    return this.shutdownPromise;\n  }\n\n  private listenForOnlineReplay(): (() => void) | undefined {\n    if (typeof window === 'undefined' || typeof window.addEventListener !== 'function' || typeof window.removeEventListener !== 'function') {\n      return undefined;\n    }\n    const onOnline = () => {\n      void this.drainOffline();\n    };\n    window.addEventListener('online', onOnline);\n    return () => window.removeEventListener('online', onOnline);\n  }\n\n  private canBeacon(body: ArrayBuffer, headers: Record<string, string>): boolean {\n    if (typeof navigator === 'undefined' || typeof navigator.sendBeacon !== 'function') return false;\n    if (body.byteLength > KEEPALIVE_MAX_BODY_BYTES) return false;\n    const customHeaders = Object.keys(headers).filter((key) => key.toLowerCase() !== 'content-type');\n    return customHeaders.length === 0;\n  }\n}\n\nexport class RumSpanExporter implements SpanExporter {\n  constructor(private readonly http: HttpTelemetryExporter) {}\n\n  export(spans: ReadableSpan[], resultCallback: (result: { code: ExportResultCode; error?: Error }) => void): void {\n    this.http.exportBytes('traces', encodeTraceRequest(spans)).then(\n      () => resultCallback({ code: ExportResultCode.SUCCESS }),\n      (error) => resultCallback({ code: ExportResultCode.FAILED, error })\n    );\n  }\n\n  shutdown(): Promise<void> {\n    return this.http.shutdown();\n  }\n}\n\nexport class RumLogExporter implements LogRecordExporter {\n  constructor(private readonly http: HttpTelemetryExporter) {}\n\n  export(logs: ReadableLogRecord[], resultCallback: (result: { code: ExportResultCode; error?: Error }) => void): void {\n    this.http.exportBytes('logs', encodeLogsRequest(logs)).then(\n      () => resultCallback({ code: ExportResultCode.SUCCESS }),\n      (error) => resultCallback({ code: ExportResultCode.FAILED, error })\n    );\n  }\n\n  shutdown(): Promise<void> {\n    return this.http.shutdown();\n  }\n\n  forceFlush(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n\nfunction exporterHeaders(token: string, extraHeaders: Record<string, string>): Record<string, string> {\n  const hasAuthorizationOverride = Object.keys(extraHeaders).some((key) => key.toLowerCase() === 'authorization');\n  return {\n    ...(hasAuthorizationOverride ? {} : { Authorization: `Bearer ${token}` }),\n    ...extraHeaders\n  };\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n  const out = new ArrayBuffer(bytes.byteLength);\n  new Uint8Array(out).set(bytes);\n  return out;\n}\n\nasync function compressBody(body: Uint8Array, mode: 'gzip' | 'none'): Promise<{ body: Uint8Array; encoding?: 'gzip' }> {\n  if (mode === 'none' || typeof CompressionStream === 'undefined') return { body };\n  try {\n    const stream = new Blob([toArrayBuffer(body)]).stream().pipeThrough(new CompressionStream('gzip'));\n    return { body: new Uint8Array(await new Response(stream).arrayBuffer()), encoding: 'gzip' };\n  } catch {\n    return { body };\n  }\n}\n","import type { Span, TracerProvider } from '@opentelemetry/api';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { DocumentLoadInstrumentation } from '@opentelemetry/instrumentation-document-load';\nimport { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';\nimport { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';\nimport type { InstrumentationName } from '../types';\nimport type { NormalizedOptions } from '../core/options';\nimport { redactUrl } from '../core/redactor';\nimport { normalizeTraceHeaderAllowList, traceHeaderUrlPattern } from './fetch-propagation';\n\nexport function registerOtelInstrumentations(\n  options: NormalizedOptions,\n  providers: { tracerProvider?: TracerProvider } = {}\n): Array<{ disable(): void }> {\n  const enabled = new Set<InstrumentationName>(options.enabledInstrumentations);\n  const instrumentations: Array<{ disable(): void }> = [];\n  const collectorUrlPattern = traceHeaderUrlPattern(options.collectorUrl);\n  const ignoreUrls = [collectorUrlPattern, ...options.ignoreUrls];\n  const traceHeaderAllowList = options.propagateTraceHeaders ? normalizeTraceHeaderAllowList(options.propagateTraceHeadersAllowList) : [];\n  const redactNetworkUrl = (span: Span, rawUrl: string | undefined) => {\n    if (!rawUrl) return;\n    const redacted = redactUrl(rawUrl, options.redact?.urlQueryKeys);\n    span.setAttribute('http.url', redacted);\n    span.setAttribute('url.full', redacted);\n  };\n  if (enabled.has('page-load')) instrumentations.push(new DocumentLoadInstrumentation());\n  if (enabled.has('network')) {\n    instrumentations.push(\n      new FetchInstrumentation({\n        ignoreUrls,\n        propagateTraceHeaderCorsUrls: traceHeaderAllowList,\n        requestHook: (span, request) => redactNetworkUrl(span, isRequest(request) ? request.url : undefined),\n        applyCustomAttributesOnSpan: (span, request, result) => {\n          redactNetworkUrl(span, fetchResultUrl(request, result));\n          setHttpResponseStatus(span, result);\n        }\n      }),\n      new XMLHttpRequestInstrumentation({\n        ignoreUrls,\n        propagateTraceHeaderCorsUrls: traceHeaderAllowList,\n        applyCustomAttributesOnSpan: (span, xhr) => {\n          redactNetworkUrl(span, xhr.responseURL);\n          setHttpResponseStatus(span, xhr);\n        }\n      })\n    );\n  }\n  registerInstrumentations({ instrumentations: instrumentations as never, ...providers });\n  return instrumentations;\n}\n\nfunction fetchResultUrl(request: Request | RequestInit, result: unknown): string | undefined {\n  if (isRequest(request)) return request.url;\n  if (result && typeof result === 'object' && 'url' in result) {\n    const url = (result as { url?: unknown }).url;\n    if (typeof url === 'string') return url;\n  }\n  return undefined;\n}\n\nfunction isRequest(value: unknown): value is Request {\n  return typeof Request !== 'undefined' && value instanceof Request;\n}\n\nfunction setHttpResponseStatus(span: Span, source: unknown): void {\n  if (!source || typeof source !== 'object' || !('status' in source)) return;\n  const status = (source as { status?: unknown }).status;\n  if (typeof status !== 'number' || !Number.isInteger(status) || status <= 0) return;\n  span.setAttribute('http.response.status_code', status);\n}\n","import type { SpanContext } from '@opentelemetry/api';\nimport type { NormalizedOptions } from '../core/options';\n\nexport function enableFetchTracePropagation(options: NormalizedOptions, getSpanContext: () => SpanContext | undefined): () => void {\n  if (!options.propagateTraceHeaders || typeof fetch !== 'function') return () => undefined;\n  const originalFetch = fetch;\n  const collectorPattern = traceHeaderUrlPattern(options.collectorUrl);\n  const allowList = normalizeTraceHeaderAllowList(options.propagateTraceHeadersAllowList);\n\n  globalThis.fetch = function rumFetchWithTraceHeaders(this: unknown, input: RequestInfo | URL, init?: RequestInit) {\n    const spanContext = getSpanContext();\n    const url = requestUrl(input);\n    if (!spanContext || !url || !shouldPropagate(url, collectorPattern, allowList)) {\n      return originalFetch.call(this, input, init);\n    }\n\n    const headers = new Headers(init?.headers ?? (input instanceof Request ? input.headers : undefined));\n    if (headers.has('x-rum-skip') || headers.has('traceparent')) return originalFetch.call(this, input, init);\n    headers.set('traceparent', traceparent(spanContext));\n\n    if (init) return originalFetch.call(this, input, { ...init, headers });\n    if (input instanceof Request) return originalFetch.call(this, new Request(input, { headers }));\n    return originalFetch.call(this, input, { headers });\n  };\n\n  return () => {\n    globalThis.fetch = originalFetch;\n  };\n}\n\nexport function traceparent(context: SpanContext): string {\n  const flags = (context.traceFlags & 1).toString(16).padStart(2, '0');\n  return `00-${context.traceId}-${context.spanId}-${flags}`;\n}\n\nexport function normalizeTraceHeaderAllowList(allowList: Array<string | RegExp>): RegExp[] {\n  return allowList.map((pattern) => typeof pattern === 'string' ? traceHeaderUrlPattern(pattern) : pattern);\n}\n\nexport function traceHeaderUrlPattern(pattern: string): RegExp {\n  const url = new URL(pattern, locationHref());\n  if (url.pathname === '/' && url.search === '' && url.hash === '') return new RegExp(`^${escapeRegExp(url.origin)}(?:/|$)`);\n  if (url.search !== '' || url.hash !== '') return new RegExp(`^${escapeRegExp(url.href)}`);\n  const suffix = url.href.endsWith('/') ? '' : '(?:[/?#]|$)';\n  return new RegExp(`^${escapeRegExp(url.href)}${suffix}`);\n}\n\nfunction requestUrl(input: RequestInfo | URL): URL | undefined {\n  try {\n    if (typeof input === 'string') return new URL(input, locationHref());\n    if (input instanceof URL) return input;\n    if (input instanceof Request) return new URL(input.url);\n    return undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction shouldPropagate(url: URL, collectorPattern: RegExp, allowList: RegExp[]): boolean {\n  if (testPattern(collectorPattern, url.href)) return false;\n  return allowList.some((pattern) => testPattern(pattern, url.href));\n}\n\nfunction locationHref(): string {\n  return typeof location === 'undefined' ? 'https://example.invalid/' : location.href;\n}\n\nfunction testPattern(pattern: RegExp, value: string): boolean {\n  pattern.lastIndex = 0;\n  return pattern.test(value);\n}\n\nfunction escapeRegExp(value: string): string {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { Attributes, InstrumentationName } from '../types';\nimport type { NormalizedOptions } from '../core/options';\nimport type { SessionManager } from '../core/session';\nimport type { ErrorIsolator } from '../core/error-isolator';\nimport { redactInteractionText, redactStackTrace, redactUrl } from '../core/redactor';\n\nconst MAX_ERROR_MESSAGE_LENGTH = 1024;\nconst MAX_ERROR_STACK_LENGTH = 4096;\nconst MAX_TARGET_LABEL_LENGTH = 100;\n\nexport interface CustomInstrumentationContext {\n  tracer: any;\n  logger: any;\n  session: SessionManager;\n  options: NormalizedOptions;\n  isolator: ErrorIsolator;\n  attributes?: () => Attributes;\n}\n\nexport function enableCustomInstrumentations(ctx: CustomInstrumentationContext): Array<() => void> {\n  const cleanup: Array<() => void> = [];\n  const enabled = new Set<InstrumentationName>(ctx.options.enabledInstrumentations);\n  if (enabled.has('route-change')) cleanup.push(enableRouteChange(ctx));\n  if (enabled.has('error')) cleanup.push(enableErrorLogs(ctx));\n  if (enabled.has('interaction')) cleanup.push(enableInteractions(ctx));\n  if (enabled.has('web-vitals')) cleanup.push(enableWebVitals(ctx));\n  if (enabled.has('resource-timing')) cleanup.push(enableResourceTiming(ctx));\n  return cleanup;\n}\n\nfunction enableRouteChange(ctx: CustomInstrumentationContext): () => void {\n  if (typeof window === 'undefined' || typeof history === 'undefined') return () => undefined;\n  const originalPushState = history.pushState;\n  const originalReplaceState = history.replaceState;\n\n  const record = (trigger: string, from: string, to: string) => {\n    ctx.isolator.guard('route-change', () => {\n      const redactedTo = redactUrl(to, ctx.options.redact?.urlQueryKeys);\n      const span = ctx.tracer.startSpan('routeChange', {\n        attributes: currentAttributes(ctx, {\n          'route.trigger': trigger,\n          'route.from': redactUrl(from, ctx.options.redact?.urlQueryKeys),\n          'route.to': redactedTo\n        })\n      });\n      ctx.session.setRouteCurrent(redactedTo);\n      requestAnimationFrameSafe(() => span.end());\n    }, undefined);\n  };\n\n  history.pushState = function pushStatePatched(this: History, ...args: Parameters<History['pushState']>) {\n    const from = location.href;\n    const out = originalPushState.apply(this, args);\n    record('pushState', from, location.href);\n    return out;\n  };\n\n  history.replaceState = function replaceStatePatched(this: History, ...args: Parameters<History['replaceState']>) {\n    const from = location.href;\n    const out = originalReplaceState.apply(this, args);\n    record('replaceState', from, location.href);\n    return out;\n  };\n\n  const onPopState = () => record('popstate', '', location.href);\n  const onHashChange = () => record('hashchange', '', location.href);\n  window.addEventListener('popstate', onPopState);\n  window.addEventListener('hashchange', onHashChange);\n  return () => {\n    history.pushState = originalPushState;\n    history.replaceState = originalReplaceState;\n    window.removeEventListener('popstate', onPopState);\n    window.removeEventListener('hashchange', onHashChange);\n  };\n}\n\nfunction enableErrorLogs(ctx: CustomInstrumentationContext): () => void {\n  if (typeof window === 'undefined') return () => undefined;\n  const pending = new Map<string, { count: number; timer: ReturnType<typeof setTimeout>; record: Record<string, unknown> }>();\n  const emitPending = (key: string) => {\n    const item = pending.get(key);\n    pending.delete(key);\n    if (!item) return;\n    const attributes = { ...(item.record.attributes as Record<string, unknown>), 'error.count': item.count };\n    ctx.logger.emit({ ...item.record, attributes });\n  };\n  const schedule = (record: Record<string, unknown>) => {\n    const attrs = record.attributes as Record<string, unknown>;\n    attrs['error.fingerprint'] = errorFingerprint(record.body, attrs);\n    const key = String(attrs['error.fingerprint']);\n    const existing = pending.get(key);\n    if (existing) {\n      existing.count += 1;\n      return;\n    }\n    const timer = setTimeout(() => emitPending(key), 1000);\n    pending.set(key, { count: 1, timer, record });\n  };\n\n  const onError = (event: ErrorEvent) => ctx.isolator.guard('browser-error', () => {\n    schedule({\n      severityText: 'ERROR',\n      severityNumber: 17,\n      body: truncate(event.message, MAX_ERROR_MESSAGE_LENGTH),\n      attributes: currentAttributes(ctx, {\n        'error.type': event.error?.name ?? 'Error',\n        'error.stack': truncate(redactStackTrace(event.error?.stack ?? '', ctx.options.redact?.urlQueryKeys), MAX_ERROR_STACK_LENGTH),\n        'source.file': redactUrl(event.filename ?? '', ctx.options.redact?.urlQueryKeys),\n        'source.line': event.lineno ?? 0,\n        'source.column': event.colno ?? 0\n      })\n    });\n  }, undefined);\n\n  const onRejection = (event: PromiseRejectionEvent) => ctx.isolator.guard('unhandled-rejection', () => {\n    const reason = event.reason;\n    schedule({\n      severityText: 'ERROR',\n      severityNumber: 17,\n      body: truncate(reason instanceof Error ? reason.message : stringify(reason), MAX_ERROR_MESSAGE_LENGTH),\n      attributes: currentAttributes(ctx, {\n        'error.type': 'UnhandledPromiseRejection',\n        'error.stack': truncate(redactStackTrace(reason instanceof Error ? reason.stack ?? '' : '', ctx.options.redact?.urlQueryKeys), MAX_ERROR_STACK_LENGTH)\n      })\n    });\n  }, undefined);\n\n  window.addEventListener('error', onError);\n  window.addEventListener('unhandledrejection', onRejection);\n  return () => {\n    window.removeEventListener('error', onError);\n    window.removeEventListener('unhandledrejection', onRejection);\n    for (const [key, item] of [...pending]) {\n      clearTimeout(item.timer);\n      emitPending(key);\n    }\n  };\n}\n\nfunction enableInteractions(ctx: CustomInstrumentationContext): () => void {\n  if (typeof document === 'undefined') return () => undefined;\n  const onEvent = (event: Event) => ctx.isolator.guard('interaction', () => {\n    const eventTarget = event.target instanceof Element ? event.target : null;\n    if (!eventTarget || eventTarget.closest('[data-rum-ignore]')) return;\n    const target = interactionTarget(eventTarget);\n    const text = redactInteractionText(target, target.textContent?.trim() ?? '');\n    const targetLabel = interactionLabel(target, text);\n    const span = ctx.tracer.startSpan('userInteraction', {\n      attributes: currentAttributes(ctx, {\n        'interaction.type': event.type,\n        'target.tag': target.tagName.toLowerCase(),\n        'target.id': target.id,\n        'target.class': target.className.toString(),\n        'target.name': target.getAttribute('data-rum-name') ?? target.getAttribute('name') ?? '',\n        'target.label': targetLabel,\n        'target.text': text,\n        'target.selector': selector(target)\n      })\n    });\n    span.end();\n  }, undefined);\n  document.addEventListener('click', onEvent, true);\n  document.addEventListener('submit', onEvent, true);\n  return () => {\n    document.removeEventListener('click', onEvent, true);\n    document.removeEventListener('submit', onEvent, true);\n  };\n}\n\nfunction enableWebVitals(ctx: CustomInstrumentationContext): () => void {\n  let disposed = false;\n\n  const emit = (metric: any, unit: string) => {\n    ctx.isolator.guard('web-vitals-emit', () => {\n      if (disposed) return;\n      const attributes: Attributes = currentAttributes(ctx, {\n        'webvital.name': metric.name,\n        'webvital.value': metric.value,\n        'webvital.unit': unit,\n        'webvital.rating': metric.rating,\n        'webvital.delta': metric.delta,\n        'webvital.id': metric.id\n      });\n      if (metric.navigationType !== undefined) attributes['webvital.navigation_type'] = metric.navigationType;\n      ctx.logger.emit({\n        severityText: 'INFO',\n        severityNumber: 9,\n        body: 'webVital',\n        attributes\n      });\n    }, undefined);\n  };\n\n  import('web-vitals').then((vitals) => {\n    if (disposed) return;\n    vitals.onLCP?.((metric) => emit(metric, 'ms'));\n    vitals.onCLS?.((metric) => emit(metric, '1'));\n    vitals.onINP?.((metric) => emit(metric, 'ms'));\n    vitals.onFCP?.((metric) => emit(metric, 'ms'));\n    vitals.onTTFB?.((metric) => emit(metric, 'ms'));\n  }).catch(() => undefined);\n  return () => {\n    disposed = true;\n  };\n}\n\nfunction enableResourceTiming(ctx: CustomInstrumentationContext): () => void {\n  if (typeof PerformanceObserver === 'undefined') return () => undefined;\n  const seen = new Set<string>();\n  const observer = new PerformanceObserver((list) => {\n    ctx.isolator.guard('resource-timing', () => {\n      for (const entry of list.getEntriesByType('resource') as PerformanceResourceTiming[]) {\n        if (entry.name.startsWith(ctx.options.collectorUrl)) continue;\n        const key = `${entry.name}|${entry.startTime}`;\n        if (seen.has(key)) continue;\n        seen.add(key);\n        const span = ctx.tracer.startSpan('resourceFetch', {\n          attributes: currentAttributes(ctx, {\n            'http.url': redactUrl(entry.name, ctx.options.redact?.urlQueryKeys),\n            'resource.initiator_type': entry.initiatorType,\n            'resource.transfer_size': entry.transferSize,\n            'resource.encoded_body_size': entry.encodedBodySize,\n            'resource.decoded_body_size': entry.decodedBodySize\n          })\n        });\n        span.end();\n      }\n    }, undefined);\n  });\n  try {\n    observer.observe({ type: 'resource', buffered: true });\n  } catch {\n    observer.observe({ entryTypes: ['resource'] });\n  }\n  return () => observer.disconnect();\n}\n\nfunction selector(element: Element): string {\n  const parts: string[] = [];\n  let current: Element | null = element;\n  for (let depth = 0; current && depth < 5; depth += 1) {\n    let part = current.tagName.toLowerCase();\n    if (current.id) part += `#${current.id}`;\n    const className = current.className.toString().trim().split(/\\s+/).filter(Boolean).slice(0, 2).join('.');\n    if (className) part += `.${className}`;\n    parts.unshift(part);\n    current = current.parentElement;\n  }\n  return parts.join(' > ');\n}\n\nfunction currentAttributes(ctx: CustomInstrumentationContext, extra: Attributes): Attributes {\n  return { ...ctx.attributes?.(), ...extra };\n}\n\nfunction errorFingerprint(body: unknown, attrs: Record<string, unknown>): string {\n  return fnv1a32([\n    attrs['error.type'],\n    body,\n    attrs['source.file'],\n    attrs['source.line'],\n    attrs['source.column'],\n    attrs['error.stack']\n  ].map((value) => String(value ?? '')).join('|'));\n}\n\nfunction fnv1a32(value: string): string {\n  let hash = 0x811c9dc5;\n  for (let index = 0; index < value.length; index += 1) {\n    hash ^= value.charCodeAt(index);\n    hash = Math.imul(hash, 0x01000193);\n  }\n  return (hash >>> 0).toString(16).padStart(8, '0');\n}\n\nfunction interactionTarget(element: Element): Element {\n  return element.closest([\n    '[data-rum-name]',\n    'button',\n    'a',\n    'input',\n    'textarea',\n    'select',\n    '[role=\"button\"]',\n    '[role=\"link\"]',\n    '[aria-label]',\n    '[aria-labelledby]',\n    '[name]',\n    '[title]'\n  ].join(',')) ?? element;\n}\n\nfunction interactionLabel(element: Element, redactedText: string): string {\n  const explicit = firstNonEmpty([\n    element.getAttribute('data-rum-name'),\n    element.getAttribute('aria-label'),\n    ariaLabelledByText(element),\n    element.getAttribute('alt'),\n    element.getAttribute('title'),\n    element.getAttribute('name'),\n    element.id\n  ]);\n  const label = explicit ?? redactedText.trim();\n  return truncate(label || selector(element), MAX_TARGET_LABEL_LENGTH);\n}\n\nfunction ariaLabelledByText(element: Element): string {\n  const ownerDocument = element.ownerDocument;\n  const ids = element.getAttribute('aria-labelledby')?.trim().split(/\\s+/).filter(Boolean) ?? [];\n  return ids.map((id) => ownerDocument.getElementById(id)?.textContent?.trim() ?? '').filter(Boolean).join(' ');\n}\n\nfunction firstNonEmpty(values: Array<string | null | undefined>): string | undefined {\n  return values.map((value) => value?.trim() ?? '').find(Boolean);\n}\n\nfunction requestAnimationFrameSafe(fn: () => void): void {\n  if (typeof requestAnimationFrame === 'function') requestAnimationFrame(fn);\n  else setTimeout(fn, 0);\n}\n\nfunction stringify(value: unknown): string {\n  if (typeof value === 'string') return value;\n  try {\n    return JSON.stringify(value) ?? String(value);\n  } catch {\n    return String(value);\n  }\n}\n\nfunction truncate(value: string, maxLength: number): string {\n  return value.length > maxLength ? value.slice(0, maxLength) : value;\n}\n","import { context, SpanStatusCode, trace } from '@opentelemetry/api';\nimport type { Attributes, AttributeValue, LogApi, RumInstance, Severity, SpanHandle } from './types';\nimport { ErrorIsolator } from './core/error-isolator';\nimport { SessionManager } from './core/session';\nimport { UserIdentifierStore } from './core/user';\nimport { AttributeStore } from './otel/attributes';\nimport type { OTelRuntime } from './otel/setup';\n\nconst SEVERITY_NUMBER: Record<Severity, number> = {\n  TRACE: 1,\n  DEBUG: 5,\n  INFO: 9,\n  WARN: 13,\n  ERROR: 17,\n  FATAL: 21\n};\n\ntype RuntimeSpan = ReturnType<OTelRuntime['tracer']['startSpan']>;\n\ninterface ActiveSpan {\n  span: RuntimeSpan;\n  timer: ReturnType<typeof setTimeout>;\n  ended: boolean;\n}\n\nexport class OpenTelemetryRumInstance implements RumInstance {\n  readonly log: LogApi;\n  private readonly activeSpans: ActiveSpan[] = [];\n  private shutdownPromise: Promise<void> | undefined;\n  private isShutdown = false;\n\n  constructor(\n    private readonly runtime: OTelRuntime,\n    private readonly session: SessionManager,\n    private readonly users: UserIdentifierStore,\n    private readonly attributes: AttributeStore,\n    private readonly isolator: ErrorIsolator,\n    private readonly cleanup: Array<() => void>\n  ) {\n    const log = ((severity: Severity, body: unknown, attrs?: Attributes) => this.emitLog(severity, body, attrs)) as LogApi;\n    log.trace = (body, attrs) => this.emitLog('TRACE', body, attrs);\n    log.debug = (body, attrs) => this.emitLog('DEBUG', body, attrs);\n    log.info = (body, attrs) => this.emitLog('INFO', body, attrs);\n    log.warn = (body, attrs) => this.emitLog('WARN', body, attrs);\n    log.error = (body, attrs) => this.emitLog('ERROR', body, attrs);\n    log.fatal = (body, attrs) => this.emitLog('FATAL', body, attrs);\n    this.log = log;\n  }\n\n  addCleanup(cleanup: Array<() => void>): void {\n    this.cleanup.push(...cleanup);\n  }\n\n  startSpan(name: string, attributes?: Attributes): SpanHandle {\n    return this.isolator.guard('start-span', () => {\n      if (this.isShutdown || !this.session.sampled) return noopSpanHandle;\n      const parent = this.activeSpans[this.activeSpans.length - 1]?.span;\n      const parentContext = parent ? trace.setSpan(context.active(), parent) : context.active();\n      const span = this.runtime.tracer.startSpan(name, { attributes: this.attributes.current(attributes) as never }, parentContext);\n      const timer = setTimeout(() => {\n        span.setAttribute('rum.auto_ended', true);\n        this.endSpan(item);\n      }, 30_000);\n      const item: ActiveSpan = { span, timer, ended: false };\n      this.activeSpans.push(item);\n      return this.handleFor(item);\n    }, noopSpanHandle);\n  }\n\n  addEvent(name: string, attributes?: Attributes): void {\n    this.isolator.guard('add-event', () => {\n      this.activeSpans[this.activeSpans.length - 1]?.span.addEvent(name, this.attributes.current(attributes) as never);\n    }, undefined);\n  }\n\n  getActiveSpanContext() {\n    return this.activeSpans[this.activeSpans.length - 1]?.span.spanContext();\n  }\n\n  setGlobalAttribute(key: string, value: AttributeValue): void {\n    this.isolator.guard('set-global-attribute', () => {\n      if (typeof key !== 'string' || key.trim() === '') {\n        this.isolator.warn('invalid-global-attribute-key', 'global attribute key must be a non-empty string');\n        return;\n      }\n      this.attributes.setGlobalAttribute(key, value);\n    }, undefined);\n  }\n\n  removeGlobalAttribute(key: string): void {\n    this.isolator.guard('remove-global-attribute', () => this.attributes.removeGlobalAttribute(key), undefined);\n  }\n\n  setUser(userId: string, attributes?: Attributes): void {\n    this.isolator.guard('set-user', () => this.users.setUser(userId, attributes), undefined);\n  }\n\n  clearUser(): void {\n    this.isolator.guard('clear-user', () => this.users.clearUser(), undefined);\n  }\n\n  async flush(): Promise<void> {\n    if (this.isShutdown) return;\n    await this.isolator.guardAsync('flush', async () => {\n      await Promise.all([\n        this.runtime.tracerProvider.forceFlush(),\n        this.runtime.loggerProvider.forceFlush()\n      ]);\n    }, undefined);\n  }\n\n  shutdown(): Promise<void> {\n    if (this.shutdownPromise) return this.shutdownPromise;\n    this.shutdownPromise = this.isolator.guardAsync('shutdown', async () => {\n      this.isShutdown = true;\n      for (const item of [...this.activeSpans]) {\n        item.span.setAttribute('rum.ended_on_shutdown', true);\n        this.endSpan(item);\n      }\n      for (const dispose of this.cleanup.splice(0)) this.isolator.guard('cleanup', dispose, undefined);\n      await Promise.all([\n        this.runtime.tracerProvider.shutdown(),\n        this.runtime.loggerProvider.shutdown()\n      ]);\n    }, undefined);\n    return this.shutdownPromise;\n  }\n\n  private emitLog(severity: Severity, body: unknown, attributes?: Attributes): void {\n    this.isolator.guard('log', () => {\n      if (this.isShutdown || !this.session.sampled) return;\n      const normalizedSeverity = SEVERITY_NUMBER[severity] ? severity : 'INFO';\n      if (normalizedSeverity !== severity) this.isolator.warn('invalid-log-severity', `Invalid severity ${String(severity)}; using INFO`);\n      this.runtime.logger.emit({\n        severityText: normalizedSeverity,\n        severityNumber: SEVERITY_NUMBER[normalizedSeverity],\n        body: stringifyBody(body),\n        attributes: this.attributes.current(attributes) as never\n      });\n    }, undefined);\n  }\n\n  private handleFor(item: ActiveSpan): SpanHandle {\n    return {\n      setAttribute: (key, value) => this.isolator.guard('span-set-attribute', () => item.span.setAttribute(key, value as never), undefined),\n      addEvent: (name, attributes) => this.isolator.guard('span-add-event', () => item.span.addEvent(name, this.attributes.current(attributes) as never), undefined),\n      setStatus: (status, message) => this.isolator.guard('span-set-status', () => {\n        item.span.setStatus({ code: status === 'ERROR' ? SpanStatusCode.ERROR : status === 'OK' ? SpanStatusCode.OK : SpanStatusCode.UNSET, message });\n      }, undefined),\n      end: () => this.endSpan(item)\n    };\n  }\n\n  private endSpan(item: ActiveSpan): void {\n    if (item.ended) return;\n    item.ended = true;\n    clearTimeout(item.timer);\n    const index = this.activeSpans.indexOf(item);\n    if (index >= 0) this.activeSpans.splice(index, 1);\n    item.span.end();\n  }\n\n}\n\nconst noopSpanHandle: SpanHandle = {\n  setAttribute: () => undefined,\n  addEvent: () => undefined,\n  setStatus: () => undefined,\n  end: () => undefined\n};\n\nfunction stringifyBody(body: unknown): string {\n  if (typeof body === 'string') return body;\n  try {\n    return JSON.stringify(body) ?? String(body);\n  } catch {\n    return String(body);\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,gBAAN,MAAoB;AAAA,EAGzB,YAA6B,MAAoB,MAAM,KAAK,IAAI,GAAG;AAAtC;AAF7B,SAAiB,aAAa,oBAAI,IAAoB;AAAA,EAEc;AAAA,EAEpE,MAAS,WAAmB,IAAa,UAAgB;AACvD,QAAI;AACF,aAAO,GAAG;AAAA,IACZ,SAAS,KAAK;AACZ,WAAK,KAAK,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,WAAc,WAAmB,IAAsB,UAAyB;AACpF,QAAI;AACF,aAAO,MAAM,GAAG;AAAA,IAClB,SAAS,KAAK;AACZ,WAAK,KAAK,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,KAAK,WAAmB,KAAoB;AAvB9C;AAwBI,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,QAAO,UAAK,WAAW,IAAI,SAAS,MAA7B,YAAkC,OAAO;AACtD,QAAI,MAAM,OAAO,IAAQ;AACzB,SAAK,WAAW,IAAI,WAAW,GAAG;AAClC,QAAI,OAAO,YAAY,eAAe,QAAQ,MAAM;AAClD,cAAQ,KAAK,iBAAiB,WAAW,GAAG;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,WAAmB,SAAuB;AAjClD;AAkCI,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,QAAO,UAAK,WAAW,IAAI,SAAS,SAAS,EAAE,MAAxC,YAA6C,OAAO;AACjE,QAAI,MAAM,OAAO,IAAQ;AACzB,SAAK,WAAW,IAAI,SAAS,SAAS,IAAI,GAAG;AAC7C,QAAI,OAAO,YAAY,eAAe,QAAQ,OAAO;AACnD,cAAQ,MAAM,iBAAiB,OAAO;AAAA,IACxC;AAAA,EACF;AACF;;;ACxCA,IAAM,OAAO,MAAM;AAEnB,IAAM,aAAyB;AAAA,EAC7B,cAAc;AAAA,EACd,UAAU;AAAA,EACV,WAAW;AAAA,EACX,KAAK;AACP;AAEA,SAAS,UAAkB;AACzB,QAAM,OAAO,CAAC,WAAW,OAAO,gBAAgB;AAChD,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,SAAO;AACT;AAEO,SAAS,wBAAqC;AACnD,SAAO;AAAA,IACL,KAAK,QAAQ;AAAA,IACb,WAAW,MAAM;AAAA,IACjB,UAAU;AAAA,IACV,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO,YAAY;AAAA,IACnB,UAAU,YAAY;AAAA,EACxB;AACF;;;AC/BO,IAAM,wBAAwB;AAE9B,IAAM,uBAA8C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAeO,SAAS,iBAAiB,SAAiC,UAAwD;AA5B1H;AA6BE,QAAM,eAAe,mBAAkB,wCAAS,iBAAT,YAAyB,qBAAqB;AACrF,MAAI,CAAC,aAAa,WAAW,UAAU,GAAG;AACxC,aAAS,MAAM,yBAAyB,uCAAuC;AAC/E,WAAO;AAAA,EACT;AAEA,MAAI,cAAa,wCAAS,eAAT,YAAuB;AACxC,MAAI,CAAC,OAAO,SAAS,UAAU,KAAK,aAAa,KAAK,aAAa,GAAG;AACpE,aAAS,KAAK,uBAAuB,sBAAsB,OAAO,mCAAS,UAAU,CAAC,aAAa;AACnG,iBAAa;AAAA,EACf;AAEA,QAAM,2BAA0B,wCAAS,4BAAT,YAAoC;AACpE,QAAM,WAAU,wCAAS,YAAT,YAAoB,CAAC;AACrC,QAAM,UAAU,cAAc,CAAC,mCAAS,SAAS,mCAAS,cAAc,CAAC;AACzE,MAAI,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,YAAY,MAAM,eAAe,GAAG;AAC7E,aAAS,KAAK,iCAAiC,6DAA6D;AAAA,EAC9G;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAY,wCAAS,eAAT,YAAuB,CAAC;AAAA,IACpC,wBAAuB,wCAAS,0BAAT,YAAkC;AAAA,IACzD,iCAAgC,wCAAS,mCAAT,YAA2C,CAAC;AAAA,IAC5E,gBAAe,wCAAS,kBAAT,YAA0B;AAAA,IACzC,qBAAoB,wCAAS,uBAAT,YAA+B;AAAA,EACrD;AACF;AAEA,SAAS,kBAAkB,OAAuB;AAChD,SAAO,MAAM,QAAQ,QAAQ,EAAE;AACjC;AAEA,SAAS,cAAc,QAAuD;AAnE9E;AAoEE,UAAO,YAAO,KAAK,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,EAAE,MAAvE,mBAA0E;AACnF;;;AC7DA,IAAM,cAAc;AACpB,IAAM,sBAAsB,IAAI,KAAK,KAAK;AAC1C,IAAM,kBAAkB,KAAK,KAAK;AAE3B,IAAM,iBAAN,MAAqB;AAAA,EAI1B,YAAY,YAAqC,MAAoB,MAAM,KAAK,IAAI,GAAG;AAAtC;AAC/C,SAAK,UAAU,mBAAmB;AAClC,SAAK,QAAQ,KAAK,KAAK,UAAU;AACjC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,IAAI,KAAa;AACf,SAAK,MAAM;AACX,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,eAAmC;AACrC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,gBAAgB,OAAqB;AACnC,SAAK,MAAM,eAAe;AAC1B,SAAK,MAAM;AAAA,EACb;AAAA,EAEQ,KAAK,YAAkC;AAxCjD;AAyCI,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,UAAS,UAAK,YAAL,mBAAc,QAAQ;AACrC,QAAI,QAAQ;AACV,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,MAAM;AAChC,cAAM,cAAc,MAAM,OAAO;AACjC,cAAM,UAAU,MAAM,OAAO;AAC7B,YAAI,SAAS,OAAO,EAAE,KAAK,eAAe,uBAAuB,WAAW,iBAAiB;AAC3F,iBAAO,EAAE,GAAG,QAAQ,YAAY,IAAI;AAAA,QACtC;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AACA,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS,KAAK,OAAO,IAAI;AAAA,IAC3B;AAAA,EACF;AAAA,EAEQ,QAAc;AACpB,SAAK,MAAM,aAAa,KAAK,IAAI;AACjC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAgB;AApE1B;AAqEI,QAAI;AACF,iBAAK,YAAL,mBAAc,QAAQ,aAAa,KAAK,UAAU,KAAK,KAAK;AAAA,IAC9D,QAAQ;AACN,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AACF;AAEA,SAAS,qBAA0C;AACjD,MAAI;AACF,WAAO,OAAO,mBAAmB,cAAc,SAAY;AAAA,EAC7D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAiB;AACxB,QAAM,YAAY,OAAO,WAAW,WAAW,cAAc,SAAY,WAAW;AACpF,MAAI,QAAO,uCAAW,gBAAe,WAAY,QAAO,UAAU,WAAW;AAE7E,QAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,MAAI,uCAAW,iBAAiB;AAC9B,cAAU,gBAAgB,KAAK;AAAA,EACjC,OAAO;AACL,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,EAAG,OAAM,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,EACrF;AACA,QAAM,CAAC,IAAK,MAAM,CAAC,IAAI,KAAQ;AAC/B,QAAM,CAAC,IAAK,MAAM,CAAC,IAAI,KAAQ;AAC/B,QAAM,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AACjE,SAAO,GAAG,IAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;AACnJ;AAEA,SAAS,SAAS,OAAwB;AACxC,SAAO,yEAAyE,KAAK,KAAK;AAC5F;;;ACpGO,IAAM,sBAAN,MAA0B;AAAA,EAI/B,YAA6B,UAAyB;AAAzB;AAF7B,SAAQ,aAAyB,CAAC;AAAA,EAEqB;AAAA,EAEvD,QAAQ,QAAgB,aAAyB,CAAC,GAAS;AACzD,QAAI,OAAO,WAAW,YAAY,OAAO,KAAK,MAAM,IAAI;AACtD,WAAK,SAAS,KAAK,mBAAmB,mCAAmC;AACzE;AAAA,IACF;AACA,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,YAAkB;AAChB,SAAK,SAAS;AACd,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEA,qBAAiC;AAC/B,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAC;AAC1B,UAAM,MAAkB,EAAE,cAAc,KAAK,OAAO;AACpD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,UAAU,EAAG,KAAI,WAAW,GAAG,EAAE,IAAI;AACpF,WAAO;AAAA,EACT;AACF;;;AC7BA,IAAM,qBAAqB,CAAC,YAAY,SAAS,UAAU,WAAW,eAAe;AAE9E,SAAS,UAAU,QAAgB,YAAsB,CAAC,GAAW;AAC1E,QAAM,YAAY,IAAI,IAAI,CAAC,GAAG,oBAAoB,GAAG,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;AAC/F,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,QAAQ,OAAO,aAAa,cAAc,SAAS,OAAO,yBAAyB;AACvG,QAAI,aAAa,QAAQ,CAAC,QAAQ,QAAQ;AACxC,UAAI,UAAU,IAAI,IAAI,YAAY,CAAC,EAAG,KAAI,aAAa,IAAI,KAAK,YAAY;AAAA,IAC9E,CAAC;AACD,WAAO,OAAO,WAAW,MAAM,IAAI,IAAI,SAAS,IAAI,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM,GAAG,IAAI,IAAI;AAAA,EAC7F,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,cAAc,SAAiC,OAAiB,CAAC,GAA2B;AAC1G,QAAM,YAAY,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;AAC9D,SAAO,OAAO,YAAY,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC;AACxG;AAEO,SAAS,iBAAiB,OAAe,YAAsB,CAAC,GAAW;AAChF,SAAO,MAAM,QAAQ,0BAA0B,CAACA,WAAU;AArB5D;AAsBI,UAAM,YAAW,WAAAA,OAAM,MAAM,YAAY,MAAxB,mBAA4B,OAA5B,YAAkC;AACnD,UAAM,MAAM,WAAWA,OAAM,MAAM,GAAG,CAAC,SAAS,MAAM,IAAIA;AAC1D,WAAO,GAAG,UAAU,KAAK,SAAS,CAAC,GAAG,QAAQ;AAAA,EAChD,CAAC;AACH;AAEO,SAAS,sBAAsB,SAAyB,MAAsB;AACnF,MAAI,mBAAmB,kBAAkB;AACvC,UAAM,OAAO,QAAQ,KAAK,YAAY;AACtC,QAAI,SAAS,cAAc,SAAS,WAAW,SAAS,SAAS,SAAS,eAAe;AACvF,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,KAAK,SAAS,MAAM,KAAK,MAAM,GAAG,GAAG,IAAI;AAClD;;;ACZO,SAAS,yBAAyB,SAAwC;AAxBjF;AAyBE,QAAM,aAAyB,CAAC;AAChC,QAAM,MAAM,OAAO,cAAc,cAAc,SAAY;AAC3D,QAAM,aAAY,gCAAK,cAAL,YAAkB;AACpC,QAAM,WAAU,0BAAqB,SAAS,MAA9B,YAAmC,yBAAyB,2BAAK,aAAa;AAC9F,QAAM,KAAK,gBAAgB,YAAW,gCAAK,kBAAL,mBAAoB,QAAQ;AAClE,QAAM,SAAS,oBAAoB,YAAW,gCAAK,kBAAL,mBAAoB,MAAM;AACxE,QAAM,WAAWC,eAAc,CAAC,2BAAK,WAAU,gCAAK,cAAL,mBAAiB,EAAE,CAAC;AACnE,QAAM,UAAU,iBAAiB,QAAQ,OAAO;AAChD,QAAM,UAAUA,eAAc,CAAC,QAAQ,SAAS,QAAQ,cAAc,CAAC;AACvE,QAAM,OAAO,eAAe,OAAO;AACnC,QAAM,UAAU,kBAAkB;AAElC,MAAI,mCAAS,KAAM,YAAW,cAAc,IAAI,QAAQ;AACxD,MAAI,mCAAS,QAAS,YAAW,iBAAiB,IAAI,QAAQ;AAC9D,MAAI,SAAU,YAAW,kBAAkB,IAAI;AAC/C,MAAI,yBAAI,KAAM,YAAW,SAAS,IAAI,GAAG;AACzC,MAAI,yBAAI,QAAS,YAAW,YAAY,IAAI,GAAG;AAC/C,MAAI,OAAO,KAAM,YAAW,aAAa,IAAI,OAAO;AACpD,MAAI,OAAO,MAAO,YAAW,cAAc,IAAI,OAAO;AACtD,MAAI,QAAS,YAAW,sBAAsB,IAAI;AAClD,MAAI,QAAS,YAAW,iBAAiB,IAAI;AAC7C,SAAO,OAAO,YAAY,MAAM,OAAO;AAEvC,SAAO;AACT;AAEA,SAAS,eAAe,SAAwC;AAnDhE;AAoDE,MAAI,OAAO,aAAa,YAAa,QAAO,CAAC;AAC7C,QAAM,aAAyB,CAAC;AAChC,MAAI,SAAS,MAAO,YAAW,YAAY,IAAI,SAAS;AACxD,MAAI,SAAS,SAAU,YAAW,eAAe,IAAI,UAAU,SAAS,WAAU,aAAQ,WAAR,mBAAgB,YAAY;AAC9G,SAAO;AACT;AAEA,SAAS,oBAAgC;AACvC,QAAM,aAAyB,CAAC;AAChC,MAAI,OAAO,WAAW,aAAa;AACjC,cAAU,YAAY,gBAAgB,OAAO,KAAK;AAClD,cAAU,YAAY,iBAAiB,OAAO,MAAM;AACpD,cAAU,YAAY,sBAAsB,OAAO,UAAU;AAC7D,cAAU,YAAY,uBAAuB,OAAO,WAAW;AAAA,EACjE;AACA,MAAI,OAAO,WAAW,aAAa;AACjC,cAAU,YAAY,kBAAkB,OAAO,UAAU;AACzD,cAAU,YAAY,mBAAmB,OAAO,WAAW;AAAA,EAC7D;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,WAA4C;AACxE,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,WAAoC;AAAA,IACxC,CAAC,mBAAmB,gBAAgB;AAAA,IACpC,CAAC,iBAAiB,OAAO;AAAA,IACzB,CAAC,4BAA4B,kBAAkB;AAAA,IAC/C,CAAC,qBAAqB,SAAS;AAAA,IAC/B,CAAC,mBAAmB,SAAS;AAAA,IAC7B,CAAC,mBAAmB,QAAQ;AAAA,IAC5B,CAAC,oBAAoB,QAAQ;AAAA,IAC7B,CAAC,+BAA+B,QAAQ;AAAA,EAC1C;AACA,MAAI,gBAAgB,KAAK,SAAS,EAAG,QAAO,EAAE,MAAM,mBAAmB,SAAS,MAAM,WAAW,kBAAkB,EAAE;AACrH,aAAW,CAAC,SAAS,IAAI,KAAK,UAAU;AACtC,UAAM,UAAU,MAAM,WAAW,OAAO;AACxC,QAAI,QAAS,QAAO,EAAE,MAAM,QAAQ;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,eAA4E;AA9F9G;AA+FE,QAAM,UAAS,oDAAe,WAAf,mBAAuB,OAAO,CAACC,WAAU,CAAC,cAAc,KAAKA,OAAM,KAAK;AACvF,MAAI,EAAC,iCAAQ,QAAQ,QAAO;AAC5B,QAAM,SAAQ,YAAO,KAAK,CAAC,SAAS,CAAC,cAAc,KAAK,KAAK,KAAK,CAAC,MAArD,YAA0D,OAAO,CAAC;AAChF,SAAO,EAAE,MAAM,MAAM,OAAO,SAAS,MAAM,QAAQ;AACrD;AAEA,SAAS,gBAAgB,WAAmB,UAAuD;AArGnG;AAsGE,QAAM,SAAS,GAAG,8BAAY,EAAE,IAAI,SAAS;AAC7C,MAAI,WAAW,KAAK,MAAM,EAAG,QAAO,EAAE,MAAM,WAAW,SAAS,MAAM,WAAW,qBAAqB,EAAE;AACxG,MAAI,WAAW,KAAK,MAAM,EAAG,QAAO,EAAE,MAAM,WAAW,SAAS,MAAM,WAAW,kBAAkB,EAAE;AACrG,MAAI,sBAAsB,KAAK,MAAM,EAAG,QAAO,EAAE,MAAM,OAAO,UAAS,WAAM,WAAW,aAAa,MAA9B,mBAAiC,QAAQ,MAAM,KAAK;AAC3H,MAAI,2BAA2B,KAAK,MAAM,EAAG,QAAO,EAAE,MAAM,SAAS,UAAS,WAAM,WAAW,mBAAmB,MAApC,mBAAuC,QAAQ,MAAM,KAAK;AACxI,MAAI,QAAQ,KAAK,MAAM,EAAG,QAAO,EAAE,MAAM,aAAa,SAAS,MAAM,WAAW,sBAAsB,EAAE;AACxG,MAAI,SAAS,KAAK,MAAM,EAAG,QAAO,EAAE,MAAM,QAAQ;AAClD,SAAO;AACT;AAEA,SAAS,oBAAoB,WAAmB,QAA+D;AAC7G,MAAI,+BAA+B,KAAK,SAAS,EAAG,QAAO,EAAE,MAAM,MAAM;AACzE,MAAI,QAAQ,KAAK,SAAS,EAAG,QAAO,EAAE,MAAM,UAAU,OAAO,OAAO;AACpE,MAAI,UAAU,KAAK,SAAS,EAAG,QAAO,EAAE,MAAM,UAAU,OAAO,SAAS;AACxE,MAAI,QAAQ,KAAK,SAAS,EAAG,QAAO,EAAE,MAAM,UAAU,OAAO,OAAO;AACpE,MAAI,WAAW,KAAK,SAAS,KAAK,CAAC,UAAU,KAAK,SAAS,EAAG,QAAO,EAAE,MAAM,SAAS;AACtF,MAAI,UAAU,+CAA+C,KAAK,SAAS,EAAG,QAAO,EAAE,MAAM,SAAS;AACtG,SAAO,EAAE,MAAM,UAAU;AAC3B;AAEA,SAAS,iBAAiB,SAAiD;AACzE,QAAM,QAAQ,mCAAS;AACvB,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,WAAW,IAAI,MAAM,YAAY,IAAI;AACpD;AAEA,SAAS,MAAM,OAAe,SAAqC;AAhInE;AAiIE,UAAO,aAAQ,KAAK,KAAK,MAAlB,mBAAsB;AAC/B;AAEA,SAAS,UAAU,YAAwB,KAAa,OAAsB;AAC5E,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,EAAG,YAAW,GAAG,IAAI;AAC7E;AAEA,SAASD,eAAc,QAAuD;AAxI9E;AAyIE,UAAO,YAAO,KAAK,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,EAAE,MAAvE,mBAA0E;AACnF;;;ACtIO,IAAM,iBAAN,MAAqB;AAAA,EAG1B,YACmB,SACA,OACA,iBAAkD,CAAC,GACpE;AAHiB;AACA;AACA;AALnB,SAAiB,mBAAmB,oBAAI,IAA4B;AAAA,EAMjE;AAAA,EAEH,mBAAmB,KAAa,OAA6B;AAC3D,SAAK,iBAAiB,IAAI,KAAK,wBAAwB,KAAK,CAAC;AAAA,EAC/D;AAAA,EAEA,sBAAsB,KAAmB;AACvC,SAAK,iBAAiB,OAAO,GAAG;AAAA,EAClC;AAAA,EAEA,QAAQ,QAAoB,CAAC,GAAe;AAC1C,UAAM,iBAAiB,OAAO,KAAK,mBAAmB,aAAa,KAAK,eAAe,IAAI,KAAK;AAChG,UAAM,MAAkB;AAAA,MACtB,GAAG;AAAA,MACH,cAAc,KAAK,QAAQ;AAAA,MAC3B,mBAAmB,KAAK,QAAQ;AAAA,MAChC,GAAG,OAAO,YAAY,KAAK,gBAAgB;AAAA,MAC3C,GAAG,KAAK,MAAM,mBAAmB;AAAA,IACnC;AACA,QAAI,KAAK,QAAQ,aAAc,KAAI,eAAe,IAAI,KAAK,QAAQ;AACnE,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,EAAG,KAAI,GAAG,IAAI,wBAAwB,KAAK;AAC1F,WAAO;AAAA,EACT;AACF;AAEA,SAAS,wBAAwB,OAAgC;AApCjE;AAqCE,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW,QAAO;AACjG,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,OAAO,CAAC,SAA4C;AAC/D,aAAO,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY,OAAO,SAAS;AAAA,IACjF,CAAC;AAAA,EACH;AACA,MAAI;AACF,YAAO,UAAK,UAAU,KAAK,MAApB,YAAyB,OAAO,KAAK;AAAA,EAC9C,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;;;AChDA,2BAAkC;AAClC,4BAAmC;AACnC,sBAAwD;AACxD,uBAAuC;;;ACGhC,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAA6B,eAAiC;AAAjC;AAAA,EAAkC;AAAA,EAE/D,QAAQ,MAAsB;AAC5B,SAAK,cAAc,KAAK,cAAc,CAAC;AAAA,EACzC;AAAA,EAEA,QAAc;AAAA,EAAC;AAAA,EAEf,WAA0B;AACxB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,aAA4B;AAC1B,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;;;ACtBA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,OAAS;AAAA,EACT,SAAW;AAAA,IACT,KAAK;AAAA,MACH,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,MAChB,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,uBAAuB;AAAA,MACrB,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,qBAAqB;AAAA,MACnB,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,aAAe;AAAA,EACf,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,IACV,UAAY;AAAA,EACd;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,WAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,SAAW;AAAA,IACX,MAAQ;AAAA,IACR,WAAa;AAAA,IACb,MAAQ;AAAA,EACV;AAAA,EACA,cAAgB;AAAA,IACd,sBAAsB;AAAA,IACtB,kCAAkC;AAAA,IAClC,gDAAgD;AAAA,IAChD,wCAAwC;AAAA,IACxC,mDAAmD;AAAA,IACnD,mCAAmC;AAAA,IACnC,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,IAC3B,iCAAiC;AAAA,IACjC,gCAAgC;AAAA,IAChC,cAAc;AAAA,EAChB;AAAA,EACA,kBAAoB;AAAA,IAClB,MAAQ;AAAA,IACR,OAAS;AAAA,IACT,gBAAgB;AAAA,EAClB;AAAA,EACA,sBAAwB;AAAA,IACtB,MAAQ;AAAA,MACN,UAAY;AAAA,IACd;AAAA,IACA,OAAS;AAAA,MACP,UAAY;AAAA,IACd;AAAA,IACA,gBAAgB;AAAA,MACd,UAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,iBAAmB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gCAAgC;AAAA,IAChC,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,OAAS;AAAA,IACT,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,MAAQ;AAAA,IACR,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AACF;;;AC/FO,IAAM,cAAc,gBAAY;;;ACQvC,IAAY;CAAZ,SAAYE,mBAAgB;AAC1B,EAAAA,kBAAAA,kBAAA,SAAA,IAAA,CAAA,IAAA;AACA,EAAAA,kBAAAA,kBAAA,QAAA,IAAA,CAAA,IAAA;AACF,GAHY,qBAAA,mBAAgB,CAAA,EAAA;;;ACV5B,8BAAgE;AAIzD,SAAS,mBAAmB,OAAmC;AAJtE;AAKE,UAAO,qDAAwB,iBAAiB,KAAK,MAA9C,YAAmD,IAAI,WAAW;AAC3E;AAEO,SAAS,kBAAkB,MAAuC;AARzE;AASE,UAAO,oDAAuB,iBAAiB,IAAI,MAA5C,YAAiD,IAAI,WAAW;AACzE;;;ACAO,IAAM,kBAAN,MAAsB;AAAA,EAK3B,YAA6B,UAAyB,UAAkC,CAAC,GAAG;AAA/D;AAf/B;AAgBI,SAAK,cAAa,aAAQ,eAAR,YAAsB;AACxC,SAAK,oBAAmB,aAAQ,qBAAR,YAA4B;AACpD,SAAK,SAAQ,aAAQ,UAAR,aAAkB,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACvF,SAAK,iBAAiB,QAAQ;AAAA,EAChC;AAAA,EAIA,MAAM,IAAI,MAA8D;AAxB1E;AAyBI,QAAI,UAAU;AACd,WAAO,MAAM;AACX,YAAM,WAAW,MAAM,KAAK;AAC5B,UAAI,SAAS,UAAU,OAAO,SAAS,SAAS,IAAK,QAAO;AAC5D,UAAI,SAAS,UAAU,OAAO,SAAS,UAAU,KAAK;AACpD,YAAI,WAAW,KAAK,WAAY,QAAO,KAAK,KAAK;AACjD,cAAM,KAAK,MAAM,KAAK,mBAAmB,KAAK,OAAO;AACrD,mBAAW;AACX;AAAA,MACF;AACA,UAAI,SAAS,WAAW,KAAK;AAC3B,YAAI,WAAW,KAAK,WAAY,QAAO,KAAK,KAAK;AACjD,cAAM,KAAK,OAAM,qBAAgB,SAAS,QAAQ,IAAI,aAAa,CAAC,MAAnD,YAAwD,KAAK,gBAAgB;AAC9F,mBAAW;AACX;AAAA,MACF;AACA,UAAI,SAAS,WAAW,OAAO,SAAS,WAAW,KAAK;AACtD,aAAK,SAAS,KAAK,sBAAsB,sBAAsB,SAAS,MAAM,4BAA4B;AAC1G,eAAO,KAAK,KAAK;AAAA,MACnB;AACA,UAAI,SAAS,UAAU,OAAO,SAAS,UAAU,IAAK,QAAO,KAAK,KAAK;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,OAAkB;AAlD5B;AAmDI,eAAK,mBAAL;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,OAA0C;AACxE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,UAAU,OAAO,KAAK;AAC5B,MAAI,OAAO,SAAS,OAAO,KAAK,WAAW,EAAG,QAAO,UAAU;AAC/D,QAAM,OAAO,KAAK,MAAM,KAAK;AAC7B,MAAI,OAAO,SAAS,IAAI,EAAG,QAAO,KAAK,IAAI,GAAG,OAAO,KAAK,IAAI,CAAC;AAC/D,SAAO;AACT;;;AC3CO,IAAM,eAAN,MAAmB;AAAA,EAQxB,YAAY,UAA+B,CAAC,GAAG;AAH/C,SAAQ,SAAwB,CAAC;AAzBnC;AA6BI,SAAK,qBAAoB,aAAQ,sBAAR,YAA6B,IAAI,OAAO;AACjE,SAAK,kBAAiB,aAAQ,mBAAR,YAA0B,OAAO;AACvD,SAAK,OAAM,aAAQ,QAAR,aAAgB,MAAM,KAAK,IAAI;AAC1C,SAAK,UAAS,aAAQ,WAAR,YAAkB;AAAA,EAClC;AAAA,EAEA,MAAM,QAAQ,OAAkF;AAnClG;AAoCI,UAAM,SAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAY,WAAM,eAAN,YAAoB,KAAK,IAAI;AAAA,MACzC,MAAM,MAAM,KAAK;AAAA,IACnB;AACA,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,QAAI,CAAC,IAAI;AACP,WAAK,cAAc,MAAM;AACzB;AAAA,IACF;AACA,QAAI;AACF,YAAM,iBAAiB,GAAG,YAAY,WAAW,WAAW,EAAE,YAAY,SAAS,EAAE,IAAI,MAAM,CAAC;AAAA,IAClG,QAAQ;AACN,WAAK,WAAW,EAAE;AAClB,WAAK,cAAc,MAAM;AACzB;AAAA,IACF;AACA,QAAI;AACF,YAAM,KAAK,SAAS,EAAE;AAAA,IACxB,QAAQ;AACN,WAAK,WAAW,EAAE;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAA8C,mBAAmB,GAAkB;AAC7F,UAAM,QAAQ,mBAAmB,IAAI,MAAO,mBAAmB;AAC/D,WAAO,MAAM;AACX,YAAM,QAAQ,MAAM,KAAK,KAAK;AAC9B,UAAI,CAAC,MAAO;AACZ,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,OAAO,KAAK;AACvB,UAAI,CAAE,MAAM,KAAK,KAAK,EAAI;AAC1B,UAAI,QAAQ,EAAG,OAAM,MAAM,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAM,YAA6B;AACjC,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,QAAI,CAAC,GAAI,QAAO,KAAK,OAAO,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,MAAM,CAAC;AACpE,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO,EAAE;AACpC,aAAO,QAAQ,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,MAAM,CAAC;AAAA,IACzD,QAAQ;AACN,WAAK,WAAW,EAAE;AAClB,aAAO,KAAK,OAAO,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,MAAM,CAAC;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,MAAc,OAAyC;AACrD,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,QAAI,CAAC,GAAI,QAAO,KAAK,OAAO,CAAC;AAC7B,QAAI;AACF,YAAM,KAAK,GAAG,YAAY,WAAW,UAAU;AAC/C,YAAM,QAAQ,GAAG,YAAY,SAAS;AACtC,YAAM,SAAS,MAAM,iBAA4C,MAAM,WAAW,CAAC;AACnF,UAAI,CAAC,OAAQ,QAAO;AACpB,YAAM,QAAQ,OAAO;AACrB,UAAI,MAAM,OAAO,UAAa,OAAO,OAAO,eAAe,SAAU,OAAM,KAAK,OAAO;AACvF,aAAO;AAAA,IACT,QAAQ;AACN,WAAK,WAAW,EAAE;AAClB,aAAO,KAAK,OAAO,CAAC;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAc,OAAO,OAAmC;AACtD,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,QAAI,CAAC,IAAI;AACP,UAAI,KAAK,OAAO,CAAC,MAAM,MAAO,MAAK,OAAO,MAAM;AAChD;AAAA,IACF;AACA,QAAI,MAAM,OAAO,OAAW;AAC5B,QAAI;AACF,YAAM,iBAAiB,GAAG,YAAY,WAAW,WAAW,EAAE,YAAY,SAAS,EAAE,OAAO,MAAM,EAAE,CAAC;AAAA,IACvG,QAAQ;AACN,WAAK,WAAW,EAAE;AAAA,IACpB;AAAA,EACF;AAAA,EAEQ,cAAc,OAA0B;AAC9C,SAAK,OAAO,KAAK,KAAK;AACtB,WAAO,KAAK,OAAO,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,eAAgB,MAAK,OAAO,MAAM;AAAA,EACxG;AAAA,EAEA,MAAc,SAAS,IAAgC;AACrD,QAAI,UAAU,MAAM,KAAK,OAAO,EAAE;AAClC,WAAO,QAAQ,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,qBAAqB,QAAQ,SAAS,GAAG;AACvG,YAAM,SAAS,QAAQ,CAAC;AACxB,UAAI,OAAO,OAAO,QAAW;AAC3B,cAAM,iBAAiB,GAAG,YAAY,WAAW,WAAW,EAAE,YAAY,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAAA,MACxG;AACA,gBAAU,QAAQ,MAAM,CAAC;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAc,OAAO,IAAyC;AAC5D,WAAO,iBAAgC,GAAG,YAAY,WAAW,UAAU,EAAE,YAAY,SAAS,EAAE,OAAO,CAAC;AAAA,EAC9G;AAAA,EAEA,MAAc,SAA2C;AACvD,QAAI,KAAK,UAAW,QAAO,KAAK;AAChC,SAAK,YAAY,IAAI,QAAQ,CAAC,YAAY;AACxC,UAAI,OAAO,cAAc,aAAa;AACpC,gBAAQ,MAAS;AACjB;AAAA,MACF;AACA,YAAM,UAAU,UAAU,KAAK,KAAK,QAAQ,CAAC;AAC7C,cAAQ,kBAAkB,MAAM;AAC9B,cAAM,KAAK,QAAQ;AACnB,YAAI,CAAC,GAAG,iBAAiB,SAAS,SAAS,EAAG,IAAG,kBAAkB,WAAW,EAAE,SAAS,MAAM,eAAe,KAAK,CAAC;AAAA,MACtH;AACA,cAAQ,UAAU,MAAM,QAAQ,MAAS;AACzC,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAAA,IAClD,CAAC;AACD,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,WAAW,IAAuB;AACxC,QAAI;AACF,SAAG,MAAM;AAAA,IACX,QAAQ;AAAA,IAER;AACA,SAAK,YAAY,QAAQ,QAAQ,MAAS;AAAA,EAC5C;AACF;AAEA,SAAS,iBAA8B,SAAoC;AACzE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAC5C,YAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAAA,EAClD,CAAC;AACH;AAEA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;;;ACjKA,IAAM,2BAA2B,KAAK;AAe/B,IAAM,wBAAN,MAA4B;AAAA,EAcjC,YAA6B,SAAuC;AAAvC;AAN7B,SAAQ,kBAAkB;AAG1B,SAAQ,aAAa;AACrB,SAAQ,sBAAsB;AAtChC;AAyCI,SAAK,eAAe,QAAQ,aAAa,QAAQ,QAAQ,EAAE;AAC3D,SAAK,UAAU,gBAAgB,QAAQ,WAAW,QAAQ,OAAO;AACjE,SAAK,aAAY,aAAQ,cAAR,YAAqB,MAAM,KAAK,UAAU;AAC3D,SAAK,gBAAe,aAAQ,iBAAR,YAAwB,IAAI,aAAa;AAC7D,SAAK,YAAW,aAAQ,aAAR,YAAoB,IAAI,cAAc;AACtD,SAAK,mBAAkB,aAAQ,oBAAR,YAA2B,IAAI,gBAAgB,KAAK,QAAQ;AACnF,SAAK,uBAAuB,KAAK,sBAAsB;AACvD,QAAI,OAAO,cAAc,eAAe,UAAU,WAAW,MAAO,MAAK,KAAK,aAAa;AAAA,EAC7F;AAAA,EAEA,MAAM,YAAY,MAAqB,MAAkB,SAAS,OAAsB;AAnD1F;AAoDI,QAAI,KAAK,eAAe,EAAG;AAC3B,UAAM,YAAY,UAAU,KAAK,sBAAsB;AACvD,QAAI,KAAK,QAAQ,iBAAiB;AAChC,UAAI;AACF,cAAM,WAAW,KAAK,QAAQ,gBAAgB,EAAE,MAAM,MAAM,KAAK,WAAW,CAAC;AAC7E,YAAI,aAAa,MAAO;AAAA,MAC1B,SAAS,KAAK;AACZ,aAAK,SAAS,KAAK,qBAAqB,GAAG;AAAA,MAC7C;AAAA,IACF;AACA,UAAM,OAAO,OAAO,IAAI;AACxB,UAAM,aAAa,MAAM,aAAa,OAAM,UAAK,QAAQ,uBAAb,YAAmC,MAAM;AACrF,UAAM,UAAU;AAAA,MACd,gBAAgB;AAAA,MAChB,GAAI,WAAW,WAAW,EAAE,oBAAoB,WAAW,SAAS,IAAI,CAAC;AAAA,MACzE,GAAG,KAAK;AAAA,IACV;AACA,UAAM,aAAa,cAAc,WAAW,IAAI;AAChD,UAAM,QAAQ,EAAE,MAAM,aAAa,QAAQ,cAAc,GAAG,MAAM,YAAY,QAAQ;AACtF,QAAI,aAAa,WAAW,aAAa,0BAA0B;AACjE,YAAM,KAAK,aAAa,QAAQ,KAAK;AACrC;AAAA,IACF;AACA,QAAI,OAAO,cAAc,eAAe,UAAU,WAAW,OAAO;AAClE,YAAM,KAAK,aAAa,QAAQ,KAAK;AACrC;AAAA,IACF;AAEA,QAAI,aAAa,KAAK,UAAU,YAAY,OAAO,GAAG;AACpD,YAAM,OAAM,UAAK,QAAQ,WAAb,YAAuB,UAAU,WAAW,KAAK,SAAS,GAAG,GAAG,KAAK,YAAY,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,yBAAyB,CAAC,CAAC;AAClK,UAAI,GAAI;AAAA,IACV;AACA,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,UAAU,GAAG,KAAK,YAAY,GAAG,IAAI,IAAI;AAAA,QAClE,QAAQ;AAAA,QACR,SAAS,EAAE,GAAG,SAAS,cAAc,IAAI;AAAA,QACzC,MAAM;AAAA,QACN,WAAW;AAAA,MACb,CAAC;AACD,YAAM,WAAW,YAAY,MAAM,QAAQ,IAAI,MAAM,KAAK,gBAAgB,IAAI,OAAO;AACrF,UAAI,aAAa,SAAS,WAAW,OAAO,SAAS,UAAU,MAAM;AACnE,cAAM,KAAK,aAAa,QAAQ,KAAK;AAAA,MACvC;AAAA,IACF,QAAQ;AACN,YAAM,KAAK,aAAa,QAAQ,KAAK;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,mBAAsB,MAAoC;AACxD,SAAK,uBAAuB;AAC5B,WAAO,QAAQ,QAAQ,EAAE,KAAK,IAAI,EAAE,QAAQ,MAAM;AAChD,WAAK,sBAAsB,KAAK,IAAI,GAAG,KAAK,sBAAsB,CAAC;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EAEA,eAA8B;AAC5B,QAAI,KAAK,WAAY,QAAO,QAAQ,QAAQ;AAC5C,QAAI,KAAK,mBAAmB,KAAK,oBAAqB,QAAO,KAAK;AAElE,SAAK,kBAAkB;AACvB,SAAK,sBAAsB,KAAK,SAAS,WAAW,iBAAiB,YAAY;AAC/E,YAAM,KAAK,aAAa,MAAM,OAAO,UAAU;AAC7C,cAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,UAAU,GAAG,KAAK,YAAY,GAAG,MAAM,IAAI,IAAI;AAAA,UACvF,QAAQ;AAAA,UACR,SAAS,EAAE,GAAG,MAAM,SAAS,cAAc,IAAI;AAAA,UAC/C,MAAM,MAAM;AAAA,QACd,CAAC,CAAC;AAAA,MACJ,CAAC;AAAA,IACH,GAAG,MAAS,EAAE,QAAQ,MAAM;AAC1B,WAAK,kBAAkB;AACvB,WAAK,sBAAsB;AAAA,IAC7B,CAAC;AACD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAA0B;AACxB,QAAI,KAAK,gBAAiB,QAAO,KAAK;AACtC,SAAK,kBAAkB,QAAQ,QAAQ,EAAE,KAAK,MAAM;AAjIxD;AAkIM,WAAK,aAAa;AAClB,iBAAK,yBAAL;AAAA,IACF,CAAC;AACD,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,wBAAkD;AACxD,QAAI,OAAO,WAAW,eAAe,OAAO,OAAO,qBAAqB,cAAc,OAAO,OAAO,wBAAwB,YAAY;AACtI,aAAO;AAAA,IACT;AACA,UAAM,WAAW,MAAM;AACrB,WAAK,KAAK,aAAa;AAAA,IACzB;AACA,WAAO,iBAAiB,UAAU,QAAQ;AAC1C,WAAO,MAAM,OAAO,oBAAoB,UAAU,QAAQ;AAAA,EAC5D;AAAA,EAEQ,UAAU,MAAmB,SAA0C;AAC7E,QAAI,OAAO,cAAc,eAAe,OAAO,UAAU,eAAe,WAAY,QAAO;AAC3F,QAAI,KAAK,aAAa,yBAA0B,QAAO;AACvD,UAAM,gBAAgB,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,YAAY,MAAM,cAAc;AAC/F,WAAO,cAAc,WAAW;AAAA,EAClC;AACF;AAEO,IAAM,kBAAN,MAA8C;AAAA,EACnD,YAA6B,MAA6B;AAA7B;AAAA,EAA8B;AAAA,EAE3D,OAAO,OAAuB,gBAAmF;AAC/G,SAAK,KAAK,YAAY,UAAU,mBAAmB,KAAK,CAAC,EAAE;AAAA,MACzD,MAAM,eAAe,EAAE,MAAM,iBAAiB,QAAQ,CAAC;AAAA,MACvD,CAAC,UAAU,eAAe,EAAE,MAAM,iBAAiB,QAAQ,MAAM,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,KAAK,SAAS;AAAA,EAC5B;AACF;AAEO,IAAM,iBAAN,MAAkD;AAAA,EACvD,YAA6B,MAA6B;AAA7B;AAAA,EAA8B;AAAA,EAE3D,OAAO,MAA2B,gBAAmF;AACnH,SAAK,KAAK,YAAY,QAAQ,kBAAkB,IAAI,CAAC,EAAE;AAAA,MACrD,MAAM,eAAe,EAAE,MAAM,iBAAiB,QAAQ,CAAC;AAAA,MACvD,CAAC,UAAU,eAAe,EAAE,MAAM,iBAAiB,QAAQ,MAAM,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,KAAK,SAAS;AAAA,EAC5B;AAAA,EAEA,aAA4B;AAC1B,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;AAEA,SAAS,gBAAgB,OAAe,cAA8D;AACpG,QAAM,2BAA2B,OAAO,KAAK,YAAY,EAAE,KAAK,CAAC,QAAQ,IAAI,YAAY,MAAM,eAAe;AAC9G,SAAO;AAAA,IACL,GAAI,2BAA2B,CAAC,IAAI,EAAE,eAAe,UAAU,KAAK,GAAG;AAAA,IACvE,GAAG;AAAA,EACL;AACF;AAEA,SAAS,cAAc,OAAgC;AACrD,QAAM,MAAM,IAAI,YAAY,MAAM,UAAU;AAC5C,MAAI,WAAW,GAAG,EAAE,IAAI,KAAK;AAC7B,SAAO;AACT;AAEA,eAAe,aAAa,MAAkB,MAAyE;AACrH,MAAI,SAAS,UAAU,OAAO,sBAAsB,YAAa,QAAO,EAAE,KAAK;AAC/E,MAAI;AACF,UAAM,SAAS,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,IAAI,kBAAkB,MAAM,CAAC;AACjG,WAAO,EAAE,MAAM,IAAI,WAAW,MAAM,IAAI,SAAS,MAAM,EAAE,YAAY,CAAC,GAAG,UAAU,OAAO;AAAA,EAC5F,QAAQ;AACN,WAAO,EAAE,KAAK;AAAA,EAChB;AACF;;;AR/LO,SAAS,mBACd,SACA,OACA,SACA,oBACA,gBACA,WAA0B,IAAI,cAAc,GAC/B;AACb,QAAM,eAAW,yCAAuB;AAAA,IACtC,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,mBAAmB,QAAQ;AAAA,IAC3B,0BAA0B,QAAQ;AAAA,IAClC,GAAG;AAAA,EACL,CAAC;AACD,QAAM,eAAe,IAAI,sBAAsB;AAAA,IAC7C,cAAc,QAAQ;AAAA,IACtB,WAAW;AAAA,IACX,SAAS,QAAQ;AAAA,IACjB,oBAAoB,QAAQ;AAAA,IAC5B,iBAAiB,QAAQ;AAAA,IACzB;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,IAAI,gBAAgB,YAAY;AACtD,QAAM,cAAc,IAAI,eAAe,YAAY;AAEnD,QAAM,iBAAiB,IAAI,uCAAkB;AAAA,IAC3C;AAAA,IACA,gBAAgB;AAAA,MACd,IAAI,0BAA0B,cAAc;AAAA,MAC5C,IAAI,yCAAmB,eAAe,EAAE,oBAAoB,KAAK,sBAAsB,IAAK,CAAC;AAAA,IAC/F;AAAA,EACF,CAAC;AACD,iBAAe,SAAS;AAExB,QAAM,iBAAiB,IAAI,+BAAe;AAAA,IACxC;AAAA,IACA,YAAY,CAAC,IAAI,wCAAwB,aAAa,EAAE,oBAAoB,KAAK,sBAAsB,IAAK,CAAC,CAAC;AAAA,EAChH,CAAC;AAED,QAAM,UAAU,CAAC,oBAAoB,cAAc,YAAY;AAC7D,UAAM,QAAQ,IAAI;AAAA,MAChB,eAAe,WAAW;AAAA,MAC1B,eAAe,WAAW;AAAA,IAC5B,CAAC;AAAA,EACH,GAAG,QAAQ,CAAC;AAEZ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,eAAe,UAAU,eAAe,WAAW;AAAA,IAC3D,QAAQ,eAAe,UAAU,eAAe,WAAW;AAAA,IAC3D;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,cAAqC,YAAiC,UAAqC;AACtI,MAAI,OAAO,WAAW,YAAa,QAAO,MAAM;AAChD,MAAI;AACJ,QAAM,QAAQ,MAAM;AAClB,QAAI,QAAS;AACb,cAAU,aAAa,mBAAmB,MAAM,SAAS,WAAW,mBAAmB,YAAY,MAAS,CAAC,EAAE,QAAQ,MAAM;AAC3H,gBAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,OAAO,aAAa,eAAe,SAAS,oBAAoB,SAAU,OAAM;AAAA,EACtF;AACA,SAAO,iBAAiB,YAAY,OAAO,IAAI;AAC/C,MAAI,OAAO,aAAa,YAAa,UAAS,iBAAiB,oBAAoB,oBAAoB,IAAI;AAC3G,SAAO,MAAM;AACX,WAAO,oBAAoB,YAAY,OAAO,IAAI;AAClD,QAAI,OAAO,aAAa,YAAa,UAAS,oBAAoB,oBAAoB,oBAAoB,IAAI;AAAA,EAChH;AACF;;;AS9FA,6BAAyC;AACzC,2CAA4C;AAC5C,mCAAqC;AACrC,8CAA8C;;;ACDvC,SAAS,4BAA4B,SAA4B,gBAA2D;AACjI,MAAI,CAAC,QAAQ,yBAAyB,OAAO,UAAU,WAAY,QAAO,MAAM;AAChF,QAAM,gBAAgB;AACtB,QAAM,mBAAmB,sBAAsB,QAAQ,YAAY;AACnE,QAAM,YAAY,8BAA8B,QAAQ,8BAA8B;AAEtF,aAAW,QAAQ,SAAS,yBAAwC,OAA0B,MAAoB;AATpH;AAUI,UAAM,cAAc,eAAe;AACnC,UAAM,MAAM,WAAW,KAAK;AAC5B,QAAI,CAAC,eAAe,CAAC,OAAO,CAAC,gBAAgB,KAAK,kBAAkB,SAAS,GAAG;AAC9E,aAAO,cAAc,KAAK,MAAM,OAAO,IAAI;AAAA,IAC7C;AAEA,UAAM,UAAU,IAAI,SAAQ,kCAAM,YAAN,YAAkB,iBAAiB,UAAU,MAAM,UAAU,MAAU;AACnG,QAAI,QAAQ,IAAI,YAAY,KAAK,QAAQ,IAAI,aAAa,EAAG,QAAO,cAAc,KAAK,MAAM,OAAO,IAAI;AACxG,YAAQ,IAAI,eAAe,YAAY,WAAW,CAAC;AAEnD,QAAI,KAAM,QAAO,cAAc,KAAK,MAAM,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC;AACrE,QAAI,iBAAiB,QAAS,QAAO,cAAc,KAAK,MAAM,IAAI,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC7F,WAAO,cAAc,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC;AAAA,EACpD;AAEA,SAAO,MAAM;AACX,eAAW,QAAQ;AAAA,EACrB;AACF;AAEO,SAAS,YAAYC,UAA8B;AACxD,QAAM,SAASA,SAAQ,aAAa,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AACnE,SAAO,MAAMA,SAAQ,OAAO,IAAIA,SAAQ,MAAM,IAAI,KAAK;AACzD;AAEO,SAAS,8BAA8B,WAA6C;AACzF,SAAO,UAAU,IAAI,CAAC,YAAY,OAAO,YAAY,WAAW,sBAAsB,OAAO,IAAI,OAAO;AAC1G;AAEO,SAAS,sBAAsB,SAAyB;AAC7D,QAAM,MAAM,IAAI,IAAI,SAAS,aAAa,CAAC;AAC3C,MAAI,IAAI,aAAa,OAAO,IAAI,WAAW,MAAM,IAAI,SAAS,GAAI,QAAO,IAAI,OAAO,IAAI,aAAa,IAAI,MAAM,CAAC,SAAS;AACzH,MAAI,IAAI,WAAW,MAAM,IAAI,SAAS,GAAI,QAAO,IAAI,OAAO,IAAI,aAAa,IAAI,IAAI,CAAC,EAAE;AACxF,QAAM,SAAS,IAAI,KAAK,SAAS,GAAG,IAAI,KAAK;AAC7C,SAAO,IAAI,OAAO,IAAI,aAAa,IAAI,IAAI,CAAC,GAAG,MAAM,EAAE;AACzD;AAEA,SAAS,WAAW,OAA2C;AAC7D,MAAI;AACF,QAAI,OAAO,UAAU,SAAU,QAAO,IAAI,IAAI,OAAO,aAAa,CAAC;AACnE,QAAI,iBAAiB,IAAK,QAAO;AACjC,QAAI,iBAAiB,QAAS,QAAO,IAAI,IAAI,MAAM,GAAG;AACtD,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,KAAU,kBAA0B,WAA8B;AACzF,MAAI,YAAY,kBAAkB,IAAI,IAAI,EAAG,QAAO;AACpD,SAAO,UAAU,KAAK,CAAC,YAAY,YAAY,SAAS,IAAI,IAAI,CAAC;AACnE;AAEA,SAAS,eAAuB;AAC9B,SAAO,OAAO,aAAa,cAAc,6BAA6B,SAAS;AACjF;AAEA,SAAS,YAAY,SAAiB,OAAwB;AAC5D,UAAQ,YAAY;AACpB,SAAO,QAAQ,KAAK,KAAK;AAC3B;AAEA,SAAS,aAAa,OAAuB;AAC3C,SAAO,MAAM,QAAQ,uBAAuB,MAAM;AACpD;;;ADhEO,SAAS,6BACd,SACA,YAAiD,CAAC,GACtB;AAC5B,QAAM,UAAU,IAAI,IAAyB,QAAQ,uBAAuB;AAC5E,QAAM,mBAA+C,CAAC;AACtD,QAAM,sBAAsB,sBAAsB,QAAQ,YAAY;AACtE,QAAM,aAAa,CAAC,qBAAqB,GAAG,QAAQ,UAAU;AAC9D,QAAM,uBAAuB,QAAQ,wBAAwB,8BAA8B,QAAQ,8BAA8B,IAAI,CAAC;AACtI,QAAM,mBAAmB,CAAC,MAAY,WAA+B;AAnBvE;AAoBI,QAAI,CAAC,OAAQ;AACb,UAAM,WAAW,UAAU,SAAQ,aAAQ,WAAR,mBAAgB,YAAY;AAC/D,SAAK,aAAa,YAAY,QAAQ;AACtC,SAAK,aAAa,YAAY,QAAQ;AAAA,EACxC;AACA,MAAI,QAAQ,IAAI,WAAW,EAAG,kBAAiB,KAAK,IAAI,iEAA4B,CAAC;AACrF,MAAI,QAAQ,IAAI,SAAS,GAAG;AAC1B,qBAAiB;AAAA,MACf,IAAI,kDAAqB;AAAA,QACvB;AAAA,QACA,8BAA8B;AAAA,QAC9B,aAAa,CAAC,MAAM,YAAY,iBAAiB,MAAM,UAAU,OAAO,IAAI,QAAQ,MAAM,MAAS;AAAA,QACnG,6BAA6B,CAAC,MAAM,SAAS,WAAW;AACtD,2BAAiB,MAAM,eAAe,SAAS,MAAM,CAAC;AACtD,gCAAsB,MAAM,MAAM;AAAA,QACpC;AAAA,MACF,CAAC;AAAA,MACD,IAAI,sEAA8B;AAAA,QAChC;AAAA,QACA,8BAA8B;AAAA,QAC9B,6BAA6B,CAAC,MAAM,QAAQ;AAC1C,2BAAiB,MAAM,IAAI,WAAW;AACtC,gCAAsB,MAAM,GAAG;AAAA,QACjC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,uDAAyB,EAAE,kBAA6C,GAAG,UAAU,CAAC;AACtF,SAAO;AACT;AAEA,SAAS,eAAe,SAAgC,QAAqC;AAC3F,MAAI,UAAU,OAAO,EAAG,QAAO,QAAQ;AACvC,MAAI,UAAU,OAAO,WAAW,YAAY,SAAS,QAAQ;AAC3D,UAAM,MAAO,OAA6B;AAC1C,QAAI,OAAO,QAAQ,SAAU,QAAO;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,UAAU,OAAkC;AACnD,SAAO,OAAO,YAAY,eAAe,iBAAiB;AAC5D;AAEA,SAAS,sBAAsB,MAAY,QAAuB;AAChE,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,EAAE,YAAY,QAAS;AACpE,QAAM,SAAU,OAAgC;AAChD,MAAI,OAAO,WAAW,YAAY,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,EAAG;AAC5E,OAAK,aAAa,6BAA6B,MAAM;AACvD;;;AE/DA,IAAM,2BAA2B;AACjC,IAAM,yBAAyB;AAC/B,IAAM,0BAA0B;AAWzB,SAAS,6BAA6B,KAAsD;AACjG,QAAM,UAA6B,CAAC;AACpC,QAAM,UAAU,IAAI,IAAyB,IAAI,QAAQ,uBAAuB;AAChF,MAAI,QAAQ,IAAI,cAAc,EAAG,SAAQ,KAAK,kBAAkB,GAAG,CAAC;AACpE,MAAI,QAAQ,IAAI,OAAO,EAAG,SAAQ,KAAK,gBAAgB,GAAG,CAAC;AAC3D,MAAI,QAAQ,IAAI,aAAa,EAAG,SAAQ,KAAK,mBAAmB,GAAG,CAAC;AACpE,MAAI,QAAQ,IAAI,YAAY,EAAG,SAAQ,KAAK,gBAAgB,GAAG,CAAC;AAChE,MAAI,QAAQ,IAAI,iBAAiB,EAAG,SAAQ,KAAK,qBAAqB,GAAG,CAAC;AAC1E,SAAO;AACT;AAEA,SAAS,kBAAkB,KAA+C;AACxE,MAAI,OAAO,WAAW,eAAe,OAAO,YAAY,YAAa,QAAO,MAAM;AAClF,QAAM,oBAAoB,QAAQ;AAClC,QAAM,uBAAuB,QAAQ;AAErC,QAAM,SAAS,CAAC,SAAiB,MAAc,OAAe;AAC5D,QAAI,SAAS,MAAM,gBAAgB,MAAM;AApC7C;AAqCM,YAAM,aAAa,UAAU,KAAI,SAAI,QAAQ,WAAZ,mBAAoB,YAAY;AACjE,YAAM,OAAO,IAAI,OAAO,UAAU,eAAe;AAAA,QAC/C,YAAY,kBAAkB,KAAK;AAAA,UACjC,iBAAiB;AAAA,UACjB,cAAc,UAAU,OAAM,SAAI,QAAQ,WAAZ,mBAAoB,YAAY;AAAA,UAC9D,YAAY;AAAA,QACd,CAAC;AAAA,MACH,CAAC;AACD,UAAI,QAAQ,gBAAgB,UAAU;AACtC,gCAA0B,MAAM,KAAK,IAAI,CAAC;AAAA,IAC5C,GAAG,MAAS;AAAA,EACd;AAEA,UAAQ,YAAY,SAAS,oBAAmC,MAAwC;AACtG,UAAM,OAAO,SAAS;AACtB,UAAM,MAAM,kBAAkB,MAAM,MAAM,IAAI;AAC9C,WAAO,aAAa,MAAM,SAAS,IAAI;AACvC,WAAO;AAAA,EACT;AAEA,UAAQ,eAAe,SAAS,uBAAsC,MAA2C;AAC/G,UAAM,OAAO,SAAS;AACtB,UAAM,MAAM,qBAAqB,MAAM,MAAM,IAAI;AACjD,WAAO,gBAAgB,MAAM,SAAS,IAAI;AAC1C,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,MAAM,OAAO,YAAY,IAAI,SAAS,IAAI;AAC7D,QAAM,eAAe,MAAM,OAAO,cAAc,IAAI,SAAS,IAAI;AACjE,SAAO,iBAAiB,YAAY,UAAU;AAC9C,SAAO,iBAAiB,cAAc,YAAY;AAClD,SAAO,MAAM;AACX,YAAQ,YAAY;AACpB,YAAQ,eAAe;AACvB,WAAO,oBAAoB,YAAY,UAAU;AACjD,WAAO,oBAAoB,cAAc,YAAY;AAAA,EACvD;AACF;AAEA,SAAS,gBAAgB,KAA+C;AACtE,MAAI,OAAO,WAAW,YAAa,QAAO,MAAM;AAChD,QAAM,UAAU,oBAAI,IAAsG;AAC1H,QAAM,cAAc,CAAC,QAAgB;AACnC,UAAM,OAAO,QAAQ,IAAI,GAAG;AAC5B,YAAQ,OAAO,GAAG;AAClB,QAAI,CAAC,KAAM;AACX,UAAM,aAAa,EAAE,GAAI,KAAK,OAAO,YAAwC,eAAe,KAAK,MAAM;AACvG,QAAI,OAAO,KAAK,EAAE,GAAG,KAAK,QAAQ,WAAW,CAAC;AAAA,EAChD;AACA,QAAM,WAAW,CAAC,WAAoC;AACpD,UAAM,QAAQ,OAAO;AACrB,UAAM,mBAAmB,IAAI,iBAAiB,OAAO,MAAM,KAAK;AAChE,UAAM,MAAM,OAAO,MAAM,mBAAmB,CAAC;AAC7C,UAAM,WAAW,QAAQ,IAAI,GAAG;AAChC,QAAI,UAAU;AACZ,eAAS,SAAS;AAClB;AAAA,IACF;AACA,UAAM,QAAQ,WAAW,MAAM,YAAY,GAAG,GAAG,GAAI;AACrD,YAAQ,IAAI,KAAK,EAAE,OAAO,GAAG,OAAO,OAAO,CAAC;AAAA,EAC9C;AAEA,QAAM,UAAU,CAAC,UAAsB,IAAI,SAAS,MAAM,iBAAiB,MAAM;AAnGnF;AAoGI,aAAS;AAAA,MACP,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,MAAM,SAAS,MAAM,SAAS,wBAAwB;AAAA,MACtD,YAAY,kBAAkB,KAAK;AAAA,QACjC,eAAc,iBAAM,UAAN,mBAAa,SAAb,YAAqB;AAAA,QACnC,eAAe,SAAS,kBAAiB,iBAAM,UAAN,mBAAa,UAAb,YAAsB,KAAI,SAAI,QAAQ,WAAZ,mBAAoB,YAAY,GAAG,sBAAsB;AAAA,QAC5H,eAAe,WAAU,WAAM,aAAN,YAAkB,KAAI,SAAI,QAAQ,WAAZ,mBAAoB,YAAY;AAAA,QAC/E,gBAAe,WAAM,WAAN,YAAgB;AAAA,QAC/B,kBAAiB,WAAM,UAAN,YAAe;AAAA,MAClC,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAAG,MAAS;AAEZ,QAAM,cAAc,CAAC,UAAiC,IAAI,SAAS,MAAM,uBAAuB,MAAM;AAlHxG;AAmHI,UAAM,SAAS,MAAM;AACrB,aAAS;AAAA,MACP,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,MAAM,SAAS,kBAAkB,QAAQ,OAAO,UAAU,UAAU,MAAM,GAAG,wBAAwB;AAAA,MACrG,YAAY,kBAAkB,KAAK;AAAA,QACjC,cAAc;AAAA,QACd,eAAe,SAAS,iBAAiB,kBAAkB,SAAQ,YAAO,UAAP,YAAgB,KAAK,KAAI,SAAI,QAAQ,WAAZ,mBAAoB,YAAY,GAAG,sBAAsB;AAAA,MACvJ,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAAG,MAAS;AAEZ,SAAO,iBAAiB,SAAS,OAAO;AACxC,SAAO,iBAAiB,sBAAsB,WAAW;AACzD,SAAO,MAAM;AACX,WAAO,oBAAoB,SAAS,OAAO;AAC3C,WAAO,oBAAoB,sBAAsB,WAAW;AAC5D,eAAW,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,OAAO,GAAG;AACtC,mBAAa,KAAK,KAAK;AACvB,kBAAY,GAAG;AAAA,IACjB;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,KAA+C;AACzE,MAAI,OAAO,aAAa,YAAa,QAAO,MAAM;AAClD,QAAM,UAAU,CAAC,UAAiB,IAAI,SAAS,MAAM,eAAe,MAAM;AA7I5E;AA8II,UAAM,cAAc,MAAM,kBAAkB,UAAU,MAAM,SAAS;AACrE,QAAI,CAAC,eAAe,YAAY,QAAQ,mBAAmB,EAAG;AAC9D,UAAM,SAAS,kBAAkB,WAAW;AAC5C,UAAM,OAAO,sBAAsB,SAAQ,kBAAO,gBAAP,mBAAoB,WAApB,YAA8B,EAAE;AAC3E,UAAM,cAAc,iBAAiB,QAAQ,IAAI;AACjD,UAAM,OAAO,IAAI,OAAO,UAAU,mBAAmB;AAAA,MACnD,YAAY,kBAAkB,KAAK;AAAA,QACjC,oBAAoB,MAAM;AAAA,QAC1B,cAAc,OAAO,QAAQ,YAAY;AAAA,QACzC,aAAa,OAAO;AAAA,QACpB,gBAAgB,OAAO,UAAU,SAAS;AAAA,QAC1C,gBAAe,kBAAO,aAAa,eAAe,MAAnC,YAAwC,OAAO,aAAa,MAAM,MAAlE,YAAuE;AAAA,QACtF,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,mBAAmB,SAAS,MAAM;AAAA,MACpC,CAAC;AAAA,IACH,CAAC;AACD,SAAK,IAAI;AAAA,EACX,GAAG,MAAS;AACZ,WAAS,iBAAiB,SAAS,SAAS,IAAI;AAChD,WAAS,iBAAiB,UAAU,SAAS,IAAI;AACjD,SAAO,MAAM;AACX,aAAS,oBAAoB,SAAS,SAAS,IAAI;AACnD,aAAS,oBAAoB,UAAU,SAAS,IAAI;AAAA,EACtD;AACF;AAEA,SAAS,gBAAgB,KAA+C;AACtE,MAAI,WAAW;AAEf,QAAM,OAAO,CAAC,QAAa,SAAiB;AAC1C,QAAI,SAAS,MAAM,mBAAmB,MAAM;AAC1C,UAAI,SAAU;AACd,YAAM,aAAyB,kBAAkB,KAAK;AAAA,QACpD,iBAAiB,OAAO;AAAA,QACxB,kBAAkB,OAAO;AAAA,QACzB,iBAAiB;AAAA,QACjB,mBAAmB,OAAO;AAAA,QAC1B,kBAAkB,OAAO;AAAA,QACzB,eAAe,OAAO;AAAA,MACxB,CAAC;AACD,UAAI,OAAO,mBAAmB,OAAW,YAAW,0BAA0B,IAAI,OAAO;AACzF,UAAI,OAAO,KAAK;AAAA,QACd,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH,GAAG,MAAS;AAAA,EACd;AAEA,SAAO,YAAY,EAAE,KAAK,CAAC,WAAW;AAjMxC;AAkMI,QAAI,SAAU;AACd,iBAAO,UAAP,gCAAe,CAAC,WAAW,KAAK,QAAQ,IAAI;AAC5C,iBAAO,UAAP,gCAAe,CAAC,WAAW,KAAK,QAAQ,GAAG;AAC3C,iBAAO,UAAP,gCAAe,CAAC,WAAW,KAAK,QAAQ,IAAI;AAC5C,iBAAO,UAAP,gCAAe,CAAC,WAAW,KAAK,QAAQ,IAAI;AAC5C,iBAAO,WAAP,gCAAgB,CAAC,WAAW,KAAK,QAAQ,IAAI;AAAA,EAC/C,CAAC,EAAE,MAAM,MAAM,MAAS;AACxB,SAAO,MAAM;AACX,eAAW;AAAA,EACb;AACF;AAEA,SAAS,qBAAqB,KAA+C;AAC3E,MAAI,OAAO,wBAAwB,YAAa,QAAO,MAAM;AAC7D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,WAAW,IAAI,oBAAoB,CAAC,SAAS;AACjD,QAAI,SAAS,MAAM,mBAAmB,MAAM;AAlNhD;AAmNM,iBAAW,SAAS,KAAK,iBAAiB,UAAU,GAAkC;AACpF,YAAI,MAAM,KAAK,WAAW,IAAI,QAAQ,YAAY,EAAG;AACrD,cAAM,MAAM,GAAG,MAAM,IAAI,IAAI,MAAM,SAAS;AAC5C,YAAI,KAAK,IAAI,GAAG,EAAG;AACnB,aAAK,IAAI,GAAG;AACZ,cAAM,OAAO,IAAI,OAAO,UAAU,iBAAiB;AAAA,UACjD,YAAY,kBAAkB,KAAK;AAAA,YACjC,YAAY,UAAU,MAAM,OAAM,SAAI,QAAQ,WAAZ,mBAAoB,YAAY;AAAA,YAClE,2BAA2B,MAAM;AAAA,YACjC,0BAA0B,MAAM;AAAA,YAChC,8BAA8B,MAAM;AAAA,YACpC,8BAA8B,MAAM;AAAA,UACtC,CAAC;AAAA,QACH,CAAC;AACD,aAAK,IAAI;AAAA,MACX;AAAA,IACF,GAAG,MAAS;AAAA,EACd,CAAC;AACD,MAAI;AACF,aAAS,QAAQ,EAAE,MAAM,YAAY,UAAU,KAAK,CAAC;AAAA,EACvD,QAAQ;AACN,aAAS,QAAQ,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC;AAAA,EAC/C;AACA,SAAO,MAAM,SAAS,WAAW;AACnC;AAEA,SAAS,SAAS,SAA0B;AAC1C,QAAM,QAAkB,CAAC;AACzB,MAAI,UAA0B;AAC9B,WAAS,QAAQ,GAAG,WAAW,QAAQ,GAAG,SAAS,GAAG;AACpD,QAAI,OAAO,QAAQ,QAAQ,YAAY;AACvC,QAAI,QAAQ,GAAI,SAAQ,IAAI,QAAQ,EAAE;AACtC,UAAM,YAAY,QAAQ,UAAU,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACvG,QAAI,UAAW,SAAQ,IAAI,SAAS;AACpC,UAAM,QAAQ,IAAI;AAClB,cAAU,QAAQ;AAAA,EACpB;AACA,SAAO,MAAM,KAAK,KAAK;AACzB;AAEA,SAAS,kBAAkB,KAAmC,OAA+B;AA3P7F;AA4PE,SAAO,EAAE,IAAG,SAAI,eAAJ,8BAAoB,GAAG,MAAM;AAC3C;AAEA,SAAS,iBAAiB,MAAe,OAAwC;AAC/E,SAAO,QAAQ;AAAA,IACb,MAAM,YAAY;AAAA,IAClB;AAAA,IACA,MAAM,aAAa;AAAA,IACnB,MAAM,aAAa;AAAA,IACnB,MAAM,eAAe;AAAA,IACrB,MAAM,aAAa;AAAA,EACrB,EAAE,IAAI,CAAC,UAAU,OAAO,wBAAS,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC;AACjD;AAEA,SAAS,QAAQ,OAAuB;AACtC,MAAI,OAAO;AACX,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,YAAQ,MAAM,WAAW,KAAK;AAC9B,WAAO,KAAK,KAAK,MAAM,QAAU;AAAA,EACnC;AACA,UAAQ,SAAS,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAClD;AAEA,SAAS,kBAAkB,SAA2B;AAnRtD;AAoRE,UAAO,aAAQ,QAAQ;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG,CAAC,MAbJ,YAaS;AAClB;AAEA,SAAS,iBAAiB,SAAkB,cAA8B;AACxE,QAAM,WAAWC,eAAc;AAAA,IAC7B,QAAQ,aAAa,eAAe;AAAA,IACpC,QAAQ,aAAa,YAAY;AAAA,IACjC,mBAAmB,OAAO;AAAA,IAC1B,QAAQ,aAAa,KAAK;AAAA,IAC1B,QAAQ,aAAa,OAAO;AAAA,IAC5B,QAAQ,aAAa,MAAM;AAAA,IAC3B,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,QAAQ,8BAAY,aAAa,KAAK;AAC5C,SAAO,SAAS,SAAS,SAAS,OAAO,GAAG,uBAAuB;AACrE;AAEA,SAAS,mBAAmB,SAA0B;AAlTtD;AAmTE,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,OAAM,mBAAQ,aAAa,iBAAiB,MAAtC,mBAAyC,OAAO,MAAM,OAAO,OAAO,aAApE,YAAgF,CAAC;AAC7F,SAAO,IAAI,IAAI,CAAC,OAAI;AArTtB,QAAAC,KAAAC,KAAA;AAqTyB,kBAAAA,OAAAD,MAAA,cAAc,eAAe,EAAE,MAA/B,gBAAAA,IAAkC,gBAAlC,gBAAAC,IAA+C,WAA/C,YAAyD;AAAA,GAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC9G;AAEA,SAASF,eAAc,QAA8D;AACnF,SAAO,OAAO,IAAI,CAAC,UAAO;AAzT5B;AAyT+B,gDAAO,WAAP,YAAiB;AAAA,GAAE,EAAE,KAAK,OAAO;AAChE;AAEA,SAAS,0BAA0B,IAAsB;AACvD,MAAI,OAAO,0BAA0B,WAAY,uBAAsB,EAAE;AAAA,MACpE,YAAW,IAAI,CAAC;AACvB;AAEA,SAAS,UAAU,OAAwB;AAjU3C;AAkUE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,YAAO,UAAK,UAAU,KAAK,MAApB,YAAyB,OAAO,KAAK;AAAA,EAC9C,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAEA,SAAS,SAAS,OAAe,WAA2B;AAC1D,SAAO,MAAM,SAAS,YAAY,MAAM,MAAM,GAAG,SAAS,IAAI;AAChE;;;AC5UA,iBAA+C;AAQ/C,IAAM,kBAA4C;AAAA,EAChD,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAUO,IAAM,2BAAN,MAAsD;AAAA,EAM3D,YACmB,SACA,SACA,OACA,YACA,UACA,SACjB;AANiB;AACA;AACA;AACA;AACA;AACA;AAVnB,SAAiB,cAA4B,CAAC;AAE9C,SAAQ,aAAa;AAUnB,UAAM,OAAO,CAAC,UAAoB,MAAe,UAAuB,KAAK,QAAQ,UAAU,MAAM,KAAK;AAC1G,QAAI,QAAQ,CAAC,MAAM,UAAU,KAAK,QAAQ,SAAS,MAAM,KAAK;AAC9D,QAAI,QAAQ,CAAC,MAAM,UAAU,KAAK,QAAQ,SAAS,MAAM,KAAK;AAC9D,QAAI,OAAO,CAAC,MAAM,UAAU,KAAK,QAAQ,QAAQ,MAAM,KAAK;AAC5D,QAAI,OAAO,CAAC,MAAM,UAAU,KAAK,QAAQ,QAAQ,MAAM,KAAK;AAC5D,QAAI,QAAQ,CAAC,MAAM,UAAU,KAAK,QAAQ,SAAS,MAAM,KAAK;AAC9D,QAAI,QAAQ,CAAC,MAAM,UAAU,KAAK,QAAQ,SAAS,MAAM,KAAK;AAC9D,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,WAAW,SAAkC;AAC3C,SAAK,QAAQ,KAAK,GAAG,OAAO;AAAA,EAC9B;AAAA,EAEA,UAAU,MAAc,YAAqC;AAC3D,WAAO,KAAK,SAAS,MAAM,cAAc,MAAM;AAtDnD;AAuDM,UAAI,KAAK,cAAc,CAAC,KAAK,QAAQ,QAAS,QAAO;AACrD,YAAM,UAAS,UAAK,YAAY,KAAK,YAAY,SAAS,CAAC,MAA5C,mBAA+C;AAC9D,YAAM,gBAAgB,SAAS,iBAAM,QAAQ,mBAAQ,OAAO,GAAG,MAAM,IAAI,mBAAQ,OAAO;AACxF,YAAM,OAAO,KAAK,QAAQ,OAAO,UAAU,MAAM,EAAE,YAAY,KAAK,WAAW,QAAQ,UAAU,EAAW,GAAG,aAAa;AAC5H,YAAM,QAAQ,WAAW,MAAM;AAC7B,aAAK,aAAa,kBAAkB,IAAI;AACxC,aAAK,QAAQ,IAAI;AAAA,MACnB,GAAG,GAAM;AACT,YAAM,OAAmB,EAAE,MAAM,OAAO,OAAO,MAAM;AACrD,WAAK,YAAY,KAAK,IAAI;AAC1B,aAAO,KAAK,UAAU,IAAI;AAAA,IAC5B,GAAG,cAAc;AAAA,EACnB;AAAA,EAEA,SAAS,MAAc,YAA+B;AACpD,SAAK,SAAS,MAAM,aAAa,MAAM;AAtE3C;AAuEM,iBAAK,YAAY,KAAK,YAAY,SAAS,CAAC,MAA5C,mBAA+C,KAAK,SAAS,MAAM,KAAK,WAAW,QAAQ,UAAU;AAAA,IACvG,GAAG,MAAS;AAAA,EACd;AAAA,EAEA,uBAAuB;AA3EzB;AA4EI,YAAO,UAAK,YAAY,KAAK,YAAY,SAAS,CAAC,MAA5C,mBAA+C,KAAK;AAAA,EAC7D;AAAA,EAEA,mBAAmB,KAAa,OAA6B;AAC3D,SAAK,SAAS,MAAM,wBAAwB,MAAM;AAChD,UAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,MAAM,IAAI;AAChD,aAAK,SAAS,KAAK,gCAAgC,iDAAiD;AACpG;AAAA,MACF;AACA,WAAK,WAAW,mBAAmB,KAAK,KAAK;AAAA,IAC/C,GAAG,MAAS;AAAA,EACd;AAAA,EAEA,sBAAsB,KAAmB;AACvC,SAAK,SAAS,MAAM,2BAA2B,MAAM,KAAK,WAAW,sBAAsB,GAAG,GAAG,MAAS;AAAA,EAC5G;AAAA,EAEA,QAAQ,QAAgB,YAA+B;AACrD,SAAK,SAAS,MAAM,YAAY,MAAM,KAAK,MAAM,QAAQ,QAAQ,UAAU,GAAG,MAAS;AAAA,EACzF;AAAA,EAEA,YAAkB;AAChB,SAAK,SAAS,MAAM,cAAc,MAAM,KAAK,MAAM,UAAU,GAAG,MAAS;AAAA,EAC3E;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,WAAY;AACrB,UAAM,KAAK,SAAS,WAAW,SAAS,YAAY;AAClD,YAAM,QAAQ,IAAI;AAAA,QAChB,KAAK,QAAQ,eAAe,WAAW;AAAA,QACvC,KAAK,QAAQ,eAAe,WAAW;AAAA,MACzC,CAAC;AAAA,IACH,GAAG,MAAS;AAAA,EACd;AAAA,EAEA,WAA0B;AACxB,QAAI,KAAK,gBAAiB,QAAO,KAAK;AACtC,SAAK,kBAAkB,KAAK,SAAS,WAAW,YAAY,YAAY;AACtE,WAAK,aAAa;AAClB,iBAAW,QAAQ,CAAC,GAAG,KAAK,WAAW,GAAG;AACxC,aAAK,KAAK,aAAa,yBAAyB,IAAI;AACpD,aAAK,QAAQ,IAAI;AAAA,MACnB;AACA,iBAAW,WAAW,KAAK,QAAQ,OAAO,CAAC,EAAG,MAAK,SAAS,MAAM,WAAW,SAAS,MAAS;AAC/F,YAAM,QAAQ,IAAI;AAAA,QAChB,KAAK,QAAQ,eAAe,SAAS;AAAA,QACrC,KAAK,QAAQ,eAAe,SAAS;AAAA,MACvC,CAAC;AAAA,IACH,GAAG,MAAS;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,QAAQ,UAAoB,MAAe,YAA+B;AAChF,SAAK,SAAS,MAAM,OAAO,MAAM;AAC/B,UAAI,KAAK,cAAc,CAAC,KAAK,QAAQ,QAAS;AAC9C,YAAM,qBAAqB,gBAAgB,QAAQ,IAAI,WAAW;AAClE,UAAI,uBAAuB,SAAU,MAAK,SAAS,KAAK,wBAAwB,oBAAoB,OAAO,QAAQ,CAAC,cAAc;AAClI,WAAK,QAAQ,OAAO,KAAK;AAAA,QACvB,cAAc;AAAA,QACd,gBAAgB,gBAAgB,kBAAkB;AAAA,QAClD,MAAM,cAAc,IAAI;AAAA,QACxB,YAAY,KAAK,WAAW,QAAQ,UAAU;AAAA,MAChD,CAAC;AAAA,IACH,GAAG,MAAS;AAAA,EACd;AAAA,EAEQ,UAAU,MAA8B;AAC9C,WAAO;AAAA,MACL,cAAc,CAAC,KAAK,UAAU,KAAK,SAAS,MAAM,sBAAsB,MAAM,KAAK,KAAK,aAAa,KAAK,KAAc,GAAG,MAAS;AAAA,MACpI,UAAU,CAAC,MAAM,eAAe,KAAK,SAAS,MAAM,kBAAkB,MAAM,KAAK,KAAK,SAAS,MAAM,KAAK,WAAW,QAAQ,UAAU,CAAU,GAAG,MAAS;AAAA,MAC7J,WAAW,CAAC,QAAQ,YAAY,KAAK,SAAS,MAAM,mBAAmB,MAAM;AAC3E,aAAK,KAAK,UAAU,EAAE,MAAM,WAAW,UAAU,0BAAe,QAAQ,WAAW,OAAO,0BAAe,KAAK,0BAAe,OAAO,QAAQ,CAAC;AAAA,MAC/I,GAAG,MAAS;AAAA,MACZ,KAAK,MAAM,KAAK,QAAQ,IAAI;AAAA,IAC9B;AAAA,EACF;AAAA,EAEQ,QAAQ,MAAwB;AACtC,QAAI,KAAK,MAAO;AAChB,SAAK,QAAQ;AACb,iBAAa,KAAK,KAAK;AACvB,UAAM,QAAQ,KAAK,YAAY,QAAQ,IAAI;AAC3C,QAAI,SAAS,EAAG,MAAK,YAAY,OAAO,OAAO,CAAC;AAChD,SAAK,KAAK,IAAI;AAAA,EAChB;AAEF;AAEA,IAAM,iBAA6B;AAAA,EACjC,cAAc,MAAM;AAAA,EACpB,UAAU,MAAM;AAAA,EAChB,WAAW,MAAM;AAAA,EACjB,KAAK,MAAM;AACb;AAEA,SAAS,cAAc,MAAuB;AA3K9C;AA4KE,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,MAAI;AACF,YAAO,UAAK,UAAU,IAAI,MAAnB,YAAwB,OAAO,IAAI;AAAA,EAC5C,QAAQ;AACN,WAAO,OAAO,IAAI;AAAA,EACpB;AACF;;;ArB3JA,IAAI;AAEG,SAAS,MAAM,SAAiB,WAAmB,SAAmC;AAC3F,QAAM,WAAW,IAAI,cAAc;AACnC,SAAO,SAAS,MAAM,SAAS,MAAM;AACnC,UAAM,WAAW,kBAAkB;AACnC,QAAI,UAAU;AACZ,eAAS,KAAK,mBAAmB,0EAA0E;AAC3G,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,YAAY,YAAY,QAAQ,KAAK,MAAM,MAAM,OAAO,cAAc,YAAY,UAAU,KAAK,MAAM,IAAI;AACpH,eAAS,KAAK,2BAA2B,iDAAiD;AAC1F,aAAO,sBAAsB;AAAA,IAC/B;AAEA,UAAM,aAAa,iBAAiB,SAAS,QAAQ;AACrD,QAAI,CAAC,WAAY,QAAO,sBAAsB;AAE9C,UAAM,UAAU,IAAI,eAAe,WAAW,UAAU;AACxD,QAAI,CAAC,QAAQ,SAAS;AACpB,aAAO,kBAAkB,sBAAsB,CAAC;AAAA,IAClD;AAEA,UAAM,QAAQ,IAAI,oBAAoB,QAAQ;AAC9C,mBAAe,OAAO,WAAW,IAAI;AACrC,UAAM,oBAAoB,yBAAyB,UAAU;AAC7D,UAAM,aAAa,IAAI,eAAe,SAAS,OAAO,MAAM,yBAAyB,UAAU,CAAC;AAChG,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,GAAG,mBAAmB,cAAc,QAAQ,IAAI,mBAAmB,QAAQ,SAAS,GAAG,MAAM,mBAAmB,EAAE;AAAA,MACpH,MAAM,WAAW,QAAQ;AAAA,MACzB;AAAA,IACF;AACA,UAAM,uBAAuB,6BAA6B,YAAY;AAAA,MACpE,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AACD,UAAM,WAAW,IAAI,yBAAyB,SAAS,SAAS,OAAO,YAAY,UAAU,CAAC,CAAC;AAC/F,UAAM,UAAU;AAAA,MACd,GAAG,QAAQ;AAAA,MACX,4BAA4B,YAAY,MAAM,SAAS,qBAAqB,CAAC;AAAA,MAC7E,GAAG,qBAAqB,IAAI,CAAC,oBAAoB,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MAChF,GAAG,6BAA6B;AAAA,QAC9B,QAAQ,QAAQ;AAAA,QAChB,QAAQ,QAAQ;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,YAAY,MAAM,WAAW,QAAQ;AAAA,MACvC,CAAC;AAAA,IACH;AACA,aAAS,WAAW,OAAO;AAC3B,WAAO,kBAAkB,QAAQ;AAAA,EACnC,GAAG,sBAAsB,CAAC;AAC5B;AAEA,SAAS,eAAe,OAA4B,MAAgC;AAClF,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,QAAQ,IAAI;AAClB;AAAA,EACF;AACA,MAAI,QAAQ,OAAO,SAAS,SAAU,OAAM,QAAQ,KAAK,IAAI,KAAK,UAAU;AAC9E;AAEA,SAAS,oBAA6C;AACpD,SAAO,0CAAmB,OAAO,WAAW,cAAc,SAAY,OAAO;AAC/E;AAEA,SAAS,kBAAkB,UAAoC;AAC7D,MAAI;AACJ,QAAM,mBAAmB,SAAS,SAAS,KAAK,QAAQ;AACxD,WAAS,WAAW,MAAM;AACxB,kEAAoB,iBAAiB,EAAE,QAAQ,MAAM,oBAAoB,QAAQ,CAAC;AAClF,WAAO;AAAA,EACT;AACA,mBAAiB;AACjB,MAAI,OAAO,WAAW,YAAa,QAAO,sBAAsB;AAChE,SAAO;AACT;AAEA,SAAS,oBAAoB,UAA6B;AACxD,MAAI,mBAAmB,SAAU,kBAAiB;AAClD,MAAI,OAAO,WAAW,eAAe,OAAO,wBAAwB,SAAU,QAAO,OAAO;AAC9F;AAEO,IAAM,WAAW,EAAE,MAAM;AAChC,IAAO,gBAAQ;","names":["match","firstNonEmpty","brand","ExportResultCode","context","firstNonEmpty","_a","_b"]}