{"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/constants/property.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/utils/drawing/resize-handle.ts","../../../packages/common/src/utils/drawing/rotate-handle.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/utils/vector.ts","../../../packages/common/src/utils/math.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/default-orthogonal-routing.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/utils/memorize.ts","../../../packages/common/src/utils/rotate.ts","../../../packages/common/src/utils/elements.ts","../../../packages/common/src/utils/animate.ts","../../../packages/common/src/utils/stroke.ts","../../../packages/common/src/utils/clipboard.ts","../../../packages/common/src/utils/point-placement.ts","../../../packages/common/src/image/image.generator.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/generators/group.generator.ts","../../../packages/common/src/core/element-ref.ts","../../../packages/common/src/core/element-flavour.ts","../../../packages/common/src/core/group.component.ts","../../../packages/common/src/plugins/with-group.ts","../../../packages/common/src/image/image-base.component.ts","../../../packages/common/src/text/text-measure.ts","../../../packages/common/src/text/text-manage.ts","../../../packages/common/src/text/with-text.ts","../../../packages/common/src/text/types.ts","../../../packages/common/src/image/with-image.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 9;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\nexport const ROTATE_HANDLE_DISTANCE_TO_ELEMENT = 4;\nexport const ROTATE_HANDLE_SIZE = 18;\nexport const DEFAULT_FONT_FAMILY = `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Noto Sans', 'Noto Sans CJK SC', 'Microsoft Yahei', 'Hiragino Sans GB', Arial, sans-serif`;\nexport const DEFAULT_FILL = 'none';\n","export enum MediaKeys {\n    image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeHandle {\n    nw = '0',\n    n = '4',\n    ne = '1',\n    e = '5',\n    se = '2',\n    s = '6',\n    sw = '3',\n    w = '7'\n}\n","export enum StrokeStyle {\n    solid = 'solid',\n    dashed = 'dashed',\n    dotted = 'dotted'\n}\n","import {\n    PlaitBoard,\n    PlaitElement,\n    PlaitGroupElement,\n    RectangleClient,\n    getElementsInGroup,\n    getSelectionAngle,\n    setAngleForG,\n    toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {\n    prepend?: boolean;\n    active?: boolean;\n}\n\nexport abstract class Generator<\n    T extends PlaitElement = PlaitElement,\n    K extends GeneratorExtraData = GeneratorExtraData,\n    V extends GeneratorOptions = GeneratorOptions,\n    P extends PlaitBoard = PlaitBoard\n> {\n    g?: SVGGElement;\n\n    protected options?: V;\n\n    constructor(protected board: P, options?: V) {\n        this.options = options;\n    }\n\n    processDrawing(element: T, parentG: SVGGElement, data?: K) {\n        if (this.canDraw && this.canDraw(element, data)) {\n            const g = this.draw(element, data);\n            if (g) {\n                if (this.g && parentG.contains(this.g)) {\n                    this.g.replaceWith(g);\n                } else {\n                    if (this.g) {\n                        this.g.remove();\n                    }\n                    if (this.options?.prepend) {\n                        parentG.prepend(g);\n                    } else {\n                        parentG.appendChild(g);\n                    }\n                }\n                this.g = g;\n                const rectangle = this.board.getRectangle(element);\n                if (!rectangle) {\n                    return;\n                }\n                let centerPoint = RectangleClient.getCenterPoint(rectangle);\n                if (this.options?.active) {\n                    const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, rectangle);\n                    centerPoint = RectangleClient.getCenterPoint(activeRectangle);\n                }\n                let angle;\n                if (PlaitGroupElement.isGroup(element)) {\n                    angle = getSelectionAngle(getElementsInGroup(this.board, element, true));\n                } else {\n                    angle = element.angle;\n                }\n                if (angle) {\n                    setAngleForG(g, centerPoint, angle);\n                }\n            } else {\n                this.destroy();\n            }\n            if (hasAfterDraw(this)) {\n                this.afterDraw(element);\n            }\n        } else {\n            this.destroy();\n        }\n    }\n\n    /**\n     * abstract function\n     */\n    protected abstract canDraw(element: T, data?: K): boolean;\n\n    /**\n     * abstract function\n     */\n    protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n    destroy() {\n        if (this.g) {\n            this.g.remove();\n            this.g = undefined;\n        }\n    }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n    afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n    if (value.afterDraw) {\n        return true;\n    }\n    return false;\n}\n","import { RESIZE_HANDLE_CLASS_NAME, PlaitBoard, Point, drawCircle } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../../constants/default';\n\nexport const drawHandle = (board: PlaitBoard, centerPoint: Point) => {\n    const options: Options = { stroke: '#99999995', strokeWidth: 2, fill: '#FFF', fillStyle: 'solid' };\n    const handleG = drawCircle(PlaitBoard.getRoughSVG(board), centerPoint, RESIZE_HANDLE_DIAMETER, options);\n    handleG.classList.add(RESIZE_HANDLE_CLASS_NAME);\n    return handleG;\n};\n\nexport function drawFillPrimaryHandle(board: PlaitBoard, point: Point) {\n    return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n        stroke: '#FFFFFF',\n        strokeWidth: 1,\n        fill: `${PRIMARY_COLOR}`,\n        fillStyle: 'solid'\n    });\n}\n\nexport function drawPrimaryHandle(board: PlaitBoard, point: Point) {\n    return drawCircle(PlaitBoard.getRoughSVG(board), point, RESIZE_HANDLE_DIAMETER, {\n        stroke: `${PRIMARY_COLOR}`,\n        strokeWidth: 2,\n        fill: `#FFFFFF`,\n        fillStyle: 'solid'\n    });\n}\n","import { DEFAULT_COLOR, PlaitBoard, RectangleClient, createG, setStrokeLinecap } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { ROTATE_HANDLE_DISTANCE_TO_ELEMENT, ROTATE_HANDLE_SIZE } from '../../constants';\n\nconst rotateHandleRadius = 6;\n\nexport const drawRotateHandle = (board: PlaitBoard, rectangle: RectangleClient) => {\n    const options: Options = { stroke: DEFAULT_COLOR, strokeWidth: 1, fillStyle: 'solid' };\n    const handleCenterPoint = [\n        rectangle.x - ROTATE_HANDLE_DISTANCE_TO_ELEMENT - ROTATE_HANDLE_SIZE / 2,\n        rectangle.y + rectangle.height + ROTATE_HANDLE_DISTANCE_TO_ELEMENT + ROTATE_HANDLE_SIZE / 2\n    ];\n    const rs = PlaitBoard.getRoughSVG(board);\n    const handleG = createG();\n    const line = rs.path(\n        `M ${handleCenterPoint[0] + rotateHandleRadius} ${handleCenterPoint[1]} A ${rotateHandleRadius} ${rotateHandleRadius}, 0, 1, 0, ${\n            handleCenterPoint[0]\n        } ${handleCenterPoint[1] + rotateHandleRadius}`,\n        options\n    );\n    const arrow = rs.polygon(\n        [\n            [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius - 2],\n            [handleCenterPoint[0], handleCenterPoint[1] + rotateHandleRadius + 2],\n            [handleCenterPoint[0] + 4.5, handleCenterPoint[1] + rotateHandleRadius]\n        ],\n        { ...options, fill: DEFAULT_COLOR }\n    );\n    setStrokeLinecap(arrow, 'round');\n    handleG.append(line, arrow);\n    return handleG;\n};\n","import {\n    ACTIVE_STROKE_WIDTH,\n    PlaitBoard,\n    PlaitElement,\n    RectangleClient,\n    SELECTION_RECTANGLE_CLASS_NAME,\n    createG,\n    drawRectangle,\n    toActiveRectangleFromViewBoxRectangle\n} from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { PRIMARY_COLOR } from '../constants/default';\nimport { drawHandle } from '../utils/drawing';\n\nexport interface ActiveGeneratorExtraData {\n    selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> extends GeneratorOptions {\n    getRectangle: (element: T) => RectangleClient;\n    getStrokeWidth: () => number;\n    getStrokeOpacity: () => number;\n    hasResizeHandle: () => boolean;\n    active: true;\n}\n\nexport const createActiveGenerator = <T extends PlaitElement = PlaitElement>(\n    board: PlaitBoard,\n    options: Omit<ActiveGeneratorOptions<T>, 'active'>\n) => {\n    return new ActiveGenerator<T>(board, { ...options, active: true });\n};\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n    T,\n    ActiveGeneratorExtraData,\n    ActiveGeneratorOptions<T>\n> {\n    static key = 'active-generator';\n\n    hasResizeHandle = false;\n\n    constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n        super(board, { ...options });\n    }\n\n    canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n        if (data.selected) {\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n        const activeG = createG();\n        const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, this.options.getRectangle(element));\n\n        const delta = this.options.getStrokeWidth() * this.board.viewport.zoom;\n        const activeRectangleWithDelta = RectangleClient.inflate(activeRectangle, delta);\n\n        const strokeG = drawRectangle(this.board, activeRectangleWithDelta, {\n            stroke: PRIMARY_COLOR,\n            strokeWidth: ACTIVE_STROKE_WIDTH\n        });\n\n        activeG.append(strokeG);\n        strokeG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n        strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n        if (this.options.hasResizeHandle()) {\n            this.hasResizeHandle = true;\n            // draw resize handle\n            RectangleClient.getCornerPoints(activeRectangleWithDelta).forEach((corner) => {\n                const cornerHandleG = drawHandle(this.board, corner);\n                activeG.append(cornerHandleG);\n            });\n        } else {\n            this.hasResizeHandle = false;\n        }\n        return activeG;\n    }\n}\n","import {\n    PlaitBoard,\n    Point,\n    RectangleClient,\n    ResizeCursorClass,\n    setDragging,\n    RESIZE_CURSORS,\n    rotatePoints,\n    PlaitElement,\n    getSelectedElements,\n    isSelectionMoving\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { PlaitElementOrArray, ResizeRef } from '../types/resize';\n\nexport const getResizeHandleByIndex = (index: number) => {\n    return `${index}` as ResizeHandle;\n};\n\nexport const getIndexByResizeHandle = (resizeHandle: ResizeHandle) => {\n    return Number(resizeHandle);\n};\n\nexport const getSymmetricHandleIndex = (board: PlaitBoard, index: number) => {\n    const originIndex = isEdgeHandle(board, getResizeHandleByIndex(index)) ? index - 4 : index;\n    let originSymmetricHandleIndex = originIndex + 2;\n    if (originSymmetricHandleIndex >= 4) {\n        originSymmetricHandleIndex = originSymmetricHandleIndex - 4;\n    }\n    return isEdgeHandle(board, getResizeHandleByIndex(index)) ? originSymmetricHandleIndex + 4 : originSymmetricHandleIndex;\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n    switch (index) {\n        case 0:\n        case 2:\n            return ResizeCursorClass.nwse;\n        case 1:\n        case 3:\n            return ResizeCursorClass.nesw;\n        case 4:\n        case 6:\n            return ResizeCursorClass.ns;\n        case 5:\n        case 7:\n            return ResizeCursorClass.ew;\n        default:\n            return null;\n    }\n};\n\nexport const getRotatedResizeCursorClassByAngle = (cursor: ResizeCursorClass, angle: number) => {\n    const index = RESIZE_CURSORS.indexOf(cursor);\n    if (index >= 0) {\n        const temp = Math.round(angle / (Math.PI / 4));\n        cursor = RESIZE_CURSORS[(index + temp) % RESIZE_CURSORS.length] as ResizeCursorClass;\n    }\n    return cursor;\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n    const corners = RectangleClient.getCornerPoints(rectangle);\n    const refs = corners.map((corner, index: number) => {\n        return {\n            rectangle: {\n                x: corner[0] - diameter / 2,\n                y: corner[1] - diameter / 2,\n                width: diameter,\n                height: diameter\n            },\n            handle: getResizeHandleByIndex(index) as ResizeHandle,\n            cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n        };\n    });\n    const rectangles = getResizeSideRectangles(corners, diameter / 2);\n    refs.push(\n        ...rectangles.map((rectangle, index) => {\n            return {\n                rectangle,\n                handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n                cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n            };\n        })\n    );\n    return refs;\n};\n\nexport const getResizeHandlePointByIndex = (rectangle: RectangleClient, index: number) => {\n    if (index <= 3) {\n        const corners = RectangleClient.getCornerPoints(rectangle);\n        return corners[index];\n    } else {\n        const edgeCenterPoints = RectangleClient.getEdgeCenterPoints(rectangle);\n        return edgeCenterPoints[index - 4];\n    }\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n    const result = [];\n    for (let i = 0; i < cornerPoints.length; i++) {\n        let rectangle = RectangleClient.getRectangleByPoints([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n        const arr = new Array(2).fill(0);\n        arr[(i + 1) % 2] = offset / 2;\n        rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n        result.push(rectangle);\n    }\n    return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n    return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElementOrArray, K>(\n    board: PlaitBoard,\n    match: (resizeRef: ResizeRef<T, K>) => boolean\n) => {\n    return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElementOrArray, K, P>(board: PlaitBoard, resizeRef: ResizeRef<T, K, P>, key: string) => {\n    PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n    IS_RESIZING.set(board, resizeRef);\n    setDragging(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n    PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n    IS_RESIZING.delete(board);\n    setDragging(board, false);\n};\n\nexport const isEdgeHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n    const index = getIndexByResizeHandle(handle);\n    if (index >= 4) {\n        return true;\n    } else {\n        return false;\n    }\n};\n\nexport const isCornerHandle = (board: PlaitBoard, handle: ResizeHandle) => {\n    return !isEdgeHandle(board, handle);\n};\n\n// 处理元素先旋转后resize导致的位置偏移\nexport const resetPointsAfterResize = (\n    originRectangle: RectangleClient,\n    currentRectangle: RectangleClient,\n    originSelectionCenterPoint: Point,\n    currentSelectionCenterPoint: Point,\n    angle: number\n): [Point, Point] => {\n    const correctSelectionCenterPoint = rotatePoints([currentSelectionCenterPoint], originSelectionCenterPoint, angle)[0];\n    const rotatedElementCenterPoint = rotatePoints(\n        [RectangleClient.getCenterPoint(currentRectangle) as Point],\n        originSelectionCenterPoint,\n        angle\n    )[0];\n\n    const currentPoints = RectangleClient.getPoints(currentRectangle);\n    const originRectangleCenterPoint = RectangleClient.getCenterPoint(originRectangle);\n\n    const correctElementCenterPoint = rotatePoints([rotatedElementCenterPoint], correctSelectionCenterPoint, -angle)[0];\n\n    const rotatedPoints = rotatePoints(currentPoints, originRectangleCenterPoint, angle);\n    return rotatePoints(rotatedPoints, correctElementCenterPoint, -angle) as [Point, Point];\n};\n\nexport const hasMoreThanOnePoint = (element: PlaitElement) => {\n    const points = element.points as Point[];\n    return points && points.length > 1;\n};\n\nexport const hasResizeHandle = (board: PlaitBoard, element: PlaitElement) => {\n    if (PlaitBoard.hasBeenTextEditing(board) || isSelectionMoving(board)) {\n        return false;\n    }\n    const selectedElements = getSelectedElements(board);\n    return selectedElements.length === 1 && selectedElements[0] === element && hasMoreThanOnePoint(element);\n};\n","import { Point, Vector } from '@plait/core';\n\nexport function getUnitVectorByPointAndPoint(point1: Point, point2: Point): Point {\n    const deltaX = point2[0] - point1[0];\n    const deltaY = point2[1] - point1[1];\n    const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n    // Avoid division by zero if the points are the same\n    if (distance === 0) {\n        throw new Error('Points must not be the same for a unit vector calculation.');\n    }\n    // Calculate the unit vector components\n    const unitX = deltaX / distance;\n    const unitY = deltaY / distance;\n\n    return [unitX, unitY];\n}\n\nexport function getPointByVectorComponent(point: Point, vector: Vector, component: number): Point {\n    const distance = Math.hypot(vector[0], vector[1]);\n    return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];\n}\n\nexport function getPointByVectorDirectionComponent(point: Point, unitVector: Vector, directionComponent: number, isHorizontal: boolean) {\n    if (isHorizontal) {\n        return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]] as Point;\n    } else {\n        return [point[0] + (directionComponent / unitVector[1]) * unitVector[0], point[1] + directionComponent] as Point;\n    }\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n    const x = vector[0];\n    const y = vector[1];\n    const rotatedX = y;\n    const rotatedY = -x;\n    return [rotatedX, rotatedY];\n}\n\nexport function rotateVector(vector: Vector, angle: number): Vector {\n    if (!angle) {\n        return vector;\n    }\n    const x = vector[0];\n    const y = vector[1];\n    const rotatedX = x * Math.cos(angle) - y * Math.sin(angle);\n    const rotatedY = x * Math.sin(angle) + y * Math.cos(angle);\n    return [rotatedX, rotatedY];\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getPointByVectorDirectionComponent, getUnitVectorByPointAndPoint } from './vector';\n\nexport function isPointOnSegment(point: Point, startPoint: Point, endPoint: Point) {\n    const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n    const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n    const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n    return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const getCrossingPointsBetweenPointAndSegment = (point: Point, startPoint: Point, endPoint: Point) => {\n    const result: Point[] = [];\n    const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];\n    const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];\n    const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);\n    if (point[0] >= xRange[0] && point[0] <= xRange[1]) {\n        const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[0] - startPoint[0], true) as Point;\n        result.push(crossingPoint);\n    } else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {\n        const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[1] - startPoint[1], false) as Point;\n        result.push(crossingPoint);\n    }\n    return result;\n};\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { isPointOnSegment } from './math';\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n    const totalLength = calculatePolylineLength(points);\n    const targetDistance = totalLength * ratio;\n\n    let accumulatedDistance = 0;\n    for (let i = 0; i < points.length - 1; i++) {\n        const [x1, y1] = points[i];\n        const [x2, y2] = points[i + 1];\n        const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n        if (accumulatedDistance + segmentLength >= targetDistance) {\n            const remainingDistance = targetDistance - accumulatedDistance;\n            const ratioInSegment = remainingDistance / segmentLength;\n\n            const targetX = x1 + (x2 - x1) * ratioInSegment;\n            const targetY = y1 + (y2 - y1) * ratioInSegment;\n            return [targetX, targetY];\n        }\n\n        accumulatedDistance += segmentLength;\n    }\n\n    return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n    let length = 0;\n    for (let i = 0; i < points.length - 1; i++) {\n        const [x1, y1] = points[i];\n        const [x2, y2] = points[i + 1];\n        length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n    }\n    return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n    const totalLength = calculatePolylineLength(points);\n    let distance = 0;\n    for (let i = 0; i < points.length - 1; i++) {\n        const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);\n        if (isOverlap) {\n            distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n            return distance / totalLength;\n        } else {\n            distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n        }\n    }\n    throw new Error('Cannot get ratio by point');\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n    const newArray: Point[] = [];\n    points.forEach(point => {\n        const index = newArray.findIndex(otherPoint => {\n            return Point.isEquals(point, otherPoint);\n        });\n        if (index === -1) newArray.push(point);\n    });\n    return newArray;\n};\n\nexport function simplifyOrthogonalPoints(points: Point[]) {\n    if (points.length <= 2) return points;\n    let simplifiedPoints: Point[] = [points[0]];\n    for (let i = 1; i < points.length - 1; i++) {\n        const previous = points[i - 1];\n        const current = points[i];\n        const next = points[i + 1];\n        const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));\n        if (isTurn) {\n            simplifiedPoints.push(current);\n        }\n    }\n    simplifiedPoints.push(points[points.length - 1]);\n    return simplifiedPoints;\n}\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n    const distance = distanceBetweenPointAndPoint(...source, ...target);\n    const isEqual = Point.isEquals(source, target);\n    const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n    const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n    return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { Direction, DirectionFactor, Point, PointOfRectangle, Vector } from '@plait/core';\n\nconst handleDirectionFactors = {\n    [Direction.left]: { x: -1, y: 0 },\n    [Direction.right]: { x: 1, y: 0 },\n    [Direction.top]: { x: 0, y: -1 },\n    [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getOppositeDirection(direction: Direction) {\n    switch (direction) {\n        case Direction.left:\n            return Direction.right;\n        case Direction.right:\n            return Direction.left;\n        case Direction.top:\n            return Direction.bottom;\n        case Direction.bottom:\n            return Direction.top;\n    }\n}\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n    if (point[0] === 0) {\n        return Direction.left;\n    }\n    if (point[0] === 1) {\n        return Direction.right;\n    }\n    if (point[1] === 0) {\n        return Direction.top;\n    }\n    if (point[1] === 1) {\n        return Direction.bottom;\n    }\n    return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n    const x = vector[0];\n    const y = vector[1];\n    if (x === 0 && y === 0) {\n        return null;\n    }\n    if (x === 0) {\n        return y > 0 ? Direction.bottom : Direction.top;\n    }\n    if (y === 0) {\n        return x > 0 ? Direction.right : Direction.left;\n    }\n    const angle = Math.atan2(y, x);\n    if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n        return Direction.right;\n    } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n        return Direction.bottom;\n    } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n        return Direction.top;\n    } else {\n        return Direction.left;\n    }\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n    if (source[0] === target[0]) {\n        if (source[1] >= target[1]) {\n            return Direction.top;\n        } else {\n            return Direction.bottom;\n        }\n    }\n    if (source[1] === target[1]) {\n        if (source[0] >= target[0]) {\n            return Direction.left;\n        } else {\n            return Direction.right;\n        }\n    }\n    throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n    return handleDirectionFactors[direction];\n}\n\nexport function getDirectionFactorByDirectionComponent(directionComponent: number): DirectionFactor {\n    const directionFactor = directionComponent === 0 ? directionComponent : directionComponent / Math.abs(directionComponent);\n    return directionFactor as DirectionFactor;\n}\n","// Credits to xyflow\n// https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/smoothstep-edge.ts\n\nimport { Direction, Point } from \"@plait/core\";\nimport { getDirectionFactor } from \"./direction\";\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n    const sourceDirectionFactors = getDirectionFactor(sourcePosition);\n    const targetDFs = getDirectionFactor(targetPosition);\n    const sourceGapped: Point = [source[0] + sourceDirectionFactors.x * offset, source[1] + sourceDirectionFactors.y * offset];\n    const targetGapped: Point = [target[0] + targetDFs.x * offset, target[1] + targetDFs.y * offset];\n    const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n    const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n    const currDir = dir[dirAccessor];\n\n    let points: Point[] = [];\n    let centerX, centerY;\n    const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n        sourceX: source[0],\n        sourceY: source[1],\n        targetX: target[0],\n        targetY: target[1]\n    });\n    // opposite handle positions, default case\n    if (sourceDirectionFactors[dirAccessor] * targetDFs[dirAccessor] === -1) {\n        centerX = defaultCenterX;\n        centerY = defaultCenterY;\n        //    --->\n        //    |\n        // >---\n        const verticalSplit: Point[] = [\n            [centerX, sourceGapped[1]],\n            [centerX, targetGapped[1]]\n        ];\n        //    |\n        //  ---\n        //  |\n        const horizontalSplit: Point[] = [\n            [sourceGapped[0], centerY],\n            [targetGapped[0], centerY]\n        ];\n        if (sourceDirectionFactors[dirAccessor] === currDir) {\n            points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n        } else {\n            points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n        }\n    } else {\n        // sourceTarget means we take x from source and y from target, targetSource is the opposite\n        const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n        const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n        // this handles edges with same handle positions\n        if (dirAccessor === 'x') {\n            points = sourceDirectionFactors.x === currDir ? targetSource : sourceTarget;\n        } else {\n            points = sourceDirectionFactors.y === currDir ? sourceTarget : targetSource;\n        }\n\n        // these are conditions for handling mixed handle positions like right -> bottom for example\n        let flipSourceTarget;\n        if (sourcePosition !== targetPosition) {\n            const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n            const isSameDir = sourceDirectionFactors[dirAccessor] === targetDFs[dirAccessor === 'x' ? 'y' : 'x'];\n            const sourceGtTarget = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n            const sourceLtTarget = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n            flipSourceTarget =\n                (sourceDirectionFactors[dirAccessor] === 1 && ((!isSameDir && sourceGtTarget) || (isSameDir && sourceLtTarget))) ||\n                (sourceDirectionFactors[dirAccessor] !== 1 && ((!isSameDir && sourceLtTarget) || (isSameDir && sourceGtTarget)));\n\n            if (flipSourceTarget) {\n                points = dirAccessor === 'x' ? sourceTarget : targetSource;\n            }\n        }\n    }\n    return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nconst getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n    if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n        return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n    }\n    return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nfunction getEdgeCenter({\n    sourceX,\n    sourceY,\n    targetX,\n    targetY\n}: {\n    sourceX: number;\n    sourceY: number;\n    targetX: number;\n    targetY: number;\n}): [number, number, number, number] {\n    const xOffset = Math.abs(targetX - sourceX) / 2;\n    const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n    const yOffset = Math.abs(targetY - sourceY) / 2;\n    const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n    return [centerX, centerY, xOffset, yOffset];\n}","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n    const isMod = e.ctrlKey || e.metaKey;\n    const isAlt = isKeyHotkey('alt', e);\n    const isShift = isKeyHotkey('shift', e);\n    const isCapsLock = e.key.includes('CapsLock');\n    const isTab = e.key.includes('Tab');\n    const isEsc = e.key.includes('Escape');\n    const isF = e.key.startsWith('F');\n    const isArrow = e.key.includes('Arrow') ? true : false;\n    return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n    return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n    return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n    return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n    return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n    return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n    'dnd' = 'dnd',\n    'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n    return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n    BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n    return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n    return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { Editor, Node, Element } from 'slate';\nimport { TextManage } from '../text/text-manage';\nimport { Alignment, CustomText, ParagraphElement } from '../text/types';\nimport { PlaitCommonElementRef } from '../core';\n\nexport interface TextInterface {\n    getTextEditors: (board: PlaitBoard, elements?: PlaitElement[]) => Editor[] | undefined;\n    findFirstTextEditor: (board: PlaitBoard) => null;\n    getFirstTextEditor: (element: PlaitElement) => Editor;\n    getTextEditorsByElement: (element: PlaitElement) => Editor[];\n    getEditingTextEditor: (board: PlaitBoard, elements?: PlaitElement[]) => Editor | undefined;\n}\n\nexport const getTextManages = (element: PlaitElement) => {\n    const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n    return ref?.getTextManages() || [];\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n    const textManage = getTextManages(element)[0];\n    if (!textManage) {\n        console.warn('can not find textManage');\n    }\n    return textManage;\n};\n\nexport const getTextEditorsByElement: TextInterface['getTextEditorsByElement'] = (element: PlaitElement) => {\n    return getTextManages(element).map(manage => {\n        return manage.editor;\n    });\n};\n\nexport const getFirstTextEditor: TextInterface['getFirstTextEditor'] = (element: PlaitElement) => {\n    const textEditor = getTextEditorsByElement(element)[0];\n    if (!textEditor) {\n        console.warn('can not find textManage');\n    }\n    return textEditor;\n};\n\nexport const findFirstTextEditor: TextInterface['findFirstTextEditor'] = (board: PlaitBoard) => {\n    const selectedElements = getSelectedElements(board);\n    let firstEditor: Editor | null = null;\n    selectedElements.forEach(element => {\n        const editors = getTextEditorsByElement(element);\n        if (!firstEditor && editors && editors.length > 0) {\n            firstEditor = editors[0];\n        }\n    });\n    return firstEditor;\n};\n\nexport const getElementsText = (elements: PlaitElement[]) => {\n    return elements\n        .map(item => {\n            try {\n                const editors = getTextEditorsByElement(item);\n                if (editors.length) {\n                    return editors\n                        .map(editor => {\n                            const textsEntry = Node.texts(editor);\n                            return Array.from(textsEntry).reduce((total, text) => (total += text[0].text), '');\n                        })\n                        .join(' ');\n                }\n                return '';\n            } catch (error) {\n                return '';\n            }\n        })\n        .filter(item => item)\n        .join(' ');\n};\n\nexport const getTextEditors: TextInterface['getTextEditors'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n    const selectedElements = elements || getSelectedElements(board);\n    if (selectedElements.length) {\n        const textManages: TextManage[] = [];\n        selectedElements.forEach(item => {\n            textManages.push(...getTextManages(item));\n        });\n        const editingTextManage = textManages.find(textManage => textManage.isEditing);\n        if (editingTextManage) {\n            return [editingTextManage.editor];\n        }\n        return textManages.map(item => {\n            return item.editor;\n        });\n    }\n    return undefined;\n};\n\nexport const getEditingTextEditor: TextInterface['getEditingTextEditor'] = (board: PlaitBoard, elements?: PlaitElement[]) => {\n    const selectedElements = elements || getSelectedElements(board);\n    const textManages: TextManage[] = [];\n    selectedElements.forEach(item => {\n        textManages.push(...getTextManages(item));\n    });\n    const editingTextManage = textManages.find(textManage => textManage.isEditing);\n    if (editingTextManage) {\n        return editingTextManage.editor;\n    }\n    return undefined;\n};\n\nexport const buildText = (text: string | Element, align?: Alignment, properties?: Partial<CustomText>) => {\n    properties = properties || {};\n    const plaitText = typeof text === 'string' ? { children: [{ text, ...properties }], type: 'paragraph' } : text;\n    if (align) {\n        (plaitText as ParagraphElement).align = align;\n    }\n    return plaitText;\n};\n\nexport const getLineHeightByFontSize = (fontSize: number) => {\n    if (fontSize === 14) {\n        return 20;\n    }\n    return fontSize * 1.5;\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface CommonImageItem {\n    url: string;\n    width: number;\n    height: number;\n}\n\nexport const selectImage = (\n    board: PlaitBoard,\n    defaultImageWidth: number,\n    handle: (commonImage: CommonImageItem) => void,\n    acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n    const inputFile = document.createElement('input');\n    inputFile.setAttribute('type', 'file');\n    const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n    inputFile.setAttribute('accept', acceptImageTypesString);\n    inputFile.onchange = (event: Event) => {\n        buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n    };\n    inputFile.click();\n};\n\nexport const buildImage = async (\n    board: PlaitBoard,\n    imageFile: File,\n    defaultImageWidth: number,\n    handle: (commonImage: CommonImageItem) => void\n) => {\n    let width = 0,\n        height = 0;\n    await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n        width = value.width;\n        height = value.height;\n    });\n\n    let imageItem = null;\n    const url = URL.createObjectURL(imageFile);\n    const context = PlaitBoard.getBoardContext(board);\n    context.setUploadingFile({ url, file: imageFile });\n\n    imageItem = {\n        url,\n        width,\n        height\n    };\n    handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n    return new Promise((resolve, reject) => {\n        const image = new Image();\n        image.src = URL.createObjectURL(file);\n\n        image.onload = function() {\n            const width = defaultImageWidth;\n            const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n            resolve(\n                image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n            );\n        };\n    });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n    return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n    BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n    BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};\n","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n    list: { node: PointNode; priority: number }[];\n\n    constructor() {\n        this.list = [];\n    }\n\n    enqueue(item: { node: PointNode; priority: number }) {\n        this.list.push(item);\n        this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n    }\n\n    dequeue() {\n        return this.list.shift();\n    }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n    cameFrom: Map<PointNode, PointNode>;\n\n    constructor(private graph: PointGraph) {\n        this.cameFrom = new Map<PointNode, PointNode>();\n    }\n\n    heuristic(a: Point, b: Point) {\n        return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n    }\n\n    search(start: Point, end: Point, previousStart: Point) {\n        const frontier = new PriorityQueue();\n        const startNode = this.graph.get(start);\n        this.cameFrom = new Map<PointNode, PointNode>();\n        const costSoFar = new Map<PointNode, number>();\n        costSoFar.set(startNode!, 0);\n        frontier.enqueue({ node: startNode!, priority: 0 });\n        while (frontier.list.length > 0) {\n            var current = frontier.dequeue();\n\n            if (!current) {\n                throw new Error(`can't find current`);\n            }\n            const currentPoint = current!.node.data;\n            if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n                break;\n            }\n            current.node.adjacentNodes.forEach(next => {\n                let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n                const previousNode = this.cameFrom.get(current!.node);\n                // Inflection point weight, if an inflection point occurs, cost + 1 to avoid the inflection point path\n                // Three points on a line to determine whether there is an inflection point\n                const previousPoint = previousNode ? previousNode.data : previousStart;\n                const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n                const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n                if (!x && !y) {\n                    newCost = newCost + 1;\n                }\n                if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n                    costSoFar.set(next, newCost);\n                    const priority = newCost + this.heuristic(next.data, end);\n                    frontier.enqueue({ node: next, priority });\n                    this.cameFrom.set(next, current!.node);\n                }\n            });\n        }\n    }\n\n    getRoute(start: Point, end: Point) {\n        const result = [];\n        let temp = end;\n        while (temp[0] !== start[0] || temp[1] !== start[1]) {\n            const node = this.graph.get(temp);\n            const preNode = this.cameFrom.get(node!);\n            result.unshift(preNode!.data);\n            temp = preNode!.data;\n        }\n        return result;\n    }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n    public distance = Number.MAX_SAFE_INTEGER;\n    public adjacentNodes: PointNode[] = [];\n    constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n    private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n    add(p: Point) {\n        const x = p[0];\n        const y = p[1];\n        const xs = x.toString(),\n            ys = y.toString();\n\n        if (!(xs in this.index)) {\n            this.index[xs] = {};\n        }\n        if (!(ys in this.index[xs])) {\n            this.index[xs][ys] = new PointNode(p);\n        }\n    }\n    connect(a: Point, b: Point) {\n        const nodeA = this.get(a);\n        const nodeB = this.get(b);\n\n        if (!nodeA || !nodeB) {\n            throw new Error(`A point was not found`);\n        }\n\n        nodeA.adjacentNodes.push(nodeB);\n    }\n\n    has(p: Point): boolean {\n        const x = p[0];\n        const y = p[1];\n        const xs = x.toString(),\n            ys = y.toString();\n        return xs in this.index && ys in this.index[xs];\n    }\n\n    get(p: Point): PointNode | null {\n        const x = p[0];\n        const y = p[1];\n        const xs = x.toString(),\n            ys = y.toString();\n\n        if (xs in this.index && ys in this.index[xs]) {\n            return this.index[xs][ys];\n        }\n\n        return null;\n    }\n}\n","import { Direction, PlaitBoard, Point, RectangleClient, createDebugGenerator, DebugGenerator } from '@plait/core';\nimport { removeDuplicatePoints, simplifyOrthogonalPoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nconst debugGenerator = createDebugGenerator('debug:plait:elbow-line-routing');\n\nexport interface ElbowLineRouteOptions {\n    sourcePoint: Point;\n    nextSourcePoint: Point;\n    sourceRectangle: RectangleClient;\n    sourceOuterRectangle: RectangleClient;\n    targetPoint: Point;\n    nextTargetPoint: Point;\n    targetOuterRectangle: RectangleClient;\n    targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n    centerX?: number;\n    centerY?: number;\n    sourceRectangle: RectangleClient;\n    targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n    parallelPaths: [Point, Point][];\n    pointOfHit: Point;\n    sourceRectangle: RectangleClient;\n    targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions, board?: PlaitBoard) => {\n    const { nextSourcePoint, nextTargetPoint } = options;\n    const points = getGraphPoints(options);\n    const graph = createGraph(points);\n    const aStar = new AStar(graph);\n    aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n    let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n    route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n    // Centerline correction: Correct the shortest path route based on the horizontal centerline/vertical centerline\n    // 1. Find the horizontal center line (centerX)/vertical center line (centerY)\n    // 2. Find the point that intersects centerX/centerY in route, and find the line segment parallel to centerX/centerY in route\n    // 3. Construct a rectangle based on the intersection points and parallel lines found in the previous step.\n    // 4. Determine whether the rectangle intersects with the element. If it does not intersect, the center line can be mapped based on the rectangle constructed in the previous step.\n    // 5. Determine whether the path after mapping the center line meets the constraints (inflection point cannot be increased)\n    const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n    const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n    const centerX = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n    const centerY = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n    route = routeAdjust(route, { centerX, centerY, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle }, board);\n    return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions, board?: PlaitBoard) => {\n    const { sourceRectangle, targetRectangle, centerX, centerY } = options;\n    if (board) {\n        debugGenerator.clear();\n    }\n    if (centerX !== undefined) {\n        const optionsX = getAdjustOptions(path, centerX, true);\n        const resultX =\n            optionsX.pointOfHit &&\n            adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle }, board);\n        if (resultX) {\n            path = resultX;\n        }\n    }\n    if (centerY !== undefined) {\n        const optionsY = getAdjustOptions(path, centerY, false);\n        const resultY =\n            optionsY.pointOfHit &&\n            adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle },  board);\n        if (resultY) {\n            path = resultY;\n        }\n    }\n    return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions, board?: PlaitBoard): null | Point[] => {\n    const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n    let result = null;\n    parallelPaths.forEach(parallelPath => {\n        // Construct a rectangle\n        const tempRectPoints = [pointOfHit, parallelPath[0], parallelPath[1]];\n        // directly use getCornerPoints will bring the precision issue (eg: 263.6923375175286 - 57.130859375)\n        const tempRect = RectangleClient.getRectangleByPoints(tempRectPoints);\n        if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n            const tempCorners = RectangleClient.getCornerPointsByPoints(tempRectPoints);\n            if (board) {\n                debugGenerator.drawRectangle(board, tempRect);\n            }\n            const indexRangeInPath: number[] = [];\n            const indexRangeInCorner: number[] = [];\n            route.forEach((point, index) => {\n                const cornerResult = tempCorners.findIndex(corner => Point.isEquals(point, corner));\n                if (cornerResult !== -1) {\n                    indexRangeInPath.push(index);\n                    indexRangeInCorner.push(cornerResult);\n                }\n            });\n            const newPath = [...route];\n            const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n            const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n            newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n            const turnCount = simplifyOrthogonalPoints([...route]).length - 1;\n            const simplifyPoints = simplifyOrthogonalPoints([...newPath]);\n            // if (board) {\n            //     debugGenerator.drawLine(board, simplifyPoints);\n            // }\n            const newTurnCount = simplifyPoints.length - 1;\n            if (newTurnCount <= turnCount) {\n                result = newPath;\n            }\n        }\n        return null;\n    });\n    return result;\n};\n\nconst getAdjustOptions = (path: Point[], centerOfAxis: number, isHorizontal: boolean) => {\n    const parallelPaths: [Point, Point][] = [];\n    let start: null | Point = null;\n    let pointOfHit: null | Point = null;\n    const axis = isHorizontal ? 0 : 1;\n\n    for (let index = 0; index < path.length; index++) {\n        const previous = path[index - 1];\n        const current = path[index];\n        if (start === null && previous && previous[axis] === current[axis]) {\n            start = previous;\n        }\n        if (start !== null) {\n            if (previous[axis] !== current[axis]) {\n                parallelPaths.push([start, previous]);\n                start = null;\n            }\n        }\n        if (current[axis] === centerOfAxis) {\n            pointOfHit = current;\n        }\n    }\n    if (start) {\n        parallelPaths.push([start, path[path.length - 1]]);\n    }\n    return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n    const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n    const x: number[] = [];\n    const y: number[] = [];\n    let result: Point[] = [];\n\n    [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n        x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n        y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n    });\n    const rectanglesX = [\n        sourceOuterRectangle.x,\n        sourceOuterRectangle.x + sourceOuterRectangle.width,\n        targetOuterRectangle.x,\n        targetOuterRectangle.x + targetOuterRectangle.width\n    ].sort((a, b) => a - b);\n    x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n    const rectanglesY = [\n        sourceOuterRectangle.y,\n        sourceOuterRectangle.y + sourceOuterRectangle.height,\n        targetOuterRectangle.y,\n        targetOuterRectangle.y + targetOuterRectangle.height\n    ].sort((a, b) => a - b);\n    y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n    for (let i = 0; i < x.length; i++) {\n        for (let j = 0; j < y.length; j++) {\n            const point: Point = [x[i], y[j]];\n            const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n            const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n            if (!isInSource && !isInTarget) {\n                result.push(point);\n            }\n        }\n    }\n    result = removeDuplicatePoints(result).filter(point => {\n        const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n        const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n        return !isInSource && !isInTarget;\n    });\n    return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n    const graph = new PointGraph();\n    const Xs: number[] = [];\n    const Ys: number[] = [];\n    points.forEach(p => {\n        const x = p[0],\n            y = p[1];\n        if (Xs.indexOf(x) < 0) Xs.push(x);\n        if (Ys.indexOf(y) < 0) Ys.push(y);\n        graph.add(p);\n    });\n    Xs.sort((a, b) => a - b);\n    Ys.sort((a, b) => a - b);\n    const inHotIndex = (p: Point): boolean => graph.has(p);\n    for (let i = 0; i < Xs.length; i++) {\n        for (let j = 0; j < Ys.length; j++) {\n            const point: Point = [Xs[i], Ys[j]];\n            if (!inHotIndex(point)) continue;\n            if (i > 0) {\n                const otherPoint: Point = [Xs[i - 1], Ys[j]];\n                if (inHotIndex(otherPoint)) {\n                    graph.connect(otherPoint, point);\n                    graph.connect(point, otherPoint);\n                }\n            }\n            if (j > 0) {\n                const otherPoint: Point = [Xs[i], Ys[j - 1]];\n                if (inHotIndex(otherPoint)) {\n                    graph.connect(otherPoint, point);\n                    graph.connect(point, otherPoint);\n                }\n            }\n        }\n    }\n    return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n    const defaultOffset = DEFAULT_ROUTE_MARGIN;\n    let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n    let targetOffset: number[] = new Array(4).fill(defaultOffset);\n    const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n    const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n    if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n        const offset = leftToRight / 2;\n        sourceOffset[3] = offset;\n        targetOffset[1] = offset;\n    }\n\n    if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n        const offset = rightToLeft / 2;\n        targetOffset[3] = offset;\n        sourceOffset[1] = offset;\n    }\n\n    const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n    const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n    if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n        const offset = topToBottom / 2;\n        sourceOffset[0] = offset;\n        targetOffset[2] = offset;\n    }\n    if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n        const offset = bottomToTop / 2;\n        sourceOffset[2] = offset;\n        targetOffset[0] = offset;\n    }\n    return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n    switch (direction) {\n        case Direction.top: {\n            return [point[0], outerRectangle.y];\n        }\n        case Direction.bottom: {\n            return [point[0], outerRectangle.y + outerRectangle.height];\n        }\n        case Direction.right: {\n            return [outerRectangle.x + outerRectangle.width, point[1]];\n        }\n        default: {\n            return [outerRectangle.x, point[1]];\n        }\n    }\n};\n\nexport const getSourceAndTargetOuterRectangle = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n    const { sourceOffset, targetOffset } = reduceRouteMargin(sourceRectangle, targetRectangle);\n    const sourceOuterRectangle = RectangleClient.expand(\n        sourceRectangle,\n        sourceOffset[3],\n        sourceOffset[0],\n        sourceOffset[1],\n        sourceOffset[2]\n    );\n    const targetOuterRectangle = RectangleClient.expand(\n        targetRectangle,\n        targetOffset[3],\n        targetOffset[0],\n        targetOffset[1],\n        targetOffset[2]\n    );\n    return {\n        sourceOuterRectangle,\n        targetOuterRectangle\n    };\n};\n\nexport const isSourceAndTargetIntersect = (options: ElbowLineRouteOptions) => {\n    const {\n        sourcePoint,\n        nextSourcePoint,\n        sourceRectangle,\n        sourceOuterRectangle,\n        targetPoint,\n        nextTargetPoint,\n        targetRectangle,\n        targetOuterRectangle\n    } = options;\n\n    return (\n        RectangleClient.isPointInRectangle(targetRectangle, sourcePoint) ||\n        RectangleClient.isPointInRectangle(targetOuterRectangle, nextSourcePoint) ||\n        RectangleClient.isPointInRectangle(sourceOuterRectangle, nextTargetPoint) ||\n        RectangleClient.isPointInRectangle(sourceRectangle, targetPoint)\n    );\n};\n","import { PlaitElement } from '@plait/core';\n\nconst map = new Map<string, any>();\n\nexport const memorizeLatest = <T extends PlaitElement = PlaitElement>(\n    memorizedKey: string,\n    propertyKey: keyof T,\n    propertyValue: T[keyof T]\n) => {\n    let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};\n    obj[propertyKey] = propertyValue;\n    map.set(memorizedKey, obj);\n};\n\nexport const getMemorizedLatest = <T extends PlaitElement = PlaitElement>(memorizedKey: string): T => {\n    return map.get(memorizedKey);\n};\n","import { PlaitBoard, setDragging } from '@plait/core';\nimport { RotateRef } from '../types';\n\nexport const IS_ROTATING = new WeakMap<PlaitBoard, RotateRef>();\n\nexport const isRotating = (board: PlaitBoard) => {\n    return !!IS_ROTATING.get(board);\n};\n\nexport const addRotating = (board: PlaitBoard, rotateRef: RotateRef) => {\n    PlaitBoard.getBoardContainer(board).classList.add(`draw-elements-rotating`);\n    IS_ROTATING.set(board, rotateRef);\n    setDragging(board, true);\n};\n\nexport const removeRotating = (board: PlaitBoard) => {\n    PlaitBoard.getBoardContainer(board).classList.remove(`draw-elements-rotating`);\n    IS_ROTATING.delete(board);\n    setDragging(board, false);\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { DEFAULT_FILL, TRANSPARENT } from '../constants';\n\nexport const getElementArea = (board: PlaitBoard, element: PlaitElement) => {\n    const rectangle = board.getRectangle(element);\n    if (rectangle) {\n        return rectangle.width * rectangle.height;\n    }\n    return 0;\n};\n\nexport const sortElementsByArea = (board: PlaitBoard, elements: PlaitElement[], direction: 'desc' | 'asc' = 'asc') => {\n    return elements.sort((a, b) => {\n        const areaA = getElementArea(board, a);\n        const areaB = getElementArea(board, b);\n        return direction === 'asc' ? areaA - areaB : areaB - areaA;\n    });\n};\n\nexport const isFilled = (fill: string) => {\n    return fill && fill !== DEFAULT_FILL && fill !== TRANSPARENT;\n};\n","export type AnimateOption = { stop: () => void; start: () => void };\n\nexport function animate(tween: (t: number) => void, duration: number, ease: Function, callback: Function): AnimateOption {\n    const start = getTimestamp();\n    let stopAnimation = false;\n\n    function tick(now: number) {\n        if (stopAnimation) {\n            return;\n        }\n        const elapsed = now - start;\n        const t = Math.min(elapsed / duration, 1);\n        tween(ease(t));\n        if (t < 1) {\n            requestAnimationFrame(tick);\n        } else if (callback) {\n            callback();\n        }\n    }\n\n    requestAnimationFrame(tick);\n    return {\n        stop: () => (stopAnimation = true),\n        start: () => {\n            stopAnimation = false;\n            requestAnimationFrame(tick);\n        }\n    };\n}\n\nexport function getTimestamp() {\n    if (window.performance && window.performance.now) {\n        return window.performance.now();\n    } else {\n        return Date.now();\n    }\n}\n\nexport function linear(t: number) {\n    return t;\n}\n","import { StrokeStyle } from '../constants';\n\nexport const getStrokeLineDash = (strokeStyle: StrokeStyle, strokeWidth: number) => {\n    switch (strokeStyle) {\n        case StrokeStyle.dashed:\n            return [8, 8 + strokeWidth];\n        case StrokeStyle.dotted:\n            return [2, 4 + strokeWidth];\n        default:\n            return undefined;\n    }\n};\n","import { idCreator, PlaitBoard, PlaitElement, Point, Transforms } from '@plait/core';\n\nexport const buildClipboardData = (\n    board: PlaitBoard,\n    elements: PlaitElement[],\n    startPoint: Point,\n    elementBuilder?: (element: PlaitElement) => PlaitElement | undefined\n) => {\n    return elements.map(element => {\n        const newElement = elementBuilder && elementBuilder(element);\n        if (newElement) {\n            return newElement;\n        }\n        if (element.points) {\n            const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);\n            return { ...element, points };\n        }\n        return element;\n    });\n};\n\nexport const insertClipboardData = (\n    board: PlaitBoard,\n    elements: PlaitElement[],\n    startPoint: Point,\n    elementHandler?: (element: PlaitElement, idsMap: Record<string, string>) => void\n) => {\n    const idsMap: Record<string, string> = {};\n    elements.forEach(element => {\n        idsMap[element.id] = idCreator();\n    });\n    elements.forEach(element => {\n        element.id = idsMap[element.id];\n        elementHandler && elementHandler(element, idsMap);\n        if (element.points) {\n            element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]) as [Point, Point];\n        }\n        Transforms.insertNode(board, element, [board.children.length]);\n    });\n    Transforms.addSelectionWithTemporaryElements(board, elements);\n};\n","import { Direction, Point } from '@plait/core';\n\n// Based on right\n// Right -> Left:\n// 1. End point -> starting point/start point -> end point\n// 2. Add -> Subtract\n\n// Horizontal -> Vertical:\n// 1. Starting point/end point -> vertical axis\n// 2. Addition and subtraction -> vertical axis\n\n// Bottom -> Top:\n// 1. End point -> starting point/end point -> starting point\n// 2. Add -> Subtract\nexport const moveXOfPoint = (point: Point, distance: number, direction: Direction = Direction.right): Point => {\n    if (direction === Direction.left) {\n        return [point[0] - distance, point[1]];\n    }\n    if (direction === Direction.bottom) {\n        return [point[0], point[1] + distance];\n    }\n    if (direction === Direction.top) {\n        return [point[0], point[1] - distance];\n    }\n    return [point[0] + distance, point[1]];\n};\n\nexport const moveYOfPoint = (point: Point, distance: number, direction: Direction = Direction.right): Point => {\n    if (direction === Direction.bottom) {\n        return [point[0] + distance, point[1]];\n    }\n    if (direction === Direction.top) {\n        return [point[0] + distance, point[1]];\n    }\n    return [point[0], point[1] + distance];\n};\n\nexport const getDirectionByIndex = (index: number) => {\n    if (index === 0) {\n        return Direction.top;\n    }\n    if (index === 1) {\n        return Direction.right;\n    }\n    if (index === 2) {\n        return Direction.bottom;\n    }\n    if (index === 3) {\n        return Direction.left;\n    }\n    return Direction.right;\n};\n\nexport const getXDistanceBetweenPoint = (point1: Point, point2: Point, isHorizontal: boolean) => {\n    if (isHorizontal) {\n        return Math.abs(point1[0] - point2[0]);\n    } else {\n        return Math.abs(point1[1] - point2[1]);\n    }\n};\n","import {\n    ACTIVE_STROKE_WIDTH,\n    PlaitBoard,\n    PlaitElement,\n    RectangleClient,\n    createForeignObject,\n    createG,\n    getSelectedElements,\n    isSelectionMoving,\n    setAngleForG,\n    updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorExtraData, GeneratorOptions } from '../generators/generator';\nimport { CommonImageItem, hasResizeHandle, getElementOfFocusedImage } from '../utils';\nimport { ActiveGenerator, createActiveGenerator } from '../generators/active.generator';\nimport { PlaitImageBoard, ImageComponentRef, ImageProps } from './with-image';\n\nexport const FOREIGN_OBJECT_IMAGE_CLASS_NAME = 'foreign-object-image';\n\nexport interface ImageGeneratorOptions<T> {\n    getRectangle: (element: T) => RectangleClient;\n    getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n    T,\n    GeneratorExtraData,\n    ImageGeneratorOptions<T> & GeneratorOptions\n> {\n    static key = 'image-generator';\n\n    foreignObject!: SVGForeignObjectElement;\n\n    imageComponentRef!: ImageComponentRef;\n\n    activeGenerator!: ActiveGenerator;\n\n    isFocus = false;\n\n    element!: T;\n\n    constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n        super(board, options);\n    }\n\n    canDraw(element: T): boolean {\n        return !!this.options.getImageItem(element);\n    }\n\n    draw(element: T): SVGGElement {\n        this.element = element;\n        const g = createG();\n        const foreignRectangle = this.options.getRectangle(element);\n        this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n        this.foreignObject.classList.add(FOREIGN_OBJECT_IMAGE_CLASS_NAME);\n        g.append(this.foreignObject);\n        const props: ImageProps = {\n            board: this.board,\n            imageItem: this.options.getImageItem(element),\n            element,\n            getRectangle: () => {\n                return this.options.getRectangle(element);\n            }\n        };\n        this.imageComponentRef = (this.board as unknown as PlaitImageBoard).renderImage(this.foreignObject, props);\n\n        this.activeGenerator = createActiveGenerator(this.board, {\n            getStrokeWidth: () => {\n                const selectedElements = getSelectedElements(this.board);\n                if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n                    return ACTIVE_STROKE_WIDTH;\n                } else {\n                    return ACTIVE_STROKE_WIDTH;\n                }\n            },\n            getStrokeOpacity: () => {\n                const selectedElements = getSelectedElements(this.board);\n                if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n                    return 1;\n                } else {\n                    return 0.5;\n                }\n            },\n            getRectangle: () => {\n                return this.options.getRectangle(this.element);\n            },\n            hasResizeHandle: () => {\n                const isSelectedImageElement = hasResizeHandle(this.board, this.element);\n                const isSelectedImage = !!getElementOfFocusedImage(this.board);\n                return isSelectedImage || isSelectedImageElement;\n            }\n        });\n        return g;\n    }\n\n    updateImage(nodeG: SVGGElement, previous: T, current: T) {\n        this.element = current;\n        if (previous !== current && this.imageComponentRef) {\n            const props = {\n                imageItem: this.options.getImageItem(current),\n                element: current,\n                getRectangle: () => {\n                    return this.options.getRectangle(current);\n                }\n            };\n            this.imageComponentRef.update(props);\n        }\n        const currentForeignObject = this.options.getRectangle(current);\n        updateForeignObject(\n            this.g!,\n            currentForeignObject.width,\n            currentForeignObject.height,\n            currentForeignObject.x,\n            currentForeignObject.y\n        );\n        if (currentForeignObject && current.angle !== undefined) {\n            setAngleForG(this.g!, RectangleClient.getCenterPoint(currentForeignObject), current.angle);\n        }\n        const activeG = PlaitBoard.getActiveHost(this.board);\n        this.activeGenerator.processDrawing(current, activeG, { selected: this.isFocus });\n    }\n\n    setFocus(element: PlaitElement, isFocus: boolean) {\n        this.isFocus = isFocus;\n        const activeG = PlaitBoard.getActiveHost(this.board);\n        this.activeGenerator.processDrawing(element, activeG, { selected: isFocus });\n        const props: Partial<ImageProps> = {\n            isFocus\n        };\n        this.imageComponentRef.update(props);\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.imageComponentRef?.destroy();\n        this.activeGenerator?.destroy();\n    }\n}\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\nimport { memorizeLatest } from '../utils';\n\nexport interface SetOptions<T extends PlaitElement = PlaitElement> {\n    callback?: (element: T, path: Path) => void;\n    getMemorizeKey?: (element: T) => string;\n    match?: (element: T) => boolean;\n}\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, properties: Partial<T>, options?: SetOptions<T>) => {\n    const selectedElements = getSelectedElements(board) as T[];\n    selectedElements.forEach(element => {\n        if (options?.match && !options?.match(element)) return;\n        const path = PlaitBoard.findPath(board, element);\n        const memorizeKey = options?.getMemorizeKey ? options?.getMemorizeKey(element) : '';\n        for (let key in properties) {\n            memorizeKey && memorizeLatest(memorizeKey, key, properties[key]);\n        }\n        if (options?.callback) {\n            options.callback(element, path);\n        } else {\n            Transforms.setNode(board, properties, path);\n        }\n    });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string, options: SetOptions) => {\n    setProperty(board, { strokeStyle }, options);\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string | null, options: SetOptions) => {\n    setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string | null, options: SetOptions) => {\n    setProperty(board, { strokeColor }, options);\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number, options: SetOptions) => {\n    setProperty(board, { strokeWidth }, options);\n};\n\nexport const PropertyTransforms = {\n    setFillColor,\n    setStrokeStyle,\n    setProperty,\n    setStrokeWidth,\n    setStrokeColor\n};\n","import {\n    MERGING,\n    PlaitBoard,\n    PlaitElement,\n    PlaitGroupElement,\n    Point,\n    RectangleClient,\n    Transforms,\n    getElementsInGroup,\n    getHighestSelectedElements,\n    getRectangleByElements\n} from '@plait/core';\n\nexport const alignTop = (board: PlaitBoard) => {\n    function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n        return [0, outerRectangle.y - rectangle.y] as Point;\n    }\n    setOffset(board, getOffset);\n};\n\nexport const alignBottom = (board: PlaitBoard) => {\n    function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n        return [0, outerRectangle.y + outerRectangle.height - (rectangle.y + rectangle.height)] as Point;\n    }\n    setOffset(board, getOffset);\n};\n\nexport const alignLeft = (board: PlaitBoard) => {\n    function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n        return [outerRectangle.x - rectangle.x, 0] as Point;\n    }\n    setOffset(board, getOffset);\n};\n\nexport const alignHorizontalCenter = (board: PlaitBoard) => {\n    function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n        const outerCenter = outerRectangle.x + outerRectangle.width / 2;\n        const elementCenter = rectangle.x + rectangle.width / 2;\n        return [outerCenter - elementCenter, 0] as Point;\n    }\n    setOffset(board, getOffset);\n};\n\nexport const alignVerticalCenter = (board: PlaitBoard) => {\n    function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n        const outerCenter = outerRectangle.y + outerRectangle.height / 2;\n        const elementCenter = rectangle.y + rectangle.height / 2;\n        return [0, outerCenter - elementCenter] as Point;\n    }\n    setOffset(board, getOffset);\n};\n\nexport const alignRight = (board: PlaitBoard) => {\n    function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n        return [outerRectangle.x + outerRectangle.width - (rectangle.x + rectangle.width), 0] as Point;\n    }\n    setOffset(board, getOffset);\n};\n\nfunction setOffset(board: PlaitBoard, getOffset: (outerRectangle: RectangleClient, rectangle: RectangleClient) => Point) {\n    const elements = getHighestSelectedElements(board);\n    const outerRectangle = getRectangleByElements(board, elements, false);\n    elements.forEach(element => {\n        if (!element.points && !PlaitGroupElement.isGroup(element)) return;\n        const rectangle = board.getRectangle(element)!;\n        const offset = getOffset(outerRectangle, rectangle);\n        let updateElements: PlaitElement[] = [];\n        if (PlaitGroupElement.isGroup(element)) {\n            updateElements = getElementsInGroup(board, element, true, false);\n        } else if (element.points) {\n            updateElements = [element];\n        }\n        updateElements.forEach(item => {\n            const newPoints = item.points!.map(p => [p[0] + offset[0], p[1] + offset[1]]) as Point[];\n            const path = PlaitBoard.findPath(board, item);\n            Transforms.setNode(\n                board,\n                {\n                    points: newPoints\n                },\n                path\n            );\n        });\n        MERGING.set(board, true);\n    });\n    MERGING.set(board, false);\n}\n\nexport const distributeHorizontal = (board: PlaitBoard) => {\n    distribute(board, true);\n};\n\nexport const distributeVertical = (board: PlaitBoard) => {\n    distribute(board, false);\n};\n\nconst distribute = (board: PlaitBoard, isHorizontal: boolean) => {\n    const axis = isHorizontal ? 'x' : 'y';\n    const side = isHorizontal ? 'width' : 'height';\n    const highestSelectedElements = getHighestSelectedElements(board);\n    const refs = highestSelectedElements.map(element => {\n        return { element, rectangle: board.getRectangle(element)! };\n    });\n    const outerRectangle = getRectangleByElements(board, highestSelectedElements, false);\n    const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];\n    const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];\n    const minIndex = refs.findIndex(ref => ref === minRectangleRef);\n    const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);\n    let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);\n    const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);\n    const offset =\n        (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);\n    distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);\n    let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;\n    for (let i = 0; i < distributeRefs.length; i++) {\n        const rectangle = distributeRefs[i].rectangle;\n        const moveOffset = [0, 0];\n        const moveAxis = isHorizontal ? 0 : 1;\n        moveOffset[moveAxis] = position - rectangle[axis];\n        const path = PlaitBoard.findPath(board, distributeRefs[i].element);\n        const newPoints = distributeRefs[i].element.points!.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]) as Point[];\n        Transforms.setNode(\n            board,\n            {\n                points: newPoints\n            },\n            path\n        );\n        MERGING.set(board, true);\n        position = position + rectangle[side] + offset;\n    }\n    MERGING.set(board, false);\n};\n\nexport interface AlignTransform {\n    alignTop: (board: PlaitBoard) => void;\n    alignHorizontalCenter: (board: PlaitBoard) => void;\n    alignBottom: (board: PlaitBoard) => void;\n    alignLeft: (board: PlaitBoard) => void;\n    alignVerticalCenter: (board: PlaitBoard) => void;\n    alignRight: (board: PlaitBoard) => void;\n    distributeHorizontal: (board: PlaitBoard) => void;\n    distributeVertical: (board: PlaitBoard) => void;\n}\n\nexport const AlignTransform: AlignTransform = {\n    alignTop,\n    alignHorizontalCenter,\n    alignBottom,\n    alignLeft,\n    alignVerticalCenter,\n    alignRight,\n    distributeHorizontal,\n    distributeVertical\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n    let start = points[0];\n    let end = points[1];\n    if (shift) {\n        const width = Math.abs(start[0] - end[0]);\n        const height = Math.abs(start[1] - end[1]);\n        const edge = Math.max(height, width);\n        end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n    }\n\n    const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n    let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n    return [leftTopPoint, rightBottomPoint];\n};\n","import {\n    MERGING,\n    PRESS_AND_MOVE_BUFFER,\n    PlaitBoard,\n    PlaitPointerType,\n    Point,\n    distanceBetweenPointAndPoint,\n    isMainPointer,\n    throttleRAF,\n    toViewBoxPoint,\n    toHostPoint,\n    isDragging\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { addResizing, isResizing, removeResizing } from '../utils/resize';\nimport { PlaitElementOrArray, ResizeOptions, ResizeHitTestRef, ResizeRef, WithResizeOptions } from '../types/resize';\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n    return (\n        !PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection)\n    );\n};\n\nexport const withResize = <T extends PlaitElementOrArray = PlaitElementOrArray, K = ResizeHandle, P = ResizeOptions>(\n    board: PlaitBoard,\n    options: WithResizeOptions<T, K, P>\n) => {\n    const { pointerDown, pointerMove, globalPointerUp, touchStart } = board;\n    let resizeHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n    let resizeRef: ResizeRef<T, K, P> | null = null;\n    let startPoint: Point | null = null;\n    let hoverHitTestRef: ResizeHitTestRef<T, K, P> | null = null;\n\n    board.touchStart = (event: TouchEvent) => {\n        if (resizeRef) {\n            event.preventDefault();\n            return;\n        }\n        touchStart(event);\n    };\n\n    board.pointerDown = (event: PointerEvent) => {\n        if (!options.canResize() || !generalCanResize(board, event) || !isMainPointer(event)) {\n            pointerDown(event);\n            return;\n        }\n        const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        resizeHitTestRef = options.hitTest(point);\n        if (resizeHitTestRef) {\n            if (resizeHitTestRef.cursorClass) {\n                PlaitBoard.getBoardContainer(board).classList.add(`${resizeHitTestRef.cursorClass}`);\n            }\n            startPoint = [event.x, event.y];\n            const path = Array.isArray(resizeHitTestRef.element)\n                ? resizeHitTestRef.element.map(el => PlaitBoard.findPath(board, el))\n                : PlaitBoard.findPath(board, resizeHitTestRef.element);\n            resizeRef = {\n                path,\n                element: resizeHitTestRef.element,\n                handle: resizeHitTestRef.handle,\n                handleIndex: resizeHitTestRef.handleIndex,\n                rectangle: resizeHitTestRef.rectangle,\n                options: resizeHitTestRef.options\n            };\n            return;\n        }\n        pointerDown(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        if (!options.canResize() || !generalCanResize(board, event)) {\n            clearHoverHitTestRef();\n            pointerMove(event);\n            return;\n        }\n        if (startPoint && resizeHitTestRef && !isResizing(board)) {\n            const endPoint = [event.x, event.y];\n            const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n            if (distance > PRESS_AND_MOVE_BUFFER) {\n                addResizing(board, resizeRef!, options.key);\n                MERGING.set(board, true);\n                options.beforeResize && options.beforeResize(resizeRef!);\n            }\n        }\n        if (!isResizing(board) && !isDragging(board)) {\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            throttleRAF(board, options.key + '-common-resize-hit-test', () => {\n                const hitTestRef = options.hitTest(point);\n                if (hitTestRef) {\n                    if (hoverHitTestRef && hitTestRef.cursorClass !== hoverHitTestRef.cursorClass) {\n                        PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n                    }\n                    hoverHitTestRef = hitTestRef;\n                    if (hoverHitTestRef.cursorClass) {\n                        PlaitBoard.getBoardContainer(board).classList.add(`${hoverHitTestRef.cursorClass}`);\n                    }\n                } else {\n                    clearHoverHitTestRef();\n                }\n            });\n        } else {\n            if (startPoint && isResizing(board)) {\n                event.preventDefault();\n                const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n                throttleRAF(board, 'with-common-resize', () => {\n                    if (startPoint && resizeRef) {\n                        options.onResize(resizeRef, {\n                            startPoint: toViewBoxPoint(board, toHostPoint(board, startPoint[0], startPoint[1])),\n                            endPoint,\n                            isShift: !!event.shiftKey\n                        });\n                    }\n                });\n                return;\n            }\n        }\n        pointerMove(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        globalPointerUp(event);\n        if (isResizing(board) || resizeHitTestRef) {\n            options.afterResize && options.afterResize(resizeRef!);\n            removeResizing(board, options.key);\n            startPoint = null;\n            resizeHitTestRef = null;\n            resizeRef = null;\n            MERGING.set(board, false);\n        }\n    };\n\n    const clearHoverHitTestRef = () => {\n        if (hoverHitTestRef) {\n            if (hoverHitTestRef.cursorClass) {\n                PlaitBoard.getBoardContainer(board).classList.remove(`${hoverHitTestRef.cursorClass}`);\n            }\n            hoverHitTestRef = null;\n        }\n    };\n\n    return board;\n};\n","import { ACTIVE_STROKE_WIDTH, PlaitGroup, RectangleClient, drawRectangle, getRectangleByGroup } from '@plait/core';\nimport { Options } from 'roughjs/bin/core';\nimport { Generator } from './generator';\n\nexport class GroupGenerator extends Generator<PlaitGroup> {\n    static key = 'GroupGenerator';\n\n    canDraw(element: PlaitGroup): boolean {\n        return true;\n    }\n\n    draw(element: PlaitGroup, partialSelected: boolean) {\n        const options: Options = {\n            stroke: '',\n            strokeWidth: ACTIVE_STROKE_WIDTH,\n            strokeLineDash: [5]\n        };\n        let rectangle: RectangleClient = { x: 0, y: 0, width: 0, height: 0 };\n        if (partialSelected) {\n            options.stroke = '#999';\n            rectangle = getRectangleByGroup(this.board, element, true);\n        }\n        return drawRectangle(this.board, rectangle, options);\n    }\n}\n","import { PlaitElementRef } from '@plait/core';\nimport { Generator } from '../generators';\nimport { TextManage } from '../text';\n\nexport class PlaitCommonElementRef implements PlaitElementRef {\n    private textManages: TextManage[] = [];\n\n    private generatorMap = new Map<string, Generator | Object>();\n\n    addGenerator<T extends Object = Generator>(key: string, generator: T) {\n        this.generatorMap.set(key, generator);\n    }\n\n    getGenerator<T extends Object = Generator>(key: string) {\n        return this.generatorMap.get(key) as T;\n    }\n\n    initializeTextManage(textManage: TextManage | TextManage[]) {\n        this.textManages = [];\n        if (Array.isArray(textManage)) {\n            this.textManages.push(...textManage);\n        } else {\n            this.textManages.push(textManage);\n        }\n    }\n\n    getTextManages() {\n        return this.textManages;\n    }\n\n    updateActiveSection = () => {};\n\n    destroyTextManage() {\n        this.textManages.forEach((textManage) => {\n            textManage.destroy();\n        });\n        this.textManages = [];\n    }\n}\n","import { ElementFlavour, PlaitBoard, PlaitElement } from '@plait/core';\nimport { PlaitCommonElementRef } from './element-ref';\n\nexport class CommonElementFlavour<\n    T extends PlaitElement = PlaitElement,\n    K extends PlaitBoard = PlaitBoard,\n    R extends PlaitCommonElementRef = PlaitCommonElementRef\n> extends ElementFlavour<T, K, R> {\n    constructor(elementRef = new PlaitCommonElementRef()) {\n        super(elementRef as R);\n    }\n}\n","import { OnContextChanged, PlaitBoard, PlaitGroup, PlaitPluginElementContext, getRectangleByGroup, isSelectionMoving } from '@plait/core';\nimport { GroupGenerator } from '../generators/group.generator';\nimport { ActiveGenerator, createActiveGenerator } from '../generators';\nimport { CommonElementFlavour } from './element-flavour';\n\nexport class GroupComponent extends CommonElementFlavour<PlaitGroup, PlaitBoard> implements OnContextChanged<PlaitGroup, PlaitBoard> {\n    constructor() {\n        super();\n    }\n\n    activeGenerator!: ActiveGenerator<PlaitGroup>;\n\n    groupGenerator!: GroupGenerator;\n\n    initializeGenerator() {\n        this.activeGenerator = createActiveGenerator<PlaitGroup>(this.board, {\n            getRectangle: (element: PlaitGroup) => {\n                return getRectangleByGroup(this.board, element);\n            },\n            getStrokeWidth: () => 0,\n            getStrokeOpacity: () => 0,\n            hasResizeHandle: () => {\n                return !isSelectionMoving(this.board);\n            }\n        });\n        this.groupGenerator = new GroupGenerator(this.board);\n        this.getRef().addGenerator(GroupGenerator.key, this.groupGenerator);\n    }\n\n    initialize(): void {\n        super.initialize();\n        this.initializeGenerator();\n    }\n\n    onContextChanged(\n        value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>,\n        previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>\n    ) {}\n}\n","import {\n    PlaitBoard,\n    PlaitPluginElementContext,\n    PlaitGroupElement,\n    toViewBoxPoint,\n    toHostPoint,\n    getHitElementsBySelection,\n    createGroupRectangleG,\n    ClipboardData,\n    getHighestSelectedGroups,\n    getSelectedIsolatedElements,\n    PlaitElement,\n    PlaitGroup,\n    getSelectedGroups,\n    Selection,\n    Point,\n    Transforms,\n    idCreator,\n    getGroupByElement,\n    getSelectedIsolatedElementsCanAddToGroup,\n    getElementsInGroup,\n    getRectangleByGroup,\n    PlaitPointerType,\n    WritableClipboardOperationType,\n    throttleRAF,\n    isMovingElements,\n    getAllGroups,\n    isSelectedElementOrGroup\n} from '@plait/core';\nimport { GroupComponent } from '../core/group.component';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { isResizing } from '../utils';\nimport { PlaitCommonElementRef } from '../core';\nimport { GroupGenerator } from '../generators/group.generator';\n\nexport function withGroup(board: PlaitBoard) {\n    let groupRectangleG: SVGGElement | null;\n    let removeGroups: PlaitGroup[] | null;\n\n    const {\n        drawElement,\n        pointerMove,\n        globalPointerUp,\n        insertFragment,\n        getDeletedFragment,\n        deleteFragment,\n        getRelatedFragment,\n        getRectangle,\n        keyDown,\n        onChange\n    } = board;\n\n    board.drawElement = (context: PlaitPluginElementContext) => {\n        if (PlaitGroupElement.isGroup(context.element)) {\n            return GroupComponent;\n        }\n        return drawElement(context);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        throttleRAF(board, 'with-group', () => {\n            groupRectangleG?.remove();\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            let selection: Selection = { anchor: point, focus: point };\n            if (board.selection && !Selection.isCollapsed(board.selection)) {\n                selection = board.selection;\n            }\n            const pointer = PlaitBoard.getPointer(board);\n            if (!isResizing(board) && !isMovingElements(board) && pointer === PlaitPointerType.selection) {\n                const hitElements = getHitElementsBySelection(board, selection);\n                if (hitElements.length) {\n                    groupRectangleG = createGroupRectangleG(board, hitElements);\n                    groupRectangleG && PlaitBoard.getElementTopHost(board).append(groupRectangleG);\n                }\n            }\n        });\n        pointerMove(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        groupRectangleG?.remove();\n        groupRectangleG = null;\n        globalPointerUp(event);\n    };\n\n    board.getRelatedFragment = (elements: PlaitElement[], originData?: PlaitElement[]) => {\n        const groups = getSelectedGroups(board, elements, originData);\n        return getRelatedFragment([...elements, ...groups], originData);\n    };\n\n    board.insertFragment = (clipboardData: ClipboardData | null, targetPoint: Point, operationType?: WritableClipboardOperationType) => {\n        let elements: PlaitElement[] = [];\n        if (clipboardData?.elements?.length) {\n            elements = new Array(clipboardData?.elements?.length);\n            const groups = getHighestSelectedGroups(board, clipboardData?.elements);\n            const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);\n            selectedIsolatedElements.forEach((item) => {\n                const index = clipboardData.elements!.map((element) => element.id).indexOf(item.id);\n                elements.splice(index, 1, !item.groupId ? item : updateGroupId(item, undefined));\n            });\n            if (groups.length) {\n                groups.forEach((item) => {\n                    const index = clipboardData.elements!.map((element) => element.id).indexOf(item.id);\n                    const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };\n                    elements.splice(index, 1, newGroup);\n                    updateElementsGroupId(item, clipboardData.elements!, newGroup.id, elements);\n                });\n            }\n            clipboardData.elements = elements;\n        }\n        insertFragment(clipboardData, targetPoint, operationType);\n        const groupElements = elements?.filter((value) => PlaitGroupElement.isGroup(value)) as PlaitElement[];\n        groupElements.forEach((element) => {\n            Transforms.insertNode(board, element, [board.children.length]);\n        });\n    };\n\n    board.getDeletedFragment = (data: PlaitElement[]) => {\n        removeGroups = getRemoveGroups(board);\n        if (removeGroups && removeGroups.length) {\n            data.push(...removeGroups);\n        }\n        return getDeletedFragment(data);\n    };\n\n    board.deleteFragment = (elements: PlaitElement[]) => {\n        if (removeGroups?.length) {\n            updateSiblingElementGroupId(board, removeGroups);\n        }\n        deleteFragment(elements);\n        removeGroups = null;\n    };\n\n    board.getRectangle = (element: PlaitElement) => {\n        if (PlaitGroupElement.isGroup(element)) {\n            return getRectangleByGroup(board, element, true);\n        }\n        return getRectangle(element);\n    };\n\n    board.keyDown = (event: KeyboardEvent) => {\n        if (!PlaitBoard.isReadonly(board)) {\n            if (isKeyHotkey('mod+g', event)) {\n                event.preventDefault();\n                Transforms.addGroup(board);\n                return;\n            }\n            if (isKeyHotkey('mod+shift+g', event)) {\n                event.preventDefault();\n                Transforms.removeGroup(board);\n                return;\n            }\n        }\n        keyDown(event);\n    };\n\n    board.onChange = () => {\n        onChange();\n        const groups = getAllGroups(board);\n        groups.forEach((group) => {\n            const elementsInGroup = getElementsInGroup(board, group, false, true);\n            const isPartialSelectGroup =\n                elementsInGroup.some((item) => isSelectedElementOrGroup(board, item)) &&\n                !elementsInGroup.every((item) => isSelectedElementOrGroup(board, item));\n            const ref = PlaitElement.getElementRef<PlaitCommonElementRef>(group);\n            const g = PlaitElement.getElementG(group);\n            ref.getGenerator(GroupGenerator.key).processDrawing(group, g, isPartialSelectGroup);\n        });\n    };\n\n    return board;\n}\n\nconst updateGroupId = (element: PlaitElement, groupId?: string) => {\n    return {\n        ...element,\n        groupId: groupId\n    };\n};\n\nconst updateElementsGroupId = (group: PlaitGroup, clipboardDataElements: PlaitElement[], newGroupId: string, elements: PlaitElement[]) => {\n    const elementsInGroup = clipboardDataElements.filter((item) => item.groupId === group.id);\n    if (elementsInGroup.length) {\n        elementsInGroup.forEach((item) => {\n            const index = clipboardDataElements.map((item) => item.id).indexOf(item.id);\n            if (PlaitGroupElement.isGroup(item)) {\n                const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };\n                elements.splice(index, 1, newGroup);\n                updateElementsGroupId(item, clipboardDataElements, newGroup.id, elements);\n            } else {\n                elements.splice(index, 1, updateGroupId(item, newGroupId));\n            }\n        });\n    }\n    return elements;\n};\n\nconst getRemoveGroups = (board: PlaitBoard) => {\n    const selectedGroups = board.getRelatedFragment([]) as PlaitGroup[];\n    const removeGroups = [...selectedGroups];\n    const highestSelectedGroups = getHighestSelectedGroups(board);\n    const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n    const removeNodes = [...highestSelectedGroups, ...selectedIsolatedElements];\n    removeNodes.forEach((item) => {\n        const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n        if (hitElementGroups.length) {\n            const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n            const siblingElements = elementsInGroup.filter(\n                (element) => ![...removeNodes, ...removeGroups].map((item) => item.id).includes(element.id)\n            );\n            if (siblingElements.length === 1 || siblingElements.length === 0) {\n                if (!removeGroups.includes(hitElementGroups[0])) {\n                    removeGroups.push(hitElementGroups[0]);\n                }\n                if (siblingElements.length === 1) {\n                    if (hitElementGroups.length > 1) {\n                        const aboveGroup = findAboveGroupWithAnotherElement(board, hitElementGroups.slice(1, hitElementGroups.length), [\n                            ...removeNodes,\n                            ...removeGroups\n                        ]);\n                        let index = hitElementGroups.length;\n                        if (aboveGroup) {\n                            index = hitElementGroups.findIndex((item) => item.id === aboveGroup.id);\n                        }\n                        [...hitElementGroups.slice(1, index)].forEach((item) => {\n                            if (!removeGroups.includes(item)) {\n                                removeGroups.push(item);\n                            }\n                        });\n                    }\n                }\n            }\n        }\n    });\n    return removeGroups;\n};\n\nconst findAboveGroupWithAnotherElement = (board: PlaitBoard, groups: PlaitGroup[], excludeNodes: PlaitElement[]) => {\n    let group: PlaitGroup | null = null;\n    for (let i = 0; i < groups.length; i++) {\n        const elementsInGroup = getElementsInGroup(board, groups[i], false, true);\n        const siblingElements = elementsInGroup.filter((element) => !excludeNodes.map((item) => item.id).includes(element.id));\n        if (siblingElements.length > 0) {\n            group = groups[i];\n            break;\n        }\n    }\n    return group;\n};\n\nconst updateSiblingElementGroupId = (board: PlaitBoard, removeGroups: PlaitGroup[]) => {\n    const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);\n    const highestSelectedGroups = getHighestSelectedGroups(board);\n    const isolatedElementsInGroup = selectedIsolatedElements.filter((item) => item.groupId);\n    [...highestSelectedGroups, ...isolatedElementsInGroup].forEach((item) => {\n        const hitElementGroups = getGroupByElement(board, item, true) as PlaitGroup[];\n        if (hitElementGroups.length) {\n            const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);\n            const siblingElements = elementsInGroup.filter((element) => element.id !== item.id);\n            if (siblingElements.length === 1) {\n                const removeGroupIds = removeGroups.map((item) => item.id);\n                if (hitElementGroups.some((group) => removeGroupIds.includes(group.id))) {\n                    const group = hitElementGroups.find((group) => !removeGroupIds.includes(group.id));\n                    const path = PlaitBoard.findPath(board, siblingElements[0]);\n                    Transforms.setNode(board, { groupId: group?.id || undefined }, path);\n                }\n            }\n        }\n    });\n};\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport abstract class ImageBaseComponent {\n    _isFocus!: boolean;\n\n    element!: PlaitElement;\n\n    board!: PlaitBoard;\n\n    set isFocus(value: boolean) {\n        this._isFocus = value;\n    }\n\n    get isFocus() {\n        return this._isFocus;\n    }\n\n    abstract nativeElement(): HTMLElement;\n}\n","import { Node } from 'slate';\nimport { CustomText, ElementSize, ParagraphElement } from './types';\nimport { getLineHeightByFontSize } from '../utils/text';\nimport { ceilToDecimal, PlaitBoard } from '@plait/core';\n\nconst BOARD_TO_CANVAS_MAP = new WeakMap<PlaitBoard, HTMLCanvasElement>();\n\nconst ELEMENT_TO_SIZE_MAP = new WeakMap<ParagraphElement, ElementSize>();\n\nconst getCanvasForBoard = (board: PlaitBoard | null): HTMLCanvasElement => {\n    if (board) {\n        if (!BOARD_TO_CANVAS_MAP.get(board)) {\n            const canvas = document.createElement('canvas');\n            BOARD_TO_CANVAS_MAP.set(board, canvas);\n            return canvas;\n        }\n        return BOARD_TO_CANVAS_MAP.get(board) as HTMLCanvasElement;\n    }\n    return document.createElement('canvas');\n};\n\nexport const getElementSize = (\n    board: PlaitBoard | null,\n    element: ParagraphElement,\n    options: {\n        fontSize: number;\n        fontFamily: string;\n    },\n    containerMaxWidth: number = 10000\n) => {\n    let size = ELEMENT_TO_SIZE_MAP.get(element);\n    if (size) {\n        return size;\n    }\n    size = measureElement(board, element, options, containerMaxWidth);\n    ELEMENT_TO_SIZE_MAP.set(element, size);\n    return size;\n};\n\nexport const updateElementSizeCache = (board: PlaitBoard | null, element: ParagraphElement, size: ElementSize) => {\n    ELEMENT_TO_SIZE_MAP.set(element, size);\n};\n\nexport const clearElementSizeCache = (board: PlaitBoard | null, element: ParagraphElement) => {\n    ELEMENT_TO_SIZE_MAP.delete(element);\n};\n\nexport function measureElement(\n    board: PlaitBoard | null,\n    element: ParagraphElement,\n    options: {\n        fontSize: number;\n        fontFamily: string;\n    },\n    containerMaxWidth: number = 10000\n) {\n    containerMaxWidth = ceilToDecimal(containerMaxWidth, 0);\n    const canvas = getCanvasForBoard(board);\n    const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n    const textEntries = Node.texts(element);\n    const lines: CustomText[][] = [[]];\n    for (const textEntry of textEntries) {\n        const [text] = textEntry;\n        const textString = Node.string(text);\n        const textArray = textString.split('\\n');\n        textArray.forEach((segmentTextString: string, index: number) => {\n            const segmentText = { ...text, text: segmentTextString };\n            if (index === 0) {\n                const currentLine = lines[lines.length - 1];\n                currentLine.push(segmentText);\n            } else {\n                const newLine: CustomText[] = [];\n                newLine.push(segmentText);\n                lines.push(newLine);\n            }\n        });\n    }\n\n    let finalWidth = 0;\n    let finalHeight = 0;\n    lines.forEach((lineTexts: CustomText[], index: number) => {\n        let lineWidth = 0;\n        let lineHeight = 0;\n        let maxLineHeight = getLineHeightByFontSize(options.fontSize);\n        let hasBreakLine = false;\n        const lineText: string[][] = [[]];\n        lineTexts.forEach((text: CustomText, index: number) => {\n            const isLast = index === lineTexts.length - 1;\n            if (text['font-size'] && (isLast || text.text !== '')) {\n                const lineHeight = getLineHeightByFontSize(parseFloat(text['font-size']));\n                if (lineHeight > maxLineHeight) {\n                    maxLineHeight = lineHeight;\n                }\n            }\n            const font = getFont(text, { fontFamily: options.fontFamily, fontSize: options.fontSize });\n            ctx.font = font;\n            const textString = text.text;\n            for (let i = 0; i < textString.length; i++) {\n                const char = textString[i];\n                const width = ctx.measureText(char).width;\n                if (lineWidth + width > containerMaxWidth) {\n                    finalWidth = Math.max(finalWidth, lineWidth);\n                    lineWidth = width;\n                    lineHeight += maxLineHeight;\n                    hasBreakLine = true;\n                    lineText.push([]);\n                    lineText[lineText.length - 1].push(char);\n                } else {\n                    lineText[lineText.length - 1].push(char);\n                    lineWidth += width;\n                }\n            }\n        });\n        lineHeight += maxLineHeight;\n        finalHeight += lineHeight;\n        if (!hasBreakLine) {\n            finalWidth = Math.max(finalWidth, lineWidth);\n        }\n    });\n    return { width: finalWidth, height: finalHeight };\n}\n\nconst getFont = (\n    text: CustomText,\n    options: {\n        fontSize: number;\n        fontFamily: string;\n    }\n) => {\n    return `${text.italic ? 'italic ' : ''} ${text.bold ? 'bold ' : ''} ${text['font-size'] || options.fontSize}px ${options.fontFamily} `;\n};\n","import {\n    IS_TEXT_EDITABLE,\n    MERGING,\n    PlaitBoard,\n    Point,\n    RectangleClient,\n    createForeignObject,\n    createG,\n    isDebug,\n    isTouchDevice,\n    setAngleForG,\n    toHostPoint,\n    toViewBoxPoint,\n    updateForeignObject,\n    updateForeignObjectWidth\n} from '@plait/core';\nimport { Editor, Element, NodeEntry, Range, Text, Node, Transforms, Operation } from 'slate';\nimport { PlaitTextBoard, TextPlugin } from './with-text';\nimport { clearElementSizeCache, measureElement, updateElementSizeCache } from './text-measure';\nimport { TextChangeData, TextComponentRef, TextProps } from './with-text';\nimport { ParagraphElement } from './types';\n\nexport interface TextManageChangeData {\n    newText?: Element;\n    operations?: Operation[];\n    width: number;\n    height: number;\n}\n\nexport class TextManage {\n    isEditing = false;\n\n    editor!: Editor;\n\n    g!: SVGGElement;\n\n    foreignObject!: SVGForeignObjectElement;\n\n    textComponentRef!: TextComponentRef;\n\n    exitCallback?: () => void;\n\n    constructor(\n        private board: PlaitBoard,\n        private options: {\n            getRectangle: () => RectangleClient;\n            onChange?: (data: TextManageChangeData) => void;\n            getRenderRectangle?: () => RectangleClient;\n            getMaxWidth?: () => number;\n            textPlugins?: TextPlugin[];\n        }\n    ) {\n        if (!this.options.getMaxWidth) {\n            this.options.getMaxWidth = () => 999;\n        }\n    }\n\n    draw(text: Element) {\n        const _rectangle = this.options.getRectangle();\n        this.g = createG();\n        this.foreignObject = createForeignObject(_rectangle.x, _rectangle.y, _rectangle.width, _rectangle.height);\n        this.g.append(this.foreignObject);\n        this.g.classList.add('text');\n        const props: TextProps = {\n            board: this.board,\n            text,\n            textPlugins: this.options.textPlugins,\n            onChange: (data: TextChangeData) => {\n                if (data.operations.some((op) => !Operation.isSelectionOperation(op))) {\n                    const { width: newWidth, height: newHeight } = this.getSize();\n                    this.options.onChange && this.options.onChange({ ...data, width: newWidth, height: newHeight });\n                    MERGING.set(this.board, true);\n                }\n            },\n            afterInit: (editor: Editor) => {\n                this.editor = editor;\n            },\n            onComposition: (event: CompositionEvent) => {\n                if (event.type === 'compositionend') {\n                    clearElementSizeCache(this.board, this.editor.children[0] as ParagraphElement);\n                    return;\n                }\n                const fakeRoot = buildCompositionData(this.editor, event.data);\n                if (fakeRoot) {\n                    const sizeData = this.getSize(fakeRoot.children[0]);\n                    updateElementSizeCache(this.board, this.editor.children[0] as ParagraphElement, sizeData);\n                    // invoking onChange asap to avoid blinking on typing chinese\n                    this.options.onChange && this.options.onChange({ ...sizeData });\n                    MERGING.set(this.board, true);\n                }\n            }\n        };\n        this.textComponentRef = (this.board as unknown as PlaitTextBoard).renderText(this.foreignObject, props);\n    }\n\n    updateRectangleWidth(width: number) {\n        updateForeignObjectWidth(this.g, width);\n    }\n\n    updateAngle(centerPoint: Point, angle: number = 0) {\n        setAngleForG(this.g, centerPoint, angle);\n    }\n\n    updateRectangle(rectangle?: RectangleClient) {\n        const { x, y, width, height } = rectangle || this.options.getRectangle();\n        updateForeignObject(this.g, width, height, x, y);\n    }\n\n    updateText(newText: Element) {\n        const props = {\n            text: newText\n        };\n        this.textComponentRef.update(props);\n    }\n\n    edit(callback?: () => void, exitEdit?: (event: Event) => boolean) {\n        this.isEditing = true;\n        IS_TEXT_EDITABLE.set(this.board, true);\n        if (isDebug()) {\n            console.log('text-manage', 'set text editing to ', true);\n        }\n        const props: Partial<TextProps> = {\n            readonly: false\n        };\n        this.textComponentRef.update(props);\n\n        if (isTouchDevice()) {\n            setTimeout(() => {\n                const end = Editor.end(this.editor, [0]);\n                Transforms.select(this.editor, end);\n            }, 0);\n        } else {\n            Transforms.select(this.editor, [0]);\n        }\n\n        const pointerDownHandler = (event: PointerEvent) => {\n            const point = toViewBoxPoint(this.board, toHostPoint(this.board, event.x, event.y));\n            const textRec = this.options.getRenderRectangle ? this.options.getRenderRectangle() : this.options.getRectangle();\n            const clickInText = RectangleClient.isHit(RectangleClient.getRectangleByPoints([point, point]), textRec);\n            const isAttached = (event.target as HTMLElement).closest('.plait-board-attached');\n            if (!clickInText && !isAttached) {\n                // handle composition input state, like: Chinese IME Composition Input\n                setTimeout(() => {\n                    exitCallback();\n                }, 0);\n            }\n        };\n        const keyDownHandler = (event: KeyboardEvent) => {\n            if (event.isComposing) {\n                return;\n            }\n            if (event.key === 'Escape' || event.key === 'Tab' || (exitEdit ? exitEdit(event) : false)) {\n                event.preventDefault();\n                event.stopPropagation();\n                exitCallback();\n                return;\n            }\n        };\n        const exitCallback = () => {\n            if (this.isEditing) {\n                this.updateRectangle();\n                document.removeEventListener('pointerdown', pointerDownHandler);\n                document.removeEventListener('keydown', keyDownHandler);\n                IS_TEXT_EDITABLE.set(this.board, false);\n                if (isDebug()) {\n                    console.log('text-manage', 'set IS_TEXT_EDITABLE to ', false);\n                }\n                MERGING.set(this.board, false);\n                callback && callback();\n                const props = {\n                    readonly: true\n                };\n                this.textComponentRef.update(props);\n                this.isEditing = false;\n                this.exitCallback = undefined;\n            }\n        };\n        document.addEventListener('pointerdown', pointerDownHandler);\n        document.addEventListener('keydown', keyDownHandler);\n        this.exitCallback = exitCallback;\n        return exitCallback;\n    }\n\n    getSize = (element?: Element, maxWidth?: number) => {\n        const computedStyle = window.getComputedStyle(this.foreignObject.children[0]);\n        const fontFamily = computedStyle.fontFamily;\n        const fontSize = parseFloat(computedStyle.fontSize);\n        const target = element || (this.editor.children[0] as Element);\n        return measureElement(\n            this.board,\n            target,\n            {\n                fontSize: fontSize,\n                fontFamily\n            },\n            maxWidth || this.options.getMaxWidth!()\n        );\n    };\n\n    getText = () => {\n        return this.editor.children[0];\n    };\n\n    destroy() {\n        this.g?.remove();\n        this.textComponentRef?.destroy();\n        this.exitCallback && this.exitCallback();\n    }\n}\n\nexport const buildCompositionData = (editor: Editor, data: string) => {\n    if (editor.selection && Range.isCollapsed(editor.selection)) {\n        const [textNode, textPath] = Editor.node(editor, editor.selection) as NodeEntry<Text>;\n        const offset = editor.selection.anchor.offset;\n        const clonedElement = JSON.parse(JSON.stringify(editor.children[0]));\n        const root = { children: [clonedElement] };\n        const newTextString = textNode.text.slice(0, offset + 1) + data + textNode.text.slice(offset + 1);\n        const clonedTextNode = Node.get(root, textPath) as Text;\n        clonedTextNode.text = newTextString;\n        return root;\n    }\n    return null;\n};\n","import { PlaitBoard, WithPluginOptions } from '@plait/core';\nimport { Editor, Operation, Element as SlateElement } from 'slate';\nimport { RenderComponentRef } from '../core/render-component';\n\nexport interface PlaitTextBoard {\n    renderText: (container: Element | DocumentFragment, props: TextProps) => TextComponentRef;\n}\n\nexport const withText = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n    const newBoard = board as T & PlaitTextBoard;\n\n    newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n        throw new Error('No implementation for renderText method.');\n    };\n    return newBoard;\n};\n\nexport type TextComponentRef = RenderComponentRef<TextProps>;\n\nexport interface TextProps {\n    board: PlaitBoard;\n    text: SlateElement;\n    textPlugins?: TextPlugin[];\n    readonly?: boolean;\n    onChange?: (data: TextChangeData) => void;\n    afterInit?: (data: Editor) => void;\n    onComposition?: (data: CompositionEvent) => void;\n}\n\nexport type TextChangeData = { newText: SlateElement; operations: Operation[] };\n\nexport interface WithTextPluginOptions extends WithPluginOptions {\n    textPlugins?: TextPlugin[];\n}\n\nexport type TextPlugin = (editor: Editor) => Editor;\n","import { BaseElement } from 'slate';\n\nexport type ElementSize =  {\n    width: number;\n    height: number;\n}\n\nexport enum Alignment {\n    left = 'left',\n    center = 'center',\n    right = 'right'\n}\n\nexport type CustomText = {\n    bold?: boolean;\n    italic?: boolean;\n    strike?: boolean;\n    code?: boolean;\n    text: string;\n    underlined?: boolean;\n    color?: string;\n    [`font-size`]?: string;\n};\n\nexport interface LinkElement extends BaseElement {\n    type: 'link';\n    url: string;\n}\n\nexport interface ParagraphElement extends BaseElement {\n    align?: Alignment;\n}\n\nexport type CustomElement = ParagraphElement | LinkElement;\n","import { PlaitBoard, PlaitElement, RectangleClient } from '@plait/core';\nimport { RenderComponentRef } from '../core/render-component';\nimport { CommonImageItem } from '../utils/image';\n\nexport interface PlaitImageBoard {\n    renderImage: (container: Element | DocumentFragment, props: ImageProps) => ImageComponentRef;\n}\n\nexport const withImage = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n    const newBoard = board as T & PlaitImageBoard;\n\n    newBoard.renderImage = (container: Element | DocumentFragment, props: ImageProps) => {\n        throw new Error('No implementation for renderImage method.');\n    };\n    return newBoard;\n};\n\nexport type ImageComponentRef = RenderComponentRef<ImageProps>;\n\nexport interface ImageProps {\n    board: PlaitBoard;\n    imageItem: CommonImageItem;\n    element: PlaitElement;\n    isFocus?: boolean;\n    getRectangle: () => RectangleClient;\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './image/image-base.component';\nexport * from './core';\nexport * from './algorithms';\nexport * from './text';\nexport * from './image';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Transforms"],"mappings":";;;;AAAO,MAAM,IAAI,GAAG;AACb,MAAM,aAAa,GAAG;AACtB,MAAM,sBAAsB,GAAG;AAC/B,MAAM,iBAAiB,GAAG;AAC1B,MAAM,oBAAoB,GAAG;AAC7B,MAAM,WAAW,GAAG;AACpB,MAAM,iCAAiC,GAAG;AAC1C,MAAM,kBAAkB,GAAG;AAC3B,MAAM,mBAAmB,GAAG;AAC5B,MAAM,YAAY,GAAG;;ICThB;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAFW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAId,MAAM,4BAA4B,GAAG;AAErC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;AAErD,MAAM,mBAAmB,GAAG;;ICRvB;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,GAAQ;AACR,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO;AACP,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,GAAQ;AACR,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO;AACP,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,GAAQ;AACR,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO;AACP,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,GAAQ;AACR,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO;AACX,CAAC,EATW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;;ICAZ;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;MCkBD,SAAS,CAAA;IAU3B,WAAA,CAAsB,KAAQ,EAAE,OAAW,EAAA;QAArB,IAAA,CAAA,KAAK,GAAL,KAAK;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IAC1B;AAEA,IAAA,cAAc,CAAC,OAAU,EAAE,OAAoB,EAAE,IAAQ,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAClC,IAAI,CAAC,EAAE;AACH,gBAAA,IAAI,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;gBACzB;qBAAO;AACH,oBAAA,IAAI,IAAI,CAAC,CAAC,EAAE;AACR,wBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;oBACnB;AACA,oBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACvB,wBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACtB;yBAAO;AACH,wBAAA,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC1B;gBACJ;AACA,gBAAA,IAAI,CAAC,CAAC,GAAG,CAAC;gBACV,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;gBAClD,IAAI,CAAC,SAAS,EAAE;oBACZ;gBACJ;gBACA,IAAI,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC;AAC3D,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;oBACtB,MAAM,eAAe,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;AACpF,oBAAA,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,eAAe,CAAC;gBACjE;AACA,gBAAA,IAAI,KAAK;AACT,gBAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACpC,oBAAA,KAAK,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5E;qBAAO;AACH,oBAAA,KAAK,GAAG,OAAO,CAAC,KAAK;gBACzB;gBACA,IAAI,KAAK,EAAE;AACP,oBAAA,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC;gBACvC;YACJ;iBAAO;gBACH,IAAI,CAAC,OAAO,EAAE;YAClB;AACA,YAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC3B;QACJ;aAAO;YACH,IAAI,CAAC,OAAO,EAAE;QAClB;IACJ;IAYA,OAAO,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,CAAC,EAAE;AACR,YAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,CAAC,GAAG,SAAS;QACtB;IACJ;AACH;AAMK,SAAU,YAAY,CAAC,KAAU,EAAA;AACnC,IAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,QAAA,OAAO,IAAI;IACf;AACA,IAAA,OAAO,KAAK;AAChB;;MCrGa,UAAU,GAAG,CAAC,KAAiB,EAAE,WAAkB,KAAI;AAChE,IAAA,MAAM,OAAO,GAAY,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE;AAClG,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,CAAC;AACvG,IAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC;AAC/C,IAAA,OAAO,OAAO;AAClB;AAEM,SAAU,qBAAqB,CAAC,KAAiB,EAAE,KAAY,EAAA;AACjE,IAAA,OAAO,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE;AAC5E,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,WAAW,EAAE,CAAC;QACd,IAAI,EAAE,CAAA,EAAG,aAAa,CAAA,CAAE;AACxB,QAAA,SAAS,EAAE;AACd,KAAA,CAAC;AACN;AAEM,SAAU,iBAAiB,CAAC,KAAiB,EAAE,KAAY,EAAA;AAC7D,IAAA,OAAO,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE;QAC5E,MAAM,EAAE,CAAA,EAAG,aAAa,CAAA,CAAE;AAC1B,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,IAAI,EAAE,CAAA,OAAA,CAAS;AACf,QAAA,SAAS,EAAE;AACd,KAAA,CAAC;AACN;;ACvBA,MAAM,kBAAkB,GAAG,CAAC;MAEf,gBAAgB,GAAG,CAAC,KAAiB,EAAE,SAA0B,KAAI;AAC9E,IAAA,MAAM,OAAO,GAAY,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;AACtF,IAAA,MAAM,iBAAiB,GAAG;AACtB,QAAA,SAAS,CAAC,CAAC,GAAG,iCAAiC,GAAG,kBAAkB,GAAG,CAAC;QACxE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,iCAAiC,GAAG,kBAAkB,GAAG;KAC7F;IACD,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC;AACxC,IAAA,MAAM,OAAO,GAAG,OAAO,EAAE;AACzB,IAAA,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAChB,CAAA,EAAA,EAAK,iBAAiB,CAAC,CAAC,CAAC,GAAG,kBAAkB,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,kBAAkB,CAAA,CAAA,EAAI,kBAAkB,CAAA,WAAA,EAChH,iBAAiB,CAAC,CAAC,CACvB,CAAA,CAAA,EAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,kBAAkB,EAAE,EAC/C,OAAO,CACV;AACD,IAAA,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CACpB;AACI,QAAA,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC;AACrE,QAAA,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC;AACrE,QAAA,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,kBAAkB;KACzE,EACD,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CACtC;AACD,IAAA,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC;AAChC,IAAA,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3B,IAAA,OAAO,OAAO;AAClB;;MCLa,qBAAqB,GAAG,CACjC,KAAiB,EACjB,OAAkD,KAClD;AACA,IAAA,OAAO,IAAI,eAAe,CAAI,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACtE;AAEM,MAAO,eAAuD,SAAQ,SAI3E,CAAA;aACU,IAAA,CAAA,GAAG,GAAG,kBAAH,CAAsB;IAIhC,WAAA,CAAmB,KAAiB,EAAS,OAAkC,EAAA;QAC3E,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;QADb,IAAA,CAAA,KAAK,GAAL,KAAK;QAAqB,IAAA,CAAA,OAAO,GAAP,OAAO;QAFpD,IAAA,CAAA,eAAe,GAAG,KAAK;IAIvB;IAEA,OAAO,CAAC,OAAU,EAAE,IAA8B,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI;QACf;aAAO;AACH,YAAA,OAAO,KAAK;QAChB;IACJ;IAEA,IAAI,CAAC,OAAU,EAAE,IAA8B,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,OAAO,EAAE;AACzB,QAAA,MAAM,eAAe,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAE7G,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;QACtE,MAAM,wBAAwB,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;QAEhF,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,wBAAwB,EAAE;AAChE,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,WAAW,EAAE;AAChB,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AACvB,QAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC;AACrD,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE;AAC5D,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;YAE3B,eAAe,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACzE,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;AACpD,gBAAA,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;AACjC,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAChC;AACA,QAAA,OAAO,OAAO;IAClB;;;ACjEG,MAAM,sBAAsB,GAAG,CAAC,KAAa,KAAI;IACpD,OAAO,CAAA,EAAG,KAAK,CAAA,CAAkB;AACrC;AAEO,MAAM,sBAAsB,GAAG,CAAC,YAA0B,KAAI;AACjE,IAAA,OAAO,MAAM,CAAC,YAAY,CAAC;AAC/B;MAEa,uBAAuB,GAAG,CAAC,KAAiB,EAAE,KAAa,KAAI;IACxE,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK;AAC1F,IAAA,IAAI,0BAA0B,GAAG,WAAW,GAAG,CAAC;AAChD,IAAA,IAAI,0BAA0B,IAAI,CAAC,EAAE;AACjC,QAAA,0BAA0B,GAAG,0BAA0B,GAAG,CAAC;IAC/D;AACA,IAAA,OAAO,YAAY,CAAC,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,GAAG,0BAA0B,GAAG,CAAC,GAAG,0BAA0B;AAC3H;AAEA,MAAM,2BAA2B,GAAG,CAAC,KAAa,KAAI;IAClD,QAAQ,KAAK;AACT,QAAA,KAAK,CAAC;AACN,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,IAAI;AACjC,QAAA,KAAK,CAAC;AACN,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,IAAI;AACjC,QAAA,KAAK,CAAC;AACN,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,EAAE;AAC/B,QAAA,KAAK,CAAC;AACN,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,EAAE;AAC/B,QAAA;AACI,YAAA,OAAO,IAAI;;AAEvB,CAAC;MAEY,kCAAkC,GAAG,CAAC,MAAyB,EAAE,KAAa,KAAI;IAC3F,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5C,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACZ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9C,QAAA,MAAM,GAAG,cAAc,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,cAAc,CAAC,MAAM,CAAsB;IACxF;AACA,IAAA,OAAO,MAAM;AACjB;MAEa,4BAA4B,GAAG,CAAC,SAA0B,EAAE,QAAgB,KAAI;IACzF,MAAM,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAa,KAAI;QAC/C,OAAO;AACH,YAAA,SAAS,EAAE;gBACP,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;gBAC3B,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;AAC3B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,MAAM,EAAE;AACX,aAAA;AACD,YAAA,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAiB;AACrD,YAAA,WAAW,EAAE,2BAA2B,CAAC,KAAK;SACjD;AACL,IAAA,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC;AACjE,IAAA,IAAI,CAAC,IAAI,CACL,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,KAAI;QACnC,OAAO;YACH,SAAS;AACT,YAAA,MAAM,EAAE,sBAAsB,CAAC,KAAK,GAAG,CAAC,CAAiB;AACzD,YAAA,WAAW,EAAE,2BAA2B,CAAC,KAAK,GAAG,CAAC;SACrD;IACL,CAAC,CAAC,CACL;AACD,IAAA,OAAO,IAAI;AACf;MAEa,2BAA2B,GAAG,CAAC,SAA0B,EAAE,KAAa,KAAI;AACrF,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;QACZ,MAAM,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC;AAC1D,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC;IACzB;SAAO;QACH,MAAM,gBAAgB,GAAG,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC;AACvE,QAAA,OAAO,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC;IACtC;AACJ;AAEA,MAAM,uBAAuB,GAAG,CAAC,YAAqB,EAAE,MAAc,KAAuB;IACzF,MAAM,MAAM,GAAG,EAAE;AACjB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,SAAS,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClG,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;AAC7B,QAAA,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,QAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1B;AACA,IAAA,OAAO,MAAM;AACjB,CAAC;AAEM,MAAM,WAAW,GAAG,IAAI,OAAO;AAE/B,MAAM,UAAU,GAAG,CAAC,KAAiB,KAAI;IAC5C,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC;MAEa,qBAAqB,GAAG,CACjC,KAAiB,EACjB,KAA8C,KAC9C;AACA,IAAA,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;AAC9D;AAEO,MAAM,WAAW,GAAG,CAAsC,KAAiB,EAAE,SAA6B,EAAE,GAAW,KAAI;AAC9H,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,SAAA,CAAW,CAAC;AACpE,IAAA,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;AACjC,IAAA,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;AAC5B;MAEa,cAAc,GAAG,CAAC,KAAiB,EAAE,GAAW,KAAI;AAC7D,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,EAAG,GAAG,CAAA,SAAA,CAAW,CAAC;AACvE,IAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB,IAAA,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7B;MAEa,YAAY,GAAG,CAAC,KAAiB,EAAE,MAAoB,KAAI;AACpE,IAAA,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC;AAC5C,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACZ,QAAA,OAAO,IAAI;IACf;SAAO;AACH,QAAA,OAAO,KAAK;IAChB;AACJ;MAEa,cAAc,GAAG,CAAC,KAAiB,EAAE,MAAoB,KAAI;AACtE,IAAA,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AACvC;AAEA;AACO,MAAM,sBAAsB,GAAG,CAClC,eAAgC,EAChC,gBAAiC,EACjC,0BAAiC,EACjC,2BAAkC,EAClC,KAAa,KACG;AAChB,IAAA,MAAM,2BAA2B,GAAG,YAAY,CAAC,CAAC,2BAA2B,CAAC,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrH,MAAM,yBAAyB,GAAG,YAAY,CAC1C,CAAC,eAAe,CAAC,cAAc,CAAC,gBAAgB,CAAU,CAAC,EAC3D,0BAA0B,EAC1B,KAAK,CACR,CAAC,CAAC,CAAC;IAEJ,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,gBAAgB,CAAC;IACjE,MAAM,0BAA0B,GAAG,eAAe,CAAC,cAAc,CAAC,eAAe,CAAC;AAElF,IAAA,MAAM,yBAAyB,GAAG,YAAY,CAAC,CAAC,yBAAyB,CAAC,EAAE,2BAA2B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnH,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC;IACpF,OAAO,YAAY,CAAC,aAAa,EAAE,yBAAyB,EAAE,CAAC,KAAK,CAAmB;AAC3F;AAEO,MAAM,mBAAmB,GAAG,CAAC,OAAqB,KAAI;AACzD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAiB;AACxC,IAAA,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AACtC;MAEa,eAAe,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;AACxE,IAAA,IAAI,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAClE,QAAA,OAAO,KAAK;IAChB;AACA,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC;AACnD,IAAA,OAAO,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC;AAC3G;;ACpLM,SAAU,4BAA4B,CAAC,MAAa,EAAE,MAAa,EAAA;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACpC,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;;AAE7D,IAAA,IAAI,QAAQ,KAAK,CAAC,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC;IACjF;;AAEA,IAAA,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ;AAC/B,IAAA,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ;AAE/B,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACzB;SAEgB,yBAAyB,CAAC,KAAY,EAAE,MAAc,EAAE,SAAiB,EAAA;AACrF,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACjD,IAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS,CAAC;AACzG;AAEM,SAAU,kCAAkC,CAAC,KAAY,EAAE,UAAkB,EAAE,kBAA0B,EAAE,YAAqB,EAAA;IAClI,IAAI,YAAY,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAU;IACpH;SAAO;QACH,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAU;IACpH;AACJ;AAEM,SAAU,kBAAkB,CAAC,MAAc,EAAA;AAC7C,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACnB,MAAM,QAAQ,GAAG,CAAC;AAClB,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,IAAA,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/B;AAEM,SAAU,YAAY,CAAC,MAAc,EAAE,KAAa,EAAA;IACtD,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,MAAM;IACjB;AACA,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,IAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1D,IAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1D,IAAA,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/B;;SC5CgB,gBAAgB,CAAC,KAAY,EAAE,UAAiB,EAAE,QAAe,EAAA;IAC7E,MAAM,eAAe,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,aAAa,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,aAAa,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1G,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC,GAAG,GAAG;AAC1E;AAEO,MAAM,uCAAuC,GAAG,CAAC,KAAY,EAAE,UAAiB,EAAE,QAAe,KAAI;IACxG,MAAM,MAAM,GAAY,EAAE;AAC1B,IAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,IAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,4BAA4B,CAAC,UAAU,EAAE,QAAQ,CAAC;IACrE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;QAChD,MAAM,aAAa,GAAG,kCAAkC,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAU;AACzH,QAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B;SAAO,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;QACvD,MAAM,aAAa,GAAG,kCAAkC,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAU;AAC1H,QAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B;AACA,IAAA,OAAO,MAAM;AACjB;;ACpBM,SAAU,kBAAkB,CAAC,MAAe,EAAE,KAAa,EAAA;AAC7D,IAAA,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC;AACnD,IAAA,MAAM,cAAc,GAAG,WAAW,GAAG,KAAK;IAE1C,IAAI,mBAAmB,GAAG,CAAC;AAC3B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC1B,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,MAAM,aAAa,GAAG,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAElE,QAAA,IAAI,mBAAmB,GAAG,aAAa,IAAI,cAAc,EAAE;AACvD,YAAA,MAAM,iBAAiB,GAAG,cAAc,GAAG,mBAAmB;AAC9D,YAAA,MAAM,cAAc,GAAG,iBAAiB,GAAG,aAAa;YAExD,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,cAAc;YAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,cAAc;AAC/C,YAAA,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;QAC7B;QAEA,mBAAmB,IAAI,aAAa;IACxC;IAEA,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC;AAEM,SAAU,uBAAuB,CAAC,MAAe,EAAA;IACnD,IAAI,MAAM,GAAG,CAAC;AACd,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC1B,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC1D;AACA,IAAA,OAAO,MAAM;AACjB;AAEM,SAAU,eAAe,CAAC,MAAe,EAAE,KAAY,EAAA;AACzD,IAAA,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACnD,IAAI,QAAQ,GAAG,CAAC;AAChB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,IAAI,SAAS,EAAE;AACX,YAAA,QAAQ,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,OAAO,QAAQ,GAAG,WAAW;QACjC;aAAO;AACH,YAAA,QAAQ,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5G;IACJ;AACA,IAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;AAChD;AAEO,MAAM,qBAAqB,GAAG,CAAC,MAAe,KAAI;IACrD,MAAM,QAAQ,GAAY,EAAE;AAC5B,IAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,IAAG;YAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;AAC5C,QAAA,CAAC,CAAC;QACF,IAAI,KAAK,KAAK,CAAC,CAAC;AAAE,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,QAAQ;AACnB;AAEM,SAAU,wBAAwB,CAAC,MAAe,EAAA;AACpD,IAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAAE,QAAA,OAAO,MAAM;IACrC,IAAI,gBAAgB,GAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAA,MAAM,MAAM,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACtH,IAAI,MAAM,EAAE;AACR,YAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC;IACJ;AACA,IAAA,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,IAAA,OAAO,gBAAgB;AAC3B;AAEO,MAAM,cAAc,GAAG,CAAC,MAAa,EAAE,MAAa,EAAE,cAAsB,KAAW;IAC1F,MAAM,QAAQ,GAAG,4BAA4B,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;IACnE,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ;IAC5D,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ;AAC5D,IAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,CAAC;AAC/E;;ACpFA,MAAM,sBAAsB,GAAG;AAC3B,IAAA,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,IAAA,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,IAAA,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAChC,IAAA,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CACnC;AAEK,SAAU,oBAAoB,CAAC,SAAoB,EAAA;IACrD,QAAQ,SAAS;QACb,KAAK,SAAS,CAAC,IAAI;YACf,OAAO,SAAS,CAAC,KAAK;QAC1B,KAAK,SAAS,CAAC,KAAK;YAChB,OAAO,SAAS,CAAC,IAAI;QACzB,KAAK,SAAS,CAAC,GAAG;YACd,OAAO,SAAS,CAAC,MAAM;QAC3B,KAAK,SAAS,CAAC,MAAM;YACjB,OAAO,SAAS,CAAC,GAAG;;AAEhC;AAEM,SAAU,8BAA8B,CAAC,KAAuB,EAAA;AAClE,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,IAAI;IACzB;AACA,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,KAAK;IAC1B;AACA,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,GAAG;IACxB;AACA,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,MAAM;IAC3B;AACA,IAAA,OAAO,SAAS;AACpB;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,MAAc,EAAA;AAC/C,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI;IACf;AACA,IAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG;IACnD;AACA,IAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI;IACnD;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;QAC9C,OAAO,SAAS,CAAC,KAAK;IAC1B;SAAO,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;QAC1D,OAAO,SAAS,CAAC,MAAM;IAC3B;SAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;QAC5D,OAAO,SAAS,CAAC,GAAG;IACxB;SAAO;QACH,OAAO,SAAS,CAAC,IAAI;IACzB;AACJ;AAEM,SAAU,gCAAgC,CAAC,MAAa,EAAE,MAAa,EAAA;IACzE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACxB,OAAO,SAAS,CAAC,GAAG;QACxB;aAAO;YACH,OAAO,SAAS,CAAC,MAAM;QAC3B;IACJ;IACA,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACxB,OAAO,SAAS,CAAC,IAAI;QACzB;aAAO;YACH,OAAO,SAAS,CAAC,KAAK;QAC1B;IACJ;AACA,IAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAC9C;AAEM,SAAU,kBAAkB,CAAC,SAAoB,EAAA;AACnD,IAAA,OAAO,sBAAsB,CAAC,SAAS,CAAC;AAC5C;AAEM,SAAU,sCAAsC,CAAC,kBAA0B,EAAA;IAC7E,MAAM,eAAe,GAAG,kBAAkB,KAAK,CAAC,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;AACzH,IAAA,OAAO,eAAkC;AAC7C;;AC7FA;AACA;AAKO,MAAM,SAAS,GAAG,CAAC,MAAa,EAAE,cAAyB,EAAE,MAAa,EAAE,cAAyB,EAAE,MAAc,KAAI;AAC5H,IAAA,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,cAAc,CAAC;AACjE,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC;IACpD,MAAM,YAAY,GAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,GAAG,MAAM,CAAC;IAC1H,MAAM,YAAY,GAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;IAChG,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC;AACpE,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG;AAC3C,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC;IAEhC,IAAI,MAAM,GAAY,EAAE;IACxB,IAAI,OAAO,EAAE,OAAO;AACpB,IAAA,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,aAAa,CAAC;AACnD,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC;AACpB,KAAA,CAAC;;AAEF,IAAA,IAAI,sBAAsB,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;QACrE,OAAO,GAAG,cAAc;QACxB,OAAO,GAAG,cAAc;;;;AAIxB,QAAA,MAAM,aAAa,GAAY;AAC3B,YAAA,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;SAC5B;;;;AAID,QAAA,MAAM,eAAe,GAAY;AAC7B,YAAA,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAC1B,YAAA,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO;SAC5B;AACD,QAAA,IAAI,sBAAsB,CAAC,WAAW,CAAC,KAAK,OAAO,EAAE;AACjD,YAAA,MAAM,GAAG,WAAW,KAAK,GAAG,GAAG,aAAa,GAAG,eAAe;QAClE;aAAO;AACH,YAAA,MAAM,GAAG,WAAW,KAAK,GAAG,GAAG,eAAe,GAAG,aAAa;QAClE;IACJ;SAAO;;AAEH,QAAA,MAAM,YAAY,GAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,QAAA,MAAM,YAAY,GAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;;AAElE,QAAA,IAAI,WAAW,KAAK,GAAG,EAAE;AACrB,YAAA,MAAM,GAAG,sBAAsB,CAAC,CAAC,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY;QAC/E;aAAO;AACH,YAAA,MAAM,GAAG,sBAAsB,CAAC,CAAC,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY;QAC/E;;AAGA,QAAA,IAAI,gBAAgB;AACpB,QAAA,IAAI,cAAc,KAAK,cAAc,EAAE;AACnC,YAAA,MAAM,mBAAmB,GAAG,WAAW,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;YACvD,MAAM,SAAS,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YACpG,MAAM,cAAc,GAAG,YAAY,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC,mBAAmB,CAAC;YAC5F,MAAM,cAAc,GAAG,YAAY,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC,mBAAmB,CAAC;YAC5F,gBAAgB;gBACZ,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,cAAc,MAAM,SAAS,IAAI,cAAc,CAAC,CAAC;qBAC9G,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,cAAc,MAAM,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC;YAEpH,IAAI,gBAAgB,EAAE;AAClB,gBAAA,MAAM,GAAG,WAAW,KAAK,GAAG,GAAG,YAAY,GAAG,YAAY;YAC9D;QACJ;IACJ;AACA,IAAA,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC;AAClE;AAEA,MAAM,YAAY,GAAG,CAAC,MAAa,EAAE,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,MAAa,KAAI;AACrF,IAAA,IAAI,cAAc,KAAK,SAAS,CAAC,IAAI,IAAI,cAAc,KAAK,SAAS,CAAC,KAAK,EAAE;AACzE,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACnE;AACA,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,EACnB,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EAMV,EAAA;AACG,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;AAC/C,IAAA,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO;AAEzE,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;AAC/C,IAAA,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO;IAEzE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAC/C;;AClGM,SAAU,YAAY,CAAC,CAAgB,EAAA;IACzC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO;IACpC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;AACjC,IAAA,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK;AACtD,IAAA,OAAO,UAAU,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AACtF;AAEO,MAAM,cAAc,GAAG,CAAC,KAAoB,KAAI;AACnD,IAAA,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;AACtC;AAEO,MAAM,WAAW,GAAG,CAAC,KAAoB,KAAI;AAChD,IAAA,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK;AAC9B;AAEO,MAAM,aAAa,GAAG,CAAC,KAAoB,KAAI;AAClD,IAAA,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO;AAChC;AAEO,MAAM,aAAa,GAAG,CAAC,KAAoB,KAAI;AAClD,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO;AACjC;AAEO,MAAM,QAAQ,GAAG,CAAC,KAAoB,KAAI;AAC7C,IAAA,OAAO,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC;AAC5E;;IC/BY;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,KAAa;AACb,IAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,SAAqB;AACzB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;AAK7B,MAAM,sBAAsB,GAA2C,IAAI,OAAO,EAAE;AAE7E,MAAM,eAAe,GAAG,CAAC,KAAiB,KAAI;AACjD,IAAA,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C;MAEa,eAAe,GAAG,CAAC,KAAiB,EAAE,IAAuB,KAAI;AAC1E,IAAA,sBAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;AAC3C;AAEO,MAAM,SAAS,GAAG,CAAC,KAAiB,KAAI;IAC3C,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC,GAAG;AAC3D;AAEO,MAAM,aAAa,GAAG,CAAC,KAAiB,KAAI;IAC/C,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC,OAAO;AAC/D;;ACTO,MAAM,cAAc,GAAG,CAAC,OAAqB,KAAI;IACpD,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAwB,OAAO,CAAC;AACtE,IAAA,OAAO,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE;AACtC;AAEO,MAAM,kBAAkB,GAAG,CAAC,OAAqB,KAAI;IACxD,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,EAAE;AACb,QAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC;IAC3C;AACA,IAAA,OAAO,UAAU;AACrB;AAEO,MAAM,uBAAuB,GAA6C,CAAC,OAAqB,KAAI;IACvG,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,IAAG;QACxC,OAAO,MAAM,CAAC,MAAM;AACxB,IAAA,CAAC,CAAC;AACN;AAEO,MAAM,kBAAkB,GAAwC,CAAC,OAAqB,KAAI;IAC7F,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE;AACb,QAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC;IAC3C;AACA,IAAA,OAAO,UAAU;AACrB;AAEO,MAAM,mBAAmB,GAAyC,CAAC,KAAiB,KAAI;AAC3F,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC;IACnD,IAAI,WAAW,GAAkB,IAAI;AACrC,IAAA,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAG;AAC/B,QAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC;QAChD,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,YAAA,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;QAC5B;AACJ,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,WAAW;AACtB;AAEO,MAAM,eAAe,GAAG,CAAC,QAAwB,KAAI;AACxD,IAAA,OAAO;SACF,GAAG,CAAC,IAAI,IAAG;AACR,QAAA,IAAI;AACA,YAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAC7C,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,gBAAA,OAAO;qBACF,GAAG,CAAC,MAAM,IAAG;oBACV,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACrC,oBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AACtF,gBAAA,CAAC;qBACA,IAAI,CAAC,GAAG,CAAC;YAClB;AACA,YAAA,OAAO,EAAE;QACb;QAAE,OAAO,KAAK,EAAE;AACZ,YAAA,OAAO,EAAE;QACb;AACJ,IAAA,CAAC;AACA,SAAA,MAAM,CAAC,IAAI,IAAI,IAAI;SACnB,IAAI,CAAC,GAAG,CAAC;AAClB;MAEa,cAAc,GAAoC,CAAC,KAAiB,EAAE,QAAyB,KAAI;IAC5G,MAAM,gBAAgB,GAAG,QAAQ,IAAI,mBAAmB,CAAC,KAAK,CAAC;AAC/D,IAAA,IAAI,gBAAgB,CAAC,MAAM,EAAE;QACzB,MAAM,WAAW,GAAiB,EAAE;AACpC,QAAA,gBAAgB,CAAC,OAAO,CAAC,IAAI,IAAG;YAC5B,WAAW,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC;QAC9E,IAAI,iBAAiB,EAAE;AACnB,YAAA,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACrC;AACA,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,IAAG;YAC1B,OAAO,IAAI,CAAC,MAAM;AACtB,QAAA,CAAC,CAAC;IACN;AACA,IAAA,OAAO,SAAS;AACpB;MAEa,oBAAoB,GAA0C,CAAC,KAAiB,EAAE,QAAyB,KAAI;IACxH,MAAM,gBAAgB,GAAG,QAAQ,IAAI,mBAAmB,CAAC,KAAK,CAAC;IAC/D,MAAM,WAAW,GAAiB,EAAE;AACpC,IAAA,gBAAgB,CAAC,OAAO,CAAC,IAAI,IAAG;QAC5B,WAAW,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7C,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC;IAC9E,IAAI,iBAAiB,EAAE;QACnB,OAAO,iBAAiB,CAAC,MAAM;IACnC;AACA,IAAA,OAAO,SAAS;AACpB;AAEO,MAAM,SAAS,GAAG,CAAC,IAAsB,EAAE,KAAiB,EAAE,UAAgC,KAAI;AACrG,IAAA,UAAU,GAAG,UAAU,IAAI,EAAE;AAC7B,IAAA,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI;IAC9G,IAAI,KAAK,EAAE;AACN,QAAA,SAA8B,CAAC,KAAK,GAAG,KAAK;IACjD;AACA,IAAA,OAAO,SAAS;AACpB;AAEO,MAAM,uBAAuB,GAAG,CAAC,QAAgB,KAAI;AACxD,IAAA,IAAI,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAA,OAAO,EAAE;IACb;IACA,OAAO,QAAQ,GAAG,GAAG;AACzB;;MChHa,WAAW,GAAG,CACvB,KAAiB,EACjB,iBAAyB,EACzB,MAA8C,EAC9C,mBAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAC1D;IACA,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACjD,IAAA,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;IACtC,MAAM,sBAAsB,GAAG,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChE,IAAA,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,CAAC;AACxD,IAAA,SAAS,CAAC,QAAQ,GAAG,CAAC,KAAY,KAAI;AAClC,QAAA,UAAU,CAAC,KAAK,EAAG,KAAK,CAAC,MAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC;AAChF,IAAA,CAAC;IACD,SAAS,CAAC,KAAK,EAAE;AACrB;AAEO,MAAM,UAAU,GAAG,OACtB,KAAiB,EACjB,SAAe,EACf,iBAAyB,EACzB,MAA8C,KAC9C;AACA,IAAA,IAAI,KAAK,GAAG,CAAC,EACT,MAAM,GAAG,CAAC;AACd,IAAA,MAAM,YAAY,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAwC,KAAI;AAC/F,QAAA,KAAK,GAAG,KAAK,CAAC,KAAK;AACnB,QAAA,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,IAAA,CAAC,CAAC;IAEF,IAAI,SAAS,GAAG,IAAI;IACpB,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC;IACjD,OAAO,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAElD,IAAA,SAAS,GAAG;QACR,GAAG;QACH,KAAK;QACL;KACH;IACD,MAAM,CAAC,SAAS,CAAC;AACrB;AAEA,SAAS,YAAY,CAAC,IAAU,EAAE,iBAAyB,EAAA;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;QACzB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QAErC,KAAK,CAAC,MAAM,GAAG,YAAA;YACX,MAAM,KAAK,GAAG,iBAAiB;AAC/B,YAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY;AAC7E,YAAA,OAAO,CACH,KAAK,CAAC,YAAY,GAAG,iBAAiB,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,CAC1H;AACL,QAAA,CAAC;AACL,IAAA,CAAC,CAAC;AACN;AAEA,MAAM,iCAAiC,GAAG,IAAI,OAAO,EAA4B;AAE1E,MAAM,wBAAwB,GAAG,CAAC,KAAiB,KAAI;AAC1D,IAAA,OAAO,iCAAiC,CAAC,GAAG,CAAC,KAAK,CAAC;AACvD;MAEa,wBAAwB,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;AACjF,IAAA,iCAAiC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AACzD;AAEO,MAAM,2BAA2B,GAAG,CAAC,KAAiB,KAAI;AAC7D,IAAA,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC;AACnD;;MC3Ea,aAAa,CAAA;AAGtB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;IAClB;AAEA,IAAA,OAAO,CAAC,IAA2C,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACjF;IAEA,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IAC5B;AACH;;MCbY,KAAK,CAAA;AAGd,IAAA,WAAA,CAAoB,KAAiB,EAAA;QAAjB,IAAA,CAAA,KAAK,GAAL,KAAK;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAwB;IACnD;IAEA,SAAS,CAAC,CAAQ,EAAE,CAAQ,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD;AAEA,IAAA,MAAM,CAAC,KAAY,EAAE,GAAU,EAAE,aAAoB,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAwB;AAC/C,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB;AAC9C,QAAA,SAAS,CAAC,GAAG,CAAC,SAAU,EAAE,CAAC,CAAC;AAC5B,QAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE;YAEhC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,CAAoB,CAAC;YACzC;AACA,YAAA,MAAM,YAAY,GAAG,OAAQ,CAAC,IAAI,CAAC,IAAI;YACvC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC1D;YACJ;YACA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBACtC,IAAI,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAQ,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3F,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAQ,CAAC,IAAI,CAAC;;;AAGrD,gBAAA,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC,IAAI,GAAG,aAAa;gBACtE,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzF,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzF,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AACV,oBAAA,OAAO,GAAG,OAAO,GAAG,CAAC;gBACzB;gBACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,EAAE;AACjF,oBAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AAC5B,oBAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;oBACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;oBAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAQ,CAAC,IAAI,CAAC;gBAC1C;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,QAAQ,CAAC,KAAY,EAAE,GAAU,EAAA;QAC7B,MAAM,MAAM,GAAG,EAAE;QACjB,IAAI,IAAI,GAAG,GAAG;QACd,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAK,CAAC;AACxC,YAAA,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,GAAG,OAAQ,CAAC,IAAI;QACxB;AACA,QAAA,OAAO,MAAM;IACjB;AACH;;MC9DY,SAAS,CAAA;AAGlB,IAAA,WAAA,CAAmB,IAAW,EAAA;QAAX,IAAA,CAAA,IAAI,GAAJ,IAAI;AAFhB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB;QAClC,IAAA,CAAA,aAAa,GAAgB,EAAE;IACL;AACpC;MAEY,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACY,IAAA,CAAA,KAAK,GAAgD,EAAE;IA8CnE;AA5CI,IAAA,GAAG,CAAC,CAAQ,EAAA;AACR,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EACnB,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;QAErB,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE;QACvB;AACA,QAAA,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;QACzC;IACJ;IACA,OAAO,CAAC,CAAQ,EAAE,CAAQ,EAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC;QAC5C;AAEA,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,GAAG,CAAC,CAAQ,EAAA;AACR,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EACnB,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;AACrB,QAAA,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACnD;AAEA,IAAA,GAAG,CAAC,CAAQ,EAAA;AACR,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EACnB,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;AAErB,QAAA,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7B;AAEA,QAAA,OAAO,IAAI;IACf;AACH;;AClDD,MAAM,cAAc,GAAG,oBAAoB,CAAC,gCAAgC,CAAC;MA2BhE,sBAAsB,GAAG,CAAC,OAA8B,EAAE,KAAkB,KAAI;AACzF,IAAA,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,OAAO;AACpD,IAAA,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC;AACtC,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;AACjC,IAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IAC9B,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC;IACnE,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;AAC5D,IAAA,KAAK,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC;;;;;;;AAO7E,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,CAAC;AACjG,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,CAAC;IACjG,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;IACnI,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC;IACpI,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC;AAC3I,IAAA,OAAO,KAAK;AAChB;AAEO,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,OAA2B,EAAE,KAAkB,KAAI;IAC1F,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO;IACtE,IAAI,KAAK,EAAE;QACP,cAAc,CAAC,KAAK,EAAE;IAC1B;AACA,IAAA,IAAI,OAAO,KAAK,SAAS,EAAE;QACvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AACtD,QAAA,MAAM,OAAO,GACT,QAAQ,CAAC,UAAU;YACnB,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC;QACrI,IAAI,OAAO,EAAE;YACT,IAAI,GAAG,OAAO;QAClB;IACJ;AACA,IAAA,IAAI,OAAO,KAAK,SAAS,EAAE;QACvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;AACvD,QAAA,MAAM,OAAO,GACT,QAAQ,CAAC,UAAU;YACnB,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,EAAG,KAAK,CAAC;QACtI,IAAI,OAAO,EAAE;YACT,IAAI,GAAG,OAAO;QAClB;IACJ;AACA,IAAA,OAAO,IAAI;AACf;AAEA,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,OAAsB,EAAE,KAAkB,KAAoB;IAC1F,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,OAAO;IAC/E,IAAI,MAAM,GAAG,IAAI;AACjB,IAAA,aAAa,CAAC,OAAO,CAAC,YAAY,IAAG;;AAEjC,QAAA,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;;QAErE,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,CAAC,cAAc,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;YACxG,MAAM,WAAW,GAAG,eAAe,CAAC,uBAAuB,CAAC,cAAc,CAAC;YAC3E,IAAI,KAAK,EAAE;AACP,gBAAA,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;YACjD;YACA,MAAM,gBAAgB,GAAa,EAAE;YACrC,MAAM,kBAAkB,GAAa,EAAE;YACvC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC3B,gBAAA,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACnF,gBAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;AACrB,oBAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,oBAAA,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;gBACzC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAU;YAC/F,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACtG,YAAA,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,UAAU,CAAC;AACrE,YAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;YACjE,MAAM,cAAc,GAAG,wBAAwB,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;;;;AAI7D,YAAA,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;AAC9C,YAAA,IAAI,YAAY,IAAI,SAAS,EAAE;gBAC3B,MAAM,GAAG,OAAO;YACpB;QACJ;AACA,QAAA,OAAO,IAAI;AACf,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,MAAM;AACjB,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,YAAoB,EAAE,YAAqB,KAAI;IACpF,MAAM,aAAa,GAAqB,EAAE;IAC1C,IAAI,KAAK,GAAiB,IAAI;IAC9B,IAAI,UAAU,GAAiB,IAAI;IACnC,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;AAEjC,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE;YAChE,KAAK,GAAG,QAAQ;QACpB;AACA,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;YAChB,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE;gBAClC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACrC,KAAK,GAAG,IAAI;YAChB;QACJ;AACA,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE;YAChC,UAAU,GAAG,OAAO;QACxB;IACJ;IACA,IAAI,KAAK,EAAE;AACP,QAAA,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtD;AACA,IAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE;AACxC,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,OAA8B,KAAI;IAC7D,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,OAAO;IAChG,MAAM,CAAC,GAAa,EAAE;IACtB,MAAM,CAAC,GAAa,EAAE;IACtB,IAAI,MAAM,GAAY,EAAE;IAExB,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;QAC7D,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;QACrF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;AAC3F,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,WAAW,GAAG;AAChB,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAK;AACnD,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC;AACjD,KAAA,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AACrF,IAAA,MAAM,WAAW,GAAG;AAChB,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC,MAAM;AACpD,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC;AACjD,KAAA,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AACrF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC;YAClF,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAClF,YAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE;AAC5B,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB;QACJ;IACJ;IACA,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,IAAG;QAClD,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC;QAClF,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAClF,QAAA,OAAO,CAAC,UAAU,IAAI,CAAC,UAAU;AACrC,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,MAAM;AACjB;AAEO,MAAM,WAAW,GAAG,CAAC,MAAe,KAAI;AAC3C,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE;IAC9B,MAAM,EAAE,GAAa,EAAE;IACvB,MAAM,EAAE,GAAa,EAAE;AACvB,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;AACf,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACV,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACZ,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAChB,IAAA,CAAC,CAAC;AACF,IAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxB,IAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxB,IAAA,MAAM,UAAU,GAAG,CAAC,CAAQ,KAAc,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,MAAM,KAAK,GAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,MAAM,UAAU,GAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;AACxB,oBAAA,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AAChC,oBAAA,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;gBACpC;YACJ;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,MAAM,UAAU,GAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;AACxB,oBAAA,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AAChC,oBAAA,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;gBACpC;YACJ;QACJ;IACJ;AACA,IAAA,OAAO,KAAK;AAChB;MAEa,iBAAiB,GAAG,CAAC,eAAgC,EAAE,eAAgC,KAAI;IACpG,MAAM,aAAa,GAAG,oBAAoB;AAC1C,IAAA,IAAI,YAAY,GAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7D,IAAA,IAAI,YAAY,GAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7D,IAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC;AACnF,IAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC;IACnF,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,QAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC;AAC9B,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;AACxB,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;IAC5B;IAEA,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,QAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC;AAC9B,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;AACxB,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;IAC5B;AAEA,IAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;AACpF,IAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;IACpF,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,QAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC;AAC9B,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;AACxB,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;IAC5B;IACA,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,QAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC;AAC9B,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;AACxB,QAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM;IAC5B;AACA,IAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE;AACzC;AAEO,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,cAA+B,EAAE,SAAoB,KAAW;IACvG,QAAQ,SAAS;AACb,QAAA,KAAK,SAAS,CAAC,GAAG,EAAE;YAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QACvC;AACA,QAAA,KAAK,SAAS,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;QAC/D;AACA,QAAA,KAAK,SAAS,CAAC,KAAK,EAAE;AAClB,YAAA,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9D;QACA,SAAS;YACL,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC;;AAER;MAEa,gCAAgC,GAAG,CAAC,eAAgC,EAAE,eAAgC,KAAI;AACnH,IAAA,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,eAAe,EAAE,eAAe,CAAC;AAC1F,IAAA,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CAC/C,eAAe,EACf,YAAY,CAAC,CAAC,CAAC,EACf,YAAY,CAAC,CAAC,CAAC,EACf,YAAY,CAAC,CAAC,CAAC,EACf,YAAY,CAAC,CAAC,CAAC,CAClB;AACD,IAAA,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CAC/C,eAAe,EACf,YAAY,CAAC,CAAC,CAAC,EACf,YAAY,CAAC,CAAC,CAAC,EACf,YAAY,CAAC,CAAC,CAAC,EACf,YAAY,CAAC,CAAC,CAAC,CAClB;IACD,OAAO;QACH,oBAAoB;QACpB;KACH;AACL;AAEO,MAAM,0BAA0B,GAAG,CAAC,OAA8B,KAAI;AACzE,IAAA,MAAM,EACF,WAAW,EACX,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,eAAe,EACf,oBAAoB,EACvB,GAAG,OAAO;IAEX,QACI,eAAe,CAAC,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC;AAChE,QAAA,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,eAAe,CAAC;AACzE,QAAA,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,eAAe,CAAC;QACzE,eAAe,CAAC,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC;AAExE;;AC5TA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe;AAE3B,MAAM,cAAc,GAAG,CAC1B,YAAoB,EACpB,WAAoB,EACpB,aAAyB,KACzB;IACA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE;AAC5D,IAAA,GAAG,CAAC,WAAW,CAAC,GAAG,aAAa;AAChC,IAAA,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;AAC9B;AAEO,MAAM,kBAAkB,GAAG,CAAwC,YAAoB,KAAO;AACjG,IAAA,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;AAChC;;ACbO,MAAM,WAAW,GAAG,IAAI,OAAO;AAE/B,MAAM,UAAU,GAAG,CAAC,KAAiB,KAAI;IAC5C,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC;MAEa,WAAW,GAAG,CAAC,KAAiB,EAAE,SAAoB,KAAI;AACnE,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,sBAAA,CAAwB,CAAC;AAC3E,IAAA,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;AACjC,IAAA,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;AAC5B;AAEO,MAAM,cAAc,GAAG,CAAC,KAAiB,KAAI;AAChD,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,sBAAA,CAAwB,CAAC;AAC9E,IAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB,IAAA,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7B;;MChBa,cAAc,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;IACvE,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;IAC7C,IAAI,SAAS,EAAE;AACX,QAAA,OAAO,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM;IAC7C;AACA,IAAA,OAAO,CAAC;AACZ;AAEO,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,QAAwB,EAAE,SAAA,GAA4B,KAAK,KAAI;IACjH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QAC1B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;AACtC,QAAA,OAAO,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AAC9D,IAAA,CAAC,CAAC;AACN;AAEO,MAAM,QAAQ,GAAG,CAAC,IAAY,KAAI;IACrC,OAAO,IAAI,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW;AAChE;;ACnBM,SAAU,OAAO,CAAC,KAA0B,EAAE,QAAgB,EAAE,IAAc,EAAE,QAAkB,EAAA;AACpG,IAAA,MAAM,KAAK,GAAG,YAAY,EAAE;IAC5B,IAAI,aAAa,GAAG,KAAK;IAEzB,SAAS,IAAI,CAAC,GAAW,EAAA;QACrB,IAAI,aAAa,EAAE;YACf;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC,CAAC;AACzC,QAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;YACP,qBAAqB,CAAC,IAAI,CAAC;QAC/B;aAAO,IAAI,QAAQ,EAAE;AACjB,YAAA,QAAQ,EAAE;QACd;IACJ;IAEA,qBAAqB,CAAC,IAAI,CAAC;IAC3B,OAAO;QACH,IAAI,EAAE,OAAO,aAAa,GAAG,IAAI,CAAC;QAClC,KAAK,EAAE,MAAK;YACR,aAAa,GAAG,KAAK;YACrB,qBAAqB,CAAC,IAAI,CAAC;QAC/B;KACH;AACL;SAEgB,YAAY,GAAA;IACxB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;AAC9C,QAAA,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;IACnC;SAAO;AACH,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE;IACrB;AACJ;AAEM,SAAU,MAAM,CAAC,CAAS,EAAA;AAC5B,IAAA,OAAO,CAAC;AACZ;;MCtCa,iBAAiB,GAAG,CAAC,WAAwB,EAAE,WAAmB,KAAI;IAC/E,QAAQ,WAAW;QACf,KAAK,WAAW,CAAC,MAAM;AACnB,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;QAC/B,KAAK,WAAW,CAAC,MAAM;AACnB,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;AAC/B,QAAA;AACI,YAAA,OAAO,SAAS;;AAE5B;;ACTO,MAAM,kBAAkB,GAAG,CAC9B,KAAiB,EACjB,QAAwB,EACxB,UAAiB,EACjB,cAAoE,KACpE;AACA,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAG;QAC1B,MAAM,UAAU,GAAG,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC;QAC5D,IAAI,UAAU,EAAE;AACZ,YAAA,OAAO,UAAU;QACrB;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,YAAA,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE;QACjC;AACA,QAAA,OAAO,OAAO;AAClB,IAAA,CAAC,CAAC;AACN;AAEO,MAAM,mBAAmB,GAAG,CAC/B,KAAiB,EACjB,QAAwB,EACxB,UAAiB,EACjB,cAAgF,KAChF;IACA,MAAM,MAAM,GAA2B,EAAE;AACzC,IAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;QACvB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE;AACpC,IAAA,CAAC,CAAC;AACF,IAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;QACvB,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/B,QAAA,cAAc,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC;AACjD,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAmB;QACxH;AACA,QAAA,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClE,IAAA,CAAC,CAAC;AACF,IAAA,UAAU,CAAC,iCAAiC,CAAC,KAAK,EAAE,QAAQ,CAAC;AACjE;;ACtCA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACO,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,QAAgB,EAAE,SAAA,GAAuB,SAAS,CAAC,KAAK,KAAW;AAC1G,IAAA,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE;AAC9B,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C;AACA,IAAA,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,EAAE;AAChC,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAC1C;AACA,IAAA,IAAI,SAAS,KAAK,SAAS,CAAC,GAAG,EAAE;AAC7B,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAC1C;AACA,IAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1C;AAEO,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,QAAgB,EAAE,SAAA,GAAuB,SAAS,CAAC,KAAK,KAAW;AAC1G,IAAA,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,EAAE;AAChC,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C;AACA,IAAA,IAAI,SAAS,KAAK,SAAS,CAAC,GAAG,EAAE;AAC7B,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C;AACA,IAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC1C;AAEO,MAAM,mBAAmB,GAAG,CAAC,KAAa,KAAI;AACjD,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;QACb,OAAO,SAAS,CAAC,GAAG;IACxB;AACA,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;QACb,OAAO,SAAS,CAAC,KAAK;IAC1B;AACA,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;QACb,OAAO,SAAS,CAAC,MAAM;IAC3B;AACA,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;QACb,OAAO,SAAS,CAAC,IAAI;IACzB;IACA,OAAO,SAAS,CAAC,KAAK;AAC1B;AAEO,MAAM,wBAAwB,GAAG,CAAC,MAAa,EAAE,MAAa,EAAE,YAAqB,KAAI;IAC5F,IAAI,YAAY,EAAE;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1C;SAAO;AACH,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1C;AACJ;;AC1CO,MAAM,+BAA+B,GAAG;AAOzC,MAAO,cAAsD,SAAQ,SAI1E,CAAA;aACU,IAAA,CAAA,GAAG,GAAG,iBAAH,CAAqB;IAY/B,WAAA,CAAmB,KAAiB,EAAS,OAAiC,EAAA;AAC1E,QAAA,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;QADN,IAAA,CAAA,KAAK,GAAL,KAAK;QAAqB,IAAA,CAAA,OAAO,GAAP,OAAO;QAJpD,IAAA,CAAA,OAAO,GAAG,KAAK;IAMf;AAEA,IAAA,OAAO,CAAC,OAAU,EAAA;QACd,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;IAC/C;AAEA,IAAA,IAAI,CAAC,OAAU,EAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,MAAM,CAAC,GAAG,OAAO,EAAE;QACnB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACjI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,+BAA+B,CAAC;AACjE,QAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5B,QAAA,MAAM,KAAK,GAAe;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;YAC7C,OAAO;YACP,YAAY,EAAE,MAAK;gBACf,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;YAC7C;SACH;AACD,QAAA,IAAI,CAAC,iBAAiB,GAAI,IAAI,CAAC,KAAoC,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;QAE1G,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE;YACrD,cAAc,EAAE,MAAK;gBACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AACxD,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACpE,oBAAA,OAAO,mBAAmB;gBAC9B;qBAAO;AACH,oBAAA,OAAO,mBAAmB;gBAC9B;YACJ,CAAC;YACD,gBAAgB,EAAE,MAAK;gBACnB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxD,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE;AAC/F,oBAAA,OAAO,CAAC;gBACZ;qBAAO;AACH,oBAAA,OAAO,GAAG;gBACd;YACJ,CAAC;YACD,YAAY,EAAE,MAAK;gBACf,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YAClD,CAAC;YACD,eAAe,EAAE,MAAK;AAClB,gBAAA,MAAM,sBAAsB,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;gBACxE,MAAM,eAAe,GAAG,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC9D,OAAO,eAAe,IAAI,sBAAsB;YACpD;AACH,SAAA,CAAC;AACF,QAAA,OAAO,CAAC;IACZ;AAEA,IAAA,WAAW,CAAC,KAAkB,EAAE,QAAW,EAAE,OAAU,EAAA;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAChD,YAAA,MAAM,KAAK,GAAG;gBACV,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;AAC7C,gBAAA,OAAO,EAAE,OAAO;gBAChB,YAAY,EAAE,MAAK;oBACf,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;gBAC7C;aACH;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC;QACA,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QAC/D,mBAAmB,CACf,IAAI,CAAC,CAAE,EACP,oBAAoB,CAAC,KAAK,EAC1B,oBAAoB,CAAC,MAAM,EAC3B,oBAAoB,CAAC,CAAC,EACtB,oBAAoB,CAAC,CAAC,CACzB;QACD,IAAI,oBAAoB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AACrD,YAAA,YAAY,CAAC,IAAI,CAAC,CAAE,EAAE,eAAe,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC;QAC9F;QACA,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACrF;IAEA,QAAQ,CAAC,OAAqB,EAAE,OAAgB,EAAA;AAC5C,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC5E,QAAA,MAAM,KAAK,GAAwB;YAC/B;SACH;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC;IACxC;IAEA,OAAO,GAAA;QACH,KAAK,CAAC,OAAO,EAAE;AACf,QAAA,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;IACnC;;;AC/HG,MAAM,WAAW,GAAG,CAAwC,KAAiB,EAAE,UAAsB,EAAE,OAAuB,KAAI;AACrI,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAQ;AAC1D,IAAA,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAG;QAC/B,IAAI,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YAAE;QAChD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;AAChD,QAAA,MAAM,WAAW,GAAG,OAAO,EAAE,cAAc,GAAG,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE;AACnF,QAAA,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE;AACxB,YAAA,WAAW,IAAI,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACpE;AACA,QAAA,IAAI,OAAO,EAAE,QAAQ,EAAE;AACnB,YAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;QACnC;aAAO;YACH,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC;QAC/C;AACJ,IAAA,CAAC,CAAC;AACN;AAEA,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,WAAmB,EAAE,OAAmB,KAAI;IACnF,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC;AAChD,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,IAAmB,EAAE,OAAmB,KAAI;IACjF,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,WAA0B,EAAE,OAAmB,KAAI;IAC1F,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC;AAChD,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,WAAmB,EAAE,OAAmB,KAAI;IACnF,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC;AAChD,CAAC;AAEM,MAAM,kBAAkB,GAAG;IAC9B,YAAY;IACZ,cAAc;IACd,WAAW;IACX,cAAc;IACd;;;AClCG,MAAM,QAAQ,GAAG,CAAC,KAAiB,KAAI;AAC1C,IAAA,SAAS,SAAS,CAAC,cAA+B,EAAE,SAA0B,EAAA;QAC1E,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAU;IACvD;AACA,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/B;AAEO,MAAM,WAAW,GAAG,CAAC,KAAiB,KAAI;AAC7C,IAAA,SAAS,SAAS,CAAC,cAA+B,EAAE,SAA0B,EAAA;QAC1E,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAU;IACpG;AACA,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/B;AAEO,MAAM,SAAS,GAAG,CAAC,KAAiB,KAAI;AAC3C,IAAA,SAAS,SAAS,CAAC,cAA+B,EAAE,SAA0B,EAAA;QAC1E,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAU;IACvD;AACA,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/B;AAEO,MAAM,qBAAqB,GAAG,CAAC,KAAiB,KAAI;AACvD,IAAA,SAAS,SAAS,CAAC,cAA+B,EAAE,SAA0B,EAAA;QAC1E,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC;QAC/D,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC;AACvD,QAAA,OAAO,CAAC,WAAW,GAAG,aAAa,EAAE,CAAC,CAAU;IACpD;AACA,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/B;AAEO,MAAM,mBAAmB,GAAG,CAAC,KAAiB,KAAI;AACrD,IAAA,SAAS,SAAS,CAAC,cAA+B,EAAE,SAA0B,EAAA;QAC1E,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;QAChE,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AACxD,QAAA,OAAO,CAAC,CAAC,EAAE,WAAW,GAAG,aAAa,CAAU;IACpD;AACA,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/B;AAEO,MAAM,UAAU,GAAG,CAAC,KAAiB,KAAI;AAC5C,IAAA,SAAS,SAAS,CAAC,cAA+B,EAAE,SAA0B,EAAA;QAC1E,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAU;IAClG;AACA,IAAA,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/B;AAEA,SAAS,SAAS,CAAC,KAAiB,EAAE,SAAiF,EAAA;AACnH,IAAA,MAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,CAAC;IAClD,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;AACrE,IAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;QACvB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAE;QAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC;QACnD,IAAI,cAAc,GAAmB,EAAE;AACvC,QAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACpC,cAAc,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;QACpE;AAAO,aAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AACvB,YAAA,cAAc,GAAG,CAAC,OAAO,CAAC;QAC9B;AACA,QAAA,cAAc,CAAC,OAAO,CAAC,IAAI,IAAG;AAC1B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAY;YACxF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;AAC7C,YAAA,UAAU,CAAC,OAAO,CACd,KAAK,EACL;AACI,gBAAA,MAAM,EAAE;aACX,EACD,IAAI,CACP;AACL,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;AAC5B,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7B;AAEO,MAAM,oBAAoB,GAAG,CAAC,KAAiB,KAAI;AACtD,IAAA,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;AAC3B;AAEO,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;AACpD,IAAA,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAC5B;AAEA,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAE,YAAqB,KAAI;IAC5D,MAAM,IAAI,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG;IACrC,MAAM,IAAI,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ;AAC9C,IAAA,MAAM,uBAAuB,GAAG,0BAA0B,CAAC,KAAK,CAAC;IACjE,MAAM,IAAI,GAAG,uBAAuB,CAAC,GAAG,CAAC,OAAO,IAAG;AAC/C,QAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,OAAO,CAAE,EAAE;AAC/D,IAAA,CAAC,CAAC;IACF,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,CAAC;AACpF,IAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/H,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,eAAe,CAAC;AAC/D,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,eAAe,CAAC;IAC/D,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,CAAC;IAC9F,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC;AACrG,IAAA,MAAM,MAAM,GACR,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAClI,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrF,IAAA,IAAI,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM;AACzF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;AAC7C,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;QACrC,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;AACjD,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAClE,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAY;AACrH,QAAA,UAAU,CAAC,OAAO,CACd,KAAK,EACL;AACI,YAAA,MAAM,EAAE;SACX,EACD,IAAI,CACP;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;QACxB,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM;IAClD;AACA,IAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7B,CAAC;AAaM,MAAM,cAAc,GAAmB;IAC1C,QAAQ;IACR,qBAAqB;IACrB,WAAW;IACX,SAAS;IACT,mBAAmB;IACnB,UAAU;IACV,oBAAoB;IACpB;;;ACvJG,MAAM,oBAAoB,GAAG,CAAC,MAAsB,EAAE,KAAA,GAAiB,KAAK,KAAoB;AACnG,IAAA,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACrB,IAAA,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;IACnB,IAAI,KAAK,EAAE;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;QACpC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IACxG;AAEA,IAAA,MAAM,YAAY,GAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,IAAA,IAAI,gBAAgB,GAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtF,IAAA,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC;AAC3C;;ACCA,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAE,KAAmB,KAAI;AAChE,IAAA,QACI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC;AAEzI,CAAC;MAEY,UAAU,GAAG,CACtB,KAAiB,EACjB,OAAmC,KACnC;IACA,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,KAAK;IACvE,IAAI,gBAAgB,GAAqC,IAAI;IAC7D,IAAI,SAAS,GAA8B,IAAI;IAC/C,IAAI,UAAU,GAAiB,IAAI;IACnC,IAAI,eAAe,GAAqC,IAAI;AAE5D,IAAA,KAAK,CAAC,UAAU,GAAG,CAAC,KAAiB,KAAI;QACrC,IAAI,SAAS,EAAE;YACX,KAAK,CAAC,cAAc,EAAE;YACtB;QACJ;QACA,UAAU,CAAC,KAAK,CAAC;AACrB,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;QACxC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;YAClF,WAAW,CAAC,KAAK,CAAC;YAClB;QACJ;AACA,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,QAAA,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACzC,IAAI,gBAAgB,EAAE;AAClB,YAAA,IAAI,gBAAgB,CAAC,WAAW,EAAE;AAC9B,gBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAA,CAAE,CAAC;YACxF;YACA,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO;AAC/C,kBAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;kBACjE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC;AAC1D,YAAA,SAAS,GAAG;gBACR,IAAI;gBACJ,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC/B,WAAW,EAAE,gBAAgB,CAAC,WAAW;gBACzC,SAAS,EAAE,gBAAgB,CAAC,SAAS;gBACrC,OAAO,EAAE,gBAAgB,CAAC;aAC7B;YACD;QACJ;QACA,WAAW,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACzD,YAAA,oBAAoB,EAAE;YACtB,WAAW,CAAC,KAAK,CAAC;YAClB;QACJ;QACA,IAAI,UAAU,IAAI,gBAAgB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YACtD,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrG,YAAA,IAAI,QAAQ,GAAG,qBAAqB,EAAE;gBAClC,WAAW,CAAC,KAAK,EAAE,SAAU,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;gBACxB,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,SAAU,CAAC;YAC5D;QACJ;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACzE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,GAAG,yBAAyB,EAAE,MAAK;gBAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;gBACzC,IAAI,UAAU,EAAE;oBACZ,IAAI,eAAe,IAAI,UAAU,CAAC,WAAW,KAAK,eAAe,CAAC,WAAW,EAAE;AAC3E,wBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,WAAW,CAAA,CAAE,CAAC;oBAC1F;oBACA,eAAe,GAAG,UAAU;AAC5B,oBAAA,IAAI,eAAe,CAAC,WAAW,EAAE;AAC7B,wBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,WAAW,CAAA,CAAE,CAAC;oBACvF;gBACJ;qBAAO;AACH,oBAAA,oBAAoB,EAAE;gBAC1B;AACJ,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;gBACjC,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5E,gBAAA,WAAW,CAAC,KAAK,EAAE,oBAAoB,EAAE,MAAK;AAC1C,oBAAA,IAAI,UAAU,IAAI,SAAS,EAAE;AACzB,wBAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE;AACxB,4BAAA,UAAU,EAAE,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;4BACnF,QAAQ;AACR,4BAAA,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;AACpB,yBAAA,CAAC;oBACN;AACJ,gBAAA,CAAC,CAAC;gBACF;YACJ;QACJ;QACA,WAAW,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,eAAe,GAAG,CAAC,KAAmB,KAAI;QAC5C,eAAe,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,gBAAgB,EAAE;YACvC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,SAAU,CAAC;AACtD,YAAA,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;YAClC,UAAU,GAAG,IAAI;YACjB,gBAAgB,GAAG,IAAI;YACvB,SAAS,GAAG,IAAI;AAChB,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC7B;AACJ,IAAA,CAAC;IAED,MAAM,oBAAoB,GAAG,MAAK;QAC9B,IAAI,eAAe,EAAE;AACjB,YAAA,IAAI,eAAe,CAAC,WAAW,EAAE;AAC7B,gBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,WAAW,CAAA,CAAE,CAAC;YAC1F;YACA,eAAe,GAAG,IAAI;QAC1B;AACJ,IAAA,CAAC;AAED,IAAA,OAAO,KAAK;AAChB;;ACzIM,MAAO,cAAe,SAAQ,SAAqB,CAAA;aAC9C,IAAA,CAAA,GAAG,GAAG,gBAAgB,CAAC;AAE9B,IAAA,OAAO,CAAC,OAAmB,EAAA;AACvB,QAAA,OAAO,IAAI;IACf;IAEA,IAAI,CAAC,OAAmB,EAAE,eAAwB,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAY;AACrB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,WAAW,EAAE,mBAAmB;YAChC,cAAc,EAAE,CAAC,CAAC;SACrB;AACD,QAAA,IAAI,SAAS,GAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACpE,IAAI,eAAe,EAAE;AACjB,YAAA,OAAO,CAAC,MAAM,GAAG,MAAM;YACvB,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;QAC9D;QACA,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;IACxD;;;MCnBS,qBAAqB,CAAA;AAAlC,IAAA,WAAA,GAAA;QACY,IAAA,CAAA,WAAW,GAAiB,EAAE;AAE9B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAA8B;AAuB5D,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAK,EAAE,CAAC;IAQlC;IA7BI,YAAY,CAA+B,GAAW,EAAE,SAAY,EAAA;QAChE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;IACzC;AAEA,IAAA,YAAY,CAA+B,GAAW,EAAA;QAClD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAM;IAC1C;AAEA,IAAA,oBAAoB,CAAC,UAAqC,EAAA;AACtD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC;IACJ;IAEA,cAAc,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;IAC3B;IAIA,iBAAiB,GAAA;QACb,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;YACpC,UAAU,CAAC,OAAO,EAAE;AACxB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;AACH;;ACnCK,MAAO,oBAIX,SAAQ,cAAuB,CAAA;AAC7B,IAAA,WAAA,CAAY,UAAU,GAAG,IAAI,qBAAqB,EAAE,EAAA;QAChD,KAAK,CAAC,UAAe,CAAC;IAC1B;AACH;;ACNK,MAAO,cAAe,SAAQ,oBAA4C,CAAA;AAC5E,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;IACX;IAMA,mBAAmB,GAAA;QACf,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAa,IAAI,CAAC,KAAK,EAAE;AACjE,YAAA,YAAY,EAAE,CAAC,OAAmB,KAAI;gBAClC,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;YACnD,CAAC;AACD,YAAA,cAAc,EAAE,MAAM,CAAC;AACvB,YAAA,gBAAgB,EAAE,MAAM,CAAC;YACzB,eAAe,EAAE,MAAK;AAClB,gBAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;YACzC;AACH,SAAA,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC;IACvE;IAEA,UAAU,GAAA;QACN,KAAK,CAAC,UAAU,EAAE;QAClB,IAAI,CAAC,mBAAmB,EAAE;IAC9B;AAEA,IAAA,gBAAgB,CACZ,KAAwD,EACxD,QAA2D,IAC5D;AACN;;ACHK,SAAU,SAAS,CAAC,KAAiB,EAAA;AACvC,IAAA,IAAI,eAAmC;AACvC,IAAA,IAAI,YAAiC;IAErC,MAAM,EACF,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,QAAQ,EACX,GAAG,KAAK;AAET,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,OAAkC,KAAI;QACvD,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC5C,YAAA,OAAO,cAAc;QACzB;AACA,QAAA,OAAO,WAAW,CAAC,OAAO,CAAC;AAC/B,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,MAAK;YAClC,eAAe,EAAE,MAAM,EAAE;AACzB,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,SAAS,GAAc,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1D,YAAA,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AAC5D,gBAAA,SAAS,GAAG,KAAK,CAAC,SAAS;YAC/B;YACA,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,gBAAgB,CAAC,SAAS,EAAE;gBAC1F,MAAM,WAAW,GAAG,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC;AAC/D,gBAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACpB,oBAAA,eAAe,GAAG,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC;AAC3D,oBAAA,eAAe,IAAI,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;gBAClF;YACJ;AACJ,QAAA,CAAC,CAAC;QACF,WAAW,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,eAAe,GAAG,CAAC,KAAmB,KAAI;QAC5C,eAAe,EAAE,MAAM,EAAE;QACzB,eAAe,GAAG,IAAI;QACtB,eAAe,CAAC,KAAK,CAAC;AAC1B,IAAA,CAAC;IAED,KAAK,CAAC,kBAAkB,GAAG,CAAC,QAAwB,EAAE,UAA2B,KAAI;QACjF,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC7D,QAAA,OAAO,kBAAkB,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,EAAE,UAAU,CAAC;AACnE,IAAA,CAAC;IAED,KAAK,CAAC,cAAc,GAAG,CAAC,aAAmC,EAAE,WAAkB,EAAE,aAA8C,KAAI;QAC/H,IAAI,QAAQ,GAAmB,EAAE;AACjC,QAAA,IAAI,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;YACjC,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;YACrD,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC;YACvE,MAAM,wBAAwB,GAAG,2BAA2B,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC;AAC5F,YAAA,wBAAwB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACtC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnF,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACpF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACf,gBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBACpB,MAAM,KAAK,GAAG,aAAa,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AACnF,oBAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;oBACvE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC;AACnC,oBAAA,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,QAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;AAC/E,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,aAAa,CAAC,QAAQ,GAAG,QAAQ;QACrC;AACA,QAAA,cAAc,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC;AACzD,QAAA,MAAM,aAAa,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAmB;AACrG,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC9B,YAAA,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClE,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,kBAAkB,GAAG,CAAC,IAAoB,KAAI;AAChD,QAAA,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;QAC9B;AACA,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC;AACnC,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,cAAc,GAAG,CAAC,QAAwB,KAAI;AAChD,QAAA,IAAI,YAAY,EAAE,MAAM,EAAE;AACtB,YAAA,2BAA2B,CAAC,KAAK,EAAE,YAAY,CAAC;QACpD;QACA,cAAc,CAAC,QAAQ,CAAC;QACxB,YAAY,GAAG,IAAI;AACvB,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,YAAY,GAAG,CAAC,OAAqB,KAAI;AAC3C,QAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACpC,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;QACpD;AACA,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC;AAChC,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;QACrC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;gBAC7B,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B;YACJ;AACA,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;gBACnC,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC7B;YACJ;QACJ;QACA,OAAO,CAAC,KAAK,CAAC;AAClB,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,QAAQ,GAAG,MAAK;AAClB,QAAA,QAAQ,EAAE;AACV,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;AAClC,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACrB,YAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACrE,YAAA,MAAM,oBAAoB,GACtB,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrE,gBAAA,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAwB,KAAK,CAAC;YACpE,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;AACzC,YAAA,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,oBAAoB,CAAC;AACvF,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;AAED,IAAA,OAAO,KAAK;AAChB;AAEA,MAAM,aAAa,GAAG,CAAC,OAAqB,EAAE,OAAgB,KAAI;IAC9D,OAAO;AACH,QAAA,GAAG,OAAO;AACV,QAAA,OAAO,EAAE;KACZ;AACL,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,KAAiB,EAAE,qBAAqC,EAAE,UAAkB,EAAE,QAAwB,KAAI;AACrI,IAAA,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC;AACzF,IAAA,IAAI,eAAe,CAAC,MAAM,EAAE;AACxB,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3E,YAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;gBACxE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC;gBACnC,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;YAC7E;iBAAO;AACH,gBAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC9D;AACJ,QAAA,CAAC,CAAC;IACN;AACA,IAAA,OAAO,QAAQ;AACnB,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,KAAiB,KAAI;IAC1C,MAAM,cAAc,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAiB;AACnE,IAAA,MAAM,YAAY,GAAG,CAAC,GAAG,cAAc,CAAC;AACxC,IAAA,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,KAAK,CAAC;AAC7D,IAAA,MAAM,wBAAwB,GAAG,wCAAwC,CAAC,KAAK,CAAC;IAChF,MAAM,WAAW,GAAG,CAAC,GAAG,qBAAqB,EAAE,GAAG,wBAAwB,CAAC;AAC3E,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACzB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAiB;AAC7E,QAAA,IAAI,gBAAgB,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AACnF,YAAA,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAC1C,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAC9F;AACD,YAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC7C,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAC1C;AACA,gBAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,oBAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,wBAAA,MAAM,UAAU,GAAG,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE;AAC3G,4BAAA,GAAG,WAAW;AACd,4BAAA,GAAG;AACN,yBAAA,CAAC;AACF,wBAAA,IAAI,KAAK,GAAG,gBAAgB,CAAC,MAAM;wBACnC,IAAI,UAAU,EAAE;AACZ,4BAAA,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;wBAC3E;AACA,wBAAA,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;4BACnD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC9B,gCAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC3B;AACJ,wBAAA,CAAC,CAAC;oBACN;gBACJ;YACJ;QACJ;AACJ,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,YAAY;AACvB,CAAC;AAED,MAAM,gCAAgC,GAAG,CAAC,KAAiB,EAAE,MAAoB,EAAE,YAA4B,KAAI;IAC/G,IAAI,KAAK,GAAsB,IAAI;AACnC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AACzE,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACtH,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,YAAA,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACjB;QACJ;IACJ;AACA,IAAA,OAAO,KAAK;AAChB,CAAC;AAED,MAAM,2BAA2B,GAAG,CAAC,KAAiB,EAAE,YAA0B,KAAI;AAClF,IAAA,MAAM,wBAAwB,GAAG,wCAAwC,CAAC,KAAK,CAAC;AAChF,IAAA,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,KAAK,CAAC;AAC7D,IAAA,MAAM,uBAAuB,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC;AACvF,IAAA,CAAC,GAAG,qBAAqB,EAAE,GAAG,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACpE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAiB;AAC7E,QAAA,IAAI,gBAAgB,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AACnF,YAAA,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AACnF,YAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,gBAAA,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAC1D,gBAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;oBACrE,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAClF,oBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC3D,oBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC;gBACxE;YACJ;QACJ;AACJ,IAAA,CAAC,CAAC;AACN,CAAC;;MC3QqB,kBAAkB,CAAA;IAOpC,IAAI,OAAO,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;AAEA,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ;IACxB;AAGH;;ACbD,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAiC;AAExE,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAiC;AAExE,MAAM,iBAAiB,GAAG,CAAC,KAAwB,KAAuB;IACtE,IAAI,KAAK,EAAE;QACP,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,YAAA,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;AACtC,YAAA,OAAO,MAAM;QACjB;AACA,QAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAsB;IAC9D;AACA,IAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAEM,MAAM,cAAc,GAAG,CAC1B,KAAwB,EACxB,OAAyB,EACzB,OAGC,EACD,iBAAA,GAA4B,KAAK,KACjC;IACA,IAAI,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3C,IAAI,IAAI,EAAE;AACN,QAAA,OAAO,IAAI;IACf;IACA,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC;AACjE,IAAA,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AACtC,IAAA,OAAO,IAAI;AACf;AAEO,MAAM,sBAAsB,GAAG,CAAC,KAAwB,EAAE,OAAyB,EAAE,IAAiB,KAAI;AAC7G,IAAA,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1C;MAEa,qBAAqB,GAAG,CAAC,KAAwB,EAAE,OAAyB,KAAI;AACzF,IAAA,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC;AAEM,SAAU,cAAc,CAC1B,KAAwB,EACxB,OAAyB,EACzB,OAGC,EACD,iBAAA,GAA4B,KAAK,EAAA;AAEjC,IAAA,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACvD,IAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACvC,IAAA,MAAM,KAAK,GAAmB,CAAC,EAAE,CAAC;AAClC,IAAA,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE;AACjC,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QACxC,SAAS,CAAC,OAAO,CAAC,CAAC,iBAAyB,EAAE,KAAa,KAAI;YAC3D,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE;AACxD,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACb,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3C,gBAAA,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;YACjC;iBAAO;gBACH,MAAM,OAAO,GAAiB,EAAE;AAChC,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AACzB,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YACvB;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,IAAI,UAAU,GAAG,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC;IACnB,KAAK,CAAC,OAAO,CAAC,CAAC,SAAuB,EAAE,KAAa,KAAI;QACrD,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,UAAU,GAAG,CAAC;QAClB,IAAI,aAAa,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC7D,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,MAAM,QAAQ,GAAe,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAgB,EAAE,KAAa,KAAI;YAClD,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC;AAC7C,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE;AACnD,gBAAA,MAAM,UAAU,GAAG,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACzE,gBAAA,IAAI,UAAU,GAAG,aAAa,EAAE;oBAC5B,aAAa,GAAG,UAAU;gBAC9B;YACJ;YACA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC1F,YAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI;AAC5B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;gBAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK;AACzC,gBAAA,IAAI,SAAS,GAAG,KAAK,GAAG,iBAAiB,EAAE;oBACvC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;oBAC5C,SAAS,GAAG,KAAK;oBACjB,UAAU,IAAI,aAAa;oBAC3B,YAAY,GAAG,IAAI;AACnB,oBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AACjB,oBAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5C;qBAAO;AACH,oBAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACxC,SAAS,IAAI,KAAK;gBACtB;YACJ;AACJ,QAAA,CAAC,CAAC;QACF,UAAU,IAAI,aAAa;QAC3B,WAAW,IAAI,UAAU;QACzB,IAAI,CAAC,YAAY,EAAE;YACf,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;QAChD;AACJ,IAAA,CAAC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE;AACrD;AAEA,MAAM,OAAO,GAAG,CACZ,IAAgB,EAChB,OAGC,KACD;AACA,IAAA,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,GAAG,OAAO,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAA,GAAA,EAAM,OAAO,CAAC,UAAU,GAAG;AAC1I,CAAC;;MCrGY,UAAU,CAAA;IAanB,WAAA,CACY,KAAiB,EACjB,OAMP,EAAA;QAPO,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,OAAO,GAAP,OAAO;QAdnB,IAAA,CAAA,SAAS,GAAG,KAAK;AAyJjB,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,OAAiB,EAAE,QAAiB,KAAI;AAC/C,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU;YAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,YAAA,MAAM,MAAM,GAAG,OAAO,IAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAa;AAC9D,YAAA,OAAO,cAAc,CACjB,IAAI,CAAC,KAAK,EACV,MAAM,EACN;AACI,gBAAA,QAAQ,EAAE,QAAQ;gBAClB;aACH,EACD,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAY,EAAE,CAC1C;AACL,QAAA,CAAC;QAED,IAAA,CAAA,OAAO,GAAG,MAAK;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClC,QAAA,CAAC;AArJG,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,MAAM,GAAG;QACxC;IACJ;AAEA,IAAA,IAAI,CAAC,IAAa,EAAA;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC9C,QAAA,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE;QAClB,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;QACzG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5B,QAAA,MAAM,KAAK,GAAc;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI;AACJ,YAAA,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;AACrC,YAAA,QAAQ,EAAE,CAAC,IAAoB,KAAI;gBAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,EAAE;AACnE,oBAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;oBAC7D,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;oBAC/F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;gBACjC;YACJ,CAAC;AACD,YAAA,SAAS,EAAE,CAAC,MAAc,KAAI;AAC1B,gBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACxB,CAAC;AACD,YAAA,aAAa,EAAE,CAAC,KAAuB,KAAI;AACvC,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE;AACjC,oBAAA,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAqB,CAAC;oBAC9E;gBACJ;AACA,gBAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC9D,IAAI,QAAQ,EAAE;AACV,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnD,oBAAA,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAqB,EAAE,QAAQ,CAAC;;AAEzF,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;oBAC/D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;gBACjC;YACJ;SACH;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAI,IAAI,CAAC,KAAmC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;IAC3G;AAEA,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAC9B,QAAA,wBAAwB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;IAC3C;AAEA,IAAA,WAAW,CAAC,WAAkB,EAAE,KAAA,GAAgB,CAAC,EAAA;QAC7C,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC;IAC5C;AAEA,IAAA,eAAe,CAAC,SAA2B,EAAA;AACvC,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACxE,QAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACpD;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,IAAI,EAAE;SACT;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;IACvC;IAEA,IAAI,CAAC,QAAqB,EAAE,QAAoC,EAAA;AAC5D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACtC,IAAI,OAAO,EAAE,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,sBAAsB,EAAE,IAAI,CAAC;QAC5D;AACA,QAAA,MAAM,KAAK,GAAuB;AAC9B,YAAA,QAAQ,EAAE;SACb;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;QAEnC,IAAI,aAAa,EAAE,EAAE;YACjB,UAAU,CAAC,MAAK;AACZ,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxCA,YAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YACvC,CAAC,EAAE,CAAC,CAAC;QACT;aAAO;YACHA,YAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC;AAEA,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAmB,KAAI;YAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACjH,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;YACxG,MAAM,UAAU,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACjF,YAAA,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;;gBAE7B,UAAU,CAAC,MAAK;AACZ,oBAAA,YAAY,EAAE;gBAClB,CAAC,EAAE,CAAC,CAAC;YACT;AACJ,QAAA,CAAC;AACD,QAAA,MAAM,cAAc,GAAG,CAAC,KAAoB,KAAI;AAC5C,YAAA,IAAI,KAAK,CAAC,WAAW,EAAE;gBACnB;YACJ;YACA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,KAAK,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE;gBACvF,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,YAAY,EAAE;gBACd;YACJ;AACJ,QAAA,CAAC;QACD,MAAM,YAAY,GAAG,MAAK;AACtB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC;AAC/D,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC;gBACvD,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;gBACvC,IAAI,OAAO,EAAE,EAAE;oBACX,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC;gBACjE;gBACA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC9B,QAAQ,IAAI,QAAQ,EAAE;AACtB,gBAAA,MAAM,KAAK,GAAG;AACV,oBAAA,QAAQ,EAAE;iBACb;AACD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,YAAY,GAAG,SAAS;YACjC;AACJ,QAAA,CAAC;AACD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,kBAAkB,CAAC;AAC5D,QAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,OAAO,YAAY;IACvB;IAsBA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAChB,QAAA,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;IAC5C;AACH;MAEY,oBAAoB,GAAG,CAAC,MAAc,EAAE,IAAY,KAAI;AACjE,IAAA,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AACzD,QAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAoB;QACrF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;AAC7C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE;QAC1C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjG,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAS;AACvD,QAAA,cAAc,CAAC,IAAI,GAAG,aAAa;AACnC,QAAA,OAAO,IAAI;IACf;AACA,IAAA,OAAO,IAAI;AACf;;ACtNO,MAAM,QAAQ,GAAG,CAAoC,KAAQ,KAAI;IACpE,MAAM,QAAQ,GAAG,KAA2B;IAE5C,QAAQ,CAAC,UAAU,GAAG,CAAC,SAAqC,EAAE,KAAgB,KAAI;AAC9E,QAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;AAC/D,IAAA,CAAC;AACD,IAAA,OAAO,QAAQ;AACnB;;ICRY;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAJW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;ACCd,MAAM,SAAS,GAAG,CAAoC,KAAQ,KAAI;IACrE,MAAM,QAAQ,GAAG,KAA4B;IAE7C,QAAQ,CAAC,WAAW,GAAG,CAAC,SAAqC,EAAE,KAAiB,KAAI;AAChF,QAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AAChE,IAAA,CAAC;AACD,IAAA,OAAO,QAAQ;AACnB;;ACfA;;AAEG;;ACFH;;AAEG;;;;"}