{
  "version": 3,
  "sources": ["../library/src/engine/consts.ts", "../library/src/utils/text.ts", "../library/src/engine/errors.ts", "../library/src/engine/csp.ts", "../library/src/utils/polyfills.ts", "../library/src/utils/paths.ts", "../library/src/engine/signals.ts", "../library/src/utils/dom.ts", "../library/src/engine/engine.ts", "../library/src/plugins/actions/peek.ts", "../library/src/plugins/actions/setAll.ts", "../library/src/plugins/actions/toggleAll.ts", "../library/src/plugins/actions/fetch.ts", "../library/src/plugins/attributes/attr.ts", "../library/src/plugins/attributes/bind.ts", "../library/src/plugins/attributes/class.ts", "../library/src/plugins/attributes/computed.ts", "../library/src/plugins/attributes/effect.ts", "../library/src/plugins/attributes/indicator.ts", "../library/src/utils/tags.ts", "../library/src/utils/timing.ts", "../library/src/utils/view-transitions.ts", "../library/src/plugins/attributes/init.ts", "../library/src/plugins/attributes/jsonSignals.ts", "../library/src/plugins/attributes/on.ts", "../library/src/utils/math.ts", "../library/src/plugins/attributes/onIntersect.ts", "../library/src/plugins/attributes/onInterval.ts", "../library/src/plugins/attributes/onSignalPatch.ts", "../library/src/plugins/attributes/ref.ts", "../library/src/plugins/attributes/show.ts", "../library/src/plugins/attributes/signals.ts", "../library/src/plugins/attributes/style.ts", "../library/src/plugins/attributes/text.ts", "../library/src/plugins/watchers/patchElements.ts", "../library/src/plugins/watchers/patchSignals.ts"],
  "sourcesContent": ["export const DATASTAR_FETCH_EVENT = 'datastar-fetch'\nexport const DATASTAR_PROP_CHANGE_EVENT = 'datastar-prop-change'\nexport const DATASTAR_READY_EVENT = 'datastar-ready'\nexport const DATASTAR_SCOPE_CHILDREN_EVENT = 'datastar-scope-children'\nexport const DATASTAR_SIGNAL_PATCH_EVENT = 'datastar-signal-patch'\nexport const DOCUMENT = document\nexport const HTMLInput = HTMLInputElement\nexport const MutationObserverClass = MutationObserver\n", "import { compileExpression } from '@engine/csp'\nimport type { Modifiers } from '@engine/types'\n\nexport const kebab = (str: string): string =>\n  str\n    .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n    .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n    .replace(/([a-z])([0-9]+)/gi, '$1-$2')\n    .replace(/([0-9]+)([a-z])/gi, '$1-$2')\n    .replace(/[\\s_]+/g, '-')\n    .toLowerCase()\n\nexport const camel = (str: string): string =>\n  kebab(str).replace(/-./g, (x) => x[1].toUpperCase())\n\nexport const snake = (str: string): string => kebab(str).replace(/-/g, '_')\n\nexport const pascal = (str: string): string =>\n  camel(str).replace(/(^.|(?<=\\.).)/g, (x) => x[0].toUpperCase())\n\nexport const title = (str: string): string =>\n  str.replace(/\\b\\w/g, (char) => char.toUpperCase())\n\nexport const isStringTrue = (value: unknown): value is string =>\n  typeof value === 'string' && value.trim() === 'true'\n\nconst RE_FUNCTION_LITERAL =\n  /^(?:(?:async\\s+)?function\\b|(?:async\\s*)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>)/\n\ntype JsStrToObjectOptions = {\n  reviveFunctionStrings?: boolean\n}\n\nconst evaluate = (source: string): any =>\n  compileExpression([], `return (${source})`)()\n\nexport const jsStrToObject = (\n  raw: string,\n  options: JsStrToObjectOptions = {},\n) => {\n  const { reviveFunctionStrings = false } = options\n  try {\n    if (!reviveFunctionStrings) return JSON.parse(raw)\n    return JSON.parse(raw, (_k, value) => {\n      if (typeof value !== 'string') return value\n      const trimmed = value.trim()\n      if (!RE_FUNCTION_LITERAL.test(trimmed)) return value\n      try {\n        const revived = evaluate(trimmed)\n        return typeof revived === 'function' ? revived : value\n      } catch {\n        return value\n      }\n    })\n  } catch {\n    // If JSON parsing fails, try to evaluate as a JavaScript object\n    // This is less safe and should be used with caution\n    return evaluate(raw)\n  }\n}\n\nconst caseFns: Record<string, (s: string) => string> = {\n  camel: (str) => str.replace(/-[a-z]/g, (x) => x[1].toUpperCase()),\n  snake: (str) => str.replace(/-/g, '_'),\n  pascal: (str) => str[0].toUpperCase() + caseFns.camel(str.slice(1)),\n}\n\nexport const modifyCasing = (\n  str: string,\n  mods: Modifiers,\n  defaultCase = 'camel',\n): string => {\n  for (const c of mods.get('case') || [defaultCase]) {\n    str = caseFns[c]?.(str) || str\n  }\n  return str\n}\n\nexport const aliasify = (name: string) =>\n  ALIAS ? `data-${ALIAS}-${name}` : `data-${name}`\n\nexport const unaliasify = (name: string) => {\n  if (!ALIAS) return name\n  if (!name.startsWith(`${ALIAS}-`)) return null\n  return name.slice(ALIAS.length + 1)\n}\n", "import { snake } from '@utils/text'\n\nconst url = 'https://data-star.dev/errors'\n\nexport const createError = (\n  ctx: Record<string, any>,\n  reason: string,\n  metadata: Record<string, any> = {},\n): Error => {\n  Object.assign(metadata, ctx)\n  const r = snake(reason)\n  const q = new URLSearchParams({\n    metadata: JSON.stringify(metadata),\n  }).toString()\n  const c = JSON.stringify(metadata, null, 2)\n  return new Error(`${reason}\\nMore info: ${url}/${r}?${q}\\nContext: ${c}`)\n}\n", "import { DOCUMENT } from '@engine/consts'\nimport { createError } from '@engine/errors'\nimport { aliasify } from '@utils/text'\n\ntype ExpressionFn = (...args: any[]) => any\n\nconst nonceAttribute = aliasify('nonce')\nconst root = DOCUMENT.documentElement\nconst pageNonce = root.getAttribute(nonceAttribute)\n\nconst cspEnabled = pageNonce !== null\n\nlet policy: any\nif (cspEnabled) {\n  if (!pageNonce) {\n    throw createError({}, 'NonceRequired')\n  }\n  root.removeAttribute(nonceAttribute)\n  policy = (window as any).trustedTypes?.createPolicy('datastar', {\n    createHTML: (html: string) => html,\n    createScript: (script: string) => script,\n  })\n}\n\nexport const prepareScript = (\n  script: HTMLScriptElement,\n  content: string,\n): void => {\n  if (cspEnabled) script.nonce = pageNonce!\n  script.text = policy ? policy.createScript(content) : content\n}\n\nexport const createHTML = (html: string): any =>\n  policy ? policy.createHTML(html) : html\n\nconst compiledExpressions = new Map<string, ExpressionFn>()\n\nexport const compileExpression = (\n  argNames: string[],\n  expression: string,\n): ExpressionFn => {\n  if (!cspEnabled) return Function(...argNames, expression) as ExpressionFn\n\n  const source = `function(${argNames.join(',')}){${expression}\\n}`\n  const cached = compiledExpressions.get(source)\n  if (cached) return cached\n\n  const script = DOCUMENT.createElement('script')\n  prepareScript(script, `document.currentScript.x=${source}`)\n  DOCUMENT.head.appendChild(script)\n  script.remove()\n\n  const compiled = (script as any).x as ExpressionFn | undefined\n  if (!compiled) {\n    throw new Error('Blocked by CSP.')\n  }\n  compiledExpressions.set(source, compiled)\n  return compiled\n}\n", "export const hasOwn: (obj: object, prop: PropertyKey) => boolean =\n  // @ts-expect-error\n  Object.hasOwn ?? Object.prototype.hasOwnProperty.call\n", "import type { Paths } from '@engine/types'\nimport { hasOwn } from '@utils/polyfills'\n\nexport const isPojo = (obj: any): obj is Record<string, any> =>\n  obj !== null &&\n  typeof obj === 'object' &&\n  (Object.getPrototypeOf(obj) === Object.prototype ||\n    Object.getPrototypeOf(obj) === null)\n\nexport const isEmpty = (obj: Record<string, any>): boolean => {\n  for (const prop in obj) {\n    if (hasOwn(obj, prop)) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const updateLeaves = (\n  obj: Record<string, any>,\n  fn: (oldValue: any) => any,\n) => {\n  for (const key in obj) {\n    const val = obj[key]\n    if (isPojo(val) || Array.isArray(val)) {\n      updateLeaves(val, fn)\n    } else {\n      obj[key] = fn(val)\n    }\n  }\n}\n\nexport const pathToObj = (paths: Paths): Record<string, any> => {\n  const result: Record<string, any> = {}\n  for (const [path, value] of paths) {\n    const keys = path.split('.')\n    const lastKey = keys.pop()!\n    const obj = keys.reduce((acc, key) => (acc[key] ??= {}), result)\n    obj[lastKey] = value\n  }\n  return result\n}\n", "import { DATASTAR_SIGNAL_PATCH_EVENT, DOCUMENT } from '@engine/consts'\nimport type {\n  Computed,\n  Effect,\n  JSONPatch,\n  MergePatchArgs,\n  Paths,\n  Signal,\n  SignalFilterOptions,\n} from '@engine/types'\nimport { isPojo, pathToObj } from '@utils/paths'\nimport { hasOwn } from '@utils/polyfills'\n\ninterface ReactiveNode {\n  deps_?: Link\n  depsTail_?: Link\n  subs_?: Link\n  subsTail_?: Link\n  flags_: ReactiveFlags\n}\n\ninterface Link {\n  version_: number\n  dep_: ReactiveNode\n  sub_: ReactiveNode\n  prevSub_?: Link\n  nextSub_?: Link\n  prevDep_?: Link\n  nextDep_?: Link\n}\n\ninterface Stack<T> {\n  value_: T\n  prev_?: Stack<T>\n}\n\nenum ReactiveFlags {\n  None = 0,\n  Mutable = 1 << 0,\n  Watching = 1 << 1,\n  RecursedCheck = 1 << 2,\n  Recursed = 1 << 3,\n  Dirty = 1 << 4,\n  Pending = 1 << 5,\n}\n\nenum EffectFlags {\n  Queued = 1 << 6,\n}\n\ninterface AlienEffect extends ReactiveNode {\n  fn_(): void\n}\n\ninterface AlienComputed<T = unknown> extends ReactiveNode {\n  value_?: T\n  getter_(previousValue?: T): T\n}\n\ninterface AlienSignal<T = unknown> extends ReactiveNode {\n  previousValue_: T\n  value_: T\n}\n\nconst currentPatch: Paths = []\nconst queuedEffects: (AlienEffect | undefined)[] = []\nlet batchDepth = 0\nlet notifyIndex = 0\nlet queuedEffectsLength = 0\nlet subStack: Stack<ReactiveNode | undefined> | undefined\nlet activeSub: ReactiveNode | undefined\nlet version = 0\n\nexport const beginBatch = (): void => {\n  batchDepth++\n}\n\nexport const endBatch = (): void => {\n  if (!--batchDepth) {\n    flush()\n    dispatch()\n  }\n}\n\nexport const startPeeking = (sub?: ReactiveNode): void => {\n  subStack = {\n    value_: activeSub,\n    prev_: subStack,\n  }\n  activeSub = sub\n}\n\nexport const stopPeeking = (): void => {\n  activeSub = subStack?.value_\n  subStack = subStack?.prev_\n}\n\nexport const signal = <T>(initialValue?: T): Signal<T> => {\n  return signalOper.bind(0, {\n    previousValue_: initialValue,\n    value_: initialValue,\n    flags_: 1 satisfies ReactiveFlags.Mutable,\n  }) as Signal<T>\n}\n\nconst computedSymbol = Symbol('computed')\nexport const computed = <T>(getter: (previousValue?: T) => T): Computed<T> => {\n  const c = computedOper.bind(0, {\n    flags_: 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty,\n    getter_: getter,\n  }) as Computed<T>\n  // @ts-expect-error\n  c[computedSymbol] = 1\n  return c\n}\n\nexport const effect = (fn: () => void): Effect => {\n  const e: AlienEffect = {\n    fn_: fn,\n    flags_: 2 satisfies ReactiveFlags.Watching,\n  }\n  if (activeSub) {\n    link(e, activeSub)\n  }\n  startPeeking(e)\n  beginBatch()\n  try {\n    e.fn_()\n  } finally {\n    endBatch()\n    stopPeeking()\n  }\n  return effectOper.bind(0, e)\n}\n\nconst flush = () => {\n  while (notifyIndex < queuedEffectsLength) {\n    const effect = queuedEffects[notifyIndex]!\n    queuedEffects[notifyIndex++] = undefined\n    run(effect, (effect.flags_ &= ~EffectFlags.Queued))\n  }\n  notifyIndex = 0\n  queuedEffectsLength = 0\n}\n\nconst update = (signal: AlienSignal | AlienComputed): boolean => {\n  if ('getter_' in signal) {\n    return updateComputed(signal)\n  }\n  return updateSignal(signal, signal.value_)\n}\n\nconst updateComputed = (c: AlienComputed): boolean => {\n  startPeeking(c)\n  startTracking(c)\n  try {\n    const oldValue = c.value_\n    return oldValue !== (c.value_ = c.getter_(oldValue))\n  } finally {\n    stopPeeking()\n    endTracking(c)\n  }\n}\n\nconst updateSignal = <T>(s: AlienSignal<T>, value: T): boolean => {\n  s.flags_ = 1 satisfies ReactiveFlags.Mutable\n  return s.previousValue_ !== (s.previousValue_ = value)\n}\n\nconst notify = (e: AlienEffect): void => {\n  const flags = e.flags_\n  if (!(flags & EffectFlags.Queued)) {\n    e.flags_ = flags | EffectFlags.Queued\n    const subs = e.subs_\n    if (subs) {\n      notify(subs.sub_ as AlienEffect)\n    } else {\n      queuedEffects[queuedEffectsLength++] = e\n    }\n  }\n}\n\nconst run = (e: AlienEffect, flags: ReactiveFlags): void => {\n  if (\n    flags & (16 satisfies ReactiveFlags.Dirty) ||\n    (flags & (32 satisfies ReactiveFlags.Pending) && checkDirty(e.deps_!, e))\n  ) {\n    startPeeking(e)\n    startTracking(e)\n    beginBatch()\n    try {\n      e.fn_()\n    } finally {\n      endBatch()\n      stopPeeking()\n      endTracking(e)\n    }\n    return\n  }\n  if (flags & (32 satisfies ReactiveFlags.Pending)) {\n    e.flags_ = flags & ~(32 satisfies ReactiveFlags.Pending)\n  }\n  let link = e.deps_\n  while (link) {\n    const dep = link.dep_\n    const depFlags = dep.flags_\n    if (depFlags & EffectFlags.Queued) {\n      run(dep as AlienEffect, (dep.flags_ = depFlags & ~EffectFlags.Queued))\n    }\n    link = link.nextDep_\n  }\n}\n\nconst signalOper = <T>(s: AlienSignal<T>, ...value: [T]): T | boolean => {\n  if (value.length) {\n    if (s.value_ !== (s.value_ = value[0])) {\n      s.flags_ = 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty\n      const subs = s.subs_\n      if (subs) {\n        propagate(subs)\n        if (!batchDepth) {\n          flush()\n        }\n      }\n      return true\n    }\n    return false\n  }\n  const currentValue = s.value_\n  if (s.flags_ & (16 satisfies ReactiveFlags.Dirty)) {\n    if (updateSignal(s, currentValue)) {\n      const subs_ = s.subs_\n      if (subs_) {\n        shallowPropagate(subs_)\n      }\n    }\n  }\n  if (activeSub) {\n    link(s, activeSub)\n  }\n  return currentValue\n}\n\nconst computedOper = <T>(c: AlienComputed<T>): T => {\n  const flags = c.flags_\n  if (\n    flags & (16 satisfies ReactiveFlags.Dirty) ||\n    (flags & (32 satisfies ReactiveFlags.Pending) && checkDirty(c.deps_!, c))\n  ) {\n    if (updateComputed(c)) {\n      const subs = c.subs_\n      if (subs) {\n        shallowPropagate(subs)\n      }\n    }\n  } else if (flags & (32 satisfies ReactiveFlags.Pending)) {\n    c.flags_ = flags & ~(32 satisfies ReactiveFlags.Pending)\n  }\n  if (activeSub) {\n    link(c, activeSub)\n  }\n  return c.value_!\n}\n\nconst effectOper = (e: AlienEffect): void => {\n  let dep = e.deps_\n  while (dep) {\n    dep = unlink(dep, e)\n  }\n  const sub = e.subs_\n  if (sub) {\n    unlink(sub)\n  }\n  e.flags_ = 0 satisfies ReactiveFlags.None\n}\n\nconst link = (dep: ReactiveNode, sub: ReactiveNode): void => {\n  const prevDep = sub.depsTail_\n  if (prevDep && prevDep.dep_ === dep) {\n    return\n  }\n  const nextDep = prevDep ? prevDep.nextDep_ : sub.deps_\n  if (nextDep && nextDep.dep_ === dep) {\n    nextDep.version_ = version\n    sub.depsTail_ = nextDep\n    return\n  }\n  const prevSub = dep.subsTail_\n  if (prevSub && prevSub.version_ === version && prevSub.sub_ === sub) {\n    return\n  }\n  const newLink =\n    (sub.depsTail_ =\n    dep.subsTail_ =\n      {\n        version_: version,\n        dep_: dep,\n        sub_: sub,\n        prevDep_: prevDep,\n        nextDep_: nextDep,\n        prevSub_: prevSub,\n      })\n  if (nextDep) {\n    nextDep.prevDep_ = newLink\n  }\n  if (prevDep) {\n    prevDep.nextDep_ = newLink\n  } else {\n    sub.deps_ = newLink\n  }\n  if (prevSub) {\n    prevSub.nextSub_ = newLink\n  } else {\n    dep.subs_ = newLink\n  }\n}\n\nconst unlink = (link: Link, sub = link.sub_): Link | undefined => {\n  const dep_ = link.dep_\n  const prevDep_ = link.prevDep_\n  const nextDep_ = link.nextDep_\n  const nextSub_ = link.nextSub_\n  const prevSub_ = link.prevSub_\n  if (nextDep_) {\n    nextDep_.prevDep_ = prevDep_\n  } else {\n    sub.depsTail_ = prevDep_\n  }\n  if (prevDep_) {\n    prevDep_.nextDep_ = nextDep_\n  } else {\n    sub.deps_ = nextDep_\n  }\n  if (nextSub_) {\n    nextSub_.prevSub_ = prevSub_\n  } else {\n    dep_.subsTail_ = prevSub_\n  }\n  if (prevSub_) {\n    prevSub_.nextSub_ = nextSub_\n  } else if (!(dep_.subs_ = nextSub_)) {\n    if ('getter_' in dep_) {\n      let toRemove = dep_.deps_\n      if (toRemove) {\n        dep_.flags_ = 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty\n        do {\n          toRemove = unlink(toRemove, dep_)\n        } while (toRemove)\n      }\n    } else if (!('previousValue_' in dep_)) {\n      effectOper(dep_ as AlienEffect)\n    }\n  }\n  return nextDep_\n}\n\nconst propagate = (link: Link): void => {\n  let next = link.nextSub_\n  let stack: Stack<Link | undefined> | undefined\n\n  top: while (true) {\n    const sub = link.sub_\n\n    let flags = sub.flags_\n\n    if (\n      !(\n        flags &\n        (60 as\n          | ReactiveFlags.RecursedCheck\n          | ReactiveFlags.Recursed\n          | ReactiveFlags.Dirty\n          | ReactiveFlags.Pending)\n      )\n    ) {\n      sub.flags_ = flags | (32 satisfies ReactiveFlags.Pending)\n    } else if (\n      !(flags & (12 as ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed))\n    ) {\n      flags = 0 satisfies ReactiveFlags.None\n    } else if (!(flags & (4 satisfies ReactiveFlags.RecursedCheck))) {\n      sub.flags_ =\n        (flags & ~(8 satisfies ReactiveFlags.Recursed)) |\n        (32 satisfies ReactiveFlags.Pending)\n    } else if (\n      !(flags & (48 as ReactiveFlags.Dirty | ReactiveFlags.Pending)) &&\n      isValidLink(link, sub)\n    ) {\n      sub.flags_ =\n        flags | (40 as ReactiveFlags.Recursed | ReactiveFlags.Pending)\n      flags &= 1 satisfies ReactiveFlags.Mutable\n    } else {\n      flags = 0 satisfies ReactiveFlags.None\n    }\n\n    if (flags & (2 satisfies ReactiveFlags.Watching)) {\n      notify(sub as AlienEffect)\n    }\n\n    if (flags & (1 satisfies ReactiveFlags.Mutable)) {\n      const subSubs = sub.subs_\n      if (subSubs) {\n        const nextSub = (link = subSubs).nextSub_\n        if (nextSub) {\n          stack = { value_: next, prev_: stack }\n          next = nextSub\n        }\n        continue\n      }\n    }\n\n    if ((link = next!)) {\n      next = link.nextSub_\n      continue\n    }\n\n    while (stack) {\n      link = stack.value_!\n      stack = stack.prev_\n      if (link) {\n        next = link.nextSub_\n        continue top\n      }\n    }\n\n    break\n  }\n}\n\nconst startTracking = (sub: ReactiveNode): void => {\n  version++\n  sub.depsTail_ = undefined\n  sub.flags_ =\n    (sub.flags_ &\n      ~(56 as\n        | ReactiveFlags.Recursed\n        | ReactiveFlags.Dirty\n        | ReactiveFlags.Pending)) |\n    (4 satisfies ReactiveFlags.RecursedCheck)\n}\n\nconst endTracking = (sub: ReactiveNode): void => {\n  const depsTail_ = sub.depsTail_\n  let toRemove = depsTail_ ? depsTail_.nextDep_ : sub.deps_\n  while (toRemove) {\n    toRemove = unlink(toRemove, sub)\n  }\n  sub.flags_ &= ~(4 satisfies ReactiveFlags.RecursedCheck)\n}\n\nconst checkDirty = (link: Link, sub: ReactiveNode): boolean => {\n  let stack: Stack<Link> | undefined\n  let checkDepth = 0\n  let dirty = false\n\n  top: while (true) {\n    const dep = link.dep_\n    const flags = dep.flags_\n\n    if (sub.flags_ & (16 satisfies ReactiveFlags.Dirty)) {\n      dirty = true\n    } else if (\n      (flags & (17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty)) ===\n      (17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty)\n    ) {\n      if (update(dep as AlienSignal | AlienComputed)) {\n        const subs = dep.subs_!\n        if (subs.nextSub_) {\n          shallowPropagate(subs)\n        }\n        dirty = true\n      }\n    } else if (\n      (flags & (33 as ReactiveFlags.Mutable | ReactiveFlags.Pending)) ===\n      (33 as ReactiveFlags.Mutable | ReactiveFlags.Pending)\n    ) {\n      if (link.nextSub_ || link.prevSub_) {\n        stack = { value_: link, prev_: stack }\n      }\n      link = dep.deps_!\n      sub = dep\n      ++checkDepth\n      continue\n    }\n\n    if (!dirty) {\n      const nextDep = link.nextDep_\n      if (nextDep) {\n        link = nextDep\n        continue\n      }\n    }\n\n    while (checkDepth--) {\n      const firstSub = sub.subs_!\n      const hasMultipleSubs = firstSub.nextSub_\n      if (hasMultipleSubs) {\n        link = stack!.value_\n        stack = stack!.prev_\n      } else {\n        link = firstSub\n      }\n      if (dirty) {\n        if (update(sub as AlienSignal | AlienComputed)) {\n          if (hasMultipleSubs) {\n            shallowPropagate(firstSub)\n          }\n          sub = link.sub_\n          continue\n        }\n        dirty = false\n      } else {\n        sub.flags_ &= ~(32 satisfies ReactiveFlags.Pending)\n      }\n      sub = link.sub_\n      if (link.nextDep_) {\n        link = link.nextDep_\n        continue top\n      }\n    }\n\n    return dirty\n  }\n}\n\nconst shallowPropagate = (link: Link): void => {\n  do {\n    const sub = link.sub_\n    const flags = sub.flags_\n    if (\n      (flags & (48 as ReactiveFlags.Pending | ReactiveFlags.Dirty)) ===\n      (32 satisfies ReactiveFlags.Pending)\n    ) {\n      sub.flags_ = flags | (16 satisfies ReactiveFlags.Dirty)\n      if (flags & (2 satisfies ReactiveFlags.Watching)) {\n        notify(sub as AlienEffect)\n      }\n    }\n  } while ((link = link.nextSub_!))\n}\n\nconst isValidLink = (checkLink: Link, sub: ReactiveNode): boolean => {\n  let link = sub.depsTail_\n  while (link) {\n    if (link === checkLink) {\n      return true\n    }\n    link = link.prevDep_\n  }\n  return false\n}\n\nexport const getPath = <T = any>(path: string): T | undefined => {\n  let result = root\n  const split = path.split('.')\n  for (const path of split) {\n    if (result == null || !hasOwn(result, path)) {\n      return\n    }\n    result = result[path]\n  }\n  return result as T\n}\n\nconst deep = (value: any, prefix = ''): any => {\n  const isArr = Array.isArray(value)\n  if (isArr || isPojo(value)) {\n    const deepObj = (isArr ? [] : {}) as Record<string, Signal<any>>\n    for (const key in value) {\n      deepObj[key] = signal(\n        deep((value as Record<string, Signal<any>>)[key], `${prefix + key}.`),\n      )\n    }\n    const keys = signal(0)\n    return new Proxy(deepObj, {\n      get(_, prop: string) {\n        // JSON.stringify calls `.toJSON()` directly instead of checking if it exists on the object\n        // so we have to check if `toJSON` is being called and prevent a signal from automatically\n        // being made so JSON.stringify can fallback to the default stringify\n        if (!(prop === 'toJSON' && !hasOwn(deepObj, prop))) {\n          // special case for when prop is an array function because every array function needs to\n          // be reactive to when the keys change\n          if (isArr && prop in Array.prototype) {\n            keys()\n            return deepObj[prop]\n          }\n          // if prop is a symbol just return the symbol because we don't want to make up that theres\n          // an iterator symbol on an object or not\n          if (typeof prop === 'symbol') {\n            return deepObj[prop]\n          }\n          // if obj doesnt have prop OR prop is null or undefined then create a signal and default\n          // to an empty string\n          if (!hasOwn(deepObj, prop) || deepObj[prop]() == null) {\n            deepObj[prop] = signal('')\n            dispatch(prefix + prop, '')\n            keys(keys() + 1)\n          }\n          return deepObj[prop]()\n        }\n      },\n      set(_, prop: string, newValue) {\n        const path = prefix + prop\n        // special case for when setting length so we can make a diff patch\n        if (isArr && prop === 'length') {\n          const oldLength = deepObj[prop] as unknown as number\n          deepObj[prop] = newValue\n          // Setting an array\u2019s length bypasses the `deleteProperty` trap, so manually patch removed indexes.\n          if (oldLength > newValue) {\n            const patch: Record<string, any> = {}\n            for (let i = newValue; i < oldLength; i++) {\n              patch[i] = null\n            }\n            dispatch(prefix.slice(0, -1), patch)\n            keys(keys() + 1)\n          }\n        } else if (hasOwn(deepObj, prop)) {\n          if (newValue == null) {\n            delete deepObj[prop]\n            dispatch(path, null)\n            keys(keys() + 1)\n            // if newValue is a computed set the computed directly instead of wrapping in signal\n          } else if (hasOwn(newValue, computedSymbol)) {\n            deepObj[prop] = newValue\n            dispatch(path, '')\n            // if prop changed after setting it then dispatch\n          } else {\n            const currentValue = deepObj[prop]()\n            const pathStr = `${path}.`\n            if (isPojo(currentValue) && isPojo(newValue)) {\n              for (const key in currentValue) {\n                if (!hasOwn(newValue, key)) {\n                  delete currentValue[key]\n                  dispatch(pathStr + key, null)\n                }\n              }\n              for (const key in newValue) {\n                const nextVal = newValue[key]\n                if (currentValue[key] !== nextVal) {\n                  currentValue[key] = nextVal\n                }\n              }\n            } else if (deepObj[prop](deep(newValue, pathStr))) {\n              dispatch(path, newValue)\n            }\n          }\n          // if newValue is null or undefined then noop\n        } else if (newValue != null) {\n          // if newValue is a computed set the computed directly instead of wrapping in signal\n          if (hasOwn(newValue, computedSymbol)) {\n            deepObj[prop] = newValue\n            dispatch(path, '')\n          } else {\n            deepObj[prop] = signal(deep(newValue, `${path}.`))\n            dispatch(path, newValue)\n          }\n          keys(keys() + 1)\n        }\n\n        return true\n      },\n      deleteProperty(_, prop: string) {\n        delete deepObj[prop]\n        keys(keys() + 1)\n        return true\n      },\n      ownKeys() {\n        keys()\n        return Reflect.ownKeys(deepObj)\n      },\n      has(_, prop) {\n        keys()\n        return prop in deepObj\n      },\n    })\n  }\n  return value\n}\n\nconst dispatch = (path?: string, value?: any) => {\n  if (path !== undefined && value !== undefined) {\n    currentPatch.push([path, value])\n  }\n  if (!batchDepth && currentPatch.length) {\n    const detail = pathToObj(currentPatch)\n    currentPatch.length = 0\n    DOCUMENT.dispatchEvent(\n      new CustomEvent<JSONPatch>(DATASTAR_SIGNAL_PATCH_EVENT, {\n        detail,\n      }),\n    )\n  }\n}\n\nexport const mergePatch = (\n  patch: JSONPatch,\n  { ifMissing }: MergePatchArgs = {},\n): void => {\n  beginBatch()\n  for (const key in patch) {\n    if (patch[key] == null) {\n      if (!ifMissing) {\n        delete root[key]\n      }\n    } else {\n      mergeInner(patch[key], key, root, '', ifMissing)\n    }\n  }\n  endBatch()\n}\n\nexport const mergePaths = (paths: Paths, options?: MergePatchArgs): void =>\n  mergePatch(pathToObj(paths), options)\n\nconst mergeInner = (\n  patch: any,\n  target: string,\n  targetParent: Record<string, any>,\n  prefix: string,\n  ifMissing: boolean | undefined,\n): void => {\n  if (isPojo(patch)) {\n    if (\n      !(\n        hasOwn(targetParent, target) &&\n        (isPojo(targetParent[target]) || Array.isArray(targetParent[target]))\n      )\n    ) {\n      targetParent[target] = {}\n    }\n\n    for (const key in patch) {\n      if (patch[key] == null) {\n        if (!ifMissing) {\n          delete targetParent[target][key]\n        }\n      } else {\n        mergeInner(\n          patch[key],\n          key,\n          targetParent[target],\n          `${prefix + target}.`,\n          ifMissing,\n        )\n      }\n    }\n  } else if (!(ifMissing && hasOwn(targetParent, target))) {\n    targetParent[target] = patch\n  }\n}\n\nconst toRegExp = (val: string | RegExp): RegExp =>\n  typeof val === 'string' ? RegExp(val.replace(/^\\/|\\/$/g, '')) : val\n\n/**\n * Filters the root store based on an include and exclude RegExp\n *\n * @returns The filtered object\n */\nexport const filtered = (\n  { include = /.*/, exclude = /(?!)/ }: SignalFilterOptions = {},\n  obj: JSONPatch = root,\n): Record<string, any> => {\n  const includeRe = toRegExp(include)\n  const excludeRe = toRegExp(exclude)\n  const paths: Paths = []\n\n  const walk = (node: JSONPatch, prefix = '') => {\n    for (const key in node) {\n      const path = prefix + key\n      if (isPojo(node[key])) {\n        walk(node[key], `${path}.`)\n      } else if (includeRe.test(path) && !excludeRe.test(path)) {\n        paths.push([path, getPath(path)])\n      }\n    }\n  }\n\n  walk(obj)\n\n  return pathToObj(paths)\n}\n\nexport const root: Record<string, any> = deep({})\n", "import type { HTMLOrSVG } from '@engine/types'\n\nexport const isHTMLOrSVG = (el: Node): el is HTMLOrSVG =>\n  el instanceof HTMLElement ||\n  el instanceof SVGElement ||\n  el instanceof MathMLElement\n", "import {\n  DATASTAR_FETCH_EVENT,\n  DATASTAR_READY_EVENT,\n  DOCUMENT,\n  MutationObserverClass,\n} from '@engine/consts'\nimport { compileExpression } from '@engine/csp'\nimport { createError } from '@engine/errors'\nimport { root } from '@engine/signals'\nimport type {\n  ActionContext,\n  ActionPlugin,\n  AttributeContext,\n  AttributePlugin,\n  DatastarFetchEvent,\n  HTMLOrSVG,\n  Modifiers,\n  Requirement,\n  WatcherPlugin,\n} from '@engine/types'\nimport { isHTMLOrSVG } from '@utils/dom'\nimport { aliasify, unaliasify } from '@utils/text'\n\nconst actionPlugins: Map<string, ActionPlugin> = new Map()\nconst attributePlugins: Map<string, AttributePlugin> = new Map()\nconst watcherPlugins: Map<string, WatcherPlugin> = new Map()\n\nexport const actions: Record<\n  string,\n  (ctx: ActionContext, ...args: any[]) => any\n> = new Proxy(\n  {},\n  {\n    get: (_, prop: string) => actionPlugins.get(prop)?.apply,\n    has: (_, prop: string) => actionPlugins.has(prop),\n    ownKeys: () => Reflect.ownKeys(actionPlugins),\n    set: () => false,\n    deleteProperty: () => false,\n  },\n)\n\n// Map of cleanups keyed by element, attribute name, and cleanup name\nconst removals = new Map<HTMLOrSVG, Map<string, Map<string, () => void>>>()\n\nconst queuedAttributes: AttributePlugin[] = []\nconst queuedAttributeNames = new Set<string>()\nconst observedRoots = new Set<HTMLOrSVG | ShadowRoot>()\nlet datastarReadyDispatched = false\n\nexport const attribute = <R extends Requirement, B extends boolean>(\n  plugin: AttributePlugin<R, B>,\n): void => {\n  queuedAttributes.push(plugin as unknown as AttributePlugin)\n\n  if (queuedAttributes.length === 1) {\n    setTimeout(() => {\n      for (const attribute of queuedAttributes) {\n        queuedAttributeNames.add(attribute.name)\n        attributePlugins.set(attribute.name, attribute)\n      }\n      queuedAttributes.length = 0\n      const roots = observedRoots.size\n        ? [...observedRoots]\n        : [DOCUMENT.documentElement]\n      for (const root of roots) {\n        applyQueued(root, !observedRoots.has(root))\n      }\n      queuedAttributeNames.clear()\n    })\n  }\n}\n\nexport const action = <T>(plugin: ActionPlugin<T>): void => {\n  actionPlugins.set(plugin.name, plugin)\n}\n\nDOCUMENT.addEventListener(DATASTAR_FETCH_EVENT, ((\n  evt: CustomEvent<DatastarFetchEvent>,\n) => {\n  const plugin = watcherPlugins.get(evt.detail.type)\n  if (plugin) {\n    plugin.apply(\n      {\n        error: createError.bind(0, {\n          plugin: { type: 'watcher', name: plugin.name },\n          element: {\n            id: (evt.target as Element).id,\n            tag: (evt.target as Element).tagName,\n          },\n        }),\n      },\n      evt.detail.argsRaw,\n    )\n  }\n}) as EventListener)\n\nexport const watcher = (plugin: WatcherPlugin): void => {\n  watcherPlugins.set(plugin.name, plugin)\n}\n\nconst cleanupEls = (els: Iterable<HTMLOrSVG>): void => {\n  for (const el of els) {\n    const elCleanups = removals.get(el)\n    if (elCleanups && removals.delete(el)) {\n      for (const attrCleanups of elCleanups.values()) {\n        for (const cleanup of attrCleanups.values()) {\n          cleanup()\n        }\n      }\n    }\n  }\n}\n\nconst aliasedIgnore = aliasify('ignore')\nconst aliasedIgnoreAttr = `[${aliasedIgnore}]`\nconst shouldIgnore = (el: HTMLOrSVG) =>\n  el.hasAttribute(`${aliasedIgnore}__self`) || !!el.closest(aliasedIgnoreAttr)\n\nconst applyEls = (els: Iterable<HTMLOrSVG>, onlyNew?: boolean): void => {\n  for (const el of els) {\n    if (!shouldIgnore(el)) {\n      const appliedKeys = new Set<string>()\n      for (const key in el.dataset) {\n        const attrKey = key.replace(/[A-Z]/g, '-$&').toLowerCase()\n        appliedKeys.add(attrKey)\n        applyAttributePlugin(el, attrKey, el.dataset[key]!, onlyNew)\n      }\n      for (const attr of Array.from(el.attributes)) {\n        if (!attr.name.startsWith('data-')) continue\n        const attrKey = attr.name.slice(5)\n        if (appliedKeys.has(attrKey)) continue\n        applyAttributePlugin(el, attrKey, attr.value, onlyNew)\n      }\n    }\n  }\n}\n\nconst observe = (mutations: MutationRecord[]) => {\n  for (const {\n    target,\n    type,\n    attributeName,\n    addedNodes,\n    removedNodes,\n  } of mutations) {\n    if (type === 'childList') {\n      for (const node of removedNodes) {\n        if (isHTMLOrSVG(node)) {\n          cleanupEls([node])\n          cleanupEls(node.querySelectorAll<HTMLOrSVG>('*'))\n        }\n      }\n\n      for (const node of addedNodes) {\n        if (isHTMLOrSVG(node)) {\n          applyEls([node])\n          applyEls(node.querySelectorAll<HTMLOrSVG>('*'))\n        }\n      }\n    } else if (\n      type === 'attributes' &&\n      attributeName!.startsWith('data-') &&\n      isHTMLOrSVG(target) &&\n      !shouldIgnore(target)\n    ) {\n      // skip over 'data-'\n      const rawAttrKey = attributeName!.slice(5)\n      const key = unaliasify(rawAttrKey)\n      if (!key) continue\n      const value = target.getAttribute(attributeName!)\n      if (value === null) {\n        const elCleanups = removals.get(target)\n        if (elCleanups) {\n          const attrCleanups = elCleanups.get(key)\n          if (attrCleanups) {\n            for (const cleanup of attrCleanups.values()) {\n              cleanup()\n            }\n            elCleanups.delete(key)\n          }\n        }\n      } else {\n        applyAttributePlugin(target, rawAttrKey, value)\n      }\n    }\n  }\n}\n\n// TODO: mutation observer per root so applying to web component doesnt overwrite main observer\nconst mutationObserver = new MutationObserverClass(observe)\n\nexport const parseAttributeKey = (\n  rawKey: string,\n): {\n  pluginName: string\n  key: string | undefined\n  mods: Modifiers\n} => {\n  const [namePart, ...rawModifiers] = rawKey.split('__')\n  const [pluginName, key] = namePart.split(/:(.+)/)\n  const mods: Modifiers = new Map()\n\n  for (const rawMod of rawModifiers) {\n    const [label, ...mod] = rawMod.split('.')\n    mods.set(label, new Set(mod))\n  }\n\n  return { pluginName, key, mods }\n}\n\nexport const isDocumentObserverActive = () =>\n  observedRoots.has(DOCUMENT.documentElement)\n\nconst dispatchDatastarReady = () => {\n  if (datastarReadyDispatched || !isDocumentObserverActive()) return\n  datastarReadyDispatched = true\n  DOCUMENT.dispatchEvent(new Event(DATASTAR_READY_EVENT))\n}\n\nconst applyQueued = (\n  root: HTMLOrSVG | ShadowRoot = DOCUMENT.documentElement,\n  observeRoot = true,\n): void => {\n  if (isHTMLOrSVG(root)) {\n    applyEls([root], true)\n  }\n  applyEls(root.querySelectorAll<HTMLOrSVG>('*'), true)\n\n  if (observeRoot) {\n    mutationObserver.observe(root, {\n      subtree: true,\n      childList: true,\n      attributes: true,\n    })\n    observedRoots.add(root)\n    dispatchDatastarReady()\n  }\n}\n\nexport const apply = (\n  root: HTMLOrSVG | ShadowRoot = DOCUMENT.documentElement,\n  observeRoot = true,\n): void => {\n  if (isHTMLOrSVG(root)) {\n    applyEls([root])\n  }\n  applyEls(root.querySelectorAll<HTMLOrSVG>('*'))\n\n  if (observeRoot) {\n    mutationObserver.observe(root, {\n      subtree: true,\n      childList: true,\n      attributes: true,\n    })\n    observedRoots.add(root)\n    dispatchDatastarReady()\n  }\n}\n\nexport const applyElement = (el: HTMLOrSVG, onlyNew = false): void => {\n  applyEls([el], onlyNew)\n}\n\nconst applyAttributePlugin = (\n  el: HTMLOrSVG,\n  attrKey: string,\n  value: string,\n  onlyNew?: boolean,\n): void => {\n  const rawKey = unaliasify(attrKey)\n  if (!rawKey) return\n  const { pluginName, key, mods } = parseAttributeKey(rawKey)\n  const plugin = attributePlugins.get(pluginName)\n  const shouldApply =\n    (!onlyNew || queuedAttributeNames.has(pluginName)) && !!plugin\n  if (shouldApply) {\n    const ctx = {\n      el,\n      rawKey,\n      mods,\n      error: createError.bind(0, {\n        plugin: { type: 'attribute', name: plugin.name },\n        element: { id: el.id, tag: el.tagName },\n        expression: { rawKey, key, value },\n      }),\n      key,\n      value,\n      loadedPluginNames: {\n        actions: new Set(actionPlugins.keys()),\n        attributes: new Set(attributePlugins.keys()),\n      },\n      rx: undefined,\n    } as AttributeContext\n\n    const keyReq =\n      (plugin.requirement &&\n        (typeof plugin.requirement === 'string'\n          ? plugin.requirement\n          : plugin.requirement.key)) ||\n      'allowed'\n    const valueReq =\n      (plugin.requirement &&\n        (typeof plugin.requirement === 'string'\n          ? plugin.requirement\n          : plugin.requirement.value)) ||\n      'allowed'\n\n    const keyProvided = key !== undefined && key !== null && key !== ''\n    const valueProvided = value !== undefined && value !== null && value !== ''\n\n    if (keyProvided) {\n      if (keyReq === 'denied') {\n        throw ctx.error('KeyNotAllowed')\n      }\n    } else if (keyReq === 'must') {\n      throw ctx.error('KeyRequired')\n    }\n\n    if (valueProvided) {\n      if (valueReq === 'denied') {\n        throw ctx.error('ValueNotAllowed')\n      }\n    } else if (valueReq === 'must') {\n      throw ctx.error('ValueRequired')\n    }\n\n    if (keyReq === 'exclusive' || valueReq === 'exclusive') {\n      if (keyProvided && valueProvided) {\n        throw ctx.error('KeyAndValueProvided')\n      }\n      if (!keyProvided && !valueProvided) {\n        throw ctx.error('KeyOrValueRequired')\n      }\n    }\n\n    const cleanups = new Map<string, () => void>()\n    if (valueProvided) {\n      let cachedRx: GenRxFn\n      ctx.rx = (...args: any[]) => {\n        if (!cachedRx) {\n          cachedRx = genRx(value, {\n            returnsValue_: plugin.returnsValue,\n            argNames_: plugin.argNames,\n            cleanups_: cleanups,\n          })\n        }\n        return cachedRx(el, ...args)\n      }\n    }\n\n    const cleanup = plugin.apply(ctx)\n    if (cleanup) {\n      cleanups.set('attribute', cleanup)\n    }\n\n    let elCleanups = removals.get(el)\n    if (elCleanups) {\n      const attrCleanups = elCleanups.get(rawKey)\n      if (attrCleanups) {\n        for (const oldCleanup of attrCleanups.values()) {\n          oldCleanup()\n        }\n      }\n    } else {\n      elCleanups = new Map()\n      removals.set(el, elCleanups)\n    }\n    elCleanups.set(rawKey, cleanups)\n  }\n}\n\ntype GenRxOptions = {\n  returnsValue_?: boolean\n  argNames_?: string[]\n  cleanups_?: Map<string, () => void>\n}\n\ntype GenRxFn = <T>(el: HTMLOrSVG, ...args: any[]) => T\n\nconst signalPath = (name: string): string =>\n  name\n    .split('.')\n    .reduce((path, part) => `${path}['${part}']`, '$')\n\nexport const genRx = (\n  value: string,\n  {\n    returnsValue_: returnsValue = false,\n    argNames_: argNames = [],\n    cleanups_: cleanups = new Map(),\n  }: GenRxOptions = {},\n): GenRxFn => {\n  let expr = ''\n  if (returnsValue) {\n    // This regex allows Datastar expressions to support nested\n    // regex and strings that contain ; without breaking.\n    //\n    // Each of these regex defines a block type we want to match\n    // (importantly we ignore the content within these blocks):\n    //\n    // regex              \\/(?:\\\\\\/|[^\\/])*\\/\n    // double quotes      \"(?:\\\\\"|[^\\\"])*\"\n    // single quotes      '(?:\\\\'|[^'])*'\n    // ticks              `(?:\\\\`|[^`])*`\n    // iife               \\(\\s*(?:(?:function)\\s*\\(\\s*\\)|(?:\\(\\s*\\))\\s*=>)\\s*(?:\\{[\\s\\S]*?\\}|[^;)\\{]*)\\s*\\)\\s*\\(\\s*\\)\n    //\n    // The iife support is (intentionally) limited. It only supports\n    // function and arrow syntax with no arguments, and no nested IIFEs.\n    //\n    // We also want to match the non delimiter part of statements\n    // note we only support ; statement delimiters:\n    // [^;]\n    //\n    // Optimized using non-capturing groups (?:...) to prevent unnecessary backtracking.\n    const statementRe =\n      /(?:\\/(?:\\\\\\/|[^/])*\\/|\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|`(?:\\\\`|[^`])*`|\\(\\s*(?:(?:function)\\s*\\(\\s*\\)|(?:\\(\\s*\\))\\s*=>)\\s*(?:\\{[\\s\\S]*?\\}|[^;){]*)\\s*\\)\\s*\\(\\s*\\)|[^;])+/gm\n    const statements = value.trim().match(statementRe)\n    if (statements) {\n      const lastIdx = statements.length - 1\n      const last = statements[lastIdx].trim()\n      if (!last.startsWith('return')) {\n        statements[lastIdx] = `return (${last});`\n      }\n      expr = statements.join(';\\n')\n    }\n  } else {\n    expr = value.trim()\n  }\n\n  // Replace signal references with bracket notation and action calls with the internal action dispatcher.\n  // Examples:\n  //   $count          -> $['count']\n  //   $count--        -> $['count']--\n  //   $foo.bar        -> $['foo']['bar']\n  //   $foo-bar        -> $['foo-bar']\n  //   $foo.bar-baz    -> $['foo']['bar-baz']\n  //   $foo-$bar       -> $['foo']-$['bar']\n  //   $arr[$index]    -> $['arr'][$['index']]\n  //   $['foo']        -> $['foo']\n  //   $foo[obj.bar]   -> $['foo'][obj.bar]\n  //   $foo['bar.baz'] -> $['foo']['bar.baz']\n  //   $123            -> $['123']\n  //   $foo.0.name     -> $['foo']['0']['name']\n  //   @get('/foo')    -> __action(\"get\",evt,'/foo')\n\n  // Skip replacements inside string/template literals.\n  // Template interpolation support rewrites `${...}` only when braces are non-nested.\n  expr = expr.replace(\n    /(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'|`[^`\\\\$]*(?:(?:\\\\.|\\$(?!\\{))[^`\\\\$]*)*`)|\\$\\{([^{}]*)\\}|\\$(\\w+(?:[.-]\\w+)*)|@([A-Za-z_$][\\w$]*)\\(/g,\n    (match, interpolationExpr, signalName, actionName) => {\n      if (interpolationExpr !== undefined) {\n        return `\\${${interpolationExpr\n          .replace(\n            /\\$(\\w+(?:[.-]\\w+)*)/g,\n            (_: string, name: string) => signalPath(name),\n          )\n          .replace(/@([A-Za-z_$][\\w$]*)\\(/g, '__action(\"$1\",evt,')}}`\n      }\n      if (signalName) return signalPath(signalName)\n      if (actionName) return `__action(\"${actionName}\",evt,`\n      return match\n    },\n  )\n\n  try {\n    const fn = compileExpression(\n      ['el', '$', '__action', 'evt', ...argNames],\n      expr,\n    )\n    return (el: HTMLOrSVG, ...args: any[]) => {\n      const action = (name: string, evt: Event | undefined, ...args: any[]) => {\n        const err = createError.bind(0, {\n          plugin: { type: 'action', name },\n          element: { id: el.id, tag: el.tagName },\n          expression: {\n            fnContent: expr,\n            value,\n          },\n        })\n        const fn = actions[name]\n        if (fn) {\n          return fn(\n            {\n              el,\n              evt,\n              error: err,\n              cleanups,\n            },\n            ...args,\n          )\n        }\n        throw err('UndefinedAction')\n      }\n      try {\n        return fn(el, root, action, undefined, ...args)\n      } catch (e: any) {\n        console.error(e)\n        throw createError(\n          {\n            element: { id: el.id, tag: el.tagName },\n            expression: {\n              fnContent: expr,\n              value,\n            },\n            error: e.message,\n          },\n          'ExecuteExpression',\n        )\n      }\n    }\n  } catch (e: any) {\n    console.error(e)\n    throw createError(\n      {\n        expression: {\n          fnContent: expr,\n          value,\n        },\n        error: e.message,\n      },\n      'GenerateExpression',\n    )\n  }\n}\n", "// Icon: ion:eye\n// Slug: Access signals without subscribing to changes.\n// Description: Allows accessing signals without subscribing to their changes in expressions.\n\nimport { action } from '@engine'\nimport { startPeeking, stopPeeking } from '@engine/signals'\n\naction({\n  name: 'peek',\n  apply(_, fn: () => any) {\n    startPeeking()\n    try {\n      return fn()\n    } finally {\n      stopPeeking()\n    }\n  },\n})\n", "// Icon: ion:checkmark-round\n// Slug: Sets the value of all matching signals.\n// Description: Sets the value of all matching signals (or all signals if no filter is used) to the expression provided in the first argument.\n\nimport { action } from '@engine'\nimport {\n  filtered,\n  mergePatch,\n  startPeeking,\n  stopPeeking,\n} from '@engine/signals'\nimport type { SignalFilterOptions } from '@engine/types'\nimport { updateLeaves } from '@utils/paths'\n\naction({\n  name: 'setAll',\n  apply(_, value: any, filter: SignalFilterOptions) {\n    // peek because in an effect you would be subscribing to signals and then setting them which\n    // would cause an infinite loop and why would you want to infinite loop on purpose\n    startPeeking()\n    const masked = filtered(filter)\n    updateLeaves(masked, () => value)\n    mergePatch(masked)\n    stopPeeking()\n  },\n})\n", "// Icon: material-symbols:toggle-off\n// Slug: Toggles the value of all matching signals.\n// Description: Toggles the boolean value of all matching signals (or all signals if no filter is used).\n\nimport { action } from '@engine'\nimport {\n  filtered,\n  mergePatch,\n  startPeeking,\n  stopPeeking,\n} from '@engine/signals'\nimport type { SignalFilterOptions } from '@engine/types'\nimport { updateLeaves } from '@utils/paths'\n\naction({\n  name: 'toggleAll',\n  apply(_, filter: SignalFilterOptions) {\n    // peek because in an effect you would be subscribing to signals and then setting them which\n    // would cause an infinite loop and why would you want to infinite loop on purpose\n    startPeeking()\n    const masked = filtered(filter)\n    updateLeaves(masked, (oldValue: any) => !oldValue)\n    mergePatch(masked)\n    stopPeeking()\n  },\n})\n", "// Icon: mdi:arrow\n// Slug: Sends fetch requests to the backend.\n// Description: Sends fetch requests to the backend and handles responses.\n\nimport { action } from '@engine'\nimport {\n  DATASTAR_FETCH_EVENT,\n  DOCUMENT,\n  HTMLInput,\n} from '@engine/consts'\nimport { prepareScript } from '@engine/csp'\nimport { filtered, startPeeking, stopPeeking } from '@engine/signals'\nimport type {\n  DatastarFetchEvent,\n  HTMLOrSVG,\n  SignalFilterOptions,\n  WatcherArgs,\n} from '@engine/types'\nimport { kebab } from '@utils/text'\n\n// Map of abort controllers keyed by method and URL\nconst abortControllers = new Map<string, Map<string, AbortController>>()\nconst methodSupportsRequestBody = (method: string): boolean =>\n  !['GET', 'DELETE'].includes(method)\n\nconst createHttpMethod = (\n  name: string,\n  method: string,\n  openWhenHiddenDefault: boolean = true,\n): void =>\n  action({\n    name,\n    apply: async (\n      { el, evt, error, cleanups },\n      url: string,\n      {\n        selector,\n        headers: userHeaders,\n        contentType = 'json',\n        filterSignals: { include = /.*/, exclude = /(^|\\.)_/ } = {},\n        openWhenHidden = openWhenHiddenDefault,\n        payload,\n        requestCancellation = 'auto',\n        retry = 'auto',\n        retryInterval = 1_000,\n        retryScaler = 2,\n        retryMaxWait = 30_000,\n        retryMaxCount = 10,\n      }: FetchArgs = {},\n    ) => {\n      const controller =\n        requestCancellation instanceof AbortController\n          ? requestCancellation\n          : new AbortController()\n      const cleanupName = `@${name}`\n      const cancelOnDisconnect = requestCancellation === 'cleanup'\n      let requestCleanup: (() => void) | undefined\n      if (requestCancellation === 'auto' || cancelOnDisconnect) {\n        const controllers = abortControllers.get(method) ?? new Map()\n        controllers.get(url)?.abort()\n        controllers.set(url, controller)\n        abortControllers.set(method, controllers)\n      }\n      if (cancelOnDisconnect) {\n        cleanups.get(cleanupName)?.()\n        requestCleanup = async () => {\n          controller.abort()\n          // wait one tick for FINISHED to fire\n          await Promise.resolve()\n        }\n        cleanups.set(cleanupName, requestCleanup)\n      }\n\n      let cleanupFn = () => {}\n\n      try {\n        if (!url?.length) {\n          throw error('FetchNoUrlProvided', { action })\n        }\n\n        const headers: Record<string, any> = {\n          Accept: 'text/event-stream, text/html, application/json',\n          'Datastar-Request': true,\n        }\n        if (contentType === 'json' && methodSupportsRequestBody(method)) {\n          headers['Content-Type'] = 'application/json'\n        }\n        Object.assign(headers, userHeaders)\n\n        // We ignore the content-type header if using form data\n        // if missing the boundary will be set automatically\n\n        const req: FetchEventSourceInit = {\n          input_: '',\n          method,\n          headers,\n          openWhenHidden_: openWhenHidden,\n          retry_: retry,\n          retryInterval_: retryInterval,\n          retryScaler_: retryScaler,\n          retryMaxWait_: retryMaxWait,\n          retryMaxCount_: retryMaxCount,\n          signal: controller.signal,\n          onopen_: async (response: Response) => {\n            if (response.status >= 400) {\n              dispatchFetch(ERROR, el, { status: response.status.toString() })\n            }\n          },\n          onmessage_: (evt) => {\n            if (!evt.event_.startsWith('datastar')) return\n            const type = evt.event_\n            const argsRawLines: Record<string, string[]> = {}\n\n            for (const line of evt.data_.split('\\n')) {\n              const i = line.indexOf(' ')\n              const k = line.slice(0, i)\n              const v = line.slice(i + 1)\n              ;(argsRawLines[k] ||= []).push(v)\n            }\n\n            const argsRaw = Object.fromEntries(\n              Object.entries(argsRawLines).map(([k, v]) => [k, v.join('\\n')]),\n            )\n\n            if (!cancelOnDisconnect || el.isConnected) {\n              dispatchFetch(type, el, argsRaw)\n            }\n          },\n          onerror: (err) => {\n            if (isWrongContent(err)) {\n              // don't retry if the content-type is wrong\n              throw error('FetchExpectedTextEventStream', { url })\n            }\n          },\n        }\n\n        const buildFetchEventSourceInit = () => {\n          const urlInstance = new URL(url, DOCUMENT.baseURI)\n          const queryParams = new URLSearchParams(urlInstance.search)\n          if (contentType === 'json') {\n            startPeeking()\n            const requestPayload =\n              payload !== undefined ? payload : filtered({ include, exclude })\n            stopPeeking()\n            const body = JSON.stringify(requestPayload)\n            if (methodSupportsRequestBody(method)) {\n              req.body = body\n            } else {\n              queryParams.set('datastar', body)\n            }\n          } else if (contentType === 'form') {\n            const formEl = (\n              selector ? DOCUMENT.querySelector(selector) : el.closest('form')\n            ) as HTMLFormElement\n            if (!formEl) {\n              throw error('FetchFormNotFound', { action, selector })\n            }\n\n            // Validate the form\n            if (!formEl.noValidate && !formEl.checkValidity()) {\n              formEl.reportValidity()\n              return\n            }\n\n            // Collect the form data\n            const formData = new FormData(formEl)\n            let submitter = el as HTMLElement | null\n\n            if (el === formEl && evt instanceof SubmitEvent) {\n              // Get the submitter from the event\n              submitter = evt.submitter\n            } else {\n              // Prevent the form being submitted\n              const preventDefault = (evt: Event) => evt.preventDefault()\n              formEl.addEventListener('submit', preventDefault)\n              cleanupFn = () => {\n                formEl.removeEventListener('submit', preventDefault)\n              }\n            }\n\n            // Append the value of the form submitter if it is a valid submitter and has a name\n            if (\n              submitter instanceof HTMLButtonElement ||\n              (submitter instanceof HTMLInput &&\n                submitter.type === 'submit')\n            ) {\n              const name = submitter.getAttribute('name')\n              if (name) formData.append(name, submitter.value)\n            }\n\n            const multipart =\n              formEl.getAttribute('enctype') === 'multipart/form-data'\n            // Leave the `Content-Type` header empty for multipart encoding so the browser can set it automatically with the correct boundary\n            if (!multipart) {\n              headers['Content-Type'] = 'application/x-www-form-urlencoded'\n            }\n\n            const formParams = new URLSearchParams(formData as any)\n            if (methodSupportsRequestBody(method)) {\n              req.body = multipart ? formData : formParams\n            } else {\n              for (const [key, value] of formParams) {\n                queryParams.append(key, value)\n              }\n            }\n          } else {\n            throw error('FetchInvalidContentType', { action, contentType })\n          }\n          urlInstance.search = queryParams.toString()\n          req.input_ = urlInstance.toString()\n          return req\n        }\n\n        dispatchFetch(STARTED, el, {})\n\n        try {\n          await fetchEventSource(\n            el,\n            buildFetchEventSourceInit,\n            cancelOnDisconnect,\n          )\n        } catch (err: any) {\n          if (!isWrongContent(err)) {\n            throw error('FetchFailed', { method, url, error: err.message })\n          }\n          // exit gracefully and do nothing if the content-type is wrong\n          // this can happen if the client is sending a request\n          // where no response is expected, and they haven\u2019t\n          // set the content-type to text/event-stream\n        }\n      } finally {\n        dispatchFetch(FINISHED, el, {})\n        cleanupFn()\n        if (cleanups.get(cleanupName) === requestCleanup) {\n          cleanups.delete(cleanupName)\n        }\n      }\n    },\n  })\n\ncreateHttpMethod('get', 'GET', false)\ncreateHttpMethod('patch', 'PATCH')\ncreateHttpMethod('post', 'POST')\ncreateHttpMethod('put', 'PUT')\ncreateHttpMethod('query', 'QUERY')\ncreateHttpMethod('delete', 'DELETE')\n\nexport const STARTED = 'started'\nexport const FINISHED = 'finished'\nexport const ERROR = 'error'\nexport const RETRYING = 'retrying'\nexport const RETRIES_FAILED = 'retries-failed'\n\nconst dispatchFetch = (type: string, el: HTMLOrSVG, argsRaw: WatcherArgs) =>\n  DOCUMENT.dispatchEvent(\n    new CustomEvent<DatastarFetchEvent>(DATASTAR_FETCH_EVENT, {\n      detail: { type, el, argsRaw },\n    }),\n  )\n\nconst isWrongContent = (err: any) => `${err}`.includes('text/event-stream')\n\ntype ResponseOverrides =\n  | {\n      selector?: string\n      mode?: string\n      namespace?: string\n      useViewTransition?: boolean\n    }\n  | {\n      onlyIfMissing?: boolean\n    }\n\nexport type FetchArgs = {\n  selector?: string\n  headers?: Record<string, string>\n  contentType?: 'json' | 'form'\n  filterSignals?: SignalFilterOptions\n  openWhenHidden?: boolean\n  payload?: any\n  requestCancellation?: 'auto' | 'cleanup' | 'disabled' | AbortController\n  responseOverrides?: ResponseOverrides\n  retry?: 'auto' | 'error' | 'always' | 'never'\n  retryInterval?: number\n  retryScaler?: number\n  retryMaxWait?: number\n  retryMaxCount?: number\n}\n\n// Below originally from https://github.com/Azure/fetch-event-source/blob/main/LICENSE\n\n/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\n\ninterface EventSourceMessage {\n  id_: string\n  event_: string\n  data_: string\n  retry_?: number\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nconst getBytes = async (\n  stream: ReadableStream<Uint8Array>,\n  onChunk: (arr: Uint8Array) => void,\n): Promise<void> => {\n  const reader = stream.getReader()\n  let result = await reader.read()\n  while (!result.done) {\n    onChunk(result.value)\n    result = await reader.read()\n  }\n}\n\nconst getLines = (onLine: (line: Uint8Array, fieldLength: number) => void) => {\n  let buffer: Uint8Array | undefined\n  let position: number // current read position\n  let fieldLength: number // length of the `field` portion of the line\n  let discardTrailingNewline = false\n\n  // return a function that can process each incoming byte chunk:\n  return (arr: Uint8Array) => {\n    if (!buffer) {\n      buffer = arr\n      position = 0\n      fieldLength = -1\n    } else {\n      // we're still parsing the old line. Append the new bytes into buffer:\n      const next = new Uint8Array(buffer.length + arr.length)\n      next.set(buffer)\n      next.set(arr, buffer.length)\n      buffer = next\n    }\n\n    const bufLength = buffer.length\n    let lineStart = 0 // index where the current line starts\n    while (position < bufLength) {\n      if (discardTrailingNewline) {\n        if (buffer[position] === 10) lineStart = ++position // skip to next char\n        discardTrailingNewline = false\n      }\n\n      // start looking forward till the end of line:\n      let lineEnd = -1 // index of the \\r or \\n char\n      for (; position < bufLength && lineEnd === -1; ++position) {\n        switch (buffer[position]) {\n          case 58: // :\n            if (fieldLength === -1) {\n              // first colon in line\n              fieldLength = position - lineStart\n            }\n            break\n          // @ts-expect-error:7029 \\r case below should fallthrough to \\n:\n          // biome-ignore lint/suspicious/noFallthroughSwitchClause: intentional fallthrough for CR to LF\n          case 13: // \\r\n            discardTrailingNewline = true\n          case 10: // \\n\n            lineEnd = position\n            break\n        }\n      }\n\n      if (lineEnd === -1) break // Wait for the next arr and then continue parsing\n\n      // we've reached the line end, send it out:\n      onLine(buffer.subarray(lineStart, lineEnd), fieldLength)\n      lineStart = position // we're now on the next line\n      fieldLength = -1\n    }\n\n    if (lineStart === bufLength)\n      buffer = undefined // we've finished reading it\n    else if (lineStart) {\n      // Create a new view into buffer beginning at lineStart so we don't\n      // need to copy over the previous lines when we get the new arr:\n      buffer = buffer.subarray(lineStart)\n      position -= lineStart\n    }\n  }\n}\n\nconst getMessages = (\n  onId: (id: string) => void,\n  onRetry: (retry: number) => void,\n  onMessage?: (msg: EventSourceMessage) => void,\n): ((line: Uint8Array, fieldLength: number) => void) => {\n  let message = newMessage()\n  const decoder = new TextDecoder()\n\n  // return a function that can process each incoming line buffer:\n  return (line, fieldLength) => {\n    if (!line.length) {\n      // empty line denotes end of message. Trigger the callback and start a new message:\n      onMessage?.(message)\n      message = newMessage()\n    } else if (fieldLength > 0) {\n      // exclude comments and lines with no values\n      // line is of format \"<field>:<value>\" or \"<field>: <value>\"\n      // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n      const field = decoder.decode(line.subarray(0, fieldLength))\n      const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1)\n      const value = decoder.decode(line.subarray(valueOffset))\n\n      switch (field) {\n        case 'data':\n          message.data_ = message.data_\n            ? `${message.data_}\\n${value}`\n            : value\n          break\n        case 'event':\n          message.event_ = value\n          break\n        case 'id':\n          onId((message.id_ = value))\n          break\n        case 'retry': {\n          const retry = +value\n          if (!Number.isNaN(retry)) {\n            // per spec, ignore non-integers\n            onRetry((message.retry_ = retry))\n          }\n          break\n        }\n      }\n    }\n  }\n}\n\nconst newMessage = (): EventSourceMessage => ({\n  // data, event, and id must be initialized to empty strings:\n  // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n  // retry should be initialized to undefined so we return a consistent shape\n  // to the js engine all the time: https://mathiasbynens.be/notes/shapes-ics#takeaways\n  data_: '',\n  event_: '',\n  id_: '',\n  retry_: undefined,\n})\n\ntype FetchEventSourceInit =\n  | (RequestInit & {\n      input_: RequestInfo\n      headers?: Record<string, string>\n      onopen_: (response: Response) => Promise<void>\n      onmessage_: (ev: EventSourceMessage) => void\n      onerror?: (err: any) => void\n      openWhenHidden_: boolean\n      retry_: 'auto' | 'error' | 'always' | 'never'\n      retryInterval_: number\n      retryScaler_: number\n      retryMaxWait_: number\n      retryMaxCount_: number\n      responseOverrides_?: ResponseOverrides\n    })\n  | undefined\n\nconst fetchEventSource = (\n  el: HTMLOrSVG,\n  buildFetchEventSourceInit: () => FetchEventSourceInit,\n  cancelOnDisconnect: boolean,\n): Promise<void> => {\n  return new Promise<void>((resolve, reject) => {\n    const fetchInit = buildFetchEventSourceInit()\n    if (!fetchInit) {\n      return\n    }\n    let {\n      input_: input,\n      signal: inputSignal,\n      headers: inputHeaders,\n      onopen_: inputOnOpen,\n      onmessage_: onmessage,\n      openWhenHidden_: openWhenHidden,\n      retry_: retry,\n      retryInterval_: retryInterval,\n      retryScaler_: retryScaler,\n      retryMaxWait_: retryMaxWait,\n      retryMaxCount_: retryMaxCount,\n      responseOverrides_: responseOverrides,\n      ...rest\n    }: FetchEventSourceInit = fetchInit\n\n    // make a copy of the input headers since we may modify it below:\n    const headers: Record<string, string> = {\n      ...inputHeaders,\n    }\n\n    let curRequestController: AbortController\n\n    const rebuildAndRetry = () => {\n      const currentFetchInit = buildFetchEventSourceInit()\n      if (!currentFetchInit) return\n\n      input = currentFetchInit.input_\n      rest.body = currentFetchInit.body\n      create()\n    }\n\n    const onVisibilityChange = () => {\n      curRequestController.abort()\n      if (!DOCUMENT.hidden) {\n        rebuildAndRetry()\n      }\n    }\n\n    if (!openWhenHidden) {\n      DOCUMENT.addEventListener('visibilitychange', onVisibilityChange)\n    }\n\n    let retryTimer: ReturnType<typeof setTimeout> | undefined\n    const dispose = () => {\n      DOCUMENT.removeEventListener('visibilitychange', onVisibilityChange)\n      clearTimeout(retryTimer)\n      curRequestController.abort()\n    }\n\n    // if the incoming signal aborts, dispose resources and resolve:\n    inputSignal!.addEventListener('abort', () => {\n      dispose()\n      resolve() // don't waste time constructing/logging errors\n    })\n\n    const onopen = inputOnOpen\n\n    let retries = 0\n    let baseRetryInterval = retryInterval\n\n    const retryRequest = () => {\n      if (retries < retryMaxCount) {\n        dispatchFetch(RETRYING, el, {})\n        clearTimeout(retryTimer)\n        retryTimer = setTimeout(rebuildAndRetry, retryInterval)\n        retries++\n        // Prepare the interval for the next retry (exponential backoff)\n        retryInterval = Math.min(retryInterval * retryScaler, retryMaxWait)\n      } else {\n        dispatchFetch(RETRIES_FAILED, el, {})\n        dispose()\n        reject('Max retries reached.')\n      }\n    }\n\n    const create = async () => {\n      curRequestController = new AbortController()\n      const curRequestSignal = curRequestController.signal\n      try {\n        const response = await fetch(input, {\n          ...rest,\n          headers,\n          signal: curRequestSignal,\n        })\n\n        await onopen(response)\n\n        const dispatchNonSSE = async (\n          dispatchType: string,\n          response: Response,\n          name: string,\n          responseOverrides?: ResponseOverrides,\n          ...argNames: string[]\n        ) => {\n          const argsRaw: WatcherArgs = {\n            [name]: await response.text(),\n          }\n          for (const n of argNames) {\n            let v = response.headers.get(`datastar-${kebab(n)}`)\n            if (responseOverrides) {\n              const o = (responseOverrides as any)[n]\n              if (o) v = typeof o === 'string' ? o : JSON.stringify(o)\n            }\n            if (v) argsRaw[n] = v\n          }\n          if (!cancelOnDisconnect || el.isConnected) {\n            dispatchFetch(dispatchType, el, argsRaw)\n          }\n          dispose()\n          resolve()\n        }\n\n        const status = response.status\n        const isNoContentStatus = status === 204\n        const isRedirectStatus = status >= 300 && status < 400\n        const isErrorStatus = status >= 400 && status < 600\n\n        if (status !== 200) {\n          if (\n            retry !== 'never' &&\n            !isNoContentStatus &&\n            !isRedirectStatus &&\n            (retry === 'always' || (retry === 'error' && isErrorStatus))\n          ) {\n            retryRequest()\n            return\n          }\n          dispose()\n          resolve()\n          return\n        }\n\n        // on successful connection, reset the retry logic\n        retries = 0\n        retryInterval = baseRetryInterval\n\n        const ct = response.headers.get('Content-Type')\n        if (ct?.includes('text/html')) {\n          return await dispatchNonSSE(\n            'datastar-patch-elements',\n            response,\n            'elements',\n            responseOverrides,\n            'selector',\n            'mode',\n            'namespace',\n            'useViewTransition',\n          )\n        }\n\n        if (ct?.includes('application/json')) {\n          return await dispatchNonSSE(\n            'datastar-patch-signals',\n            response,\n            'signals',\n            responseOverrides,\n            'onlyIfMissing',\n          )\n        }\n\n        if (ct?.includes('text/javascript')) {\n          const script = DOCUMENT.createElement('script')\n          const scriptAttributesHeader = response.headers.get(\n            'datastar-script-attributes',\n          )\n\n          if (scriptAttributesHeader) {\n            for (const [name, value] of Object.entries(\n              JSON.parse(scriptAttributesHeader),\n            )) {\n              script.setAttribute(name, value as string)\n            }\n          }\n          const content = await response.text()\n          prepareScript(script, content)\n          DOCUMENT.head.appendChild(script)\n          dispose()\n          return\n        }\n\n        await getBytes(\n          response.body!,\n          getLines(\n            getMessages(\n              (id) => {\n                if (id) {\n                  // signals the id and send it back on the next retry:\n                  headers['last-event-id'] = id\n                } else {\n                  // don't send the last-event-id header anymore:\n                  delete headers['last-event-id']\n                }\n              },\n              (retry) => {\n                baseRetryInterval = retryInterval = retry\n              },\n              onmessage,\n            ),\n          ),\n        )\n\n        if (retry === 'always' && !isRedirectStatus) {\n          retryRequest()\n          return\n        }\n\n        dispose()\n        resolve()\n      } catch {\n        if (!curRequestSignal.aborted) {\n          try {\n            retryRequest()\n          } catch (innerErr) {\n            dispose()\n            reject(innerErr)\n          }\n        }\n      }\n    }\n\n    create()\n  })\n}\n", "// Icon: material-symbols:edit-attributes-outline\n// Slug: Syncs the value of an attribute with an expression.\n// Description: Sets the value of any HTML attribute to an expression, and keeps it in sync.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\n\nattribute({\n  name: 'attr',\n  requirement: { value: 'must' },\n  returnsValue: true,\n  apply({ el, key, rx }) {\n    const syncAttr = (key: string, val: any) => {\n      if (val === '' || val === true) {\n        el.setAttribute(key, '')\n      } else if (val === false || val == null) {\n        el.removeAttribute(key)\n      } else if (typeof val === 'string') {\n        el.setAttribute(key, val)\n      } else if (typeof val === 'function') {\n        el.setAttribute(key, val.toString())\n      } else {\n        el.setAttribute(\n          key,\n          JSON.stringify(val, (_k, v) =>\n            typeof v === 'function' ? v.toString() : v,\n          ),\n        )\n      }\n    }\n\n    const update = key\n      ? () => {\n          observer.disconnect()\n          const val = rx() as string\n          syncAttr(key, val)\n          observer.observe(el, {\n            attributeFilter: [key],\n          })\n        }\n      : () => {\n          observer.disconnect()\n          const obj = rx() as Record<string, any>\n          const attributeFilter = Object.keys(obj)\n          for (const key of attributeFilter) {\n            syncAttr(key, obj[key])\n          }\n          observer.observe(el, {\n            attributeFilter,\n          })\n        }\n\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: akar-icons:link-chain\n// Slug: Creates a signal with two-way data binding.\n// Description: Creates a signal (if one doesn\u2019t already exist) and sets up two-way data binding between it and an element\u2019s value.\n\nimport { attribute } from '@engine'\nimport {\n  DATASTAR_PROP_CHANGE_EVENT,\n  DOCUMENT,\n  HTMLInput,\n  MutationObserverClass,\n} from '@engine/consts'\nimport { effect, getPath, mergePaths } from '@engine/signals'\nimport type { Paths } from '@engine/types'\nimport { hasOwn } from '@utils/polyfills'\nimport { aliasify, camel, modifyCasing } from '@utils/text'\n\ntype SignalFile = {\n  name: string\n  contents: string\n  mime: string\n}\n\ntype BindAdapter = {\n  get_: (el: any, type: string) => any\n  set_: (el: any, value: any) => void\n  events_: string[]\n}\n\nconst propAdapter = (prop: string, ...events: string[]): BindAdapter => ({\n  get_: (el: any) => el[prop],\n  set_: (el: any, value: any) => {\n    el[prop] = value\n  },\n  events_: events,\n})\n\nconst attrAdapter = (attr: string, ...events: string[]): BindAdapter => ({\n  get_: (el: Element) => el.getAttribute(attr),\n  set_: (el: Element, value: any) => {\n    el.setAttribute(attr, `${value}`)\n  },\n  events_: events,\n})\n\nconst valueAdapter = (\n  treatUndefinedAsString = false,\n  ...events: string[]\n): BindAdapter => ({\n  get_: (el: HTMLInputElement | HTMLSelectElement, type: string) =>\n    type === 'string' || (treatUndefinedAsString && type === 'undefined')\n      ? el.value\n      : +el.value,\n  set_: (el: HTMLInputElement | HTMLSelectElement, value: string | number) => {\n    el.value = `${value}`\n  },\n  events_: events,\n})\n\nconst selectAdapter = (): BindAdapter => {\n  const numbers = new Set<string>()\n  return {\n    get_: (el: HTMLSelectElement, type: string) =>\n      el.multiple\n        ? [...el.selectedOptions].map((option) =>\n            numbers.has(option.value) ? +option.value : option.value,\n          )\n        : type === 'string' || type === 'undefined'\n          ? el.value\n          : +el.value,\n    set_: (el: HTMLSelectElement, value: any) => {\n      if (!el.multiple) {\n        el.value = `${value}`\n        return\n      }\n      for (const option of el.options) {\n        if (value.includes(option.value)) {\n          numbers.delete(option.value)\n          option.selected = true\n        } else if (value.includes(+option.value)) {\n          numbers.add(option.value)\n          option.selected = true\n        } else {\n          option.selected = false\n        }\n      }\n    },\n    events_: ['change'],\n  }\n}\n\nconst dataURIRegex = /^data:(?<mime>[^;]+);base64,(?<contents>.*)$/\nconst empty = Symbol('empty')\n\nconst boundPath = (\n  el: Element,\n  key: string | null | undefined,\n  rawKey: string,\n  signalName: string,\n  adapter: BindAdapter,\n  initialValue: any,\n) => {\n  const rawAttribute = aliasify(CSS.escape(rawKey))\n  const selector = key\n    ? `[${rawAttribute}]`\n    : `[${rawAttribute}=\"${CSS.escape(signalName)}\"]`\n  if (\n    initialValue === undefined &&\n    el instanceof HTMLInput &&\n    el.type === 'radio'\n  ) {\n    const checked = [...DOCUMENT.querySelectorAll(selector)].find(\n      (input): input is HTMLInputElement =>\n        input instanceof HTMLInput && input.checked,\n    )\n    // Missing radio binds adopt the checked option.\n    if (checked) {\n      mergePaths([[signalName, checked.value]], { ifMissing: true })\n    }\n  }\n\n  if (\n    !Array.isArray(initialValue) ||\n    (el instanceof HTMLSelectElement && el.multiple)\n  ) {\n    mergePaths([[signalName, adapter.get_(el, typeof initialValue)]], {\n      ifMissing: true,\n    })\n    return signalName\n  }\n\n  const inputs = DOCUMENT.querySelectorAll(selector) as NodeListOf<Element>\n\n  const paths: Paths = []\n  let i = 0\n  for (const input of inputs) {\n    // Missing proxy slots materialize as '', which breaks `ifMissing`.\n    paths.push([\n      `${signalName}.${i}`,\n      adapter.get_(\n        input,\n        typeof (hasOwn(initialValue, i) ? initialValue[i] : undefined),\n      ),\n    ])\n    if (el === input) {\n      break\n    }\n    i++\n  }\n  mergePaths(paths, { ifMissing: true })\n  return `${signalName}.${i}`\n}\n\nattribute({\n  name: 'bind',\n  requirement: 'exclusive',\n  apply({ el, key, rawKey, mods, value, error }) {\n    const signalName = key != null ? modifyCasing(key, mods) : value\n\n    const props = mods.get('prop')\n    const events = mods.get('event')\n    let adapter: BindAdapter | null = null\n\n    if (el instanceof HTMLInput) {\n      switch (el.type) {\n        case 'range':\n        case 'number':\n          adapter = valueAdapter(false, 'input')\n          break\n        case 'checkbox':\n          adapter = {\n            get_: (el: HTMLInputElement, type: string) => {\n              if (el.value !== 'on') {\n                return type === 'boolean'\n                  ? el.checked\n                  : el.checked\n                    ? el.value\n                    : ''\n              }\n              return type === 'string'\n                ? el.checked\n                  ? el.value\n                  : ''\n                : el.checked\n            },\n            set_: (el: HTMLInputElement, value: string | boolean) => {\n              el.checked =\n                typeof value === 'string' ? value === el.value : value\n            },\n            events_: ['input'],\n          }\n          break\n        case 'radio':\n          if (!el.getAttribute('name')?.length) {\n            el.setAttribute('name', signalName)\n          }\n          adapter = {\n            get_: (el: HTMLInputElement, type: string) =>\n              el.checked ? (type === 'number' ? +el.value : el.value) : empty,\n            set_: (el: HTMLInputElement, value: string | number) => {\n              el.checked =\n                value === (typeof value === 'number' ? +el.value : el.value)\n            },\n            events_: ['input'],\n          }\n          break\n        case 'file': {\n          const syncSignal = () => {\n            const files = [...(el.files || [])]\n            const signalFiles: SignalFile[] = []\n            Promise.all(\n              files.map(\n                (f) =>\n                  new Promise<void>((resolve) => {\n                    const reader = new FileReader()\n                    reader.onload = () => {\n                      if (typeof reader.result !== 'string') {\n                        throw error('InvalidFileResultType', {\n                          resultType: typeof reader.result,\n                        })\n                      }\n                      const match = reader.result.match(dataURIRegex)\n                      if (!match?.groups) {\n                        throw error('InvalidDataUri', {\n                          result: reader.result,\n                        })\n                      }\n                      signalFiles.push({\n                        name: f.name,\n                        contents: match.groups.contents,\n                        mime: match.groups.mime,\n                      })\n                    }\n                    reader.onloadend = () => resolve()\n                    reader.readAsDataURL(f)\n                  }),\n              ),\n            ).then(() => {\n              mergePaths([[signalName, signalFiles]])\n            })\n          }\n\n          el.addEventListener('change', syncSignal)\n          return () => {\n            el.removeEventListener('change', syncSignal)\n          }\n        }\n        default:\n          adapter = valueAdapter(true, 'input')\n      }\n    } else if (el instanceof HTMLSelectElement) {\n      adapter = selectAdapter()\n    } else if (el instanceof HTMLTextAreaElement) {\n      adapter = propAdapter('value', 'input')\n    } else if (el instanceof HTMLElement && el.tagName.includes('-')) {\n      adapter =\n        'value' in el\n          ? propAdapter('value', 'input', 'change')\n          : attrAdapter('value', 'input', 'change')\n    } else if (el instanceof HTMLElement && 'value' in el) {\n      adapter = propAdapter('value', 'change')\n    } else {\n      adapter = attrAdapter('value', 'change')\n    }\n    if (!adapter) {\n      throw error('InvalidBindAdapter')\n    }\n\n    const firstProp = props && [...props][0]\n    if (props && !firstProp) throw error('BindPropNameMissing')\n    if (firstProp) {\n      const prop = camel(firstProp)\n      adapter = propAdapter(prop, ...(events ? [...events] : adapter.events_))\n    } else if (events) {\n      adapter.events_ = [...events]\n    }\n\n    let path = boundPath(\n      el,\n      key,\n      rawKey,\n      signalName,\n      adapter,\n      getPath(signalName),\n    )\n    const syncSignal = () => {\n      const signalValue = getPath(path)\n      if (signalValue != null) {\n        const value = adapter.get_(el, typeof signalValue)\n        if (value !== empty) {\n          mergePaths([[path, value]])\n        }\n      }\n    }\n    const syncElement = () => {\n      adapter.set_(el, getPath(path))\n    }\n\n    for (const eventName of adapter.events_) {\n      el.addEventListener(eventName, syncSignal)\n    }\n    el.addEventListener(DATASTAR_PROP_CHANGE_EVENT, syncSignal)\n    let cleanup = effect(syncElement)\n    const multipleObserver =\n      el instanceof HTMLSelectElement\n        ? new MutationObserverClass(() => {\n            cleanup()\n            path = boundPath(\n              el,\n              key,\n              rawKey,\n              signalName,\n              adapter,\n              getPath(signalName),\n            )\n            cleanup = effect(syncElement)\n          })\n        : null\n    multipleObserver?.observe(el, { attributeFilter: ['multiple'] })\n\n    return () => {\n      multipleObserver?.disconnect()\n      cleanup()\n      for (const eventName of adapter.events_) {\n        el.removeEventListener(eventName, syncSignal)\n      }\n      el.removeEventListener(DATASTAR_PROP_CHANGE_EVENT, syncSignal)\n    }\n  },\n})\n", "// Icon: ic:baseline-format-paint\n// Slug: Adds or removes a class based on an expression.\n// Description: Adds or removes a class to or from an element based on an expression.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'class',\n  requirement: {\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ key, el, mods, rx }) {\n    key &&= modifyCasing(key, mods, 'kebab')\n\n    let classes: Record<string, boolean>\n    const callback = () => {\n      observer.disconnect()\n\n      classes = key\n        ? { [key]: rx() as boolean }\n        : (rx() as Record<string, boolean>)\n\n      for (const k in classes) {\n        const classNames = k.split(/\\s+/).filter((cn) => cn.length > 0)\n        if (classes[k]) {\n          for (const name of classNames) {\n            if (!el.classList.contains(name)) {\n              el.classList.add(name)\n            }\n          }\n        } else {\n          for (const name of classNames) {\n            if (el.classList.contains(name)) {\n              el.classList.remove(name)\n            }\n          }\n        }\n      }\n\n      observer.observe(el, { attributeFilter: ['class'] })\n    }\n\n    const observer = new MutationObserverClass(callback)\n    const cleanup = effect(callback)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n\n      for (const k in classes) {\n        const classNames = k.split(/\\s+/).filter((cn) => cn.length > 0)\n        for (const name of classNames) {\n          el.classList.remove(name)\n        }\n      }\n    }\n  },\n})\n", "// Icon: streamline-ultimate:wifi-signal-2\n// Slug: Creates a computed signal.\n// Description: Creates a signal that is computed based on an expression.\n\nimport { attribute } from '@engine'\nimport { computed, mergePaths, mergePatch } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\nimport { updateLeaves } from '@utils/paths'\n\nattribute({\n  name: 'computed',\n  requirement: {\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ key, mods, rx, error }) {\n    if (key) {\n      mergePaths([[modifyCasing(key, mods), computed(rx)]])\n    } else {\n      const patch = Object.assign({}, rx() as Record<string, () => any>)\n      updateLeaves(patch, (old) => {\n        if (typeof old === 'function') {\n          return computed(old)\n        } else {\n          throw error('ComputedExpectedFunction')\n        }\n      })\n      mergePatch(patch)\n    }\n  },\n})\n", "// Icon: oui:security-signal\n// Slug: Executes an expression when signals change.\n// Description: Executes an expression on page load and whenever any signals in the expression change.\n\nimport { attribute } from '@engine'\nimport { effect } from '@engine/signals'\n\nattribute({\n  name: 'effect',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply: ({ rx }) => effect(rx),\n})\n", "// Icon: streamline:signal-loading-remix\n// Slug: Creates an indicator for whether an SSE request is in flight.\n// Description: Creates a signal and sets its value to `true` while an SSE request request is in flight, otherwise `false`.\n\nimport { attribute } from '@engine'\nimport { DATASTAR_FETCH_EVENT, DOCUMENT } from '@engine/consts'\nimport { mergePaths } from '@engine/signals'\nimport type { DatastarFetchEvent } from '@engine/types'\nimport { FINISHED, STARTED } from '@plugins/actions/fetch'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'indicator',\n  requirement: 'exclusive',\n  apply({ el, key, mods, value }) {\n    const signalName = key != null ? modifyCasing(key, mods) : value\n    let activeFetches = 0\n\n    mergePaths([[signalName, false]])\n\n    const watcher = ((event: CustomEvent<DatastarFetchEvent>) => {\n      const { type, el: elt } = event.detail\n      if (elt !== el) {\n        return\n      }\n      switch (type) {\n        case STARTED:\n          activeFetches++\n          mergePaths([[signalName, true]])\n          break\n        case FINISHED:\n          activeFetches = Math.max(0, activeFetches - 1)\n          mergePaths([[signalName, activeFetches > 0]])\n          break\n      }\n    }) as EventListener\n    DOCUMENT.addEventListener(DATASTAR_FETCH_EVENT, watcher)\n    return () => {\n      activeFetches = 0\n      mergePaths([[signalName, false]])\n      DOCUMENT.removeEventListener(DATASTAR_FETCH_EVENT, watcher)\n    }\n  },\n})\n", "export const tagToMs = (args: Set<string>) => {\n  for (const arg of args) {\n    if (arg.endsWith('ms')) {\n      return +arg.slice(0, -2)\n    }\n    if (arg.endsWith('s')) {\n      return +arg.slice(0, -1) * 1000\n    }\n    return Number.parseFloat(arg)\n  }\n  return 0\n}\n\nexport const tagHas = (tags: Set<string>, tag: string) =>\n  tags.has(tag.toLowerCase())\n\nexport const tagFirst = (tags?: Set<string>, defaultValue = ''): string => {\n  if (tags) {\n    for (const tag of tags) {\n      return tag\n    }\n  }\n  return defaultValue\n}\n", "import type { EventCallbackHandler, Modifiers } from '@engine/types'\nimport { tagHas, tagToMs } from '@utils/tags'\n\nexport const delay = (\n  callback: EventCallbackHandler,\n  wait: number,\n): EventCallbackHandler => {\n  return (...args: any[]) => {\n    setTimeout(callback, wait, ...args)\n  }\n}\n\nexport const throttle = (\n  callback: EventCallbackHandler,\n  wait: number,\n  leading = true,\n  trailing = false,\n  debounce = false,\n): EventCallbackHandler => {\n  let lastArgs: Parameters<EventCallbackHandler> | null = null\n  let timer: ReturnType<typeof setTimeout> | number = 0\n\n  return (...args: any[]) => {\n    if (leading && !timer) {\n      callback(...args)\n      lastArgs = null\n    } else {\n      lastArgs = args\n    }\n    if (!timer || debounce) {\n      if (timer) {\n        clearTimeout(timer)\n      }\n      timer = setTimeout(() => {\n        if (trailing && lastArgs !== null) {\n          callback(...lastArgs)\n        }\n        lastArgs = null\n        timer = 0\n      }, wait)\n    }\n  }\n}\n\nexport const modifyTiming = (\n  callback: EventCallbackHandler,\n  mods: Modifiers,\n): EventCallbackHandler => {\n  const delayArgs = mods.get('delay')\n  if (delayArgs) {\n    const wait = tagToMs(delayArgs)\n    callback = delay(callback, wait)\n  }\n\n  const debounceArgs = mods.get('debounce')\n  if (debounceArgs) {\n    const wait = tagToMs(debounceArgs)\n    const leading = tagHas(debounceArgs, 'leading')\n    const trailing = !tagHas(debounceArgs, 'notrailing')\n    callback = throttle(callback, wait, leading, trailing, true)\n  }\n\n  const throttleArgs = mods.get('throttle')\n  if (throttleArgs) {\n    const wait = tagToMs(throttleArgs)\n    const leading = !tagHas(throttleArgs, 'noleading')\n    const trailing = tagHas(throttleArgs, 'trailing')\n    callback = throttle(callback, wait, leading, trailing)\n  }\n\n  return callback\n}\n", "import { DOCUMENT } from '@engine/consts'\nimport type { EventCallbackHandler, Modifiers } from '@engine/types'\n\nexport const supportsViewTransitions = (target: Document | Element): boolean =>\n  'startViewTransition' in target\n\nexport const modifyViewTransition = (\n  callback: EventCallbackHandler,\n  mods: Modifiers,\n): EventCallbackHandler => {\n  if (mods.has('viewtransition') && supportsViewTransitions(DOCUMENT)) {\n    const cb = callback // I hate javascript\n    callback = (...args: any[]) =>\n      DOCUMENT.startViewTransition(() => cb(...args))\n  }\n\n  return callback\n}\n", "// Icon: material-symbols:timer-play-outline\n// Slug: Runs an expression when loaded into the DOM.\n// Description: Runs an expression when the element is loaded into the DOM.\n\nimport { attribute } from '@engine'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport { tagToMs } from '@utils/tags'\nimport { delay } from '@utils/timing'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nattribute({\n  name: 'init',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply({ rx, mods }) {\n    let callback = () => {\n      beginBatch()\n      try {\n        rx()\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    let wait = 0\n    const delayArgs = mods.get('delay')\n    if (delayArgs) {\n      wait = tagToMs(delayArgs)\n      if (wait > 0) {\n        callback = delay(callback, wait)\n      }\n    }\n    callback()\n  },\n})\n", "// Icon: si:json-fill\n// Slug: Outputs a JSON stringified version of signals.\n// Description: Sets the text content of an element to a reactive JSON stringified version of signals.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect, filtered } from '@engine/signals'\nimport type { SignalFilterOptions } from '@engine/types'\nimport { jsStrToObject } from '@utils/text'\n\nattribute({\n  name: 'json-signals',\n  requirement: {\n    key: 'denied',\n  },\n  apply({ el, value, mods }) {\n    const spaces = mods.has('terse') ? 0 : 2\n    let filters: SignalFilterOptions = {}\n    if (value) {\n      filters = jsStrToObject(value)\n    }\n\n    const callback = () => {\n      observer.disconnect()\n      el.textContent = JSON.stringify(filtered(filters), null, spaces)\n      observer.observe(el, {\n        childList: true,\n        characterData: true,\n        subtree: true,\n      })\n    }\n    const observer = new MutationObserverClass(callback)\n    const cleanup = effect(callback)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: material-symbols:mail\n// Slug: Attaches an event listener to an element.\n// Description: Attaches an event listener to an element, executing an expression whenever the event is triggered.\n\nimport { attribute } from '@engine'\nimport {\n  DATASTAR_FETCH_EVENT,\n  DATASTAR_SIGNAL_PATCH_EVENT,\n  DOCUMENT,\n} from '@engine/consts'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\nimport { modifyTiming } from '@utils/timing'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nattribute({\n  name: 'on',\n  requirement: 'must',\n  argNames: ['evt'],\n  apply({ el, key, mods, rx }) {\n    let target: Element | Window | Document = el\n    if (mods.has('window')) {\n      target = window\n    } else if (mods.has('document')) {\n      target = DOCUMENT\n    }\n    let callback = (evt?: Event) => {\n      beginBatch()\n      try {\n        rx(evt)\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    callback = modifyTiming(callback, mods)\n    const eventName = modifyCasing(key, mods, 'kebab')\n    const evtListOpts: AddEventListenerOptions = {\n      capture: mods.has('capture'),\n      passive: mods.has('passive'),\n      once: mods.has('once'),\n    }\n    if (mods.has('outside')) {\n      target = DOCUMENT\n      const cb = callback\n      callback = (evt?: Event) => {\n        if (!el.contains(evt?.target as HTMLElement)) {\n          cb(evt)\n        }\n      }\n    }\n    // Listen for Datastar events on the document\n    if (\n      eventName === DATASTAR_FETCH_EVENT ||\n      eventName === DATASTAR_SIGNAL_PATCH_EVENT\n    ) {\n      target = DOCUMENT\n    }\n    // Apply event-side effects before timing/view-transition wrappers run.\n    const listener = (evt?: Event) => {\n      if (evt) {\n        if (mods.has('prevent')) evt.preventDefault()\n        if (mods.has('stop')) evt.stopPropagation()\n        // Keep data-on:submit from falling through to native form submission.\n        if (el instanceof HTMLFormElement && eventName === 'submit') evt.preventDefault()\n      }\n      callback(evt)\n    }\n    target.addEventListener(eventName, listener, evtListOpts)\n    return () => {\n      target.removeEventListener(eventName, listener, evtListOpts)\n    }\n  },\n})\n", "export const clamp = (value: number, min: number, max: number): number => {\n  return Math.max(min, Math.min(max, value))\n}\n\nexport const lerp = (\n  min: number,\n  max: number,\n  t: number,\n  clamped = true,\n): number => {\n  return min + (max - min) * (clamped ? clamp(t, 0, 1) : t)\n}\n\nexport const inverseLerp = (\n  min: number,\n  max: number,\n  value: number,\n  clamped = true,\n): number => {\n  const v = (value - min) / (max - min)\n  return clamped ? clamp(v, 0, 1) : v\n}\n\nexport const fit = (\n  value: number,\n  inMin: number,\n  inMax: number,\n  outMin: number,\n  outMax: number,\n  clamped = true,\n  rounded = false,\n): number => {\n  const t = inverseLerp(inMin, inMax, value, clamped)\n  const fitted = lerp(outMin, outMax, t, clamped)\n  return rounded ? Math.round(fitted) : fitted\n}\n", "// Icon: mdi-light:vector-intersection\n// Slug: Runs an expression on intersection.\n// Description: Runs an expression when the element intersects with the viewport.\n\nimport { attribute } from '@engine'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport type { HTMLOrSVG } from '@engine/types'\nimport { clamp } from '@utils/math'\nimport { tagFirst } from '@utils/tags'\nimport { modifyTiming } from '@utils/timing'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nconst once = new WeakSet<HTMLOrSVG>()\n\nattribute({\n  name: 'on-intersect',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply({ el, mods, rx }) {\n    let callback = () => {\n      beginBatch()\n      try {\n        rx()\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    callback = modifyTiming(callback, mods)\n    const options = { threshold: 0 }\n    if (mods.has('full')) {\n      options.threshold = 1\n    } else if (mods.has('half')) {\n      options.threshold = 0.5\n    } else {\n      const threshold = mods.get('threshold')\n      if (threshold) {\n        options.threshold = clamp(Number(tagFirst(threshold)), 0, 100) / 100\n      }\n    }\n    const exit = mods.has('exit')\n    let observer: IntersectionObserver | null = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          if (entry.isIntersecting !== exit) {\n            callback()\n            if (observer && once.has(el)) {\n              observer.disconnect()\n            }\n          }\n        }\n      },\n      options,\n    )\n    observer.observe(el)\n    if (mods.has('once')) {\n      once.add(el)\n    }\n    return () => {\n      if (!mods.has('once')) {\n        once.delete(el)\n      }\n      if (observer) {\n        observer.disconnect()\n        observer = null\n      }\n    }\n  },\n})\n", "// Icon: material-symbols:timer-outline\n// Slug: Runs an expression at a regular interval.\n// Description: Runs an expression at a regular interval.\n\nimport { attribute } from '@engine'\nimport { beginBatch, endBatch } from '@engine/signals'\nimport { tagHas, tagToMs } from '@utils/tags'\nimport { modifyViewTransition } from '@utils/view-transitions'\n\nattribute({\n  name: 'on-interval',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  apply({ mods, rx }) {\n    let callback = () => {\n      beginBatch()\n      try { \n        rx()\n      } finally {\n        endBatch()\n      }\n    }\n    callback = modifyViewTransition(callback, mods)\n    let duration = 1000\n    const durationArgs = mods.get('duration')\n    if (durationArgs) {\n      duration = tagToMs(durationArgs)\n      const leading = tagHas(durationArgs, 'leading')\n      if (leading) {\n        callback()\n      }\n    }\n    const intervalId = setInterval(callback, duration)\n    return () => {\n      clearInterval(intervalId)\n    }\n  },\n})\n", "// Icon: material-symbols:change-circle-outline\n// Slug: Runs an expression when signals are patched.\n// Description: Runs an expression whenever one or more signals are patched.\n\nimport { attribute } from '@engine'\nimport { DATASTAR_SIGNAL_PATCH_EVENT, DOCUMENT } from '@engine/consts'\nimport {\n  beginBatch,\n  endBatch,\n  filtered,\n  startPeeking,\n  stopPeeking,\n} from '@engine/signals'\nimport type { JSONPatch, SignalFilterOptions } from '@engine/types'\nimport { isEmpty } from '@utils/paths'\nimport { aliasify, jsStrToObject } from '@utils/text'\nimport { modifyTiming } from '@utils/timing'\n\nattribute({\n  name: 'on-signal-patch',\n  requirement: {\n    value: 'must',\n  },\n  argNames: ['patch'],\n  returnsValue: true,\n  apply({ el, key, mods, rx, error }) {\n    if (!!key && key !== 'filter') {\n      throw error('KeyNotAllowed')\n    }\n\n    const filterAttr = aliasify(`${this.name}-filter`)\n    const filtersRaw = el.getAttribute(filterAttr)\n    let filters: SignalFilterOptions = {}\n    if (filtersRaw) {\n      filters = jsStrToObject(filtersRaw)\n    }\n\n    let running = false\n\n    const callback: EventListener = modifyTiming(\n      (evt: CustomEvent<JSONPatch>) => {\n        if (running) return\n        // Peek when getting the filtered signals because we don\u2019t want to subscribe to them, we just want to know which ones are being patched.\n        startPeeking()\n        const watched = filtered(filters, evt.detail)\n        stopPeeking()\n        if (!isEmpty(watched)) {\n          running = true\n          beginBatch()\n          try {\n            rx(watched)\n          } finally {\n            endBatch()\n            running = false\n          }\n        }\n      },\n      mods,\n    )\n\n    DOCUMENT.addEventListener(DATASTAR_SIGNAL_PATCH_EVENT, callback)\n    return () => {\n      DOCUMENT.removeEventListener(DATASTAR_SIGNAL_PATCH_EVENT, callback)\n    }\n  },\n})\n", "// Icon: mdi:cursor-pointer\n// Slug: Creates a reference to an element.\n// Description: Creates a new signal that is a reference to the element on which the data attribute is placed.\n\nimport { attribute } from '@engine'\nimport { mergePaths } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'ref',\n  requirement: 'exclusive',\n  apply({ el, key, mods, value }) {\n    const signalName = key != null ? modifyCasing(key, mods) : value\n    mergePaths([[signalName, el]])\n  },\n})\n", "// Icon: streamline:interface-edit-view-eye-eyeball-open-view\n// Slug: Shows or hides an element.\n// Description: Shows or hides an element based on whether an expression evaluates to `true` or `false`.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\n\nconst NONE = 'none'\nconst DISPLAY = 'display'\n\nattribute({\n  name: 'show',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ el, rx }) {\n    const update = () => {\n      observer.disconnect()\n      const shouldShow = rx()\n      if (shouldShow) {\n        if (el.style.display === NONE) el.style.removeProperty(DISPLAY)\n      } else {\n        el.style.setProperty(DISPLAY, NONE)\n      }\n      observer.observe(el, { attributeFilter: ['style'] })\n    }\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: streamline:wifi-signal-full-remix\n// Slug: Patches signals into the existing signals.\n// Description: Patches (adds, updates or removes) one or more signals into the existing signals.\n\nimport { attribute } from '@engine'\nimport { mergePatch, mergePaths } from '@engine/signals'\nimport { modifyCasing } from '@utils/text'\n\nattribute({\n  name: 'signals',\n  returnsValue: true,\n  apply({ key, mods, rx }) {\n    const ifMissing = mods.has('ifmissing')\n\n    if (key) {\n      key = modifyCasing(key, mods)\n      const value = rx?.()\n      mergePaths([[key, value]], { ifMissing })\n    } else {\n      const patch = Object.assign({}, rx?.() as Record<string, any>)\n      mergePatch(patch, { ifMissing })\n    }\n  },\n})\n", "// Icon: material-symbols:format-paint-outline\n// Slug: Sets inline styles on an element based on an expression.\n// Description: Sets CSS styles on an element using either key-based or object syntax, and keeps them in sync with reactive signals.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\nimport { kebab } from '@utils/text'\n\nattribute({\n  name: 'style',\n  requirement: {\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ key, el, rx }) {\n    const { style } = el\n    const initialStyles = new Map<string, string>()\n\n    const apply = (prop: string, value: any) => {\n      const initial = initialStyles.get(prop)\n      if (!value && value !== 0) {\n        initial !== undefined &&\n          (initial\n            ? style.setProperty(prop, initial)\n            : style.removeProperty(prop))\n      } else {\n        initial === undefined &&\n          initialStyles.set(prop, style.getPropertyValue(prop))\n        style.setProperty(prop, String(value))\n      }\n    }\n\n    const update = () => {\n      observer.disconnect()\n\n      if (key) {\n        apply(key, rx())\n      } else {\n        const styles = rx() as Record<string, any>\n\n        for (const [prop, initial] of initialStyles) {\n          prop in styles ||\n            (initial\n              ? style.setProperty(prop, initial)\n              : style.removeProperty(prop))\n        }\n\n        for (const prop in styles) {\n          apply(kebab(prop), styles[prop])\n        }\n      }\n\n      observer.observe(el, { attributeFilter: ['style'] })\n    }\n\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n      for (const [prop, initial] of initialStyles) {\n        initial ? style.setProperty(prop, initial) : style.removeProperty(prop)\n      }\n    }\n  },\n})\n", "// Icon: icon-park-outline:text\n// Slug: Binds the text content of an element.\n// Description: Binds the text content of an element to an expression.\n\nimport { attribute } from '@engine'\nimport { MutationObserverClass } from '@engine/consts'\nimport { effect } from '@engine/signals'\n\nattribute({\n  name: 'text',\n  requirement: {\n    key: 'denied',\n    value: 'must',\n  },\n  returnsValue: true,\n  apply({ el, rx }) {\n    const update = () => {\n      observer.disconnect()\n      el.textContent = `${rx()}`\n      observer.observe(el, {\n        childList: true,\n        characterData: true,\n        subtree: true,\n      })\n    }\n\n    const observer = new MutationObserverClass(update)\n    const cleanup = effect(update)\n\n    return () => {\n      observer.disconnect()\n      cleanup()\n    }\n  },\n})\n", "// Icon: material-symbols:cloud-download\n// Slug: Patches elements into the DOM.\n// Description: Patches elements into the DOM.\n\nimport { watcher } from '@engine'\nimport {\n  DATASTAR_PROP_CHANGE_EVENT,\n  DATASTAR_SCOPE_CHILDREN_EVENT,\n  DOCUMENT,\n  HTMLInput,\n} from '@engine/consts'\nimport { createHTML, prepareScript } from '@engine/csp'\nimport type { WatcherArgsValue, WatcherContext } from '@engine/types'\nimport { isHTMLOrSVG } from '@utils/dom'\nimport { aliasify, isStringTrue } from '@utils/text'\nimport { supportsViewTransitions } from '@utils/view-transitions'\n\nconst PATCH_MODES = [\n  'remove',\n  'outer',\n  'inner',\n  'replace',\n  'prepend',\n  'append',\n  'before',\n  'after',\n] as const\ntype PatchElementsMode = (typeof PATCH_MODES)[number]\n\nconst NAMESPACES = ['html', 'svg', 'mathml'] as const\ntype Namespace = (typeof NAMESPACES)[number]\n\ntype PatchElementsArgs = {\n  selector_: string\n  mode_: PatchElementsMode\n  namespace_: Namespace\n  elements_: WatcherArgsValue\n}\n\nwatcher({\n  name: 'datastar-patch-elements',\n  apply(ctx, args) {\n    const selector = typeof args.selector === 'string' ? args.selector : ''\n    const mode = typeof args.mode === 'string' ? args.mode : 'outer'\n    const namespace =\n      typeof args.namespace === 'string' ? args.namespace : 'html'\n    const useViewTransition = isStringTrue(args.useViewTransition)\n    const viewTransitionSelector =\n      typeof args.viewTransitionSelector === 'string' ? args.viewTransitionSelector : ''\n    const elements = args.elements\n\n    if (!PATCH_MODES.includes(mode as PatchElementsMode)) {\n      throw ctx.error('PatchElementsInvalidMode', { mode })\n    }\n\n    if (!selector && mode !== 'outer' && mode !== 'replace') {\n      throw ctx.error('PatchElementsExpectedSelector')\n    }\n\n    if (!NAMESPACES.includes(namespace as Namespace)) {\n      throw ctx.error('PatchElementsInvalidNamespace', { namespace })\n    }\n\n    const patchElementsArgs: PatchElementsArgs = {\n      selector_: selector,\n      mode_: mode as PatchElementsMode,\n      namespace_: namespace as Namespace,\n      elements_: elements,\n    }\n\n    if (useViewTransition) {\n      let target: Document | Element = DOCUMENT\n      if (viewTransitionSelector) {\n        const el = DOCUMENT.querySelector(viewTransitionSelector)\n        if (el) {\n          target = el\n        }\n      }\n      if (supportsViewTransitions(target)) {\n        target.startViewTransition(() => onPatchElements(ctx, patchElementsArgs))\n      } else {\n        onPatchElements(ctx, patchElementsArgs)\n      }\n    } else {\n      onPatchElements(ctx, patchElementsArgs)\n    }\n  },\n})\n\nconst onPatchElements = (\n  { error }: WatcherContext,\n  {\n    selector_: selector,\n    mode_: mode,\n    namespace_: namespace,\n    elements_: elements,\n  }: PatchElementsArgs,\n) => {\n  let newContent = DOCUMENT.createDocumentFragment()\n  let consume = typeof elements !== 'string' && !!elements\n\n  if (typeof elements === 'string') {\n    const elementsWithSvgsRemoved = elements.replace(\n      /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n      '',\n    )\n    const hasHtml = /<\\/html>/.test(elementsWithSvgsRemoved)\n    const hasHead = /<\\/head>/.test(elementsWithSvgsRemoved)\n    const hasBody = /<\\/body>/.test(elementsWithSvgsRemoved)\n\n    const wrapperTag =\n      namespace === 'svg' ? 'svg' : namespace === 'mathml' ? 'math' : ''\n    const wrappedEls = wrapperTag\n      ? `<${wrapperTag}>${elements}</${wrapperTag}>`\n      : elements\n\n    const html =\n      hasHtml || hasHead || hasBody\n        ? elements\n        : `<body><template>${wrappedEls}</template></body>`\n    const newDocument = new DOMParser().parseFromString(\n      createHTML(html),\n      'text/html',\n    )\n\n    if (hasHtml) {\n      newContent.appendChild(newDocument.documentElement)\n    } else if (hasHead && hasBody) {\n      newContent.appendChild(newDocument.head)\n      newContent.appendChild(newDocument.body)\n    } else if (hasHead) {\n      newContent.appendChild(newDocument.head)\n    } else if (hasBody) {\n      newContent.appendChild(newDocument.body)\n    } else if (wrapperTag) {\n      const wrapperEl = newDocument\n        .querySelector('template')!\n        .content.querySelector(wrapperTag)!\n      for (const child of wrapperEl.childNodes) {\n        newContent.appendChild(child)\n      }\n    } else {\n      newContent = newDocument.querySelector('template')!.content\n    }\n  } else if (elements) {\n    if (elements instanceof DocumentFragment) {\n      newContent = elements\n    } else if (elements instanceof Element) {\n      newContent.appendChild(elements)\n    }\n  }\n\n  if (!selector && (mode === 'outer' || mode === 'replace')) {\n    const children = Array.from(newContent.children)\n    for (const child of children) {\n      let target: Element\n      if (child instanceof HTMLHtmlElement) {\n        target = DOCUMENT.documentElement\n      } else if (child instanceof HTMLBodyElement) {\n        target = DOCUMENT.body\n      } else if (child instanceof HTMLHeadElement) {\n        target = DOCUMENT.head\n      } else {\n        target = DOCUMENT.getElementById(child.id)!\n        if (!target) {\n          console.warn(error('PatchElementsNoTargetsFound'), {\n            element: { id: child.id },\n          })\n          continue\n        }\n      }\n\n      // Consume the new content so we don\u2019t deep clone.\n      applyToTargets(mode as PatchElementsMode, child, [target], true)\n    }\n  } else {\n    const targets = DOCUMENT.querySelectorAll(selector)\n    if (!targets.length) {\n      console.warn(error('PatchElementsNoTargetsFound'), { selector })\n      return\n    }\n\n    const targetList = consume && mode !== 'remove' ? [targets[0]!] : targets\n\n    // If only one target exists, we can safely consume the new content which prevents deep cloning (https://github.com/starfederation/datastar/issues/1155).\n    if (targetList.length === 1) {\n      consume = true\n    }\n\n    applyToTargets(mode as PatchElementsMode, newContent, targetList, consume)\n  }\n}\n\nconst scripts = new WeakSet<HTMLScriptElement>()\nfor (const script of DOCUMENT.querySelectorAll('script')) {\n  scripts.add(script)\n}\n\nconst execute = (target: Element): void => {\n  const elScripts =\n    target instanceof HTMLScriptElement\n      ? [target]\n      : target.querySelectorAll('script')\n  for (const old of elScripts) {\n    if (!scripts.has(old)) {\n      const script = DOCUMENT.createElement('script')\n      for (const { name, value } of old.attributes) {\n        script.setAttribute(name, value)\n      }\n      prepareScript(script, old.text)\n      old.replaceWith(script)\n      scripts.add(script)\n    }\n  }\n}\n\nconst applyPatchMode = (\n  targets: Iterable<Element>,\n  element: DocumentFragment | Element,\n  action: string,\n  consume: boolean,\n) => {\n  let used = false\n  for (const target of targets) {\n    if (consume && used) {\n      break\n    }\n    const nextNode = consume ? element : (element.cloneNode(true) as Element)\n    execute(nextNode as Element)\n    // @ts-expect-error - calling dynamic method path on DOM element\n    target[action](nextNode)\n    used = true\n  }\n}\n\nconst applyToTargets = (\n  mode: PatchElementsMode,\n  element: DocumentFragment | Element,\n  targets: Iterable<Element>,\n  consume: boolean,\n) => {\n  switch (mode) {\n    case 'remove':\n      for (const target of targets) {\n        target.remove()\n      }\n      break\n    case 'outer':\n    case 'inner':\n      {\n        let used = false\n        for (const target of targets) {\n          if (consume && used) {\n            break\n          }\n          const nextNode = consume ? element : (element.cloneNode(true) as Element)\n          morph(target, nextNode, mode)\n          execute(target)\n          const scopeHost = target.closest('[data-scope-children]')\n          if (scopeHost) {\n            scopeHost.dispatchEvent(\n              new CustomEvent(DATASTAR_SCOPE_CHILDREN_EVENT, {\n                bubbles: false,\n              }),\n            )\n          }\n          used = true\n        }\n      }\n      break\n    case 'replace':\n      applyPatchMode(targets, element, 'replaceWith', consume)\n      break\n    case 'prepend':\n    case 'append':\n    case 'before':\n    case 'after':\n      applyPatchMode(targets, element, mode, consume)\n  }\n}\n\nconst ctxIdMap = new Map<Node, Set<string>>()\nconst ctxPersistentIds = new Set<string>()\nconst oldIdTagNameMap = new Map<string, string>()\nconst duplicateIds = new Set<string>()\nconst ctxPantry = DOCUMENT.createElement('div')\nctxPantry.hidden = true\n\nconst aliasedIgnoreMorph = aliasify('ignore-morph')\nconst aliasedIgnoreMorphAttr = `[${aliasedIgnoreMorph}]`\nexport const morph = (\n  oldElt: Element | ShadowRoot,\n  newContent: DocumentFragment | Element,\n  mode: 'outer' | 'inner' = 'outer',\n): void => {\n  if (\n    (isHTMLOrSVG(oldElt) &&\n      isHTMLOrSVG(newContent) &&\n      oldElt.hasAttribute(aliasedIgnoreMorph) &&\n      newContent.hasAttribute(aliasedIgnoreMorph)) ||\n    oldElt.parentElement?.closest(aliasedIgnoreMorphAttr)\n  ) {\n    return\n  }\n\n  const normalizedElt = DOCUMENT.createElement('div')\n  normalizedElt.append(newContent)\n  DOCUMENT.body.insertAdjacentElement('afterend', ctxPantry)\n\n  // Computes the set of IDs that persist between the two contents excluding duplicates\n  const oldIdElements = oldElt.querySelectorAll('[id]')\n  for (const { id, tagName } of oldIdElements) {\n    if (oldIdTagNameMap.has(id)) {\n      duplicateIds.add(id)\n    } else {\n      oldIdTagNameMap.set(id, tagName)\n    }\n  }\n  if (oldElt instanceof Element && oldElt.id) {\n    if (oldIdTagNameMap.has(oldElt.id)) {\n      duplicateIds.add(oldElt.id)\n    } else {\n      oldIdTagNameMap.set(oldElt.id, oldElt.tagName)\n    }\n  }\n\n  ctxPersistentIds.clear()\n  const newIdElements = normalizedElt.querySelectorAll('[id]')\n  for (const { id, tagName } of newIdElements) {\n    if (ctxPersistentIds.has(id)) {\n      duplicateIds.add(id)\n    } else if (oldIdTagNameMap.get(id) === tagName) {\n      ctxPersistentIds.add(id)\n    }\n  }\n\n  for (const id of duplicateIds) {\n    ctxPersistentIds.delete(id)\n  }\n\n  oldIdTagNameMap.clear()\n  duplicateIds.clear()\n  ctxIdMap.clear()\n\n  const parent = mode === 'outer' ? oldElt.parentElement! : oldElt\n  populateIdMapWithTree(parent, oldIdElements)\n  populateIdMapWithTree(normalizedElt, newIdElements)\n\n  morphChildren(\n    parent,\n    normalizedElt,\n    mode === 'outer' ? oldElt : null,\n    oldElt.nextSibling,\n  )\n\n  ctxPantry.remove()\n}\n\n// This is the core algorithm for matching up children.\n// The idea is to use ID sets to try to match up nodes as faithfully as possible.\n// We greedily match, which allows us to keep the algorithm fast,\n// but by using ID sets, we are able to better match up with content deeper in the DOM.\nconst morphChildren = (\n  oldParent: Element | ShadowRoot, // the old content that we are merging the new content into\n  newParent: Element, // the parent element of the new content\n  insertionPoint: Node | null = null, // the point in the DOM we start morphing at (defaults to first child)\n  endPoint: Node | null = null, // the point in the DOM we stop morphing at (defaults to after last child)\n): void => {\n  // normalize\n  if (\n    oldParent instanceof HTMLTemplateElement &&\n    newParent instanceof HTMLTemplateElement\n  ) {\n    // we can pretend the DocumentElement is an Element\n    oldParent = oldParent.content as unknown as Element\n    newParent = newParent.content as unknown as Element\n  }\n  insertionPoint ??= oldParent.firstChild\n\n  // run through all the new content\n  for (const newChild of newParent.childNodes) {\n    // once we reach the end of the old parent content skip to the end and insert the rest\n    if (insertionPoint && insertionPoint !== endPoint) {\n      const bestMatch = findBestMatch(newChild, insertionPoint, endPoint)\n      if (bestMatch) {\n        // if the node to morph is not at the insertion point then remove/move up to it\n        if (bestMatch !== insertionPoint) {\n          let cursor: Node | null = insertionPoint\n          // Remove nodes between the start and end nodes\n          while (cursor && cursor !== bestMatch) {\n            const tempNode = cursor\n            cursor = cursor.nextSibling\n            removeNode(tempNode)\n          }\n        }\n        morphNode(bestMatch, newChild)\n        insertionPoint = bestMatch.nextSibling\n        continue\n      }\n    }\n\n    // if the matching node is elsewhere in the original content\n    if (newChild instanceof Element && ctxPersistentIds.has(newChild.id)) {\n      // move it and all its children here and morph, will always be found\n      // Search for an element by ID within the document and pantry, and move it using moveBefore.\n      const movedChild = DOCUMENT.getElementById(newChild.id) as Element\n\n      // Removes an element from its ancestors' ID maps.\n      // This is needed when an element is moved from the \"future\" via `moveBeforeId`.\n      // Otherwise, its erstwhile ancestors could be mistakenly moved to the pantry rather than being deleted,\n      // preventing their removal hooks from being called.\n      let current = movedChild\n      while ((current = current.parentNode as Element)) {\n        const idSet = ctxIdMap.get(current)\n        if (idSet) {\n          idSet.delete(newChild.id)\n          if (!idSet.size) {\n            ctxIdMap.delete(current)\n          }\n        }\n      }\n\n      moveBefore(oldParent, movedChild, insertionPoint)\n      morphNode(movedChild, newChild)\n      insertionPoint = movedChild.nextSibling\n      continue\n    }\n\n    // This performs the action of inserting a new node while handling situations where the node contains\n    // elements with persistent IDs and possible state info we can still preserve by moving in and then morphing\n    if (ctxIdMap.has(newChild)) {\n      // node has children with IDs with possible state so create a dummy elt of same type and apply full morph algorithm\n      const namespaceURI = (newChild as Element).namespaceURI\n      const tagName = (newChild as Element).tagName\n      const newEmptyChild =\n        namespaceURI && namespaceURI !== 'http://www.w3.org/1999/xhtml'\n          ? DOCUMENT.createElementNS(namespaceURI, tagName)\n          : DOCUMENT.createElement(tagName)\n      oldParent.insertBefore(newEmptyChild, insertionPoint)\n      morphNode(newEmptyChild, newChild)\n      insertionPoint = newEmptyChild.nextSibling\n    } else {\n      // optimization: no id state to preserve so we can just insert a clone of the newChild and its descendants\n      const newClonedChild = DOCUMENT.importNode(newChild, true) // importNode to not mutate newParent\n      oldParent.insertBefore(newClonedChild, insertionPoint)\n      insertionPoint = newClonedChild.nextSibling\n    }\n  }\n\n  // remove any remaining old nodes that didn't match up with new content\n  while (insertionPoint && insertionPoint !== endPoint) {\n    const tempNode = insertionPoint\n    insertionPoint = insertionPoint.nextSibling\n    removeNode(tempNode)\n  }\n}\n\n// Scans forward from the startPoint to the endPoint looking for a match for the node.\n// It looks for an id set match first, then a soft match.\n// We abort soft matching if we find two future soft matches, to reduce churn.\nconst findBestMatch = (\n  node: Node,\n  startPoint: Node | null,\n  endPoint: Node | null,\n): Node | null => {\n  let bestMatch: Node | null | undefined = null\n  let nextSibling = node.nextSibling\n  let siblingSoftMatchCount = 0\n  let displaceMatchCount = 0\n\n  // Max ID matches we are willing to displace in our search\n  const nodeMatchCount = ctxIdMap.get(node)?.size || 0\n\n  let cursor = startPoint\n  while (cursor && cursor !== endPoint) {\n    // soft matching is a prerequisite for id set matching\n    if (isSoftMatch(cursor, node)) {\n      let isIdSetMatch = false\n      const oldSet = ctxIdMap.get(cursor)\n      const newSet = ctxIdMap.get(node)\n\n      if (newSet && oldSet) {\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            isIdSetMatch = true\n            break\n          }\n        }\n      }\n\n      if (isIdSetMatch) {\n        return cursor // found an id set match, we're done!\n      }\n\n      // we haven\u2019t yet saved a soft match fallback\n      // the current soft match will hard match something else in the future, leave it\n      if (!bestMatch && !ctxIdMap.has(cursor)) {\n        // optimization: if node can't id set match, we can just return the soft match immediately\n        if (!nodeMatchCount) {\n          return cursor\n        }\n        // save this as the fallback if we get through the loop without finding a hard match\n        bestMatch = cursor\n      }\n    }\n\n    // check for IDs we may be displaced when matching\n    displaceMatchCount += ctxIdMap.get(cursor)?.size || 0\n    if (displaceMatchCount > nodeMatchCount) {\n      // if we are going to displace more IDs than the node contains then\n      // we do not have a good candidate for an ID match, so return\n      break\n    }\n\n    if (bestMatch === null && nextSibling && isSoftMatch(cursor, nextSibling)) {\n      // The next new node has a soft match with this node, so\n      // increment the count of future soft matches\n      siblingSoftMatchCount++\n      nextSibling = nextSibling.nextSibling\n\n      // If there are two future soft matches, block soft matching for this node to allow\n      // future siblings to soft match. This is to reduce churn in the DOM when an element\n      // is prepended.\n      if (siblingSoftMatchCount >= 2) {\n        bestMatch = undefined\n      }\n    }\n\n    cursor = cursor.nextSibling\n  }\n\n  return bestMatch || null\n}\n\n// ok to cast: if one is not element, `id` and `tagName` will be null and we'll just compare that.\nconst isSoftMatch = (oldNode: Node, newNode: Node): boolean =>\n  oldNode.nodeType === newNode.nodeType &&\n  (oldNode as Element).tagName === (newNode as Element).tagName &&\n  // If oldElt has an `id` with possible state and it doesn\u2019t match newElt.id then avoid morphing.\n  // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n  // its not persistent, and new nodes can't have any hidden state.\n  (!(oldNode as Element).id ||\n    (oldNode as Element).id === (newNode as Element).id)\n\n// Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n// - Persistent nodes will be moved to the pantry for later reuse\n// - Other nodes will have their hooks called, and then are removed\nconst removeNode = (node: Node): void => {\n  // are we going to id set match this later?\n  ctxIdMap.has(node)\n    ? // skip callbacks and move to pantry\n      moveBefore(ctxPantry, node, null)\n    : // remove for realsies\n      node.parentNode?.removeChild(node)\n}\n\n// Moves an element before another element within the same parent.\n// Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n// This is essentially a forward-compat wrapper.\nconst moveBefore = (parentNode: Node, node: Node, after: Node | null): void => {\n  if ('moveBefore' in parentNode) {\n    const moveableParent = parentNode as Node & {\n      moveBefore: (node: Node, child: Node | null) => Node\n    }\n    moveableParent.moveBefore(node, after)\n    return\n  }\n  parentNode.insertBefore(node, after)\n}\n\nconst aliasedPreserveAttr = aliasify('preserve-attr')\n\n// syncs the oldNode to the newNode, copying over all attributes and\n// inner element state from the newNode to the oldNode\nconst morphNode = (\n  oldNode: Node, // root node to merge content into\n  newNode: Node, // new content to merge\n): Node => {\n  const type = newNode.nodeType\n\n  // if is an element type, sync the attributes from the\n  // new node into the new node\n  if (type === 1 /* element type */) {\n    const oldElt = oldNode as Element\n    const newElt = newNode as Element\n    const shouldScopeChildren = oldElt.hasAttribute('data-scope-children')\n    if (\n      oldElt.hasAttribute(aliasedIgnoreMorph) &&\n      newElt.hasAttribute(aliasedIgnoreMorph)\n    ) {\n      return oldNode\n    }\n\n    // The following logic for handling inputs, textareas, and options is finnicky.\n    // Only change with extreme caution and lots of testing!\n    // --\n    //  many bothans died to bring us this information:\n    //  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n    //  https://github.com/choojs/nanomorph/blob/master/lib/morph.js#L113\n    // --\n\n    const preserveAttrs = (\n      (newNode as HTMLElement).getAttribute(aliasedPreserveAttr) ?? ''\n    ).split(' ')\n\n    const updateElementProp = (\n      oldElt: Element,\n      newElt: Element,\n      name: string,\n    ): boolean => {\n      const newEltHasAttr = newElt.hasAttribute(name)\n      if (\n        oldElt.hasAttribute(name) !== newEltHasAttr &&\n        !preserveAttrs.includes(name)\n      ) {\n        // @ts-expect-error - setting dynamic property for native DOM properties\n        oldElt[name] = newEltHasAttr\n        return true\n      }\n      return false\n    }\n\n    let shouldDispatchPropChangeEvent = false\n    if (\n      oldElt instanceof HTMLInput &&\n      newElt instanceof HTMLInput &&\n      newElt.type !== 'file'\n    ) {\n      // Modify the value only if the new element\u2019s value attribute is different from the old element\u2019s value attribute\n      const newValue = newElt.getAttribute('value')\n      if (\n        oldElt.getAttribute('value') !== newValue &&\n        !preserveAttrs.includes('value')\n      ) {\n        oldElt.value = newValue ?? ''\n        shouldDispatchPropChangeEvent = true\n      }\n      // Update checked and disabled properties\n      shouldDispatchPropChangeEvent =\n        updateElementProp(oldElt, newElt, 'checked') ||\n        shouldDispatchPropChangeEvent\n      updateElementProp(oldElt, newElt, 'disabled')\n    } else if (\n      oldElt instanceof HTMLTextAreaElement &&\n      newElt instanceof HTMLTextAreaElement\n    ) {\n      // Modify the value only if the new element\u2019s value is different from the old element\u2019s default value\n      const newValue = newElt.value\n      if (oldElt.defaultValue !== newValue) {\n        oldElt.value = newValue\n        shouldDispatchPropChangeEvent = true\n      }\n    } else if (\n      oldElt instanceof HTMLOptionElement &&\n      newElt instanceof HTMLOptionElement\n    ) {\n      shouldDispatchPropChangeEvent =\n        updateElementProp(oldElt, newElt, 'selected') ||\n        shouldDispatchPropChangeEvent\n    }\n\n    for (const { name, value } of newElt.attributes) {\n      if (\n        oldElt.getAttribute(name) !== value &&\n        !preserveAttrs.includes(name)\n      ) {\n        oldElt.setAttribute(name, value)\n      }\n    }\n\n    // Create a static copy, so we can iterate forward safely as we remove attributes\n    for (const { name } of Array.from(oldElt.attributes)) {\n      if (!newElt.hasAttribute(name) && !preserveAttrs.includes(name)) {\n        oldElt.removeAttribute(name)\n      }\n    }\n\n    if (shouldDispatchPropChangeEvent) {\n      const dispatchElt =\n        oldElt instanceof HTMLOptionElement ? oldElt.closest('select') : oldElt\n      dispatchElt?.dispatchEvent(\n        new Event(DATASTAR_PROP_CHANGE_EVENT, { bubbles: true }),\n      )\n    }\n\n    // Preserve the scope marker even if the incoming markup doesn't carry it.\n    if (shouldScopeChildren && !oldElt.hasAttribute('data-scope-children')) {\n      oldElt.setAttribute('data-scope-children', '')\n    }\n\n    if (\n      oldElt instanceof HTMLTemplateElement &&\n      newElt instanceof HTMLTemplateElement\n    ) {\n      oldElt.innerHTML = createHTML(newElt.innerHTML)\n    } else if (!oldElt.isEqualNode(newElt)) {\n      morphChildren(oldElt, newElt)\n    }\n\n    if (shouldScopeChildren) {\n      oldElt.dispatchEvent(\n        new CustomEvent(DATASTAR_SCOPE_CHILDREN_EVENT, { bubbles: false }),\n      )\n    }\n  }\n\n  if (type === 8 /* comment */ || type === 3 /* text */) {\n    if (oldNode.nodeValue !== newNode.nodeValue) {\n      oldNode.nodeValue = newNode.nodeValue\n    }\n  }\n\n  return oldNode\n}\n\n// A bottom-up algorithm that populates a map of Element -> IdSet.\n// The ID set for a given element is the set of all IDs contained within its subtree.\n// As an optimization, we filter these IDs through the given list of persistent IDs,\n// because we don't need to bother considering IDed elements that won't be in the new content.\nconst populateIdMapWithTree = (\n  root: Element | ShadowRoot | null,\n  elements: Iterable<Element>,\n): void => {\n  for (const elt of elements) {\n    if (ctxPersistentIds.has(elt.id)) {\n      let current: Element | null = elt\n      // walk up the parent hierarchy of that element, adding the ID of element to the parent's ID set\n      while (current && current !== root) {\n        let idSet = ctxIdMap.get(current)\n        // if the ID set doesn\u2019t exist, create it and insert it in the map\n        if (!idSet) {\n          idSet = new Set()\n          ctxIdMap.set(current, idSet)\n        }\n        idSet.add(elt.id)\n        current = current.parentElement\n      }\n    }\n  }\n}\n", "// Icon: material-symbols:settings-input-antenna\n// Slug: Patches signals.\n// Description: Patches signals.\n\nimport { watcher } from '@engine'\nimport { mergePatch } from '@engine/signals'\nimport { isStringTrue, jsStrToObject } from '@utils/text'\n\nwatcher({\n  name: 'datastar-patch-signals',\n  apply({ error }, { signals, onlyIfMissing }) {\n    if (typeof signals !== 'string') {\n      throw error('PatchSignalsExpectedSignals')\n    }\n\n    const ifMissing = isStringTrue(onlyIfMissing)\n    mergePatch(jsStrToObject(signals), { ifMissing })\n  },\n})\n"],
  "mappings": ";AAAO,IAAMA,EAAuB,iBACvBC,GAA6B,uBAC7BC,GAAuB,iBACvBC,GAAgC,0BAChCC,GAA8B,wBAC9BC,EAAW,SACXC,EAAY,iBACZC,EAAwB,iBCJ9B,IAAMC,GAASC,GACpBA,EACG,QAAQ,wBAAyB,OAAO,EACxC,QAAQ,qBAAsB,OAAO,EACrC,QAAQ,oBAAqB,OAAO,EACpC,QAAQ,oBAAqB,OAAO,EACpC,QAAQ,UAAW,GAAG,EACtB,YAAY,EAEJC,GAASD,GACpBD,GAAMC,CAAG,EAAE,QAAQ,MAAQE,GAAMA,EAAE,CAAC,EAAE,YAAY,CAAC,EAExCC,GAASH,GAAwBD,GAAMC,CAAG,EAAE,QAAQ,KAAM,GAAG,EAQnE,IAAMI,GAAgBC,GAC3B,OAAOA,GAAU,UAAYA,EAAM,KAAK,IAAM,OAE1CC,GACJ,gFAMIC,GAAYC,GAChBC,GAAkB,CAAC,EAAG,WAAWD,CAAM,GAAG,EAAE,EAEjCE,GAAgB,CAC3BC,EACAC,EAAgC,CAAC,IAC9B,CACH,GAAM,CAAE,sBAAAC,EAAwB,EAAM,EAAID,EAC1C,GAAI,CACF,OAAKC,EACE,KAAK,MAAMF,EAAK,CAACG,EAAIT,IAAU,CACpC,GAAI,OAAOA,GAAU,SAAU,OAAOA,EACtC,IAAMU,EAAUV,EAAM,KAAK,EAC3B,GAAI,CAACC,GAAoB,KAAKS,CAAO,EAAG,OAAOV,EAC/C,GAAI,CACF,IAAMW,EAAUT,GAASQ,CAAO,EAChC,OAAO,OAAOC,GAAY,WAAaA,EAAUX,CACnD,MAAQ,CACN,OAAOA,CACT,CACF,CAAC,EAXkC,KAAK,MAAMM,CAAG,CAYnD,MAAQ,CAGN,OAAOJ,GAASI,CAAG,CACrB,CACF,EAEMM,GAAiD,CACrD,MAAQC,GAAQA,EAAI,QAAQ,UAAYC,GAAMA,EAAE,CAAC,EAAE,YAAY,CAAC,EAChE,MAAQD,GAAQA,EAAI,QAAQ,KAAM,GAAG,EACrC,OAASA,GAAQA,EAAI,CAAC,EAAE,YAAY,EAAID,GAAQ,MAAMC,EAAI,MAAM,CAAC,CAAC,CACpE,EAEaE,EAAe,CAC1BF,EACAG,EACAC,EAAc,UACH,CACX,QAAWC,KAAKF,EAAK,IAAI,MAAM,GAAK,CAACC,CAAW,EAC9CJ,EAAMD,GAAQM,CAAC,IAAIL,CAAG,GAAKA,EAE7B,OAAOA,CACT,EAEaM,EAAYC,GACW,QAAQA,CAAI,GAEnCC,GAAcD,GACNA,EChFrB,IAAME,GAAM,+BAECC,GAAc,CACzBC,EACAC,EACAC,EAAgC,CAAC,IACvB,CACV,OAAO,OAAOA,EAAUF,CAAG,EAC3B,IAAM,EAAIG,GAAMF,CAAM,EAChBG,EAAI,IAAI,gBAAgB,CAC5B,SAAU,KAAK,UAAUF,CAAQ,CACnC,CAAC,EAAE,SAAS,EACNG,EAAI,KAAK,UAAUH,EAAU,KAAM,CAAC,EAC1C,OAAO,IAAI,MAAM,GAAGD,CAAM;AAAA,aAAgBH,EAAG,IAAI,CAAC,IAAIM,CAAC;AAAA,WAAcC,CAAC,EAAE,CAC1E,ECVA,IAAMC,GAAiBC,EAAS,OAAO,EACjCC,GAAOC,EAAS,gBAChBC,GAAYF,GAAK,aAAaF,EAAc,EAE5CK,GAAaD,KAAc,KAE7BE,GACJ,GAAID,GAAY,CACd,GAAI,CAACD,GACH,MAAMG,GAAY,CAAC,EAAG,eAAe,EAEvCL,GAAK,gBAAgBF,EAAc,EACnCM,GAAU,OAAe,cAAc,aAAa,WAAY,CAC9D,WAAaE,GAAiBA,EAC9B,aAAeC,GAAmBA,CACpC,CAAC,CACH,CAEO,IAAMC,GAAgB,CAC3BD,EACAE,IACS,CACLN,KAAYI,EAAO,MAAQL,IAC/BK,EAAO,KAAOH,GAASA,GAAO,aAAaK,CAAO,EAAIA,CACxD,EAEaC,GAAcJ,GACzBF,GAASA,GAAO,WAAWE,CAAI,EAAIA,EAE/BK,GAAsB,IAAI,IAEnBC,GAAoB,CAC/BC,EACAC,IACiB,CACjB,GAAI,CAACX,GAAY,OAAO,SAAS,GAAGU,EAAUC,CAAU,EAExD,IAAMC,EAAS,YAAYF,EAAS,KAAK,GAAG,CAAC,KAAKC,CAAU;AAAA,GACtDE,EAASL,GAAoB,IAAII,CAAM,EAC7C,GAAIC,EAAQ,OAAOA,EAEnB,IAAMT,EAASN,EAAS,cAAc,QAAQ,EAC9CO,GAAcD,EAAQ,4BAA4BQ,CAAM,EAAE,EAC1Dd,EAAS,KAAK,YAAYM,CAAM,EAChCA,EAAO,OAAO,EAEd,IAAMU,EAAYV,EAAe,EACjC,GAAI,CAACU,EACH,MAAM,IAAI,MAAM,iBAAiB,EAEnC,OAAAN,GAAoB,IAAII,EAAQE,CAAQ,EACjCA,CACT,EC1DO,IAAMC,EAEX,OAAO,QAAU,OAAO,UAAU,eAAe,KCC5C,IAAMC,GAAUC,GACrBA,IAAQ,MACR,OAAOA,GAAQ,WACd,OAAO,eAAeA,CAAG,IAAM,OAAO,WACrC,OAAO,eAAeA,CAAG,IAAM,MAEtBC,GAAWD,GAAsC,CAC5D,QAAWE,KAAQF,EACjB,GAAIG,EAAOH,EAAKE,CAAI,EAClB,MAAO,GAGX,MAAO,EACT,EAEaE,GAAe,CAC1BJ,EACAK,IACG,CACH,QAAWC,KAAON,EAAK,CACrB,IAAMO,EAAMP,EAAIM,CAAG,EACfP,GAAOQ,CAAG,GAAK,MAAM,QAAQA,CAAG,EAClCH,GAAaG,EAAKF,CAAE,EAEpBL,EAAIM,CAAG,EAAID,EAAGE,CAAG,CAErB,CACF,EAEaC,GAAaC,GAAsC,CAC9D,IAAMC,EAA8B,CAAC,EACrC,OAAW,CAACC,EAAMC,CAAK,IAAKH,EAAO,CACjC,IAAMI,EAAOF,EAAK,MAAM,GAAG,EACrBG,EAAUD,EAAK,IAAI,EACnBb,EAAMa,EAAK,OAAO,CAACE,EAAKT,IAASS,EAAIT,CAAG,IAAM,CAAC,EAAII,CAAM,EAC/DV,EAAIc,CAAO,EAAIF,CACjB,CACA,OAAOF,CACT,ECuBA,IAAMM,GAAsB,CAAC,EACvBC,GAA6C,CAAC,EAChDC,GAAa,EACbC,GAAc,EACdC,GAAsB,EACtBC,GACAC,EACAC,GAAU,EAEDC,EAAa,IAAY,CACpCN,IACF,EAEaO,EAAW,IAAY,CAC7B,EAAEP,KACLQ,GAAM,EACNC,EAAS,EAEb,EAEaC,EAAgBC,GAA6B,CACxDR,GAAW,CACTS,EAAQR,EACRS,EAAOV,EACT,EACAC,EAAYO,CACd,EAEaG,EAAc,IAAY,CACrCV,EAAYD,IAAUS,EACtBT,GAAWA,IAAUU,CACvB,EAEaE,GAAaC,GACjBC,GAAW,KAAK,EAAG,CACxBC,EAAgBF,EAChBJ,EAAQI,EACRG,EAAQ,CACV,CAAC,EAGGC,GAAiB,OAAO,UAAU,EAC3BC,GAAeC,GAAkD,CAC5E,IAAMC,EAAIC,GAAa,KAAK,EAAG,CAC7BL,EAAQ,GACRM,EAASH,CACX,CAAC,EAED,OAAAC,EAAEH,EAAc,EAAI,EACbG,CACT,EAEaG,EAAUC,GAA2B,CAChD,IAAMC,EAAiB,CACrBC,EAAKF,EACLR,EAAQ,CACV,EACIf,GACF0B,GAAKF,EAAGxB,CAAS,EAEnBM,EAAakB,CAAC,EACdtB,EAAW,EACX,GAAI,CACFsB,EAAEC,EAAI,CACR,QAAE,CACAtB,EAAS,EACTO,EAAY,CACd,CACA,OAAOiB,GAAW,KAAK,EAAGH,CAAC,CAC7B,EAEMpB,GAAQ,IAAM,CAClB,KAAOP,GAAcC,IAAqB,CACxC,IAAMwB,EAAS3B,GAAcE,EAAW,EACxCF,GAAcE,IAAa,EAAI,OAC/B+B,GAAIN,EAASA,EAAOP,GAAU,GAAoB,CACpD,CACAlB,GAAc,EACdC,GAAsB,CACxB,EAEM+B,GAAUlB,GACVU,MAAaV,EACRmB,GAAenB,CAAM,EAEvBoB,GAAapB,EAAQA,EAAOH,CAAM,EAGrCsB,GAAkBX,GAA8B,CACpDb,EAAaa,CAAC,EACda,GAAcb,CAAC,EACf,GAAI,CACF,IAAMc,EAAWd,EAAEX,EACnB,OAAOyB,KAAcd,EAAEX,EAASW,EAAEE,EAAQY,CAAQ,EACpD,QAAE,CACAvB,EAAY,EACZwB,GAAYf,CAAC,CACf,CACF,EAEMY,GAAe,CAAII,EAAmBC,KAC1CD,EAAEpB,EAAS,EACJoB,EAAErB,KAAoBqB,EAAErB,EAAiBsB,IAG5CC,GAAU,GAAyB,CACvC,IAAMC,EAAQ,EAAEvB,EAChB,GAAI,EAAEuB,EAAQ,IAAqB,CACjC,EAAEvB,EAASuB,EAAQ,GACnB,IAAMC,EAAO,EAAEC,EACXD,EACFF,GAAOE,EAAKE,CAAmB,EAE/B9C,GAAcG,IAAqB,EAAI,CAE3C,CACF,EAEM8B,GAAM,CAAC,EAAgBU,IAA+B,CAC1D,GACEA,EAAS,IACRA,EAAS,IAAuCI,GAAW,EAAEC,EAAQ,CAAC,EACvE,CACArC,EAAa,CAAC,EACd0B,GAAc,CAAC,EACf9B,EAAW,EACX,GAAI,CACF,EAAEuB,EAAI,CACR,QAAE,CACAtB,EAAS,EACTO,EAAY,EACZwB,GAAY,CAAC,CACf,CACA,MACF,CACII,EAAS,KACX,EAAEvB,EAASuB,EAAQ,KAErB,IAAIZ,EAAO,EAAEiB,EACb,KAAOjB,GAAM,CACX,IAAMkB,EAAMlB,EAAKmB,EACXC,EAAWF,EAAI7B,EACjB+B,EAAW,IACblB,GAAIgB,EAAqBA,EAAI7B,EAAS+B,EAAW,GAAoB,EAEvEpB,EAAOA,EAAKqB,CACd,CACF,EAEMlC,GAAa,CAAIsB,KAAsBC,IAA4B,CACvE,GAAIA,EAAM,OAAQ,CAChB,GAAID,EAAE3B,KAAY2B,EAAE3B,EAAS4B,EAAM,CAAC,GAAI,CACtCD,EAAEpB,EAAS,GACX,IAAMwB,EAAOJ,EAAEK,EACf,OAAID,IACFS,GAAUT,CAAI,EACT3C,IACHQ,GAAM,GAGH,EACT,CACA,MAAO,EACT,CACA,IAAM6C,EAAed,EAAE3B,EACvB,GAAI2B,EAAEpB,EAAU,IACVgB,GAAaI,EAAGc,CAAY,EAAG,CACjC,IAAMT,EAAQL,EAAEK,EACZA,GACFU,GAAiBV,CAAK,CAE1B,CAEF,OAAIxC,GACF0B,GAAKS,EAAGnC,CAAS,EAEZiD,CACT,EAEM7B,GAAmBD,GAA2B,CAClD,IAAMmB,EAAQnB,EAAEJ,EAChB,GACEuB,EAAS,IACRA,EAAS,IAAuCI,GAAWvB,EAAEwB,EAAQxB,CAAC,GAEvE,GAAIW,GAAeX,CAAC,EAAG,CACrB,IAAMoB,EAAOpB,EAAEqB,EACXD,GACFW,GAAiBX,CAAI,CAEzB,OACSD,EAAS,KAClBnB,EAAEJ,EAASuB,EAAQ,KAErB,OAAItC,GACF0B,GAAKP,EAAGnB,CAAS,EAEZmB,EAAEX,CACX,EAEMmB,GAAc,GAAyB,CAC3C,IAAIiB,EAAM,EAAED,EACZ,KAAOC,GACLA,EAAMO,GAAOP,EAAK,CAAC,EAErB,IAAMrC,EAAM,EAAEiC,EACVjC,GACF4C,GAAO5C,CAAG,EAEZ,EAAEQ,EAAS,CACb,EAEMW,GAAO,CAACkB,EAAmBrC,IAA4B,CAC3D,IAAM6C,EAAU7C,EAAI8C,EACpB,GAAID,GAAWA,EAAQP,IAASD,EAC9B,OAEF,IAAMU,EAAUF,EAAUA,EAAQL,EAAWxC,EAAIoC,EACjD,GAAIW,GAAWA,EAAQT,IAASD,EAAK,CACnCU,EAAQC,EAAWtD,GACnBM,EAAI8C,EAAYC,EAChB,MACF,CACA,IAAME,EAAUZ,EAAIa,EACpB,GAAID,GAAWA,EAAQD,IAAatD,IAAWuD,EAAQf,IAASlC,EAC9D,OAEF,IAAMmD,EACHnD,EAAI8C,EACLT,EAAIa,EACF,CACEF,EAAUtD,GACV4C,EAAMD,EACNH,EAAMlC,EACNoD,EAAUP,EACVL,EAAUO,EACVM,EAAUJ,CACZ,EACAF,IACFA,EAAQK,EAAWD,GAEjBN,EACFA,EAAQL,EAAWW,EAEnBnD,EAAIoC,EAAQe,EAEVF,EACFA,EAAQK,EAAWH,EAEnBd,EAAIJ,EAAQkB,CAEhB,EAEMP,GAAS,CAACzB,EAAYnB,EAAMmB,EAAKe,IAA2B,CAChE,IAAMI,EAAOnB,EAAKmB,EACZc,EAAWjC,EAAKiC,EAChBZ,EAAWrB,EAAKqB,EAChBc,EAAWnC,EAAKmC,EAChBD,EAAWlC,EAAKkC,EAgBtB,GAfIb,EACFA,EAASY,EAAWA,EAEpBpD,EAAI8C,EAAYM,EAEdA,EACFA,EAASZ,EAAWA,EAEpBxC,EAAIoC,EAAQI,EAEVc,EACFA,EAASD,EAAWA,EAEpBf,EAAKY,EAAYG,EAEfA,EACFA,EAASC,EAAWA,UACX,EAAEhB,EAAKL,EAAQqB,GACxB,GAAIxC,MAAawB,EAAM,CACrB,IAAIiB,EAAWjB,EAAKF,EACpB,GAAImB,EAAU,CACZjB,EAAK9B,EAAS,GACd,GACE+C,EAAWX,GAAOW,EAAUjB,CAAI,QACzBiB,EACX,CACF,KAAahD,MAAoB+B,GAC/BlB,GAAWkB,CAAmB,EAGlC,OAAOE,CACT,EAEMC,GAAatB,GAAqB,CACtC,IAAIqC,EAAOrC,EAAKmC,EACZG,EAEJC,EAAK,OAAa,CAChB,IAAM1D,EAAMmB,EAAKe,EAEbH,EAAQ/B,EAAIQ,EAoChB,GAhCIuB,EACC,GASDA,EAAS,GAGAA,EAAS,EAKpB,EAAEA,EAAS,KACX4B,GAAYxC,EAAMnB,CAAG,GAErBA,EAAIQ,EACFuB,EAAS,GACXA,GAAS,GAETA,EAAQ,EAXR/B,EAAIQ,EACDuB,EAAQ,GACR,GAJHA,EAAQ,EAJR/B,EAAIQ,EAASuB,EAAS,GAoBpBA,EAAS,GACXD,GAAO9B,CAAkB,EAGvB+B,EAAS,EAAoC,CAC/C,IAAM6B,EAAU5D,EAAIiC,EACpB,GAAI2B,EAAS,CACX,IAAMC,GAAW1C,EAAOyC,GAASN,EAC7BO,IACFJ,EAAQ,CAAExD,EAAcC,EAAOuD,CAAM,EACrCD,EAAOK,GAET,QACF,CACF,CAEA,GAAK1C,EAAOqC,EAAQ,CAClBA,EAAOrC,EAAKmC,EACZ,QACF,CAEA,KAAOG,GAGL,GAFAtC,EAAOsC,EAAMxD,EACbwD,EAAQA,EAAMvD,EACViB,EAAM,CACRqC,EAAOrC,EAAKmC,EACZ,SAASI,CACX,CAGF,KACF,CACF,EAEMjC,GAAiBzB,GAA4B,CACjDN,KACAM,EAAI8C,EAAY,OAChB9C,EAAIQ,EACDR,EAAIQ,EACH,IAID,CACL,EAEMmB,GAAe3B,GAA4B,CAC/C,IAAM8C,EAAY9C,EAAI8C,EAClBS,EAAWT,EAAYA,EAAUN,EAAWxC,EAAIoC,EACpD,KAAOmB,GACLA,EAAWX,GAAOW,EAAUvD,CAAG,EAEjCA,EAAIQ,GAAU,EAChB,EAEM2B,GAAa,CAAChB,EAAYnB,IAA+B,CAC7D,IAAIyD,EACAK,EAAa,EACbC,EAAQ,GAEZL,EAAK,OAAa,CAChB,IAAMrB,EAAMlB,EAAKmB,EACXP,EAAQM,EAAI7B,EAElB,GAAIR,EAAIQ,EAAU,GAChBuD,EAAQ,YAEPhC,EAAS,MACT,IAED,GAAIT,GAAOe,CAAkC,EAAG,CAC9C,IAAML,EAAOK,EAAIJ,EACbD,EAAKsB,GACPX,GAAiBX,CAAI,EAEvB+B,EAAQ,EACV,WAEChC,EAAS,MACT,GACD,EACIZ,EAAKmC,GAAYnC,EAAKkC,KACxBI,EAAQ,CAAExD,EAAQkB,EAAMjB,EAAOuD,CAAM,GAEvCtC,EAAOkB,EAAID,EACXpC,EAAMqC,EACN,EAAEyB,EACF,QACF,CAEA,GAAI,CAACC,EAAO,CACV,IAAMhB,EAAU5B,EAAKqB,EACrB,GAAIO,EAAS,CACX5B,EAAO4B,EACP,QACF,CACF,CAEA,KAAOe,KAAc,CACnB,IAAME,EAAWhE,EAAIiC,EACfgC,EAAkBD,EAASV,EAOjC,GANIW,GACF9C,EAAOsC,EAAOxD,EACdwD,EAAQA,EAAOvD,GAEfiB,EAAO6C,EAELD,EAAO,CACT,GAAIzC,GAAOtB,CAAkC,EAAG,CAC1CiE,GACFtB,GAAiBqB,CAAQ,EAE3BhE,EAAMmB,EAAKe,EACX,QACF,CACA6B,EAAQ,EACV,MACE/D,EAAIQ,GAAU,IAGhB,GADAR,EAAMmB,EAAKe,EACPf,EAAKqB,EAAU,CACjBrB,EAAOA,EAAKqB,EACZ,SAASkB,CACX,CACF,CAEA,OAAOK,CACT,CACF,EAEMpB,GAAoBxB,GAAqB,CAC7C,EAAG,CACD,IAAMnB,EAAMmB,EAAKe,EACXH,EAAQ/B,EAAIQ,GAEfuB,EAAS,MACT,KAED/B,EAAIQ,EAASuB,EAAS,GAClBA,EAAS,GACXD,GAAO9B,CAAkB,EAG/B,OAAUmB,EAAOA,EAAKmC,EACxB,EAEMK,GAAc,CAACO,EAAiBlE,IAA+B,CACnE,IAAImB,EAAOnB,EAAI8C,EACf,KAAO3B,GAAM,CACX,GAAIA,IAAS+C,EACX,MAAO,GAET/C,EAAOA,EAAKiC,CACd,CACA,MAAO,EACT,EAEae,GAAoBC,GAAgC,CAC/D,IAAIC,EAASC,GACPC,EAAQH,EAAK,MAAM,GAAG,EAC5B,QAAWA,KAAQG,EAAO,CACxB,GAAIF,GAAU,MAAQ,CAACG,EAAOH,EAAQD,CAAI,EACxC,OAEFC,EAASA,EAAOD,CAAI,CACtB,CACA,OAAOC,CACT,EAEMI,GAAO,CAAC5C,EAAY6C,EAAS,KAAY,CAC7C,IAAMC,EAAQ,MAAM,QAAQ9C,CAAK,EACjC,GAAI8C,GAASC,GAAO/C,CAAK,EAAG,CAC1B,IAAMgD,EAAWF,EAAQ,CAAC,EAAI,CAAC,EAC/B,QAAWG,KAAOjD,EAChBgD,EAAQC,CAAG,EAAI1E,GACbqE,GAAM5C,EAAsCiD,CAAG,EAAG,GAAGJ,EAASI,CAAG,GAAG,CACtE,EAEF,IAAMC,EAAO3E,GAAO,CAAC,EACrB,OAAO,IAAI,MAAMyE,EAAS,CACxB,IAAIG,EAAGC,EAAc,CAInB,GAAI,EAAEA,IAAS,UAAY,CAACT,EAAOK,EAASI,CAAI,GAG9C,OAAIN,GAASM,KAAQ,MAAM,WACzBF,EAAK,EACEF,EAAQI,CAAI,GAIjB,OAAOA,GAAS,SACXJ,EAAQI,CAAI,IAIjB,CAACT,EAAOK,EAASI,CAAI,GAAKJ,EAAQI,CAAI,EAAE,GAAK,QAC/CJ,EAAQI,CAAI,EAAI7E,GAAO,EAAE,EACzBN,EAAS4E,EAASO,EAAM,EAAE,EAC1BF,EAAKA,EAAK,EAAI,CAAC,GAEVF,EAAQI,CAAI,EAAE,EAEzB,EACA,IAAID,EAAGC,EAAcC,EAAU,CAC7B,IAAMd,EAAOM,EAASO,EAEtB,GAAIN,GAASM,IAAS,SAAU,CAC9B,IAAME,EAAYN,EAAQI,CAAI,EAG9B,GAFAJ,EAAQI,CAAI,EAAIC,EAEZC,EAAYD,EAAU,CACxB,IAAME,EAA6B,CAAC,EACpC,QAASC,EAAIH,EAAUG,EAAIF,EAAWE,IACpCD,EAAMC,CAAC,EAAI,KAEbvF,EAAS4E,EAAO,MAAM,EAAG,EAAE,EAAGU,CAAK,EACnCL,EAAKA,EAAK,EAAI,CAAC,CACjB,CACF,SAAWP,EAAOK,EAASI,CAAI,EAC7B,GAAIC,GAAY,KACd,OAAOL,EAAQI,CAAI,EACnBnF,EAASsE,EAAM,IAAI,EACnBW,EAAKA,EAAK,EAAI,CAAC,UAENP,EAAOU,EAAUzE,EAAc,EACxCoE,EAAQI,CAAI,EAAIC,EAChBpF,EAASsE,EAAM,EAAE,MAEZ,CACL,IAAM1B,EAAemC,EAAQI,CAAI,EAAE,EAC7BK,EAAU,GAAGlB,CAAI,IACvB,GAAIQ,GAAOlC,CAAY,GAAKkC,GAAOM,CAAQ,EAAG,CAC5C,QAAWJ,KAAOpC,EACX8B,EAAOU,EAAUJ,CAAG,IACvB,OAAOpC,EAAaoC,CAAG,EACvBhF,EAASwF,EAAUR,EAAK,IAAI,GAGhC,QAAWA,KAAOI,EAAU,CAC1B,IAAMK,EAAUL,EAASJ,CAAG,EACxBpC,EAAaoC,CAAG,IAAMS,IACxB7C,EAAaoC,CAAG,EAAIS,EAExB,CACF,MAAWV,EAAQI,CAAI,EAAER,GAAKS,EAAUI,CAAO,CAAC,GAC9CxF,EAASsE,EAAMc,CAAQ,CAE3B,MAESA,GAAY,OAEjBV,EAAOU,EAAUzE,EAAc,GACjCoE,EAAQI,CAAI,EAAIC,EAChBpF,EAASsE,EAAM,EAAE,IAEjBS,EAAQI,CAAI,EAAI7E,GAAOqE,GAAKS,EAAU,GAAGd,CAAI,GAAG,CAAC,EACjDtE,EAASsE,EAAMc,CAAQ,GAEzBH,EAAKA,EAAK,EAAI,CAAC,GAGjB,MAAO,EACT,EACA,eAAeC,EAAGC,EAAc,CAC9B,cAAOJ,EAAQI,CAAI,EACnBF,EAAKA,EAAK,EAAI,CAAC,EACR,EACT,EACA,SAAU,CACR,OAAAA,EAAK,EACE,QAAQ,QAAQF,CAAO,CAChC,EACA,IAAIG,EAAGC,EAAM,CACX,OAAAF,EAAK,EACEE,KAAQJ,CACjB,CACF,CAAC,CACH,CACA,OAAOhD,CACT,EAEM/B,EAAW,CAACsE,EAAevC,IAAgB,CAI/C,GAHIuC,IAAS,QAAavC,IAAU,QAClC1C,GAAa,KAAK,CAACiF,EAAMvC,CAAK,CAAC,EAE7B,CAACxC,IAAcF,GAAa,OAAQ,CACtC,IAAMqG,EAASC,GAAUtG,EAAY,EACrCA,GAAa,OAAS,EACtBuG,EAAS,cACP,IAAI,YAAuBC,GAA6B,CACtD,OAAAH,CACF,CAAC,CACH,CACF,CACF,EAEaI,EAAa,CACxBR,EACA,CAAE,UAAAS,CAAU,EAAoB,CAAC,IACxB,CACTlG,EAAW,EACX,QAAWmF,KAAOM,EACZA,EAAMN,CAAG,GAAK,KACXe,GACH,OAAOvB,GAAKQ,CAAG,EAGjBgB,GAAWV,EAAMN,CAAG,EAAGA,EAAKR,GAAM,GAAIuB,CAAS,EAGnDjG,EAAS,CACX,EAEamG,EAAa,CAACC,EAAcC,IACvCL,EAAWH,GAAUO,CAAK,EAAGC,CAAO,EAEhCH,GAAa,CACjBV,EACAc,EACAC,EACAzB,EACAmB,IACS,CACT,GAAIjB,GAAOQ,CAAK,EAAG,CAGbZ,EAAO2B,EAAcD,CAAM,IAC1BtB,GAAOuB,EAAaD,CAAM,CAAC,GAAK,MAAM,QAAQC,EAAaD,CAAM,CAAC,KAGrEC,EAAaD,CAAM,EAAI,CAAC,GAG1B,QAAWpB,KAAOM,EACZA,EAAMN,CAAG,GAAK,KACXe,GACH,OAAOM,EAAaD,CAAM,EAAEpB,CAAG,EAGjCgB,GACEV,EAAMN,CAAG,EACTA,EACAqB,EAAaD,CAAM,EACnB,GAAGxB,EAASwB,CAAM,IAClBL,CACF,CAGN,MAAaA,GAAarB,EAAO2B,EAAcD,CAAM,IACnDC,EAAaD,CAAM,EAAId,EAE3B,EAEMgB,GAAYC,GAChB,OAAOA,GAAQ,SAAW,OAAOA,EAAI,QAAQ,WAAY,EAAE,CAAC,EAAIA,EAOrDC,EAAW,CACtB,CAAE,QAAAC,EAAU,KAAM,QAAAC,EAAU,MAAO,EAAyB,CAAC,EAC7DC,EAAiBnC,KACO,CACxB,IAAMoC,EAAYN,GAASG,CAAO,EAC5BI,EAAYP,GAASI,CAAO,EAC5BR,EAAe,CAAC,EAEhBY,EAAO,CAACC,EAAiBnC,EAAS,KAAO,CAC7C,QAAWI,KAAO+B,EAAM,CACtB,IAAMzC,EAAOM,EAASI,EAClBF,GAAOiC,EAAK/B,CAAG,CAAC,EAClB8B,EAAKC,EAAK/B,CAAG,EAAG,GAAGV,CAAI,GAAG,EACjBsC,EAAU,KAAKtC,CAAI,GAAK,CAACuC,EAAU,KAAKvC,CAAI,GACrD4B,EAAM,KAAK,CAAC5B,EAAMD,GAAQC,CAAI,CAAC,CAAC,CAEpC,CACF,EAEA,OAAAwC,EAAKH,CAAG,EAEDhB,GAAUO,CAAK,CACxB,EAEa1B,GAA4BG,GAAK,CAAC,CAAC,EC7wBzC,IAAMqC,GAAeC,GAC1BA,aAAc,aACdA,aAAc,YACdA,aAAc,cCkBhB,IAAMC,GAA2C,IAAI,IAC/CC,GAAiD,IAAI,IACrDC,GAA6C,IAAI,IAE1CC,GAGT,IAAI,MACN,CAAC,EACD,CACE,IAAK,CAACC,EAAGC,IAAiBL,GAAc,IAAIK,CAAI,GAAG,MACnD,IAAK,CAACD,EAAGC,IAAiBL,GAAc,IAAIK,CAAI,EAChD,QAAS,IAAM,QAAQ,QAAQL,EAAa,EAC5C,IAAK,IAAM,GACX,eAAgB,IAAM,EACxB,CACF,EAGMM,GAAW,IAAI,IAEfC,GAAsC,CAAC,EACvCC,GAAuB,IAAI,IAC3BC,GAAgB,IAAI,IACtBC,GAA0B,GAEjBC,EACXC,GACS,CACTL,GAAiB,KAAKK,CAAoC,EAEtDL,GAAiB,SAAW,GAC9B,WAAW,IAAM,CACf,QAAWI,KAAaJ,GACtBC,GAAqB,IAAIG,EAAU,IAAI,EACvCV,GAAiB,IAAIU,EAAU,KAAMA,CAAS,EAEhDJ,GAAiB,OAAS,EAC1B,IAAMM,EAAQJ,GAAc,KACxB,CAAC,GAAGA,EAAa,EACjB,CAACK,EAAS,eAAe,EAC7B,QAAWC,KAAQF,EACjBG,GAAYD,EAAM,CAACN,GAAc,IAAIM,CAAI,CAAC,EAE5CP,GAAqB,MAAM,CAC7B,CAAC,CAEL,EAEaS,EAAaL,GAAkC,CAC1DZ,GAAc,IAAIY,EAAO,KAAMA,CAAM,CACvC,EAEAE,EAAS,iBAAiBI,GACxBC,GACG,CACH,IAAMP,EAASV,GAAe,IAAIiB,EAAI,OAAO,IAAI,EAC7CP,GACFA,EAAO,MACL,CACE,MAAOQ,GAAY,KAAK,EAAG,CACzB,OAAQ,CAAE,KAAM,UAAW,KAAMR,EAAO,IAAK,EAC7C,QAAS,CACP,GAAKO,EAAI,OAAmB,GAC5B,IAAMA,EAAI,OAAmB,OAC/B,CACF,CAAC,CACH,EACAA,EAAI,OAAO,OACb,CAEJ,EAAmB,EAEZ,IAAME,GAAWT,GAAgC,CACtDV,GAAe,IAAIU,EAAO,KAAMA,CAAM,CACxC,EAEMU,GAAcC,GAAmC,CACrD,QAAWC,KAAMD,EAAK,CACpB,IAAME,EAAanB,GAAS,IAAIkB,CAAE,EAClC,GAAIC,GAAcnB,GAAS,OAAOkB,CAAE,EAClC,QAAWE,KAAgBD,EAAW,OAAO,EAC3C,QAAWE,KAAWD,EAAa,OAAO,EACxCC,EAAQ,CAIhB,CACF,EAEMC,GAAgBC,EAAS,QAAQ,EACjCC,GAAoB,IAAIF,EAAa,IACrCG,GAAgBP,GACpBA,EAAG,aAAa,GAAGI,EAAa,QAAQ,GAAK,CAAC,CAACJ,EAAG,QAAQM,EAAiB,EAEvEE,GAAW,CAACT,EAA0BU,IAA4B,CACtE,QAAWT,KAAMD,EACf,GAAI,CAACQ,GAAaP,CAAE,EAAG,CACrB,IAAMU,EAAc,IAAI,IACxB,QAAWC,KAAOX,EAAG,QAAS,CAC5B,IAAMY,EAAUD,EAAI,QAAQ,SAAU,KAAK,EAAE,YAAY,EACzDD,EAAY,IAAIE,CAAO,EACvBC,GAAqBb,EAAIY,EAASZ,EAAG,QAAQW,CAAG,EAAIF,CAAO,CAC7D,CACA,QAAWK,KAAQ,MAAM,KAAKd,EAAG,UAAU,EAAG,CAC5C,GAAI,CAACc,EAAK,KAAK,WAAW,OAAO,EAAG,SACpC,IAAMF,EAAUE,EAAK,KAAK,MAAM,CAAC,EAC7BJ,EAAY,IAAIE,CAAO,GAC3BC,GAAqBb,EAAIY,EAASE,EAAK,MAAOL,CAAO,CACvD,CACF,CAEJ,EAEMM,GAAWC,GAAgC,CAC/C,OAAW,CACT,OAAAC,EACA,KAAAC,EACA,cAAAC,EACA,WAAAC,EACA,aAAAC,CACF,IAAKL,EACH,GAAIE,IAAS,YAAa,CACxB,QAAWI,KAAQD,EACbE,GAAYD,CAAI,IAClBxB,GAAW,CAACwB,CAAI,CAAC,EACjBxB,GAAWwB,EAAK,iBAA4B,GAAG,CAAC,GAIpD,QAAWA,KAAQF,EACbG,GAAYD,CAAI,IAClBd,GAAS,CAACc,CAAI,CAAC,EACfd,GAASc,EAAK,iBAA4B,GAAG,CAAC,EAGpD,SACEJ,IAAS,cACTC,EAAe,WAAW,OAAO,GACjCI,GAAYN,CAAM,GAClB,CAACV,GAAaU,CAAM,EACpB,CAEA,IAAMO,EAAaL,EAAe,MAAM,CAAC,EACnCR,EAAMc,GAAWD,CAAU,EACjC,GAAI,CAACb,EAAK,SACV,IAAMe,EAAQT,EAAO,aAAaE,CAAc,EAChD,GAAIO,IAAU,KAAM,CAClB,IAAMzB,EAAanB,GAAS,IAAImC,CAAM,EACtC,GAAIhB,EAAY,CACd,IAAMC,EAAeD,EAAW,IAAIU,CAAG,EACvC,GAAIT,EAAc,CAChB,QAAWC,KAAWD,EAAa,OAAO,EACxCC,EAAQ,EAEVF,EAAW,OAAOU,CAAG,CACvB,CACF,CACF,MACEE,GAAqBI,EAAQO,EAAYE,CAAK,CAElD,CAEJ,EAGMC,GAAmB,IAAIC,EAAsBb,EAAO,EAE7Cc,GACXC,GAKG,CACH,GAAM,CAACC,EAAU,GAAGC,CAAY,EAAIF,EAAO,MAAM,IAAI,EAC/C,CAACG,EAAYtB,CAAG,EAAIoB,EAAS,MAAM,OAAO,EAC1CG,EAAkB,IAAI,IAE5B,QAAWC,KAAUH,EAAc,CACjC,GAAM,CAACI,EAAO,GAAGC,CAAG,EAAIF,EAAO,MAAM,GAAG,EACxCD,EAAK,IAAIE,EAAO,IAAI,IAAIC,CAAG,CAAC,CAC9B,CAEA,MAAO,CAAE,WAAAJ,EAAY,IAAAtB,EAAK,KAAAuB,CAAK,CACjC,EAEaI,GAA2B,IACtCrD,GAAc,IAAIK,EAAS,eAAe,EAEtCiD,GAAwB,IAAM,CAC9BrD,IAA2B,CAACoD,GAAyB,IACzDpD,GAA0B,GAC1BI,EAAS,cAAc,IAAI,MAAMkD,EAAoB,CAAC,EACxD,EAEMhD,GAAc,CAClBD,EAA+BD,EAAS,gBACxCmD,EAAc,KACL,CACLlB,GAAYhC,CAAI,GAClBiB,GAAS,CAACjB,CAAI,EAAG,EAAI,EAEvBiB,GAASjB,EAAK,iBAA4B,GAAG,EAAG,EAAI,EAEhDkD,IACFd,GAAiB,QAAQpC,EAAM,CAC7B,QAAS,GACT,UAAW,GACX,WAAY,EACd,CAAC,EACDN,GAAc,IAAIM,CAAI,EACtBgD,GAAsB,EAE1B,EA0BA,IAAMG,GAAuB,CAC3BC,EACAC,EACAC,EACAC,IACS,CACT,IAAMC,EAASC,GAAWJ,CAAO,EACjC,GAAI,CAACG,EAAQ,OACb,GAAM,CAAE,WAAAE,EAAY,IAAAC,EAAK,KAAAC,CAAK,EAAIC,GAAkBL,CAAM,EACpDM,EAASC,GAAiB,IAAIL,CAAU,EAG9C,IADG,CAACH,GAAWS,GAAqB,IAAIN,CAAU,IAAM,CAAC,CAACI,EACzC,CACf,IAAMG,EAAM,CACV,GAAAb,EACA,OAAAI,EACA,KAAAI,EACA,MAAOM,GAAY,KAAK,EAAG,CACzB,OAAQ,CAAE,KAAM,YAAa,KAAMJ,EAAO,IAAK,EAC/C,QAAS,CAAE,GAAIV,EAAG,GAAI,IAAKA,EAAG,OAAQ,EACtC,WAAY,CAAE,OAAAI,EAAQ,IAAAG,EAAK,MAAAL,CAAM,CACnC,CAAC,EACD,IAAAK,EACA,MAAAL,EACA,kBAAmB,CACjB,QAAS,IAAI,IAAIa,GAAc,KAAK,CAAC,EACrC,WAAY,IAAI,IAAIJ,GAAiB,KAAK,CAAC,CAC7C,EACA,GAAI,MACN,EAEMK,EACHN,EAAO,cACL,OAAOA,EAAO,aAAgB,SAC3BA,EAAO,YACPA,EAAO,YAAY,MACzB,UACIO,EACHP,EAAO,cACL,OAAOA,EAAO,aAAgB,SAC3BA,EAAO,YACPA,EAAO,YAAY,QACzB,UAEIQ,EAAmCX,GAAQ,MAAQA,IAAQ,GAC3DY,EAAuCjB,GAAU,MAAQA,IAAU,GAEzE,GAAIgB,GACF,GAAIF,IAAW,SACb,MAAMH,EAAI,MAAM,eAAe,UAExBG,IAAW,OACpB,MAAMH,EAAI,MAAM,aAAa,EAG/B,GAAIM,GACF,GAAIF,IAAa,SACf,MAAMJ,EAAI,MAAM,iBAAiB,UAE1BI,IAAa,OACtB,MAAMJ,EAAI,MAAM,eAAe,EAGjC,GAAIG,IAAW,aAAeC,IAAa,YAAa,CACtD,GAAIC,GAAeC,EACjB,MAAMN,EAAI,MAAM,qBAAqB,EAEvC,GAAI,CAACK,GAAe,CAACC,EACnB,MAAMN,EAAI,MAAM,oBAAoB,CAExC,CAEA,IAAMO,EAAW,IAAI,IACrB,GAAID,EAAe,CACjB,IAAIE,EACJR,EAAI,GAAK,IAAIS,KACND,IACHA,EAAWE,GAAMrB,EAAO,CACtBsB,EAAed,EAAO,aACtBe,EAAWf,EAAO,SAClBgB,EAAWN,CACb,CAAC,GAEIC,EAASrB,EAAI,GAAGsB,CAAI,EAE/B,CAEA,IAAMK,EAAUjB,EAAO,MAAMG,CAAG,EAC5Bc,GACFP,EAAS,IAAI,YAAaO,CAAO,EAGnC,IAAIC,EAAaC,GAAS,IAAI7B,CAAE,EAChC,GAAI4B,EAAY,CACd,IAAME,EAAeF,EAAW,IAAIxB,CAAM,EAC1C,GAAI0B,EACF,QAAWC,KAAcD,EAAa,OAAO,EAC3CC,EAAW,CAGjB,MACEH,EAAa,IAAI,IACjBC,GAAS,IAAI7B,EAAI4B,CAAU,EAE7BA,EAAW,IAAIxB,EAAQgB,CAAQ,CACjC,CACF,EAUMY,GAAcC,GAClBA,EACG,MAAM,GAAG,EACT,OAAO,CAACC,EAAMC,IAAS,GAAGD,CAAI,KAAKC,CAAI,KAAM,GAAG,EAExCZ,GAAQ,CACnBrB,EACA,CACEsB,EAAeY,EAAe,GAC9BX,EAAWY,EAAW,CAAC,EACvBX,EAAWN,EAAW,IAAI,GAC5B,EAAkB,CAAC,IACP,CACZ,IAAIkB,EAAO,GACX,GAAIF,EAAc,CAqBhB,IAAMG,EACJ,4KACIC,EAAatC,EAAM,KAAK,EAAE,MAAMqC,CAAW,EACjD,GAAIC,EAAY,CACd,IAAMC,EAAUD,EAAW,OAAS,EAC9BE,EAAOF,EAAWC,CAAO,EAAE,KAAK,EACjCC,EAAK,WAAW,QAAQ,IAC3BF,EAAWC,CAAO,EAAI,WAAWC,CAAI,MAEvCJ,EAAOE,EAAW,KAAK;AAAA,CAAK,CAC9B,CACF,MACEF,EAAOpC,EAAM,KAAK,EAqBpBoC,EAAOA,EAAK,QACV,0JACA,CAACK,EAAOC,EAAmBC,EAAYC,IACjCF,IAAsB,OACjB,MAAMA,EACV,QACC,uBACA,CAACG,EAAWd,IAAiBD,GAAWC,CAAI,CAC9C,EACC,QAAQ,yBAA0B,oBAAoB,CAAC,IAExDY,EAAmBb,GAAWa,CAAU,EACxCC,EAAmB,aAAaA,CAAU,SACvCH,CAEX,EAEA,GAAI,CACF,IAAMK,EAAKC,GACT,CAAC,KAAM,IAAK,WAAY,MAAO,GAAGZ,CAAQ,EAC1CC,CACF,EACA,MAAO,CAACtC,KAAkBsB,IAAgB,CACxC,IAAM4B,EAAS,CAACjB,EAAckB,KAA2B7B,IAAgB,CACvE,IAAM8B,EAAMtC,GAAY,KAAK,EAAG,CAC9B,OAAQ,CAAE,KAAM,SAAU,KAAAmB,CAAK,EAC/B,QAAS,CAAE,GAAIjC,EAAG,GAAI,IAAKA,EAAG,OAAQ,EACtC,WAAY,CACV,UAAWsC,EACX,MAAApC,CACF,CACF,CAAC,EACK8C,EAAKK,GAAQpB,CAAI,EACvB,GAAIe,EACF,OAAOA,EACL,CACE,GAAAhD,EACA,IAAAmD,EACA,MAAOC,EACP,SAAAhC,CACF,EACA,GAAGE,CACL,EAEF,MAAM8B,EAAI,iBAAiB,CAC7B,EACA,GAAI,CACF,OAAOJ,EAAGhD,EAAIsD,GAAMJ,EAAQ,OAAW,GAAG5B,CAAI,CAChD,OAASiC,EAAQ,CACf,cAAQ,MAAMA,CAAC,EACTzC,GACJ,CACE,QAAS,CAAE,GAAId,EAAG,GAAI,IAAKA,EAAG,OAAQ,EACtC,WAAY,CACV,UAAWsC,EACX,MAAApC,CACF,EACA,MAAOqD,EAAE,OACX,EACA,mBACF,CACF,CACF,CACF,OAASA,EAAQ,CACf,cAAQ,MAAMA,CAAC,EACTzC,GACJ,CACE,WAAY,CACV,UAAWwB,EACX,MAAApC,CACF,EACA,MAAOqD,EAAE,OACX,EACA,oBACF,CACF,CACF,ECpgBAC,EAAO,CACL,KAAM,OACN,MAAMC,EAAGC,EAAe,CACtBC,EAAa,EACb,GAAI,CACF,OAAOD,EAAG,CACZ,QAAE,CACAE,EAAY,CACd,CACF,CACF,CAAC,ECHDC,EAAO,CACL,KAAM,SACN,MAAMC,EAAGC,EAAYC,EAA6B,CAGhDC,EAAa,EACb,IAAMC,EAASC,EAASH,CAAM,EAC9BI,GAAaF,EAAQ,IAAMH,CAAK,EAChCM,EAAWH,CAAM,EACjBI,EAAY,CACd,CACF,CAAC,ECXDC,EAAO,CACL,KAAM,YACN,MAAMC,EAAGC,EAA6B,CAGpCC,EAAa,EACb,IAAMC,EAASC,EAASH,CAAM,EAC9BI,GAAaF,EAASG,GAAkB,CAACA,CAAQ,EACjDC,EAAWJ,CAAM,EACjBK,EAAY,CACd,CACF,CAAC,ECJD,IAAMC,GAAmB,IAAI,IACvBC,GAA6BC,GACjC,CAAC,CAAC,MAAO,QAAQ,EAAE,SAASA,CAAM,EAE9BC,GAAmB,CACvBC,EACAF,EACAG,EAAiC,KAEjCC,EAAO,CACL,KAAAF,EACA,MAAO,MACL,CAAE,GAAAG,EAAI,IAAAC,EAAK,MAAAC,EAAO,SAAAC,CAAS,EAC3BC,EACA,CACE,SAAAC,EACA,QAASC,EACT,YAAAC,EAAc,OACd,cAAe,CAAE,QAAAC,EAAU,KAAM,QAAAC,EAAU,SAAU,EAAI,CAAC,EAC1D,eAAAC,EAAiBZ,EACjB,QAAAa,EACA,oBAAAC,EAAsB,OACtB,MAAAC,EAAQ,OACR,cAAAC,EAAgB,IAChB,YAAAC,EAAc,EACd,aAAAC,EAAe,IACf,cAAAC,EAAgB,EAClB,EAAe,CAAC,IACb,CACH,IAAMC,EACJN,aAA+B,gBAC3BA,EACA,IAAI,gBACJO,EAAc,IAAItB,CAAI,GACtBuB,EAAqBR,IAAwB,UAC/CS,EACJ,GAAIT,IAAwB,QAAUQ,EAAoB,CACxD,IAAME,EAAc7B,GAAiB,IAAIE,CAAM,GAAK,IAAI,IACxD2B,EAAY,IAAIlB,CAAG,GAAG,MAAM,EAC5BkB,EAAY,IAAIlB,EAAKc,CAAU,EAC/BzB,GAAiB,IAAIE,EAAQ2B,CAAW,CAC1C,CACIF,IACFjB,EAAS,IAAIgB,CAAW,IAAI,EAC5BE,EAAiB,SAAY,CAC3BH,EAAW,MAAM,EAEjB,MAAM,QAAQ,QAAQ,CACxB,EACAf,EAAS,IAAIgB,EAAaE,CAAc,GAG1C,IAAIE,GAAY,IAAM,CAAC,EAEvB,GAAI,CACF,GAAI,CAACnB,GAAK,OACR,MAAMF,EAAM,qBAAsB,CAAE,OAAAH,CAAO,CAAC,EAG9C,IAAMyB,EAA+B,CACnC,OAAQ,iDACR,mBAAoB,EACtB,EACIjB,IAAgB,QAAUb,GAA0BC,CAAM,IAC5D6B,EAAQ,cAAc,EAAI,oBAE5B,OAAO,OAAOA,EAASlB,CAAW,EAKlC,IAAMmB,GAA4B,CAChCC,EAAQ,GACR,OAAA/B,EACA,QAAA6B,EACAG,EAAiBjB,EACjBkB,EAAQf,EACRgB,EAAgBf,EAChBgB,EAAcf,EACdgB,EAAef,EACfgB,EAAgBf,EAChB,OAAQC,EAAW,OACnBe,EAAS,MAAOC,GAAuB,CACjCA,EAAS,QAAU,KACrBC,GAAcC,GAAOpC,EAAI,CAAE,OAAQkC,EAAS,OAAO,SAAS,CAAE,CAAC,CAEnE,EACAG,EAAapC,GAAQ,CACnB,GAAI,CAACA,EAAIqC,EAAO,WAAW,UAAU,EAAG,OACxC,IAAMC,EAAOtC,EAAIqC,EACXE,EAAyC,CAAC,EAEhD,QAAWC,KAAQxC,EAAIyC,EAAM,MAAM;AAAA,CAAI,EAAG,CACxC,IAAMC,EAAIF,EAAK,QAAQ,GAAG,EACpBG,GAAIH,EAAK,MAAM,EAAGE,CAAC,EACnBE,EAAIJ,EAAK,MAAME,EAAI,CAAC,GACxBH,EAAaI,EAAC,IAAM,CAAC,GAAG,KAAKC,CAAC,CAClC,CAEA,IAAMC,EAAU,OAAO,YACrB,OAAO,QAAQN,CAAY,EAAE,IAAI,CAAC,CAACI,EAAGC,CAAC,IAAM,CAACD,EAAGC,EAAE,KAAK;AAAA,CAAI,CAAC,CAAC,CAChE,GAEI,CAACzB,GAAsBpB,EAAG,cAC5BmC,GAAcI,EAAMvC,EAAI8C,CAAO,CAEnC,EACA,QAAUC,GAAQ,CAChB,GAAIC,GAAeD,CAAG,EAEpB,MAAM7C,EAAM,+BAAgC,CAAE,IAAAE,CAAI,CAAC,CAEvD,CACF,EAEM6C,GAA4B,IAAM,CACtC,IAAMC,EAAc,IAAI,IAAI9C,EAAK+C,EAAS,OAAO,EAC3CC,EAAc,IAAI,gBAAgBF,EAAY,MAAM,EAC1D,GAAI3C,IAAgB,OAAQ,CAC1B8C,EAAa,EACb,IAAMC,EACJ3C,IAAY,OAAYA,EAAU4C,EAAS,CAAE,QAAA/C,EAAS,QAAAC,CAAQ,CAAC,EACjE+C,EAAY,EACZ,IAAMC,EAAO,KAAK,UAAUH,CAAc,EACtC5D,GAA0BC,CAAM,EAClC8B,GAAI,KAAOgC,EAEXL,EAAY,IAAI,WAAYK,CAAI,CAEpC,SAAWlD,IAAgB,OAAQ,CACjC,IAAMmD,EACJrD,EAAW8C,EAAS,cAAc9C,CAAQ,EAAIL,EAAG,QAAQ,MAAM,EAEjE,GAAI,CAAC0D,EACH,MAAMxD,EAAM,oBAAqB,CAAE,OAAAH,EAAQ,SAAAM,CAAS,CAAC,EAIvD,GAAI,CAACqD,EAAO,YAAc,CAACA,EAAO,cAAc,EAAG,CACjDA,EAAO,eAAe,EACtB,MACF,CAGA,IAAMC,EAAW,IAAI,SAASD,CAAM,EAChCE,EAAY5D,EAEhB,GAAIA,IAAO0D,GAAUzD,aAAe,YAElC2D,EAAY3D,EAAI,cACX,CAEL,IAAM4D,EAAkB5D,IAAeA,GAAI,eAAe,EAC1DyD,EAAO,iBAAiB,SAAUG,CAAc,EAChDtC,GAAY,IAAM,CAChBmC,EAAO,oBAAoB,SAAUG,CAAc,CACrD,CACF,CAGA,GACED,aAAqB,mBACpBA,aAAqBE,GACpBF,EAAU,OAAS,SACrB,CACA,IAAM/D,EAAO+D,EAAU,aAAa,MAAM,EACtC/D,GAAM8D,EAAS,OAAO9D,EAAM+D,EAAU,KAAK,CACjD,CAEA,IAAMG,EACJL,EAAO,aAAa,SAAS,IAAM,sBAEhCK,IACHvC,EAAQ,cAAc,EAAI,qCAG5B,IAAMwC,GAAa,IAAI,gBAAgBL,CAAe,EACtD,GAAIjE,GAA0BC,CAAM,EAClC8B,GAAI,KAAOsC,EAAYJ,EAAWK,OAElC,QAAW,CAACC,EAAKC,EAAK,IAAKF,GACzBZ,EAAY,OAAOa,EAAKC,EAAK,CAGnC,KACE,OAAMhE,EAAM,0BAA2B,CAAE,OAAAH,EAAQ,YAAAQ,CAAY,CAAC,EAEhE,OAAA2C,EAAY,OAASE,EAAY,SAAS,EAC1C3B,GAAIC,EAASwB,EAAY,SAAS,EAC3BzB,EACT,EAEAU,GAAcgC,GAASnE,EAAI,CAAC,CAAC,EAE7B,GAAI,CACF,MAAMoE,GACJpE,EACAiD,GACA7B,CACF,CACF,OAAS2B,EAAU,CACjB,GAAI,CAACC,GAAeD,CAAG,EACrB,MAAM7C,EAAM,cAAe,CAAE,OAAAP,EAAQ,IAAAS,EAAK,MAAO2C,EAAI,OAAQ,CAAC,CAMlE,CACF,QAAE,CACAZ,GAAckC,GAAUrE,EAAI,CAAC,CAAC,EAC9BuB,GAAU,EACNpB,EAAS,IAAIgB,CAAW,IAAME,GAChClB,EAAS,OAAOgB,CAAW,CAE/B,CACF,CACF,CAAC,EAEHvB,GAAiB,MAAO,MAAO,EAAK,EACpCA,GAAiB,QAAS,OAAO,EACjCA,GAAiB,OAAQ,MAAM,EAC/BA,GAAiB,MAAO,KAAK,EAC7BA,GAAiB,QAAS,OAAO,EACjCA,GAAiB,SAAU,QAAQ,EAE5B,IAAMuE,GAAU,UACVE,GAAW,WACXjC,GAAQ,QACRkC,GAAW,WACXC,GAAiB,iBAExBpC,GAAgB,CAACI,EAAcvC,EAAe8C,IAClDK,EAAS,cACP,IAAI,YAAgCqB,EAAsB,CACxD,OAAQ,CAAE,KAAAjC,EAAM,GAAAvC,EAAI,QAAA8C,CAAQ,CAC9B,CAAC,CACH,EAEIE,GAAkBD,GAAa,GAAGA,CAAG,GAAG,SAAS,mBAAmB,EAiDpE0B,GAAW,MACfC,EACAC,IACkB,CAClB,IAAMC,EAASF,EAAO,UAAU,EAC5BG,EAAS,MAAMD,EAAO,KAAK,EAC/B,KAAO,CAACC,EAAO,MACbF,EAAQE,EAAO,KAAK,EACpBA,EAAS,MAAMD,EAAO,KAAK,CAE/B,EAEME,GAAYC,GAA4D,CAC5E,IAAIC,EACAC,EACAC,EACAC,EAAyB,GAG7B,OAAQC,GAAoB,CAC1B,GAAI,CAACJ,EACHA,EAASI,EACTH,EAAW,EACXC,EAAc,OACT,CAEL,IAAMG,EAAO,IAAI,WAAWL,EAAO,OAASI,EAAI,MAAM,EACtDC,EAAK,IAAIL,CAAM,EACfK,EAAK,IAAID,EAAKJ,EAAO,MAAM,EAC3BA,EAASK,CACX,CAEA,IAAMC,EAAYN,EAAO,OACrBO,EAAY,EAChB,KAAON,EAAWK,GAAW,CACvBH,IACEH,EAAOC,CAAQ,IAAM,KAAIM,EAAY,EAAEN,GAC3CE,EAAyB,IAI3B,IAAIK,EAAU,GACd,KAAOP,EAAWK,GAAaE,IAAY,GAAI,EAAEP,EAC/C,OAAQD,EAAOC,CAAQ,EAAG,CACxB,IAAK,IACCC,IAAgB,KAElBA,EAAcD,EAAWM,GAE3B,MAGF,IAAK,IACHJ,EAAyB,GAC3B,IAAK,IACHK,EAAUP,EACV,KACJ,CAGF,GAAIO,IAAY,GAAI,MAGpBT,EAAOC,EAAO,SAASO,EAAWC,CAAO,EAAGN,CAAW,EACvDK,EAAYN,EACZC,EAAc,EAChB,CAEIK,IAAcD,EAChBN,EAAS,OACFO,IAGPP,EAASA,EAAO,SAASO,CAAS,EAClCN,GAAYM,EAEhB,CACF,EAEME,GAAc,CAClBC,EACAC,EACAC,IACsD,CACtD,IAAIC,EAAUC,GAAW,EACnBC,EAAU,IAAI,YAGpB,MAAO,CAACtD,EAAMyC,IAAgB,CAC5B,GAAI,CAACzC,EAAK,OAERmD,IAAYC,CAAO,EACnBA,EAAUC,GAAW,UACZZ,EAAc,EAAG,CAI1B,IAAMc,EAAQD,EAAQ,OAAOtD,EAAK,SAAS,EAAGyC,CAAW,CAAC,EACpDe,EAAcf,GAAezC,EAAKyC,EAAc,CAAC,IAAM,GAAK,EAAI,GAChEhB,EAAQ6B,EAAQ,OAAOtD,EAAK,SAASwD,CAAW,CAAC,EAEvD,OAAQD,EAAO,CACb,IAAK,OACHH,EAAQnD,EAAQmD,EAAQnD,EACpB,GAAGmD,EAAQnD,CAAK;AAAA,EAAKwB,CAAK,GAC1BA,EACJ,MACF,IAAK,QACH2B,EAAQvD,EAAS4B,EACjB,MACF,IAAK,KACHwB,EAAMG,EAAQK,EAAMhC,CAAM,EAC1B,MACF,IAAK,QAAS,CACZ,IAAMrD,EAAQ,CAACqD,EACV,OAAO,MAAMrD,CAAK,GAErB8E,EAASE,EAAQjE,EAASf,CAAM,EAElC,KACF,CACF,CACF,CACF,CACF,EAEMiF,GAAa,KAA2B,CAK5CpD,EAAO,GACPJ,EAAQ,GACR4D,EAAK,GACLtE,EAAQ,MACV,GAmBMwC,GAAmB,CACvBpE,EACAiD,EACA7B,IAEO,IAAI,QAAc,CAAC+E,EAASC,IAAW,CAC5C,IAAMC,EAAYpD,EAA0B,EAC5C,GAAI,CAACoD,EACH,OAEF,GAAI,CACF3E,EAAQ4E,EACR,OAAQC,EACR,QAASC,EACTvE,EAASwE,EACTpE,EAAYqE,EACZ/E,EAAiBjB,EACjBkB,EAAQf,EACRgB,EAAgBf,EAChBgB,EAAcf,EACdgB,EAAef,EACfgB,EAAgBf,EAChB0F,EAAoBC,EACpB,GAAGC,CACL,EAA0BR,EAGpB7E,EAAkC,CACtC,GAAGgF,CACL,EAEIM,EAEEC,EAAkB,IAAM,CAC5B,IAAMC,EAAmB/D,EAA0B,EAC9C+D,IAELV,EAAQU,EAAiBtF,EACzBmF,EAAK,KAAOG,EAAiB,KAC7BC,EAAO,EACT,EAEMC,EAAqB,IAAM,CAC/BJ,EAAqB,MAAM,EACtB3D,EAAS,QACZ4D,EAAgB,CAEpB,EAEKrG,GACHyC,EAAS,iBAAiB,mBAAoB+D,CAAkB,EAGlE,IAAIC,EACEC,EAAU,IAAM,CACpBjE,EAAS,oBAAoB,mBAAoB+D,CAAkB,EACnE,aAAaC,CAAU,EACvBL,EAAqB,MAAM,CAC7B,EAGAP,EAAa,iBAAiB,QAAS,IAAM,CAC3Ca,EAAQ,EACRjB,EAAQ,CACV,CAAC,EAED,IAAMkB,GAASZ,EAEXa,EAAU,EACVC,GAAoBzG,EAElB0G,GAAe,IAAM,CACrBF,EAAUrG,GACZkB,GAAcmC,GAAUtE,EAAI,CAAC,CAAC,EAC9B,aAAamH,CAAU,EACvBA,EAAa,WAAWJ,EAAiBjG,CAAa,EACtDwG,IAEAxG,EAAgB,KAAK,IAAIA,EAAgBC,EAAaC,CAAY,IAElEmB,GAAcoC,GAAgBvE,EAAI,CAAC,CAAC,EACpCoH,EAAQ,EACRhB,EAAO,sBAAsB,EAEjC,EAEMa,EAAS,SAAY,CACzBH,EAAuB,IAAI,gBAC3B,IAAMW,EAAmBX,EAAqB,OAC9C,GAAI,CACF,IAAM5E,EAAW,MAAM,MAAMoE,EAAO,CAClC,GAAGO,EACH,QAAArF,EACA,OAAQiG,CACV,CAAC,EAED,MAAMJ,GAAOnF,CAAQ,EAErB,IAAMwF,EAAiB,MACrBC,EACAzF,GACArC,GACA+G,MACGgB,KACA,CACH,IAAM9E,GAAuB,CAC3B,CAACjD,EAAI,EAAG,MAAMqC,GAAS,KAAK,CAC9B,EACA,QAAW2F,MAAKD,GAAU,CACxB,IAAI/E,GAAIX,GAAS,QAAQ,IAAI,YAAY4F,GAAMD,EAAC,CAAC,EAAE,EACnD,GAAIjB,GAAmB,CACrB,IAAMmB,GAAKnB,GAA0BiB,EAAC,EAClCE,KAAGlF,GAAI,OAAOkF,IAAM,SAAWA,GAAI,KAAK,UAAUA,EAAC,EACzD,CACIlF,KAAGC,GAAQ+E,EAAC,EAAIhF,GACtB,EACI,CAACzB,GAAsBpB,EAAG,cAC5BmC,GAAcwF,EAAc3H,EAAI8C,EAAO,EAEzCsE,EAAQ,EACRjB,EAAQ,CACV,EAEM6B,EAAS9F,EAAS,OAClB+F,EAAoBD,IAAW,IAC/BE,GAAmBF,GAAU,KAAOA,EAAS,IAC7CG,EAAgBH,GAAU,KAAOA,EAAS,IAEhD,GAAIA,IAAW,IAAK,CAClB,GACEnH,IAAU,SACV,CAACoH,GACD,CAACC,KACArH,IAAU,UAAaA,IAAU,SAAWsH,GAC7C,CACAX,GAAa,EACb,MACF,CACAJ,EAAQ,EACRjB,EAAQ,EACR,MACF,CAGAmB,EAAU,EACVxG,EAAgByG,GAEhB,IAAMa,GAAKlG,EAAS,QAAQ,IAAI,cAAc,EAC9C,GAAIkG,IAAI,SAAS,WAAW,EAC1B,OAAO,MAAMV,EACX,0BACAxF,EACA,WACA0E,EACA,WACA,OACA,YACA,mBACF,EAGF,GAAIwB,IAAI,SAAS,kBAAkB,EACjC,OAAO,MAAMV,EACX,yBACAxF,EACA,UACA0E,EACA,eACF,EAGF,GAAIwB,IAAI,SAAS,iBAAiB,EAAG,CACnC,IAAMC,EAASlF,EAAS,cAAc,QAAQ,EACxCmF,GAAyBpG,EAAS,QAAQ,IAC9C,4BACF,EAEA,GAAIoG,GACF,OAAW,CAACzI,GAAMqE,EAAK,IAAK,OAAO,QACjC,KAAK,MAAMoE,EAAsB,CACnC,EACED,EAAO,aAAaxI,GAAMqE,EAAe,EAG7C,IAAMqE,GAAU,MAAMrG,EAAS,KAAK,EACpCsG,GAAcH,EAAQE,EAAO,EAC7BpF,EAAS,KAAK,YAAYkF,CAAM,EAChCjB,EAAQ,EACR,MACF,CAuBA,GArBA,MAAM3C,GACJvC,EAAS,KACT4C,GACEW,GACGgD,GAAO,CACFA,EAEFjH,EAAQ,eAAe,EAAIiH,EAG3B,OAAOjH,EAAQ,eAAe,CAElC,EACCX,GAAU,CACT0G,GAAoBzG,EAAgBD,CACtC,EACA6F,CACF,CACF,CACF,EAEI7F,IAAU,UAAY,CAACqH,GAAkB,CAC3CV,GAAa,EACb,MACF,CAEAJ,EAAQ,EACRjB,EAAQ,CACV,MAAQ,CACN,GAAI,CAACsB,EAAiB,QACpB,GAAI,CACFD,GAAa,CACf,OAASkB,EAAU,CACjBtB,EAAQ,EACRhB,EAAOsC,CAAQ,CACjB,CAEJ,CACF,EAEAzB,EAAO,CACT,CAAC,EC/qBH0B,EAAU,CACR,KAAM,OACN,YAAa,CAAE,MAAO,MAAO,EAC7B,aAAc,GACd,MAAM,CAAE,GAAAC,EAAI,IAAAC,EAAK,GAAAC,CAAG,EAAG,CACrB,IAAMC,EAAW,CAACF,EAAaG,IAAa,CACtCA,IAAQ,IAAMA,IAAQ,GACxBJ,EAAG,aAAaC,EAAK,EAAE,EACdG,IAAQ,IAASA,GAAO,KACjCJ,EAAG,gBAAgBC,CAAG,EACb,OAAOG,GAAQ,SACxBJ,EAAG,aAAaC,EAAKG,CAAG,EACf,OAAOA,GAAQ,WACxBJ,EAAG,aAAaC,EAAKG,EAAI,SAAS,CAAC,EAEnCJ,EAAG,aACDC,EACA,KAAK,UAAUG,EAAK,CAACC,EAAIC,IACvB,OAAOA,GAAM,WAAaA,EAAE,SAAS,EAAIA,CAC3C,CACF,CAEJ,EAEMC,EAASN,EACX,IAAM,CACJO,EAAS,WAAW,EACpB,IAAMJ,EAAMF,EAAG,EACfC,EAASF,EAAKG,CAAG,EACjBI,EAAS,QAAQR,EAAI,CACnB,gBAAiB,CAACC,CAAG,CACvB,CAAC,CACH,EACA,IAAM,CACJO,EAAS,WAAW,EACpB,IAAMC,EAAMP,EAAG,EACTQ,EAAkB,OAAO,KAAKD,CAAG,EACvC,QAAWR,KAAOS,EAChBP,EAASF,EAAKQ,EAAIR,CAAG,CAAC,EAExBO,EAAS,QAAQR,EAAI,CACnB,gBAAAU,CACF,CAAC,CACH,EAEEF,EAAW,IAAIG,EAAsBJ,CAAM,EAC3CK,EAAUC,EAAON,CAAM,EAE7B,MAAO,IAAM,CACXC,EAAS,WAAW,EACpBI,EAAQ,CACV,CACF,CACF,CAAC,ECjCD,IAAME,GAAc,CAACC,KAAiBC,KAAmC,CACvEC,EAAOC,GAAYA,EAAGH,CAAI,EAC1BI,EAAM,CAACD,EAASE,IAAe,CAC7BF,EAAGH,CAAI,EAAIK,CACb,EACAC,EAASL,CACX,GAEMM,GAAc,CAACC,KAAiBP,KAAmC,CACvEC,EAAOC,GAAgBA,EAAG,aAAaK,CAAI,EAC3CJ,EAAM,CAACD,EAAaE,IAAe,CACjCF,EAAG,aAAaK,EAAM,GAAGH,CAAK,EAAE,CAClC,EACAC,EAASL,CACX,GAEMQ,GAAe,CACnBC,EAAyB,MACtBT,KACc,CACjBC,EAAM,CAACC,EAA0CQ,IAC/CA,IAAS,UAAaD,GAA0BC,IAAS,YACrDR,EAAG,MACH,CAACA,EAAG,MACVC,EAAM,CAACD,EAA0CE,IAA2B,CAC1EF,EAAG,MAAQ,GAAGE,CAAK,EACrB,EACAC,EAASL,CACX,GAEMW,GAAgB,IAAmB,CACvC,IAAMC,EAAU,IAAI,IACpB,MAAO,CACLX,EAAM,CAACC,EAAuBQ,IAC5BR,EAAG,SACC,CAAC,GAAGA,EAAG,eAAe,EAAE,IAAKW,GAC3BD,EAAQ,IAAIC,EAAO,KAAK,EAAI,CAACA,EAAO,MAAQA,EAAO,KACrD,EACAH,IAAS,UAAYA,IAAS,YAC5BR,EAAG,MACH,CAACA,EAAG,MACZC,EAAM,CAACD,EAAuBE,IAAe,CAC3C,GAAI,CAACF,EAAG,SAAU,CAChBA,EAAG,MAAQ,GAAGE,CAAK,GACnB,MACF,CACA,QAAWS,KAAUX,EAAG,QAClBE,EAAM,SAASS,EAAO,KAAK,GAC7BD,EAAQ,OAAOC,EAAO,KAAK,EAC3BA,EAAO,SAAW,IACTT,EAAM,SAAS,CAACS,EAAO,KAAK,GACrCD,EAAQ,IAAIC,EAAO,KAAK,EACxBA,EAAO,SAAW,IAElBA,EAAO,SAAW,EAGxB,EACAR,EAAS,CAAC,QAAQ,CACpB,CACF,EAEMS,GAAe,+CACfC,GAAQ,OAAO,OAAO,EAEtBC,GAAY,CAChBd,EACAe,EACAC,EACAC,EACAC,EACAC,IACG,CACH,IAAMC,EAAeC,EAAS,IAAI,OAAOL,CAAM,CAAC,EAC1CM,EAAWP,EACb,IAAIK,CAAY,IAChB,IAAIA,CAAY,KAAK,IAAI,OAAOH,CAAU,CAAC,KAC/C,GACEE,IAAiB,QACjBnB,aAAcuB,GACdvB,EAAG,OAAS,QACZ,CACA,IAAMwB,EAAU,CAAC,GAAGC,EAAS,iBAAiBH,CAAQ,CAAC,EAAE,KACtDI,GACCA,aAAiBH,GAAaG,EAAM,OACxC,EAEIF,GACFG,EAAW,CAAC,CAACV,EAAYO,EAAQ,KAAK,CAAC,EAAG,CAAE,UAAW,EAAK,CAAC,CAEjE,CAEA,GACE,CAAC,MAAM,QAAQL,CAAY,GAC1BnB,aAAc,mBAAqBA,EAAG,SAEvC,OAAA2B,EAAW,CAAC,CAACV,EAAYC,EAAQnB,EAAKC,EAAI,OAAOmB,CAAY,CAAC,CAAC,EAAG,CAChE,UAAW,EACb,CAAC,EACMF,EAGT,IAAMW,EAASH,EAAS,iBAAiBH,CAAQ,EAE3CO,EAAe,CAAC,EAClBC,EAAI,EACR,QAAWJ,KAASE,EAAQ,CAS1B,GAPAC,EAAM,KAAK,CACT,GAAGZ,CAAU,IAAIa,CAAC,GAClBZ,EAAQnB,EACN2B,EACA,OAAQK,EAAOZ,EAAcW,CAAC,EAAIX,EAAaW,CAAC,EAAI,OACtD,CACF,CAAC,EACG9B,IAAO0B,EACT,MAEFI,GACF,CACA,OAAAH,EAAWE,EAAO,CAAE,UAAW,EAAK,CAAC,EAC9B,GAAGZ,CAAU,IAAIa,CAAC,EAC3B,EAEAE,EAAU,CACR,KAAM,OACN,YAAa,YACb,MAAM,CAAE,GAAAhC,EAAI,IAAAe,EAAK,OAAAC,EAAQ,KAAAiB,EAAM,MAAA/B,EAAO,MAAAgC,CAAM,EAAG,CAC7C,IAAMjB,EAAaF,GAAO,KAAOoB,EAAapB,EAAKkB,CAAI,EAAI/B,EAErDkC,EAAQH,EAAK,IAAI,MAAM,EACvBnC,EAASmC,EAAK,IAAI,OAAO,EAC3Bf,EAA8B,KAElC,GAAIlB,aAAcuB,EAChB,OAAQvB,EAAG,KAAM,CACf,IAAK,QACL,IAAK,SACHkB,EAAUZ,GAAa,GAAO,OAAO,EACrC,MACF,IAAK,WACHY,EAAU,CACRnB,EAAM,CAACC,EAAsBQ,IACvBR,EAAG,QAAU,KACRQ,IAAS,UACZR,EAAG,QACHA,EAAG,QACDA,EAAG,MACH,GAEDQ,IAAS,SACZR,EAAG,QACDA,EAAG,MACH,GACFA,EAAG,QAETC,EAAM,CAACD,EAAsBE,IAA4B,CACvDF,EAAG,QACD,OAAOE,GAAU,SAAWA,IAAUF,EAAG,MAAQE,CACrD,EACAC,EAAS,CAAC,OAAO,CACnB,EACA,MACF,IAAK,QACEH,EAAG,aAAa,MAAM,GAAG,QAC5BA,EAAG,aAAa,OAAQiB,CAAU,EAEpCC,EAAU,CACRnB,EAAM,CAACC,EAAsBQ,IAC3BR,EAAG,QAAWQ,IAAS,SAAW,CAACR,EAAG,MAAQA,EAAG,MAASa,GAC5DZ,EAAM,CAACD,EAAsBE,IAA2B,CACtDF,EAAG,QACDE,KAAW,OAAOA,GAAU,SAAW,CAACF,EAAG,MAAQA,EAAG,MAC1D,EACAG,EAAS,CAAC,OAAO,CACnB,EACA,MACF,IAAK,OAAQ,CACX,IAAMkC,EAAa,IAAM,CACvB,IAAMC,EAAQ,CAAC,GAAItC,EAAG,OAAS,CAAC,CAAE,EAC5BuC,EAA4B,CAAC,EACnC,QAAQ,IACND,EAAM,IACHE,GACC,IAAI,QAAeC,GAAY,CAC7B,IAAMC,EAAS,IAAI,WACnBA,EAAO,OAAS,IAAM,CACpB,GAAI,OAAOA,EAAO,QAAW,SAC3B,MAAMR,EAAM,wBAAyB,CACnC,WAAY,OAAOQ,EAAO,MAC5B,CAAC,EAEH,IAAMC,EAAQD,EAAO,OAAO,MAAM9B,EAAY,EAC9C,GAAI,CAAC+B,GAAO,OACV,MAAMT,EAAM,iBAAkB,CAC5B,OAAQQ,EAAO,MACjB,CAAC,EAEHH,EAAY,KAAK,CACf,KAAMC,EAAE,KACR,SAAUG,EAAM,OAAO,SACvB,KAAMA,EAAM,OAAO,IACrB,CAAC,CACH,EACAD,EAAO,UAAY,IAAMD,EAAQ,EACjCC,EAAO,cAAcF,CAAC,CACxB,CAAC,CACL,CACF,EAAE,KAAK,IAAM,CACXb,EAAW,CAAC,CAACV,EAAYsB,CAAW,CAAC,CAAC,CACxC,CAAC,CACH,EAEA,OAAAvC,EAAG,iBAAiB,SAAUqC,CAAU,EACjC,IAAM,CACXrC,EAAG,oBAAoB,SAAUqC,CAAU,CAC7C,CACF,CACA,QACEnB,EAAUZ,GAAa,GAAM,OAAO,CACxC,MACSN,aAAc,kBACvBkB,EAAUT,GAAc,EACfT,aAAc,oBACvBkB,EAAUtB,GAAY,QAAS,OAAO,EAC7BI,aAAc,aAAeA,EAAG,QAAQ,SAAS,GAAG,EAC7DkB,EACE,UAAWlB,EACPJ,GAAY,QAAS,QAAS,QAAQ,EACtCQ,GAAY,QAAS,QAAS,QAAQ,EACnCJ,aAAc,aAAe,UAAWA,EACjDkB,EAAUtB,GAAY,QAAS,QAAQ,EAEvCsB,EAAUd,GAAY,QAAS,QAAQ,EAEzC,GAAI,CAACc,EACH,MAAMgB,EAAM,oBAAoB,EAGlC,IAAMU,EAAYR,GAAS,CAAC,GAAGA,CAAK,EAAE,CAAC,EACvC,GAAIA,GAAS,CAACQ,EAAW,MAAMV,EAAM,qBAAqB,EAC1D,GAAIU,EAAW,CACb,IAAM/C,EAAOgD,GAAMD,CAAS,EAC5B1B,EAAUtB,GAAYC,EAAM,GAAIC,EAAS,CAAC,GAAGA,CAAM,EAAIoB,EAAQf,CAAQ,CACzE,MAAWL,IACToB,EAAQf,EAAU,CAAC,GAAGL,CAAM,GAG9B,IAAIgD,EAAOhC,GACTd,EACAe,EACAC,EACAC,EACAC,EACA6B,GAAQ9B,CAAU,CACpB,EACMoB,EAAa,IAAM,CACvB,IAAMW,EAAcD,GAAQD,CAAI,EAChC,GAAIE,GAAe,KAAM,CACvB,IAAM9C,EAAQgB,EAAQnB,EAAKC,EAAI,OAAOgD,CAAW,EAC7C9C,IAAUW,IACZc,EAAW,CAAC,CAACmB,EAAM5C,CAAK,CAAC,CAAC,CAE9B,CACF,EACM+C,EAAc,IAAM,CACxB/B,EAAQjB,EAAKD,EAAI+C,GAAQD,CAAI,CAAC,CAChC,EAEA,QAAWI,KAAahC,EAAQf,EAC9BH,EAAG,iBAAiBkD,EAAWb,CAAU,EAE3CrC,EAAG,iBAAiBmD,GAA4Bd,CAAU,EAC1D,IAAIe,EAAUC,EAAOJ,CAAW,EAC1BK,EACJtD,aAAc,kBACV,IAAIuD,EAAsB,IAAM,CAC9BH,EAAQ,EACRN,EAAOhC,GACLd,EACAe,EACAC,EACAC,EACAC,EACA6B,GAAQ9B,CAAU,CACpB,EACAmC,EAAUC,EAAOJ,CAAW,CAC9B,CAAC,EACD,KACN,OAAAK,GAAkB,QAAQtD,EAAI,CAAE,gBAAiB,CAAC,UAAU,CAAE,CAAC,EAExD,IAAM,CACXsD,GAAkB,WAAW,EAC7BF,EAAQ,EACR,QAAWF,KAAahC,EAAQf,EAC9BH,EAAG,oBAAoBkD,EAAWb,CAAU,EAE9CrC,EAAG,oBAAoBmD,GAA4Bd,CAAU,CAC/D,CACF,CACF,CAAC,EC/TDmB,EAAU,CACR,KAAM,QACN,YAAa,CACX,MAAO,MACT,EACA,aAAc,GACd,MAAM,CAAE,IAAAC,EAAK,GAAAC,EAAI,KAAAC,EAAM,GAAAC,CAAG,EAAG,CAC3BH,IAAQI,EAAaJ,EAAKE,EAAM,OAAO,EAEvC,IAAIG,EACEC,EAAW,IAAM,CACrBC,EAAS,WAAW,EAEpBF,EAAUL,EACN,CAAE,CAACA,CAAG,EAAGG,EAAG,CAAa,EACxBA,EAAG,EAER,QAAWK,KAAKH,EAAS,CACvB,IAAMI,EAAaD,EAAE,MAAM,KAAK,EAAE,OAAQE,GAAOA,EAAG,OAAS,CAAC,EAC9D,GAAIL,EAAQG,CAAC,EACX,QAAWG,KAAQF,EACZR,EAAG,UAAU,SAASU,CAAI,GAC7BV,EAAG,UAAU,IAAIU,CAAI,MAIzB,SAAWA,KAAQF,EACbR,EAAG,UAAU,SAASU,CAAI,GAC5BV,EAAG,UAAU,OAAOU,CAAI,CAIhC,CAEAJ,EAAS,QAAQN,EAAI,CAAE,gBAAiB,CAAC,OAAO,CAAE,CAAC,CACrD,EAEMM,EAAW,IAAIK,EAAsBN,CAAQ,EAC7CO,EAAUC,EAAOR,CAAQ,EAE/B,MAAO,IAAM,CACXC,EAAS,WAAW,EACpBM,EAAQ,EAER,QAAWL,KAAKH,EAAS,CACvB,IAAMI,EAAaD,EAAE,MAAM,KAAK,EAAE,OAAQE,GAAOA,EAAG,OAAS,CAAC,EAC9D,QAAWC,KAAQF,EACjBR,EAAG,UAAU,OAAOU,CAAI,CAE5B,CACF,CACF,CACF,CAAC,ECpDDI,EAAU,CACR,KAAM,WACN,YAAa,CACX,MAAO,MACT,EACA,aAAc,GACd,MAAM,CAAE,IAAAC,EAAK,KAAAC,EAAM,GAAAC,EAAI,MAAAC,CAAM,EAAG,CAC9B,GAAIH,EACFI,EAAW,CAAC,CAACC,EAAaL,EAAKC,CAAI,EAAGK,GAASJ,CAAE,CAAC,CAAC,CAAC,MAC/C,CACL,IAAMK,EAAQ,OAAO,OAAO,CAAC,EAAGL,EAAG,CAA8B,EACjEM,GAAaD,EAAQE,GAAQ,CAC3B,GAAI,OAAOA,GAAQ,WACjB,OAAOH,GAASG,CAAG,EAEnB,MAAMN,EAAM,0BAA0B,CAE1C,CAAC,EACDO,EAAWH,CAAK,CAClB,CACF,CACF,CAAC,ECvBDI,EAAU,CACR,KAAM,SACN,YAAa,CACX,IAAK,SACL,MAAO,MACT,EACA,MAAO,CAAC,CAAE,GAAAC,CAAG,IAAMC,EAAOD,CAAE,CAC9B,CAAC,ECHDE,EAAU,CACR,KAAM,YACN,YAAa,YACb,MAAM,CAAE,GAAAC,EAAI,IAAAC,EAAK,KAAAC,EAAM,MAAAC,CAAM,EAAG,CAC9B,IAAMC,EAAaH,GAAO,KAAOI,EAAaJ,EAAKC,CAAI,EAAIC,EACvDG,EAAgB,EAEpBC,EAAW,CAAC,CAACH,EAAY,EAAK,CAAC,CAAC,EAEhC,IAAMI,GAAYC,GAA2C,CAC3D,GAAM,CAAE,KAAAC,EAAM,GAAIC,CAAI,EAAIF,EAAM,OAChC,GAAIE,IAAQX,EAGZ,OAAQU,EAAM,CACZ,KAAKE,GACHN,IACAC,EAAW,CAAC,CAACH,EAAY,EAAI,CAAC,CAAC,EAC/B,MACF,KAAKS,GACHP,EAAgB,KAAK,IAAI,EAAGA,EAAgB,CAAC,EAC7CC,EAAW,CAAC,CAACH,EAAYE,EAAgB,CAAC,CAAC,CAAC,EAC5C,KACJ,CACF,GACA,OAAAQ,EAAS,iBAAiBC,EAAsBP,CAAO,EAChD,IAAM,CACXF,EAAgB,EAChBC,EAAW,CAAC,CAACH,EAAY,EAAK,CAAC,CAAC,EAChCU,EAAS,oBAAoBC,EAAsBP,CAAO,CAC5D,CACF,CACF,CAAC,EC3CM,IAAMQ,GAAWC,GAAsB,CAC5C,QAAWC,KAAOD,EAChB,OAAIC,EAAI,SAAS,IAAI,EACZ,CAACA,EAAI,MAAM,EAAG,EAAE,EAErBA,EAAI,SAAS,GAAG,EACX,CAACA,EAAI,MAAM,EAAG,EAAE,EAAI,IAEtB,OAAO,WAAWA,CAAG,EAE9B,MAAO,EACT,EAEaC,GAAS,CAACC,EAAmBC,IACxCD,EAAK,IAAIC,EAAI,YAAY,CAAC,EAEfC,GAAW,CAACF,EAAoBG,EAAe,KAAe,CACzE,GAAIH,EACF,QAAWC,KAAOD,EAChB,OAAOC,EAGX,OAAOE,CACT,ECpBO,IAAMC,GAAQ,CACnBC,EACAC,IAEO,IAAIC,IAAgB,CACzB,WAAWF,EAAUC,EAAM,GAAGC,CAAI,CACpC,EAGWC,GAAW,CACtBH,EACAC,EACAG,EAAU,GACVC,EAAW,GACXC,EAAW,KACc,CACzB,IAAIC,EAAoD,KACpDC,EAAgD,EAEpD,MAAO,IAAIN,IAAgB,CACrBE,GAAW,CAACI,GACdR,EAAS,GAAGE,CAAI,EAChBK,EAAW,MAEXA,EAAWL,GAET,CAACM,GAASF,KACRE,GACF,aAAaA,CAAK,EAEpBA,EAAQ,WAAW,IAAM,CACnBH,GAAYE,IAAa,MAC3BP,EAAS,GAAGO,CAAQ,EAEtBA,EAAW,KACXC,EAAQ,CACV,EAAGP,CAAI,EAEX,CACF,EAEaQ,GAAe,CAC1BT,EACAU,IACyB,CACzB,IAAMC,EAAYD,EAAK,IAAI,OAAO,EAClC,GAAIC,EAAW,CACb,IAAMV,EAAOW,GAAQD,CAAS,EAC9BX,EAAWD,GAAMC,EAAUC,CAAI,CACjC,CAEA,IAAMY,EAAeH,EAAK,IAAI,UAAU,EACxC,GAAIG,EAAc,CAChB,IAAMZ,EAAOW,GAAQC,CAAY,EAC3BT,EAAUU,GAAOD,EAAc,SAAS,EACxCR,EAAW,CAACS,GAAOD,EAAc,YAAY,EACnDb,EAAWG,GAASH,EAAUC,EAAMG,EAASC,EAAU,EAAI,CAC7D,CAEA,IAAMU,EAAeL,EAAK,IAAI,UAAU,EACxC,GAAIK,EAAc,CAChB,IAAMd,EAAOW,GAAQG,CAAY,EAC3BX,EAAU,CAACU,GAAOC,EAAc,WAAW,EAC3CV,EAAWS,GAAOC,EAAc,UAAU,EAChDf,EAAWG,GAASH,EAAUC,EAAMG,EAASC,CAAQ,CACvD,CAEA,OAAOL,CACT,ECpEO,IAAMgB,GAA2BC,GACtC,wBAAyBA,EAEdC,GAAuB,CAClCC,EACAC,IACyB,CACzB,GAAIA,EAAK,IAAI,gBAAgB,GAAKJ,GAAwBK,CAAQ,EAAG,CACnE,IAAMC,EAAKH,EACXA,EAAW,IAAII,IACbF,EAAS,oBAAoB,IAAMC,EAAG,GAAGC,CAAI,CAAC,CAClD,CAEA,OAAOJ,CACT,ECPAK,EAAU,CACR,KAAM,OACN,YAAa,CACX,IAAK,SACL,MAAO,MACT,EACA,MAAM,CAAE,GAAAC,EAAI,KAAAC,CAAK,EAAG,CAClB,IAAIC,EAAW,IAAM,CACnBC,EAAW,EACX,GAAI,CACFH,EAAG,CACL,QAAE,CACAI,EAAS,CACX,CACF,EACAF,EAAWG,GAAqBH,EAAUD,CAAI,EAC9C,IAAIK,EAAO,EACLC,EAAYN,EAAK,IAAI,OAAO,EAC9BM,IACFD,EAAOE,GAAQD,CAAS,EACpBD,EAAO,IACTJ,EAAWO,GAAMP,EAAUI,CAAI,IAGnCJ,EAAS,CACX,CACF,CAAC,EC1BDQ,EAAU,CACR,KAAM,eACN,YAAa,CACX,IAAK,QACP,EACA,MAAM,CAAE,GAAAC,EAAI,MAAAC,EAAO,KAAAC,CAAK,EAAG,CACzB,IAAMC,EAASD,EAAK,IAAI,OAAO,EAAI,EAAI,EACnCE,EAA+B,CAAC,EAChCH,IACFG,EAAUC,GAAcJ,CAAK,GAG/B,IAAMK,EAAW,IAAM,CACrBC,EAAS,WAAW,EACpBP,EAAG,YAAc,KAAK,UAAUQ,EAASJ,CAAO,EAAG,KAAMD,CAAM,EAC/DI,EAAS,QAAQP,EAAI,CACnB,UAAW,GACX,cAAe,GACf,QAAS,EACX,CAAC,CACH,EACMO,EAAW,IAAIE,EAAsBH,CAAQ,EAC7CI,EAAUC,EAAOL,CAAQ,EAE/B,MAAO,IAAM,CACXC,EAAS,WAAW,EACpBG,EAAQ,CACV,CACF,CACF,CAAC,ECxBDE,EAAU,CACR,KAAM,KACN,YAAa,OACb,SAAU,CAAC,KAAK,EAChB,MAAM,CAAE,GAAAC,EAAI,IAAAC,EAAK,KAAAC,EAAM,GAAAC,CAAG,EAAG,CAC3B,IAAIC,EAAsCJ,EACtCE,EAAK,IAAI,QAAQ,EACnBE,EAAS,OACAF,EAAK,IAAI,UAAU,IAC5BE,EAASC,GAEX,IAAIC,EAAYC,GAAgB,CAC9BC,EAAW,EACX,GAAI,CACFL,EAAGI,CAAG,CACR,QAAE,CACAE,EAAS,CACX,CACF,EACAH,EAAWI,GAAqBJ,EAAUJ,CAAI,EAC9CI,EAAWK,GAAaL,EAAUJ,CAAI,EACtC,IAAMU,EAAYC,EAAaZ,EAAKC,EAAM,OAAO,EAC3CY,EAAuC,CAC3C,QAASZ,EAAK,IAAI,SAAS,EAC3B,QAASA,EAAK,IAAI,SAAS,EAC3B,KAAMA,EAAK,IAAI,MAAM,CACvB,EACA,GAAIA,EAAK,IAAI,SAAS,EAAG,CACvBE,EAASC,EACT,IAAMU,EAAKT,EACXA,EAAYC,GAAgB,CACrBP,EAAG,SAASO,GAAK,MAAqB,GACzCQ,EAAGR,CAAG,CAEV,CACF,EAGEK,IAAcI,GACdJ,IAAcK,MAEdb,EAASC,GAGX,IAAMa,EAAYX,GAAgB,CAC5BA,IACEL,EAAK,IAAI,SAAS,GAAGK,EAAI,eAAe,EACxCL,EAAK,IAAI,MAAM,GAAGK,EAAI,gBAAgB,EAEtCP,aAAc,iBAAmBY,IAAc,UAAUL,EAAI,eAAe,GAElFD,EAASC,CAAG,CACd,EACA,OAAAH,EAAO,iBAAiBQ,EAAWM,EAAUJ,CAAW,EACjD,IAAM,CACXV,EAAO,oBAAoBQ,EAAWM,EAAUJ,CAAW,CAC7D,CACF,CACF,CAAC,ECzEM,IAAMK,GAAQ,CAACC,EAAeC,EAAaC,IACzC,KAAK,IAAID,EAAK,KAAK,IAAIC,EAAKF,CAAK,CAAC,ECW3C,IAAMG,GAAO,IAAI,QAEjBC,EAAU,CACR,KAAM,eACN,YAAa,CACX,IAAK,SACL,MAAO,MACT,EACA,MAAM,CAAE,GAAAC,EAAI,KAAAC,EAAM,GAAAC,CAAG,EAAG,CACtB,IAAIC,EAAW,IAAM,CACnBC,EAAW,EACX,GAAI,CACFF,EAAG,CACL,QAAE,CACAG,EAAS,CACX,CACF,EACAF,EAAWG,GAAqBH,EAAUF,CAAI,EAC9CE,EAAWI,GAAaJ,EAAUF,CAAI,EACtC,IAAMO,EAAU,CAAE,UAAW,CAAE,EAC/B,GAAIP,EAAK,IAAI,MAAM,EACjBO,EAAQ,UAAY,UACXP,EAAK,IAAI,MAAM,EACxBO,EAAQ,UAAY,OACf,CACL,IAAMC,EAAYR,EAAK,IAAI,WAAW,EAClCQ,IACFD,EAAQ,UAAYE,GAAM,OAAOC,GAASF,CAAS,CAAC,EAAG,EAAG,GAAG,EAAI,IAErE,CACA,IAAMG,EAAOX,EAAK,IAAI,MAAM,EACxBY,EAAwC,IAAI,qBAC7CC,GAAY,CACX,QAAWC,KAASD,EACdC,EAAM,iBAAmBH,IAC3BT,EAAS,EACLU,GAAYf,GAAK,IAAIE,CAAE,GACzBa,EAAS,WAAW,EAI5B,EACAL,CACF,EACA,OAAAK,EAAS,QAAQb,CAAE,EACfC,EAAK,IAAI,MAAM,GACjBH,GAAK,IAAIE,CAAE,EAEN,IAAM,CACNC,EAAK,IAAI,MAAM,GAClBH,GAAK,OAAOE,CAAE,EAEZa,IACFA,EAAS,WAAW,EACpBA,EAAW,KAEf,CACF,CACF,CAAC,EC7DDG,EAAU,CACR,KAAM,cACN,YAAa,CACX,IAAK,SACL,MAAO,MACT,EACA,MAAM,CAAE,KAAAC,EAAM,GAAAC,CAAG,EAAG,CAClB,IAAIC,EAAW,IAAM,CACnBC,EAAW,EACX,GAAI,CACFF,EAAG,CACL,QAAE,CACAG,EAAS,CACX,CACF,EACAF,EAAWG,GAAqBH,EAAUF,CAAI,EAC9C,IAAIM,EAAW,IACTC,EAAeP,EAAK,IAAI,UAAU,EACpCO,IACFD,EAAWE,GAAQD,CAAY,EACfE,GAAOF,EAAc,SAAS,GAE5CL,EAAS,GAGb,IAAMQ,EAAa,YAAYR,EAAUI,CAAQ,EACjD,MAAO,IAAM,CACX,cAAcI,CAAU,CAC1B,CACF,CACF,CAAC,ECrBDC,EAAU,CACR,KAAM,kBACN,YAAa,CACX,MAAO,MACT,EACA,SAAU,CAAC,OAAO,EAClB,aAAc,GACd,MAAM,CAAE,GAAAC,EAAI,IAAAC,EAAK,KAAAC,EAAM,GAAAC,EAAI,MAAAC,CAAM,EAAG,CAClC,GAAMH,GAAOA,IAAQ,SACnB,MAAMG,EAAM,eAAe,EAG7B,IAAMC,EAAaC,EAAS,GAAG,KAAK,IAAI,SAAS,EAC3CC,EAAaP,EAAG,aAAaK,CAAU,EACzCG,EAA+B,CAAC,EAChCD,IACFC,EAAUC,GAAcF,CAAU,GAGpC,IAAIG,EAAU,GAERC,EAA0BC,GAC7BC,GAAgC,CAC/B,GAAIH,EAAS,OAEbI,EAAa,EACb,IAAMC,EAAUC,EAASR,EAASK,EAAI,MAAM,EAE5C,GADAI,EAAY,EACR,CAACC,GAAQH,CAAO,EAAG,CACrBL,EAAU,GACVS,EAAW,EACX,GAAI,CACFhB,EAAGY,CAAO,CACZ,QAAE,CACAK,EAAS,EACTV,EAAU,EACZ,CACF,CACF,EACAR,CACF,EAEA,OAAAmB,EAAS,iBAAiBC,GAA6BX,CAAQ,EACxD,IAAM,CACXU,EAAS,oBAAoBC,GAA6BX,CAAQ,CACpE,CACF,CACF,CAAC,ECzDDY,EAAU,CACR,KAAM,MACN,YAAa,YACb,MAAM,CAAE,GAAAC,EAAI,IAAAC,EAAK,KAAAC,EAAM,MAAAC,CAAM,EAAG,CAC9B,IAAMC,EAAaH,GAAO,KAAOI,EAAaJ,EAAKC,CAAI,EAAIC,EAC3DG,EAAW,CAAC,CAACF,EAAYJ,CAAE,CAAC,CAAC,CAC/B,CACF,CAAC,ECPD,IAAMO,GAAO,OACPC,GAAU,UAEhBC,EAAU,CACR,KAAM,OACN,YAAa,CACX,IAAK,SACL,MAAO,MACT,EACA,aAAc,GACd,MAAM,CAAE,GAAAC,EAAI,GAAAC,CAAG,EAAG,CAChB,IAAMC,EAAS,IAAM,CACnBC,EAAS,WAAW,EACDF,EAAG,EAEhBD,EAAG,MAAM,UAAYH,IAAMG,EAAG,MAAM,eAAeF,EAAO,EAE9DE,EAAG,MAAM,YAAYF,GAASD,EAAI,EAEpCM,EAAS,QAAQH,EAAI,CAAE,gBAAiB,CAAC,OAAO,CAAE,CAAC,CACrD,EACMG,EAAW,IAAIC,EAAsBF,CAAM,EAC3CG,EAAUC,EAAOJ,CAAM,EAE7B,MAAO,IAAM,CACXC,EAAS,WAAW,EACpBE,EAAQ,CACV,CACF,CACF,CAAC,EC7BDE,EAAU,CACR,KAAM,UACN,aAAc,GACd,MAAM,CAAE,IAAAC,EAAK,KAAAC,EAAM,GAAAC,CAAG,EAAG,CACvB,IAAMC,EAAYF,EAAK,IAAI,WAAW,EAEtC,GAAID,EAAK,CACPA,EAAMI,EAAaJ,EAAKC,CAAI,EAC5B,IAAMI,EAAQH,IAAK,EACnBI,EAAW,CAAC,CAACN,EAAKK,CAAK,CAAC,EAAG,CAAE,UAAAF,CAAU,CAAC,CAC1C,KAAO,CACL,IAAMI,EAAQ,OAAO,OAAO,CAAC,EAAGL,IAAK,CAAwB,EAC7DM,EAAWD,EAAO,CAAE,UAAAJ,CAAU,CAAC,CACjC,CACF,CACF,CAAC,ECdDM,EAAU,CACR,KAAM,QACN,YAAa,CACX,MAAO,MACT,EACA,aAAc,GACd,MAAM,CAAE,IAAAC,EAAK,GAAAC,EAAI,GAAAC,CAAG,EAAG,CACrB,GAAM,CAAE,MAAAC,CAAM,EAAIF,EACZG,EAAgB,IAAI,IAEpBC,EAAQ,CAACC,EAAcC,IAAe,CAC1C,IAAMC,EAAUJ,EAAc,IAAIE,CAAI,EAClC,CAACC,GAASA,IAAU,EACtBC,IAAY,SACTA,EACGL,EAAM,YAAYG,EAAME,CAAO,EAC/BL,EAAM,eAAeG,CAAI,IAE/BE,IAAY,QACVJ,EAAc,IAAIE,EAAMH,EAAM,iBAAiBG,CAAI,CAAC,EACtDH,EAAM,YAAYG,EAAM,OAAOC,CAAK,CAAC,EAEzC,EAEME,EAAS,IAAM,CAGnB,GAFAC,EAAS,WAAW,EAEhBV,EACFK,EAAML,EAAKE,EAAG,CAAC,MACV,CACL,IAAMS,EAAST,EAAG,EAElB,OAAW,CAACI,EAAME,CAAO,IAAKJ,EAC5BE,KAAQK,IACLH,EACGL,EAAM,YAAYG,EAAME,CAAO,EAC/BL,EAAM,eAAeG,CAAI,GAGjC,QAAWA,KAAQK,EACjBN,EAAMO,GAAMN,CAAI,EAAGK,EAAOL,CAAI,CAAC,CAEnC,CAEAI,EAAS,QAAQT,EAAI,CAAE,gBAAiB,CAAC,OAAO,CAAE,CAAC,CACrD,EAEMS,EAAW,IAAIG,EAAsBJ,CAAM,EAC3CK,EAAUC,EAAON,CAAM,EAE7B,MAAO,IAAM,CACXC,EAAS,WAAW,EACpBI,EAAQ,EACR,OAAW,CAACR,EAAME,CAAO,IAAKJ,EAC5BI,EAAUL,EAAM,YAAYG,EAAME,CAAO,EAAIL,EAAM,eAAeG,CAAI,CAE1E,CACF,CACF,CAAC,EC3DDU,EAAU,CACR,KAAM,OACN,YAAa,CACX,IAAK,SACL,MAAO,MACT,EACA,aAAc,GACd,MAAM,CAAE,GAAAC,EAAI,GAAAC,CAAG,EAAG,CAChB,IAAMC,EAAS,IAAM,CACnBC,EAAS,WAAW,EACpBH,EAAG,YAAc,GAAGC,EAAG,CAAC,GACxBE,EAAS,QAAQH,EAAI,CACnB,UAAW,GACX,cAAe,GACf,QAAS,EACX,CAAC,CACH,EAEMG,EAAW,IAAIC,EAAsBF,CAAM,EAC3CG,EAAUC,EAAOJ,CAAM,EAE7B,MAAO,IAAM,CACXC,EAAS,WAAW,EACpBE,EAAQ,CACV,CACF,CACF,CAAC,ECjBD,IAAME,GAAc,CAClB,SACA,QACA,QACA,UACA,UACA,SACA,SACA,OACF,EAGMC,GAAa,CAAC,OAAQ,MAAO,QAAQ,EAU3CC,GAAQ,CACN,KAAM,0BACN,MAAMC,EAAKC,EAAM,CACf,IAAMC,EAAW,OAAOD,EAAK,UAAa,SAAWA,EAAK,SAAW,GAC/DE,EAAO,OAAOF,EAAK,MAAS,SAAWA,EAAK,KAAO,QACnDG,EACJ,OAAOH,EAAK,WAAc,SAAWA,EAAK,UAAY,OAClDI,EAAoBC,GAAaL,EAAK,iBAAiB,EACvDM,EACJ,OAAON,EAAK,wBAA2B,SAAWA,EAAK,uBAAyB,GAC5EO,EAAWP,EAAK,SAEtB,GAAI,CAACJ,GAAY,SAASM,CAAyB,EACjD,MAAMH,EAAI,MAAM,2BAA4B,CAAE,KAAAG,CAAK,CAAC,EAGtD,GAAI,CAACD,GAAYC,IAAS,SAAWA,IAAS,UAC5C,MAAMH,EAAI,MAAM,+BAA+B,EAGjD,GAAI,CAACF,GAAW,SAASM,CAAsB,EAC7C,MAAMJ,EAAI,MAAM,gCAAiC,CAAE,UAAAI,CAAU,CAAC,EAGhE,IAAMK,EAAuC,CAC3CC,EAAWR,EACXS,EAAOR,EACPS,EAAYR,EACZS,EAAWL,CACb,EAEA,GAAIH,EAAmB,CACrB,IAAIS,EAA6BC,EACjC,GAAIR,EAAwB,CAC1B,IAAMS,EAAKD,EAAS,cAAcR,CAAsB,EACpDS,IACFF,EAASE,EAEb,CACIC,GAAwBH,CAAM,EAChCA,EAAO,oBAAoB,IAAMI,GAAgBlB,EAAKS,CAAiB,CAAC,EAExES,GAAgBlB,EAAKS,CAAiB,CAE1C,MACES,GAAgBlB,EAAKS,CAAiB,CAE1C,CACF,CAAC,EAED,IAAMS,GAAkB,CACtB,CAAE,MAAAC,CAAM,EACR,CACET,EAAWR,EACXS,EAAOR,EACPS,EAAYR,EACZS,EAAWL,CACb,IACG,CACH,IAAIY,EAAaL,EAAS,uBAAuB,EAC7CM,EAAU,OAAOb,GAAa,UAAY,CAAC,CAACA,EAEhD,GAAI,OAAOA,GAAa,SAAU,CAChC,IAAMc,EAA0Bd,EAAS,QACvC,uCACA,EACF,EACMe,EAAU,WAAW,KAAKD,CAAuB,EACjDE,EAAU,WAAW,KAAKF,CAAuB,EACjDG,EAAU,WAAW,KAAKH,CAAuB,EAEjDI,EACJtB,IAAc,MAAQ,MAAQA,IAAc,SAAW,OAAS,GAC5DuB,EAAaD,EACf,IAAIA,CAAU,IAAIlB,CAAQ,KAAKkB,CAAU,IACzClB,EAEEoB,EACJL,GAAWC,GAAWC,EAClBjB,EACA,mBAAmBmB,CAAU,qBAC7BE,EAAc,IAAI,UAAU,EAAE,gBAClCC,GAAWF,CAAI,EACf,WACF,EAEA,GAAIL,EACFH,EAAW,YAAYS,EAAY,eAAe,UACzCL,GAAWC,EACpBL,EAAW,YAAYS,EAAY,IAAI,EACvCT,EAAW,YAAYS,EAAY,IAAI,UAC9BL,EACTJ,EAAW,YAAYS,EAAY,IAAI,UAC9BJ,EACTL,EAAW,YAAYS,EAAY,IAAI,UAC9BH,EAAY,CACrB,IAAMK,EAAYF,EACf,cAAc,UAAU,EACxB,QAAQ,cAAcH,CAAU,EACnC,QAAWM,KAASD,EAAU,WAC5BX,EAAW,YAAYY,CAAK,CAEhC,MACEZ,EAAaS,EAAY,cAAc,UAAU,EAAG,OAExD,MAAWrB,IACLA,aAAoB,iBACtBY,EAAaZ,EACJA,aAAoB,SAC7BY,EAAW,YAAYZ,CAAQ,GAInC,GAAI,CAACN,IAAaC,IAAS,SAAWA,IAAS,WAAY,CACzD,IAAM8B,EAAW,MAAM,KAAKb,EAAW,QAAQ,EAC/C,QAAWY,KAASC,EAAU,CAC5B,IAAInB,EACJ,GAAIkB,aAAiB,gBACnBlB,EAASC,EAAS,wBACTiB,aAAiB,gBAC1BlB,EAASC,EAAS,aACTiB,aAAiB,gBAC1BlB,EAASC,EAAS,aAElBD,EAASC,EAAS,eAAeiB,EAAM,EAAE,EACrC,CAAClB,EAAQ,CACX,QAAQ,KAAKK,EAAM,6BAA6B,EAAG,CACjD,QAAS,CAAE,GAAIa,EAAM,EAAG,CAC1B,CAAC,EACD,QACF,CAIFE,GAAe/B,EAA2B6B,EAAO,CAAClB,CAAM,EAAG,EAAI,CACjE,CACF,KAAO,CACL,IAAMqB,EAAUpB,EAAS,iBAAiBb,CAAQ,EAClD,GAAI,CAACiC,EAAQ,OAAQ,CACnB,QAAQ,KAAKhB,EAAM,6BAA6B,EAAG,CAAE,SAAAjB,CAAS,CAAC,EAC/D,MACF,CAEA,IAAMkC,EAAaf,GAAWlB,IAAS,SAAW,CAACgC,EAAQ,CAAC,CAAE,EAAIA,EAG9DC,EAAW,SAAW,IACxBf,EAAU,IAGZa,GAAe/B,EAA2BiB,EAAYgB,EAAYf,CAAO,CAC3E,CACF,EAEMgB,GAAU,IAAI,QACpB,QAAWC,KAAUvB,EAAS,iBAAiB,QAAQ,EACrDsB,GAAQ,IAAIC,CAAM,EAGpB,IAAMC,GAAWzB,GAA0B,CACzC,IAAM0B,EACJ1B,aAAkB,kBACd,CAACA,CAAM,EACPA,EAAO,iBAAiB,QAAQ,EACtC,QAAW2B,KAAOD,EAChB,GAAI,CAACH,GAAQ,IAAII,CAAG,EAAG,CACrB,IAAMH,EAASvB,EAAS,cAAc,QAAQ,EAC9C,OAAW,CAAE,KAAA2B,EAAM,MAAAC,CAAM,IAAKF,EAAI,WAChCH,EAAO,aAAaI,EAAMC,CAAK,EAEjCC,GAAcN,EAAQG,EAAI,IAAI,EAC9BA,EAAI,YAAYH,CAAM,EACtBD,GAAQ,IAAIC,CAAM,CACpB,CAEJ,EAEMO,GAAiB,CACrBV,EACAW,EACAC,EACA1B,IACG,CACH,IAAI2B,EAAO,GACX,QAAWlC,KAAUqB,EAAS,CAC5B,GAAId,GAAW2B,EACb,MAEF,IAAMC,EAAW5B,EAAUyB,EAAWA,EAAQ,UAAU,EAAI,EAC5DP,GAAQU,CAAmB,EAE3BnC,EAAOiC,CAAM,EAAEE,CAAQ,EACvBD,EAAO,EACT,CACF,EAEMd,GAAiB,CACrB/B,EACA2C,EACAX,EACAd,IACG,CACH,OAAQlB,EAAM,CACZ,IAAK,SACH,QAAWW,KAAUqB,EACnBrB,EAAO,OAAO,EAEhB,MACF,IAAK,QACL,IAAK,QACH,CACE,IAAIkC,EAAO,GACX,QAAWlC,KAAUqB,EAAS,CAC5B,GAAId,GAAW2B,EACb,MAEF,IAAMC,EAAW5B,EAAUyB,EAAWA,EAAQ,UAAU,EAAI,EAC5DI,GAAMpC,EAAQmC,EAAU9C,CAAI,EAC5BoC,GAAQzB,CAAM,EACd,IAAMqC,EAAYrC,EAAO,QAAQ,uBAAuB,EACpDqC,GACFA,EAAU,cACR,IAAI,YAAYC,GAA+B,CAC7C,QAAS,EACX,CAAC,CACH,EAEFJ,EAAO,EACT,CACF,CACA,MACF,IAAK,UACHH,GAAeV,EAASW,EAAS,cAAezB,CAAO,EACvD,MACF,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,QACHwB,GAAeV,EAASW,EAAS3C,EAAMkB,CAAO,CAClD,CACF,EAEMgC,EAAW,IAAI,IACfC,GAAmB,IAAI,IACvBC,GAAkB,IAAI,IACtBC,GAAe,IAAI,IACnBC,GAAY1C,EAAS,cAAc,KAAK,EAC9C0C,GAAU,OAAS,GAEnB,IAAMC,GAAqBC,EAAS,cAAc,EAC5CC,GAAyB,IAAIF,EAAkB,IACxCR,GAAQ,CACnBW,EACAzC,EACAjB,EAA0B,UACjB,CACT,GACG2D,GAAYD,CAAM,GACjBC,GAAY1C,CAAU,GACtByC,EAAO,aAAaH,EAAkB,GACtCtC,EAAW,aAAasC,EAAkB,GAC5CG,EAAO,eAAe,QAAQD,EAAsB,EAEpD,OAGF,IAAMG,EAAgBhD,EAAS,cAAc,KAAK,EAClDgD,EAAc,OAAO3C,CAAU,EAC/BL,EAAS,KAAK,sBAAsB,WAAY0C,EAAS,EAGzD,IAAMO,EAAgBH,EAAO,iBAAiB,MAAM,EACpD,OAAW,CAAE,GAAAI,EAAI,QAAAC,CAAQ,IAAKF,EACxBT,GAAgB,IAAIU,CAAE,EACxBT,GAAa,IAAIS,CAAE,EAEnBV,GAAgB,IAAIU,EAAIC,CAAO,EAG/BL,aAAkB,SAAWA,EAAO,KAClCN,GAAgB,IAAIM,EAAO,EAAE,EAC/BL,GAAa,IAAIK,EAAO,EAAE,EAE1BN,GAAgB,IAAIM,EAAO,GAAIA,EAAO,OAAO,GAIjDP,GAAiB,MAAM,EACvB,IAAMa,EAAgBJ,EAAc,iBAAiB,MAAM,EAC3D,OAAW,CAAE,GAAAE,EAAI,QAAAC,CAAQ,IAAKC,EACxBb,GAAiB,IAAIW,CAAE,EACzBT,GAAa,IAAIS,CAAE,EACVV,GAAgB,IAAIU,CAAE,IAAMC,GACrCZ,GAAiB,IAAIW,CAAE,EAI3B,QAAWA,KAAMT,GACfF,GAAiB,OAAOW,CAAE,EAG5BV,GAAgB,MAAM,EACtBC,GAAa,MAAM,EACnBH,EAAS,MAAM,EAEf,IAAMe,EAASjE,IAAS,QAAU0D,EAAO,cAAiBA,EAC1DQ,GAAsBD,EAAQJ,CAAa,EAC3CK,GAAsBN,EAAeI,CAAa,EAElDG,GACEF,EACAL,EACA5D,IAAS,QAAU0D,EAAS,KAC5BA,EAAO,WACT,EAEAJ,GAAU,OAAO,CACnB,EAMMa,GAAgB,CACpBC,EACAC,EACAC,EAA8B,KAC9BC,EAAwB,OACf,CAGPH,aAAqB,qBACrBC,aAAqB,sBAGrBD,EAAYA,EAAU,QACtBC,EAAYA,EAAU,SAExBC,IAAmBF,EAAU,WAG7B,QAAWI,KAAYH,EAAU,WAAY,CAE3C,GAAIC,GAAkBA,IAAmBC,EAAU,CACjD,IAAME,EAAYC,GAAcF,EAAUF,EAAgBC,CAAQ,EAClE,GAAIE,EAAW,CAEb,GAAIA,IAAcH,EAAgB,CAChC,IAAIK,EAAsBL,EAE1B,KAAOK,GAAUA,IAAWF,GAAW,CACrC,IAAMG,EAAWD,EACjBA,EAASA,EAAO,YAChBE,GAAWD,CAAQ,CACrB,CACF,CACAE,GAAUL,EAAWD,CAAQ,EAC7BF,EAAiBG,EAAU,YAC3B,QACF,CACF,CAGA,GAAID,aAAoB,SAAWrB,GAAiB,IAAIqB,EAAS,EAAE,EAAG,CAGpE,IAAMO,EAAanE,EAAS,eAAe4D,EAAS,EAAE,EAMlDQ,EAAUD,EACd,KAAQC,EAAUA,EAAQ,YAAwB,CAChD,IAAMC,EAAQ/B,EAAS,IAAI8B,CAAO,EAC9BC,IACFA,EAAM,OAAOT,EAAS,EAAE,EACnBS,EAAM,MACT/B,EAAS,OAAO8B,CAAO,EAG7B,CAEAE,GAAWd,EAAWW,EAAYT,CAAc,EAChDQ,GAAUC,EAAYP,CAAQ,EAC9BF,EAAiBS,EAAW,YAC5B,QACF,CAIA,GAAI7B,EAAS,IAAIsB,CAAQ,EAAG,CAE1B,IAAMW,EAAgBX,EAAqB,aACrCT,EAAWS,EAAqB,QAChCY,EACJD,GAAgBA,IAAiB,+BAC7BvE,EAAS,gBAAgBuE,EAAcpB,CAAO,EAC9CnD,EAAS,cAAcmD,CAAO,EACpCK,EAAU,aAAagB,EAAed,CAAc,EACpDQ,GAAUM,EAAeZ,CAAQ,EACjCF,EAAiBc,EAAc,WACjC,KAAO,CAEL,IAAMC,EAAiBzE,EAAS,WAAW4D,EAAU,EAAI,EACzDJ,EAAU,aAAaiB,EAAgBf,CAAc,EACrDA,EAAiBe,EAAe,WAClC,CACF,CAGA,KAAOf,GAAkBA,IAAmBC,GAAU,CACpD,IAAMK,EAAWN,EACjBA,EAAiBA,EAAe,YAChCO,GAAWD,CAAQ,CACrB,CACF,EAKMF,GAAgB,CACpBY,EACAC,EACAhB,IACgB,CAChB,IAAIE,EAAqC,KACrCe,EAAcF,EAAK,YACnBG,EAAwB,EACxBC,EAAqB,EAGnBC,EAAiBzC,EAAS,IAAIoC,CAAI,GAAG,MAAQ,EAE/CX,EAASY,EACb,KAAOZ,GAAUA,IAAWJ,GAAU,CAEpC,GAAIqB,GAAYjB,EAAQW,CAAI,EAAG,CAC7B,IAAIO,EAAe,GACbC,EAAS5C,EAAS,IAAIyB,CAAM,EAC5BoB,EAAS7C,EAAS,IAAIoC,CAAI,EAEhC,GAAIS,GAAUD,GACZ,QAAWhC,KAAMgC,EAKf,GAAIC,EAAO,IAAIjC,CAAE,EAAG,CAClB+B,EAAe,GACf,KACF,EAIJ,GAAIA,EACF,OAAOlB,EAKT,GAAI,CAACF,GAAa,CAACvB,EAAS,IAAIyB,CAAM,EAAG,CAEvC,GAAI,CAACgB,EACH,OAAOhB,EAGTF,EAAYE,CACd,CACF,CAIA,GADAe,GAAsBxC,EAAS,IAAIyB,CAAM,GAAG,MAAQ,EAChDe,EAAqBC,EAGvB,MAGElB,IAAc,MAAQe,GAAeI,GAAYjB,EAAQa,CAAW,IAGtEC,IACAD,EAAcA,EAAY,YAKtBC,GAAyB,IAC3BhB,EAAY,SAIhBE,EAASA,EAAO,WAClB,CAEA,OAAOF,GAAa,IACtB,EAGMmB,GAAc,CAACI,EAAeC,IAClCD,EAAQ,WAAaC,EAAQ,UAC5BD,EAAoB,UAAaC,EAAoB,UAIrD,CAAED,EAAoB,IACpBA,EAAoB,KAAQC,EAAoB,IAK/CpB,GAAcS,GAAqB,CAEvCpC,EAAS,IAAIoC,CAAI,EAEbJ,GAAW5B,GAAWgC,EAAM,IAAI,EAEhCA,EAAK,YAAY,YAAYA,CAAI,CACvC,EAKMJ,GAAa,CAACgB,EAAkBZ,EAAYa,IAA6B,CAC7E,GAAI,eAAgBD,EAAY,CACPA,EAGR,WAAWZ,EAAMa,CAAK,EACrC,MACF,CACAD,EAAW,aAAaZ,EAAMa,CAAK,CACrC,EAEMC,GAAsB5C,EAAS,eAAe,EAI9CsB,GAAY,CAChBkB,EACAC,IACS,CACT,IAAMI,EAAOJ,EAAQ,SAIrB,GAAII,IAAS,EAAsB,CACjC,IAAM3C,EAASsC,EACTM,EAASL,EACTM,EAAsB7C,EAAO,aAAa,qBAAqB,EACrE,GACEA,EAAO,aAAaH,EAAkB,GACtC+C,EAAO,aAAa/C,EAAkB,EAEtC,OAAOyC,EAWT,IAAMQ,GACHP,EAAwB,aAAaG,EAAmB,GAAK,IAC9D,MAAM,GAAG,EAELK,EAAoB,CACxB/C,EACA4C,EACA/D,IACY,CACZ,IAAMmE,EAAgBJ,EAAO,aAAa/D,CAAI,EAC9C,OACEmB,EAAO,aAAanB,CAAI,IAAMmE,GAC9B,CAACF,EAAc,SAASjE,CAAI,GAG5BmB,EAAOnB,CAAI,EAAImE,EACR,IAEF,EACT,EAEIC,EAAgC,GACpC,GACEjD,aAAkBkD,GAClBN,aAAkBM,GAClBN,EAAO,OAAS,OAChB,CAEA,IAAMO,EAAWP,EAAO,aAAa,OAAO,EAE1C5C,EAAO,aAAa,OAAO,IAAMmD,GACjC,CAACL,EAAc,SAAS,OAAO,IAE/B9C,EAAO,MAAQmD,GAAY,GAC3BF,EAAgC,IAGlCA,EACEF,EAAkB/C,EAAQ4C,EAAQ,SAAS,GAC3CK,EACFF,EAAkB/C,EAAQ4C,EAAQ,UAAU,CAC9C,SACE5C,aAAkB,qBAClB4C,aAAkB,oBAClB,CAEA,IAAMO,EAAWP,EAAO,MACpB5C,EAAO,eAAiBmD,IAC1BnD,EAAO,MAAQmD,EACfF,EAAgC,GAEpC,MACEjD,aAAkB,mBAClB4C,aAAkB,oBAElBK,EACEF,EAAkB/C,EAAQ4C,EAAQ,UAAU,GAC5CK,GAGJ,OAAW,CAAE,KAAApE,EAAM,MAAAC,CAAM,IAAK8D,EAAO,WAEjC5C,EAAO,aAAanB,CAAI,IAAMC,GAC9B,CAACgE,EAAc,SAASjE,CAAI,GAE5BmB,EAAO,aAAanB,EAAMC,CAAK,EAKnC,OAAW,CAAE,KAAAD,CAAK,IAAK,MAAM,KAAKmB,EAAO,UAAU,EAC7C,CAAC4C,EAAO,aAAa/D,CAAI,GAAK,CAACiE,EAAc,SAASjE,CAAI,GAC5DmB,EAAO,gBAAgBnB,CAAI,EAI3BoE,IAEAjD,aAAkB,kBAAoBA,EAAO,QAAQ,QAAQ,EAAIA,IACtD,cACX,IAAI,MAAMoD,GAA4B,CAAE,QAAS,EAAK,CAAC,CACzD,EAIEP,GAAuB,CAAC7C,EAAO,aAAa,qBAAqB,GACnEA,EAAO,aAAa,sBAAuB,EAAE,EAI7CA,aAAkB,qBAClB4C,aAAkB,oBAElB5C,EAAO,UAAY/B,GAAW2E,EAAO,SAAS,EACpC5C,EAAO,YAAY4C,CAAM,GACnCnC,GAAcT,EAAQ4C,CAAM,EAG1BC,GACF7C,EAAO,cACL,IAAI,YAAYT,GAA+B,CAAE,QAAS,EAAM,CAAC,CACnE,CAEJ,CAEA,OAAIoD,IAAS,GAAmBA,IAAS,IACnCL,EAAQ,YAAcC,EAAQ,YAChCD,EAAQ,UAAYC,EAAQ,WAIzBD,CACT,EAMM9B,GAAwB,CAC5B6C,EACA1G,IACS,CACT,QAAW2G,KAAO3G,EAChB,GAAI8C,GAAiB,IAAI6D,EAAI,EAAE,EAAG,CAChC,IAAIhC,EAA0BgC,EAE9B,KAAOhC,GAAWA,IAAY+B,GAAM,CAClC,IAAI9B,EAAQ/B,EAAS,IAAI8B,CAAO,EAE3BC,IACHA,EAAQ,IAAI,IACZ/B,EAAS,IAAI8B,EAASC,CAAK,GAE7BA,EAAM,IAAI+B,EAAI,EAAE,EAChBhC,EAAUA,EAAQ,aACpB,CACF,CAEJ,EC/tBAiC,GAAQ,CACN,KAAM,yBACN,MAAM,CAAE,MAAAC,CAAM,EAAG,CAAE,QAAAC,EAAS,cAAAC,CAAc,EAAG,CAC3C,GAAI,OAAOD,GAAY,SACrB,MAAMD,EAAM,6BAA6B,EAG3C,IAAMG,EAAYC,GAAaF,CAAa,EAC5CG,EAAWC,GAAcL,CAAO,EAAG,CAAE,UAAAE,CAAU,CAAC,CAClD,CACF,CAAC",
  "names": ["DATASTAR_FETCH_EVENT", "DATASTAR_PROP_CHANGE_EVENT", "DATASTAR_READY_EVENT", "DATASTAR_SCOPE_CHILDREN_EVENT", "DATASTAR_SIGNAL_PATCH_EVENT", "DOCUMENT", "HTMLInput", "MutationObserverClass", "kebab", "str", "camel", "x", "snake", "isStringTrue", "value", "RE_FUNCTION_LITERAL", "evaluate", "source", "compileExpression", "jsStrToObject", "raw", "options", "reviveFunctionStrings", "_k", "trimmed", "revived", "caseFns", "str", "x", "modifyCasing", "mods", "defaultCase", "c", "aliasify", "name", "unaliasify", "url", "createError", "ctx", "reason", "metadata", "snake", "q", "c", "nonceAttribute", "aliasify", "root", "DOCUMENT", "pageNonce", "cspEnabled", "policy", "createError", "html", "script", "prepareScript", "content", "createHTML", "compiledExpressions", "compileExpression", "argNames", "expression", "source", "cached", "compiled", "hasOwn", "isPojo", "obj", "isEmpty", "prop", "hasOwn", "updateLeaves", "fn", "key", "val", "pathToObj", "paths", "result", "path", "value", "keys", "lastKey", "acc", "currentPatch", "queuedEffects", "batchDepth", "notifyIndex", "queuedEffectsLength", "subStack", "activeSub", "version", "beginBatch", "endBatch", "flush", "dispatch", "startPeeking", "sub", "value_", "prev_", "stopPeeking", "signal", "initialValue", "signalOper", "previousValue_", "flags_", "computedSymbol", "computed", "getter", "c", "computedOper", "getter_", "effect", "fn", "e", "fn_", "link", "effectOper", "run", "update", "updateComputed", "updateSignal", "startTracking", "oldValue", "endTracking", "s", "value", "notify", "flags", "subs", "subs_", "sub_", "checkDirty", "deps_", "dep", "dep_", "depFlags", "nextDep_", "propagate", "currentValue", "shallowPropagate", "unlink", "prevDep", "depsTail_", "nextDep", "version_", "prevSub", "subsTail_", "newLink", "prevDep_", "prevSub_", "nextSub_", "toRemove", "next", "stack", "top", "isValidLink", "subSubs", "nextSub", "checkDepth", "dirty", "firstSub", "hasMultipleSubs", "checkLink", "getPath", "path", "result", "root", "split", "hasOwn", "deep", "prefix", "isArr", "isPojo", "deepObj", "key", "keys", "_", "prop", "newValue", "oldLength", "patch", "i", "pathStr", "nextVal", "detail", "pathToObj", "DOCUMENT", "DATASTAR_SIGNAL_PATCH_EVENT", "mergePatch", "ifMissing", "mergeInner", "mergePaths", "paths", "options", "target", "targetParent", "toRegExp", "val", "filtered", "include", "exclude", "obj", "includeRe", "excludeRe", "walk", "node", "isHTMLOrSVG", "el", "actionPlugins", "attributePlugins", "watcherPlugins", "actions", "_", "prop", "removals", "queuedAttributes", "queuedAttributeNames", "observedRoots", "datastarReadyDispatched", "attribute", "plugin", "roots", "DOCUMENT", "root", "applyQueued", "action", "DATASTAR_FETCH_EVENT", "evt", "createError", "watcher", "cleanupEls", "els", "el", "elCleanups", "attrCleanups", "cleanup", "aliasedIgnore", "aliasify", "aliasedIgnoreAttr", "shouldIgnore", "applyEls", "onlyNew", "appliedKeys", "key", "attrKey", "applyAttributePlugin", "attr", "observe", "mutations", "target", "type", "attributeName", "addedNodes", "removedNodes", "node", "isHTMLOrSVG", "rawAttrKey", "unaliasify", "value", "mutationObserver", "MutationObserverClass", "parseAttributeKey", "rawKey", "namePart", "rawModifiers", "pluginName", "mods", "rawMod", "label", "mod", "isDocumentObserverActive", "dispatchDatastarReady", "DATASTAR_READY_EVENT", "observeRoot", "applyAttributePlugin", "el", "attrKey", "value", "onlyNew", "rawKey", "unaliasify", "pluginName", "key", "mods", "parseAttributeKey", "plugin", "attributePlugins", "queuedAttributeNames", "ctx", "createError", "actionPlugins", "keyReq", "valueReq", "keyProvided", "valueProvided", "cleanups", "cachedRx", "args", "genRx", "returnsValue_", "argNames_", "cleanups_", "cleanup", "elCleanups", "removals", "attrCleanups", "oldCleanup", "signalPath", "name", "path", "part", "returnsValue", "argNames", "expr", "statementRe", "statements", "lastIdx", "last", "match", "interpolationExpr", "signalName", "actionName", "_", "fn", "compileExpression", "action", "evt", "err", "actions", "root", "e", "action", "_", "fn", "startPeeking", "stopPeeking", "action", "_", "value", "filter", "startPeeking", "masked", "filtered", "updateLeaves", "mergePatch", "stopPeeking", "action", "_", "filter", "startPeeking", "masked", "filtered", "updateLeaves", "oldValue", "mergePatch", "stopPeeking", "abortControllers", "methodSupportsRequestBody", "method", "createHttpMethod", "name", "openWhenHiddenDefault", "action", "el", "evt", "error", "cleanups", "url", "selector", "userHeaders", "contentType", "include", "exclude", "openWhenHidden", "payload", "requestCancellation", "retry", "retryInterval", "retryScaler", "retryMaxWait", "retryMaxCount", "controller", "cleanupName", "cancelOnDisconnect", "requestCleanup", "controllers", "cleanupFn", "headers", "req", "input_", "openWhenHidden_", "retry_", "retryInterval_", "retryScaler_", "retryMaxWait_", "retryMaxCount_", "onopen_", "response", "dispatchFetch", "ERROR", "onmessage_", "event_", "type", "argsRawLines", "line", "data_", "i", "k", "v", "argsRaw", "err", "isWrongContent", "buildFetchEventSourceInit", "urlInstance", "DOCUMENT", "queryParams", "startPeeking", "requestPayload", "filtered", "stopPeeking", "body", "formEl", "formData", "submitter", "preventDefault", "HTMLInput", "multipart", "formParams", "key", "value", "STARTED", "fetchEventSource", "FINISHED", "RETRYING", "RETRIES_FAILED", "DATASTAR_FETCH_EVENT", "getBytes", "stream", "onChunk", "reader", "result", "getLines", "onLine", "buffer", "position", "fieldLength", "discardTrailingNewline", "arr", "next", "bufLength", "lineStart", "lineEnd", "getMessages", "onId", "onRetry", "onMessage", "message", "newMessage", "decoder", "field", "valueOffset", "id_", "resolve", "reject", "fetchInit", "input", "inputSignal", "inputHeaders", "inputOnOpen", "onmessage", "responseOverrides_", "responseOverrides", "rest", "curRequestController", "rebuildAndRetry", "currentFetchInit", "create", "onVisibilityChange", "retryTimer", "dispose", "onopen", "retries", "baseRetryInterval", "retryRequest", "curRequestSignal", "dispatchNonSSE", "dispatchType", "argNames", "n", "kebab", "o", "status", "isNoContentStatus", "isRedirectStatus", "isErrorStatus", "ct", "script", "scriptAttributesHeader", "content", "prepareScript", "id", "innerErr", "attribute", "el", "key", "rx", "syncAttr", "val", "_k", "v", "update", "observer", "obj", "attributeFilter", "MutationObserverClass", "cleanup", "effect", "propAdapter", "prop", "events", "get_", "el", "set_", "value", "events_", "attrAdapter", "attr", "valueAdapter", "treatUndefinedAsString", "type", "selectAdapter", "numbers", "option", "dataURIRegex", "empty", "boundPath", "key", "rawKey", "signalName", "adapter", "initialValue", "rawAttribute", "aliasify", "selector", "HTMLInput", "checked", "DOCUMENT", "input", "mergePaths", "inputs", "paths", "i", "hasOwn", "attribute", "mods", "error", "modifyCasing", "props", "syncSignal", "files", "signalFiles", "f", "resolve", "reader", "match", "firstProp", "camel", "path", "getPath", "signalValue", "syncElement", "eventName", "DATASTAR_PROP_CHANGE_EVENT", "cleanup", "effect", "multipleObserver", "MutationObserverClass", "attribute", "key", "el", "mods", "rx", "modifyCasing", "classes", "callback", "observer", "k", "classNames", "cn", "name", "MutationObserverClass", "cleanup", "effect", "attribute", "key", "mods", "rx", "error", "mergePaths", "modifyCasing", "computed", "patch", "updateLeaves", "old", "mergePatch", "attribute", "rx", "effect", "attribute", "el", "key", "mods", "value", "signalName", "modifyCasing", "activeFetches", "mergePaths", "watcher", "event", "type", "elt", "STARTED", "FINISHED", "DOCUMENT", "DATASTAR_FETCH_EVENT", "tagToMs", "args", "arg", "tagHas", "tags", "tag", "tagFirst", "defaultValue", "delay", "callback", "wait", "args", "throttle", "leading", "trailing", "debounce", "lastArgs", "timer", "modifyTiming", "mods", "delayArgs", "tagToMs", "debounceArgs", "tagHas", "throttleArgs", "supportsViewTransitions", "target", "modifyViewTransition", "callback", "mods", "DOCUMENT", "cb", "args", "attribute", "rx", "mods", "callback", "beginBatch", "endBatch", "modifyViewTransition", "wait", "delayArgs", "tagToMs", "delay", "attribute", "el", "value", "mods", "spaces", "filters", "jsStrToObject", "callback", "observer", "filtered", "MutationObserverClass", "cleanup", "effect", "attribute", "el", "key", "mods", "rx", "target", "DOCUMENT", "callback", "evt", "beginBatch", "endBatch", "modifyViewTransition", "modifyTiming", "eventName", "modifyCasing", "evtListOpts", "cb", "DATASTAR_FETCH_EVENT", "DATASTAR_SIGNAL_PATCH_EVENT", "listener", "clamp", "value", "min", "max", "once", "attribute", "el", "mods", "rx", "callback", "beginBatch", "endBatch", "modifyViewTransition", "modifyTiming", "options", "threshold", "clamp", "tagFirst", "exit", "observer", "entries", "entry", "attribute", "mods", "rx", "callback", "beginBatch", "endBatch", "modifyViewTransition", "duration", "durationArgs", "tagToMs", "tagHas", "intervalId", "attribute", "el", "key", "mods", "rx", "error", "filterAttr", "aliasify", "filtersRaw", "filters", "jsStrToObject", "running", "callback", "modifyTiming", "evt", "startPeeking", "watched", "filtered", "stopPeeking", "isEmpty", "beginBatch", "endBatch", "DOCUMENT", "DATASTAR_SIGNAL_PATCH_EVENT", "attribute", "el", "key", "mods", "value", "signalName", "modifyCasing", "mergePaths", "NONE", "DISPLAY", "attribute", "el", "rx", "update", "observer", "MutationObserverClass", "cleanup", "effect", "attribute", "key", "mods", "rx", "ifMissing", "modifyCasing", "value", "mergePaths", "patch", "mergePatch", "attribute", "key", "el", "rx", "style", "initialStyles", "apply", "prop", "value", "initial", "update", "observer", "styles", "kebab", "MutationObserverClass", "cleanup", "effect", "attribute", "el", "rx", "update", "observer", "MutationObserverClass", "cleanup", "effect", "PATCH_MODES", "NAMESPACES", "watcher", "ctx", "args", "selector", "mode", "namespace", "useViewTransition", "isStringTrue", "viewTransitionSelector", "elements", "patchElementsArgs", "selector_", "mode_", "namespace_", "elements_", "target", "DOCUMENT", "el", "supportsViewTransitions", "onPatchElements", "error", "newContent", "consume", "elementsWithSvgsRemoved", "hasHtml", "hasHead", "hasBody", "wrapperTag", "wrappedEls", "html", "newDocument", "createHTML", "wrapperEl", "child", "children", "applyToTargets", "targets", "targetList", "scripts", "script", "execute", "elScripts", "old", "name", "value", "prepareScript", "applyPatchMode", "element", "action", "used", "nextNode", "morph", "scopeHost", "DATASTAR_SCOPE_CHILDREN_EVENT", "ctxIdMap", "ctxPersistentIds", "oldIdTagNameMap", "duplicateIds", "ctxPantry", "aliasedIgnoreMorph", "aliasify", "aliasedIgnoreMorphAttr", "oldElt", "isHTMLOrSVG", "normalizedElt", "oldIdElements", "id", "tagName", "newIdElements", "parent", "populateIdMapWithTree", "morphChildren", "oldParent", "newParent", "insertionPoint", "endPoint", "newChild", "bestMatch", "findBestMatch", "cursor", "tempNode", "removeNode", "morphNode", "movedChild", "current", "idSet", "moveBefore", "namespaceURI", "newEmptyChild", "newClonedChild", "node", "startPoint", "nextSibling", "siblingSoftMatchCount", "displaceMatchCount", "nodeMatchCount", "isSoftMatch", "isIdSetMatch", "oldSet", "newSet", "oldNode", "newNode", "parentNode", "after", "aliasedPreserveAttr", "type", "newElt", "shouldScopeChildren", "preserveAttrs", "updateElementProp", "newEltHasAttr", "shouldDispatchPropChangeEvent", "HTMLInput", "newValue", "DATASTAR_PROP_CHANGE_EVENT", "root", "elt", "watcher", "error", "signals", "onlyIfMissing", "ifMissing", "isStringTrue", "mergePatch", "jsStrToObject"]
}
