sheet-happens 0.0.49 → 0.0.51
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.
- package/dist/autosize.d.ts +1 -0
- package/dist/cell.d.ts +9 -0
- package/dist/constants.d.ts +2 -2
- package/dist/coordinate.d.ts +2 -1
- package/dist/image.d.ts +6 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1217 -1346
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +1218 -1348
- package/dist/index.modern.js.map +1 -1
- package/dist/layout.d.ts +1 -1
- package/dist/mouse.d.ts +2 -2
- package/dist/render.d.ts +5 -3
- package/dist/style.d.ts +1 -2
- package/dist/text.d.ts +2 -0
- package/dist/types.d.ts +48 -18
- package/package.json +24 -23
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/group.ts","../src/props.ts","../src/mouse.ts","../src/keyboard.ts","../src/scroll.ts","../src/autosize.ts","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/clipboard.ts","../src/layout.ts","../src/style.ts","../src/render.ts","../src/sheet.tsx"],"sourcesContent":["import { XY, Rectangle, Selection, Clickable, Direction, Style } from './types';\n\nexport const INITIAL_MAX_SCROLL: XY = [2000, 1000];\n\nexport const ORIGIN: XY = [0, 0];\nexport const ONE_ONE: XY = [1, 1];\nexport const NEG_NEG: XY = [-1, -1];\n\nexport const NO_CELL: XY = [-1, -1];\nexport const NO_SELECTION: Rectangle = [NO_CELL, NO_CELL];\nexport const NO_SELECTIONS: Selection[] = [];\nexport const NO_CLICKABLES: Clickable[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 100000;\n\nexport const COLORS = {\n selectionBorder: '#1a66ff',\n selectionBackground: '#d8e6ff80',\n\n gridLine: '#0000001f',\n\n dragGhost: '#1a66ff30',\n dropTarget: '#1a66ff',\n knobAreaBorder: '#707070',\n\n headerBackground: '#f6f9fc',\n headerText: '#666666',\n headerActive: '#e8f0ff',\n headerActiveText: '#1a66ff',\n\n headerSelected: '#1a66ff',\n headerSelectedGroup: '#1a66ff70',\n headerSelectedText: '#ffffff',\n headerSelectedGroupText: '#ffffff',\n\n shadowColor: '#000000',\n};\n\nexport const SIZES = {\n knobArea: 6,\n headerWidth: 50,\n headerHeight: 22,\n minimumWidth: 50,\n minimumHeight: 22,\n resizeZone: 4,\n scrollZone: 50,\n scrollSpeed: 30,\n\n shadowBlur: 12,\n shadowOpacity: 0.05,\n};\n\nexport const DEFAULT_CELL_STYLE: Required<Style> = {\n textAlign: 'left',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const HEADER_ACTIVE_STYLE = {\n color: COLORS.headerActiveText,\n};\n\nexport const HEADER_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelected,\n color: COLORS.headerSelectedText,\n};\n\nexport const HEADER_GROUP_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelectedGroup,\n color: COLORS.headerSelectedGroupText,\n};\n\nexport const ARROW_KEYS: Record<string, Direction> = {\n ArrowRight: 'right',\n ArrowLeft: 'left',\n ArrowUp: 'up',\n ArrowDown: 'down',\n};\n","export const tail = <T>(list: T[]): T => list[list.length - 1];\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(max, x), min);\n\nexport const seq = (n: number, s: number = 0, d: number = 1): number[] =>\n Array.from({ length: n }).map((_, i: number) => s + d * i);\n\nexport const isInRange = (x: number, min: number, max: number) => min <= x && x <= max;\nexport const isInRangeLeft = (x: number, min: number, max: number) => min <= x && x < max;\nexport const isInRangeRight = (x: number, min: number, max: number) => min < x && x <= max;\nexport const isInRangeCenter = (x: number, min: number, max: number) => min < x && x < max;\n","import { XY, Rectangle } from './types';\nimport { clamp } from './util';\n\nexport const addXY = (a: XY, b: XY): XY => [a[0] + b[0], a[1] + b[1]];\nexport const subXY = (a: XY, b: XY): XY => [a[0] - b[0], a[1] - b[1]];\nexport const mulXY = (a: XY, b: XY): XY => [a[0] * b[0], a[1] * b[1]];\nexport const maxXY = (a: XY, b: XY): XY => [Math.max(a[0], b[0]), Math.max(a[1], b[1])];\nexport const minXY = (a: XY, b: XY): XY => [Math.min(a[0], b[0]), Math.min(a[1], b[1])];\nexport const clampXY = (p: XY, min: XY, max: XY = [Infinity, Infinity]): XY => [\n clamp(p[0], min[0], max[0]),\n clamp(p[1], min[1], max[1]),\n];\n\nexport const getDirectionStep = (direction: string): XY => {\n if (direction === 'left') return [-1, 0];\n if (direction === 'right') return [1, 0];\n if (direction === 'up') return [0, -1];\n if (direction === 'down') return [0, 1];\n return [0, 0];\n};\n\nexport const isSameXY = (a: XY, b: XY) => a[0] === b[0] && a[1] === b[1];\n\nexport const isSameSelection = (a: Rectangle, b: Rectangle) => {\n const [a1, a2] = a;\n const [b1, b2] = b;\n return isSameXY(a1, b1) && isSameXY(a2, b2);\n};\n\nexport const forRange = (min: number, max: number, callback: (i: number) => void) => {\n for (let i = min; i <= max; ++i) callback(i);\n};\n\nexport const forSelectionColumns = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[left], [right]] = normalizeSelection(selection);\n forRange(left, right, callback);\n};\n\nexport const forSelectionRows = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[, top], [, bottom]] = normalizeSelection(selection);\n forRange(top, bottom, callback);\n};\n\nconst forToMap = <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) => <B>(\n map: (...args: A) => B\n) => {\n const out: B[] = [];\n forLoop((...args: A) => out.push(map(...args)));\n return out;\n};\n\nexport const mapSelectionColumns = (selection: Rectangle) => forToMap(forSelectionColumns(selection));\nexport const mapSelectionRows = (selection: Rectangle) => forToMap(forSelectionRows(selection));\n\n// Selection is infinite horizontally\nexport const isMaybeRowSelection = (selection: Rectangle) => {\n const [[left], [right]] = selection;\n return left === -1 && right === -1;\n};\n\n// Selection is infinite vertically\nexport const isMaybeColumnSelection = (selection: Rectangle) => {\n const [[, top], [, bottom]] = selection;\n return top === -1 && bottom === -1;\n};\n\n// Selection is ONLY infinite horizontally\nexport const isRowSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is ONLY infinite vertically\nexport const isColumnSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return top === -1 && bottom === -1 && left !== -1 && right !== -1;\n};\n\n// Selection is not infinite\nexport const isCellSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left !== -1 && right !== -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is null\nexport const isEmptySelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top === -1 && bottom === -1;\n};\n\n// Test cell inside selection (inclusive edges)\nexport const isPointInsideSelection = (selection: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n const [x, y] = point;\n return x >= left && x <= right && y >= top && y <= bottom;\n};\n\n// Validate selections to avoid half-infinite anchor/head\nexport const validateSelection = (selection: Rectangle): Rectangle => {\n let [anchor, head] = selection;\n anchor = anchor.slice() as XY;\n head = head.slice() as XY;\n\n const min = minXY(anchor, head);\n if (min[0] === -1) anchor[0] = head[0] = -1;\n if (min[1] === -1) anchor[1] = head[1] = -1;\n\n return [anchor, head];\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, head), maxXY(anchor, head)];\n};\n\n// Orient normalized rectangle to match existing orientation\nexport const orientSelection = (normalized: Rectangle, to: Rectangle): Rectangle => {\n const [[left, top], [right, bottom]] = normalized;\n\n const [anchor, head] = to;\n const [ax, ay] = anchor;\n const [hx, hy] = head;\n\n const swapX = (ax - hx || 1) * (right - left || 1) < 0;\n const swapY = (ay - hy || 1) * (bottom - top || 1) < 0;\n\n return [\n [swapX ? right : left, swapY ? bottom : top],\n [swapX ? left : right, swapY ? top : bottom],\n ];\n};\n\n// Clip rectangle to max range\nexport const clipSelection = (selection: Rectangle, max: XY): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, max), minXY(head, max)];\n};\n","import { XY, Rectangle, RowOrColumnPropertyFunction } from './types';\nimport { normalizeSelection, orientSelection } from './coordinate';\n\nconst LIMIT = 1000;\n\nconst scanGroup = (\n keys: RowOrColumnPropertyFunction<string | number | null>,\n index: number,\n direction: number,\n matchKeys: Set<string | number | null>\n) => {\n let i = 1;\n const limit = direction > 0 ? LIMIT : Math.min(LIMIT, index + 1);\n for (; i < limit; i++) {\n const key = keys(index + i * direction);\n if (key == null || !matchKeys.has(key)) break;\n }\n return index + (i - 1) * direction;\n};\n\n// Expand a selection to its adjacent row or column group\nexport const expandSelectionToRowOrColumnGroups = (\n selection: Rectangle,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n matchKeys: Set<string | number | null> | null,\n coordinate: number // 0/1 for X/Y\n) => {\n if (!matchKeys) return selection;\n\n const [first, second] = normalizeSelection(selection);\n\n const start = first[coordinate];\n const end = second[coordinate];\n\n const startIndex = scanGroup(groupKeys, start, -1, matchKeys);\n const endIndex = scanGroup(groupKeys, end, 1, matchKeys);\n\n const expanded: Rectangle = [first.slice() as XY, second.slice() as XY];\n expanded[0][coordinate] = startIndex;\n expanded[1][coordinate] = endIndex;\n\n const oriented = orientSelection(expanded, selection);\n return oriented;\n};\n\nexport const isBoundaryInsideGroup = (\n index: number,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>\n) => {\n const before = groupKeys(index - 1);\n const after = groupKeys(index);\n return before != null && after != null && before === after;\n};\n","import {\n Direction,\n XY,\n CellContentType,\n CellProperty,\n CellPropertyFunction,\n CellPropertyStyled,\n CellPropertyStyledFunction,\n PropTypes,\n RowOrColumnProperty,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyled,\n RowOrColumnPropertyStyledFunction,\n} from './types';\nimport { MAX_SEARCHABLE_INDEX, ORIGIN, DEFAULT_CELL_STYLE } from './constants';\nimport { addXY, subXY, maxXY, getDirectionStep } from './coordinate';\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnProp = <T extends PropTypes>(\n rowColProp: RowOrColumnProperty<T> | undefined,\n defaultValue: T\n): RowOrColumnPropertyFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellProp = <T extends PropTypes>(\n cellProp: CellProperty<T> | undefined,\n defaultValue: T\n): CellPropertyFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnStyledProp = <T extends PropTypes>(\n rowColProp: RowOrColumnPropertyStyled<T> | undefined,\n defaultValue: T\n): RowOrColumnPropertyStyledFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellStyledProp = <T extends PropTypes>(\n cellProp: CellPropertyStyled<T> | undefined,\n defaultValue: T\n): CellPropertyStyledFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\nexport const findApproxMaxEditDataIndex = (editData: CellPropertyFunction<string>): XY => {\n let x = 0;\n let y = 0;\n let howManyEmpty = 0;\n let growthIncrement = 10;\n let growthIncrementFactor = 1.5;\n\n // x\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let yy = 0; yy < 10; yy++) {\n const data = editData(x, yy);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n x += growthIncrement;\n if (x > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n\n howManyEmpty = 0;\n growthIncrement = 10;\n growthIncrementFactor = 1.5;\n\n // y\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let xx = 0; xx < 10; xx++) {\n const data = editData(xx, y);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n y += growthIncrement;\n if (y > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return [x, y];\n};\n\nexport const findInDisplayData = (\n displayData: CellPropertyStyledFunction<CellContentType>,\n start: XY,\n direction: Direction\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = maxXY(start, ORIGIN);\n const [x, y] = addXY(cell, step);\n const first = displayData(x, y, DEFAULT_CELL_STYLE);\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n cell = addXY(cell, step);\n }\n\n let [cellX, cellY] = cell;\n const maxX = cellX + MAX_SEARCHABLE_INDEX - 1;\n const maxY = cellY + MAX_SEARCHABLE_INDEX - 1;\n\n while (cellX < maxX && cellY < maxY && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY, DEFAULT_CELL_STYLE);\n\n // if first cell is filled, find the last filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return subXY(cell, step);\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return cell;\n }\n\n [cellX, cellY] = cell = addXY(cell, step);\n }\n\n return maxXY(cell, [0, 0]);\n};\n","import {\n CellLayout,\n CellPropertyFunction,\n Change,\n Clickable,\n Rectangle,\n RowOrColumnPropertyFunction,\n SheetMouseEvent,\n SheetStyle,\n VisibleLayout,\n XY,\n} from './types';\nimport { MouseEvent, PointerEvent, RefObject, useCallback, useMemo, useRef, useState } from 'react';\nimport {\n normalizeSelection,\n mapSelectionColumns,\n mapSelectionRows,\n isColumnSelection,\n isRowSelection,\n isCellSelection,\n isMaybeRowSelection,\n isPointInsideSelection,\n addXY,\n subXY,\n maxXY,\n} from './coordinate';\nimport { ONE_ONE, ORIGIN, SIZES } from './constants';\nimport { isBoundaryInsideGroup, expandSelectionToRowOrColumnGroups } from './group';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange, seq } from './util';\n\ntype DragOp = {\n anchor: number;\n scroll: number;\n size: number;\n indices: number[];\n};\n\nexport const useMouse = (\n hitmapRef: RefObject<Clickable[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n\n canSizeColumn: RowOrColumnPropertyFunction<boolean | null>,\n canSizeRow: RowOrColumnPropertyFunction<boolean | null>,\n canOrderColumn: RowOrColumnPropertyFunction<boolean | null>,\n canOrderRow: RowOrColumnPropertyFunction<boolean | null>,\n\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n sheetStyle: SheetStyle,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n getAutoSizeWidth: (column: number) => number,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragIndicesChange?: (indices: [number[] | null, number[] | null]) => void,\n onDragOffsetChange?: (dragOffset: XY | null) => void,\n onDropTargetChange?: (selection: Rectangle | null) => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n\n onInvalidateColumn?: (column: number) => void,\n onInvalidateRow?: (row: number) => void,\n\n onChange?: (changes: Change[]) => void,\n onColumnOrderChange?: (indices: number[], order: number) => void,\n onRowOrderChange?: (indices: number[], order: number) => void,\n onCellWidthChange?: (indices: number[], values: number[]) => void,\n onCellHeightChange?: (indices: number[], values: number[]) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n dontChangeSelectionOnOrderChange?: boolean\n) => {\n const [hitTarget, setHitTarget] = useState<Clickable | null>(null);\n\n const [columnResize, setColumnResize] = useState<DragOp | null>(null);\n const [rowResize, setRowResize] = useState<DragOp | null>(null);\n const [columnDrag, setColumnDrag] = useState<DragOp | null>(null);\n const [rowDrag, setRowDrag] = useState<DragOp | null>(null);\n\n const [draggingKnob, setDraggingKnob] = useState(false);\n const [draggingSelection, setDraggingSelection] = useState(false);\n const [draggingRowSelection, setDraggingRowSelection] = useState(false);\n const [draggingColumnSelection, setDraggingColumnSelection] = useState(false);\n\n const { hideRowHeaders, hideColumnHeaders } = sheetStyle;\n const { cellToPixel, getVersion } = cellLayout;\n const version = getVersion();\n\n const knobPosition = useMemo((): XY | null => {\n const [, [maxX, maxY]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n return subXY(addXY(cellToPixel([0, maxY], [0, 1]), [SIZES.knobArea * 0.5, 0]), ONE_ONE);\n }\n if (isColumnSelection(selection)) {\n return subXY(addXY(cellToPixel([maxX, 0], [1, 0]), [0, SIZES.knobArea * 0.5]), ONE_ONE);\n }\n if (isCellSelection(selection)) {\n return subXY(cellToPixel([maxX, maxY], ONE_ONE), ONE_ONE);\n }\n return null;\n }, [selection, cellToPixel, version]);\n\n // Pass pointer/dragging state into handlers via ref so they don't need to rebind during resizes/drags\n const refState = {\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\n hitTarget,\n\n knobPosition,\n columnResize,\n rowResize,\n columnDrag,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingRowSelection,\n draggingColumnSelection,\n };\n const ref = useRef(refState);\n ref.current = refState;\n\n // Hit-testing for rendered objects\n const getMousePosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [e.clientX - rect.left, e.clientY - rect.top];\n\n // Ignore clicks on scrollbar\n if (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight) {\n return null;\n }\n\n return xy;\n }, []);\n\n const getScrollPosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return [0, 0];\n }\n\n const { scrollLeft, scrollTop } = e.target as any;\n const xy: XY = [scrollLeft, scrollTop];\n\n return xy;\n }, []);\n\n const getMouseHit = useCallback(\n (xy: XY) => {\n const { current: hitmap } = hitmapRef;\n if (!hitmap) return null;\n\n for (const object of hitmap) {\n const { rect } = object;\n if (isPointInsideSelection(rect, xy)) {\n return object;\n }\n }\n\n return null;\n },\n [hitmapRef]\n );\n\n const onPointerLeave = useCallback(() => {\n window.document.body.style.cursor = 'auto';\n }, []);\n\n const onPointerDown = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n cellLayout: { columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY },\n visibleCells: { columns, rows },\n knobPosition,\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n setHitTarget(hitTarget);\n // Update hitTarget in ref in case there is no re-render between pointerDown and pointerUp\n ref.current.hitTarget = hitTarget;\n return;\n }\n\n const normalized = normalizeSelection(selection);\n const [[minX, minY], [maxX, maxY]] = normalized;\n\n const selectedColumns = mapSelectionColumns(selection)((i) => i);\n const selectedRows = mapSelectionRows(selection)((i) => i);\n\n // Column header\n if (!hideColumnHeaders && y < getIndentY()) {\n // Grab selected columns in column selection\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index, 0);\n const end = columnToPixel(index, 1);\n\n if (\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) || selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedColumns,\n ...(selectedColumnGroups\n ? columns.filter((index) =>\n selectedColumnGroups.has(columnGroupKeys(index))\n )\n : []),\n ]).values()\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedColumnGroups) {\n const clickSelection: Rectangle = [\n [index, -1],\n [index, -1],\n ];\n const [[left], [right]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n columnGroupKeys,\n selectedColumnGroups,\n 0\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minX > right || maxX < left);\n const dragStart = connected ? Math.min(minX, left) : left;\n const dragEnd = connected ? Math.max(maxX, right) : right;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = columnToPixel(maxX, 1) - columnToPixel(minX);\n const [scroll] = getScrollPosition(e);\n\n setColumnDrag({\n anchor: x,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([dragIndices, null]);\n return;\n }\n }\n }\n }\n\n // Resize columns\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n\n const asGroup = isColumnSelection(selection) && maxX === index;\n const indices = asGroup ? selectedColumns : [index];\n\n const size = asGroup\n ? columnToPixel(maxX, 1) - columnToPixel(minX)\n : columnToPixel(index, 1) - columnToPixel(index);\n const [scroll] = getScrollPosition(e);\n\n setColumnResize({\n anchor: x,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n // Grab selected rows in row selection\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index, 0);\n const end = rowToPixel(index, 1);\n\n if (\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedRows,\n ...(selectedRowGroups\n ? rows\n .map((_, i) => i)\n .filter((index) => selectedRowGroups.has(rowGroupKeys(index)))\n : []),\n ]).values()\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedRowGroups) {\n const clickSelection: Rectangle = [\n [-1, index],\n [-1, index],\n ];\n const [[, top], [, bottom]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n rowGroupKeys,\n selectedRowGroups,\n 1\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minY > bottom || maxY < top);\n const dragStart = connected ? Math.min(minY, top) : top;\n const dragEnd = connected ? Math.max(maxY, bottom) : bottom;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = rowToPixel(maxY, 1) - rowToPixel(minY);\n const [, scroll] = getScrollPosition(e);\n\n setRowDrag({\n anchor: y,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([null, dragIndices]);\n return;\n }\n }\n }\n }\n\n // Resize rows\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n\n const asGroup = isRowSelection(selection) && maxY === index;\n const indices = asGroup ? selectedRows : [index];\n\n const size = asGroup\n ? rowToPixel(maxY, 1) - rowToPixel(minY)\n : rowToPixel(index, 1) - rowToPixel(index);\n const [, scroll] = getScrollPosition(e);\n\n setRowResize({\n anchor: y,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Knob drag mode\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n setDraggingKnob(true);\n onKnobAreaChange?.(selection);\n return;\n }\n }\n\n // Normal cell click\n const head = pixelToCell(xy);\n const anchor: XY = e.shiftKey ? [...selection[0]] : head;\n\n if (editMode) {\n if (!dontCommitEditOnSelectionChange) {\n onCommit?.();\n }\n }\n\n let scrollTo = true;\n\n if (!hideRowHeaders && x < getIndentX()) {\n scrollTo = false;\n setDraggingRowSelection(true);\n anchor[0] = -1;\n head[0] = -1;\n }\n\n if (!hideColumnHeaders && y < getIndentY()) {\n scrollTo = false;\n setDraggingColumnSelection(true);\n anchor[1] = -1;\n head[1] = -1;\n }\n\n setDraggingSelection(true);\n onSelectionChange?.([anchor, head], scrollTo, true);\n },\n [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onColumnOrderChange,\n onRowOrderChange,\n onCellWidthChange,\n onCellHeightChange,\n onKnobAreaChange,\n onSelectionChange,\n onCommit,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n dontCommitEditOnSelectionChange,\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n ]\n );\n\n const onPointerUp = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n knobArea,\n selection,\n sourceData,\n editData,\n\n columnDrag,\n rowDrag,\n\n draggingKnob,\n\n cellLayout: { pixelToColumn, pixelToRow, getIndentX, getIndentY },\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly);\n\n onChange?.(changes);\n onSelectionChange?.(knobArea, true, true);\n onKnobAreaChange?.(null);\n }\n\n const xy = getMousePosition(e);\n if (xy && (columnDrag || rowDrag)) {\n window.document.body.style.cursor = 'auto';\n onDragIndicesChange?.([null, null]);\n onDragOffsetChange?.(null);\n onDropTargetChange?.(null);\n\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n\n if (columnDrag) {\n const { indices } = columnDrag;\n\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = selectedColumnGroups?.has(columnGroupKeys(x));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellX);\n const order = cellX - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [order, minY],\n [order + indices.length - 1, maxY],\n ]);\n onColumnOrderChange?.(indices, order);\n onInvalidateColumn?.(Math.min(minX, order));\n }\n }\n if (rowDrag) {\n const { indices } = rowDrag;\n\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = selectedRowGroups?.has(rowGroupKeys(y));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellY);\n const order = cellY - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [minX, order],\n [maxX, order + indices.length - 1],\n ]);\n onRowOrderChange?.(indices, order);\n onInvalidateRow?.(Math.min(minY, order));\n }\n }\n }\n\n setDraggingSelection(false);\n setDraggingRowSelection(false);\n setDraggingColumnSelection(false);\n setDraggingKnob(false);\n setColumnResize(null);\n setColumnDrag(null);\n setRowResize(null);\n setRowDrag(null);\n },\n [\n getMousePosition,\n getMouseHit,\n onChange,\n onSelectionChange,\n onKnobAreaChange,\n onDropTargetChange,\n onColumnOrderChange,\n onRowOrderChange,\n dontChangeSelectionOnOrderChange,\n ]\n );\n\n const onPointerMove = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n visibleCells,\n\n knobPosition,\n columnResize,\n columnDrag,\n rowResize,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingColumnSelection,\n draggingRowSelection,\n\n cellLayout: {\n columnToPixel,\n rowToPixel,\n pixelToCell,\n pixelToColumn,\n pixelToRow,\n getIndentX,\n getIndentY,\n },\n },\n } = ref;\n\n window.document.body.style.cursor = 'auto';\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n } else if (columnDrag || rowDrag) {\n window.document.body.style.cursor = 'grabbing';\n } else if (columnResize) {\n window.document.body.style.cursor = 'col-resize';\n e.preventDefault();\n } else if (rowResize) {\n window.document.body.style.cursor = 'row-resize';\n e.preventDefault();\n } else if (draggingRowSelection || draggingColumnSelection) {\n e.preventDefault();\n }\n\n const { columns, rows } = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const isDragging =\n columnResize || columnDrag || rowResize || rowDrag || draggingRowSelection || draggingColumnSelection;\n\n if (!isDragging) {\n if (!hideColumnHeaders && y < getIndentY()) {\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index);\n const end = columnToPixel(index, 1);\n\n if (\n !draggingColumnSelection &&\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) ||\n selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index);\n const end = rowToPixel(index, 1);\n\n if (\n !draggingRowSelection &&\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n return;\n }\n }\n }\n }\n\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n window.document.body.style.cursor = 'crosshair';\n return;\n }\n }\n }\n\n if (columnResize) {\n if (onCellWidthChange) {\n const { size, anchor, scroll, indices } = columnResize;\n const [currentScroll] = getScrollPosition(e);\n const newWidth = Math.max(\n size + x - anchor + scroll - currentScroll,\n SIZES.minimumWidth * indices.length\n );\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(\n indices,\n indices.map((_) => Math.round(newWidth / indices.length))\n );\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const { size, anchor, scroll, indices } = rowResize;\n const [, currentScroll] = getScrollPosition(e);\n const newHeight = Math.max(\n size + y - anchor + scroll - currentScroll,\n SIZES.minimumHeight * indices.length\n );\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(\n indices,\n indices.map((_) => newHeight / indices.length)\n );\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = pixelToCell(xy);\n\n const [anchorX, anchorY] = anchor;\n const [headX, headY] = head;\n\n if (draggingRowSelection) {\n onSelectionChange?.(\n [\n [-1, anchorY],\n [-1, Math.max(0, headY)],\n ],\n false\n );\n } else if (draggingColumnSelection) {\n onSelectionChange?.(\n [\n [anchorX, -1],\n [Math.max(0, headX), -1],\n ],\n false\n );\n } else {\n onSelectionChange?.([maxXY(anchor, ORIGIN), maxXY(head, ORIGIN)], false);\n }\n }\n\n if (draggingKnob) {\n window.document.body.style.cursor = 'crosshair';\n\n const [cellX, cellY] = pixelToCell(xy);\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // check if vertical or horizontal\n let xCellDiff = Math.min(cellX - minX, maxX - cellX, 0); // zero or less\n let yCellDiff = Math.min(cellY - minY, maxY - cellY, 0); // zero or less\n\n if (isMaybeRowSelection(selection) || xCellDiff > yCellDiff) {\n if (cellY < minY) {\n minY = cellY;\n } else if (cellY > maxY) {\n maxY = cellY;\n }\n } else {\n if (cellX < minX) {\n minX = cellX;\n } else if (cellX > maxX) {\n maxX = cellX;\n }\n }\n\n onKnobAreaChange?.([\n [minX, minY],\n [maxX, maxY],\n ]);\n }\n\n if (columnDrag || rowDrag) {\n const [x, y] = xy;\n if (columnDrag) {\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = isBoundaryInsideGroup(cellX, columnGroupKeys);\n\n const { anchor, scroll } = columnDrag;\n const shift = x - anchor;\n const [currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([shift + currentScroll - scroll, 0]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [cellX, -1],\n [cellX, -1],\n ]\n );\n }\n if (rowDrag) {\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = isBoundaryInsideGroup(cellY, rowGroupKeys);\n\n const { anchor, scroll } = rowDrag;\n const shift = y - anchor;\n const [, currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([0, shift + currentScroll - scroll]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [-1, cellY],\n [-1, cellY],\n ]\n );\n }\n }\n },\n [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onCellWidthChange,\n onCellHeightChange,\n onDragIndicesChange,\n onDragOffsetChange,\n onDropTargetChange,\n onSelectionChange,\n onKnobAreaChange,\n onInvalidateRow,\n onInvalidateColumn,\n columnGroupKeys,\n rowGroupKeys,\n ]\n );\n\n const onClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: { hitTarget },\n } = ref;\n if (!hitTarget) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n setHitTarget(null);\n\n // Check hit target rect to see if it is the same as pointerDown\n // (object identity might have changed due to react re-render)\n const previousRect = JSON.stringify(hitTarget.rect);\n const currentRect = JSON.stringify(getMouseHit(xy)?.rect);\n if (previousRect === currentRect) {\n const { obj } = hitTarget;\n obj.onClick?.(e);\n }\n },\n [getMousePosition, getMouseHit]\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel, getIndentY },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n // Double click column divider to autosize\n const [x, y] = xy;\n const indentY = getIndentY();\n const { columns } = visibleCells;\n if (onCellWidthChange && y < indentY) {\n const autosized = [];\n\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n const [[minX], [maxX]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isColumnSelection(selection) && index >= minX && index <= maxX\n ? mapSelectionColumns(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const column of autosized) {\n onInvalidateColumn?.(column - 1);\n }\n onCellWidthChange(\n autosized,\n autosized.map((column) => getAutoSizeWidth(column))\n );\n if (autosized.length) return;\n }\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n return;\n }\n\n const editCell = pixelToCell(xy);\n if (editMode) onCommit?.();\n onEdit?.(editCell);\n },\n [\n getMousePosition,\n getMouseHit,\n onCommit,\n onEdit,\n onInvalidateColumn,\n onCellWidthChange,\n getAutoSizeWidth,\n visibleCells,\n canSizeColumn,\n ]\n );\n\n const onContextMenu = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n cellLayout: { pixelToCell, getIndentX, getIndentY },\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n if (x <= getIndentX() || y <= getIndentY()) {\n return;\n }\n\n // If click is not inside of selection, select the right clicked cell\n const cell = pixelToCell(xy);\n if (!isPointInsideSelection(selection, cell)) {\n onSelectionChange?.([cell, cell]);\n }\n\n onPointerMove(e as any);\n\n const [cellX, cellY] = cell;\n const event: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n onRightClick?.(event);\n },\n [getMousePosition, onSelectionChange, onPointerMove, onRightClick]\n );\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onClick,\n onDoubleClick,\n onContextMenu,\n };\n\n return { knobPosition, mouseHandlers };\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n sourceData: CellPropertyFunction<string | number | null>,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean | null>\n): Change[] => {\n const [[kx1, ky1], [kx2, ky2]] = normalizeSelection(knobArea);\n const [[sx1, sy1], [sx2, sy2]] = normalizeSelection(selection);\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Change[] = [];\n\n // TODO: this should be made less cryptic, using logical selection ops/fns\n\n if (fx2 - fx1 === sx2 - sx1) {\n // vertical\n if (fy1 === sy1) {\n fy1 = sy2 + 1;\n } else {\n fy2 = sy1 - 1;\n }\n if (fx1 === -1 && fx2 === -1) {\n const [maxX] = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = maxX;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\n }\n }\n srcY = srcY + 1;\n if (srcY > sy2) {\n srcY = sy1;\n }\n }\n } else {\n // horizontal\n if (fx1 === sx1) {\n fx1 = sx2 + 1;\n } else {\n fx2 = sx1 - 1;\n }\n if (fy1 === -1 && fy2 === -1) {\n const [, maxY] = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = maxY;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n return changes;\n};\n","import { RefObject, KeyboardEvent, useLayoutEffect } from 'react';\n\nimport { ARROW_KEYS, MAX_SEARCHABLE_INDEX, ORIGIN, NEG_NEG } from './constants';\n\nimport { findInDisplayData } from './props';\n\nimport { CellContentType, CellPropertyFunction, CellPropertyStyledFunction, Change, Rectangle, XY } from './types';\n\nimport {\n normalizeSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\n\nexport const useKeyboard = (\n arrowKeyCommitMode: boolean,\n overlayRef: RefObject<HTMLDivElement>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n editCell: XY,\n editMode: boolean,\n focused: boolean,\n rawSelection: Rectangle,\n selection: Rectangle,\n\n onEdit?: (cell: XY, arrowKeyCommitMode?: boolean) => void,\n onCommit?: () => void,\n onCancel?: () => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n onClipboardCopy?: (cut: boolean) => void,\n onChange?: (changes: Change[]) => void\n) => {\n const onInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel?.();\n return;\n }\n\n const direction =\n e.key === 'Enter' ? 'down' : e.key === 'Tab' ? 'right' : arrowKeyCommitMode ? ARROW_KEYS[e.key] : null;\n\n if (direction) {\n e.preventDefault();\n const step = getDirectionStep(direction);\n const head = maxXY(addXY(editCell, step), ORIGIN);\n onCommit?.();\n onSelectionChange?.([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && e.key in ARROW_KEYS) {\n onCommit?.();\n return;\n }\n\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'v') {\n return;\n }\n\n // copy\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'c') {\n onClipboardCopy?.(false);\n return;\n }\n // cut\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'x') {\n onClipboardCopy?.(true);\n return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let [[x1, y1], [x2, y2]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n x1 = 0;\n x2 = MAX_SEARCHABLE_INDEX;\n }\n if (isColumnSelection(selection)) {\n y1 = 0;\n y2 = MAX_SEARCHABLE_INDEX;\n }\n\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n }\n\n onChange?.(changes);\n return;\n }\n\n // nothing selected\n if (isEmptySelection(selection)) {\n return;\n }\n\n if (\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 105) ||\n (e.keyCode >= 65 && e.keyCode <= 90) ||\n e.key === 'Enter' ||\n e.key === '-' ||\n e.key === '.' ||\n e.key === ','\n ) {\n const [cell] = selection;\n const [cellX, cellY] = cell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n onEdit?.(cell, e.key !== 'Enter');\n return;\n }\n\n e.preventDefault();\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = rawSelection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n const shift = e.shiftKey;\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n } else {\n // Allow stepping into row/column headers with shift\n const limit: XY = shift\n ? isRowSelection(selection)\n ? [-1, 0]\n : isColumnSelection(selection)\n ? [0, -1]\n : NEG_NEG\n : ORIGIN;\n head = maxXY(addXY(head, step), limit);\n }\n\n if (!shift) {\n anchor = head;\n }\n\n onSelectionChange?.([anchor, head], true, true);\n return;\n }\n };\n\n const onGridFocus = () => {\n onFocusChange?.(true);\n };\n\n const onGridBlur = () => {\n onFocusChange?.(false);\n };\n\n // Focus canvas for keyboard\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) {\n return;\n }\n if (editMode || !focused) {\n return;\n }\n if (document.activeElement === overlay) {\n return;\n }\n\n const activeTagName = (document as any).activeElement.tagName.toLowerCase();\n if (\n !(\n (activeTagName === 'div' && (document as any).activeElement.contentEditable === 'true') ||\n activeTagName === 'input' ||\n activeTagName === 'textarea' ||\n activeTagName === 'select'\n )\n ) {\n overlay.focus({ preventScroll: true });\n }\n }, [editMode, focused]);\n\n return { onInputKeyDown, onGridFocus, onGridBlur, onGridKeyDown };\n};\n","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY } from './coordinate';\nimport { ONE_ONE } from './constants';\n\nexport const useScroll = (\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n onOffsetChange?: (offset: XY) => void,\n onMaxScrollChange?: (maxScroll: XY) => void\n) => {\n return useCallback(\n (e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const { absoluteToCell, cellToAbsolute } = cellLayout;\n\n // Zero scroll position is considered in the center of the top/left cell\n const [nudgeX, nudgeY] = cellToAbsolute([0, 0], [0.5, 0.5]);\n\n const xy: XY = [e.target.scrollLeft + nudgeX, e.target.scrollTop + nudgeY];\n\n const cell = absoluteToCell(xy);\n if (!isSameXY(cell, offset)) {\n onOffsetChange?.(cell);\n }\n\n const [x, y] = xy;\n const [maxScrollX, maxScrollY] = maxScroll;\n const growX = maxScrollX < x + 1 ? 1.5 : 1;\n const growY = maxScrollY < y + 1 ? 1.5 : 1;\n if (growX > 1 || growY > 1) {\n onMaxScrollChange?.(mulXY(maxScroll, [growX, growY]));\n }\n },\n [cellLayout, onOffsetChange, onMaxScrollChange]\n );\n};\n\n// If view extends past end of table\n// Limit view to table contents\nexport const clipDataOffset = (view: XY, offset: XY, freeze: XY, maxCells: XY, cellLayout: CellLayout): XY => {\n let [newX, newY] = offset;\n const [freezeX, freezeY] = freeze;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n } = getViewExtent(view, [newX, newY], freeze, cellLayout);\n\n // Move extra space on the right/bottom to equivalent on the left/top\n if (leftEdge >= maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX + freezeX);\n newX = Math.max(0, absoluteToColumn(columnToAbsolute(newX + freezeX) - scrollW + remainder) - freezeX + 1);\n }\n if (topEdge >= maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY + freezeY);\n newY = Math.max(0, absoluteToRow(rowToAbsolute(newY + freezeY) - scrollH + remainder) - freezeY + 1);\n }\n\n return [newX, newY];\n};\n\n// Get bottom-right corner cell + non-frozen viewport size\nexport const getViewExtent = (\n view: XY,\n offset: XY,\n freeze: XY,\n cellLayout: CellLayout\n): {\n edge: XY;\n viewport: XY;\n} => {\n const {\n cellToAbsolute,\n getIndentX,\n getIndentY,\n } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX - getIndentX();\n const scrollH = h - frozenY - getIndentY();\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n\n return {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n };\n};\n\nexport const scrollToCell = (\n element: HTMLDivElement,\n cell: XY,\n view: XY,\n freeze: XY,\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n callback: (offset: XY, maxScroll: XY) => void\n) => {\n const [x, y] = cell;\n const [w, h] = view;\n const [offsetX, offsetY] = offset;\n\n const { cellToAbsolute, cellToPixel, columnToPixel, rowToPixel } = cellLayout;\n\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n const [left, top] = cellToPixel(cell);\n const [right, bottom] = cellToPixel(cell, ONE_ONE);\n\n let [newX, newY] = offset;\n\n // If moving left/up, scroll to head\n if (left <= frozenX) {\n newX = x - freeze[0];\n }\n if (top <= frozenY) {\n newY = y - freeze[1];\n }\n\n // If moving right/down, scroll cell by cell until right/bottom of cell is visible\n if (right > w) {\n let edge = right - w + columnToPixel(newX);\n while (columnToPixel(++newX) < edge) {}\n }\n if (bottom > h) {\n let edge = bottom - h + rowToPixel(newY);\n while (rowToPixel(++newY) < edge) {}\n }\n\n // Don't scroll on infinite axis\n const newOffset: XY = [newX >= 0 ? newX : offsetX, newY >= 0 ? newY : offsetY];\n\n if (!isSameXY(newOffset, offset)) {\n const scroll = cellToAbsolute(newOffset);\n callback(newOffset, maxXY(maxScroll, scroll));\n\n setTimeout(() => {\n updateScrollPosition(element, newOffset, cellLayout);\n });\n }\n};\n\nexport const updateScrollPosition = (element: HTMLDivElement, dataOffset: XY, cellLayout: CellLayout) => {\n const { cellToAbsolute } = cellLayout;\n\n const scroll = cellToAbsolute(dataOffset);\n const [nudgeX, nudgeY] = cellToAbsolute([0, 0], [0.5, 0.5]);\n\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n};\n","import { useCallback, useMemo } from 'react';\nimport { DEFAULT_COLUMN_HEADER_STYLE, DEFAULT_CELL_STYLE, SIZES } from './constants';\nimport {\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n CellContentType,\n Style,\n} from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n canvasWidth: number\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeWidth = useCallback(\n (x: number) => {\n if (!context) return 0;\n\n const getWidth = (cellContent: Exclude<CellContentType, null>, style: Required<Style>) => {\n context.font = style.weight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const inlineMargin = style.marginLeft + style.marginRight;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const { width } = context.measureText(cellContent.toString());\n return width + inlineMargin;\n } else if (typeof cellContent === 'object') {\n let maxWidth = 0;\n let extraWidth = 0;\n\n for (const obj of cellContent.items) {\n let width = 0;\n if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n const { width: w } = context.measureText(obj.content.toString());\n width = obj.x + w + inlineMargin;\n } else if (obj.width) {\n width = obj.width;\n }\n\n if (obj.horizontalAlign === 'right') {\n extraWidth += style.textAlign === 'right' ? width * 2 : width;\n } else {\n maxWidth = Math.max(maxWidth, width);\n }\n }\n\n return maxWidth + extraWidth;\n }\n return 0;\n };\n\n let maxWidth = SIZES.minimumWidth;\n\n const headerStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) };\n const headerContent = columnHeaders(x, headerStyle);\n if (headerContent) {\n maxWidth = Math.max(maxWidth, getWidth(headerContent, headerStyle));\n }\n\n for (const y of rows) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n const cellContent = displayData(x, y, style);\n if (cellContent != null) {\n maxWidth = Math.max(maxWidth, getWidth(cellContent, style));\n }\n }\n\n return Math.ceil(Math.min(canvasWidth, maxWidth));\n },\n [context, displayData, cellStyle, columnHeaders, columnHeaderStyle]\n );\n\n return getAutoSizeWidth;\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import { ClipboardPayload, CellPropertyFunction, Change, Rectangle } from './types';\nimport { useCallback, useLayoutEffect, useMemo, useState } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport {\n normalizeSelection,\n isMaybeRowSelection,\n isMaybeColumnSelection,\n isEmptySelection,\n addXY,\n forSelectionRows,\n forSelectionColumns,\n} from './coordinate';\n\n// Type missing from TS <=4.3\ninterface ClipboardItem {\n readonly types: string[];\n readonly presentationStyle: 'unspecified' | 'inline' | 'attachment';\n getType(): Promise<Blob>;\n}\n\ndeclare var ClipboardItem: {\n prototype: ClipboardItem;\n new (itemData: any): ClipboardItem;\n};\n\nexport type ClipboardTable<T = any> = {\n rows: string[][];\n payload?: ClipboardPayload<T>;\n};\n\nconst EMPTY_TABLE: ClipboardTable = { rows: [] };\n\n// Access clipboard as HTML table + JSON payload.\n// Provide peek access to clipboard if permission granted.\n// Ask permission on first copy.\nexport const useClipboardTable = () => {\n const [peek, setPeek] = useState<ClipboardTable | null>();\n\n useLayoutEffect(() => {\n const softRefresh = async () => {\n try {\n const status = await navigator.permissions.query({ name: 'clipboard-read' as any });\n if (status.state !== 'granted') return;\n\n hardRefresh();\n } catch (e) {}\n };\n\n const hardRefresh = async () => {\n try {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (item) {\n const peek = await parseClipboardTable(item);\n setPeek(peek);\n } else {\n setPeek(EMPTY_TABLE);\n }\n } catch (e) {}\n };\n\n const delayedRefresh = () => setTimeout(hardRefresh);\n\n window.document.addEventListener('cut', delayedRefresh);\n window.document.addEventListener('copy', delayedRefresh);\n window.document.addEventListener('focus', softRefresh);\n\n softRefresh();\n\n return () => {\n window.document.removeEventListener('cut', delayedRefresh);\n window.document.removeEventListener('copy', delayedRefresh);\n window.document.removeEventListener('focus', softRefresh);\n };\n }, []);\n\n const canPaste = useCallback(\n // Peek may not be available, allow paste attempt.\n () => !!(peek == null || peek.rows?.length),\n [peek]\n );\n\n return {\n peek,\n canPaste,\n copyTable: copyClipboardTable,\n pasteTable: pasteClipboardTable,\n };\n};\n\n// Sheet clipboard with payload-handler injected\nexport const useClipboardAPI = <T = any>(\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean>,\n addListener: boolean,\n\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Change[]) => void,\n onCopy?: (selection: Rectangle, rows: string[][], cut: boolean) => ClipboardPayload<T> | null | undefined,\n onPaste?: (\n selection: Rectangle,\n rows: string[][],\n payload?: ClipboardPayload<T>\n ) => boolean | null | undefined | Promise<boolean | null | undefined>\n) => {\n const { canPaste, copyTable, pasteTable } = useClipboardTable();\n\n const pasteIntoSelection = useCallback(\n async (selection: Rectangle, table: ClipboardTable) => {\n const { rows, payload } = table;\n const [min] = normalizeSelection(selection);\n const [minX, minY] = min;\n\n const left = Math.max(0, minX);\n const top = Math.max(0, minY);\n\n const width = rows.reduce((a, b) => Math.max(a, b.length), 0);\n const height = rows.length;\n\n const newSelection: Rectangle = [min, addXY(min, [width - 1, height - 1])];\n\n const shouldPaste = await onPaste?.(newSelection, rows, payload);\n if (shouldPaste !== false) {\n const changes = rows\n .flatMap((row, j) =>\n row.map((value, i) => {\n const x = left + i;\n const y = top + j;\n return !cellReadOnly?.(x, y) ? { x, y, value } : null;\n })\n )\n .filter((change) => !!change) as Change[];\n\n onChange?.(changes);\n onSelectionChange?.(newSelection);\n }\n },\n [onChange, onSelectionChange, cellReadOnly]\n );\n\n // Imperative API\n const copySelection = useCallback(\n async (selection: Rectangle, cut: boolean = false) => {\n const rows = formatSelectionAsRows(selection, editData);\n const payload = onCopy?.(selection, rows, cut);\n\n copyTable(rows, payload);\n\n if (payload?.cut ?? cut) {\n const changes: Change[] = [];\n forSelectionRows(selection)((y: number) => {\n forSelectionColumns(selection)((x: number) => {\n if (!cellReadOnly?.(x, y)) {\n const change = { x, y, value: '' };\n changes.push(change);\n }\n });\n });\n onChange?.(changes);\n }\n },\n [onCopy, onChange, cellReadOnly]\n );\n\n const pasteSelection = useCallback(\n async (selection: Rectangle) => {\n const table = await pasteTable();\n if (table) pasteIntoSelection(selection, table);\n },\n [pasteIntoSelection]\n );\n\n // Event handlers\n const onClipboardCopy = (cut: boolean) => {\n if (isEmptySelection(selection)) return;\n return copySelection(selection, cut);\n };\n\n const onClipboardPaste = async (e: any) => {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const table = await parseClipboardTable(clipboardData);\n if (table) pasteIntoSelection(selection, table);\n };\n\n useLayoutEffect(() => {\n if (!addListener) return;\n\n // Use onpaste event when we can because it has more browser support\n window.document.addEventListener('paste', onClipboardPaste);\n return () => {\n window.document.removeEventListener('paste', onClipboardPaste);\n };\n });\n\n const clipboardApi = useMemo(\n () => ({\n copySelection,\n pasteSelection,\n canPasteSelection: canPaste,\n }),\n [copySelection, pasteSelection, canPaste]\n );\n\n return { clipboardApi, onClipboardCopy, onClipboardPaste };\n};\n\nconst copyClipboardTable = async (rows: string[][], payload?: ClipboardPayload<any> | null) => {\n const text = formatRowsAsTSV(rows);\n const html = formatRowsAsHTML(rows, payload ?? undefined);\n\n await (navigator.clipboard as any).write([\n new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([text], { type: 'text/plain' }),\n }),\n ]);\n\n const event = new Event('copy');\n document.dispatchEvent(event);\n};\n\nconst pasteClipboardTable = async () => {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (!item) return;\n\n return parseClipboardTable(item);\n};\n\nconst parseClipboardTable = async (item: ClipboardItem | DataTransfer): Promise<ClipboardTable | null> => {\n // Work with both clipboard API (ClipboardItem) and onpaste event (DataTransfer)\n const has = (type: string) => {\n return item.types.includes(type);\n };\n\n const get = (type: string) => {\n if ('getData' in item) return item.getData(type);\n else if ('getType' in item) return (item as any).getType(type).then((blob: Blob) => blob.text());\n return '';\n };\n\n let rows, payload;\n if (has('text/html')) {\n const pastedHtml = await get('text/html');\n ({ rows, payload } = parsePastedHtml(pastedHtml));\n } else if (has('text/plain')) {\n const text = await get('text/plain');\n rows = parsePastedText(text);\n }\n if (!rows) return { rows: [] };\n\n return { rows, payload };\n};\n\nconst formatRowsAsTSV = (rows: string[][]) => rows.map((row) => row.join('\\t')).join('\\n');\n\nconst formatRowsAsHTML = (rows: string[][], payload?: ClipboardPayload<any>) => {\n const trs = rows\n .map((row) => {\n const tds = row.map(formatTextAsHTML).map((cell) => `<td>${cell}</td>`);\n return tds.join('');\n })\n .map((row) => `<tr>${row}</tr>`)\n .join('\\n');\n\n const table = `<table>${trs}</table>`;\n\n if (payload) {\n const extra = `<SheetHappens payload=\"${formatTextAsHTML(JSON.stringify(payload))}\"></SheetHappens>`;\n return extra + table;\n }\n\n return table;\n};\n\nconst formatTextAsHTML = (s: string) => s.replace(/[&\"'<>]/g, (i) => `&#${i.charCodeAt(0)};`);\n\nconst formatSelectionAsRows = (selection: Rectangle, editData: CellPropertyFunction<string>) => {\n if (isEmptySelection(selection)) return [];\n\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n if (isMaybeRowSelection(selection)) {\n const [cellX] = findApproxMaxEditDataIndex(editData);\n minX = 0;\n maxX = cellX;\n }\n if (isMaybeColumnSelection(selection)) {\n const [, cellY] = findApproxMaxEditDataIndex(editData);\n minY = 0;\n maxY = cellY;\n }\n\n const rows: string[][] = [];\n\n for (let y = minY; y <= maxY; y++) {\n const row: string[] = [];\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value != null ? value : '');\n }\n }\n\n rows.push(row);\n }\n\n return rows;\n};\n\nconst findTag = (element: any, tagName: string): any => {\n for (const child of element.children) {\n if (child.nodeName === tagName) {\n return child;\n }\n const maybeTag = findTag(child, tagName);\n if (maybeTag) {\n return maybeTag;\n }\n }\n};\n\nconst parsePastedHtml = (\n html: string\n): {\n rows: string[][];\n payload: any;\n} => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const rows = [];\n let payload: any = undefined;\n\n const sheetNode = findTag(div, 'SHEETHAPPENS');\n if (sheetNode) {\n const json = sheetNode.getAttribute('payload');\n try {\n payload = JSON.parse(json);\n } catch (e) {}\n }\n\n const tableNode = findTag(div, 'TABLE');\n if (tableNode) {\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n if (tr.nodeName === 'TR') {\n const row = [];\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n\n row.push(str);\n }\n }\n rows.push(row);\n }\n }\n }\n }\n }\n\n return {\n rows,\n payload,\n };\n};\n\nconst parsePastedText = (text: string): string[][] => {\n return text.split(/\\r?\\n/).map((line) => line.split('\\t'));\n};\n","import { XY, CellLayout, VisibleLayout, LayoutCache } from './types';\nimport { seq } from './util';\nimport { ORIGIN } from './constants';\n\nconst INITIAL_SIZE = 256;\n\n// Local cell layout (virtualized with frozen columns/rows)\n//\n// - converts cell indices to (x, y) canvas pixels for any cell, including off-screen\n// - maps (x, y) canvas pixels back to cell index for any visible cell\n// - can also generate absolute, unscrolled offsets relative to (0,0) to drive scrolling\n// - generates list of visible cols/rows in view\n//\n// Note that adjacent column indices are not necessarily adjacent, i.e. end of [i] != start of [i + 1].\nexport const makeCellLayout = (\n freeze: XY,\n indent: XY,\n offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => indentX;\n const getIndentY = () => indentY;\n\n // Origin for cell, frozen or relative\n const getBaseOriginFor = (index: number, freeze: number, offset: number) => {\n return index < freeze ? 0 : offset + freeze;\n };\n\n // Get visible pixel x of cell\n const columnToPixel = (column: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(column, freezeX, offsetX);\n const relative = columns.getStart(column) - columns.getStart(base);\n const adjust = column < freezeX ? 0 : columns.getStart(freezeX) - columns.getStart(0);\n const size = column < 0 ? indentX : columns.getSize(column);\n\n return column < 0 ? 0 : indentX + relative + adjust + anchor * size;\n };\n\n // Get visible pixel y of cell\n const rowToPixel = (row: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(row, freezeY, offsetY);\n const relative = rows.getStart(row) - rows.getStart(base);\n const adjust = row < freezeY ? 0 : rows.getStart(freezeY) - rows.getStart(0);\n const size = row < 0 ? indentY : rows.getSize(row);\n\n return row < 0 ? 0 : indentY + relative + adjust + anchor * size;\n };\n\n // Get visible pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToPixel = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToPixel(cellX, anchorX), rowToPixel(cellY, anchorY)];\n };\n\n // Get absolute / unscrolled pixel x of cell\n const columnToAbsolute = (column: number, anchorX: number = 0): number => {\n const relative = columns.getStart(column);\n const size = column < 0 ? 0 : columns.getSize(column);\n\n return relative + anchorX * size;\n };\n\n // Get absolute / unscrolled pixel y of cell\n const rowToAbsolute = (row: number, anchorY: number = 0): number => {\n const relative = rows.getStart(row);\n const size = row < 0 ? 0 : rows.getSize(row);\n\n return relative + anchorY * size;\n };\n\n // Get absolute / unscrolled pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToAbsolute = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToAbsolute(cellX, anchorX), rowToAbsolute(cellY, anchorY)];\n };\n\n // Lookup pixel X or Y in cell layout\n const pixelToIndex = (\n pixel: number,\n anchor: number,\n indent: number,\n freeze: number,\n offset: number,\n layout: LayoutCache\n ) => {\n const relative = pixel - indent;\n if (relative < 0) return -1;\n\n const { getStart, lookupIndex } = layout;\n const frozen = getStart(freeze);\n if (relative < frozen) {\n return lookupIndex(relative, anchor);\n } else {\n const base = getStart(offset + freeze);\n const adjust = getStart(freeze) - getStart(0);\n return lookupIndex(base + relative - adjust, anchor);\n }\n };\n\n // Lookup pixel X or Y in cell layout (helpers)\n const pixelToColumn = (pixelX: number, anchorX: number = 0) =>\n pixelToIndex(pixelX, anchorX, indentX, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) =>\n pixelToIndex(pixelY, anchorY, indentY, freezeY, offsetY, rows);\n\n // Lookup pixel XY in cell layout\n const pixelToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [pixelToColumn(pixelX, anchorX), pixelToRow(pixelY, anchorY)];\n };\n\n // Lookup absolute / unscrolled pixel X or Y in cell layout\n const absoluteToIndex = (pixel: number, anchor: number, layout: LayoutCache) => {\n if (pixel < 0) return -1;\n\n const { lookupIndex } = layout;\n return lookupIndex(pixel, anchor);\n };\n\n // Lookup absolute / unscrolled X or Y in cell layout (helpers)\n const absoluteToColumn = (pixelX: number, anchorX: number = 0) => absoluteToIndex(pixelX, anchorX, columns);\n const absoluteToRow = (pixelY: number, anchorY: number = 0) => absoluteToIndex(pixelY, anchorY, rows);\n\n // Lookup absolute / unscrolled XY in cell layout\n const absoluteToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [absoluteToColumn(pixelX, anchorX), absoluteToRow(pixelY, anchorY)];\n };\n\n // Get visible range of columns or rows\n const getVisibleIndices = (view: number, indent: number, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const { getStart, getEnd } = layout;\n\n const frozen = getEnd(freeze - 1);\n const notFrozen = getStart(offset + freeze);\n\n const relative = view - indent - frozen;\n for (let i = offset + freeze; getStart(i) - notFrozen <= relative; ++i) {\n indices.push(i);\n }\n\n return indices;\n };\n\n // Get visible range for an XY viewport\n const getVisibleCells = (view: XY): VisibleLayout => {\n const [viewX, viewY] = view;\n return {\n columns: getVisibleIndices(viewX, indentX, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, indentY, freezeY, offsetY, rows),\n };\n };\n\n const getVersion = () => columns.getVersion() + rows.getVersion();\n\n return {\n columnToPixel,\n rowToPixel,\n cellToPixel,\n\n columnToAbsolute,\n rowToAbsolute,\n cellToAbsolute,\n\n pixelToColumn,\n pixelToRow,\n pixelToCell,\n\n absoluteToColumn,\n absoluteToRow,\n absoluteToCell,\n\n getVisibleCells,\n getIndentX,\n getIndentY,\n\n getVersion,\n };\n};\n\n// Offset cache in 1 dimension.\n//\n// Allows O(1) queries of distance between any two points, once warmed up.\n// Can do reverse lookup back to index with binary search, once warmed up.\n//\n// - caches sizer(i), each is only called once\n// - offset[0] = 0\n// - adds up offset[i] = sizer(0) + sizer(1) + ... + sizer(i - 1)\n// - cache can be truncated during resizing ops at split\n// - to replace sizer function, cache must be destroyed\nexport const makeLayoutCache = (sizer: (index: number) => number): LayoutCache => {\n const offsets = makeIntMap(INITIAL_SIZE);\n const sizes = makeIntMap(INITIAL_SIZE);\n\n let version = 0;\n offsets.set(0, 0);\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return 0;\n if (sizes.has(i)) return sizes.get(i)!;\n\n const size = sizer(i) || 0;\n sizes.set(i, size);\n return size;\n };\n\n // Cache offset sum recursively\n const getOffset = (i: number): number => {\n if (i < 0) return 0;\n if (offsets.has(i)) return offsets.get(i)!;\n\n let j = offsets.tail() || 0;\n\n // Use a while loop to avoid stack overflow\n while (j < i) {\n const size = getSize(j);\n const offset = (offsets.get(j) || 0) + size;\n offsets.set(++j, offset);\n }\n\n return offsets.get(i)!;\n };\n\n // Boundary points\n const getStart = (i: number) => getOffset(i);\n const getEnd = (i: number) => getOffset(i + 1);\n\n // Reverse lookup from offset to index\n const lookupIndex = (x: number, anchor: number = 0) => {\n // Get end of offsets array\n let last = offsets.tail() || 0;\n\n // Extend cache if value exceeds current end\n while (getOffset(last) < x && getSize(last)) last += 64;\n\n // Do binary search for exact position\n let start = 0;\n let end = last;\n while (start < end) {\n let mid = start + Math.floor((end - start) / 2) + 1;\n let value = getOffset(mid) - (anchor ? anchor * getSize(mid - 1) : 0);\n if (value <= x) start = mid;\n else end = mid - 1;\n }\n\n return start;\n };\n\n const clearAfter = (index: number) => {\n index = Math.max(0, index);\n offsets.truncate(index);\n sizes.truncate(index);\n version++;\n };\n\n const setSizer = (s: (index: number) => number) => {\n sizer = s;\n };\n const getVersion = () => version;\n\n return { getSize, getStart, getEnd, getVersion, lookupIndex, setSizer, clearAfter };\n};\n\n// Fast map<integer, integer> that is mostly filled in from start to end.\n// Elements are only removed by truncating all indices > n.\nconst makeIntMap = (initialSize: number = 128) => {\n let used: Uint8Array;\n let values: Uint32Array;\n let last = 0;\n\n const GROW = 1.2; // 20% growth at a time\n\n const allocate = (size: number) => {\n let newUsed = new Uint8Array(size);\n let newValues = new Uint32Array(size);\n if (used) copy(used, newUsed);\n if (values) copy(values, newValues);\n used = newUsed;\n values = newValues;\n };\n allocate(initialSize);\n\n const copy = (from: Uint8Array | Uint32Array, to: Uint8Array | Uint32Array) => {\n let n = Math.min(from.length, to.length);\n for (let i = 0; i < n; ++i) {\n to[i] = from[i];\n }\n };\n\n const ensure = (size: number) => {\n const l = values.length;\n const grow = Math.round(l * GROW);\n if (l < size) allocate(Math.max(grow, size));\n };\n\n const truncate = (size: number) => {\n const l = values.length;\n\n // Do nothing if smaller\n if (l < size) return;\n\n // If more than 20% bigger, shrink to exact size\n const shrink = Math.round(size * GROW);\n if (l > shrink) allocate(size);\n // Else zero out tail\n else for (let i = size; i < l; ++i) used[i] = 0;\n\n // Track last filled element\n last = Math.min(last, size);\n while (last > 0 && !used[last]) last--;\n };\n\n const getTail = () => (used[last] ? last : null);\n\n const setValue = (i: number, value: number) => {\n ensure(i + 1);\n values[i] = value;\n used[i] = 1;\n last = Math.max(last, i);\n };\n\n const getValue = (i: number) => (used[i] ? values[i] : null);\n const hasValue = (i: number) => !!used[i];\n\n return { truncate, set: setValue, get: getValue, has: hasValue, tail: getTail };\n};\n","import { InternalSheetStyle, SheetStyle, Style } from './types';\nimport { COLORS, SIZES } from './constants';\n\nexport const resolveSheetStyle = (sheetStyle?: SheetStyle): InternalSheetStyle => {\n return {\n freezeColumns: sheetStyle?.freezeColumns || 0,\n freezeRows: sheetStyle?.freezeRows || 0,\n hideColumnHeaders: sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: sheetStyle?.hideRowHeaders || false,\n hideGridlines: sheetStyle?.hideGridlines || false,\n hideScrollBars: sheetStyle?.hideScrollBars || false,\n columnHeaderHeight: sheetStyle?.hideColumnHeaders ? 1 : SIZES.headerHeight,\n rowHeaderWidth: sheetStyle?.hideRowHeaders ? 1 : SIZES.headerWidth,\n shadowBlur: sheetStyle?.shadowBlur ?? SIZES.shadowBlur,\n shadowOpacity: sheetStyle?.shadowOpacity ?? SIZES.shadowOpacity,\n shadowColor: sheetStyle?.shadowColor ?? COLORS.shadowColor,\n };\n};\n\nexport const applyAlignment = (\n start: number,\n cellSize: number,\n style: Required<Style>,\n imageWidth: number,\n alignment: 'left' | 'center' | 'right' = style.textAlign\n): number => {\n if (alignment === 'left') {\n return start + style.marginLeft;\n } else if (alignment === 'center') {\n return start + cellSize * 0.5 - imageWidth / 2;\n } else if (alignment === 'right') {\n return start + (cellSize - style.marginRight - imageWidth);\n }\n return start;\n};\n","import {\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n InternalSheetStyle,\n Rectangle,\n Selection,\n Clickable,\n Style,\n CellContentType,\n VisibleLayout,\n XY,\n} from './types';\nimport { applyAlignment } from './style';\nimport { normalizeSelection, isEmptySelection, isColumnSelection, isRowSelection } from './coordinate';\nimport { isInRange, isInRangeLeft, isInRangeCenter } from './util';\nimport {\n COLORS,\n SIZES,\n DEFAULT_CELL_STYLE,\n DEFAULT_COLUMN_HEADER_STYLE,\n HEADER_SELECTED_STYLE,\n HEADER_GROUP_SELECTED_STYLE,\n HEADER_ACTIVE_STYLE,\n NO_STYLE,\n ONE_ONE,\n} from './constants';\n\nexport const renderSheet = (\n context: CanvasRenderingContext2D,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n isFocused: boolean,\n\n knobPosition: XY | null,\n knobArea: Rectangle | null,\n dragIndices: [number[] | null, number[] | null],\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n dataOffset: XY\n): Clickable[] => {\n const { canvas } = context;\n const { width, height } = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\n rowHeaderWidth,\n columnHeaderHeight,\n freezeColumns,\n freezeRows,\n shadowBlur,\n shadowColor,\n shadowOpacity,\n } = sheetStyle;\n const { columns, rows } = visibleCells;\n const { columnToPixel, rowToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const clickables: Clickable[] = [];\n\n const freeze: XY = [freezeColumns, freezeRows];\n const indent: XY = [rowHeaderWidth, columnHeaderHeight];\n\n resizeCanvas(canvas);\n context.clearRect(0, 0, width, height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, width, height);\n context.shadowColor = '#00000080';\n\n // Cell fill\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const { fillColor } = cellStyle(x, y);\n if (fillColor) {\n context.fillStyle = fillColor;\n context.fillRect(left, top, right - left, bottom - top);\n }\n }\n }\n\n const selectionActive = !isEmptySelection(selection);\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [selected, hideKnob] = resolveFrozenSelection(selection, cellLayout, freeze, indent, dataOffset);\n\n // Selection fill\n if (selectionActive) {\n const [[left, top], [right, bottom]] = selected;\n context.fillStyle = COLORS.selectionBackground;\n context.fillRect(left, top, right - left, bottom - top);\n }\n\n if (!hideRowHeaders) {\n // Row header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, rowHeaderWidth, context.canvas.height);\n\n // Row header selection shadow\n if (selectionActive && !columnSelectionActive) {\n const [[, top], [, bottom]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(0, top, rowHeaderWidth, bottom - top);\n }\n }\n\n if (!hideColumnHeaders) {\n // Column header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, context.canvas.width, columnHeaderHeight);\n\n // Column header selection shadow\n if (selectionActive && !rowSelectionActive) {\n const [[left], [right]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(left, 0, right - left, columnHeaderHeight);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? rowHeaderWidth : context.canvas.width;\n const gridBottom = hideGridlines ? columnHeaderHeight : context.canvas.height;\n\n const drawGridLineX = (x: number, height: number) => {\n context.beginPath();\n context.moveTo(x - 0.5, 0);\n context.lineTo(x - 0.5, height);\n context.stroke();\n };\n\n const drawGridLineY = (y: number, width: number) => {\n context.beginPath();\n context.moveTo(0, y - 0.5);\n context.lineTo(width, y - 0.5);\n context.stroke();\n };\n\n drawGridLineX(rowHeaderWidth, context.canvas.height);\n drawGridLineY(columnHeaderHeight, context.canvas.width);\n\n for (const column of columns) {\n const right = columnToPixel(column, 1);\n drawGridLineX(right, gridBottom);\n }\n\n for (const row of rows) {\n const bottom = rowToPixel(row, 1);\n drawGridLineY(bottom, gridRight);\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // Row header text\n if (!hideRowHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = DEFAULT_CELL_STYLE.fontSize + 'px ' + DEFAULT_CELL_STYLE.fontFamily;\n context.fillStyle = COLORS.headerText;\n\n for (const row of rows) {\n const content = `${row + 1}`;\n\n // Row selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(row, minY, maxY);\n\n const groupKey = rowGroupKeys(row);\n const isInRowGroup = groupKey != null && selectedRowGroups?.has(groupKey);\n\n const isSelfSelected = rowSelectionActive && isActive;\n const isGroupSelected = rowSelectionActive && isInRowGroup;\n\n const style = isSelfSelected\n ? HEADER_SELECTED_STYLE\n : isGroupSelected\n ? HEADER_GROUP_SELECTED_STYLE\n : isActive\n ? HEADER_ACTIVE_STYLE\n : NO_STYLE;\n\n const resolvedStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...style };\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n clickables.push(...renderCell(context, content, resolvedStyle, 0, top, rowHeaderWidth, bottom - top));\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n\n for (const column of columns) {\n // Column selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(column, minX, maxX);\n\n const groupKey = columnGroupKeys(column);\n const isInColumnGroup = groupKey != null && selectedColumnGroups?.has(groupKey);\n\n const isSelected = columnSelectionActive && !rowSelectionActive && (isActive || isInColumnGroup);\n const selectedStyle = isSelected ? HEADER_SELECTED_STYLE : NO_STYLE;\n const activeStyle = isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n const style = {\n ...DEFAULT_COLUMN_HEADER_STYLE,\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n const content = columnHeaders(column, style) ?? excelHeaderString(column + 1);\n\n clickables.push(...renderCell(context, content, style, left, 0, right - left, columnHeaderHeight));\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n context.globalAlpha = isFocused ? 1 : 0.5;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(left, top, right - left - 1, bottom - top - 1);\n\n context.globalAlpha = 1;\n }\n\n for (const secondarySelection of secondarySelections) {\n const selection = secondarySelection.span;\n if (isEmptySelection(selection)) continue;\n\n const [selected] = resolveFrozenSelection(selection, cellLayout, freeze, indent, dataOffset);\n const [[left, top], [right, bottom]] = selected;\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n }\n\n // Knob drag outline\n if (knobArea) {\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(knobArea);\n const left = columnToPixel(minX);\n const top = rowToPixel(minY);\n const right = columnToPixel(maxX, 1);\n const bottom = rowToPixel(maxY, 1);\n\n context.strokeStyle = COLORS.knobAreaBorder;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n context.setLineDash([]);\n }\n\n // Selection knob\n if (knobPosition && !hideKnob) {\n const [knobX, knobY] = knobPosition;\n context.fillStyle = COLORS.selectionBorder;\n context.fillRect(knobX - SIZES.knobArea * 0.5, knobY - SIZES.knobArea * 0.5, SIZES.knobArea, SIZES.knobArea);\n }\n\n // Drag ghost (pixels)\n if (dragOffset) {\n const [shiftX, shiftY] = dragOffset;\n const [dragColumns, dragRows] = dragIndices;\n\n context.fillStyle = COLORS.dragGhost;\n\n if (dragColumns) {\n for (const column of dragColumns) {\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n context.fillRect(left + shiftX, 0, right - left, height);\n }\n }\n if (dragRows) {\n for (const row of dragRows) {\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n context.fillRect(0, top + shiftY, width, bottom - top);\n }\n }\n }\n\n // Drop target\n if (dropTarget) {\n let [[left, top], [right, bottom]] = resolveSelection(dropTarget, cellLayout);\n\n context.strokeStyle = COLORS.dropTarget;\n context.lineWidth = 4;\n\n if (isColumnSelection(dropTarget)) {\n right = left;\n }\n if (isRowSelection(dropTarget)) {\n bottom = top;\n }\n context.strokeRect(left - 1, top - 1, right - left, bottom - top);\n }\n\n // Draw frozen row/col shadow\n const [scrollX, scrollY] = dataOffset;\n const hasRowShadow = freezeRows > 0 && scrollY > 0;\n const hasColumnShadow = freezeColumns > 0 && scrollX > 0;\n if (hasRowShadow || hasColumnShadow) {\n if (hasRowShadow) {\n const h = columnHeaderHeight + rowToAbsolute(freezeRows);\n const gradient = context.createLinearGradient(0, h, 0, h + shadowBlur);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(0, h, width, shadowBlur);\n }\n if (hasColumnShadow) {\n const w = rowHeaderWidth + columnToAbsolute(freezeColumns);\n const gradient = context.createLinearGradient(w, 0, w + shadowBlur, 0);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(w, 0, shadowBlur, height);\n }\n }\n\n // Cell contents\n context.textBaseline = 'middle';\n\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const style = {\n ...DEFAULT_CELL_STYLE,\n ...cellStyle(x, y),\n };\n const cellContent = displayData(x, y, style);\n if (cellContent !== null && cellContent !== undefined) {\n clickables.push(...renderCell(context, cellContent, style, left, top, right - left, bottom - top));\n }\n }\n }\n\n return clickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentType,\n style: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number\n): Clickable[] => {\n const clickables: Clickable[] = [];\n\n if (cellContent === null) {\n return clickables;\n }\n\n context.fillStyle = style.color;\n context.font = style.weight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n context.textAlign = style.textAlign;\n\n const yy = Math.floor(yCoord + cellHeight * 0.5);\n\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n\n if (style.backgroundColor !== '') {\n context.fillStyle = style.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = style.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const xx = applyAlignment(xCoord, cellWidth, style, 0);\n const text = '' + cellContent;\n context.fillText(text, xx, yy);\n } else if (typeof cellContent === 'object') {\n for (const obj of cellContent.items) {\n let x = 0;\n let y = 0;\n let w = 0;\n let h = 0;\n\n if (obj.content instanceof HTMLImageElement) {\n w = obj.width || cellWidth;\n h = obj.height || cellHeight;\n\n const finalX = applyAlignment(xCoord, cellWidth, style, w, obj.horizontalAlign);\n x = finalX + obj.x;\n y = yy + obj.y;\n\n context.drawImage(obj.content, x, y, w, h);\n } else if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n if (obj.horizontalAlign) {\n context.textAlign = obj.horizontalAlign;\n }\n const finalX = applyAlignment(xCoord, cellWidth, style, 0, obj.horizontalAlign);\n const text = '' + obj.content;\n\n const left = finalX + obj.x;\n const top = yy + obj.y;\n context.fillText(text, left, top);\n\n const measure = context.measureText(text);\n x = left - measure.actualBoundingBoxLeft;\n y = top - measure.actualBoundingBoxAscent;\n w = left + measure.actualBoundingBoxRight - x;\n h = top + measure.actualBoundingBoxDescent - y;\n }\n if (obj.onClick) {\n clickables.push({\n rect: [\n [x, y],\n [x + w, y + h],\n ],\n obj,\n });\n }\n }\n }\n context.restore();\n\n return clickables;\n};\n\n// Resolve selection into a consistent rectangle, without dealing with frozen rows/columns\nconst resolveSelection = (selection: Rectangle, cellLayout: CellLayout) => {\n const { cellToPixel } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [left, top],\n [right, bottom],\n ];\n};\n\n// Resolve selection into a consistent rectangle, handling edge cases around frozen rows/columns.\nconst resolveFrozenSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n\n freeze: XY,\n indent: XY,\n offset: XY\n) => {\n const { cellToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n const [maxX, maxY] = max;\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Get frozen edge\n const frozenX = columnToAbsolute(freezeX);\n const frozenY = rowToAbsolute(freezeY);\n\n let hideKnob = false;\n\n // If the selection crosses the frozen edge, it needs to always cover the entire frozen area.\n if (isInRangeCenter(freezeX, minX, maxX + 1)) {\n const edge = indentX + frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = indentY + frozenY;\n if (bottom <= edge) {\n bottom = edge;\n hideKnob = true;\n }\n }\n\n // If the selection starts/ends under the frozen area, treat as off-screen\n if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {\n left = -1e5;\n\n const lastInvisibleX = offsetX + freezeX - 1;\n if (maxX <= lastInvisibleX) {\n if (maxX === lastInvisibleX) right = indentX;\n else right = -1e5;\n hideKnob = true;\n }\n }\n if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {\n top = -1e5;\n\n const lastInvisibleY = offsetY + freezeY - 1;\n if (maxY <= lastInvisibleY) {\n if (maxY === lastInvisibleY) bottom = indentY;\n else bottom = -1e5;\n hideKnob = true;\n }\n }\n\n if (rowSelectionActive && offsetX > 0) {\n hideKnob = true;\n }\n if (columnSelectionActive && offsetY > 0) {\n hideKnob = true;\n }\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [\n [left, top],\n [right, bottom],\n ],\n hideKnob,\n ] as [Rectangle, boolean];\n};\n\nconst resizeCanvas = (canvas: HTMLCanvasElement) => {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n return true;\n }\n\n return false;\n};\n\nconst excelHeaderString = (num: number) => {\n let s = '';\n let t = 0;\n while (num > 0) {\n t = (num - 1) % 26;\n s = String.fromCharCode(65 + t) + s;\n num = ((num - t) / 26) | 0;\n }\n return s || '';\n};\n\nconst halfShadowGradient = (gradient: CanvasGradient, rgb: string, opacity: number) => {\n const hex = (x: number) => ('0' + Math.round(x).toString(16)).slice(-2);\n // Half-sine ease\n const ease = (x: number) => 1.0 - Math.sin((x * Math.PI) / 2);\n // Gamma adjustment assuming blend on white\n const adjust = (x: number) => 1.0 - Math.pow(1.0 - x, 2.2);\n for (let i = 0; i <= 16; ++i) {\n const f = i / 16;\n gradient.addColorStop(f, rgb + hex(adjust(opacity * ease(f) * 0.5) * 255));\n }\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellLayout,\n CellProperty,\n CellPropertyStyled,\n CellContentType,\n ClipboardPayload,\n RowOrColumnPropertyStyled,\n RowOrColumnProperty,\n Selection,\n Clickable,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\n DEFAULT_CELL_STYLE,\n INITIAL_MAX_SCROLL,\n NO_CELL,\n NO_CLICKABLES,\n NO_SELECTION,\n NO_SELECTIONS,\n ORIGIN,\n ONE_ONE,\n} from './constants';\nimport {\n normalizeSelection,\n validateSelection,\n isSameSelection,\n mapSelectionColumns,\n mapSelectionRows,\n addXY,\n} from './coordinate';\nimport { useMouse } from './mouse';\nimport { useKeyboard } from './keyboard';\nimport { useScroll, scrollToCell, clipDataOffset, updateScrollPosition } from './scroll';\nimport { useAutoSizeColumn } from './autosize';\nimport { useClipboardAPI } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createCellStyledProp, createRowOrColumnProp, createRowOrColumnStyledProp } from './props';\nimport { renderSheet } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string;\n autoFocus: boolean;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onChange: (value: string) => void;\n style: InputStyle;\n};\n\nexport type SheetRenderProps = {\n visibleCells: VisibleLayout;\n cellLayout: CellLayout;\n selection: Rectangle;\n editMode: boolean;\n};\n\nexport type SheetProps = {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnPropertyStyled<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n canSizeColumn?: RowOrColumnProperty<boolean>;\n canSizeRow?: RowOrColumnProperty<boolean>;\n canOrderColumn?: RowOrColumnProperty<boolean>;\n canOrderRow?: RowOrColumnProperty<boolean>;\n columnGroupKeys?: RowOrColumnProperty<string | number | null>;\n rowGroupKeys?: RowOrColumnProperty<string | number | null>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellPropertyStyled<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n selection?: Rectangle;\n secondarySelections?: Selection[];\n\n maxRows?: number;\n maxColumns?: number;\n cacheLayout?: boolean | number;\n dontCommitEditOnSelectionChange?: boolean;\n dontChangeSelectionOnOrderChange?: boolean;\n\n autoFocus?: boolean;\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: (value?: string | number | null) => void\n ) => ReactElement | undefined;\n\n renderInside?: (props: SheetRenderProps) => React.ReactNode;\n renderOutside?: (props: SheetRenderProps) => React.ReactNode;\n\n onSelectionChanged?: (minX: number, minY: number, maxX: number, maxY: number) => void;\n onRightClick?: (e: SheetPointerEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onColumnOrderChange?: (indices: number[], order: number) => void;\n onRowOrderChange?: (indices: number[], order: number) => void;\n onCellWidthChange?: (indices: number[], values: number[]) => void;\n onCellHeightChange?: (indices: number[], values: number[]) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n\n onCopy?: (selection: Rectangle, cells: string[][]) => ClipboardPayload<any> | null | undefined;\n onPaste?: (\n selection: Rectangle,\n cells: string[][],\n payload: ClipboardPayload<any>\n ) => boolean | null | undefined | Promise<boolean | null | undefined>;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void;\n copySelection: (selection: Rectangle, cut?: boolean) => Promise<void>;\n pasteSelection: (selection: Rectangle) => Promise<void>;\n canPasteSelection: () => boolean;\n};\n\nconst Sheet = forwardRef<SheetRef, SheetProps>((props, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const [maxScroll, setMaxScroll] = useState<XY>(INITIAL_MAX_SCROLL);\n const [dataOffset, setDataOffset] = useState<XY>(ORIGIN);\n\n const selectionProp = props.selection ?? NO_SELECTION;\n\n const [rawSelection, setRawSelection] = useState<Rectangle>(selectionProp);\n const [knobArea, setKnobArea] = useState<Rectangle | null>(null);\n const [dragOffset, setDragOffset] = useState<XY | null>(null);\n const [dragIndices, setDragIndices] = useState<[number[] | null, number[] | null]>([null, null]);\n const [dropTarget, setDropTarget] = useState<Rectangle | null>(null);\n const [editCell, setEditCell] = useState<XY>(NO_CELL);\n\n const [focused, setFocused] = useState(!!props.autoFocus);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setRawSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | number>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: overlayRef });\n\n const cellWidth = useMemo(() => createRowOrColumnProp(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnProp(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnStyledProp(props.columnHeaders, null), [props.columnHeaders]);\n const columnHeaderStyle = useMemo(() => createRowOrColumnProp(props.columnHeaderStyle, {}), [\n props.columnHeaderStyle,\n ]);\n\n const canSizeColumn = useMemo(() => createRowOrColumnProp(props.canSizeColumn, true), [props.canSizeColumn]);\n const canSizeRow = useMemo(() => createRowOrColumnProp(props.canSizeRow, true), [props.canSizeRow]);\n const canOrderColumn = useMemo(() => createRowOrColumnProp(props.canOrderColumn, true), [props.canOrderColumn]);\n const canOrderRow = useMemo(() => createRowOrColumnProp(props.canOrderRow, true), [props.canOrderRow]);\n\n const rowGroupKeys = useMemo(() => createRowOrColumnProp(props.rowGroupKeys, null), [props.rowGroupKeys]);\n const columnGroupKeys = useMemo(() => createRowOrColumnProp(props.columnGroupKeys, null), [props.columnGroupKeys]);\n\n const cellReadOnly = useMemo(() => createCellProp(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellProp(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellStyledProp(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellProp(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellProp(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellProp(props.cellStyle, DEFAULT_CELL_STYLE), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => resolveSheetStyle(props.sheetStyle), [props.sheetStyle]);\n const secondarySelections = props.secondarySelections ?? NO_SELECTIONS;\n\n const selection = useMemo(() => validateSelection(rawSelection), [rawSelection]);\n\n const selectedColumnGroups = useMemo(\n () =>\n props.columnGroupKeys\n ? new Set(mapSelectionColumns(selection)((x: number) => columnGroupKeys(x)).filter((x) => x != null))\n : null,\n [props.columnGroupKeys, columnGroupKeys, selection]\n );\n const selectedRowGroups = useMemo(\n () =>\n props.rowGroupKeys\n ? new Set(mapSelectionRows(selection)((y: number) => rowGroupKeys(y)).filter((x) => x != null))\n : null,\n [props.rowGroupKeys, rowGroupKeys, selection]\n );\n\n const [maxScrollX, maxScrollY] = maxScroll;\n\n const [editCellX, editCellY] = editCell;\n const editMode = editCellX !== -1 && editCellY !== -1;\n\n // Global layout for unscrolled/unfrozen grid\n // Cached either per width/height pair, or permanently with invalidation on resize/reorder.\n const shouldCacheLayout = (props.cacheLayout ?? false) !== false;\n const layoutVersion = typeof props.cacheLayout === 'number' ? props.cacheLayout : 0;\n const columnLayout = useMemo(() => makeLayoutCache(cellWidth), [shouldCacheLayout ? layoutVersion : cellWidth]);\n const rowLayout = useMemo(() => makeLayoutCache(cellHeight), [shouldCacheLayout ? layoutVersion : cellHeight]);\n useMemo(() => {\n if (!shouldCacheLayout) return;\n\n columnLayout.setSizer(cellWidth);\n rowLayout.setSizer(cellHeight);\n\n // Depend on layoutVersion to allow for controlled external invalidation\n // eslint-disable-next-line\n }, [shouldCacheLayout, layoutVersion, cellWidth, cellHeight]);\n\n // Virtual layout for indented/scrolled/frozen grid\n const { freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight } = sheetStyle;\n const cellLayout = useMemo(\n () =>\n makeCellLayout(\n [freezeColumns, freezeRows],\n [rowHeaderWidth, columnHeaderHeight],\n dataOffset,\n columnLayout,\n rowLayout\n ),\n [freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight, dataOffset, columnLayout, rowLayout]\n );\n\n // Build range of visible cells\n const { getVisibleCells, cellToPixel, getVersion } = cellLayout;\n const visibleCells = useMemo(\n () => getVisibleCells([canvasWidth, canvasHeight]),\n // Need to invalidate view if cached layout version changed\n // eslint-disable-next-line\n [getVisibleCells, canvasWidth, canvasHeight, getVersion()]\n );\n\n // Notify of viewport change\n useLayoutEffect(() => {\n if (props.onScrollChange) {\n props.onScrollChange([...visibleCells.rows], [...visibleCells.columns]);\n }\n }, [visibleCells, props.onScrollChange]);\n\n const scrollToSelection = (selection: Rectangle, toHead = false) => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const [anchor, head] = selection;\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n view,\n freeze,\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n }\n );\n };\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false) => {\n if (!isSameSelection(selection, newSelection)) {\n setRawSelection(newSelection);\n }\n\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n scrollToSelection(newSelection, toHead);\n }\n\n if (props.onSelectionChanged) {\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(validateSelection(newSelection));\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const cancelEditingCell = () => {\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n props.onChange([{ x: cellX, y: cellY, value: value !== undefined ? value : editValue }]);\n }\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const startEditingCell = (editCell: XY, arrowKeyCommitMode = false) => {\n const [cellX, cellY] = editCell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n const editDataValue = editData(cellX, cellY);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n setEditCell(editCell);\n setEditValue(val);\n setArrowKeyCommitMode(arrowKeyCommitMode);\n setLastEditKey(editKeys(...editCell));\n };\n\n // If max row or column count changes, keep sheet in view\n const { maxColumns = Infinity, maxRows = Infinity } = props;\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const newOffset = clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout);\n setDataOffset(newOffset);\n updateScrollPosition(overlay, newOffset, cellLayout);\n\n // Only fire if extents change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [maxRows, maxColumns]);\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<Clickable[]>(NO_CLICKABLES);\n\n // Detect focus on canvas\n const isFocused = focused || editMode;\n\n const { clipboardApi, onClipboardCopy } = useClipboardAPI(\n selection,\n editData,\n cellReadOnly,\n isFocused && !editMode,\n changeSelection,\n props.onChange,\n props.onCopy,\n props.onPaste\n );\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const getAutoSizeWidth = useAutoSizeColumn(\n visibleCells.rows,\n displayData,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth\n );\n\n const { mouseHandlers, knobPosition } = useMouse(\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellReadOnly,\n\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n getAutoSizeWidth,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\n setDragOffset,\n setDropTarget,\n changeSelection,\n setFocused,\n\n props.cacheLayout ? columnLayout.clearAfter : undefined,\n props.cacheLayout ? rowLayout.clearAfter : undefined,\n\n props.onChange,\n props.onColumnOrderChange,\n props.onRowOrderChange,\n props.onCellWidthChange,\n props.onCellHeightChange,\n props.onRightClick,\n props.dontCommitEditOnSelectionChange,\n props.dontChangeSelectionOnOrderChange\n );\n\n const { onInputKeyDown, onGridKeyDown, onGridFocus, onGridBlur } = useKeyboard(\n arrowKeyCommitMode,\n overlayRef,\n cellReadOnly,\n displayData,\n editCell,\n editMode,\n focused,\n rawSelection,\n selection,\n\n startEditingCell,\n commitEditingCell,\n cancelEditingCell,\n changeSelection,\n setFocused,\n onClipboardCopy,\n\n props.onChange\n );\n\n useLayoutEffect(() => {\n const { current: canvas } = canvasRef;\n if (!canvas) {\n return;\n }\n\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n hitmapRef.current = renderSheet(\n context,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragIndices,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset,\n ]);\n\n const [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextTextAlign: 'right' | 'left' | 'center' = 'right';\n if (editMode) {\n const style = cellStyle(...editCell);\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextTextAlign = style.textAlign || DEFAULT_CELL_STYLE.textAlign || 'left';\n const editKey = editKeys(...editCell);\n if (editKey !== lastEditKey) {\n setLastEditKey('');\n setEditCell(NO_CELL);\n }\n }\n\n const [textX, textY] = editTextPosition;\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onInputKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: '0px 4px',\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextTextAlign,\n color: 'black',\n fontSize: DEFAULT_CELL_STYLE.fontSize,\n fontFamily: 'sans-serif',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n outline: 0,\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: canvasWidth,\n height: canvasHeight,\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n }\n\n const renderedInside = useMemo(() => props.renderInside?.({ visibleCells, cellLayout, selection, editMode }), [\n props.renderInside,\n visibleCells,\n cellLayout,\n selection,\n editMode,\n ]);\n\n const renderedOutside = useMemo(() => props.renderOutside?.({ visibleCells, cellLayout, selection, editMode }), [\n props.renderOutside,\n visibleCells,\n cellLayout,\n selection,\n editMode,\n ]);\n\n // External component API\n useImperativeHandle(\n ref,\n () => ({\n ...cellLayout,\n ...clipboardApi,\n startEditingCell,\n }),\n [cellLayout, clipboardApi, startEditingCell]\n );\n\n return (\n <div style={{ position: 'relative', height: '100%', overflow: 'hidden' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n {...mouseHandlers}\n onKeyDown={onGridKeyDown}\n onFocus={onGridFocus}\n onBlur={onGridBlur}\n tabIndex={0}\n onScroll={onScroll}\n className={overlayDivClassName}\n style={overlayDivStyles}\n >\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: 1,\n height: maxScrollY + 2000,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: maxScrollX + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n {renderedInside ? (\n <div\n style={{\n position: 'sticky',\n left: 0,\n top: 0,\n }}\n >\n {renderedInside}\n </div>\n ) : null}\n </div>\n {renderedOutside ? (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n {renderedOutside}\n </div>\n ) : null}\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <input\n {...inputProps}\n type=\"text\"\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n});\n\nexport default Sheet;\n"],"names":["INITIAL_MAX_SCROLL","ORIGIN","ONE_ONE","NEG_NEG","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","COLORS","selectionBorder","selectionBackground","gridLine","dragGhost","dropTarget","knobAreaBorder","headerBackground","headerText","headerActive","headerActiveText","headerSelected","headerSelectedGroup","headerSelectedText","headerSelectedGroupText","shadowColor","SIZES","knobArea","headerWidth","headerHeight","minimumWidth","minimumHeight","resizeZone","scrollZone","scrollSpeed","shadowBlur","shadowOpacity","DEFAULT_CELL_STYLE","textAlign","fontSize","marginRight","marginLeft","color","fontFamily","weight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","HEADER_GROUP_SELECTED_STYLE","ARROW_KEYS","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","seq","n","s","d","Array","from","length","map","_","i","isInRange","x","min","max","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","Math","minXY","getDirectionStep","direction","isSameXY","isSameSelection","a1","a2","b1","b2","forRange","callback","forSelectionColumns","selection","normalizeSelection","left","right","forSelectionRows","top","bottom","forToMap","forLoop","out","push","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","isMaybeColumnSelection","isRowSelection","isColumnSelection","isCellSelection","isEmptySelection","isPointInsideSelection","point","y","validateSelection","anchor","head","slice","orientSelection","normalized","to","ax","ay","hx","hy","swapX","swapY","LIMIT","scanGroup","keys","index","matchKeys","limit","key","has","expandSelectionToRowOrColumnGroups","groupKeys","coordinate","first","second","start","end","startIndex","endIndex","expanded","oriented","isBoundaryInsideGroup","before","after","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","createRowOrColumnStyledProp","createCellStyledProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","data","floor","xx","findInDisplayData","displayData","step","cell","firstFilled","cellX","cellY","maxX","maxY","useMouse","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onFocusChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","useState","hitTarget","setHitTarget","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","rowDrag","setRowDrag","draggingKnob","setDraggingKnob","draggingSelection","setDraggingSelection","draggingRowSelection","setDraggingRowSelection","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","useMemo","refState","ref","useRef","current","getMousePosition","useCallback","e","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","clientWidth","clientHeight","getScrollPosition","scrollLeft","scrollTop","getMouseHit","hitmap","object","onPointerLeave","window","document","body","style","cursor","onPointerDown","columnToPixel","rowToPixel","pixelToCell","getIndentX","getIndentY","columns","rows","button","setPointerCapture","pointerId","minX","minY","selectedColumns","selectedRows","indices","Set","filter","values","sort","dragIndices","clickSelection","connected","dragStart","dragEnd","size","scroll","edge","abs","asGroup","knobX","knobY","shiftKey","scrollTo","onPointerUp","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","onPointerMove","preventDefault","isDragging","currentScroll","newWidth","round","newHeight","anchorX","anchorY","headX","headY","xCellDiff","yCellDiff","shift","onClick","previousRect","JSON","stringify","currentRect","obj","onDoubleClick","indentY","autosized","column","editCell","onContextMenu","event","mouseHandlers","kx1","ky1","kx2","ky2","sx1","sy1","sx2","sy2","fx1","fy1","fx2","fy2","srcY","value","source","srcX","useKeyboard","arrowKeyCommitMode","overlayRef","focused","rawSelection","onCancel","onClipboardCopy","onInputKeyDown","onGridKeyDown","metaKey","ctrlKey","String","fromCharCode","which","toLowerCase","x1","y1","x2","y2","keyCode","onGridFocus","onGridBlur","useLayoutEffect","overlay","activeElement","activeTagName","tagName","contentEditable","focus","preventScroll","useScroll","offset","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","cellToAbsolute","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","clipDataOffset","view","freeze","maxCells","newX","newY","freezeX","freezeY","maxColumns","maxRows","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","getViewExtent","leftEdge","topEdge","viewport","scrollW","scrollH","remainder","w","h","frozenX","frozenY","scrollToCell","element","offsetX","offsetY","newOffset","setTimeout","updateScrollPosition","dataOffset","scrollX","scrollY","useAutoSizeColumn","cellStyle","columnHeaders","columnHeaderStyle","canvasWidth","context","createElement","getContext","getWidth","cellContent","font","inlineMargin","measureText","toString","width","maxWidth","extraWidth","items","content","horizontalAlign","headerStyle","headerContent","ceil","EMPTY_TABLE","useClipboardTable","peek","setPeek","softRefresh","navigator","permissions","query","name","status","state","hardRefresh","clipboard","read","item","parseClipboardTable","delayedRefresh","addEventListener","removeEventListener","canPaste","copyTable","copyClipboardTable","pasteTable","pasteClipboardTable","useClipboardAPI","addListener","onCopy","onPaste","pasteIntoSelection","table","payload","reduce","height","newSelection","shouldPaste","flatMap","row","j","change","copySelection","cut","formatSelectionAsRows","pasteSelection","onClipboardPaste","clipboardData","clipboardApi","canPasteSelection","text","formatRowsAsTSV","html","formatRowsAsHTML","write","ClipboardItem","Blob","type","Event","dispatchEvent","types","includes","get","getData","getType","then","blob","pastedHtml","parsePastedHtml","parsePastedText","join","trs","tds","formatTextAsHTML","extra","replace","charCodeAt","findTag","children","child","nodeName","maybeTag","div","innerHTML","trim","sheetNode","json","getAttribute","parse","tableNode","tableChild","tr","td","str","p","textContent","replaceAll","split","line","INITIAL_SIZE","makeCellLayout","indent","indentX","getBaseOriginFor","base","relative","getStart","adjust","getSize","pixelToIndex","pixel","layout","lookupIndex","frozen","pixelX","pixelY","absoluteToIndex","getVisibleIndices","getEnd","notFrozen","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","sizes","set","getOffset","tail","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","l","grow","shrink","getTail","setValue","getValue","hasValue","resolveSheetStyle","freezeColumns","freezeRows","hideGridlines","hideScrollBars","columnHeaderHeight","rowHeaderWidth","applyAlignment","cellSize","imageWidth","alignment","renderSheet","secondarySelections","isFocused","dragOffset","canvas","clickables","resizeCanvas","clearRect","fillStyle","fillRect","selectionActive","rowSelectionActive","columnSelectionActive","resolveFrozenSelection","selected","hideKnob","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","resolvedStyle","renderCell","isInColumnGroup","isSelected","selectedStyle","activeStyle","excelHeaderString","globalAlpha","strokeRect","secondarySelection","span","setLineDash","shiftX","shiftY","dragColumns","dragRows","resolveSelection","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","xCoord","yCoord","cellWidth","cellHeight","save","clip","fillText","HTMLImageElement","finalX","drawImage","measure","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","actualBoundingBoxDescent","restore","lastInvisibleX","lastInvisibleY","devicePixelRatio","ratio","newCanvasWidth","newCanvasHeight","scale","num","t","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","Sheet","forwardRef","props","canvasRef","setMaxScroll","setDataOffset","selectionProp","setRawSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","autoFocus","setFocused","lastSelectionProp","setLastSelectionProp","editValue","setEditValue","setArrowKeyCommitMode","useResizeObserver","canvasHeight","readOnly","editKeys","editCellX","editCellY","shouldCacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","changeSelection","onSelectionChanged","cancelEditingCell","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","Infinity","onScroll","animationFrameId","requestAnimationFrame","cancelAnimationFrame","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextTextAlign","editKey","textX","textY","inputProps","onKeyDown","position","padding","outline","border","input","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","renderInside","renderedOutside","renderOutside","useImperativeHandle","React","onFocus","onBlur","tabIndex","className","pointerEvents","select"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/image.ts","../src/group.ts","../src/props.ts","../src/mouse.ts","../src/keyboard.ts","../src/scroll.ts","../src/cell.ts","../src/text.ts","../src/autosize.ts","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/clipboard.ts","../src/layout.ts","../src/render.ts","../src/style.ts","../src/sheet.tsx"],"sourcesContent":["import { CellContentRender, XY, Rectangle, Selection, Direction, Style } from './types';\n\nexport const INITIAL_MAX_SCROLL: XY = [2000, 1000];\n\nexport const ORIGIN: XY = [0, 0];\nexport const ONE_ONE: XY = [1, 1];\nexport const NEG_NEG: XY = [-1, -1];\n\nexport const NO_CELL: XY = [-1, -1];\nexport const NO_SELECTION: Rectangle = [NO_CELL, NO_CELL];\nexport const NO_SELECTIONS: Selection[] = [];\nexport const NO_CLICKABLES: CellContentRender[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 100000;\n\nexport const COLORS = {\n selectionBorder: '#1a66ff',\n selectionBackground: '#d8e6ff80',\n\n gridLine: '#0000001f',\n\n dragGhost: '#1a66ff30',\n dropTarget: '#1a66ff',\n knobAreaBorder: '#707070',\n\n headerBackground: '#f6f9fc',\n headerText: '#666666',\n headerActive: '#e8f0ff',\n headerActiveText: '#1a66ff',\n\n headerSelected: '#1a66ff',\n headerSelectedGroup: '#1a66ff70',\n headerSelectedText: '#ffffff',\n headerSelectedGroupText: '#ffffff',\n\n shadowColor: '#000000',\n};\n\nexport const SIZES = {\n knobArea: 6,\n headerWidth: 50,\n headerHeight: 22,\n minimumWidth: 50,\n minimumHeight: 22,\n resizeZone: 4,\n scrollZone: 50,\n scrollSpeed: 30,\n\n shadowBlur: 12,\n shadowOpacity: 0.05,\n};\n\nexport const DEFAULT_CELL_STYLE: Required<Style> = {\n textAlign: 'left',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginLeft: 5,\n marginRight: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const HEADER_ACTIVE_STYLE = {\n color: COLORS.headerActiveText,\n};\n\nexport const HEADER_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelected,\n color: COLORS.headerSelectedText,\n};\n\nexport const HEADER_GROUP_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelectedGroup,\n color: COLORS.headerSelectedGroupText,\n};\n\nexport const ARROW_KEYS: Record<string, Direction> = {\n ArrowRight: 'right',\n ArrowLeft: 'left',\n ArrowUp: 'up',\n ArrowDown: 'down',\n};\n","export const tail = <T>(list: T[]): T => list[list.length - 1];\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(max, x), min);\n\nexport const seq = (n: number, s: number = 0, d: number = 1): number[] =>\n Array.from({ length: n }).map((_, i: number) => s + d * i);\n\nexport const isInRange = (x: number, min: number, max: number) => min <= x && x <= max;\nexport const isInRangeLeft = (x: number, min: number, max: number) => min <= x && x < max;\nexport const isInRangeRight = (x: number, min: number, max: number) => min < x && x <= max;\nexport const isInRangeCenter = (x: number, min: number, max: number) => min < x && x < max;\n","import { XY, Rectangle } from './types';\nimport { clamp } from './util';\n\nexport const addXY = (a: XY, b: XY): XY => [a[0] + b[0], a[1] + b[1]];\nexport const subXY = (a: XY, b: XY): XY => [a[0] - b[0], a[1] - b[1]];\nexport const mulXY = (a: XY, b: XY): XY => [a[0] * b[0], a[1] * b[1]];\nexport const maxXY = (a: XY, b: XY): XY => [Math.max(a[0], b[0]), Math.max(a[1], b[1])];\nexport const minXY = (a: XY, b: XY): XY => [Math.min(a[0], b[0]), Math.min(a[1], b[1])];\nexport const clampXY = (p: XY, min: XY, max: XY = [Infinity, Infinity]): XY => [\n clamp(p[0], min[0], max[0]),\n clamp(p[1], min[1], max[1]),\n];\n\nexport const getDirectionStep = (direction: string): XY => {\n if (direction === 'left') return [-1, 0];\n if (direction === 'right') return [1, 0];\n if (direction === 'up') return [0, -1];\n if (direction === 'down') return [0, 1];\n return [0, 0];\n};\n\nexport const isSameXY = (a: XY, b: XY) => a[0] === b[0] && a[1] === b[1];\n\nexport const isSameRectangle = (a: Rectangle, b: Rectangle) => {\n const [a1, a2] = a;\n const [b1, b2] = b;\n return isSameXY(a1, b1) && isSameXY(a2, b2);\n};\n\nexport const isPointInsideRectangle = (rectangle: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = rectangle;\n const [x, y] = point;\n return x >= left && x < right && y >= top && y < bottom;\n};\n\nexport const forRange = (min: number, max: number, callback: (i: number) => void) => {\n for (let i = min; i <= max; ++i) callback(i);\n};\n\nexport const forSelectionColumns = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[left], [right]] = normalizeSelection(selection);\n forRange(left, right, callback);\n};\n\nexport const forSelectionRows = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[, top], [, bottom]] = normalizeSelection(selection);\n forRange(top, bottom, callback);\n};\n\nconst forToMap =\n <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) =>\n <B>(map: (...args: A) => B) => {\n const out: B[] = [];\n forLoop((...args: A) => out.push(map(...args)));\n return out;\n };\n\nexport const mapSelectionColumns = (selection: Rectangle) => forToMap(forSelectionColumns(selection));\nexport const mapSelectionRows = (selection: Rectangle) => forToMap(forSelectionRows(selection));\n\n// Selection is infinite horizontally\nexport const isMaybeRowSelection = (selection: Rectangle) => {\n const [[left], [right]] = selection;\n return left === -1 && right === -1;\n};\n\n// Selection is infinite vertically\nexport const isMaybeColumnSelection = (selection: Rectangle) => {\n const [[, top], [, bottom]] = selection;\n return top === -1 && bottom === -1;\n};\n\n// Selection is ONLY infinite horizontally\nexport const isRowSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is ONLY infinite vertically\nexport const isColumnSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return top === -1 && bottom === -1 && left !== -1 && right !== -1;\n};\n\n// Selection is not infinite\nexport const isCellSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left !== -1 && right !== -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is null\nexport const isEmptySelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top === -1 && bottom === -1;\n};\n\n// Test cell inside selection (inclusive edges)\nexport const isPointInsideSelection = (selection: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n const [x, y] = point;\n return x >= left && x <= right && y >= top && y <= bottom;\n};\n\n// Validate selections to avoid half-infinite anchor/head\nexport const validateSelection = (selection: Rectangle): Rectangle => {\n let [anchor, head] = selection;\n anchor = anchor.slice() as XY;\n head = head.slice() as XY;\n\n const min = minXY(anchor, head);\n if (min[0] === -1) anchor[0] = head[0] = -1;\n if (min[1] === -1) anchor[1] = head[1] = -1;\n\n return [anchor, head];\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, head), maxXY(anchor, head)];\n};\n\n// Orient normalized rectangle to match existing orientation\nexport const orientSelection = (normalized: Rectangle, to: Rectangle): Rectangle => {\n const [[left, top], [right, bottom]] = normalized;\n\n const [anchor, head] = to;\n const [ax, ay] = anchor;\n const [hx, hy] = head;\n\n const swapX = (ax - hx || 1) * (right - left || 1) < 0;\n const swapY = (ay - hy || 1) * (bottom - top || 1) < 0;\n\n return [\n [swapX ? right : left, swapY ? bottom : top],\n [swapX ? left : right, swapY ? top : bottom],\n ];\n};\n\n// Clip rectangle to max range\nexport const clipSelection = (selection: Rectangle, max: XY): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, max), minXY(head, max)];\n};\n","import { ReactElement, useCallback, useMemo, useState } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport toRGBA from 'color-rgba';\nimport { CellContentItem, Rectangle, Style } from './types';\n\nconst DEFAULT_ICON_SIZE = 32;\n\nexport const svgToImage = (icon: ReactElement | string): HTMLImageElement => {\n const image = new Image();\n try {\n const iconAsString = typeof icon === 'string' ? icon : renderToString(icon);\n const base64String = window.btoa(iconAsString);\n image.src = `data:image/svg+xml;base64,${base64String}`;\n } catch (err) {\n console.log(err);\n }\n return image;\n};\n\nexport const useImageRenderer = () => {\n const [, setVersion] = useState(0);\n\n const [canvasWidth, setCanvasWidth] = useState(DEFAULT_ICON_SIZE);\n const [canvasHeight, setCanvasHeight] = useState(DEFAULT_ICON_SIZE);\n\n const imageMap = useMemo(() => new Map<string, HTMLImageElement>(), []);\n const loadImage = useCallback(\n (src: string): HTMLImageElement => {\n let image = imageMap.get(src);\n if (image) return image;\n\n image = new Image();\n image.src = src;\n imageMap.set(src, image!);\n return image!;\n },\n [imageMap],\n );\n\n const dpi = window.devicePixelRatio;\n const iconContext = useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth * dpi;\n canvas.height = canvasHeight * dpi;\n\n const context = canvas.getContext('2d', { willReadFrequently: true }) as any as CanvasRenderingContext2D;\n return context;\n }, [canvasWidth, canvasHeight, dpi]);\n\n return (\n renderContext: CanvasRenderingContext2D,\n item: CellContentItem & { display: 'image' | 'icon' },\n style: Required<Style>,\n box: Rectangle,\n ) => {\n if (!iconContext) return;\n\n const { display } = item;\n\n const image = 'image' in item ? item.image : 'src' in item ? loadImage(item.src) : null;\n if (!image) return;\n\n if (!image.complete) {\n if (!image.onload) {\n image.onload = () => {\n setVersion((v) => v + 1);\n setCanvasWidth((w) => Math.max(w, image.width));\n setCanvasHeight((h) => Math.max(h, image.height));\n };\n }\n return;\n } else {\n if (canvasWidth < image.width) setCanvasWidth((w) => Math.max(w, image.width));\n if (canvasHeight < image.height) setCanvasHeight((h) => Math.max(h, image.height));\n }\n\n const [[left, top], [right, bottom]] = box;\n const width = right - left;\n const height = bottom - top;\n\n if (display === 'image') {\n // Draw image directly\n renderContext.drawImage(image, 0, 0, image.width, image.height, left, top, width, height);\n } else if (display === 'icon') {\n // Recolor icon according to text color style\n const color = item.color ?? style.color;\n const rgba = toRGBA(color);\n const [r = 0, g = 0, b = 0, a = 1] = rgba;\n\n try {\n const wDpi = width * dpi;\n const hDpi = height * dpi;\n\n iconContext.clearRect(0, 0, wDpi, hDpi);\n iconContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, wDpi, hDpi);\n\n const imageData = iconContext.getImageData(0, 0, wDpi, hDpi);\n const { data } = imageData;\n const n = data.length;\n\n for (let i = 0; i < n; i += 4) {\n data[i] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = data[i + 3] * a;\n }\n\n iconContext.putImageData(imageData, 0, 0, 0, 0, wDpi, hDpi);\n renderContext.drawImage(iconContext.canvas, 0, 0, wDpi, hDpi, left, top, width, height);\n } catch (e) {\n console.error(e);\n }\n }\n };\n};\n","import { XY, Rectangle, RowOrColumnPropertyFunction } from './types';\nimport { normalizeSelection, orientSelection } from './coordinate';\n\nconst LIMIT = 1000;\n\nconst scanGroup = (\n keys: RowOrColumnPropertyFunction<string | number | null>,\n index: number,\n direction: number,\n matchKeys: Set<string | number | null>,\n) => {\n let i = 1;\n const limit = direction > 0 ? LIMIT : Math.min(LIMIT, index + 1);\n for (; i < limit; i++) {\n const key = keys(index + i * direction);\n if (key == null || !matchKeys.has(key)) break;\n }\n return index + (i - 1) * direction;\n};\n\n// Expand a selection to its adjacent row or column group\nexport const expandSelectionToRowOrColumnGroups = (\n selection: Rectangle,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n matchKeys: Set<string | number | null> | null,\n coordinate: number, // 0/1 for X/Y\n) => {\n if (!matchKeys) return selection;\n\n const [first, second] = normalizeSelection(selection);\n\n const start = first[coordinate];\n const end = second[coordinate];\n\n const startIndex = scanGroup(groupKeys, start, -1, matchKeys);\n const endIndex = scanGroup(groupKeys, end, 1, matchKeys);\n\n const expanded: Rectangle = [first.slice() as XY, second.slice() as XY];\n expanded[0][coordinate] = startIndex;\n expanded[1][coordinate] = endIndex;\n\n const oriented = orientSelection(expanded, selection);\n return oriented;\n};\n\nexport const isBoundaryInsideGroup = (\n index: number,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n) => {\n const before = groupKeys(index - 1);\n const after = groupKeys(index);\n return before != null && after != null && before === after;\n};\n","import {\n Direction,\n XY,\n CellContentType,\n CellProperty,\n CellPropertyFunction,\n CellPropertyStyled,\n CellPropertyStyledFunction,\n PropTypes,\n RowOrColumnProperty,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyled,\n RowOrColumnPropertyStyledFunction,\n} from './types';\nimport { MAX_SEARCHABLE_INDEX, ORIGIN, DEFAULT_CELL_STYLE } from './constants';\nimport { addXY, subXY, maxXY, getDirectionStep } from './coordinate';\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnProp = <T extends PropTypes>(\n rowColProp: RowOrColumnProperty<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellProp = <T extends PropTypes>(\n cellProp: CellProperty<T> | undefined,\n defaultValue: T,\n): CellPropertyFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnStyledProp = <T extends PropTypes>(\n rowColProp: RowOrColumnPropertyStyled<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyStyledFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellStyledProp = <T extends PropTypes>(\n cellProp: CellPropertyStyled<T> | undefined,\n defaultValue: T,\n): CellPropertyStyledFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\nexport const findApproxMaxEditDataIndex = (editData: CellPropertyFunction<string>): XY => {\n let x = 0;\n let y = 0;\n let howManyEmpty = 0;\n let growthIncrement = 10;\n let growthIncrementFactor = 1.5;\n\n // x\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let yy = 0; yy < 10; yy++) {\n const data = editData(x, yy);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n x += growthIncrement;\n if (x > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n\n howManyEmpty = 0;\n growthIncrement = 10;\n growthIncrementFactor = 1.5;\n\n // y\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let xx = 0; xx < 10; xx++) {\n const data = editData(xx, y);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n y += growthIncrement;\n if (y > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return [x, y];\n};\n\nexport const findInDisplayData = (\n displayData: CellPropertyStyledFunction<CellContentType>,\n start: XY,\n direction: Direction,\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = maxXY(start, ORIGIN);\n const [x, y] = addXY(cell, step);\n const first = displayData(x, y, DEFAULT_CELL_STYLE);\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n cell = addXY(cell, step);\n }\n\n let [cellX, cellY] = cell;\n const maxX = cellX + MAX_SEARCHABLE_INDEX - 1;\n const maxY = cellY + MAX_SEARCHABLE_INDEX - 1;\n\n while (cellX < maxX && cellY < maxY && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY, DEFAULT_CELL_STYLE);\n\n // if first cell is filled, find the last filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return subXY(cell, step);\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return cell;\n }\n\n [cellX, cellY] = cell = addXY(cell, step);\n }\n\n return maxXY(cell, [0, 0]);\n};\n","import {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n Change,\n Rectangle,\n RowOrColumnPropertyFunction,\n SheetMouseEvent,\n SheetStyle,\n VisibleLayout,\n XY,\n} from './types';\nimport { MouseEvent, PointerEvent, RefObject, useCallback, useMemo, useRef, useState } from 'react';\nimport {\n normalizeSelection,\n mapSelectionColumns,\n mapSelectionRows,\n isColumnSelection,\n isRowSelection,\n isCellSelection,\n isMaybeRowSelection,\n isPointInsideRectangle,\n isPointInsideSelection,\n isSameRectangle,\n addXY,\n subXY,\n maxXY,\n} from './coordinate';\nimport { ONE_ONE, ORIGIN, SIZES } from './constants';\nimport { isBoundaryInsideGroup, expandSelectionToRowOrColumnGroups } from './group';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange, seq } from './util';\n\ntype DragOp = {\n anchor: number;\n scroll: number;\n size: number;\n indices: number[];\n};\n\nexport const useMouse = (\n hitmapRef: RefObject<CellContentRender[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n\n canSizeColumn: RowOrColumnPropertyFunction<boolean | null>,\n canSizeRow: RowOrColumnPropertyFunction<boolean | null>,\n canOrderColumn: RowOrColumnPropertyFunction<boolean | null>,\n canOrderRow: RowOrColumnPropertyFunction<boolean | null>,\n\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n sheetStyle: SheetStyle,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n getAutoSizeWidth: (column: number) => number,\n getAutoSizeHeight: (row: number) => number,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragIndicesChange?: (indices: [number[] | null, number[] | null]) => void,\n onDragOffsetChange?: (dragOffset: XY | null) => void,\n onDropTargetChange?: (selection: Rectangle | null) => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n\n onInvalidateColumn?: (column: number) => void,\n onInvalidateRow?: (row: number) => void,\n\n onChange?: (changes: Change[]) => void,\n onColumnOrderChange?: (indices: number[], order: number) => void,\n onRowOrderChange?: (indices: number[], order: number) => void,\n onCellWidthChange?: (indices: number[], values: number[]) => void,\n onCellHeightChange?: (indices: number[], values: number[]) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n dontChangeSelectionOnOrderChange?: boolean,\n) => {\n const [columnResize, setColumnResize] = useState<DragOp | null>(null);\n const [rowResize, setRowResize] = useState<DragOp | null>(null);\n const [columnDrag, setColumnDrag] = useState<DragOp | null>(null);\n const [rowDrag, setRowDrag] = useState<DragOp | null>(null);\n\n const [hitTestDown, setHitTestDown] = useState<CellContentRender | null>(null);\n\n const [draggingKnob, setDraggingKnob] = useState(false);\n const [draggingSelection, setDraggingSelection] = useState(false);\n const [draggingRowSelection, setDraggingRowSelection] = useState(false);\n const [draggingColumnSelection, setDraggingColumnSelection] = useState(false);\n\n const { hideRowHeaders, hideColumnHeaders } = sheetStyle;\n const { cellToPixel, getVersion } = cellLayout;\n const version = getVersion();\n\n const knobPosition = useMemo((): XY | null => {\n const [, [maxX, maxY]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n return subXY(addXY(cellToPixel([0, maxY], [0, 1]), [SIZES.knobArea * 0.5, 0]), ONE_ONE);\n }\n if (isColumnSelection(selection)) {\n return subXY(addXY(cellToPixel([maxX, 0], [1, 0]), [0, SIZES.knobArea * 0.5]), ONE_ONE);\n }\n if (isCellSelection(selection)) {\n return subXY(cellToPixel([maxX, maxY], ONE_ONE), ONE_ONE);\n }\n return null;\n }, [selection, cellToPixel, version]);\n\n // Pass pointer/dragging state into handlers via ref so they don't need to rebind during resizes/drags\n const refState = {\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\n\n knobPosition,\n columnResize,\n rowResize,\n columnDrag,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingRowSelection,\n draggingColumnSelection,\n };\n const ref = useRef(refState);\n ref.current = refState;\n\n // Hit-testing for rendered objects\n const getMousePosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [e.clientX - rect.left, e.clientY - rect.top];\n\n // Ignore clicks on scrollbar\n if (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight) {\n return null;\n }\n\n return xy;\n }, []);\n\n const getScrollPosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return [0, 0];\n }\n\n const { scrollLeft, scrollTop } = e.target as any;\n const xy: XY = [scrollLeft, scrollTop];\n\n return xy;\n }, []);\n\n const getMouseHit = useCallback(\n (xy: XY) => {\n const { current: hitmap } = hitmapRef;\n if (!hitmap) return null;\n\n for (const object of hitmap) {\n const { box } = object;\n if (isPointInsideRectangle(box, xy)) {\n return object;\n }\n }\n\n return null;\n },\n [hitmapRef],\n );\n\n const onPointerLeave = useCallback(() => {\n window.document.body.style.cursor = 'auto';\n }, []);\n\n const onPointerDown = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n cellLayout: { columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY },\n visibleCells: { columns, rows },\n knobPosition,\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n setHitTestDown(hitTarget);\n\n const [x, y] = xy;\n\n const normalized = normalizeSelection(selection);\n const [[minX, minY], [maxX, maxY]] = normalized;\n\n const selectedColumns = mapSelectionColumns(selection)((i) => i);\n const selectedRows = mapSelectionRows(selection)((i) => i);\n\n // Column header\n if (!hideColumnHeaders && y < getIndentY()) {\n // Grab selected columns in column selection\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index, 0);\n const end = columnToPixel(index, 1);\n\n if (\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) || selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedColumns,\n ...(selectedColumnGroups\n ? columns.filter((index) =>\n selectedColumnGroups.has(columnGroupKeys(index)),\n )\n : []),\n ]).values(),\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedColumnGroups) {\n const clickSelection: Rectangle = [\n [index, -1],\n [index, -1],\n ];\n const [[left], [right]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n columnGroupKeys,\n selectedColumnGroups,\n 0,\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minX > right || maxX < left);\n const dragStart = connected ? Math.min(minX, left) : left;\n const dragEnd = connected ? Math.max(maxX, right) : right;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = columnToPixel(maxX, 1) - columnToPixel(minX);\n const [scroll] = getScrollPosition(e);\n\n setColumnDrag({\n anchor: x,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([dragIndices, null]);\n return;\n }\n }\n }\n }\n\n // Resize columns\n if (onCellWidthChange) {\n for (const index of [-1, ...columns]) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n\n const asGroup = isColumnSelection(selection) && maxX === index;\n const indices = asGroup ? selectedColumns : [index];\n\n const size = asGroup\n ? columnToPixel(maxX, 1) - columnToPixel(minX)\n : columnToPixel(index, 1) - columnToPixel(index);\n const [scroll] = getScrollPosition(e);\n\n setColumnResize({\n anchor: x,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n // Grab selected rows in row selection\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index, 0);\n const end = rowToPixel(index, 1);\n\n if (\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedRows,\n ...(selectedRowGroups\n ? rows\n .map((_, i) => i)\n .filter((index) => selectedRowGroups.has(rowGroupKeys(index)))\n : []),\n ]).values(),\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedRowGroups) {\n const clickSelection: Rectangle = [\n [-1, index],\n [-1, index],\n ];\n const [[, top], [, bottom]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n rowGroupKeys,\n selectedRowGroups,\n 1,\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minY > bottom || maxY < top);\n const dragStart = connected ? Math.min(minY, top) : top;\n const dragEnd = connected ? Math.max(maxY, bottom) : bottom;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = rowToPixel(maxY, 1) - rowToPixel(minY);\n const [, scroll] = getScrollPosition(e);\n\n setRowDrag({\n anchor: y,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([null, dragIndices]);\n return;\n }\n }\n }\n }\n\n // Resize rows\n if (onCellHeightChange) {\n for (const index of [-1, ...rows]) {\n const edge = rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n\n const asGroup = isRowSelection(selection) && maxY === index;\n const indices = asGroup ? selectedRows : [index];\n\n const size = asGroup\n ? rowToPixel(maxY, 1) - rowToPixel(minY)\n : rowToPixel(index, 1) - rowToPixel(index);\n const [, scroll] = getScrollPosition(e);\n\n setRowResize({\n anchor: y,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Knob drag mode\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n setDraggingKnob(true);\n onKnobAreaChange?.(selection);\n return;\n }\n }\n\n // Normal cell click\n const head = pixelToCell(xy);\n const anchor: XY = e.shiftKey ? [...selection[0]] : head;\n\n if (editMode) {\n if (!dontCommitEditOnSelectionChange) {\n onCommit?.();\n }\n }\n\n let scrollTo = true;\n\n if (!hideRowHeaders && x < getIndentX()) {\n scrollTo = false;\n setDraggingRowSelection(true);\n anchor[0] = -1;\n head[0] = -1;\n }\n\n if (!hideColumnHeaders && y < getIndentY()) {\n scrollTo = false;\n setDraggingColumnSelection(true);\n anchor[1] = -1;\n head[1] = -1;\n }\n\n setDraggingSelection(true);\n onSelectionChange?.([anchor, head], scrollTo, true);\n },\n [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onColumnOrderChange,\n onRowOrderChange,\n onCellWidthChange,\n onCellHeightChange,\n onKnobAreaChange,\n onSelectionChange,\n onCommit,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n dontCommitEditOnSelectionChange,\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n ],\n );\n\n const onPointerUp = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n knobArea,\n selection,\n sourceData,\n editData,\n\n columnDrag,\n rowDrag,\n\n draggingKnob,\n\n cellLayout: { pixelToColumn, pixelToRow },\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly);\n\n onChange?.(changes);\n onSelectionChange?.(knobArea, true, true);\n onKnobAreaChange?.(null);\n }\n\n const xy = getMousePosition(e);\n if (xy && (columnDrag || rowDrag)) {\n window.document.body.style.cursor = 'auto';\n onDragIndicesChange?.([null, null]);\n onDragOffsetChange?.(null);\n onDropTargetChange?.(null);\n\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const cellX = pixelToColumn(x, 0.5);\n const cellY = pixelToRow(y, 0.5);\n\n if (columnDrag) {\n const { indices } = columnDrag;\n\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = selectedColumnGroups?.has(columnGroupKeys(x));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellX);\n const order = cellX - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [order, minY],\n [order + indices.length - 1, maxY],\n ]);\n onColumnOrderChange?.(indices, order);\n onInvalidateColumn?.(Math.min(minX, order));\n }\n }\n if (rowDrag) {\n const { indices } = rowDrag;\n\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = selectedRowGroups?.has(rowGroupKeys(y));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellY);\n const order = cellY - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [minX, order],\n [maxX, order + indices.length - 1],\n ]);\n onRowOrderChange?.(indices, order);\n onInvalidateRow?.(Math.min(minY, order));\n }\n }\n }\n\n setDraggingSelection(false);\n setDraggingRowSelection(false);\n setDraggingColumnSelection(false);\n setDraggingKnob(false);\n setColumnResize(null);\n setColumnDrag(null);\n setRowResize(null);\n setRowDrag(null);\n },\n [\n getMousePosition,\n getMouseHit,\n onChange,\n onSelectionChange,\n onKnobAreaChange,\n onDropTargetChange,\n onColumnOrderChange,\n onRowOrderChange,\n dontChangeSelectionOnOrderChange,\n ],\n );\n\n const onPointerMove = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n visibleCells,\n\n knobPosition,\n columnResize,\n columnDrag,\n rowResize,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingColumnSelection,\n draggingRowSelection,\n\n cellLayout: {\n columnToPixel,\n rowToPixel,\n pixelToCell,\n pixelToColumn,\n pixelToRow,\n getIndentX,\n getIndentY,\n },\n },\n } = ref;\n\n window.document.body.style.cursor = 'auto';\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n if (columnDrag || rowDrag) {\n window.document.body.style.cursor = 'grabbing';\n } else if (columnResize) {\n window.document.body.style.cursor = 'col-resize';\n e.preventDefault();\n } else if (rowResize) {\n window.document.body.style.cursor = 'row-resize';\n e.preventDefault();\n } else if (draggingRowSelection || draggingColumnSelection) {\n e.preventDefault();\n } else if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n }\n\n const { columns, rows } = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const isDragging =\n columnResize || columnDrag || rowResize || rowDrag || draggingRowSelection || draggingColumnSelection;\n\n if (!isDragging) {\n if (!hideColumnHeaders && y < getIndentY()) {\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index);\n const end = columnToPixel(index, 1);\n\n if (\n !draggingColumnSelection &&\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) ||\n selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellWidthChange) {\n for (const index of [-1, ...columns]) {\n const edge = columnToPixel(index, 1);\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index);\n const end = rowToPixel(index, 1);\n\n if (\n !draggingRowSelection &&\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellHeightChange) {\n for (const index of [-1, ...rows]) {\n const edge = rowToPixel(index, 1);\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n return;\n }\n }\n }\n }\n\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n window.document.body.style.cursor = 'crosshair';\n return;\n }\n }\n }\n\n if (columnResize) {\n if (onCellWidthChange) {\n const { size, anchor, scroll, indices } = columnResize;\n const [currentScroll] = getScrollPosition(e);\n const newWidth = Math.round(\n Math.max(size + x - anchor + scroll - currentScroll, SIZES.minimumWidth * indices.length),\n );\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(\n indices,\n indices.map((_) => Math.round(newWidth / indices.length)),\n );\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const { size, anchor, scroll, indices } = rowResize;\n const [, currentScroll] = getScrollPosition(e);\n const newHeight = Math.round(\n Math.max(size + y - anchor + scroll - currentScroll, SIZES.minimumHeight * indices.length),\n );\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(\n indices,\n indices.map((_) => newHeight / indices.length),\n );\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = pixelToCell(xy);\n\n const [anchorX, anchorY] = anchor;\n const [headX, headY] = head;\n\n if (draggingRowSelection) {\n onSelectionChange?.(\n [\n [-1, anchorY],\n [-1, Math.max(0, headY)],\n ],\n false,\n );\n } else if (draggingColumnSelection) {\n onSelectionChange?.(\n [\n [anchorX, -1],\n [Math.max(0, headX), -1],\n ],\n false,\n );\n } else {\n onSelectionChange?.([maxXY(anchor, ORIGIN), maxXY(head, ORIGIN)], false);\n }\n }\n\n if (draggingKnob) {\n window.document.body.style.cursor = 'crosshair';\n\n const [cellX, cellY] = pixelToCell(xy);\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // check if vertical or horizontal\n let xCellDiff = Math.min(cellX - minX, maxX - cellX, 0); // zero or less\n let yCellDiff = Math.min(cellY - minY, maxY - cellY, 0); // zero or less\n\n if (isMaybeRowSelection(selection) || xCellDiff > yCellDiff) {\n if (cellY < minY) {\n minY = cellY;\n } else if (cellY > maxY) {\n maxY = cellY;\n }\n } else {\n if (cellX < minX) {\n minX = cellX;\n } else if (cellX > maxX) {\n maxX = cellX;\n }\n }\n\n onKnobAreaChange?.([\n [minX, minY],\n [maxX, maxY],\n ]);\n }\n\n if (columnDrag || rowDrag) {\n const [x, y] = xy;\n if (columnDrag) {\n const cellX = Math.max(0, pixelToColumn(x, 0.5));\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = isBoundaryInsideGroup(cellX, columnGroupKeys);\n\n const { anchor, scroll } = columnDrag;\n const shift = x - anchor;\n const [currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([shift + currentScroll - scroll, 0]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [cellX, -1],\n [cellX, -1],\n ],\n );\n }\n if (rowDrag) {\n const cellY = Math.max(0, pixelToRow(y, 0.5));\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = isBoundaryInsideGroup(cellY, rowGroupKeys);\n\n const { anchor, scroll } = rowDrag;\n const shift = y - anchor;\n const [, currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([0, shift + currentScroll - scroll]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [-1, cellY],\n [-1, cellY],\n ],\n );\n }\n }\n },\n [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onCellWidthChange,\n onCellHeightChange,\n onDragIndicesChange,\n onDragOffsetChange,\n onDropTargetChange,\n onSelectionChange,\n onKnobAreaChange,\n onInvalidateRow,\n onInvalidateColumn,\n columnGroupKeys,\n rowGroupKeys,\n ],\n );\n\n const onClick = useCallback(\n (e: MouseEvent) => {\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const mouseHit = getMouseHit(xy);\n\n // Verify if same object was clicked down and up to avoid false clicks due to drags\n if (hitTestDown && mouseHit) {\n if (isSameRectangle(hitTestDown.box, mouseHit.box)) {\n mouseHit?.item?.onClick?.(e);\n }\n }\n\n setHitTestDown(null);\n },\n [getMousePosition, getMouseHit, hitTestDown],\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel, rowToPixel, getIndentX, getIndentY },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n\n // Double click column divider to autosize\n const indentY = getIndentY();\n const { columns } = visibleCells;\n if (onCellWidthChange && y < indentY) {\n const autosized = [];\n\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n const [[minX], [maxX]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isColumnSelection(selection) && index >= minX && index <= maxX\n ? mapSelectionColumns(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const column of autosized) {\n onInvalidateColumn?.(column - 1);\n }\n onCellWidthChange(\n autosized,\n autosized.map((column) => getAutoSizeWidth(column)),\n );\n if (autosized.length) return;\n }\n\n // Double click row divider to autosize\n const indentX = getIndentX();\n const { rows } = visibleCells;\n if (onCellHeightChange && x < indentX) {\n const autosized = [];\n\n for (const index of [-1, ...rows]) {\n const edge = index < 0 ? rowToPixel(0) : rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n const [[, minY], [, maxY]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isRowSelection(selection) && index >= minY && index <= maxY\n ? mapSelectionRows(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const row of autosized) {\n onInvalidateRow?.(row - 1);\n }\n onCellHeightChange(\n autosized,\n autosized.map((row) => getAutoSizeHeight(row)),\n );\n if (autosized.length) return;\n }\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n return;\n }\n\n const editCell = pixelToCell(xy);\n if (editMode) onCommit?.();\n onEdit?.(editCell);\n },\n [\n getMousePosition,\n getMouseHit,\n onCommit,\n onEdit,\n onInvalidateColumn,\n onCellWidthChange,\n getAutoSizeWidth,\n visibleCells,\n canSizeColumn,\n ],\n );\n\n const onContextMenu = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n cellLayout: { pixelToCell, getIndentX, getIndentY },\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n if (x <= getIndentX() || y <= getIndentY()) {\n return;\n }\n\n // If click is not inside of selection, select the right clicked cell\n const cell = pixelToCell(xy);\n if (!isPointInsideSelection(selection, cell)) {\n onSelectionChange?.([cell, cell]);\n }\n\n onPointerMove(e as any);\n\n const [cellX, cellY] = cell;\n const event: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n onRightClick?.(event);\n },\n [getMousePosition, onSelectionChange, onPointerMove, onRightClick],\n );\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onClick,\n onDoubleClick,\n onContextMenu,\n };\n\n return { knobPosition, mouseHandlers };\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n sourceData: CellPropertyFunction<string | number | null>,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n): Change[] => {\n const [[kx1, ky1], [kx2, ky2]] = normalizeSelection(knobArea);\n const [[sx1, sy1], [sx2, sy2]] = normalizeSelection(selection);\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Change[] = [];\n\n // TODO: this should be made less cryptic, using logical selection ops/fns\n\n if (fx2 - fx1 === sx2 - sx1) {\n // vertical\n if (fy1 === sy1) {\n fy1 = sy2 + 1;\n } else {\n fy2 = sy1 - 1;\n }\n if (fx1 === -1 && fx2 === -1) {\n const [maxX] = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = maxX;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\n }\n }\n srcY = srcY + 1;\n if (srcY > sy2) {\n srcY = sy1;\n }\n }\n } else {\n // horizontal\n if (fx1 === sx1) {\n fx1 = sx2 + 1;\n } else {\n fx2 = sx1 - 1;\n }\n if (fy1 === -1 && fy2 === -1) {\n const [, maxY] = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = maxY;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n return changes;\n};\n","import { RefObject, KeyboardEvent, useLayoutEffect } from 'react';\n\nimport { ARROW_KEYS, MAX_SEARCHABLE_INDEX, ORIGIN, NEG_NEG } from './constants';\n\nimport { findInDisplayData } from './props';\n\nimport { CellContentType, CellPropertyFunction, CellPropertyStyledFunction, Change, Rectangle, XY } from './types';\n\nimport {\n normalizeSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\n\nexport const useKeyboard = (\n arrowKeyCommitMode: boolean,\n overlayRef: RefObject<HTMLDivElement>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n editCell: XY,\n editMode: boolean,\n focused: boolean,\n rawSelection: Rectangle,\n selection: Rectangle,\n\n onEdit?: (cell: XY, arrowKeyCommitMode?: boolean) => void,\n onCommit?: () => void,\n onCancel?: () => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n onClipboardCopy?: (cut: boolean) => void,\n onChange?: (changes: Change[]) => void,\n) => {\n const onInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel?.();\n return;\n }\n\n const direction =\n e.key === 'Enter' ? 'down' : e.key === 'Tab' ? 'right' : arrowKeyCommitMode ? ARROW_KEYS[e.key] : null;\n\n if (direction) {\n e.preventDefault();\n const step = getDirectionStep(direction);\n const head = maxXY(addXY(editCell, step), ORIGIN);\n onCommit?.();\n onSelectionChange?.([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && e.key in ARROW_KEYS) {\n onCommit?.();\n return;\n }\n\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'v') {\n return;\n }\n\n // copy\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'c') {\n onClipboardCopy?.(false);\n return;\n }\n // cut\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'x') {\n onClipboardCopy?.(true);\n return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let [[x1, y1], [x2, y2]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n x1 = 0;\n x2 = MAX_SEARCHABLE_INDEX;\n }\n if (isColumnSelection(selection)) {\n y1 = 0;\n y2 = MAX_SEARCHABLE_INDEX;\n }\n\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n }\n\n onChange?.(changes);\n return;\n }\n\n // nothing selected\n if (isEmptySelection(selection)) {\n return;\n }\n\n if (\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 105) ||\n (e.keyCode >= 65 && e.keyCode <= 90) ||\n e.key === 'Enter' ||\n e.key === '-' ||\n e.key === '.' ||\n e.key === ','\n ) {\n const [cell] = selection;\n const [cellX, cellY] = cell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n if (e.key === 'Enter') e.preventDefault();\n onEdit?.(cell, e.key !== 'Enter');\n return;\n }\n\n e.preventDefault();\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = rawSelection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n const shift = e.shiftKey;\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n } else {\n // Allow stepping into row/column headers with shift\n const limit: XY = shift\n ? isRowSelection(selection)\n ? [-1, 0]\n : isColumnSelection(selection)\n ? [0, -1]\n : NEG_NEG\n : ORIGIN;\n head = maxXY(addXY(head, step), limit);\n }\n\n if (!shift) {\n anchor = head;\n }\n\n onSelectionChange?.([anchor, head], true, true);\n return;\n }\n };\n\n const onGridFocus = () => {\n onFocusChange?.(true);\n };\n\n const onGridBlur = () => {\n onFocusChange?.(false);\n };\n\n // Focus canvas for keyboard\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) {\n return;\n }\n if (editMode || !focused) {\n return;\n }\n if (document.activeElement === overlay) {\n return;\n }\n\n const activeTagName = (document as any).activeElement.tagName.toLowerCase();\n if (\n !(\n (activeTagName === 'div' && (document as any).activeElement.contentEditable === 'true') ||\n activeTagName === 'input' ||\n activeTagName === 'textarea' ||\n activeTagName === 'select'\n )\n ) {\n overlay.focus({ preventScroll: true });\n }\n }, [editMode, focused]);\n\n return { onInputKeyDown, onGridFocus, onGridBlur, onGridKeyDown };\n};\n","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY, subXY } from './coordinate';\nimport { ONE_ONE } from './constants';\n\nexport const useScroll = (\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n onOffsetChange?: (offset: XY) => void,\n onMaxScrollChange?: (maxScroll: XY) => void,\n) => {\n return useCallback(\n (e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const { absoluteToCell, cellToAbsolute } = cellLayout;\n\n // Zero scroll position is considered in the center of the top/left cell\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const xy: XY = [e.target.scrollLeft + nudgeX, e.target.scrollTop + nudgeY];\n\n const cell = absoluteToCell(xy);\n if (!isSameXY(cell, offset)) {\n onOffsetChange?.(cell);\n }\n\n const [x, y] = xy;\n const [maxScrollX, maxScrollY] = maxScroll;\n const growX = maxScrollX < x + 1 ? 1.5 : 1;\n const growY = maxScrollY < y + 1 ? 1.5 : 1;\n if (growX > 1 || growY > 1) {\n onMaxScrollChange?.(mulXY(maxScroll, [growX, growY]));\n }\n },\n [cellLayout, onOffsetChange, onMaxScrollChange],\n );\n};\n\n// If view extends past end of table\n// Limit view to table contents\nexport const clipDataOffset = (view: XY, offset: XY, freeze: XY, maxCells: XY, cellLayout: CellLayout): XY => {\n let [newX, newY] = offset;\n const [freezeX, freezeY] = freeze;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n } = getViewExtent(view, [newX, newY], freeze, cellLayout);\n\n // Move extra space on the right/bottom to equivalent on the left/top\n if (leftEdge >= maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX + freezeX);\n newX = Math.max(0, absoluteToColumn(columnToAbsolute(newX + freezeX) - scrollW + remainder) - freezeX + 1);\n }\n if (topEdge >= maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY + freezeY);\n newY = Math.max(0, absoluteToRow(rowToAbsolute(newY + freezeY) - scrollH + remainder) - freezeY + 1);\n }\n\n return [newX, newY];\n};\n\n// Get bottom-right corner cell + non-frozen viewport size\nexport const getViewExtent = (\n view: XY,\n offset: XY,\n freeze: XY,\n cellLayout: CellLayout,\n): {\n edge: XY;\n viewport: XY;\n} => {\n const { cellToAbsolute } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX;\n const scrollH = h - frozenY;\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n\n return {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n };\n};\n\nexport const scrollToCell = (\n element: HTMLDivElement,\n cell: XY,\n view: XY,\n freeze: XY,\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n callback: (offset: XY, maxScroll: XY) => void,\n) => {\n const [x, y] = cell;\n const [w, h] = view;\n const [offsetX, offsetY] = offset;\n\n const { cellToAbsolute, cellToPixel, columnToPixel, rowToPixel } = cellLayout;\n\n const origin = cellToAbsolute([0, 0]);\n const frozen = cellToAbsolute(freeze);\n const [frozenX, frozenY] = frozen;\n\n const [left, top] = cellToPixel(cell);\n const [right, bottom] = cellToPixel(cell, ONE_ONE);\n\n let [newX, newY] = offset;\n\n // If moving left/up, scroll to head\n if (left <= frozenX) {\n newX = x - freeze[0];\n }\n if (top <= frozenY) {\n newY = y - freeze[1];\n }\n\n // If moving right/down, scroll cell by cell until right/bottom of cell is visible\n if (right > w) {\n let edge = right - w + columnToPixel(newX);\n while (columnToPixel(++newX) < edge) {}\n }\n if (bottom > h) {\n let edge = bottom - h + rowToPixel(newY);\n while (rowToPixel(++newY) < edge) {}\n }\n\n // Don't scroll on infinite axis\n const newOffset: XY = [newX >= 0 ? newX : offsetX, newY >= 0 ? newY : offsetY];\n\n if (!isSameXY(newOffset, offset)) {\n const scroll = subXY(cellToAbsolute(newOffset), origin);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n\n setTimeout(() => {\n updateScrollPosition(element, newOffset, cellLayout);\n });\n }\n};\n\nexport const updateScrollPosition = (element: HTMLDivElement, dataOffset: XY, cellLayout: CellLayout) => {\n const { cellToAbsolute } = cellLayout;\n\n const scroll = cellToAbsolute(dataOffset);\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n};\n","import type {\n Align,\n Anchor,\n CellContentContainer,\n CellContentItem,\n CellContentRender,\n Justify,\n Rectangle,\n} from './types';\n\nexport const getInlineAlignment = (cellWidth: number, contentWidth: number, align: Align): number => {\n if (align === 'left') return 0;\n if (align === 'right') return cellWidth - contentWidth;\n\n return Math.round((cellWidth - contentWidth) / 2);\n};\n\nexport const measureFlexWidth = (context: CanvasRenderingContext2D, item: CellContentItem): number => {\n const { width } = item;\n if (width != null) return width;\n\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n const { actualBoundingBoxLeft, actualBoundingBoxRight } = context.measureText(text.toString());\n const w = actualBoundingBoxRight + actualBoundingBoxLeft;\n return width ?? w;\n }\n } else {\n throw new Error('Image or JSX content must have dimension specified');\n }\n return 0;\n};\n\nexport const resolveCellFlexLayout = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { flexJustify = 'start', flexAlign = 'center', flexGap = 0, items } = cellContent;\n\n // Gather flex items\n const flexItems = items.filter((item) => !item.absolute);\n\n // Measure natural size without wrapping\n const measuredWidths = cellContent.items.map((item) => measureFlexWidth(context, item));\n\n // Gather flex box horizontal info\n const sizes: number[] = [];\n const grows: number[] = [];\n const shrinks: number[] = [];\n\n let x = 0;\n flexItems.forEach((item, i) => {\n const defaultGrow = item.display === 'inline' ? 1 : 0;\n const defaultShrink = defaultGrow || (item.display === 'space' ? 1 : 0);\n const {\n width = measuredWidths[i],\n flexGrow = defaultGrow,\n flexShrink = defaultShrink,\n marginLeft = 0,\n marginRight = 0,\n } = item;\n\n sizes.push(width);\n grows.push(flexGrow);\n shrinks.push(flexShrink);\n\n x += width + marginLeft + marginRight + flexGap;\n });\n\n // Horizontal slack: leave space for n-1 gaps, without last extra\n let slackX = cellWidth - x + flexGap;\n\n // Flex horizontally\n if (slackX > 0 && growRow(slackX, grows, sizes)) slackX = 0;\n if (slackX < 0 && shrinkRow(slackX, shrinks, sizes)) slackX = 0;\n\n const [gapX, leadX] = getAlignmentSpacing(slackX, flexItems.length, flexJustify);\n const combinedGapX = gapX + flexGap;\n\n // Gather flex box vertical info\n const maxHeight = flexItems\n .map(({ height, marginTop = 0, marginBottom = 0 }) => (height ?? cellHeight) + marginTop + marginBottom)\n .reduce((a, b) => Math.max(a, b));\n\n const slackY = Math.max(0, cellHeight - maxHeight);\n const offsetY = getAlignmentAnchor(flexAlign) * slackY;\n\n // Resolve flex boxes\n let leftCursor = leadX;\n return flexItems.map((item, i) => {\n const {\n height: fixedHeight,\n marginLeft = 0,\n marginRight = 0,\n marginTop = 0,\n marginBottom = 0,\n flexAlignSelf = flexAlign,\n } = item;\n\n const marginX = marginLeft + marginRight;\n const marginY = marginTop + marginBottom;\n\n const height = fixedHeight ?? maxHeight - marginY;\n\n const slackSelfY = maxHeight - height - marginY;\n const offsetSelfY = getAlignmentAnchor(flexAlignSelf) * slackSelfY;\n\n const x = Math.round(cellLeft + marginLeft + leftCursor);\n const y = Math.round(cellTop + marginTop + offsetY + offsetSelfY);\n leftCursor += combinedGapX + marginX + sizes[i];\n\n const boxW = sizes[i];\n const boxH = height;\n const box: Rectangle = [\n [x, y],\n [x + boxW, y + boxH],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\nexport const resolveCellAbsoluteLayout = (\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { items } = cellContent;\n\n // Gather absolute items\n const absoluteItems = items.filter((item) => item.absolute);\n\n const resolvePosition = (\n container: number,\n size: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (start != null) return start + marginStart;\n if (end != null) return container - end - marginEnd - size;\n return 0;\n };\n\n const resolveSize = (\n container: number,\n span?: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (span != null) return span;\n if (start != null && end != null) return container - start - end - marginStart - marginEnd;\n return 0;\n };\n\n // Resolve absolute boxes\n return absoluteItems.map((item) => {\n const { left, top, right, bottom, width, height, marginLeft, marginTop, marginRight, marginBottom } = item;\n\n const w = resolveSize(cellWidth, width, left, right, marginLeft, marginRight);\n const h = resolveSize(cellHeight, height, top, bottom, marginTop, marginBottom);\n\n const l = cellLeft + resolvePosition(cellWidth, w, left, right, marginLeft, marginRight);\n const t = cellTop + resolvePosition(cellHeight, h, top, bottom, marginTop, marginBottom);\n\n const box: Rectangle = [\n [l, t],\n [l + w, t + h],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\n// Grow all applicable blocks in a row to add extra slack.\nexport const growRow = (slack: number, grow: number[], sizes: number[]) => {\n const n = grow.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (grow[i] > 0) weight += grow[i];\n\n if (weight > 0) {\n for (let i = 0; i < n; ++i) {\n if (grow[i] > 0) {\n sizes[i] += (slack * grow[i]) / weight;\n }\n }\n return true;\n }\n return false;\n};\n\n// Shrink all applicable blocks in a row to remove excess slack.\nexport const shrinkRow = (slack: number, shrink: number[], sizes: number[]): boolean => {\n const n = shrink.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (shrink[i]) weight += shrink[i] * sizes[i];\n\n if (weight > 0) {\n let negative = 0;\n for (let i = 0; i < n; ++i) {\n if (shrink[i] > 0 && sizes[i]) {\n sizes[i] += (slack * shrink[i] * sizes[i]) / weight;\n if (sizes[i] < 0) {\n negative += sizes[i];\n sizes[i] = 0;\n }\n }\n }\n if (negative) {\n shrinkRow(negative, shrink, sizes);\n }\n return true;\n }\n return false;\n};\n\n// Alignment to relative anchor position [0...1]\nexport const getAlignmentAnchor = (x: Anchor): number => {\n const isStart = x === 'start';\n const isEnd = x === 'end';\n\n const align = isStart ? 0 : isEnd ? 1 : 0.5;\n return align;\n};\n\n// Alignment/justification spacing and indent\nexport const getAlignmentSpacing = (slack: number, n: number, justify: Justify) => {\n let gap = 0;\n let lead = 0;\n\n const isJustify = justify === 'justify';\n const isBetween = justify === 'between';\n const isEvenly = justify === 'evenly';\n\n if (slack > 0) {\n if (isEvenly || isBetween || isJustify) {\n if (n === 1) {\n lead = slack / 2;\n } else if (isEvenly) {\n gap = Math.max(0, slack / (n + 1));\n lead = gap;\n } else if (isBetween) {\n gap = Math.max(0, slack / n);\n lead = gap / 2;\n } else if (isJustify) {\n gap = Math.max(0, slack / Math.max(1, n - 1));\n }\n } else {\n lead = getAlignmentAnchor(justify as Anchor) * slack;\n }\n }\n\n return [gap, lead];\n};\n","import LineBreak from 'linebreak';\nimport { getInlineAlignment } from './cell';\nimport { Align, Style } from './types';\n\nexport const wrapText = (\n context: CanvasRenderingContext2D,\n text: string | number,\n style: Required<Style>,\n itemAlign: Align | undefined,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n emit: (text: string, x: number, y: number) => void,\n) => {\n const { textAlign, lineHeight, fontSize, marginBottom } = style;\n\n const align = itemAlign ?? textAlign;\n context.textAlign = align;\n\n const x = xCoord + getInlineAlignment(cellWidth, 0, align);\n const y = yCoord;\n const s = text.toString();\n const n = s.length;\n\n let xCursor = 0;\n let yCursor = 0;\n let wordsPerLine = 0;\n let startOfLine = 0;\n const newline = (endOfLine: number, ellipsis: boolean = false, endsInSpace: boolean = false) => {\n const line = s.slice(startOfLine, endOfLine - +endsInSpace);\n emit(ellipsis ? line + '…' : line, x, y + yCursor);\n\n startOfLine = endOfLine;\n wordsPerLine = 0;\n xCursor = 0;\n yCursor += lineHeight;\n };\n\n const breaker = new LineBreak(s);\n\n let lastPosition = 0;\n let bk;\n while ((bk = breaker.nextBreak())) {\n const { position, required } = bk;\n const word = s.slice(lastPosition, position);\n\n const { width } = context.measureText(word);\n\n const canNewLine = yCursor + lineHeight + marginBottom < cellHeight;\n const hasMoreText = position < n;\n const endsInSpace = word[word.length - 1] === ' ';\n const ellipsisSpace = !canNewLine && hasMoreText ? (endsInSpace ? 0.5 : 1) * fontSize : 0;\n\n const nextX = xCursor + width + ellipsisSpace;\n if (wordsPerLine && nextX >= cellWidth) {\n if (canNewLine) newline(lastPosition);\n else {\n if (endsInSpace) {\n const { width } = context.measureText(' ');\n xCursor -= width;\n }\n newline(lastPosition, true, endsInSpace);\n return;\n }\n }\n\n xCursor += width;\n wordsPerLine++;\n\n if (required) newline(position);\n\n lastPosition = position;\n }\n\n newline(n);\n};\n","import { useCallback, useMemo } from 'react';\nimport { DEFAULT_COLUMN_HEADER_STYLE, DEFAULT_CELL_STYLE, SIZES } from './constants';\nimport { wrapText } from './text';\nimport {\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n CellContentType,\n Style,\n} from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n canvasWidth: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeWidth = useCallback(\n (x: number) => {\n if (!context) return 0;\n\n const getWidth = (cellContent: Exclude<CellContentType, null>, style: Required<Style>) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const inlineMargin = style.marginLeft + style.marginRight;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const { width } = context.measureText(cellContent.toString());\n return width + inlineMargin;\n } else if (typeof cellContent === 'object') {\n let totalWidth = inlineMargin;\n\n const { flexGap = 0, items } = cellContent;\n for (const item of items) {\n if (item.absolute) continue;\n\n if (item.width != null) {\n totalWidth += item.width;\n } else if (item.display === 'inline' && item.text != null) {\n const { width } = context.measureText(item.text.toString());\n totalWidth += width;\n }\n totalWidth += flexGap;\n }\n totalWidth -= flexGap;\n\n return totalWidth;\n }\n return 0;\n };\n\n let maxWidth = SIZES.minimumWidth;\n\n const headerStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) };\n const headerContent = columnHeaders(x, headerStyle);\n if (headerContent) {\n maxWidth = Math.max(maxWidth, getWidth(headerContent, headerStyle));\n }\n\n for (const y of rows) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n const cellContent = displayData(x, y, style);\n if (cellContent != null) {\n maxWidth = Math.max(maxWidth, getWidth(cellContent, style));\n }\n }\n\n return Math.ceil(Math.min(canvasWidth, maxWidth));\n },\n [context, displayData, cellStyle, columnHeaders, columnHeaderStyle],\n );\n\n return getAutoSizeWidth;\n};\n\nexport const useAutoSizeRow = (\n columns: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n canvasHeight: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeHeight = useCallback(\n (y: number) => {\n if (!context) return 0;\n\n const measureTextHeight = (text: string, style: Required<Style>, columnWidth: number) => {\n let maxY = 0;\n const measureY = (_t: string, _x: number, y: number) => {\n maxY = y + style.lineHeight;\n };\n wrapText(context, text, style, undefined, 0, 0, columnWidth, canvasHeight, measureY);\n return maxY;\n };\n\n const getHeight = (\n cellContent: Exclude<CellContentType, null>,\n style: Required<Style>,\n columnWidth: number,\n ) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const verticalMargin = style.marginTop + style.marginBottom;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const height = measureTextHeight(cellContent.toString(), style, columnWidth);\n return height + verticalMargin;\n } else if (typeof cellContent === 'object') {\n let maxHeight = 0;\n\n for (const item of cellContent.items) {\n if (item.absolute) continue;\n\n if (item.height != null) {\n maxHeight = Math.max(maxHeight, item.height);\n } else if (item.display === 'inline' && item.text != null) {\n const height = measureTextHeight(item.text.toString(), style, columnWidth);\n maxHeight = Math.max(maxHeight, height);\n }\n }\n\n return maxHeight + verticalMargin;\n }\n return 0;\n };\n\n const isHeader = y === -1;\n let maxHeight = SIZES.minimumHeight;\n\n for (const x of columns) {\n const style = isHeader\n ? { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) }\n : { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n\n const cellContent = isHeader ? columnHeaders(x, style) : displayData(x, y, style);\n\n if (cellContent != null) {\n const columnWidth = cellWidth(x) - style.marginLeft - style.marginRight;\n maxHeight = Math.max(maxHeight, getHeight(cellContent, style, columnWidth));\n }\n }\n\n return Math.ceil(Math.min(canvasHeight, maxHeight));\n },\n [context, displayData, cellStyle, cellWidth],\n );\n\n return getAutoSizeHeight;\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import { ClipboardPayload, CellPropertyFunction, Change, Rectangle } from './types';\nimport { useCallback, useLayoutEffect, useMemo, useState } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport {\n normalizeSelection,\n isMaybeRowSelection,\n isMaybeColumnSelection,\n isEmptySelection,\n addXY,\n forSelectionRows,\n forSelectionColumns,\n} from './coordinate';\n\n// Type missing from TS <=4.3\ninterface ClipboardItem {\n readonly types: string[];\n readonly presentationStyle: 'unspecified' | 'inline' | 'attachment';\n getType(): Promise<Blob>;\n}\n\ndeclare var ClipboardItem: {\n prototype: ClipboardItem;\n new (itemData: any): ClipboardItem;\n};\n\nexport type ClipboardTable<T = any> = {\n rows: string[][];\n payload?: ClipboardPayload<T>;\n};\n\nconst EMPTY_TABLE: ClipboardTable = { rows: [] };\n\n// Access clipboard as HTML table + JSON payload.\n// Provide peek access to clipboard if permission granted.\n// Ask permission on first copy.\nexport const useClipboardTable = () => {\n const [peek, setPeek] = useState<ClipboardTable | null>();\n\n useLayoutEffect(() => {\n const softRefresh = async () => {\n try {\n const status = await navigator.permissions.query({ name: 'clipboard-read' as any });\n if (status.state !== 'granted') return;\n\n hardRefresh();\n } catch (e) {}\n };\n\n const hardRefresh = async () => {\n try {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (item) {\n const peek = await parseClipboardTable(item);\n setPeek(peek);\n } else {\n setPeek(EMPTY_TABLE);\n }\n } catch (e) {}\n };\n\n const delayedRefresh = () => setTimeout(hardRefresh);\n\n window.document.addEventListener('cut', delayedRefresh);\n window.document.addEventListener('copy', delayedRefresh);\n window.document.addEventListener('focus', softRefresh);\n\n softRefresh();\n\n return () => {\n window.document.removeEventListener('cut', delayedRefresh);\n window.document.removeEventListener('copy', delayedRefresh);\n window.document.removeEventListener('focus', softRefresh);\n };\n }, []);\n\n const canPaste = useCallback(\n // Peek may not be available, allow paste attempt.\n () => !!(peek == null || peek.rows?.length),\n [peek],\n );\n\n return {\n peek,\n canPaste,\n copyTable: copyClipboardTable,\n pasteTable: pasteClipboardTable,\n };\n};\n\n// Sheet clipboard with payload-handler injected\nexport const useClipboardAPI = <T = any>(\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean>,\n addListener: boolean,\n\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Change[]) => void,\n onCopy?: (selection: Rectangle, rows: string[][], cut: boolean) => ClipboardPayload<T> | null | undefined,\n onPaste?: (\n selection: Rectangle,\n rows: string[][],\n payload?: ClipboardPayload<T>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>,\n) => {\n const { canPaste, copyTable, pasteTable } = useClipboardTable();\n\n const pasteIntoSelection = useCallback(\n async (selection: Rectangle, table: ClipboardTable) => {\n const { rows, payload } = table;\n const [min] = normalizeSelection(selection);\n const [minX, minY] = min;\n\n const left = Math.max(0, minX);\n const top = Math.max(0, minY);\n\n const width = rows.reduce((a, b) => Math.max(a, b.length), 0);\n const height = rows.length;\n\n const newSelection: Rectangle = [min, addXY(min, [width - 1, height - 1])];\n\n const shouldPaste = await onPaste?.(newSelection, rows, payload);\n if (shouldPaste !== false) {\n const changes = rows\n .flatMap((row, j) =>\n row.map((value, i) => {\n const x = left + i;\n const y = top + j;\n return !cellReadOnly?.(x, y) ? { x, y, value } : null;\n }),\n )\n .filter((change) => !!change) as Change[];\n\n onChange?.(changes);\n onSelectionChange?.(newSelection);\n }\n },\n [onChange, onSelectionChange, cellReadOnly],\n );\n\n // Imperative API\n const copySelection = useCallback(\n async (selection: Rectangle, cut: boolean = false) => {\n const rows = formatSelectionAsRows(selection, editData);\n const payload = onCopy?.(selection, rows, cut);\n\n copyTable(rows, payload);\n\n if (payload?.cut ?? cut) {\n const changes: Change[] = [];\n forSelectionRows(selection)((y: number) => {\n forSelectionColumns(selection)((x: number) => {\n if (!cellReadOnly?.(x, y)) {\n const change = { x, y, value: '' };\n changes.push(change);\n }\n });\n });\n onChange?.(changes);\n }\n },\n [onCopy, onChange, cellReadOnly],\n );\n\n const pasteSelection = useCallback(\n async (selection: Rectangle) => {\n const table = await pasteTable();\n if (table) pasteIntoSelection(selection, table);\n },\n [pasteIntoSelection],\n );\n\n // Event handlers\n const onClipboardCopy = (cut: boolean) => {\n if (isEmptySelection(selection)) return;\n return copySelection(selection, cut);\n };\n\n const onClipboardPaste = async (e: any) => {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const table = await parseClipboardTable(clipboardData);\n if (table) pasteIntoSelection(selection, table);\n };\n\n useLayoutEffect(() => {\n if (!addListener) return;\n\n // Use onpaste event when we can because it has more browser support\n window.document.addEventListener('paste', onClipboardPaste);\n return () => {\n window.document.removeEventListener('paste', onClipboardPaste);\n };\n });\n\n const clipboardApi = useMemo(\n () => ({\n copySelection,\n pasteSelection,\n canPasteSelection: canPaste,\n }),\n [copySelection, pasteSelection, canPaste],\n );\n\n return { clipboardApi, onClipboardCopy, onClipboardPaste };\n};\n\nconst copyClipboardTable = async (rows: string[][], payload?: ClipboardPayload<any> | null) => {\n const text = formatRowsAsTSV(rows);\n const html = formatRowsAsHTML(rows, payload ?? undefined);\n\n await (navigator.clipboard as any).write([\n new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([text], { type: 'text/plain' }),\n }),\n ]);\n\n const event = new Event('copy');\n document.dispatchEvent(event);\n};\n\nconst pasteClipboardTable = async () => {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (!item) return;\n\n return parseClipboardTable(item);\n};\n\nconst parseClipboardTable = async (item: ClipboardItem | DataTransfer): Promise<ClipboardTable | null> => {\n // Work with both clipboard API (ClipboardItem) and onpaste event (DataTransfer)\n const has = (type: string) => {\n return item.types.includes(type);\n };\n\n const get = (type: string) => {\n if ('getData' in item) return item.getData(type);\n else if ('getType' in item) return (item as any).getType(type).then((blob: Blob) => blob.text());\n return '';\n };\n\n let rows, payload;\n if (has('text/html')) {\n const pastedHtml = await get('text/html');\n ({ rows, payload } = parsePastedHtml(pastedHtml));\n } else if (has('text/plain')) {\n const text = await get('text/plain');\n rows = parsePastedText(text);\n }\n if (!rows) return { rows: [] };\n\n return { rows, payload };\n};\n\nconst formatRowsAsTSV = (rows: string[][]) => rows.map((row) => row.join('\\t')).join('\\n');\n\nconst formatRowsAsHTML = (rows: string[][], payload?: ClipboardPayload<any>) => {\n const trs = rows\n .map((row) => {\n const tds = row.map(formatTextAsHTML).map((cell) => `<td>${cell}</td>`);\n return tds.join('');\n })\n .map((row) => `<tr>${row}</tr>`)\n .join('\\n');\n\n const table = `<table>${trs}</table>`;\n\n if (payload) {\n const extra = `<SheetHappens payload=\"${formatTextAsHTML(JSON.stringify(payload))}\"></SheetHappens>`;\n return extra + table;\n }\n\n return table;\n};\n\nconst formatTextAsHTML = (s: string) => s.replace(/[&\"'<>]/g, (i) => `&#${i.charCodeAt(0)};`);\n\nconst formatSelectionAsRows = (selection: Rectangle, editData: CellPropertyFunction<string>) => {\n if (isEmptySelection(selection)) return [];\n\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n if (isMaybeRowSelection(selection)) {\n const [cellX] = findApproxMaxEditDataIndex(editData);\n minX = 0;\n maxX = cellX;\n }\n if (isMaybeColumnSelection(selection)) {\n const [, cellY] = findApproxMaxEditDataIndex(editData);\n minY = 0;\n maxY = cellY;\n }\n\n const rows: string[][] = [];\n\n for (let y = minY; y <= maxY; y++) {\n const row: string[] = [];\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value != null ? value : '');\n }\n }\n\n rows.push(row);\n }\n\n return rows;\n};\n\nconst findTag = (element: any, tagName: string): any => {\n for (const child of element.children) {\n if (child.nodeName === tagName) {\n return child;\n }\n const maybeTag = findTag(child, tagName);\n if (maybeTag) {\n return maybeTag;\n }\n }\n};\n\nconst parsePastedHtml = (\n html: string,\n): {\n rows: string[][];\n payload: any;\n} => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const rows = [];\n let payload: any = undefined;\n\n const sheetNode = findTag(div, 'SHEETHAPPENS');\n if (sheetNode) {\n const json = sheetNode.getAttribute('payload');\n try {\n payload = JSON.parse(json);\n } catch (e) {}\n }\n\n const tableNode = findTag(div, 'TABLE');\n if (tableNode) {\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n if (tr.nodeName === 'TR') {\n const row = [];\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n\n row.push(str);\n }\n }\n rows.push(row);\n }\n }\n }\n }\n }\n\n return {\n rows,\n payload,\n };\n};\n\nconst parsePastedText = (text: string): string[][] => {\n return text.split(/\\r?\\n/).map((line) => line.split('\\t'));\n};\n","import { XY, CellLayout, VisibleLayout, LayoutCache } from './types';\nimport { seq } from './util';\nimport { ORIGIN } from './constants';\n\nconst INITIAL_SIZE = 256;\n\n// Local cell layout (virtualized with frozen columns/rows)\n//\n// - converts cell indices to (x, y) canvas pixels for any cell, including off-screen\n// - maps (x, y) canvas pixels back to cell index for any visible cell\n// - can also generate absolute, unscrolled offsets relative to (0,0) to drive scrolling\n// - generates list of visible cols/rows in view\n//\n// Note that adjacent column indices are not necessarily adjacent, i.e. end of [i] != start of [i + 1].\nexport const makeCellLayout = (\n freeze: XY,\n offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache,\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => columns.getStart(0);\n const getIndentY = () => rows.getStart(0);\n\n // Origin for cell, frozen or relative\n const getBaseOriginFor = (index: number, freeze: number, offset: number) => {\n return index < freeze ? 0 : offset + freeze;\n };\n\n // Get visible pixel x of cell\n const columnToPixel = (column: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(column, freezeX, offsetX);\n const relative = columns.getStart(column) - columns.getStart(base);\n const adjust = column < freezeX ? 0 : columns.getStart(freezeX) - columns.getStart(0);\n const size = columns.getSize(column);\n\n return getIndentX() + relative + adjust + anchor * size;\n };\n\n // Get visible pixel y of cell\n const rowToPixel = (row: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(row, freezeY, offsetY);\n const relative = rows.getStart(row) - rows.getStart(base);\n const adjust = row < freezeY ? 0 : rows.getStart(freezeY) - rows.getStart(0);\n const size = rows.getSize(row);\n\n return getIndentY() + relative + adjust + anchor * size;\n };\n\n // Get visible pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToPixel = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToPixel(cellX, anchorX), rowToPixel(cellY, anchorY)];\n };\n\n // Get absolute / unscrolled pixel x of cell\n const columnToAbsolute = (column: number, anchorX: number = 0): number => {\n const relative = columns.getStart(column);\n const size = column < 0 ? 0 : columns.getSize(column);\n\n return relative + anchorX * size;\n };\n\n // Get absolute / unscrolled pixel y of cell\n const rowToAbsolute = (row: number, anchorY: number = 0): number => {\n const relative = rows.getStart(row);\n const size = row < 0 ? 0 : rows.getSize(row);\n\n return relative + anchorY * size;\n };\n\n // Get absolute / unscrolled pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToAbsolute = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToAbsolute(cellX, anchorX), rowToAbsolute(cellY, anchorY)];\n };\n\n // Lookup pixel X or Y in cell layout\n const pixelToIndex = (pixel: number, anchor: number, freeze: number, offset: number, layout: LayoutCache) => {\n const { getStart, lookupIndex } = layout;\n\n const indent = getStart(0);\n if (pixel < indent) return -1;\n\n const frozen = getStart(freeze);\n if (pixel < frozen) {\n return lookupIndex(pixel, anchor);\n } else {\n const relative = pixel - indent;\n const base = getStart(offset + freeze);\n const adjust = getStart(freeze) - getStart(0);\n return lookupIndex(base + relative - adjust, anchor);\n }\n };\n\n // Lookup pixel X or Y in cell layout (helpers)\n const pixelToColumn = (pixelX: number, anchorX: number = 0) =>\n pixelToIndex(pixelX, anchorX, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) => pixelToIndex(pixelY, anchorY, freezeY, offsetY, rows);\n\n // Lookup pixel XY in cell layout\n const pixelToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [pixelToColumn(pixelX, anchorX), pixelToRow(pixelY, anchorY)];\n };\n\n // Lookup absolute / unscrolled pixel X or Y in cell layout\n const absoluteToIndex = (pixel: number, anchor: number, layout: LayoutCache) => {\n if (pixel < 0) return -1;\n\n const { lookupIndex } = layout;\n return lookupIndex(pixel, anchor);\n };\n\n // Lookup absolute / unscrolled X or Y in cell layout (helpers)\n const absoluteToColumn = (pixelX: number, anchorX: number = 0) => absoluteToIndex(pixelX, anchorX, columns);\n const absoluteToRow = (pixelY: number, anchorY: number = 0) => absoluteToIndex(pixelY, anchorY, rows);\n\n // Lookup absolute / unscrolled XY in cell layout\n const absoluteToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [absoluteToColumn(pixelX, anchorX), absoluteToRow(pixelY, anchorY)];\n };\n\n // Get visible range of columns or rows\n const getVisibleIndices = (view: number, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const { getStart, getEnd } = layout;\n\n const frozen = getEnd(freeze - 1);\n const notFrozen = getStart(offset + freeze);\n\n const relative = view - frozen;\n for (let i = offset + freeze; getStart(i) - notFrozen <= relative; ++i) {\n indices.push(i);\n }\n\n return indices;\n };\n\n // Get visible range for an XY viewport\n const getVisibleCells = (view: XY): VisibleLayout => {\n const [viewX, viewY] = view;\n return {\n columns: getVisibleIndices(viewX, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, freezeY, offsetY, rows),\n };\n };\n\n const getVersion = () => columns.getVersion() + rows.getVersion();\n\n return {\n columnToPixel,\n rowToPixel,\n cellToPixel,\n\n columnToAbsolute,\n rowToAbsolute,\n cellToAbsolute,\n\n pixelToColumn,\n pixelToRow,\n pixelToCell,\n\n absoluteToColumn,\n absoluteToRow,\n absoluteToCell,\n\n getVisibleCells,\n getIndentX,\n getIndentY,\n\n getVersion,\n };\n};\n\n// Offset cache in 1 dimension.\n//\n// Allows O(1) queries of distance between any two points, once warmed up.\n// Can do reverse lookup back to index with binary search, once warmed up.\n//\n// - caches sizer(i), each is only called once\n// - offset[0] = sizer(-1)\n// - adds up offset[i] = sizer(0) + sizer(1) + ... + sizer(i - 1)\n// - cache can be truncated during resizing ops at split\n// - to replace sizer function, cache must be destroyed\nexport const makeLayoutCache = (sizer: (index: number) => number): LayoutCache => {\n const offsets = makeIntMap(INITIAL_SIZE);\n const sizes = makeIntMap(INITIAL_SIZE);\n\n let version = 0;\n offsets.set(0, sizer(-1));\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return sizer(i);\n if (sizes.has(i)) return sizes.get(i)!;\n\n const size = sizer(i) || 0;\n sizes.set(i, size);\n return size;\n };\n\n // Cache offset sum recursively\n const getOffset = (i: number): number => {\n if (i < 0) return 0;\n if (offsets.has(i)) return offsets.get(i)!;\n\n let j = offsets.tail() || -1;\n\n // Use a while loop to avoid stack overflow\n while (j < i) {\n const size = getSize(j);\n const offset = (offsets.get(j) || 0) + size;\n offsets.set(++j, offset);\n }\n\n return offsets.get(i)!;\n };\n\n // Boundary points\n const getStart = (i: number) => getOffset(i);\n const getEnd = (i: number) => getOffset(i + 1);\n\n // Reverse lookup from offset to index\n const lookupIndex = (x: number, anchor: number = 0) => {\n // Get end of offsets array\n let last = offsets.tail() || 0;\n\n // Extend cache if value exceeds current end\n while (getOffset(last) < x && getSize(last)) last += 64;\n\n // Do binary search for exact position\n let start = 0;\n let end = last;\n while (start < end) {\n let mid = start + Math.floor((end - start) / 2) + 1;\n let value = getOffset(mid) - (anchor ? anchor * getSize(mid - 1) : 0);\n if (value <= x) start = mid;\n else end = mid - 1;\n }\n\n return start;\n };\n\n const clearAfter = (index: number) => {\n index = Math.max(0, index);\n offsets.truncate(index);\n sizes.truncate(index);\n version++;\n };\n\n const setSizer = (s: (index: number) => number) => {\n sizer = s;\n };\n const getVersion = () => version;\n\n return { getSize, getStart, getEnd, getVersion, lookupIndex, setSizer, clearAfter };\n};\n\n// Fast map<integer, integer> that is mostly filled in from start to end.\n// Elements are only removed by truncating all indices > n.\nconst makeIntMap = (initialSize: number = 128) => {\n let used: Uint8Array;\n let values: Uint32Array;\n let last = 0;\n\n const GROW = 1.2; // 20% growth at a time\n\n const allocate = (size: number) => {\n let newUsed = new Uint8Array(size);\n let newValues = new Uint32Array(size);\n if (used) copy(used, newUsed);\n if (values) copy(values, newValues);\n used = newUsed;\n values = newValues;\n };\n allocate(initialSize);\n\n const copy = (from: Uint8Array | Uint32Array, to: Uint8Array | Uint32Array) => {\n let n = Math.min(from.length, to.length);\n for (let i = 0; i < n; ++i) {\n to[i] = from[i];\n }\n };\n\n const ensure = (size: number) => {\n const l = values.length;\n const grow = Math.round(l * GROW);\n if (l < size) allocate(Math.max(grow, size));\n };\n\n const truncate = (size: number) => {\n const l = values.length;\n\n // Do nothing if smaller\n if (l < size) return;\n\n // If more than 20% bigger, shrink to exact size\n const shrink = Math.round(size * GROW);\n if (l > shrink) allocate(size);\n // Else zero out tail\n else for (let i = size; i < l; ++i) used[i] = 0;\n\n // Track last filled element\n last = Math.min(last, size);\n while (last > 0 && !used[last]) last--;\n };\n\n const getTail = () => (used[last] ? last : null);\n\n const setValue = (i: number, value: number) => {\n ensure(i + 1);\n values[i] = value;\n used[i] = 1;\n last = Math.max(last, i);\n };\n\n const getValue = (i: number) => (used[i] ? values[i] : null);\n const hasValue = (i: number) => !!used[i];\n\n return { truncate, set: setValue, get: getValue, has: hasValue, tail: getTail };\n};\n","import {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n ImageRenderer,\n InternalSheetStyle,\n Rectangle,\n Selection,\n Style,\n CellContentType,\n VisibleLayout,\n XY,\n} from './types';\nimport { resolveCellFlexLayout, resolveCellAbsoluteLayout } from './cell';\nimport { normalizeSelection, isEmptySelection, isColumnSelection, isRowSelection } from './coordinate';\nimport { wrapText } from './text';\nimport { isInRange, isInRangeLeft, isInRangeCenter } from './util';\nimport {\n COLORS,\n SIZES,\n DEFAULT_CELL_STYLE,\n DEFAULT_COLUMN_HEADER_STYLE,\n HEADER_SELECTED_STYLE,\n HEADER_GROUP_SELECTED_STYLE,\n HEADER_ACTIVE_STYLE,\n NO_STYLE,\n ONE_ONE,\n} from './constants';\n\nexport const renderSheet = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n isFocused: boolean,\n\n knobPosition: XY | null,\n knobArea: Rectangle | null,\n dragIndices: [number[] | null, number[] | null],\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n dataOffset: XY,\n): CellContentRender[] => {\n const { canvas } = context;\n const { width, height } = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\n freezeColumns,\n freezeRows,\n shadowBlur,\n shadowColor,\n shadowOpacity,\n } = sheetStyle;\n const { columns, rows } = visibleCells;\n const { columnToPixel, rowToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const allClickables: CellContentRender[] = [];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\n\n resizeCanvas(canvas);\n context.clearRect(0, 0, width, height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, width, height);\n context.shadowColor = '#00000080';\n\n // Cell fill\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const { fillColor } = cellStyle(x, y);\n if (fillColor) {\n context.fillStyle = fillColor;\n context.fillRect(left, top, right - left, bottom - top);\n }\n }\n }\n\n const selectionActive = !isEmptySelection(selection);\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [selected, hideKnob] = resolveFrozenSelection(selection, cellLayout, freeze, dataOffset);\n\n // Selection fill\n if (selectionActive) {\n const [[left, top], [right, bottom]] = selected;\n context.fillStyle = COLORS.selectionBackground;\n context.fillRect(left, top, right - left, bottom - top);\n }\n\n if (!hideRowHeaders) {\n // Row header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, indentX, context.canvas.height);\n\n // Row header selection shadow\n if (selectionActive && !columnSelectionActive) {\n const [[, top], [, bottom]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(0, top, indentX, bottom - top);\n }\n }\n\n if (!hideColumnHeaders) {\n // Column header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, context.canvas.width, indentY);\n\n // Column header selection shadow\n if (selectionActive && !rowSelectionActive) {\n const [[left], [right]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(left, 0, right - left, indentY);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? indentX : context.canvas.width;\n const gridBottom = hideGridlines ? indentY : context.canvas.height;\n\n const drawGridLineX = (x: number, height: number) => {\n context.beginPath();\n context.moveTo(x - 0.5, 0);\n context.lineTo(x - 0.5, height);\n context.stroke();\n };\n\n const drawGridLineY = (y: number, width: number) => {\n context.beginPath();\n context.moveTo(0, y - 0.5);\n context.lineTo(width, y - 0.5);\n context.stroke();\n };\n\n drawGridLineX(indentX, context.canvas.height);\n drawGridLineY(indentY, context.canvas.width);\n\n for (const column of columns) {\n const right = columnToPixel(column, 1);\n drawGridLineX(right, gridBottom);\n }\n\n for (const row of rows) {\n const bottom = rowToPixel(row, 1);\n drawGridLineY(bottom, gridRight);\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // Row header text\n if (!hideRowHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = DEFAULT_CELL_STYLE.fontSize + 'px ' + DEFAULT_CELL_STYLE.fontFamily;\n context.fillStyle = COLORS.headerText;\n\n for (const row of rows) {\n const content = `${row + 1}`;\n\n // Row selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(row, minY, maxY);\n\n const groupKey = rowGroupKeys(row);\n const isInRowGroup = groupKey != null && selectedRowGroups?.has(groupKey);\n\n const isSelfSelected = rowSelectionActive && isActive;\n const isGroupSelected = rowSelectionActive && isInRowGroup;\n\n const style = isSelfSelected\n ? HEADER_SELECTED_STYLE\n : isGroupSelected\n ? HEADER_GROUP_SELECTED_STYLE\n : isActive\n ? HEADER_ACTIVE_STYLE\n : NO_STYLE;\n\n const resolvedStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...style };\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n const clickables = renderCell(\n context,\n imageRenderer,\n content,\n resolvedStyle,\n 0,\n top,\n indentX,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n\n for (const column of columns) {\n // Column selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(column, minX, maxX);\n\n const groupKey = columnGroupKeys(column);\n const isInColumnGroup = groupKey != null && selectedColumnGroups?.has(groupKey);\n\n const isSelected = columnSelectionActive && !rowSelectionActive && (isActive || isInColumnGroup);\n const selectedStyle = isSelected ? HEADER_SELECTED_STYLE : NO_STYLE;\n const activeStyle = isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n const style = {\n ...DEFAULT_COLUMN_HEADER_STYLE,\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n const content = columnHeaders(column, style) ?? excelHeaderString(column + 1);\n\n const clickables = renderCell(context, imageRenderer, content, style, left, 0, right - left, indentY);\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n context.globalAlpha = isFocused ? 1 : 0.5;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(left, top, right - left - 1, bottom - top - 1);\n\n context.globalAlpha = 1;\n }\n\n for (const secondarySelection of secondarySelections) {\n const selection = secondarySelection.span;\n if (isEmptySelection(selection)) continue;\n\n const [selected] = resolveFrozenSelection(selection, cellLayout, freeze, dataOffset);\n const [[left, top], [right, bottom]] = selected;\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n }\n\n // Knob drag outline\n if (knobArea) {\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(knobArea);\n const left = columnToPixel(minX);\n const top = rowToPixel(minY);\n const right = columnToPixel(maxX, 1);\n const bottom = rowToPixel(maxY, 1);\n\n context.strokeStyle = COLORS.knobAreaBorder;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n context.setLineDash([]);\n }\n\n // Selection knob\n if (knobPosition && !hideKnob) {\n const [knobX, knobY] = knobPosition;\n context.fillStyle = COLORS.selectionBorder;\n context.fillRect(knobX - SIZES.knobArea * 0.5, knobY - SIZES.knobArea * 0.5, SIZES.knobArea, SIZES.knobArea);\n }\n\n // Drag ghost (pixels)\n if (dragOffset) {\n const [shiftX, shiftY] = dragOffset;\n const [dragColumns, dragRows] = dragIndices;\n\n context.fillStyle = COLORS.dragGhost;\n\n if (dragColumns) {\n for (const column of dragColumns) {\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n context.fillRect(left + shiftX, 0, right - left, height);\n }\n }\n if (dragRows) {\n for (const row of dragRows) {\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n context.fillRect(0, top + shiftY, width, bottom - top);\n }\n }\n }\n\n // Drop target\n if (dropTarget) {\n let [[left, top], [right, bottom]] = resolveSelection(dropTarget, cellLayout);\n\n context.strokeStyle = COLORS.dropTarget;\n context.lineWidth = 4;\n\n if (isColumnSelection(dropTarget)) {\n right = left;\n }\n if (isRowSelection(dropTarget)) {\n bottom = top;\n }\n context.strokeRect(left - 1, top - 1, right - left, bottom - top);\n }\n\n // Draw frozen row/col shadow\n const [scrollX, scrollY] = dataOffset;\n const hasRowShadow = freezeRows > 0 && scrollY > 0;\n const hasColumnShadow = freezeColumns > 0 && scrollX > 0;\n if (hasRowShadow || hasColumnShadow) {\n if (hasRowShadow) {\n const h = rowToAbsolute(freezeRows);\n const gradient = context.createLinearGradient(0, h, 0, h + shadowBlur);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(0, h, width, shadowBlur);\n }\n if (hasColumnShadow) {\n const w = columnToAbsolute(freezeColumns);\n const gradient = context.createLinearGradient(w, 0, w + shadowBlur, 0);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(w, 0, shadowBlur, height);\n }\n }\n\n // Cell contents\n context.textBaseline = 'middle';\n\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const style = {\n ...DEFAULT_CELL_STYLE,\n ...cellStyle(x, y),\n };\n const cellContent = displayData(x, y, style);\n if (cellContent !== null && cellContent !== undefined) {\n const clickables = renderCell(\n context,\n imageRenderer,\n cellContent,\n style,\n left,\n top,\n right - left,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n }\n\n return allClickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellContent: CellContentType,\n style: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] | null => {\n if (cellContent === null) {\n return null;\n }\n\n const fillText = context.fillText.bind(context);\n const fontString = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n context.font = fontString;\n context.fillStyle = style.color;\n\n // Apply cell margins\n const { marginTop, marginBottom, marginLeft, marginRight, lineHeight } = style;\n\n const innerX = Math.round(xCoord + marginLeft);\n const innerY = Math.round(yCoord + marginTop);\n const innerWidth = Math.round(cellWidth - marginRight - marginLeft);\n const innerHeight = Math.round(cellHeight - marginTop - marginBottom);\n\n // Snap to device-pixels for better alignment\n const middleY = roundDpi(yCoord + marginTop + lineHeight / 2);\n\n if (style.backgroundColor !== '') {\n context.fillStyle = style.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = style.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n wrapText(context, cellContent, style, undefined, innerX, middleY, innerWidth, innerHeight, fillText);\n });\n return null;\n } else if (typeof cellContent === 'object') {\n const renderedFlex = resolveCellFlexLayout(context, cellContent, innerX, innerY, innerWidth, innerHeight);\n const renderedAbsolute = resolveCellAbsoluteLayout(cellContent, innerX, innerY, innerWidth, innerHeight);\n const rendered = [...renderedFlex, ...renderedAbsolute];\n\n clipToBox(context, innerX, innerY, innerWidth, innerHeight, () => {\n for (const render of rendered) {\n const { box, item } = render;\n\n const [[left, top], [right, bottom]] = box;\n\n const width = right - left;\n const height = bottom - top;\n\n if (cellContent.inspect) {\n context.lineWidth = 1;\n context.strokeStyle = '#ff00ff';\n context.strokeRect(left + 0.5, top + 0.5, width - 0.5, height - 0.5);\n }\n\n clipToBox(context, left, top, width, height, () => {\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n wrapText(\n context,\n text,\n style,\n item.textAlign,\n left,\n roundDpi(top + lineHeight / 2),\n width,\n height,\n fillText,\n );\n }\n }\n if (item.display === 'image' || item.display === 'icon') {\n imageRenderer(context, item, style, box);\n }\n });\n }\n });\n\n return rendered.filter(({ item }) => item?.onClick);\n }\n return null;\n};\n\nconst clipToBox = (\n context: CanvasRenderingContext2D,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n callback: () => void,\n) => {\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n callback();\n context.restore();\n};\n\n// Resolve selection into a consistent rectangle, without dealing with frozen rows/columns\nconst resolveSelection = (selection: Rectangle, cellLayout: CellLayout) => {\n const { cellToPixel } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [left, top],\n [right, bottom],\n ];\n};\n\n// Resolve selection into a consistent rectangle, handling edge cases around frozen rows/columns.\nconst resolveFrozenSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n\n freeze: XY,\n offset: XY,\n) => {\n const { cellToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n const [maxX, maxY] = max;\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Get fixed indent\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\n\n // Get frozen edge\n const frozenX = columnToAbsolute(freezeX);\n const frozenY = rowToAbsolute(freezeY);\n\n let hideKnob = false;\n\n // If the selection crosses the frozen edge, it needs to always cover the entire frozen area.\n if (isInRangeCenter(freezeX, minX, maxX + 1)) {\n const edge = frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = frozenY;\n if (bottom <= edge) {\n bottom = edge;\n hideKnob = true;\n }\n }\n\n // If the selection starts/ends under the frozen area, treat as off-screen\n if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {\n left = -1e5;\n\n const lastInvisibleX = offsetX + freezeX - 1;\n if (maxX <= lastInvisibleX) {\n if (maxX === lastInvisibleX) right = indentX;\n else right = -1e5;\n hideKnob = true;\n }\n }\n if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {\n top = -1e5;\n\n const lastInvisibleY = offsetY + freezeY - 1;\n if (maxY <= lastInvisibleY) {\n if (maxY === lastInvisibleY) bottom = indentY;\n else bottom = -1e5;\n hideKnob = true;\n }\n }\n\n if (rowSelectionActive && offsetX > 0) {\n hideKnob = true;\n }\n if (columnSelectionActive && offsetY > 0) {\n hideKnob = true;\n }\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [\n [left, top],\n [right, bottom],\n ],\n hideKnob,\n ] as [Rectangle, boolean];\n};\n\nconst resizeCanvas = (canvas: HTMLCanvasElement) => {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n }\n};\n\nconst excelHeaderString = (num: number) => {\n let s = '';\n let t = 0;\n while (num > 0) {\n t = (num - 1) % 26;\n s = String.fromCharCode(65 + t) + s;\n num = ((num - t) / 26) | 0;\n }\n return s || '';\n};\n\nconst halfShadowGradient = (gradient: CanvasGradient, rgb: string, opacity: number) => {\n const hex = (x: number) => ('0' + Math.round(x).toString(16)).slice(-2);\n // Half-sine ease\n const ease = (x: number) => 1.0 - Math.sin((x * Math.PI) / 2);\n // Gamma adjustment assuming blend on white\n const adjust = (x: number) => 1.0 - Math.pow(1.0 - x, 2.2);\n for (let i = 0; i <= 16; ++i) {\n const f = i / 16;\n gradient.addColorStop(f, rgb + hex(adjust(opacity * ease(f) * 0.5) * 255));\n }\n};\n\n// Move down half a logical pixel on high-dpi\nexport const getDpiNudge = () => {\n const { devicePixelRatio } = window;\n return (devicePixelRatio - 1) / devicePixelRatio;\n};\n\n// Round to device pixels instead of logical pixels, and nudge downwards on high-dpi for baseline alignment\nexport const roundDpi = (y: number) => {\n const { devicePixelRatio } = window;\n return Math.round((y + getDpiNudge()) * devicePixelRatio) / devicePixelRatio;\n};\n","import { InternalSheetStyle, SheetStyle } from './types';\nimport { COLORS, SIZES } from './constants';\n\nexport const resolveSheetStyle = (sheetStyle?: SheetStyle): InternalSheetStyle => {\n return {\n freezeColumns: sheetStyle?.freezeColumns || 0,\n freezeRows: sheetStyle?.freezeRows || 0,\n hideColumnHeaders: sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: sheetStyle?.hideRowHeaders || false,\n hideGridlines: sheetStyle?.hideGridlines || false,\n hideScrollBars: sheetStyle?.hideScrollBars || false,\n shadowBlur: sheetStyle?.shadowBlur ?? SIZES.shadowBlur,\n shadowOpacity: sheetStyle?.shadowOpacity ?? SIZES.shadowOpacity,\n shadowColor: sheetStyle?.shadowColor ?? COLORS.shadowColor,\n };\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellContentRender,\n CellLayout,\n CellProperty,\n CellPropertyStyled,\n CellContentType,\n ClipboardPayload,\n RowOrColumnPropertyStyled,\n RowOrColumnProperty,\n Selection,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\n DEFAULT_CELL_STYLE,\n INITIAL_MAX_SCROLL,\n NO_CELL,\n NO_CLICKABLES,\n NO_SELECTION,\n NO_SELECTIONS,\n ORIGIN,\n ONE_ONE,\n} from './constants';\nimport {\n normalizeSelection,\n validateSelection,\n isSameRectangle,\n mapSelectionColumns,\n mapSelectionRows,\n addXY,\n} from './coordinate';\nimport { useImageRenderer } from './image';\nimport { useMouse } from './mouse';\nimport { useKeyboard } from './keyboard';\nimport { useScroll, scrollToCell, clipDataOffset, updateScrollPosition } from './scroll';\nimport { useAutoSizeColumn, useAutoSizeRow } from './autosize';\nimport { useClipboardAPI } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createCellStyledProp, createRowOrColumnProp, createRowOrColumnStyledProp } from './props';\nimport { renderSheet, getDpiNudge } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string;\n autoFocus: boolean;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onChange: (value: string) => void;\n style: InputStyle;\n};\n\nexport type SheetRenderProps = {\n visibleCells: VisibleLayout;\n cellLayout: CellLayout;\n selection: Rectangle;\n editMode: boolean;\n};\n\nexport type SheetProps = {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnPropertyStyled<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n canSizeColumn?: RowOrColumnProperty<boolean>;\n canSizeRow?: RowOrColumnProperty<boolean>;\n canOrderColumn?: RowOrColumnProperty<boolean>;\n canOrderRow?: RowOrColumnProperty<boolean>;\n columnGroupKeys?: RowOrColumnProperty<string | number | null>;\n rowGroupKeys?: RowOrColumnProperty<string | number | null>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellPropertyStyled<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n selection?: Rectangle;\n secondarySelections?: Selection[];\n\n maxRows?: number;\n maxColumns?: number;\n cacheLayout?: boolean | number;\n dontCommitEditOnSelectionChange?: boolean;\n dontChangeSelectionOnOrderChange?: boolean;\n\n autoFocus?: boolean;\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: (value?: string | number | null) => void,\n ) => ReactElement | undefined;\n\n renderInside?: (props: SheetRenderProps) => React.ReactNode;\n renderOutside?: (props: SheetRenderProps) => React.ReactNode;\n\n onSelectionChanged?: (minX: number, minY: number, maxX: number, maxY: number) => void;\n onRightClick?: (e: SheetPointerEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onColumnOrderChange?: (indices: number[], order: number) => void;\n onRowOrderChange?: (indices: number[], order: number) => void;\n onCellWidthChange?: (indices: number[], values: number[]) => void;\n onCellHeightChange?: (indices: number[], values: number[]) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n\n onCopy?: (selection: Rectangle, cells: string[][]) => ClipboardPayload<any> | null | undefined;\n onPaste?: (\n selection: Rectangle,\n cells: string[][],\n payload: ClipboardPayload<any>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void;\n copySelection: (selection: Rectangle, cut?: boolean) => Promise<void>;\n pasteSelection: (selection: Rectangle) => Promise<void>;\n canPasteSelection: () => boolean;\n};\n\nconst Sheet = forwardRef<SheetRef, SheetProps>((props, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const [maxScroll, setMaxScroll] = useState<XY>(INITIAL_MAX_SCROLL);\n const [dataOffset, setDataOffset] = useState<XY>(ORIGIN);\n\n const selectionProp = props.selection ?? NO_SELECTION;\n\n const [rawSelection, setRawSelection] = useState<Rectangle>(selectionProp);\n const [knobArea, setKnobArea] = useState<Rectangle | null>(null);\n const [dragOffset, setDragOffset] = useState<XY | null>(null);\n const [dragIndices, setDragIndices] = useState<[number[] | null, number[] | null]>([null, null]);\n const [dropTarget, setDropTarget] = useState<Rectangle | null>(null);\n const [editCell, setEditCell] = useState<XY>(NO_CELL);\n\n const [focused, setFocused] = useState(!!props.autoFocus);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setRawSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | number>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: overlayRef });\n\n const cellWidth = useMemo(() => createRowOrColumnProp(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnProp(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnStyledProp(props.columnHeaders, null), [props.columnHeaders]);\n const columnHeaderStyle = useMemo(\n () => createRowOrColumnProp(props.columnHeaderStyle, {}),\n [props.columnHeaderStyle],\n );\n\n const canSizeColumn = useMemo(() => createRowOrColumnProp(props.canSizeColumn, true), [props.canSizeColumn]);\n const canSizeRow = useMemo(() => createRowOrColumnProp(props.canSizeRow, true), [props.canSizeRow]);\n const canOrderColumn = useMemo(() => createRowOrColumnProp(props.canOrderColumn, true), [props.canOrderColumn]);\n const canOrderRow = useMemo(() => createRowOrColumnProp(props.canOrderRow, true), [props.canOrderRow]);\n\n const rowGroupKeys = useMemo(() => createRowOrColumnProp(props.rowGroupKeys, null), [props.rowGroupKeys]);\n const columnGroupKeys = useMemo(() => createRowOrColumnProp(props.columnGroupKeys, null), [props.columnGroupKeys]);\n\n const cellReadOnly = useMemo(() => createCellProp(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellProp(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellStyledProp(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellProp(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellProp(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellProp(props.cellStyle, DEFAULT_CELL_STYLE), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => resolveSheetStyle(props.sheetStyle), [props.sheetStyle]);\n const secondarySelections = props.secondarySelections ?? NO_SELECTIONS;\n\n const selection = useMemo(() => validateSelection(rawSelection), [rawSelection]);\n\n const selectedColumnGroups = useMemo(\n () =>\n props.columnGroupKeys\n ? new Set(mapSelectionColumns(selection)((x: number) => columnGroupKeys(x)).filter((x) => x != null))\n : null,\n [props.columnGroupKeys, columnGroupKeys, selection],\n );\n const selectedRowGroups = useMemo(\n () =>\n props.rowGroupKeys\n ? new Set(mapSelectionRows(selection)((y: number) => rowGroupKeys(y)).filter((x) => x != null))\n : null,\n [props.rowGroupKeys, rowGroupKeys, selection],\n );\n\n const [maxScrollX, maxScrollY] = maxScroll;\n\n const [editCellX, editCellY] = editCell;\n const editMode = editCellX !== -1 && editCellY !== -1;\n\n // Global layout for unscrolled/unfrozen grid\n // Cached either per width/height pair, or permanently with invalidation on resize/reorder.\n const shouldCacheLayout = (props.cacheLayout ?? false) !== false;\n const layoutVersion = typeof props.cacheLayout === 'number' ? props.cacheLayout : 0;\n const columnLayout = useMemo(() => makeLayoutCache(cellWidth), [shouldCacheLayout ? layoutVersion : cellWidth]);\n const rowLayout = useMemo(() => makeLayoutCache(cellHeight), [shouldCacheLayout ? layoutVersion : cellHeight]);\n useMemo(() => {\n if (!shouldCacheLayout) return;\n\n columnLayout.setSizer(cellWidth);\n rowLayout.setSizer(cellHeight);\n\n // Depend on layoutVersion to allow for controlled external invalidation\n // eslint-disable-next-line\n }, [shouldCacheLayout, layoutVersion, cellWidth, cellHeight]);\n\n // Virtual layout for indented/scrolled/frozen grid\n const { freezeColumns, freezeRows } = sheetStyle;\n const cellLayout = useMemo(\n () => makeCellLayout([freezeColumns, freezeRows], dataOffset, columnLayout, rowLayout),\n [freezeColumns, freezeRows, dataOffset, columnLayout, rowLayout],\n );\n\n // Build range of visible cells\n const { getVisibleCells, cellToPixel, getVersion } = cellLayout;\n const visibleCells = useMemo(\n () => getVisibleCells([canvasWidth, canvasHeight]),\n // Need to invalidate view if cached layout version changed\n // eslint-disable-next-line\n [getVisibleCells, canvasWidth, canvasHeight, getVersion()],\n );\n\n // Notify of viewport change\n useLayoutEffect(() => {\n if (props.onScrollChange) {\n props.onScrollChange([...visibleCells.rows], [...visibleCells.columns]);\n }\n }, [visibleCells, props.onScrollChange]);\n\n const scrollToSelection = (selection: Rectangle, toHead = false) => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const [anchor, head] = selection;\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n view,\n freeze,\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n },\n );\n };\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false) => {\n if (!isSameRectangle(selection, newSelection)) {\n setRawSelection(newSelection);\n }\n\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n scrollToSelection(newSelection, toHead);\n }\n\n if (props.onSelectionChanged) {\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(validateSelection(newSelection));\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const cancelEditingCell = () => {\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n props.onChange([{ x: cellX, y: cellY, value: value !== undefined ? value : editValue }]);\n }\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const startEditingCell = (editCell: XY, arrowKeyCommitMode = false) => {\n const [cellX, cellY] = editCell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n const editDataValue = editData(cellX, cellY);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n setEditCell(editCell);\n setEditValue(val);\n setArrowKeyCommitMode(arrowKeyCommitMode);\n setLastEditKey(editKeys(...editCell));\n };\n\n // If max row or column count changes, keep sheet in view\n const { maxColumns = Infinity, maxRows = Infinity } = props;\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const newOffset = clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout);\n setDataOffset(newOffset);\n updateScrollPosition(overlay, newOffset, cellLayout);\n\n // Only fire if extents change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [maxRows, maxColumns]);\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<CellContentRender[]>(NO_CLICKABLES);\n\n // Detect focus on canvas\n const isFocused = focused || editMode;\n\n const { clipboardApi, onClipboardCopy } = useClipboardAPI(\n selection,\n editData,\n cellReadOnly,\n isFocused && !editMode,\n changeSelection,\n props.onChange,\n props.onCopy,\n props.onPaste,\n );\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const getAutoSizeWidth = useAutoSizeColumn(\n visibleCells.rows,\n displayData,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n );\n\n const getAutoSizeHeight = useAutoSizeRow(\n visibleCells.columns,\n displayData,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n );\n\n const { mouseHandlers, knobPosition } = useMouse(\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellReadOnly,\n\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n getAutoSizeWidth,\n getAutoSizeHeight,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\n setDragOffset,\n setDropTarget,\n changeSelection,\n setFocused,\n\n props.cacheLayout ? columnLayout.clearAfter : undefined,\n props.cacheLayout ? rowLayout.clearAfter : undefined,\n\n props.onChange,\n props.onColumnOrderChange,\n props.onRowOrderChange,\n props.onCellWidthChange,\n props.onCellHeightChange,\n props.onRightClick,\n props.dontCommitEditOnSelectionChange,\n props.dontChangeSelectionOnOrderChange,\n );\n\n const { onInputKeyDown, onGridKeyDown, onGridFocus, onGridBlur } = useKeyboard(\n arrowKeyCommitMode,\n overlayRef,\n cellReadOnly,\n displayData,\n editCell,\n editMode,\n focused,\n rawSelection,\n selection,\n\n startEditingCell,\n commitEditingCell,\n cancelEditingCell,\n changeSelection,\n setFocused,\n onClipboardCopy,\n\n props.onChange,\n );\n\n const imageRenderer = useImageRenderer();\n\n useLayoutEffect(() => {\n const { current: canvas } = canvasRef;\n if (!canvas) {\n return;\n }\n\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n hitmapRef.current = renderSheet(\n context,\n imageRenderer,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragIndices,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset,\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset,\n ]);\n\n const [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextAlign: 'right' | 'left' | 'center' = 'right';\n let editTextLineHeight = '';\n let editTextMargin = '';\n if (editMode) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(...editCell) };\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextAlign = style.textAlign;\n editTextLineHeight = `${style.lineHeight}px`;\n\n // Deduct border + apply high-dpi nudge to line up with render\n const yNudge = getDpiNudge();\n editTextMargin = `${style.marginTop - 1 + yNudge}px ${style.marginRight - 2}px ${style.marginBottom - 2}px ${style.marginLeft - 1}px`;\n\n const editKey = editKeys(...editCell);\n if (editKey !== lastEditKey) {\n setLastEditKey('');\n setEditCell(NO_CELL);\n }\n }\n\n const [textX, textY] = editTextPosition;\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onInputKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: editTextMargin,\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextAlign,\n lineHeight: editTextLineHeight,\n color: 'black',\n fontSize: DEFAULT_CELL_STYLE.fontSize,\n fontFamily: 'sans-serif',\n resize: 'none',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell,\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n outline: 0,\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: canvasWidth,\n height: canvasHeight,\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n }\n\n const renderedInside = useMemo(\n () => props.renderInside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderInside, visibleCells, cellLayout, selection, editMode],\n );\n\n const renderedOutside = useMemo(\n () => props.renderOutside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderOutside, visibleCells, cellLayout, selection, editMode],\n );\n\n // External component API\n useImperativeHandle(\n ref,\n () => ({\n ...cellLayout,\n ...clipboardApi,\n startEditingCell,\n }),\n [cellLayout, clipboardApi, startEditingCell],\n );\n\n return (\n <div style={{ position: 'relative', height: '100%', overflow: 'hidden' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n {...mouseHandlers}\n onKeyDown={onGridKeyDown}\n onFocus={onGridFocus}\n onBlur={onGridBlur}\n tabIndex={0}\n onScroll={onScroll}\n className={overlayDivClassName}\n style={overlayDivStyles}\n >\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: 1,\n height: maxScrollY + 2000,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: maxScrollX + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n {renderedInside ? (\n <div\n style={{\n position: 'sticky',\n left: 0,\n top: 0,\n }}\n >\n {renderedInside}\n </div>\n ) : null}\n </div>\n {renderedOutside ? (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n {renderedOutside}\n </div>\n ) : null}\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <textarea\n {...inputProps}\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n});\n\nexport default Sheet;\n"],"names":["INITIAL_MAX_SCROLL","ORIGIN","ONE_ONE","NEG_NEG","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","COLORS","selectionBorder","selectionBackground","gridLine","dragGhost","dropTarget","knobAreaBorder","headerBackground","headerText","headerActive","headerActiveText","headerSelected","headerSelectedGroup","headerSelectedText","headerSelectedGroupText","shadowColor","SIZES","knobArea","headerWidth","headerHeight","minimumWidth","minimumHeight","resizeZone","scrollZone","scrollSpeed","shadowBlur","shadowOpacity","DEFAULT_CELL_STYLE","textAlign","fontSize","lineHeight","marginTop","marginBottom","marginLeft","marginRight","color","fontFamily","fontWeight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","HEADER_GROUP_SELECTED_STYLE","ARROW_KEYS","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","seq","n","s","d","Array","from","length","map","_","i","isInRange","x","min","max","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","Math","minXY","getDirectionStep","direction","isSameXY","isSameRectangle","a1","a2","b1","b2","isPointInsideRectangle","rectangle","point","_rectangle$","left","top","_rectangle$2","right","bottom","y","forRange","callback","forSelectionColumns","selection","_normalizeSelection","normalizeSelection","_normalizeSelection$","_normalizeSelection$2","forSelectionRows","_normalizeSelection2","_normalizeSelection2$","_normalizeSelection2$2","forToMap","forLoop","out","push","apply","arguments","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","_selection$","_selection$2","isMaybeColumnSelection","_selection$3","_selection$4","isRowSelection","_selection$5","_selection$6","isColumnSelection","_selection$7","_selection$8","isCellSelection","_selection$9","_selection$10","isEmptySelection","_selection$11","_selection$12","isPointInsideSelection","_normalizeSelection3","_normalizeSelection3$","_normalizeSelection3$2","validateSelection","anchor","head","slice","orientSelection","normalized","to","_normalized$","_normalized$2","ax","ay","hx","hy","swapX","swapY","DEFAULT_ICON_SIZE","svgToImage","icon","image","Image","iconAsString","renderToString","base64String","window","btoa","src","err","console","log","useImageRenderer","_useState","useState","setVersion","_useState2","canvasWidth","setCanvasWidth","_useState3","canvasHeight","setCanvasHeight","imageMap","useMemo","Map","loadImage","useCallback","get","set","dpi","devicePixelRatio","iconContext","canvas","document","createElement","width","height","context","getContext","willReadFrequently","renderContext","item","style","box","display","complete","onload","v","w","h","_box$","_box$2","drawImage","_item$color","rgba","toRGBA","_rgba$","r","_rgba$2","g","_rgba$3","_rgba$4","wDpi","hDpi","clearRect","imageData","getImageData","data","putImageData","e","error","LIMIT","scanGroup","keys","index","matchKeys","limit","key","has","expandSelectionToRowOrColumnGroups","groupKeys","coordinate","first","second","start","end","startIndex","endIndex","expanded","oriented","isBoundaryInsideGroup","before","after","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","createRowOrColumnStyledProp","createCellStyledProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","floor","xx","findInDisplayData","displayData","step","cell","_addXY","firstFilled","_cell","cellX","cellY","maxX","maxY","_cell2","useMouse","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","getAutoSizeHeight","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onFocusChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","_useState4","rowDrag","setRowDrag","_useState5","hitTestDown","setHitTestDown","_useState6","draggingKnob","setDraggingKnob","_useState7","draggingSelection","setDraggingSelection","_useState8","draggingRowSelection","setDraggingRowSelection","_useState9","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","refState","ref","useRef","current","getMousePosition","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","clientWidth","clientHeight","getScrollPosition","_e$target","scrollLeft","scrollTop","getMouseHit","hitmap","_iterator","_createForOfIteratorHelperLoose","_step","done","object","value","onPointerLeave","body","cursor","onPointerDown","_ref$current","_ref$current$cellLayo","columnToPixel","rowToPixel","pixelToCell","getIndentX","getIndentY","_ref$current$visibleC","columns","rows","button","_e$target2","_e$target2$setPointer","setPointerCapture","call","pointerId","hitTarget","minX","minY","selectedColumns","selectedRows","_iterator2","_step2","indices","Set","concat","filter","values","sort","dragIndices","clickSelection","_expandSelectionToRow","_expandSelectionToRow2","_expandSelectionToRow3","connected","dragStart","dragEnd","size","_getScrollPosition","scroll","_i","_arr","edge","abs","asGroup","_getScrollPosition2","_iterator3","_step3","_expandSelectionToRow4","_expandSelectionToRow5","_expandSelectionToRow6","_getScrollPosition3","_i2","_arr2","_getScrollPosition4","knobX","knobY","shiftKey","scrollTo","onPointerUp","_ref$current2","_ref$current2$cellLay","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","onPointerMove","_ref$current3","_ref$current3$cellLay","preventDefault","isDragging","_iterator4","_step4","_i3","_arr3","_iterator5","_step5","_i4","_arr4","_getScrollPosition5","currentScroll","newWidth","round","_getScrollPosition6","newHeight","anchorX","anchorY","headX","headY","_pixelToCell","_normalizeSelection4","_normalizeSelection4$","_normalizeSelection4$2","xCellDiff","yCellDiff","shift","_getScrollPosition7","_getScrollPosition8","onClick","mouseHit","_mouseHit$item","_mouseHit$item$onClic","onDoubleClick","_ref$current4","_ref$current4$cellLay","indentY","autosized","_iterator6","_step6","_normalizeSelection5","_normalizeSelection5$","_normalizeSelection5$2","_i5","_autosized","column","indentX","_i6","_arr5","_normalizeSelection6","_normalizeSelection6$","_normalizeSelection6$2","_i7","_autosized3","row","editCell","onContextMenu","_ref$current$cellLayo2","event","_extends","mouseHandlers","_normalizeSelection7","_normalizeSelection7$","kx1","ky1","_normalizeSelection7$2","kx2","ky2","_normalizeSelection8","_normalizeSelection8$","sx1","sy1","_normalizeSelection8$2","sx2","sy2","fx1","fy1","fx2","fy2","_findApproxMaxEditDat","srcY","source","_findApproxMaxEditDat2","srcX","useKeyboard","arrowKeyCommitMode","overlayRef","focused","rawSelection","onCancel","onClipboardCopy","onInputKeyDown","onGridKeyDown","metaKey","ctrlKey","String","fromCharCode","which","toLowerCase","x1","y1","x2","y2","keyCode","onGridFocus","onGridBlur","useLayoutEffect","overlay","activeElement","activeTagName","tagName","contentEditable","focus","preventScroll","useScroll","offset","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","cellToAbsolute","_subXY","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","clipDataOffset","view","freeze","maxCells","newX","newY","freezeX","freezeY","maxColumns","maxRows","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","_getViewExtent","getViewExtent","_getViewExtent$edge","leftEdge","topEdge","_getViewExtent$viewpo","viewport","scrollW","scrollH","remainder","_cellToAbsolute","frozenX","frozenY","scrollToCell","element","offsetX","offsetY","origin","frozen","_cellToPixel","_cellToPixel2","newOffset","setTimeout","updateScrollPosition","dataOffset","_subXY2","scrollX","scrollY","getInlineAlignment","cellWidth","contentWidth","align","measureFlexWidth","text","_context$measureText","measureText","toString","actualBoundingBoxLeft","actualBoundingBoxRight","Error","resolveCellFlexLayout","cellContent","cellLeft","cellTop","cellHeight","_cellContent$flexJust","flexJustify","_cellContent$flexAlig","flexAlign","_cellContent$flexGap","flexGap","items","flexItems","absolute","measuredWidths","sizes","grows","shrinks","forEach","defaultGrow","defaultShrink","_item$width","_item$flexGrow","flexGrow","_item$flexShrink","flexShrink","_item$marginLeft","_item$marginRight","slackX","growRow","shrinkRow","_getAlignmentSpacing","getAlignmentSpacing","gapX","leadX","combinedGapX","maxHeight","_ref","_ref$marginTop","_ref$marginBottom","reduce","slackY","getAlignmentAnchor","leftCursor","fixedHeight","_item$marginLeft2","_item$marginRight2","_item$marginTop","_item$marginBottom","_item$flexAlignSelf","flexAlignSelf","marginX","marginY","slackSelfY","offsetSelfY","boxW","boxH","resolveCellAbsoluteLayout","absoluteItems","resolvePosition","container","marginStart","marginEnd","resolveSize","span","l","t","slack","grow","weight","shrink","negative","isStart","isEnd","justify","gap","lead","isJustify","isBetween","isEvenly","wrapText","itemAlign","xCoord","yCoord","emit","xCursor","yCursor","wordsPerLine","startOfLine","newline","endOfLine","ellipsis","endsInSpace","line","breaker","LineBreak","lastPosition","bk","nextBreak","_bk","position","required","word","canNewLine","hasMoreText","ellipsisSpace","nextX","_context$measureText2","useAutoSizeColumn","cellStyle","columnHeaders","columnHeaderStyle","getWidth","font","inlineMargin","totalWidth","maxWidth","headerStyle","headerContent","ceil","useAutoSizeRow","measureTextHeight","columnWidth","measureY","_t","_x","getHeight","verticalMargin","isHeader","EMPTY_TABLE","useClipboardTable","peek","setPeek","softRefresh","Promise","resolve","navigator","permissions","query","name","then","status","state","hardRefresh","clipboard","read","_temp","parseClipboardTable","_temp2","reject","delayedRefresh","addEventListener","removeEventListener","canPaste","_peek$rows","copyTable","copyClipboardTable","pasteTable","pasteClipboardTable","useClipboardAPI","addListener","onCopy","onPaste","_useClipboardTable","pasteIntoSelection","table","payload","newSelection","shouldPaste","flatMap","j","change","copySelection","cut","formatSelectionAsRows","_payload$cut","pasteSelection","onClipboardPaste","clipboardData","clipboardApi","canPasteSelection","formatRowsAsTSV","html","formatRowsAsHTML","write","ClipboardItem","Blob","type","Event","dispatchEvent","types","includes","getData","getType","blob","_temp4","pastedHtml","_parsePastedHtml","parsePastedHtml","_temp6","parsePastedText","_temp5","join","trs","tds","formatTextAsHTML","extra","JSON","stringify","replace","charCodeAt","findTag","children","child","nodeName","maybeTag","div","innerHTML","trim","sheetNode","json","getAttribute","parse","tableNode","tableChild","tr","td","str","p","textContent","replaceAll","split","INITIAL_SIZE","makeCellLayout","getStart","getBaseOriginFor","base","relative","adjust","getSize","_anchor","_anchor2","pixelToIndex","pixel","layout","lookupIndex","indent","pixelX","pixelY","_anchor3","absoluteToIndex","_anchor4","getVisibleIndices","getEnd","notFrozen","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","getOffset","tail","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","getTail","setValue","getValue","hasValue","renderSheet","imageRenderer","secondarySelections","isFocused","dragOffset","hideGridlines","freezeColumns","freezeRows","allClickables","resizeCanvas","fillStyle","fillRect","_iterator10","_step10","_cellStyle","selectionActive","rowSelectionActive","columnSelectionActive","_resolveFrozenSelecti","resolveFrozenSelection","selected","hideKnob","_selected$","_selected$2","_selected$3","_selected$4","_selected$5","_selected$6","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","content","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","resolvedStyle","clickables","renderCell","_columnHeaders","isInColumnGroup","isSelected","selectedStyle","activeStyle","excelHeaderString","globalAlpha","_selected$7","_selected$8","strokeRect","secondarySelection","_resolveFrozenSelecti2","_selected$9","_selected$10","setLineDash","shiftX","shiftY","dragColumns","dragRows","_iterator7","_step7","_iterator8","_step8","_resolveSelection","resolveSelection","_resolveSelection$","_resolveSelection$2","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","_iterator9","_step9","_iterator11","_step11","fillText","bind","fontString","innerX","innerY","innerWidth","innerHeight","middleY","roundDpi","clipToBox","renderedFlex","renderedAbsolute","rendered","render","_step12","inspect","_iterator12","_loop","save","clip","restore","_cellToPixel3","_cellToPixel4","lastInvisibleX","lastInvisibleY","_canvas$getBoundingCl","_window","_window$devicePixelRa","ratio","newCanvasWidth","newCanvasHeight","scale","num","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","getDpiNudge","_window2","_window3","resolveSheetStyle","hideScrollBars","_sheetStyle$shadowBlu","_sheetStyle$shadowOpa","_sheetStyle$shadowCol","Sheet","forwardRef","props","canvasRef","setMaxScroll","setDataOffset","selectionProp","_props$selection","setRawSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","autoFocus","setFocused","_useState10","lastSelectionProp","setLastSelectionProp","_useState11","editValue","setEditValue","_useState12","setArrowKeyCommitMode","_useResizeObserver","useResizeObserver","_useResizeObserver$wi","_useResizeObserver$he","readOnly","editKeys","_props$secondarySelec","editCellX","editCellY","shouldCacheLayout","_props$cacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","changeSelection","onSelectionChanged","cancelEditingCell","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","_props$maxColumns","Infinity","_props$maxRows","_useClipboardAPI","onScroll","_useMouse","_useKeyboard","animationFrameId","requestAnimationFrame","cancelAnimationFrame","_useState13","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextAlign","editTextLineHeight","editTextMargin","yNudge","editKey","_editTextPosition","textX","textY","inputProps","onKeyDown","padding","outline","border","resize","input","_props$inputComponent","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","_props$renderInside","renderInside","renderedOutside","_props$renderOutside","renderOutside","useImperativeHandle","React","onFocus","onBlur","tabIndex","className","pointerEvents","select"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAMA,kBAAkB,GAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAElD,AAAO,IAAMC,MAAM,GAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAChC,AAAO,IAAMC,OAAO,GAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,AAAO,IAAMC,OAAO,GAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnC,AAAO,IAAMC,OAAO,GAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,AAAO,IAAMC,YAAY,GAAc,CAACD,OAAO,EAAEA,OAAO,CAAC;AACzD,AAAO,IAAME,aAAa,GAAgB,EAAE;AAC5C,AAAO,IAAMC,aAAa,GAAwB,EAAE;AACpD,AAAO,IAAMC,QAAQ,GAAG,EAAE;AAE1B,AAAO,IAAMC,oBAAoB,GAAG,MAAM;AAE1C,AAAO,IAAMC,MAAM,GAAG;EAClBC,eAAe,EAAE,SAAS;EAC1BC,mBAAmB,EAAE,WAAW;EAEhCC,QAAQ,EAAE,WAAW;EAErBC,SAAS,EAAE,WAAW;EACtBC,UAAU,EAAE,SAAS;EACrBC,cAAc,EAAE,SAAS;EAEzBC,gBAAgB,EAAE,SAAS;EAC3BC,UAAU,EAAE,SAAS;EACrBC,YAAY,EAAE,SAAS;EACvBC,gBAAgB,EAAE,SAAS;EAE3BC,cAAc,EAAE,SAAS;EACzBC,mBAAmB,EAAE,WAAW;EAChCC,kBAAkB,EAAE,SAAS;EAC7BC,uBAAuB,EAAE,SAAS;EAElCC,WAAW,EAAE;CAChB;AAED,AAAO,IAAMC,KAAK,GAAG;EACjBC,QAAQ,EAAE,CAAC;EACXC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,EAAE;EAChBC,YAAY,EAAE,EAAE;EAChBC,aAAa,EAAE,EAAE;EACjBC,UAAU,EAAE,CAAC;EACbC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EAEfC,UAAU,EAAE,EAAE;EACdC,aAAa,EAAE;CAClB;AAED,AAAO,IAAMC,kBAAkB,GAAoB;EAC/CC,SAAS,EAAE,MAAM;EACjBC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,CAAC;EACZC,YAAY,EAAE,CAAC;EACfC,UAAU,EAAE,CAAC;EACbC,WAAW,EAAE,CAAC;EACdC,KAAK,EAAE,MAAM;EACbC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,EAAE;EACbC,eAAe,EAAE;CACpB;AAED,AAAO,IAAMC,2BAA2B,GAAoB;EACxDZ,SAAS,EAAE,QAAQ;EACnBC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,CAAC;EACZC,YAAY,EAAE,CAAC;EACfE,WAAW,EAAE,CAAC;EACdD,UAAU,EAAE,CAAC;EACbE,KAAK,EAAE,MAAM;EACbC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,EAAE;EACbC,eAAe,EAAE;CACpB;AAED,AAAO,IAAME,mBAAmB,GAAG;EAC/BN,KAAK,EAAEnC,MAAM,CAACU;CACjB;AAED,AAAO,IAAMgC,qBAAqB,GAAG;EACjCH,eAAe,EAAEvC,MAAM,CAACW,cAAc;EACtCwB,KAAK,EAAEnC,MAAM,CAACa;CACjB;AAED,AAAO,IAAM8B,2BAA2B,GAAG;EACvCJ,eAAe,EAAEvC,MAAM,CAACY,mBAAmB;EAC3CuB,KAAK,EAAEnC,MAAM,CAACc;CACjB;AAED,AAAO,IAAM8B,UAAU,GAA8B;EACjDC,UAAU,EAAE,OAAO;EACnBC,SAAS,EAAE,MAAM;EACjBC,OAAO,EAAE,IAAI;EACbC,SAAS,EAAE;CACd;;AClGM,IAAMC,GAAG,GAAG,SAANA,GAAGA,CAAIC,CAAS,EAAEC,GAAeC;MAAfD;IAAAA,IAAY,CAAC;;EAAA,IAAEC;IAAAA,IAAY,CAAC;;EAAA,OACvDC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAEL;GAAG,CAAC,CAACM,GAAG,CAAC,UAACC,CAAC,EAAEC,CAAS;IAAA,OAAKP,CAAC,GAAGC,CAAC,GAAGM,CAAC;IAAC;AAAA;AAE9D,AAAO,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAIC,CAAS,EAAEC,GAAW,EAAEC,GAAW;EAAA,OAAKD,GAAG,IAAID,CAAC,IAAIA,CAAC,IAAIE,GAAG;AAAA;AACtF,AAAO,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIH,CAAS,EAAEC,GAAW,EAAEC,GAAW;EAAA,OAAKD,GAAG,IAAID,CAAC,IAAIA,CAAC,GAAGE,GAAG;AAAA;AACzF,AACO,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAAIJ,CAAS,EAAEC,GAAW,EAAEC,GAAW;EAAA,OAAKD,GAAG,GAAGD,CAAC,IAAIA,CAAC,GAAGE,GAAG;AAAA;;ACPnF,IAAMG,KAAK,GAAG,SAARA,KAAKA,CAAIC,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAAED,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACrE,AAAO,IAAMC,KAAK,GAAG,SAARA,KAAKA,CAAIF,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAAED,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACrE,AAAO,IAAME,KAAK,GAAG,SAARA,KAAKA,CAAIH,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAAED,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACrE,AAAO,IAAMG,KAAK,GAAG,SAARA,KAAKA,CAAIJ,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACI,IAAI,CAACT,GAAG,CAACI,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEI,IAAI,CAACT,GAAG,CAACI,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACvF,AAAO,IAAMK,KAAK,GAAG,SAARA,KAAKA,CAAIN,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACI,IAAI,CAACV,GAAG,CAACK,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEI,IAAI,CAACV,GAAG,CAACK,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACvF,AAKO,IAAMM,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,SAAiB;EAC9C,IAAIA,SAAS,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EACxC,IAAIA,SAAS,KAAK,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;EACxC,IAAIA,SAAS,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACtC,IAAIA,SAAS,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;EACvC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,AAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAIT,CAAK,EAAEC,CAAK;EAAA,OAAKD,CAAC,CAAC,CAAC,CAAC,KAAKC,CAAC,CAAC,CAAC,CAAC,IAAID,CAAC,CAAC,CAAC,CAAC,KAAKC,CAAC,CAAC,CAAC,CAAC;AAAA;AAExE,AAAO,IAAMS,eAAe,GAAG,SAAlBA,eAAeA,CAAIV,CAAY,EAAEC,CAAY;EACtD,IAAOU,EAAE,GAAQX,CAAC;IAAPY,EAAE,GAAIZ,CAAC;EAClB,IAAOa,EAAE,GAAQZ,CAAC;IAAPa,EAAE,GAAIb,CAAC;EAClB,OAAOQ,QAAQ,CAACE,EAAE,EAAEE,EAAE,CAAC,IAAIJ,QAAQ,CAACG,EAAE,EAAEE,EAAE,CAAC;AAC/C,CAAC;AAED,AAAO,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIC,SAAoB,EAAEC,KAAS;EAClE,IAAAC,WAAA,GAAuCF,SAAS;IAAxCG,IAAI,GAAAD,WAAA;IAAEE,GAAG,GAAAF,WAAA;IAAAG,YAAA,GAAsBL,SAAS;IAA3BM,KAAK,GAAAD,YAAA;IAAEE,MAAM,GAAAF,YAAA;EAClC,IAAO3B,CAAC,GAAOuB,KAAK;IAAVO,CAAC,GAAIP,KAAK;EACpB,OAAOvB,CAAC,IAAIyB,IAAI,IAAIzB,CAAC,GAAG4B,KAAK,IAAIE,CAAC,IAAIJ,GAAG,IAAII,CAAC,GAAGD,MAAM;AAC3D,CAAC;AAED,AAAO,IAAME,QAAQ,GAAG,SAAXA,QAAQA,CAAI9B,GAAW,EAAEC,GAAW,EAAE8B,QAA6B;EAC5E,KAAK,IAAIlC,CAAC,GAAGG,GAAG,EAAEH,CAAC,IAAII,GAAG,EAAE,EAAEJ,CAAC,EAAEkC,QAAQ,CAAClC,CAAC,CAAC;AAChD,CAAC;AAED,AAAO,IAAMmC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIC,SAAoB;EAAA,OAAK,UAACF,QAA6B;IACvF,IAAAG,mBAAA,GAA0BC,kBAAkB,CAACF,SAAS,CAAC;MAAAG,oBAAA,GAAAF,mBAAA;MAA/CV,IAAI,GAAAY,oBAAA;MAAAC,qBAAA,GAAAH,mBAAA;MAAIP,KAAK,GAAAU,qBAAA;IACrBP,QAAQ,CAACN,IAAI,EAAEG,KAAK,EAAEI,QAAQ,CAAC;GAClC;AAAA;AAED,AAAO,IAAMO,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIL,SAAoB;EAAA,OAAK,UAACF,QAA6B;IACpF,IAAAQ,oBAAA,GAA8BJ,kBAAkB,CAACF,SAAS,CAAC;MAAAO,qBAAA,GAAAD,oBAAA;MAAjDd,GAAG,GAAAe,qBAAA;MAAAC,sBAAA,GAAAF,oBAAA;MAAMX,MAAM,GAAAa,sBAAA;IACzBX,QAAQ,CAACL,GAAG,EAAEG,MAAM,EAAEG,QAAQ,CAAC;GAClC;AAAA;AAED,IAAMW,QAAQ,GACV,SADEA,QAAQA,CACaC,OAAiD;EAAA,OACxE,UAAIhD,GAAsB;IACtB,IAAMiD,GAAG,GAAQ,EAAE;IACnBD,OAAO,CAAC;MAAA,OAAgBC,GAAG,CAACC,IAAI,CAAClD,GAAG,CAAAmD,KAAA,SAAAC,SAAQ,CAAC,CAAC;MAAC;IAC/C,OAAOH,GAAG;GACb;AAAA;AAEL,AAAO,IAAMI,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIf,SAAoB;EAAA,OAAKS,QAAQ,CAACV,mBAAmB,CAACC,SAAS,CAAC,CAAC;AAAA;AACrG,AAAO,IAAMgB,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIhB,SAAoB;EAAA,OAAKS,QAAQ,CAACJ,gBAAgB,CAACL,SAAS,CAAC,CAAC;AAAA;AAG/F,AAAO,IAAMiB,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIjB,SAAoB;EACpD,IAAAkB,WAAA,GAA0BlB,SAAS;IAA3BT,IAAI,GAAA2B,WAAA;IAAAC,YAAA,GAAcnB,SAAS;IAAnBN,KAAK,GAAAyB,YAAA;EACrB,OAAO5B,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC;AACtC,CAAC;AAGD,AAAO,IAAM0B,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIpB,SAAoB;EACvD,IAAAqB,YAAA,GAA8BrB,SAAS;IAA7BR,GAAG,GAAA6B,YAAA;IAAAC,YAAA,GAAiBtB,SAAS;IAApBL,MAAM,GAAA2B,YAAA;EACzB,OAAO9B,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACtC,CAAC;AAGD,AAAO,IAAM4B,cAAc,GAAG,SAAjBA,cAAcA,CAAIvB,SAAoB;EAC/C,IAAAwB,YAAA,GAAuCxB,SAAS;IAAxCT,IAAI,GAAAiC,YAAA;IAAEhC,GAAG,GAAAgC,YAAA;IAAAC,YAAA,GAAsBzB,SAAS;IAA3BN,KAAK,GAAA+B,YAAA;IAAE9B,MAAM,GAAA8B,YAAA;EAClC,OAAOlC,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC,IAAIF,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAM+B,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAI1B,SAAoB;EAClD,IAAA2B,YAAA,GAAuC3B,SAAS;IAAxCT,IAAI,GAAAoC,YAAA;IAAEnC,GAAG,GAAAmC,YAAA;IAAAC,YAAA,GAAsB5B,SAAS;IAA3BN,KAAK,GAAAkC,YAAA;IAAEjC,MAAM,GAAAiC,YAAA;EAClC,OAAOpC,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC,IAAIJ,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAMmC,eAAe,GAAG,SAAlBA,eAAeA,CAAI7B,SAAoB;EAChD,IAAA8B,YAAA,GAAuC9B,SAAS;IAAxCT,IAAI,GAAAuC,YAAA;IAAEtC,GAAG,GAAAsC,YAAA;IAAAC,aAAA,GAAsB/B,SAAS;IAA3BN,KAAK,GAAAqC,aAAA;IAAEpC,MAAM,GAAAoC,aAAA;EAClC,OAAOxC,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC,IAAIF,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAMqC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIhC,SAAoB;EACjD,IAAAiC,aAAA,GAAuCjC,SAAS;IAAxCT,IAAI,GAAA0C,aAAA;IAAEzC,GAAG,GAAAyC,aAAA;IAAAC,aAAA,GAAsBlC,SAAS;IAA3BN,KAAK,GAAAwC,aAAA;IAAEvC,MAAM,GAAAuC,aAAA;EAClC,OAAO3C,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC,IAAIF,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAMwC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAInC,SAAoB,EAAEX,KAAS;EAClE,IAAA+C,oBAAA,GAAuClC,kBAAkB,CAACF,SAAS,CAAC;IAAAqC,qBAAA,GAAAD,oBAAA;IAA5D7C,IAAI,GAAA8C,qBAAA;IAAE7C,GAAG,GAAA6C,qBAAA;IAAAC,sBAAA,GAAAF,oBAAA;IAAI1C,KAAK,GAAA4C,sBAAA;IAAE3C,MAAM,GAAA2C,sBAAA;EAClC,IAAOxE,CAAC,GAAOuB,KAAK;IAAVO,CAAC,GAAIP,KAAK;EACpB,OAAOvB,CAAC,IAAIyB,IAAI,IAAIzB,CAAC,IAAI4B,KAAK,IAAIE,CAAC,IAAIJ,GAAG,IAAII,CAAC,IAAID,MAAM;AAC7D,CAAC;AAGD,AAAO,IAAM4C,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIvC,SAAoB;EAClD,IAAKwC,MAAM,GAAUxC,SAAS;IAAjByC,IAAI,GAAIzC,SAAS;EAC9BwC,MAAM,GAAGA,MAAM,CAACE,KAAK,EAAQ;EAC7BD,IAAI,GAAGA,IAAI,CAACC,KAAK,EAAQ;EAEzB,IAAM3E,GAAG,GAAGW,KAAK,CAAC8D,MAAM,EAAEC,IAAI,CAAC;EAC/B,IAAI1E,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAEyE,MAAM,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC3C,IAAI1E,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAEyE,MAAM,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAE3C,OAAO,CAACD,MAAM,EAAEC,IAAI,CAAC;AACzB,CAAC;AAGD,AAAO,IAAMvC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIF,SAAoB;EACnD,IAAOwC,MAAM,GAAUxC,SAAS;IAAjByC,IAAI,GAAIzC,SAAS;EAChC,OAAO,CAACtB,KAAK,CAAC8D,MAAM,EAAEC,IAAI,CAAC,EAAEjE,KAAK,CAACgE,MAAM,EAAEC,IAAI,CAAC,CAAC;AACrD,CAAC;AAGD,AAAO,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,UAAqB,EAAEC,EAAa;EAChE,IAAAC,YAAA,GAAuCF,UAAU;IAAzCrD,IAAI,GAAAuD,YAAA;IAAEtD,GAAG,GAAAsD,YAAA;IAAAC,aAAA,GAAsBH,UAAU;IAA5BlD,KAAK,GAAAqD,aAAA;IAAEpD,MAAM,GAAAoD,aAAA;EAElC,IAAOP,MAAM,GAAUK,EAAE;IAAVJ,IAAI,GAAII,EAAE;EACzB,IAAOG,EAAE,GAAQR,MAAM;IAAZS,EAAE,GAAIT,MAAM;EACvB,IAAOU,EAAE,GAAQT,IAAI;IAAVU,EAAE,GAAIV,IAAI;EAErB,IAAMW,KAAK,GAAG,CAACJ,EAAE,GAAGE,EAAE,IAAI,CAAC,KAAKxD,KAAK,GAAGH,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;EACtD,IAAM8D,KAAK,GAAG,CAACJ,EAAE,GAAGE,EAAE,IAAI,CAAC,KAAKxD,MAAM,GAAGH,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;EAEtD,OAAO,CACH,CAAC4D,KAAK,GAAG1D,KAAK,GAAGH,IAAI,EAAE8D,KAAK,GAAG1D,MAAM,GAAGH,GAAG,CAAC,EAC5C,CAAC4D,KAAK,GAAG7D,IAAI,GAAGG,KAAK,EAAE2D,KAAK,GAAG7D,GAAG,GAAGG,MAAM,CAAC,CAC/C;AACL,CAAC;;ACpID,IAAM2D,iBAAiB,GAAG,EAAE;AAE5B,IAAaC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,IAA2B;EAClD,IAAMC,KAAK,GAAG,IAAIC,KAAK,EAAE;EACzB,IAAI;IACA,IAAMC,YAAY,GAAG,OAAOH,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGI,cAAc,CAACJ,IAAI,CAAC;IAC3E,IAAMK,YAAY,GAAGC,MAAM,CAACC,IAAI,CAACJ,YAAY,CAAC;IAC9CF,KAAK,CAACO,GAAG,kCAAgCH,YAAc;GAC1D,CAAC,OAAOI,GAAG,EAAE;IACVC,OAAO,CAACC,GAAG,CAACF,GAAG,CAAC;;EAEpB,OAAOR,KAAK;AAChB,CAAC;AAED,AAAO,IAAMW,gBAAgB,GAAG,SAAnBA,gBAAgBA;EACzB,IAAAC,SAAA,GAAuBC,QAAQ,CAAC,CAAC,CAAC;IAAzBC,UAAU,GAAAF,SAAA;EAEnB,IAAAG,UAAA,GAAsCF,QAAQ,CAAChB,iBAAiB,CAAC;IAA1DmB,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAClC,IAAAG,UAAA,GAAwCL,QAAQ,CAAChB,iBAAiB,CAAC;IAA5DsB,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EAEpC,IAAMG,QAAQ,GAAGC,OAAO,CAAC;IAAA,OAAM,IAAIC,GAAG,EAA4B;KAAE,EAAE,CAAC;EACvE,IAAMC,SAAS,GAAGC,WAAW,CACzB,UAAClB,GAAW;IACR,IAAIP,KAAK,GAAGqB,QAAQ,CAACK,GAAG,CAACnB,GAAG,CAAC;IAC7B,IAAIP,KAAK,EAAE,OAAOA,KAAK;IAEvBA,KAAK,GAAG,IAAIC,KAAK,EAAE;IACnBD,KAAK,CAACO,GAAG,GAAGA,GAAG;IACfc,QAAQ,CAACM,GAAG,CAACpB,GAAG,EAAEP,KAAM,CAAC;IACzB,OAAOA,KAAM;GAChB,EACD,CAACqB,QAAQ,CAAC,CACb;EAED,IAAMO,GAAG,GAAGvB,MAAM,CAACwB,gBAAgB;EACnC,IAAMC,WAAW,GAAGR,OAAO,CAAC;IACxB,IAAMS,MAAM,GAAGC,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;IAC/CF,MAAM,CAACG,KAAK,GAAGlB,WAAW,GAAGY,GAAG;IAChCG,MAAM,CAACI,MAAM,GAAGhB,YAAY,GAAGS,GAAG;IAElC,IAAMQ,OAAO,GAAGL,MAAM,CAACM,UAAU,CAAC,IAAI,EAAE;MAAEC,kBAAkB,EAAE;KAAM,CAAoC;IACxG,OAAOF,OAAO;GACjB,EAAE,CAACpB,WAAW,EAAEG,YAAY,EAAES,GAAG,CAAC,CAAC;EAEpC,OAAO,UACHW,aAAuC,EACvCC,IAAqD,EACrDC,KAAsB,EACtBC,GAAc;IAEd,IAAI,CAACZ,WAAW,EAAE;IAElB,IAAQa,OAAO,GAAKH,IAAI,CAAhBG,OAAO;IAEf,IAAM3C,KAAK,GAAG,OAAO,IAAIwC,IAAI,GAAGA,IAAI,CAACxC,KAAK,GAAG,KAAK,IAAIwC,IAAI,GAAGhB,SAAS,CAACgB,IAAI,CAACjC,GAAG,CAAC,GAAG,IAAI;IACvF,IAAI,CAACP,KAAK,EAAE;IAEZ,IAAI,CAACA,KAAK,CAAC4C,QAAQ,EAAE;MACjB,IAAI,CAAC5C,KAAK,CAAC6C,MAAM,EAAE;QACf7C,KAAK,CAAC6C,MAAM,GAAG;UACX/B,UAAU,CAAC,UAACgC,CAAC;YAAA,OAAKA,CAAC,GAAG,CAAC;YAAC;UACxB7B,cAAc,CAAC,UAAC8B,CAAC;YAAA,OAAK/H,IAAI,CAACT,GAAG,CAACwI,CAAC,EAAE/C,KAAK,CAACkC,KAAK,CAAC;YAAC;UAC/Cd,eAAe,CAAC,UAAC4B,CAAC;YAAA,OAAKhI,IAAI,CAACT,GAAG,CAACyI,CAAC,EAAEhD,KAAK,CAACmC,MAAM,CAAC;YAAC;SACpD;;MAEL;KACH,MAAM;MACH,IAAInB,WAAW,GAAGhB,KAAK,CAACkC,KAAK,EAAEjB,cAAc,CAAC,UAAC8B,CAAC;QAAA,OAAK/H,IAAI,CAACT,GAAG,CAACwI,CAAC,EAAE/C,KAAK,CAACkC,KAAK,CAAC;QAAC;MAC9E,IAAIf,YAAY,GAAGnB,KAAK,CAACmC,MAAM,EAAEf,eAAe,CAAC,UAAC4B,CAAC;QAAA,OAAKhI,IAAI,CAACT,GAAG,CAACyI,CAAC,EAAEhD,KAAK,CAACmC,MAAM,CAAC;QAAC;;IAGtF,IAAAc,KAAA,GAAuCP,GAAG;MAAlC5G,IAAI,GAAAmH,KAAA;MAAElH,GAAG,GAAAkH,KAAA;MAAAC,MAAA,GAAsBR,GAAG;MAArBzG,KAAK,GAAAiH,MAAA;MAAEhH,MAAM,GAAAgH,MAAA;IAClC,IAAMhB,KAAK,GAAGjG,KAAK,GAAGH,IAAI;IAC1B,IAAMqG,MAAM,GAAGjG,MAAM,GAAGH,GAAG;IAE3B,IAAI4G,OAAO,KAAK,OAAO,EAAE;MAErBJ,aAAa,CAACY,SAAS,CAACnD,KAAK,EAAE,CAAC,EAAE,CAAC,EAAEA,KAAK,CAACkC,KAAK,EAAElC,KAAK,CAACmC,MAAM,EAAErG,IAAI,EAAEC,GAAG,EAAEmG,KAAK,EAAEC,MAAM,CAAC;KAC5F,MAAM,IAAIQ,OAAO,KAAK,MAAM,EAAE;MAAA,IAAAS,WAAA;MAE3B,IAAMxK,KAAK,IAAAwK,WAAA,GAAGZ,IAAI,CAAC5J,KAAK,YAAAwK,WAAA,GAAIX,KAAK,CAAC7J,KAAK;MACvC,IAAMyK,IAAI,GAAGC,MAAM,CAAC1K,KAAK,CAAC;MAC1B,IAAA2K,MAAA,GAAqCF,IAAI;QAAlCG,CAAC,GAAAD,MAAA,cAAG,CAAC,GAAAA,MAAA;QAAAE,OAAA,GAAyBJ,IAAI;QAA3BK,CAAC,GAAAD,OAAA,cAAG,CAAC,GAAAA,OAAA;QAAAE,OAAA,GAAkBN,IAAI;QAApBzI,CAAC,GAAA+I,OAAA,cAAG,CAAC,GAAAA,OAAA;QAAAC,OAAA,GAAWP,IAAI;QAAb1I,CAAC,GAAAiJ,OAAA,cAAG,CAAC,GAAAA,OAAA;MAEjC,IAAI;QACA,IAAMC,IAAI,GAAG3B,KAAK,GAAGN,GAAG;QACxB,IAAMkC,IAAI,GAAG3B,MAAM,GAAGP,GAAG;QAEzBE,WAAW,CAACiC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAEF,IAAI,EAAEC,IAAI,CAAC;QACvChC,WAAW,CAACqB,SAAS,CAACnD,KAAK,EAAE,CAAC,EAAE,CAAC,EAAEA,KAAK,CAACkC,KAAK,EAAElC,KAAK,CAACmC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE0B,IAAI,EAAEC,IAAI,CAAC;QAE/E,IAAME,SAAS,GAAGlC,WAAW,CAACmC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAEJ,IAAI,EAAEC,IAAI,CAAC;QAC5D,IAAQI,IAAI,GAAKF,SAAS,CAAlBE,IAAI;QACZ,IAAMvK,CAAC,GAAGuK,IAAI,CAAClK,MAAM;QAErB,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAE;UAC3B+J,IAAI,CAAC/J,CAAC,CAAC,GAAGqJ,CAAC;UACXU,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAGuJ,CAAC;UACfQ,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAGS,CAAC;UACfsJ,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAG+J,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAGQ,CAAC;;QAGjCmH,WAAW,CAACqC,YAAY,CAACH,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEH,IAAI,EAAEC,IAAI,CAAC;QAC3DvB,aAAa,CAACY,SAAS,CAACrB,WAAW,CAACC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE8B,IAAI,EAAEC,IAAI,EAAEhI,IAAI,EAAEC,GAAG,EAAEmG,KAAK,EAAEC,MAAM,CAAC;OAC1F,CAAC,OAAOiC,CAAC,EAAE;QACR3D,OAAO,CAAC4D,KAAK,CAACD,CAAC,CAAC;;;GAG3B;AACL,CAAC;;AC/GD,IAAME,KAAK,GAAG,IAAI;AAElB,IAAMC,SAAS,GAAG,SAAZA,SAASA,CACXC,IAAyD,EACzDC,KAAa,EACbtJ,SAAiB,EACjBuJ,SAAsC;EAEtC,IAAIvK,CAAC,GAAG,CAAC;EACT,IAAMwK,KAAK,GAAGxJ,SAAS,GAAG,CAAC,GAAGmJ,KAAK,GAAGtJ,IAAI,CAACV,GAAG,CAACgK,KAAK,EAAEG,KAAK,GAAG,CAAC,CAAC;EAChE,OAAOtK,CAAC,GAAGwK,KAAK,EAAExK,CAAC,EAAE,EAAE;IACnB,IAAMyK,GAAG,GAAGJ,IAAI,CAACC,KAAK,GAAGtK,CAAC,GAAGgB,SAAS,CAAC;IACvC,IAAIyJ,GAAG,IAAI,IAAI,IAAI,CAACF,SAAS,CAACG,GAAG,CAACD,GAAG,CAAC,EAAE;;EAE5C,OAAOH,KAAK,GAAG,CAACtK,CAAC,GAAG,CAAC,IAAIgB,SAAS;AACtC,CAAC;AAGD,AAAO,IAAM2J,kCAAkC,GAAG,SAArCA,kCAAkCA,CAC3CvI,SAAoB,EACpBwI,SAA8D,EAC9DL,SAA6C,EAC7CM,UAAkB;EAElB,IAAI,CAACN,SAAS,EAAE,OAAOnI,SAAS;EAEhC,IAAAC,mBAAA,GAAwBC,kBAAkB,CAACF,SAAS,CAAC;IAA9C0I,KAAK,GAAAzI,mBAAA;IAAE0I,MAAM,GAAA1I,mBAAA;EAEpB,IAAM2I,KAAK,GAAGF,KAAK,CAACD,UAAU,CAAC;EAC/B,IAAMI,GAAG,GAAGF,MAAM,CAACF,UAAU,CAAC;EAE9B,IAAMK,UAAU,GAAGd,SAAS,CAACQ,SAAS,EAAEI,KAAK,EAAE,CAAC,CAAC,EAAET,SAAS,CAAC;EAC7D,IAAMY,QAAQ,GAAGf,SAAS,CAACQ,SAAS,EAAEK,GAAG,EAAE,CAAC,EAAEV,SAAS,CAAC;EAExD,IAAMa,QAAQ,GAAc,CAACN,KAAK,CAAChG,KAAK,EAAQ,EAAEiG,MAAM,CAACjG,KAAK,EAAQ,CAAC;EACvEsG,QAAQ,CAAC,CAAC,CAAC,CAACP,UAAU,CAAC,GAAGK,UAAU;EACpCE,QAAQ,CAAC,CAAC,CAAC,CAACP,UAAU,CAAC,GAAGM,QAAQ;EAElC,IAAME,QAAQ,GAAGtG,eAAe,CAACqG,QAAQ,EAAEhJ,SAAS,CAAC;EACrD,OAAOiJ,QAAQ;AACnB,CAAC;AAED,AAAO,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAC9BhB,KAAa,EACbM,SAA8D;EAE9D,IAAMW,MAAM,GAAGX,SAAS,CAACN,KAAK,GAAG,CAAC,CAAC;EACnC,IAAMkB,KAAK,GAAGZ,SAAS,CAACN,KAAK,CAAC;EAC9B,OAAOiB,MAAM,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI,IAAID,MAAM,KAAKC,KAAK;AAC9D,CAAC;;AClCM,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAC9BC,UAA8C,EAC9CC,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACF,UAAU,CAAC,EAAE;IAC3B,OAAO,UAACG,aAAqB;MACzB,IAAIA,aAAa,IAAI,CAAC,IAAIA,aAAa,GAAGH,UAAU,CAAC7L,MAAM,EAAE;QACzD,OAAO6L,UAAU,CAACG,aAAa,CAAC;OACnC,MAAM;QACH,OAAOF,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOD,UAAU,KAAK,UAAU,EAAE;IACzC,OAAOA,UAAU;GACpB,MAAM,IAAIA,UAAU,KAAK,IAAI,IAAIA,UAAU,KAAKI,SAAS,EAAE;IACxD,OAAO;MAAA,OAAMJ,UAAU;;GAC1B,MAAM;IACH,OAAO;MAAA,OAAMC,YAAY;;;AAEjC,CAAC;AAGD,AAAO,IAAMI,cAAc,GAAG,SAAjBA,cAAcA,CACvBC,QAAqC,EACrCL,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACI,QAAQ,CAAC,EAAE;IACzB,OAAO,UAAC9L,CAAS,EAAE8B,CAAS;MACxB,IAAIA,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGgK,QAAQ,CAACnM,MAAM,EAAE;QAC/B,IAAIK,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAG8L,QAAQ,CAAChK,CAAC,CAAC,CAACnC,MAAM,EAAE;UAClC,OAAOmM,QAAQ,CAAChK,CAAC,CAAC,CAAC9B,CAAC,CAAC;SACxB,MAAM;UACH,OAAOyL,YAAY;;OAE1B,MAAM;QACH,OAAOA,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOK,QAAQ,KAAK,UAAU,EAAE;IACvC,OAAOA,QAAQ;GAClB,MAAM,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAKF,SAAS,EAAE;IACpD,OAAO;MAAA,OAAME,QAAQ;;GACxB,MAAM;IACH,OAAO;MAAA,OAAML,YAAY;;;AAEjC,CAAC;AAGD,AAAO,IAAMM,2BAA2B,GAAG,SAA9BA,2BAA2BA,CACpCP,UAAoD,EACpDC,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACF,UAAU,CAAC,EAAE;IAC3B,OAAO,UAACG,aAAqB;MACzB,IAAIA,aAAa,IAAI,CAAC,IAAIA,aAAa,GAAGH,UAAU,CAAC7L,MAAM,EAAE;QACzD,OAAO6L,UAAU,CAACG,aAAa,CAAC;OACnC,MAAM;QACH,OAAOF,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOD,UAAU,KAAK,UAAU,EAAE;IACzC,OAAOA,UAAU;GACpB,MAAM,IAAIA,UAAU,KAAK,IAAI,IAAIA,UAAU,KAAKI,SAAS,EAAE;IACxD,OAAO;MAAA,OAAMJ,UAAU;;GAC1B,MAAM;IACH,OAAO;MAAA,OAAMC,YAAY;;;AAEjC,CAAC;AAGD,AAAO,IAAMO,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAC7BF,QAA2C,EAC3CL,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACI,QAAQ,CAAC,EAAE;IACzB,OAAO,UAAC9L,CAAS,EAAE8B,CAAS;MACxB,IAAIA,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGgK,QAAQ,CAACnM,MAAM,EAAE;QAC/B,IAAIK,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAG8L,QAAQ,CAAChK,CAAC,CAAC,CAACnC,MAAM,EAAE;UAClC,OAAOmM,QAAQ,CAAChK,CAAC,CAAC,CAAC9B,CAAC,CAAC;SACxB,MAAM;UACH,OAAOyL,YAAY;;OAE1B,MAAM;QACH,OAAOA,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOK,QAAQ,KAAK,UAAU,EAAE;IACvC,OAAOA,QAAQ;GAClB,MAAM,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAKF,SAAS,EAAE;IACpD,OAAO;MAAA,OAAME,QAAQ;;GACxB,MAAM;IACH,OAAO;MAAA,OAAML,YAAY;;;AAEjC,CAAC;AAED,AAAO,IAAMQ,0BAA0B,GAAG,SAA7BA,0BAA0BA,CAAIC,QAAsC;EAC7E,IAAIlM,CAAC,GAAG,CAAC;EACT,IAAI8B,CAAC,GAAG,CAAC;EACT,IAAIqK,YAAY,GAAG,CAAC;EACpB,IAAIC,eAAe,GAAG,EAAE;EACxB,IAAIC,qBAAqB,GAAG,GAAG;EAG/B,OAAOF,YAAY,GAAG,CAAC,EAAE;IACrB,IAAIG,QAAQ,GAAG,IAAI;IACnB,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAG,EAAE,EAAEA,EAAE,EAAE,EAAE;MAC5B,IAAM1C,IAAI,GAAGqC,QAAQ,CAAClM,CAAC,EAAEuM,EAAE,CAAC;MAC5B,IAAI1C,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK+B,SAAS,IAAI/B,IAAI,KAAK,EAAE,EAAE;QACpDyC,QAAQ,GAAG,KAAK;QAChB;;;IAGR,IAAIA,QAAQ,EAAE;MACVH,YAAY,IAAI,CAAC;;IAErBnM,CAAC,IAAIoM,eAAe;IACpB,IAAIpM,CAAC,GAAG7D,oBAAoB,EAAE;MAC1B;;IAEJiQ,eAAe,GAAGzL,IAAI,CAAC6L,KAAK,CAACJ,eAAe,GAAGC,qBAAqB,CAAC;;EAGzEF,YAAY,GAAG,CAAC;EAChBC,eAAe,GAAG,EAAE;EACpBC,qBAAqB,GAAG,GAAG;EAG3B,OAAOF,YAAY,GAAG,CAAC,EAAE;IACrB,IAAIG,SAAQ,GAAG,IAAI;IACnB,KAAK,IAAIG,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAG,EAAE,EAAEA,EAAE,EAAE,EAAE;MAC5B,IAAM5C,KAAI,GAAGqC,QAAQ,CAACO,EAAE,EAAE3K,CAAC,CAAC;MAC5B,IAAI+H,KAAI,KAAK,IAAI,IAAIA,KAAI,KAAK+B,SAAS,IAAI/B,KAAI,KAAK,EAAE,EAAE;QACpDyC,SAAQ,GAAG,KAAK;QAChB;;;IAGR,IAAIA,SAAQ,EAAE;MACVH,YAAY,IAAI,CAAC;;IAErBrK,CAAC,IAAIsK,eAAe;IACpB,IAAItK,CAAC,GAAG3F,oBAAoB,EAAE;MAC1B;;IAEJiQ,eAAe,GAAGzL,IAAI,CAAC6L,KAAK,CAACJ,eAAe,GAAGC,qBAAqB,CAAC;;EAEzE,OAAO,CAACrM,CAAC,EAAE8B,CAAC,CAAC;AACjB,CAAC;AAED,AAAO,IAAM4K,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC1BC,WAAwD,EACxD7B,KAAS,EACThK,SAAoB;EAEpB,IAAM8L,IAAI,GAAG/L,gBAAgB,CAACC,SAAS,CAAC;EAExC,IAAI+L,IAAI,GAAGnM,KAAK,CAACoK,KAAK,EAAEnP,MAAM,CAAC;EAC/B,IAAAmR,MAAA,GAAezM,KAAK,CAACwM,IAAI,EAAED,IAAI,CAAC;IAAzB5M,CAAC,GAAA8M,MAAA;IAAEhL,CAAC,GAAAgL,MAAA;EACX,IAAMlC,KAAK,GAAG+B,WAAW,CAAC3M,CAAC,EAAE8B,CAAC,EAAE/D,kBAAkB,CAAC;EACnD,IAAMgP,WAAW,GAAGnC,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKgB,SAAS;EAEzE,IAAI,CAACmB,WAAW,EAAE;IACdF,IAAI,GAAGxM,KAAK,CAACwM,IAAI,EAAED,IAAI,CAAC;;EAG5B,IAAAI,KAAA,GAAqBH,IAAI;IAApBI,KAAK,GAAAD,KAAA;IAAEE,KAAK,GAAAF,KAAA;EACjB,IAAMG,IAAI,GAAGF,KAAK,GAAG9Q,oBAAoB,GAAG,CAAC;EAC7C,IAAMiR,IAAI,GAAGF,KAAK,GAAG/Q,oBAAoB,GAAG,CAAC;EAE7C,OAAO8Q,KAAK,GAAGE,IAAI,IAAID,KAAK,GAAGE,IAAI,IAAIH,KAAK,IAAI,CAAC,IAAIC,KAAK,IAAI,CAAC,EAAE;IAC7D,IAAMrD,IAAI,GAAG8C,WAAW,CAACM,KAAK,EAAEC,KAAK,EAAEnP,kBAAkB,CAAC;IAG1D,IAAIgP,WAAW,KAAKlD,IAAI,KAAK,EAAE,IAAIA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK+B,SAAS,CAAC,EAAE;MACrE,OAAOpL,KAAK,CAACqM,IAAI,EAAED,IAAI,CAAC;;IAG5B,IAAI,CAACG,WAAW,IAAIlD,IAAI,KAAK,EAAE,IAAIA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK+B,SAAS,EAAE;MACpE,OAAOiB,IAAI;;IACd,IAAAQ,MAAA,GAEgBR,IAAI,GAAGxM,KAAK,CAACwM,IAAI,EAAED,IAAI,CAAC;IAAxCK,KAAK,GAAAI,MAAA;IAAEH,KAAK,GAAAG,MAAA;;EAGjB,OAAO3M,KAAK,CAACmM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;;AClKM,IAAMS,QAAQ,GAAG,SAAXA,QAAQA,CACjBC,SAAyC,EACzCrL,SAAoB,EACpB7E,QAA0B,EAC1BmQ,QAAiB,EACjBtB,QAAsC,EACtCuB,UAAwD,EACxDC,YAAkD,EAElDC,aAA0D,EAC1DC,UAAuD,EACvDC,cAA2D,EAC3DC,WAAwD,EAExDC,UAAsB,EACtBC,YAA2B,EAC3BC,UAAsB,EAEtBC,eAAoE,EACpEC,YAAiE,EACjEC,oBAAwD,EACxDC,iBAAqD,EAErDC,gBAA4C,EAC5CC,iBAA0C,EAE1CC,MAA2B,EAC3BC,QAAqB,EACrBC,gBAAuD,EACvDC,mBAA2E,EAC3EC,kBAAoD,EACpDC,kBAA0D,EAC1DC,iBAAwF,EACxFC,aAAwC,EAExCC,kBAA6C,EAC7CC,eAAuC,EAEvCC,QAAsC,EACtCC,mBAAgE,EAChEC,gBAA6D,EAC7DC,iBAAiE,EACjEC,kBAAkE,EAClEC,YAA2C,EAE3CC,+BAAyC,EACzCC,gCAA0C;EAE1C,IAAAlJ,SAAA,GAAwCC,QAAQ,CAAgB,IAAI,CAAC;IAA9DkJ,YAAY,GAAAnJ,SAAA;IAAEoJ,eAAe,GAAApJ,SAAA;EACpC,IAAAG,UAAA,GAAkCF,QAAQ,CAAgB,IAAI,CAAC;IAAxDoJ,SAAS,GAAAlJ,UAAA;IAAEmJ,YAAY,GAAAnJ,UAAA;EAC9B,IAAAG,UAAA,GAAoCL,QAAQ,CAAgB,IAAI,CAAC;IAA1DsJ,UAAU,GAAAjJ,UAAA;IAAEkJ,aAAa,GAAAlJ,UAAA;EAChC,IAAAmJ,UAAA,GAA8BxJ,QAAQ,CAAgB,IAAI,CAAC;IAApDyJ,OAAO,GAAAD,UAAA;IAAEE,UAAU,GAAAF,UAAA;EAE1B,IAAAG,UAAA,GAAsC3J,QAAQ,CAA2B,IAAI,CAAC;IAAvE4J,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAElC,IAAAG,UAAA,GAAwC9J,QAAQ,CAAC,KAAK,CAAC;IAAhD+J,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EACpC,IAAAG,UAAA,GAAkDjK,QAAQ,CAAC,KAAK,CAAC;IAA1DkK,iBAAiB,GAAAD,UAAA;IAAEE,oBAAoB,GAAAF,UAAA;EAC9C,IAAAG,UAAA,GAAwDpK,QAAQ,CAAC,KAAK,CAAC;IAAhEqK,oBAAoB,GAAAD,UAAA;IAAEE,uBAAuB,GAAAF,UAAA;EACpD,IAAAG,UAAA,GAA8DvK,QAAQ,CAAC,KAAK,CAAC;IAAtEwK,uBAAuB,GAAAD,UAAA;IAAEE,0BAA0B,GAAAF,UAAA;EAE1D,IAAQG,cAAc,GAAwBjD,UAAU,CAAhDiD,cAAc;IAAEC,iBAAiB,GAAKlD,UAAU,CAAhCkD,iBAAiB;EACzC,IAAQC,WAAW,GAAiBrD,UAAU,CAAtCqD,WAAW;IAAEC,UAAU,GAAKtD,UAAU,CAAzBsD,UAAU;EAC/B,IAAMC,OAAO,GAAGD,UAAU,EAAE;EAE5B,IAAME,YAAY,GAAGtK,OAAO,CAAC;IACzB,IAAA9E,mBAAA,GAAyBC,kBAAkB,CAACF,SAAS,CAAC;MAAAG,oBAAA,GAAAF,mBAAA;MAA5CgL,IAAI,GAAA9K,oBAAA;MAAE+K,IAAI,GAAA/K,oBAAA;IACpB,IAAIoB,cAAc,CAACvB,SAAS,CAAC,EAAE;MAC3B,OAAO1B,KAAK,CAACH,KAAK,CAAC+Q,WAAW,CAAC,CAAC,CAAC,EAAEhE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAChQ,KAAK,CAACC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAEzB,OAAO,CAAC;;IAE3F,IAAIgI,iBAAiB,CAAC1B,SAAS,CAAC,EAAE;MAC9B,OAAO1B,KAAK,CAACH,KAAK,CAAC+Q,WAAW,CAAC,CAACjE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE/P,KAAK,CAACC,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAEzB,OAAO,CAAC;;IAE3F,IAAImI,eAAe,CAAC7B,SAAS,CAAC,EAAE;MAC5B,OAAO1B,KAAK,CAAC4Q,WAAW,CAAC,CAACjE,IAAI,EAAEC,IAAI,CAAC,EAAExR,OAAO,CAAC,EAAEA,OAAO,CAAC;;IAE7D,OAAO,IAAI;GACd,EAAE,CAACsG,SAAS,EAAEkP,WAAW,EAAEE,OAAO,CAAC,CAAC;EAGrC,IAAME,QAAQ,GAAG;IACbtP,SAAS,EAATA,SAAS;IACT7E,QAAQ,EAARA,QAAQ;IACRmQ,QAAQ,EAARA,QAAQ;IACRtB,QAAQ,EAARA,QAAQ;IACRuB,UAAU,EAAVA,UAAU;IACVM,UAAU,EAAVA,UAAU;IACVC,YAAY,EAAZA,YAAY;IAEZuD,YAAY,EAAZA,YAAY;IACZ7B,YAAY,EAAZA,YAAY;IACZE,SAAS,EAATA,SAAS;IACTE,UAAU,EAAVA,UAAU;IACVG,OAAO,EAAPA,OAAO;IAEPM,YAAY,EAAZA,YAAY;IACZG,iBAAiB,EAAjBA,iBAAiB;IACjBG,oBAAoB,EAApBA,oBAAoB;IACpBG,uBAAuB,EAAvBA;GACH;EACD,IAAMS,GAAG,GAAGC,MAAM,CAACF,QAAQ,CAAC;EAC5BC,GAAG,CAACE,OAAO,GAAGH,QAAQ;EAGtB,IAAMI,gBAAgB,GAAGxK,WAAW,CAAC,UAAC2C,CAAsC;IACxE,IAAI,CAACA,CAAC,CAAC8H,MAAM,IAAI,EAAE9H,CAAC,CAAC8H,MAAM,YAAYC,OAAO,CAAC,EAAE;MAC7C,OAAO,IAAI;;IAGf,IAAMC,IAAI,GAAGhI,CAAC,CAAC8H,MAAM,CAACG,qBAAqB,EAAE;IAC7C,IAAMC,EAAE,GAAO,CAAClI,CAAC,CAACmI,OAAO,GAAGH,IAAI,CAACtQ,IAAI,EAAEsI,CAAC,CAACoI,OAAO,GAAGJ,IAAI,CAACrQ,GAAG,CAAC;IAG5D,IAAIuQ,EAAE,CAAC,CAAC,CAAC,GAAGlI,CAAC,CAAC8H,MAAM,CAACO,WAAW,IAAIH,EAAE,CAAC,CAAC,CAAC,GAAGlI,CAAC,CAAC8H,MAAM,CAACQ,YAAY,EAAE;MAC/D,OAAO,IAAI;;IAGf,OAAOJ,EAAE;GACZ,EAAE,EAAE,CAAC;EAEN,IAAMK,iBAAiB,GAAGlL,WAAW,CAAC,UAAC2C,CAAsC;IACzE,IAAI,CAACA,CAAC,CAAC8H,MAAM,IAAI,EAAE9H,CAAC,CAAC8H,MAAM,YAAYC,OAAO,CAAC,EAAE;MAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;;IAGjB,IAAAS,SAAA,GAAkCxI,CAAC,CAAC8H,MAAa;MAAzCW,UAAU,GAAAD,SAAA,CAAVC,UAAU;MAAEC,SAAS,GAAAF,SAAA,CAATE,SAAS;IAC7B,IAAMR,EAAE,GAAO,CAACO,UAAU,EAAEC,SAAS,CAAC;IAEtC,OAAOR,EAAE;GACZ,EAAE,EAAE,CAAC;EAEN,IAAMS,WAAW,GAAGtL,WAAW,CAC3B,UAAC6K,EAAM;IACH,IAAiBU,MAAM,GAAKpF,SAAS,CAA7BoE,OAAO;IACf,IAAI,CAACgB,MAAM,EAAE,OAAO,IAAI;IAExB,SAAAC,SAAA,GAAAC,+BAAA,CAAqBF,MAAM,GAAAG,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;MAAA,IAAlBC,MAAM,GAAAF,KAAA,CAAAG,KAAA;MACb,IAAQ5K,GAAG,GAAK2K,MAAM,CAAd3K,GAAG;MACX,IAAIhH,sBAAsB,CAACgH,GAAG,EAAE4J,EAAE,CAAC,EAAE;QACjC,OAAOe,MAAM;;;IAIrB,OAAO,IAAI;GACd,EACD,CAACzF,SAAS,CAAC,CACd;EAED,IAAM2F,cAAc,GAAG9L,WAAW,CAAC;IAC/BpB,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,MAAM;GAC7C,EAAE,EAAE,CAAC;EAEN,IAAMC,aAAa,GAAGjM,WAAW,CAC7B,UAAC2C,CAA+B;;IAC5B,IAAAuJ,YAAA,GAOI7B,GAAG,CANHE,OAAO;MACHzP,SAAS,GAAAoR,YAAA,CAATpR,SAAS;MAAAqR,qBAAA,GAAAD,YAAA,CACTvF,UAAU;MAAIyF,aAAa,GAAAD,qBAAA,CAAbC,aAAa;MAAEC,UAAU,GAAAF,qBAAA,CAAVE,UAAU;MAAEC,WAAW,GAAAH,qBAAA,CAAXG,WAAW;MAAEC,UAAU,GAAAJ,qBAAA,CAAVI,UAAU;MAAEC,UAAU,GAAAL,qBAAA,CAAVK,UAAU;MAAAC,qBAAA,GAAAP,YAAA,CAC5EtF,YAAY;MAAI8F,OAAO,GAAAD,qBAAA,CAAPC,OAAO;MAAEC,IAAI,GAAAF,qBAAA,CAAJE,IAAI;MAC7BxC,YAAY,GAAA+B,YAAA,CAAZ/B,YAAY;IAIpBxC,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,IAAI,CAAC;IAErB,IAAIhF,CAAC,CAACiK,MAAM,KAAK,CAAC,EAAE;IAEnB,CAAAC,UAAA,GAAAlK,CAAC,CAAC8H,MAAkB,cAAAoC,UAAA,wBAAAC,qBAAA,GAApBD,UAAA,CAAsBE,iBAAiB,cAAAD,qBAAA,uBAAvCA,qBAAA,CAAAE,IAAA,CAAAH,UAAA,EAA0ClK,CAAC,CAACsK,SAAS,CAAC;IAEvD,IAAMpC,EAAE,GAAGL,gBAAgB,CAAC7H,CAAC,CAAC;IAC9B,IAAI,CAACkI,EAAE,EAAE;IAET,IAAMqC,SAAS,GAAG5B,WAAW,CAACT,EAAE,CAAC;IACjC5B,cAAc,CAACiE,SAAS,CAAC;IAEzB,IAAOtU,CAAC,GAAOiS,EAAE;MAAPnQ,CAAC,GAAImQ,EAAE;IAEjB,IAAMnN,UAAU,GAAG1C,kBAAkB,CAACF,SAAS,CAAC;IAChD,IAAA8C,YAAA,GAAqCF,UAAU;MAAvCyP,IAAI,GAAAvP,YAAA;MAAEwP,IAAI,GAAAxP,YAAA;MAAAC,aAAA,GAAmBH,UAAU;MAAzBqI,IAAI,GAAAlI,aAAA;MAAEmI,IAAI,GAAAnI,aAAA;IAEhC,IAAMwP,eAAe,GAAGxR,mBAAmB,CAACf,SAAS,CAAC,CAAC,UAACpC,CAAC;MAAA,OAAKA,CAAC;MAAC;IAChE,IAAM4U,YAAY,GAAGxR,gBAAgB,CAAChB,SAAS,CAAC,CAAC,UAACpC,CAAC;MAAA,OAAKA,CAAC;MAAC;IAG1D,IAAI,CAACqR,iBAAiB,IAAIrP,CAAC,GAAG8R,UAAU,EAAE,EAAE;MAExC,IAAIzE,mBAAmB,EAAE;QAErB,IAAMrE,KAAK,GAAG0I,aAAa,CAACe,IAAI,CAAC,GAAGnX,KAAK,CAACM,UAAU;QACpD,IAAMqN,GAAG,GAAGyI,aAAa,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAG/P,KAAK,CAACM,UAAU;QACrD,IAAIqC,SAAS,CAACC,CAAC,EAAE8K,KAAK,EAAEC,GAAG,CAAC,IAAIqD,oBAAoB,EAAE;UAClD,SAAAuG,UAAA,GAAA9B,+BAAA,CAAoBiB,OAAO,GAAAc,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA5B,IAAA,GAAE;YAAA,IAAlB3I,KAAK,GAAAwK,MAAA,CAAA3B,KAAA;YACZ,IAAMnI,MAAK,GAAG0I,aAAa,CAACpJ,KAAK,EAAE,CAAC,CAAC;YACrC,IAAMW,IAAG,GAAGyI,aAAa,CAACpJ,KAAK,EAAE,CAAC,CAAC;YAEnC,IACIxG,iBAAiB,CAAC1B,SAAS,CAAC,IAC5BnC,SAAS,CAACC,CAAC,EAAE8K,MAAK,EAAEC,IAAG,CAAC,KACvBhL,SAAS,CAACqK,KAAK,EAAEmK,IAAI,EAAEpH,IAAI,CAAC,IAAIiB,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAE5D,GAAG,CAAC0D,eAAe,CAAC9D,KAAK,CAAC,CAAC,CAAC,IACnFyD,cAAc,CAACzD,KAAK,CAAC,EACvB;cACEpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,UAAU;cAG9C,IAAMyB,OAAO,GAAGpV,KAAK,CAACC,IAAI,CACtB,IAAIoV,GAAG,IAAAC,MAAA,CACAN,eAAe,EACdrG,oBAAoB,GAClB0F,OAAO,CAACkB,MAAM,CAAC,UAAC5K,KAAK;gBAAA,OACjBgE,oBAAoB,CAAC5D,GAAG,CAAC0D,eAAe,CAAC9D,KAAK,CAAC,CAAC;gBACnD,GACD,EAAE,CACX,CAAC,CAAC6K,MAAM,EAAE,CACd;cACDJ,OAAO,CAACK,IAAI,CAAC,UAAC5U,CAAC,EAAEC,CAAC;gBAAA,OAAKD,CAAC,GAAGC,CAAC;gBAAC;cAG7B,IAAI4U,WAAW,GAAGN,OAAO;cACzB,IAAIzG,oBAAoB,EAAE;gBACtB,IAAMgH,cAAc,GAAc,CAC9B,CAAChL,KAAK,EAAE,CAAC,CAAC,CAAC,EACX,CAACA,KAAK,EAAE,CAAC,CAAC,CAAC,CACd;gBACD,IAAAiL,qBAAA,GAA0B5K,kCAAkC,CACxD2K,cAAc,EACdlH,eAAe,EACfE,oBAAoB,EACpB,CAAC,CACJ;kBAAAkH,sBAAA,GAAAD,qBAAA;kBALO5T,IAAI,GAAA6T,sBAAA;kBAAAC,sBAAA,GAAAF,qBAAA;kBAAIzT,KAAK,GAAA2T,sBAAA;gBAQrB,IAAMC,SAAS,GAAG,EAAEjB,IAAI,GAAG3S,KAAK,IAAIuL,IAAI,GAAG1L,IAAI,CAAC;gBAChD,IAAMgU,SAAS,GAAGD,SAAS,GAAG7U,IAAI,CAACV,GAAG,CAACsU,IAAI,EAAE9S,IAAI,CAAC,GAAGA,IAAI;gBACzD,IAAMiU,OAAO,GAAGF,SAAS,GAAG7U,IAAI,CAACT,GAAG,CAACiN,IAAI,EAAEvL,KAAK,CAAC,GAAGA,KAAK;gBACzDuT,WAAW,GAAG9V,GAAG,CAACqW,OAAO,GAAGD,SAAS,GAAG,CAAC,EAAEA,SAAS,CAAC;;cAGzD,IAAME,IAAI,GAAGnC,aAAa,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAGqG,aAAa,CAACe,IAAI,CAAC;cACzD,IAAAqB,kBAAA,GAAiBtD,iBAAiB,CAACvI,CAAC,CAAC;gBAA9B8L,MAAM,GAAAD,kBAAA;cAEb7F,aAAa,CAAC;gBACVrL,MAAM,EAAE1E,CAAC;gBACT6V,MAAM,EAANA,MAAM;gBACNF,IAAI,EAAJA,IAAI;gBACJd,OAAO,EAAPA;eACH,CAAC;cACFjG,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;cAC5BD,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAG,CAACwG,WAAW,EAAE,IAAI,CAAC,CAAC;cAC1C;;;;;MAOhB,IAAI9F,iBAAiB,EAAE;QACnB,SAAAyG,EAAA,MAAAC,IAAA,IAAqB,CAAC,CAAC,EAAAhB,MAAA,CAAKjB,OAAO,GAAAgC,EAAA,GAAAC,IAAA,CAAApW,MAAA,EAAAmW,EAAA,IAAG;UAAjC,IAAM1L,MAAK,GAAA2L,IAAA,CAAAD,EAAA;UACZ,IAAME,IAAI,GAAGxC,aAAa,CAACpJ,MAAK,EAAE,CAAC,CAAC;UAEpC,IAAIzJ,IAAI,CAACsV,GAAG,CAACD,IAAI,GAAGhW,CAAC,CAAC,GAAG5C,KAAK,CAACM,UAAU,IAAIiQ,aAAa,CAACvD,MAAK,CAAC,EAAE;YAC/DpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,YAAY;YAEhD,IAAM8C,OAAO,GAAGtS,iBAAiB,CAAC1B,SAAS,CAAC,IAAIiL,IAAI,KAAK/C,MAAK;YAC9D,IAAMyK,QAAO,GAAGqB,OAAO,GAAGzB,eAAe,GAAG,CAACrK,MAAK,CAAC;YAEnD,IAAMuL,KAAI,GAAGO,OAAO,GACd1C,aAAa,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAGqG,aAAa,CAACe,IAAI,CAAC,GAC5Cf,aAAa,CAACpJ,MAAK,EAAE,CAAC,CAAC,GAAGoJ,aAAa,CAACpJ,MAAK,CAAC;YACpD,IAAA+L,mBAAA,GAAiB7D,iBAAiB,CAACvI,CAAC,CAAC;cAA9B8L,OAAM,GAAAM,mBAAA;YAEbxG,eAAe,CAAC;cACZjL,MAAM,EAAE1E,CAAC;cACT6V,MAAM,EAANA,OAAM;cACNF,IAAI,EAAJA,KAAI;cACJd,OAAO,EAAPA;aACH,CAAC;YACF;;;;;IAMhB,IAAI,CAAC3D,cAAc,IAAIlR,CAAC,GAAG2T,UAAU,EAAE,EAAE;MAErC,IAAIvE,gBAAgB,EAAE;QAElB,IAAMtE,OAAK,GAAG2I,UAAU,CAACe,IAAI,CAAC,GAAGpX,KAAK,CAACM,UAAU;QACjD,IAAMqN,KAAG,GAAG0I,UAAU,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAGhQ,KAAK,CAACM,UAAU;QAElD,IAAIqC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,IAAIsD,iBAAiB,EAAE;UAC/C,SAAA+H,UAAA,GAAAvD,+BAAA,CAAoBkB,IAAI,GAAAsC,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAArD,IAAA,GAAE;YAAA,IAAf3I,OAAK,GAAAiM,MAAA,CAAApD,KAAA;YACZ,IAAMnI,OAAK,GAAG2I,UAAU,CAACrJ,OAAK,EAAE,CAAC,CAAC;YAClC,IAAMW,KAAG,GAAG0I,UAAU,CAACrJ,OAAK,EAAE,CAAC,CAAC;YAEhC,IACI3G,cAAc,CAACvB,SAAS,CAAC,IACzBnC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,KACvBhL,SAAS,CAACqK,OAAK,EAAEoK,IAAI,EAAEpH,IAAI,CAAC,IAAIiB,iBAAiB,aAAjBA,iBAAiB,eAAjBA,iBAAiB,CAAE7D,GAAG,CAAC2D,YAAY,CAAC/D,OAAK,CAAC,CAAC,CAAC,IAC7E0D,WAAW,CAAC1D,OAAK,CAAC,EACpB;cACEpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,UAAU;cAG9C,IAAMyB,SAAO,GAAGpV,KAAK,CAACC,IAAI,CACtB,IAAIoV,GAAG,IAAAC,MAAA,CACAL,YAAY,EACXrG,iBAAiB,GACf0F,IAAI,CACCnU,GAAG,CAAC,UAACC,CAAC,EAAEC,CAAC;gBAAA,OAAKA,CAAC;gBAAC,CAChBkV,MAAM,CAAC,UAAC5K,KAAK;gBAAA,OAAKiE,iBAAiB,CAAC7D,GAAG,CAAC2D,YAAY,CAAC/D,KAAK,CAAC,CAAC;gBAAC,GAClE,EAAE,CACX,CAAC,CAAC6K,MAAM,EAAE,CACd;cACDJ,SAAO,CAACK,IAAI,CAAC,UAAC5U,CAAC,EAAEC,CAAC;gBAAA,OAAKD,CAAC,GAAGC,CAAC;gBAAC;cAG7B,IAAI4U,YAAW,GAAGN,SAAO;cACzB,IAAIxG,iBAAiB,EAAE;gBACnB,IAAM+G,eAAc,GAAc,CAC9B,CAAC,CAAC,CAAC,EAAEhL,OAAK,CAAC,EACX,CAAC,CAAC,CAAC,EAAEA,OAAK,CAAC,CACd;gBACD,IAAAkM,sBAAA,GAA8B7L,kCAAkC,CAC5D2K,eAAc,EACdjH,YAAY,EACZE,iBAAiB,EACjB,CAAC,CACJ;kBAAAkI,sBAAA,GAAAD,sBAAA;kBALS5U,GAAG,GAAA6U,sBAAA;kBAAAC,sBAAA,GAAAF,sBAAA;kBAAMzU,MAAM,GAAA2U,sBAAA;gBAQzB,IAAMhB,UAAS,GAAG,EAAEhB,IAAI,GAAG3S,MAAM,IAAIuL,IAAI,GAAG1L,GAAG,CAAC;gBAChD,IAAM+T,UAAS,GAAGD,UAAS,GAAG7U,IAAI,CAACV,GAAG,CAACuU,IAAI,EAAE9S,GAAG,CAAC,GAAGA,GAAG;gBACvD,IAAMgU,QAAO,GAAGF,UAAS,GAAG7U,IAAI,CAACT,GAAG,CAACkN,IAAI,EAAEvL,MAAM,CAAC,GAAGA,MAAM;gBAC3DsT,YAAW,GAAG9V,GAAG,CAACqW,QAAO,GAAGD,UAAS,GAAG,CAAC,EAAEA,UAAS,CAAC;;cAGzD,IAAME,MAAI,GAAGlC,UAAU,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAGqG,UAAU,CAACe,IAAI,CAAC;cACnD,IAAAiC,mBAAA,GAAmBnE,iBAAiB,CAACvI,CAAC,CAAC;gBAA9B8L,QAAM,GAAAY,mBAAA;cAEfvG,UAAU,CAAC;gBACPxL,MAAM,EAAE5C,CAAC;gBACT+T,MAAM,EAANA,QAAM;gBACNF,IAAI,EAAJA,MAAI;gBACJd,OAAO,EAAPA;eACH,CAAC;cACFjG,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;cAC5BD,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAG,CAAC,IAAI,EAAEwG,YAAW,CAAC,CAAC;cAC1C;;;;;MAOhB,IAAI7F,kBAAkB,EAAE;QACpB,SAAAoH,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAA5B,MAAA,CAAKhB,IAAI,GAAA2C,GAAA,GAAAC,KAAA,CAAAhX,MAAA,EAAA+W,GAAA,IAAG;UAA9B,IAAMtM,OAAK,GAAAuM,KAAA,CAAAD,GAAA;UACZ,IAAMV,KAAI,GAAGvC,UAAU,CAACrJ,OAAK,EAAE,CAAC,CAAC;UAEjC,IAAIzJ,IAAI,CAACsV,GAAG,CAACD,KAAI,GAAGlU,CAAC,CAAC,GAAG1E,KAAK,CAACM,UAAU,IAAIkQ,UAAU,CAACxD,OAAK,CAAC,EAAE;YAC5DpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,YAAY;YAEhD,IAAM8C,QAAO,GAAGzS,cAAc,CAACvB,SAAS,CAAC,IAAIkL,IAAI,KAAKhD,OAAK;YAC3D,IAAMyK,SAAO,GAAGqB,QAAO,GAAGxB,YAAY,GAAG,CAACtK,OAAK,CAAC;YAEhD,IAAMuL,MAAI,GAAGO,QAAO,GACdzC,UAAU,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAGqG,UAAU,CAACe,IAAI,CAAC,GACtCf,UAAU,CAACrJ,OAAK,EAAE,CAAC,CAAC,GAAGqJ,UAAU,CAACrJ,OAAK,CAAC;YAC9C,IAAAwM,mBAAA,GAAmBtE,iBAAiB,CAACvI,CAAC,CAAC;cAA9B8L,QAAM,GAAAe,mBAAA;YAEf/G,YAAY,CAAC;cACTnL,MAAM,EAAE5C,CAAC;cACT+T,MAAM,EAANA,QAAM;cACNF,IAAI,EAAJA,MAAI;cACJd,OAAO,EAAPA;aACH,CAAC;YACF;;;;;IAOhB,IAAItD,YAAY,EAAE;MACd,IAAOsF,KAAK,GAAWtF,YAAY;QAArBuF,KAAK,GAAIvF,YAAY;MACnC,IAAI5Q,IAAI,CAACsV,GAAG,CAACjW,CAAC,GAAG6W,KAAK,CAAC,GAAGzZ,KAAK,CAACC,QAAQ,IAAIsD,IAAI,CAACsV,GAAG,CAACnU,CAAC,GAAGgV,KAAK,CAAC,GAAG1Z,KAAK,CAACC,QAAQ,EAAE;QAC9EmT,eAAe,CAAC,IAAI,CAAC;QACrB9B,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAGxM,SAAS,CAAC;QAC7B;;;IAKR,IAAMyC,IAAI,GAAG+O,WAAW,CAACzB,EAAE,CAAC;IAC5B,IAAMvN,MAAM,GAAOqF,CAAC,CAACgN,QAAQ,MAAAhC,MAAA,CAAO7S,SAAS,CAAC,CAAC,CAAC,IAAIyC,IAAI;IAExD,IAAI6I,QAAQ,EAAE;MACV,IAAI,CAACgC,+BAA+B,EAAE;QAClCf,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;;;IAIpB,IAAIuI,QAAQ,GAAG,IAAI;IAEnB,IAAI,CAAC9F,cAAc,IAAIlR,CAAC,GAAG2T,UAAU,EAAE,EAAE;MACrCqD,QAAQ,GAAG,KAAK;MAChBlG,uBAAuB,CAAC,IAAI,CAAC;MAC7BpM,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MACdC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;IAGhB,IAAI,CAACwM,iBAAiB,IAAIrP,CAAC,GAAG8R,UAAU,EAAE,EAAE;MACxCoD,QAAQ,GAAG,KAAK;MAChB/F,0BAA0B,CAAC,IAAI,CAAC;MAChCvM,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MACdC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;IAGhBgM,oBAAoB,CAAC,IAAI,CAAC;IAC1B7B,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACpK,MAAM,EAAEC,IAAI,CAAC,EAAEqS,QAAQ,EAAE,IAAI,CAAC;GACtD,EACD,CACIpF,gBAAgB,EAChBU,iBAAiB,EACjBI,WAAW,EACXvD,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,kBAAkB,EAClBZ,gBAAgB,EAChBI,iBAAiB,EACjBL,QAAQ,EACRd,aAAa,EACbC,UAAU,EACVC,cAAc,EACdC,WAAW,EACX0B,+BAA+B,EAC/BtB,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,CACpB,CACJ;EAED,IAAM4I,WAAW,GAAG7P,WAAW,CAC3B,UAAC2C,CAA+B;IAC5B,IAAAmN,aAAA,GAcIzF,GAAG,CAbHE,OAAO;MACHtU,QAAQ,GAAA6Z,aAAA,CAAR7Z,QAAQ;MACR6E,SAAS,GAAAgV,aAAA,CAAThV,SAAS;MACTuL,UAAU,GAAAyJ,aAAA,CAAVzJ,UAAU;MACVvB,QAAQ,GAAAgL,aAAA,CAARhL,QAAQ;MAER4D,UAAU,GAAAoH,aAAA,CAAVpH,UAAU;MACVG,OAAO,GAAAiH,aAAA,CAAPjH,OAAO;MAEPM,YAAY,GAAA2G,aAAA,CAAZ3G,YAAY;MAAA4G,qBAAA,GAAAD,aAAA,CAEZnJ,UAAU;MAAIqJ,aAAa,GAAAD,qBAAA,CAAbC,aAAa;MAAEC,UAAU,GAAAF,qBAAA,CAAVE,UAAU;IAI/CtI,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,IAAI,CAAC;IAErB,IAAI1R,QAAQ,IAAIkT,YAAY,EAAE;MAC1B,IAAM+G,OAAO,GAAGC,kBAAkB,CAACla,QAAQ,EAAE6E,SAAS,EAAEuL,UAAU,EAAEvB,QAAQ,EAAEwB,YAAY,CAAC;MAE3FwB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGoI,OAAO,CAAC;MACnBxI,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAGzR,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;MACzCqR,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAG,IAAI,CAAC;;IAG5B,IAAMuD,EAAE,GAAGL,gBAAgB,CAAC7H,CAAC,CAAC;IAC9B,IAAIkI,EAAE,KAAKnC,UAAU,IAAIG,OAAO,CAAC,EAAE;MAC/BjK,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,MAAM;MAC1CzE,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;MACnCC,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,IAAI,CAAC;MAC1BC,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,IAAI,CAAC;MAE1B,IAAO7O,CAAC,GAAOiS,EAAE;QAAPnQ,CAAC,GAAImQ,EAAE;MACjB,IAAAzP,oBAAA,GAAqCJ,kBAAkB,CAACF,SAAS,CAAC;QAAAO,qBAAA,GAAAD,oBAAA;QAA1D+R,IAAI,GAAA9R,qBAAA;QAAE+R,IAAI,GAAA/R,qBAAA;QAAAC,sBAAA,GAAAF,oBAAA;QAAI2K,IAAI,GAAAzK,sBAAA;QAAE0K,IAAI,GAAA1K,sBAAA;MAEhC,IAAMuK,KAAK,GAAGmK,aAAa,CAACpX,CAAC,EAAE,GAAG,CAAC;MACnC,IAAMkN,KAAK,GAAGmK,UAAU,CAACvV,CAAC,EAAE,GAAG,CAAC;MAEhC,IAAIgO,UAAU,EAAE;QACZ,IAAQ+E,OAAO,GAAK/E,UAAU,CAAtB+E,OAAO;QAEf,IAAM2C,eAAe,GAAGvK,KAAK,IAAIsH,IAAI,IAAItH,KAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAMsK,WAAW,GAAGrJ,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAE5D,GAAG,CAAC0D,eAAe,CAAClO,CAAC,CAAC,CAAC;QACjE,IAAI,CAACwX,eAAe,IAAI,CAACC,WAAW,EAAE;UAClC,IAAMC,SAAS,GAAG7C,OAAO,CAACG,MAAM,CAAC,UAAClV,CAAC;YAAA,OAAKA,CAAC,GAAGmN,KAAK;YAAC;UAClD,IAAM0K,KAAK,GAAG1K,KAAK,GAAGyK,SAAS,CAAC/X,MAAM;UACtC8P,gCAAgC,KAC5BX,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAChB,CAAC6I,KAAK,EAAEnD,IAAI,CAAC,EACb,CAACmD,KAAK,GAAG9C,OAAO,CAAClV,MAAM,GAAG,CAAC,EAAEyN,IAAI,CAAC,CACrC,CAAC;UACN+B,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAG0F,OAAO,EAAE8C,KAAK,CAAC;UACrC3I,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAGrO,IAAI,CAACV,GAAG,CAACsU,IAAI,EAAEoD,KAAK,CAAC,CAAC;;;MAGnD,IAAI1H,OAAO,EAAE;QACT,IAAQ4E,SAAO,GAAK5E,OAAO,CAAnB4E,OAAO;QAEf,IAAM2C,gBAAe,GAAGtK,KAAK,IAAIsH,IAAI,IAAItH,KAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAMqK,YAAW,GAAGpJ,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAE7D,GAAG,CAAC2D,YAAY,CAACrM,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC0V,gBAAe,IAAI,CAACC,YAAW,EAAE;UAClC,IAAMC,UAAS,GAAG7C,SAAO,CAACG,MAAM,CAAC,UAAClV,CAAC;YAAA,OAAKA,CAAC,GAAGoN,KAAK;YAAC;UAClD,IAAMyK,MAAK,GAAGzK,KAAK,GAAGwK,UAAS,CAAC/X,MAAM;UACtC8P,gCAAgC,KAC5BX,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAChB,CAACyF,IAAI,EAAEoD,MAAK,CAAC,EACb,CAACxK,IAAI,EAAEwK,MAAK,GAAG9C,SAAO,CAAClV,MAAM,GAAG,CAAC,CAAC,CACrC,CAAC;UACNyP,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAGyF,SAAO,EAAE8C,MAAK,CAAC;UAClC1I,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAGtO,IAAI,CAACV,GAAG,CAACuU,IAAI,EAAEmD,MAAK,CAAC,CAAC;;;;IAKpDhH,oBAAoB,CAAC,KAAK,CAAC;IAC3BG,uBAAuB,CAAC,KAAK,CAAC;IAC9BG,0BAA0B,CAAC,KAAK,CAAC;IACjCT,eAAe,CAAC,KAAK,CAAC;IACtBb,eAAe,CAAC,IAAI,CAAC;IACrBI,aAAa,CAAC,IAAI,CAAC;IACnBF,YAAY,CAAC,IAAI,CAAC;IAClBK,UAAU,CAAC,IAAI,CAAC;GACnB,EACD,CACI0B,gBAAgB,EAChBc,WAAW,EACXxD,QAAQ,EACRJ,iBAAiB,EACjBJ,gBAAgB,EAChBG,kBAAkB,EAClBM,mBAAmB,EACnBC,gBAAgB,EAChBK,gCAAgC,CACnC,CACJ;EAED,IAAMmI,aAAa,GAAGxQ,WAAW,CAC7B,UAAC2C,CAA+B;IAC5B,IAAA8N,aAAA,GA0BIpG,GAAG,CAzBHE,OAAO;MACHzP,SAAS,GAAA2V,aAAA,CAAT3V,SAAS;MACT8L,YAAY,GAAA6J,aAAA,CAAZ7J,YAAY;MAEZuD,YAAY,GAAAsG,aAAA,CAAZtG,YAAY;MACZ7B,YAAY,GAAAmI,aAAA,CAAZnI,YAAY;MACZI,UAAU,GAAA+H,aAAA,CAAV/H,UAAU;MACVF,SAAS,GAAAiI,aAAA,CAATjI,SAAS;MACTK,OAAO,GAAA4H,aAAA,CAAP5H,OAAO;MAEPM,YAAY,GAAAsH,aAAA,CAAZtH,YAAY;MACZG,iBAAiB,GAAAmH,aAAA,CAAjBnH,iBAAiB;MACjBM,uBAAuB,GAAA6G,aAAA,CAAvB7G,uBAAuB;MACvBH,oBAAoB,GAAAgH,aAAA,CAApBhH,oBAAoB;MAAAiH,qBAAA,GAAAD,aAAA,CAEpB9J,UAAU;MACNyF,aAAa,GAAAsE,qBAAA,CAAbtE,aAAa;MACbC,UAAU,GAAAqE,qBAAA,CAAVrE,UAAU;MACVC,WAAW,GAAAoE,qBAAA,CAAXpE,WAAW;MACX0D,aAAa,GAAAU,qBAAA,CAAbV,aAAa;MACbC,UAAU,GAAAS,qBAAA,CAAVT,UAAU;MACV1D,UAAU,GAAAmE,qBAAA,CAAVnE,UAAU;MACVC,UAAU,GAAAkE,qBAAA,CAAVlE,UAAU;IAKtB5N,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,MAAM;IAE1C,IAAMnB,EAAE,GAAGL,gBAAgB,CAAC7H,CAAC,CAAC;IAC9B,IAAI,CAACkI,EAAE,EAAE;IAET,IAAMqC,SAAS,GAAG5B,WAAW,CAACT,EAAE,CAAC;IACjC,IAAInC,UAAU,IAAIG,OAAO,EAAE;MACvBjK,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,UAAU;KACjD,MAAM,IAAI1D,YAAY,EAAE;MACrB1J,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,YAAY;MAChDrJ,CAAC,CAACgO,cAAc,EAAE;KACrB,MAAM,IAAInI,SAAS,EAAE;MAClB5J,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,YAAY;MAChDrJ,CAAC,CAACgO,cAAc,EAAE;KACrB,MAAM,IAAIlH,oBAAoB,IAAIG,uBAAuB,EAAE;MACxDjH,CAAC,CAACgO,cAAc,EAAE;KACrB,MAAM,IAAIzD,SAAS,EAAE;MAClBtO,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,SAAS;;IAGjD,IAAQU,OAAO,GAAW9F,YAAY,CAA9B8F,OAAO;MAAEC,IAAI,GAAK/F,YAAY,CAArB+F,IAAI;IACrB,IAAO/T,CAAC,GAAOiS,EAAE;MAAPnQ,CAAC,GAAImQ,EAAE;IACjB,IAAA3N,oBAAA,GAAqClC,kBAAkB,CAACF,SAAS,CAAC;MAAAqC,qBAAA,GAAAD,oBAAA;MAA1DiQ,IAAI,GAAAhQ,qBAAA;MAAEiQ,IAAI,GAAAjQ,qBAAA;MAAAC,sBAAA,GAAAF,oBAAA;MAAI6I,IAAI,GAAA3I,sBAAA;MAAE4I,IAAI,GAAA5I,sBAAA;IAEhC,IAAMwT,UAAU,GACZtI,YAAY,IAAII,UAAU,IAAIF,SAAS,IAAIK,OAAO,IAAIY,oBAAoB,IAAIG,uBAAuB;IAEzG,IAAI,CAACgH,UAAU,EAAE;MACb,IAAI,CAAC7G,iBAAiB,IAAIrP,CAAC,GAAG8R,UAAU,EAAE,EAAE;QACxC,IAAIzE,mBAAmB,EAAE;UAErB,IAAMrE,KAAK,GAAG0I,aAAa,CAACe,IAAI,CAAC,GAAGnX,KAAK,CAACM,UAAU;UACpD,IAAMqN,GAAG,GAAGyI,aAAa,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAG/P,KAAK,CAACM,UAAU;UACrD,IAAIqC,SAAS,CAACC,CAAC,EAAE8K,KAAK,EAAEC,GAAG,CAAC,IAAIqD,oBAAoB,EAAE;YAClD,SAAA6J,UAAA,GAAApF,+BAAA,CAAoBiB,OAAO,GAAAoE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAlF,IAAA,GAAE;cAAA,IAAlB3I,KAAK,GAAA8N,MAAA,CAAAjF,KAAA;cACZ,IAAMnI,OAAK,GAAG0I,aAAa,CAACpJ,KAAK,CAAC;cAClC,IAAMW,KAAG,GAAGyI,aAAa,CAACpJ,KAAK,EAAE,CAAC,CAAC;cAEnC,IACI,CAAC4G,uBAAuB,IACxBpN,iBAAiB,CAAC1B,SAAS,CAAC,IAC5BnC,SAAS,CAACC,CAAC,EAAE8K,OAAK,EAAEC,KAAG,CAAC,KACvBhL,SAAS,CAACqK,KAAK,EAAEmK,IAAI,EAAEpH,IAAI,CAAC,IACzBiB,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAE5D,GAAG,CAAC0D,eAAe,CAAC9D,KAAK,CAAC,CAAC,CAAC,IACtDyD,cAAc,CAACzD,KAAK,CAAC,EACvB;gBACEpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,MAAM;gBAC1C;;;;;QAKhB,IAAI/D,iBAAiB,EAAE;UACnB,SAAA8I,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAArD,MAAA,CAAKjB,OAAO,GAAAqE,GAAA,GAAAC,KAAA,CAAAzY,MAAA,EAAAwY,GAAA,IAAG;YAAjC,IAAM/N,OAAK,GAAAgO,KAAA,CAAAD,GAAA;YACZ,IAAMnC,IAAI,GAAGxC,aAAa,CAACpJ,OAAK,EAAE,CAAC,CAAC;YACpC,IAAIzJ,IAAI,CAACsV,GAAG,CAACD,IAAI,GAAGhW,CAAC,CAAC,GAAG5C,KAAK,CAACM,UAAU,IAAIiQ,aAAa,CAACvD,OAAK,CAAC,EAAE;cAC/DpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,YAAY;cAChD;;;;;MAMhB,IAAI,CAAClC,cAAc,IAAIlR,CAAC,GAAG2T,UAAU,EAAE,EAAE;QACrC,IAAIvE,gBAAgB,EAAE;UAElB,IAAMtE,OAAK,GAAG2I,UAAU,CAACe,IAAI,CAAC,GAAGpX,KAAK,CAACM,UAAU;UACjD,IAAMqN,KAAG,GAAG0I,UAAU,CAACrG,IAAI,EAAE,CAAC,CAAC,GAAGhQ,KAAK,CAACM,UAAU;UAClD,IAAIqC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,IAAIsD,iBAAiB,EAAE;YAC/C,SAAAgK,UAAA,GAAAxF,+BAAA,CAAoBkB,IAAI,GAAAuE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAtF,IAAA,GAAE;cAAA,IAAf3I,OAAK,GAAAkO,MAAA,CAAArF,KAAA;cACZ,IAAMnI,OAAK,GAAG2I,UAAU,CAACrJ,OAAK,CAAC;cAC/B,IAAMW,KAAG,GAAG0I,UAAU,CAACrJ,OAAK,EAAE,CAAC,CAAC;cAEhC,IACI,CAACyG,oBAAoB,IACrBpN,cAAc,CAACvB,SAAS,CAAC,IACzBnC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,KACvBhL,SAAS,CAACqK,OAAK,EAAEoK,IAAI,EAAEpH,IAAI,CAAC,IAAIiB,iBAAiB,aAAjBA,iBAAiB,eAAjBA,iBAAiB,CAAE7D,GAAG,CAAC2D,YAAY,CAAC/D,OAAK,CAAC,CAAC,CAAC,IAC7E0D,WAAW,CAAC1D,OAAK,CAAC,EACpB;gBACEpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,MAAM;gBAC1C;;;;;QAKhB,IAAI9D,kBAAkB,EAAE;UACpB,SAAAiJ,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAAzD,MAAA,CAAKhB,IAAI,GAAAwE,GAAA,GAAAC,KAAA,CAAA7Y,MAAA,EAAA4Y,GAAA,IAAG;YAA9B,IAAMnO,OAAK,GAAAoO,KAAA,CAAAD,GAAA;YACZ,IAAMvC,MAAI,GAAGvC,UAAU,CAACrJ,OAAK,EAAE,CAAC,CAAC;YACjC,IAAIzJ,IAAI,CAACsV,GAAG,CAACD,MAAI,GAAGlU,CAAC,CAAC,GAAG1E,KAAK,CAACM,UAAU,IAAIkQ,UAAU,CAACxD,OAAK,CAAC,EAAE;cAC5DpE,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,YAAY;cAChD;;;;;MAMhB,IAAI7B,YAAY,EAAE;QACd,IAAOsF,KAAK,GAAWtF,YAAY;UAArBuF,KAAK,GAAIvF,YAAY;QACnC,IAAI5Q,IAAI,CAACsV,GAAG,CAACjW,CAAC,GAAG6W,KAAK,CAAC,GAAGzZ,KAAK,CAACC,QAAQ,IAAIsD,IAAI,CAACsV,GAAG,CAACnU,CAAC,GAAGgV,KAAK,CAAC,GAAG1Z,KAAK,CAACC,QAAQ,EAAE;UAC9E2I,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,WAAW;UAC/C;;;;IAKZ,IAAI1D,YAAY,EAAE;MACd,IAAIL,iBAAiB,EAAE;QACnB,IAAQsG,IAAI,GAA8BjG,YAAY,CAA9CiG,IAAI;UAAEjR,MAAM,GAAsBgL,YAAY,CAAxChL,MAAM;UAAEmR,MAAM,GAAcnG,YAAY,CAAhCmG,MAAM;UAAEhB,OAAO,GAAKnF,YAAY,CAAxBmF,OAAO;QACrC,IAAA4D,mBAAA,GAAwBnG,iBAAiB,CAACvI,CAAC,CAAC;UAArC2O,aAAa,GAAAD,mBAAA;QACpB,IAAME,QAAQ,GAAGhY,IAAI,CAACiY,KAAK,CACvBjY,IAAI,CAACT,GAAG,CAACyV,IAAI,GAAG3V,CAAC,GAAG0E,MAAM,GAAGmR,MAAM,GAAG6C,aAAa,EAAEtb,KAAK,CAACI,YAAY,GAAGqX,OAAO,CAAClV,MAAM,CAAC,CAC5F;QACDqP,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG6F,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpCxF,iBAAiB,CACbwF,OAAO,EACPA,OAAO,CAACjV,GAAG,CAAC,UAACC,CAAC;UAAA,OAAKc,IAAI,CAACiY,KAAK,CAACD,QAAQ,GAAG9D,OAAO,CAAClV,MAAM,CAAC;UAAC,CAC5D;;MAEL;;IAGJ,IAAIiQ,SAAS,EAAE;MACX,IAAIN,kBAAkB,EAAE;QACpB,IAAQqG,MAAI,GAA8B/F,SAAS,CAA3C+F,IAAI;UAAEjR,OAAM,GAAsBkL,SAAS,CAArClL,MAAM;UAAEmR,QAAM,GAAcjG,SAAS,CAA7BiG,MAAM;UAAEhB,SAAO,GAAKjF,SAAS,CAArBiF,OAAO;QACrC,IAAAgE,mBAAA,GAA0BvG,iBAAiB,CAACvI,CAAC,CAAC;UAArC2O,cAAa,GAAAG,mBAAA;QACtB,IAAMC,SAAS,GAAGnY,IAAI,CAACiY,KAAK,CACxBjY,IAAI,CAACT,GAAG,CAACyV,MAAI,GAAG7T,CAAC,GAAG4C,OAAM,GAAGmR,QAAM,GAAG6C,cAAa,EAAEtb,KAAK,CAACK,aAAa,GAAGoX,SAAO,CAAClV,MAAM,CAAC,CAC7F;QACDsP,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAG4F,SAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjCvF,kBAAkB,CACduF,SAAO,EACPA,SAAO,CAACjV,GAAG,CAAC,UAACC,CAAC;UAAA,OAAKiZ,SAAS,GAAGjE,SAAO,CAAClV,MAAM;UAAC,CACjD;;MAEL;;IAGJ,IAAI+Q,iBAAiB,EAAE;MACnB,IAAOhM,QAAM,GAAIxC,SAAS;MAC1B,IAAMyC,IAAI,GAAG+O,WAAW,CAACzB,EAAE,CAAC;MAE5B,IAAO8G,OAAO,GAAarU,QAAM;QAAjBsU,OAAO,GAAItU,QAAM;MACjC,IAAOuU,KAAK,GAAWtU,IAAI;QAAbuU,KAAK,GAAIvU,IAAI;MAE3B,IAAIkM,oBAAoB,EAAE;QACtB/B,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CACb,CACI,CAAC,CAAC,CAAC,EAAEkK,OAAO,CAAC,EACb,CAAC,CAAC,CAAC,EAAErY,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEgZ,KAAK,CAAC,CAAC,CAC3B,EACD,KAAK,CACR;OACJ,MAAM,IAAIlI,uBAAuB,EAAE;QAChClC,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CACb,CACI,CAACiK,OAAO,EAAE,CAAC,CAAC,CAAC,EACb,CAACpY,IAAI,CAACT,GAAG,CAAC,CAAC,EAAE+Y,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAC3B,EACD,KAAK,CACR;OACJ,MAAM;QACHnK,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACpO,KAAK,CAACgE,QAAM,EAAE/I,MAAM,CAAC,EAAE+E,KAAK,CAACiE,IAAI,EAAEhJ,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;;;IAIhF,IAAI4U,YAAY,EAAE;MACdvK,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,WAAW;MAE/C,IAAA+F,YAAA,GAAuBzF,WAAW,CAACzB,EAAE,CAAC;QAA/BhF,KAAK,GAAAkM,YAAA;QAAEjM,KAAK,GAAAiM,YAAA;MACnB,IAAAC,oBAAA,GAAmChX,kBAAkB,CAACF,SAAS,CAAC;QAAAmX,qBAAA,GAAAD,oBAAA;QAA1D7E,KAAI,GAAA8E,qBAAA;QAAE7E,KAAI,GAAA6E,qBAAA;QAAAC,sBAAA,GAAAF,oBAAA;QAAIjM,KAAI,GAAAmM,sBAAA;QAAElM,KAAI,GAAAkM,sBAAA;MAG9B,IAAIC,SAAS,GAAG5Y,IAAI,CAACV,GAAG,CAACgN,KAAK,GAAGsH,KAAI,EAAEpH,KAAI,GAAGF,KAAK,EAAE,CAAC,CAAC;MACvD,IAAIuM,SAAS,GAAG7Y,IAAI,CAACV,GAAG,CAACiN,KAAK,GAAGsH,KAAI,EAAEpH,KAAI,GAAGF,KAAK,EAAE,CAAC,CAAC;MAEvD,IAAI/J,mBAAmB,CAACjB,SAAS,CAAC,IAAIqX,SAAS,GAAGC,SAAS,EAAE;QACzD,IAAItM,KAAK,GAAGsH,KAAI,EAAE;UACdA,KAAI,GAAGtH,KAAK;SACf,MAAM,IAAIA,KAAK,GAAGE,KAAI,EAAE;UACrBA,KAAI,GAAGF,KAAK;;OAEnB,MAAM;QACH,IAAID,KAAK,GAAGsH,KAAI,EAAE;UACdA,KAAI,GAAGtH,KAAK;SACf,MAAM,IAAIA,KAAK,GAAGE,KAAI,EAAE;UACrBA,KAAI,GAAGF,KAAK;;;MAIpByB,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAG,CACf,CAAC6F,KAAI,EAAEC,KAAI,CAAC,EACZ,CAACrH,KAAI,EAAEC,KAAI,CAAC,CACf,CAAC;;IAGN,IAAI0C,UAAU,IAAIG,OAAO,EAAE;MACvB,IAAOjQ,EAAC,GAAOiS,EAAE;QAAPnQ,EAAC,GAAImQ,EAAE;MACjB,IAAInC,UAAU,EAAE;QACZ,IAAM7C,MAAK,GAAGtM,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEkX,aAAa,CAACpX,EAAC,EAAE,GAAG,CAAC,CAAC;QAChD,IAAMwX,eAAe,GAAGvK,MAAK,IAAIsH,IAAI,IAAItH,MAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAMsK,WAAW,GAAGrM,qBAAqB,CAAC6B,MAAK,EAAEiB,eAAe,CAAC;QAEjE,IAAQxJ,QAAM,GAAaoL,UAAU,CAA7BpL,MAAM;UAAEmR,QAAM,GAAK/F,UAAU,CAArB+F,MAAM;QACtB,IAAM4D,KAAK,GAAGzZ,EAAC,GAAG0E,QAAM;QACxB,IAAAgV,mBAAA,GAAwBpH,iBAAiB,CAACvI,CAAC,CAAC;UAArC2O,eAAa,GAAAgB,mBAAA;QAEpB9K,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAAC6K,KAAK,GAAGf,eAAa,GAAG7C,QAAM,EAAE,CAAC,CAAC,CAAC;QACzDhH,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CACd2I,eAAe,IAAIC,WAAW,GACxB,IAAI,GACJ,CACI,CAACxK,MAAK,EAAE,CAAC,CAAC,CAAC,EACX,CAACA,MAAK,EAAE,CAAC,CAAC,CAAC,CACd,CACV;;MAEL,IAAIgD,OAAO,EAAE;QACT,IAAM/C,MAAK,GAAGvM,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEmX,UAAU,CAACvV,EAAC,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAM0V,iBAAe,GAAGtK,MAAK,IAAIsH,IAAI,IAAItH,MAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAMqK,aAAW,GAAGrM,qBAAqB,CAAC8B,MAAK,EAAEiB,YAAY,CAAC;QAE9D,IAAQzJ,QAAM,GAAauL,OAAO,CAA1BvL,MAAM;UAAEmR,QAAM,GAAK5F,OAAO,CAAlB4F,MAAM;QACtB,IAAM4D,MAAK,GAAG3X,EAAC,GAAG4C,QAAM;QACxB,IAAAiV,mBAAA,GAA0BrH,iBAAiB,CAACvI,CAAC,CAAC;UAArC2O,eAAa,GAAAiB,mBAAA;QAEtB/K,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAAC,CAAC,EAAE6K,MAAK,GAAGf,eAAa,GAAG7C,QAAM,CAAC,CAAC;QACzDhH,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CACd2I,iBAAe,IAAIC,aAAW,GACxB,IAAI,GACJ,CACI,CAAC,CAAC,CAAC,EAAEvK,MAAK,CAAC,EACX,CAAC,CAAC,CAAC,EAAEA,MAAK,CAAC,CACd,CACV;;;GAGZ,EACD,CACI0E,gBAAgB,EAChBU,iBAAiB,EACjBI,WAAW,EACXrD,iBAAiB,EACjBC,kBAAkB,EAClBX,mBAAmB,EACnBC,kBAAkB,EAClBC,kBAAkB,EAClBC,iBAAiB,EACjBJ,gBAAgB,EAChBO,eAAe,EACfD,kBAAkB,EAClBd,eAAe,EACfC,YAAY,CACf,CACJ;EAED,IAAMyL,OAAO,GAAGxS,WAAW,CACvB,UAAC2C,CAAa;IACV,IAAMkI,EAAE,GAAGL,gBAAgB,CAAC7H,CAAC,CAAC;IAC9B,IAAI,CAACkI,EAAE,EAAE;IAET,IAAM4H,QAAQ,GAAGnH,WAAW,CAACT,EAAE,CAAC;IAGhC,IAAI7B,WAAW,IAAIyJ,QAAQ,EAAE;MACzB,IAAI7Y,eAAe,CAACoP,WAAW,CAAC/H,GAAG,EAAEwR,QAAQ,CAACxR,GAAG,CAAC,EAAE;QAAA,IAAAyR,cAAA,EAAAC,qBAAA;QAChDF,QAAQ,aAARA,QAAQ,wBAAAC,cAAA,GAARD,QAAQ,CAAE1R,IAAI,cAAA2R,cAAA,wBAAAC,qBAAA,GAAdD,cAAA,CAAgBF,OAAO,cAAAG,qBAAA,uBAAvBA,qBAAA,CAAA3F,IAAA,CAAA0F,cAAA,EAA0B/P,CAAC,CAAC;;;IAIpCsG,cAAc,CAAC,IAAI,CAAC;GACvB,EACD,CAACuB,gBAAgB,EAAEc,WAAW,EAAEtC,WAAW,CAAC,CAC/C;EAED,IAAM4J,aAAa,GAAG5S,WAAW,CAC7B,UAAC2C,CAAa;IACV,IAAAkQ,aAAA,GAKIxI,GAAG,CAJHE,OAAO;MACHzP,SAAS,GAAA+X,aAAA,CAAT/X,SAAS;MAAAgY,qBAAA,GAAAD,aAAA,CACTlM,UAAU;MAAI2F,WAAW,GAAAwG,qBAAA,CAAXxG,WAAW;MAAEF,aAAa,GAAA0G,qBAAA,CAAb1G,aAAa;MAAEC,UAAU,GAAAyG,qBAAA,CAAVzG,UAAU;MAAEE,UAAU,GAAAuG,qBAAA,CAAVvG,UAAU;MAAEC,UAAU,GAAAsG,qBAAA,CAAVtG,UAAU;IAIpF7J,CAAC,CAACgO,cAAc,EAAE;IAClB,IAAIhO,CAAC,CAACgN,QAAQ,EAAE;IAEhB,IAAM9E,EAAE,GAAGL,gBAAgB,CAAC7H,CAAC,CAAC;IAC9B,IAAI,CAACkI,EAAE,EAAE;IAET,IAAOjS,CAAC,GAAOiS,EAAE;MAAPnQ,CAAC,GAAImQ,EAAE;IAGjB,IAAMkI,OAAO,GAAGvG,UAAU,EAAE;IAC5B,IAAQE,OAAO,GAAK9F,YAAY,CAAxB8F,OAAO;IACf,IAAIzE,iBAAiB,IAAIvN,CAAC,GAAGqY,OAAO,EAAE;MAClC,IAAMC,SAAS,GAAG,EAAE;MAEpB,SAAAC,UAAA,GAAAxH,+BAAA,CAAoBiB,OAAO,GAAAwG,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAtH,IAAA,GAAE;QAAA,IAAlB3I,KAAK,GAAAkQ,MAAA,CAAArH,KAAA;QACZ,IAAM+C,IAAI,GAAGxC,aAAa,CAACpJ,KAAK,EAAE,CAAC,CAAC;QAEpC,IAAIzJ,IAAI,CAACsV,GAAG,CAACD,IAAI,GAAGhW,CAAC,CAAC,GAAG5C,KAAK,CAACM,UAAU,IAAIiQ,aAAa,CAACvD,KAAK,CAAC,EAAE;UAC/D,IAAAmQ,oBAAA,GAAyBnY,kBAAkB,CAACF,SAAS,CAAC;YAAAsY,qBAAA,GAAAD,oBAAA;YAA9ChG,IAAI,GAAAiG,qBAAA;YAAAC,sBAAA,GAAAF,oBAAA;YAAIpN,IAAI,GAAAsN,sBAAA;UAGpB,IAAM5F,OAAO,GACTjR,iBAAiB,CAAC1B,SAAS,CAAC,IAAIkI,KAAK,IAAImK,IAAI,IAAInK,KAAK,IAAI+C,IAAI,GACxDlK,mBAAmB,CAACf,SAAS,CAAC,CAAC,UAACpC,CAAC;YAAA,OAAKA,CAAC;YAAC,GACxC,CAACsK,KAAK,CAAC;UAEjBgQ,SAAS,CAACtX,IAAI,CAAAC,KAAA,CAAdqX,SAAS,EAASvF,OAAO,CAAC;;;MAIlC,SAAA6F,GAAA,MAAAC,UAAA,GAAqBP,SAAS,EAAAM,GAAA,GAAAC,UAAA,CAAAhb,MAAA,EAAA+a,GAAA,IAAE;QAA3B,IAAME,MAAM,GAAAD,UAAA,CAAAD,GAAA;QACb1L,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG4L,MAAM,GAAG,CAAC,CAAC;;MAEpCvL,iBAAiB,CACb+K,SAAS,EACTA,SAAS,CAACxa,GAAG,CAAC,UAACgb,MAAM;QAAA,OAAKtM,gBAAgB,CAACsM,MAAM,CAAC;QAAC,CACtD;MACD,IAAIR,SAAS,CAACza,MAAM,EAAE;;IAI1B,IAAMkb,OAAO,GAAGlH,UAAU,EAAE;IAC5B,IAAQI,IAAI,GAAK/F,YAAY,CAArB+F,IAAI;IACZ,IAAIzE,kBAAkB,IAAItP,CAAC,GAAG6a,OAAO,EAAE;MACnC,IAAMT,WAAS,GAAG,EAAE;MAEpB,SAAAU,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAAhG,MAAA,CAAKhB,IAAI,GAAA+G,GAAA,GAAAC,KAAA,CAAApb,MAAA,EAAAmb,GAAA,IAAG;QAA9B,IAAM1Q,OAAK,GAAA2Q,KAAA,CAAAD,GAAA;QACZ,IAAM9E,MAAI,GAAG5L,OAAK,GAAG,CAAC,GAAGqJ,UAAU,CAAC,CAAC,CAAC,GAAGA,UAAU,CAACrJ,OAAK,EAAE,CAAC,CAAC;QAE7D,IAAIzJ,IAAI,CAACsV,GAAG,CAACD,MAAI,GAAGlU,CAAC,CAAC,GAAG1E,KAAK,CAACM,UAAU,IAAIkQ,UAAU,CAACxD,OAAK,CAAC,EAAE;UAC5D,IAAA4Q,oBAAA,GAA6B5Y,kBAAkB,CAACF,SAAS,CAAC;YAAA+Y,qBAAA,GAAAD,oBAAA;YAAhDxG,IAAI,GAAAyG,qBAAA;YAAAC,sBAAA,GAAAF,oBAAA;YAAM5N,IAAI,GAAA8N,sBAAA;UAGxB,IAAMrG,SAAO,GACTpR,cAAc,CAACvB,SAAS,CAAC,IAAIkI,OAAK,IAAIoK,IAAI,IAAIpK,OAAK,IAAIgD,IAAI,GACrDlK,gBAAgB,CAAChB,SAAS,CAAC,CAAC,UAACpC,CAAC;YAAA,OAAKA,CAAC;YAAC,GACrC,CAACsK,OAAK,CAAC;UAEjBgQ,WAAS,CAACtX,IAAI,CAAAC,KAAA,CAAdqX,WAAS,EAASvF,SAAO,CAAC;;;MAIlC,SAAAsG,GAAA,MAAAC,WAAA,GAAkBhB,WAAS,EAAAe,GAAA,GAAAC,WAAA,CAAAzb,MAAA,EAAAwb,GAAA,IAAE;QAAxB,IAAME,GAAG,GAAAD,WAAA,CAAAD,GAAA;QACVlM,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAGoM,GAAG,GAAG,CAAC,CAAC;;MAE9B/L,kBAAkB,CACd8K,WAAS,EACTA,WAAS,CAACxa,GAAG,CAAC,UAACyb,GAAG;QAAA,OAAK9M,iBAAiB,CAAC8M,GAAG,CAAC;QAAC,CACjD;MACD,IAAIjB,WAAS,CAACza,MAAM,EAAE;;IAG1B,IAAM2U,SAAS,GAAG5B,WAAW,CAACT,EAAE,CAAC;IACjC,IAAIqC,SAAS,EAAE;MACXtO,MAAM,CAAC2B,QAAQ,CAACwL,IAAI,CAAC/K,KAAK,CAACgL,MAAM,GAAG,SAAS;MAC7C;;IAGJ,IAAMkI,QAAQ,GAAG5H,WAAW,CAACzB,EAAE,CAAC;IAChC,IAAIzE,QAAQ,EAAEiB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;IAC1BD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG8M,QAAQ,CAAC;GACrB,EACD,CACI1J,gBAAgB,EAChBc,WAAW,EACXjE,QAAQ,EACRD,MAAM,EACNQ,kBAAkB,EAClBK,iBAAiB,EACjBf,gBAAgB,EAChBN,YAAY,EACZL,aAAa,CAChB,CACJ;EAED,IAAM4N,aAAa,GAAGnU,WAAW,CAC7B,UAAC2C,CAAa;IACV,IAAAyR,sBAAA,GAII/J,GAAG,CAHHE,OAAO,CACH5D,UAAU;MAAI2F,WAAW,GAAA8H,sBAAA,CAAX9H,WAAW;MAAEC,UAAU,GAAA6H,sBAAA,CAAV7H,UAAU;MAAEC,UAAU,GAAA4H,sBAAA,CAAV5H,UAAU;IAIzD,IAAM3B,EAAE,GAAGL,gBAAgB,CAAC7H,CAAC,CAAC;IAC9B,IAAI,CAACkI,EAAE,EAAE;IAET,IAAOjS,CAAC,GAAOiS,EAAE;MAAPnQ,CAAC,GAAImQ,EAAE;IACjB,IAAIjS,CAAC,IAAI2T,UAAU,EAAE,IAAI7R,CAAC,IAAI8R,UAAU,EAAE,EAAE;MACxC;;IAIJ,IAAM/G,IAAI,GAAG6G,WAAW,CAACzB,EAAE,CAAC;IAC5B,IAAI,CAAC5N,sBAAsB,CAACnC,SAAS,EAAE2K,IAAI,CAAC,EAAE;MAC1CiC,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACjC,IAAI,EAAEA,IAAI,CAAC,CAAC;;IAGrC+K,aAAa,CAAC7N,CAAQ,CAAC;IAEvB,IAAOkD,KAAK,GAAWJ,IAAI;MAAbK,KAAK,GAAIL,IAAI;IAC3B,IAAM4O,KAAK,GAAAC,QAAA,KACJ3R,CAAC;MACJkD,KAAK,EAALA,KAAK;MACLC,KAAK,EAALA;MACH;IACDqC,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGkM,KAAK,CAAC;GACxB,EACD,CAAC7J,gBAAgB,EAAE9C,iBAAiB,EAAE8I,aAAa,EAAErI,YAAY,CAAC,CACrE;EAED,IAAMoM,aAAa,GAAG;IAClBzI,cAAc,EAAdA,cAAc;IACdG,aAAa,EAAbA,aAAa;IACbuE,aAAa,EAAbA,aAAa;IACbX,WAAW,EAAXA,WAAW;IACX2C,OAAO,EAAPA,OAAO;IACPI,aAAa,EAAbA,aAAa;IACbuB,aAAa,EAAbA;GACH;EAED,OAAO;IAAEhK,YAAY,EAAZA,YAAY;IAAEoK,aAAa,EAAbA;GAAe;AAC1C,CAAC;AAED,IAAMpE,kBAAkB,GAAG,SAArBA,kBAAkBA,CACpBla,QAAmB,EACnB6E,SAAoB,EACpBuL,UAAwD,EACxDvB,QAAsC,EACtCwB,YAAkD;EAElD,IAAAkO,oBAAA,GAAiCxZ,kBAAkB,CAAC/E,QAAQ,CAAC;IAAAwe,qBAAA,GAAAD,oBAAA;IAArDE,GAAG,GAAAD,qBAAA;IAAEE,GAAG,GAAAF,qBAAA;IAAAG,sBAAA,GAAAJ,oBAAA;IAAIK,GAAG,GAAAD,sBAAA;IAAEE,GAAG,GAAAF,sBAAA;EAC5B,IAAAG,oBAAA,GAAiC/Z,kBAAkB,CAACF,SAAS,CAAC;IAAAka,qBAAA,GAAAD,oBAAA;IAAtDE,GAAG,GAAAD,qBAAA;IAAEE,GAAG,GAAAF,qBAAA;IAAAG,sBAAA,GAAAJ,oBAAA;IAAIK,GAAG,GAAAD,sBAAA;IAAEE,GAAG,GAAAF,sBAAA;EAE5B,IAAIG,GAAG,GAAGZ,GAAG;EACb,IAAIa,GAAG,GAAGZ,GAAG;EACb,IAAIa,GAAG,GAAGX,GAAG;EACb,IAAIY,GAAG,GAAGX,GAAG;EAEb,IAAM5E,OAAO,GAAa,EAAE;EAI5B,IAAIsF,GAAG,GAAGF,GAAG,KAAKF,GAAG,GAAGH,GAAG,EAAE;IAEzB,IAAIM,GAAG,KAAKL,GAAG,EAAE;MACbK,GAAG,GAAGF,GAAG,GAAG,CAAC;KAChB,MAAM;MACHI,GAAG,GAAGP,GAAG,GAAG,CAAC;;IAEjB,IAAII,GAAG,KAAK,CAAC,CAAC,IAAIE,GAAG,KAAK,CAAC,CAAC,EAAE;MAC1B,IAAAE,qBAAA,GAAe7Q,0BAA0B,CAACC,QAAQ,CAAC;QAA5CiB,IAAI,GAAA2P,qBAAA;MACXJ,GAAG,GAAG,CAAC;MACPE,GAAG,GAAGzP,IAAI;;IAEd,IAAI4P,IAAI,GAAGT,GAAG;IACd,KAAK,IAAIxa,CAAC,GAAG6a,GAAG,EAAE7a,CAAC,IAAI+a,GAAG,EAAE/a,CAAC,EAAE,EAAE;MAC7B,KAAK,IAAI9B,CAAC,GAAG0c,GAAG,EAAE1c,CAAC,IAAI4c,GAAG,EAAE5c,CAAC,EAAE,EAAE;QAC7B,IAAMiT,KAAK,GAAGxF,UAAU,CAACzN,CAAC,EAAE+c,IAAI,CAAC;QACjC,IAAI,CAACrP,YAAY,CAAC1N,CAAC,EAAE8B,CAAC,CAAC,EAAE;UACrBwV,OAAO,CAACxU,IAAI,CAAC;YAAE9C,CAAC,EAAEA,CAAC;YAAE8B,CAAC,EAAEA,CAAC;YAAEmR,KAAK,EAAEA,KAAK;YAAE+J,MAAM,EAAE;cAAEhd,CAAC,EAAEA,CAAC;cAAE8B,CAAC,EAAEib;;WAAQ,CAAC;;;MAG7EA,IAAI,GAAGA,IAAI,GAAG,CAAC;MACf,IAAIA,IAAI,GAAGN,GAAG,EAAE;QACZM,IAAI,GAAGT,GAAG;;;GAGrB,MAAM;IAEH,IAAII,GAAG,KAAKL,GAAG,EAAE;MACbK,GAAG,GAAGF,GAAG,GAAG,CAAC;KAChB,MAAM;MACHI,GAAG,GAAGP,GAAG,GAAG,CAAC;;IAEjB,IAAIM,GAAG,KAAK,CAAC,CAAC,IAAIE,GAAG,KAAK,CAAC,CAAC,EAAE;MAC1B,IAAAI,sBAAA,GAAiBhR,0BAA0B,CAACC,QAAQ,CAAC;QAA5CkB,IAAI,GAAA6P,sBAAA;MACbN,GAAG,GAAG,CAAC;MACPE,GAAG,GAAGzP,IAAI;;IAEd,IAAI8P,IAAI,GAAGb,GAAG;IACd,KAAK,IAAIrc,GAAC,GAAG0c,GAAG,EAAE1c,GAAC,IAAI4c,GAAG,EAAE5c,GAAC,EAAE,EAAE;MAC7B,KAAK,IAAI8B,GAAC,GAAG6a,GAAG,EAAE7a,GAAC,IAAI+a,GAAG,EAAE/a,GAAC,EAAE,EAAE;QAC7B,IAAMmR,MAAK,GAAGxF,UAAU,CAACyP,IAAI,EAAEpb,GAAC,CAAC;QACjC,IAAI,CAAC4L,YAAY,CAAC1N,GAAC,EAAE8B,GAAC,CAAC,EAAE;UACrBwV,OAAO,CAACxU,IAAI,CAAC;YAAE9C,CAAC,EAAEA,GAAC;YAAE8B,CAAC,EAAEA,GAAC;YAAEmR,KAAK,EAAEA,MAAK;YAAE+J,MAAM,EAAE;cAAEhd,CAAC,EAAEkd,IAAI;cAAEpb,CAAC,EAAEA;;WAAK,CAAC;;;MAG7Eob,IAAI,GAAGA,IAAI,GAAG,CAAC;MACf,IAAIA,IAAI,GAAGV,GAAG,EAAE;QACZU,IAAI,GAAGb,GAAG;;;;EAKtB,OAAO/E,OAAO;AAClB,CAAC;;ACpkCM,IAAM6F,WAAW,GAAG,SAAdA,WAAWA,CACpBC,kBAA2B,EAC3BC,UAAqC,EACrC3P,YAAkD,EAClDf,WAAwD,EACxD2O,QAAY,EACZ9N,QAAiB,EACjB8P,OAAgB,EAChBC,YAAuB,EACvBrb,SAAoB,EAEpBsM,MAAyD,EACzDC,QAAqB,EACrB+O,QAAqB,EACrB1O,iBAAwF,EACxFC,aAAwC,EACxC0O,eAAwC,EACxCvO,QAAsC;EAEtC,IAAMwO,cAAc,GAAG,SAAjBA,cAAcA,CAAI3T,CAAgB;IACpC,IAAIA,CAAC,CAACQ,GAAG,KAAK,QAAQ,EAAE;MACpBiT,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;MACZ;;IAGJ,IAAM1c,SAAS,GACXiJ,CAAC,CAACQ,GAAG,KAAK,OAAO,GAAG,MAAM,GAAGR,CAAC,CAACQ,GAAG,KAAK,KAAK,GAAG,OAAO,GAAG6S,kBAAkB,GAAGpe,UAAU,CAAC+K,CAAC,CAACQ,GAAG,CAAC,GAAG,IAAI;IAE1G,IAAIzJ,SAAS,EAAE;MACXiJ,CAAC,CAACgO,cAAc,EAAE;MAClB,IAAMnL,IAAI,GAAG/L,gBAAgB,CAACC,SAAS,CAAC;MACxC,IAAM6D,IAAI,GAAGjE,KAAK,CAACL,KAAK,CAACib,QAAQ,EAAE1O,IAAI,CAAC,EAAEjR,MAAM,CAAC;MACjD8S,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;MACZK,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACnK,IAAI,EAAEA,IAAI,CAAC,CAAC;;GAExC;EAED,IAAMgZ,aAAa,GAAG,SAAhBA,aAAaA,CAAI5T,CAAgB;IACnC,IAAIyD,QAAQ,IAAI4P,kBAAkB,IAAIrT,CAAC,CAACQ,GAAG,IAAIvL,UAAU,EAAE;MACvDyP,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;MACZ;;IAGJ,IAAI,CAAC1E,CAAC,CAAC6T,OAAO,IAAI7T,CAAC,CAAC8T,OAAO,KAAKC,MAAM,CAACC,YAAY,CAAChU,CAAC,CAACiU,KAAK,CAAC,CAACC,WAAW,EAAE,KAAK,GAAG,EAAE;MAChF;;IAIJ,IAAI,CAAClU,CAAC,CAAC6T,OAAO,IAAI7T,CAAC,CAAC8T,OAAO,KAAKC,MAAM,CAACC,YAAY,CAAChU,CAAC,CAACiU,KAAK,CAAC,CAACC,WAAW,EAAE,KAAK,GAAG,EAAE;MAChFR,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAG,KAAK,CAAC;MACxB;;IAGJ,IAAI,CAAC1T,CAAC,CAAC6T,OAAO,IAAI7T,CAAC,CAAC8T,OAAO,KAAKC,MAAM,CAACC,YAAY,CAAChU,CAAC,CAACiU,KAAK,CAAC,CAACC,WAAW,EAAE,KAAK,GAAG,EAAE;MAChFR,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAG,IAAI,CAAC;MACvB;;IAGJ,IAAI1T,CAAC,CAACQ,GAAG,KAAK,WAAW,IAAIR,CAAC,CAACQ,GAAG,KAAK,QAAQ,EAAE;MAC7C,IAAApI,mBAAA,GAA2BC,kBAAkB,CAACF,SAAS,CAAC;QAAAG,oBAAA,GAAAF,mBAAA;QAAlD+b,EAAE,GAAA7b,oBAAA;QAAE8b,EAAE,GAAA9b,oBAAA;QAAAC,qBAAA,GAAAH,mBAAA;QAAIic,EAAE,GAAA9b,qBAAA;QAAE+b,EAAE,GAAA/b,qBAAA;MACtB,IAAImB,cAAc,CAACvB,SAAS,CAAC,EAAE;QAC3Bgc,EAAE,GAAG,CAAC;QACNE,EAAE,GAAGjiB,oBAAoB;;MAE7B,IAAIyH,iBAAiB,CAAC1B,SAAS,CAAC,EAAE;QAC9Bic,EAAE,GAAG,CAAC;QACNE,EAAE,GAAGliB,oBAAoB;;MAG7B,IAAMmb,OAAO,GAAa,EAAE;MAC5B,KAAK,IAAIxV,CAAC,GAAGqc,EAAE,EAAErc,CAAC,IAAIuc,EAAE,EAAEvc,CAAC,EAAE,EAAE;QAC3B,KAAK,IAAI9B,CAAC,GAAGke,EAAE,EAAEle,CAAC,IAAIoe,EAAE,EAAEpe,CAAC,EAAE,EAAE;UAC3B,IAAI,CAAC0N,YAAY,CAAC1N,CAAC,EAAE8B,CAAC,CAAC,EAAE;YACrBwV,OAAO,CAACxU,IAAI,CAAC;cAAE9C,CAAC,EAAEA,CAAC;cAAE8B,CAAC,EAAEA,CAAC;cAAEmR,KAAK,EAAE;aAAM,CAAC;;;;MAKrD/D,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGoI,OAAO,CAAC;MACnB;;IAIJ,IAAIpT,gBAAgB,CAAChC,SAAS,CAAC,EAAE;MAC7B;;IAGJ,IACK6H,CAAC,CAACuU,OAAO,IAAI,EAAE,IAAIvU,CAAC,CAACuU,OAAO,IAAI,EAAE,IAClCvU,CAAC,CAACuU,OAAO,IAAI,EAAE,IAAIvU,CAAC,CAACuU,OAAO,IAAI,GAAI,IACpCvU,CAAC,CAACuU,OAAO,IAAI,EAAE,IAAIvU,CAAC,CAACuU,OAAO,IAAI,EAAG,IACpCvU,CAAC,CAACQ,GAAG,KAAK,OAAO,IACjBR,CAAC,CAACQ,GAAG,KAAK,GAAG,IACbR,CAAC,CAACQ,GAAG,KAAK,GAAG,IACbR,CAAC,CAACQ,GAAG,KAAK,GAAG,EACf;MACE,IAAOsC,IAAI,GAAI3K,SAAS;MACxB,IAAO+K,KAAK,GAAWJ,IAAI;QAAbK,KAAK,GAAIL,IAAI;MAC3B,IAAIa,YAAY,CAACT,KAAK,EAAEC,KAAK,CAAC,EAAE;QAC5B;;MAGJ,IAAInD,CAAC,CAACQ,GAAG,KAAK,OAAO,EAAER,CAAC,CAACgO,cAAc,EAAE;MACzCvJ,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG3B,IAAI,EAAE9C,CAAC,CAACQ,GAAG,KAAK,OAAO,CAAC;MACjC;;IAGJR,CAAC,CAACgO,cAAc,EAAE;IAElB,IAAIhO,CAAC,CAACQ,GAAG,IAAIvL,UAAU,EAAE;MACrB,IAAK0F,MAAM,GAAU6Y,YAAY;QAApB5Y,IAAI,GAAI4Y,YAAY;MAEjC,IAAMzc,SAAS,GAAG9B,UAAU,CAAC+K,CAAC,CAACQ,GAAG,CAAC;MACnC,IAAMqC,IAAI,GAAG/L,gBAAgB,CAACC,SAAS,CAAC;MACxC,IAAM2Y,KAAK,GAAG1P,CAAC,CAACgN,QAAQ;MAExB,IAAIhN,CAAC,CAAC6T,OAAO,IAAI7T,CAAC,CAAC8T,OAAO,EAAE;QACxBlZ,IAAI,GAAG+H,iBAAiB,CAACC,WAAW,EAAEhI,IAAI,EAAE7D,SAAS,CAAC;OACzD,MAAM;QAEH,IAAMwJ,KAAK,GAAOmP,KAAK,GACjBhW,cAAc,CAACvB,SAAS,CAAC,GACrB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACP0B,iBAAiB,CAAC1B,SAAS,CAAC,GAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACPrG,OAAO,GACbF,MAAM;QACZgJ,IAAI,GAAGjE,KAAK,CAACL,KAAK,CAACsE,IAAI,EAAEiI,IAAI,CAAC,EAAEtC,KAAK,CAAC;;MAG1C,IAAI,CAACmP,KAAK,EAAE;QACR/U,MAAM,GAAGC,IAAI;;MAGjBmK,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACpK,MAAM,EAAEC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;MAC/C;;GAEP;EAED,IAAM4Z,WAAW,GAAG,SAAdA,WAAWA;IACbxP,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,IAAI,CAAC;GACxB;EAED,IAAMyP,UAAU,GAAG,SAAbA,UAAUA;IACZzP,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,KAAK,CAAC;GACzB;EAGD0P,eAAe,CAAC;IACZ,IAAiBC,OAAO,GAAKrB,UAAU,CAA/B1L,OAAO;IACf,IAAI,CAAC+M,OAAO,EAAE;MACV;;IAEJ,IAAIlR,QAAQ,IAAI,CAAC8P,OAAO,EAAE;MACtB;;IAEJ,IAAI3V,QAAQ,CAACgX,aAAa,KAAKD,OAAO,EAAE;MACpC;;IAGJ,IAAME,aAAa,GAAIjX,QAAgB,CAACgX,aAAa,CAACE,OAAO,CAACZ,WAAW,EAAE;IAC3E,IACI,EACKW,aAAa,KAAK,KAAK,IAAKjX,QAAgB,CAACgX,aAAa,CAACG,eAAe,KAAK,MAAM,IACtFF,aAAa,KAAK,OAAO,IACzBA,aAAa,KAAK,UAAU,IAC5BA,aAAa,KAAK,QAAQ,CAC7B,EACH;MACEF,OAAO,CAACK,KAAK,CAAC;QAAEC,aAAa,EAAE;OAAM,CAAC;;GAE7C,EAAE,CAACxR,QAAQ,EAAE8P,OAAO,CAAC,CAAC;EAEvB,OAAO;IAAEI,cAAc,EAAdA,cAAc;IAAEa,WAAW,EAAXA,WAAW;IAAEC,UAAU,EAAVA,UAAU;IAAEb,aAAa,EAAbA;GAAe;AACrE,CAAC;;AC3LM,IAAMsB,SAAS,GAAG,SAAZA,SAASA,CAClBC,MAAU,EACVC,SAAa,EACbpR,UAAsB,EACtBqR,cAAqC,EACrCC,iBAA2C;EAE3C,OAAOjY,WAAW,CACd,UAAC2C,CAAU;IACP,IAAI,CAACA,CAAC,CAAC8H,MAAM,IAAI,EAAE9H,CAAC,CAAC8H,MAAM,YAAYC,OAAO,CAAC,EAAE;MAC7C;;IAEJ,IAAQwN,cAAc,GAAqBvR,UAAU,CAA7CuR,cAAc;MAAEC,cAAc,GAAKxR,UAAU,CAA7BwR,cAAc;IAGtC,IAAAC,MAAA,GAAyBhf,KAAK,CAAC+e,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAEA,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;MAAnFE,MAAM,GAAAD,MAAA;MAAEE,MAAM,GAAAF,MAAA;IAErB,IAAMvN,EAAE,GAAO,CAAClI,CAAC,CAAC8H,MAAM,CAACW,UAAU,GAAGiN,MAAM,EAAE1V,CAAC,CAAC8H,MAAM,CAACY,SAAS,GAAGiN,MAAM,CAAC;IAE1E,IAAM7S,IAAI,GAAGyS,cAAc,CAACrN,EAAE,CAAC;IAC/B,IAAI,CAAClR,QAAQ,CAAC8L,IAAI,EAAEqS,MAAM,CAAC,EAAE;MACzBE,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGvS,IAAI,CAAC;;IAG1B,IAAO7M,CAAC,GAAOiS,EAAE;MAAPnQ,CAAC,GAAImQ,EAAE;IACjB,IAAO0N,UAAU,GAAgBR,SAAS;MAAvBS,UAAU,GAAIT,SAAS;IAC1C,IAAMU,KAAK,GAAGF,UAAU,GAAG3f,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAC1C,IAAM8f,KAAK,GAAGF,UAAU,GAAG9d,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAC1C,IAAI+d,KAAK,GAAG,CAAC,IAAIC,KAAK,GAAG,CAAC,EAAE;MACxBT,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG5e,KAAK,CAAC0e,SAAS,EAAE,CAACU,KAAK,EAAEC,KAAK,CAAC,CAAC,CAAC;;GAE5D,EACD,CAAC/R,UAAU,EAAEqR,cAAc,EAAEC,iBAAiB,CAAC,CAClD;AACL,CAAC;AAID,AAAO,IAAMU,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAQ,EAAEd,MAAU,EAAEe,MAAU,EAAEC,QAAY,EAAEnS,UAAsB;EACjG,IAAKoS,IAAI,GAAUjB,MAAM;IAAdkB,IAAI,GAAIlB,MAAM;EACzB,IAAOmB,OAAO,GAAaJ,MAAM;IAAjBK,OAAO,GAAIL,MAAM;EACjC,IAAOM,UAAU,GAAaL,QAAQ;IAAnBM,OAAO,GAAIN,QAAQ;EAEtC,IAAQO,gBAAgB,GAAqD1S,UAAU,CAA/E0S,gBAAgB;IAAEC,gBAAgB,GAAmC3S,UAAU,CAA7D2S,gBAAgB;IAAEC,aAAa,GAAoB5S,UAAU,CAA3C4S,aAAa;IAAEC,aAAa,GAAK7S,UAAU,CAA5B6S,aAAa;EAExE,IAAAC,cAAA,GAGIC,aAAa,CAACd,IAAI,EAAE,CAACG,IAAI,EAAEC,IAAI,CAAC,EAAEH,MAAM,EAAElS,UAAU,CAAC;IAAAgT,mBAAA,GAAAF,cAAA,CAFrD7K,IAAI;IAAGgL,QAAQ,GAAAD,mBAAA;IAAEE,OAAO,GAAAF,mBAAA;IAAAG,qBAAA,GAAAL,cAAA,CACxBM,QAAQ;IAAGC,OAAO,GAAAF,qBAAA;IAAEG,OAAO,GAAAH,qBAAA;EAI/B,IAAIF,QAAQ,IAAIT,UAAU,EAAE;IACxB,IAAMe,SAAS,GAAGZ,gBAAgB,CAACH,UAAU,CAAC,GAAGG,gBAAgB,CAACP,IAAI,GAAGE,OAAO,CAAC;IACjFF,IAAI,GAAGxf,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEugB,gBAAgB,CAACC,gBAAgB,CAACP,IAAI,GAAGE,OAAO,CAAC,GAAGe,OAAO,GAAGE,SAAS,CAAC,GAAGjB,OAAO,GAAG,CAAC,CAAC;;EAE9G,IAAIY,OAAO,IAAIT,OAAO,EAAE;IACpB,IAAMc,UAAS,GAAGV,aAAa,CAACJ,OAAO,CAAC,GAAGI,aAAa,CAACR,IAAI,GAAGE,OAAO,CAAC;IACxEF,IAAI,GAAGzf,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEygB,aAAa,CAACC,aAAa,CAACR,IAAI,GAAGE,OAAO,CAAC,GAAGe,OAAO,GAAGC,UAAS,CAAC,GAAGhB,OAAO,GAAG,CAAC,CAAC;;EAGxG,OAAO,CAACH,IAAI,EAAEC,IAAI,CAAC;AACvB,CAAC;AAGD,AAAO,IAAMU,aAAa,GAAG,SAAhBA,aAAaA,CACtBd,IAAQ,EACRd,MAAU,EACVe,MAAU,EACVlS,UAAsB;EAKtB,IAAQwR,cAAc,GAAKxR,UAAU,CAA7BwR,cAAc;EAEtB,IAAOvf,CAAC,GAAOkf,MAAM;IAAXpd,CAAC,GAAIod,MAAM;EACrB,IAAOxW,CAAC,GAAOsX,IAAI;IAATrX,CAAC,GAAIqX,IAAI;EACnB,IAAAuB,eAAA,GAA2BhC,cAAc,CAACU,MAAM,CAAC;IAA1CuB,OAAO,GAAAD,eAAA;IAAEE,OAAO,GAAAF,eAAA;EAEvB,IAAMH,OAAO,GAAG1Y,CAAC,GAAG8Y,OAAO;EAC3B,IAAMH,OAAO,GAAG1Y,CAAC,GAAG8Y,OAAO;EAE3B,IAAMT,QAAQ,GAAGhhB,CAAC,GAAGigB,MAAM,CAAC,CAAC,CAAC;EAC9B,IAAMgB,OAAO,GAAGnf,CAAC,GAAGme,MAAM,CAAC,CAAC,CAAC;EAE7B,OAAO;IACHjK,IAAI,EAAE,CAACgL,QAAQ,EAAEC,OAAO,CAAC;IACzBE,QAAQ,EAAE,CAACC,OAAO,EAAEC,OAAO;GAC9B;AACL,CAAC;AAED,AAAO,IAAMK,YAAY,GAAG,SAAfA,YAAYA,CACrBC,OAAuB,EACvB9U,IAAQ,EACRmT,IAAQ,EACRC,MAAU,EACVf,MAAU,EACVC,SAAa,EACbpR,UAAsB,EACtB/L,QAA6C;EAE7C,IAAOhC,CAAC,GAAO6M,IAAI;IAAT/K,CAAC,GAAI+K,IAAI;EACnB,IAAOnE,CAAC,GAAOsX,IAAI;IAATrX,CAAC,GAAIqX,IAAI;EACnB,IAAO4B,OAAO,GAAa1C,MAAM;IAAjB2C,OAAO,GAAI3C,MAAM;EAEjC,IAAQK,cAAc,GAA6CxR,UAAU,CAArEwR,cAAc;IAAEnO,WAAW,GAAgCrD,UAAU,CAArDqD,WAAW;IAAEoC,aAAa,GAAiBzF,UAAU,CAAxCyF,aAAa;IAAEC,UAAU,GAAK1F,UAAU,CAAzB0F,UAAU;EAE9D,IAAMqO,MAAM,GAAGvC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACrC,IAAMwC,MAAM,GAAGxC,cAAc,CAACU,MAAM,CAAC;EACrC,IAAOuB,OAAO,GAAaO,MAAM;IAAjBN,OAAO,GAAIM,MAAM;EAEjC,IAAAC,YAAA,GAAoB5Q,WAAW,CAACvE,IAAI,CAAC;IAA9BpL,IAAI,GAAAugB,YAAA;IAAEtgB,GAAG,GAAAsgB,YAAA;EAChB,IAAAC,aAAA,GAAwB7Q,WAAW,CAACvE,IAAI,EAAEjR,OAAO,CAAC;IAA3CgG,KAAK,GAAAqgB,aAAA;IAAEpgB,MAAM,GAAAogB,aAAA;EAEpB,IAAK9B,IAAI,GAAUjB,MAAM;IAAdkB,IAAI,GAAIlB,MAAM;EAGzB,IAAIzd,IAAI,IAAI+f,OAAO,EAAE;IACjBrB,IAAI,GAAGngB,CAAC,GAAGigB,MAAM,CAAC,CAAC,CAAC;;EAExB,IAAIve,GAAG,IAAI+f,OAAO,EAAE;IAChBrB,IAAI,GAAGte,CAAC,GAAGme,MAAM,CAAC,CAAC,CAAC;;EAIxB,IAAIre,KAAK,GAAG8G,CAAC,EAAE;IACX,IAAIsN,IAAI,GAAGpU,KAAK,GAAG8G,CAAC,GAAG8K,aAAa,CAAC2M,IAAI,CAAC;IAC1C,OAAO3M,aAAa,CAAC,EAAE2M,IAAI,CAAC,GAAGnK,IAAI,EAAE;;EAEzC,IAAInU,MAAM,GAAG8G,CAAC,EAAE;IACZ,IAAIqN,KAAI,GAAGnU,MAAM,GAAG8G,CAAC,GAAG8K,UAAU,CAAC2M,IAAI,CAAC;IACxC,OAAO3M,UAAU,CAAC,EAAE2M,IAAI,CAAC,GAAGpK,KAAI,EAAE;;EAItC,IAAMkM,SAAS,GAAO,CAAC/B,IAAI,IAAI,CAAC,GAAGA,IAAI,GAAGyB,OAAO,EAAExB,IAAI,IAAI,CAAC,GAAGA,IAAI,GAAGyB,OAAO,CAAC;EAE9E,IAAI,CAAC9gB,QAAQ,CAACmhB,SAAS,EAAEhD,MAAM,CAAC,EAAE;IAC9B,IAAMrJ,MAAM,GAAGrV,KAAK,CAAC+e,cAAc,CAAC2C,SAAS,CAAC,EAAEJ,MAAM,CAAC;IAEvD9f,QAAQ,CAACkgB,SAAS,EAAExhB,KAAK,CAACye,SAAS,EAAEtJ,MAAM,CAAC,CAAC;IAE7CsM,UAAU,CAAC;MACPC,oBAAoB,CAACT,OAAO,EAAEO,SAAS,EAAEnU,UAAU,CAAC;KACvD,CAAC;;AAEV,CAAC;AAED,AAAO,IAAMqU,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIT,OAAuB,EAAEU,UAAc,EAAEtU,UAAsB;EAChG,IAAQwR,cAAc,GAAKxR,UAAU,CAA7BwR,cAAc;EAEtB,IAAM1J,MAAM,GAAG0J,cAAc,CAAC8C,UAAU,CAAC;EACzC,IAAAC,OAAA,GAAyB9hB,KAAK,CAAC+e,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAEA,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAAnFE,MAAM,GAAA6C,OAAA;IAAE5C,MAAM,GAAA4C,OAAA;EAErB,IAAOC,OAAO,GAAa1M,MAAM;IAAjB2M,OAAO,GAAI3M,MAAM;EACjC8L,OAAO,CAACnP,UAAU,GAAG+P,OAAO,GAAG9C,MAAM;EACrCkC,OAAO,CAAClP,SAAS,GAAG+P,OAAO,GAAG9C,MAAM;AACxC,CAAC;;ACxJM,IAAM+C,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,SAAiB,EAAEC,YAAoB,EAAEC,KAAY;EACpF,IAAIA,KAAK,KAAK,MAAM,EAAE,OAAO,CAAC;EAC9B,IAAIA,KAAK,KAAK,OAAO,EAAE,OAAOF,SAAS,GAAGC,YAAY;EAEtD,OAAOhiB,IAAI,CAACiY,KAAK,CAAC,CAAC8J,SAAS,GAAGC,YAAY,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,AAAO,IAAME,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI9a,OAAiC,EAAEI,IAAqB;EACrF,IAAQN,KAAK,GAAKM,IAAI,CAAdN,KAAK;EACb,IAAIA,KAAK,IAAI,IAAI,EAAE,OAAOA,KAAK;EAE/B,IAAIM,IAAI,CAACG,OAAO,KAAK,QAAQ,EAAE;IAC3B,IAAQwa,IAAI,GAAK3a,IAAI,CAAb2a,IAAI;IACZ,IAAIA,IAAI,IAAI,IAAI,EAAE;MACd,IAAAC,oBAAA,GAA0Dhb,OAAO,CAACib,WAAW,CAACF,IAAI,CAACG,QAAQ,EAAE,CAAC;QAAtFC,qBAAqB,GAAAH,oBAAA,CAArBG,qBAAqB;QAAEC,sBAAsB,GAAAJ,oBAAA,CAAtBI,sBAAsB;MACrD,IAAMza,CAAC,GAAGya,sBAAsB,GAAGD,qBAAqB;MACxD,OAAOrb,KAAK,WAALA,KAAK,GAAIa,CAAC;;GAExB,MAAM;IACH,MAAM,IAAI0a,KAAK,CAAC,oDAAoD,CAAC;;EAEzE,OAAO,CAAC;AACZ,CAAC;AAED,AAAO,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAC9Btb,OAAiC,EACjCub,WAAiC,EACjCC,QAAgB,EAChBC,OAAe,EACfd,SAAiB,EACjBe,UAAkB;EAElB,IAAAC,qBAAA,GAA4EJ,WAAW,CAA/EK,WAAW;IAAXA,WAAW,GAAAD,qBAAA,cAAG,OAAO,GAAAA,qBAAA;IAAAE,qBAAA,GAA+CN,WAAW,CAAxDO,SAAS;IAATA,SAAS,GAAAD,qBAAA,cAAG,QAAQ,GAAAA,qBAAA;IAAAE,oBAAA,GAAyBR,WAAW,CAAlCS,OAAO;IAAPA,OAAO,GAAAD,oBAAA,cAAG,CAAC,GAAAA,oBAAA;IAAEE,KAAK,GAAKV,WAAW,CAArBU,KAAK;EAGvE,IAAMC,SAAS,GAAGD,KAAK,CAAChP,MAAM,CAAC,UAAC7M,IAAI;IAAA,OAAK,CAACA,IAAI,CAAC+b,QAAQ;IAAC;EAGxD,IAAMC,cAAc,GAAGb,WAAW,CAACU,KAAK,CAACpkB,GAAG,CAAC,UAACuI,IAAI;IAAA,OAAK0a,gBAAgB,CAAC9a,OAAO,EAAEI,IAAI,CAAC;IAAC;EAGvF,IAAMic,KAAK,GAAa,EAAE;EAC1B,IAAMC,KAAK,GAAa,EAAE;EAC1B,IAAMC,OAAO,GAAa,EAAE;EAE5B,IAAItkB,CAAC,GAAG,CAAC;EACTikB,SAAS,CAACM,OAAO,CAAC,UAACpc,IAAI,EAAErI,CAAC;IACtB,IAAM0kB,WAAW,GAAGrc,IAAI,CAACG,OAAO,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;IACrD,IAAMmc,aAAa,GAAGD,WAAW,KAAKrc,IAAI,CAACG,OAAO,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IACvE,IAAAoc,WAAA,GAMIvc,IAAI,CALJN,KAAK;MAALA,KAAK,GAAA6c,WAAA,cAAGP,cAAc,CAACrkB,CAAC,CAAC,GAAA4kB,WAAA;MAAAC,cAAA,GAKzBxc,IAAI,CAJJyc,QAAQ;MAARA,QAAQ,GAAAD,cAAA,cAAGH,WAAW,GAAAG,cAAA;MAAAE,gBAAA,GAItB1c,IAAI,CAHJ2c,UAAU;MAAVA,UAAU,GAAAD,gBAAA,cAAGJ,aAAa,GAAAI,gBAAA;MAAAE,gBAAA,GAG1B5c,IAAI,CAFJ9J,UAAU;MAAVA,UAAU,GAAA0mB,gBAAA,cAAG,CAAC,GAAAA,gBAAA;MAAAC,iBAAA,GAEd7c,IAAI,CADJ7J,WAAW;MAAXA,WAAW,GAAA0mB,iBAAA,cAAG,CAAC,GAAAA,iBAAA;IAGnBZ,KAAK,CAACthB,IAAI,CAAC+E,KAAK,CAAC;IACjBwc,KAAK,CAACvhB,IAAI,CAAC8hB,QAAQ,CAAC;IACpBN,OAAO,CAACxhB,IAAI,CAACgiB,UAAU,CAAC;IAExB9kB,CAAC,IAAI6H,KAAK,GAAGxJ,UAAU,GAAGC,WAAW,GAAGylB,OAAO;GAClD,CAAC;EAGF,IAAIkB,MAAM,GAAGvC,SAAS,GAAG1iB,CAAC,GAAG+jB,OAAO;EAGpC,IAAIkB,MAAM,GAAG,CAAC,IAAIC,OAAO,CAACD,MAAM,EAAEZ,KAAK,EAAED,KAAK,CAAC,EAAEa,MAAM,GAAG,CAAC;EAC3D,IAAIA,MAAM,GAAG,CAAC,IAAIE,UAAS,CAACF,MAAM,EAAEX,OAAO,EAAEF,KAAK,CAAC,EAAEa,MAAM,GAAG,CAAC;EAE/D,IAAAG,oBAAA,GAAsBC,mBAAmB,CAACJ,MAAM,EAAEhB,SAAS,CAACtkB,MAAM,EAAEgkB,WAAW,CAAC;IAAzE2B,IAAI,GAAAF,oBAAA;IAAEG,KAAK,GAAAH,oBAAA;EAClB,IAAMI,YAAY,GAAGF,IAAI,GAAGvB,OAAO;EAGnC,IAAM0B,SAAS,GAAGxB,SAAS,CACtBrkB,GAAG,CAAC,UAAA8lB,IAAA;IAAA,IAAG5d,MAAM,GAAA4d,IAAA,CAAN5d,MAAM;MAAA6d,cAAA,GAAAD,IAAA,CAAEvnB,SAAS;MAATA,SAAS,GAAAwnB,cAAA,cAAG,CAAC,GAAAA,cAAA;MAAAC,iBAAA,GAAAF,IAAA,CAAEtnB,YAAY;MAAZA,YAAY,GAAAwnB,iBAAA,cAAG,CAAC,GAAAA,iBAAA;IAAA,OAAO,CAAC9d,MAAM,WAANA,MAAM,GAAI2b,UAAU,IAAItlB,SAAS,GAAGC,YAAY;IAAC,CACvGynB,MAAM,CAAC,UAACvlB,CAAC,EAAEC,CAAC;IAAA,OAAKI,IAAI,CAACT,GAAG,CAACI,CAAC,EAAEC,CAAC,CAAC;IAAC;EAErC,IAAMulB,MAAM,GAAGnlB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEujB,UAAU,GAAGgC,SAAS,CAAC;EAClD,IAAM5D,OAAO,GAAGkE,kBAAkB,CAAClC,SAAS,CAAC,GAAGiC,MAAM;EAGtD,IAAIE,UAAU,GAAGT,KAAK;EACtB,OAAOtB,SAAS,CAACrkB,GAAG,CAAC,UAACuI,IAAI,EAAErI,CAAC;IACzB,IACYmmB,WAAW,GAMnB9d,IAAI,CANJL,MAAM;MAAAoe,iBAAA,GAMN/d,IAAI,CALJ9J,UAAU;MAAVA,UAAU,GAAA6nB,iBAAA,cAAG,CAAC,GAAAA,iBAAA;MAAAC,kBAAA,GAKdhe,IAAI,CAJJ7J,WAAW;MAAXA,WAAW,GAAA6nB,kBAAA,cAAG,CAAC,GAAAA,kBAAA;MAAAC,eAAA,GAIfje,IAAI,CAHJhK,SAAS;MAATA,SAAS,GAAAioB,eAAA,cAAG,CAAC,GAAAA,eAAA;MAAAC,kBAAA,GAGble,IAAI,CAFJ/J,YAAY;MAAZA,YAAY,GAAAioB,kBAAA,cAAG,CAAC,GAAAA,kBAAA;MAAAC,mBAAA,GAEhBne,IAAI,CADJoe,aAAa;MAAbA,aAAa,GAAAD,mBAAA,cAAGzC,SAAS,GAAAyC,mBAAA;IAG7B,IAAME,OAAO,GAAGnoB,UAAU,GAAGC,WAAW;IACxC,IAAMmoB,OAAO,GAAGtoB,SAAS,GAAGC,YAAY;IAExC,IAAM0J,MAAM,GAAGme,WAAW,WAAXA,WAAW,GAAIR,SAAS,GAAGgB,OAAO;IAEjD,IAAMC,UAAU,GAAGjB,SAAS,GAAG3d,MAAM,GAAG2e,OAAO;IAC/C,IAAME,WAAW,GAAGZ,kBAAkB,CAACQ,aAAa,CAAC,GAAGG,UAAU;IAElE,IAAM1mB,CAAC,GAAGW,IAAI,CAACiY,KAAK,CAAC2K,QAAQ,GAAGllB,UAAU,GAAG2nB,UAAU,CAAC;IACxD,IAAMlkB,CAAC,GAAGnB,IAAI,CAACiY,KAAK,CAAC4K,OAAO,GAAGrlB,SAAS,GAAG0jB,OAAO,GAAG8E,WAAW,CAAC;IACjEX,UAAU,IAAIR,YAAY,GAAGgB,OAAO,GAAGpC,KAAK,CAACtkB,CAAC,CAAC;IAE/C,IAAM8mB,IAAI,GAAGxC,KAAK,CAACtkB,CAAC,CAAC;IACrB,IAAM+mB,IAAI,GAAG/e,MAAM;IACnB,IAAMO,GAAG,GAAc,CACnB,CAACrI,CAAC,EAAE8B,CAAC,CAAC,EACN,CAAC9B,CAAC,GAAG4mB,IAAI,EAAE9kB,CAAC,GAAG+kB,IAAI,CAAC,CACvB;IAED,OAAO;MACHxe,GAAG,EAAHA,GAAG;MACHF,IAAI,EAAJA;KACH;GACJ,CAAC;AACN,CAAC;AAED,AAAO,IAAM2e,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAClCxD,WAAiC,EACjCC,QAAgB,EAChBC,OAAe,EACfd,SAAiB,EACjBe,UAAkB;EAElB,IAAQO,KAAK,GAAKV,WAAW,CAArBU,KAAK;EAGb,IAAM+C,aAAa,GAAG/C,KAAK,CAAChP,MAAM,CAAC,UAAC7M,IAAI;IAAA,OAAKA,IAAI,CAAC+b,QAAQ;IAAC;EAE3D,IAAM8C,eAAe,GAAG,SAAlBA,eAAeA,CACjBC,SAAiB,EACjBtR,IAAY,EACZ7K,KAAc,EACdC,GAAY,EACZmc,aACAC;QADAD;MAAAA,cAAsB,CAAC;;IAAA,IACvBC;MAAAA,YAAoB,CAAC;;IAErB,IAAIrc,KAAK,IAAI,IAAI,EAAE,OAAOA,KAAK,GAAGoc,WAAW;IAC7C,IAAInc,GAAG,IAAI,IAAI,EAAE,OAAOkc,SAAS,GAAGlc,GAAG,GAAGoc,SAAS,GAAGxR,IAAI;IAC1D,OAAO,CAAC;GACX;EAED,IAAMyR,WAAW,GAAG,SAAdA,WAAWA,CACbH,SAAiB,EACjBI,IAAa,EACbvc,KAAc,EACdC,GAAY,EACZmc,aACAC;QADAD;MAAAA,cAAsB,CAAC;;IAAA,IACvBC;MAAAA,YAAoB,CAAC;;IAErB,IAAIE,IAAI,IAAI,IAAI,EAAE,OAAOA,IAAI;IAC7B,IAAIvc,KAAK,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,EAAE,OAAOkc,SAAS,GAAGnc,KAAK,GAAGC,GAAG,GAAGmc,WAAW,GAAGC,SAAS;IAC1F,OAAO,CAAC;GACX;EAGD,OAAOJ,aAAa,CAACnnB,GAAG,CAAC,UAACuI,IAAI;IAC1B,IAAQ1G,IAAI,GAA0F0G,IAAI,CAAlG1G,IAAI;MAAEC,GAAG,GAAqFyG,IAAI,CAA5FzG,GAAG;MAAEE,KAAK,GAA8EuG,IAAI,CAAvFvG,KAAK;MAAEC,MAAM,GAAsEsG,IAAI,CAAhFtG,MAAM;MAAEgG,KAAK,GAA+DM,IAAI,CAAxEN,KAAK;MAAEC,MAAM,GAAuDK,IAAI,CAAjEL,MAAM;MAAEzJ,UAAU,GAA2C8J,IAAI,CAAzD9J,UAAU;MAAEF,SAAS,GAAgCgK,IAAI,CAA7ChK,SAAS;MAAEG,WAAW,GAAmB6J,IAAI,CAAlC7J,WAAW;MAAEF,YAAY,GAAK+J,IAAI,CAArB/J,YAAY;IAEjG,IAAMsK,CAAC,GAAG0e,WAAW,CAAC1E,SAAS,EAAE7a,KAAK,EAAEpG,IAAI,EAAEG,KAAK,EAAEvD,UAAU,EAAEC,WAAW,CAAC;IAC7E,IAAMqK,CAAC,GAAGye,WAAW,CAAC3D,UAAU,EAAE3b,MAAM,EAAEpG,GAAG,EAAEG,MAAM,EAAE1D,SAAS,EAAEC,YAAY,CAAC;IAE/E,IAAMkpB,CAAC,GAAG/D,QAAQ,GAAGyD,eAAe,CAACtE,SAAS,EAAEha,CAAC,EAAEjH,IAAI,EAAEG,KAAK,EAAEvD,UAAU,EAAEC,WAAW,CAAC;IACxF,IAAMipB,CAAC,GAAG/D,OAAO,GAAGwD,eAAe,CAACvD,UAAU,EAAE9a,CAAC,EAAEjH,GAAG,EAAEG,MAAM,EAAE1D,SAAS,EAAEC,YAAY,CAAC;IAExF,IAAMiK,GAAG,GAAc,CACnB,CAACif,CAAC,EAAEC,CAAC,CAAC,EACN,CAACD,CAAC,GAAG5e,CAAC,EAAE6e,CAAC,GAAG5e,CAAC,CAAC,CACjB;IAED,OAAO;MACHN,GAAG,EAAHA,GAAG;MACHF,IAAI,EAAJA;KACH;GACJ,CAAC;AACN,CAAC;AAGD,AAAO,IAAM+c,OAAO,GAAG,SAAVA,OAAOA,CAAIsC,KAAa,EAAEC,IAAc,EAAErD,KAAe;EAClE,IAAM9kB,CAAC,GAAGmoB,IAAI,CAAC9nB,MAAM;EAErB,IAAI+nB,MAAM,GAAG,CAAC;EACd,KAAK,IAAI5nB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAE,EAAEQ,CAAC,EAAE,IAAI2nB,IAAI,CAAC3nB,CAAC,CAAC,GAAG,CAAC,EAAE4nB,MAAM,IAAID,IAAI,CAAC3nB,CAAC,CAAC;EAE9D,IAAI4nB,MAAM,GAAG,CAAC,EAAE;IACZ,KAAK,IAAI5nB,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGR,CAAC,EAAE,EAAEQ,EAAC,EAAE;MACxB,IAAI2nB,IAAI,CAAC3nB,EAAC,CAAC,GAAG,CAAC,EAAE;QACbskB,KAAK,CAACtkB,EAAC,CAAC,IAAK0nB,KAAK,GAAGC,IAAI,CAAC3nB,EAAC,CAAC,GAAI4nB,MAAM;;;IAG9C,OAAO,IAAI;;EAEf,OAAO,KAAK;AAChB,CAAC;AAGM,IAAMvC,UAAS,GAAG,SAAZA,SAASA,CAAIqC,KAAa,EAAEG,MAAgB,EAAEvD,KAAe;EACtE,IAAM9kB,CAAC,GAAGqoB,MAAM,CAAChoB,MAAM;EAEvB,IAAI+nB,MAAM,GAAG,CAAC;EACd,KAAK,IAAI5nB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAE,EAAEQ,CAAC,EAAE,IAAI6nB,MAAM,CAAC7nB,CAAC,CAAC,EAAE4nB,MAAM,IAAIC,MAAM,CAAC7nB,CAAC,CAAC,GAAGskB,KAAK,CAACtkB,CAAC,CAAC;EAEzE,IAAI4nB,MAAM,GAAG,CAAC,EAAE;IACZ,IAAIE,QAAQ,GAAG,CAAC;IAChB,KAAK,IAAI9nB,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGR,CAAC,EAAE,EAAEQ,GAAC,EAAE;MACxB,IAAI6nB,MAAM,CAAC7nB,GAAC,CAAC,GAAG,CAAC,IAAIskB,KAAK,CAACtkB,GAAC,CAAC,EAAE;QAC3BskB,KAAK,CAACtkB,GAAC,CAAC,IAAK0nB,KAAK,GAAGG,MAAM,CAAC7nB,GAAC,CAAC,GAAGskB,KAAK,CAACtkB,GAAC,CAAC,GAAI4nB,MAAM;QACnD,IAAItD,KAAK,CAACtkB,GAAC,CAAC,GAAG,CAAC,EAAE;UACd8nB,QAAQ,IAAIxD,KAAK,CAACtkB,GAAC,CAAC;UACpBskB,KAAK,CAACtkB,GAAC,CAAC,GAAG,CAAC;;;;IAIxB,IAAI8nB,QAAQ,EAAE;MACVzC,UAAS,CAACyC,QAAQ,EAAED,MAAM,EAAEvD,KAAK,CAAC;;IAEtC,OAAO,IAAI;;EAEf,OAAO,KAAK;AAChB,CAAC;AAAC,AAGK,IAAM2B,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAI/lB,CAAS;EACxC,IAAM6nB,OAAO,GAAG7nB,CAAC,KAAK,OAAO;EAC7B,IAAM8nB,KAAK,GAAG9nB,CAAC,KAAK,KAAK;EAEzB,IAAM4iB,KAAK,GAAGiF,OAAO,GAAG,CAAC,GAAGC,KAAK,GAAG,CAAC,GAAG,GAAG;EAC3C,OAAOlF,KAAK;AAChB,CAAC;AAGD,AAAO,IAAMyC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAImC,KAAa,EAAEloB,CAAS,EAAEyoB,OAAgB;EAC1E,IAAIC,GAAG,GAAG,CAAC;EACX,IAAIC,IAAI,GAAG,CAAC;EAEZ,IAAMC,SAAS,GAAGH,OAAO,KAAK,SAAS;EACvC,IAAMI,SAAS,GAAGJ,OAAO,KAAK,SAAS;EACvC,IAAMK,QAAQ,GAAGL,OAAO,KAAK,QAAQ;EAErC,IAAIP,KAAK,GAAG,CAAC,EAAE;IACX,IAAIY,QAAQ,IAAID,SAAS,IAAID,SAAS,EAAE;MACpC,IAAI5oB,CAAC,KAAK,CAAC,EAAE;QACT2oB,IAAI,GAAGT,KAAK,GAAG,CAAC;OACnB,MAAM,IAAIY,QAAQ,EAAE;QACjBJ,GAAG,GAAGrnB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEsnB,KAAK,IAAIloB,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC2oB,IAAI,GAAGD,GAAG;OACb,MAAM,IAAIG,SAAS,EAAE;QAClBH,GAAG,GAAGrnB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEsnB,KAAK,GAAGloB,CAAC,CAAC;QAC5B2oB,IAAI,GAAGD,GAAG,GAAG,CAAC;OACjB,MAAM,IAAIE,SAAS,EAAE;QAClBF,GAAG,GAAGrnB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEsnB,KAAK,GAAG7mB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEZ,CAAC,GAAG,CAAC,CAAC,CAAC;;KAEpD,MAAM;MACH2oB,IAAI,GAAGlC,kBAAkB,CAACgC,OAAiB,CAAC,GAAGP,KAAK;;;EAI5D,OAAO,CAACQ,GAAG,EAAEC,IAAI,CAAC;AACtB,CAAC;;AC3QM,IAAMI,QAAQ,GAAG,SAAXA,QAAQA,CACjBtgB,OAAiC,EACjC+a,IAAqB,EACrB1a,KAAsB,EACtBkgB,SAA4B,EAC5BC,MAAc,EACdC,MAAc,EACd9F,SAAiB,EACjBe,UAAkB,EAClBgF,IAAkD;EAElD,IAAQzqB,SAAS,GAAyCoK,KAAK,CAAvDpK,SAAS;IAAEE,UAAU,GAA6BkK,KAAK,CAA5ClK,UAAU;IAAED,QAAQ,GAAmBmK,KAAK,CAAhCnK,QAAQ;IAAEG,YAAY,GAAKgK,KAAK,CAAtBhK,YAAY;EAErD,IAAMwkB,KAAK,GAAG0F,SAAS,WAATA,SAAS,GAAItqB,SAAS;EACpC+J,OAAO,CAAC/J,SAAS,GAAG4kB,KAAK;EAEzB,IAAM5iB,CAAC,GAAGuoB,MAAM,GAAG9F,kBAAkB,CAACC,SAAS,EAAE,CAAC,EAAEE,KAAK,CAAC;EAC1D,IAAM9gB,CAAC,GAAG0mB,MAAM;EAChB,IAAMjpB,CAAC,GAAGujB,IAAI,CAACG,QAAQ,EAAE;EACzB,IAAM3jB,CAAC,GAAGC,CAAC,CAACI,MAAM;EAElB,IAAI+oB,OAAO,GAAG,CAAC;EACf,IAAIC,OAAO,GAAG,CAAC;EACf,IAAIC,YAAY,GAAG,CAAC;EACpB,IAAIC,WAAW,GAAG,CAAC;EACnB,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,SAAiB,EAAEC,UAA2BC;QAA3BD;MAAAA,WAAoB,KAAK;;IAAA,IAAEC;MAAAA,cAAuB,KAAK;;IACvF,IAAMC,IAAI,GAAG3pB,CAAC,CAACqF,KAAK,CAACikB,WAAW,EAAEE,SAAS,GAAG,CAACE,WAAW,CAAC;IAC3DR,IAAI,CAACO,QAAQ,GAAGE,IAAI,GAAG,GAAG,GAAGA,IAAI,EAAElpB,CAAC,EAAE8B,CAAC,GAAG6mB,OAAO,CAAC;IAElDE,WAAW,GAAGE,SAAS;IACvBH,YAAY,GAAG,CAAC;IAChBF,OAAO,GAAG,CAAC;IACXC,OAAO,IAAIzqB,UAAU;GACxB;EAED,IAAMirB,OAAO,GAAG,IAAIC,SAAS,CAAC7pB,CAAC,CAAC;EAEhC,IAAI8pB,YAAY,GAAG,CAAC;EACpB,IAAIC,EAAE;EACN,OAAQA,EAAE,GAAGH,OAAO,CAACI,SAAS,EAAE,EAAG;IAC/B,IAAAC,GAAA,GAA+BF,EAAE;MAAzBG,QAAQ,GAAAD,GAAA,CAARC,QAAQ;MAAEC,QAAQ,GAAAF,GAAA,CAARE,QAAQ;IAC1B,IAAMC,IAAI,GAAGpqB,CAAC,CAACqF,KAAK,CAACykB,YAAY,EAAEI,QAAQ,CAAC;IAE5C,IAAA1G,oBAAA,GAAkBhb,OAAO,CAACib,WAAW,CAAC2G,IAAI,CAAC;MAAnC9hB,KAAK,GAAAkb,oBAAA,CAALlb,KAAK;IAEb,IAAM+hB,UAAU,GAAGjB,OAAO,GAAGzqB,UAAU,GAAGE,YAAY,GAAGqlB,UAAU;IACnE,IAAMoG,WAAW,GAAGJ,QAAQ,GAAGnqB,CAAC;IAChC,IAAM2pB,WAAW,GAAGU,IAAI,CAACA,IAAI,CAAChqB,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;IACjD,IAAMmqB,aAAa,GAAG,CAACF,UAAU,IAAIC,WAAW,GAAG,CAACZ,WAAW,GAAG,GAAG,GAAG,CAAC,IAAIhrB,QAAQ,GAAG,CAAC;IAEzF,IAAM8rB,KAAK,GAAGrB,OAAO,GAAG7gB,KAAK,GAAGiiB,aAAa;IAC7C,IAAIlB,YAAY,IAAImB,KAAK,IAAIrH,SAAS,EAAE;MACpC,IAAIkH,UAAU,EAAEd,OAAO,CAACO,YAAY,CAAC,CAAC,KACjC;QACD,IAAIJ,WAAW,EAAE;UACb,IAAAe,qBAAA,GAAkBjiB,OAAO,CAACib,WAAW,CAAC,GAAG,CAAC;YAAlCnb,MAAK,GAAAmiB,qBAAA,CAALniB,KAAK;UACb6gB,OAAO,IAAI7gB,MAAK;;QAEpBihB,OAAO,CAACO,YAAY,EAAE,IAAI,EAAEJ,WAAW,CAAC;QACxC;;;IAIRP,OAAO,IAAI7gB,KAAK;IAChB+gB,YAAY,EAAE;IAEd,IAAIc,QAAQ,EAAEZ,OAAO,CAACW,QAAQ,CAAC;IAE/BJ,YAAY,GAAGI,QAAQ;;EAG3BX,OAAO,CAACxpB,CAAC,CAAC;AACd,CAAC;;AChEM,IAAM2qB,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC1BlW,IAAc,EACdpH,WAAwD,EACxDud,SAAsC,EACtCC,aAAiE,EACjEC,iBAAqD,EACrDzjB,WAAmB;EAEnB,IAAMoB,OAAO,GAAGd,OAAO,CAAC;IAAA,OAAMU,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC,CAACI,UAAU,CAAC,IAAI,CAAC;KAAE,EAAE,CAAC;EAEpF,IAAMsG,gBAAgB,GAAGlH,WAAW,CAChC,UAACpH,CAAS;IACN,IAAI,CAAC+H,OAAO,EAAE,OAAO,CAAC;IAEtB,IAAMsiB,QAAQ,GAAG,SAAXA,QAAQA,CAAI/G,WAA2C,EAAElb,KAAsB;MACjFL,OAAO,CAACuiB,IAAI,GAAGliB,KAAK,CAAC3J,UAAU,GAAG,GAAG,GAAG2J,KAAK,CAACnK,QAAQ,GAAG,KAAK,GAAGmK,KAAK,CAAC5J,UAAU;MAEjF,IAAM+rB,YAAY,GAAGniB,KAAK,CAAC/J,UAAU,GAAG+J,KAAK,CAAC9J,WAAW;MACzD,IAAI,OAAOglB,WAAW,KAAK,QAAQ,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;QACpE,IAAAP,oBAAA,GAAkBhb,OAAO,CAACib,WAAW,CAACM,WAAW,CAACL,QAAQ,EAAE,CAAC;UAArDpb,KAAK,GAAAkb,oBAAA,CAALlb,KAAK;QACb,OAAOA,KAAK,GAAG0iB,YAAY;OAC9B,MAAM,IAAI,OAAOjH,WAAW,KAAK,QAAQ,EAAE;QACxC,IAAIkH,UAAU,GAAGD,YAAY;QAE7B,IAAAzG,oBAAA,GAA+BR,WAAW,CAAlCS,OAAO;UAAPA,OAAO,GAAAD,oBAAA,cAAG,CAAC,GAAAA,oBAAA;UAAEE,KAAK,GAAKV,WAAW,CAArBU,KAAK;QAC1B,SAAApR,SAAA,GAAAC,+BAAA,CAAmBmR,KAAK,GAAAlR,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;UAAA,IAAf5K,IAAI,GAAA2K,KAAA,CAAAG,KAAA;UACX,IAAI9K,IAAI,CAAC+b,QAAQ,EAAE;UAEnB,IAAI/b,IAAI,CAACN,KAAK,IAAI,IAAI,EAAE;YACpB2iB,UAAU,IAAIriB,IAAI,CAACN,KAAK;WAC3B,MAAM,IAAIM,IAAI,CAACG,OAAO,KAAK,QAAQ,IAAIH,IAAI,CAAC2a,IAAI,IAAI,IAAI,EAAE;YACvD,IAAAkH,qBAAA,GAAkBjiB,OAAO,CAACib,WAAW,CAAC7a,IAAI,CAAC2a,IAAI,CAACG,QAAQ,EAAE,CAAC;cAAnDpb,MAAK,GAAAmiB,qBAAA,CAALniB,KAAK;YACb2iB,UAAU,IAAI3iB,MAAK;;UAEvB2iB,UAAU,IAAIzG,OAAO;;QAEzByG,UAAU,IAAIzG,OAAO;QAErB,OAAOyG,UAAU;;MAErB,OAAO,CAAC;KACX;IAED,IAAIC,QAAQ,GAAGrtB,KAAK,CAACI,YAAY;IAEjC,IAAMktB,WAAW,GAAAhP,QAAA,KAAQ9c,2BAA2B,EAAKwrB,iBAAiB,CAACpqB,CAAC,CAAC,CAAE;IAC/E,IAAM2qB,aAAa,GAAGR,aAAa,CAACnqB,CAAC,EAAE0qB,WAAW,CAAC;IACnD,IAAIC,aAAa,EAAE;MACfF,QAAQ,GAAG9pB,IAAI,CAACT,GAAG,CAACuqB,QAAQ,EAAEJ,QAAQ,CAACM,aAAa,EAAED,WAAW,CAAC,CAAC;;IAGvE,SAAA/V,UAAA,GAAA9B,+BAAA,CAAgBkB,IAAI,GAAAa,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA5B,IAAA,GAAE;MAAA,IAAXjR,CAAC,GAAA8S,MAAA,CAAA3B,KAAA;MACR,IAAM7K,KAAK,GAAAsT,QAAA,KAAQ3d,kBAAkB,EAAKmsB,SAAS,CAAClqB,CAAC,EAAE8B,CAAC,CAAC,CAAE;MAC3D,IAAMwhB,WAAW,GAAG3W,WAAW,CAAC3M,CAAC,EAAE8B,CAAC,EAAEsG,KAAK,CAAC;MAC5C,IAAIkb,WAAW,IAAI,IAAI,EAAE;QACrBmH,QAAQ,GAAG9pB,IAAI,CAACT,GAAG,CAACuqB,QAAQ,EAAEJ,QAAQ,CAAC/G,WAAW,EAAElb,KAAK,CAAC,CAAC;;;IAInE,OAAOzH,IAAI,CAACiqB,IAAI,CAACjqB,IAAI,CAACV,GAAG,CAAC0G,WAAW,EAAE8jB,QAAQ,CAAC,CAAC;GACpD,EACD,CAAC1iB,OAAO,EAAE4E,WAAW,EAAEud,SAAS,EAAEC,aAAa,EAAEC,iBAAiB,CAAC,CACtE;EAED,OAAO9b,gBAAgB;AAC3B,CAAC;AAED,AAAO,IAAMuc,cAAc,GAAG,SAAjBA,cAAcA,CACvB/W,OAAiB,EACjBnH,WAAwD,EACxDud,SAAsC,EACtCC,aAAiE,EACjEC,iBAAqD,EACrD1H,SAA8C,EAC9C5b,YAAoB;EAEpB,IAAMiB,OAAO,GAAGd,OAAO,CAAC;IAAA,OAAMU,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC,CAACI,UAAU,CAAC,IAAI,CAAC;KAAE,EAAE,CAAC;EAEpF,IAAMuG,iBAAiB,GAAGnH,WAAW,CACjC,UAACtF,CAAS;IACN,IAAI,CAACiG,OAAO,EAAE,OAAO,CAAC;IAEtB,IAAM+iB,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIhI,IAAY,EAAE1a,KAAsB,EAAE2iB,WAAmB;MAChF,IAAI3d,IAAI,GAAG,CAAC;MACZ,IAAM4d,QAAQ,GAAG,SAAXA,QAAQA,CAAIC,EAAU,EAAEC,EAAU,EAAEppB,CAAS;QAC/CsL,IAAI,GAAGtL,CAAC,GAAGsG,KAAK,CAAClK,UAAU;OAC9B;MACDmqB,QAAQ,CAACtgB,OAAO,EAAE+a,IAAI,EAAE1a,KAAK,EAAEwD,SAAS,EAAE,CAAC,EAAE,CAAC,EAAEmf,WAAW,EAAEjkB,YAAY,EAAEkkB,QAAQ,CAAC;MACpF,OAAO5d,IAAI;KACd;IAED,IAAM+d,SAAS,GAAG,SAAZA,SAASA,CACX7H,WAA2C,EAC3Clb,KAAsB,EACtB2iB,WAAmB;MAEnBhjB,OAAO,CAACuiB,IAAI,GAAGliB,KAAK,CAAC3J,UAAU,GAAG,GAAG,GAAG2J,KAAK,CAACnK,QAAQ,GAAG,KAAK,GAAGmK,KAAK,CAAC5J,UAAU;MAEjF,IAAM4sB,cAAc,GAAGhjB,KAAK,CAACjK,SAAS,GAAGiK,KAAK,CAAChK,YAAY;MAC3D,IAAI,OAAOklB,WAAW,KAAK,QAAQ,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;QACpE,IAAMxb,MAAM,GAAGgjB,iBAAiB,CAACxH,WAAW,CAACL,QAAQ,EAAE,EAAE7a,KAAK,EAAE2iB,WAAW,CAAC;QAC5E,OAAOjjB,MAAM,GAAGsjB,cAAc;OACjC,MAAM,IAAI,OAAO9H,WAAW,KAAK,QAAQ,EAAE;QACxC,IAAImC,UAAS,GAAG,CAAC;QAEjB,SAAArP,UAAA,GAAAvD,+BAAA,CAAmByQ,WAAW,CAACU,KAAK,GAAA3N,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAArD,IAAA,GAAE;UAAA,IAA3B5K,IAAI,GAAAkO,MAAA,CAAApD,KAAA;UACX,IAAI9K,IAAI,CAAC+b,QAAQ,EAAE;UAEnB,IAAI/b,IAAI,CAACL,MAAM,IAAI,IAAI,EAAE;YACrB2d,UAAS,GAAG9kB,IAAI,CAACT,GAAG,CAACulB,UAAS,EAAEtd,IAAI,CAACL,MAAM,CAAC;WAC/C,MAAM,IAAIK,IAAI,CAACG,OAAO,KAAK,QAAQ,IAAIH,IAAI,CAAC2a,IAAI,IAAI,IAAI,EAAE;YACvD,IAAMhb,OAAM,GAAGgjB,iBAAiB,CAAC3iB,IAAI,CAAC2a,IAAI,CAACG,QAAQ,EAAE,EAAE7a,KAAK,EAAE2iB,WAAW,CAAC;YAC1EtF,UAAS,GAAG9kB,IAAI,CAACT,GAAG,CAACulB,UAAS,EAAE3d,OAAM,CAAC;;;QAI/C,OAAO2d,UAAS,GAAG2F,cAAc;;MAErC,OAAO,CAAC;KACX;IAED,IAAMC,QAAQ,GAAGvpB,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI2jB,SAAS,GAAGroB,KAAK,CAACK,aAAa;IAEnC,SAAAwa,UAAA,GAAApF,+BAAA,CAAgBiB,OAAO,GAAAoE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAlF,IAAA,GAAE;MAAA,IAAd/S,CAAC,GAAAkY,MAAA,CAAAjF,KAAA;MACR,IAAM7K,KAAK,GAAGijB,QAAQ,GAAA3P,QAAA,KACX9c,2BAA2B,EAAKwrB,iBAAiB,CAACpqB,CAAC,CAAC,IAAA0b,QAAA,KACpD3d,kBAAkB,EAAKmsB,SAAS,CAAClqB,CAAC,EAAE8B,CAAC,CAAC,CAAE;MAEnD,IAAMwhB,WAAW,GAAG+H,QAAQ,GAAGlB,aAAa,CAACnqB,CAAC,EAAEoI,KAAK,CAAC,GAAGuE,WAAW,CAAC3M,CAAC,EAAE8B,CAAC,EAAEsG,KAAK,CAAC;MAEjF,IAAIkb,WAAW,IAAI,IAAI,EAAE;QACrB,IAAMyH,WAAW,GAAGrI,SAAS,CAAC1iB,CAAC,CAAC,GAAGoI,KAAK,CAAC/J,UAAU,GAAG+J,KAAK,CAAC9J,WAAW;QACvEmnB,SAAS,GAAG9kB,IAAI,CAACT,GAAG,CAACulB,SAAS,EAAE0F,SAAS,CAAC7H,WAAW,EAAElb,KAAK,EAAE2iB,WAAW,CAAC,CAAC;;;IAInF,OAAOpqB,IAAI,CAACiqB,IAAI,CAACjqB,IAAI,CAACV,GAAG,CAAC6G,YAAY,EAAE2e,SAAS,CAAC,CAAC;GACtD,EACD,CAAC1d,OAAO,EAAE4E,WAAW,EAAEud,SAAS,EAAExH,SAAS,CAAC,CAC/C;EAED,OAAOnU,iBAAiB;AAC5B,CAAC;;AC3JD;AACA,AAkKA;AACA,AAAO,MAAM,eAAe,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,YAAY,CAAC;AAC/J,AA2DA;AACA,AAAO,MAAM,oBAAoB,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,iBAAiB,CAAC;AACxL,AA8UA;AACA;AACA,AAAO,SAAS,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;AACtC,CAAC,IAAI;AACL,EAAE,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;AACtB,EAAE,CAAC,MAAM,CAAC,EAAE;AACZ,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,EAAE;AACF,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC5B,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACtC,EAAE;AACF,CAAC,OAAO,MAAM,CAAC;AACf,CAAC;;AC9hBD,IAAM+c,WAAW,GAAmB;EAAEvX,IAAI,EAAE;CAAI;AAKhD,IAAawX,iBAAiB,GAAG,SAApBA,iBAAiBA;EAC1B,IAAAhlB,SAAA,GAAwBC,QAAQ,EAAyB;IAAlDglB,IAAI,GAAAjlB,SAAA;IAAEklB,OAAO,GAAAllB,SAAA;EAEpBkY,eAAe,CAAC;IACZ,IAAMiN,WAAW,YAAXA,WAAWA;gDACT;QAAA,OAAAC,OAAA,CAAAC,OAAA,CACqBC,SAAS,CAACC,WAAW,CAACC,KAAK,CAAC;UAAEC,IAAI,EAAE;SAAyB,CAAC,EAAAC,IAAA,WAA7EC,MAAM;UACZ,IAAIA,MAAM,CAACC,KAAK,KAAK,SAAS,EAAE;UAEhCC,WAAW,EAAE;;OAChB;KACJ;IAED,IAAMA,WAAW,YAAXA,WAAWA;MAAA;wCACT;UAAA,OAAAT,OAAA,CAAAC,OAAA,CACqBC,SAAS,CAACQ,SAAiB,CAACC,IAAI,EAAE,EAAAL,IAAA,WAAjDjI,KAAK;YACX,IAAO7b,IAAI,GAAI6b,KAAK;YAAC,IAAAuI,KAAA;cAAA,IACjBpkB,IAAI;gBAAA,OAAAwjB,OAAA,CAAAC,OAAA,CACeY,mBAAmB,CAACrkB,IAAI,CAAC,EAAA8jB,IAAA,WAAtCT,IAAI;kBACVC,OAAO,CAACD,IAAI,CAAC;;;gBAEbC,OAAO,CAACH,WAAW,CAAC;;;YAAC,IAAAiB,KAAA,IAAAA,KAAA,CAAAN,IAAA,SAAAM,KAAA,CAAAN,IAAA;;SAE5B;QAAA,OAAAN,OAAA,CAAAC,OAAA,CAAAa,MAAA,IAAAA,MAAA,CAAAR,IAAA,GAAAQ,MAAA,CAAAR,IAAA;OACJ,QAAAliB,CAAA;QAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;;IAED,IAAM4iB,cAAc,GAAG,SAAjBA,cAAcA;MAAA,OAASxK,UAAU,CAACiK,WAAW,CAAC;;IAEpDpmB,MAAM,CAAC2B,QAAQ,CAACilB,gBAAgB,CAAC,KAAK,EAAED,cAAc,CAAC;IACvD3mB,MAAM,CAAC2B,QAAQ,CAACilB,gBAAgB,CAAC,MAAM,EAAED,cAAc,CAAC;IACxD3mB,MAAM,CAAC2B,QAAQ,CAACilB,gBAAgB,CAAC,OAAO,EAAElB,WAAW,CAAC;IAEtDA,WAAW,EAAE;IAEb,OAAO;MACH1lB,MAAM,CAAC2B,QAAQ,CAACklB,mBAAmB,CAAC,KAAK,EAAEF,cAAc,CAAC;MAC1D3mB,MAAM,CAAC2B,QAAQ,CAACklB,mBAAmB,CAAC,MAAM,EAAEF,cAAc,CAAC;MAC3D3mB,MAAM,CAAC2B,QAAQ,CAACklB,mBAAmB,CAAC,OAAO,EAAEnB,WAAW,CAAC;KAC5D;GACJ,EAAE,EAAE,CAAC;EAEN,IAAMoB,QAAQ,GAAG1lB,WAAW,CAExB;IAAA,IAAA2lB,UAAA;IAAA,OAAM,CAAC,EAAEvB,IAAI,IAAI,IAAI,KAAAuB,UAAA,GAAIvB,IAAI,CAACzX,IAAI,cAAAgZ,UAAA,eAATA,UAAA,CAAWptB,MAAM,CAAC;KAC3C,CAAC6rB,IAAI,CAAC,CACT;EAED,OAAO;IACHA,IAAI,EAAJA,IAAI;IACJsB,QAAQ,EAARA,QAAQ;IACRE,SAAS,EAAEC,kBAAkB;IAC7BC,UAAU,EAAEC;GACf;AACL,CAAC;AAGD,AAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CACxBlrB,SAAoB,EACpBgK,QAAsC,EACtCwB,YAA2C,EAC3C2f,WAAoB,EAEpBve,iBAAkD,EAClDI,QAAsC,EACtCoe,MAAyG,EACzGC,OAIqE;EAErE,IAAAC,kBAAA,GAA4CjC,iBAAiB,EAAE;IAAvDuB,QAAQ,GAAAU,kBAAA,CAARV,QAAQ;IAAEE,SAAS,GAAAQ,kBAAA,CAATR,SAAS;IAAEE,UAAU,GAAAM,kBAAA,CAAVN,UAAU;EAEvC,IAAMO,kBAAkB,GAAGrmB,WAAW,WAC3BlF,SAAoB,EAAEwrB,KAAqB;IAAA;MAC9C,IAAQ3Z,IAAI,GAAc2Z,KAAK,CAAvB3Z,IAAI;QAAE4Z,OAAO,GAAKD,KAAK,CAAjBC,OAAO;MACrB,IAAAxrB,mBAAA,GAAcC,kBAAkB,CAACF,SAAS,CAAC;QAApCjC,GAAG,GAAAkC,mBAAA;MACV,IAAOoS,IAAI,GAAUtU,GAAG;QAAXuU,IAAI,GAAIvU,GAAG;MAExB,IAAMwB,IAAI,GAAGd,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEqU,IAAI,CAAC;MAC9B,IAAM7S,GAAG,GAAGf,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEsU,IAAI,CAAC;MAE7B,IAAM3M,KAAK,GAAGkM,IAAI,CAAC8R,MAAM,CAAC,UAACvlB,CAAC,EAAEC,CAAC;QAAA,OAAKI,IAAI,CAACT,GAAG,CAACI,CAAC,EAAEC,CAAC,CAACZ,MAAM,CAAC;SAAE,CAAC,CAAC;MAC7D,IAAMmI,MAAM,GAAGiM,IAAI,CAACpU,MAAM;MAE1B,IAAMiuB,YAAY,GAAc,CAAC3tB,GAAG,EAAEI,KAAK,CAACJ,GAAG,EAAE,CAAC4H,KAAK,GAAG,CAAC,EAAEC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;MAAC,OAAA6jB,OAAA,CAAAC,OAAA,CAEjD2B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAGK,YAAY,EAAE7Z,IAAI,EAAE4Z,OAAO,CAAC,EAAA1B,IAAA,WAA1D4B,WAAW;QAAA,IACbA,WAAW,KAAK,KAAK;UACrB,IAAMvW,OAAO,GAAGvD,IAAI,CACf+Z,OAAO,CAAC,UAACzS,GAAG,EAAE0S,CAAC;YAAA,OACZ1S,GAAG,CAACzb,GAAG,CAAC,UAACqT,KAAK,EAAEnT,CAAC;cACb,IAAME,CAAC,GAAGyB,IAAI,GAAG3B,CAAC;cAClB,IAAMgC,CAAC,GAAGJ,GAAG,GAAGqsB,CAAC;cACjB,OAAO,EAACrgB,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAG1N,CAAC,EAAE8B,CAAC,CAAC,IAAG;gBAAE9B,CAAC,EAADA,CAAC;gBAAE8B,CAAC,EAADA,CAAC;gBAAEmR,KAAK,EAALA;eAAO,GAAG,IAAI;aACxD,CAAC;YACL,CACA+B,MAAM,CAAC,UAACgZ,MAAM;YAAA,OAAK,CAAC,CAACA,MAAM;YAAa;UAE7C9e,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGoI,OAAO,CAAC;UACnBxI,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG8e,YAAY,CAAC;;;KAExC,QAAA7jB,CAAA;MAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;KACD,CAACmF,QAAQ,EAAEJ,iBAAiB,EAAEpB,YAAY,CAAC,CAC9C;EAGD,IAAMugB,aAAa,GAAG7mB,WAAW,WACtBlF,SAAoB,EAAEgsB;QAAAA;MAAAA,MAAe,KAAK;;IAAA;;MAC7C,IAAMna,IAAI,GAAGoa,qBAAqB,CAACjsB,SAAS,EAAEgK,QAAQ,CAAC;MACvD,IAAMyhB,OAAO,GAAGL,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGprB,SAAS,EAAE6R,IAAI,EAAEma,GAAG,CAAC;MAE9ClB,SAAS,CAACjZ,IAAI,EAAE4Z,OAAO,CAAC;MAExB,KAAAS,YAAA,GAAIT,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEO,GAAG,YAAAE,YAAA,GAAIF,GAAG,EAAE;QACrB,IAAM5W,OAAO,GAAa,EAAE;QAC5B/U,gBAAgB,CAACL,SAAS,CAAC,CAAC,UAACJ,CAAS;UAClCG,mBAAmB,CAACC,SAAS,CAAC,CAAC,UAAClC,CAAS;YACrC,IAAI,EAAC0N,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAG1N,CAAC,EAAE8B,CAAC,CAAC,GAAE;cACvB,IAAMksB,MAAM,GAAG;gBAAEhuB,CAAC,EAADA,CAAC;gBAAE8B,CAAC,EAADA,CAAC;gBAAEmR,KAAK,EAAE;eAAI;cAClCqE,OAAO,CAACxU,IAAI,CAACkrB,MAAM,CAAC;;WAE3B,CAAC;SACL,CAAC;QACF9e,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGoI,OAAO,CAAC;;MACtB,OAAAqU,OAAA,CAAAC,OAAA;KACJ,QAAA7hB,CAAA;MAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;KACD,CAACujB,MAAM,EAAEpe,QAAQ,EAAExB,YAAY,CAAC,CACnC;EAED,IAAM2gB,cAAc,GAAGjnB,WAAW,WACvBlF,SAAoB;IAAA;6BACHgrB,UAAU,EAAE,EAAAjB,IAAA,WAA1ByB,KAAK;QACX,IAAIA,KAAK,EAAED,kBAAkB,CAACvrB,SAAS,EAAEwrB,KAAK,CAAC;;KAClD,QAAA3jB,CAAA;MAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;KACD,CAAC0jB,kBAAkB,CAAC,CACvB;EAGD,IAAMhQ,eAAe,GAAG,SAAlBA,eAAeA,CAAIyQ,GAAY;IACjC,IAAIhqB,gBAAgB,CAAChC,SAAS,CAAC,EAAE;IACjC,OAAO+rB,aAAa,CAAC/rB,SAAS,EAAEgsB,GAAG,CAAC;GACvC;EAED,IAAMI,gBAAgB,YAAhBA,gBAAgBA,CAAUvkB,CAAM;IAAA;MAClCA,CAAC,CAACgO,cAAc,EAAE;MAElB,IAAMwW,aAAa,GAAGxkB,CAAC,CAACwkB,aAAa,IAAKvoB,MAAc,CAACuoB,aAAa;MAAC,OAAA5C,OAAA,CAAAC,OAAA,CACnDY,mBAAmB,CAAC+B,aAAa,CAAC,EAAAtC,IAAA,WAAhDyB,KAAK;QACX,IAAIA,KAAK,EAAED,kBAAkB,CAACvrB,SAAS,EAAEwrB,KAAK,CAAC;;KAClD,QAAA3jB,CAAA;MAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;;EAED0U,eAAe,CAAC;IACZ,IAAI,CAAC4O,WAAW,EAAE;IAGlBrnB,MAAM,CAAC2B,QAAQ,CAACilB,gBAAgB,CAAC,OAAO,EAAE0B,gBAAgB,CAAC;IAC3D,OAAO;MACHtoB,MAAM,CAAC2B,QAAQ,CAACklB,mBAAmB,CAAC,OAAO,EAAEyB,gBAAgB,CAAC;KACjE;GACJ,CAAC;EAEF,IAAME,YAAY,GAAGvnB,OAAO,CACxB;IAAA,OAAO;MACHgnB,aAAa,EAAbA,aAAa;MACbI,cAAc,EAAdA,cAAc;MACdI,iBAAiB,EAAE3B;KACtB;GAAC,EACF,CAACmB,aAAa,EAAEI,cAAc,EAAEvB,QAAQ,CAAC,CAC5C;EAED,OAAO;IAAE0B,YAAY,EAAZA,YAAY;IAAE/Q,eAAe,EAAfA,eAAe;IAAE6Q,gBAAgB,EAAhBA;GAAkB;AAC9D,CAAC;AAED,IAAMrB,kBAAkB,YAAlBA,kBAAkBA,CAAUlZ,IAAgB,EAAE4Z,OAAsC;EAAA;IACtF,IAAM7K,IAAI,GAAG4L,eAAe,CAAC3a,IAAI,CAAC;IAClC,IAAM4a,IAAI,GAAGC,gBAAgB,CAAC7a,IAAI,EAAE4Z,OAAO,WAAPA,OAAO,GAAI/hB,SAAS,CAAC;IAAC,OAAA+f,OAAA,CAAAC,OAAA,CAEnDC,SAAS,CAACQ,SAAiB,CAACwC,KAAK,CAAC,CACrC,IAAIC,aAAa,CAAC;MACd,WAAW,EAAE,IAAIC,IAAI,CAAC,CAACJ,IAAI,CAAC,EAAE;QAAEK,IAAI,EAAE;OAAa,CAAC;MACpD,YAAY,EAAE,IAAID,IAAI,CAAC,CAACjM,IAAI,CAAC,EAAE;QAAEkM,IAAI,EAAE;OAAc;KACxD,CAAC,CACL,CAAC,EAAA/C,IAAA;MAEF,IAAMxQ,KAAK,GAAG,IAAIwT,KAAK,CAAC,MAAM,CAAC;MAC/BtnB,QAAQ,CAACunB,aAAa,CAACzT,KAAK,CAAC;;GAChC,QAAA1R,CAAA;IAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;AAAA;AAED,IAAMojB,mBAAmB,YAAnBA,mBAAmBA;EAAA;2BACAtB,SAAS,CAACQ,SAAiB,CAACC,IAAI,EAAE,EAAAL,IAAA,WAAjDjI,KAAK;MACX,IAAO7b,IAAI,GAAI6b,KAAK;MACpB,IAAI,CAAC7b,IAAI,EAAE;MAEX,OAAOqkB,mBAAmB,CAACrkB,IAAI,CAAC;;GACnC,QAAA4B,CAAA;IAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;AAAA;AAED,IAAMyiB,mBAAmB,YAAnBA,mBAAmBA,CAAUrkB,IAAkC;EAAA;;aAoB5D4L,IAAI,GAEF;QAAEA,IAAI,EAAJA,IAAI;QAAE4Z,OAAO,EAAPA;OAAS,GAFN;QAAE5Z,IAAI,EAAE;OAAI;;IAlB9B,IAAMvJ,GAAG,GAAG,SAANA,GAAGA,CAAIwkB,IAAY;MACrB,OAAO7mB,IAAI,CAACgnB,KAAK,CAACC,QAAQ,CAACJ,IAAI,CAAC;KACnC;IAED,IAAM3nB,GAAG,GAAG,SAANA,GAAGA,CAAI2nB,IAAY;MACrB,IAAI,SAAS,IAAI7mB,IAAI,EAAE,OAAOA,IAAI,CAACknB,OAAO,CAACL,IAAI,CAAC,CAAC,KAC5C,IAAI,SAAS,IAAI7mB,IAAI,EAAE,OAAQA,IAAY,CAACmnB,OAAO,CAACN,IAAI,CAAC,CAAC/C,IAAI,CAAC,UAACsD,IAAU;QAAA,OAAKA,IAAI,CAACzM,IAAI,EAAE;QAAC;MAChG,OAAO,EAAE;KACZ;IAED,IAAI/O,IAAI,EAAE4Z,OAAO;IAAC,IAAA6B,MAAA;MAAA,IACdhlB,GAAG,CAAC,WAAW,CAAC;QAAA,OAAAmhB,OAAA,CAAAC,OAAA,CACSvkB,GAAG,CAAC,WAAW,CAAC,EAAA4kB,IAAA,WAAnCwD,UAAU;UAAA,IAAAC,gBAAA,GACKC,eAAe,CAACF,UAAU,CAAC;UAA7C1b,IAAI,GAAA2b,gBAAA,CAAJ3b,IAAI;UAAE4Z,OAAO,GAAA+B,gBAAA,CAAP/B,OAAO;;;QAAA,IAAAiC,MAAA;UAAA,IACTplB,GAAG,CAAC,YAAY,CAAC;YAAA,OAAAmhB,OAAA,CAAAC,OAAA,CACLvkB,GAAG,CAAC,YAAY,CAAC,EAAA4kB,IAAA,WAA9BnJ,IAAI;cACV/O,IAAI,GAAG8b,eAAe,CAAC/M,IAAI,CAAC;;;;QAAC,IAAA8M,MAAA,IAAAA,MAAA,CAAA3D,IAAA,SAAA2D,MAAA,CAAA3D,IAAA;;;IAAA,OAAAN,OAAA,CAAAC,OAAA,CAAA4D,MAAA,IAAAA,MAAA,CAAAvD,IAAA,GAAAuD,MAAA,CAAAvD,IAAA,CAAA6D,MAAA,IAAAA,MAAA,CAAAN,MAAA;GAKpC,QAAAzlB,CAAA;IAAA,OAAA4hB,OAAA,CAAAe,MAAA,CAAA3iB,CAAA;;AAAA;AAED,IAAM2kB,eAAe,GAAG,SAAlBA,eAAeA,CAAI3a,IAAgB;EAAA,OAAKA,IAAI,CAACnU,GAAG,CAAC,UAACyb,GAAG;IAAA,OAAKA,GAAG,CAAC0U,IAAI,CAAC,IAAI,CAAC;IAAC,CAACA,IAAI,CAAC,IAAI,CAAC;AAAA;AAE1F,IAAMnB,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI7a,IAAgB,EAAE4Z,OAA+B;EACvE,IAAMqC,GAAG,GAAGjc,IAAI,CACXnU,GAAG,CAAC,UAACyb,GAAG;IACL,IAAM4U,GAAG,GAAG5U,GAAG,CAACzb,GAAG,CAACswB,gBAAgB,CAAC,CAACtwB,GAAG,CAAC,UAACiN,IAAI;MAAA,gBAAYA,IAAI;KAAO,CAAC;IACvE,OAAOojB,GAAG,CAACF,IAAI,CAAC,EAAE,CAAC;GACtB,CAAC,CACDnwB,GAAG,CAAC,UAACyb,GAAG;IAAA,gBAAYA,GAAG;GAAO,CAAC,CAC/B0U,IAAI,CAAC,IAAI,CAAC;EAEf,IAAMrC,KAAK,eAAasC,GAAG,aAAU;EAErC,IAAIrC,OAAO,EAAE;IACT,IAAMwC,KAAK,gCAA6BD,gBAAgB,CAACE,IAAI,CAACC,SAAS,CAAC1C,OAAO,CAAC,CAAC,uBAAmB;IACpG,OAAOwC,KAAK,GAAGzC,KAAK;;EAGxB,OAAOA,KAAK;AAChB,CAAC;AAED,IAAMwC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI3wB,CAAS;EAAA,OAAKA,CAAC,CAAC+wB,OAAO,CAAC,UAAU,EAAE,UAACxwB,CAAC;IAAA,cAAUA,CAAC,CAACywB,UAAU,CAAC,CAAC,CAAC;GAAG,CAAC;AAAA;AAE7F,IAAMpC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAIjsB,SAAoB,EAAEgK,QAAsC;EACvF,IAAIhI,gBAAgB,CAAChC,SAAS,CAAC,EAAE,OAAO,EAAE;EAE1C,IAAAM,oBAAA,GAAmCJ,kBAAkB,CAACF,SAAS,CAAC;IAAAO,qBAAA,GAAAD,oBAAA;IAA1D+R,IAAI,GAAA9R,qBAAA;IAAE+R,IAAI,GAAA/R,qBAAA;IAAAC,sBAAA,GAAAF,oBAAA;IAAI2K,IAAI,GAAAzK,sBAAA;IAAE0K,IAAI,GAAA1K,sBAAA;EAC9B,IAAIS,mBAAmB,CAACjB,SAAS,CAAC,EAAE;IAChC,IAAA4a,qBAAA,GAAgB7Q,0BAA0B,CAACC,QAAQ,CAAC;MAA7Ce,KAAK,GAAA6P,qBAAA;IACZvI,IAAI,GAAG,CAAC;IACRpH,IAAI,GAAGF,KAAK;;EAEhB,IAAI3J,sBAAsB,CAACpB,SAAS,CAAC,EAAE;IACnC,IAAA+a,sBAAA,GAAkBhR,0BAA0B,CAACC,QAAQ,CAAC;MAA7CgB,KAAK,GAAA+P,sBAAA;IACdzI,IAAI,GAAG,CAAC;IACRpH,IAAI,GAAGF,KAAK;;EAGhB,IAAM6G,IAAI,GAAe,EAAE;EAE3B,KAAK,IAAIjS,CAAC,GAAG0S,IAAI,EAAE1S,CAAC,IAAIsL,IAAI,EAAEtL,CAAC,EAAE,EAAE;IAC/B,IAAMuZ,GAAG,GAAa,EAAE;IAExB,KAAK,IAAIrb,CAAC,GAAGuU,IAAI,EAAEvU,CAAC,IAAImN,IAAI,EAAEnN,CAAC,EAAE,EAAE;MAC/B,IAAMiT,KAAK,GAAG/G,QAAQ,CAAClM,CAAC,EAAE8B,CAAC,CAAC;MAC5B,IAAImR,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKrH,SAAS,EAAE;QACvCyP,GAAG,CAACvY,IAAI,CAACmQ,KAAK,IAAI,IAAI,GAAGA,KAAK,GAAG,EAAE,CAAC;;;IAI5Cc,IAAI,CAACjR,IAAI,CAACuY,GAAG,CAAC;;EAGlB,OAAOtH,IAAI;AACf,CAAC;AAED,IAAMyc,QAAO,GAAG,SAAVA,OAAOA,CAAI7O,OAAY,EAAE9C,OAAe;EAC1C,SAAAjM,SAAA,GAAAC,+BAAA,CAAoB8O,OAAO,CAAC8O,QAAQ,GAAA3d,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAA3B2d,KAAK,GAAA5d,KAAA,CAAAG,KAAA;IACZ,IAAIyd,KAAK,CAACC,QAAQ,KAAK9R,OAAO,EAAE;MAC5B,OAAO6R,KAAK;;IAEhB,IAAME,QAAQ,GAAGJ,QAAO,CAACE,KAAK,EAAE7R,OAAO,CAAC;IACxC,IAAI+R,QAAQ,EAAE;MACV,OAAOA,QAAQ;;;AAG3B,CAAC;AAED,IAAMjB,eAAe,GAAG,SAAlBA,eAAeA,CACjBhB,IAAY;EAKZ,IAAMkC,GAAG,GAAGlpB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EACzCipB,GAAG,CAACC,SAAS,GAAGnC,IAAI,CAACoC,IAAI,EAAE;EAE3B,IAAMhd,IAAI,GAAG,EAAE;EACf,IAAI4Z,OAAO,GAAQ/hB,SAAS;EAE5B,IAAMolB,SAAS,GAAGR,QAAO,CAACK,GAAG,EAAE,cAAc,CAAC;EAC9C,IAAIG,SAAS,EAAE;IACX,IAAMC,IAAI,GAAGD,SAAS,CAACE,YAAY,CAAC,SAAS,CAAC;IAC9C,IAAI;MACAvD,OAAO,GAAGyC,IAAI,CAACe,KAAK,CAACF,IAAI,CAAC;KAC7B,CAAC,OAAOlnB,CAAC,EAAE;;EAGhB,IAAMqnB,SAAS,GAAGZ,QAAO,CAACK,GAAG,EAAE,OAAO,CAAC;EACvC,IAAIO,SAAS,EAAE;IACX,SAAAzc,UAAA,GAAA9B,+BAAA,CAAyBue,SAAS,CAACX,QAAQ,GAAA7b,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA5B,IAAA,GAAE;MAAA,IAAlCse,UAAU,GAAAzc,MAAA,CAAA3B,KAAA;MACjB,IAAIoe,UAAU,CAACV,QAAQ,KAAK,OAAO,EAAE;QACjC,SAAAva,UAAA,GAAAvD,+BAAA,CAAiBwe,UAAU,CAACZ,QAAQ,GAAApa,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAArD,IAAA,GAAE;UAAA,IAA3Bue,EAAE,GAAAjb,MAAA,CAAApD,KAAA;UACT,IAAIqe,EAAE,CAACX,QAAQ,KAAK,IAAI,EAAE;YACtB,IAAMtV,GAAG,GAAG,EAAE;YACd,SAAApD,UAAA,GAAApF,+BAAA,CAAiBye,EAAE,CAACb,QAAQ,GAAAvY,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAlF,IAAA,GAAE;cAAA,IAAnBwe,EAAE,GAAArZ,MAAA,CAAAjF,KAAA;cACT,IAAIse,EAAE,CAACZ,QAAQ,KAAK,IAAI,EAAE;gBACtB,IAAIa,GAAG,GAAW,EAAE;gBACpB,IAAID,EAAE,CAACd,QAAQ,CAAC9wB,MAAM,KAAK,CAAC,IAAI4xB,EAAE,CAACd,QAAQ,CAAC,CAAC,CAAC,CAACE,QAAQ,KAAK,GAAG,EAAE;kBAC7D,IAAMc,CAAC,GAAGF,EAAE,CAACd,QAAQ,CAAC,CAAC,CAAC;kBACxB,IAAIgB,CAAC,CAAChB,QAAQ,CAAC9wB,MAAM,KAAK,CAAC,IAAI8xB,CAAC,CAAChB,QAAQ,CAAC,CAAC,CAAC,CAACE,QAAQ,KAAK,MAAM,EAAE;oBAC9Da,GAAG,GAAGC,CAAC,CAAChB,QAAQ,CAAC,CAAC,CAAC,CAACiB,WAAW,CAACX,IAAI,EAAE;mBACzC,MAAM;oBACHS,GAAG,GAAGC,CAAC,CAACC,WAAW,CAACX,IAAI,EAAE;;iBAEjC,MAAM;kBACHS,GAAG,GAAGD,EAAE,CAACG,WAAW,CAACX,IAAI,EAAE;;gBAE/BS,GAAG,GAAGA,GAAG,CAACG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9BH,GAAG,GAAGA,GAAG,CAACG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;gBAEnCtW,GAAG,CAACvY,IAAI,CAAC0uB,GAAG,CAAC;;;YAGrBzd,IAAI,CAACjR,IAAI,CAACuY,GAAG,CAAC;;;;;;EAOlC,OAAO;IACHtH,IAAI,EAAJA,IAAI;IACJ4Z,OAAO,EAAPA;GACH;AACL,CAAC;AAED,IAAMkC,eAAe,GAAG,SAAlBA,eAAeA,CAAI/M,IAAY;EACjC,OAAOA,IAAI,CAAC8O,KAAK,CAAC,OAAO,CAAC,CAAChyB,GAAG,CAAC,UAACspB,IAAI;IAAA,OAAKA,IAAI,CAAC0I,KAAK,CAAC,IAAI,CAAC;IAAC;AAC9D,CAAC;;AC9XD,IAAMC,YAAY,GAAG,GAAG;AAUxB,AAAO,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CACvB7R,MAAU,EACVf,MAAU,EAEVpL,OAAoB,EACpBC,IAAiB;EAEjB,IAAOsM,OAAO,GAAaJ,MAAM;IAAjBK,OAAO,GAAIL,MAAM;EACjC,IAAO2B,OAAO,GAAa1C,MAAM;IAAjB2C,OAAO,GAAI3C,MAAM;EAEjC,IAAMvL,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAASG,OAAO,CAACie,QAAQ,CAAC,CAAC,CAAC;;EAC5C,IAAMne,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAASG,IAAI,CAACge,QAAQ,CAAC,CAAC,CAAC;;EAGzC,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI5nB,KAAa,EAAE6V,MAAc,EAAEf,MAAc;IACnE,OAAO9U,KAAK,GAAG6V,MAAM,GAAG,CAAC,GAAGf,MAAM,GAAGe,MAAM;GAC9C;EAGD,IAAMzM,aAAa,GAAG,SAAhBA,aAAaA,CAAIoH,MAAc,EAAElW;QAAAA;MAAAA,SAAiB,CAAC;;IACrD,IAAMutB,IAAI,GAAGD,gBAAgB,CAACpX,MAAM,EAAEyF,OAAO,EAAEuB,OAAO,CAAC;IACvD,IAAMsQ,QAAQ,GAAGpe,OAAO,CAACie,QAAQ,CAACnX,MAAM,CAAC,GAAG9G,OAAO,CAACie,QAAQ,CAACE,IAAI,CAAC;IAClE,IAAME,MAAM,GAAGvX,MAAM,GAAGyF,OAAO,GAAG,CAAC,GAAGvM,OAAO,CAACie,QAAQ,CAAC1R,OAAO,CAAC,GAAGvM,OAAO,CAACie,QAAQ,CAAC,CAAC,CAAC;IACrF,IAAMpc,IAAI,GAAG7B,OAAO,CAACse,OAAO,CAACxX,MAAM,CAAC;IAEpC,OAAOjH,UAAU,EAAE,GAAGue,QAAQ,GAAGC,MAAM,GAAGztB,MAAM,GAAGiR,IAAI;GAC1D;EAGD,IAAMlC,UAAU,GAAG,SAAbA,UAAUA,CAAI4H,GAAW,EAAE3W;QAAAA;MAAAA,SAAiB,CAAC;;IAC/C,IAAMutB,IAAI,GAAGD,gBAAgB,CAAC3W,GAAG,EAAEiF,OAAO,EAAEuB,OAAO,CAAC;IACpD,IAAMqQ,QAAQ,GAAGne,IAAI,CAACge,QAAQ,CAAC1W,GAAG,CAAC,GAAGtH,IAAI,CAACge,QAAQ,CAACE,IAAI,CAAC;IACzD,IAAME,MAAM,GAAG9W,GAAG,GAAGiF,OAAO,GAAG,CAAC,GAAGvM,IAAI,CAACge,QAAQ,CAACzR,OAAO,CAAC,GAAGvM,IAAI,CAACge,QAAQ,CAAC,CAAC,CAAC;IAC5E,IAAMpc,IAAI,GAAG5B,IAAI,CAACqe,OAAO,CAAC/W,GAAG,CAAC;IAE9B,OAAOzH,UAAU,EAAE,GAAGse,QAAQ,GAAGC,MAAM,GAAGztB,MAAM,GAAGiR,IAAI;GAC1D;EAGD,IAAMvE,WAAW,GAAG,SAAdA,WAAWA,CAAIvE,IAAQ,EAAEnI;QAAAA;MAAAA,SAAa/I,MAAM;;IAC9C,IAAOsR,KAAK,GAAWJ,IAAI;MAAbK,KAAK,GAAIL,IAAI;IAC3B,IAAAwlB,OAAA,GAA2B3tB,MAAM;MAA1BqU,OAAO,GAAAsZ,OAAA;MAAErZ,OAAO,GAAAqZ,OAAA;IACvB,OAAO,CAAC7e,aAAa,CAACvG,KAAK,EAAE8L,OAAO,CAAC,EAAEtF,UAAU,CAACvG,KAAK,EAAE8L,OAAO,CAAC,CAAC;GACrE;EAGD,IAAM0H,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI9F,MAAc,EAAE7B;QAAAA;MAAAA,UAAkB,CAAC;;IACzD,IAAMmZ,QAAQ,GAAGpe,OAAO,CAACie,QAAQ,CAACnX,MAAM,CAAC;IACzC,IAAMjF,IAAI,GAAGiF,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG9G,OAAO,CAACse,OAAO,CAACxX,MAAM,CAAC;IAErD,OAAOsX,QAAQ,GAAGnZ,OAAO,GAAGpD,IAAI;GACnC;EAGD,IAAMiL,aAAa,GAAG,SAAhBA,aAAaA,CAAIvF,GAAW,EAAErC;QAAAA;MAAAA,UAAkB,CAAC;;IACnD,IAAMkZ,QAAQ,GAAGne,IAAI,CAACge,QAAQ,CAAC1W,GAAG,CAAC;IACnC,IAAM1F,IAAI,GAAG0F,GAAG,GAAG,CAAC,GAAG,CAAC,GAAGtH,IAAI,CAACqe,OAAO,CAAC/W,GAAG,CAAC;IAE5C,OAAO6W,QAAQ,GAAGlZ,OAAO,GAAGrD,IAAI;GACnC;EAGD,IAAM4J,cAAc,GAAG,SAAjBA,cAAcA,CAAI1S,IAAQ,EAAEnI;QAAAA;MAAAA,SAAa/I,MAAM;;IACjD,IAAOsR,KAAK,GAAWJ,IAAI;MAAbK,KAAK,GAAIL,IAAI;IAC3B,IAAAylB,QAAA,GAA2B5tB,MAAM;MAA1BqU,OAAO,GAAAuZ,QAAA;MAAEtZ,OAAO,GAAAsZ,QAAA;IACvB,OAAO,CAAC5R,gBAAgB,CAACzT,KAAK,EAAE8L,OAAO,CAAC,EAAE6H,aAAa,CAAC1T,KAAK,EAAE8L,OAAO,CAAC,CAAC;GAC3E;EAGD,IAAMuZ,YAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAa,EAAE9tB,MAAc,EAAEub,MAAc,EAAEf,MAAc,EAAEuT,MAAmB;IACpG,IAAQV,QAAQ,GAAkBU,MAAM,CAAhCV,QAAQ;MAAEW,WAAW,GAAKD,MAAM,CAAtBC,WAAW;IAE7B,IAAMC,MAAM,GAAGZ,QAAQ,CAAC,CAAC,CAAC;IAC1B,IAAIS,KAAK,GAAGG,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7B,IAAM5Q,MAAM,GAAGgQ,QAAQ,CAAC9R,MAAM,CAAC;IAC/B,IAAIuS,KAAK,GAAGzQ,MAAM,EAAE;MAChB,OAAO2Q,WAAW,CAACF,KAAK,EAAE9tB,MAAM,CAAC;KACpC,MAAM;MACH,IAAMwtB,QAAQ,GAAGM,KAAK,GAAGG,MAAM;MAC/B,IAAMV,IAAI,GAAGF,QAAQ,CAAC7S,MAAM,GAAGe,MAAM,CAAC;MACtC,IAAMkS,MAAM,GAAGJ,QAAQ,CAAC9R,MAAM,CAAC,GAAG8R,QAAQ,CAAC,CAAC,CAAC;MAC7C,OAAOW,WAAW,CAACT,IAAI,GAAGC,QAAQ,GAAGC,MAAM,EAAEztB,MAAM,CAAC;;GAE3D;EAGD,IAAM0S,aAAa,GAAG,SAAhBA,aAAaA,CAAIwb,MAAc,EAAE7Z;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OACtDwZ,YAAY,CAACK,MAAM,EAAE7Z,OAAO,EAAEsH,OAAO,EAAEuB,OAAO,EAAE9N,OAAO,CAAC;;EAC5D,IAAMuD,UAAU,GAAG,SAAbA,UAAUA,CAAIwb,MAAc,EAAE7Z;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OAAKuZ,YAAY,CAACM,MAAM,EAAE7Z,OAAO,EAAEsH,OAAO,EAAEuB,OAAO,EAAE9N,IAAI,CAAC;;EAGjH,IAAML,WAAW,GAAG,SAAdA,WAAWA,CAAI8e,KAAS,EAAE9tB;QAAAA;MAAAA,SAAa/I,MAAM;;IAC/C,IAAOi3B,MAAM,GAAYJ,KAAK;MAAfK,MAAM,GAAIL,KAAK;IAC9B,IAAAM,QAAA,GAA2BpuB,MAAM;MAA1BqU,OAAO,GAAA+Z,QAAA;MAAE9Z,OAAO,GAAA8Z,QAAA;IACvB,OAAO,CAAC1b,aAAa,CAACwb,MAAM,EAAE7Z,OAAO,CAAC,EAAE1B,UAAU,CAACwb,MAAM,EAAE7Z,OAAO,CAAC,CAAC;GACvE;EAGD,IAAM+Z,eAAe,GAAG,SAAlBA,eAAeA,CAAIP,KAAa,EAAE9tB,MAAc,EAAE+tB,MAAmB;IACvE,IAAID,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAExB,IAAQE,WAAW,GAAKD,MAAM,CAAtBC,WAAW;IACnB,OAAOA,WAAW,CAACF,KAAK,EAAE9tB,MAAM,CAAC;GACpC;EAGD,IAAM+b,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAImS,MAAc,EAAE7Z;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OAAKga,eAAe,CAACH,MAAM,EAAE7Z,OAAO,EAAEjF,OAAO,CAAC;;EAC3G,IAAM6M,aAAa,GAAG,SAAhBA,aAAaA,CAAIkS,MAAc,EAAE7Z;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OAAK+Z,eAAe,CAACF,MAAM,EAAE7Z,OAAO,EAAEjF,IAAI,CAAC;;EAGrG,IAAMuL,cAAc,GAAG,SAAjBA,cAAcA,CAAIkT,KAAS,EAAE9tB;QAAAA;MAAAA,SAAa/I,MAAM;;IAClD,IAAOi3B,MAAM,GAAYJ,KAAK;MAAfK,MAAM,GAAIL,KAAK;IAC9B,IAAAQ,QAAA,GAA2BtuB,MAAM;MAA1BqU,OAAO,GAAAia,QAAA;MAAEha,OAAO,GAAAga,QAAA;IACvB,OAAO,CAACvS,gBAAgB,CAACmS,MAAM,EAAE7Z,OAAO,CAAC,EAAE4H,aAAa,CAACkS,MAAM,EAAE7Z,OAAO,CAAC,CAAC;GAC7E;EAGD,IAAMia,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIjT,IAAY,EAAEC,MAAc,EAAEf,MAAc,EAAEuT,MAAmB;IACxF,IAAM5d,OAAO,MAAAE,MAAA,CAAO1V,GAAG,CAAC4gB,MAAM,CAAC,CAAC;IAEhC,IAAQ8R,QAAQ,GAAaU,MAAM,CAA3BV,QAAQ;MAAEmB,MAAM,GAAKT,MAAM,CAAjBS,MAAM;IAExB,IAAMnR,MAAM,GAAGmR,MAAM,CAACjT,MAAM,GAAG,CAAC,CAAC;IACjC,IAAMkT,SAAS,GAAGpB,QAAQ,CAAC7S,MAAM,GAAGe,MAAM,CAAC;IAE3C,IAAMiS,QAAQ,GAAGlS,IAAI,GAAG+B,MAAM;IAC9B,KAAK,IAAIjiB,CAAC,GAAGof,MAAM,GAAGe,MAAM,EAAE8R,QAAQ,CAACjyB,CAAC,CAAC,GAAGqzB,SAAS,IAAIjB,QAAQ,EAAE,EAAEpyB,CAAC,EAAE;MACpE+U,OAAO,CAAC/R,IAAI,CAAChD,CAAC,CAAC;;IAGnB,OAAO+U,OAAO;GACjB;EAGD,IAAMue,eAAe,GAAG,SAAlBA,eAAeA,CAAIpT,IAAQ;IAC7B,IAAOqT,KAAK,GAAWrT,IAAI;MAAbsT,KAAK,GAAItT,IAAI;IAC3B,OAAO;MACHlM,OAAO,EAAEmf,iBAAiB,CAACI,KAAK,EAAEhT,OAAO,EAAEuB,OAAO,EAAE9N,OAAO,CAAC;MAC5DC,IAAI,EAAEkf,iBAAiB,CAACK,KAAK,EAAEhT,OAAO,EAAEuB,OAAO,EAAE9N,IAAI;KACxD;GACJ;EAED,IAAM1C,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAASyC,OAAO,CAACzC,UAAU,EAAE,GAAG0C,IAAI,CAAC1C,UAAU,EAAE;;EAEjE,OAAO;IACHmC,aAAa,EAAbA,aAAa;IACbC,UAAU,EAAVA,UAAU;IACVrC,WAAW,EAAXA,WAAW;IAEXsP,gBAAgB,EAAhBA,gBAAgB;IAChBE,aAAa,EAAbA,aAAa;IACbrB,cAAc,EAAdA,cAAc;IAEdnI,aAAa,EAAbA,aAAa;IACbC,UAAU,EAAVA,UAAU;IACV3D,WAAW,EAAXA,WAAW;IAEX+M,gBAAgB,EAAhBA,gBAAgB;IAChBE,aAAa,EAAbA,aAAa;IACbrB,cAAc,EAAdA,cAAc;IAEd8T,eAAe,EAAfA,eAAe;IACfzf,UAAU,EAAVA,UAAU;IACVC,UAAU,EAAVA,UAAU;IAEVvC,UAAU,EAAVA;GACH;AACL,CAAC;AAYD,AAAO,IAAMkiB,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,KAAgC;EAC5D,IAAMC,OAAO,GAAGC,UAAU,CAAC7B,YAAY,CAAC;EACxC,IAAMzN,KAAK,GAAGsP,UAAU,CAAC7B,YAAY,CAAC;EAEtC,IAAIvgB,OAAO,GAAG,CAAC;EACfmiB,OAAO,CAACnsB,GAAG,CAAC,CAAC,EAAEksB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EAGzB,IAAMpB,OAAO,GAAG,SAAVA,OAAOA,CAAItyB,CAAS;IACtB,IAAIA,CAAC,GAAG,CAAC,EAAE,OAAO0zB,KAAK,CAAC1zB,CAAC,CAAC;IAC1B,IAAIskB,KAAK,CAAC5Z,GAAG,CAAC1K,CAAC,CAAC,EAAE,OAAOskB,KAAK,CAAC/c,GAAG,CAACvH,CAAC,CAAE;IAEtC,IAAM6V,IAAI,GAAG6d,KAAK,CAAC1zB,CAAC,CAAC,IAAI,CAAC;IAC1BskB,KAAK,CAAC9c,GAAG,CAACxH,CAAC,EAAE6V,IAAI,CAAC;IAClB,OAAOA,IAAI;GACd;EAGD,IAAMge,SAAS,GAAG,SAAZA,SAASA,CAAI7zB,CAAS;IACxB,IAAIA,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI2zB,OAAO,CAACjpB,GAAG,CAAC1K,CAAC,CAAC,EAAE,OAAO2zB,OAAO,CAACpsB,GAAG,CAACvH,CAAC,CAAE;IAE1C,IAAIiuB,CAAC,GAAG0F,OAAO,CAACG,IAAI,EAAE,IAAI,CAAC,CAAC;IAG5B,OAAO7F,CAAC,GAAGjuB,CAAC,EAAE;MACV,IAAM6V,IAAI,GAAGyc,OAAO,CAACrE,CAAC,CAAC;MACvB,IAAM7O,MAAM,GAAG,CAACuU,OAAO,CAACpsB,GAAG,CAAC0mB,CAAC,CAAC,IAAI,CAAC,IAAIpY,IAAI;MAC3C8d,OAAO,CAACnsB,GAAG,CAAC,EAAEymB,CAAC,EAAE7O,MAAM,CAAC;;IAG5B,OAAOuU,OAAO,CAACpsB,GAAG,CAACvH,CAAC,CAAE;GACzB;EAGD,IAAMiyB,QAAQ,GAAG,SAAXA,QAAQA,CAAIjyB,CAAS;IAAA,OAAK6zB,SAAS,CAAC7zB,CAAC,CAAC;;EAC5C,IAAMozB,MAAM,GAAG,SAATA,MAAMA,CAAIpzB,CAAS;IAAA,OAAK6zB,SAAS,CAAC7zB,CAAC,GAAG,CAAC,CAAC;;EAG9C,IAAM4yB,WAAW,GAAG,SAAdA,WAAWA,CAAI1yB,CAAS,EAAE0E;QAAAA;MAAAA,SAAiB,CAAC;;IAE9C,IAAImvB,IAAI,GAAGJ,OAAO,CAACG,IAAI,EAAE,IAAI,CAAC;IAG9B,OAAOD,SAAS,CAACE,IAAI,CAAC,GAAG7zB,CAAC,IAAIoyB,OAAO,CAACyB,IAAI,CAAC,EAAEA,IAAI,IAAI,EAAE;IAGvD,IAAI/oB,KAAK,GAAG,CAAC;IACb,IAAIC,GAAG,GAAG8oB,IAAI;IACd,OAAO/oB,KAAK,GAAGC,GAAG,EAAE;MAChB,IAAI+oB,GAAG,GAAGhpB,KAAK,GAAGnK,IAAI,CAAC6L,KAAK,CAAC,CAACzB,GAAG,GAAGD,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;MACnD,IAAImI,KAAK,GAAG0gB,SAAS,CAACG,GAAG,CAAC,IAAIpvB,MAAM,GAAGA,MAAM,GAAG0tB,OAAO,CAAC0B,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MACrE,IAAI7gB,KAAK,IAAIjT,CAAC,EAAE8K,KAAK,GAAGgpB,GAAG,CAAC,KACvB/oB,GAAG,GAAG+oB,GAAG,GAAG,CAAC;;IAGtB,OAAOhpB,KAAK;GACf;EAED,IAAMipB,UAAU,GAAG,SAAbA,UAAUA,CAAI3pB,KAAa;IAC7BA,KAAK,GAAGzJ,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEkK,KAAK,CAAC;IAC1BqpB,OAAO,CAACO,QAAQ,CAAC5pB,KAAK,CAAC;IACvBga,KAAK,CAAC4P,QAAQ,CAAC5pB,KAAK,CAAC;IACrBkH,OAAO,EAAE;GACZ;EAED,IAAM2iB,QAAQ,GAAG,SAAXA,QAAQA,CAAI10B,CAA4B;IAC1Ci0B,KAAK,GAAGj0B,CAAC;GACZ;EACD,IAAM8R,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAASC,OAAO;;EAEhC,OAAO;IAAE8gB,OAAO,EAAPA,OAAO;IAAEL,QAAQ,EAARA,QAAQ;IAAEmB,MAAM,EAANA,MAAM;IAAE7hB,UAAU,EAAVA,UAAU;IAAEqhB,WAAW,EAAXA,WAAW;IAAEuB,QAAQ,EAARA,QAAQ;IAAEF,UAAU,EAAVA;GAAY;AACvF,CAAC;AAID,IAAML,UAAU,GAAG,SAAbA,UAAUA,CAAIQ;MAAAA;IAAAA,cAAsB,GAAG;;EACzC,IAAIC,IAAgB;EACpB,IAAIlf,MAAmB;EACvB,IAAI4e,IAAI,GAAG,CAAC;EAEZ,IAAMO,IAAI,GAAG,GAAG;EAEhB,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAI1e,IAAY;IAC1B,IAAI2e,OAAO,GAAG,IAAIC,UAAU,CAAC5e,IAAI,CAAC;IAClC,IAAI6e,SAAS,GAAG,IAAIC,WAAW,CAAC9e,IAAI,CAAC;IACrC,IAAIwe,IAAI,EAAEO,IAAI,CAACP,IAAI,EAAEG,OAAO,CAAC;IAC7B,IAAIrf,MAAM,EAAEyf,IAAI,CAACzf,MAAM,EAAEuf,SAAS,CAAC;IACnCL,IAAI,GAAGG,OAAO;IACdrf,MAAM,GAAGuf,SAAS;GACrB;EACDH,QAAQ,CAACH,WAAW,CAAC;EAErB,IAAMQ,IAAI,GAAG,SAAPA,IAAIA,CAAIh1B,IAA8B,EAAEqF,EAA4B;IACtE,IAAIzF,CAAC,GAAGqB,IAAI,CAACV,GAAG,CAACP,IAAI,CAACC,MAAM,EAAEoF,EAAE,CAACpF,MAAM,CAAC;IACxC,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAE,EAAEQ,CAAC,EAAE;MACxBiF,EAAE,CAACjF,CAAC,CAAC,GAAGJ,IAAI,CAACI,CAAC,CAAC;;GAEtB;EAED,IAAM60B,MAAM,GAAG,SAATA,MAAMA,CAAIhf,IAAY;IACxB,IAAM2R,CAAC,GAAGrS,MAAM,CAACtV,MAAM;IACvB,IAAM8nB,IAAI,GAAG9mB,IAAI,CAACiY,KAAK,CAAC0O,CAAC,GAAG8M,IAAI,CAAC;IACjC,IAAI9M,CAAC,GAAG3R,IAAI,EAAE0e,QAAQ,CAAC1zB,IAAI,CAACT,GAAG,CAACunB,IAAI,EAAE9R,IAAI,CAAC,CAAC;GAC/C;EAED,IAAMqe,QAAQ,GAAG,SAAXA,QAAQA,CAAIre,IAAY;IAC1B,IAAM2R,CAAC,GAAGrS,MAAM,CAACtV,MAAM;IAGvB,IAAI2nB,CAAC,GAAG3R,IAAI,EAAE;IAGd,IAAMgS,MAAM,GAAGhnB,IAAI,CAACiY,KAAK,CAACjD,IAAI,GAAGye,IAAI,CAAC;IACtC,IAAI9M,CAAC,GAAGK,MAAM,EAAE0M,QAAQ,CAAC1e,IAAI,CAAC,CAAC,KAE1B,KAAK,IAAI7V,CAAC,GAAG6V,IAAI,EAAE7V,CAAC,GAAGwnB,CAAC,EAAE,EAAExnB,CAAC,EAAEq0B,IAAI,CAACr0B,CAAC,CAAC,GAAG,CAAC;IAG/C+zB,IAAI,GAAGlzB,IAAI,CAACV,GAAG,CAAC4zB,IAAI,EAAEle,IAAI,CAAC;IAC3B,OAAOke,IAAI,GAAG,CAAC,IAAI,CAACM,IAAI,CAACN,IAAI,CAAC,EAAEA,IAAI,EAAE;GACzC;EAED,IAAMe,OAAO,GAAG,SAAVA,OAAOA;IAAA,OAAUT,IAAI,CAACN,IAAI,CAAC,GAAGA,IAAI,GAAG,IAAI;GAAC;EAEhD,IAAMgB,QAAQ,GAAG,SAAXA,QAAQA,CAAI/0B,CAAS,EAAEmT,KAAa;IACtC0hB,MAAM,CAAC70B,CAAC,GAAG,CAAC,CAAC;IACbmV,MAAM,CAACnV,CAAC,CAAC,GAAGmT,KAAK;IACjBkhB,IAAI,CAACr0B,CAAC,CAAC,GAAG,CAAC;IACX+zB,IAAI,GAAGlzB,IAAI,CAACT,GAAG,CAAC2zB,IAAI,EAAE/zB,CAAC,CAAC;GAC3B;EAED,IAAMg1B,QAAQ,GAAG,SAAXA,QAAQA,CAAIh1B,CAAS;IAAA,OAAMq0B,IAAI,CAACr0B,CAAC,CAAC,GAAGmV,MAAM,CAACnV,CAAC,CAAC,GAAG,IAAI;GAAC;EAC5D,IAAMi1B,QAAQ,GAAG,SAAXA,QAAQA,CAAIj1B,CAAS;IAAA,OAAK,CAAC,CAACq0B,IAAI,CAACr0B,CAAC,CAAC;;EAEzC,OAAO;IAAEk0B,QAAQ,EAARA,QAAQ;IAAE1sB,GAAG,EAAEutB,QAAQ;IAAExtB,GAAG,EAAEytB,QAAQ;IAAEtqB,GAAG,EAAEuqB,QAAQ;IAAEnB,IAAI,EAAEgB;GAAS;AACnF,CAAC;;AC1SM,IAAMI,WAAW,GAAG,SAAdA,WAAWA,CACpBjtB,OAAiC,EACjCktB,aAA4B,EAC5BlnB,UAAsB,EACtBC,YAA2B,EAE3BC,UAA8B,EAC9Bic,SAAsC,EAEtChoB,SAAoB,EACpBgzB,mBAAgC,EAChCC,SAAkB,EAElB5jB,YAAuB,EACvBlU,QAA0B,EAC1B8X,WAA+C,EAC/CigB,UAAqB,EACrB34B,UAA4B,EAE5B0tB,aAAiE,EACjEC,iBAAqD,EACrDzd,WAAwD,EAExDuB,eAAoE,EACpEC,YAAiE,EACjEC,oBAAwD,EACxDC,iBAAqD,EAErDgU,UAAc;EAEd,IAAQ3a,MAAM,GAAKK,OAAO,CAAlBL,MAAM;EACd,IAAQG,KAAK,GAAaH,MAAM,CAAxBG,KAAK;IAAEC,MAAM,GAAKJ,MAAM,CAAjBI,MAAM;EACrB,IACIutB,aAAa,GAQbpnB,UAAU,CARVonB,aAAa;IACbnkB,cAAc,GAOdjD,UAAU,CAPViD,cAAc;IACdC,iBAAiB,GAMjBlD,UAAU,CANVkD,iBAAiB;IACjBmkB,aAAa,GAKbrnB,UAAU,CALVqnB,aAAa;IACbC,UAAU,GAIVtnB,UAAU,CAJVsnB,UAAU;IACV13B,UAAU,GAGVoQ,UAAU,CAHVpQ,UAAU;IACVV,WAAW,GAEX8Q,UAAU,CAFV9Q,WAAW;IACXW,aAAa,GACbmQ,UAAU,CADVnQ,aAAa;EAEjB,IAAQgW,OAAO,GAAW9F,YAAY,CAA9B8F,OAAO;IAAEC,IAAI,GAAK/F,YAAY,CAArB+F,IAAI;EACrB,IAAQP,aAAa,GAAkDzF,UAAU,CAAzEyF,aAAa;IAAEC,UAAU,GAAsC1F,UAAU,CAA1D0F,UAAU;IAAEiN,gBAAgB,GAAoB3S,UAAU,CAA9C2S,gBAAgB;IAAEE,aAAa,GAAK7S,UAAU,CAA5B6S,aAAa;EAElE,IAAM4U,aAAa,GAAwB,EAAE;EAC7C,IAAMvV,MAAM,GAAO,CAACqV,aAAa,EAAEC,UAAU,CAAC;EAE9C,IAAM1a,OAAO,GAAG6F,gBAAgB,CAAC,CAAC,CAAC;EACnC,IAAMvG,OAAO,GAAGyG,aAAa,CAAC,CAAC,CAAC;EAEhC6U,YAAY,CAAC/tB,MAAM,CAAC;EACpBK,OAAO,CAAC2B,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE7B,KAAK,EAAEC,MAAM,CAAC;EACtCC,OAAO,CAAC2tB,SAAS,GAAG,OAAO;EAC3B3tB,OAAO,CAAC4tB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE9tB,KAAK,EAAEC,MAAM,CAAC;EACrCC,OAAO,CAAC5K,WAAW,GAAG,WAAW;EAGjC,SAAAyV,SAAA,GAAAC,+BAAA,CAAgBkB,IAAI,GAAAjB,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAAXjR,CAAC,GAAAgR,KAAA,CAAAG,KAAA;IACR,SAAA2iB,WAAA,GAAA/iB,+BAAA,CAAgBiB,OAAO,GAAA+hB,OAAA,IAAAA,OAAA,GAAAD,WAAA,IAAA7iB,IAAA,GAAE;MAAA,IAAd/S,CAAC,GAAA61B,OAAA,CAAA5iB,KAAA;MACR,IAAMxR,MAAI,GAAG+R,aAAa,CAACxT,CAAC,CAAC;MAC7B,IAAM4B,OAAK,GAAG4R,aAAa,CAACxT,CAAC,EAAE,CAAC,CAAC;MACjC,IAAM0B,KAAG,GAAG+R,UAAU,CAAC3R,CAAC,CAAC;MACzB,IAAMD,QAAM,GAAG4R,UAAU,CAAC3R,CAAC,EAAE,CAAC,CAAC;MAE/B,IAAAg0B,UAAA,GAAsB5L,SAAS,CAAClqB,CAAC,EAAE8B,CAAC,CAAC;QAA7BpD,SAAS,GAAAo3B,UAAA,CAATp3B,SAAS;MACjB,IAAIA,SAAS,EAAE;QACXqJ,OAAO,CAAC2tB,SAAS,GAAGh3B,SAAS;QAC7BqJ,OAAO,CAAC4tB,QAAQ,CAACl0B,MAAI,EAAEC,KAAG,EAAEE,OAAK,GAAGH,MAAI,EAAEI,QAAM,GAAGH,KAAG,CAAC;;;;EAKnE,IAAMq0B,eAAe,GAAG,CAAC7xB,gBAAgB,CAAChC,SAAS,CAAC;EACpD,IAAM8zB,kBAAkB,GAAGvyB,cAAc,CAACvB,SAAS,CAAC;EACpD,IAAM+zB,qBAAqB,GAAGryB,iBAAiB,CAAC1B,SAAS,CAAC;EAG1D,IAAAg0B,qBAAA,GAA6BC,sBAAsB,CAACj0B,SAAS,EAAE6L,UAAU,EAAEkS,MAAM,EAAEoC,UAAU,CAAC;IAAvF+T,QAAQ,GAAAF,qBAAA;IAAEG,QAAQ,GAAAH,qBAAA;EAGzB,IAAIH,eAAe,EAAE;IACjB,IAAAO,UAAA,GAAuCF,QAAQ;MAAvC30B,IAAI,GAAA60B,UAAA;MAAE50B,GAAG,GAAA40B,UAAA;MAAAC,WAAA,GAAsBH,QAAQ;MAA1Bx0B,KAAK,GAAA20B,WAAA;MAAE10B,MAAM,GAAA00B,WAAA;IAClCxuB,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACE,mBAAmB;IAC9CyL,OAAO,CAAC4tB,QAAQ,CAACl0B,IAAI,EAAEC,GAAG,EAAEE,KAAK,GAAGH,IAAI,EAAEI,MAAM,GAAGH,GAAG,CAAC;;EAG3D,IAAI,CAACwP,cAAc,EAAE;IAEjBnJ,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACO,gBAAgB;IAC3CoL,OAAO,CAAC4tB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE9a,OAAO,EAAE9S,OAAO,CAACL,MAAM,CAACI,MAAM,CAAC;IAGtD,IAAIiuB,eAAe,IAAI,CAACE,qBAAqB,EAAE;MAC3C,IAAAO,WAAA,GAA8BJ,QAAQ;QAA5B10B,IAAG,GAAA80B,WAAA;QAAAC,WAAA,GAAiBL,QAAQ;QAAnBv0B,OAAM,GAAA40B,WAAA;MACzB1uB,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACS,YAAY;MACvCkL,OAAO,CAAC4tB,QAAQ,CAAC,CAAC,EAAEj0B,IAAG,EAAEmZ,OAAO,EAAEhZ,OAAM,GAAGH,IAAG,CAAC;;;EAIvD,IAAI,CAACyP,iBAAiB,EAAE;IAEpBpJ,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACO,gBAAgB;IAC3CoL,OAAO,CAAC4tB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE5tB,OAAO,CAACL,MAAM,CAACG,KAAK,EAAEsS,OAAO,CAAC;IAGrD,IAAI4b,eAAe,IAAI,CAACC,kBAAkB,EAAE;MACxC,IAAAU,WAAA,GAA0BN,QAAQ;QAA1B30B,KAAI,GAAAi1B,WAAA;QAAAC,WAAA,GAAcP,QAAQ;QAAlBx0B,MAAK,GAAA+0B,WAAA;MACrB5uB,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACS,YAAY;MACvCkL,OAAO,CAAC4tB,QAAQ,CAACl0B,KAAI,EAAE,CAAC,EAAEG,MAAK,GAAGH,KAAI,EAAE0Y,OAAO,CAAC;;;EAKxDpS,OAAO,CAAC6uB,WAAW,GAAGx6B,MAAM,CAACG,QAAQ;EACrCwL,OAAO,CAAC8uB,SAAS,GAAG,CAAC;EAErB,IAAMC,SAAS,GAAGzB,aAAa,GAAGxa,OAAO,GAAG9S,OAAO,CAACL,MAAM,CAACG,KAAK;EAChE,IAAMkvB,UAAU,GAAG1B,aAAa,GAAGlb,OAAO,GAAGpS,OAAO,CAACL,MAAM,CAACI,MAAM;EAElE,IAAMkvB,aAAa,GAAG,SAAhBA,aAAaA,CAAIh3B,CAAS,EAAE8H,MAAc;IAC5CC,OAAO,CAACkvB,SAAS,EAAE;IACnBlvB,OAAO,CAACmvB,MAAM,CAACl3B,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAC1B+H,OAAO,CAACovB,MAAM,CAACn3B,CAAC,GAAG,GAAG,EAAE8H,MAAM,CAAC;IAC/BC,OAAO,CAACqvB,MAAM,EAAE;GACnB;EAED,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIv1B,CAAS,EAAE+F,KAAa;IAC3CE,OAAO,CAACkvB,SAAS,EAAE;IACnBlvB,OAAO,CAACmvB,MAAM,CAAC,CAAC,EAAEp1B,CAAC,GAAG,GAAG,CAAC;IAC1BiG,OAAO,CAACovB,MAAM,CAACtvB,KAAK,EAAE/F,CAAC,GAAG,GAAG,CAAC;IAC9BiG,OAAO,CAACqvB,MAAM,EAAE;GACnB;EAEDJ,aAAa,CAACnc,OAAO,EAAE9S,OAAO,CAACL,MAAM,CAACI,MAAM,CAAC;EAC7CuvB,aAAa,CAACld,OAAO,EAAEpS,OAAO,CAACL,MAAM,CAACG,KAAK,CAAC;EAE5C,SAAA8M,UAAA,GAAA9B,+BAAA,CAAqBiB,OAAO,GAAAc,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA5B,IAAA,GAAE;IAAA,IAAnB6H,QAAM,GAAAhG,MAAA,CAAA3B,KAAA;IACb,IAAMrR,OAAK,GAAG4R,aAAa,CAACoH,QAAM,EAAE,CAAC,CAAC;IACtCoc,aAAa,CAACp1B,OAAK,EAAEm1B,UAAU,CAAC;;EAGpC,SAAA3gB,UAAA,GAAAvD,+BAAA,CAAkBkB,IAAI,GAAAsC,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAArD,IAAA,GAAE;IAAA,IAAbsI,KAAG,GAAAhF,MAAA,CAAApD,KAAA;IACV,IAAMpR,QAAM,GAAG4R,UAAU,CAAC4H,KAAG,EAAE,CAAC,CAAC;IACjCgc,aAAa,CAACx1B,QAAM,EAAEi1B,SAAS,CAAC;;EAGpC,IAAA30B,mBAAA,GAAqCC,kBAAkB,CAACF,SAAS,CAAC;IAAAG,oBAAA,GAAAF,mBAAA;IAA1DoS,IAAI,GAAAlS,oBAAA;IAAEmS,IAAI,GAAAnS,oBAAA;IAAAC,qBAAA,GAAAH,mBAAA;IAAIgL,IAAI,GAAA7K,qBAAA;IAAE8K,IAAI,GAAA9K,qBAAA;EAGhC,IAAI,CAAC4O,cAAc,EAAE;IACjBnJ,OAAO,CAACuvB,YAAY,GAAG,QAAQ;IAC/BvvB,OAAO,CAAC/J,SAAS,GAAG,QAAQ;IAC5B+J,OAAO,CAACuiB,IAAI,GAAGvsB,kBAAkB,CAACE,QAAQ,GAAG,KAAK,GAAGF,kBAAkB,CAACS,UAAU;IAClFuJ,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACQ,UAAU;IAErC,SAAAqb,UAAA,GAAApF,+BAAA,CAAkBkB,IAAI,GAAAmE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAlF,IAAA,GAAE;MAAA,IAAbsI,GAAG,GAAAnD,MAAA,CAAAjF,KAAA;MACV,IAAMskB,OAAO,SAAMlc,GAAG,GAAG,CAAC,CAAE;MAI5B,IAAMmc,QAAQ,GAAGz3B,SAAS,CAACsb,GAAG,EAAE7G,IAAI,EAAEpH,IAAI,CAAC;MAE3C,IAAMqqB,QAAQ,GAAGtpB,YAAY,CAACkN,GAAG,CAAC;MAClC,IAAMqc,YAAY,GAAGD,QAAQ,IAAI,IAAI,KAAIppB,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAE7D,GAAG,CAACitB,QAAQ,CAAC;MAEzE,IAAME,cAAc,GAAG3B,kBAAkB,IAAIwB,QAAQ;MACrD,IAAMI,eAAe,GAAG5B,kBAAkB,IAAI0B,YAAY;MAE1D,IAAMtvB,KAAK,GAAGuvB,cAAc,GACtB74B,qBAAqB,GACrB84B,eAAe,GACb74B,2BAA2B,GAC3By4B,QAAQ,GACN34B,mBAAmB,GACnB3C,QAAQ;MAElB,IAAM27B,aAAa,GAAAnc,QAAA,KAAQ9c,2BAA2B,EAAKwJ,KAAK,CAAE;MAElE,IAAM1G,KAAG,GAAG+R,UAAU,CAAC4H,GAAG,CAAC;MAC3B,IAAMxZ,QAAM,GAAG4R,UAAU,CAAC4H,GAAG,EAAE,CAAC,CAAC;MAEjC,IAAMyc,UAAU,GAAGC,UAAU,CACzBhwB,OAAO,EACPktB,aAAa,EACbsC,OAAO,EACPM,aAAa,EACb,CAAC,EACDn2B,KAAG,EACHmZ,OAAO,EACPhZ,QAAM,GAAGH,KAAG,CACf;MACD,IAAIo2B,UAAU,EAAEtC,aAAa,CAAC1yB,IAAI,CAAAC,KAAA,CAAlByyB,aAAa,EAASsC,UAAU,CAAC;;;EAKzD,IAAI,CAAC3mB,iBAAiB,EAAE;IACpBpJ,OAAO,CAACuvB,YAAY,GAAG,QAAQ;IAE/B,SAAAjf,UAAA,GAAAxF,+BAAA,CAAqBiB,OAAO,GAAAwE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAtF,IAAA,GAAE;MAAA,IAAAilB,cAAA;MAAA,IAAnBpd,MAAM,GAAAtC,MAAA,CAAArF,KAAA;MAGb,IAAMukB,SAAQ,GAAGz3B,SAAS,CAAC6a,MAAM,EAAErG,IAAI,EAAEpH,IAAI,CAAC;MAE9C,IAAMsqB,SAAQ,GAAGvpB,eAAe,CAAC0M,MAAM,CAAC;MACxC,IAAMqd,eAAe,GAAGR,SAAQ,IAAI,IAAI,KAAIrpB,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAE5D,GAAG,CAACitB,SAAQ,CAAC;MAE/E,IAAMS,UAAU,GAAGjC,qBAAqB,IAAI,CAACD,kBAAkB,KAAKwB,SAAQ,IAAIS,eAAe,CAAC;MAChG,IAAME,aAAa,GAAGD,UAAU,GAAGp5B,qBAAqB,GAAG5C,QAAQ;MACnE,IAAMk8B,WAAW,GAAGZ,SAAQ,GAAG34B,mBAAmB,GAAG3C,QAAQ;MAC7D,IAAMkM,MAAK,GAAAsT,QAAA,KACJ9c,2BAA2B,EAC3BwrB,iBAAiB,CAACxP,MAAM,CAAC,EACzBwd,WAAW,EACXD,aAAa,CACnB;MAED,IAAM12B,MAAI,GAAG+R,aAAa,CAACoH,MAAM,CAAC;MAClC,IAAMhZ,OAAK,GAAG4R,aAAa,CAACoH,MAAM,EAAE,CAAC,CAAC;MAEtC,IAAM2c,QAAO,IAAAS,cAAA,GAAG7N,aAAa,CAACvP,MAAM,EAAExS,MAAK,CAAC,YAAA4vB,cAAA,GAAIK,iBAAiB,CAACzd,MAAM,GAAG,CAAC,CAAC;MAE7E,IAAMkd,WAAU,GAAGC,UAAU,CAAChwB,OAAO,EAAEktB,aAAa,EAAEsC,QAAO,EAAEnvB,MAAK,EAAE3G,MAAI,EAAE,CAAC,EAAEG,OAAK,GAAGH,MAAI,EAAE0Y,OAAO,CAAC;MACrG,IAAI2d,WAAU,EAAEtC,aAAa,CAAC1yB,IAAI,CAAAC,KAAA,CAAlByyB,aAAa,EAASsC,WAAU,CAAC;;;EAKzD,IAAI/B,eAAe,EAAE;IACjBhuB,OAAO,CAAC6uB,WAAW,GAAGx6B,MAAM,CAACC,eAAe;IAC5C0L,OAAO,CAAC8uB,SAAS,GAAG,CAAC;IACrB9uB,OAAO,CAACuwB,WAAW,GAAGnD,SAAS,GAAG,CAAC,GAAG,GAAG;IAEzC,IAAAoD,WAAA,GAAuCnC,QAAQ;MAAvC30B,MAAI,GAAA82B,WAAA;MAAE72B,KAAG,GAAA62B,WAAA;MAAAC,WAAA,GAAsBpC,QAAQ;MAA1Bx0B,OAAK,GAAA42B,WAAA;MAAE32B,QAAM,GAAA22B,WAAA;IAClCzwB,OAAO,CAAC0wB,UAAU,CAACh3B,MAAI,EAAEC,KAAG,EAAEE,OAAK,GAAGH,MAAI,GAAG,CAAC,EAAEI,QAAM,GAAGH,KAAG,GAAG,CAAC,CAAC;IAEjEqG,OAAO,CAACuwB,WAAW,GAAG,CAAC;;EAG3B,SAAAje,UAAA,GAAAxH,+BAAA,CAAiCqiB,mBAAmB,GAAA5a,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAtH,IAAA,GAAE;IAAA,IAA3C2lB,kBAAkB,GAAApe,MAAA,CAAArH,KAAA;IACzB,IAAM/Q,UAAS,GAAGw2B,kBAAkB,CAACrR,IAAI;IACzC,IAAInjB,gBAAgB,CAAChC,UAAS,CAAC,EAAE;IAEjC,IAAAy2B,sBAAA,GAAmBxC,sBAAsB,CAACj0B,UAAS,EAAE6L,UAAU,EAAEkS,MAAM,EAAEoC,UAAU,CAAC;MAA7E+T,SAAQ,GAAAuC,sBAAA;IACf,IAAAC,WAAA,GAAuCxC,SAAQ;MAAvC30B,MAAI,GAAAm3B,WAAA;MAAEl3B,KAAG,GAAAk3B,WAAA;MAAAC,YAAA,GAAsBzC,SAAQ;MAA1Bx0B,OAAK,GAAAi3B,YAAA;MAAEh3B,QAAM,GAAAg3B,YAAA;IAElC9wB,OAAO,CAAC6uB,WAAW,GAAG8B,kBAAkB,CAACn6B,KAAK;IAC9CwJ,OAAO,CAAC8uB,SAAS,GAAG,CAAC;IACrB9uB,OAAO,CAACkvB,SAAS,EAAE;IACnBlvB,OAAO,CAAC0wB,UAAU,CAACh3B,MAAI,GAAG,CAAC,EAAEC,KAAG,GAAG,CAAC,EAAEE,OAAK,GAAGH,MAAI,GAAG,CAAC,EAAEI,QAAM,GAAGH,KAAG,GAAG,CAAC,CAAC;;EAI7E,IAAIrE,QAAQ,EAAE;IACV,IAAAmF,oBAAA,GAAmCJ,kBAAkB,CAAC/E,QAAQ,CAAC;MAAAoF,qBAAA,GAAAD,oBAAA;MAAzD+R,KAAI,GAAA9R,qBAAA;MAAE+R,KAAI,GAAA/R,qBAAA;MAAAC,sBAAA,GAAAF,oBAAA;MAAI2K,KAAI,GAAAzK,sBAAA;MAAE0K,KAAI,GAAA1K,sBAAA;IAC9B,IAAMjB,MAAI,GAAG+R,aAAa,CAACe,KAAI,CAAC;IAChC,IAAM7S,KAAG,GAAG+R,UAAU,CAACe,KAAI,CAAC;IAC5B,IAAM5S,OAAK,GAAG4R,aAAa,CAACrG,KAAI,EAAE,CAAC,CAAC;IACpC,IAAMtL,QAAM,GAAG4R,UAAU,CAACrG,KAAI,EAAE,CAAC,CAAC;IAElCrF,OAAO,CAAC6uB,WAAW,GAAGx6B,MAAM,CAACM,cAAc;IAC3CqL,OAAO,CAAC+wB,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B/wB,OAAO,CAAC8uB,SAAS,GAAG,CAAC;IAErB9uB,OAAO,CAAC0wB,UAAU,CAACh3B,MAAI,GAAG,CAAC,EAAEC,KAAG,GAAG,CAAC,EAAEE,OAAK,GAAGH,MAAI,GAAG,CAAC,EAAEI,QAAM,GAAGH,KAAG,GAAG,CAAC,CAAC;IACzEqG,OAAO,CAAC+wB,WAAW,CAAC,EAAE,CAAC;;EAI3B,IAAIvnB,YAAY,IAAI,CAAC8kB,QAAQ,EAAE;IAC3B,IAAOxf,KAAK,GAAWtF,YAAY;MAArBuF,KAAK,GAAIvF,YAAY;IACnCxJ,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACC,eAAe;IAC1C0L,OAAO,CAAC4tB,QAAQ,CAAC9e,KAAK,GAAGzZ,KAAK,CAACC,QAAQ,GAAG,GAAG,EAAEyZ,KAAK,GAAG1Z,KAAK,CAACC,QAAQ,GAAG,GAAG,EAAED,KAAK,CAACC,QAAQ,EAAED,KAAK,CAACC,QAAQ,CAAC;;EAIhH,IAAI+3B,UAAU,EAAE;IACZ,IAAO2D,MAAM,GAAY3D,UAAU;MAApB4D,MAAM,GAAI5D,UAAU;IACnC,IAAO6D,WAAW,GAAc9jB,WAAW;MAAvB+jB,QAAQ,GAAI/jB,WAAW;IAE3CpN,OAAO,CAAC2tB,SAAS,GAAGt5B,MAAM,CAACI,SAAS;IAEpC,IAAIy8B,WAAW,EAAE;MACb,SAAAE,UAAA,GAAAtmB,+BAAA,CAAqBomB,WAAW,GAAAG,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAApmB,IAAA,GAAE;QAAA,IAAvB6H,OAAM,GAAAwe,MAAA,CAAAnmB,KAAA;QACb,IAAMxR,MAAI,GAAG+R,aAAa,CAACoH,OAAM,CAAC;QAClC,IAAMhZ,OAAK,GAAG4R,aAAa,CAACoH,OAAM,EAAE,CAAC,CAAC;QACtC7S,OAAO,CAAC4tB,QAAQ,CAACl0B,MAAI,GAAGs3B,MAAM,EAAE,CAAC,EAAEn3B,OAAK,GAAGH,MAAI,EAAEqG,MAAM,CAAC;;;IAGhE,IAAIoxB,QAAQ,EAAE;MACV,SAAAG,UAAA,GAAAxmB,+BAAA,CAAkBqmB,QAAQ,GAAAI,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAtmB,IAAA,GAAE;QAAA,IAAjBsI,IAAG,GAAAie,MAAA,CAAArmB,KAAA;QACV,IAAMvR,KAAG,GAAG+R,UAAU,CAAC4H,IAAG,CAAC;QAC3B,IAAMxZ,QAAM,GAAG4R,UAAU,CAAC4H,IAAG,EAAE,CAAC,CAAC;QACjCtT,OAAO,CAAC4tB,QAAQ,CAAC,CAAC,EAAEj0B,KAAG,GAAGs3B,MAAM,EAAEnxB,KAAK,EAAEhG,QAAM,GAAGH,KAAG,CAAC;;;;EAMlE,IAAIjF,UAAU,EAAE;IACZ,IAAA88B,iBAAA,GAAqCC,gBAAgB,CAAC/8B,UAAU,EAAEsR,UAAU,CAAC;MAAA0rB,kBAAA,GAAAF,iBAAA;MAAvE93B,MAAI,GAAAg4B,kBAAA;MAAE/3B,KAAG,GAAA+3B,kBAAA;MAAAC,mBAAA,GAAAH,iBAAA;MAAI33B,OAAK,GAAA83B,mBAAA;MAAE73B,QAAM,GAAA63B,mBAAA;IAEhC3xB,OAAO,CAAC6uB,WAAW,GAAGx6B,MAAM,CAACK,UAAU;IACvCsL,OAAO,CAAC8uB,SAAS,GAAG,CAAC;IAErB,IAAIjzB,iBAAiB,CAACnH,UAAU,CAAC,EAAE;MAC/BmF,OAAK,GAAGH,MAAI;;IAEhB,IAAIgC,cAAc,CAAChH,UAAU,CAAC,EAAE;MAC5BoF,QAAM,GAAGH,KAAG;;IAEhBqG,OAAO,CAAC0wB,UAAU,CAACh3B,MAAI,GAAG,CAAC,EAAEC,KAAG,GAAG,CAAC,EAAEE,OAAK,GAAGH,MAAI,EAAEI,QAAM,GAAGH,KAAG,CAAC;;EAIrE,IAAO6gB,OAAO,GAAaF,UAAU;IAArBG,OAAO,GAAIH,UAAU;EACrC,IAAMsX,YAAY,GAAGpE,UAAU,GAAG,CAAC,IAAI/S,OAAO,GAAG,CAAC;EAClD,IAAMoX,eAAe,GAAGtE,aAAa,GAAG,CAAC,IAAI/S,OAAO,GAAG,CAAC;EACxD,IAAIoX,YAAY,IAAIC,eAAe,EAAE;IACjC,IAAID,YAAY,EAAE;MACd,IAAMhxB,CAAC,GAAGiY,aAAa,CAAC2U,UAAU,CAAC;MACnC,IAAMsE,QAAQ,GAAG9xB,OAAO,CAAC+xB,oBAAoB,CAAC,CAAC,EAAEnxB,CAAC,EAAE,CAAC,EAAEA,CAAC,GAAG9K,UAAU,CAAC;MACtEk8B,kBAAkB,CAACF,QAAQ,EAAE18B,WAAW,EAAEW,aAAa,CAAC;MACxDiK,OAAO,CAAC2tB,SAAS,GAAGmE,QAAQ;MAC5B9xB,OAAO,CAAC4tB,QAAQ,CAAC,CAAC,EAAEhtB,CAAC,EAAEd,KAAK,EAAEhK,UAAU,CAAC;;IAE7C,IAAI+7B,eAAe,EAAE;MACjB,IAAMlxB,CAAC,GAAGgY,gBAAgB,CAAC4U,aAAa,CAAC;MACzC,IAAMuE,SAAQ,GAAG9xB,OAAO,CAAC+xB,oBAAoB,CAACpxB,CAAC,EAAE,CAAC,EAAEA,CAAC,GAAG7K,UAAU,EAAE,CAAC,CAAC;MACtEk8B,kBAAkB,CAACF,SAAQ,EAAE18B,WAAW,EAAEW,aAAa,CAAC;MACxDiK,OAAO,CAAC2tB,SAAS,GAAGmE,SAAQ;MAC5B9xB,OAAO,CAAC4tB,QAAQ,CAACjtB,CAAC,EAAE,CAAC,EAAE7K,UAAU,EAAEiK,MAAM,CAAC;;;EAKlDC,OAAO,CAACuvB,YAAY,GAAG,QAAQ;EAE/B,SAAA0C,UAAA,GAAAnnB,+BAAA,CAAgBkB,IAAI,GAAAkmB,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjnB,IAAA,GAAE;IAAA,IAAXjR,EAAC,GAAAm4B,MAAA,CAAAhnB,KAAA;IACR,SAAAinB,WAAA,GAAArnB,+BAAA,CAAgBiB,OAAO,GAAAqmB,OAAA,IAAAA,OAAA,GAAAD,WAAA,IAAAnnB,IAAA,GAAE;MAAA,IAAd/S,EAAC,GAAAm6B,OAAA,CAAAlnB,KAAA;MACR,IAAMxR,MAAI,GAAG+R,aAAa,CAACxT,EAAC,CAAC;MAC7B,IAAM4B,QAAK,GAAG4R,aAAa,CAACxT,EAAC,EAAE,CAAC,CAAC;MACjC,IAAM0B,KAAG,GAAG+R,UAAU,CAAC3R,EAAC,CAAC;MACzB,IAAMD,SAAM,GAAG4R,UAAU,CAAC3R,EAAC,EAAE,CAAC,CAAC;MAE/B,IAAMsG,OAAK,GAAAsT,QAAA,KACJ3d,kBAAkB,EAClBmsB,SAAS,CAAClqB,EAAC,EAAE8B,EAAC,CAAC,CACrB;MACD,IAAMwhB,WAAW,GAAG3W,WAAW,CAAC3M,EAAC,EAAE8B,EAAC,EAAEsG,OAAK,CAAC;MAC5C,IAAIkb,WAAW,KAAK,IAAI,IAAIA,WAAW,KAAK1X,SAAS,EAAE;QACnD,IAAMksB,YAAU,GAAGC,UAAU,CACzBhwB,OAAO,EACPktB,aAAa,EACb3R,WAAW,EACXlb,OAAK,EACL3G,MAAI,EACJC,KAAG,EACHE,QAAK,GAAGH,MAAI,EACZI,SAAM,GAAGH,KAAG,CACf;QACD,IAAIo2B,YAAU,EAAEtC,aAAa,CAAC1yB,IAAI,CAAAC,KAAA,CAAlByyB,aAAa,EAASsC,YAAU,CAAC;;;;EAK7D,OAAOtC,aAAa;AACxB,CAAC;AAED,AAAO,IAAMuC,UAAU,GAAG,SAAbA,UAAUA,CACnBhwB,OAAiC,EACjCktB,aAA4B,EAC5B3R,WAA4B,EAC5Blb,KAAsB,EACtBmgB,MAAc,EACdC,MAAc,EACd9F,SAAiB,EACjBe,UAAkB;EAElB,IAAIH,WAAW,KAAK,IAAI,EAAE;IACtB,OAAO,IAAI;;EAGf,IAAM8W,QAAQ,GAAGryB,OAAO,CAACqyB,QAAQ,CAACC,IAAI,CAACtyB,OAAO,CAAC;EAC/C,IAAMuyB,UAAU,GAAGlyB,KAAK,CAAC3J,UAAU,GAAG,GAAG,GAAG2J,KAAK,CAACnK,QAAQ,GAAG,KAAK,GAAGmK,KAAK,CAAC5J,UAAU;EAErFuJ,OAAO,CAACuiB,IAAI,GAAGgQ,UAAU;EACzBvyB,OAAO,CAAC2tB,SAAS,GAAGttB,KAAK,CAAC7J,KAAK;EAG/B,IAAQJ,SAAS,GAAwDiK,KAAK,CAAtEjK,SAAS;IAAEC,YAAY,GAA0CgK,KAAK,CAA3DhK,YAAY;IAAEC,UAAU,GAA8B+J,KAAK,CAA7C/J,UAAU;IAAEC,WAAW,GAAiB8J,KAAK,CAAjC9J,WAAW;IAAEJ,UAAU,GAAKkK,KAAK,CAApBlK,UAAU;EAEpE,IAAMq8B,MAAM,GAAG55B,IAAI,CAACiY,KAAK,CAAC2P,MAAM,GAAGlqB,UAAU,CAAC;EAC9C,IAAMm8B,MAAM,GAAG75B,IAAI,CAACiY,KAAK,CAAC4P,MAAM,GAAGrqB,SAAS,CAAC;EAC7C,IAAMs8B,UAAU,GAAG95B,IAAI,CAACiY,KAAK,CAAC8J,SAAS,GAAGpkB,WAAW,GAAGD,UAAU,CAAC;EACnE,IAAMq8B,WAAW,GAAG/5B,IAAI,CAACiY,KAAK,CAAC6K,UAAU,GAAGtlB,SAAS,GAAGC,YAAY,CAAC;EAGrE,IAAMu8B,OAAO,GAAGC,QAAQ,CAACpS,MAAM,GAAGrqB,SAAS,GAAGD,UAAU,GAAG,CAAC,CAAC;EAE7D,IAAIkK,KAAK,CAACzJ,eAAe,KAAK,EAAE,EAAE;IAC9BoJ,OAAO,CAAC2tB,SAAS,GAAGttB,KAAK,CAACzJ,eAAe;IACzCoJ,OAAO,CAAC4tB,QAAQ,CAACpN,MAAM,EAAEC,MAAM,EAAE9F,SAAS,EAAEe,UAAU,CAAC;IACvD1b,OAAO,CAAC2tB,SAAS,GAAGttB,KAAK,CAAC7J,KAAK;;EAGnC,IAAI,OAAO+kB,WAAW,KAAK,QAAQ,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;IACpEuX,SAAS,CAAC9yB,OAAO,EAAEwgB,MAAM,EAAEC,MAAM,EAAE9F,SAAS,EAAEe,UAAU,EAAE;MACtD4E,QAAQ,CAACtgB,OAAO,EAAEub,WAAW,EAAElb,KAAK,EAAEwD,SAAS,EAAE2uB,MAAM,EAAEI,OAAO,EAAEF,UAAU,EAAEC,WAAW,EAAEN,QAAQ,CAAC;KACvG,CAAC;IACF,OAAO,IAAI;GACd,MAAM,IAAI,OAAO9W,WAAW,KAAK,QAAQ,EAAE;IACxC,IAAMwX,YAAY,GAAGzX,qBAAqB,CAACtb,OAAO,EAAEub,WAAW,EAAEiX,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,WAAW,CAAC;IACzG,IAAMK,gBAAgB,GAAGjU,yBAAyB,CAACxD,WAAW,EAAEiX,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,WAAW,CAAC;IACxG,IAAMM,QAAQ,MAAAjmB,MAAA,CAAO+lB,YAAY,EAAKC,gBAAgB,CAAC;IAEvDF,SAAS,CAAC9yB,OAAO,EAAEwyB,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,WAAW,EAAE;mCACzB;QAAA,IAApBO,MAAM,GAAAC,OAAA,CAAAjoB,KAAA;QACb,IAAQ5K,GAAG,GAAW4yB,MAAM,CAApB5yB,GAAG;UAAEF,IAAI,GAAK8yB,MAAM,CAAf9yB,IAAI;QAEjB,IAAAS,KAAA,GAAuCP,GAAG;UAAlC5G,IAAI,GAAAmH,KAAA;UAAElH,GAAG,GAAAkH,KAAA;UAAAC,MAAA,GAAsBR,GAAG;UAArBzG,KAAK,GAAAiH,MAAA;UAAEhH,MAAM,GAAAgH,MAAA;QAElC,IAAMhB,KAAK,GAAGjG,KAAK,GAAGH,IAAI;QAC1B,IAAMqG,MAAM,GAAGjG,MAAM,GAAGH,GAAG;QAE3B,IAAI4hB,WAAW,CAAC6X,OAAO,EAAE;UACrBpzB,OAAO,CAAC8uB,SAAS,GAAG,CAAC;UACrB9uB,OAAO,CAAC6uB,WAAW,GAAG,SAAS;UAC/B7uB,OAAO,CAAC0wB,UAAU,CAACh3B,IAAI,GAAG,GAAG,EAAEC,GAAG,GAAG,GAAG,EAAEmG,KAAK,GAAG,GAAG,EAAEC,MAAM,GAAG,GAAG,CAAC;;QAGxE+yB,SAAS,CAAC9yB,OAAO,EAAEtG,IAAI,EAAEC,GAAG,EAAEmG,KAAK,EAAEC,MAAM,EAAE;UACzC,IAAIK,IAAI,CAACG,OAAO,KAAK,QAAQ,EAAE;YAC3B,IAAQwa,IAAI,GAAK3a,IAAI,CAAb2a,IAAI;YACZ,IAAIA,IAAI,IAAI,IAAI,EAAE;cACduF,QAAQ,CACJtgB,OAAO,EACP+a,IAAI,EACJ1a,KAAK,EACLD,IAAI,CAACnK,SAAS,EACdyD,IAAI,EACJm5B,QAAQ,CAACl5B,GAAG,GAAGxD,UAAU,GAAG,CAAC,CAAC,EAC9B2J,KAAK,EACLC,MAAM,EACNsyB,QAAQ,CACX;;;UAGT,IAAIjyB,IAAI,CAACG,OAAO,KAAK,OAAO,IAAIH,IAAI,CAACG,OAAO,KAAK,MAAM,EAAE;YACrD2sB,aAAa,CAACltB,OAAO,EAAEI,IAAI,EAAEC,KAAK,EAAEC,GAAG,CAAC;;SAE/C,CAAC;OACL;MAnCD,SAAA+yB,WAAA,GAAAvoB,+BAAA,CAAqBmoB,QAAQ,GAAAE,OAAA,IAAAA,OAAA,GAAAE,WAAA,IAAAroB,IAAA;QAAAsoB,KAAA;;KAoChC,CAAC;IAEF,OAAOL,QAAQ,CAAChmB,MAAM,CAAC,UAAA0Q,IAAA;MAAA,IAAGvd,IAAI,GAAAud,IAAA,CAAJvd,IAAI;MAAA,OAAOA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEyR,OAAO;MAAC;;EAEvD,OAAO,IAAI;AACf,CAAC;AAED,IAAMihB,SAAS,GAAG,SAAZA,SAASA,CACX9yB,OAAiC,EACjCwgB,MAAc,EACdC,MAAc,EACd9F,SAAiB,EACjBe,UAAkB,EAClBzhB,QAAoB;EAEpB+F,OAAO,CAACuzB,IAAI,EAAE;EACdvzB,OAAO,CAACkvB,SAAS,EAAE;EACnBlvB,OAAO,CAACgK,IAAI,CAACwW,MAAM,EAAEC,MAAM,EAAE9F,SAAS,EAAEe,UAAU,CAAC;EACnD1b,OAAO,CAACwzB,IAAI,EAAE;EACdv5B,QAAQ,EAAE;EACV+F,OAAO,CAACyzB,OAAO,EAAE;AACrB,CAAC;AAGD,IAAMhC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIt3B,SAAoB,EAAE6L,UAAsB;EAClE,IAAQqD,WAAW,GAAKrD,UAAU,CAA1BqD,WAAW;EAEnB,IAAM4kB,kBAAkB,GAAGvyB,cAAc,CAACvB,SAAS,CAAC;EACpD,IAAM+zB,qBAAqB,GAAGryB,iBAAiB,CAAC1B,SAAS,CAAC;EAG1D,IAAAoC,oBAAA,GAAmBlC,kBAAkB,CAACF,SAAS,CAAC;IAAzCjC,GAAG,GAAAqE,oBAAA;IAAEpE,GAAG,GAAAoE,oBAAA;EAGf,IAAA0d,YAAA,GAAkB5Q,WAAW,CAACnR,GAAG,CAAC;IAA7BwB,IAAI,GAAAugB,YAAA;IAAEtgB,GAAG,GAAAsgB,YAAA;EACd,IAAAC,aAAA,GAAsB7Q,WAAW,CAAClR,GAAG,EAAEtE,OAAO,CAAC;IAA1CgG,KAAK,GAAAqgB,aAAA;IAAEpgB,MAAM,GAAAogB,aAAA;EAGlB,IAAI+T,kBAAkB,EAAE;IACpBp0B,KAAK,GAAG,GAAG;;EAEf,IAAIq0B,qBAAqB,EAAE;IACvBp0B,MAAM,GAAG,GAAG;;EAGhB,OAAO,CACH,CAACJ,IAAI,EAAEC,GAAG,CAAC,EACX,CAACE,KAAK,EAAEC,MAAM,CAAC,CAClB;AACL,CAAC;AAGD,IAAMs0B,sBAAsB,GAAG,SAAzBA,sBAAsBA,CACxBj0B,SAAoB,EACpB6L,UAAsB,EAEtBkS,MAAU,EACVf,MAAU;EAEV,IAAQ9N,WAAW,GAAsCrD,UAAU,CAA3DqD,WAAW;IAAEsP,gBAAgB,GAAoB3S,UAAU,CAA9C2S,gBAAgB;IAAEE,aAAa,GAAK7S,UAAU,CAA5B6S,aAAa;EAEpD,IAAMoV,kBAAkB,GAAGvyB,cAAc,CAACvB,SAAS,CAAC;EACpD,IAAM+zB,qBAAqB,GAAGryB,iBAAiB,CAAC1B,SAAS,CAAC;EAE1D,IAAOme,OAAO,GAAaJ,MAAM;IAAjBK,OAAO,GAAIL,MAAM;EACjC,IAAO2B,OAAO,GAAa1C,MAAM;IAAjB2C,OAAO,GAAI3C,MAAM;EAGjC,IAAA9F,oBAAA,GAAmBhX,kBAAkB,CAACF,SAAS,CAAC;IAAzCjC,GAAG,GAAAmZ,oBAAA;IAAElZ,GAAG,GAAAkZ,oBAAA;EACf,IAAO7E,IAAI,GAAUtU,GAAG;IAAXuU,IAAI,GAAIvU,GAAG;EACxB,IAAOkN,IAAI,GAAUjN,GAAG;IAAXkN,IAAI,GAAIlN,GAAG;EAGxB,IAAAu7B,aAAA,GAAkBrqB,WAAW,CAACnR,GAAG,CAAC;IAA7BwB,IAAI,GAAAg6B,aAAA;IAAE/5B,GAAG,GAAA+5B,aAAA;EACd,IAAAC,aAAA,GAAsBtqB,WAAW,CAAClR,GAAG,EAAEtE,OAAO,CAAC;IAA1CgG,KAAK,GAAA85B,aAAA;IAAE75B,MAAM,GAAA65B,aAAA;EAGlB,IAAM7gB,OAAO,GAAG6F,gBAAgB,CAAC,CAAC,CAAC;EACnC,IAAMvG,OAAO,GAAGyG,aAAa,CAAC,CAAC,CAAC;EAGhC,IAAMY,OAAO,GAAGd,gBAAgB,CAACL,OAAO,CAAC;EACzC,IAAMoB,OAAO,GAAGb,aAAa,CAACN,OAAO,CAAC;EAEtC,IAAI+V,QAAQ,GAAG,KAAK;EAGpB,IAAIj2B,eAAe,CAACigB,OAAO,EAAE9L,IAAI,EAAEpH,IAAI,GAAG,CAAC,CAAC,EAAE;IAC1C,IAAM6I,IAAI,GAAGwL,OAAO;IACpB,IAAI5f,KAAK,IAAIoU,IAAI,EAAE;MACfpU,KAAK,GAAGoU,IAAI;MACZqgB,QAAQ,GAAG,IAAI;;;EAGvB,IAAIj2B,eAAe,CAACkgB,OAAO,EAAE9L,IAAI,EAAEpH,IAAI,GAAG,CAAC,CAAC,EAAE;IAC1C,IAAM4I,KAAI,GAAGyL,OAAO;IACpB,IAAI5f,MAAM,IAAImU,KAAI,EAAE;MAChBnU,MAAM,GAAGmU,KAAI;MACbqgB,QAAQ,GAAG,IAAI;;;EAKvB,IAAIl2B,aAAa,CAACoU,IAAI,EAAE8L,OAAO,EAAEuB,OAAO,GAAGvB,OAAO,CAAC,EAAE;IACjD5e,IAAI,GAAG,CAAC,GAAG;IAEX,IAAMk6B,cAAc,GAAG/Z,OAAO,GAAGvB,OAAO,GAAG,CAAC;IAC5C,IAAIlT,IAAI,IAAIwuB,cAAc,EAAE;MACxB,IAAIxuB,IAAI,KAAKwuB,cAAc,EAAE/5B,KAAK,GAAGiZ,OAAO,CAAC,KACxCjZ,KAAK,GAAG,CAAC,GAAG;MACjBy0B,QAAQ,GAAG,IAAI;;;EAGvB,IAAIl2B,aAAa,CAACqU,IAAI,EAAE8L,OAAO,EAAEuB,OAAO,GAAGvB,OAAO,CAAC,EAAE;IACjD5e,GAAG,GAAG,CAAC,GAAG;IAEV,IAAMk6B,cAAc,GAAG/Z,OAAO,GAAGvB,OAAO,GAAG,CAAC;IAC5C,IAAIlT,IAAI,IAAIwuB,cAAc,EAAE;MACxB,IAAIxuB,IAAI,KAAKwuB,cAAc,EAAE/5B,MAAM,GAAGsY,OAAO,CAAC,KACzCtY,MAAM,GAAG,CAAC,GAAG;MAClBw0B,QAAQ,GAAG,IAAI;;;EAIvB,IAAIL,kBAAkB,IAAIpU,OAAO,GAAG,CAAC,EAAE;IACnCyU,QAAQ,GAAG,IAAI;;EAEnB,IAAIJ,qBAAqB,IAAIpU,OAAO,GAAG,CAAC,EAAE;IACtCwU,QAAQ,GAAG,IAAI;;EAInB,IAAIL,kBAAkB,EAAE;IACpBp0B,KAAK,GAAG,GAAG;;EAEf,IAAIq0B,qBAAqB,EAAE;IACvBp0B,MAAM,GAAG,GAAG;;EAGhB,OAAO,CACH,CACI,CAACJ,IAAI,EAAEC,GAAG,CAAC,EACX,CAACE,KAAK,EAAEC,MAAM,CAAC,CAClB,EACDw0B,QAAQ,CACa;AAC7B,CAAC;AAED,IAAMZ,YAAY,GAAG,SAAfA,YAAYA,CAAI/tB,MAAyB;EAC3C,IAAAm0B,qBAAA,GAA0Bn0B,MAAM,CAACsK,qBAAqB,EAAE;IAAhDnK,KAAK,GAAAg0B,qBAAA,CAALh0B,KAAK;IAAEC,MAAM,GAAA+zB,qBAAA,CAAN/zB,MAAM;EACrB,IAAAg0B,OAAA,GAAsC91B,MAAM;IAAA+1B,qBAAA,GAAAD,OAAA,CAAtCt0B,gBAAgB;IAAEw0B,KAAK,GAAAD,qBAAA,cAAG,CAAC,GAAAA,qBAAA;EACjC,IAAIC,KAAK,GAAG,CAAC,EAAE;IACXA,KAAK,GAAG,CAAC;;EAEb,IAAMC,cAAc,GAAGt7B,IAAI,CAACiY,KAAK,CAAC/Q,KAAK,GAAGm0B,KAAK,CAAC;EAChD,IAAME,eAAe,GAAGv7B,IAAI,CAACiY,KAAK,CAAC9Q,MAAM,GAAGk0B,KAAK,CAAC;EAElD,IAAIt0B,MAAM,CAACG,KAAK,KAAKo0B,cAAc,IAAIv0B,MAAM,CAACI,MAAM,KAAKo0B,eAAe,EAAE;IACtE,IAAMn0B,OAAO,GAAGL,MAAM,CAACM,UAAU,CAAC,IAAI,CAAC;IACvC,IAAID,OAAO,EAAE;MACTL,MAAM,CAACG,KAAK,GAAGo0B,cAAc;MAC7Bv0B,MAAM,CAACI,MAAM,GAAGo0B,eAAe;MAC/Bn0B,OAAO,CAACo0B,KAAK,CAACH,KAAK,EAAEA,KAAK,CAAC;;;AAGvC,CAAC;AAED,IAAM3D,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAI+D,GAAW;EAClC,IAAI78B,CAAC,GAAG,EAAE;EACV,IAAIgoB,CAAC,GAAG,CAAC;EACT,OAAO6U,GAAG,GAAG,CAAC,EAAE;IACZ7U,CAAC,GAAG,CAAC6U,GAAG,GAAG,CAAC,IAAI,EAAE;IAClB78B,CAAC,GAAGue,MAAM,CAACC,YAAY,CAAC,EAAE,GAAGwJ,CAAC,CAAC,GAAGhoB,CAAC;IACnC68B,GAAG,GAAI,CAACA,GAAG,GAAG7U,CAAC,IAAI,EAAE,GAAI,CAAC;;EAE9B,OAAOhoB,CAAC,IAAI,EAAE;AAClB,CAAC;AAED,IAAMw6B,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIF,QAAwB,EAAEwC,GAAW,EAAEC,OAAe;EAC9E,IAAMC,GAAG,GAAG,SAANA,GAAGA,CAAIv8B,CAAS;IAAA,OAAK,CAAC,GAAG,GAAGW,IAAI,CAACiY,KAAK,CAAC5Y,CAAC,CAAC,CAACijB,QAAQ,CAAC,EAAE,CAAC,EAAEre,KAAK,CAAC,CAAC,CAAC,CAAC;;EAEvE,IAAM43B,IAAI,GAAG,SAAPA,IAAIA,CAAIx8B,CAAS;IAAA,OAAK,GAAG,GAAGW,IAAI,CAAC87B,GAAG,CAAEz8B,CAAC,GAAGW,IAAI,CAAC+7B,EAAE,GAAI,CAAC,CAAC;;EAE7D,IAAMvK,MAAM,GAAG,SAATA,MAAMA,CAAInyB,CAAS;IAAA,OAAK,GAAG,GAAGW,IAAI,CAACg8B,GAAG,CAAC,GAAG,GAAG38B,CAAC,EAAE,GAAG,CAAC;;EAC1D,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAI,EAAE,EAAE,EAAEA,CAAC,EAAE;IAC1B,IAAM88B,CAAC,GAAG98B,CAAC,GAAG,EAAE;IAChB+5B,QAAQ,CAACgD,YAAY,CAACD,CAAC,EAAEP,GAAG,GAAGE,GAAG,CAACpK,MAAM,CAACmK,OAAO,GAAGE,IAAI,CAACI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;;AAElF,CAAC;AAGD,AAAO,IAAME,WAAW,GAAG,SAAdA,WAAWA;EACpB,IAAAC,QAAA,GAA6B/2B,MAAM;IAA3BwB,gBAAgB,GAAAu1B,QAAA,CAAhBv1B,gBAAgB;EACxB,OAAO,CAACA,gBAAgB,GAAG,CAAC,IAAIA,gBAAgB;AACpD,CAAC;AAGD,AAAO,IAAMozB,QAAQ,GAAG,SAAXA,QAAQA,CAAI94B,CAAS;EAC9B,IAAAk7B,QAAA,GAA6Bh3B,MAAM;IAA3BwB,gBAAgB,GAAAw1B,QAAA,CAAhBx1B,gBAAgB;EACxB,OAAO7G,IAAI,CAACiY,KAAK,CAAC,CAAC9W,CAAC,GAAGg7B,WAAW,EAAE,IAAIt1B,gBAAgB,CAAC,GAAGA,gBAAgB;AAChF,CAAC;;AC3qBM,IAAMy1B,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIhvB,UAAuB;;EACrD,OAAO;IACHqnB,aAAa,EAAE,CAAArnB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEqnB,aAAa,KAAI,CAAC;IAC7CC,UAAU,EAAE,CAAAtnB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEsnB,UAAU,KAAI,CAAC;IACvCpkB,iBAAiB,EAAE,CAAAlD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEkD,iBAAiB,KAAI,KAAK;IACzDD,cAAc,EAAE,CAAAjD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEiD,cAAc,KAAI,KAAK;IACnDmkB,aAAa,EAAE,CAAApnB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEonB,aAAa,KAAI,KAAK;IACjD6H,cAAc,EAAE,CAAAjvB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEivB,cAAc,KAAI,KAAK;IACnDr/B,UAAU,GAAAs/B,qBAAA,GAAElvB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEpQ,UAAU,YAAAs/B,qBAAA,GAAI//B,KAAK,CAACS,UAAU;IACtDC,aAAa,GAAAs/B,qBAAA,GAAEnvB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEnQ,aAAa,YAAAs/B,qBAAA,GAAIhgC,KAAK,CAACU,aAAa;IAC/DX,WAAW,GAAAkgC,qBAAA,GAAEpvB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE9Q,WAAW,YAAAkgC,qBAAA,GAAIjhC,MAAM,CAACe;GAClD;AACL,CAAC;;AC6HD,IAAMmgC,KAAK,GAAGC,UAAU,CAAuB,UAACC,KAAK,EAAE/rB,GAAG;;EACtD,IAAMgsB,SAAS,GAAG/rB,MAAM,CAAoB,IAAI,CAAC;EACjD,IAAM2L,UAAU,GAAG3L,MAAM,CAAiB,IAAI,CAAC;EAE/C,IAAAnL,SAAA,GAAkCC,QAAQ,CAAK9K,kBAAkB,CAAC;IAA3DyjB,SAAS,GAAA5Y,SAAA;IAAEm3B,YAAY,GAAAn3B,SAAA;EAC9B,IAAAG,UAAA,GAAoCF,QAAQ,CAAK7K,MAAM,CAAC;IAAjD0mB,UAAU,GAAA3b,UAAA;IAAEi3B,aAAa,GAAAj3B,UAAA;EAEhC,IAAMk3B,aAAa,IAAAC,gBAAA,GAAGL,KAAK,CAACt7B,SAAS,YAAA27B,gBAAA,GAAI9hC,YAAY;EAErD,IAAA8K,UAAA,GAAwCL,QAAQ,CAAYo3B,aAAa,CAAC;IAAnErgB,YAAY,GAAA1W,UAAA;IAAEi3B,eAAe,GAAAj3B,UAAA;EACpC,IAAAmJ,UAAA,GAAgCxJ,QAAQ,CAAmB,IAAI,CAAC;IAAzDnJ,QAAQ,GAAA2S,UAAA;IAAE+tB,WAAW,GAAA/tB,UAAA;EAC5B,IAAAG,UAAA,GAAoC3J,QAAQ,CAAY,IAAI,CAAC;IAAtD4uB,UAAU,GAAAjlB,UAAA;IAAE6tB,aAAa,GAAA7tB,UAAA;EAChC,IAAAG,UAAA,GAAsC9J,QAAQ,CAAqC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAAzF2O,WAAW,GAAA7E,UAAA;IAAE2tB,cAAc,GAAA3tB,UAAA;EAClC,IAAAG,UAAA,GAAoCjK,QAAQ,CAAmB,IAAI,CAAC;IAA7D/J,UAAU,GAAAgU,UAAA;IAAEytB,aAAa,GAAAztB,UAAA;EAChC,IAAAG,UAAA,GAAgCpK,QAAQ,CAAK1K,OAAO,CAAC;IAA9Cwf,QAAQ,GAAA1K,UAAA;IAAEutB,WAAW,GAAAvtB,UAAA;EAE5B,IAAAG,UAAA,GAA8BvK,QAAQ,CAAC,CAAC,CAACg3B,KAAK,CAACY,SAAS,CAAC;IAAlD9gB,OAAO,GAAAvM,UAAA;IAAEstB,UAAU,GAAAttB,UAAA;EAE1B,IAAAutB,WAAA,GAAkD93B,QAAQ,CAAYo3B,aAAa,CAAC;IAA7EW,iBAAiB,GAAAD,WAAA;IAAEE,oBAAoB,GAAAF,WAAA;EAC9C,IAAIC,iBAAiB,KAAKX,aAAa,EAAE;IACrCY,oBAAoB,CAACZ,aAAa,CAAC;IACnCE,eAAe,CAACF,aAAa,CAAC;;EAGlC,IAAAa,WAAA,GAAkCj4B,QAAQ,CAAkB,EAAE,CAAC;IAAxDk4B,SAAS,GAAAD,WAAA;IAAEE,YAAY,GAAAF,WAAA;EAC9B,IAAAG,WAAA,GAAoDp4B,QAAQ,CAAC,KAAK,CAAC;IAA5D4W,kBAAkB,GAAAwhB,WAAA;IAAEC,qBAAqB,GAAAD,WAAA;EAEhD,IAAAE,kBAAA,GAAmEC,iBAAiB,CAAC;MAAEttB,GAAG,EAAE4L;KAAY,CAAC;IAAA2hB,qBAAA,GAAAF,kBAAA,CAAjGj3B,KAAK;IAAElB,WAAW,GAAAq4B,qBAAA,cAAG,IAAI,GAAAA,qBAAA;IAAAC,qBAAA,GAAAH,kBAAA,CAAEh3B,MAAM;IAAEhB,YAAY,GAAAm4B,qBAAA,cAAG,IAAI,GAAAA,qBAAA;EAE9D,IAAMvc,SAAS,GAAGzb,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAAC9a,SAAS,EAAE,GAAG,CAAC;KAAE,CAAC8a,KAAK,CAAC9a,SAAS,CAAC,CAAC;EAC/F,IAAMe,UAAU,GAAGxc,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAAC/Z,UAAU,EAAE,EAAE,CAAC;KAAE,CAAC+Z,KAAK,CAAC/Z,UAAU,CAAC,CAAC;EACjG,IAAM0G,aAAa,GAAGljB,OAAO,CAAC;IAAA,OAAM8E,2BAA2B,CAACyxB,KAAK,CAACrT,aAAa,EAAE,IAAI,CAAC;KAAE,CAACqT,KAAK,CAACrT,aAAa,CAAC,CAAC;EAClH,IAAMC,iBAAiB,GAAGnjB,OAAO,CAC7B;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAACpT,iBAAiB,EAAE,EAAE,CAAC;KACxD,CAACoT,KAAK,CAACpT,iBAAiB,CAAC,CAC5B;EAED,IAAMzc,aAAa,GAAG1G,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAAC7vB,aAAa,EAAE,IAAI,CAAC;KAAE,CAAC6vB,KAAK,CAAC7vB,aAAa,CAAC,CAAC;EAC5G,IAAMC,UAAU,GAAG3G,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAAC5vB,UAAU,EAAE,IAAI,CAAC;KAAE,CAAC4vB,KAAK,CAAC5vB,UAAU,CAAC,CAAC;EACnG,IAAMC,cAAc,GAAG5G,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAAC3vB,cAAc,EAAE,IAAI,CAAC;KAAE,CAAC2vB,KAAK,CAAC3vB,cAAc,CAAC,CAAC;EAC/G,IAAMC,WAAW,GAAG7G,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAAC1vB,WAAW,EAAE,IAAI,CAAC;KAAE,CAAC0vB,KAAK,CAAC1vB,WAAW,CAAC,CAAC;EAEtG,IAAMK,YAAY,GAAGlH,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAACrvB,YAAY,EAAE,IAAI,CAAC;KAAE,CAACqvB,KAAK,CAACrvB,YAAY,CAAC,CAAC;EACzG,IAAMD,eAAe,GAAGjH,OAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACiyB,KAAK,CAACtvB,eAAe,EAAE,IAAI,CAAC;KAAE,CAACsvB,KAAK,CAACtvB,eAAe,CAAC,CAAC;EAElH,IAAMR,YAAY,GAAGzG,OAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC2xB,KAAK,CAAC0B,QAAQ,EAAE,KAAK,CAAC;KAAE,CAAC1B,KAAK,CAAC0B,QAAQ,CAAC,CAAC;EAE3F,IAAMzxB,UAAU,GAAGxG,OAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC2xB,KAAK,CAAC/vB,UAAU,EAAE,IAAI,CAAC;KAAE,CAAC+vB,KAAK,CAAC/vB,UAAU,CAAC,CAAC;EAC5F,IAAMd,WAAW,GAAG1F,OAAO,CAAC;IAAA,OAAM+E,oBAAoB,CAACwxB,KAAK,CAAC7wB,WAAW,EAAE,EAAE,CAAC;KAAE,CAAC6wB,KAAK,CAAC7wB,WAAW,CAAC,CAAC;EACnG,IAAMT,QAAQ,GAAGjF,OAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC2xB,KAAK,CAACtxB,QAAQ,EAAE,EAAE,CAAC;KAAE,CAACsxB,KAAK,CAACtxB,QAAQ,CAAC,CAAC;EACpF,IAAMizB,QAAQ,GAAGl4B,OAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC2xB,KAAK,CAAC2B,QAAQ,EAAE,EAAE,CAAC;KAAE,CAAC3B,KAAK,CAAC2B,QAAQ,CAAC,CAAC;EACpF,IAAMjV,SAAS,GAAGjjB,OAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC2xB,KAAK,CAACtT,SAAS,EAAEnsB,kBAAkB,CAAC;KAAE,CAACy/B,KAAK,CAACtT,SAAS,CAAC,CAAC;EAEvG,IAAMjc,UAAU,GAAuBhH,OAAO,CAAC;IAAA,OAAMg2B,iBAAiB,CAACO,KAAK,CAACvvB,UAAU,CAAC;KAAE,CAACuvB,KAAK,CAACvvB,UAAU,CAAC,CAAC;EAC7G,IAAMinB,mBAAmB,IAAAkK,qBAAA,GAAG5B,KAAK,CAACtI,mBAAmB,YAAAkK,qBAAA,GAAIpjC,aAAa;EAEtE,IAAMkG,SAAS,GAAG+E,OAAO,CAAC;IAAA,OAAMxC,iBAAiB,CAAC8Y,YAAY,CAAC;KAAE,CAACA,YAAY,CAAC,CAAC;EAEhF,IAAMnP,oBAAoB,GAAGnH,OAAO,CAChC;IAAA,OACIu2B,KAAK,CAACtvB,eAAe,GACf,IAAI4G,GAAG,CAAC7R,mBAAmB,CAACf,SAAS,CAAC,CAAC,UAAClC,CAAS;MAAA,OAAKkO,eAAe,CAAClO,CAAC,CAAC;MAAC,CAACgV,MAAM,CAAC,UAAChV,CAAC;MAAA,OAAKA,CAAC,IAAI,IAAI;MAAC,CAAC,GACnG,IAAI;KACd,CAACw9B,KAAK,CAACtvB,eAAe,EAAEA,eAAe,EAAEhM,SAAS,CAAC,CACtD;EACD,IAAMmM,iBAAiB,GAAGpH,OAAO,CAC7B;IAAA,OACIu2B,KAAK,CAACrvB,YAAY,GACZ,IAAI2G,GAAG,CAAC5R,gBAAgB,CAAChB,SAAS,CAAC,CAAC,UAACJ,CAAS;MAAA,OAAKqM,YAAY,CAACrM,CAAC,CAAC;MAAC,CAACkT,MAAM,CAAC,UAAChV,CAAC;MAAA,OAAKA,CAAC,IAAI,IAAI;MAAC,CAAC,GAC7F,IAAI;KACd,CAACw9B,KAAK,CAACrvB,YAAY,EAAEA,YAAY,EAAEjM,SAAS,CAAC,CAChD;EAED,IAAOyd,UAAU,GAAgBR,SAAS;IAAvBS,UAAU,GAAIT,SAAS;EAE1C,IAAOkgB,SAAS,GAAe/jB,QAAQ;IAArBgkB,SAAS,GAAIhkB,QAAQ;EACvC,IAAM9N,QAAQ,GAAG6xB,SAAS,KAAK,CAAC,CAAC,IAAIC,SAAS,KAAK,CAAC,CAAC;EAIrD,IAAMC,iBAAiB,GAAG,EAAAC,kBAAA,GAAChC,KAAK,CAACiC,WAAW,YAAAD,kBAAA,GAAI,KAAK,MAAM,KAAK;EAChE,IAAME,aAAa,GAAG,OAAOlC,KAAK,CAACiC,WAAW,KAAK,QAAQ,GAAGjC,KAAK,CAACiC,WAAW,GAAG,CAAC;EACnF,IAAME,YAAY,GAAG14B,OAAO,CAAC;IAAA,OAAMssB,eAAe,CAAC7Q,SAAS,CAAC;KAAE,CAAC6c,iBAAiB,GAAGG,aAAa,GAAGhd,SAAS,CAAC,CAAC;EAC/G,IAAMkd,SAAS,GAAG34B,OAAO,CAAC;IAAA,OAAMssB,eAAe,CAAC9P,UAAU,CAAC;KAAE,CAAC8b,iBAAiB,GAAGG,aAAa,GAAGjc,UAAU,CAAC,CAAC;EAC9Gxc,OAAO,CAAC;IACJ,IAAI,CAACs4B,iBAAiB,EAAE;IAExBI,YAAY,CAAC1L,QAAQ,CAACvR,SAAS,CAAC;IAChCkd,SAAS,CAAC3L,QAAQ,CAACxQ,UAAU,CAAC;GAIjC,EAAE,CAAC8b,iBAAiB,EAAEG,aAAa,EAAEhd,SAAS,EAAEe,UAAU,CAAC,CAAC;EAG7D,IAAQ6R,aAAa,GAAiBrnB,UAAU,CAAxCqnB,aAAa;IAAEC,UAAU,GAAKtnB,UAAU,CAAzBsnB,UAAU;EACjC,IAAMxnB,UAAU,GAAG9G,OAAO,CACtB;IAAA,OAAM6qB,cAAc,CAAC,CAACwD,aAAa,EAAEC,UAAU,CAAC,EAAElT,UAAU,EAAEsd,YAAY,EAAEC,SAAS,CAAC;KACtF,CAACtK,aAAa,EAAEC,UAAU,EAAElT,UAAU,EAAEsd,YAAY,EAAEC,SAAS,CAAC,CACnE;EAGD,IAAQxM,eAAe,GAA8BrlB,UAAU,CAAvDqlB,eAAe;IAAEhiB,WAAW,GAAiBrD,UAAU,CAAtCqD,WAAW;IAAEC,UAAU,GAAKtD,UAAU,CAAzBsD,UAAU;EAChD,IAAMrD,YAAY,GAAG/G,OAAO,CACxB;IAAA,OAAMmsB,eAAe,CAAC,CAACzsB,WAAW,EAAEG,YAAY,CAAC,CAAC;KAGlD,CAACssB,eAAe,EAAEzsB,WAAW,EAAEG,YAAY,EAAEuK,UAAU,EAAE,CAAC,CAC7D;EAGDoN,eAAe,CAAC;IACZ,IAAI+e,KAAK,CAACqC,cAAc,EAAE;MACtBrC,KAAK,CAACqC,cAAc,IAAA9qB,MAAA,CAAK/G,YAAY,CAAC+F,IAAI,MAAAgB,MAAA,CAAO/G,YAAY,CAAC8F,OAAO,CAAC,CAAC;;GAE9E,EAAE,CAAC9F,YAAY,EAAEwvB,KAAK,CAACqC,cAAc,CAAC,CAAC;EAExC,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAI59B,SAAoB,EAAE69B,MAAM;QAANA,MAAM;MAANA,MAAM,GAAG,KAAK;;IAC3D,IAAiBrhB,OAAO,GAAKrB,UAAU,CAA/B1L,OAAO;IACf,IAAI,CAAC+M,OAAO,EAAE;IAEd,IAAOha,MAAM,GAAUxC,SAAS;MAAjByC,IAAI,GAAIzC,SAAS;IAChC,IAAM8d,IAAI,GAAO,CAACrZ,WAAW,EAAEG,YAAY,CAAC;IAC5C,IAAMmZ,MAAM,GAAO,CAACqV,aAAa,EAAEC,UAAU,CAAC;IAE9C7T,YAAY,CACRhD,OAAO,EACPqhB,MAAM,GAAGp7B,IAAI,GAAGD,MAAM,EACtBsb,IAAI,EACJC,MAAM,EACNoC,UAAU,EACVlD,SAAS,EACTpR,UAAU,EACV,UAACsU,UAAc,EAAElD,SAAa;MAC1Bwe,aAAa,CAACtb,UAAU,CAAC;MACzBqb,YAAY,CAACve,SAAS,CAAC;KAC1B,CACJ;GACJ;EAGD,IAAM6gB,eAAe,GAAG,SAAlBA,eAAeA,CAAIpS,YAAuB,EAAE5W,QAAQ,EAAS+oB,MAAM;QAAvB/oB,QAAQ;MAARA,QAAQ,GAAG,IAAI;;IAAA,IAAE+oB,MAAM;MAANA,MAAM,GAAG,KAAK;;IAC7E,IAAI,CAAC/+B,eAAe,CAACkB,SAAS,EAAE0rB,YAAY,CAAC,EAAE;MAC3CkQ,eAAe,CAAClQ,YAAY,CAAC;;IAGjC,IAAiBlP,OAAO,GAAKrB,UAAU,CAA/B1L,OAAO;IACf,IAAI,CAAC+M,OAAO,EAAE;IAEd,IAAI1H,QAAQ,EAAE;MACV8oB,iBAAiB,CAAClS,YAAY,EAAEmS,MAAM,CAAC;;IAG3C,IAAIvC,KAAK,CAACyC,kBAAkB,EAAE;MAC1B,IAAA99B,mBAAA,GAAqCC,kBAAkB,CAACqC,iBAAiB,CAACmpB,YAAY,CAAC,CAAC;QAAAvrB,oBAAA,GAAAF,mBAAA;QAAhFoS,IAAI,GAAAlS,oBAAA;QAAEmS,IAAI,GAAAnS,oBAAA;QAAAC,qBAAA,GAAAH,mBAAA;QAAIgL,IAAI,GAAA7K,qBAAA;QAAE8K,IAAI,GAAA9K,qBAAA;MAChCk7B,KAAK,CAACyC,kBAAkB,CAAC1rB,IAAI,EAAEC,IAAI,EAAErH,IAAI,EAAEC,IAAI,CAAC;;GAEvD;EAED,IAAM8yB,iBAAiB,GAAG,SAApBA,iBAAiBA;IACnB/B,WAAW,CAACriC,OAAO,CAAC;IACpBuiC,UAAU,CAAC,IAAI,CAAC;GACnB;EAED,IAAM8B,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIltB,KAAc;IACrC,IAAIuqB,KAAK,CAACtuB,QAAQ,EAAE;MAChB,IAAOjC,KAAK,GAAWqO,QAAQ;QAAjBpO,KAAK,GAAIoO,QAAQ;MAC/BkiB,KAAK,CAACtuB,QAAQ,CAAC,CAAC;QAAElP,CAAC,EAAEiN,KAAK;QAAEnL,CAAC,EAAEoL,KAAK;QAAE+F,KAAK,EAAEA,KAAK,KAAKrH,SAAS,GAAGqH,KAAK,GAAGyrB;OAAW,CAAC,CAAC;;IAE5FP,WAAW,CAACriC,OAAO,CAAC;IACpBuiC,UAAU,CAAC,IAAI,CAAC;GACnB;EAED,IAAM+B,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI9kB,QAAY,EAAE8B,kBAAkB;QAAlBA,kBAAkB;MAAlBA,kBAAkB,GAAG,KAAK;;IAC9D,IAAOnQ,KAAK,GAAWqO,QAAQ;MAAjBpO,KAAK,GAAIoO,QAAQ;IAC/B,IAAI5N,YAAY,CAACT,KAAK,EAAEC,KAAK,CAAC,EAAE;MAC5B;;IAGJ,IAAMmzB,aAAa,GAAGn0B,QAAQ,CAACe,KAAK,EAAEC,KAAK,CAAC;IAC5C,IAAIozB,GAAG,GAAG,EAAE;IACZ,IAAID,aAAa,KAAK,IAAI,IAAIA,aAAa,KAAKz0B,SAAS,EAAE;MACvD00B,GAAG,GAAGD,aAAa;;IAEvBlC,WAAW,CAAC7iB,QAAQ,CAAC;IACrBqjB,YAAY,CAAC2B,GAAG,CAAC;IACjBzB,qBAAqB,CAACzhB,kBAAkB,CAAC;IACzCmjB,cAAc,CAACpB,QAAQ,CAAAp8B,KAAA,SAAIuY,QAAQ,CAAC,CAAC;GACxC;EAGD,IAAAklB,iBAAA,GAAsDhD,KAAK,CAAnDjd,UAAU;IAAVA,UAAU,GAAAigB,iBAAA,cAAGC,QAAQ,GAAAD,iBAAA;IAAAE,cAAA,GAAyBlD,KAAK,CAA5Bhd,OAAO;IAAPA,OAAO,GAAAkgB,cAAA,cAAGD,QAAQ,GAAAC,cAAA;EACjDjiB,eAAe,CAAC;IACZ,IAAiBC,OAAO,GAAKrB,UAAU,CAA/B1L,OAAO;IACf,IAAI,CAAC+M,OAAO,EAAE;IAEd,IAAMsB,IAAI,GAAO,CAACrZ,WAAW,EAAEG,YAAY,CAAC;IAC5C,IAAMmZ,MAAM,GAAO,CAACqV,aAAa,EAAEC,UAAU,CAAC;IAE9C,IAAMrT,SAAS,GAAGnC,cAAc,CAACC,IAAI,EAAEqC,UAAU,EAAEpC,MAAM,EAAE,CAACM,UAAU,EAAEC,OAAO,CAAC,EAAEzS,UAAU,CAAC;IAC7F4vB,aAAa,CAACzb,SAAS,CAAC;IACxBE,oBAAoB,CAAC1D,OAAO,EAAEwD,SAAS,EAAEnU,UAAU,CAAC;GAIvD,EAAE,CAACyS,OAAO,EAAED,UAAU,CAAC,CAAC;EAGzB,IAAMhT,SAAS,GAAGmE,MAAM,CAAsBzV,aAAa,CAAC;EAG5D,IAAMk5B,SAAS,GAAG7X,OAAO,IAAI9P,QAAQ;EAErC,IAAAmzB,gBAAA,GAA0CvT,eAAe,CACrDlrB,SAAS,EACTgK,QAAQ,EACRwB,YAAY,EACZynB,SAAS,IAAI,CAAC3nB,QAAQ,EACtBwyB,eAAe,EACfxC,KAAK,CAACtuB,QAAQ,EACdsuB,KAAK,CAAClQ,MAAM,EACZkQ,KAAK,CAACjQ,OAAO,CAChB;IATOiB,YAAY,GAAAmS,gBAAA,CAAZnS,YAAY;IAAE/Q,eAAe,GAAAkjB,gBAAA,CAAfljB,eAAe;EAWrC,IAAMmjB,QAAQ,GAAG3hB,SAAS,CAACoD,UAAU,EAAElD,SAAS,EAAEpR,UAAU,EAAE4vB,aAAa,EAAED,YAAY,CAAC;EAE1F,IAAMpvB,gBAAgB,GAAG2b,iBAAiB,CACtCjc,YAAY,CAAC+F,IAAI,EACjBpH,WAAW,EACXud,SAAS,EACTC,aAAa,EACbC,iBAAiB,EACjBzjB,WAAW,CACd;EAED,IAAM4H,iBAAiB,GAAGsc,cAAc,CACpC7c,YAAY,CAAC8F,OAAO,EACpBnH,WAAW,EACXud,SAAS,EACTC,aAAa,EACbC,iBAAiB,EACjB1H,SAAS,EACT5b,YAAY,CACf;EAED,IAAA+5B,SAAA,GAAwCvzB,QAAQ,CAC5CC,SAAS,EACTrL,SAAS,EACT7E,QAAQ,EACRmQ,QAAQ,EACRtB,QAAQ,EACRuB,UAAU,EACVC,YAAY,EAEZC,aAAa,EACbC,UAAU,EACVC,cAAc,EACdC,WAAW,EAEXC,UAAU,EACVC,YAAY,EACZC,UAAU,EAEVC,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,EAEjBC,gBAAgB,EAChBC,iBAAiB,EAEjB6xB,gBAAgB,EAChBD,iBAAiB,EACjBpC,WAAW,EACXE,cAAc,EACdD,aAAa,EACbE,aAAa,EACb8B,eAAe,EACf3B,UAAU,EAEVb,KAAK,CAACiC,WAAW,GAAGE,YAAY,CAAC5L,UAAU,GAAGnoB,SAAS,EACvD4xB,KAAK,CAACiC,WAAW,GAAGG,SAAS,CAAC7L,UAAU,GAAGnoB,SAAS,EAEpD4xB,KAAK,CAACtuB,QAAQ,EACdsuB,KAAK,CAACruB,mBAAmB,EACzBquB,KAAK,CAACpuB,gBAAgB,EACtBouB,KAAK,CAACnuB,iBAAiB,EACvBmuB,KAAK,CAACluB,kBAAkB,EACxBkuB,KAAK,CAACjuB,YAAY,EAClBiuB,KAAK,CAAChuB,+BAA+B,EACrCguB,KAAK,CAAC/tB,gCAAgC,CACzC;IA9COkM,aAAa,GAAAklB,SAAA,CAAbllB,aAAa;IAAEpK,YAAY,GAAAsvB,SAAA,CAAZtvB,YAAY;EAgDnC,IAAAuvB,YAAA,GAAmE3jB,WAAW,CAC1EC,kBAAkB,EAClBC,UAAU,EACV3P,YAAY,EACZf,WAAW,EACX2O,QAAQ,EACR9N,QAAQ,EACR8P,OAAO,EACPC,YAAY,EACZrb,SAAS,EAETk+B,gBAAgB,EAChBD,iBAAiB,EACjBD,iBAAiB,EACjBF,eAAe,EACf3B,UAAU,EACV5gB,eAAe,EAEf+f,KAAK,CAACtuB,QAAQ,CACjB;IAnBOwO,cAAc,GAAAojB,YAAA,CAAdpjB,cAAc;IAAEC,aAAa,GAAAmjB,YAAA,CAAbnjB,aAAa;IAAEY,WAAW,GAAAuiB,YAAA,CAAXviB,WAAW;IAAEC,UAAU,GAAAsiB,YAAA,CAAVtiB,UAAU;EAqB9D,IAAMyW,aAAa,GAAG3uB,gBAAgB,EAAE;EAExCmY,eAAe,CAAC;IACZ,IAAiB/W,MAAM,GAAK+1B,SAAS,CAA7B9rB,OAAO;IACf,IAAI,CAACjK,MAAM,EAAE;MACT;;IAGJ,IAAMK,OAAO,GAAGL,MAAM,CAACM,UAAU,CAAC,IAAI,CAAC;IACvC,IAAI,CAACD,OAAO,EAAE;MACV;;IAGJ,IAAMg5B,gBAAgB,GAAG/6B,MAAM,CAACg7B,qBAAqB,CAAC;MAClDzzB,SAAS,CAACoE,OAAO,GAAGqjB,WAAW,CAC3BjtB,OAAO,EACPktB,aAAa,EAEblnB,UAAU,EACVC,YAAY,EACZC,UAAU,EACVic,SAAS,EACThoB,SAAS,EACTgzB,mBAAmB,EACnBC,SAAS,EAET5jB,YAAY,EACZlU,QAAQ,EACR8X,WAAW,EACXigB,UAAU,EACV34B,UAAU,EAEV0tB,aAAa,EACbC,iBAAiB,EACjBzd,WAAW,EAEXuB,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,EAEjBgU,UAAU,CACb;KACJ,CAAC;IAEF,OAAO;MACHrc,MAAM,CAACi7B,oBAAoB,CAACF,gBAAgB,CAAC;KAChD;GACJ,EAAE,CACChzB,UAAU,EACVC,YAAY,EACZC,UAAU,EACVic,SAAS,EACThoB,SAAS,EACTgzB,mBAAmB,EACnBC,SAAS,EAET5jB,YAAY,EACZlU,QAAQ,EACR+3B,UAAU,EACV34B,UAAU,EAEV0tB,aAAa,EACbC,iBAAiB,EACjBzd,WAAW,EAEXuB,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,EAEjBgU,UAAU,CACb,CAAC;EAEF,IAAA6e,WAAA,GAAsC16B,QAAQ,CAAC,EAAE,CAAC;IAA3C26B,WAAW,GAAAD,WAAA;IAAEX,cAAc,GAAAW,WAAA;EAElC,IAAIE,gBAAgB,GAAGzlC,MAAM;EAC7B,IAAI0lC,aAAa,GAAG,CAAC;EACrB,IAAIC,cAAc,GAAG,CAAC;EACtB,IAAIC,aAAa,GAAgC,OAAO;EACxD,IAAIC,kBAAkB,GAAG,EAAE;EAC3B,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAIj0B,QAAQ,EAAE;IACV,IAAMpF,KAAK,GAAAsT,QAAA,KAAQ3d,kBAAkB,EAAKmsB,SAAS,CAAAnnB,KAAA,SAAIuY,QAAQ,CAAC,CAAE;IAClE8lB,gBAAgB,GAAGhwB,WAAW,CAACkK,QAAQ,CAAC;IACxC8lB,gBAAgB,GAAG/gC,KAAK,CAAC+gC,gBAAgB,EAAExlC,OAAO,CAAC;IACnDylC,aAAa,GAAG3e,SAAS,CAAC2c,SAAS,CAAC,GAAG,CAAC;IACxCiC,cAAc,GAAG7d,UAAU,CAAC6b,SAAS,CAAC,GAAG,CAAC;IAC1CiC,aAAa,GAAGn5B,KAAK,CAACpK,SAAS;IAC/BwjC,kBAAkB,GAAMp5B,KAAK,CAAClK,UAAU,OAAI;IAG5C,IAAMwjC,MAAM,GAAG5E,WAAW,EAAE;IAC5B2E,cAAc,GAAMr5B,KAAK,CAACjK,SAAS,GAAG,CAAC,GAAGujC,MAAM,YAAMt5B,KAAK,CAAC9J,WAAW,GAAG,CAAC,aAAM8J,KAAK,CAAChK,YAAY,GAAG,CAAC,aAAMgK,KAAK,CAAC/J,UAAU,GAAG,CAAC,QAAI;IAErI,IAAMsjC,OAAO,GAAGxC,QAAQ,CAAAp8B,KAAA,SAAIuY,QAAQ,CAAC;IACrC,IAAIqmB,OAAO,KAAKR,WAAW,EAAE;MACzBZ,cAAc,CAAC,EAAE,CAAC;MAClBpC,WAAW,CAACriC,OAAO,CAAC;;;EAI5B,IAAA8lC,iBAAA,GAAuBR,gBAAgB;IAAhCS,KAAK,GAAAD,iBAAA;IAAEE,KAAK,GAAAF,iBAAA;EACnB,IAAMG,UAAU,GAAG;IACf9uB,KAAK,EAAEyrB,SAAS;IAChBN,SAAS,EAAE,IAAI;IACf4D,SAAS,EAAEtkB,cAAc;IACzBtV,KAAK,EAAE;MACHqhB,QAAQ,EAAE,UAAU;MACpBhoB,IAAI,EAAEogC,KAAK;MACXngC,GAAG,EAAEogC,KAAK;MACVG,OAAO,EAAER,cAAc;MACvB55B,KAAK,EAAEw5B,aAAa;MACpBv5B,MAAM,EAAEw5B,cAAc;MACtBY,OAAO,EAAE,MAAM;MACfC,MAAM,EAAE,MAAM;MACdnkC,SAAS,EAAEujC,aAAa;MACxBrjC,UAAU,EAAEsjC,kBAAkB;MAC9BjjC,KAAK,EAAE,OAAO;MACdN,QAAQ,EAAEF,kBAAkB,CAACE,QAAQ;MACrCO,UAAU,EAAE,YAAY;MACxB4jC,MAAM,EAAE;;GAEf;EAED,IAAMC,KAAK,IAAAC,qBAAA,GAAG9E,KAAK,CAAC+E,cAAc,cAAAD,qBAAA,uBAApBA,qBAAA,CAAAluB,IAAA,CAAAopB,KAAK,EACf6B,SAAS,EACTC,SAAS,EAAA5jB,QAAA,KACJqmB,UAAU;IAAE7yB,QAAQ,EAAEyvB;MAC3BwB,iBAAiB,CACpB;EAED,IAAIqC,mBAAmB,GAAGC,MAAM,CAACC,WAAW;EAC5C,IAAMC,gBAAgB,GAAwB;IAC1ClZ,QAAQ,EAAE,UAAU;IACpB5hB,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE,MAAM;IACdpG,GAAG,EAAE,CAAC;IACND,IAAI,EAAE,CAAC;IACPmhC,QAAQ,EAAE,QAAQ;IAClBV,OAAO,EAAE,CAAC;IACVW,YAAY,EAAE;GACjB;EACD,IAAMC,YAAY,GAAwB;IACtCj7B,KAAK,EAAElB,WAAW;IAClBmB,MAAM,EAAEhB,YAAY;IACpBo7B,OAAO,EAAE;GACZ;EAED,IAAIj0B,UAAU,CAACivB,cAAc,EAAE;IAC3B,OAAO4F,YAAY,CAAC,SAAS,CAAC;IAC9B,OAAOH,gBAAgB,CAAC,cAAc,CAAC;IACvCH,mBAAmB,GAAG,EAAE;;EAG5B,IAAMO,cAAc,GAAG97B,OAAO,CAC1B;IAAA,IAAA+7B,mBAAA;IAAA,QAAAA,mBAAA,GAAMxF,KAAK,CAACyF,YAAY,cAAAD,mBAAA,uBAAlBA,mBAAA,CAAA5uB,IAAA,CAAAopB,KAAK,EAAgB;MAAExvB,YAAY,EAAZA,YAAY;MAAED,UAAU,EAAVA,UAAU;MAAE7L,SAAS,EAATA,SAAS;MAAEsL,QAAQ,EAARA;KAAU,CAAC;KAC7E,CAACgwB,KAAK,CAACyF,YAAY,EAAEj1B,YAAY,EAAED,UAAU,EAAE7L,SAAS,EAAEsL,QAAQ,CAAC,CACtE;EAED,IAAM01B,eAAe,GAAGj8B,OAAO,CAC3B;IAAA,IAAAk8B,oBAAA;IAAA,QAAAA,oBAAA,GAAM3F,KAAK,CAAC4F,aAAa,cAAAD,oBAAA,uBAAnBA,oBAAA,CAAA/uB,IAAA,CAAAopB,KAAK,EAAiB;MAAExvB,YAAY,EAAZA,YAAY;MAAED,UAAU,EAAVA,UAAU;MAAE7L,SAAS,EAATA,SAAS;MAAEsL,QAAQ,EAARA;KAAU,CAAC;KAC9E,CAACgwB,KAAK,CAAC4F,aAAa,EAAEp1B,YAAY,EAAED,UAAU,EAAE7L,SAAS,EAAEsL,QAAQ,CAAC,CACvE;EAGD61B,mBAAmB,CACf5xB,GAAG,EACH;IAAA,OAAAiK,QAAA,KACO3N,UAAU,EACVygB,YAAY;MACf4R,gBAAgB,EAAhBA;;GACF,EACF,CAACryB,UAAU,EAAEygB,YAAY,EAAE4R,gBAAgB,CAAC,CAC/C;EAED,OACIkD;IAAKl7B,KAAK,EAAE;MAAEqhB,QAAQ,EAAE,UAAU;MAAE3hB,MAAM,EAAE,MAAM;MAAE86B,QAAQ,EAAE;;KAC1DU;IAAQl7B,KAAK,EAAE06B,YAAY;IAAErxB,GAAG,EAAEgsB;IAAa,EAC/C6F;IACI7xB,GAAG,EAAE4L;KACD1B,aAAa;IACjBqmB,SAAS,EAAErkB,aAAa;IACxB4lB,OAAO,EAAEhlB,WAAW;IACpBilB,MAAM,EAAEhlB,UAAU;IAClBilB,QAAQ,EAAE,CAAC;IACX7C,QAAQ,EAAEA,QAAQ;IAClB8C,SAAS,EAAElB,mBAAmB;IAC9Bp6B,KAAK,EAAEu6B;MAEPW;IACIl7B,KAAK,EAAE;MACHqhB,QAAQ,EAAE,UAAU;MACpBhoB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE,CAAC;MACNmG,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE8X,UAAU,GAAG,IAAI;MACzBjhB,eAAe,EAAE;;IAElB,EACP2kC;IACIl7B,KAAK,EAAE;MACHqhB,QAAQ,EAAE,UAAU;MACpBhoB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE,CAAC;MACNmG,KAAK,EAAE8X,UAAU,GAAG,IAAI;MACxB7X,MAAM,EAAE,CAAC;MACTnJ,eAAe,EAAE;;IAElB,EACNokC,cAAc,GACXO;IACIl7B,KAAK,EAAE;MACHqhB,QAAQ,EAAE,QAAQ;MAClBhoB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE;;KAGRqhC,cAAc,CACb,GACN,IAAI,CACN,EACLG,eAAe,GACZI;IACIl7B,KAAK,EAAE;MACHqhB,QAAQ,EAAE,UAAU;MACpBhoB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE,CAAC;MACNmG,KAAK,EAAE,MAAM;MACbC,MAAM,EAAE,MAAM;MACd67B,aAAa,EAAE;;KAGlBT,eAAe,CACd,GACN,IAAI,EACP11B,QAAQ,KACJ60B,KAAK,KAAKz2B,SAAS,GAChBy2B,KAAK,GAELiB,kDACQvB,UAAU;IACdwB,OAAO,EAAE,SAATA,OAAOA,CAAGx5B,CAAC;MAAA,OAAKA,CAAC,CAAC8H,MAAM,CAAC+xB,MAAM,EAAE;;IACjC10B,QAAQ,EAAE,SAAVA,QAAQA,CAAGnF,CAAC;MAAA,OAAK40B,YAAY,CAAC50B,CAAC,CAAC8H,MAAM,CAACoB,KAAK,CAAC;;KAEpD,CAAC,CACJ;AAEd,CAAC,CAAC;;;;;"}
|