{"version":3,"file":"cui-slider.umd.cjs","sources":["../src/utils/dom.js","../src/utils/number.js","../src/utils/dataAttrs.js","../src/core/defaults.js","../src/core/scale.js","../src/dom/build.js","../src/core/CuiSlider.js","../src/jquery/index.js","../src/browser.js"],"sourcesContent":["export function h(tag, attrs, children) {\n  const el = document.createElement(tag);\n  if (attrs) {\n    for (const key in attrs) {\n      const value = attrs[key];\n      if (value == null || value === false) continue;\n      if (key === 'class') el.className = value;\n      else if (key.startsWith('on') && typeof value === 'function') {\n        el.addEventListener(key.slice(2).toLowerCase(), value);\n      } else {\n        el.setAttribute(key, value === true ? '' : String(value));\n      }\n    }\n  }\n  if (children != null) {\n    for (const child of Array.isArray(children) ? children : [children]) {\n      if (child == null || child === false) continue;\n      el.appendChild(typeof child === 'string' ? document.createTextNode(child) : child);\n    }\n  }\n  return el;\n}\n\nexport function addClass(el, names) {\n  for (const name of names.split(' ')) if (name) el.classList.add(name);\n}\n\nexport function removeClass(el, names) {\n  for (const name of names.split(' ')) if (name) el.classList.remove(name);\n}\n\nexport function offset(el) {\n  const rect = el.getBoundingClientRect();\n  let top = el.offsetTop;\n  let parent = el.offsetParent;\n  while (parent) {\n    top += parent.offsetTop;\n    if (parent.tagName !== 'BODY') top -= parent.scrollTop;\n    parent = parent.offsetParent;\n  }\n  return { left: rect.left, right: rect.right, top };\n}\n","/** Number of digits after the decimal point, e.g. 0.25 -> 2, 5 -> 0, 1e-3 -> 3. */\nexport function decimalPlaces(value) {\n  const match = String(value).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n  if (!match) return 0;\n  return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? Number(match[2]) : 0));\n}\n\nexport function toFixedNumber(value, precision) {\n  return Number(value.toFixed(precision));\n}\n\nexport function clamp(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\n","/**\n * Reads `data-slider-<option>` attributes off an element, e.g.\n * `data-slider-min=\"0\"` -> { min: 0 }. Values are JSON-parsed when possible\n * (so `data-slider-ticks=\"[0,1,2]\"` becomes an array), falling back to the\n * raw string otherwise.\n */\nexport function readDataAttr(el, optionName) {\n  const attr = `data-slider-${optionName.replace(/_/g, '-')}`;\n  const raw = el.getAttribute(attr);\n  if (raw == null) return undefined;\n  try {\n    return JSON.parse(raw);\n  } catch {\n    return raw;\n  }\n}\n","export const defaultOptions = {\n  id: '',\n  theme: 'light', // 'light' | 'dark' | 'auto'\n  className: '', // extra class(es) on the root element, for scoping instance-specific CSS\n  min: 0,\n  max: 10,\n  step: 1,\n  precision: null,\n  orientation: 'horizontal', // 'horizontal' | 'vertical'\n  value: 5,\n  range: false,\n  selection: 'before', // 'before' | 'after' | 'none'\n  tooltip: 'show', // 'show' | 'hide' | 'always'\n  tooltipSplit: false,\n  handle: 'round', // 'round' | 'triangle' | 'custom'\n  reversed: false,\n  rtl: 'auto', // 'auto' | true | false\n  enabled: true,\n  formatter: (value) => (Array.isArray(value) ? `${value[0]} : ${value[1]}` : String(value)),\n  naturalArrowKeys: false,\n  ticks: [],\n  ticksPositions: [],\n  ticksLabels: [],\n  ticksSnapBounds: 0,\n  ticksTooltip: false,\n  scale: 'linear', // 'linear' | 'logarithmic'\n  focus: false,\n  tooltipPosition: null,\n  labelledby: null,\n  rangeHighlights: [],\n};\n\n/** data-slider-* attribute names use snake_case; map to our camelCase option keys. */\nexport const OPTION_ATTR_NAMES = {\n  id: 'id',\n  theme: 'theme',\n  min: 'min',\n  max: 'max',\n  step: 'step',\n  precision: 'precision',\n  orientation: 'orientation',\n  value: 'value',\n  range: 'range',\n  selection: 'selection',\n  tooltip: 'tooltip',\n  tooltipSplit: 'tooltip_split',\n  handle: 'handle',\n  reversed: 'reversed',\n  rtl: 'rtl',\n  enabled: 'enabled',\n  naturalArrowKeys: 'natural_arrow_keys',\n  ticks: 'ticks',\n  ticksPositions: 'ticks_positions',\n  ticksLabels: 'ticks_labels',\n  ticksSnapBounds: 'ticks_snap_bounds',\n  ticksTooltip: 'ticks_tooltip',\n  scale: 'scale',\n  focus: 'focus',\n  tooltipPosition: 'tooltip_position',\n  labelledby: 'labelledby',\n  rangeHighlights: 'range_highlights',\n};\n","/**\n * Value <-> percentage conversions for the two supported scales. Each scale\n * exposes `toValue(percentage, options)` and `toPercentage(value, options)`.\n *\n * When `options.ticksPositions` is set, ticks are spaced non-uniformly along\n * the track (matching wherever the caller placed them) and both directions\n * interpolate piecewise-linearly between the two bracketing ticks instead of\n * using a uniform min..max mapping.\n */\n\nfunction tickBracket(ticks, percentage) {\n  for (let i = 1; i < ticks.length; i += 1) {\n    if (percentage <= ticks[i]) return i;\n  }\n  return -1;\n}\n\nexport const linearScale = {\n  toValue(percentage, { min, max, step, ticks, ticksPositions }) {\n    let value;\n    if (ticksPositions.length > 0) {\n      const i = tickBracket(ticksPositions, percentage);\n      if (i === -1) {\n        value = min + (percentage / 100) * (max - min);\n      } else {\n        const minVal = ticks[i - 1];\n        const maxVal = ticks[i];\n        const minPos = ticksPositions[i - 1];\n        const maxPos = ticksPositions[i];\n        value = minVal + ((percentage - minPos) / (maxPos - minPos)) * (maxVal - minVal);\n        return clampStep(value, min, max, step, /* alreadyAbsolute */ true);\n      }\n    } else {\n      value = (percentage / 100) * (max - min);\n    }\n    return clampStep(value, min, max, step, false);\n  },\n\n  toPercentage(value, { min, max, ticks, ticksPositions }) {\n    if (max === min) return 0;\n    if (ticksPositions.length > 0) {\n      const i = tickBracket(ticks, value);\n      if (i > 0) {\n        const minVal = ticks[i - 1];\n        const maxVal = ticks[i];\n        const minPos = ticksPositions[i - 1];\n        const maxPos = ticksPositions[i];\n        return minPos + ((value - minVal) / (maxVal - minVal)) * (maxPos - minPos);\n      }\n    }\n    return (100 * (value - min)) / (max - min);\n  },\n};\n\nexport const logarithmicScale = {\n  toValue(percentage, { min, max, step }) {\n    const minLog = min === 0 ? 0 : Math.log(min);\n    const maxLog = Math.log(max);\n    const raw = Math.exp(minLog + ((maxLog - minLog) * percentage) / 100);\n    if (Math.round(raw) === max) return max;\n    return clampStep(raw, min, max, step, true);\n  },\n\n  toPercentage(value, { min, max }) {\n    if (max === min) return 0;\n    const maxLog = Math.log(max);\n    const minLog = min === 0 ? 0 : Math.log(min);\n    const valueLog = value === 0 ? 0 : Math.log(value);\n    return (100 * (valueLog - minLog)) / (maxLog - minLog);\n  },\n};\n\nfunction clampStep(value, min, max, step, alreadyAbsolute) {\n  const snapped = (alreadyAbsolute ? 0 : min) + Math.round(value / step) * step;\n  if (snapped < min) return min;\n  if (snapped > max) return max;\n  return snapped;\n}\n\nexport function getScale(name) {\n  return name === 'logarithmic' ? logarithmicScale : linearScale;\n}\n","import { h } from '../utils/dom.js';\n\nfunction buildTooltip(modifier) {\n  const arrow = h('div', { class: 'cui-tooltip-arrow' });\n  const inner = h('div', { class: 'cui-tooltip-inner' });\n  const tooltip = h('div', { class: `cui-tooltip cui-tooltip-${modifier}`, role: 'presentation' }, [arrow, inner]);\n  return { tooltip, inner };\n}\n\n/**\n * Builds the slider's DOM structure. Returns element references the\n * CuiSlider class wires up behavior onto; contains no behavior itself.\n */\nexport function buildSliderDom(options) {\n  const trackLow = h('div', { class: 'cui-slider-track-low' });\n  const selection = h('div', { class: 'cui-slider-selection' });\n  const trackHigh = h('div', { class: 'cui-slider-track-high' });\n  const track = h('div', { class: 'cui-slider-track' }, [trackLow, selection, trackHigh]);\n\n  const rangeHighlights = [];\n  if (Array.isArray(options.rangeHighlights)) {\n    for (const highlight of options.rangeHighlights) {\n      const el = h('div', { class: `cui-slider-range-highlight cui-slider-selection ${highlight.class ?? ''}`.trim() });\n      rangeHighlights.push(el);\n      track.appendChild(el);\n    }\n  }\n\n  const handle1 = h('div', {\n    class: 'cui-slider-handle cui-slider-handle-min',\n    role: 'slider',\n    'aria-valuemin': options.min,\n    'aria-valuemax': options.max,\n  });\n  const handle2 = h('div', {\n    class: 'cui-slider-handle cui-slider-handle-max',\n    role: 'slider',\n    'aria-valuemin': options.min,\n    'aria-valuemax': options.max,\n  });\n\n  const labelledby = options.labelledby;\n  if (Array.isArray(labelledby)) {\n    if (labelledby[0]) handle1.setAttribute('aria-labelledby', labelledby[0]);\n    if (labelledby[1]) handle2.setAttribute('aria-labelledby', labelledby[1]);\n  } else if (labelledby) {\n    handle1.setAttribute('aria-labelledby', labelledby);\n    handle2.setAttribute('aria-labelledby', labelledby);\n  }\n\n  const ticks = [];\n  let ticksContainer = null;\n  if (Array.isArray(options.ticks) && options.ticks.length > 0) {\n    ticksContainer = h('div', { class: 'cui-slider-tick-container' });\n    for (let i = 0; i < options.ticks.length; i += 1) {\n      const tick = h('div', { class: 'cui-slider-tick' });\n      ticks.push(tick);\n      ticksContainer.appendChild(tick);\n    }\n    selection.classList.add('cui-slider-tick-selection');\n  }\n\n  const tickLabels = [];\n  let tickLabelContainer = null;\n  if (Array.isArray(options.ticksLabels) && options.ticksLabels.length > 0) {\n    tickLabelContainer = h('div', { class: 'cui-slider-tick-label-container' });\n    const noExplicitPositions = options.ticksPositions.length === 0;\n    for (let i = 0; i < options.ticksLabels.length; i += 1) {\n      const index = options.reversed && noExplicitPositions ? options.ticksLabels.length - (i + 1) : i;\n      const label = h('div', { class: 'cui-slider-tick-label' });\n      label.innerHTML = options.ticksLabels[index];\n      tickLabels.push(label);\n      tickLabelContainer.appendChild(label);\n    }\n  }\n\n  const mainTooltip = buildTooltip('main');\n  const minTooltip = buildTooltip('min');\n  const maxTooltip = buildTooltip('max');\n\n  const children = [track, mainTooltip.tooltip, minTooltip.tooltip, maxTooltip.tooltip];\n  if (tickLabelContainer) children.push(tickLabelContainer);\n  if (ticksContainer) children.push(ticksContainer);\n  children.push(handle1, handle2);\n\n  const root = h('div', { class: 'cui-slider' }, children);\n\n  return {\n    root,\n    track,\n    trackLow,\n    selection,\n    trackHigh,\n    rangeHighlights,\n    handle1,\n    handle2,\n    ticks,\n    ticksContainer,\n    tickLabels,\n    tickLabelContainer,\n    tooltip: mainTooltip.tooltip,\n    tooltipInner: mainTooltip.inner,\n    tooltipMin: minTooltip.tooltip,\n    tooltipInnerMin: minTooltip.inner,\n    tooltipMax: maxTooltip.tooltip,\n    tooltipInnerMax: maxTooltip.inner,\n  };\n}\n","import { h, addClass, removeClass, offset as elementOffset } from '../utils/dom.js';\nimport { decimalPlaces, toFixedNumber, clamp } from '../utils/number.js';\nimport { readDataAttr } from '../utils/dataAttrs.js';\nimport { defaultOptions, OPTION_ATTR_NAMES } from './defaults.js';\nimport { getScale } from './scale.js';\nimport { buildSliderDom } from '../dom/build.js';\n\nconst TOUCH_CAPABLE = typeof window !== 'undefined' && ('ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch));\n\nfunction resolveOptions(el, userOptions) {\n  const options = {};\n  for (const key of Object.keys(defaultOptions)) {\n    const attrName = OPTION_ATTR_NAMES[key];\n    const fromAttr = attrName ? readDataAttr(el, attrName) : undefined;\n    const provided = userOptions[key];\n    options[key] = provided !== undefined ? provided : fromAttr !== undefined ? fromAttr : defaultOptions[key];\n  }\n  if (options.rtl === 'auto') {\n    options.rtl = window.getComputedStyle(el).direction === 'rtl';\n  }\n  options.tooltipPosition = sanitizeTooltipPosition(options.orientation, options.tooltipPosition, options.rtl);\n  return options;\n}\n\nfunction sanitizeTooltipPosition(orientation, position, rtl) {\n  if (orientation === 'vertical' && (position === 'top' || position === 'bottom')) return rtl ? 'left' : 'right';\n  if (orientation === 'horizontal' && (position === 'left' || position === 'right')) return 'top';\n  return position;\n}\n\n/**\n * A dependency-free range/slider control. Progressively enhances a plain\n * `<input>` (kept in the DOM, hidden, and synced so it still participates in\n * native form submission) the same way Glide upgrades a `<select>`.\n */\nexport class CuiSlider {\n  constructor(target, userOptions = {}) {\n    this.element = typeof target === 'string' ? document.querySelector(target) : target;\n    if (!this.element) throw new Error('CuiSlider: target element not found');\n\n    this.options = resolveOptions(this.element, userOptions);\n    this.scale = getScale(this.options.scale);\n    this._listeners = new Map();\n    this._state = { enabled: true, inDrag: false, over: false, dragged: 0, keyCtrl: null };\n\n    if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n      this.options.max = Math.max(...this.options.ticks);\n      this.options.min = Math.min(...this.options.ticks);\n    }\n\n    if (Array.isArray(this.options.value)) {\n      this.options.range = true;\n      this._value = [...this.options.value];\n    } else if (this.options.range) {\n      this._value = [this.options.value, this.options.max];\n    } else {\n      this._value = [this.options.value, this.options.selection === 'after' ? this.options.max : this.options.min];\n    }\n\n    this._buildDom();\n    this._setupOrientation();\n    this._bindEvents();\n\n    this._state.offset = elementOffset(this.dom.root);\n    this._state.size = this.dom.root[this._sizeProp];\n    this.setValue(this.options.range ? this._value : this._value[0]);\n\n    this.options.enabled ? this.enable() : this.disable();\n  }\n\n  // ------------------------------------------------------------------ dom\n\n  _buildDom() {\n    this.dom = buildSliderDom(this.options);\n    this.dom.root.dataset.theme = this.options.theme;\n    if (this.options.className) {\n      for (const cls of this.options.className.split(/\\s+/).filter(Boolean)) {\n        this.dom.root.classList.add(cls);\n      }\n    }\n    this._originalDisplay = this.element.style.display;\n    this.element.parentNode.insertBefore(this.dom.root, this.element);\n    this.element.style.display = 'none';\n\n    if (!this.options.tooltipSplit) {\n      addClass(this.dom.tooltipMin, 'cui-hidden');\n      addClass(this.dom.tooltipMax, 'cui-hidden');\n    } else {\n      addClass(this.dom.tooltip, 'cui-hidden');\n    }\n\n    if (this.options.selection === 'none') {\n      addClass(this.dom.trackLow, 'cui-hidden');\n      addClass(this.dom.selection, 'cui-hidden');\n      addClass(this.dom.trackHigh, 'cui-hidden');\n    }\n\n    if (!this.options.range) addClass(this.dom.handle2, 'cui-hidden');\n\n    if (this.options.handle === 'triangle' || this.options.handle === 'custom') {\n      addClass(this.dom.handle1, `cui-slider-handle-${this.options.handle}`);\n      addClass(this.dom.handle2, `cui-slider-handle-${this.options.handle}`);\n      for (const tick of this.dom.ticks) addClass(tick, `cui-slider-handle-${this.options.handle}`);\n    }\n  }\n\n  _setupOrientation() {\n    const { root } = this.dom;\n    if (this.options.orientation === 'vertical') {\n      addClass(root, 'cui-slider-vertical');\n      this._stylePos = 'top';\n      this._mouseProp = 'pageY';\n      this._sizeProp = 'offsetHeight';\n    } else {\n      addClass(root, 'cui-slider-horizontal');\n      this._stylePos = this.options.rtl ? 'right' : 'left';\n      this._mouseProp = 'clientX';\n      this._sizeProp = 'offsetWidth';\n    }\n    if (this.options.rtl) addClass(root, 'cui-slider-rtl');\n    this._layoutTooltipPosition();\n  }\n\n  // Perpendicular-to-track placement (above/below for horizontal, left/right\n  // for vertical) is a CSS concern — these classes just select which side;\n  // the actual offset lives in the stylesheet. Along-track placement is set\n  // separately, as a percentage, in _renderTooltips.\n  _layoutTooltipPosition() {\n    const tooltips = [this.dom.tooltip, this.dom.tooltipMin, this.dom.tooltipMax];\n    if (this.options.orientation === 'vertical') {\n      const side = this.options.tooltipPosition || (this.options.rtl ? 'left' : 'right');\n      for (const tooltip of tooltips) addClass(tooltip, side);\n    } else {\n      addClass(tooltips[0], this.options.tooltipPosition === 'bottom' ? 'bottom' : 'top');\n      addClass(tooltips[1], this.options.tooltipPosition === 'bottom' ? 'bottom' : 'top');\n      addClass(tooltips[2], this.options.tooltipPosition === 'bottom' ? 'bottom' : 'top');\n    }\n  }\n\n  // --------------------------------------------------------------- events\n\n  _bindEvents() {\n    this._onHandleKeydown = (index, event) => this._handleKeydown(index, event);\n    this.dom.handle1.addEventListener('keydown', (e) => this._onHandleKeydown(0, e));\n    this.dom.handle2.addEventListener('keydown', (e) => this._onHandleKeydown(1, e));\n\n    this._onMousedown = (e) => this._handleMousedown(e);\n    this.dom.root.addEventListener('mousedown', this._onMousedown);\n\n    if (TOUCH_CAPABLE) {\n      this._onTouchstart = (e) => this._handleTouchstart(e);\n      this._onTouchmove = (e) => this._handleTouchmove(e);\n      this.dom.root.addEventListener('touchstart', this._onTouchstart, { passive: true });\n      this.dom.root.addEventListener('touchmove', this._onTouchmove, { passive: true });\n    }\n\n    this._onResize = () => {\n      this._state.offset = elementOffset(this.dom.root);\n      this._state.size = this.dom.root[this._sizeProp];\n      this._render();\n    };\n    window.addEventListener('resize', this._onResize);\n\n    if (this.options.tooltip === 'hide') {\n      addClass(this.dom.tooltip, 'cui-hidden');\n      addClass(this.dom.tooltipMin, 'cui-hidden');\n      addClass(this.dom.tooltipMax, 'cui-hidden');\n    } else if (this.options.tooltip === 'always') {\n      this._showTooltip();\n      this._alwaysShowTooltip = true;\n    } else {\n      this._onShowTooltip = () => this._showTooltip();\n      this._onHideTooltip = () => this._hideTooltip();\n      this.dom.root.addEventListener('mouseenter', this._onShowTooltip);\n      this.dom.root.addEventListener('mouseleave', this._onHideTooltip);\n      this.dom.handle1.addEventListener('focus', this._onShowTooltip);\n      this.dom.handle1.addEventListener('blur', this._onHideTooltip);\n      this.dom.handle2.addEventListener('focus', this._onShowTooltip);\n      this.dom.handle2.addEventListener('blur', this._onHideTooltip);\n    }\n  }\n\n  _unbindEvents() {\n    window.removeEventListener('resize', this._onResize);\n    this.dom.root.removeEventListener('mousedown', this._onMousedown);\n    if (TOUCH_CAPABLE) {\n      this.dom.root.removeEventListener('touchstart', this._onTouchstart);\n      this.dom.root.removeEventListener('touchmove', this._onTouchmove);\n    }\n    if (this._onDocMousemove) document.removeEventListener('mousemove', this._onDocMousemove);\n    if (this._onDocMouseup) document.removeEventListener('mouseup', this._onDocMouseup);\n    if (this._onShowTooltip) {\n      this.dom.root.removeEventListener('mouseenter', this._onShowTooltip);\n      this.dom.root.removeEventListener('mouseleave', this._onHideTooltip);\n      this.dom.handle1.removeEventListener('focus', this._onShowTooltip);\n      this.dom.handle1.removeEventListener('blur', this._onHideTooltip);\n      this.dom.handle2.removeEventListener('focus', this._onShowTooltip);\n      this.dom.handle2.removeEventListener('blur', this._onHideTooltip);\n    }\n  }\n\n  _handleKeydown(index, event) {\n    if (!this._state.enabled) return;\n    let direction;\n    switch (event.key) {\n      case 'ArrowLeft':\n      case 'ArrowDown':\n        direction = -1;\n        break;\n      case 'ArrowRight':\n      case 'ArrowUp':\n        direction = 1;\n        break;\n      default:\n        return;\n    }\n    if (this.options.naturalArrowKeys) {\n      const flip =\n        (this.options.orientation === 'vertical' && !this.options.reversed) ||\n        (this.options.orientation === 'horizontal' && this.options.reversed);\n      if (flip) direction = -direction;\n    }\n\n    const nextForIndex = this._value[index] + direction * this.options.step;\n    const nextPercentage = (nextForIndex / this.options.max) * 100;\n    this._state.keyCtrl = index;\n    let next;\n    if (this.options.range) {\n      this._adjustForRangeOverlap(nextPercentage);\n      next = [this._state.keyCtrl === 0 ? nextForIndex : this._value[0], this._state.keyCtrl === 1 ? nextForIndex : this._value[1]];\n    } else {\n      next = nextForIndex;\n    }\n\n    this._emit('slideStart', next);\n    this.setValue(next, true, true);\n    this._emit('slideStop', next);\n    this._render();\n    event.preventDefault();\n    event.stopPropagation();\n    this._state.keyCtrl = null;\n  }\n\n  _handleMousedown(event) {\n    if (!this._state.enabled) return false;\n    event.preventDefault?.();\n    this._state.offset = elementOffset(this.dom.root);\n    this._state.size = this.dom.root[this._sizeProp];\n\n    const percentage = this._percentageFromEvent(event);\n    if (this.options.range) {\n      const distToFirst = Math.abs(this._percentage[0] - percentage);\n      const distToSecond = Math.abs(this._percentage[1] - percentage);\n      this._state.dragged = distToFirst < distToSecond ? 0 : 1;\n      this._adjustForRangeOverlap(percentage);\n    } else {\n      this._state.dragged = 0;\n    }\n    this._percentage[this._state.dragged] = percentage;\n    this._render();\n\n    this._onDocMousemove = (e) => this._handleMousemove(e);\n    this._onDocMouseup = () => this._handleMouseup();\n    document.addEventListener('mousemove', this._onDocMousemove);\n    document.addEventListener('mouseup', this._onDocMouseup);\n    this._state.inDrag = true;\n\n    const value = this._calculateValue();\n    this._emit('slideStart', value);\n    this.setValue(value, false, true);\n    if (this.options.focus) (this._state.dragged === 0 ? this.dom.handle1 : this.dom.handle2).focus();\n    return true;\n  }\n\n  _handleMousemove(event) {\n    if (!this._state.enabled) return false;\n    const percentage = this._percentageFromEvent(event);\n    this._adjustForRangeOverlap(percentage);\n    this._percentage[this._state.dragged] = percentage;\n    this._render();\n    this.setValue(this._calculateValue(true), true, true);\n    return false;\n  }\n\n  _handleMouseup() {\n    if (!this._state.enabled) return false;\n    document.removeEventListener('mousemove', this._onDocMousemove);\n    document.removeEventListener('mouseup', this._onDocMouseup);\n    this._state.inDrag = false;\n    if (!this._state.over) this._hideTooltip();\n    const value = this._calculateValue(true);\n    this._render();\n    this._emit('slideStop', value);\n    return false;\n  }\n\n  _handleTouchstart(event) {\n    if (event.changedTouches?.length) {\n      const touch = event.changedTouches[0];\n      this._touchStartX = touch.pageX;\n      this._touchStartY = touch.pageY;\n    } else {\n      this._handleMousedown(event);\n    }\n  }\n\n  _handleTouchmove(event) {\n    const touch = event.changedTouches?.[0];\n    if (!touch) return;\n    const dx = touch.pageX - this._touchStartX;\n    const dy = touch.pageY - this._touchStartY;\n    if (this._state.inDrag) return;\n    const horizontalSwipe = dy >= -5 && dy <= 5 && (dx >= 15 || dx <= -15);\n    const verticalSwipe = dx >= -5 && dx <= 5 && (dy >= 15 || dy <= -15);\n    if ((this.options.orientation === 'vertical' && verticalSwipe) || (this.options.orientation !== 'vertical' && horizontalSwipe)) {\n      this._handleMousedown(event);\n    }\n  }\n\n  _percentageFromEvent(event) {\n    const point = event.touches?.[0] ?? event.changedTouches?.[0] ?? event;\n    let delta = point[this._mouseProp] - this._state.offset[this._stylePos];\n    if (this._stylePos === 'right') delta = -delta;\n    let percentage = (delta / this._state.size) * 100;\n    percentage = Math.round(percentage / this._percentage[2]) * this._percentage[2];\n    if (this.options.reversed) percentage = 100 - percentage;\n    return clamp(percentage, 0, 100);\n  }\n\n  _adjustForRangeOverlap(percentage) {\n    if (!this.options.range) return;\n    const digits = Math.max(0, decimalPlaces(percentage) - 1);\n    const rounded = toFixedNumber(percentage, digits);\n    if (this._state.dragged === 0 && toFixedNumber(this._percentage[1], digits) < rounded) {\n      this._percentage[0] = this._percentage[1];\n      this._state.dragged = 1;\n    } else if (this._state.dragged === 1 && toFixedNumber(this._percentage[0], digits) > rounded) {\n      this._percentage[1] = this._percentage[0];\n      this._state.dragged = 0;\n    } else if (this._state.keyCtrl === 0 && (this._value[1] / this.options.max) * 100 < percentage) {\n      this._percentage[0] = this._percentage[1];\n      this._state.keyCtrl = 1;\n      this.dom.handle2.focus();\n    } else if (this._state.keyCtrl === 1 && (this._value[0] / this.options.max) * 100 > percentage) {\n      this._percentage[1] = this._percentage[0];\n      this._state.keyCtrl = 0;\n      this.dom.handle1.focus();\n    }\n  }\n\n  _calculateValue(snapToNearestTick = false) {\n    let value;\n    if (this.options.range) {\n      value = [this.options.min, this.options.max];\n      if (this._percentage[0] !== 0) value[0] = this._applyPrecision(this._toValue(this._percentage[0]));\n      if (this._percentage[1] !== 100) value[1] = this._applyPrecision(this._toValue(this._percentage[1]));\n    } else {\n      value = this._applyPrecision(parseFloat(this._toValue(this._percentage[0])));\n    }\n    if (snapToNearestTick && this.options.ticks.length > 0) {\n      let nearest = [value, Infinity];\n      for (const tick of this.options.ticks) {\n        const dist = Math.abs(tick - value);\n        if (dist <= nearest[1]) nearest = [tick, dist];\n      }\n      if (nearest[1] <= this.options.ticksSnapBounds) return nearest[0];\n    }\n    return value;\n  }\n\n  // ------------------------------------------------------------- render\n\n  _render() {\n    const p = this.options.reversed\n      ? [100 - this._percentage[0], this.options.range ? 100 - this._percentage[1] : this._percentage[1]]\n      : [this._percentage[0], this._percentage[1]];\n\n    this.dom.handle1.style[this._stylePos] = `${p[0]}%`;\n    this.dom.handle1.setAttribute('aria-valuenow', this._value[0]);\n    this.dom.handle2.style[this._stylePos] = `${p[1]}%`;\n    this.dom.handle2.setAttribute('aria-valuenow', this._value[1]);\n\n    this._renderRangeHighlights(p);\n    this._renderTicks(p);\n    this._renderTooltips(p);\n    this._renderTrack(p);\n  }\n\n  _renderRangeHighlights(p) {\n    if (this.dom.rangeHighlights.length === 0) return;\n    for (let i = 0; i < this.options.rangeHighlights.length; i += 1) {\n      let start = this._toPercentage(this.options.rangeHighlights[i].start);\n      let end = this._toPercentage(this.options.rangeHighlights[i].end);\n      if (this.options.reversed) [start, end] = [100 - end, 100 - start];\n      const el = this.dom.rangeHighlights[i];\n      if (start < 0 || start > 100 || end < 0 || end > 100) {\n        el.style.display = 'none';\n        continue;\n      }\n      el.style.display = '';\n      const from = Math.min(start, end);\n      const size = Math.abs(start - end);\n      if (this.options.orientation === 'vertical') {\n        el.style.top = `${from}%`;\n        el.style.height = `${size}%`;\n      } else {\n        el.style[this.options.rtl ? 'right' : 'left'] = `${from}%`;\n        el.style.width = `${size}%`;\n      }\n    }\n  }\n\n  _renderTicks(p) {\n    if (this.dom.ticks.length === 0) return;\n    const vertical = this.options.orientation === 'vertical';\n    const sizeProp = vertical ? 'height' : 'width';\n    const marginProp = vertical ? 'marginTop' : this.options.rtl ? 'marginRight' : 'marginLeft';\n    const gap = this._state.size / (this.options.ticks.length - 1);\n\n    if (this.dom.tickLabelContainer) {\n      if (this.options.ticksPositions.length === 0 && !vertical) {\n        this.dom.tickLabelContainer.style[marginProp] = `${-gap / 2}px`;\n      }\n    }\n\n    for (let i = 0; i < this.options.ticks.length; i += 1) {\n      let position = this.options.ticksPositions[i] ?? this._toPercentage(this.options.ticks[i]);\n      if (this.options.reversed) position = 100 - position;\n      const tick = this.dom.ticks[i];\n      tick.style[this._stylePos] = `${position}%`;\n      removeClass(tick, 'cui-in-selection');\n      const inSelection = this.options.range\n        ? position >= p[0] && position <= p[1]\n        : (this.options.selection === 'after' && position >= p[0]) || (this.options.selection === 'before' && position <= p[0]);\n      if (inSelection) addClass(tick, 'cui-in-selection');\n\n      const label = this.dom.tickLabels[i];\n      if (!label) continue;\n      label.style[sizeProp] = `${gap}px`;\n      if (!vertical && this.options.ticksPositions[i] !== undefined) {\n        label.style.position = 'absolute';\n        label.style[this._stylePos] = `${position}%`;\n        label.style[marginProp] = `${-gap / 2}px`;\n      } else if (vertical) {\n        label.style[this.options.rtl ? 'marginRight' : 'marginLeft'] = `${this.dom.root.offsetWidth}px`;\n        if (this.dom.tickLabelContainer) this.dom.tickLabelContainer.style[marginProp] = `${(-this.dom.root.offsetWidth) / 2}px`;\n      }\n    }\n  }\n\n  _renderTooltips(p) {\n    if (this.options.range) {\n      this._setText(this.dom.tooltipInner, this.options.formatter(this._value));\n      this.dom.tooltip.style[this._stylePos] = `${(p[0] + p[1]) / 2}%`;\n      this.dom.tooltipMin.style[this._stylePos] = `${p[0]}%`;\n      this.dom.tooltipMax.style[this._stylePos] = `${p[1]}%`;\n      // Only invoke the formatter per-handle when the split tooltips are\n      // actually visible — otherwise this calls a range-aware formatter\n      // (like the currency-range example in the README) with a bare number\n      // instead of the [low, high] pair it expects, for a tooltip nobody sees.\n      if (this.options.tooltipSplit) {\n        this._setText(this.dom.tooltipInnerMin, this.options.formatter(this._value[0]));\n        this._setText(this.dom.tooltipInnerMax, this.options.formatter(this._value[1]));\n      }\n    } else {\n      this._setText(this.dom.tooltipInner, this.options.formatter(this._value[0]));\n      this.dom.tooltip.style[this._stylePos] = `${p[0]}%`;\n    }\n  }\n\n  _renderTrack(p) {\n    if (this.options.orientation === 'vertical') {\n      const low = Math.min(p[0], p[1]);\n      const high = Math.abs(p[0] - p[1]);\n      this.dom.trackLow.style.top = '0';\n      this.dom.trackLow.style.height = `${low}%`;\n      this.dom.selection.style.top = `${low}%`;\n      this.dom.selection.style.height = `${high}%`;\n      this.dom.trackHigh.style.bottom = '0';\n      this.dom.trackHigh.style.height = `${100 - low - high}%`;\n      return;\n    }\n    const near = this._stylePos === 'right' ? 'right' : 'left';\n    const far = near === 'right' ? 'left' : 'right';\n    const low = Math.min(p[0], p[1]);\n    const high = Math.abs(p[0] - p[1]);\n    this.dom.trackLow.style[near] = '0';\n    this.dom.trackLow.style.width = `${low}%`;\n    this.dom.selection.style[near] = `${low}%`;\n    this.dom.selection.style.width = `${high}%`;\n    this.dom.trackHigh.style[far] = '0';\n    this.dom.trackHigh.style.width = `${100 - low - high}%`;\n  }\n\n  _setText(el, text) {\n    el.textContent = text;\n  }\n\n  _toValue(percentage) {\n    return this.scale.toValue(percentage, this.options);\n  }\n\n  _toPercentage(value) {\n    return this.scale.toPercentage(value, this.options);\n  }\n\n  _applyPrecision(value) {\n    const precision = this.options.precision != null ? this.options.precision : decimalPlaces(this.options.step);\n    return toFixedNumber(value, precision);\n  }\n\n  _showTooltip() {\n    if (!this.options.tooltipSplit) {\n      addClass(this.dom.tooltip, 'cui-in');\n      this.dom.tooltipMin.style.display = 'none';\n      this.dom.tooltipMax.style.display = 'none';\n    } else {\n      addClass(this.dom.tooltipMin, 'cui-in');\n      addClass(this.dom.tooltipMax, 'cui-in');\n      this.dom.tooltip.style.display = 'none';\n    }\n    this._state.over = true;\n  }\n\n  _hideTooltip() {\n    if (!this._state.inDrag && !this._alwaysShowTooltip) {\n      removeClass(this.dom.tooltip, 'cui-in');\n      removeClass(this.dom.tooltipMin, 'cui-in');\n      removeClass(this.dom.tooltipMax, 'cui-in');\n    }\n    this._state.over = false;\n  }\n\n  // -------------------------------------------------------------- events\n\n  on(event, handler) {\n    if (!this._listeners.has(event)) this._listeners.set(event, new Set());\n    this._listeners.get(event).add(handler);\n    return this;\n  }\n\n  off(event, handler) {\n    this._listeners.get(event)?.delete(handler);\n    return this;\n  }\n\n  _emit(event, value) {\n    for (const handler of this._listeners.get(event) ?? []) handler(value);\n  }\n\n  // ---------------------------------------------------------- public api\n\n  getValue() {\n    return this.options.range ? [...this._value] : this._value[0];\n  }\n\n  setValue(value, triggerSlide = false, triggerChange = false) {\n    const previous = this.getValue();\n\n    if (this.options.range) {\n      const [a, b] = this._normalizeArray(value ?? [this.options.min, this.options.max]);\n      this._value = [\n        clamp(this._applyPrecision(a), this.options.min, this.options.max),\n        clamp(this._applyPrecision(b), this.options.min, this.options.max),\n      ];\n    } else {\n      const scalar = this._normalizeScalar(value ?? 0);\n      const single = clamp(this._applyPrecision(scalar), this.options.min, this.options.max);\n      this._value = [single, this.options.selection === 'after' ? this.options.max : this.options.min];\n      addClass(this.dom.handle2, 'cui-hidden');\n    }\n\n    this._percentage =\n      this.options.max > this.options.min\n        ? [this._toPercentage(this._value[0]), this._toPercentage(this._value[1]), (100 * this.options.step) / (this.options.max - this.options.min)]\n        : [0, 0, 100];\n\n    this._render();\n    this._syncElement();\n\n    const current = this.getValue();\n    if (triggerSlide) this._emit('slide', current);\n    if (JSON.stringify(previous) !== JSON.stringify(current) && triggerChange) {\n      this._emit('change', { oldValue: previous, newValue: current });\n    }\n    return this;\n  }\n\n  _normalizeArray(value) {\n    const arr = Array.isArray(value) ? value : [value, value];\n    for (const entry of arr) {\n      if (typeof entry !== 'number' || Number.isNaN(entry)) throw new Error(`CuiSlider: invalid value '${entry}'`);\n    }\n    return arr;\n  }\n\n  _normalizeScalar(value) {\n    const num = Array.isArray(value) ? value[0] : value;\n    if (Number.isNaN(Number(num))) throw new Error(`CuiSlider: invalid value '${num}'`);\n    return Number(num);\n  }\n\n  _syncElement() {\n    const value = this.getValue();\n    this.element.setAttribute('data-value', value);\n    this.element.setAttribute('value', value);\n    this.element.value = value;\n  }\n\n  getOption(name) {\n    return name ? this.options[name] : { ...this.options };\n  }\n\n  setOption(name, value) {\n    this.options[name] = value;\n    return this;\n  }\n\n  isEnabled() {\n    return this._state.enabled;\n  }\n\n  enable() {\n    this._state.enabled = true;\n    this.dom.handle1.setAttribute('tabindex', '0');\n    this.dom.handle2.setAttribute('tabindex', '0');\n    removeClass(this.dom.root, 'cui-slider-disabled');\n    this._emit('slideEnabled');\n    return this;\n  }\n\n  disable() {\n    this._state.enabled = false;\n    this.dom.handle1.removeAttribute('tabindex');\n    this.dom.handle2.removeAttribute('tabindex');\n    addClass(this.dom.root, 'cui-slider-disabled');\n    this._emit('slideDisabled');\n    return this;\n  }\n\n  toggle() {\n    return this._state.enabled ? this.disable() : this.enable();\n  }\n\n  setTheme(theme) {\n    this.options.theme = theme;\n    this.dom.root.dataset.theme = theme;\n    return this;\n  }\n\n  relayout() {\n    this._state.offset = elementOffset(this.dom.root);\n    this._state.size = this.dom.root[this._sizeProp];\n    this._render();\n    return this;\n  }\n\n  getElement() {\n    return this.dom.root;\n  }\n\n  destroy() {\n    this._unbindEvents();\n    this.dom.root.remove();\n    this.element.style.display = this._originalDisplay;\n    this.element.removeAttribute('data-value');\n    this._listeners.clear();\n  }\n}\n","import { CuiSlider } from '../core/CuiSlider.js';\n\nconst DATA_KEY = 'cuiSlider';\n\n/**\n * Registers `$.fn.cuiSlider(...)` on the given jQuery instance. Call this\n * explicitly if you're bundling jQuery yourself:\n *\n *   import $ from 'jquery';\n *   import { registerJQueryPlugin } from '@cliqthemes/cliq-slider-control/jquery';\n *   registerJQueryPlugin($);\n *\n * If jQuery is already on `window` (plain <script> tag usage), importing\n * this module is enough on its own — see the auto-registration below.\n */\nexport function registerJQueryPlugin($) {\n  if (!$ || !$.fn || $.fn.cuiSlider) return;\n\n  $.fn.cuiSlider = function cuiSliderPlugin(optionsOrMethod, ...args) {\n    if (typeof optionsOrMethod === 'string') {\n      const methodName = optionsOrMethod;\n      let result = this;\n      this.each(function () {\n        const instance = $.data(this, DATA_KEY);\n        if (!instance) {\n          console.error(`cuiSlider: cannot call '${methodName}' before initialization`);\n          return;\n        }\n        if (methodName.startsWith('_') || typeof instance[methodName] !== 'function') {\n          console.error(`cuiSlider: no such method '${methodName}'`);\n          return;\n        }\n        const value = instance[methodName](...args);\n        if (value !== undefined && value !== instance) result = value;\n      });\n      return result;\n    }\n\n    return this.each(function () {\n      const existing = $.data(this, DATA_KEY);\n      if (existing) existing.setOption(optionsOrMethod);\n      else $.data(this, DATA_KEY, new CuiSlider(this, optionsOrMethod));\n    });\n  };\n}\n\nif (typeof window !== 'undefined' && (window.jQuery || window.$)) {\n  registerJQueryPlugin(window.jQuery || window.$);\n}\n\nexport { CuiSlider };\n","/**\n * Entry point for the UMD/browser-global build only (dist/cui-slider.umd.cjs).\n * `window.CuiSlider` is the constructor directly, and the jQuery bridge\n * auto-registers as `$.fn.cuiSlider` if jQuery is already on the page —\n * usable without a bundler or ES modules:\n *\n *   <script src=\"jquery.js\"></script>   <!-- optional -->\n *   <script src=\"cui-slider.umd.cjs\"></script>\n *   <script>\n *     const slider = new CuiSlider('#my-input', { min: 0, max: 100 });\n *     // or, with jQuery: $('#my-input').cuiSlider({ min: 0, max: 100 });\n *   </script>\n */\nimport { CuiSlider } from './core/CuiSlider.js';\nimport { registerJQueryPlugin } from './jquery/index.js';\n\nif (typeof window !== 'undefined' && (window.jQuery || window.$)) {\n  registerJQueryPlugin(window.jQuery || window.$);\n}\n\nexport default CuiSlider;\n"],"names":["h","tag","attrs","children","el","key","value","child","addClass","names","name","removeClass","offset","rect","top","parent","decimalPlaces","match","toFixedNumber","precision","clamp","min","max","readDataAttr","optionName","attr","raw","defaultOptions","OPTION_ATTR_NAMES","tickBracket","ticks","percentage","linearScale","step","ticksPositions","i","minVal","maxVal","minPos","maxPos","clampStep","logarithmicScale","minLog","maxLog","alreadyAbsolute","snapped","getScale","buildTooltip","modifier","arrow","inner","buildSliderDom","options","trackLow","selection","trackHigh","track","rangeHighlights","highlight","handle1","handle2","labelledby","ticksContainer","tick","tickLabels","tickLabelContainer","noExplicitPositions","index","label","mainTooltip","minTooltip","maxTooltip","TOUCH_CAPABLE","resolveOptions","userOptions","attrName","fromAttr","provided","sanitizeTooltipPosition","orientation","position","rtl","CuiSlider","target","elementOffset","cls","root","tooltips","side","tooltip","event","e","direction","nextForIndex","nextPercentage","next","_a","distToFirst","distToSecond","touch","dx","dy","horizontalSwipe","verticalSwipe","delta","_b","digits","rounded","snapToNearestTick","nearest","dist","p","start","end","from","size","vertical","sizeProp","marginProp","gap","low","high","near","far","text","handler","triggerSlide","triggerChange","previous","a","b","scalar","single","current","arr","entry","num","theme","DATA_KEY","registerJQueryPlugin","$","optionsOrMethod","args","methodName","result","instance","existing"],"mappings":"2NAAO,SAASA,EAAEC,EAAKC,EAAOC,EAAU,CACtC,MAAMC,EAAK,SAAS,cAAcH,CAAG,EACrC,GAAIC,EACF,UAAWG,KAAOH,EAAO,CACvB,MAAMI,EAAQJ,EAAMG,CAAG,EACnBC,GAAS,MAAQA,IAAU,KAC3BD,IAAQ,QAASD,EAAG,UAAYE,EAC3BD,EAAI,WAAW,IAAI,GAAK,OAAOC,GAAU,WAChDF,EAAG,iBAAiBC,EAAI,MAAM,CAAC,EAAE,YAAW,EAAIC,CAAK,EAErDF,EAAG,aAAaC,EAAKC,IAAU,GAAO,GAAK,OAAOA,CAAK,CAAC,EAE5D,CAEF,GAAIH,GAAY,KACd,UAAWI,KAAS,MAAM,QAAQJ,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAC5DI,GAAS,MAAQA,IAAU,IAC/BH,EAAG,YAAY,OAAOG,GAAU,SAAW,SAAS,eAAeA,CAAK,EAAIA,CAAK,EAGrF,OAAOH,CACT,CAEO,SAASI,EAASJ,EAAIK,EAAO,CAClC,UAAWC,KAAQD,EAAM,MAAM,GAAG,EAAOC,GAAMN,EAAG,UAAU,IAAIM,CAAI,CACtE,CAEO,SAASC,EAAYP,EAAIK,EAAO,CACrC,UAAWC,KAAQD,EAAM,MAAM,GAAG,EAAOC,GAAMN,EAAG,UAAU,OAAOM,CAAI,CACzE,CAEO,SAASE,EAAOR,EAAI,CACzB,MAAMS,EAAOT,EAAG,sBAAqB,EACrC,IAAIU,EAAMV,EAAG,UACTW,EAASX,EAAG,aAChB,KAAOW,GACLD,GAAOC,EAAO,UACVA,EAAO,UAAY,SAAQD,GAAOC,EAAO,WAC7CA,EAASA,EAAO,aAElB,MAAO,CAAE,KAAMF,EAAK,KAAM,MAAOA,EAAK,MAAO,IAAAC,CAAG,CAClD,CCxCO,SAASE,EAAcV,EAAO,CACnC,MAAMW,EAAQ,OAAOX,CAAK,EAAE,MAAM,kCAAkC,EACpE,OAAKW,EACE,KAAK,IAAI,GAAIA,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAE,OAAS,IAAMA,EAAM,CAAC,EAAI,OAAOA,EAAM,CAAC,CAAC,EAAI,EAAE,EADpE,CAErB,CAEO,SAASC,EAAcZ,EAAOa,EAAW,CAC9C,OAAO,OAAOb,EAAM,QAAQa,CAAS,CAAC,CACxC,CAEO,SAASC,EAAMd,EAAOe,EAAKC,EAAK,CACrC,OAAO,KAAK,IAAID,EAAK,KAAK,IAAIC,EAAKhB,CAAK,CAAC,CAC3C,CCPO,SAASiB,EAAanB,EAAIoB,EAAY,CAC3C,MAAMC,EAAO,eAAeD,EAAW,QAAQ,KAAM,GAAG,CAAC,GACnDE,EAAMtB,EAAG,aAAaqB,CAAI,EAChC,GAAIC,GAAO,KACX,GAAI,CACF,OAAO,KAAK,MAAMA,CAAG,CACvB,MAAQ,CACN,OAAOA,CACT,CACF,CCfO,MAAMC,EAAiB,CAC5B,GAAI,GACJ,MAAO,QACP,UAAW,GACX,IAAK,EACL,IAAK,GACL,KAAM,EACN,UAAW,KACX,YAAa,aACb,MAAO,EACP,MAAO,GACP,UAAW,SACX,QAAS,OACT,aAAc,GACd,OAAQ,QACR,SAAU,GACV,IAAK,OACL,QAAS,GACT,UAAYrB,GAAW,MAAM,QAAQA,CAAK,EAAI,GAAGA,EAAM,CAAC,CAAC,MAAMA,EAAM,CAAC,CAAC,GAAK,OAAOA,CAAK,EACxF,iBAAkB,GAClB,MAAO,CAAA,EACP,eAAgB,CAAA,EAChB,YAAa,CAAA,EACb,gBAAiB,EACjB,aAAc,GACd,MAAO,SACP,MAAO,GACP,gBAAiB,KACjB,WAAY,KACZ,gBAAiB,CAAA,CACnB,EAGasB,EAAoB,CAC/B,GAAI,KACJ,MAAO,QACP,IAAK,MACL,IAAK,MACL,KAAM,OACN,UAAW,YACX,YAAa,cACb,MAAO,QACP,MAAO,QACP,UAAW,YACX,QAAS,UACT,aAAc,gBACd,OAAQ,SACR,SAAU,WACV,IAAK,MACL,QAAS,UACT,iBAAkB,qBAClB,MAAO,QACP,eAAgB,kBAChB,YAAa,eACb,gBAAiB,oBACjB,aAAc,gBACd,MAAO,QACP,MAAO,QACP,gBAAiB,mBACjB,WAAY,aACZ,gBAAiB,kBACnB,ECnDA,SAASC,EAAYC,EAAOC,EAAY,CACtC,QAAS,EAAI,EAAG,EAAID,EAAM,OAAQ,GAAK,EACrC,GAAIC,GAAcD,EAAM,CAAC,EAAG,OAAO,EAErC,MAAO,EACT,CAEO,MAAME,EAAc,CACzB,QAAQD,EAAY,CAAE,IAAAV,EAAK,IAAAC,EAAK,KAAAW,EAAM,MAAAH,EAAO,eAAAI,GAAkB,CAC7D,IAAI5B,EACJ,GAAI4B,EAAe,OAAS,EAAG,CAC7B,MAAMC,EAAIN,EAAYK,EAAgBH,CAAU,EAChD,GAAII,IAAM,GACR7B,EAAQe,EAAOU,EAAa,KAAQT,EAAMD,OACrC,CACL,MAAMe,EAASN,EAAMK,EAAI,CAAC,EACpBE,EAASP,EAAMK,CAAC,EAChBG,EAASJ,EAAeC,EAAI,CAAC,EAC7BI,EAASL,EAAeC,CAAC,EAC/B,OAAA7B,EAAQ8B,GAAWL,EAAaO,IAAWC,EAASD,IAAYD,EAASD,GAClEI,EAAUlC,EAAOe,EAAKC,EAAKW,EAA4B,EAAI,CACpE,CACF,MACE3B,EAASyB,EAAa,KAAQT,EAAMD,GAEtC,OAAOmB,EAAUlC,EAAOe,EAAKC,EAAKW,EAAM,EAAK,CAC/C,EAEA,aAAa3B,EAAO,CAAE,IAAAe,EAAK,IAAAC,EAAK,MAAAQ,EAAO,eAAAI,GAAkB,CACvD,GAAIZ,IAAQD,EAAK,MAAO,GACxB,GAAIa,EAAe,OAAS,EAAG,CAC7B,MAAMC,EAAIN,EAAYC,EAAOxB,CAAK,EAClC,GAAI6B,EAAI,EAAG,CACT,MAAMC,EAASN,EAAMK,EAAI,CAAC,EACpBE,EAASP,EAAMK,CAAC,EAChBG,EAASJ,EAAeC,EAAI,CAAC,EAC7BI,EAASL,EAAeC,CAAC,EAC/B,OAAOG,GAAWhC,EAAQ8B,IAAWC,EAASD,IAAYG,EAASD,EACrE,CACF,CACA,MAAQ,MAAOhC,EAAQe,IAASC,EAAMD,EACxC,CACF,EAEaoB,EAAmB,CAC9B,QAAQV,EAAY,CAAE,IAAAV,EAAK,IAAAC,EAAK,KAAAW,CAAI,EAAI,CACtC,MAAMS,EAASrB,IAAQ,EAAI,EAAI,KAAK,IAAIA,CAAG,EACrCsB,EAAS,KAAK,IAAIrB,CAAG,EACrBI,EAAM,KAAK,IAAIgB,GAAWC,EAASD,GAAUX,EAAc,GAAG,EACpE,OAAI,KAAK,MAAML,CAAG,IAAMJ,EAAYA,EAC7BkB,EAAUd,EAAKL,EAAKC,EAAKW,EAAM,EAAI,CAC5C,EAEA,aAAa3B,EAAO,CAAE,IAAAe,EAAK,IAAAC,CAAG,EAAI,CAChC,GAAIA,IAAQD,EAAK,MAAO,GACxB,MAAMsB,EAAS,KAAK,IAAIrB,CAAG,EACrBoB,EAASrB,IAAQ,EAAI,EAAI,KAAK,IAAIA,CAAG,EAE3C,MAAQ,OADSf,IAAU,EAAI,EAAI,KAAK,IAAIA,CAAK,GACvBoC,IAAYC,EAASD,EACjD,CACF,EAEA,SAASF,EAAUlC,EAAOe,EAAKC,EAAKW,EAAMW,EAAiB,CACzD,MAAMC,GAAWD,EAAkB,EAAIvB,GAAO,KAAK,MAAMf,EAAQ2B,CAAI,EAAIA,EACzE,OAAIY,EAAUxB,EAAYA,EACtBwB,EAAUvB,EAAYA,EACnBuB,CACT,CAEO,SAASC,EAASpC,EAAM,CAC7B,OAAOA,IAAS,cAAgB+B,EAAmBT,CACrD,CC/EA,SAASe,EAAaC,EAAU,CAC9B,MAAMC,EAAQjD,EAAE,MAAO,CAAE,MAAO,mBAAmB,CAAE,EAC/CkD,EAAQlD,EAAE,MAAO,CAAE,MAAO,mBAAmB,CAAE,EAErD,MAAO,CAAE,QADOA,EAAE,MAAO,CAAE,MAAO,2BAA2BgD,CAAQ,GAAI,KAAM,cAAc,EAAI,CAACC,EAAOC,CAAK,CAAC,EAC7F,MAAAA,CAAK,CACzB,CAMO,SAASC,EAAeC,EAAS,CACtC,MAAMC,EAAWrD,EAAE,MAAO,CAAE,MAAO,sBAAsB,CAAE,EACrDsD,EAAYtD,EAAE,MAAO,CAAE,MAAO,sBAAsB,CAAE,EACtDuD,EAAYvD,EAAE,MAAO,CAAE,MAAO,uBAAuB,CAAE,EACvDwD,EAAQxD,EAAE,MAAO,CAAE,MAAO,kBAAkB,EAAI,CAACqD,EAAUC,EAAWC,CAAS,CAAC,EAEhFE,EAAkB,CAAA,EACxB,GAAI,MAAM,QAAQL,EAAQ,eAAe,EACvC,UAAWM,KAAaN,EAAQ,gBAAiB,CAC/C,MAAMhD,EAAKJ,EAAE,MAAO,CAAE,MAAO,mDAAmD0D,EAAU,OAAS,EAAE,GAAG,KAAI,CAAE,CAAE,EAChHD,EAAgB,KAAKrD,CAAE,EACvBoD,EAAM,YAAYpD,CAAE,CACtB,CAGF,MAAMuD,EAAU3D,EAAE,MAAO,CACvB,MAAO,0CACP,KAAM,SACN,gBAAiBoD,EAAQ,IACzB,gBAAiBA,EAAQ,GAC7B,CAAG,EACKQ,EAAU5D,EAAE,MAAO,CACvB,MAAO,0CACP,KAAM,SACN,gBAAiBoD,EAAQ,IACzB,gBAAiBA,EAAQ,GAC7B,CAAG,EAEKS,EAAaT,EAAQ,WACvB,MAAM,QAAQS,CAAU,GACtBA,EAAW,CAAC,GAAGF,EAAQ,aAAa,kBAAmBE,EAAW,CAAC,CAAC,EACpEA,EAAW,CAAC,GAAGD,EAAQ,aAAa,kBAAmBC,EAAW,CAAC,CAAC,GAC/DA,IACTF,EAAQ,aAAa,kBAAmBE,CAAU,EAClDD,EAAQ,aAAa,kBAAmBC,CAAU,GAGpD,MAAM/B,EAAQ,CAAA,EACd,IAAIgC,EAAiB,KACrB,GAAI,MAAM,QAAQV,EAAQ,KAAK,GAAKA,EAAQ,MAAM,OAAS,EAAG,CAC5DU,EAAiB9D,EAAE,MAAO,CAAE,MAAO,2BAA2B,CAAE,EAChE,QAASmC,EAAI,EAAGA,EAAIiB,EAAQ,MAAM,OAAQjB,GAAK,EAAG,CAChD,MAAM4B,EAAO/D,EAAE,MAAO,CAAE,MAAO,iBAAiB,CAAE,EAClD8B,EAAM,KAAKiC,CAAI,EACfD,EAAe,YAAYC,CAAI,CACjC,CACAT,EAAU,UAAU,IAAI,2BAA2B,CACrD,CAEA,MAAMU,EAAa,CAAA,EACnB,IAAIC,EAAqB,KACzB,GAAI,MAAM,QAAQb,EAAQ,WAAW,GAAKA,EAAQ,YAAY,OAAS,EAAG,CACxEa,EAAqBjE,EAAE,MAAO,CAAE,MAAO,iCAAiC,CAAE,EAC1E,MAAMkE,EAAsBd,EAAQ,eAAe,SAAW,EAC9D,QAASjB,EAAI,EAAGA,EAAIiB,EAAQ,YAAY,OAAQjB,GAAK,EAAG,CACtD,MAAMgC,EAAQf,EAAQ,UAAYc,EAAsBd,EAAQ,YAAY,QAAUjB,EAAI,GAAKA,EACzFiC,EAAQpE,EAAE,MAAO,CAAE,MAAO,uBAAuB,CAAE,EACzDoE,EAAM,UAAYhB,EAAQ,YAAYe,CAAK,EAC3CH,EAAW,KAAKI,CAAK,EACrBH,EAAmB,YAAYG,CAAK,CACtC,CACF,CAEA,MAAMC,EAActB,EAAa,MAAM,EACjCuB,EAAavB,EAAa,KAAK,EAC/BwB,EAAaxB,EAAa,KAAK,EAE/B5C,EAAW,CAACqD,EAAOa,EAAY,QAASC,EAAW,QAASC,EAAW,OAAO,EACpF,OAAIN,GAAoB9D,EAAS,KAAK8D,CAAkB,EACpDH,GAAgB3D,EAAS,KAAK2D,CAAc,EAChD3D,EAAS,KAAKwD,EAASC,CAAO,EAIvB,CACL,KAHW5D,EAAE,MAAO,CAAE,MAAO,YAAY,EAAIG,CAAQ,EAIrD,MAAAqD,EACA,SAAAH,EACA,UAAAC,EACA,UAAAC,EACA,gBAAAE,EACA,QAAAE,EACA,QAAAC,EACA,MAAA9B,EACA,eAAAgC,EACA,WAAAE,EACA,mBAAAC,EACA,QAASI,EAAY,QACrB,aAAcA,EAAY,MAC1B,WAAYC,EAAW,QACvB,gBAAiBA,EAAW,MAC5B,WAAYC,EAAW,QACvB,gBAAiBA,EAAW,KAChC,CACA,CCpGA,MAAMC,EAAgB,OAAO,OAAW,MAAgB,iBAAkB,QAAW,OAAO,eAAiB,oBAAoB,OAAO,eAExI,SAASC,EAAerE,EAAIsE,EAAa,CACvC,MAAMtB,EAAU,CAAA,EAChB,UAAW/C,KAAO,OAAO,KAAKsB,CAAc,EAAG,CAC7C,MAAMgD,EAAW/C,EAAkBvB,CAAG,EAChCuE,EAAWD,EAAWpD,EAAanB,EAAIuE,CAAQ,EAAI,OACnDE,EAAWH,EAAYrE,CAAG,EAChC+C,EAAQ/C,CAAG,EAAIwE,IAAa,OAAYA,EAAWD,IAAa,OAAYA,EAAWjD,EAAetB,CAAG,CAC3G,CACA,OAAI+C,EAAQ,MAAQ,SAClBA,EAAQ,IAAM,OAAO,iBAAiBhD,CAAE,EAAE,YAAc,OAE1DgD,EAAQ,gBAAkB0B,EAAwB1B,EAAQ,YAAaA,EAAQ,gBAAiBA,EAAQ,GAAG,EACpGA,CACT,CAEA,SAAS0B,EAAwBC,EAAaC,EAAUC,EAAK,CAC3D,OAAIF,IAAgB,aAAeC,IAAa,OAASA,IAAa,UAAkBC,EAAM,OAAS,QACnGF,IAAgB,eAAiBC,IAAa,QAAUA,IAAa,SAAiB,MACnFA,CACT,CAOO,MAAME,CAAU,CACrB,YAAYC,EAAQT,EAAc,GAAI,CAEpC,GADA,KAAK,QAAU,OAAOS,GAAW,SAAW,SAAS,cAAcA,CAAM,EAAIA,EACzE,CAAC,KAAK,QAAS,MAAM,IAAI,MAAM,qCAAqC,EAExE,KAAK,QAAUV,EAAe,KAAK,QAASC,CAAW,EACvD,KAAK,MAAQ5B,EAAS,KAAK,QAAQ,KAAK,EACxC,KAAK,WAAa,IAAI,IACtB,KAAK,OAAS,CAAE,QAAS,GAAM,OAAQ,GAAO,KAAM,GAAO,QAAS,EAAG,QAAS,IAAI,EAEhF,MAAM,QAAQ,KAAK,QAAQ,KAAK,GAAK,KAAK,QAAQ,MAAM,OAAS,IACnE,KAAK,QAAQ,IAAM,KAAK,IAAI,GAAG,KAAK,QAAQ,KAAK,EACjD,KAAK,QAAQ,IAAM,KAAK,IAAI,GAAG,KAAK,QAAQ,KAAK,GAG/C,MAAM,QAAQ,KAAK,QAAQ,KAAK,GAClC,KAAK,QAAQ,MAAQ,GACrB,KAAK,OAAS,CAAC,GAAG,KAAK,QAAQ,KAAK,GAC3B,KAAK,QAAQ,MACtB,KAAK,OAAS,CAAC,KAAK,QAAQ,MAAO,KAAK,QAAQ,GAAG,EAEnD,KAAK,OAAS,CAAC,KAAK,QAAQ,MAAO,KAAK,QAAQ,YAAc,QAAU,KAAK,QAAQ,IAAM,KAAK,QAAQ,GAAG,EAG7G,KAAK,UAAS,EACd,KAAK,kBAAiB,EACtB,KAAK,YAAW,EAEhB,KAAK,OAAO,OAASsC,EAAc,KAAK,IAAI,IAAI,EAChD,KAAK,OAAO,KAAO,KAAK,IAAI,KAAK,KAAK,SAAS,EAC/C,KAAK,SAAS,KAAK,QAAQ,MAAQ,KAAK,OAAS,KAAK,OAAO,CAAC,CAAC,EAE/D,KAAK,QAAQ,QAAU,KAAK,OAAM,EAAK,KAAK,QAAO,CACrD,CAIA,WAAY,CAGV,GAFA,KAAK,IAAMjC,EAAe,KAAK,OAAO,EACtC,KAAK,IAAI,KAAK,QAAQ,MAAQ,KAAK,QAAQ,MACvC,KAAK,QAAQ,UACf,UAAWkC,KAAO,KAAK,QAAQ,UAAU,MAAM,KAAK,EAAE,OAAO,OAAO,EAClE,KAAK,IAAI,KAAK,UAAU,IAAIA,CAAG,EAsBnC,GAnBA,KAAK,iBAAmB,KAAK,QAAQ,MAAM,QAC3C,KAAK,QAAQ,WAAW,aAAa,KAAK,IAAI,KAAM,KAAK,OAAO,EAChE,KAAK,QAAQ,MAAM,QAAU,OAExB,KAAK,QAAQ,aAIhB7E,EAAS,KAAK,IAAI,QAAS,YAAY,GAHvCA,EAAS,KAAK,IAAI,WAAY,YAAY,EAC1CA,EAAS,KAAK,IAAI,WAAY,YAAY,GAKxC,KAAK,QAAQ,YAAc,SAC7BA,EAAS,KAAK,IAAI,SAAU,YAAY,EACxCA,EAAS,KAAK,IAAI,UAAW,YAAY,EACzCA,EAAS,KAAK,IAAI,UAAW,YAAY,GAGtC,KAAK,QAAQ,OAAOA,EAAS,KAAK,IAAI,QAAS,YAAY,EAE5D,KAAK,QAAQ,SAAW,YAAc,KAAK,QAAQ,SAAW,SAAU,CAC1EA,EAAS,KAAK,IAAI,QAAS,qBAAqB,KAAK,QAAQ,MAAM,EAAE,EACrEA,EAAS,KAAK,IAAI,QAAS,qBAAqB,KAAK,QAAQ,MAAM,EAAE,EACrE,UAAWuD,KAAQ,KAAK,IAAI,MAAOvD,EAASuD,EAAM,qBAAqB,KAAK,QAAQ,MAAM,EAAE,CAC9F,CACF,CAEA,mBAAoB,CAClB,KAAM,CAAE,KAAAuB,GAAS,KAAK,IAClB,KAAK,QAAQ,cAAgB,YAC/B9E,EAAS8E,EAAM,qBAAqB,EACpC,KAAK,UAAY,MACjB,KAAK,WAAa,QAClB,KAAK,UAAY,iBAEjB9E,EAAS8E,EAAM,uBAAuB,EACtC,KAAK,UAAY,KAAK,QAAQ,IAAM,QAAU,OAC9C,KAAK,WAAa,UAClB,KAAK,UAAY,eAEf,KAAK,QAAQ,KAAK9E,EAAS8E,EAAM,gBAAgB,EACrD,KAAK,uBAAsB,CAC7B,CAMA,wBAAyB,CACvB,MAAMC,EAAW,CAAC,KAAK,IAAI,QAAS,KAAK,IAAI,WAAY,KAAK,IAAI,UAAU,EAC5E,GAAI,KAAK,QAAQ,cAAgB,WAAY,CAC3C,MAAMC,EAAO,KAAK,QAAQ,kBAAoB,KAAK,QAAQ,IAAM,OAAS,SAC1E,UAAWC,KAAWF,EAAU/E,EAASiF,EAASD,CAAI,CACxD,MACEhF,EAAS+E,EAAS,CAAC,EAAG,KAAK,QAAQ,kBAAoB,SAAW,SAAW,KAAK,EAClF/E,EAAS+E,EAAS,CAAC,EAAG,KAAK,QAAQ,kBAAoB,SAAW,SAAW,KAAK,EAClF/E,EAAS+E,EAAS,CAAC,EAAG,KAAK,QAAQ,kBAAoB,SAAW,SAAW,KAAK,CAEtF,CAIA,aAAc,CACZ,KAAK,iBAAmB,CAACpB,EAAOuB,IAAU,KAAK,eAAevB,EAAOuB,CAAK,EAC1E,KAAK,IAAI,QAAQ,iBAAiB,UAAYC,GAAM,KAAK,iBAAiB,EAAGA,CAAC,CAAC,EAC/E,KAAK,IAAI,QAAQ,iBAAiB,UAAYA,GAAM,KAAK,iBAAiB,EAAGA,CAAC,CAAC,EAE/E,KAAK,aAAgBA,GAAM,KAAK,iBAAiBA,CAAC,EAClD,KAAK,IAAI,KAAK,iBAAiB,YAAa,KAAK,YAAY,EAEzDnB,IACF,KAAK,cAAiBmB,GAAM,KAAK,kBAAkBA,CAAC,EACpD,KAAK,aAAgBA,GAAM,KAAK,iBAAiBA,CAAC,EAClD,KAAK,IAAI,KAAK,iBAAiB,aAAc,KAAK,cAAe,CAAE,QAAS,GAAM,EAClF,KAAK,IAAI,KAAK,iBAAiB,YAAa,KAAK,aAAc,CAAE,QAAS,GAAM,GAGlF,KAAK,UAAY,IAAM,CACrB,KAAK,OAAO,OAASP,EAAc,KAAK,IAAI,IAAI,EAChD,KAAK,OAAO,KAAO,KAAK,IAAI,KAAK,KAAK,SAAS,EAC/C,KAAK,QAAO,CACd,EACA,OAAO,iBAAiB,SAAU,KAAK,SAAS,EAE5C,KAAK,QAAQ,UAAY,QAC3B5E,EAAS,KAAK,IAAI,QAAS,YAAY,EACvCA,EAAS,KAAK,IAAI,WAAY,YAAY,EAC1CA,EAAS,KAAK,IAAI,WAAY,YAAY,GACjC,KAAK,QAAQ,UAAY,UAClC,KAAK,aAAY,EACjB,KAAK,mBAAqB,KAE1B,KAAK,eAAiB,IAAM,KAAK,aAAY,EAC7C,KAAK,eAAiB,IAAM,KAAK,aAAY,EAC7C,KAAK,IAAI,KAAK,iBAAiB,aAAc,KAAK,cAAc,EAChE,KAAK,IAAI,KAAK,iBAAiB,aAAc,KAAK,cAAc,EAChE,KAAK,IAAI,QAAQ,iBAAiB,QAAS,KAAK,cAAc,EAC9D,KAAK,IAAI,QAAQ,iBAAiB,OAAQ,KAAK,cAAc,EAC7D,KAAK,IAAI,QAAQ,iBAAiB,QAAS,KAAK,cAAc,EAC9D,KAAK,IAAI,QAAQ,iBAAiB,OAAQ,KAAK,cAAc,EAEjE,CAEA,eAAgB,CACd,OAAO,oBAAoB,SAAU,KAAK,SAAS,EACnD,KAAK,IAAI,KAAK,oBAAoB,YAAa,KAAK,YAAY,EAC5DgE,IACF,KAAK,IAAI,KAAK,oBAAoB,aAAc,KAAK,aAAa,EAClE,KAAK,IAAI,KAAK,oBAAoB,YAAa,KAAK,YAAY,GAE9D,KAAK,iBAAiB,SAAS,oBAAoB,YAAa,KAAK,eAAe,EACpF,KAAK,eAAe,SAAS,oBAAoB,UAAW,KAAK,aAAa,EAC9E,KAAK,iBACP,KAAK,IAAI,KAAK,oBAAoB,aAAc,KAAK,cAAc,EACnE,KAAK,IAAI,KAAK,oBAAoB,aAAc,KAAK,cAAc,EACnE,KAAK,IAAI,QAAQ,oBAAoB,QAAS,KAAK,cAAc,EACjE,KAAK,IAAI,QAAQ,oBAAoB,OAAQ,KAAK,cAAc,EAChE,KAAK,IAAI,QAAQ,oBAAoB,QAAS,KAAK,cAAc,EACjE,KAAK,IAAI,QAAQ,oBAAoB,OAAQ,KAAK,cAAc,EAEpE,CAEA,eAAeL,EAAOuB,EAAO,CAC3B,GAAI,CAAC,KAAK,OAAO,QAAS,OAC1B,IAAIE,EACJ,OAAQF,EAAM,IAAG,CACf,IAAK,YACL,IAAK,YACHE,EAAY,GACZ,MACF,IAAK,aACL,IAAK,UACHA,EAAY,EACZ,MACF,QACE,MACR,CACQ,KAAK,QAAQ,mBAEZ,KAAK,QAAQ,cAAgB,YAAc,CAAC,KAAK,QAAQ,UACzD,KAAK,QAAQ,cAAgB,cAAgB,KAAK,QAAQ,YACnDA,EAAY,CAACA,GAGzB,MAAMC,EAAe,KAAK,OAAO1B,CAAK,EAAIyB,EAAY,KAAK,QAAQ,KAC7DE,EAAkBD,EAAe,KAAK,QAAQ,IAAO,IAC3D,KAAK,OAAO,QAAU1B,EACtB,IAAI4B,EACA,KAAK,QAAQ,OACf,KAAK,uBAAuBD,CAAc,EAC1CC,EAAO,CAAC,KAAK,OAAO,UAAY,EAAIF,EAAe,KAAK,OAAO,CAAC,EAAG,KAAK,OAAO,UAAY,EAAIA,EAAe,KAAK,OAAO,CAAC,CAAC,GAE5HE,EAAOF,EAGT,KAAK,MAAM,aAAcE,CAAI,EAC7B,KAAK,SAASA,EAAM,GAAM,EAAI,EAC9B,KAAK,MAAM,YAAaA,CAAI,EAC5B,KAAK,QAAO,EACZL,EAAM,eAAc,EACpBA,EAAM,gBAAe,EACrB,KAAK,OAAO,QAAU,IACxB,CAEA,iBAAiBA,EAAO,OACtB,GAAI,CAAC,KAAK,OAAO,QAAS,MAAO,IACjCM,EAAAN,EAAM,iBAAN,MAAAM,EAAA,KAAAN,GACA,KAAK,OAAO,OAASN,EAAc,KAAK,IAAI,IAAI,EAChD,KAAK,OAAO,KAAO,KAAK,IAAI,KAAK,KAAK,SAAS,EAE/C,MAAMrD,EAAa,KAAK,qBAAqB2D,CAAK,EAClD,GAAI,KAAK,QAAQ,MAAO,CACtB,MAAMO,EAAc,KAAK,IAAI,KAAK,YAAY,CAAC,EAAIlE,CAAU,EACvDmE,EAAe,KAAK,IAAI,KAAK,YAAY,CAAC,EAAInE,CAAU,EAC9D,KAAK,OAAO,QAAUkE,EAAcC,EAAe,EAAI,EACvD,KAAK,uBAAuBnE,CAAU,CACxC,MACE,KAAK,OAAO,QAAU,EAExB,KAAK,YAAY,KAAK,OAAO,OAAO,EAAIA,EACxC,KAAK,QAAO,EAEZ,KAAK,gBAAmB4D,GAAM,KAAK,iBAAiBA,CAAC,EACrD,KAAK,cAAgB,IAAM,KAAK,eAAc,EAC9C,SAAS,iBAAiB,YAAa,KAAK,eAAe,EAC3D,SAAS,iBAAiB,UAAW,KAAK,aAAa,EACvD,KAAK,OAAO,OAAS,GAErB,MAAMrF,EAAQ,KAAK,gBAAe,EAClC,YAAK,MAAM,aAAcA,CAAK,EAC9B,KAAK,SAASA,EAAO,GAAO,EAAI,EAC5B,KAAK,QAAQ,QAAQ,KAAK,OAAO,UAAY,EAAI,KAAK,IAAI,QAAU,KAAK,IAAI,SAAS,MAAK,EACxF,EACT,CAEA,iBAAiBoF,EAAO,CACtB,GAAI,CAAC,KAAK,OAAO,QAAS,MAAO,GACjC,MAAM3D,EAAa,KAAK,qBAAqB2D,CAAK,EAClD,YAAK,uBAAuB3D,CAAU,EACtC,KAAK,YAAY,KAAK,OAAO,OAAO,EAAIA,EACxC,KAAK,QAAO,EACZ,KAAK,SAAS,KAAK,gBAAgB,EAAI,EAAG,GAAM,EAAI,EAC7C,EACT,CAEA,gBAAiB,CACf,GAAI,CAAC,KAAK,OAAO,QAAS,MAAO,GACjC,SAAS,oBAAoB,YAAa,KAAK,eAAe,EAC9D,SAAS,oBAAoB,UAAW,KAAK,aAAa,EAC1D,KAAK,OAAO,OAAS,GAChB,KAAK,OAAO,MAAM,KAAK,aAAY,EACxC,MAAMzB,EAAQ,KAAK,gBAAgB,EAAI,EACvC,YAAK,QAAO,EACZ,KAAK,MAAM,YAAaA,CAAK,EACtB,EACT,CAEA,kBAAkBoF,EAAO,OACvB,IAAIM,EAAAN,EAAM,iBAAN,MAAAM,EAAsB,OAAQ,CAChC,MAAMG,EAAQT,EAAM,eAAe,CAAC,EACpC,KAAK,aAAeS,EAAM,MAC1B,KAAK,aAAeA,EAAM,KAC5B,MACE,KAAK,iBAAiBT,CAAK,CAE/B,CAEA,iBAAiBA,EAAO,OACtB,MAAMS,GAAQH,EAAAN,EAAM,iBAAN,YAAAM,EAAuB,GACrC,GAAI,CAACG,EAAO,OACZ,MAAMC,EAAKD,EAAM,MAAQ,KAAK,aACxBE,EAAKF,EAAM,MAAQ,KAAK,aAC9B,GAAI,KAAK,OAAO,OAAQ,OACxB,MAAMG,EAAkBD,GAAM,IAAMA,GAAM,IAAMD,GAAM,IAAMA,GAAM,KAC5DG,EAAgBH,GAAM,IAAMA,GAAM,IAAMC,GAAM,IAAMA,GAAM,MAC3D,KAAK,QAAQ,cAAgB,YAAcE,GAAmB,KAAK,QAAQ,cAAgB,YAAcD,IAC5G,KAAK,iBAAiBZ,CAAK,CAE/B,CAEA,qBAAqBA,EAAO,SAE1B,IAAIc,KADUR,EAAAN,EAAM,UAAN,YAAAM,EAAgB,OAAMS,EAAAf,EAAM,iBAAN,YAAAe,EAAuB,KAAMf,GAC/C,KAAK,UAAU,EAAI,KAAK,OAAO,OAAO,KAAK,SAAS,EAClE,KAAK,YAAc,UAASc,EAAQ,CAACA,GACzC,IAAIzE,EAAcyE,EAAQ,KAAK,OAAO,KAAQ,IAC9C,OAAAzE,EAAa,KAAK,MAAMA,EAAa,KAAK,YAAY,CAAC,CAAC,EAAI,KAAK,YAAY,CAAC,EAC1E,KAAK,QAAQ,WAAUA,EAAa,IAAMA,GACvCX,EAAMW,EAAY,EAAG,GAAG,CACjC,CAEA,uBAAuBA,EAAY,CACjC,GAAI,CAAC,KAAK,QAAQ,MAAO,OACzB,MAAM2E,EAAS,KAAK,IAAI,EAAG1F,EAAce,CAAU,EAAI,CAAC,EAClD4E,EAAUzF,EAAca,EAAY2E,CAAM,EAC5C,KAAK,OAAO,UAAY,GAAKxF,EAAc,KAAK,YAAY,CAAC,EAAGwF,CAAM,EAAIC,GAC5E,KAAK,YAAY,CAAC,EAAI,KAAK,YAAY,CAAC,EACxC,KAAK,OAAO,QAAU,GACb,KAAK,OAAO,UAAY,GAAKzF,EAAc,KAAK,YAAY,CAAC,EAAGwF,CAAM,EAAIC,GACnF,KAAK,YAAY,CAAC,EAAI,KAAK,YAAY,CAAC,EACxC,KAAK,OAAO,QAAU,GACb,KAAK,OAAO,UAAY,GAAM,KAAK,OAAO,CAAC,EAAI,KAAK,QAAQ,IAAO,IAAM5E,GAClF,KAAK,YAAY,CAAC,EAAI,KAAK,YAAY,CAAC,EACxC,KAAK,OAAO,QAAU,EACtB,KAAK,IAAI,QAAQ,MAAK,GACb,KAAK,OAAO,UAAY,GAAM,KAAK,OAAO,CAAC,EAAI,KAAK,QAAQ,IAAO,IAAMA,IAClF,KAAK,YAAY,CAAC,EAAI,KAAK,YAAY,CAAC,EACxC,KAAK,OAAO,QAAU,EACtB,KAAK,IAAI,QAAQ,MAAK,EAE1B,CAEA,gBAAgB6E,EAAoB,GAAO,CACzC,IAAItG,EAQJ,GAPI,KAAK,QAAQ,OACfA,EAAQ,CAAC,KAAK,QAAQ,IAAK,KAAK,QAAQ,GAAG,EACvC,KAAK,YAAY,CAAC,IAAM,IAAGA,EAAM,CAAC,EAAI,KAAK,gBAAgB,KAAK,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,GAC7F,KAAK,YAAY,CAAC,IAAM,MAAKA,EAAM,CAAC,EAAI,KAAK,gBAAgB,KAAK,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,IAEnGA,EAAQ,KAAK,gBAAgB,WAAW,KAAK,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,EAEzEsG,GAAqB,KAAK,QAAQ,MAAM,OAAS,EAAG,CACtD,IAAIC,EAAU,CAACvG,EAAO,GAAQ,EAC9B,UAAWyD,KAAQ,KAAK,QAAQ,MAAO,CACrC,MAAM+C,EAAO,KAAK,IAAI/C,EAAOzD,CAAK,EAC9BwG,GAAQD,EAAQ,CAAC,IAAGA,EAAU,CAAC9C,EAAM+C,CAAI,EAC/C,CACA,GAAID,EAAQ,CAAC,GAAK,KAAK,QAAQ,gBAAiB,OAAOA,EAAQ,CAAC,CAClE,CACA,OAAOvG,CACT,CAIA,SAAU,CACR,MAAMyG,EAAI,KAAK,QAAQ,SACnB,CAAC,IAAM,KAAK,YAAY,CAAC,EAAG,KAAK,QAAQ,MAAQ,IAAM,KAAK,YAAY,CAAC,EAAI,KAAK,YAAY,CAAC,CAAC,EAChG,CAAC,KAAK,YAAY,CAAC,EAAG,KAAK,YAAY,CAAC,CAAC,EAE7C,KAAK,IAAI,QAAQ,MAAM,KAAK,SAAS,EAAI,GAAGA,EAAE,CAAC,CAAC,IAChD,KAAK,IAAI,QAAQ,aAAa,gBAAiB,KAAK,OAAO,CAAC,CAAC,EAC7D,KAAK,IAAI,QAAQ,MAAM,KAAK,SAAS,EAAI,GAAGA,EAAE,CAAC,CAAC,IAChD,KAAK,IAAI,QAAQ,aAAa,gBAAiB,KAAK,OAAO,CAAC,CAAC,EAE7D,KAAK,uBAAuBA,CAAC,EAC7B,KAAK,aAAaA,CAAC,EACnB,KAAK,gBAAgBA,CAAC,EACtB,KAAK,aAAaA,CAAC,CACrB,CAEA,uBAAuBA,EAAG,CACxB,GAAI,KAAK,IAAI,gBAAgB,SAAW,EACxC,QAAS,EAAI,EAAG,EAAI,KAAK,QAAQ,gBAAgB,OAAQ,GAAK,EAAG,CAC/D,IAAIC,EAAQ,KAAK,cAAc,KAAK,QAAQ,gBAAgB,CAAC,EAAE,KAAK,EAChEC,EAAM,KAAK,cAAc,KAAK,QAAQ,gBAAgB,CAAC,EAAE,GAAG,EAC5D,KAAK,QAAQ,WAAU,CAACD,EAAOC,CAAG,EAAI,CAAC,IAAMA,EAAK,IAAMD,CAAK,GACjE,MAAM5G,EAAK,KAAK,IAAI,gBAAgB,CAAC,EACrC,GAAI4G,EAAQ,GAAKA,EAAQ,KAAOC,EAAM,GAAKA,EAAM,IAAK,CACpD7G,EAAG,MAAM,QAAU,OACnB,QACF,CACAA,EAAG,MAAM,QAAU,GACnB,MAAM8G,EAAO,KAAK,IAAIF,EAAOC,CAAG,EAC1BE,EAAO,KAAK,IAAIH,EAAQC,CAAG,EAC7B,KAAK,QAAQ,cAAgB,YAC/B7G,EAAG,MAAM,IAAM,GAAG8G,CAAI,IACtB9G,EAAG,MAAM,OAAS,GAAG+G,CAAI,MAEzB/G,EAAG,MAAM,KAAK,QAAQ,IAAM,QAAU,MAAM,EAAI,GAAG8G,CAAI,IACvD9G,EAAG,MAAM,MAAQ,GAAG+G,CAAI,IAE5B,CACF,CAEA,aAAaJ,EAAG,CACd,GAAI,KAAK,IAAI,MAAM,SAAW,EAAG,OACjC,MAAMK,EAAW,KAAK,QAAQ,cAAgB,WACxCC,EAAWD,EAAW,SAAW,QACjCE,EAAaF,EAAW,YAAc,KAAK,QAAQ,IAAM,cAAgB,aACzEG,EAAM,KAAK,OAAO,MAAQ,KAAK,QAAQ,MAAM,OAAS,GAExD,KAAK,IAAI,oBACP,KAAK,QAAQ,eAAe,SAAW,GAAK,CAACH,IAC/C,KAAK,IAAI,mBAAmB,MAAME,CAAU,EAAI,GAAG,CAACC,EAAM,CAAC,MAI/D,QAASpF,EAAI,EAAGA,EAAI,KAAK,QAAQ,MAAM,OAAQA,GAAK,EAAG,CACrD,IAAI6C,EAAW,KAAK,QAAQ,eAAe7C,CAAC,GAAK,KAAK,cAAc,KAAK,QAAQ,MAAMA,CAAC,CAAC,EACrF,KAAK,QAAQ,WAAU6C,EAAW,IAAMA,GAC5C,MAAMjB,EAAO,KAAK,IAAI,MAAM5B,CAAC,EAC7B4B,EAAK,MAAM,KAAK,SAAS,EAAI,GAAGiB,CAAQ,IACxCrE,EAAYoD,EAAM,kBAAkB,GAChB,KAAK,QAAQ,MAC7BiB,GAAY+B,EAAE,CAAC,GAAK/B,GAAY+B,EAAE,CAAC,EAClC,KAAK,QAAQ,YAAc,SAAW/B,GAAY+B,EAAE,CAAC,GAAO,KAAK,QAAQ,YAAc,UAAY/B,GAAY+B,EAAE,CAAC,IACtGvG,EAASuD,EAAM,kBAAkB,EAElD,MAAMK,EAAQ,KAAK,IAAI,WAAWjC,CAAC,EAC9BiC,IACLA,EAAM,MAAMiD,CAAQ,EAAI,GAAGE,CAAG,KAC1B,CAACH,GAAY,KAAK,QAAQ,eAAejF,CAAC,IAAM,QAClDiC,EAAM,MAAM,SAAW,WACvBA,EAAM,MAAM,KAAK,SAAS,EAAI,GAAGY,CAAQ,IACzCZ,EAAM,MAAMkD,CAAU,EAAI,GAAG,CAACC,EAAM,CAAC,MAC5BH,IACThD,EAAM,MAAM,KAAK,QAAQ,IAAM,cAAgB,YAAY,EAAI,GAAG,KAAK,IAAI,KAAK,WAAW,KACvF,KAAK,IAAI,qBAAoB,KAAK,IAAI,mBAAmB,MAAMkD,CAAU,EAAI,GAAI,CAAC,KAAK,IAAI,KAAK,YAAe,CAAC,OAExH,CACF,CAEA,gBAAgBP,EAAG,CACb,KAAK,QAAQ,OACf,KAAK,SAAS,KAAK,IAAI,aAAc,KAAK,QAAQ,UAAU,KAAK,MAAM,CAAC,EACxE,KAAK,IAAI,QAAQ,MAAM,KAAK,SAAS,EAAI,IAAIA,EAAE,CAAC,EAAIA,EAAE,CAAC,GAAK,CAAC,IAC7D,KAAK,IAAI,WAAW,MAAM,KAAK,SAAS,EAAI,GAAGA,EAAE,CAAC,CAAC,IACnD,KAAK,IAAI,WAAW,MAAM,KAAK,SAAS,EAAI,GAAGA,EAAE,CAAC,CAAC,IAK/C,KAAK,QAAQ,eACf,KAAK,SAAS,KAAK,IAAI,gBAAiB,KAAK,QAAQ,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9E,KAAK,SAAS,KAAK,IAAI,gBAAiB,KAAK,QAAQ,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,KAGhF,KAAK,SAAS,KAAK,IAAI,aAAc,KAAK,QAAQ,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3E,KAAK,IAAI,QAAQ,MAAM,KAAK,SAAS,EAAI,GAAGA,EAAE,CAAC,CAAC,IAEpD,CAEA,aAAaA,EAAG,CACd,GAAI,KAAK,QAAQ,cAAgB,WAAY,CAC3C,MAAMS,EAAM,KAAK,IAAIT,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EACzBU,EAAO,KAAK,IAAIV,EAAE,CAAC,EAAIA,EAAE,CAAC,CAAC,EACjC,KAAK,IAAI,SAAS,MAAM,IAAM,IAC9B,KAAK,IAAI,SAAS,MAAM,OAAS,GAAGS,CAAG,IACvC,KAAK,IAAI,UAAU,MAAM,IAAM,GAAGA,CAAG,IACrC,KAAK,IAAI,UAAU,MAAM,OAAS,GAAGC,CAAI,IACzC,KAAK,IAAI,UAAU,MAAM,OAAS,IAClC,KAAK,IAAI,UAAU,MAAM,OAAS,GAAG,IAAMD,EAAMC,CAAI,IACrD,MACF,CACA,MAAMC,EAAO,KAAK,YAAc,QAAU,QAAU,OAC9CC,EAAMD,IAAS,QAAU,OAAS,QAClCF,EAAM,KAAK,IAAIT,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EACzBU,EAAO,KAAK,IAAIV,EAAE,CAAC,EAAIA,EAAE,CAAC,CAAC,EACjC,KAAK,IAAI,SAAS,MAAMW,CAAI,EAAI,IAChC,KAAK,IAAI,SAAS,MAAM,MAAQ,GAAGF,CAAG,IACtC,KAAK,IAAI,UAAU,MAAME,CAAI,EAAI,GAAGF,CAAG,IACvC,KAAK,IAAI,UAAU,MAAM,MAAQ,GAAGC,CAAI,IACxC,KAAK,IAAI,UAAU,MAAME,CAAG,EAAI,IAChC,KAAK,IAAI,UAAU,MAAM,MAAQ,GAAG,IAAMH,EAAMC,CAAI,GACtD,CAEA,SAASrH,EAAIwH,EAAM,CACjBxH,EAAG,YAAcwH,CACnB,CAEA,SAAS7F,EAAY,CACnB,OAAO,KAAK,MAAM,QAAQA,EAAY,KAAK,OAAO,CACpD,CAEA,cAAczB,EAAO,CACnB,OAAO,KAAK,MAAM,aAAaA,EAAO,KAAK,OAAO,CACpD,CAEA,gBAAgBA,EAAO,CACrB,MAAMa,EAAY,KAAK,QAAQ,WAAa,KAAO,KAAK,QAAQ,UAAYH,EAAc,KAAK,QAAQ,IAAI,EAC3G,OAAOE,EAAcZ,EAAOa,CAAS,CACvC,CAEA,cAAe,CACR,KAAK,QAAQ,cAKhBX,EAAS,KAAK,IAAI,WAAY,QAAQ,EACtCA,EAAS,KAAK,IAAI,WAAY,QAAQ,EACtC,KAAK,IAAI,QAAQ,MAAM,QAAU,SANjCA,EAAS,KAAK,IAAI,QAAS,QAAQ,EACnC,KAAK,IAAI,WAAW,MAAM,QAAU,OACpC,KAAK,IAAI,WAAW,MAAM,QAAU,QAMtC,KAAK,OAAO,KAAO,EACrB,CAEA,cAAe,CACT,CAAC,KAAK,OAAO,QAAU,CAAC,KAAK,qBAC/BG,EAAY,KAAK,IAAI,QAAS,QAAQ,EACtCA,EAAY,KAAK,IAAI,WAAY,QAAQ,EACzCA,EAAY,KAAK,IAAI,WAAY,QAAQ,GAE3C,KAAK,OAAO,KAAO,EACrB,CAIA,GAAG+E,EAAOmC,EAAS,CACjB,OAAK,KAAK,WAAW,IAAInC,CAAK,GAAG,KAAK,WAAW,IAAIA,EAAO,IAAI,GAAK,EACrE,KAAK,WAAW,IAAIA,CAAK,EAAE,IAAImC,CAAO,EAC/B,IACT,CAEA,IAAInC,EAAOmC,EAAS,OAClB,OAAA7B,EAAA,KAAK,WAAW,IAAIN,CAAK,IAAzB,MAAAM,EAA4B,OAAO6B,GAC5B,IACT,CAEA,MAAMnC,EAAOpF,EAAO,CAClB,UAAWuH,KAAW,KAAK,WAAW,IAAInC,CAAK,GAAK,CAAA,EAAImC,EAAQvH,CAAK,CACvE,CAIA,UAAW,CACT,OAAO,KAAK,QAAQ,MAAQ,CAAC,GAAG,KAAK,MAAM,EAAI,KAAK,OAAO,CAAC,CAC9D,CAEA,SAASA,EAAOwH,EAAe,GAAOC,EAAgB,GAAO,CAC3D,MAAMC,EAAW,KAAK,SAAQ,EAE9B,GAAI,KAAK,QAAQ,MAAO,CACtB,KAAM,CAACC,EAAGC,CAAC,EAAI,KAAK,gBAAgB5H,GAAS,CAAC,KAAK,QAAQ,IAAK,KAAK,QAAQ,GAAG,CAAC,EACjF,KAAK,OAAS,CACZc,EAAM,KAAK,gBAAgB6G,CAAC,EAAG,KAAK,QAAQ,IAAK,KAAK,QAAQ,GAAG,EACjE7G,EAAM,KAAK,gBAAgB8G,CAAC,EAAG,KAAK,QAAQ,IAAK,KAAK,QAAQ,GAAG,CACzE,CACI,KAAO,CACL,MAAMC,EAAS,KAAK,iBAAiB7H,GAAS,CAAC,EACzC8H,EAAShH,EAAM,KAAK,gBAAgB+G,CAAM,EAAG,KAAK,QAAQ,IAAK,KAAK,QAAQ,GAAG,EACrF,KAAK,OAAS,CAACC,EAAQ,KAAK,QAAQ,YAAc,QAAU,KAAK,QAAQ,IAAM,KAAK,QAAQ,GAAG,EAC/F5H,EAAS,KAAK,IAAI,QAAS,YAAY,CACzC,CAEA,KAAK,YACH,KAAK,QAAQ,IAAM,KAAK,QAAQ,IAC5B,CAAC,KAAK,cAAc,KAAK,OAAO,CAAC,CAAC,EAAG,KAAK,cAAc,KAAK,OAAO,CAAC,CAAC,EAAI,IAAM,KAAK,QAAQ,MAAS,KAAK,QAAQ,IAAM,KAAK,QAAQ,IAAI,EAC1I,CAAC,EAAG,EAAG,GAAG,EAEhB,KAAK,QAAO,EACZ,KAAK,aAAY,EAEjB,MAAM6H,EAAU,KAAK,SAAQ,EAC7B,OAAIP,GAAc,KAAK,MAAM,QAASO,CAAO,EACzC,KAAK,UAAUL,CAAQ,IAAM,KAAK,UAAUK,CAAO,GAAKN,GAC1D,KAAK,MAAM,SAAU,CAAE,SAAUC,EAAU,SAAUK,EAAS,EAEzD,IACT,CAEA,gBAAgB/H,EAAO,CACrB,MAAMgI,EAAM,MAAM,QAAQhI,CAAK,EAAIA,EAAQ,CAACA,EAAOA,CAAK,EACxD,UAAWiI,KAASD,EAClB,GAAI,OAAOC,GAAU,UAAY,OAAO,MAAMA,CAAK,EAAG,MAAM,IAAI,MAAM,6BAA6BA,CAAK,GAAG,EAE7G,OAAOD,CACT,CAEA,iBAAiBhI,EAAO,CACtB,MAAMkI,EAAM,MAAM,QAAQlI,CAAK,EAAIA,EAAM,CAAC,EAAIA,EAC9C,GAAI,OAAO,MAAM,OAAOkI,CAAG,CAAC,EAAG,MAAM,IAAI,MAAM,6BAA6BA,CAAG,GAAG,EAClF,OAAO,OAAOA,CAAG,CACnB,CAEA,cAAe,CACb,MAAMlI,EAAQ,KAAK,SAAQ,EAC3B,KAAK,QAAQ,aAAa,aAAcA,CAAK,EAC7C,KAAK,QAAQ,aAAa,QAASA,CAAK,EACxC,KAAK,QAAQ,MAAQA,CACvB,CAEA,UAAUI,EAAM,CACd,OAAOA,EAAO,KAAK,QAAQA,CAAI,EAAI,CAAE,GAAG,KAAK,OAAO,CACtD,CAEA,UAAUA,EAAMJ,EAAO,CACrB,YAAK,QAAQI,CAAI,EAAIJ,EACd,IACT,CAEA,WAAY,CACV,OAAO,KAAK,OAAO,OACrB,CAEA,QAAS,CACP,YAAK,OAAO,QAAU,GACtB,KAAK,IAAI,QAAQ,aAAa,WAAY,GAAG,EAC7C,KAAK,IAAI,QAAQ,aAAa,WAAY,GAAG,EAC7CK,EAAY,KAAK,IAAI,KAAM,qBAAqB,EAChD,KAAK,MAAM,cAAc,EAClB,IACT,CAEA,SAAU,CACR,YAAK,OAAO,QAAU,GACtB,KAAK,IAAI,QAAQ,gBAAgB,UAAU,EAC3C,KAAK,IAAI,QAAQ,gBAAgB,UAAU,EAC3CH,EAAS,KAAK,IAAI,KAAM,qBAAqB,EAC7C,KAAK,MAAM,eAAe,EACnB,IACT,CAEA,QAAS,CACP,OAAO,KAAK,OAAO,QAAU,KAAK,QAAO,EAAK,KAAK,OAAM,CAC3D,CAEA,SAASiI,EAAO,CACd,YAAK,QAAQ,MAAQA,EACrB,KAAK,IAAI,KAAK,QAAQ,MAAQA,EACvB,IACT,CAEA,UAAW,CACT,YAAK,OAAO,OAASrD,EAAc,KAAK,IAAI,IAAI,EAChD,KAAK,OAAO,KAAO,KAAK,IAAI,KAAK,KAAK,SAAS,EAC/C,KAAK,QAAO,EACL,IACT,CAEA,YAAa,CACX,OAAO,KAAK,IAAI,IAClB,CAEA,SAAU,CACR,KAAK,cAAa,EAClB,KAAK,IAAI,KAAK,OAAM,EACpB,KAAK,QAAQ,MAAM,QAAU,KAAK,iBAClC,KAAK,QAAQ,gBAAgB,YAAY,EACzC,KAAK,WAAW,MAAK,CACvB,CACF,CC1pBA,MAAMsD,EAAW,YAaV,SAASC,EAAqBC,EAAG,CAClC,CAACA,GAAK,CAACA,EAAE,IAAMA,EAAE,GAAG,YAExBA,EAAE,GAAG,UAAY,SAAyBC,KAAoBC,EAAM,CAClE,GAAI,OAAOD,GAAoB,SAAU,CACvC,MAAME,EAAaF,EACnB,IAAIG,EAAS,KACb,YAAK,KAAK,UAAY,CACpB,MAAMC,EAAWL,EAAE,KAAK,KAAMF,CAAQ,EACtC,GAAI,CAACO,EAAU,CACb,QAAQ,MAAM,2BAA2BF,CAAU,yBAAyB,EAC5E,MACF,CACA,GAAIA,EAAW,WAAW,GAAG,GAAK,OAAOE,EAASF,CAAU,GAAM,WAAY,CAC5E,QAAQ,MAAM,8BAA8BA,CAAU,GAAG,EACzD,MACF,CACA,MAAMzI,EAAQ2I,EAASF,CAAU,EAAE,GAAGD,CAAI,EACtCxI,IAAU,QAAaA,IAAU2I,IAAUD,EAAS1I,EAC1D,CAAC,EACM0I,CACT,CAEA,OAAO,KAAK,KAAK,UAAY,CAC3B,MAAME,EAAWN,EAAE,KAAK,KAAMF,CAAQ,EAClCQ,EAAUA,EAAS,UAAUL,CAAe,EAC3CD,EAAE,KAAK,KAAMF,EAAU,IAAIxD,EAAU,KAAM2D,CAAe,CAAC,CAClE,CAAC,CACH,EACF,CAEA,OAAI,OAAO,OAAW,MAAgB,OAAO,QAAU,OAAO,IAC5DF,EAAqB,OAAO,QAAU,OAAO,CAAC,EC/B5C,OAAO,OAAW,MAAgB,OAAO,QAAU,OAAO,IAC5DA,EAAqB,OAAO,QAAU,OAAO,CAAC"}