@thewhitehaven04/chartjs-plugin-zoom 2.2.23 → 2.2.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * @thewhitehaven04/chartjs-plugin-zoom v2.2.22
3
- * https://www.chartjs.org/chartjs-plugin-zoom/2.2.22/
2
+ * chartjs-plugin-zoom v2.2.0
3
+ * https://www.chartjs.org/chartjs-plugin-zoom/2.2.0/
4
4
  * (c) 2016-2026 chartjs-plugin-zoom Contributors
5
5
  * Released under the MIT License
6
6
  */
@@ -421,12 +421,7 @@ function zoom(chart, amount, transition = 'none', trigger = 'api') {
421
421
  chart.update(transition);
422
422
  zoomOptions?.onZoom?.({
423
423
  chart,
424
- trigger,
425
- amount: {
426
- x,
427
- y,
428
- focalPoint
429
- }
424
+ trigger
430
425
  });
431
426
  }
432
427
  function zoomRect(chart, p0, p1, transition = 'none', trigger = 'api') {
@@ -520,7 +515,7 @@ function panScale(scale, delta, limits, state) {
520
515
  panDelta[scale.id] = delta;
521
516
  }
522
517
  }
523
- function pan(chart, delta, enabledScales, transition = 'none', trigger = 'other') {
518
+ function pan(chart, delta, enabledScales, transition = 'none') {
524
519
  const { x = 0, y = 0 } = typeof delta === 'number' ? {
525
520
  x: delta,
526
521
  y: delta
@@ -541,12 +536,7 @@ function pan(chart, delta, enabledScales, transition = 'none', trigger = 'other'
541
536
  }
542
537
  chart.update(transition);
543
538
  onPan?.({
544
- chart,
545
- trigger,
546
- delta: {
547
- x,
548
- y
549
- }
539
+ chart
550
540
  });
551
541
  }
552
542
  function getInitialScaleBounds(chart) {
@@ -1043,7 +1033,7 @@ function hammerOptionsChanged(oldOptions, newOptions) {
1043
1033
  return false;
1044
1034
  }
1045
1035
 
1046
- var version = "2.2.22";
1036
+ var version = "2.2.0";
1047
1037
 
1048
1038
  const defaults = {
1049
1039
  pan: {
@@ -1093,7 +1083,7 @@ function draw(chart, caller, options) {
1093
1083
  ctx.restore();
1094
1084
  }
1095
1085
  const bindApi = (chart)=>{
1096
- chart.pan = (delta, panScales, transition)=>pan(chart, delta, panScales, transition, 'api');
1086
+ chart.pan = (delta, panScales, transition)=>pan(chart, delta, panScales, transition);
1097
1087
  chart.zoom = (args, transition)=>zoom(chart, args, transition);
1098
1088
  chart.zoomRect = (p0, p1, transition)=>zoomRect(chart, p0, p1, transition);
1099
1089
  chart.zoomScale = (id, range, transition)=>zoomScale(chart, id, range, transition);
@@ -1 +1 @@
1
- {"version":3,"file":"chartjs-plugin-zoom.esm.js","sources":["../src/utils.ts","../src/state.ts","../src/scale.types.ts","../src/core.ts","../src/handlers.ts","../src/hammer.ts","../src/defaults.ts","../src/plugin.ts"],"sourcesContent":["import type { Chart, Point, Scale } from 'chart.js'\nimport type { DragOptions, ModeOption, ModifierKey, PanOptions } from './options'\n\nconst eventKey = (key: ModifierKey): 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' => `${key}Key`\n\nexport const getModifierKey = (opts?: DragOptions | PanOptions): ModifierKey | undefined =>\n opts?.enabled && opts.modifierKey ? opts.modifierKey : undefined\nexport const keyPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && event[eventKey(key)]\nexport const keyNotPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && !event[eventKey(key)]\n\nexport function directionEnabled(mode: ModeOption | undefined, dir: 'x' | 'y', chart: Chart): boolean {\n if (mode === undefined) {\n return true\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1\n } else if (typeof mode === 'function') {\n return mode({ chart }).indexOf(dir) !== -1\n }\n\n return false\n}\n\nfunction directionsEnabled(mode: ModeOption | undefined, chart: Chart) {\n if (typeof mode === 'function') {\n mode = mode({ chart })\n }\n if (typeof mode === 'string') {\n return { x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1 }\n }\n\n return { x: false, y: false }\n}\n\nexport function debounce(fn: () => void, delay: number | undefined) {\n let timeout: number | NodeJS.Timeout\n return function () {\n clearTimeout(timeout)\n timeout = setTimeout(fn, delay)\n return delay\n }\n}\n\nfunction getScaleUnderPoint({ x, y }: Point, chart: Chart): Scale | null {\n const scales = chart.scales\n const scaleIds = Object.keys(scales)\n for (let i = 0; i < scaleIds.length; i++) {\n const scale = scales[scaleIds[i]]\n if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n return scale\n }\n }\n return null\n}\n\ntype EnabledDirections = { x: boolean; y: boolean }\n\nconst convertOverScaleMode = (\n chart: Chart,\n overScaleMode: ModeOption | undefined,\n scaleEnabled: EnabledDirections,\n enabled: EnabledDirections\n) => {\n if (!overScaleMode) {\n return\n }\n\n const overScaleEnabled = directionsEnabled(overScaleMode, chart)\n for (const axis of ['x', 'y'] as const) {\n if (overScaleEnabled[axis]) {\n scaleEnabled[axis] = enabled[axis]\n enabled[axis] = false\n }\n }\n}\n\nconst getEnabledScales = (chart: Chart, enabled: EnabledDirections): Scale[] => {\n const enabledScales: Scale[] = []\n\n for (const scaleItem of Object.values(chart.scales)) {\n if (enabled[scaleItem.axis as 'x' | 'y']) {\n enabledScales.push(scaleItem)\n }\n }\n\n return enabledScales || Object.values(chart.scales)\n}\n\n/**\n * Evaluate the chart's mode, scaleMode, and overScaleMode properties to\n * determine which axes are eligible for scaling.\n * options.overScaleMode can be a function if user want zoom only one scale of many for example.\n */\nexport function getEnabledScalesByPoint(options: PanOptions | undefined, point: Point, chart: Chart): Scale[] {\n const { mode = 'xy', scaleMode, overScaleMode } = options || {}\n const scale = getScaleUnderPoint(point, chart)\n\n const enabled = directionsEnabled(mode, chart)\n const scaleEnabled = directionsEnabled(scaleMode, chart)\n\n // Convert deprecated overScaleEnabled to new scaleEnabled.\n convertOverScaleMode(chart, overScaleMode, scaleEnabled, enabled)\n\n if (scale && scaleEnabled[scale.axis as 'x' | 'y']) {\n return [scale]\n }\n\n return getEnabledScales(chart, enabled)\n}\n","import { Chart, type Point } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nexport type ScaleRange = { min: number; max: number }\nexport type OriginalLimits = { min: { scale?: number; options?: unknown }; max: { scale?: number; options?: unknown } }\nexport type OriginalScaleLimits = Record<string, OriginalLimits>\nexport type UpdatedScaleLimits = Record<string, ScaleRange>\n\nexport type HandlerFunctions = {\n click: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n keydown: (chart: Chart, event: KeyboardEvent) => void\n mousedown: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mousemove: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mouseup: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n onZoomComplete: ({ chart }: { chart: Chart }) => void\n wheel: (chart: Chart, event: WheelEvent) => void\n}\nexport type HandlerName = keyof HandlerFunctions\nexport type HandlerFunction = HandlerFunctions[HandlerName]\nexport type Handler = EventListener\nexport type Handlers = Partial<Record<HandlerName, Handler>>\n\nexport type HandlerTarget = Partial<Record<HandlerName, HTMLCanvasElement | Document>>\n\nexport interface State {\n originalScaleLimits: OriginalScaleLimits\n updatedScaleLimits: UpdatedScaleLimits\n handlers: Handlers\n targets: HandlerTarget\n panDelta: Record<string, number>\n dragging: boolean\n panning: boolean\n options: ZoomPluginOptions\n dragStart?: MouseEvent\n dragEnd?: MouseEvent\n filterNextClick?: boolean\n scale?: number | null\n delta?: Point | null\n panScales?: string[]\n}\n\nconst chartStates = new WeakMap<Chart, State>()\n\nexport function getState(chart: Chart): State {\n let state = chartStates.get(chart)\n if (!state) {\n state = {\n originalScaleLimits: {},\n updatedScaleLimits: {},\n handlers: {},\n options: {},\n targets: {},\n panDelta: {},\n dragging: false,\n panning: false,\n }\n chartStates.set(chart, state)\n }\n return state\n}\n\nexport function removeState(chart: Chart) {\n chartStates.delete(chart)\n}\n","import { almostEquals, isNullOrUndef, isNumber, valueOrDefault } from 'chart.js/helpers'\nimport { getState, type ScaleRange, type State } from './state'\nimport type { Point, Scale, TimeScale, TimeUnit } from 'chart.js'\nimport type { LimitOptions, ScaleLimits } from './options'\n\nexport type ZoomFunction = (scale: Scale, zoom: number, center: Point, limits: LimitOptions) => boolean\nexport type ZoomRectFunction = (scale: Scale, from: number, to: number, limits: LimitOptions) => boolean\nexport type PanFunction = (scale: Scale, delta: number, limits: LimitOptions) => boolean\n\nconst isTimeScale = (scale: Scale): scale is TimeScale => scale.type === 'time'\n\nconst isNotNumber = (value?: number): value is undefined => value === undefined || isNaN(value)\n\nexport function zoomDelta(\n val: number | undefined,\n min: number | undefined,\n range: number,\n newRange: number\n): ScaleRange {\n const minPercent = range && isNumber(val) && isNumber(min) ? Math.max(0, Math.min(1, (val - min) / range)) : 0\n const maxPercent = 1 - minPercent\n\n return {\n min: newRange * minPercent,\n max: newRange * maxPercent,\n }\n}\n\nfunction getValueAtPoint(scale: Scale, point: Point): number | undefined {\n const pixel = scale.isHorizontal() ? point.x : point.y\n\n return scale.getValueForPixel(pixel)\n}\n\nfunction linearZoomDelta(scale: Scale, zoom: number, center: Point): ScaleRange {\n const range = scale.max - scale.min\n const newRange = range * (zoom - 1)\n const centerValue = getValueAtPoint(scale, center)\n\n return zoomDelta(centerValue, scale.min, range, newRange)\n}\n\nfunction logarithmicZoomRange(scale: Scale, zoom: number, center: Point) {\n const centerValue = getValueAtPoint(scale, center)\n\n // Return the original range, if value could not be determined.\n if (centerValue === undefined) {\n return { min: scale.min, max: scale.max }\n }\n\n const logMin = Math.log10(scale.min)\n const logMax = Math.log10(scale.max)\n const logCenter = Math.log10(centerValue)\n const logRange = logMax - logMin\n const newLogRange = logRange * (zoom - 1)\n const delta = zoomDelta(logCenter, logMin, logRange, newLogRange)\n\n return {\n min: Math.pow(10, logMin + delta.min),\n max: Math.pow(10, logMax - delta.max),\n }\n}\n\nfunction getScaleLimits(scale: Scale, limits?: LimitOptions): ScaleLimits {\n return limits?.[scale.id] || limits?.[scale.axis] || {}\n}\n\nfunction getLimit(state: State, scale: Scale, scaleLimits: ScaleLimits, prop: 'min' | 'max', fallback: number): number {\n let limit = scaleLimits[prop]\n if (limit === 'original') {\n const original = state.originalScaleLimits[scale.id][prop]\n if (isNumber(original.options)) {\n return original.options\n }\n\n if (!isNullOrUndef(original.options)) {\n const parsed = scale.parse(original.options)\n if (isNumber(parsed)) {\n return parsed\n }\n }\n\n limit = original.scale\n }\n return valueOrDefault(limit, fallback)\n}\n\nfunction linearRange(scale: Scale, pixel0: number, pixel1: number): ScaleRange {\n const v0 = scale.getValueForPixel(pixel0) ?? scale.min\n const v1 = scale.getValueForPixel(pixel1) ?? scale.max\n return {\n min: Math.min(v0, v1),\n max: Math.max(v0, v1),\n }\n}\n\nfunction fixRange(\n range: number,\n { min, max, minLimit, maxLimit }: { min: number; max: number; minLimit: number; maxLimit: number },\n state: State,\n scale: Scale\n) {\n const offset = (range - max + min) / 2\n min -= offset\n max += offset\n\n // In case the values are really close to the original values, use the original values.\n const origLimits: ScaleLimits = { min: 'original', max: 'original' }\n const origMin = getLimit(state, scale, origLimits, 'min', -Infinity)\n const origMax = getLimit(state, scale, origLimits, 'max', Infinity)\n\n const epsilon = range / 1e6\n if (almostEquals(min, origMin, epsilon)) {\n min = origMin\n }\n if (almostEquals(max, origMax, epsilon)) {\n max = origMax\n }\n\n // Apply limits\n if (min < minLimit) {\n min = minLimit\n max = Math.min(minLimit + range, maxLimit)\n } else if (max > maxLimit) {\n max = maxLimit\n min = Math.max(maxLimit - range, minLimit)\n }\n\n return { min, max }\n}\n\nexport function updateRange(\n scale: Scale,\n { min, max }: ScaleRange,\n limits?: LimitOptions,\n zoom = false,\n pan = false\n): boolean {\n const state = getState(scale.chart)\n const { options: scaleOpts } = scale\n\n const scaleLimits = getScaleLimits(scale, limits)\n const { minRange = 0 } = scaleLimits\n const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity)\n const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity)\n\n if (pan && (min < minLimit || max > maxLimit)) {\n // At limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const scaleRange = scale.max - scale.min\n const range = zoom ? Math.max(max - min, minRange) : scaleRange\n\n if (zoom && range === minRange && scaleRange <= minRange) {\n // At range limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const newRange = fixRange(range, { min, max, minLimit, maxLimit }, state, scale)\n\n scaleOpts.min = newRange.min\n scaleOpts.max = newRange.max\n\n state.updatedScaleLimits[scale.id] = newRange\n\n // return true if the scale range is changed\n return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max\n}\n\nfunction zoomNumericalScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n const newRange = { min: scale.min + delta.min, max: scale.max - delta.max }\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomLogarithmicScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const newRange = logarithmicZoomRange(scale, zoom, center)\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomRectNumericalScale(scale: Scale, from: number, to: number, limits: LimitOptions) {\n return updateRange(scale, linearRange(scale, from, to), limits, true)\n}\n\nconst integerChange = (v: number) =>\n v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1)\n\nfunction existCategoryFromMaxZoom(scale: Scale) {\n const labels = scale.getLabels()\n const maxIndex = labels.length - 1\n\n if (scale.min > 0) {\n scale.min -= 1\n }\n if (scale.max < maxIndex) {\n scale.max += 1\n }\n}\n\nfunction zoomCategoryScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n if (scale.min === scale.max && zoom < 1) {\n existCategoryFromMaxZoom(scale)\n }\n const newRange = { min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max) }\n\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction scaleLength(scale: Scale) {\n return scale.isHorizontal() ? scale.width : scale.height\n}\n\nfunction panCategoryScale(scale: Scale, delta: number, limits: LimitOptions) {\n const labels = scale.getLabels()\n const lastLabelIndex = labels.length - 1\n let { min, max } = scale\n // The visible range. Ticks can be skipped, and thus not reliable.\n const range = Math.max(max - min, 1)\n // How many pixels of delta is required before making a step. stepSize, but limited to max 1/10 of the scale length.\n const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10))\n const stepSize = Math.round(Math.abs(delta / stepDelta))\n let applied\n if (delta < -stepDelta) {\n max = Math.min(max + stepSize, lastLabelIndex)\n min = range === 1 ? max : max - range\n applied = max === lastLabelIndex\n } else if (delta > stepDelta) {\n min = Math.max(0, min - stepSize)\n max = range === 1 ? min : min + range\n applied = min === 0\n }\n\n return updateRange(scale, { min, max }, limits) || Boolean(applied)\n}\n\nconst OFFSETS: Record<TimeUnit, number> = {\n millisecond: 0,\n second: 500, // 500 ms\n minute: 30 * 1000, // 30 s\n hour: 30 * 60 * 1000, // 30 m\n day: 12 * 60 * 60 * 1000, // 12 h\n week: 3.5 * 24 * 60 * 60 * 1000, // 3.5 d\n month: 15 * 24 * 60 * 60 * 1000, // 15 d\n quarter: 60 * 24 * 60 * 60 * 1000, // 60 d\n year: 182 * 24 * 60 * 60 * 1000, // 182 d\n}\n\nfunction panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) {\n const { min: prevStart, max: prevEnd } = scale\n let offset = 0\n if (isTimeScale(scale)) {\n const round = scale.options.time?.round\n offset = round ? OFFSETS[round] : 0\n }\n const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta)\n const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta)\n if (isNotNumber(newMin) || isNotNumber(newMax)) {\n // NaN can happen for 0-dimension scales (either because they were configured\n // with min === max or because the chart has 0 plottable area).\n return true\n }\n return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true)\n}\n\nfunction panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) {\n return panNumericalScale(scale, delta, limits, true)\n}\n\nexport const zoomFunctions: Record<string, ZoomFunction> = {\n category: zoomCategoryScale,\n default: zoomNumericalScale,\n logarithmic: zoomLogarithmicScale,\n}\n\nexport const zoomRectFunctions: Record<string, ZoomRectFunction> = {\n default: zoomRectNumericalScale,\n}\n\nexport const panFunctions: Record<string, PanFunction> = {\n category: panCategoryScale,\n default: panNumericalScale,\n logarithmic: panNonLinearScale,\n timeseries: panNonLinearScale,\n}\n","import { isNumber, sign } from 'chart.js/helpers'\nimport { panFunctions, updateRange, zoomFunctions, zoomRectFunctions } from './scale.types.js'\nimport { getState, type OriginalScaleLimits, type ScaleRange, type State, type UpdatedScaleLimits } from './state.js'\nimport { directionEnabled, getEnabledScalesByPoint } from './utils.js'\nimport type { Chart, Point, Scale, UpdateMode } from 'chart.js'\nimport type { LimitOptions, PanTrigger, ZoomTrigger } from './options.js'\nimport type { ZoomAmount } from './types.js'\n\nfunction shouldUpdateScaleLimits(\n scale: Scale,\n originalScaleLimits: OriginalScaleLimits,\n updatedScaleLimits: UpdatedScaleLimits\n) {\n const {\n id,\n options: { min, max },\n } = scale\n if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n return true\n }\n const previous = updatedScaleLimits[id]\n return previous.min !== min || previous.max !== max\n}\n\nfunction removeMissingScales(limits: OriginalScaleLimits | UpdatedScaleLimits, scales: Record<string, Scale>) {\n for (const key of Object.keys(limits)) {\n if (!scales[key]) {\n delete limits[key]\n }\n }\n}\n\nfunction storeOriginalScaleLimits(chart: Chart, state: State) {\n const { scales } = chart\n const { originalScaleLimits, updatedScaleLimits } = state\n\n for (const scale of Object.values(scales)) {\n if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n originalScaleLimits[scale.id] = {\n min: { scale: scale.min, options: scale.options.min },\n max: { scale: scale.max, options: scale.options.max },\n }\n }\n }\n\n removeMissingScales(originalScaleLimits, scales)\n removeMissingScales(updatedScaleLimits, scales)\n return originalScaleLimits\n}\n\nfunction doZoom(scale: Scale, amount: number, center: Point, limits: LimitOptions) {\n const fn = zoomFunctions[scale.type] || zoomFunctions.default\n fn?.(scale, amount, center, limits)\n}\n\nfunction doZoomRect(scale: Scale, from: number, to: number, limits: LimitOptions) {\n const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default\n fn?.(scale, from, to, limits)\n}\n\nfunction getCenter(chart: Chart) {\n const ca = chart.chartArea\n return {\n x: (ca.left + ca.right) / 2,\n y: (ca.top + ca.bottom) / 2,\n }\n}\n\nexport function zoom(chart: Chart, amount: ZoomAmount, transition: UpdateMode = 'none', trigger: ZoomTrigger = 'api') {\n const { x = 1, y = 1, focalPoint = getCenter(chart) } = typeof amount === 'number' ? { x: amount, y: amount } : amount\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions },\n } = state\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 1\n const yEnabled = y !== 1\n const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart)\n\n for (const scale of enabledScales) {\n if (scale.isHorizontal() && xEnabled) {\n doZoom(scale, x, focalPoint, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoom(scale, y, focalPoint, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions?.onZoom?.({ chart, trigger, amount: { x, y, focalPoint } })\n}\n\nexport function zoomRect(\n chart: Chart,\n p0: Point,\n p1: Point,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions = {} },\n } = state\n const { mode = 'xy' } = zoomOptions\n\n storeOriginalScaleLimits(chart, state)\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n\n for (const scale of Object.values(chart.scales)) {\n if (scale.isHorizontal() && xEnabled) {\n doZoomRect(scale, p0.x, p1.x, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoomRect(scale, p0.y, p1.y, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions.onZoom?.({ chart, trigger })\n}\n\nexport function zoomScale(\n chart: Chart,\n scaleId: string,\n range: ScaleRange,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scale = chart.scales[scaleId]\n updateRange(scale, range, undefined, true)\n chart.update(transition)\n\n state.options.zoom?.onZoom?.({ chart, trigger })\n}\n\nexport function resetZoom(chart: Chart, transition: UpdateMode = 'default') {\n const state = getState(chart)\n const originalScaleLimits = storeOriginalScaleLimits(chart, state)\n\n for (const scale of Object.values(chart.scales)) {\n const scaleOptions = scale.options\n if (originalScaleLimits[scale.id]) {\n scaleOptions.min = originalScaleLimits[scale.id].min.options\n scaleOptions.max = originalScaleLimits[scale.id].max.options\n } else {\n delete scaleOptions.min\n delete scaleOptions.max\n }\n delete state.updatedScaleLimits[scale.id]\n }\n chart.update(transition)\n\n state.options.zoom?.onZoomComplete?.({ chart })\n}\n\nfunction getOriginalRange(state: State, scaleId: string): number | undefined {\n const original = state.originalScaleLimits[scaleId]\n if (!original) {\n return undefined\n }\n const { min, max } = original\n if (isNumber(max.options) && isNumber(min.options)) {\n return max.options - min.options\n }\n if (isNumber(max.scale) && isNumber(min.scale)) {\n return max.scale - min.scale\n }\n return undefined\n}\n\nexport function getZoomLevel(chart: Chart) {\n const state = getState(chart)\n let min = 1\n let max = 1\n for (const scale of Object.values(chart.scales)) {\n const origRange = getOriginalRange(state, scale.id)\n if (origRange) {\n const level = Math.round((origRange / (scale.max - scale.min)) * 100) / 100\n min = Math.min(min, level)\n max = Math.max(max, level)\n }\n }\n return min < 1 ? min : max\n}\n\nfunction panScale(scale: Scale, delta: number, limits: LimitOptions, state: State) {\n const { panDelta } = state\n // Add possible cumulative delta from previous pan attempts where scale did not change\n const storedDelta = panDelta[scale.id] || 0\n if (sign(storedDelta) === sign(delta)) {\n delta += storedDelta\n }\n const fn = panFunctions[scale.type] || panFunctions.default\n if (fn?.(scale, delta, limits)) {\n // The scale changed, reset cumulative delta\n panDelta[scale.id] = 0\n } else {\n // The scale did not change, store cumulative delta\n panDelta[scale.id] = delta\n }\n}\n\ntype PanAmount = number | Partial<Point>\n\nexport function pan(\n chart: Chart,\n delta: PanAmount,\n enabledScales?: Scale[],\n transition: UpdateMode = 'none',\n trigger: PanTrigger = 'other'\n) {\n const { x = 0, y = 0 } = typeof delta === 'number' ? { x: delta, y: delta } : delta\n const state = getState(chart)\n const {\n options: { pan: panOptions, limits = {} },\n } = state\n const { onPan } = panOptions || {}\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 0\n const yEnabled = y !== 0\n\n const scales = enabledScales || Object.values(chart.scales)\n\n for (const scale of scales) {\n if (scale.isHorizontal() && xEnabled) {\n panScale(scale, x, limits, state)\n } else if (!scale.isHorizontal() && yEnabled) {\n panScale(scale, y, limits, state)\n }\n }\n\n chart.update(transition)\n\n onPan?.({ chart, trigger, delta: { x, y } })\n}\n\nexport function getInitialScaleBounds(chart: Chart) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n const { min, max } = state.originalScaleLimits[scaleId] || { min: {}, max: {} }\n scaleBounds[scaleId] = { min: min.scale, max: max.scale }\n }\n\n return scaleBounds\n}\n\nexport function getZoomedScaleBounds(chart: Chart) {\n const state = getState(chart)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n scaleBounds[scaleId] = state.updatedScaleLimits[scaleId]\n }\n\n return scaleBounds\n}\n\nexport function isZoomedOrPanned(chart: Chart) {\n const scaleBounds = getInitialScaleBounds(chart)\n for (const scaleId of Object.keys(chart.scales)) {\n const { min: originalMin, max: originalMax } = scaleBounds[scaleId]\n\n if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n return true\n }\n\n if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n return true\n }\n }\n\n return false\n}\n\nexport function isZoomingOrPanningState(state: State) {\n return state.panning || state.dragging\n}\n\nexport function isZoomingOrPanning(chart: Chart) {\n const state = getState(chart)\n // From the perspective of outside callers, zooming and panning are still\n // active if we haven't yet cleared the next click.\n return !!(isZoomingOrPanningState(state) || state.filterNextClick)\n}\n","import { directionEnabled, debounce, keyNotPressed, getModifierKey, keyPressed } from './utils'\nimport { zoom, zoomRect } from './core'\nimport { getRelativePosition, _isPointInArea } from 'chart.js/helpers'\nimport { getState, type HandlerFunctions, type HandlerName } from './state'\nimport type { Chart, ChartArea, Point } from 'chart.js'\nimport type { ModeOption, ZoomOptions, ZoomPluginOptions } from './options'\n\nconst clamp = (x: number, from: number, to: number): number => Math.min(to, Math.max(from, x))\n\nfunction removeHandler(chart: Chart, type: HandlerName) {\n const { handlers, targets } = getState(chart)\n const handler = handlers[type]\n const target = targets[type]\n if (handler && target) {\n target.removeEventListener(type, handler)\n delete handlers[type]\n }\n}\n\ntype EventHandler<T extends Event> = (chart: Chart, event: T, options: ZoomPluginOptions) => void\n\nfunction addHandler<T extends Event>(\n chart: Chart,\n target: HTMLCanvasElement | Document,\n type: HandlerName,\n handler: EventHandler<T>\n) {\n const { handlers, options, targets } = getState(chart)\n const oldHandler = handlers[type]\n if (oldHandler && targets[type] === target) {\n // already attached\n return\n }\n removeHandler(chart, type)\n const listener = (handlers[type] = (event) => handler(chart, event as T, options))\n targets[type] = target\n\n // `passive: false` for wheel events, to prevent chrome warnings. Use default value for other events.\n const passive = type === 'wheel' ? false : undefined\n target.addEventListener(type, listener, { passive })\n}\n\nexport function mouseMove(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (state.dragStart) {\n state.dragging = true\n state.dragEnd = event\n chart.draw()\n }\n}\n\nfunction keyDown(chart: Chart, event: KeyboardEvent) {\n const state = getState(chart)\n if (!state.dragStart || event.key !== 'Escape') {\n return\n }\n\n removeHandler(chart, 'keydown')\n state.dragging = false\n state.dragStart = state.dragEnd = undefined\n chart.draw()\n}\n\nfunction getPointPosition(event: MouseEvent, chart: Chart) {\n if (event.target !== chart.canvas) {\n const canvasArea = chart.canvas.getBoundingClientRect()\n return {\n x: event.clientX - canvasArea.left,\n y: event.clientY - canvasArea.top,\n }\n }\n return getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n}\n\nfunction zoomStart(chart: Chart, event: MouseEvent, zoomOptions: ZoomOptions): boolean | void {\n const { onZoomStart, onZoomRejected } = zoomOptions\n if (onZoomStart) {\n const point = getPointPosition(event, chart)\n if (onZoomStart?.({ chart, event, point }) === false) {\n onZoomRejected?.({ chart, event })\n return false\n }\n }\n}\n\nexport function mouseDown(chart: Chart, event: MouseEvent): void {\n if (chart.legend) {\n const point = getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (_isPointInArea(point, chart.legend)) {\n return\n }\n }\n const state = getState(chart)\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (\n event.button !== 0 ||\n keyPressed(getModifierKey(panOptions), event) ||\n keyNotPressed(getModifierKey(zoomOptions.drag), event)\n ) {\n return zoomOptions.onZoomRejected?.({ chart, event })\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n state.dragStart = event\n\n addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove)\n addHandler(chart, window.document, 'keydown', keyDown)\n}\n\nfunction applyAspectRatio(\n { begin, end }: { begin: { x: number; y: number }; end: { x: number; y: number } },\n aspectRatio: number\n) {\n let width = end.x - begin.x\n let height = end.y - begin.y\n const ratio = Math.abs(width / height)\n\n if (ratio > aspectRatio) {\n width = Math.sign(width) * Math.abs(height * aspectRatio)\n } else if (ratio < aspectRatio) {\n height = Math.sign(height) * Math.abs(width / aspectRatio)\n }\n\n end.x = begin.x + width\n end.y = begin.y + height\n}\n\ntype Rect = { top?: number; left?: number; right?: number; bottom?: number }\nfunction applyMinMaxProps(\n rect: Rect,\n chartArea: ChartArea,\n points: { begin: Point; end: Point },\n { min, max, prop }: { min: keyof Rect; max: keyof Rect; prop: 'x' | 'y' }\n) {\n rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n}\n\nfunction getRelativePoints(\n chart: Chart,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio?: boolean\n) {\n const points = {\n begin: getPointPosition(pointEvents.dragStart, chart),\n end: getPointPosition(pointEvents.dragEnd, chart),\n }\n\n if (maintainAspectRatio) {\n const aspectRatio = chart.chartArea.width / chart.chartArea.height\n applyAspectRatio(points, aspectRatio)\n }\n\n return points\n}\n\nexport function computeDragRect(\n chart: Chart,\n mode: ModeOption | undefined,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio: boolean | undefined\n) {\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n const { top, left, right, bottom, width: chartWidth, height: chartHeight } = chart.chartArea\n const rect = { top, left, right, bottom }\n\n const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled)\n\n if (xEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'left', max: 'right', prop: 'x' })\n }\n\n if (yEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'top', max: 'bottom', prop: 'y' })\n }\n\n const width = rect.right - rect.left\n const height = rect.bottom - rect.top\n\n return {\n ...rect,\n width,\n height,\n zoomX: xEnabled && width ? 1 + (chartWidth - width) / chartWidth : 1,\n zoomY: yEnabled && height ? 1 + (chartHeight - height) / chartHeight : 1,\n }\n}\n\nexport function mouseUp(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (!state.dragStart) {\n return\n }\n\n removeHandler(chart, 'mousemove')\n const { mode, onZoomComplete, drag } = state.options.zoom ?? {}\n const { threshold = 0, maintainAspectRatio } = drag ?? {}\n const rect = computeDragRect(chart, mode, { dragStart: state.dragStart, dragEnd: event }, maintainAspectRatio)\n const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0\n const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY)\n\n // Remove drag start and end before chart render to stop drawing selected area\n state.dragStart = state.dragEnd = undefined\n\n if (distance <= threshold) {\n state.dragging = false\n chart.draw()\n return\n }\n\n zoomRect(chart, { x: rect.left, y: rect.top }, { x: rect.right, y: rect.bottom }, 'zoom', 'drag')\n\n state.dragging = false\n state.filterNextClick = true\n onZoomComplete?.({ chart })\n}\n\nfunction wheelPreconditions(chart: Chart, event: WheelEvent, zoomOptions: ZoomOptions): true | void {\n // Before preventDefault, check if the modifier key required and pressed\n if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n zoomOptions.onZoomRejected?.({ chart, event })\n return\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n\n // Prevent the event from triggering the default behavior (e.g. content scrolling).\n if (event.cancelable) {\n event.preventDefault()\n }\n\n // Firefox always fires the wheel event twice:\n // First without the delta and right after that once with the delta properties.\n if (event.deltaY === undefined) {\n return\n }\n return true\n}\n\nexport function wheel(chart: Chart, event: WheelEvent & { target?: HTMLCanvasElement }) {\n const {\n handlers: { onZoomComplete },\n options: { zoom: zoomOptions = {} },\n } = getState(chart)\n\n if (!wheelPreconditions(chart, event, zoomOptions)) {\n return\n }\n\n const rect = event.target?.getBoundingClientRect()\n const speed = zoomOptions?.wheel?.speed ?? 0.1\n const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed\n const amount = {\n x: percentage,\n y: percentage,\n focalPoint: {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'wheel')\n\n onZoomComplete?.(event)\n}\n\nfunction addDebouncedHandler(\n chart: Chart,\n name: HandlerName,\n handler: HandlerFunctions['onZoomComplete'] | undefined,\n delay: number\n) {\n if (handler) {\n getState(chart).handlers[name] = debounce(() => handler?.({ chart }), delay)\n }\n}\n\nexport function addListeners(chart: Chart, options: ZoomPluginOptions) {\n const canvas = chart.canvas\n const { wheel: wheelOptions, drag: dragOptions, onZoomComplete } = options.zoom ?? {}\n\n // Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n // We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n // and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n if (wheelOptions?.enabled) {\n addHandler(chart, canvas, 'wheel', wheel)\n addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250)\n } else {\n removeHandler(chart, 'wheel')\n }\n if (dragOptions?.enabled) {\n addHandler(chart, canvas, 'mousedown', mouseDown)\n addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp)\n } else {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'keydown')\n }\n}\n\nexport function removeListeners(chart: Chart) {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'wheel')\n removeHandler(chart, 'click')\n removeHandler(chart, 'keydown')\n}\n","import { getRelativePosition } from 'chart.js/helpers'\nimport Hammer from 'hammerjs'\nimport { pan, zoom } from './core'\nimport { getState, type State } from './state'\nimport { directionEnabled, getEnabledScalesByPoint, getModifierKey, keyNotPressed, keyPressed } from './utils'\nimport type { Chart } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nfunction createEnabler(chart: Chart, state: State) {\n return function (_recognizer: any, event: HammerInput) {\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (!panOptions || !panOptions.enabled) {\n return false\n }\n const srcEvent = event && event.srcEvent\n if (!srcEvent) {\n // Sometimes Hammer queries this with a null event.\n return true\n }\n if (\n !state.panning &&\n event.pointerType === 'mouse' &&\n (keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n ) {\n panOptions.onPanRejected?.({ chart, event })\n return false\n }\n return true\n }\n}\n\nfunction pinchAxes(p0: { clientX: number; clientY: number }, p1: { clientX: number; clientY: number }) {\n // fingers position difference\n const pinchX = Math.abs(p0.clientX - p1.clientX)\n const pinchY = Math.abs(p0.clientY - p1.clientY)\n\n // diagonal fingers will change both (xy) axes\n const p = pinchX / pinchY\n let x, y\n if (p > 0.3 && p < 1.7) {\n x = y = true\n } else if (pinchX > pinchY) {\n x = true\n } else {\n y = true\n }\n return { x, y }\n}\n\nfunction handlePinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n const { center, pointers } = e\n // Hammer reports the total scaling. We need the incremental amount\n const zoomPercent = (1 / state.scale) * e.scale\n const rect = e.target.getBoundingClientRect()\n const pinch = pinchAxes(pointers[0], pointers[1])\n const mode = state.options.zoom?.mode\n const amount = {\n x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n focalPoint: {\n x: center.x - rect.left,\n y: center.y - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'pinch')\n\n // Keep track of overall scale\n state.scale = e.scale\n }\n}\n\nfunction startPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.options.zoom?.pinch?.enabled) {\n const point = getRelativePosition(e.srcEvent, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (state.options.zoom?.onZoomStart?.({ chart, event: e.srcEvent, point }) === false) {\n state.scale = null\n state.options.zoom?.onZoomRejected?.({ chart, event: e.srcEvent })\n } else {\n state.scale = 1\n }\n }\n}\n\nfunction endPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n handlePinch(chart, state, e)\n state.scale = null // reset\n state.options.zoom?.onZoomComplete?.({ chart })\n }\n}\n\nfunction handlePan(chart: Chart, state: State, e: HammerInput) {\n const delta = state.delta\n if (delta) {\n state.panning = true\n pan(\n chart,\n { x: e.deltaX - delta.x, y: e.deltaY - delta.y },\n state.panScales && state.panScales.map((i) => chart.scales[i]).filter(Boolean)\n )\n state.delta = { x: e.deltaX, y: e.deltaY }\n }\n}\n\nfunction startPan(chart: Chart, state: State, event: HammerInput) {\n const { enabled, onPanStart, onPanRejected } = state.options.pan ?? {}\n if (!enabled) {\n return\n }\n const rect = event.target.getBoundingClientRect()\n const point = {\n x: event.center.x - rect.left,\n y: event.center.y - rect.top,\n }\n\n if (onPanStart?.({ chart, event, point }) === false) {\n return onPanRejected?.({ chart, event })\n }\n\n state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart).map((i) => i.id)\n state.delta = { x: 0, y: 0 }\n handlePan(chart, state, event)\n}\n\nfunction endPan(chart: Chart, state: State) {\n state.delta = null\n if (state.panning) {\n state.panning = false\n state.filterNextClick = true\n state.options.pan?.onPanComplete?.({ chart })\n }\n}\n\nconst hammers = new WeakMap()\nexport function startHammer(chart: Chart, options: ZoomPluginOptions) {\n const state = getState(chart)\n const canvas = chart.canvas\n const { pan: panOptions, zoom: zoomOptions } = options\n\n const mc = new Hammer.Manager(canvas)\n if (zoomOptions?.pinch?.enabled) {\n mc.add(new Hammer.Pinch())\n mc.on('pinchstart', (e) => startPinch(chart, state, e))\n mc.on('pinch', (e) => handlePinch(chart, state, e))\n mc.on('pinchend', (e) => endPinch(chart, state, e))\n }\n\n if (panOptions && panOptions.enabled) {\n mc.add(\n new Hammer.Pan({\n threshold: panOptions.threshold,\n enable: createEnabler(chart, state),\n })\n )\n mc.on('panstart', (e) => startPan(chart, state, e))\n mc.on('panmove', (e) => handlePan(chart, state, e))\n mc.on('panend', () => endPan(chart, state))\n }\n\n hammers.set(chart, mc)\n}\n\nexport function stopHammer(chart: Chart) {\n const mc = hammers.get(chart)\n if (mc) {\n mc.remove('pinchstart')\n mc.remove('pinch')\n mc.remove('pinchend')\n mc.remove('panstart')\n mc.remove('pan')\n mc.remove('panend')\n mc.destroy()\n hammers.delete(chart)\n }\n}\n\nexport function hammerOptionsChanged(oldOptions: ZoomPluginOptions, newOptions: ZoomPluginOptions) {\n const { pan: oldPan, zoom: oldZoom } = oldOptions\n const { pan: newPan, zoom: newZoom } = newOptions\n\n if (oldZoom?.pinch?.enabled !== newZoom?.pinch?.enabled) {\n return true\n }\n if (oldPan?.enabled !== newPan?.enabled) {\n return true\n }\n if (oldPan?.threshold !== newPan?.threshold) {\n return true\n }\n\n return false\n}\n","import type { ZoomPluginOptions } from './options'\n\nexport const defaults: ZoomPluginOptions = {\n pan: {\n enabled: false,\n mode: 'xy',\n threshold: 10,\n modifierKey: null,\n },\n zoom: {\n wheel: {\n enabled: false,\n speed: 0.1,\n modifierKey: null,\n },\n drag: {\n enabled: false,\n drawTime: 'beforeDatasetsDraw',\n modifierKey: null,\n },\n pinch: {\n enabled: false,\n },\n mode: 'xy',\n },\n}\n","import Hammer from 'hammerjs'\nimport { addListeners, computeDragRect, removeListeners } from './handlers'\nimport { hammerOptionsChanged, startHammer, stopHammer } from './hammer'\nimport {\n pan,\n zoom,\n resetZoom,\n zoomScale,\n getZoomLevel,\n getInitialScaleBounds,\n getZoomedScaleBounds,\n isZoomedOrPanned,\n isZoomingOrPanning,\n isZoomingOrPanningState,\n zoomRect,\n} from './core'\nimport { panFunctions, zoomFunctions, zoomRectFunctions } from './scale.types'\nimport { getState, removeState } from './state'\nimport { version } from '../package.json'\nimport type { Chart, ChartEvent } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\nimport { defaults } from './defaults'\n\nfunction draw(chart: Chart, caller: string, options: ZoomPluginOptions) {\n const dragOptions = options.zoom?.drag\n const { dragStart, dragEnd } = getState(chart)\n\n if (dragOptions?.drawTime !== caller || !dragStart || !dragEnd) {\n return\n }\n const { left, top, width, height } = computeDragRect(\n chart,\n options.zoom?.mode,\n { dragStart, dragEnd },\n dragOptions.maintainAspectRatio\n )\n const ctx = chart.ctx\n\n ctx.save()\n ctx.beginPath()\n ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)'\n ctx.fillRect(left, top, width, height)\n\n if (dragOptions.borderWidth) {\n ctx.lineWidth = dragOptions.borderWidth\n ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)'\n ctx.strokeRect(left, top, width, height)\n }\n ctx.restore()\n}\n\nconst bindApi = (chart: Chart) => {\n chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition, 'api')\n chart.zoom = (args, transition) => zoom(chart, args, transition)\n chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition)\n chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition)\n chart.resetZoom = (transition) => resetZoom(chart, transition)\n chart.getZoomLevel = () => getZoomLevel(chart)\n chart.getInitialScaleBounds = () => getInitialScaleBounds(chart)\n chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart)\n chart.isZoomedOrPanned = () => isZoomedOrPanned(chart)\n chart.isZoomingOrPanning = () => isZoomingOrPanning(chart)\n}\n\nexport default {\n id: 'zoom',\n\n version,\n\n defaults,\n\n start(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n state.options = options\n\n if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n console.warn(\n 'The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.'\n )\n }\n if (\n Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode') ||\n Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')\n ) {\n console.warn(\n 'The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).'\n )\n }\n\n if (Hammer) {\n startHammer(chart, options)\n }\n\n bindApi(chart)\n },\n\n beforeEvent(\n chart: Chart,\n { event }: { event: ChartEvent; replay: boolean; cancelable: true; inChartArea: boolean }\n ): boolean | void {\n const state = getState(chart)\n if (isZoomingOrPanningState(state)) {\n // cancel any event handling while panning or dragging\n return false\n }\n // cancel the next click or mouseup after drag or pan\n if (event.type === 'click' || event.type === 'mouseup') {\n if (state.filterNextClick) {\n state.filterNextClick = false\n return false\n }\n }\n },\n\n beforeUpdate(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n const previousOptions = state.options\n state.options = options\n\n // Hammer needs to be restarted when certain options change.\n if (hammerOptionsChanged(previousOptions, options)) {\n stopHammer(chart)\n startHammer(chart, options)\n }\n\n addListeners(chart, options)\n },\n\n beforeDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDatasetsDraw', options)\n },\n\n afterDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDatasetsDraw', options)\n },\n\n beforeDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDraw', options)\n },\n\n afterDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDraw', options)\n },\n\n stop(chart: Chart) {\n removeListeners(chart)\n\n if (Hammer) {\n stopHammer(chart)\n }\n removeState(chart)\n },\n\n panFunctions,\n zoomFunctions,\n zoomRectFunctions,\n}\n"],"names":["eventKey","key","getModifierKey","opts","enabled","modifierKey","undefined","keyPressed","event","keyNotPressed","directionEnabled","mode","dir","chart","indexOf","directionsEnabled","x","y","debounce","fn","delay","timeout","clearTimeout","setTimeout","getScaleUnderPoint","scales","scaleIds","Object","keys","i","length","scale","top","bottom","left","right","convertOverScaleMode","overScaleMode","scaleEnabled","overScaleEnabled","axis","getEnabledScales","enabledScales","scaleItem","values","push","getEnabledScalesByPoint","options","point","scaleMode","chartStates","WeakMap","getState","state","get","originalScaleLimits","updatedScaleLimits","handlers","targets","panDelta","dragging","panning","set","removeState","delete","isTimeScale","type","isNotNumber","value","isNaN","zoomDelta","val","min","range","newRange","minPercent","isNumber","Math","max","maxPercent","getValueAtPoint","pixel","isHorizontal","getValueForPixel","linearZoomDelta","zoom","center","centerValue","logarithmicZoomRange","logMin","log10","logMax","logCenter","logRange","newLogRange","delta","pow","getScaleLimits","limits","id","getLimit","scaleLimits","prop","fallback","limit","original","isNullOrUndef","parsed","parse","valueOrDefault","linearRange","pixel0","pixel1","v0","v1","fixRange","minLimit","maxLimit","offset","origLimits","origMin","Infinity","origMax","epsilon","almostEquals","updateRange","pan","scaleOpts","minRange","scaleRange","zoomNumericalScale","zoomLogarithmicScale","zoomRectNumericalScale","from","to","integerChange","v","round","existCategoryFromMaxZoom","labels","getLabels","maxIndex","zoomCategoryScale","scaleLength","width","height","panCategoryScale","lastLabelIndex","stepDelta","stepSize","abs","applied","Boolean","OFFSETS","millisecond","second","minute","hour","day","week","month","quarter","year","panNumericalScale","canZoom","prevStart","prevEnd","time","newMin","getPixelForValue","newMax","panNonLinearScale","zoomFunctions","category","default","logarithmic","zoomRectFunctions","panFunctions","timeseries","shouldUpdateScaleLimits","previous","removeMissingScales","storeOriginalScaleLimits","doZoom","amount","doZoomRect","getCenter","ca","chartArea","transition","trigger","focalPoint","zoomOptions","xEnabled","yEnabled","update","onZoom","zoomRect","p0","p1","zoomScale","scaleId","resetZoom","scaleOptions","onZoomComplete","getOriginalRange","getZoomLevel","origRange","level","panScale","storedDelta","sign","panOptions","onPan","getInitialScaleBounds","scaleBounds","getZoomedScaleBounds","isZoomedOrPanned","originalMin","originalMax","isZoomingOrPanningState","isZoomingOrPanning","filterNextClick","clamp","removeHandler","handler","target","removeEventListener","addHandler","oldHandler","listener","passive","addEventListener","mouseMove","dragStart","dragEnd","draw","keyDown","getPointPosition","canvas","canvasArea","getBoundingClientRect","clientX","clientY","getRelativePosition","zoomStart","onZoomStart","onZoomRejected","mouseDown","legend","_isPointInArea","button","drag","ownerDocument","window","document","applyAspectRatio","begin","end","aspectRatio","ratio","applyMinMaxProps","rect","points","getRelativePoints","pointEvents","maintainAspectRatio","computeDragRect","chartWidth","chartHeight","zoomX","zoomY","mouseUp","threshold","distanceX","distanceY","distance","sqrt","wheelPreconditions","wheel","cancelable","preventDefault","deltaY","speed","percentage","addDebouncedHandler","name","addListeners","wheelOptions","dragOptions","removeListeners","createEnabler","_recognizer","srcEvent","pointerType","onPanRejected","pinchAxes","pinchX","pinchY","p","handlePinch","e","pointers","zoomPercent","pinch","startPinch","endPinch","handlePan","deltaX","panScales","map","filter","startPan","onPanStart","endPan","onPanComplete","hammers","startHammer","mc","Hammer","Manager","add","Pinch","on","Pan","enable","stopHammer","remove","destroy","hammerOptionsChanged","oldOptions","newOptions","oldPan","oldZoom","newPan","newZoom","defaults","drawTime","caller","ctx","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","bindApi","args","version","start","_args","prototype","hasOwnProperty","call","console","warn","beforeEvent","beforeUpdate","previousOptions","beforeDatasetsDraw","afterDatasetsDraw","beforeDraw","afterDraw","stop"],"mappings":";;;;;;;;;AAGA,MAAMA,WAAW,CAACC,GAAAA,GAAoE,CAAGA,EAAAA,GAAAA,CAAI,GAAG,CAAC;AAE1F,MAAMC,cAAAA,GAAiB,CAACC,IAAAA,GAC7BA,IAAMC,EAAAA,OAAAA,IAAWD,IAAKE,CAAAA,WAAW,GAAGF,IAAAA,CAAKE,WAAW,GAAGC,SAAS;AAC3D,MAAMC,UAAa,GAAA,CAACN,GAA8BO,EAAAA,KAAAA,GACvDP,OAAOO,KAAK,CAACR,QAASC,CAAAA,GAAAA,CAAAA,CAAK;AACtB,MAAMQ,aAAgB,GAAA,CAACR,GAA8BO,EAAAA,KAAAA,GAC1DP,GAAO,IAAA,CAACO,KAAK,CAACR,QAASC,CAAAA,GAAAA,CAAAA,CAAK;AAEvB,SAASS,gBAAiBC,CAAAA,IAA4B,EAAEC,GAAc,EAAEC,KAAY,EAAA;AACzF,IAAA,IAAIF,SAASL,SAAW,EAAA;QACtB,OAAO,IAAA;KACF,MAAA,IAAI,OAAOK,IAAAA,KAAS,QAAU,EAAA;AACnC,QAAA,OAAOA,IAAKG,CAAAA,OAAO,CAACF,GAAAA,CAAAA,KAAS,CAAC,CAAA;KACzB,MAAA,IAAI,OAAOD,IAAAA,KAAS,UAAY,EAAA;AACrC,QAAA,OAAOA,IAAK,CAAA;AAAEE,YAAAA;SAASC,CAAAA,CAAAA,OAAO,CAACF,GAAAA,CAAAA,KAAS,CAAC,CAAA;AAC3C;IAEA,OAAO,KAAA;AACT;AAEA,SAASG,iBAAAA,CAAkBJ,IAA4B,EAAEE,KAAY,EAAA;IACnE,IAAI,OAAOF,SAAS,UAAY,EAAA;AAC9BA,QAAAA,IAAAA,GAAOA,IAAK,CAAA;AAAEE,YAAAA;AAAM,SAAA,CAAA;AACtB;IACA,IAAI,OAAOF,SAAS,QAAU,EAAA;QAC5B,OAAO;AAAEK,YAAAA,CAAAA,EAAGL,IAAKG,CAAAA,OAAO,CAAC,GAAA,CAAA,KAAS,CAAC,CAAA;AAAGG,YAAAA,CAAAA,EAAGN,IAAKG,CAAAA,OAAO,CAAC,GAAA,CAAA,KAAS,CAAC;AAAE,SAAA;AACpE;IAEA,OAAO;QAAEE,CAAG,EAAA,KAAA;QAAOC,CAAG,EAAA;AAAM,KAAA;AAC9B;AAEO,SAASC,QAAAA,CAASC,EAAc,EAAEC,KAAyB,EAAA;IAChE,IAAIC,OAAAA;IACJ,OAAO,WAAA;QACLC,YAAaD,CAAAA,OAAAA,CAAAA;AACbA,QAAAA,OAAAA,GAAUE,WAAWJ,EAAIC,EAAAA,KAAAA,CAAAA;QACzB,OAAOA,KAAAA;AACT,KAAA;AACF;AAEA,SAASI,mBAAmB,EAAER,CAAC,EAAEC,CAAC,EAAS,EAAEJ,KAAY,EAAA;IACvD,MAAMY,MAAAA,GAASZ,MAAMY,MAAM;IAC3B,MAAMC,QAAAA,GAAWC,MAAOC,CAAAA,IAAI,CAACH,MAAAA,CAAAA;AAC7B,IAAA,IAAK,IAAII,CAAI,GAAA,CAAA,EAAGA,IAAIH,QAASI,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AACxC,QAAA,MAAME,QAAQN,MAAM,CAACC,QAAQ,CAACG,EAAE,CAAC;AACjC,QAAA,IAAIZ,CAAKc,IAAAA,KAAAA,CAAMC,GAAG,IAAIf,KAAKc,KAAME,CAAAA,MAAM,IAAIjB,CAAAA,IAAKe,MAAMG,IAAI,IAAIlB,CAAKe,IAAAA,KAAAA,CAAMI,KAAK,EAAE;YAC9E,OAAOJ,KAAAA;AACT;AACF;IACA,OAAO,IAAA;AACT;AAIA,MAAMK,oBAAuB,GAAA,CAC3BvB,KACAwB,EAAAA,aAAAA,EACAC,YACAlC,EAAAA,OAAAA,GAAAA;AAEA,IAAA,IAAI,CAACiC,aAAe,EAAA;AAClB,QAAA;AACF;IAEA,MAAME,gBAAAA,GAAmBxB,kBAAkBsB,aAAexB,EAAAA,KAAAA,CAAAA;AAC1D,IAAA,KAAK,MAAM2B,IAAQ,IAAA;AAAC,QAAA,GAAA;AAAK,QAAA;KAAI,CAAW;QACtC,IAAID,gBAAgB,CAACC,IAAAA,CAAK,EAAE;AAC1BF,YAAAA,YAAY,CAACE,IAAAA,CAAK,GAAGpC,OAAO,CAACoC,IAAK,CAAA;YAClCpC,OAAO,CAACoC,KAAK,GAAG,KAAA;AAClB;AACF;AACF,CAAA;AAEA,MAAMC,gBAAAA,GAAmB,CAAC5B,KAAcT,EAAAA,OAAAA,GAAAA;AACtC,IAAA,MAAMsC,gBAAyB,EAAE;AAEjC,IAAA,KAAK,MAAMC,SAAahB,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;AACnD,QAAA,IAAIrB,OAAO,CAACuC,SAAUH,CAAAA,IAAI,CAAc,EAAE;AACxCE,YAAAA,aAAAA,CAAcG,IAAI,CAACF,SAAAA,CAAAA;AACrB;AACF;AAEA,IAAA,OAAOD,aAAiBf,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,MAAMY,MAAM,CAAA;AACpD,CAAA;AAMC,CACM,SAASqB,uBAAAA,CAAwBC,OAA+B,EAAEC,KAAY,EAAEnC,KAAY,EAAA;IACjG,MAAM,EAAEF,IAAO,GAAA,IAAI,EAAEsC,SAAS,EAAEZ,aAAa,EAAE,GAAGU,OAAAA,IAAW,EAAC;IAC9D,MAAMhB,KAAAA,GAAQP,mBAAmBwB,KAAOnC,EAAAA,KAAAA,CAAAA;IAExC,MAAMT,OAAAA,GAAUW,kBAAkBJ,IAAME,EAAAA,KAAAA,CAAAA;IACxC,MAAMyB,YAAAA,GAAevB,kBAAkBkC,SAAWpC,EAAAA,KAAAA,CAAAA;IAGlDuB,oBAAqBvB,CAAAA,KAAAA,EAAOwB,eAAeC,YAAclC,EAAAA,OAAAA,CAAAA;AAEzD,IAAA,IAAI2B,SAASO,YAAY,CAACP,KAAMS,CAAAA,IAAI,CAAc,EAAE;QAClD,OAAO;AAACT,YAAAA;AAAM,SAAA;AAChB;AAEA,IAAA,OAAOU,iBAAiB5B,KAAOT,EAAAA,OAAAA,CAAAA;AACjC;;ACpEA,MAAM8C,cAAc,IAAIC,OAAAA,EAAAA;AAEjB,SAASC,SAASvC,KAAY,EAAA;IACnC,IAAIwC,KAAAA,GAAQH,WAAYI,CAAAA,GAAG,CAACzC,KAAAA,CAAAA;AAC5B,IAAA,IAAI,CAACwC,KAAO,EAAA;QACVA,KAAQ,GAAA;AACNE,YAAAA,mBAAAA,EAAqB,EAAC;AACtBC,YAAAA,kBAAAA,EAAoB,EAAC;AACrBC,YAAAA,QAAAA,EAAU,EAAC;AACXV,YAAAA,OAAAA,EAAS,EAAC;AACVW,YAAAA,OAAAA,EAAS,EAAC;AACVC,YAAAA,QAAAA,EAAU,EAAC;YACXC,QAAU,EAAA,KAAA;YACVC,OAAS,EAAA;AACX,SAAA;QACAX,WAAYY,CAAAA,GAAG,CAACjD,KAAOwC,EAAAA,KAAAA,CAAAA;AACzB;IACA,OAAOA,KAAAA;AACT;AAEO,SAASU,YAAYlD,KAAY,EAAA;AACtCqC,IAAAA,WAAAA,CAAYc,MAAM,CAACnD,KAAAA,CAAAA;AACrB;;ACtDA,MAAMoD,WAAc,GAAA,CAAClC,KAAqCA,GAAAA,KAAAA,CAAMmC,IAAI,KAAK,MAAA;AAEzE,MAAMC,WAAc,GAAA,CAACC,KAAuCA,GAAAA,KAAAA,KAAU9D,aAAa+D,KAAMD,CAAAA,KAAAA,CAAAA;AAElF,SAASE,UACdC,GAAuB,EACvBC,GAAuB,EACvBC,KAAa,EACbC,QAAgB,EAAA;AAEhB,IAAA,MAAMC,aAAaF,KAASG,IAAAA,QAAAA,CAASL,QAAQK,QAASJ,CAAAA,GAAAA,CAAAA,GAAOK,KAAKC,GAAG,CAAC,GAAGD,IAAKL,CAAAA,GAAG,CAAC,CAAG,EAACD,CAAAA,GAAMC,GAAAA,GAAE,IAAKC,KAAU,CAAA,CAAA,GAAA,CAAA;AAC7G,IAAA,MAAMM,aAAa,CAAIJ,GAAAA,UAAAA;IAEvB,OAAO;AACLH,QAAAA,GAAAA,EAAKE,QAAWC,GAAAA,UAAAA;AAChBG,QAAAA,GAAAA,EAAKJ,QAAWK,GAAAA;AAClB,KAAA;AACF;AAEA,SAASC,eAAAA,CAAgBjD,KAAY,EAAEiB,KAAY,EAAA;IACjD,MAAMiC,KAAAA,GAAQlD,MAAMmD,YAAY,EAAA,GAAKlC,MAAMhC,CAAC,GAAGgC,MAAM/B,CAAC;IAEtD,OAAOc,KAAAA,CAAMoD,gBAAgB,CAACF,KAAAA,CAAAA;AAChC;AAEA,SAASG,eAAgBrD,CAAAA,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAA;AAChE,IAAA,MAAMb,KAAQ1C,GAAAA,KAAAA,CAAM+C,GAAG,GAAG/C,MAAMyC,GAAG;AACnC,IAAA,MAAME,QAAWD,GAAAA,KAAAA,IAASY,IAAAA,GAAO,CAAA,CAAA;IACjC,MAAME,WAAAA,GAAcP,gBAAgBjD,KAAOuD,EAAAA,MAAAA,CAAAA;AAE3C,IAAA,OAAOhB,SAAUiB,CAAAA,WAAAA,EAAaxD,KAAMyC,CAAAA,GAAG,EAAEC,KAAOC,EAAAA,QAAAA,CAAAA;AAClD;AAEA,SAASc,oBAAqBzD,CAAAA,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAA;IACrE,MAAMC,WAAAA,GAAcP,gBAAgBjD,KAAOuD,EAAAA,MAAAA,CAAAA;AAG3C,IAAA,IAAIC,gBAAgBjF,SAAW,EAAA;QAC7B,OAAO;AAAEkE,YAAAA,GAAAA,EAAKzC,MAAMyC,GAAG;AAAEM,YAAAA,GAAAA,EAAK/C,MAAM+C;AAAI,SAAA;AAC1C;AAEA,IAAA,MAAMW,MAASZ,GAAAA,IAAAA,CAAKa,KAAK,CAAC3D,MAAMyC,GAAG,CAAA;AACnC,IAAA,MAAMmB,MAASd,GAAAA,IAAAA,CAAKa,KAAK,CAAC3D,MAAM+C,GAAG,CAAA;IACnC,MAAMc,SAAAA,GAAYf,IAAKa,CAAAA,KAAK,CAACH,WAAAA,CAAAA;AAC7B,IAAA,MAAMM,WAAWF,MAASF,GAAAA,MAAAA;AAC1B,IAAA,MAAMK,WAAcD,GAAAA,QAAAA,IAAYR,IAAAA,GAAO,CAAA,CAAA;AACvC,IAAA,MAAMU,KAAQzB,GAAAA,SAAAA,CAAUsB,SAAWH,EAAAA,MAAAA,EAAQI,QAAUC,EAAAA,WAAAA,CAAAA;IAErD,OAAO;AACLtB,QAAAA,GAAAA,EAAKK,KAAKmB,GAAG,CAAC,EAAIP,EAAAA,MAAAA,GAASM,MAAMvB,GAAG,CAAA;AACpCM,QAAAA,GAAAA,EAAKD,KAAKmB,GAAG,CAAC,EAAIL,EAAAA,MAAAA,GAASI,MAAMjB,GAAG;AACtC,KAAA;AACF;AAEA,SAASmB,cAAAA,CAAelE,KAAY,EAAEmE,MAAqB,EAAA;AACzD,IAAA,OAAOA,MAAQ,GAACnE,KAAMoE,CAAAA,EAAE,CAAC,IAAID,MAAQ,GAACnE,KAAMS,CAAAA,IAAI,CAAC,IAAI,EAAC;AACxD;AAEA,SAAS4D,QAAAA,CAAS/C,KAAY,EAAEtB,KAAY,EAAEsE,WAAwB,EAAEC,IAAmB,EAAEC,QAAgB,EAAA;IAC3G,IAAIC,KAAAA,GAAQH,WAAW,CAACC,IAAK,CAAA;AAC7B,IAAA,IAAIE,UAAU,UAAY,EAAA;QACxB,MAAMC,QAAAA,GAAWpD,MAAME,mBAAmB,CAACxB,MAAMoE,EAAE,CAAC,CAACG,IAAK,CAAA;QAC1D,IAAI1B,QAAAA,CAAS6B,QAAS1D,CAAAA,OAAO,CAAG,EAAA;AAC9B,YAAA,OAAO0D,SAAS1D,OAAO;AACzB;AAEA,QAAA,IAAI,CAAC2D,aAAAA,CAAcD,QAAS1D,CAAAA,OAAO,CAAG,EAAA;AACpC,YAAA,MAAM4D,MAAS5E,GAAAA,KAAAA,CAAM6E,KAAK,CAACH,SAAS1D,OAAO,CAAA;AAC3C,YAAA,IAAI6B,SAAS+B,MAAS,CAAA,EAAA;gBACpB,OAAOA,MAAAA;AACT;AACF;AAEAH,QAAAA,KAAAA,GAAQC,SAAS1E,KAAK;AACxB;AACA,IAAA,OAAO8E,eAAeL,KAAOD,EAAAA,QAAAA,CAAAA;AAC/B;AAEA,SAASO,WAAY/E,CAAAA,KAAY,EAAEgF,MAAc,EAAEC,MAAc,EAAA;AAC/D,IAAA,MAAMC,KAAKlF,KAAMoD,CAAAA,gBAAgB,CAAC4B,MAAAA,CAAAA,IAAWhF,MAAMyC,GAAG;AACtD,IAAA,MAAM0C,KAAKnF,KAAMoD,CAAAA,gBAAgB,CAAC6B,MAAAA,CAAAA,IAAWjF,MAAM+C,GAAG;IACtD,OAAO;QACLN,GAAKK,EAAAA,IAAAA,CAAKL,GAAG,CAACyC,EAAIC,EAAAA,EAAAA,CAAAA;QAClBpC,GAAKD,EAAAA,IAAAA,CAAKC,GAAG,CAACmC,EAAIC,EAAAA,EAAAA;AACpB,KAAA;AACF;AAEA,SAASC,QACP1C,CAAAA,KAAa,EACb,EAAED,GAAG,EAAEM,GAAG,EAAEsC,QAAQ,EAAEC,QAAQ,EAAoE,EAClGhE,KAAY,EACZtB,KAAY,EAAA;AAEZ,IAAA,MAAMuF,SAAS,CAAC7C,KAAQK,GAAAA,GAAAA,GAAMN,GAAE,IAAK,CAAA;IACrCA,GAAO8C,IAAAA,MAAAA;IACPxC,GAAOwC,IAAAA,MAAAA;AAGP,IAAA,MAAMC,UAA0B,GAAA;QAAE/C,GAAK,EAAA,UAAA;QAAYM,GAAK,EAAA;AAAW,KAAA;AACnE,IAAA,MAAM0C,UAAUpB,QAAS/C,CAAAA,KAAAA,EAAOtB,KAAOwF,EAAAA,UAAAA,EAAY,OAAO,CAACE,QAAAA,CAAAA;AAC3D,IAAA,MAAMC,OAAUtB,GAAAA,QAAAA,CAAS/C,KAAOtB,EAAAA,KAAAA,EAAOwF,YAAY,KAAOE,EAAAA,QAAAA,CAAAA;AAE1D,IAAA,MAAME,UAAUlD,KAAQ,GAAA,GAAA;IACxB,IAAImD,YAAAA,CAAapD,GAAKgD,EAAAA,OAAAA,EAASG,OAAU,CAAA,EAAA;QACvCnD,GAAMgD,GAAAA,OAAAA;AACR;IACA,IAAII,YAAAA,CAAa9C,GAAK4C,EAAAA,OAAAA,EAASC,OAAU,CAAA,EAAA;QACvC7C,GAAM4C,GAAAA,OAAAA;AACR;AAGA,IAAA,IAAIlD,MAAM4C,QAAU,EAAA;QAClB5C,GAAM4C,GAAAA,QAAAA;AACNtC,QAAAA,GAAAA,GAAMD,IAAKL,CAAAA,GAAG,CAAC4C,QAAAA,GAAW3C,KAAO4C,EAAAA,QAAAA,CAAAA;KAC5B,MAAA,IAAIvC,MAAMuC,QAAU,EAAA;QACzBvC,GAAMuC,GAAAA,QAAAA;AACN7C,QAAAA,GAAAA,GAAMK,IAAKC,CAAAA,GAAG,CAACuC,QAAAA,GAAW5C,KAAO2C,EAAAA,QAAAA,CAAAA;AACnC;IAEA,OAAO;AAAE5C,QAAAA,GAAAA;AAAKM,QAAAA;AAAI,KAAA;AACpB;AAEO,SAAS+C,WACd9F,CAAAA,KAAY,EACZ,EAAEyC,GAAG,EAAEM,GAAG,EAAc,EACxBoB,MAAqB,EACrBb,IAAAA,GAAO,KAAK,EACZyC,MAAM,KAAK,EAAA;IAEX,MAAMzE,KAAAA,GAAQD,QAASrB,CAAAA,KAAAA,CAAMlB,KAAK,CAAA;AAClC,IAAA,MAAM,EAAEkC,OAAAA,EAASgF,SAAS,EAAE,GAAGhG,KAAAA;IAE/B,MAAMsE,WAAAA,GAAcJ,eAAelE,KAAOmE,EAAAA,MAAAA,CAAAA;AAC1C,IAAA,MAAM,EAAE8B,QAAAA,GAAW,CAAC,EAAE,GAAG3B,WAAAA;AACzB,IAAA,MAAMe,WAAWhB,QAAS/C,CAAAA,KAAAA,EAAOtB,KAAOsE,EAAAA,WAAAA,EAAa,OAAO,CAACoB,QAAAA,CAAAA;AAC7D,IAAA,MAAMJ,QAAWjB,GAAAA,QAAAA,CAAS/C,KAAOtB,EAAAA,KAAAA,EAAOsE,aAAa,KAAOoB,EAAAA,QAAAA,CAAAA;AAE5D,IAAA,IAAIK,QAAQtD,GAAAA,GAAM4C,QAAYtC,IAAAA,GAAAA,GAAMuC,QAAO,CAAI,EAAA;QAE7C,OAAO,IAAA;AACT;AAEA,IAAA,MAAMY,UAAalG,GAAAA,KAAAA,CAAM+C,GAAG,GAAG/C,MAAMyC,GAAG;AACxC,IAAA,MAAMC,QAAQY,IAAOR,GAAAA,IAAAA,CAAKC,GAAG,CAACA,GAAAA,GAAMN,KAAKwD,QAAYC,CAAAA,GAAAA,UAAAA;AAErD,IAAA,IAAI5C,IAAQZ,IAAAA,KAAAA,KAAUuD,QAAYC,IAAAA,UAAAA,IAAcD,QAAU,EAAA;QAExD,OAAO,IAAA;AACT;IAEA,MAAMtD,QAAAA,GAAWyC,SAAS1C,KAAO,EAAA;AAAED,QAAAA,GAAAA;AAAKM,QAAAA,GAAAA;AAAKsC,QAAAA,QAAAA;AAAUC,QAAAA;AAAS,KAAA,EAAGhE,KAAOtB,EAAAA,KAAAA,CAAAA;IAE1EgG,SAAUvD,CAAAA,GAAG,GAAGE,QAAAA,CAASF,GAAG;IAC5BuD,SAAUjD,CAAAA,GAAG,GAAGJ,QAAAA,CAASI,GAAG;AAE5BzB,IAAAA,KAAAA,CAAMG,kBAAkB,CAACzB,KAAMoE,CAAAA,EAAE,CAAC,GAAGzB,QAAAA;AAGrC,IAAA,OAAO3C,MAAM6E,KAAK,CAAClC,QAASF,CAAAA,GAAG,MAAMzC,KAAMyC,CAAAA,GAAG,IAAIzC,KAAAA,CAAM6E,KAAK,CAAClC,QAAAA,CAASI,GAAG,CAAA,KAAM/C,MAAM+C,GAAG;AAC3F;AAEA,SAASoD,mBAAmBnG,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAEY,MAAoB,EAAA;IACzF,MAAMH,KAAAA,GAAQX,eAAgBrD,CAAAA,KAAAA,EAAOsD,IAAMC,EAAAA,MAAAA,CAAAA;AAC3C,IAAA,MAAMZ,QAAW,GAAA;AAAEF,QAAAA,GAAAA,EAAKzC,KAAMyC,CAAAA,GAAG,GAAGuB,KAAAA,CAAMvB,GAAG;AAAEM,QAAAA,GAAAA,EAAK/C,KAAM+C,CAAAA,GAAG,GAAGiB,KAAAA,CAAMjB;AAAI,KAAA;IAC1E,OAAO+C,WAAAA,CAAY9F,KAAO2C,EAAAA,QAAAA,EAAUwB,MAAQ,EAAA,IAAA,CAAA;AAC9C;AAEA,SAASiC,qBAAqBpG,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAEY,MAAoB,EAAA;IAC3F,MAAMxB,QAAAA,GAAWc,oBAAqBzD,CAAAA,KAAAA,EAAOsD,IAAMC,EAAAA,MAAAA,CAAAA;IACnD,OAAOuC,WAAAA,CAAY9F,KAAO2C,EAAAA,QAAAA,EAAUwB,MAAQ,EAAA,IAAA,CAAA;AAC9C;AAEA,SAASkC,uBAAuBrG,KAAY,EAAEsG,IAAY,EAAEC,EAAU,EAAEpC,MAAoB,EAAA;AAC1F,IAAA,OAAO2B,YAAY9F,KAAO+E,EAAAA,WAAAA,CAAY/E,KAAOsG,EAAAA,IAAAA,EAAMC,KAAKpC,MAAQ,EAAA,IAAA,CAAA;AAClE;AAEA,MAAMqC,aAAAA,GAAgB,CAACC,CAAAA,GACrBA,CAAM,KAAA,CAAA,IAAKnE,MAAMmE,CAAK,CAAA,GAAA,CAAA,GAAIA,CAAI,GAAA,CAAA,GAAI3D,IAAKL,CAAAA,GAAG,CAACK,IAAK4D,CAAAA,KAAK,CAACD,CAAAA,CAAAA,EAAI,CAAC,CAAA,CAAA,GAAK3D,IAAKC,CAAAA,GAAG,CAACD,IAAAA,CAAK4D,KAAK,CAACD,CAAI,CAAA,EAAA,CAAA,CAAA;AAE1F,SAASE,yBAAyB3G,KAAY,EAAA;IAC5C,MAAM4G,MAAAA,GAAS5G,MAAM6G,SAAS,EAAA;IAC9B,MAAMC,QAAAA,GAAWF,MAAO7G,CAAAA,MAAM,GAAG,CAAA;IAEjC,IAAIC,KAAAA,CAAMyC,GAAG,GAAG,CAAG,EAAA;AACjBzC,QAAAA,KAAAA,CAAMyC,GAAG,IAAI,CAAA;AACf;IACA,IAAIzC,KAAAA,CAAM+C,GAAG,GAAG+D,QAAU,EAAA;AACxB9G,QAAAA,KAAAA,CAAM+C,GAAG,IAAI,CAAA;AACf;AACF;AAEA,SAASgE,kBAAkB/G,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAEY,MAAoB,EAAA;IACxF,MAAMH,KAAAA,GAAQX,eAAgBrD,CAAAA,KAAAA,EAAOsD,IAAMC,EAAAA,MAAAA,CAAAA;AAC3C,IAAA,IAAIvD,MAAMyC,GAAG,KAAKzC,MAAM+C,GAAG,IAAIO,OAAO,CAAG,EAAA;QACvCqD,wBAAyB3G,CAAAA,KAAAA,CAAAA;AAC3B;AACA,IAAA,MAAM2C,QAAW,GAAA;AAAEF,QAAAA,GAAAA,EAAKzC,KAAMyC,CAAAA,GAAG,GAAG+D,aAAAA,CAAcxC,MAAMvB,GAAG,CAAA;AAAGM,QAAAA,GAAAA,EAAK/C,KAAM+C,CAAAA,GAAG,GAAGyD,aAAAA,CAAcxC,MAAMjB,GAAG;AAAE,KAAA;IAExG,OAAO+C,WAAAA,CAAY9F,KAAO2C,EAAAA,QAAAA,EAAUwB,MAAQ,EAAA,IAAA,CAAA;AAC9C;AAEA,SAAS6C,YAAYhH,KAAY,EAAA;AAC/B,IAAA,OAAOA,MAAMmD,YAAY,EAAA,GAAKnD,MAAMiH,KAAK,GAAGjH,MAAMkH,MAAM;AAC1D;AAEA,SAASC,gBAAiBnH,CAAAA,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAA;IACzE,MAAMyC,MAAAA,GAAS5G,MAAM6G,SAAS,EAAA;IAC9B,MAAMO,cAAAA,GAAiBR,MAAO7G,CAAAA,MAAM,GAAG,CAAA;AACvC,IAAA,IAAI,EAAE0C,GAAG,EAAEM,GAAG,EAAE,GAAG/C,KAAAA;AAEnB,IAAA,MAAM0C,KAAQI,GAAAA,IAAAA,CAAKC,GAAG,CAACA,MAAMN,GAAK,EAAA,CAAA,CAAA;IAElC,MAAM4E,SAAAA,GAAYvE,KAAK4D,KAAK,CAACM,YAAYhH,KAAS8C,CAAAA,GAAAA,IAAAA,CAAKC,GAAG,CAACL,KAAO,EAAA,EAAA,CAAA,CAAA;AAClE,IAAA,MAAM4E,WAAWxE,IAAK4D,CAAAA,KAAK,CAAC5D,IAAKyE,CAAAA,GAAG,CAACvD,KAAQqD,GAAAA,SAAAA,CAAAA,CAAAA;IAC7C,IAAIG,OAAAA;IACJ,IAAIxD,KAAAA,GAAQ,CAACqD,SAAW,EAAA;AACtBtE,QAAAA,GAAAA,GAAMD,IAAKL,CAAAA,GAAG,CAACM,GAAAA,GAAMuE,QAAUF,EAAAA,cAAAA,CAAAA;QAC/B3E,GAAMC,GAAAA,KAAAA,KAAU,CAAIK,GAAAA,GAAAA,GAAMA,GAAML,GAAAA,KAAAA;AAChC8E,QAAAA,OAAAA,GAAUzE,GAAQqE,KAAAA,cAAAA;KACb,MAAA,IAAIpD,QAAQqD,SAAW,EAAA;AAC5B5E,QAAAA,GAAAA,GAAMK,IAAKC,CAAAA,GAAG,CAAC,CAAA,EAAGN,GAAM6E,GAAAA,QAAAA,CAAAA;QACxBvE,GAAML,GAAAA,KAAAA,KAAU,CAAID,GAAAA,GAAAA,GAAMA,GAAMC,GAAAA,KAAAA;AAChC8E,QAAAA,OAAAA,GAAU/E,GAAQ,KAAA,CAAA;AACpB;AAEA,IAAA,OAAOqD,YAAY9F,KAAO,EAAA;AAAEyC,QAAAA,GAAAA;AAAKM,QAAAA;AAAI,KAAA,EAAGoB,WAAWsD,OAAQD,CAAAA,OAAAA,CAAAA;AAC7D;AAEA,MAAME,OAAoC,GAAA;IACxCC,WAAa,EAAA,CAAA;IACbC,MAAQ,EAAA,GAAA;AACRC,IAAAA,MAAAA,EAAQ,EAAK,GAAA,IAAA;AACbC,IAAAA,IAAAA,EAAM,KAAK,EAAK,GAAA,IAAA;IAChBC,GAAK,EAAA,EAAA,GAAK,KAAK,EAAK,GAAA,IAAA;IACpBC,IAAM,EAAA,GAAA,GAAM,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IAC3BC,KAAO,EAAA,EAAA,GAAK,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IAC3BC,OAAS,EAAA,EAAA,GAAK,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IAC7BC,IAAM,EAAA,GAAA,GAAM,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA;AAC7B,CAAA;AAEA,SAASC,iBAAAA,CAAkBpI,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAEkE,UAAU,KAAK,EAAA;AAC3F,IAAA,MAAM,EAAE5F,GAAK6F,EAAAA,SAAS,EAAEvF,GAAKwF,EAAAA,OAAO,EAAE,GAAGvI,KAAAA;AACzC,IAAA,IAAIuF,MAAS,GAAA,CAAA;AACb,IAAA,IAAIrD,YAAYlC,KAAQ,CAAA,EAAA;AACtB,QAAA,MAAM0G,KAAQ1G,GAAAA,KAAAA,CAAMgB,OAAO,CAACwH,IAAI,EAAE9B,KAAAA;AAClCnB,QAAAA,MAAAA,GAASmB,KAAQgB,GAAAA,OAAO,CAAChB,KAAAA,CAAM,GAAG,CAAA;AACpC;IACA,MAAM+B,MAAAA,GAASzI,MAAMoD,gBAAgB,CAACpD,MAAM0I,gBAAgB,CAACJ,YAAY/C,MAAUvB,CAAAA,GAAAA,KAAAA,CAAAA;IACnF,MAAM2E,MAAAA,GAAS3I,MAAMoD,gBAAgB,CAACpD,MAAM0I,gBAAgB,CAACH,UAAUhD,MAAUvB,CAAAA,GAAAA,KAAAA,CAAAA;IACjF,IAAI5B,WAAAA,CAAYqG,MAAWrG,CAAAA,IAAAA,WAAAA,CAAYuG,MAAS,CAAA,EAAA;QAG9C,OAAO,IAAA;AACT;AACA,IAAA,OAAO7C,YAAY9F,KAAO,EAAA;QAAEyC,GAAKgG,EAAAA,MAAAA;QAAQ1F,GAAK4F,EAAAA;AAAO,KAAA,EAAGxE,QAAQkE,OAAS,EAAA,IAAA,CAAA;AAC3E;AAEA,SAASO,iBAAkB5I,CAAAA,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAA;IAC1E,OAAOiE,iBAAAA,CAAkBpI,KAAOgE,EAAAA,KAAAA,EAAOG,MAAQ,EAAA,IAAA,CAAA;AACjD;AAEO,MAAM0E,aAA8C,GAAA;IACzDC,QAAU/B,EAAAA,iBAAAA;IACVgC,OAAS5C,EAAAA,kBAAAA;IACT6C,WAAa5C,EAAAA;AACf,CAAC;AAEM,MAAM6C,iBAAsD,GAAA;IACjEF,OAAS1C,EAAAA;AACX,CAAC;AAEM,MAAM6C,YAA4C,GAAA;IACvDJ,QAAU3B,EAAAA,gBAAAA;IACV4B,OAASX,EAAAA,iBAAAA;IACTY,WAAaJ,EAAAA,iBAAAA;IACbO,UAAYP,EAAAA;AACd,CAAC;;ACrRD,SAASQ,uBACPpJ,CAAAA,KAAY,EACZwB,mBAAwC,EACxCC,kBAAsC,EAAA;IAEtC,MAAM,EACJ2C,EAAE,EACFpD,OAAS,EAAA,EAAEyB,GAAG,EAAEM,GAAG,EAAE,EACtB,GAAG/C,KAAAA;IACJ,IAAI,CAACwB,mBAAmB,CAAC4C,EAAAA,CAAG,IAAI,CAAC3C,kBAAkB,CAAC2C,EAAAA,CAAG,EAAE;QACvD,OAAO,IAAA;AACT;IACA,MAAMiF,QAAAA,GAAW5H,kBAAkB,CAAC2C,EAAG,CAAA;AACvC,IAAA,OAAOiF,SAAS5G,GAAG,KAAKA,GAAO4G,IAAAA,QAAAA,CAAStG,GAAG,KAAKA,GAAAA;AAClD;AAEA,SAASuG,mBAAAA,CAAoBnF,MAAgD,EAAEzE,MAA6B,EAAA;AAC1G,IAAA,KAAK,MAAMxB,GAAAA,IAAO0B,MAAOC,CAAAA,IAAI,CAACsE,MAAS,CAAA,CAAA;AACrC,QAAA,IAAI,CAACzE,MAAM,CAACxB,GAAAA,CAAI,EAAE;YAChB,OAAOiG,MAAM,CAACjG,GAAI,CAAA;AACpB;AACF;AACF;AAEA,SAASqL,wBAAAA,CAAyBzK,KAAY,EAAEwC,KAAY,EAAA;IAC1D,MAAM,EAAE5B,MAAM,EAAE,GAAGZ,KAAAA;AACnB,IAAA,MAAM,EAAE0C,mBAAmB,EAAEC,kBAAkB,EAAE,GAAGH,KAAAA;AAEpD,IAAA,KAAK,MAAMtB,KAAAA,IAASJ,MAAOiB,CAAAA,MAAM,CAACnB,MAAS,CAAA,CAAA;QACzC,IAAI0J,uBAAAA,CAAwBpJ,KAAOwB,EAAAA,mBAAAA,EAAqBC,kBAAqB,CAAA,EAAA;AAC3ED,YAAAA,mBAAmB,CAACxB,KAAAA,CAAMoE,EAAE,CAAC,GAAG;gBAC9B3B,GAAK,EAAA;AAAEzC,oBAAAA,KAAAA,EAAOA,MAAMyC,GAAG;oBAAEzB,OAAShB,EAAAA,KAAAA,CAAMgB,OAAO,CAACyB;AAAI,iBAAA;gBACpDM,GAAK,EAAA;AAAE/C,oBAAAA,KAAAA,EAAOA,MAAM+C,GAAG;oBAAE/B,OAAShB,EAAAA,KAAAA,CAAMgB,OAAO,CAAC+B;AAAI;AACtD,aAAA;AACF;AACF;AAEAuG,IAAAA,mBAAAA,CAAoB9H,mBAAqB9B,EAAAA,MAAAA,CAAAA;AACzC4J,IAAAA,mBAAAA,CAAoB7H,kBAAoB/B,EAAAA,MAAAA,CAAAA;IACxC,OAAO8B,mBAAAA;AACT;AAEA,SAASgI,OAAOxJ,KAAY,EAAEyJ,MAAc,EAAElG,MAAa,EAAEY,MAAoB,EAAA;IAC/E,MAAM/E,EAAAA,GAAKyJ,aAAa,CAAC7I,KAAAA,CAAMmC,IAAI,CAAC,IAAI0G,cAAcE,OAAO;IAC7D3J,EAAKY,GAAAA,KAAAA,EAAOyJ,QAAQlG,MAAQY,EAAAA,MAAAA,CAAAA;AAC9B;AAEA,SAASuF,WAAW1J,KAAY,EAAEsG,IAAY,EAAEC,EAAU,EAAEpC,MAAoB,EAAA;IAC9E,MAAM/E,EAAAA,GAAK6J,iBAAiB,CAACjJ,KAAAA,CAAMmC,IAAI,CAAC,IAAI8G,kBAAkBF,OAAO;IACrE3J,EAAKY,GAAAA,KAAAA,EAAOsG,MAAMC,EAAIpC,EAAAA,MAAAA,CAAAA;AACxB;AAEA,SAASwF,UAAU7K,KAAY,EAAA;IAC7B,MAAM8K,EAAAA,GAAK9K,MAAM+K,SAAS;IAC1B,OAAO;QACL5K,CAAG,EAAC2K,CAAAA,EAAGzJ,CAAAA,IAAI,GAAGyJ,EAAGxJ,CAAAA,KAAK,IAAI,CAAA;QAC1BlB,CAAG,EAAC0K,CAAAA,EAAG3J,CAAAA,GAAG,GAAG2J,EAAG1J,CAAAA,MAAM,IAAI;AAC5B,KAAA;AACF;AAEO,SAASoD,IAAKxE,CAAAA,KAAY,EAAE2K,MAAkB,EAAEK,UAAyB,GAAA,MAAM,EAAEC,OAAAA,GAAuB,KAAK,EAAA;AAClH,IAAA,MAAM,EAAE9K,CAAAA,GAAI,CAAC,EAAEC,IAAI,CAAC,EAAE8K,UAAaL,GAAAA,SAAAA,CAAU7K,KAAM,CAAA,EAAE,GAAG,OAAO2K,WAAW,QAAW,GAAA;QAAExK,CAAGwK,EAAAA,MAAAA;QAAQvK,CAAGuK,EAAAA;KAAWA,GAAAA,MAAAA;AAChH,IAAA,MAAMnI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM,EACJkC,OAAS,EAAA,EAAEmD,MAAS,GAAA,EAAE,EAAEb,IAAM2G,EAAAA,WAAW,EAAE,EAC5C,GAAG3I,KAAAA;AAEJiI,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAEhC,IAAA,MAAM4I,WAAWjL,CAAM,KAAA,CAAA;AACvB,IAAA,MAAMkL,WAAWjL,CAAM,KAAA,CAAA;IACvB,MAAMyB,aAAAA,GAAgBI,uBAAwBkJ,CAAAA,WAAAA,EAAaD,UAAYlL,EAAAA,KAAAA,CAAAA;IAEvE,KAAK,MAAMkB,SAASW,aAAe,CAAA;QACjC,IAAIX,KAAAA,CAAMmD,YAAY,EAAA,IAAM+G,QAAU,EAAA;YACpCV,MAAOxJ,CAAAA,KAAAA,EAAOf,GAAG+K,UAAY7F,EAAAA,MAAAA,CAAAA;AAC/B,SAAA,MAAO,IAAI,CAACnE,KAAMmD,CAAAA,YAAY,MAAMgH,QAAU,EAAA;YAC5CX,MAAOxJ,CAAAA,KAAAA,EAAOd,GAAG8K,UAAY7F,EAAAA,MAAAA,CAAAA;AAC/B;AACF;AAEArF,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbG,IAAAA,WAAAA,EAAaI,MAAS,GAAA;AAAEvL,QAAAA,KAAAA;AAAOiL,QAAAA,OAAAA;QAASN,MAAQ,EAAA;AAAExK,YAAAA,CAAAA;AAAGC,YAAAA,CAAAA;AAAG8K,YAAAA;AAAW;AAAE,KAAA,CAAA;AACvE;AAEO,SAASM,QAAAA,CACdxL,KAAY,EACZyL,EAAS,EACTC,EAAS,EACTV,UAAyB,GAAA,MAAM,EAC/BC,OAAAA,GAAuB,KAAK,EAAA;AAE5B,IAAA,MAAMzI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,MAAM,EACJkC,OAAAA,EAAS,EAAEmD,MAAAA,GAAS,EAAE,EAAEb,IAAAA,EAAM2G,WAAc,GAAA,EAAE,EAAE,EACjD,GAAG3I,KAAAA;AACJ,IAAA,MAAM,EAAE1C,IAAAA,GAAO,IAAI,EAAE,GAAGqL,WAAAA;AAExBV,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;IAChC,MAAM4I,QAAAA,GAAWvL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;IAC7C,MAAMqL,QAAAA,GAAWxL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;AAE7C,IAAA,KAAK,MAAMkB,KAASJ,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,IAAIM,KAAAA,CAAMmD,YAAY,EAAA,IAAM+G,QAAU,EAAA;AACpCR,YAAAA,UAAAA,CAAW1J,OAAOuK,EAAGtL,CAAAA,CAAC,EAAEuL,EAAAA,CAAGvL,CAAC,EAAEkF,MAAAA,CAAAA;AAChC,SAAA,MAAO,IAAI,CAACnE,KAAMmD,CAAAA,YAAY,MAAMgH,QAAU,EAAA;AAC5CT,YAAAA,UAAAA,CAAW1J,OAAOuK,EAAGrL,CAAAA,CAAC,EAAEsL,EAAAA,CAAGtL,CAAC,EAAEiF,MAAAA,CAAAA;AAChC;AACF;AAEArF,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbG,IAAAA,WAAAA,CAAYI,MAAM,GAAG;AAAEvL,QAAAA,KAAAA;AAAOiL,QAAAA;AAAQ,KAAA,CAAA;AACxC;AAEO,SAASU,SAAAA,CACd3L,KAAY,EACZ4L,OAAe,EACfhI,KAAiB,EACjBoH,UAAyB,GAAA,MAAM,EAC/BC,OAAAA,GAAuB,KAAK,EAAA;AAE5B,IAAA,MAAMzI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvByK,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAChC,IAAA,MAAMtB,KAAQlB,GAAAA,KAAAA,CAAMY,MAAM,CAACgL,OAAQ,CAAA;IACnC5E,WAAY9F,CAAAA,KAAAA,EAAO0C,OAAOnE,SAAW,EAAA,IAAA,CAAA;AACrCO,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbxI,IAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAE+G,MAAS,GAAA;AAAEvL,QAAAA,KAAAA;AAAOiL,QAAAA;AAAQ,KAAA,CAAA;AAChD;AAEO,SAASY,SAAAA,CAAU7L,KAAY,EAAEgL,aAAyB,SAAS,EAAA;AACxE,IAAA,MAAMxI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM0C,mBAAAA,GAAsB+H,yBAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAE5D,IAAA,KAAK,MAAMtB,KAASJ,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,MAAMkL,YAAAA,GAAe5K,MAAMgB,OAAO;AAClC,QAAA,IAAIQ,mBAAmB,CAACxB,KAAMoE,CAAAA,EAAE,CAAC,EAAE;YACjCwG,YAAanI,CAAAA,GAAG,GAAGjB,mBAAmB,CAACxB,KAAAA,CAAMoE,EAAE,CAAC,CAAC3B,GAAG,CAACzB,OAAO;YAC5D4J,YAAa7H,CAAAA,GAAG,GAAGvB,mBAAmB,CAACxB,KAAAA,CAAMoE,EAAE,CAAC,CAACrB,GAAG,CAAC/B,OAAO;SACvD,MAAA;AACL,YAAA,OAAO4J,aAAanI,GAAG;AACvB,YAAA,OAAOmI,aAAa7H,GAAG;AACzB;AACA,QAAA,OAAOzB,KAAMG,CAAAA,kBAAkB,CAACzB,KAAAA,CAAMoE,EAAE,CAAC;AAC3C;AACAtF,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbxI,IAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAEuH,cAAiB,GAAA;AAAE/L,QAAAA;AAAM,KAAA,CAAA;AAC/C;AAEA,SAASgM,gBAAAA,CAAiBxJ,KAAY,EAAEoJ,OAAe,EAAA;AACrD,IAAA,MAAMhG,QAAWpD,GAAAA,KAAAA,CAAME,mBAAmB,CAACkJ,OAAQ,CAAA;AACnD,IAAA,IAAI,CAAChG,QAAU,EAAA;QACb,OAAOnG,SAAAA;AACT;AACA,IAAA,MAAM,EAAEkE,GAAG,EAAEM,GAAG,EAAE,GAAG2B,QAAAA;AACrB,IAAA,IAAI7B,SAASE,GAAI/B,CAAAA,OAAO,KAAK6B,QAASJ,CAAAA,GAAAA,CAAIzB,OAAO,CAAG,EAAA;AAClD,QAAA,OAAO+B,GAAI/B,CAAAA,OAAO,GAAGyB,GAAAA,CAAIzB,OAAO;AAClC;AACA,IAAA,IAAI6B,SAASE,GAAI/C,CAAAA,KAAK,KAAK6C,QAASJ,CAAAA,GAAAA,CAAIzC,KAAK,CAAG,EAAA;AAC9C,QAAA,OAAO+C,GAAI/C,CAAAA,KAAK,GAAGyC,GAAAA,CAAIzC,KAAK;AAC9B;IACA,OAAOzB,SAAAA;AACT;AAEO,SAASwM,aAAajM,KAAY,EAAA;AACvC,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,IAAI2D,GAAM,GAAA,CAAA;AACV,IAAA,IAAIM,GAAM,GAAA,CAAA;AACV,IAAA,KAAK,MAAM/C,KAASJ,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;AAC/C,QAAA,MAAMsL,SAAYF,GAAAA,gBAAAA,CAAiBxJ,KAAOtB,EAAAA,KAAAA,CAAMoE,EAAE,CAAA;AAClD,QAAA,IAAI4G,SAAW,EAAA;AACb,YAAA,MAAMC,KAAQnI,GAAAA,IAAAA,CAAK4D,KAAK,CAAC,SAAc1G,IAAAA,KAAM+C,CAAAA,GAAG,GAAG/C,KAAAA,CAAMyC,GAAE,IAAM,GAAO,CAAA,GAAA,GAAA;YACxEA,GAAMK,GAAAA,IAAAA,CAAKL,GAAG,CAACA,GAAKwI,EAAAA,KAAAA,CAAAA;YACpBlI,GAAMD,GAAAA,IAAAA,CAAKC,GAAG,CAACA,GAAKkI,EAAAA,KAAAA,CAAAA;AACtB;AACF;IACA,OAAOxI,GAAAA,GAAM,IAAIA,GAAMM,GAAAA,GAAAA;AACzB;AAEA,SAASmI,SAASlL,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAE7C,KAAY,EAAA;IAC/E,MAAM,EAAEM,QAAQ,EAAE,GAAGN,KAAAA;AAErB,IAAA,MAAM6J,cAAcvJ,QAAQ,CAAC5B,KAAMoE,CAAAA,EAAE,CAAC,IAAI,CAAA;IAC1C,IAAIgH,IAAAA,CAAKD,WAAiBC,CAAAA,KAAAA,IAAAA,CAAKpH,KAAQ,CAAA,EAAA;QACrCA,KAASmH,IAAAA,WAAAA;AACX;IACA,MAAM/L,EAAAA,GAAK8J,YAAY,CAAClJ,KAAAA,CAAMmC,IAAI,CAAC,IAAI+G,aAAaH,OAAO;IAC3D,IAAI3J,EAAAA,GAAKY,KAAOgE,EAAAA,KAAAA,EAAOG,MAAS,CAAA,EAAA;AAE9BvC,QAAAA,QAAQ,CAAC5B,KAAAA,CAAMoE,EAAE,CAAC,GAAG,CAAA;KAChB,MAAA;AAELxC,QAAAA,QAAQ,CAAC5B,KAAAA,CAAMoE,EAAE,CAAC,GAAGJ,KAAAA;AACvB;AACF;AAIO,SAAS+B,GAAAA,CACdjH,KAAY,EACZkF,KAAgB,EAChBrD,aAAuB,EACvBmJ,UAAyB,GAAA,MAAM,EAC/BC,OAAAA,GAAsB,OAAO,EAAA;IAE7B,MAAM,EAAE9K,CAAI,GAAA,CAAC,EAAEC,CAAAA,GAAI,CAAC,EAAE,GAAG,OAAO8E,KAAAA,KAAU,QAAW,GAAA;QAAE/E,CAAG+E,EAAAA,KAAAA;QAAO9E,CAAG8E,EAAAA;KAAUA,GAAAA,KAAAA;AAC9E,IAAA,MAAM1C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM,EACJkC,OAAS,EAAA,EAAE+E,GAAKsF,EAAAA,UAAU,EAAElH,MAAAA,GAAS,EAAE,EAAE,EAC1C,GAAG7C,KAAAA;AACJ,IAAA,MAAM,EAAEgK,KAAK,EAAE,GAAGD,cAAc,EAAC;AAEjC9B,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAEhC,IAAA,MAAM4I,WAAWjL,CAAM,KAAA,CAAA;AACvB,IAAA,MAAMkL,WAAWjL,CAAM,KAAA,CAAA;AAEvB,IAAA,MAAMQ,SAASiB,aAAiBf,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,MAAMY,MAAM,CAAA;IAE1D,KAAK,MAAMM,SAASN,MAAQ,CAAA;QAC1B,IAAIM,KAAAA,CAAMmD,YAAY,EAAA,IAAM+G,QAAU,EAAA;YACpCgB,QAASlL,CAAAA,KAAAA,EAAOf,GAAGkF,MAAQ7C,EAAAA,KAAAA,CAAAA;AAC7B,SAAA,MAAO,IAAI,CAACtB,KAAMmD,CAAAA,YAAY,MAAMgH,QAAU,EAAA;YAC5Ce,QAASlL,CAAAA,KAAAA,EAAOd,GAAGiF,MAAQ7C,EAAAA,KAAAA,CAAAA;AAC7B;AACF;AAEAxC,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;IAEbwB,KAAQ,GAAA;AAAExM,QAAAA,KAAAA;AAAOiL,QAAAA,OAAAA;QAAS/F,KAAO,EAAA;AAAE/E,YAAAA,CAAAA;AAAGC,YAAAA;AAAE;AAAE,KAAA,CAAA;AAC5C;AAEO,SAASqM,sBAAsBzM,KAAY,EAAA;AAChD,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvByK,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAChC,IAAA,MAAMkK,cAA8D,EAAC;AACrE,IAAA,KAAK,MAAMd,OAAW9K,IAAAA,MAAAA,CAAOC,IAAI,CAACf,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,MAAM,EAAE+C,GAAG,EAAEM,GAAG,EAAE,GAAGzB,KAAME,CAAAA,mBAAmB,CAACkJ,OAAAA,CAAQ,IAAI;AAAEjI,YAAAA,GAAAA,EAAK,EAAC;AAAGM,YAAAA,GAAAA,EAAK;AAAG,SAAA;QAC9EyI,WAAW,CAACd,QAAQ,GAAG;AAAEjI,YAAAA,GAAAA,EAAKA,IAAIzC,KAAK;AAAE+C,YAAAA,GAAAA,EAAKA,IAAI/C;AAAM,SAAA;AAC1D;IAEA,OAAOwL,WAAAA;AACT;AAEO,SAASC,qBAAqB3M,KAAY,EAAA;AAC/C,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,MAAM0M,cAA8D,EAAC;AACrE,IAAA,KAAK,MAAMd,OAAW9K,IAAAA,MAAAA,CAAOC,IAAI,CAACf,KAAAA,CAAMY,MAAM,CAAG,CAAA;AAC/C8L,QAAAA,WAAW,CAACd,OAAQ,CAAA,GAAGpJ,KAAMG,CAAAA,kBAAkB,CAACiJ,OAAQ,CAAA;AAC1D;IAEA,OAAOc,WAAAA;AACT;AAEO,SAASE,iBAAiB5M,KAAY,EAAA;AAC3C,IAAA,MAAM0M,cAAcD,qBAAsBzM,CAAAA,KAAAA,CAAAA;AAC1C,IAAA,KAAK,MAAM4L,OAAW9K,IAAAA,MAAAA,CAAOC,IAAI,CAACf,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,MAAM,EAAE+C,GAAKkJ,EAAAA,WAAW,EAAE5I,GAAAA,EAAK6I,WAAW,EAAE,GAAGJ,WAAW,CAACd,OAAQ,CAAA;QAEnE,IAAIiB,WAAAA,KAAgBpN,aAAaO,KAAMY,CAAAA,MAAM,CAACgL,OAAQ,CAAA,CAACjI,GAAG,KAAKkJ,WAAa,EAAA;YAC1E,OAAO,IAAA;AACT;QAEA,IAAIC,WAAAA,KAAgBrN,aAAaO,KAAMY,CAAAA,MAAM,CAACgL,OAAQ,CAAA,CAAC3H,GAAG,KAAK6I,WAAa,EAAA;YAC1E,OAAO,IAAA;AACT;AACF;IAEA,OAAO,KAAA;AACT;AAEO,SAASC,wBAAwBvK,KAAY,EAAA;AAClD,IAAA,OAAOA,KAAMQ,CAAAA,OAAO,IAAIR,KAAAA,CAAMO,QAAQ;AACxC;AAEO,SAASiK,mBAAmBhN,KAAY,EAAA;AAC7C,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AAGvB,IAAA,OAAO,CAAC,EAAE+M,wBAAwBvK,KAAUA,CAAAA,IAAAA,KAAAA,CAAMyK,eAAe,CAAD;AAClE;;AC5RA,MAAMC,KAAQ,GAAA,CAAC/M,CAAWqH,EAAAA,IAAAA,EAAcC,EAAuBzD,GAAAA,IAAAA,CAAKL,GAAG,CAAC8D,EAAIzD,EAAAA,IAAAA,CAAKC,GAAG,CAACuD,IAAMrH,EAAAA,CAAAA,CAAAA,CAAAA;AAE3F,SAASgN,aAAAA,CAAcnN,KAAY,EAAEqD,IAAiB,EAAA;AACpD,IAAA,MAAM,EAAET,QAAQ,EAAEC,OAAO,EAAE,GAAGN,QAASvC,CAAAA,KAAAA,CAAAA;IACvC,MAAMoN,OAAAA,GAAUxK,QAAQ,CAACS,IAAK,CAAA;IAC9B,MAAMgK,MAAAA,GAASxK,OAAO,CAACQ,IAAK,CAAA;AAC5B,IAAA,IAAI+J,WAAWC,MAAQ,EAAA;QACrBA,MAAOC,CAAAA,mBAAmB,CAACjK,IAAM+J,EAAAA,OAAAA,CAAAA;QACjC,OAAOxK,QAAQ,CAACS,IAAK,CAAA;AACvB;AACF;AAIA,SAASkK,WACPvN,KAAY,EACZqN,MAAoC,EACpChK,IAAiB,EACjB+J,OAAwB,EAAA;IAExB,MAAM,EAAExK,QAAQ,EAAEV,OAAO,EAAEW,OAAO,EAAE,GAAGN,QAASvC,CAAAA,KAAAA,CAAAA;IAChD,MAAMwN,UAAAA,GAAa5K,QAAQ,CAACS,IAAK,CAAA;AACjC,IAAA,IAAImK,UAAc3K,IAAAA,OAAO,CAACQ,IAAAA,CAAK,KAAKgK,MAAQ,EAAA;AAE1C,QAAA;AACF;AACAF,IAAAA,aAAAA,CAAcnN,KAAOqD,EAAAA,IAAAA,CAAAA;IACrB,MAAMoK,QAAAA,GAAY7K,QAAQ,CAACS,IAAAA,CAAK,GAAG,CAAC1D,KAAAA,GAAUyN,OAAQpN,CAAAA,KAAAA,EAAOL,KAAYuC,EAAAA,OAAAA,CAAAA;IACzEW,OAAO,CAACQ,KAAK,GAAGgK,MAAAA;IAGhB,MAAMK,OAAAA,GAAUrK,IAAS,KAAA,OAAA,GAAU,KAAQ5D,GAAAA,SAAAA;IAC3C4N,MAAOM,CAAAA,gBAAgB,CAACtK,IAAAA,EAAMoK,QAAU,EAAA;AAAEC,QAAAA;AAAQ,KAAA,CAAA;AACpD;AAEO,SAASE,SAAAA,CAAU5N,KAAY,EAAEL,KAAiB,EAAA;AACvD,IAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,IAAIwC,KAAAA,CAAMqL,SAAS,EAAE;AACnBrL,QAAAA,KAAAA,CAAMO,QAAQ,GAAG,IAAA;AACjBP,QAAAA,KAAAA,CAAMsL,OAAO,GAAGnO,KAAAA;AAChBK,QAAAA,KAAAA,CAAM+N,IAAI,EAAA;AACZ;AACF;AAEA,SAASC,OAAAA,CAAQhO,KAAY,EAAEL,KAAoB,EAAA;AACjD,IAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,IAAI,CAACwC,KAAMqL,CAAAA,SAAS,IAAIlO,KAAMP,CAAAA,GAAG,KAAK,QAAU,EAAA;AAC9C,QAAA;AACF;AAEA+N,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACrBwC,IAAAA,KAAAA,CAAMO,QAAQ,GAAG,KAAA;AACjBP,IAAAA,KAAAA,CAAMqL,SAAS,GAAGrL,KAAMsL,CAAAA,OAAO,GAAGrO,SAAAA;AAClCO,IAAAA,KAAAA,CAAM+N,IAAI,EAAA;AACZ;AAEA,SAASE,gBAAAA,CAAiBtO,KAAiB,EAAEK,KAAY,EAAA;AACvD,IAAA,IAAIL,KAAM0N,CAAAA,MAAM,KAAKrN,KAAAA,CAAMkO,MAAM,EAAE;AACjC,QAAA,MAAMC,UAAanO,GAAAA,KAAAA,CAAMkO,MAAM,CAACE,qBAAqB,EAAA;QACrD,OAAO;AACLjO,YAAAA,CAAAA,EAAGR,KAAM0O,CAAAA,OAAO,GAAGF,UAAAA,CAAW9M,IAAI;AAClCjB,YAAAA,CAAAA,EAAGT,KAAM2O,CAAAA,OAAO,GAAGH,UAAAA,CAAWhN;AAChC,SAAA;AACF;IACA,OAAOoN,mBAAAA,CAAoB5O,KAAOK,EAAAA,KAAAA;;AACpC;AAEA,SAASwO,SAAUxO,CAAAA,KAAY,EAAEL,KAAiB,EAAEwL,WAAwB,EAAA;AAC1E,IAAA,MAAM,EAAEsD,WAAW,EAAEC,cAAc,EAAE,GAAGvD,WAAAA;AACxC,IAAA,IAAIsD,WAAa,EAAA;QACf,MAAMtM,KAAAA,GAAQ8L,iBAAiBtO,KAAOK,EAAAA,KAAAA,CAAAA;AACtC,QAAA,IAAIyO,WAAc,GAAA;AAAEzO,YAAAA,KAAAA;AAAOL,YAAAA,KAAAA;AAAOwC,YAAAA;AAAM,SAAA,CAAA,KAAO,KAAO,EAAA;YACpDuM,cAAiB,GAAA;AAAE1O,gBAAAA,KAAAA;AAAOL,gBAAAA;AAAM,aAAA,CAAA;YAChC,OAAO,KAAA;AACT;AACF;AACF;AAEO,SAASgP,SAAAA,CAAU3O,KAAY,EAAEL,KAAiB,EAAA;IACvD,IAAIK,KAAAA,CAAM4O,MAAM,EAAE;AAChB,QAAA,MAAMzM,KAAQoM,GAAAA,mBAAAA,CAAoB5O,KAAOK,EAAAA,KAAAA;;AACzC,QAAA,IAAI6O,cAAe1M,CAAAA,KAAAA,EAAOnC,KAAM4O,CAAAA,MAAM,CAAG,EAAA;AACvC,YAAA;AACF;AACF;AACA,IAAA,MAAMpM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM,EAAEiH,GAAKsF,EAAAA,UAAU,EAAE/H,IAAAA,EAAM2G,WAAc,GAAA,EAAE,EAAE,GAAG3I,KAAAA,CAAMN,OAAO;AACjE,IAAA,IACEvC,KAAMmP,CAAAA,MAAM,KAAK,CAAA,IACjBpP,UAAWL,CAAAA,cAAAA,CAAekN,UAAa5M,CAAAA,EAAAA,KAAAA,CAAAA,IACvCC,aAAcP,CAAAA,cAAAA,CAAe8L,WAAY4D,CAAAA,IAAI,GAAGpP,KAChD,CAAA,EAAA;QACA,OAAOwL,WAAAA,CAAYuD,cAAc,GAAG;AAAE1O,YAAAA,KAAAA;AAAOL,YAAAA;AAAM,SAAA,CAAA;AACrD;AAEA,IAAA,IAAI6O,SAAUxO,CAAAA,KAAAA,EAAOL,KAAOwL,EAAAA,WAAAA,CAAAA,KAAiB,KAAO,EAAA;AAClD,QAAA;AACF;AACA3I,IAAAA,KAAAA,CAAMqL,SAAS,GAAGlO,KAAAA;AAElB4N,IAAAA,UAAAA,CAAWvN,OAAOA,KAAMkO,CAAAA,MAAM,CAACc,aAAa,EAAE,WAAapB,EAAAA,SAAAA,CAAAA;AAC3DL,IAAAA,UAAAA,CAAWvN,KAAOiP,EAAAA,MAAAA,CAAOC,QAAQ,EAAE,SAAWlB,EAAAA,OAAAA,CAAAA;AAChD;AAEA,SAASmB,iBACP,EAAEC,KAAK,EAAEC,GAAG,EAAsE,EAClFC,WAAmB,EAAA;AAEnB,IAAA,IAAInH,KAAQkH,GAAAA,GAAAA,CAAIlP,CAAC,GAAGiP,MAAMjP,CAAC;AAC3B,IAAA,IAAIiI,MAASiH,GAAAA,GAAAA,CAAIjP,CAAC,GAAGgP,MAAMhP,CAAC;AAC5B,IAAA,MAAMmP,KAAQvL,GAAAA,IAAAA,CAAKyE,GAAG,CAACN,KAAQC,GAAAA,MAAAA,CAAAA;AAE/B,IAAA,IAAImH,QAAQD,WAAa,EAAA;AACvBnH,QAAAA,KAAAA,GAAQnE,KAAKsI,IAAI,CAACnE,SAASnE,IAAKyE,CAAAA,GAAG,CAACL,MAASkH,GAAAA,WAAAA,CAAAA;KACxC,MAAA,IAAIC,QAAQD,WAAa,EAAA;AAC9BlH,QAAAA,MAAAA,GAASpE,KAAKsI,IAAI,CAAClE,UAAUpE,IAAKyE,CAAAA,GAAG,CAACN,KAAQmH,GAAAA,WAAAA,CAAAA;AAChD;AAEAD,IAAAA,GAAAA,CAAIlP,CAAC,GAAGiP,KAAMjP,CAAAA,CAAC,GAAGgI,KAAAA;AAClBkH,IAAAA,GAAAA,CAAIjP,CAAC,GAAGgP,KAAMhP,CAAAA,CAAC,GAAGgI,MAAAA;AACpB;AAGA,SAASoH,gBACPC,CAAAA,IAAU,EACV1E,SAAoB,EACpB2E,MAAoC,EACpC,EAAE/L,GAAG,EAAEM,GAAG,EAAEwB,IAAI,EAAyD,EAAA;IAEzEgK,IAAI,CAAC9L,IAAI,GAAGuJ,KAAAA,CAAMlJ,KAAKL,GAAG,CAAC+L,MAAON,CAAAA,KAAK,CAAC3J,IAAAA,CAAK,EAAEiK,MAAOL,CAAAA,GAAG,CAAC5J,IAAAA,CAAK,CAAGsF,EAAAA,SAAS,CAACpH,GAAI,CAAA,EAAEoH,SAAS,CAAC9G,GAAI,CAAA,CAAA;IAChGwL,IAAI,CAACxL,IAAI,GAAGiJ,KAAAA,CAAMlJ,KAAKC,GAAG,CAACyL,MAAON,CAAAA,KAAK,CAAC3J,IAAAA,CAAK,EAAEiK,MAAOL,CAAAA,GAAG,CAAC5J,IAAAA,CAAK,CAAGsF,EAAAA,SAAS,CAACpH,GAAI,CAAA,EAAEoH,SAAS,CAAC9G,GAAI,CAAA,CAAA;AAClG;AAEA,SAAS0L,iBACP3P,CAAAA,KAAY,EACZ4P,WAA2D,EAC3DC,mBAA6B,EAAA;AAE7B,IAAA,MAAMH,MAAS,GAAA;QACbN,KAAOnB,EAAAA,gBAAAA,CAAiB2B,WAAY/B,CAAAA,SAAS,EAAE7N,KAAAA,CAAAA;QAC/CqP,GAAKpB,EAAAA,gBAAAA,CAAiB2B,WAAY9B,CAAAA,OAAO,EAAE9N,KAAAA;AAC7C,KAAA;AAEA,IAAA,IAAI6P,mBAAqB,EAAA;QACvB,MAAMP,WAAAA,GAActP,MAAM+K,SAAS,CAAC5C,KAAK,GAAGnI,KAAAA,CAAM+K,SAAS,CAAC3C,MAAM;AAClE+G,QAAAA,gBAAAA,CAAiBO,MAAQJ,EAAAA,WAAAA,CAAAA;AAC3B;IAEA,OAAOI,MAAAA;AACT;AAEO,SAASI,gBACd9P,KAAY,EACZF,IAA4B,EAC5B8P,WAA2D,EAC3DC,mBAAwC,EAAA;IAExC,MAAMzE,QAAAA,GAAWvL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;IAC7C,MAAMqL,QAAAA,GAAWxL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;AAC7C,IAAA,MAAM,EAAEmB,GAAG,EAAEE,IAAI,EAAEC,KAAK,EAAEF,MAAM,EAAE+G,KAAAA,EAAO4H,UAAU,EAAE3H,MAAAA,EAAQ4H,WAAW,EAAE,GAAGhQ,MAAM+K,SAAS;AAC5F,IAAA,MAAM0E,IAAO,GAAA;AAAEtO,QAAAA,GAAAA;AAAKE,QAAAA,IAAAA;AAAMC,QAAAA,KAAAA;AAAOF,QAAAA;AAAO,KAAA;AAExC,IAAA,MAAMsO,MAASC,GAAAA,iBAAAA,CAAkB3P,KAAO4P,EAAAA,WAAAA,EAAaC,uBAAuBzE,QAAYC,IAAAA,QAAAA,CAAAA;AAExF,IAAA,IAAID,QAAU,EAAA;AACZoE,QAAAA,gBAAAA,CAAiBC,IAAMzP,EAAAA,KAAAA,CAAM+K,SAAS,EAAE2E,MAAQ,EAAA;YAAE/L,GAAK,EAAA,MAAA;YAAQM,GAAK,EAAA,OAAA;YAASwB,IAAM,EAAA;AAAI,SAAA,CAAA;AACzF;AAEA,IAAA,IAAI4F,QAAU,EAAA;AACZmE,QAAAA,gBAAAA,CAAiBC,IAAMzP,EAAAA,KAAAA,CAAM+K,SAAS,EAAE2E,MAAQ,EAAA;YAAE/L,GAAK,EAAA,KAAA;YAAOM,GAAK,EAAA,QAAA;YAAUwB,IAAM,EAAA;AAAI,SAAA,CAAA;AACzF;AAEA,IAAA,MAAM0C,KAAQsH,GAAAA,IAAAA,CAAKnO,KAAK,GAAGmO,KAAKpO,IAAI;AACpC,IAAA,MAAM+G,MAASqH,GAAAA,IAAAA,CAAKrO,MAAM,GAAGqO,KAAKtO,GAAG;IAErC,OAAO;AACL,QAAA,GAAGsO,IAAI;AACPtH,QAAAA,KAAAA;AACAC,QAAAA,MAAAA;QACA6H,KAAO7E,EAAAA,QAAAA,IAAYjD,QAAQ,CAAI,GAAC4H,CAAAA,UAAa5H,GAAAA,KAAI,IAAK4H,UAAa,GAAA,CAAA;QACnEG,KAAO7E,EAAAA,QAAAA,IAAYjD,SAAS,CAAI,GAAC4H,CAAAA,WAAc5H,GAAAA,MAAK,IAAK4H,WAAc,GAAA;AACzE,KAAA;AACF;AAEO,SAASG,OAAAA,CAAQnQ,KAAY,EAAEL,KAAiB,EAAA;AACrD,IAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,IAAI,CAACwC,KAAMqL,CAAAA,SAAS,EAAE;AACpB,QAAA;AACF;AAEAV,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrB,IAAA,MAAM,EAAEF,IAAI,EAAEiM,cAAc,EAAEgD,IAAI,EAAE,GAAGvM,KAAMN,CAAAA,OAAO,CAACsC,IAAI,IAAI,EAAC;IAC9D,MAAM,EAAE4L,YAAY,CAAC,EAAEP,mBAAmB,EAAE,GAAGd,QAAQ,EAAC;IACxD,MAAMU,IAAAA,GAAOK,eAAgB9P,CAAAA,KAAAA,EAAOF,IAAM,EAAA;AAAE+N,QAAAA,SAAAA,EAAWrL,MAAMqL,SAAS;QAAEC,OAASnO,EAAAA;KAASkQ,EAAAA,mBAAAA,CAAAA;AAC1F,IAAA,MAAMQ,YAAYxQ,gBAAiBC,CAAAA,IAAAA,EAAM,KAAKE,KAASyP,CAAAA,GAAAA,IAAAA,CAAKtH,KAAK,GAAG,CAAA;AACpE,IAAA,MAAMmI,YAAYzQ,gBAAiBC,CAAAA,IAAAA,EAAM,KAAKE,KAASyP,CAAAA,GAAAA,IAAAA,CAAKrH,MAAM,GAAG,CAAA;AACrE,IAAA,MAAMmI,WAAWvM,IAAKwM,CAAAA,IAAI,CAACH,SAAAA,GAAYA,YAAYC,SAAYA,GAAAA,SAAAA,CAAAA;AAG/D9N,IAAAA,KAAAA,CAAMqL,SAAS,GAAGrL,KAAMsL,CAAAA,OAAO,GAAGrO,SAAAA;AAElC,IAAA,IAAI8Q,YAAYH,SAAW,EAAA;AACzB5N,QAAAA,KAAAA,CAAMO,QAAQ,GAAG,KAAA;AACjB/C,QAAAA,KAAAA,CAAM+N,IAAI,EAAA;AACV,QAAA;AACF;AAEAvC,IAAAA,QAAAA,CAASxL,KAAO,EAAA;AAAEG,QAAAA,CAAAA,EAAGsP,KAAKpO,IAAI;AAAEjB,QAAAA,CAAAA,EAAGqP,KAAKtO;KAAO,EAAA;AAAEhB,QAAAA,CAAAA,EAAGsP,KAAKnO,KAAK;AAAElB,QAAAA,CAAAA,EAAGqP,KAAKrO;AAAO,KAAA,EAAG,MAAQ,EAAA,MAAA,CAAA;AAE1FoB,IAAAA,KAAAA,CAAMO,QAAQ,GAAG,KAAA;AACjBP,IAAAA,KAAAA,CAAMyK,eAAe,GAAG,IAAA;IACxBlB,cAAiB,GAAA;AAAE/L,QAAAA;AAAM,KAAA,CAAA;AAC3B;AAEA,SAASyQ,kBAAmBzQ,CAAAA,KAAY,EAAEL,KAAiB,EAAEwL,WAAwB,EAAA;AAEnF,IAAA,IAAIvL,aAAcP,CAAAA,cAAAA,CAAe8L,WAAYuF,CAAAA,KAAK,GAAG/Q,KAAQ,CAAA,EAAA;AAC3DwL,QAAAA,WAAAA,CAAYuD,cAAc,GAAG;AAAE1O,YAAAA,KAAAA;AAAOL,YAAAA;AAAM,SAAA,CAAA;AAC5C,QAAA;AACF;AAEA,IAAA,IAAI6O,SAAUxO,CAAAA,KAAAA,EAAOL,KAAOwL,EAAAA,WAAAA,CAAAA,KAAiB,KAAO,EAAA;AAClD,QAAA;AACF;IAGA,IAAIxL,KAAAA,CAAMgR,UAAU,EAAE;AACpBhR,QAAAA,KAAAA,CAAMiR,cAAc,EAAA;AACtB;IAIA,IAAIjR,KAAAA,CAAMkR,MAAM,KAAKpR,SAAW,EAAA;AAC9B,QAAA;AACF;IACA,OAAO,IAAA;AACT;AAEO,SAASiR,KAAAA,CAAM1Q,KAAY,EAAEL,KAAkD,EAAA;AACpF,IAAA,MAAM,EACJiD,QAAAA,EAAU,EAAEmJ,cAAc,EAAE,EAC5B7J,OAAAA,EAAS,EAAEsC,IAAAA,EAAM2G,cAAc,EAAE,EAAE,EACpC,GAAG5I,QAASvC,CAAAA,KAAAA,CAAAA;AAEb,IAAA,IAAI,CAACyQ,kBAAAA,CAAmBzQ,KAAOL,EAAAA,KAAAA,EAAOwL,WAAc,CAAA,EAAA;AAClD,QAAA;AACF;IAEA,MAAMsE,IAAAA,GAAO9P,KAAM0N,CAAAA,MAAM,EAAEe,qBAAAA,EAAAA;IAC3B,MAAM0C,KAAAA,GAAQ3F,WAAauF,EAAAA,KAAAA,EAAOI,KAAS,IAAA,GAAA;IAC3C,MAAMC,UAAAA,GAAapR,KAAMkR,CAAAA,MAAM,IAAI,CAAA,GAAI,CAAI,GAAA,CAAA,IAAK,CAAA,GAAIC,KAAI,CAAA,GAAK,CAAIA,GAAAA,KAAAA;AACjE,IAAA,MAAMnG,MAAS,GAAA;QACbxK,CAAG4Q,EAAAA,UAAAA;QACH3Q,CAAG2Q,EAAAA,UAAAA;QACH7F,UAAY,EAAA;AACV/K,YAAAA,CAAAA,EAAGR,KAAM0O,CAAAA,OAAO,GAAGoB,IAAAA,CAAKpO,IAAI;AAC5BjB,YAAAA,CAAAA,EAAGT,KAAM2O,CAAAA,OAAO,GAAGmB,IAAAA,CAAKtO;AAC1B;AACF,KAAA;IAEAqD,IAAKxE,CAAAA,KAAAA,EAAO2K,QAAQ,MAAQ,EAAA,OAAA,CAAA;IAE5BoB,cAAiBpM,GAAAA,KAAAA,CAAAA;AACnB;AAEA,SAASqR,oBACPhR,KAAY,EACZiR,IAAiB,EACjB7D,OAAuD,EACvD7M,KAAa,EAAA;AAEb,IAAA,IAAI6M,OAAS,EAAA;AACX7K,QAAAA,QAAAA,CAASvC,OAAO4C,QAAQ,CAACqO,KAAK,GAAG5Q,QAAAA,CAAS,IAAM+M,OAAU,GAAA;AAAEpN,gBAAAA;aAAUO,CAAAA,EAAAA,KAAAA,CAAAA;AACxE;AACF;AAEO,SAAS2Q,YAAAA,CAAalR,KAAY,EAAEkC,OAA0B,EAAA;IACnE,MAAMgM,MAAAA,GAASlO,MAAMkO,MAAM;AAC3B,IAAA,MAAM,EAAEwC,KAAAA,EAAOS,YAAY,EAAEpC,IAAMqC,EAAAA,WAAW,EAAErF,cAAc,EAAE,GAAG7J,OAAQsC,CAAAA,IAAI,IAAI,EAAC;AAKpF,IAAA,IAAI2M,cAAc5R,OAAS,EAAA;QACzBgO,UAAWvN,CAAAA,KAAAA,EAAOkO,QAAQ,OAASwC,EAAAA,KAAAA,CAAAA;QACnCM,mBAAoBhR,CAAAA,KAAAA,EAAO,kBAAkB+L,cAAgB,EAAA,GAAA,CAAA;KACxD,MAAA;AACLoB,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,OAAA,CAAA;AACvB;AACA,IAAA,IAAIoR,aAAa7R,OAAS,EAAA;QACxBgO,UAAWvN,CAAAA,KAAAA,EAAOkO,QAAQ,WAAaS,EAAAA,SAAAA,CAAAA;AACvCpB,QAAAA,UAAAA,CAAWvN,KAAOkO,EAAAA,MAAAA,CAAOc,aAAa,EAAE,SAAWmB,EAAAA,OAAAA,CAAAA;KAC9C,MAAA;AACLhD,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACrBmN,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACvB;AACF;AAEO,SAASqR,gBAAgBrR,KAAY,EAAA;AAC1CmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,OAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,OAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACvB;;AClTA,SAASsR,aAAAA,CAActR,KAAY,EAAEwC,KAAY,EAAA;IAC/C,OAAO,SAAU+O,WAAgB,EAAE5R,KAAkB,EAAA;QACnD,MAAM,EAAEsH,GAAKsF,EAAAA,UAAU,EAAE/H,IAAAA,EAAM2G,WAAc,GAAA,EAAE,EAAE,GAAG3I,KAAAA,CAAMN,OAAO;AACjE,QAAA,IAAI,CAACqK,UAAAA,IAAc,CAACA,UAAAA,CAAWhN,OAAO,EAAE;YACtC,OAAO,KAAA;AACT;QACA,MAAMiS,QAAAA,GAAW7R,KAASA,IAAAA,KAAAA,CAAM6R,QAAQ;AACxC,QAAA,IAAI,CAACA,QAAU,EAAA;YAEb,OAAO,IAAA;AACT;AACA,QAAA,IACE,CAAChP,KAAMQ,CAAAA,OAAO,IACdrD,KAAM8R,CAAAA,WAAW,KAAK,OACrB7R,KAAAA,cAAcP,cAAekN,CAAAA,UAAAA,CAAAA,EAAaiF,aAAa9R,UAAWL,CAAAA,cAAAA,CAAe8L,YAAY4D,IAAI,CAAA,EAAGyC,SAAQ,CAC7G,EAAA;AACAjF,YAAAA,UAAAA,CAAWmF,aAAa,GAAG;AAAE1R,gBAAAA,KAAAA;AAAOL,gBAAAA;AAAM,aAAA,CAAA;YAC1C,OAAO,KAAA;AACT;QACA,OAAO,IAAA;AACT,KAAA;AACF;AAEA,SAASgS,SAAAA,CAAUlG,EAAwC,EAAEC,EAAwC,EAAA;IAEnG,MAAMkG,MAAAA,GAAS5N,KAAKyE,GAAG,CAACgD,GAAG4C,OAAO,GAAG3C,GAAG2C,OAAO,CAAA;IAC/C,MAAMwD,MAAAA,GAAS7N,KAAKyE,GAAG,CAACgD,GAAG6C,OAAO,GAAG5C,GAAG4C,OAAO,CAAA;AAG/C,IAAA,MAAMwD,IAAIF,MAASC,GAAAA,MAAAA;AACnB,IAAA,IAAI1R,CAAGC,EAAAA,CAAAA;IACP,IAAI0R,CAAAA,GAAI,GAAOA,IAAAA,CAAAA,GAAI,GAAK,EAAA;AACtB3R,QAAAA,CAAAA,GAAIC,CAAI,GAAA,IAAA;KACH,MAAA,IAAIwR,SAASC,MAAQ,EAAA;QAC1B1R,CAAI,GAAA,IAAA;KACC,MAAA;QACLC,CAAI,GAAA,IAAA;AACN;IACA,OAAO;AAAED,QAAAA,CAAAA;AAAGC,QAAAA;AAAE,KAAA;AAChB;AAEA,SAAS2R,WAAY/R,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;IAC7D,IAAIxP,KAAAA,CAAMtB,KAAK,EAAE;AACf,QAAA,MAAM,EAAEuD,MAAM,EAAEwN,QAAQ,EAAE,GAAGD,CAAAA;AAE7B,QAAA,MAAME,cAAc,CAAC,GAAI1P,MAAMtB,KAAK,GAAI8Q,EAAE9Q,KAAK;AAC/C,QAAA,MAAMuO,IAAOuC,GAAAA,CAAAA,CAAE3E,MAAM,CAACe,qBAAqB,EAAA;QAC3C,MAAM+D,KAAAA,GAAQR,UAAUM,QAAQ,CAAC,EAAE,EAAEA,QAAQ,CAAC,CAAE,CAAA,CAAA;AAChD,QAAA,MAAMnS,IAAO0C,GAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAE1E,IAAAA;AACjC,QAAA,MAAM6K,MAAS,GAAA;AACbxK,YAAAA,CAAAA,EAAGgS,MAAMhS,CAAC,IAAIN,iBAAiBC,IAAM,EAAA,GAAA,EAAKE,SAASkS,WAAc,GAAA,CAAA;AACjE9R,YAAAA,CAAAA,EAAG+R,MAAM/R,CAAC,IAAIP,iBAAiBC,IAAM,EAAA,GAAA,EAAKE,SAASkS,WAAc,GAAA,CAAA;YACjEhH,UAAY,EAAA;AACV/K,gBAAAA,CAAAA,EAAGsE,MAAOtE,CAAAA,CAAC,GAAGsP,IAAAA,CAAKpO,IAAI;AACvBjB,gBAAAA,CAAAA,EAAGqE,MAAOrE,CAAAA,CAAC,GAAGqP,IAAAA,CAAKtO;AACrB;AACF,SAAA;QAEAqD,IAAKxE,CAAAA,KAAAA,EAAO2K,QAAQ,MAAQ,EAAA,OAAA,CAAA;QAG5BnI,KAAMtB,CAAAA,KAAK,GAAG8Q,CAAAA,CAAE9Q,KAAK;AACvB;AACF;AAEA,SAASkR,UAAWpS,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;AAC5D,IAAA,IAAIxP,MAAMN,OAAO,CAACsC,IAAI,EAAE2N,OAAO5S,OAAS,EAAA;AACtC,QAAA,MAAM4C,QAAQoM,mBAAoByD,CAAAA,CAAAA,CAAER,QAAQ,EAAExR;;AAC9C,QAAA,IAAIwC,KAAMN,CAAAA,OAAO,CAACsC,IAAI,EAAEiK,WAAc,GAAA;AAAEzO,YAAAA,KAAAA;AAAOL,YAAAA,KAAAA,EAAOqS,EAAER,QAAQ;AAAErP,YAAAA;AAAM,SAAA,CAAA,KAAO,KAAO,EAAA;AACpFK,YAAAA,KAAAA,CAAMtB,KAAK,GAAG,IAAA;AACdsB,YAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAEkK,cAAiB,GAAA;AAAE1O,gBAAAA,KAAAA;AAAOL,gBAAAA,KAAAA,EAAOqS,EAAER;AAAS,aAAA,CAAA;SAC3D,MAAA;AACLhP,YAAAA,KAAAA,CAAMtB,KAAK,GAAG,CAAA;AAChB;AACF;AACF;AAEA,SAASmR,QAASrS,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;IAC1D,IAAIxP,KAAAA,CAAMtB,KAAK,EAAE;AACf6Q,QAAAA,WAAAA,CAAY/R,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA;QAC1BxP,KAAMtB,CAAAA,KAAK,GAAG;;AACdsB,QAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAEuH,cAAiB,GAAA;AAAE/L,YAAAA;AAAM,SAAA,CAAA;AAC/C;AACF;AAEA,SAASsS,SAAUtS,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;IAC3D,MAAM9M,KAAAA,GAAQ1C,MAAM0C,KAAK;AACzB,IAAA,IAAIA,KAAO,EAAA;AACT1C,QAAAA,KAAAA,CAAMQ,OAAO,GAAG,IAAA;AAChBiE,QAAAA,GAAAA,CACEjH,KACA,EAAA;AAAEG,YAAAA,CAAAA,EAAG6R,CAAEO,CAAAA,MAAM,GAAGrN,KAAAA,CAAM/E,CAAC;AAAEC,YAAAA,CAAAA,EAAG4R,CAAEnB,CAAAA,MAAM,GAAG3L,KAAAA,CAAM9E;AAAE,SAAA,EAC/CoC,MAAMgQ,SAAS,IAAIhQ,KAAMgQ,CAAAA,SAAS,CAACC,GAAG,CAAC,CAACzR,CAAAA,GAAMhB,MAAMY,MAAM,CAACI,CAAE,CAAA,CAAA,CAAE0R,MAAM,CAAC/J,OAAAA,CAAAA,CAAAA;AAExEnG,QAAAA,KAAAA,CAAM0C,KAAK,GAAG;AAAE/E,YAAAA,CAAAA,EAAG6R,EAAEO,MAAM;AAAEnS,YAAAA,CAAAA,EAAG4R,EAAEnB;AAAO,SAAA;AAC3C;AACF;AAEA,SAAS8B,QAAS3S,CAAAA,KAAY,EAAEwC,KAAY,EAAE7C,KAAkB,EAAA;AAC9D,IAAA,MAAM,EAAEJ,OAAO,EAAEqT,UAAU,EAAElB,aAAa,EAAE,GAAGlP,KAAMN,CAAAA,OAAO,CAAC+E,GAAG,IAAI,EAAC;AACrE,IAAA,IAAI,CAAC1H,OAAS,EAAA;AACZ,QAAA;AACF;AACA,IAAA,MAAMkQ,IAAO9P,GAAAA,KAAAA,CAAM0N,MAAM,CAACe,qBAAqB,EAAA;AAC/C,IAAA,MAAMjM,KAAQ,GAAA;AACZhC,QAAAA,CAAAA,EAAGR,MAAM8E,MAAM,CAACtE,CAAC,GAAGsP,KAAKpO,IAAI;AAC7BjB,QAAAA,CAAAA,EAAGT,MAAM8E,MAAM,CAACrE,CAAC,GAAGqP,KAAKtO;AAC3B,KAAA;AAEA,IAAA,IAAIyR,UAAa,GAAA;AAAE5S,QAAAA,KAAAA;AAAOL,QAAAA,KAAAA;AAAOwC,QAAAA;AAAM,KAAA,CAAA,KAAO,KAAO,EAAA;AACnD,QAAA,OAAOuP,aAAgB,GAAA;AAAE1R,YAAAA,KAAAA;AAAOL,YAAAA;AAAM,SAAA,CAAA;AACxC;AAEA6C,IAAAA,KAAAA,CAAMgQ,SAAS,GAAGvQ,uBAAwBO,CAAAA,KAAAA,CAAMN,OAAO,CAAC+E,GAAG,EAAE9E,KAAAA,EAAOnC,OAAOyS,GAAG,CAAC,CAACzR,CAAAA,GAAMA,EAAEsE,EAAE,CAAA;AAC1F9C,IAAAA,KAAAA,CAAM0C,KAAK,GAAG;QAAE/E,CAAG,EAAA,CAAA;QAAGC,CAAG,EAAA;AAAE,KAAA;AAC3BkS,IAAAA,SAAAA,CAAUtS,OAAOwC,KAAO7C,EAAAA,KAAAA,CAAAA;AAC1B;AAEA,SAASkT,MAAAA,CAAO7S,KAAY,EAAEwC,KAAY,EAAA;AACxCA,IAAAA,KAAAA,CAAM0C,KAAK,GAAG,IAAA;IACd,IAAI1C,KAAAA,CAAMQ,OAAO,EAAE;AACjBR,QAAAA,KAAAA,CAAMQ,OAAO,GAAG,KAAA;AAChBR,QAAAA,KAAAA,CAAMyK,eAAe,GAAG,IAAA;AACxBzK,QAAAA,KAAAA,CAAMN,OAAO,CAAC+E,GAAG,EAAE6L,aAAgB,GAAA;AAAE9S,YAAAA;AAAM,SAAA,CAAA;AAC7C;AACF;AAEA,MAAM+S,UAAU,IAAIzQ,OAAAA,EAAAA;AACb,SAAS0Q,WAAAA,CAAYhT,KAAY,EAAEkC,OAA0B,EAAA;AAClE,IAAA,MAAMM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAMkO,MAAAA,GAASlO,MAAMkO,MAAM;AAC3B,IAAA,MAAM,EAAEjH,GAAKsF,EAAAA,UAAU,EAAE/H,IAAM2G,EAAAA,WAAW,EAAE,GAAGjJ,OAAAA;AAE/C,IAAA,MAAM+Q,EAAK,GAAA,IAAIC,MAAOC,CAAAA,OAAO,CAACjF,MAAAA,CAAAA;IAC9B,IAAI/C,WAAAA,EAAagH,OAAO5S,OAAS,EAAA;AAC/B0T,QAAAA,EAAAA,CAAGG,GAAG,CAAC,IAAIF,MAAAA,CAAOG,KAAK,EAAA,CAAA;AACvBJ,QAAAA,EAAAA,CAAGK,EAAE,CAAC,YAAA,EAAc,CAACtB,CAAMI,GAAAA,UAAAA,CAAWpS,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AACpDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,OAAA,EAAS,CAACtB,CAAMD,GAAAA,WAAAA,CAAY/R,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAChDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,UAAA,EAAY,CAACtB,CAAMK,GAAAA,QAAAA,CAASrS,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAClD;IAEA,IAAIzF,UAAAA,IAAcA,UAAWhN,CAAAA,OAAO,EAAE;AACpC0T,QAAAA,EAAAA,CAAGG,GAAG,CACJ,IAAIF,MAAAA,CAAOK,GAAG,CAAC;AACbnD,YAAAA,SAAAA,EAAW7D,WAAW6D,SAAS;AAC/BoD,YAAAA,MAAAA,EAAQlC,cAActR,KAAOwC,EAAAA,KAAAA;AAC/B,SAAA,CAAA,CAAA;AAEFyQ,QAAAA,EAAAA,CAAGK,EAAE,CAAC,UAAA,EAAY,CAACtB,CAAMW,GAAAA,QAAAA,CAAS3S,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAChDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,SAAA,EAAW,CAACtB,CAAMM,GAAAA,SAAAA,CAAUtS,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAChDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,QAAU,EAAA,IAAMT,OAAO7S,KAAOwC,EAAAA,KAAAA,CAAAA,CAAAA;AACtC;IAEAuQ,OAAQ9P,CAAAA,GAAG,CAACjD,KAAOiT,EAAAA,EAAAA,CAAAA;AACrB;AAEO,SAASQ,WAAWzT,KAAY,EAAA;IACrC,MAAMiT,EAAAA,GAAKF,OAAQtQ,CAAAA,GAAG,CAACzC,KAAAA,CAAAA;AACvB,IAAA,IAAIiT,EAAI,EAAA;AACNA,QAAAA,EAAAA,CAAGS,MAAM,CAAC,YAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,OAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,UAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,UAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,KAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,QAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGU,OAAO,EAAA;AACVZ,QAAAA,OAAAA,CAAQ5P,MAAM,CAACnD,KAAAA,CAAAA;AACjB;AACF;AAEO,SAAS4T,oBAAAA,CAAqBC,UAA6B,EAAEC,UAA6B,EAAA;AAC/F,IAAA,MAAM,EAAE7M,GAAK8M,EAAAA,MAAM,EAAEvP,IAAMwP,EAAAA,OAAO,EAAE,GAAGH,UAAAA;AACvC,IAAA,MAAM,EAAE5M,GAAKgN,EAAAA,MAAM,EAAEzP,IAAM0P,EAAAA,OAAO,EAAE,GAAGJ,UAAAA;AAEvC,IAAA,IAAIE,OAAS7B,EAAAA,KAAAA,EAAO5S,OAAY2U,KAAAA,OAAAA,EAAS/B,OAAO5S,OAAS,EAAA;QACvD,OAAO,IAAA;AACT;IACA,IAAIwU,MAAAA,EAAQxU,OAAY0U,KAAAA,MAAAA,EAAQ1U,OAAS,EAAA;QACvC,OAAO,IAAA;AACT;IACA,IAAIwU,MAAAA,EAAQ3D,SAAc6D,KAAAA,MAAAA,EAAQ7D,SAAW,EAAA;QAC3C,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;;;;AC/LO,MAAM+D,QAA8B,GAAA;IACzClN,GAAK,EAAA;QACH1H,OAAS,EAAA,KAAA;QACTO,IAAM,EAAA,IAAA;QACNsQ,SAAW,EAAA,EAAA;QACX5Q,WAAa,EAAA;AACf,KAAA;IACAgF,IAAM,EAAA;QACJkM,KAAO,EAAA;YACLnR,OAAS,EAAA,KAAA;YACTuR,KAAO,EAAA,GAAA;YACPtR,WAAa,EAAA;AACf,SAAA;QACAuP,IAAM,EAAA;YACJxP,OAAS,EAAA,KAAA;YACT6U,QAAU,EAAA,oBAAA;YACV5U,WAAa,EAAA;AACf,SAAA;QACA2S,KAAO,EAAA;YACL5S,OAAS,EAAA;AACX,SAAA;QACAO,IAAM,EAAA;AACR;AACF,CAAC;;ACFD,SAASiO,IAAK/N,CAAAA,KAAY,EAAEqU,MAAc,EAAEnS,OAA0B,EAAA;IACpE,MAAMkP,WAAAA,GAAclP,OAAQsC,CAAAA,IAAI,EAAEuK,IAAAA;AAClC,IAAA,MAAM,EAAElB,SAAS,EAAEC,OAAO,EAAE,GAAGvL,QAASvC,CAAAA,KAAAA,CAAAA;AAExC,IAAA,IAAIoR,aAAagD,QAAaC,KAAAA,MAAAA,IAAU,CAACxG,SAAAA,IAAa,CAACC,OAAS,EAAA;AAC9D,QAAA;AACF;AACA,IAAA,MAAM,EAAEzM,IAAI,EAAEF,GAAG,EAAEgH,KAAK,EAAEC,MAAM,EAAE,GAAG0H,eACnC9P,CAAAA,KAAAA,EACAkC,OAAQsC,CAAAA,IAAI,EAAE1E,IACd,EAAA;AAAE+N,QAAAA,SAAAA;AAAWC,QAAAA;AAAQ,KAAA,EACrBsD,YAAYvB,mBAAmB,CAAA;IAEjC,MAAMyE,GAAAA,GAAMtU,MAAMsU,GAAG;AAErBA,IAAAA,GAAAA,CAAIC,IAAI,EAAA;AACRD,IAAAA,GAAAA,CAAIE,SAAS,EAAA;AACbF,IAAAA,GAAAA,CAAIG,SAAS,GAAGrD,WAAYsD,CAAAA,eAAe,IAAI,uBAAA;AAC/CJ,IAAAA,GAAAA,CAAIK,QAAQ,CAACtT,IAAMF,EAAAA,GAAAA,EAAKgH,KAAOC,EAAAA,MAAAA,CAAAA;IAE/B,IAAIgJ,WAAAA,CAAYwD,WAAW,EAAE;QAC3BN,GAAIO,CAAAA,SAAS,GAAGzD,WAAAA,CAAYwD,WAAW;AACvCN,QAAAA,GAAAA,CAAIQ,WAAW,GAAG1D,WAAY2D,CAAAA,WAAW,IAAI,mBAAA;AAC7CT,QAAAA,GAAAA,CAAIU,UAAU,CAAC3T,IAAMF,EAAAA,GAAAA,EAAKgH,KAAOC,EAAAA,MAAAA,CAAAA;AACnC;AACAkM,IAAAA,GAAAA,CAAIW,OAAO,EAAA;AACb;AAEA,MAAMC,UAAU,CAAClV,KAAAA,GAAAA;IACfA,KAAMiH,CAAAA,GAAG,GAAG,CAAC/B,KAAOsN,EAAAA,SAAAA,EAAWxH,aAAe/D,GAAIjH,CAAAA,KAAAA,EAAOkF,KAAOsN,EAAAA,SAAAA,EAAWxH,UAAY,EAAA,KAAA,CAAA;AACvFhL,IAAAA,KAAAA,CAAMwE,IAAI,GAAG,CAAC2Q,MAAMnK,UAAexG,GAAAA,IAAAA,CAAKxE,OAAOmV,IAAMnK,EAAAA,UAAAA,CAAAA;IACrDhL,KAAMwL,CAAAA,QAAQ,GAAG,CAACC,EAAAA,EAAIC,IAAIV,UAAeQ,GAAAA,QAAAA,CAASxL,KAAOyL,EAAAA,EAAAA,EAAIC,EAAIV,EAAAA,UAAAA,CAAAA;IACjEhL,KAAM2L,CAAAA,SAAS,GAAG,CAACrG,EAAAA,EAAI1B,OAAOoH,UAAeW,GAAAA,SAAAA,CAAU3L,KAAOsF,EAAAA,EAAAA,EAAI1B,KAAOoH,EAAAA,UAAAA,CAAAA;AACzEhL,IAAAA,KAAAA,CAAM6L,SAAS,GAAG,CAACb,UAAAA,GAAea,UAAU7L,KAAOgL,EAAAA,UAAAA,CAAAA;IACnDhL,KAAMiM,CAAAA,YAAY,GAAG,IAAMA,YAAajM,CAAAA,KAAAA,CAAAA;IACxCA,KAAMyM,CAAAA,qBAAqB,GAAG,IAAMA,qBAAsBzM,CAAAA,KAAAA,CAAAA;IAC1DA,KAAM2M,CAAAA,oBAAoB,GAAG,IAAMA,oBAAqB3M,CAAAA,KAAAA,CAAAA;IACxDA,KAAM4M,CAAAA,gBAAgB,GAAG,IAAMA,gBAAiB5M,CAAAA,KAAAA,CAAAA;IAChDA,KAAMgN,CAAAA,kBAAkB,GAAG,IAAMA,kBAAmBhN,CAAAA,KAAAA,CAAAA;AACtD,CAAA;AAEA,aAAe;IACbsF,EAAI,EAAA,MAAA;AAEJ8P,IAAAA,OAAAA;AAEAjB,IAAAA,QAAAA;AAEAkB,IAAAA,KAAAA,CAAAA,CAAMrV,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AAC5D,QAAA,MAAMM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvBwC,QAAAA,KAAAA,CAAMN,OAAO,GAAGA,OAAAA;QAEhB,IAAIpB,MAAAA,CAAOyU,SAAS,CAACC,cAAc,CAACC,IAAI,CAACvT,OAAAA,CAAQsC,IAAI,EAAE,SAAY,CAAA,EAAA;AACjEkR,YAAAA,OAAAA,CAAQC,IAAI,CACV,kIAAA,CAAA;AAEJ;QACA,IACE7U,MAAAA,CAAOyU,SAAS,CAACC,cAAc,CAACC,IAAI,CAACvT,QAAQsC,IAAI,EAAE,oBACnD1D,MAAOyU,CAAAA,SAAS,CAACC,cAAc,CAACC,IAAI,CAACvT,OAAAA,CAAQ+E,GAAG,EAAE,eAClD,CAAA,EAAA;AACAyO,YAAAA,OAAAA,CAAQC,IAAI,CACV,0GAAA,CAAA;AAEJ;AAEA,QAAA,IAAIzC,MAAQ,EAAA;AACVF,YAAAA,WAAAA,CAAYhT,KAAOkC,EAAAA,OAAAA,CAAAA;AACrB;QAEAgT,OAAQlV,CAAAA,KAAAA,CAAAA;AACV,KAAA;AAEA4V,IAAAA,WAAAA,CAAAA,CACE5V,KAAY,EACZ,EAAEL,KAAK,EAAkF,EAAA;AAEzF,QAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,QAAA,IAAI+M,wBAAwBvK,KAAQ,CAAA,EAAA;YAElC,OAAO,KAAA;AACT;AAEA,QAAA,IAAI7C,MAAM0D,IAAI,KAAK,WAAW1D,KAAM0D,CAAAA,IAAI,KAAK,SAAW,EAAA;YACtD,IAAIb,KAAAA,CAAMyK,eAAe,EAAE;AACzBzK,gBAAAA,KAAAA,CAAMyK,eAAe,GAAG,KAAA;gBACxB,OAAO,KAAA;AACT;AACF;AACF,KAAA;AAEA4I,IAAAA,YAAAA,CAAAA,CAAa7V,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACnE,QAAA,MAAMM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;QACvB,MAAM8V,eAAAA,GAAkBtT,MAAMN,OAAO;AACrCM,QAAAA,KAAAA,CAAMN,OAAO,GAAGA,OAAAA;QAGhB,IAAI0R,oBAAAA,CAAqBkC,iBAAiB5T,OAAU,CAAA,EAAA;YAClDuR,UAAWzT,CAAAA,KAAAA,CAAAA;AACXgT,YAAAA,WAAAA,CAAYhT,KAAOkC,EAAAA,OAAAA,CAAAA;AACrB;AAEAgP,QAAAA,YAAAA,CAAalR,KAAOkC,EAAAA,OAAAA,CAAAA;AACtB,KAAA;AAEA6T,IAAAA,kBAAAA,CAAAA,CAAmB/V,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACzE6L,QAAAA,IAAAA,CAAK/N,OAAO,oBAAsBkC,EAAAA,OAAAA,CAAAA;AACpC,KAAA;AAEA8T,IAAAA,iBAAAA,CAAAA,CAAkBhW,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACxE6L,QAAAA,IAAAA,CAAK/N,OAAO,mBAAqBkC,EAAAA,OAAAA,CAAAA;AACnC,KAAA;AAEA+T,IAAAA,UAAAA,CAAAA,CAAWjW,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACjE6L,QAAAA,IAAAA,CAAK/N,OAAO,YAAckC,EAAAA,OAAAA,CAAAA;AAC5B,KAAA;AAEAgU,IAAAA,SAAAA,CAAAA,CAAUlW,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AAChE6L,QAAAA,IAAAA,CAAK/N,OAAO,WAAakC,EAAAA,OAAAA,CAAAA;AAC3B,KAAA;AAEAiU,IAAAA,IAAAA,CAAAA,CAAKnW,KAAY,EAAA;QACfqR,eAAgBrR,CAAAA,KAAAA,CAAAA;AAEhB,QAAA,IAAIkT,MAAQ,EAAA;YACVO,UAAWzT,CAAAA,KAAAA,CAAAA;AACb;QACAkD,WAAYlD,CAAAA,KAAAA,CAAAA;AACd,KAAA;AAEAoK,IAAAA,YAAAA;AACAL,IAAAA,aAAAA;AACAI,IAAAA;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"chartjs-plugin-zoom.esm.js","sources":["../src/utils.ts","../src/state.ts","../src/scale.types.ts","../src/core.ts","../src/handlers.ts","../src/hammer.ts","../src/defaults.ts","../src/plugin.ts"],"sourcesContent":["import type { Chart, Point, Scale } from 'chart.js'\nimport type { DragOptions, ModeOption, ModifierKey, PanOptions } from './options'\n\nconst eventKey = (key: ModifierKey): 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' => `${key}Key`\n\nexport const getModifierKey = (opts?: DragOptions | PanOptions): ModifierKey | undefined =>\n opts?.enabled && opts.modifierKey ? opts.modifierKey : undefined\nexport const keyPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && event[eventKey(key)]\nexport const keyNotPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && !event[eventKey(key)]\n\nexport function directionEnabled(mode: ModeOption | undefined, dir: 'x' | 'y', chart: Chart): boolean {\n if (mode === undefined) {\n return true\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1\n } else if (typeof mode === 'function') {\n return mode({ chart }).indexOf(dir) !== -1\n }\n\n return false\n}\n\nfunction directionsEnabled(mode: ModeOption | undefined, chart: Chart) {\n if (typeof mode === 'function') {\n mode = mode({ chart })\n }\n if (typeof mode === 'string') {\n return { x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1 }\n }\n\n return { x: false, y: false }\n}\n\nexport function debounce(fn: () => void, delay: number | undefined) {\n let timeout: number | NodeJS.Timeout\n return function () {\n clearTimeout(timeout)\n timeout = setTimeout(fn, delay)\n return delay\n }\n}\n\nfunction getScaleUnderPoint({ x, y }: Point, chart: Chart): Scale | null {\n const scales = chart.scales\n const scaleIds = Object.keys(scales)\n for (let i = 0; i < scaleIds.length; i++) {\n const scale = scales[scaleIds[i]]\n if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n return scale\n }\n }\n return null\n}\n\ntype EnabledDirections = { x: boolean; y: boolean }\n\nconst convertOverScaleMode = (\n chart: Chart,\n overScaleMode: ModeOption | undefined,\n scaleEnabled: EnabledDirections,\n enabled: EnabledDirections\n) => {\n if (!overScaleMode) {\n return\n }\n\n const overScaleEnabled = directionsEnabled(overScaleMode, chart)\n for (const axis of ['x', 'y'] as const) {\n if (overScaleEnabled[axis]) {\n scaleEnabled[axis] = enabled[axis]\n enabled[axis] = false\n }\n }\n}\n\nconst getEnabledScales = (chart: Chart, enabled: EnabledDirections): Scale[] => {\n const enabledScales: Scale[] = []\n\n for (const scaleItem of Object.values(chart.scales)) {\n if (enabled[scaleItem.axis as 'x' | 'y']) {\n enabledScales.push(scaleItem)\n }\n }\n\n return enabledScales || Object.values(chart.scales)\n}\n\n/**\n * Evaluate the chart's mode, scaleMode, and overScaleMode properties to\n * determine which axes are eligible for scaling.\n * options.overScaleMode can be a function if user want zoom only one scale of many for example.\n */\nexport function getEnabledScalesByPoint(options: PanOptions | undefined, point: Point, chart: Chart): Scale[] {\n const { mode = 'xy', scaleMode, overScaleMode } = options || {}\n const scale = getScaleUnderPoint(point, chart)\n\n const enabled = directionsEnabled(mode, chart)\n const scaleEnabled = directionsEnabled(scaleMode, chart)\n\n // Convert deprecated overScaleEnabled to new scaleEnabled.\n convertOverScaleMode(chart, overScaleMode, scaleEnabled, enabled)\n\n if (scale && scaleEnabled[scale.axis as 'x' | 'y']) {\n return [scale]\n }\n\n return getEnabledScales(chart, enabled)\n}\n","import { Chart, type Point } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nexport type ScaleRange = { min: number; max: number }\nexport type OriginalLimits = { min: { scale?: number; options?: unknown }; max: { scale?: number; options?: unknown } }\nexport type OriginalScaleLimits = Record<string, OriginalLimits>\nexport type UpdatedScaleLimits = Record<string, ScaleRange>\n\nexport type HandlerFunctions = {\n click: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n keydown: (chart: Chart, event: KeyboardEvent) => void\n mousedown: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mousemove: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mouseup: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n onZoomComplete: ({ chart }: { chart: Chart }) => void\n wheel: (chart: Chart, event: WheelEvent) => void\n}\nexport type HandlerName = keyof HandlerFunctions\nexport type HandlerFunction = HandlerFunctions[HandlerName]\nexport type Handler = EventListener\nexport type Handlers = Partial<Record<HandlerName, Handler>>\n\nexport type HandlerTarget = Partial<Record<HandlerName, HTMLCanvasElement | Document>>\n\nexport interface State {\n originalScaleLimits: OriginalScaleLimits\n updatedScaleLimits: UpdatedScaleLimits\n handlers: Handlers\n targets: HandlerTarget\n panDelta: Record<string, number>\n dragging: boolean\n panning: boolean\n options: ZoomPluginOptions\n dragStart?: MouseEvent\n dragEnd?: MouseEvent\n filterNextClick?: boolean\n scale?: number | null\n delta?: Point | null\n panScales?: string[]\n}\n\nconst chartStates = new WeakMap<Chart, State>()\n\nexport function getState(chart: Chart): State {\n let state = chartStates.get(chart)\n if (!state) {\n state = {\n originalScaleLimits: {},\n updatedScaleLimits: {},\n handlers: {},\n options: {},\n targets: {},\n panDelta: {},\n dragging: false,\n panning: false,\n }\n chartStates.set(chart, state)\n }\n return state\n}\n\nexport function removeState(chart: Chart) {\n chartStates.delete(chart)\n}\n","import { almostEquals, isNullOrUndef, isNumber, valueOrDefault } from 'chart.js/helpers'\nimport { getState, type ScaleRange, type State } from './state'\nimport type { Point, Scale, TimeScale, TimeUnit } from 'chart.js'\nimport type { LimitOptions, ScaleLimits } from './options'\n\nexport type ZoomFunction = (scale: Scale, zoom: number, center: Point, limits: LimitOptions) => boolean\nexport type ZoomRectFunction = (scale: Scale, from: number, to: number, limits: LimitOptions) => boolean\nexport type PanFunction = (scale: Scale, delta: number, limits: LimitOptions) => boolean\n\nconst isTimeScale = (scale: Scale): scale is TimeScale => scale.type === 'time'\n\nconst isNotNumber = (value?: number): value is undefined => value === undefined || isNaN(value)\n\nexport function zoomDelta(\n val: number | undefined,\n min: number | undefined,\n range: number,\n newRange: number\n): ScaleRange {\n const minPercent = range && isNumber(val) && isNumber(min) ? Math.max(0, Math.min(1, (val - min) / range)) : 0\n const maxPercent = 1 - minPercent\n\n return {\n min: newRange * minPercent,\n max: newRange * maxPercent,\n }\n}\n\nfunction getValueAtPoint(scale: Scale, point: Point): number | undefined {\n const pixel = scale.isHorizontal() ? point.x : point.y\n\n return scale.getValueForPixel(pixel)\n}\n\nfunction linearZoomDelta(scale: Scale, zoom: number, center: Point): ScaleRange {\n const range = scale.max - scale.min\n const newRange = range * (zoom - 1)\n const centerValue = getValueAtPoint(scale, center)\n\n return zoomDelta(centerValue, scale.min, range, newRange)\n}\n\nfunction logarithmicZoomRange(scale: Scale, zoom: number, center: Point) {\n const centerValue = getValueAtPoint(scale, center)\n\n // Return the original range, if value could not be determined.\n if (centerValue === undefined) {\n return { min: scale.min, max: scale.max }\n }\n\n const logMin = Math.log10(scale.min)\n const logMax = Math.log10(scale.max)\n const logCenter = Math.log10(centerValue)\n const logRange = logMax - logMin\n const newLogRange = logRange * (zoom - 1)\n const delta = zoomDelta(logCenter, logMin, logRange, newLogRange)\n\n return {\n min: Math.pow(10, logMin + delta.min),\n max: Math.pow(10, logMax - delta.max),\n }\n}\n\nfunction getScaleLimits(scale: Scale, limits?: LimitOptions): ScaleLimits {\n return limits?.[scale.id] || limits?.[scale.axis] || {}\n}\n\nfunction getLimit(state: State, scale: Scale, scaleLimits: ScaleLimits, prop: 'min' | 'max', fallback: number): number {\n let limit = scaleLimits[prop]\n if (limit === 'original') {\n const original = state.originalScaleLimits[scale.id][prop]\n if (isNumber(original.options)) {\n return original.options\n }\n\n if (!isNullOrUndef(original.options)) {\n const parsed = scale.parse(original.options)\n if (isNumber(parsed)) {\n return parsed\n }\n }\n\n limit = original.scale\n }\n return valueOrDefault(limit, fallback)\n}\n\nfunction linearRange(scale: Scale, pixel0: number, pixel1: number): ScaleRange {\n const v0 = scale.getValueForPixel(pixel0) ?? scale.min\n const v1 = scale.getValueForPixel(pixel1) ?? scale.max\n return {\n min: Math.min(v0, v1),\n max: Math.max(v0, v1),\n }\n}\n\nfunction fixRange(\n range: number,\n { min, max, minLimit, maxLimit }: { min: number; max: number; minLimit: number; maxLimit: number },\n state: State,\n scale: Scale\n) {\n const offset = (range - max + min) / 2\n min -= offset\n max += offset\n\n // In case the values are really close to the original values, use the original values.\n const origLimits: ScaleLimits = { min: 'original', max: 'original' }\n const origMin = getLimit(state, scale, origLimits, 'min', -Infinity)\n const origMax = getLimit(state, scale, origLimits, 'max', Infinity)\n\n const epsilon = range / 1e6\n if (almostEquals(min, origMin, epsilon)) {\n min = origMin\n }\n if (almostEquals(max, origMax, epsilon)) {\n max = origMax\n }\n\n // Apply limits\n if (min < minLimit) {\n min = minLimit\n max = Math.min(minLimit + range, maxLimit)\n } else if (max > maxLimit) {\n max = maxLimit\n min = Math.max(maxLimit - range, minLimit)\n }\n\n return { min, max }\n}\n\nexport function updateRange(\n scale: Scale,\n { min, max }: ScaleRange,\n limits?: LimitOptions,\n zoom = false,\n pan = false\n): boolean {\n const state = getState(scale.chart)\n const { options: scaleOpts } = scale\n\n const scaleLimits = getScaleLimits(scale, limits)\n const { minRange = 0 } = scaleLimits\n const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity)\n const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity)\n\n if (pan && (min < minLimit || max > maxLimit)) {\n // At limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const scaleRange = scale.max - scale.min\n const range = zoom ? Math.max(max - min, minRange) : scaleRange\n\n if (zoom && range === minRange && scaleRange <= minRange) {\n // At range limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const newRange = fixRange(range, { min, max, minLimit, maxLimit }, state, scale)\n\n scaleOpts.min = newRange.min\n scaleOpts.max = newRange.max\n\n state.updatedScaleLimits[scale.id] = newRange\n\n // return true if the scale range is changed\n return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max\n}\n\nfunction zoomNumericalScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n const newRange = { min: scale.min + delta.min, max: scale.max - delta.max }\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomLogarithmicScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const newRange = logarithmicZoomRange(scale, zoom, center)\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomRectNumericalScale(scale: Scale, from: number, to: number, limits: LimitOptions) {\n return updateRange(scale, linearRange(scale, from, to), limits, true)\n}\n\nconst integerChange = (v: number) =>\n v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1)\n\nfunction existCategoryFromMaxZoom(scale: Scale) {\n const labels = scale.getLabels()\n const maxIndex = labels.length - 1\n\n if (scale.min > 0) {\n scale.min -= 1\n }\n if (scale.max < maxIndex) {\n scale.max += 1\n }\n}\n\nfunction zoomCategoryScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n if (scale.min === scale.max && zoom < 1) {\n existCategoryFromMaxZoom(scale)\n }\n const newRange = { min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max) }\n\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction scaleLength(scale: Scale) {\n return scale.isHorizontal() ? scale.width : scale.height\n}\n\nfunction panCategoryScale(scale: Scale, delta: number, limits: LimitOptions) {\n const labels = scale.getLabels()\n const lastLabelIndex = labels.length - 1\n let { min, max } = scale\n // The visible range. Ticks can be skipped, and thus not reliable.\n const range = Math.max(max - min, 1)\n // How many pixels of delta is required before making a step. stepSize, but limited to max 1/10 of the scale length.\n const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10))\n const stepSize = Math.round(Math.abs(delta / stepDelta))\n let applied\n if (delta < -stepDelta) {\n max = Math.min(max + stepSize, lastLabelIndex)\n min = range === 1 ? max : max - range\n applied = max === lastLabelIndex\n } else if (delta > stepDelta) {\n min = Math.max(0, min - stepSize)\n max = range === 1 ? min : min + range\n applied = min === 0\n }\n\n return updateRange(scale, { min, max }, limits) || Boolean(applied)\n}\n\nconst OFFSETS: Record<TimeUnit, number> = {\n millisecond: 0,\n second: 500, // 500 ms\n minute: 30 * 1000, // 30 s\n hour: 30 * 60 * 1000, // 30 m\n day: 12 * 60 * 60 * 1000, // 12 h\n week: 3.5 * 24 * 60 * 60 * 1000, // 3.5 d\n month: 15 * 24 * 60 * 60 * 1000, // 15 d\n quarter: 60 * 24 * 60 * 60 * 1000, // 60 d\n year: 182 * 24 * 60 * 60 * 1000, // 182 d\n}\n\nfunction panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) {\n const { min: prevStart, max: prevEnd } = scale\n let offset = 0\n if (isTimeScale(scale)) {\n const round = scale.options.time?.round\n offset = round ? OFFSETS[round] : 0\n }\n const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta)\n const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta)\n if (isNotNumber(newMin) || isNotNumber(newMax)) {\n // NaN can happen for 0-dimension scales (either because they were configured\n // with min === max or because the chart has 0 plottable area).\n return true\n }\n return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true)\n}\n\nfunction panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) {\n return panNumericalScale(scale, delta, limits, true)\n}\n\nexport const zoomFunctions: Record<string, ZoomFunction> = {\n category: zoomCategoryScale,\n default: zoomNumericalScale,\n logarithmic: zoomLogarithmicScale,\n}\n\nexport const zoomRectFunctions: Record<string, ZoomRectFunction> = {\n default: zoomRectNumericalScale,\n}\n\nexport const panFunctions: Record<string, PanFunction> = {\n category: panCategoryScale,\n default: panNumericalScale,\n logarithmic: panNonLinearScale,\n timeseries: panNonLinearScale,\n}\n","import { isNumber, sign } from 'chart.js/helpers'\nimport { panFunctions, updateRange, zoomFunctions, zoomRectFunctions } from './scale.types.js'\nimport { getState, type OriginalScaleLimits, type ScaleRange, type State, type UpdatedScaleLimits } from './state.js'\nimport { directionEnabled, getEnabledScalesByPoint } from './utils.js'\nimport type { Chart, Point, Scale, UpdateMode } from 'chart.js'\nimport type { LimitOptions, ZoomTrigger } from './options.js'\nimport type { ZoomAmount } from './types.js'\n\nfunction shouldUpdateScaleLimits(\n scale: Scale,\n originalScaleLimits: OriginalScaleLimits,\n updatedScaleLimits: UpdatedScaleLimits\n) {\n const {\n id,\n options: { min, max },\n } = scale\n if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n return true\n }\n const previous = updatedScaleLimits[id]\n return previous.min !== min || previous.max !== max\n}\n\nfunction removeMissingScales(limits: OriginalScaleLimits | UpdatedScaleLimits, scales: Record<string, Scale>) {\n for (const key of Object.keys(limits)) {\n if (!scales[key]) {\n delete limits[key]\n }\n }\n}\n\nfunction storeOriginalScaleLimits(chart: Chart, state: State) {\n const { scales } = chart\n const { originalScaleLimits, updatedScaleLimits } = state\n\n for (const scale of Object.values(scales)) {\n if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n originalScaleLimits[scale.id] = {\n min: { scale: scale.min, options: scale.options.min },\n max: { scale: scale.max, options: scale.options.max },\n }\n }\n }\n\n removeMissingScales(originalScaleLimits, scales)\n removeMissingScales(updatedScaleLimits, scales)\n return originalScaleLimits\n}\n\nfunction doZoom(scale: Scale, amount: number, center: Point, limits: LimitOptions) {\n const fn = zoomFunctions[scale.type] || zoomFunctions.default\n fn?.(scale, amount, center, limits)\n}\n\nfunction doZoomRect(scale: Scale, from: number, to: number, limits: LimitOptions) {\n const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default\n fn?.(scale, from, to, limits)\n}\n\nfunction getCenter(chart: Chart) {\n const ca = chart.chartArea\n return {\n x: (ca.left + ca.right) / 2,\n y: (ca.top + ca.bottom) / 2,\n }\n}\n\nexport function zoom(chart: Chart, amount: ZoomAmount, transition: UpdateMode = 'none', trigger: ZoomTrigger = 'api') {\n const { x = 1, y = 1, focalPoint = getCenter(chart) } = typeof amount === 'number' ? { x: amount, y: amount } : amount\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions },\n } = state\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 1\n const yEnabled = y !== 1\n const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart)\n\n for (const scale of enabledScales) {\n if (scale.isHorizontal() && xEnabled) {\n doZoom(scale, x, focalPoint, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoom(scale, y, focalPoint, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions?.onZoom?.({ chart, trigger })\n}\n\nexport function zoomRect(\n chart: Chart,\n p0: Point,\n p1: Point,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions = {} },\n } = state\n const { mode = 'xy' } = zoomOptions\n\n storeOriginalScaleLimits(chart, state)\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n\n for (const scale of Object.values(chart.scales)) {\n if (scale.isHorizontal() && xEnabled) {\n doZoomRect(scale, p0.x, p1.x, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoomRect(scale, p0.y, p1.y, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions.onZoom?.({ chart, trigger })\n}\n\nexport function zoomScale(\n chart: Chart,\n scaleId: string,\n range: ScaleRange,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scale = chart.scales[scaleId]\n updateRange(scale, range, undefined, true)\n chart.update(transition)\n\n state.options.zoom?.onZoom?.({ chart, trigger })\n}\n\nexport function resetZoom(chart: Chart, transition: UpdateMode = 'default') {\n const state = getState(chart)\n const originalScaleLimits = storeOriginalScaleLimits(chart, state)\n\n for (const scale of Object.values(chart.scales)) {\n const scaleOptions = scale.options\n if (originalScaleLimits[scale.id]) {\n scaleOptions.min = originalScaleLimits[scale.id].min.options\n scaleOptions.max = originalScaleLimits[scale.id].max.options\n } else {\n delete scaleOptions.min\n delete scaleOptions.max\n }\n delete state.updatedScaleLimits[scale.id]\n }\n chart.update(transition)\n\n state.options.zoom?.onZoomComplete?.({ chart })\n}\n\nfunction getOriginalRange(state: State, scaleId: string): number | undefined {\n const original = state.originalScaleLimits[scaleId]\n if (!original) {\n return undefined\n }\n const { min, max } = original\n if (isNumber(max.options) && isNumber(min.options)) {\n return max.options - min.options\n }\n if (isNumber(max.scale) && isNumber(min.scale)) {\n return max.scale - min.scale\n }\n return undefined\n}\n\nexport function getZoomLevel(chart: Chart) {\n const state = getState(chart)\n let min = 1\n let max = 1\n for (const scale of Object.values(chart.scales)) {\n const origRange = getOriginalRange(state, scale.id)\n if (origRange) {\n const level = Math.round((origRange / (scale.max - scale.min)) * 100) / 100\n min = Math.min(min, level)\n max = Math.max(max, level)\n }\n }\n return min < 1 ? min : max\n}\n\nfunction panScale(scale: Scale, delta: number, limits: LimitOptions, state: State) {\n const { panDelta } = state\n // Add possible cumulative delta from previous pan attempts where scale did not change\n const storedDelta = panDelta[scale.id] || 0\n if (sign(storedDelta) === sign(delta)) {\n delta += storedDelta\n }\n const fn = panFunctions[scale.type] || panFunctions.default\n if (fn?.(scale, delta, limits)) {\n // The scale changed, reset cumulative delta\n panDelta[scale.id] = 0\n } else {\n // The scale did not change, store cumulative delta\n panDelta[scale.id] = delta\n }\n}\n\ntype PanAmount = number | Partial<Point>\n\nexport function pan(chart: Chart, delta: PanAmount, enabledScales?: Scale[], transition: UpdateMode = 'none') {\n const { x = 0, y = 0 } = typeof delta === 'number' ? { x: delta, y: delta } : delta\n const state = getState(chart)\n const {\n options: { pan: panOptions, limits = {} },\n } = state\n const { onPan } = panOptions || {}\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 0\n const yEnabled = y !== 0\n\n const scales = enabledScales || Object.values(chart.scales)\n\n for (const scale of scales) {\n if (scale.isHorizontal() && xEnabled) {\n panScale(scale, x, limits, state)\n } else if (!scale.isHorizontal() && yEnabled) {\n panScale(scale, y, limits, state)\n }\n }\n\n chart.update(transition)\n\n onPan?.({ chart })\n}\n\nexport function getInitialScaleBounds(chart: Chart) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n const { min, max } = state.originalScaleLimits[scaleId] || { min: {}, max: {} }\n scaleBounds[scaleId] = { min: min.scale, max: max.scale }\n }\n\n return scaleBounds\n}\n\nexport function getZoomedScaleBounds(chart: Chart) {\n const state = getState(chart)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n scaleBounds[scaleId] = state.updatedScaleLimits[scaleId]\n }\n\n return scaleBounds\n}\n\nexport function isZoomedOrPanned(chart: Chart) {\n const scaleBounds = getInitialScaleBounds(chart)\n for (const scaleId of Object.keys(chart.scales)) {\n const { min: originalMin, max: originalMax } = scaleBounds[scaleId]\n\n if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n return true\n }\n\n if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n return true\n }\n }\n\n return false\n}\n\nexport function isZoomingOrPanningState(state: State) {\n return state.panning || state.dragging\n}\n\nexport function isZoomingOrPanning(chart: Chart) {\n const state = getState(chart)\n // From the perspective of outside callers, zooming and panning are still\n // active if we haven't yet cleared the next click.\n return !!(isZoomingOrPanningState(state) || state.filterNextClick)\n}\n","import { directionEnabled, debounce, keyNotPressed, getModifierKey, keyPressed } from './utils'\nimport { zoom, zoomRect } from './core'\nimport { getRelativePosition, _isPointInArea } from 'chart.js/helpers'\nimport { getState, type HandlerFunctions, type HandlerName } from './state'\nimport type { Chart, ChartArea, Point } from 'chart.js'\nimport type { ModeOption, ZoomOptions, ZoomPluginOptions } from './options'\n\nconst clamp = (x: number, from: number, to: number): number => Math.min(to, Math.max(from, x))\n\nfunction removeHandler(chart: Chart, type: HandlerName) {\n const { handlers, targets } = getState(chart)\n const handler = handlers[type]\n const target = targets[type]\n if (handler && target) {\n target.removeEventListener(type, handler)\n delete handlers[type]\n }\n}\n\ntype EventHandler<T extends Event> = (chart: Chart, event: T, options: ZoomPluginOptions) => void\n\nfunction addHandler<T extends Event>(\n chart: Chart,\n target: HTMLCanvasElement | Document,\n type: HandlerName,\n handler: EventHandler<T>\n) {\n const { handlers, options, targets } = getState(chart)\n const oldHandler = handlers[type]\n if (oldHandler && targets[type] === target) {\n // already attached\n return\n }\n removeHandler(chart, type)\n const listener = (handlers[type] = (event) => handler(chart, event as T, options))\n targets[type] = target\n\n // `passive: false` for wheel events, to prevent chrome warnings. Use default value for other events.\n const passive = type === 'wheel' ? false : undefined\n target.addEventListener(type, listener, { passive })\n}\n\nexport function mouseMove(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (state.dragStart) {\n state.dragging = true\n state.dragEnd = event\n chart.draw()\n }\n}\n\nfunction keyDown(chart: Chart, event: KeyboardEvent) {\n const state = getState(chart)\n if (!state.dragStart || event.key !== 'Escape') {\n return\n }\n\n removeHandler(chart, 'keydown')\n state.dragging = false\n state.dragStart = state.dragEnd = undefined\n chart.draw()\n}\n\nfunction getPointPosition(event: MouseEvent, chart: Chart) {\n if (event.target !== chart.canvas) {\n const canvasArea = chart.canvas.getBoundingClientRect()\n return {\n x: event.clientX - canvasArea.left,\n y: event.clientY - canvasArea.top,\n }\n }\n return getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n}\n\nfunction zoomStart(chart: Chart, event: MouseEvent, zoomOptions: ZoomOptions): boolean | void {\n const { onZoomStart, onZoomRejected } = zoomOptions\n if (onZoomStart) {\n const point = getPointPosition(event, chart)\n if (onZoomStart?.({ chart, event, point }) === false) {\n onZoomRejected?.({ chart, event })\n return false\n }\n }\n}\n\nexport function mouseDown(chart: Chart, event: MouseEvent): void {\n if (chart.legend) {\n const point = getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (_isPointInArea(point, chart.legend)) {\n return\n }\n }\n const state = getState(chart)\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (\n event.button !== 0 ||\n keyPressed(getModifierKey(panOptions), event) ||\n keyNotPressed(getModifierKey(zoomOptions.drag), event)\n ) {\n return zoomOptions.onZoomRejected?.({ chart, event })\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n state.dragStart = event\n\n addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove)\n addHandler(chart, window.document, 'keydown', keyDown)\n}\n\nfunction applyAspectRatio(\n { begin, end }: { begin: { x: number; y: number }; end: { x: number; y: number } },\n aspectRatio: number\n) {\n let width = end.x - begin.x\n let height = end.y - begin.y\n const ratio = Math.abs(width / height)\n\n if (ratio > aspectRatio) {\n width = Math.sign(width) * Math.abs(height * aspectRatio)\n } else if (ratio < aspectRatio) {\n height = Math.sign(height) * Math.abs(width / aspectRatio)\n }\n\n end.x = begin.x + width\n end.y = begin.y + height\n}\n\ntype Rect = { top?: number; left?: number; right?: number; bottom?: number }\nfunction applyMinMaxProps(\n rect: Rect,\n chartArea: ChartArea,\n points: { begin: Point; end: Point },\n { min, max, prop }: { min: keyof Rect; max: keyof Rect; prop: 'x' | 'y' }\n) {\n rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n}\n\nfunction getRelativePoints(\n chart: Chart,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio?: boolean\n) {\n const points = {\n begin: getPointPosition(pointEvents.dragStart, chart),\n end: getPointPosition(pointEvents.dragEnd, chart),\n }\n\n if (maintainAspectRatio) {\n const aspectRatio = chart.chartArea.width / chart.chartArea.height\n applyAspectRatio(points, aspectRatio)\n }\n\n return points\n}\n\nexport function computeDragRect(\n chart: Chart,\n mode: ModeOption | undefined,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio: boolean | undefined\n) {\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n const { top, left, right, bottom, width: chartWidth, height: chartHeight } = chart.chartArea\n const rect = { top, left, right, bottom }\n\n const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled)\n\n if (xEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'left', max: 'right', prop: 'x' })\n }\n\n if (yEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'top', max: 'bottom', prop: 'y' })\n }\n\n const width = rect.right - rect.left\n const height = rect.bottom - rect.top\n\n return {\n ...rect,\n width,\n height,\n zoomX: xEnabled && width ? 1 + (chartWidth - width) / chartWidth : 1,\n zoomY: yEnabled && height ? 1 + (chartHeight - height) / chartHeight : 1,\n }\n}\n\nexport function mouseUp(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (!state.dragStart) {\n return\n }\n\n removeHandler(chart, 'mousemove')\n const { mode, onZoomComplete, drag } = state.options.zoom ?? {}\n const { threshold = 0, maintainAspectRatio } = drag ?? {}\n const rect = computeDragRect(chart, mode, { dragStart: state.dragStart, dragEnd: event }, maintainAspectRatio)\n const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0\n const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY)\n\n // Remove drag start and end before chart render to stop drawing selected area\n state.dragStart = state.dragEnd = undefined\n\n if (distance <= threshold) {\n state.dragging = false\n chart.draw()\n return\n }\n\n zoomRect(chart, { x: rect.left, y: rect.top }, { x: rect.right, y: rect.bottom }, 'zoom', 'drag')\n\n state.dragging = false\n state.filterNextClick = true\n onZoomComplete?.({ chart })\n}\n\nfunction wheelPreconditions(chart: Chart, event: WheelEvent, zoomOptions: ZoomOptions): true | void {\n // Before preventDefault, check if the modifier key required and pressed\n if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n zoomOptions.onZoomRejected?.({ chart, event })\n return\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n\n // Prevent the event from triggering the default behavior (e.g. content scrolling).\n if (event.cancelable) {\n event.preventDefault()\n }\n\n // Firefox always fires the wheel event twice:\n // First without the delta and right after that once with the delta properties.\n if (event.deltaY === undefined) {\n return\n }\n return true\n}\n\nexport function wheel(chart: Chart, event: WheelEvent & { target?: HTMLCanvasElement }) {\n const {\n handlers: { onZoomComplete },\n options: { zoom: zoomOptions = {} },\n } = getState(chart)\n\n if (!wheelPreconditions(chart, event, zoomOptions)) {\n return\n }\n\n const rect = event.target?.getBoundingClientRect()\n const speed = zoomOptions?.wheel?.speed ?? 0.1\n const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed\n const amount = {\n x: percentage,\n y: percentage,\n focalPoint: {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'wheel')\n\n onZoomComplete?.(event)\n}\n\nfunction addDebouncedHandler(\n chart: Chart,\n name: HandlerName,\n handler: HandlerFunctions['onZoomComplete'] | undefined,\n delay: number\n) {\n if (handler) {\n getState(chart).handlers[name] = debounce(() => handler?.({ chart }), delay)\n }\n}\n\nexport function addListeners(chart: Chart, options: ZoomPluginOptions) {\n const canvas = chart.canvas\n const { wheel: wheelOptions, drag: dragOptions, onZoomComplete } = options.zoom ?? {}\n\n // Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n // We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n // and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n if (wheelOptions?.enabled) {\n addHandler(chart, canvas, 'wheel', wheel)\n addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250)\n } else {\n removeHandler(chart, 'wheel')\n }\n if (dragOptions?.enabled) {\n addHandler(chart, canvas, 'mousedown', mouseDown)\n addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp)\n } else {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'keydown')\n }\n}\n\nexport function removeListeners(chart: Chart) {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'wheel')\n removeHandler(chart, 'click')\n removeHandler(chart, 'keydown')\n}\n","import { getRelativePosition } from 'chart.js/helpers'\nimport Hammer from 'hammerjs'\nimport { pan, zoom } from './core'\nimport { getState, type State } from './state'\nimport { directionEnabled, getEnabledScalesByPoint, getModifierKey, keyNotPressed, keyPressed } from './utils'\nimport type { Chart } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nfunction createEnabler(chart: Chart, state: State) {\n return function (_recognizer: any, event: HammerInput) {\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (!panOptions || !panOptions.enabled) {\n return false\n }\n const srcEvent = event && event.srcEvent\n if (!srcEvent) {\n // Sometimes Hammer queries this with a null event.\n return true\n }\n if (\n !state.panning &&\n event.pointerType === 'mouse' &&\n (keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n ) {\n panOptions.onPanRejected?.({ chart, event })\n return false\n }\n return true\n }\n}\n\nfunction pinchAxes(p0: { clientX: number; clientY: number }, p1: { clientX: number; clientY: number }) {\n // fingers position difference\n const pinchX = Math.abs(p0.clientX - p1.clientX)\n const pinchY = Math.abs(p0.clientY - p1.clientY)\n\n // diagonal fingers will change both (xy) axes\n const p = pinchX / pinchY\n let x, y\n if (p > 0.3 && p < 1.7) {\n x = y = true\n } else if (pinchX > pinchY) {\n x = true\n } else {\n y = true\n }\n return { x, y }\n}\n\nfunction handlePinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n const { center, pointers } = e\n // Hammer reports the total scaling. We need the incremental amount\n const zoomPercent = (1 / state.scale) * e.scale\n const rect = e.target.getBoundingClientRect()\n const pinch = pinchAxes(pointers[0], pointers[1])\n const mode = state.options.zoom?.mode\n const amount = {\n x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n focalPoint: {\n x: center.x - rect.left,\n y: center.y - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'pinch')\n\n // Keep track of overall scale\n state.scale = e.scale\n }\n}\n\nfunction startPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.options.zoom?.pinch?.enabled) {\n const point = getRelativePosition(e.srcEvent, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (state.options.zoom?.onZoomStart?.({ chart, event: e.srcEvent, point }) === false) {\n state.scale = null\n state.options.zoom?.onZoomRejected?.({ chart, event: e.srcEvent })\n } else {\n state.scale = 1\n }\n }\n}\n\nfunction endPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n handlePinch(chart, state, e)\n state.scale = null // reset\n state.options.zoom?.onZoomComplete?.({ chart })\n }\n}\n\nfunction handlePan(chart: Chart, state: State, e: HammerInput) {\n const delta = state.delta\n if (delta) {\n state.panning = true\n pan(\n chart,\n { x: e.deltaX - delta.x, y: e.deltaY - delta.y },\n state.panScales && state.panScales.map((i) => chart.scales[i]).filter(Boolean)\n )\n state.delta = { x: e.deltaX, y: e.deltaY }\n }\n}\n\nfunction startPan(chart: Chart, state: State, event: HammerInput) {\n const { enabled, onPanStart, onPanRejected } = state.options.pan ?? {}\n if (!enabled) {\n return\n }\n const rect = event.target.getBoundingClientRect()\n const point = {\n x: event.center.x - rect.left,\n y: event.center.y - rect.top,\n }\n\n if (onPanStart?.({ chart, event, point }) === false) {\n return onPanRejected?.({ chart, event })\n }\n\n state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart).map((i) => i.id)\n state.delta = { x: 0, y: 0 }\n handlePan(chart, state, event)\n}\n\nfunction endPan(chart: Chart, state: State) {\n state.delta = null\n if (state.panning) {\n state.panning = false\n state.filterNextClick = true\n state.options.pan?.onPanComplete?.({ chart })\n }\n}\n\nconst hammers = new WeakMap()\nexport function startHammer(chart: Chart, options: ZoomPluginOptions) {\n const state = getState(chart)\n const canvas = chart.canvas\n const { pan: panOptions, zoom: zoomOptions } = options\n\n const mc = new Hammer.Manager(canvas)\n if (zoomOptions?.pinch?.enabled) {\n mc.add(new Hammer.Pinch())\n mc.on('pinchstart', (e) => startPinch(chart, state, e))\n mc.on('pinch', (e) => handlePinch(chart, state, e))\n mc.on('pinchend', (e) => endPinch(chart, state, e))\n }\n\n if (panOptions && panOptions.enabled) {\n mc.add(\n new Hammer.Pan({\n threshold: panOptions.threshold,\n enable: createEnabler(chart, state),\n })\n )\n mc.on('panstart', (e) => startPan(chart, state, e))\n mc.on('panmove', (e) => handlePan(chart, state, e))\n mc.on('panend', () => endPan(chart, state))\n }\n\n hammers.set(chart, mc)\n}\n\nexport function stopHammer(chart: Chart) {\n const mc = hammers.get(chart)\n if (mc) {\n mc.remove('pinchstart')\n mc.remove('pinch')\n mc.remove('pinchend')\n mc.remove('panstart')\n mc.remove('pan')\n mc.remove('panend')\n mc.destroy()\n hammers.delete(chart)\n }\n}\n\nexport function hammerOptionsChanged(oldOptions: ZoomPluginOptions, newOptions: ZoomPluginOptions) {\n const { pan: oldPan, zoom: oldZoom } = oldOptions\n const { pan: newPan, zoom: newZoom } = newOptions\n\n if (oldZoom?.pinch?.enabled !== newZoom?.pinch?.enabled) {\n return true\n }\n if (oldPan?.enabled !== newPan?.enabled) {\n return true\n }\n if (oldPan?.threshold !== newPan?.threshold) {\n return true\n }\n\n return false\n}\n","import type { ZoomPluginOptions } from './options'\n\nexport const defaults: ZoomPluginOptions = {\n pan: {\n enabled: false,\n mode: 'xy',\n threshold: 10,\n modifierKey: null,\n },\n zoom: {\n wheel: {\n enabled: false,\n speed: 0.1,\n modifierKey: null,\n },\n drag: {\n enabled: false,\n drawTime: 'beforeDatasetsDraw',\n modifierKey: null,\n },\n pinch: {\n enabled: false,\n },\n mode: 'xy',\n },\n}\n","import Hammer from 'hammerjs'\nimport { addListeners, computeDragRect, removeListeners } from './handlers'\nimport { hammerOptionsChanged, startHammer, stopHammer } from './hammer'\nimport {\n pan,\n zoom,\n resetZoom,\n zoomScale,\n getZoomLevel,\n getInitialScaleBounds,\n getZoomedScaleBounds,\n isZoomedOrPanned,\n isZoomingOrPanning,\n isZoomingOrPanningState,\n zoomRect,\n} from './core'\nimport { panFunctions, zoomFunctions, zoomRectFunctions } from './scale.types'\nimport { getState, removeState } from './state'\nimport { version } from '../package.json'\nimport type { Chart, ChartEvent } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\nimport { defaults } from './defaults'\n\nfunction draw(chart: Chart, caller: string, options: ZoomPluginOptions) {\n const dragOptions = options.zoom?.drag\n const { dragStart, dragEnd } = getState(chart)\n\n if (dragOptions?.drawTime !== caller || !dragStart || !dragEnd) {\n return\n }\n const { left, top, width, height } = computeDragRect(\n chart,\n options.zoom?.mode,\n { dragStart, dragEnd },\n dragOptions.maintainAspectRatio\n )\n const ctx = chart.ctx\n\n ctx.save()\n ctx.beginPath()\n ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)'\n ctx.fillRect(left, top, width, height)\n\n if (dragOptions.borderWidth) {\n ctx.lineWidth = dragOptions.borderWidth\n ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)'\n ctx.strokeRect(left, top, width, height)\n }\n ctx.restore()\n}\n\nconst bindApi = (chart: Chart) => {\n chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition)\n chart.zoom = (args, transition) => zoom(chart, args, transition)\n chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition)\n chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition)\n chart.resetZoom = (transition) => resetZoom(chart, transition)\n chart.getZoomLevel = () => getZoomLevel(chart)\n chart.getInitialScaleBounds = () => getInitialScaleBounds(chart)\n chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart)\n chart.isZoomedOrPanned = () => isZoomedOrPanned(chart)\n chart.isZoomingOrPanning = () => isZoomingOrPanning(chart)\n}\n\nexport default {\n id: 'zoom',\n\n version,\n\n defaults,\n\n start(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n state.options = options\n\n if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n console.warn(\n 'The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.'\n )\n }\n if (\n Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode') ||\n Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')\n ) {\n console.warn(\n 'The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).'\n )\n }\n\n if (Hammer) {\n startHammer(chart, options)\n }\n\n bindApi(chart)\n },\n\n beforeEvent(\n chart: Chart,\n { event }: { event: ChartEvent; replay: boolean; cancelable: true; inChartArea: boolean }\n ): boolean | void {\n const state = getState(chart)\n if (isZoomingOrPanningState(state)) {\n // cancel any event handling while panning or dragging\n return false\n }\n // cancel the next click or mouseup after drag or pan\n if (event.type === 'click' || event.type === 'mouseup') {\n if (state.filterNextClick) {\n state.filterNextClick = false\n return false\n }\n }\n },\n\n beforeUpdate(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n const previousOptions = state.options\n state.options = options\n\n // Hammer needs to be restarted when certain options change.\n if (hammerOptionsChanged(previousOptions, options)) {\n stopHammer(chart)\n startHammer(chart, options)\n }\n\n addListeners(chart, options)\n },\n\n beforeDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDatasetsDraw', options)\n },\n\n afterDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDatasetsDraw', options)\n },\n\n beforeDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDraw', options)\n },\n\n afterDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDraw', options)\n },\n\n stop(chart: Chart) {\n removeListeners(chart)\n\n if (Hammer) {\n stopHammer(chart)\n }\n removeState(chart)\n },\n\n panFunctions,\n zoomFunctions,\n zoomRectFunctions,\n}\n"],"names":["eventKey","key","getModifierKey","opts","enabled","modifierKey","undefined","keyPressed","event","keyNotPressed","directionEnabled","mode","dir","chart","indexOf","directionsEnabled","x","y","debounce","fn","delay","timeout","clearTimeout","setTimeout","getScaleUnderPoint","scales","scaleIds","Object","keys","i","length","scale","top","bottom","left","right","convertOverScaleMode","overScaleMode","scaleEnabled","overScaleEnabled","axis","getEnabledScales","enabledScales","scaleItem","values","push","getEnabledScalesByPoint","options","point","scaleMode","chartStates","WeakMap","getState","state","get","originalScaleLimits","updatedScaleLimits","handlers","targets","panDelta","dragging","panning","set","removeState","delete","isTimeScale","type","isNotNumber","value","isNaN","zoomDelta","val","min","range","newRange","minPercent","isNumber","Math","max","maxPercent","getValueAtPoint","pixel","isHorizontal","getValueForPixel","linearZoomDelta","zoom","center","centerValue","logarithmicZoomRange","logMin","log10","logMax","logCenter","logRange","newLogRange","delta","pow","getScaleLimits","limits","id","getLimit","scaleLimits","prop","fallback","limit","original","isNullOrUndef","parsed","parse","valueOrDefault","linearRange","pixel0","pixel1","v0","v1","fixRange","minLimit","maxLimit","offset","origLimits","origMin","Infinity","origMax","epsilon","almostEquals","updateRange","pan","scaleOpts","minRange","scaleRange","zoomNumericalScale","zoomLogarithmicScale","zoomRectNumericalScale","from","to","integerChange","v","round","existCategoryFromMaxZoom","labels","getLabels","maxIndex","zoomCategoryScale","scaleLength","width","height","panCategoryScale","lastLabelIndex","stepDelta","stepSize","abs","applied","Boolean","OFFSETS","millisecond","second","minute","hour","day","week","month","quarter","year","panNumericalScale","canZoom","prevStart","prevEnd","time","newMin","getPixelForValue","newMax","panNonLinearScale","zoomFunctions","category","default","logarithmic","zoomRectFunctions","panFunctions","timeseries","shouldUpdateScaleLimits","previous","removeMissingScales","storeOriginalScaleLimits","doZoom","amount","doZoomRect","getCenter","ca","chartArea","transition","trigger","focalPoint","zoomOptions","xEnabled","yEnabled","update","onZoom","zoomRect","p0","p1","zoomScale","scaleId","resetZoom","scaleOptions","onZoomComplete","getOriginalRange","getZoomLevel","origRange","level","panScale","storedDelta","sign","panOptions","onPan","getInitialScaleBounds","scaleBounds","getZoomedScaleBounds","isZoomedOrPanned","originalMin","originalMax","isZoomingOrPanningState","isZoomingOrPanning","filterNextClick","clamp","removeHandler","handler","target","removeEventListener","addHandler","oldHandler","listener","passive","addEventListener","mouseMove","dragStart","dragEnd","draw","keyDown","getPointPosition","canvas","canvasArea","getBoundingClientRect","clientX","clientY","getRelativePosition","zoomStart","onZoomStart","onZoomRejected","mouseDown","legend","_isPointInArea","button","drag","ownerDocument","window","document","applyAspectRatio","begin","end","aspectRatio","ratio","applyMinMaxProps","rect","points","getRelativePoints","pointEvents","maintainAspectRatio","computeDragRect","chartWidth","chartHeight","zoomX","zoomY","mouseUp","threshold","distanceX","distanceY","distance","sqrt","wheelPreconditions","wheel","cancelable","preventDefault","deltaY","speed","percentage","addDebouncedHandler","name","addListeners","wheelOptions","dragOptions","removeListeners","createEnabler","_recognizer","srcEvent","pointerType","onPanRejected","pinchAxes","pinchX","pinchY","p","handlePinch","e","pointers","zoomPercent","pinch","startPinch","endPinch","handlePan","deltaX","panScales","map","filter","startPan","onPanStart","endPan","onPanComplete","hammers","startHammer","mc","Hammer","Manager","add","Pinch","on","Pan","enable","stopHammer","remove","destroy","hammerOptionsChanged","oldOptions","newOptions","oldPan","oldZoom","newPan","newZoom","defaults","drawTime","caller","ctx","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","bindApi","args","version","start","_args","prototype","hasOwnProperty","call","console","warn","beforeEvent","beforeUpdate","previousOptions","beforeDatasetsDraw","afterDatasetsDraw","beforeDraw","afterDraw","stop"],"mappings":";;;;;;;;;AAGA,MAAMA,WAAW,CAACC,GAAAA,GAAoE,CAAGA,EAAAA,GAAAA,CAAI,GAAG,CAAC;AAE1F,MAAMC,cAAAA,GAAiB,CAACC,IAAAA,GAC7BA,IAAMC,EAAAA,OAAAA,IAAWD,IAAKE,CAAAA,WAAW,GAAGF,IAAAA,CAAKE,WAAW,GAAGC,SAAS;AAC3D,MAAMC,UAAa,GAAA,CAACN,GAA8BO,EAAAA,KAAAA,GACvDP,OAAOO,KAAK,CAACR,QAASC,CAAAA,GAAAA,CAAAA,CAAK;AACtB,MAAMQ,aAAgB,GAAA,CAACR,GAA8BO,EAAAA,KAAAA,GAC1DP,GAAO,IAAA,CAACO,KAAK,CAACR,QAASC,CAAAA,GAAAA,CAAAA,CAAK;AAEvB,SAASS,gBAAiBC,CAAAA,IAA4B,EAAEC,GAAc,EAAEC,KAAY,EAAA;AACzF,IAAA,IAAIF,SAASL,SAAW,EAAA;QACtB,OAAO,IAAA;KACF,MAAA,IAAI,OAAOK,IAAAA,KAAS,QAAU,EAAA;AACnC,QAAA,OAAOA,IAAKG,CAAAA,OAAO,CAACF,GAAAA,CAAAA,KAAS,CAAC,CAAA;KACzB,MAAA,IAAI,OAAOD,IAAAA,KAAS,UAAY,EAAA;AACrC,QAAA,OAAOA,IAAK,CAAA;AAAEE,YAAAA;SAASC,CAAAA,CAAAA,OAAO,CAACF,GAAAA,CAAAA,KAAS,CAAC,CAAA;AAC3C;IAEA,OAAO,KAAA;AACT;AAEA,SAASG,iBAAAA,CAAkBJ,IAA4B,EAAEE,KAAY,EAAA;IACnE,IAAI,OAAOF,SAAS,UAAY,EAAA;AAC9BA,QAAAA,IAAAA,GAAOA,IAAK,CAAA;AAAEE,YAAAA;AAAM,SAAA,CAAA;AACtB;IACA,IAAI,OAAOF,SAAS,QAAU,EAAA;QAC5B,OAAO;AAAEK,YAAAA,CAAAA,EAAGL,IAAKG,CAAAA,OAAO,CAAC,GAAA,CAAA,KAAS,CAAC,CAAA;AAAGG,YAAAA,CAAAA,EAAGN,IAAKG,CAAAA,OAAO,CAAC,GAAA,CAAA,KAAS,CAAC;AAAE,SAAA;AACpE;IAEA,OAAO;QAAEE,CAAG,EAAA,KAAA;QAAOC,CAAG,EAAA;AAAM,KAAA;AAC9B;AAEO,SAASC,QAAAA,CAASC,EAAc,EAAEC,KAAyB,EAAA;IAChE,IAAIC,OAAAA;IACJ,OAAO,WAAA;QACLC,YAAaD,CAAAA,OAAAA,CAAAA;AACbA,QAAAA,OAAAA,GAAUE,WAAWJ,EAAIC,EAAAA,KAAAA,CAAAA;QACzB,OAAOA,KAAAA;AACT,KAAA;AACF;AAEA,SAASI,mBAAmB,EAAER,CAAC,EAAEC,CAAC,EAAS,EAAEJ,KAAY,EAAA;IACvD,MAAMY,MAAAA,GAASZ,MAAMY,MAAM;IAC3B,MAAMC,QAAAA,GAAWC,MAAOC,CAAAA,IAAI,CAACH,MAAAA,CAAAA;AAC7B,IAAA,IAAK,IAAII,CAAI,GAAA,CAAA,EAAGA,IAAIH,QAASI,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AACxC,QAAA,MAAME,QAAQN,MAAM,CAACC,QAAQ,CAACG,EAAE,CAAC;AACjC,QAAA,IAAIZ,CAAKc,IAAAA,KAAAA,CAAMC,GAAG,IAAIf,KAAKc,KAAME,CAAAA,MAAM,IAAIjB,CAAAA,IAAKe,MAAMG,IAAI,IAAIlB,CAAKe,IAAAA,KAAAA,CAAMI,KAAK,EAAE;YAC9E,OAAOJ,KAAAA;AACT;AACF;IACA,OAAO,IAAA;AACT;AAIA,MAAMK,oBAAuB,GAAA,CAC3BvB,KACAwB,EAAAA,aAAAA,EACAC,YACAlC,EAAAA,OAAAA,GAAAA;AAEA,IAAA,IAAI,CAACiC,aAAe,EAAA;AAClB,QAAA;AACF;IAEA,MAAME,gBAAAA,GAAmBxB,kBAAkBsB,aAAexB,EAAAA,KAAAA,CAAAA;AAC1D,IAAA,KAAK,MAAM2B,IAAQ,IAAA;AAAC,QAAA,GAAA;AAAK,QAAA;KAAI,CAAW;QACtC,IAAID,gBAAgB,CAACC,IAAAA,CAAK,EAAE;AAC1BF,YAAAA,YAAY,CAACE,IAAAA,CAAK,GAAGpC,OAAO,CAACoC,IAAK,CAAA;YAClCpC,OAAO,CAACoC,KAAK,GAAG,KAAA;AAClB;AACF;AACF,CAAA;AAEA,MAAMC,gBAAAA,GAAmB,CAAC5B,KAAcT,EAAAA,OAAAA,GAAAA;AACtC,IAAA,MAAMsC,gBAAyB,EAAE;AAEjC,IAAA,KAAK,MAAMC,SAAahB,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;AACnD,QAAA,IAAIrB,OAAO,CAACuC,SAAUH,CAAAA,IAAI,CAAc,EAAE;AACxCE,YAAAA,aAAAA,CAAcG,IAAI,CAACF,SAAAA,CAAAA;AACrB;AACF;AAEA,IAAA,OAAOD,aAAiBf,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,MAAMY,MAAM,CAAA;AACpD,CAAA;AAMC,CACM,SAASqB,uBAAAA,CAAwBC,OAA+B,EAAEC,KAAY,EAAEnC,KAAY,EAAA;IACjG,MAAM,EAAEF,IAAO,GAAA,IAAI,EAAEsC,SAAS,EAAEZ,aAAa,EAAE,GAAGU,OAAAA,IAAW,EAAC;IAC9D,MAAMhB,KAAAA,GAAQP,mBAAmBwB,KAAOnC,EAAAA,KAAAA,CAAAA;IAExC,MAAMT,OAAAA,GAAUW,kBAAkBJ,IAAME,EAAAA,KAAAA,CAAAA;IACxC,MAAMyB,YAAAA,GAAevB,kBAAkBkC,SAAWpC,EAAAA,KAAAA,CAAAA;IAGlDuB,oBAAqBvB,CAAAA,KAAAA,EAAOwB,eAAeC,YAAclC,EAAAA,OAAAA,CAAAA;AAEzD,IAAA,IAAI2B,SAASO,YAAY,CAACP,KAAMS,CAAAA,IAAI,CAAc,EAAE;QAClD,OAAO;AAACT,YAAAA;AAAM,SAAA;AAChB;AAEA,IAAA,OAAOU,iBAAiB5B,KAAOT,EAAAA,OAAAA,CAAAA;AACjC;;ACpEA,MAAM8C,cAAc,IAAIC,OAAAA,EAAAA;AAEjB,SAASC,SAASvC,KAAY,EAAA;IACnC,IAAIwC,KAAAA,GAAQH,WAAYI,CAAAA,GAAG,CAACzC,KAAAA,CAAAA;AAC5B,IAAA,IAAI,CAACwC,KAAO,EAAA;QACVA,KAAQ,GAAA;AACNE,YAAAA,mBAAAA,EAAqB,EAAC;AACtBC,YAAAA,kBAAAA,EAAoB,EAAC;AACrBC,YAAAA,QAAAA,EAAU,EAAC;AACXV,YAAAA,OAAAA,EAAS,EAAC;AACVW,YAAAA,OAAAA,EAAS,EAAC;AACVC,YAAAA,QAAAA,EAAU,EAAC;YACXC,QAAU,EAAA,KAAA;YACVC,OAAS,EAAA;AACX,SAAA;QACAX,WAAYY,CAAAA,GAAG,CAACjD,KAAOwC,EAAAA,KAAAA,CAAAA;AACzB;IACA,OAAOA,KAAAA;AACT;AAEO,SAASU,YAAYlD,KAAY,EAAA;AACtCqC,IAAAA,WAAAA,CAAYc,MAAM,CAACnD,KAAAA,CAAAA;AACrB;;ACtDA,MAAMoD,WAAc,GAAA,CAAClC,KAAqCA,GAAAA,KAAAA,CAAMmC,IAAI,KAAK,MAAA;AAEzE,MAAMC,WAAc,GAAA,CAACC,KAAuCA,GAAAA,KAAAA,KAAU9D,aAAa+D,KAAMD,CAAAA,KAAAA,CAAAA;AAElF,SAASE,UACdC,GAAuB,EACvBC,GAAuB,EACvBC,KAAa,EACbC,QAAgB,EAAA;AAEhB,IAAA,MAAMC,aAAaF,KAASG,IAAAA,QAAAA,CAASL,QAAQK,QAASJ,CAAAA,GAAAA,CAAAA,GAAOK,KAAKC,GAAG,CAAC,GAAGD,IAAKL,CAAAA,GAAG,CAAC,CAAG,EAACD,CAAAA,GAAMC,GAAAA,GAAE,IAAKC,KAAU,CAAA,CAAA,GAAA,CAAA;AAC7G,IAAA,MAAMM,aAAa,CAAIJ,GAAAA,UAAAA;IAEvB,OAAO;AACLH,QAAAA,GAAAA,EAAKE,QAAWC,GAAAA,UAAAA;AAChBG,QAAAA,GAAAA,EAAKJ,QAAWK,GAAAA;AAClB,KAAA;AACF;AAEA,SAASC,eAAAA,CAAgBjD,KAAY,EAAEiB,KAAY,EAAA;IACjD,MAAMiC,KAAAA,GAAQlD,MAAMmD,YAAY,EAAA,GAAKlC,MAAMhC,CAAC,GAAGgC,MAAM/B,CAAC;IAEtD,OAAOc,KAAAA,CAAMoD,gBAAgB,CAACF,KAAAA,CAAAA;AAChC;AAEA,SAASG,eAAgBrD,CAAAA,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAA;AAChE,IAAA,MAAMb,KAAQ1C,GAAAA,KAAAA,CAAM+C,GAAG,GAAG/C,MAAMyC,GAAG;AACnC,IAAA,MAAME,QAAWD,GAAAA,KAAAA,IAASY,IAAAA,GAAO,CAAA,CAAA;IACjC,MAAME,WAAAA,GAAcP,gBAAgBjD,KAAOuD,EAAAA,MAAAA,CAAAA;AAE3C,IAAA,OAAOhB,SAAUiB,CAAAA,WAAAA,EAAaxD,KAAMyC,CAAAA,GAAG,EAAEC,KAAOC,EAAAA,QAAAA,CAAAA;AAClD;AAEA,SAASc,oBAAqBzD,CAAAA,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAA;IACrE,MAAMC,WAAAA,GAAcP,gBAAgBjD,KAAOuD,EAAAA,MAAAA,CAAAA;AAG3C,IAAA,IAAIC,gBAAgBjF,SAAW,EAAA;QAC7B,OAAO;AAAEkE,YAAAA,GAAAA,EAAKzC,MAAMyC,GAAG;AAAEM,YAAAA,GAAAA,EAAK/C,MAAM+C;AAAI,SAAA;AAC1C;AAEA,IAAA,MAAMW,MAASZ,GAAAA,IAAAA,CAAKa,KAAK,CAAC3D,MAAMyC,GAAG,CAAA;AACnC,IAAA,MAAMmB,MAASd,GAAAA,IAAAA,CAAKa,KAAK,CAAC3D,MAAM+C,GAAG,CAAA;IACnC,MAAMc,SAAAA,GAAYf,IAAKa,CAAAA,KAAK,CAACH,WAAAA,CAAAA;AAC7B,IAAA,MAAMM,WAAWF,MAASF,GAAAA,MAAAA;AAC1B,IAAA,MAAMK,WAAcD,GAAAA,QAAAA,IAAYR,IAAAA,GAAO,CAAA,CAAA;AACvC,IAAA,MAAMU,KAAQzB,GAAAA,SAAAA,CAAUsB,SAAWH,EAAAA,MAAAA,EAAQI,QAAUC,EAAAA,WAAAA,CAAAA;IAErD,OAAO;AACLtB,QAAAA,GAAAA,EAAKK,KAAKmB,GAAG,CAAC,EAAIP,EAAAA,MAAAA,GAASM,MAAMvB,GAAG,CAAA;AACpCM,QAAAA,GAAAA,EAAKD,KAAKmB,GAAG,CAAC,EAAIL,EAAAA,MAAAA,GAASI,MAAMjB,GAAG;AACtC,KAAA;AACF;AAEA,SAASmB,cAAAA,CAAelE,KAAY,EAAEmE,MAAqB,EAAA;AACzD,IAAA,OAAOA,MAAQ,GAACnE,KAAMoE,CAAAA,EAAE,CAAC,IAAID,MAAQ,GAACnE,KAAMS,CAAAA,IAAI,CAAC,IAAI,EAAC;AACxD;AAEA,SAAS4D,QAAAA,CAAS/C,KAAY,EAAEtB,KAAY,EAAEsE,WAAwB,EAAEC,IAAmB,EAAEC,QAAgB,EAAA;IAC3G,IAAIC,KAAAA,GAAQH,WAAW,CAACC,IAAK,CAAA;AAC7B,IAAA,IAAIE,UAAU,UAAY,EAAA;QACxB,MAAMC,QAAAA,GAAWpD,MAAME,mBAAmB,CAACxB,MAAMoE,EAAE,CAAC,CAACG,IAAK,CAAA;QAC1D,IAAI1B,QAAAA,CAAS6B,QAAS1D,CAAAA,OAAO,CAAG,EAAA;AAC9B,YAAA,OAAO0D,SAAS1D,OAAO;AACzB;AAEA,QAAA,IAAI,CAAC2D,aAAAA,CAAcD,QAAS1D,CAAAA,OAAO,CAAG,EAAA;AACpC,YAAA,MAAM4D,MAAS5E,GAAAA,KAAAA,CAAM6E,KAAK,CAACH,SAAS1D,OAAO,CAAA;AAC3C,YAAA,IAAI6B,SAAS+B,MAAS,CAAA,EAAA;gBACpB,OAAOA,MAAAA;AACT;AACF;AAEAH,QAAAA,KAAAA,GAAQC,SAAS1E,KAAK;AACxB;AACA,IAAA,OAAO8E,eAAeL,KAAOD,EAAAA,QAAAA,CAAAA;AAC/B;AAEA,SAASO,WAAY/E,CAAAA,KAAY,EAAEgF,MAAc,EAAEC,MAAc,EAAA;AAC/D,IAAA,MAAMC,KAAKlF,KAAMoD,CAAAA,gBAAgB,CAAC4B,MAAAA,CAAAA,IAAWhF,MAAMyC,GAAG;AACtD,IAAA,MAAM0C,KAAKnF,KAAMoD,CAAAA,gBAAgB,CAAC6B,MAAAA,CAAAA,IAAWjF,MAAM+C,GAAG;IACtD,OAAO;QACLN,GAAKK,EAAAA,IAAAA,CAAKL,GAAG,CAACyC,EAAIC,EAAAA,EAAAA,CAAAA;QAClBpC,GAAKD,EAAAA,IAAAA,CAAKC,GAAG,CAACmC,EAAIC,EAAAA,EAAAA;AACpB,KAAA;AACF;AAEA,SAASC,QACP1C,CAAAA,KAAa,EACb,EAAED,GAAG,EAAEM,GAAG,EAAEsC,QAAQ,EAAEC,QAAQ,EAAoE,EAClGhE,KAAY,EACZtB,KAAY,EAAA;AAEZ,IAAA,MAAMuF,SAAS,CAAC7C,KAAQK,GAAAA,GAAAA,GAAMN,GAAE,IAAK,CAAA;IACrCA,GAAO8C,IAAAA,MAAAA;IACPxC,GAAOwC,IAAAA,MAAAA;AAGP,IAAA,MAAMC,UAA0B,GAAA;QAAE/C,GAAK,EAAA,UAAA;QAAYM,GAAK,EAAA;AAAW,KAAA;AACnE,IAAA,MAAM0C,UAAUpB,QAAS/C,CAAAA,KAAAA,EAAOtB,KAAOwF,EAAAA,UAAAA,EAAY,OAAO,CAACE,QAAAA,CAAAA;AAC3D,IAAA,MAAMC,OAAUtB,GAAAA,QAAAA,CAAS/C,KAAOtB,EAAAA,KAAAA,EAAOwF,YAAY,KAAOE,EAAAA,QAAAA,CAAAA;AAE1D,IAAA,MAAME,UAAUlD,KAAQ,GAAA,GAAA;IACxB,IAAImD,YAAAA,CAAapD,GAAKgD,EAAAA,OAAAA,EAASG,OAAU,CAAA,EAAA;QACvCnD,GAAMgD,GAAAA,OAAAA;AACR;IACA,IAAII,YAAAA,CAAa9C,GAAK4C,EAAAA,OAAAA,EAASC,OAAU,CAAA,EAAA;QACvC7C,GAAM4C,GAAAA,OAAAA;AACR;AAGA,IAAA,IAAIlD,MAAM4C,QAAU,EAAA;QAClB5C,GAAM4C,GAAAA,QAAAA;AACNtC,QAAAA,GAAAA,GAAMD,IAAKL,CAAAA,GAAG,CAAC4C,QAAAA,GAAW3C,KAAO4C,EAAAA,QAAAA,CAAAA;KAC5B,MAAA,IAAIvC,MAAMuC,QAAU,EAAA;QACzBvC,GAAMuC,GAAAA,QAAAA;AACN7C,QAAAA,GAAAA,GAAMK,IAAKC,CAAAA,GAAG,CAACuC,QAAAA,GAAW5C,KAAO2C,EAAAA,QAAAA,CAAAA;AACnC;IAEA,OAAO;AAAE5C,QAAAA,GAAAA;AAAKM,QAAAA;AAAI,KAAA;AACpB;AAEO,SAAS+C,WACd9F,CAAAA,KAAY,EACZ,EAAEyC,GAAG,EAAEM,GAAG,EAAc,EACxBoB,MAAqB,EACrBb,IAAAA,GAAO,KAAK,EACZyC,MAAM,KAAK,EAAA;IAEX,MAAMzE,KAAAA,GAAQD,QAASrB,CAAAA,KAAAA,CAAMlB,KAAK,CAAA;AAClC,IAAA,MAAM,EAAEkC,OAAAA,EAASgF,SAAS,EAAE,GAAGhG,KAAAA;IAE/B,MAAMsE,WAAAA,GAAcJ,eAAelE,KAAOmE,EAAAA,MAAAA,CAAAA;AAC1C,IAAA,MAAM,EAAE8B,QAAAA,GAAW,CAAC,EAAE,GAAG3B,WAAAA;AACzB,IAAA,MAAMe,WAAWhB,QAAS/C,CAAAA,KAAAA,EAAOtB,KAAOsE,EAAAA,WAAAA,EAAa,OAAO,CAACoB,QAAAA,CAAAA;AAC7D,IAAA,MAAMJ,QAAWjB,GAAAA,QAAAA,CAAS/C,KAAOtB,EAAAA,KAAAA,EAAOsE,aAAa,KAAOoB,EAAAA,QAAAA,CAAAA;AAE5D,IAAA,IAAIK,QAAQtD,GAAAA,GAAM4C,QAAYtC,IAAAA,GAAAA,GAAMuC,QAAO,CAAI,EAAA;QAE7C,OAAO,IAAA;AACT;AAEA,IAAA,MAAMY,UAAalG,GAAAA,KAAAA,CAAM+C,GAAG,GAAG/C,MAAMyC,GAAG;AACxC,IAAA,MAAMC,QAAQY,IAAOR,GAAAA,IAAAA,CAAKC,GAAG,CAACA,GAAAA,GAAMN,KAAKwD,QAAYC,CAAAA,GAAAA,UAAAA;AAErD,IAAA,IAAI5C,IAAQZ,IAAAA,KAAAA,KAAUuD,QAAYC,IAAAA,UAAAA,IAAcD,QAAU,EAAA;QAExD,OAAO,IAAA;AACT;IAEA,MAAMtD,QAAAA,GAAWyC,SAAS1C,KAAO,EAAA;AAAED,QAAAA,GAAAA;AAAKM,QAAAA,GAAAA;AAAKsC,QAAAA,QAAAA;AAAUC,QAAAA;AAAS,KAAA,EAAGhE,KAAOtB,EAAAA,KAAAA,CAAAA;IAE1EgG,SAAUvD,CAAAA,GAAG,GAAGE,QAAAA,CAASF,GAAG;IAC5BuD,SAAUjD,CAAAA,GAAG,GAAGJ,QAAAA,CAASI,GAAG;AAE5BzB,IAAAA,KAAAA,CAAMG,kBAAkB,CAACzB,KAAMoE,CAAAA,EAAE,CAAC,GAAGzB,QAAAA;AAGrC,IAAA,OAAO3C,MAAM6E,KAAK,CAAClC,QAASF,CAAAA,GAAG,MAAMzC,KAAMyC,CAAAA,GAAG,IAAIzC,KAAAA,CAAM6E,KAAK,CAAClC,QAAAA,CAASI,GAAG,CAAA,KAAM/C,MAAM+C,GAAG;AAC3F;AAEA,SAASoD,mBAAmBnG,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAEY,MAAoB,EAAA;IACzF,MAAMH,KAAAA,GAAQX,eAAgBrD,CAAAA,KAAAA,EAAOsD,IAAMC,EAAAA,MAAAA,CAAAA;AAC3C,IAAA,MAAMZ,QAAW,GAAA;AAAEF,QAAAA,GAAAA,EAAKzC,KAAMyC,CAAAA,GAAG,GAAGuB,KAAAA,CAAMvB,GAAG;AAAEM,QAAAA,GAAAA,EAAK/C,KAAM+C,CAAAA,GAAG,GAAGiB,KAAAA,CAAMjB;AAAI,KAAA;IAC1E,OAAO+C,WAAAA,CAAY9F,KAAO2C,EAAAA,QAAAA,EAAUwB,MAAQ,EAAA,IAAA,CAAA;AAC9C;AAEA,SAASiC,qBAAqBpG,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAEY,MAAoB,EAAA;IAC3F,MAAMxB,QAAAA,GAAWc,oBAAqBzD,CAAAA,KAAAA,EAAOsD,IAAMC,EAAAA,MAAAA,CAAAA;IACnD,OAAOuC,WAAAA,CAAY9F,KAAO2C,EAAAA,QAAAA,EAAUwB,MAAQ,EAAA,IAAA,CAAA;AAC9C;AAEA,SAASkC,uBAAuBrG,KAAY,EAAEsG,IAAY,EAAEC,EAAU,EAAEpC,MAAoB,EAAA;AAC1F,IAAA,OAAO2B,YAAY9F,KAAO+E,EAAAA,WAAAA,CAAY/E,KAAOsG,EAAAA,IAAAA,EAAMC,KAAKpC,MAAQ,EAAA,IAAA,CAAA;AAClE;AAEA,MAAMqC,aAAAA,GAAgB,CAACC,CAAAA,GACrBA,CAAM,KAAA,CAAA,IAAKnE,MAAMmE,CAAK,CAAA,GAAA,CAAA,GAAIA,CAAI,GAAA,CAAA,GAAI3D,IAAKL,CAAAA,GAAG,CAACK,IAAK4D,CAAAA,KAAK,CAACD,CAAAA,CAAAA,EAAI,CAAC,CAAA,CAAA,GAAK3D,IAAKC,CAAAA,GAAG,CAACD,IAAAA,CAAK4D,KAAK,CAACD,CAAI,CAAA,EAAA,CAAA,CAAA;AAE1F,SAASE,yBAAyB3G,KAAY,EAAA;IAC5C,MAAM4G,MAAAA,GAAS5G,MAAM6G,SAAS,EAAA;IAC9B,MAAMC,QAAAA,GAAWF,MAAO7G,CAAAA,MAAM,GAAG,CAAA;IAEjC,IAAIC,KAAAA,CAAMyC,GAAG,GAAG,CAAG,EAAA;AACjBzC,QAAAA,KAAAA,CAAMyC,GAAG,IAAI,CAAA;AACf;IACA,IAAIzC,KAAAA,CAAM+C,GAAG,GAAG+D,QAAU,EAAA;AACxB9G,QAAAA,KAAAA,CAAM+C,GAAG,IAAI,CAAA;AACf;AACF;AAEA,SAASgE,kBAAkB/G,KAAY,EAAEsD,IAAY,EAAEC,MAAa,EAAEY,MAAoB,EAAA;IACxF,MAAMH,KAAAA,GAAQX,eAAgBrD,CAAAA,KAAAA,EAAOsD,IAAMC,EAAAA,MAAAA,CAAAA;AAC3C,IAAA,IAAIvD,MAAMyC,GAAG,KAAKzC,MAAM+C,GAAG,IAAIO,OAAO,CAAG,EAAA;QACvCqD,wBAAyB3G,CAAAA,KAAAA,CAAAA;AAC3B;AACA,IAAA,MAAM2C,QAAW,GAAA;AAAEF,QAAAA,GAAAA,EAAKzC,KAAMyC,CAAAA,GAAG,GAAG+D,aAAAA,CAAcxC,MAAMvB,GAAG,CAAA;AAAGM,QAAAA,GAAAA,EAAK/C,KAAM+C,CAAAA,GAAG,GAAGyD,aAAAA,CAAcxC,MAAMjB,GAAG;AAAE,KAAA;IAExG,OAAO+C,WAAAA,CAAY9F,KAAO2C,EAAAA,QAAAA,EAAUwB,MAAQ,EAAA,IAAA,CAAA;AAC9C;AAEA,SAAS6C,YAAYhH,KAAY,EAAA;AAC/B,IAAA,OAAOA,MAAMmD,YAAY,EAAA,GAAKnD,MAAMiH,KAAK,GAAGjH,MAAMkH,MAAM;AAC1D;AAEA,SAASC,gBAAiBnH,CAAAA,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAA;IACzE,MAAMyC,MAAAA,GAAS5G,MAAM6G,SAAS,EAAA;IAC9B,MAAMO,cAAAA,GAAiBR,MAAO7G,CAAAA,MAAM,GAAG,CAAA;AACvC,IAAA,IAAI,EAAE0C,GAAG,EAAEM,GAAG,EAAE,GAAG/C,KAAAA;AAEnB,IAAA,MAAM0C,KAAQI,GAAAA,IAAAA,CAAKC,GAAG,CAACA,MAAMN,GAAK,EAAA,CAAA,CAAA;IAElC,MAAM4E,SAAAA,GAAYvE,KAAK4D,KAAK,CAACM,YAAYhH,KAAS8C,CAAAA,GAAAA,IAAAA,CAAKC,GAAG,CAACL,KAAO,EAAA,EAAA,CAAA,CAAA;AAClE,IAAA,MAAM4E,WAAWxE,IAAK4D,CAAAA,KAAK,CAAC5D,IAAKyE,CAAAA,GAAG,CAACvD,KAAQqD,GAAAA,SAAAA,CAAAA,CAAAA;IAC7C,IAAIG,OAAAA;IACJ,IAAIxD,KAAAA,GAAQ,CAACqD,SAAW,EAAA;AACtBtE,QAAAA,GAAAA,GAAMD,IAAKL,CAAAA,GAAG,CAACM,GAAAA,GAAMuE,QAAUF,EAAAA,cAAAA,CAAAA;QAC/B3E,GAAMC,GAAAA,KAAAA,KAAU,CAAIK,GAAAA,GAAAA,GAAMA,GAAML,GAAAA,KAAAA;AAChC8E,QAAAA,OAAAA,GAAUzE,GAAQqE,KAAAA,cAAAA;KACb,MAAA,IAAIpD,QAAQqD,SAAW,EAAA;AAC5B5E,QAAAA,GAAAA,GAAMK,IAAKC,CAAAA,GAAG,CAAC,CAAA,EAAGN,GAAM6E,GAAAA,QAAAA,CAAAA;QACxBvE,GAAML,GAAAA,KAAAA,KAAU,CAAID,GAAAA,GAAAA,GAAMA,GAAMC,GAAAA,KAAAA;AAChC8E,QAAAA,OAAAA,GAAU/E,GAAQ,KAAA,CAAA;AACpB;AAEA,IAAA,OAAOqD,YAAY9F,KAAO,EAAA;AAAEyC,QAAAA,GAAAA;AAAKM,QAAAA;AAAI,KAAA,EAAGoB,WAAWsD,OAAQD,CAAAA,OAAAA,CAAAA;AAC7D;AAEA,MAAME,OAAoC,GAAA;IACxCC,WAAa,EAAA,CAAA;IACbC,MAAQ,EAAA,GAAA;AACRC,IAAAA,MAAAA,EAAQ,EAAK,GAAA,IAAA;AACbC,IAAAA,IAAAA,EAAM,KAAK,EAAK,GAAA,IAAA;IAChBC,GAAK,EAAA,EAAA,GAAK,KAAK,EAAK,GAAA,IAAA;IACpBC,IAAM,EAAA,GAAA,GAAM,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IAC3BC,KAAO,EAAA,EAAA,GAAK,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IAC3BC,OAAS,EAAA,EAAA,GAAK,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA;IAC7BC,IAAM,EAAA,GAAA,GAAM,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA;AAC7B,CAAA;AAEA,SAASC,iBAAAA,CAAkBpI,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAEkE,UAAU,KAAK,EAAA;AAC3F,IAAA,MAAM,EAAE5F,GAAK6F,EAAAA,SAAS,EAAEvF,GAAKwF,EAAAA,OAAO,EAAE,GAAGvI,KAAAA;AACzC,IAAA,IAAIuF,MAAS,GAAA,CAAA;AACb,IAAA,IAAIrD,YAAYlC,KAAQ,CAAA,EAAA;AACtB,QAAA,MAAM0G,KAAQ1G,GAAAA,KAAAA,CAAMgB,OAAO,CAACwH,IAAI,EAAE9B,KAAAA;AAClCnB,QAAAA,MAAAA,GAASmB,KAAQgB,GAAAA,OAAO,CAAChB,KAAAA,CAAM,GAAG,CAAA;AACpC;IACA,MAAM+B,MAAAA,GAASzI,MAAMoD,gBAAgB,CAACpD,MAAM0I,gBAAgB,CAACJ,YAAY/C,MAAUvB,CAAAA,GAAAA,KAAAA,CAAAA;IACnF,MAAM2E,MAAAA,GAAS3I,MAAMoD,gBAAgB,CAACpD,MAAM0I,gBAAgB,CAACH,UAAUhD,MAAUvB,CAAAA,GAAAA,KAAAA,CAAAA;IACjF,IAAI5B,WAAAA,CAAYqG,MAAWrG,CAAAA,IAAAA,WAAAA,CAAYuG,MAAS,CAAA,EAAA;QAG9C,OAAO,IAAA;AACT;AACA,IAAA,OAAO7C,YAAY9F,KAAO,EAAA;QAAEyC,GAAKgG,EAAAA,MAAAA;QAAQ1F,GAAK4F,EAAAA;AAAO,KAAA,EAAGxE,QAAQkE,OAAS,EAAA,IAAA,CAAA;AAC3E;AAEA,SAASO,iBAAkB5I,CAAAA,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAA;IAC1E,OAAOiE,iBAAAA,CAAkBpI,KAAOgE,EAAAA,KAAAA,EAAOG,MAAQ,EAAA,IAAA,CAAA;AACjD;AAEO,MAAM0E,aAA8C,GAAA;IACzDC,QAAU/B,EAAAA,iBAAAA;IACVgC,OAAS5C,EAAAA,kBAAAA;IACT6C,WAAa5C,EAAAA;AACf,CAAC;AAEM,MAAM6C,iBAAsD,GAAA;IACjEF,OAAS1C,EAAAA;AACX,CAAC;AAEM,MAAM6C,YAA4C,GAAA;IACvDJ,QAAU3B,EAAAA,gBAAAA;IACV4B,OAASX,EAAAA,iBAAAA;IACTY,WAAaJ,EAAAA,iBAAAA;IACbO,UAAYP,EAAAA;AACd,CAAC;;ACrRD,SAASQ,uBACPpJ,CAAAA,KAAY,EACZwB,mBAAwC,EACxCC,kBAAsC,EAAA;IAEtC,MAAM,EACJ2C,EAAE,EACFpD,OAAS,EAAA,EAAEyB,GAAG,EAAEM,GAAG,EAAE,EACtB,GAAG/C,KAAAA;IACJ,IAAI,CAACwB,mBAAmB,CAAC4C,EAAAA,CAAG,IAAI,CAAC3C,kBAAkB,CAAC2C,EAAAA,CAAG,EAAE;QACvD,OAAO,IAAA;AACT;IACA,MAAMiF,QAAAA,GAAW5H,kBAAkB,CAAC2C,EAAG,CAAA;AACvC,IAAA,OAAOiF,SAAS5G,GAAG,KAAKA,GAAO4G,IAAAA,QAAAA,CAAStG,GAAG,KAAKA,GAAAA;AAClD;AAEA,SAASuG,mBAAAA,CAAoBnF,MAAgD,EAAEzE,MAA6B,EAAA;AAC1G,IAAA,KAAK,MAAMxB,GAAAA,IAAO0B,MAAOC,CAAAA,IAAI,CAACsE,MAAS,CAAA,CAAA;AACrC,QAAA,IAAI,CAACzE,MAAM,CAACxB,GAAAA,CAAI,EAAE;YAChB,OAAOiG,MAAM,CAACjG,GAAI,CAAA;AACpB;AACF;AACF;AAEA,SAASqL,wBAAAA,CAAyBzK,KAAY,EAAEwC,KAAY,EAAA;IAC1D,MAAM,EAAE5B,MAAM,EAAE,GAAGZ,KAAAA;AACnB,IAAA,MAAM,EAAE0C,mBAAmB,EAAEC,kBAAkB,EAAE,GAAGH,KAAAA;AAEpD,IAAA,KAAK,MAAMtB,KAAAA,IAASJ,MAAOiB,CAAAA,MAAM,CAACnB,MAAS,CAAA,CAAA;QACzC,IAAI0J,uBAAAA,CAAwBpJ,KAAOwB,EAAAA,mBAAAA,EAAqBC,kBAAqB,CAAA,EAAA;AAC3ED,YAAAA,mBAAmB,CAACxB,KAAAA,CAAMoE,EAAE,CAAC,GAAG;gBAC9B3B,GAAK,EAAA;AAAEzC,oBAAAA,KAAAA,EAAOA,MAAMyC,GAAG;oBAAEzB,OAAShB,EAAAA,KAAAA,CAAMgB,OAAO,CAACyB;AAAI,iBAAA;gBACpDM,GAAK,EAAA;AAAE/C,oBAAAA,KAAAA,EAAOA,MAAM+C,GAAG;oBAAE/B,OAAShB,EAAAA,KAAAA,CAAMgB,OAAO,CAAC+B;AAAI;AACtD,aAAA;AACF;AACF;AAEAuG,IAAAA,mBAAAA,CAAoB9H,mBAAqB9B,EAAAA,MAAAA,CAAAA;AACzC4J,IAAAA,mBAAAA,CAAoB7H,kBAAoB/B,EAAAA,MAAAA,CAAAA;IACxC,OAAO8B,mBAAAA;AACT;AAEA,SAASgI,OAAOxJ,KAAY,EAAEyJ,MAAc,EAAElG,MAAa,EAAEY,MAAoB,EAAA;IAC/E,MAAM/E,EAAAA,GAAKyJ,aAAa,CAAC7I,KAAAA,CAAMmC,IAAI,CAAC,IAAI0G,cAAcE,OAAO;IAC7D3J,EAAKY,GAAAA,KAAAA,EAAOyJ,QAAQlG,MAAQY,EAAAA,MAAAA,CAAAA;AAC9B;AAEA,SAASuF,WAAW1J,KAAY,EAAEsG,IAAY,EAAEC,EAAU,EAAEpC,MAAoB,EAAA;IAC9E,MAAM/E,EAAAA,GAAK6J,iBAAiB,CAACjJ,KAAAA,CAAMmC,IAAI,CAAC,IAAI8G,kBAAkBF,OAAO;IACrE3J,EAAKY,GAAAA,KAAAA,EAAOsG,MAAMC,EAAIpC,EAAAA,MAAAA,CAAAA;AACxB;AAEA,SAASwF,UAAU7K,KAAY,EAAA;IAC7B,MAAM8K,EAAAA,GAAK9K,MAAM+K,SAAS;IAC1B,OAAO;QACL5K,CAAG,EAAC2K,CAAAA,EAAGzJ,CAAAA,IAAI,GAAGyJ,EAAGxJ,CAAAA,KAAK,IAAI,CAAA;QAC1BlB,CAAG,EAAC0K,CAAAA,EAAG3J,CAAAA,GAAG,GAAG2J,EAAG1J,CAAAA,MAAM,IAAI;AAC5B,KAAA;AACF;AAEO,SAASoD,IAAKxE,CAAAA,KAAY,EAAE2K,MAAkB,EAAEK,UAAyB,GAAA,MAAM,EAAEC,OAAAA,GAAuB,KAAK,EAAA;AAClH,IAAA,MAAM,EAAE9K,CAAAA,GAAI,CAAC,EAAEC,IAAI,CAAC,EAAE8K,UAAaL,GAAAA,SAAAA,CAAU7K,KAAM,CAAA,EAAE,GAAG,OAAO2K,WAAW,QAAW,GAAA;QAAExK,CAAGwK,EAAAA,MAAAA;QAAQvK,CAAGuK,EAAAA;KAAWA,GAAAA,MAAAA;AAChH,IAAA,MAAMnI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM,EACJkC,OAAS,EAAA,EAAEmD,MAAS,GAAA,EAAE,EAAEb,IAAM2G,EAAAA,WAAW,EAAE,EAC5C,GAAG3I,KAAAA;AAEJiI,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAEhC,IAAA,MAAM4I,WAAWjL,CAAM,KAAA,CAAA;AACvB,IAAA,MAAMkL,WAAWjL,CAAM,KAAA,CAAA;IACvB,MAAMyB,aAAAA,GAAgBI,uBAAwBkJ,CAAAA,WAAAA,EAAaD,UAAYlL,EAAAA,KAAAA,CAAAA;IAEvE,KAAK,MAAMkB,SAASW,aAAe,CAAA;QACjC,IAAIX,KAAAA,CAAMmD,YAAY,EAAA,IAAM+G,QAAU,EAAA;YACpCV,MAAOxJ,CAAAA,KAAAA,EAAOf,GAAG+K,UAAY7F,EAAAA,MAAAA,CAAAA;AAC/B,SAAA,MAAO,IAAI,CAACnE,KAAMmD,CAAAA,YAAY,MAAMgH,QAAU,EAAA;YAC5CX,MAAOxJ,CAAAA,KAAAA,EAAOd,GAAG8K,UAAY7F,EAAAA,MAAAA,CAAAA;AAC/B;AACF;AAEArF,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbG,IAAAA,WAAAA,EAAaI,MAAS,GAAA;AAAEvL,QAAAA,KAAAA;AAAOiL,QAAAA;AAAQ,KAAA,CAAA;AACzC;AAEO,SAASO,QAAAA,CACdxL,KAAY,EACZyL,EAAS,EACTC,EAAS,EACTV,UAAyB,GAAA,MAAM,EAC/BC,OAAAA,GAAuB,KAAK,EAAA;AAE5B,IAAA,MAAMzI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,MAAM,EACJkC,OAAAA,EAAS,EAAEmD,MAAAA,GAAS,EAAE,EAAEb,IAAAA,EAAM2G,WAAc,GAAA,EAAE,EAAE,EACjD,GAAG3I,KAAAA;AACJ,IAAA,MAAM,EAAE1C,IAAAA,GAAO,IAAI,EAAE,GAAGqL,WAAAA;AAExBV,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;IAChC,MAAM4I,QAAAA,GAAWvL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;IAC7C,MAAMqL,QAAAA,GAAWxL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;AAE7C,IAAA,KAAK,MAAMkB,KAASJ,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,IAAIM,KAAAA,CAAMmD,YAAY,EAAA,IAAM+G,QAAU,EAAA;AACpCR,YAAAA,UAAAA,CAAW1J,OAAOuK,EAAGtL,CAAAA,CAAC,EAAEuL,EAAAA,CAAGvL,CAAC,EAAEkF,MAAAA,CAAAA;AAChC,SAAA,MAAO,IAAI,CAACnE,KAAMmD,CAAAA,YAAY,MAAMgH,QAAU,EAAA;AAC5CT,YAAAA,UAAAA,CAAW1J,OAAOuK,EAAGrL,CAAAA,CAAC,EAAEsL,EAAAA,CAAGtL,CAAC,EAAEiF,MAAAA,CAAAA;AAChC;AACF;AAEArF,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbG,IAAAA,WAAAA,CAAYI,MAAM,GAAG;AAAEvL,QAAAA,KAAAA;AAAOiL,QAAAA;AAAQ,KAAA,CAAA;AACxC;AAEO,SAASU,SAAAA,CACd3L,KAAY,EACZ4L,OAAe,EACfhI,KAAiB,EACjBoH,UAAyB,GAAA,MAAM,EAC/BC,OAAAA,GAAuB,KAAK,EAAA;AAE5B,IAAA,MAAMzI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvByK,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAChC,IAAA,MAAMtB,KAAQlB,GAAAA,KAAAA,CAAMY,MAAM,CAACgL,OAAQ,CAAA;IACnC5E,WAAY9F,CAAAA,KAAAA,EAAO0C,OAAOnE,SAAW,EAAA,IAAA,CAAA;AACrCO,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbxI,IAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAE+G,MAAS,GAAA;AAAEvL,QAAAA,KAAAA;AAAOiL,QAAAA;AAAQ,KAAA,CAAA;AAChD;AAEO,SAASY,SAAAA,CAAU7L,KAAY,EAAEgL,aAAyB,SAAS,EAAA;AACxE,IAAA,MAAMxI,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM0C,mBAAAA,GAAsB+H,yBAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAE5D,IAAA,KAAK,MAAMtB,KAASJ,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,MAAMkL,YAAAA,GAAe5K,MAAMgB,OAAO;AAClC,QAAA,IAAIQ,mBAAmB,CAACxB,KAAMoE,CAAAA,EAAE,CAAC,EAAE;YACjCwG,YAAanI,CAAAA,GAAG,GAAGjB,mBAAmB,CAACxB,KAAAA,CAAMoE,EAAE,CAAC,CAAC3B,GAAG,CAACzB,OAAO;YAC5D4J,YAAa7H,CAAAA,GAAG,GAAGvB,mBAAmB,CAACxB,KAAAA,CAAMoE,EAAE,CAAC,CAACrB,GAAG,CAAC/B,OAAO;SACvD,MAAA;AACL,YAAA,OAAO4J,aAAanI,GAAG;AACvB,YAAA,OAAOmI,aAAa7H,GAAG;AACzB;AACA,QAAA,OAAOzB,KAAMG,CAAAA,kBAAkB,CAACzB,KAAAA,CAAMoE,EAAE,CAAC;AAC3C;AACAtF,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;AAEbxI,IAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAEuH,cAAiB,GAAA;AAAE/L,QAAAA;AAAM,KAAA,CAAA;AAC/C;AAEA,SAASgM,gBAAAA,CAAiBxJ,KAAY,EAAEoJ,OAAe,EAAA;AACrD,IAAA,MAAMhG,QAAWpD,GAAAA,KAAAA,CAAME,mBAAmB,CAACkJ,OAAQ,CAAA;AACnD,IAAA,IAAI,CAAChG,QAAU,EAAA;QACb,OAAOnG,SAAAA;AACT;AACA,IAAA,MAAM,EAAEkE,GAAG,EAAEM,GAAG,EAAE,GAAG2B,QAAAA;AACrB,IAAA,IAAI7B,SAASE,GAAI/B,CAAAA,OAAO,KAAK6B,QAASJ,CAAAA,GAAAA,CAAIzB,OAAO,CAAG,EAAA;AAClD,QAAA,OAAO+B,GAAI/B,CAAAA,OAAO,GAAGyB,GAAAA,CAAIzB,OAAO;AAClC;AACA,IAAA,IAAI6B,SAASE,GAAI/C,CAAAA,KAAK,KAAK6C,QAASJ,CAAAA,GAAAA,CAAIzC,KAAK,CAAG,EAAA;AAC9C,QAAA,OAAO+C,GAAI/C,CAAAA,KAAK,GAAGyC,GAAAA,CAAIzC,KAAK;AAC9B;IACA,OAAOzB,SAAAA;AACT;AAEO,SAASwM,aAAajM,KAAY,EAAA;AACvC,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,IAAI2D,GAAM,GAAA,CAAA;AACV,IAAA,IAAIM,GAAM,GAAA,CAAA;AACV,IAAA,KAAK,MAAM/C,KAASJ,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,KAAAA,CAAMY,MAAM,CAAG,CAAA;AAC/C,QAAA,MAAMsL,SAAYF,GAAAA,gBAAAA,CAAiBxJ,KAAOtB,EAAAA,KAAAA,CAAMoE,EAAE,CAAA;AAClD,QAAA,IAAI4G,SAAW,EAAA;AACb,YAAA,MAAMC,KAAQnI,GAAAA,IAAAA,CAAK4D,KAAK,CAAC,SAAc1G,IAAAA,KAAM+C,CAAAA,GAAG,GAAG/C,KAAAA,CAAMyC,GAAE,IAAM,GAAO,CAAA,GAAA,GAAA;YACxEA,GAAMK,GAAAA,IAAAA,CAAKL,GAAG,CAACA,GAAKwI,EAAAA,KAAAA,CAAAA;YACpBlI,GAAMD,GAAAA,IAAAA,CAAKC,GAAG,CAACA,GAAKkI,EAAAA,KAAAA,CAAAA;AACtB;AACF;IACA,OAAOxI,GAAAA,GAAM,IAAIA,GAAMM,GAAAA,GAAAA;AACzB;AAEA,SAASmI,SAASlL,KAAY,EAAEgE,KAAa,EAAEG,MAAoB,EAAE7C,KAAY,EAAA;IAC/E,MAAM,EAAEM,QAAQ,EAAE,GAAGN,KAAAA;AAErB,IAAA,MAAM6J,cAAcvJ,QAAQ,CAAC5B,KAAMoE,CAAAA,EAAE,CAAC,IAAI,CAAA;IAC1C,IAAIgH,IAAAA,CAAKD,WAAiBC,CAAAA,KAAAA,IAAAA,CAAKpH,KAAQ,CAAA,EAAA;QACrCA,KAASmH,IAAAA,WAAAA;AACX;IACA,MAAM/L,EAAAA,GAAK8J,YAAY,CAAClJ,KAAAA,CAAMmC,IAAI,CAAC,IAAI+G,aAAaH,OAAO;IAC3D,IAAI3J,EAAAA,GAAKY,KAAOgE,EAAAA,KAAAA,EAAOG,MAAS,CAAA,EAAA;AAE9BvC,QAAAA,QAAQ,CAAC5B,KAAAA,CAAMoE,EAAE,CAAC,GAAG,CAAA;KAChB,MAAA;AAELxC,QAAAA,QAAQ,CAAC5B,KAAAA,CAAMoE,EAAE,CAAC,GAAGJ,KAAAA;AACvB;AACF;AAIO,SAAS+B,IAAIjH,KAAY,EAAEkF,KAAgB,EAAErD,aAAuB,EAAEmJ,UAAAA,GAAyB,MAAM,EAAA;IAC1G,MAAM,EAAE7K,CAAI,GAAA,CAAC,EAAEC,CAAAA,GAAI,CAAC,EAAE,GAAG,OAAO8E,KAAAA,KAAU,QAAW,GAAA;QAAE/E,CAAG+E,EAAAA,KAAAA;QAAO9E,CAAG8E,EAAAA;KAAUA,GAAAA,KAAAA;AAC9E,IAAA,MAAM1C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM,EACJkC,OAAS,EAAA,EAAE+E,GAAKsF,EAAAA,UAAU,EAAElH,MAAAA,GAAS,EAAE,EAAE,EAC1C,GAAG7C,KAAAA;AACJ,IAAA,MAAM,EAAEgK,KAAK,EAAE,GAAGD,cAAc,EAAC;AAEjC9B,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAEhC,IAAA,MAAM4I,WAAWjL,CAAM,KAAA,CAAA;AACvB,IAAA,MAAMkL,WAAWjL,CAAM,KAAA,CAAA;AAEvB,IAAA,MAAMQ,SAASiB,aAAiBf,IAAAA,MAAAA,CAAOiB,MAAM,CAAC/B,MAAMY,MAAM,CAAA;IAE1D,KAAK,MAAMM,SAASN,MAAQ,CAAA;QAC1B,IAAIM,KAAAA,CAAMmD,YAAY,EAAA,IAAM+G,QAAU,EAAA;YACpCgB,QAASlL,CAAAA,KAAAA,EAAOf,GAAGkF,MAAQ7C,EAAAA,KAAAA,CAAAA;AAC7B,SAAA,MAAO,IAAI,CAACtB,KAAMmD,CAAAA,YAAY,MAAMgH,QAAU,EAAA;YAC5Ce,QAASlL,CAAAA,KAAAA,EAAOd,GAAGiF,MAAQ7C,EAAAA,KAAAA,CAAAA;AAC7B;AACF;AAEAxC,IAAAA,KAAAA,CAAMsL,MAAM,CAACN,UAAAA,CAAAA;IAEbwB,KAAQ,GAAA;AAAExM,QAAAA;AAAM,KAAA,CAAA;AAClB;AAEO,SAASyM,sBAAsBzM,KAAY,EAAA;AAChD,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvByK,IAAAA,wBAAAA,CAAyBzK,KAAOwC,EAAAA,KAAAA,CAAAA;AAChC,IAAA,MAAMkK,cAA8D,EAAC;AACrE,IAAA,KAAK,MAAMd,OAAW9K,IAAAA,MAAAA,CAAOC,IAAI,CAACf,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,MAAM,EAAE+C,GAAG,EAAEM,GAAG,EAAE,GAAGzB,KAAME,CAAAA,mBAAmB,CAACkJ,OAAAA,CAAQ,IAAI;AAAEjI,YAAAA,GAAAA,EAAK,EAAC;AAAGM,YAAAA,GAAAA,EAAK;AAAG,SAAA;QAC9EyI,WAAW,CAACd,QAAQ,GAAG;AAAEjI,YAAAA,GAAAA,EAAKA,IAAIzC,KAAK;AAAE+C,YAAAA,GAAAA,EAAKA,IAAI/C;AAAM,SAAA;AAC1D;IAEA,OAAOwL,WAAAA;AACT;AAEO,SAASC,qBAAqB3M,KAAY,EAAA;AAC/C,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,MAAM0M,cAA8D,EAAC;AACrE,IAAA,KAAK,MAAMd,OAAW9K,IAAAA,MAAAA,CAAOC,IAAI,CAACf,KAAAA,CAAMY,MAAM,CAAG,CAAA;AAC/C8L,QAAAA,WAAW,CAACd,OAAQ,CAAA,GAAGpJ,KAAMG,CAAAA,kBAAkB,CAACiJ,OAAQ,CAAA;AAC1D;IAEA,OAAOc,WAAAA;AACT;AAEO,SAASE,iBAAiB5M,KAAY,EAAA;AAC3C,IAAA,MAAM0M,cAAcD,qBAAsBzM,CAAAA,KAAAA,CAAAA;AAC1C,IAAA,KAAK,MAAM4L,OAAW9K,IAAAA,MAAAA,CAAOC,IAAI,CAACf,KAAAA,CAAMY,MAAM,CAAG,CAAA;QAC/C,MAAM,EAAE+C,GAAKkJ,EAAAA,WAAW,EAAE5I,GAAAA,EAAK6I,WAAW,EAAE,GAAGJ,WAAW,CAACd,OAAQ,CAAA;QAEnE,IAAIiB,WAAAA,KAAgBpN,aAAaO,KAAMY,CAAAA,MAAM,CAACgL,OAAQ,CAAA,CAACjI,GAAG,KAAKkJ,WAAa,EAAA;YAC1E,OAAO,IAAA;AACT;QAEA,IAAIC,WAAAA,KAAgBrN,aAAaO,KAAMY,CAAAA,MAAM,CAACgL,OAAQ,CAAA,CAAC3H,GAAG,KAAK6I,WAAa,EAAA;YAC1E,OAAO,IAAA;AACT;AACF;IAEA,OAAO,KAAA;AACT;AAEO,SAASC,wBAAwBvK,KAAY,EAAA;AAClD,IAAA,OAAOA,KAAMQ,CAAAA,OAAO,IAAIR,KAAAA,CAAMO,QAAQ;AACxC;AAEO,SAASiK,mBAAmBhN,KAAY,EAAA;AAC7C,IAAA,MAAMwC,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AAGvB,IAAA,OAAO,CAAC,EAAE+M,wBAAwBvK,KAAUA,CAAAA,IAAAA,KAAAA,CAAMyK,eAAe,CAAD;AAClE;;ACtRA,MAAMC,KAAQ,GAAA,CAAC/M,CAAWqH,EAAAA,IAAAA,EAAcC,EAAuBzD,GAAAA,IAAAA,CAAKL,GAAG,CAAC8D,EAAIzD,EAAAA,IAAAA,CAAKC,GAAG,CAACuD,IAAMrH,EAAAA,CAAAA,CAAAA,CAAAA;AAE3F,SAASgN,aAAAA,CAAcnN,KAAY,EAAEqD,IAAiB,EAAA;AACpD,IAAA,MAAM,EAAET,QAAQ,EAAEC,OAAO,EAAE,GAAGN,QAASvC,CAAAA,KAAAA,CAAAA;IACvC,MAAMoN,OAAAA,GAAUxK,QAAQ,CAACS,IAAK,CAAA;IAC9B,MAAMgK,MAAAA,GAASxK,OAAO,CAACQ,IAAK,CAAA;AAC5B,IAAA,IAAI+J,WAAWC,MAAQ,EAAA;QACrBA,MAAOC,CAAAA,mBAAmB,CAACjK,IAAM+J,EAAAA,OAAAA,CAAAA;QACjC,OAAOxK,QAAQ,CAACS,IAAK,CAAA;AACvB;AACF;AAIA,SAASkK,WACPvN,KAAY,EACZqN,MAAoC,EACpChK,IAAiB,EACjB+J,OAAwB,EAAA;IAExB,MAAM,EAAExK,QAAQ,EAAEV,OAAO,EAAEW,OAAO,EAAE,GAAGN,QAASvC,CAAAA,KAAAA,CAAAA;IAChD,MAAMwN,UAAAA,GAAa5K,QAAQ,CAACS,IAAK,CAAA;AACjC,IAAA,IAAImK,UAAc3K,IAAAA,OAAO,CAACQ,IAAAA,CAAK,KAAKgK,MAAQ,EAAA;AAE1C,QAAA;AACF;AACAF,IAAAA,aAAAA,CAAcnN,KAAOqD,EAAAA,IAAAA,CAAAA;IACrB,MAAMoK,QAAAA,GAAY7K,QAAQ,CAACS,IAAAA,CAAK,GAAG,CAAC1D,KAAAA,GAAUyN,OAAQpN,CAAAA,KAAAA,EAAOL,KAAYuC,EAAAA,OAAAA,CAAAA;IACzEW,OAAO,CAACQ,KAAK,GAAGgK,MAAAA;IAGhB,MAAMK,OAAAA,GAAUrK,IAAS,KAAA,OAAA,GAAU,KAAQ5D,GAAAA,SAAAA;IAC3C4N,MAAOM,CAAAA,gBAAgB,CAACtK,IAAAA,EAAMoK,QAAU,EAAA;AAAEC,QAAAA;AAAQ,KAAA,CAAA;AACpD;AAEO,SAASE,SAAAA,CAAU5N,KAAY,EAAEL,KAAiB,EAAA;AACvD,IAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,IAAIwC,KAAAA,CAAMqL,SAAS,EAAE;AACnBrL,QAAAA,KAAAA,CAAMO,QAAQ,GAAG,IAAA;AACjBP,QAAAA,KAAAA,CAAMsL,OAAO,GAAGnO,KAAAA;AAChBK,QAAAA,KAAAA,CAAM+N,IAAI,EAAA;AACZ;AACF;AAEA,SAASC,OAAAA,CAAQhO,KAAY,EAAEL,KAAoB,EAAA;AACjD,IAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,IAAA,IAAI,CAACwC,KAAMqL,CAAAA,SAAS,IAAIlO,KAAMP,CAAAA,GAAG,KAAK,QAAU,EAAA;AAC9C,QAAA;AACF;AAEA+N,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACrBwC,IAAAA,KAAAA,CAAMO,QAAQ,GAAG,KAAA;AACjBP,IAAAA,KAAAA,CAAMqL,SAAS,GAAGrL,KAAMsL,CAAAA,OAAO,GAAGrO,SAAAA;AAClCO,IAAAA,KAAAA,CAAM+N,IAAI,EAAA;AACZ;AAEA,SAASE,gBAAAA,CAAiBtO,KAAiB,EAAEK,KAAY,EAAA;AACvD,IAAA,IAAIL,KAAM0N,CAAAA,MAAM,KAAKrN,KAAAA,CAAMkO,MAAM,EAAE;AACjC,QAAA,MAAMC,UAAanO,GAAAA,KAAAA,CAAMkO,MAAM,CAACE,qBAAqB,EAAA;QACrD,OAAO;AACLjO,YAAAA,CAAAA,EAAGR,KAAM0O,CAAAA,OAAO,GAAGF,UAAAA,CAAW9M,IAAI;AAClCjB,YAAAA,CAAAA,EAAGT,KAAM2O,CAAAA,OAAO,GAAGH,UAAAA,CAAWhN;AAChC,SAAA;AACF;IACA,OAAOoN,mBAAAA,CAAoB5O,KAAOK,EAAAA,KAAAA;;AACpC;AAEA,SAASwO,SAAUxO,CAAAA,KAAY,EAAEL,KAAiB,EAAEwL,WAAwB,EAAA;AAC1E,IAAA,MAAM,EAAEsD,WAAW,EAAEC,cAAc,EAAE,GAAGvD,WAAAA;AACxC,IAAA,IAAIsD,WAAa,EAAA;QACf,MAAMtM,KAAAA,GAAQ8L,iBAAiBtO,KAAOK,EAAAA,KAAAA,CAAAA;AACtC,QAAA,IAAIyO,WAAc,GAAA;AAAEzO,YAAAA,KAAAA;AAAOL,YAAAA,KAAAA;AAAOwC,YAAAA;AAAM,SAAA,CAAA,KAAO,KAAO,EAAA;YACpDuM,cAAiB,GAAA;AAAE1O,gBAAAA,KAAAA;AAAOL,gBAAAA;AAAM,aAAA,CAAA;YAChC,OAAO,KAAA;AACT;AACF;AACF;AAEO,SAASgP,SAAAA,CAAU3O,KAAY,EAAEL,KAAiB,EAAA;IACvD,IAAIK,KAAAA,CAAM4O,MAAM,EAAE;AAChB,QAAA,MAAMzM,KAAQoM,GAAAA,mBAAAA,CAAoB5O,KAAOK,EAAAA,KAAAA;;AACzC,QAAA,IAAI6O,cAAe1M,CAAAA,KAAAA,EAAOnC,KAAM4O,CAAAA,MAAM,CAAG,EAAA;AACvC,YAAA;AACF;AACF;AACA,IAAA,MAAMpM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAM,EAAEiH,GAAKsF,EAAAA,UAAU,EAAE/H,IAAAA,EAAM2G,WAAc,GAAA,EAAE,EAAE,GAAG3I,KAAAA,CAAMN,OAAO;AACjE,IAAA,IACEvC,KAAMmP,CAAAA,MAAM,KAAK,CAAA,IACjBpP,UAAWL,CAAAA,cAAAA,CAAekN,UAAa5M,CAAAA,EAAAA,KAAAA,CAAAA,IACvCC,aAAcP,CAAAA,cAAAA,CAAe8L,WAAY4D,CAAAA,IAAI,GAAGpP,KAChD,CAAA,EAAA;QACA,OAAOwL,WAAAA,CAAYuD,cAAc,GAAG;AAAE1O,YAAAA,KAAAA;AAAOL,YAAAA;AAAM,SAAA,CAAA;AACrD;AAEA,IAAA,IAAI6O,SAAUxO,CAAAA,KAAAA,EAAOL,KAAOwL,EAAAA,WAAAA,CAAAA,KAAiB,KAAO,EAAA;AAClD,QAAA;AACF;AACA3I,IAAAA,KAAAA,CAAMqL,SAAS,GAAGlO,KAAAA;AAElB4N,IAAAA,UAAAA,CAAWvN,OAAOA,KAAMkO,CAAAA,MAAM,CAACc,aAAa,EAAE,WAAapB,EAAAA,SAAAA,CAAAA;AAC3DL,IAAAA,UAAAA,CAAWvN,KAAOiP,EAAAA,MAAAA,CAAOC,QAAQ,EAAE,SAAWlB,EAAAA,OAAAA,CAAAA;AAChD;AAEA,SAASmB,iBACP,EAAEC,KAAK,EAAEC,GAAG,EAAsE,EAClFC,WAAmB,EAAA;AAEnB,IAAA,IAAInH,KAAQkH,GAAAA,GAAAA,CAAIlP,CAAC,GAAGiP,MAAMjP,CAAC;AAC3B,IAAA,IAAIiI,MAASiH,GAAAA,GAAAA,CAAIjP,CAAC,GAAGgP,MAAMhP,CAAC;AAC5B,IAAA,MAAMmP,KAAQvL,GAAAA,IAAAA,CAAKyE,GAAG,CAACN,KAAQC,GAAAA,MAAAA,CAAAA;AAE/B,IAAA,IAAImH,QAAQD,WAAa,EAAA;AACvBnH,QAAAA,KAAAA,GAAQnE,KAAKsI,IAAI,CAACnE,SAASnE,IAAKyE,CAAAA,GAAG,CAACL,MAASkH,GAAAA,WAAAA,CAAAA;KACxC,MAAA,IAAIC,QAAQD,WAAa,EAAA;AAC9BlH,QAAAA,MAAAA,GAASpE,KAAKsI,IAAI,CAAClE,UAAUpE,IAAKyE,CAAAA,GAAG,CAACN,KAAQmH,GAAAA,WAAAA,CAAAA;AAChD;AAEAD,IAAAA,GAAAA,CAAIlP,CAAC,GAAGiP,KAAMjP,CAAAA,CAAC,GAAGgI,KAAAA;AAClBkH,IAAAA,GAAAA,CAAIjP,CAAC,GAAGgP,KAAMhP,CAAAA,CAAC,GAAGgI,MAAAA;AACpB;AAGA,SAASoH,gBACPC,CAAAA,IAAU,EACV1E,SAAoB,EACpB2E,MAAoC,EACpC,EAAE/L,GAAG,EAAEM,GAAG,EAAEwB,IAAI,EAAyD,EAAA;IAEzEgK,IAAI,CAAC9L,IAAI,GAAGuJ,KAAAA,CAAMlJ,KAAKL,GAAG,CAAC+L,MAAON,CAAAA,KAAK,CAAC3J,IAAAA,CAAK,EAAEiK,MAAOL,CAAAA,GAAG,CAAC5J,IAAAA,CAAK,CAAGsF,EAAAA,SAAS,CAACpH,GAAI,CAAA,EAAEoH,SAAS,CAAC9G,GAAI,CAAA,CAAA;IAChGwL,IAAI,CAACxL,IAAI,GAAGiJ,KAAAA,CAAMlJ,KAAKC,GAAG,CAACyL,MAAON,CAAAA,KAAK,CAAC3J,IAAAA,CAAK,EAAEiK,MAAOL,CAAAA,GAAG,CAAC5J,IAAAA,CAAK,CAAGsF,EAAAA,SAAS,CAACpH,GAAI,CAAA,EAAEoH,SAAS,CAAC9G,GAAI,CAAA,CAAA;AAClG;AAEA,SAAS0L,iBACP3P,CAAAA,KAAY,EACZ4P,WAA2D,EAC3DC,mBAA6B,EAAA;AAE7B,IAAA,MAAMH,MAAS,GAAA;QACbN,KAAOnB,EAAAA,gBAAAA,CAAiB2B,WAAY/B,CAAAA,SAAS,EAAE7N,KAAAA,CAAAA;QAC/CqP,GAAKpB,EAAAA,gBAAAA,CAAiB2B,WAAY9B,CAAAA,OAAO,EAAE9N,KAAAA;AAC7C,KAAA;AAEA,IAAA,IAAI6P,mBAAqB,EAAA;QACvB,MAAMP,WAAAA,GAActP,MAAM+K,SAAS,CAAC5C,KAAK,GAAGnI,KAAAA,CAAM+K,SAAS,CAAC3C,MAAM;AAClE+G,QAAAA,gBAAAA,CAAiBO,MAAQJ,EAAAA,WAAAA,CAAAA;AAC3B;IAEA,OAAOI,MAAAA;AACT;AAEO,SAASI,gBACd9P,KAAY,EACZF,IAA4B,EAC5B8P,WAA2D,EAC3DC,mBAAwC,EAAA;IAExC,MAAMzE,QAAAA,GAAWvL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;IAC7C,MAAMqL,QAAAA,GAAWxL,gBAAiBC,CAAAA,IAAAA,EAAM,GAAKE,EAAAA,KAAAA,CAAAA;AAC7C,IAAA,MAAM,EAAEmB,GAAG,EAAEE,IAAI,EAAEC,KAAK,EAAEF,MAAM,EAAE+G,KAAAA,EAAO4H,UAAU,EAAE3H,MAAAA,EAAQ4H,WAAW,EAAE,GAAGhQ,MAAM+K,SAAS;AAC5F,IAAA,MAAM0E,IAAO,GAAA;AAAEtO,QAAAA,GAAAA;AAAKE,QAAAA,IAAAA;AAAMC,QAAAA,KAAAA;AAAOF,QAAAA;AAAO,KAAA;AAExC,IAAA,MAAMsO,MAASC,GAAAA,iBAAAA,CAAkB3P,KAAO4P,EAAAA,WAAAA,EAAaC,uBAAuBzE,QAAYC,IAAAA,QAAAA,CAAAA;AAExF,IAAA,IAAID,QAAU,EAAA;AACZoE,QAAAA,gBAAAA,CAAiBC,IAAMzP,EAAAA,KAAAA,CAAM+K,SAAS,EAAE2E,MAAQ,EAAA;YAAE/L,GAAK,EAAA,MAAA;YAAQM,GAAK,EAAA,OAAA;YAASwB,IAAM,EAAA;AAAI,SAAA,CAAA;AACzF;AAEA,IAAA,IAAI4F,QAAU,EAAA;AACZmE,QAAAA,gBAAAA,CAAiBC,IAAMzP,EAAAA,KAAAA,CAAM+K,SAAS,EAAE2E,MAAQ,EAAA;YAAE/L,GAAK,EAAA,KAAA;YAAOM,GAAK,EAAA,QAAA;YAAUwB,IAAM,EAAA;AAAI,SAAA,CAAA;AACzF;AAEA,IAAA,MAAM0C,KAAQsH,GAAAA,IAAAA,CAAKnO,KAAK,GAAGmO,KAAKpO,IAAI;AACpC,IAAA,MAAM+G,MAASqH,GAAAA,IAAAA,CAAKrO,MAAM,GAAGqO,KAAKtO,GAAG;IAErC,OAAO;AACL,QAAA,GAAGsO,IAAI;AACPtH,QAAAA,KAAAA;AACAC,QAAAA,MAAAA;QACA6H,KAAO7E,EAAAA,QAAAA,IAAYjD,QAAQ,CAAI,GAAC4H,CAAAA,UAAa5H,GAAAA,KAAI,IAAK4H,UAAa,GAAA,CAAA;QACnEG,KAAO7E,EAAAA,QAAAA,IAAYjD,SAAS,CAAI,GAAC4H,CAAAA,WAAc5H,GAAAA,MAAK,IAAK4H,WAAc,GAAA;AACzE,KAAA;AACF;AAEO,SAASG,OAAAA,CAAQnQ,KAAY,EAAEL,KAAiB,EAAA;AACrD,IAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,IAAI,CAACwC,KAAMqL,CAAAA,SAAS,EAAE;AACpB,QAAA;AACF;AAEAV,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrB,IAAA,MAAM,EAAEF,IAAI,EAAEiM,cAAc,EAAEgD,IAAI,EAAE,GAAGvM,KAAMN,CAAAA,OAAO,CAACsC,IAAI,IAAI,EAAC;IAC9D,MAAM,EAAE4L,YAAY,CAAC,EAAEP,mBAAmB,EAAE,GAAGd,QAAQ,EAAC;IACxD,MAAMU,IAAAA,GAAOK,eAAgB9P,CAAAA,KAAAA,EAAOF,IAAM,EAAA;AAAE+N,QAAAA,SAAAA,EAAWrL,MAAMqL,SAAS;QAAEC,OAASnO,EAAAA;KAASkQ,EAAAA,mBAAAA,CAAAA;AAC1F,IAAA,MAAMQ,YAAYxQ,gBAAiBC,CAAAA,IAAAA,EAAM,KAAKE,KAASyP,CAAAA,GAAAA,IAAAA,CAAKtH,KAAK,GAAG,CAAA;AACpE,IAAA,MAAMmI,YAAYzQ,gBAAiBC,CAAAA,IAAAA,EAAM,KAAKE,KAASyP,CAAAA,GAAAA,IAAAA,CAAKrH,MAAM,GAAG,CAAA;AACrE,IAAA,MAAMmI,WAAWvM,IAAKwM,CAAAA,IAAI,CAACH,SAAAA,GAAYA,YAAYC,SAAYA,GAAAA,SAAAA,CAAAA;AAG/D9N,IAAAA,KAAAA,CAAMqL,SAAS,GAAGrL,KAAMsL,CAAAA,OAAO,GAAGrO,SAAAA;AAElC,IAAA,IAAI8Q,YAAYH,SAAW,EAAA;AACzB5N,QAAAA,KAAAA,CAAMO,QAAQ,GAAG,KAAA;AACjB/C,QAAAA,KAAAA,CAAM+N,IAAI,EAAA;AACV,QAAA;AACF;AAEAvC,IAAAA,QAAAA,CAASxL,KAAO,EAAA;AAAEG,QAAAA,CAAAA,EAAGsP,KAAKpO,IAAI;AAAEjB,QAAAA,CAAAA,EAAGqP,KAAKtO;KAAO,EAAA;AAAEhB,QAAAA,CAAAA,EAAGsP,KAAKnO,KAAK;AAAElB,QAAAA,CAAAA,EAAGqP,KAAKrO;AAAO,KAAA,EAAG,MAAQ,EAAA,MAAA,CAAA;AAE1FoB,IAAAA,KAAAA,CAAMO,QAAQ,GAAG,KAAA;AACjBP,IAAAA,KAAAA,CAAMyK,eAAe,GAAG,IAAA;IACxBlB,cAAiB,GAAA;AAAE/L,QAAAA;AAAM,KAAA,CAAA;AAC3B;AAEA,SAASyQ,kBAAmBzQ,CAAAA,KAAY,EAAEL,KAAiB,EAAEwL,WAAwB,EAAA;AAEnF,IAAA,IAAIvL,aAAcP,CAAAA,cAAAA,CAAe8L,WAAYuF,CAAAA,KAAK,GAAG/Q,KAAQ,CAAA,EAAA;AAC3DwL,QAAAA,WAAAA,CAAYuD,cAAc,GAAG;AAAE1O,YAAAA,KAAAA;AAAOL,YAAAA;AAAM,SAAA,CAAA;AAC5C,QAAA;AACF;AAEA,IAAA,IAAI6O,SAAUxO,CAAAA,KAAAA,EAAOL,KAAOwL,EAAAA,WAAAA,CAAAA,KAAiB,KAAO,EAAA;AAClD,QAAA;AACF;IAGA,IAAIxL,KAAAA,CAAMgR,UAAU,EAAE;AACpBhR,QAAAA,KAAAA,CAAMiR,cAAc,EAAA;AACtB;IAIA,IAAIjR,KAAAA,CAAMkR,MAAM,KAAKpR,SAAW,EAAA;AAC9B,QAAA;AACF;IACA,OAAO,IAAA;AACT;AAEO,SAASiR,KAAAA,CAAM1Q,KAAY,EAAEL,KAAkD,EAAA;AACpF,IAAA,MAAM,EACJiD,QAAAA,EAAU,EAAEmJ,cAAc,EAAE,EAC5B7J,OAAAA,EAAS,EAAEsC,IAAAA,EAAM2G,cAAc,EAAE,EAAE,EACpC,GAAG5I,QAASvC,CAAAA,KAAAA,CAAAA;AAEb,IAAA,IAAI,CAACyQ,kBAAAA,CAAmBzQ,KAAOL,EAAAA,KAAAA,EAAOwL,WAAc,CAAA,EAAA;AAClD,QAAA;AACF;IAEA,MAAMsE,IAAAA,GAAO9P,KAAM0N,CAAAA,MAAM,EAAEe,qBAAAA,EAAAA;IAC3B,MAAM0C,KAAAA,GAAQ3F,WAAauF,EAAAA,KAAAA,EAAOI,KAAS,IAAA,GAAA;IAC3C,MAAMC,UAAAA,GAAapR,KAAMkR,CAAAA,MAAM,IAAI,CAAA,GAAI,CAAI,GAAA,CAAA,IAAK,CAAA,GAAIC,KAAI,CAAA,GAAK,CAAIA,GAAAA,KAAAA;AACjE,IAAA,MAAMnG,MAAS,GAAA;QACbxK,CAAG4Q,EAAAA,UAAAA;QACH3Q,CAAG2Q,EAAAA,UAAAA;QACH7F,UAAY,EAAA;AACV/K,YAAAA,CAAAA,EAAGR,KAAM0O,CAAAA,OAAO,GAAGoB,IAAAA,CAAKpO,IAAI;AAC5BjB,YAAAA,CAAAA,EAAGT,KAAM2O,CAAAA,OAAO,GAAGmB,IAAAA,CAAKtO;AAC1B;AACF,KAAA;IAEAqD,IAAKxE,CAAAA,KAAAA,EAAO2K,QAAQ,MAAQ,EAAA,OAAA,CAAA;IAE5BoB,cAAiBpM,GAAAA,KAAAA,CAAAA;AACnB;AAEA,SAASqR,oBACPhR,KAAY,EACZiR,IAAiB,EACjB7D,OAAuD,EACvD7M,KAAa,EAAA;AAEb,IAAA,IAAI6M,OAAS,EAAA;AACX7K,QAAAA,QAAAA,CAASvC,OAAO4C,QAAQ,CAACqO,KAAK,GAAG5Q,QAAAA,CAAS,IAAM+M,OAAU,GAAA;AAAEpN,gBAAAA;aAAUO,CAAAA,EAAAA,KAAAA,CAAAA;AACxE;AACF;AAEO,SAAS2Q,YAAAA,CAAalR,KAAY,EAAEkC,OAA0B,EAAA;IACnE,MAAMgM,MAAAA,GAASlO,MAAMkO,MAAM;AAC3B,IAAA,MAAM,EAAEwC,KAAAA,EAAOS,YAAY,EAAEpC,IAAMqC,EAAAA,WAAW,EAAErF,cAAc,EAAE,GAAG7J,OAAQsC,CAAAA,IAAI,IAAI,EAAC;AAKpF,IAAA,IAAI2M,cAAc5R,OAAS,EAAA;QACzBgO,UAAWvN,CAAAA,KAAAA,EAAOkO,QAAQ,OAASwC,EAAAA,KAAAA,CAAAA;QACnCM,mBAAoBhR,CAAAA,KAAAA,EAAO,kBAAkB+L,cAAgB,EAAA,GAAA,CAAA;KACxD,MAAA;AACLoB,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,OAAA,CAAA;AACvB;AACA,IAAA,IAAIoR,aAAa7R,OAAS,EAAA;QACxBgO,UAAWvN,CAAAA,KAAAA,EAAOkO,QAAQ,WAAaS,EAAAA,SAAAA,CAAAA;AACvCpB,QAAAA,UAAAA,CAAWvN,KAAOkO,EAAAA,MAAAA,CAAOc,aAAa,EAAE,SAAWmB,EAAAA,OAAAA,CAAAA;KAC9C,MAAA;AACLhD,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACrBmN,QAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACvB;AACF;AAEO,SAASqR,gBAAgBrR,KAAY,EAAA;AAC1CmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,WAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,OAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,OAAA,CAAA;AACrBmN,IAAAA,aAAAA,CAAcnN,KAAO,EAAA,SAAA,CAAA;AACvB;;AClTA,SAASsR,aAAAA,CAActR,KAAY,EAAEwC,KAAY,EAAA;IAC/C,OAAO,SAAU+O,WAAgB,EAAE5R,KAAkB,EAAA;QACnD,MAAM,EAAEsH,GAAKsF,EAAAA,UAAU,EAAE/H,IAAAA,EAAM2G,WAAc,GAAA,EAAE,EAAE,GAAG3I,KAAAA,CAAMN,OAAO;AACjE,QAAA,IAAI,CAACqK,UAAAA,IAAc,CAACA,UAAAA,CAAWhN,OAAO,EAAE;YACtC,OAAO,KAAA;AACT;QACA,MAAMiS,QAAAA,GAAW7R,KAASA,IAAAA,KAAAA,CAAM6R,QAAQ;AACxC,QAAA,IAAI,CAACA,QAAU,EAAA;YAEb,OAAO,IAAA;AACT;AACA,QAAA,IACE,CAAChP,KAAMQ,CAAAA,OAAO,IACdrD,KAAM8R,CAAAA,WAAW,KAAK,OACrB7R,KAAAA,cAAcP,cAAekN,CAAAA,UAAAA,CAAAA,EAAaiF,aAAa9R,UAAWL,CAAAA,cAAAA,CAAe8L,YAAY4D,IAAI,CAAA,EAAGyC,SAAQ,CAC7G,EAAA;AACAjF,YAAAA,UAAAA,CAAWmF,aAAa,GAAG;AAAE1R,gBAAAA,KAAAA;AAAOL,gBAAAA;AAAM,aAAA,CAAA;YAC1C,OAAO,KAAA;AACT;QACA,OAAO,IAAA;AACT,KAAA;AACF;AAEA,SAASgS,SAAAA,CAAUlG,EAAwC,EAAEC,EAAwC,EAAA;IAEnG,MAAMkG,MAAAA,GAAS5N,KAAKyE,GAAG,CAACgD,GAAG4C,OAAO,GAAG3C,GAAG2C,OAAO,CAAA;IAC/C,MAAMwD,MAAAA,GAAS7N,KAAKyE,GAAG,CAACgD,GAAG6C,OAAO,GAAG5C,GAAG4C,OAAO,CAAA;AAG/C,IAAA,MAAMwD,IAAIF,MAASC,GAAAA,MAAAA;AACnB,IAAA,IAAI1R,CAAGC,EAAAA,CAAAA;IACP,IAAI0R,CAAAA,GAAI,GAAOA,IAAAA,CAAAA,GAAI,GAAK,EAAA;AACtB3R,QAAAA,CAAAA,GAAIC,CAAI,GAAA,IAAA;KACH,MAAA,IAAIwR,SAASC,MAAQ,EAAA;QAC1B1R,CAAI,GAAA,IAAA;KACC,MAAA;QACLC,CAAI,GAAA,IAAA;AACN;IACA,OAAO;AAAED,QAAAA,CAAAA;AAAGC,QAAAA;AAAE,KAAA;AAChB;AAEA,SAAS2R,WAAY/R,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;IAC7D,IAAIxP,KAAAA,CAAMtB,KAAK,EAAE;AACf,QAAA,MAAM,EAAEuD,MAAM,EAAEwN,QAAQ,EAAE,GAAGD,CAAAA;AAE7B,QAAA,MAAME,cAAc,CAAC,GAAI1P,MAAMtB,KAAK,GAAI8Q,EAAE9Q,KAAK;AAC/C,QAAA,MAAMuO,IAAOuC,GAAAA,CAAAA,CAAE3E,MAAM,CAACe,qBAAqB,EAAA;QAC3C,MAAM+D,KAAAA,GAAQR,UAAUM,QAAQ,CAAC,EAAE,EAAEA,QAAQ,CAAC,CAAE,CAAA,CAAA;AAChD,QAAA,MAAMnS,IAAO0C,GAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAE1E,IAAAA;AACjC,QAAA,MAAM6K,MAAS,GAAA;AACbxK,YAAAA,CAAAA,EAAGgS,MAAMhS,CAAC,IAAIN,iBAAiBC,IAAM,EAAA,GAAA,EAAKE,SAASkS,WAAc,GAAA,CAAA;AACjE9R,YAAAA,CAAAA,EAAG+R,MAAM/R,CAAC,IAAIP,iBAAiBC,IAAM,EAAA,GAAA,EAAKE,SAASkS,WAAc,GAAA,CAAA;YACjEhH,UAAY,EAAA;AACV/K,gBAAAA,CAAAA,EAAGsE,MAAOtE,CAAAA,CAAC,GAAGsP,IAAAA,CAAKpO,IAAI;AACvBjB,gBAAAA,CAAAA,EAAGqE,MAAOrE,CAAAA,CAAC,GAAGqP,IAAAA,CAAKtO;AACrB;AACF,SAAA;QAEAqD,IAAKxE,CAAAA,KAAAA,EAAO2K,QAAQ,MAAQ,EAAA,OAAA,CAAA;QAG5BnI,KAAMtB,CAAAA,KAAK,GAAG8Q,CAAAA,CAAE9Q,KAAK;AACvB;AACF;AAEA,SAASkR,UAAWpS,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;AAC5D,IAAA,IAAIxP,MAAMN,OAAO,CAACsC,IAAI,EAAE2N,OAAO5S,OAAS,EAAA;AACtC,QAAA,MAAM4C,QAAQoM,mBAAoByD,CAAAA,CAAAA,CAAER,QAAQ,EAAExR;;AAC9C,QAAA,IAAIwC,KAAMN,CAAAA,OAAO,CAACsC,IAAI,EAAEiK,WAAc,GAAA;AAAEzO,YAAAA,KAAAA;AAAOL,YAAAA,KAAAA,EAAOqS,EAAER,QAAQ;AAAErP,YAAAA;AAAM,SAAA,CAAA,KAAO,KAAO,EAAA;AACpFK,YAAAA,KAAAA,CAAMtB,KAAK,GAAG,IAAA;AACdsB,YAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAEkK,cAAiB,GAAA;AAAE1O,gBAAAA,KAAAA;AAAOL,gBAAAA,KAAAA,EAAOqS,EAAER;AAAS,aAAA,CAAA;SAC3D,MAAA;AACLhP,YAAAA,KAAAA,CAAMtB,KAAK,GAAG,CAAA;AAChB;AACF;AACF;AAEA,SAASmR,QAASrS,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;IAC1D,IAAIxP,KAAAA,CAAMtB,KAAK,EAAE;AACf6Q,QAAAA,WAAAA,CAAY/R,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA;QAC1BxP,KAAMtB,CAAAA,KAAK,GAAG;;AACdsB,QAAAA,KAAAA,CAAMN,OAAO,CAACsC,IAAI,EAAEuH,cAAiB,GAAA;AAAE/L,YAAAA;AAAM,SAAA,CAAA;AAC/C;AACF;AAEA,SAASsS,SAAUtS,CAAAA,KAAY,EAAEwC,KAAY,EAAEwP,CAAc,EAAA;IAC3D,MAAM9M,KAAAA,GAAQ1C,MAAM0C,KAAK;AACzB,IAAA,IAAIA,KAAO,EAAA;AACT1C,QAAAA,KAAAA,CAAMQ,OAAO,GAAG,IAAA;AAChBiE,QAAAA,GAAAA,CACEjH,KACA,EAAA;AAAEG,YAAAA,CAAAA,EAAG6R,CAAEO,CAAAA,MAAM,GAAGrN,KAAAA,CAAM/E,CAAC;AAAEC,YAAAA,CAAAA,EAAG4R,CAAEnB,CAAAA,MAAM,GAAG3L,KAAAA,CAAM9E;AAAE,SAAA,EAC/CoC,MAAMgQ,SAAS,IAAIhQ,KAAMgQ,CAAAA,SAAS,CAACC,GAAG,CAAC,CAACzR,CAAAA,GAAMhB,MAAMY,MAAM,CAACI,CAAE,CAAA,CAAA,CAAE0R,MAAM,CAAC/J,OAAAA,CAAAA,CAAAA;AAExEnG,QAAAA,KAAAA,CAAM0C,KAAK,GAAG;AAAE/E,YAAAA,CAAAA,EAAG6R,EAAEO,MAAM;AAAEnS,YAAAA,CAAAA,EAAG4R,EAAEnB;AAAO,SAAA;AAC3C;AACF;AAEA,SAAS8B,QAAS3S,CAAAA,KAAY,EAAEwC,KAAY,EAAE7C,KAAkB,EAAA;AAC9D,IAAA,MAAM,EAAEJ,OAAO,EAAEqT,UAAU,EAAElB,aAAa,EAAE,GAAGlP,KAAMN,CAAAA,OAAO,CAAC+E,GAAG,IAAI,EAAC;AACrE,IAAA,IAAI,CAAC1H,OAAS,EAAA;AACZ,QAAA;AACF;AACA,IAAA,MAAMkQ,IAAO9P,GAAAA,KAAAA,CAAM0N,MAAM,CAACe,qBAAqB,EAAA;AAC/C,IAAA,MAAMjM,KAAQ,GAAA;AACZhC,QAAAA,CAAAA,EAAGR,MAAM8E,MAAM,CAACtE,CAAC,GAAGsP,KAAKpO,IAAI;AAC7BjB,QAAAA,CAAAA,EAAGT,MAAM8E,MAAM,CAACrE,CAAC,GAAGqP,KAAKtO;AAC3B,KAAA;AAEA,IAAA,IAAIyR,UAAa,GAAA;AAAE5S,QAAAA,KAAAA;AAAOL,QAAAA,KAAAA;AAAOwC,QAAAA;AAAM,KAAA,CAAA,KAAO,KAAO,EAAA;AACnD,QAAA,OAAOuP,aAAgB,GAAA;AAAE1R,YAAAA,KAAAA;AAAOL,YAAAA;AAAM,SAAA,CAAA;AACxC;AAEA6C,IAAAA,KAAAA,CAAMgQ,SAAS,GAAGvQ,uBAAwBO,CAAAA,KAAAA,CAAMN,OAAO,CAAC+E,GAAG,EAAE9E,KAAAA,EAAOnC,OAAOyS,GAAG,CAAC,CAACzR,CAAAA,GAAMA,EAAEsE,EAAE,CAAA;AAC1F9C,IAAAA,KAAAA,CAAM0C,KAAK,GAAG;QAAE/E,CAAG,EAAA,CAAA;QAAGC,CAAG,EAAA;AAAE,KAAA;AAC3BkS,IAAAA,SAAAA,CAAUtS,OAAOwC,KAAO7C,EAAAA,KAAAA,CAAAA;AAC1B;AAEA,SAASkT,MAAAA,CAAO7S,KAAY,EAAEwC,KAAY,EAAA;AACxCA,IAAAA,KAAAA,CAAM0C,KAAK,GAAG,IAAA;IACd,IAAI1C,KAAAA,CAAMQ,OAAO,EAAE;AACjBR,QAAAA,KAAAA,CAAMQ,OAAO,GAAG,KAAA;AAChBR,QAAAA,KAAAA,CAAMyK,eAAe,GAAG,IAAA;AACxBzK,QAAAA,KAAAA,CAAMN,OAAO,CAAC+E,GAAG,EAAE6L,aAAgB,GAAA;AAAE9S,YAAAA;AAAM,SAAA,CAAA;AAC7C;AACF;AAEA,MAAM+S,UAAU,IAAIzQ,OAAAA,EAAAA;AACb,SAAS0Q,WAAAA,CAAYhT,KAAY,EAAEkC,OAA0B,EAAA;AAClE,IAAA,MAAMM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;IACvB,MAAMkO,MAAAA,GAASlO,MAAMkO,MAAM;AAC3B,IAAA,MAAM,EAAEjH,GAAKsF,EAAAA,UAAU,EAAE/H,IAAM2G,EAAAA,WAAW,EAAE,GAAGjJ,OAAAA;AAE/C,IAAA,MAAM+Q,EAAK,GAAA,IAAIC,MAAOC,CAAAA,OAAO,CAACjF,MAAAA,CAAAA;IAC9B,IAAI/C,WAAAA,EAAagH,OAAO5S,OAAS,EAAA;AAC/B0T,QAAAA,EAAAA,CAAGG,GAAG,CAAC,IAAIF,MAAAA,CAAOG,KAAK,EAAA,CAAA;AACvBJ,QAAAA,EAAAA,CAAGK,EAAE,CAAC,YAAA,EAAc,CAACtB,CAAMI,GAAAA,UAAAA,CAAWpS,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AACpDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,OAAA,EAAS,CAACtB,CAAMD,GAAAA,WAAAA,CAAY/R,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAChDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,UAAA,EAAY,CAACtB,CAAMK,GAAAA,QAAAA,CAASrS,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAClD;IAEA,IAAIzF,UAAAA,IAAcA,UAAWhN,CAAAA,OAAO,EAAE;AACpC0T,QAAAA,EAAAA,CAAGG,GAAG,CACJ,IAAIF,MAAAA,CAAOK,GAAG,CAAC;AACbnD,YAAAA,SAAAA,EAAW7D,WAAW6D,SAAS;AAC/BoD,YAAAA,MAAAA,EAAQlC,cAActR,KAAOwC,EAAAA,KAAAA;AAC/B,SAAA,CAAA,CAAA;AAEFyQ,QAAAA,EAAAA,CAAGK,EAAE,CAAC,UAAA,EAAY,CAACtB,CAAMW,GAAAA,QAAAA,CAAS3S,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAChDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,SAAA,EAAW,CAACtB,CAAMM,GAAAA,SAAAA,CAAUtS,OAAOwC,KAAOwP,EAAAA,CAAAA,CAAAA,CAAAA;AAChDiB,QAAAA,EAAAA,CAAGK,EAAE,CAAC,QAAU,EAAA,IAAMT,OAAO7S,KAAOwC,EAAAA,KAAAA,CAAAA,CAAAA;AACtC;IAEAuQ,OAAQ9P,CAAAA,GAAG,CAACjD,KAAOiT,EAAAA,EAAAA,CAAAA;AACrB;AAEO,SAASQ,WAAWzT,KAAY,EAAA;IACrC,MAAMiT,EAAAA,GAAKF,OAAQtQ,CAAAA,GAAG,CAACzC,KAAAA,CAAAA;AACvB,IAAA,IAAIiT,EAAI,EAAA;AACNA,QAAAA,EAAAA,CAAGS,MAAM,CAAC,YAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,OAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,UAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,UAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,KAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGS,MAAM,CAAC,QAAA,CAAA;AACVT,QAAAA,EAAAA,CAAGU,OAAO,EAAA;AACVZ,QAAAA,OAAAA,CAAQ5P,MAAM,CAACnD,KAAAA,CAAAA;AACjB;AACF;AAEO,SAAS4T,oBAAAA,CAAqBC,UAA6B,EAAEC,UAA6B,EAAA;AAC/F,IAAA,MAAM,EAAE7M,GAAK8M,EAAAA,MAAM,EAAEvP,IAAMwP,EAAAA,OAAO,EAAE,GAAGH,UAAAA;AACvC,IAAA,MAAM,EAAE5M,GAAKgN,EAAAA,MAAM,EAAEzP,IAAM0P,EAAAA,OAAO,EAAE,GAAGJ,UAAAA;AAEvC,IAAA,IAAIE,OAAS7B,EAAAA,KAAAA,EAAO5S,OAAY2U,KAAAA,OAAAA,EAAS/B,OAAO5S,OAAS,EAAA;QACvD,OAAO,IAAA;AACT;IACA,IAAIwU,MAAAA,EAAQxU,OAAY0U,KAAAA,MAAAA,EAAQ1U,OAAS,EAAA;QACvC,OAAO,IAAA;AACT;IACA,IAAIwU,MAAAA,EAAQ3D,SAAc6D,KAAAA,MAAAA,EAAQ7D,SAAW,EAAA;QAC3C,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;;;;AC/LO,MAAM+D,QAA8B,GAAA;IACzClN,GAAK,EAAA;QACH1H,OAAS,EAAA,KAAA;QACTO,IAAM,EAAA,IAAA;QACNsQ,SAAW,EAAA,EAAA;QACX5Q,WAAa,EAAA;AACf,KAAA;IACAgF,IAAM,EAAA;QACJkM,KAAO,EAAA;YACLnR,OAAS,EAAA,KAAA;YACTuR,KAAO,EAAA,GAAA;YACPtR,WAAa,EAAA;AACf,SAAA;QACAuP,IAAM,EAAA;YACJxP,OAAS,EAAA,KAAA;YACT6U,QAAU,EAAA,oBAAA;YACV5U,WAAa,EAAA;AACf,SAAA;QACA2S,KAAO,EAAA;YACL5S,OAAS,EAAA;AACX,SAAA;QACAO,IAAM,EAAA;AACR;AACF,CAAC;;ACFD,SAASiO,IAAK/N,CAAAA,KAAY,EAAEqU,MAAc,EAAEnS,OAA0B,EAAA;IACpE,MAAMkP,WAAAA,GAAclP,OAAQsC,CAAAA,IAAI,EAAEuK,IAAAA;AAClC,IAAA,MAAM,EAAElB,SAAS,EAAEC,OAAO,EAAE,GAAGvL,QAASvC,CAAAA,KAAAA,CAAAA;AAExC,IAAA,IAAIoR,aAAagD,QAAaC,KAAAA,MAAAA,IAAU,CAACxG,SAAAA,IAAa,CAACC,OAAS,EAAA;AAC9D,QAAA;AACF;AACA,IAAA,MAAM,EAAEzM,IAAI,EAAEF,GAAG,EAAEgH,KAAK,EAAEC,MAAM,EAAE,GAAG0H,eACnC9P,CAAAA,KAAAA,EACAkC,OAAQsC,CAAAA,IAAI,EAAE1E,IACd,EAAA;AAAE+N,QAAAA,SAAAA;AAAWC,QAAAA;AAAQ,KAAA,EACrBsD,YAAYvB,mBAAmB,CAAA;IAEjC,MAAMyE,GAAAA,GAAMtU,MAAMsU,GAAG;AAErBA,IAAAA,GAAAA,CAAIC,IAAI,EAAA;AACRD,IAAAA,GAAAA,CAAIE,SAAS,EAAA;AACbF,IAAAA,GAAAA,CAAIG,SAAS,GAAGrD,WAAYsD,CAAAA,eAAe,IAAI,uBAAA;AAC/CJ,IAAAA,GAAAA,CAAIK,QAAQ,CAACtT,IAAMF,EAAAA,GAAAA,EAAKgH,KAAOC,EAAAA,MAAAA,CAAAA;IAE/B,IAAIgJ,WAAAA,CAAYwD,WAAW,EAAE;QAC3BN,GAAIO,CAAAA,SAAS,GAAGzD,WAAAA,CAAYwD,WAAW;AACvCN,QAAAA,GAAAA,CAAIQ,WAAW,GAAG1D,WAAY2D,CAAAA,WAAW,IAAI,mBAAA;AAC7CT,QAAAA,GAAAA,CAAIU,UAAU,CAAC3T,IAAMF,EAAAA,GAAAA,EAAKgH,KAAOC,EAAAA,MAAAA,CAAAA;AACnC;AACAkM,IAAAA,GAAAA,CAAIW,OAAO,EAAA;AACb;AAEA,MAAMC,UAAU,CAAClV,KAAAA,GAAAA;IACfA,KAAMiH,CAAAA,GAAG,GAAG,CAAC/B,KAAAA,EAAOsN,WAAWxH,UAAe/D,GAAAA,GAAAA,CAAIjH,KAAOkF,EAAAA,KAAAA,EAAOsN,SAAWxH,EAAAA,UAAAA,CAAAA;AAC3EhL,IAAAA,KAAAA,CAAMwE,IAAI,GAAG,CAAC2Q,MAAMnK,UAAexG,GAAAA,IAAAA,CAAKxE,OAAOmV,IAAMnK,EAAAA,UAAAA,CAAAA;IACrDhL,KAAMwL,CAAAA,QAAQ,GAAG,CAACC,EAAAA,EAAIC,IAAIV,UAAeQ,GAAAA,QAAAA,CAASxL,KAAOyL,EAAAA,EAAAA,EAAIC,EAAIV,EAAAA,UAAAA,CAAAA;IACjEhL,KAAM2L,CAAAA,SAAS,GAAG,CAACrG,EAAAA,EAAI1B,OAAOoH,UAAeW,GAAAA,SAAAA,CAAU3L,KAAOsF,EAAAA,EAAAA,EAAI1B,KAAOoH,EAAAA,UAAAA,CAAAA;AACzEhL,IAAAA,KAAAA,CAAM6L,SAAS,GAAG,CAACb,UAAAA,GAAea,UAAU7L,KAAOgL,EAAAA,UAAAA,CAAAA;IACnDhL,KAAMiM,CAAAA,YAAY,GAAG,IAAMA,YAAajM,CAAAA,KAAAA,CAAAA;IACxCA,KAAMyM,CAAAA,qBAAqB,GAAG,IAAMA,qBAAsBzM,CAAAA,KAAAA,CAAAA;IAC1DA,KAAM2M,CAAAA,oBAAoB,GAAG,IAAMA,oBAAqB3M,CAAAA,KAAAA,CAAAA;IACxDA,KAAM4M,CAAAA,gBAAgB,GAAG,IAAMA,gBAAiB5M,CAAAA,KAAAA,CAAAA;IAChDA,KAAMgN,CAAAA,kBAAkB,GAAG,IAAMA,kBAAmBhN,CAAAA,KAAAA,CAAAA;AACtD,CAAA;AAEA,aAAe;IACbsF,EAAI,EAAA,MAAA;AAEJ8P,IAAAA,OAAAA;AAEAjB,IAAAA,QAAAA;AAEAkB,IAAAA,KAAAA,CAAAA,CAAMrV,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AAC5D,QAAA,MAAMM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvBwC,QAAAA,KAAAA,CAAMN,OAAO,GAAGA,OAAAA;QAEhB,IAAIpB,MAAAA,CAAOyU,SAAS,CAACC,cAAc,CAACC,IAAI,CAACvT,OAAAA,CAAQsC,IAAI,EAAE,SAAY,CAAA,EAAA;AACjEkR,YAAAA,OAAAA,CAAQC,IAAI,CACV,kIAAA,CAAA;AAEJ;QACA,IACE7U,MAAAA,CAAOyU,SAAS,CAACC,cAAc,CAACC,IAAI,CAACvT,QAAQsC,IAAI,EAAE,oBACnD1D,MAAOyU,CAAAA,SAAS,CAACC,cAAc,CAACC,IAAI,CAACvT,OAAAA,CAAQ+E,GAAG,EAAE,eAClD,CAAA,EAAA;AACAyO,YAAAA,OAAAA,CAAQC,IAAI,CACV,0GAAA,CAAA;AAEJ;AAEA,QAAA,IAAIzC,MAAQ,EAAA;AACVF,YAAAA,WAAAA,CAAYhT,KAAOkC,EAAAA,OAAAA,CAAAA;AACrB;QAEAgT,OAAQlV,CAAAA,KAAAA,CAAAA;AACV,KAAA;AAEA4V,IAAAA,WAAAA,CAAAA,CACE5V,KAAY,EACZ,EAAEL,KAAK,EAAkF,EAAA;AAEzF,QAAA,MAAM6C,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;AACvB,QAAA,IAAI+M,wBAAwBvK,KAAQ,CAAA,EAAA;YAElC,OAAO,KAAA;AACT;AAEA,QAAA,IAAI7C,MAAM0D,IAAI,KAAK,WAAW1D,KAAM0D,CAAAA,IAAI,KAAK,SAAW,EAAA;YACtD,IAAIb,KAAAA,CAAMyK,eAAe,EAAE;AACzBzK,gBAAAA,KAAAA,CAAMyK,eAAe,GAAG,KAAA;gBACxB,OAAO,KAAA;AACT;AACF;AACF,KAAA;AAEA4I,IAAAA,YAAAA,CAAAA,CAAa7V,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACnE,QAAA,MAAMM,QAAQD,QAASvC,CAAAA,KAAAA,CAAAA;QACvB,MAAM8V,eAAAA,GAAkBtT,MAAMN,OAAO;AACrCM,QAAAA,KAAAA,CAAMN,OAAO,GAAGA,OAAAA;QAGhB,IAAI0R,oBAAAA,CAAqBkC,iBAAiB5T,OAAU,CAAA,EAAA;YAClDuR,UAAWzT,CAAAA,KAAAA,CAAAA;AACXgT,YAAAA,WAAAA,CAAYhT,KAAOkC,EAAAA,OAAAA,CAAAA;AACrB;AAEAgP,QAAAA,YAAAA,CAAalR,KAAOkC,EAAAA,OAAAA,CAAAA;AACtB,KAAA;AAEA6T,IAAAA,kBAAAA,CAAAA,CAAmB/V,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACzE6L,QAAAA,IAAAA,CAAK/N,OAAO,oBAAsBkC,EAAAA,OAAAA,CAAAA;AACpC,KAAA;AAEA8T,IAAAA,iBAAAA,CAAAA,CAAkBhW,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACxE6L,QAAAA,IAAAA,CAAK/N,OAAO,mBAAqBkC,EAAAA,OAAAA,CAAAA;AACnC,KAAA;AAEA+T,IAAAA,UAAAA,CAAAA,CAAWjW,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AACjE6L,QAAAA,IAAAA,CAAK/N,OAAO,YAAckC,EAAAA,OAAAA,CAAAA;AAC5B,KAAA;AAEAgU,IAAAA,SAAAA,CAAAA,CAAUlW,KAAY,EAAEsV,KAAc,EAAEpT,OAA0B,EAAA;AAChE6L,QAAAA,IAAAA,CAAK/N,OAAO,WAAakC,EAAAA,OAAAA,CAAAA;AAC3B,KAAA;AAEAiU,IAAAA,IAAAA,CAAAA,CAAKnW,KAAY,EAAA;QACfqR,eAAgBrR,CAAAA,KAAAA,CAAAA;AAEhB,QAAA,IAAIkT,MAAQ,EAAA;YACVO,UAAWzT,CAAAA,KAAAA,CAAAA;AACb;QACAkD,WAAYlD,CAAAA,KAAAA,CAAAA;AACd,KAAA;AAEAoK,IAAAA,YAAAA;AACAL,IAAAA,aAAAA;AACAI,IAAAA;AACF,CAAC;;;;"}
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * @thewhitehaven04/chartjs-plugin-zoom v2.2.22
3
- * https://www.chartjs.org/chartjs-plugin-zoom/2.2.22/
2
+ * chartjs-plugin-zoom v2.2.0
3
+ * https://www.chartjs.org/chartjs-plugin-zoom/2.2.0/
4
4
  * (c) 2016-2026 chartjs-plugin-zoom Contributors
5
5
  * Released under the MIT License
6
6
  */
@@ -424,12 +424,7 @@ function zoom(chart, amount, transition = 'none', trigger = 'api') {
424
424
  chart.update(transition);
425
425
  zoomOptions?.onZoom?.({
426
426
  chart,
427
- trigger,
428
- amount: {
429
- x,
430
- y,
431
- focalPoint
432
- }
427
+ trigger
433
428
  });
434
429
  }
435
430
  function zoomRect(chart, p0, p1, transition = 'none', trigger = 'api') {
@@ -523,7 +518,7 @@ function panScale(scale, delta, limits, state) {
523
518
  panDelta[scale.id] = delta;
524
519
  }
525
520
  }
526
- function pan(chart, delta, enabledScales, transition = 'none', trigger = 'other') {
521
+ function pan(chart, delta, enabledScales, transition = 'none') {
527
522
  const { x = 0, y = 0 } = typeof delta === 'number' ? {
528
523
  x: delta,
529
524
  y: delta
@@ -544,12 +539,7 @@ function pan(chart, delta, enabledScales, transition = 'none', trigger = 'other'
544
539
  }
545
540
  chart.update(transition);
546
541
  onPan?.({
547
- chart,
548
- trigger,
549
- delta: {
550
- x,
551
- y
552
- }
542
+ chart
553
543
  });
554
544
  }
555
545
  function getInitialScaleBounds(chart) {
@@ -1046,7 +1036,7 @@ function hammerOptionsChanged(oldOptions, newOptions) {
1046
1036
  return false;
1047
1037
  }
1048
1038
 
1049
- var version = "2.2.22";
1039
+ var version = "2.2.0";
1050
1040
 
1051
1041
  const defaults = {
1052
1042
  pan: {
@@ -1096,7 +1086,7 @@ function draw(chart, caller, options) {
1096
1086
  ctx.restore();
1097
1087
  }
1098
1088
  const bindApi = (chart)=>{
1099
- chart.pan = (delta, panScales, transition)=>pan(chart, delta, panScales, transition, 'api');
1089
+ chart.pan = (delta, panScales, transition)=>pan(chart, delta, panScales, transition);
1100
1090
  chart.zoom = (args, transition)=>zoom(chart, args, transition);
1101
1091
  chart.zoomRect = (p0, p1, transition)=>zoomRect(chart, p0, p1, transition);
1102
1092
  chart.zoomScale = (id, range, transition)=>zoomScale(chart, id, range, transition);