@a11y-ngx/overlay-base 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-ngx-overlay-base.umd.js","sources":["../../../../projects/a11y-ngx/overlay-base/src/lib/overlay-base.type.ts","../../../../projects/a11y-ngx/overlay-base/src/lib/overlay-base.errors.ts","../../../../projects/a11y-ngx/overlay-base/src/lib/overlay-base.abstract.ts","../../../../projects/a11y-ngx/overlay-base/src/a11y-ngx-overlay-base.ts"],"sourcesContent":["import { OverlayBaseRenderPosition } from './overlay-base.type.private';\r\n\r\nexport enum POSITION {\r\n TOP = 'top',\r\n BOTTOM = 'bottom',\r\n LEFT = 'left',\r\n RIGHT = 'right',\r\n}\r\n\r\nexport enum ALIGNMENT {\r\n START = 'start',\r\n END = 'end',\r\n CENTER = 'center',\r\n}\r\n\r\nexport enum POSITION_STRATEGY {\r\n FIXED = 'fixed',\r\n ABSOLUTE = 'absolute',\r\n}\r\n\r\nexport const OVERLAY_BASE_DEFAULTS: Required<Omit<OverlayBaseConfig, 'trigger' | 'boundary'>> = {\r\n offsetSize: 5,\r\n fluidAlignment: false,\r\n fluidSize: true,\r\n position: [POSITION.TOP, ALIGNMENT.CENTER] as OverlayBasePositionInput,\r\n positionStrategy: POSITION_STRATEGY.FIXED,\r\n positionsAllowed: [POSITION.TOP, POSITION.BOTTOM, POSITION.LEFT, POSITION.RIGHT],\r\n alignmentsAllowed: [ALIGNMENT.CENTER, ALIGNMENT.START, ALIGNMENT.END],\r\n safeSpace: { top: 0, bottom: 0, left: 0, right: 0 },\r\n allowScrollListener: true,\r\n};\r\n\r\nexport type OverlayBasePosition = `${POSITION}`;\r\n\r\nexport type OverlayBaseAlignment = `${ALIGNMENT}`;\r\n\r\nexport type OverlayBasePositionStrategy = `${POSITION_STRATEGY}`;\r\n\r\nexport type OverlayBaseSafeSpace = Partial<{ [key in POSITION]: number }>;\r\n\r\nexport type OverlayBaseMaxSize = Partial<{ width: number | null; height: number | null }>;\r\n\r\nexport type OverlayBasePositionInput =\r\n | OverlayBasePosition\r\n | `${POSITION}-${ALIGNMENT}`\r\n | [OverlayBasePosition, OverlayBaseAlignment];\r\n\r\nexport type OverlayBasePositionsAllowed = 'auto' | 'opposite' | string | OverlayBasePosition | OverlayBasePosition[];\r\n\r\nexport type OverlayBaseAlignmentsAllowed =\r\n | 'auto'\r\n | 'center'\r\n | 'edges'\r\n | string\r\n | OverlayBaseAlignment\r\n | OverlayBaseAlignment[];\r\n\r\nexport type OverlayBaseCalculatedPosition = {\r\n /** @description Returns the position (top, bottom, left, right). */\r\n position: OverlayBasePosition;\r\n /** @description Returns the alignment (start, end, center). */\r\n alignment: OverlayBaseAlignment;\r\n /** @description Returns the numeric value to position the overlay (top, bottom, left, right). */\r\n render: OverlayBaseRenderPosition;\r\n /** @description Returns the maximum size (width, height). */\r\n maxSize: OverlayBaseMaxSize;\r\n};\r\n\r\nexport type OverlayBaseConfig = Partial<{\r\n /** @description The trigger to which the overlay will be attached. */\r\n trigger: HTMLElement | DOMRect;\r\n /** @description To define a custom boundary, such as wrappers with established overflow. @default <body> */\r\n boundary: HTMLElement;\r\n /** @description The desired position and alignment. @default 'top-center' */\r\n position: OverlayBasePositionInput;\r\n /** @description Whether a `fixed` or `absolute` position will be used. @default 'fixed' */\r\n positionStrategy: OverlayBasePositionStrategy;\r\n /** @description To establish which positions are allowed when repositioning is needed. @default 'auto' */\r\n positionsAllowed: OverlayBasePositionsAllowed;\r\n /** @description To establish which alignments are allowed when repositioning is needed. @default 'auto' */\r\n alignmentsAllowed: OverlayBaseAlignmentsAllowed;\r\n /** @description The space between the overlay and its trigger (translated to pixels). @default 5 */\r\n offsetSize: number;\r\n /** @description To establish extra safe space to the viewport's edges in case some fixed areas are present. @default { top: 0, bottom: 0, left: 0, right: 0 } */\r\n safeSpace: OverlayBaseSafeSpace;\r\n /** @description To establish whether the overlay alignment will stick to the edges of the viewport/boundary. @default false */\r\n fluidAlignment: boolean;\r\n /** @description To establish whether the overlay size will adjust to the free space or stay as its original size. @default true */\r\n fluidSize: boolean;\r\n /** @description To allow listening for page scrolling. @default true */\r\n allowScrollListener: boolean;\r\n}>;\r\n","const formatConsoleMsg = (msg: string): string => msg.replace(/ {2,}/g, '');\r\n\r\nexport const ERROR_NO_TRIGGER_PROVIDED = (): string => {\r\n const msg: string = `\r\n A11y Overlay Base:\r\n No Trigger element or DOMRect provided!\r\n `;\r\n return formatConsoleMsg(msg);\r\n};\r\n","import { Subject, BehaviorSubject, Observable, from } from 'rxjs';\r\nimport { debounceTime, mergeAll, map } from 'rxjs/operators';\r\n\r\nimport {\r\n OverlayBasePositionX,\r\n OverlayBasePositionY,\r\n OverlayBaseRenderPosition,\r\n OverlayBaseAllowed,\r\n OverlayBaseSquareAreas,\r\n BoundaryData,\r\n ViewportSize,\r\n ScrollSize,\r\n} from './overlay-base.type.private';\r\n\r\nimport {\r\n OVERLAY_BASE_DEFAULTS as DEFAULTS,\r\n POSITION,\r\n ALIGNMENT,\r\n POSITION_STRATEGY,\r\n OverlayBaseConfig,\r\n OverlayBasePosition,\r\n OverlayBasePositionInput,\r\n OverlayBasePositionsAllowed,\r\n OverlayBaseAlignment,\r\n OverlayBaseAlignmentsAllowed,\r\n OverlayBasePositionStrategy,\r\n OverlayBaseCalculatedPosition,\r\n OverlayBaseSafeSpace,\r\n OverlayBaseMaxSize,\r\n} from './overlay-base.type';\r\n\r\nimport { ERROR_NO_TRIGGER_PROVIDED } from './overlay-base.errors';\r\n\r\nlet uid: number = 0;\r\n\r\nexport abstract class OverlayBase {\r\n readonly uid: number = uid++;\r\n readonly overlayConfig: OverlayBaseConfig = {};\r\n\r\n private overlayMainElement!: HTMLElement;\r\n\r\n triggerRect!: DOMRect;\r\n virtualTriggerRect!: DOMRect;\r\n overlayRect!: DOMRect;\r\n overlayOriginalRect!: DOMRect;\r\n boundaryRect: DOMRect = new DOMRect(0, 0, this.viewportSize.width, this.viewportSize.height);\r\n\r\n isDetached$!: Subject<void>;\r\n private isAttached: boolean = false;\r\n private forceUpdate$!: BehaviorSubject<void | undefined>;\r\n\r\n private resize$: Subject<void> = new Subject<void>();\r\n private resizeFn = (): void => this.resize$.next();\r\n\r\n private scroll$: Subject<void> = new Subject<void>();\r\n private scrollFn = (): void => this.scroll$.next();\r\n\r\n private boundaryScroll$: Subject<void> = new Subject<void>();\r\n private boundaryScrollFn = (): void => this.boundaryScroll$.next();\r\n\r\n /**\r\n * @description\r\n * Allowed Positions & Alignments provided by the user.\r\n */\r\n private allowed: OverlayBaseAllowed = {\r\n positions: DEFAULTS.positionsAllowed as OverlayBasePosition[],\r\n alignments: DEFAULTS.alignmentsAllowed as OverlayBaseAlignment[],\r\n };\r\n private allowedOpposite!: boolean;\r\n\r\n /**\r\n * @description\r\n * An array of the listeners (for repositioning purposes).\r\n */\r\n private listeners: Subject<void>[] = [];\r\n\r\n /**\r\n * @description\r\n * To allow listening on page scrolling for repositioning.\r\n */\r\n private allowScrollListener: boolean = true;\r\n\r\n /**\r\n * @description\r\n * Max `width` & `height` values allowed for the Overlay to perform\r\n * proper calculations in case `fluidSize` is active.\r\n */\r\n readonly maxSize: OverlayBaseMaxSize = {\r\n width: null,\r\n height: null,\r\n };\r\n\r\n /**\r\n * @description\r\n * Scrollbar size (`vertical` & `horizontal`) for a given custom Boundary.\r\n */\r\n private boundaryScrollSize!: ScrollSize;\r\n\r\n /**\r\n * @description\r\n * The Viewport size (without the scrollbars into consideration).\r\n */\r\n get viewportSize(): ViewportSize {\r\n return {\r\n width: document.documentElement.clientWidth,\r\n height: document.documentElement.clientHeight,\r\n };\r\n }\r\n\r\n /**\r\n * @description\r\n * The Viewport safe size.\r\n * This will return width/height values taking into consideration a given custom Boundary and/or Safe Space.\r\n */\r\n get viewportSizeSafe(): ViewportSize {\r\n return this.viewportSafe;\r\n }\r\n private viewportSafe!: ViewportSize;\r\n\r\n /**\r\n * @description\r\n * The chosen Position by the calculations.\r\n */\r\n get getCurrentPosition(): OverlayBasePosition {\r\n return this.currentPosition;\r\n }\r\n private currentPosition!: OverlayBasePosition;\r\n private desiredPosition!: OverlayBasePosition;\r\n\r\n /**\r\n * @description\r\n * The chosen Alignment by the calculations.\r\n */\r\n get getCurrentAlignment(): OverlayBaseAlignment {\r\n return this.currentAlignment;\r\n }\r\n private currentAlignment!: OverlayBaseAlignment;\r\n private desiredAlignment!: OverlayBaseAlignment;\r\n\r\n /**\r\n * @description\r\n * This will provide the side of the Viewport/Boundary where the Overlay would be out of\r\n * in case `fluidAlignment` is active and the Overlay, by the chosen alignment, is out of the visible area.\r\n */\r\n overlayOutside: OverlayBasePosition | undefined = undefined;\r\n\r\n /**\r\n * @description\r\n * Checks that either TOP or BOTTOM positions are inside or outside the visible area.\r\n *\r\n * @param { number } valueTop - The numeric value for TOP position.\r\n * @param { number } valueBottom - The numeric value for BOTTOM position.\r\n */\r\n private overlayOutsideCheckY(valueTop: number, valueBottom: number): void {\r\n this.overlayOutside = valueTop < 0 ? POSITION.TOP : valueBottom < 0 ? POSITION.BOTTOM : undefined;\r\n }\r\n\r\n /**\r\n * @description\r\n * Checks that either LEFT or RIGHT positions are inside or outside the visible area.\r\n *\r\n * @param { number } valueLeft - The numeric value for LEFT position.\r\n * @param { number } valueRight - The numeric value for RIGHT position.\r\n */\r\n private overlayOutsideCheckX(valueLeft: number, valueRight: number): void {\r\n this.overlayOutside = valueLeft < 0 ? POSITION.LEFT : valueRight < 0 ? POSITION.RIGHT : undefined;\r\n }\r\n\r\n /**\r\n * @description\r\n * Boundary information such as position (top, bottom, left, right) & size (width, height).\r\n */\r\n private boundaryData!: BoundaryData;\r\n\r\n /**\r\n * @description\r\n * The Trigger element to which the Overlay will be attached to.\r\n */\r\n get triggerElement(): HTMLElement {\r\n return this.overlayConfig.trigger as HTMLElement;\r\n }\r\n set triggerElement(triggerElement: HTMLElement) {\r\n this.overlayConfig.trigger = triggerElement as HTMLElement;\r\n }\r\n\r\n /**\r\n * @description\r\n * The Overlay element.\r\n */\r\n get overlayElement(): HTMLElement {\r\n return this.overlayMainElement;\r\n }\r\n set overlayElement(overlayElement: HTMLElement) {\r\n const overlayInnerElement: HTMLDivElement = overlayElement?.querySelector(\r\n '[overlay-wrapper]'\r\n ) as HTMLDivElement;\r\n\r\n this.overlayMainElement = (overlayInnerElement || overlayElement) as HTMLElement;\r\n }\r\n\r\n /**\r\n * @description\r\n * Process and save the desired position & alignment.\r\n */\r\n private set overlayPosition(position: OverlayBasePositionInput) {\r\n const defaultValues = DEFAULTS.position as [OverlayBasePosition, OverlayBaseAlignment];\r\n\r\n if (!position) position = [undefined, undefined] as unknown as OverlayBasePositionInput;\r\n\r\n if (typeof position === 'string') {\r\n position = position.split('-').map((pos) => pos.toLowerCase().trim()) as [\r\n OverlayBasePosition,\r\n OverlayBaseAlignment\r\n ];\r\n }\r\n\r\n if (!position[0]) position[0] = this.desiredPosition ?? this.allowed.positions[0] ?? defaultValues[0];\r\n if (!position[1]) position[1] = this.desiredAlignment ?? this.allowed.alignments[0] ?? defaultValues[1];\r\n\r\n const isValidPosition: boolean = this.isValidPosition(position[0]) && this.isPositionAllowed(position[0]);\r\n this.desiredPosition = isValidPosition ? position[0] : this.allowed.positions[0] ?? POSITION.TOP;\r\n\r\n const isValidAlignment: boolean = this.isValidAlignment(position[1]) && this.isAlignmentAllowed(position[1]);\r\n const defaultAlignment: OverlayBaseAlignment = this.isAlignmentCenterAllowed\r\n ? ALIGNMENT.CENTER\r\n : ALIGNMENT.START;\r\n\r\n this.desiredAlignment = isValidAlignment ? position[1] : this.allowed.alignments[0] ?? defaultAlignment;\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if the given position is a valid value.\r\n *\r\n * @param { string } position - A given position (top, bottom, left, right).\r\n * @returns { boolean }\r\n */\r\n private isValidPosition(position: OverlayBasePosition): boolean {\r\n return Object.values(POSITION).includes(position as POSITION);\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if the given alignment is a valid value.\r\n *\r\n * @param { string } alignment - A given alignment (start, center, end).\r\n * @returns { boolean }\r\n */\r\n private isValidAlignment(alignment: OverlayBaseAlignment): boolean {\r\n return Object.values(ALIGNMENT).includes(alignment as ALIGNMENT);\r\n }\r\n\r\n /**\r\n * @description\r\n * The position strategy to use (Fixed or Absolute).\r\n */\r\n get positionStrategy(): OverlayBasePositionStrategy {\r\n return (this.overlayConfig.positionStrategy ?? DEFAULTS.positionStrategy) as OverlayBasePositionStrategy;\r\n }\r\n set positionStrategy(positionStrategy: OverlayBasePositionStrategy) {\r\n positionStrategy = positionStrategy?.toLowerCase().trim() as POSITION_STRATEGY;\r\n this.overlayConfig.positionStrategy = Object.values(POSITION_STRATEGY).includes(\r\n positionStrategy as POSITION_STRATEGY\r\n )\r\n ? positionStrategy\r\n : DEFAULTS.positionStrategy;\r\n }\r\n\r\n /**\r\n * @description\r\n * Sets the allowed positions.\r\n */\r\n private set positionsAllowed(allowed: OverlayBasePositionsAllowed) {\r\n if (typeof allowed === 'string') allowed = allowed.split(',') as OverlayBasePosition[];\r\n\r\n allowed = allowed\r\n .map((position) => position.toLowerCase().trim() as OverlayBasePosition)\r\n .filter(this.isValidPosition) as OverlayBasePosition[];\r\n\r\n this.allowed.positions = allowed.length\r\n ? (allowed as OverlayBasePosition[])\r\n : (DEFAULTS.positionsAllowed as OverlayBasePosition[]);\r\n }\r\n\r\n /**\r\n * @description\r\n * Sets the allowed opposite positions.\r\n */\r\n private set oppositePositionsAllowed(position: OverlayBasePositionInput | undefined) {\r\n position = position ?? this.desiredPosition ?? DEFAULTS.position;\r\n\r\n if (typeof position === 'string') position = position.split('-') as [OverlayBasePosition, OverlayBaseAlignment];\r\n if (!this.isValidPosition(position[0])) position[0] = this.desiredPosition ?? POSITION.TOP;\r\n\r\n const opposites: { [key in POSITION]: POSITION } = {\r\n top: POSITION.BOTTOM,\r\n bottom: POSITION.TOP,\r\n left: POSITION.RIGHT,\r\n right: POSITION.LEFT,\r\n };\r\n this.allowed.positions = [position[0], opposites[position[0]]];\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if the given position is allowed.\r\n *\r\n * @param { string } position - A given position (top, bottom, left, right).\r\n * @returns { boolean }\r\n */\r\n private isPositionAllowed(position: OverlayBasePosition): boolean {\r\n return this.allowed.positions.includes(position);\r\n }\r\n\r\n /**\r\n * @description\r\n * Sets the allowed alignments.\r\n */\r\n private set alignmentsAllowed(allowed: OverlayBaseAlignmentsAllowed) {\r\n if (allowed === 'edges') {\r\n this.allowed.alignments = [ALIGNMENT.START, ALIGNMENT.END];\r\n } else if (allowed === 'center' && this.fluidAlignment) {\r\n this.allowed.alignments = [ALIGNMENT.CENTER];\r\n } else {\r\n if (typeof allowed === 'string') allowed = allowed.split(',') as OverlayBaseAlignment[];\r\n\r\n allowed = allowed\r\n .map((alignment) => alignment.toLowerCase().trim() as OverlayBaseAlignment)\r\n .filter(this.isValidAlignment) as OverlayBaseAlignment[];\r\n\r\n this.allowed.alignments = allowed.length\r\n ? (allowed as OverlayBaseAlignment[])\r\n : (DEFAULTS.alignmentsAllowed as OverlayBaseAlignment[]);\r\n }\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if the given alignment is allowed.\r\n *\r\n * @param { string } alignment - A given alignment (start, center, end).\r\n * @returns { boolean }\r\n */\r\n private isAlignmentAllowed(alignment: OverlayBaseAlignment): boolean {\r\n return this.allowed.alignments.includes(alignment);\r\n }\r\n private get isAlignmentStartAllowed(): boolean {\r\n return this.isAlignmentAllowed(ALIGNMENT.START);\r\n }\r\n private get isAlignmentCenterAllowed(): boolean {\r\n return this.isAlignmentAllowed(ALIGNMENT.CENTER);\r\n }\r\n private get isAlignmentEndAllowed(): boolean {\r\n return this.isAlignmentAllowed(ALIGNMENT.END);\r\n }\r\n private get isAlignmentCenterOnly(): boolean {\r\n return this.allowed.alignments.length === 1 && this.allowed.alignments[0] === ALIGNMENT.CENTER;\r\n }\r\n private get isDesiredAlignmentStart(): boolean {\r\n return this.desiredAlignment === ALIGNMENT.START;\r\n }\r\n private get isDesiredAlignmentCenter(): boolean {\r\n return this.desiredAlignment === ALIGNMENT.CENTER;\r\n }\r\n private get isDesiredAlignmentEnd(): boolean {\r\n return this.desiredAlignment === ALIGNMENT.END;\r\n }\r\n\r\n /**\r\n * @description\r\n * Sets a custom Boundary element.\r\n *\r\n * @default <body>\r\n */\r\n get boundaryElement(): HTMLElement {\r\n return this.overlayConfig.boundary ?? document.body;\r\n }\r\n set boundaryElement(boundaryElement: HTMLElement) {\r\n this.overlayConfig.boundary = boundaryElement instanceof HTMLElement ? boundaryElement : document.body;\r\n }\r\n\r\n /**\r\n * @description\r\n * Checks if the Boundary is the `<body>` or not (custom).\r\n */\r\n private get isBoundaryCustom(): boolean {\r\n return this.boundaryElement.tagName !== 'BODY';\r\n }\r\n\r\n /**\r\n * @description\r\n * Considers an extra (safe) space for the Viewport.\r\n */\r\n get safeSpace(): OverlayBaseSafeSpace {\r\n return this.overlayConfig.safeSpace ?? DEFAULTS.safeSpace;\r\n }\r\n set safeSpace(safeSpace: OverlayBaseSafeSpace) {\r\n this.overlayConfig.safeSpace = { ...DEFAULTS.safeSpace, ...(safeSpace || {}) } as OverlayBaseSafeSpace;\r\n }\r\n\r\n /**\r\n * @description\r\n * Distance between Trigger & Overlay.\r\n */\r\n get offsetSize(): number {\r\n return this.overlayConfig.offsetSize ?? DEFAULTS.offsetSize;\r\n }\r\n set offsetSize(offsetSize: number) {\r\n this.overlayConfig.offsetSize = this.getNumericValue(offsetSize) ?? undefined;\r\n }\r\n\r\n /**\r\n * @description\r\n * Overlay alignment is fluid, it doesn't make jumps between Start, Center or End.\r\n * The Overlay will stick to the edges of the Viewport/Boundary when reaches any of them.\r\n */\r\n get fluidAlignment(): boolean {\r\n return !!this.overlayConfig.fluidAlignment;\r\n }\r\n set fluidAlignment(fluidAlignment: boolean) {\r\n this.overlayConfig.fluidAlignment = fluidAlignment;\r\n }\r\n\r\n /**\r\n * @description\r\n * Overlay size is fluid, it will adapt its width (for `left`/`right` positions) or\r\n * height (for `top`/`bottom` positions) to the available free space.\r\n *\r\n * Hand in hand with this, would be good to establish `maxSize` values.\r\n */\r\n get fluidSize(): boolean {\r\n return this.overlayConfig.fluidSize ?? DEFAULTS.fluidSize;\r\n }\r\n set fluidSize(fluidSize: boolean) {\r\n this.overlayConfig.fluidSize = fluidSize;\r\n }\r\n\r\n get isTop(): boolean {\r\n return this.currentPosition === POSITION.TOP;\r\n }\r\n get isBottom(): boolean {\r\n return this.currentPosition === POSITION.BOTTOM;\r\n }\r\n get isLeft(): boolean {\r\n return this.currentPosition === POSITION.LEFT;\r\n }\r\n get isRight(): boolean {\r\n return this.currentPosition === POSITION.RIGHT;\r\n }\r\n\r\n get isStart(): boolean {\r\n return this.currentAlignment === ALIGNMENT.START;\r\n }\r\n get isCenter(): boolean {\r\n return this.currentAlignment === ALIGNMENT.CENTER;\r\n }\r\n get isEnd(): boolean {\r\n return this.currentAlignment === ALIGNMENT.END;\r\n }\r\n\r\n get isTopBottom(): boolean {\r\n return this.isTop || this.isBottom;\r\n }\r\n\r\n /**\r\n * @description\r\n * Distance between Trigger & Overlay.\r\n */\r\n private get triggerOverlayDistance(): number {\r\n return this.offsetSize;\r\n }\r\n\r\n /**\r\n * @description\r\n * Real Width difference between Trigger & Overlay.\r\n *\r\n * Positive value means the Overlay is wider than the Trigger.\r\n */\r\n private get triggerOverlayDifferenceWidth(): number {\r\n return this.overlayRect.width - this.triggerRect.width;\r\n }\r\n\r\n /**\r\n * @description\r\n * Real Height difference between Trigger & Overlay.\r\n *\r\n * Positive value means the Overlay is higher than the Trigger.\r\n */\r\n private get triggerOverlayDifferenceHeight(): number {\r\n return this.overlayRect.height - this.triggerRect.height;\r\n }\r\n\r\n /**\r\n * @description\r\n * Original Width difference between Trigger & Overlay.\r\n *\r\n * Positive value means the Overlay is wider than the Trigger.\r\n */\r\n private get triggerOverlayOriginalDifferenceWidth(): number {\r\n return this.overlayOriginalRect.width - this.triggerRect.width;\r\n }\r\n\r\n /**\r\n * @description\r\n * Original Height difference between Trigger & Overlay.\r\n *\r\n * Positive value means the Overlay is higher than the Trigger.\r\n */\r\n private get triggerOverlayOriginalDifferenceHeight(): number {\r\n return this.overlayOriginalRect.height - this.triggerRect.height;\r\n }\r\n\r\n /**\r\n * @description\r\n * Distance between Boundary & Viewport for the given Position.\r\n *\r\n * @param { OverlayBasePosition } position - A given position (top, bottom, left, right).\r\n * @returns { number } The number of pixels between both elements.\r\n */\r\n private boundaryViewportDistance(position: OverlayBasePosition): number {\r\n const boundarySide: number = this.boundaryData[position];\r\n if (position === POSITION.TOP || position === POSITION.LEFT) return boundarySide;\r\n if (position === POSITION.BOTTOM) return this.viewportSize.height - boundarySide;\r\n return this.viewportSize.width - boundarySide; // right\r\n }\r\n\r\n /**\r\n * @description\r\n * Distance between Trigger & Boundary for the given Position.\r\n * This will take into consideration a given custom Boundary and/or Safe Space.\r\n *\r\n * @param { OverlayBasePosition } position - A given position (top, bottom, left, right).\r\n * @returns { number } The number of pixels between both elements.\r\n */\r\n triggerBoundaryDistance(position: OverlayBasePosition): number {\r\n const safeSpace: number = this.isBoundaryCustom\r\n ? Math.min(this.boundaryViewportDistance(position) - Number(this.safeSpace[position]), 0) * -1\r\n : Number(this.safeSpace[position]);\r\n const triggerPos: number = this.triggerRect[position];\r\n const boundaryPos: number = this.boundaryData[position];\r\n const distance: number =\r\n position === POSITION.TOP || position === POSITION.LEFT\r\n ? triggerPos - boundaryPos\r\n : boundaryPos - triggerPos;\r\n return distance - safeSpace;\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if there is enough vertical/horizontal available space for the Overlay to fit.\r\n */\r\n private enoughAlignmentSpace(position: OverlayBasePosition): boolean {\r\n const isTopBottom: boolean = position === POSITION.TOP || position === POSITION.BOTTOM;\r\n return isTopBottom ? this.overlayFitsHorizontally : this.overlayFitsVertically;\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if there is enough horizontal available space (horizontal scrolling)\r\n * for the Overlay to fit.\r\n */\r\n private get overlayFitsHorizontally(): boolean {\r\n const triggerOverlayDifferenceWidth: number = this.triggerOverlayOriginalDifferenceWidth;\r\n const distanceLeft: number = this.triggerBoundaryDistance(POSITION.LEFT);\r\n const distanceRight: number = this.triggerBoundaryDistance(POSITION.RIGHT);\r\n\r\n if (triggerOverlayDifferenceWidth >= 0) {\r\n return (distanceLeft >= 0 && distanceRight >= 0) || this.allowedOpposite;\r\n }\r\n\r\n const overlayTriggerDiff: number = triggerOverlayDifferenceWidth * -1;\r\n const overlayTriggerDiffHalf: number = overlayTriggerDiff / 2;\r\n\r\n const canBeStart: boolean = distanceLeft > 0 && distanceRight + overlayTriggerDiff > 0;\r\n const canBeCenter: boolean =\r\n distanceLeft + overlayTriggerDiffHalf > 0 && distanceRight + overlayTriggerDiffHalf > 0;\r\n const canBeEnd: boolean = distanceLeft + overlayTriggerDiff > 0 && distanceRight > 0;\r\n\r\n const fitsHorizontally: boolean =\r\n (this.isAlignmentStartAllowed && canBeStart) ||\r\n (this.isAlignmentCenterAllowed && canBeCenter) ||\r\n (this.isAlignmentEndAllowed && canBeEnd);\r\n\r\n return fitsHorizontally || this.allowedOpposite;\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if there is enough vertical available space (vertical scrolling)\r\n * for the Overlay to fit.\r\n */\r\n private get overlayFitsVertically(): boolean {\r\n const triggerOverlayDifferenceHeight: number = this.triggerOverlayOriginalDifferenceHeight;\r\n const distanceTop: number = this.triggerBoundaryDistance(POSITION.TOP);\r\n const distanceBottom: number = this.triggerBoundaryDistance(POSITION.BOTTOM);\r\n\r\n if (triggerOverlayDifferenceHeight >= 0) {\r\n return (distanceTop >= 0 && distanceBottom >= 0) || this.allowedOpposite;\r\n }\r\n\r\n const overlayTriggerDiff: number = triggerOverlayDifferenceHeight * -1;\r\n const overlayTriggerDiffHalf: number = overlayTriggerDiff / 2;\r\n\r\n const canBeStart: boolean = distanceTop > 0 && distanceBottom + overlayTriggerDiff > 0;\r\n const canBeCenter: boolean =\r\n distanceTop + overlayTriggerDiffHalf > 0 && distanceBottom + overlayTriggerDiffHalf > 0;\r\n const canBeEnd: boolean = distanceTop + overlayTriggerDiff > 0 && distanceBottom > 0;\r\n\r\n const fitsVertically: boolean =\r\n (this.isAlignmentStartAllowed && canBeStart) ||\r\n (this.isAlignmentCenterAllowed && canBeCenter) ||\r\n (this.isAlignmentEndAllowed && canBeEnd);\r\n\r\n return fitsVertically || this.allowedOpposite;\r\n }\r\n\r\n /**\r\n * @description\r\n * Verifies if there is enough free space at the given position for the Overlay to fit.\r\n *\r\n * @param { OverlayBasePosition } position - A given position (top, bottom, left, right).\r\n * @returns { boolean }\r\n */\r\n private enoughBoundarySpace(position: OverlayBasePosition): boolean {\r\n let enoughSpace: number = this.triggerBoundaryDistance(position);\r\n\r\n if (position === POSITION.TOP || position === POSITION.BOTTOM) {\r\n enoughSpace -= this.overlayOriginalRect.height + this.triggerOverlayDistance;\r\n } else {\r\n enoughSpace -= this.overlayOriginalRect.width + this.triggerOverlayDistance;\r\n }\r\n\r\n return enoughSpace - 2 >= 0;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns if the given Position is allowed and has enough space for the Overlay to fit.\r\n */\r\n private canPositionAt(position: OverlayBasePosition): OverlayBasePosition | undefined {\r\n const canPositionAt: boolean =\r\n this.isPositionAllowed(position) &&\r\n this.enoughBoundarySpace(position) &&\r\n this.enoughAlignmentSpace(position);\r\n return canPositionAt ? position : undefined;\r\n }\r\n\r\n /**\r\n * @description\r\n * Calculates and returns the vertical alignment (for `left`/`right` positions).\r\n */\r\n private get getAlignmentVertically(): OverlayBaseAlignment {\r\n let overlayTriggerDiff: number = this.triggerOverlayOriginalDifferenceHeight;\r\n let overlayTriggerDiffHalf: number = overlayTriggerDiff / 2;\r\n\r\n if (this.fluidAlignment && overlayTriggerDiff > 0) return this.desiredAlignment;\r\n\r\n const distanceTop = this.triggerBoundaryDistance(POSITION.TOP);\r\n const distanceBottom = this.triggerBoundaryDistance(POSITION.BOTTOM);\r\n\r\n let canBeStart!: boolean;\r\n let canBeCentered!: boolean;\r\n let canBeEnd!: boolean;\r\n\r\n if (overlayTriggerDiff > 0) {\r\n // Overlay is higher than Trigger\r\n const topSpaceCentered = distanceTop - overlayTriggerDiffHalf > 0 ? distanceTop : 0;\r\n const bottomSpaceCentered = distanceBottom - overlayTriggerDiffHalf > 0 ? distanceBottom : 0;\r\n\r\n canBeStart = overlayTriggerDiff <= bottomSpaceCentered;\r\n canBeCentered = overlayTriggerDiffHalf <= topSpaceCentered && overlayTriggerDiffHalf <= bottomSpaceCentered;\r\n canBeEnd = overlayTriggerDiff <= topSpaceCentered;\r\n } else {\r\n // Overlay is shorter than Trigger\r\n overlayTriggerDiff = overlayTriggerDiff * -1;\r\n overlayTriggerDiffHalf = overlayTriggerDiffHalf * -1;\r\n canBeStart = distanceTop > 0 && distanceBottom + overlayTriggerDiff > 0;\r\n canBeCentered = distanceTop + overlayTriggerDiffHalf > 0 && distanceBottom + overlayTriggerDiffHalf > 0;\r\n canBeEnd = distanceTop + overlayTriggerDiff > 0 && distanceBottom > 0;\r\n }\r\n\r\n return this.getFinalAlignment(distanceTop, canBeCentered, canBeStart, canBeEnd);\r\n }\r\n\r\n /**\r\n * @description\r\n * Calculates and return the horizontal alignment (for `top`/`bottom` positions).\r\n */\r\n private get getAlignmentHorizontally(): OverlayBaseAlignment {\r\n let overlayTriggerDiff: number = this.triggerOverlayOriginalDifferenceWidth;\r\n let overlayTriggerDiffHalf: number = overlayTriggerDiff / 2;\r\n\r\n if (this.fluidAlignment && overlayTriggerDiff > 0) return this.desiredAlignment;\r\n\r\n const distanceLeft = this.triggerBoundaryDistance(POSITION.LEFT);\r\n const distanceRight = this.triggerBoundaryDistance(POSITION.RIGHT);\r\n\r\n let canBeStart!: boolean;\r\n let canBeCentered!: boolean;\r\n let canBeEnd!: boolean;\r\n\r\n if (overlayTriggerDiff > 0) {\r\n // Overlay is wider than Trigger\r\n const leftSpaceCentered = distanceLeft - overlayTriggerDiffHalf > 0 ? distanceLeft : 0;\r\n const rightSpaceCentered = distanceRight - overlayTriggerDiffHalf > 0 ? distanceRight : 0;\r\n\r\n canBeStart = overlayTriggerDiff <= rightSpaceCentered;\r\n canBeCentered = overlayTriggerDiffHalf <= leftSpaceCentered && overlayTriggerDiffHalf <= rightSpaceCentered;\r\n canBeEnd = overlayTriggerDiff <= leftSpaceCentered;\r\n } else {\r\n // Overlay is narrower than Trigger\r\n overlayTriggerDiff = overlayTriggerDiff * -1;\r\n overlayTriggerDiffHalf = overlayTriggerDiffHalf * -1;\r\n\r\n canBeStart = distanceLeft > 0 && distanceRight + overlayTriggerDiff > 0;\r\n canBeCentered = distanceLeft + overlayTriggerDiffHalf > 0 && distanceRight + overlayTriggerDiffHalf > 0;\r\n canBeEnd = distanceLeft + overlayTriggerDiff > 0 && distanceRight > 0;\r\n }\r\n\r\n return this.getFinalAlignment(distanceLeft, canBeCentered, canBeStart, canBeEnd);\r\n }\r\n\r\n /**\r\n * @description\r\n * Calculates the right alignment based on the\r\n *\r\n * @param { number } distance - The main distance (`top` for vertical alignment, `left` for horizontal alignment).\r\n * @param { boolean } canBeCentered - If the Overlay can be aligned to the center.\r\n * @param { boolean } canBeStart - If the Overlay can be aligned to the start.\r\n * @param { boolean } canBeEnd - If the Overlay can be aligned to the end.\r\n * @returns { OverlayBaseAlignment } The alignment.\r\n */\r\n private getFinalAlignment(\r\n distance: number,\r\n canBeCentered: boolean,\r\n canBeStart: boolean,\r\n canBeEnd: boolean\r\n ): OverlayBaseAlignment {\r\n const isAlignmentStartAllowed: boolean = this.isAlignmentStartAllowed;\r\n const isAlignmentCenterAllowed: boolean = this.isAlignmentCenterAllowed;\r\n const isAlignmentEndAllowed: boolean = this.isAlignmentEndAllowed;\r\n const isDesiredAllowedAlignmentStart: boolean = isAlignmentStartAllowed && this.isDesiredAlignmentStart;\r\n const isDesiredAllowedAlignmentCenter: boolean = isAlignmentCenterAllowed && this.isDesiredAlignmentCenter;\r\n const isDesiredAllowedAlignmentEnd: boolean = isAlignmentEndAllowed && this.isDesiredAlignmentEnd;\r\n\r\n // Check for desired alignment\r\n if (isDesiredAllowedAlignmentCenter && canBeCentered) return ALIGNMENT.CENTER;\r\n if (isDesiredAllowedAlignmentStart && canBeStart) return ALIGNMENT.START;\r\n if (isDesiredAllowedAlignmentEnd && canBeEnd) return ALIGNMENT.END;\r\n\r\n // Check for allowed alignment\r\n if (isAlignmentCenterAllowed && canBeCentered) return ALIGNMENT.CENTER;\r\n if (isAlignmentStartAllowed && canBeStart) return ALIGNMENT.START;\r\n if (isAlignmentEndAllowed && canBeEnd) return ALIGNMENT.END;\r\n\r\n // Check for which edge has more free space\r\n if (!isAlignmentCenterAllowed && isAlignmentStartAllowed && isAlignmentEndAllowed) {\r\n return distance > 0 ? ALIGNMENT.START : ALIGNMENT.END;\r\n }\r\n\r\n // Check the defaults\r\n if (isAlignmentStartAllowed && !isAlignmentEndAllowed && !isAlignmentCenterAllowed) return ALIGNMENT.START;\r\n if (isAlignmentEndAllowed && !isAlignmentStartAllowed && !isAlignmentCenterAllowed) return ALIGNMENT.END;\r\n\r\n return ALIGNMENT.CENTER;\r\n }\r\n\r\n /**\r\n * @description\r\n * Calculates maximum size (`width` or `height`) in case the overlay does not fit in the screen.\r\n */\r\n private get getMaxSize(): OverlayBaseMaxSize {\r\n const maxSize: OverlayBaseMaxSize = { width: null, height: null };\r\n\r\n if (this.fluidSize) {\r\n const size: number = this.triggerBoundaryDistance(this.currentPosition) - this.triggerOverlayDistance;\r\n\r\n if (this.isTopBottom) {\r\n maxSize.height = Math.min(this.maxSize.height || Infinity, size);\r\n } else {\r\n maxSize.width = Math.min(this.maxSize.width || Infinity, size);\r\n }\r\n }\r\n\r\n return maxSize;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the final Position, Alignment, Render and MaxSize.\r\n */\r\n private get getCalculatedPosition(): OverlayBaseCalculatedPosition {\r\n this.getElementsSizeInfo();\r\n\r\n const isPositionFixed: boolean = this.positionStrategy === POSITION_STRATEGY.FIXED;\r\n\r\n const position: OverlayBasePosition = this.getPosition;\r\n this.currentPosition = position;\r\n\r\n const alignment: OverlayBaseAlignment = this.getAlignment;\r\n this.currentAlignment = alignment;\r\n\r\n const render: OverlayBaseRenderPosition = {\r\n ...(isPositionFixed ? this.getFixedY : this.getAbsoluteY),\r\n ...(isPositionFixed ? this.getFixedX : this.getAbsoluteX),\r\n };\r\n\r\n const maxSize: OverlayBaseMaxSize = this.getMaxSize;\r\n\r\n return { position, alignment, render, maxSize };\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the Overlay's `top` or `bottom` render Position/Alignment for the Strategy FIXED.\r\n */\r\n private get getFixedY(): OverlayBasePositionY {\r\n const posY: OverlayBasePositionY = { top: null, bottom: null };\r\n\r\n if (this.isTop) {\r\n posY.bottom = this.viewportSize.height - this.triggerRect.top + this.triggerOverlayDistance;\r\n } else if (this.isBottom) {\r\n posY.top = this.triggerRect.bottom + this.triggerOverlayDistance;\r\n } else {\r\n const triggerOverlayDifferenceHeight = this.triggerOverlayDifferenceHeight;\r\n const triggerOverlayDifferenceHalf = triggerOverlayDifferenceHeight / 2;\r\n\r\n // Fluid Alignment only works for Overlays that are higher than the Trigger\r\n if (this.fluidAlignment && triggerOverlayDifferenceHeight > 0) {\r\n const distanceTop: number = this.triggerBoundaryDistance(POSITION.TOP);\r\n const distanceBottom: number = this.triggerBoundaryDistance(POSITION.BOTTOM);\r\n let overlayTop!: number;\r\n let posTop!: number;\r\n let posBottom!: number;\r\n\r\n if (this.isAlignmentCenterOnly || (this.isAlignmentCenterAllowed && this.isCenter)) {\r\n overlayTop = distanceTop - triggerOverlayDifferenceHalf;\r\n posTop = this.triggerRect.top - triggerOverlayDifferenceHalf;\r\n posBottom = distanceBottom - triggerOverlayDifferenceHalf;\r\n } else if (this.isStart) {\r\n overlayTop = distanceTop;\r\n posTop = this.triggerRect.top;\r\n posBottom = distanceBottom - triggerOverlayDifferenceHeight;\r\n } else if (this.isEnd) {\r\n overlayTop = distanceTop - triggerOverlayDifferenceHeight;\r\n posTop = this.triggerRect.top - triggerOverlayDifferenceHeight;\r\n posBottom = distanceBottom;\r\n }\r\n\r\n this.overlayOutsideCheckY(overlayTop, posBottom);\r\n\r\n if (posBottom > 0) {\r\n posY.top = Math.max(\r\n posTop,\r\n this.boundaryViewportDistance(POSITION.TOP),\r\n Number(this.safeSpace.top)\r\n );\r\n } else {\r\n posY.bottom = Math.max(\r\n posBottom,\r\n this.boundaryViewportDistance(POSITION.BOTTOM),\r\n Number(this.safeSpace.bottom)\r\n );\r\n }\r\n } else {\r\n if (this.isStart) {\r\n posY.top = this.triggerRect.top;\r\n } else if (this.isEnd) {\r\n posY.bottom = this.viewportSize.height - this.triggerRect.bottom;\r\n } else {\r\n posY.top = this.triggerRect.top - triggerOverlayDifferenceHalf;\r\n }\r\n }\r\n }\r\n\r\n return posY;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the Overlay's `left` or `right` render Position/Alignment for the Strategy FIXED.\r\n */\r\n private get getFixedX(): OverlayBasePositionX {\r\n const posX: OverlayBasePositionX = { left: null, right: null };\r\n\r\n if (this.isLeft) {\r\n posX.right = this.viewportSize.width - this.triggerRect.left + this.triggerOverlayDistance;\r\n } else if (this.isRight) {\r\n posX.left = this.triggerRect.right + this.triggerOverlayDistance;\r\n } else {\r\n const triggerOverlayDifferenceWidth = this.triggerOverlayDifferenceWidth;\r\n const triggerOverlayDifferenceHalf = triggerOverlayDifferenceWidth / 2;\r\n\r\n // Fluid Alignment only works for Overlays that are wider than the Trigger\r\n if (this.fluidAlignment && triggerOverlayDifferenceWidth > 0) {\r\n const distanceLeft: number = this.triggerBoundaryDistance(POSITION.LEFT);\r\n const distanceRight: number = this.triggerBoundaryDistance(POSITION.RIGHT);\r\n let overlayLeft!: number;\r\n let posLeft!: number;\r\n let posRight!: number;\r\n\r\n if (this.isAlignmentCenterOnly || (this.isAlignmentCenterAllowed && this.isCenter)) {\r\n overlayLeft = distanceLeft - triggerOverlayDifferenceHalf;\r\n posLeft = this.triggerRect.left - triggerOverlayDifferenceHalf;\r\n posRight = distanceRight - triggerOverlayDifferenceHalf;\r\n } else if (this.isStart) {\r\n overlayLeft = distanceLeft;\r\n posLeft = this.triggerRect.left;\r\n posRight = distanceRight - triggerOverlayDifferenceWidth;\r\n } else if (this.isEnd) {\r\n overlayLeft = distanceLeft - triggerOverlayDifferenceWidth;\r\n posLeft = this.triggerRect.left - triggerOverlayDifferenceWidth;\r\n posRight = distanceRight;\r\n }\r\n\r\n this.overlayOutsideCheckX(overlayLeft, posRight);\r\n\r\n if (posRight > 0) {\r\n posX.left = Math.max(\r\n posLeft,\r\n this.boundaryViewportDistance(POSITION.LEFT),\r\n Number(this.safeSpace.left)\r\n );\r\n } else {\r\n posX.right = Math.max(\r\n posRight,\r\n this.boundaryViewportDistance(POSITION.RIGHT),\r\n Number(this.safeSpace.right)\r\n );\r\n }\r\n } else {\r\n if (this.isStart) {\r\n posX.left = this.triggerRect.left;\r\n } else if (this.isEnd) {\r\n posX.right = this.viewportSize.width - this.triggerRect.right;\r\n } else {\r\n posX.left = this.triggerRect.left - triggerOverlayDifferenceHalf;\r\n }\r\n }\r\n }\r\n\r\n return posX;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the absolute offset distance for the given position.\r\n *\r\n * @param { 'left' | 'top' } position - A given position (left, top).\r\n * @returns { number } The number of pixels between the chosen side and the Boundary.\r\n */\r\n private getAbsoluteOffset(position: 'left' | 'top'): number {\r\n let currentEl: HTMLElement = this.triggerElement;\r\n let offset: number = 0;\r\n\r\n do {\r\n offset += position === 'top' ? currentEl.offsetTop : currentEl.offsetLeft;\r\n currentEl = currentEl.offsetParent as HTMLElement;\r\n } while (this.boundaryElement.contains(currentEl?.offsetParent));\r\n\r\n return offset;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the scroll distance for the given position.\r\n *\r\n * @param { 'left' | 'top' } position - A given position (left, top).\r\n * @returns { number } The number of pixels scrolled on the chosen side for the Boundary.\r\n */\r\n private getAbsoluteScroll(position: 'left' | 'top'): number {\r\n const scrollElement: HTMLElement = !this.isBoundaryCustom ? document.documentElement : this.boundaryElement;\r\n return position === 'top' ? scrollElement.scrollTop : scrollElement.scrollLeft;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the Overlay's `top` or `bottom` render Position/Alignment for the Strategy ABSOLUTE.\r\n */\r\n private get getAbsoluteY(): OverlayBasePositionY {\r\n const posY: OverlayBasePositionY = { top: null, bottom: null };\r\n const offsetPosition = this.getAbsoluteOffset('top');\r\n\r\n if (this.isTop) {\r\n posY.bottom = this.boundaryData.height - offsetPosition + this.triggerOverlayDistance;\r\n } else if (this.isBottom) {\r\n posY.top = offsetPosition + this.triggerRect.height + this.triggerOverlayDistance;\r\n } else {\r\n const triggerOverlayDifferenceHeight = this.triggerOverlayDifferenceHeight;\r\n const triggerOverlayDifferenceHalf = triggerOverlayDifferenceHeight / 2;\r\n\r\n // Fluid Alignment only works for Overlays that are higher than the Trigger\r\n if (this.fluidAlignment && triggerOverlayDifferenceHeight > 0) {\r\n const scrollTop: number = this.getAbsoluteScroll('top');\r\n const distanceTop: number = this.triggerBoundaryDistance(POSITION.TOP);\r\n const distanceBottom: number = this.triggerBoundaryDistance(POSITION.BOTTOM);\r\n const boundaryTop: number = this.isBoundaryCustom ? this.boundaryRect.top : 0;\r\n const boundaryBottom: number = this.isBoundaryCustom\r\n ? this.viewportSize.height - this.boundaryRect.bottom + this.boundaryScrollSize.horizontal\r\n : 0;\r\n let posTop!: number;\r\n let posBottom!: number;\r\n\r\n if (this.isAlignmentCenterOnly || (this.isAlignmentCenterAllowed && this.isCenter)) {\r\n posTop = distanceTop - triggerOverlayDifferenceHalf;\r\n posBottom = distanceBottom - triggerOverlayDifferenceHalf;\r\n } else if (this.isStart) {\r\n posTop = distanceTop;\r\n posBottom = distanceBottom - triggerOverlayDifferenceHeight;\r\n } else if (this.isEnd) {\r\n posTop = distanceTop - triggerOverlayDifferenceHeight;\r\n posBottom = distanceBottom;\r\n }\r\n\r\n this.overlayOutsideCheckY(posTop, posBottom);\r\n\r\n if (posBottom > 0) {\r\n posY.top =\r\n Math.max(posTop + scrollTop, scrollTop) - Math.min(boundaryTop - Number(this.safeSpace.top), 0);\r\n } else {\r\n posY.bottom = scrollTop * -1 - Math.min(boundaryBottom - Number(this.safeSpace.bottom), 0);\r\n }\r\n } else {\r\n if (this.isStart) {\r\n posY.top = offsetPosition;\r\n } else if (this.isEnd) {\r\n posY.top = offsetPosition - triggerOverlayDifferenceHeight;\r\n } else {\r\n posY.top = offsetPosition - triggerOverlayDifferenceHalf;\r\n }\r\n }\r\n }\r\n\r\n return posY;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the Overlay's `left` or `right` render Position/Alignment for the Strategy ABSOLUTE.\r\n */\r\n private get getAbsoluteX(): OverlayBasePositionX {\r\n const posX: OverlayBasePositionX = { left: null, right: null };\r\n const offsetPosition = this.getAbsoluteOffset('left');\r\n\r\n if (this.isLeft) {\r\n posX.right = this.boundaryData.width - offsetPosition + this.triggerOverlayDistance;\r\n } else if (this.isRight) {\r\n posX.left = offsetPosition + this.triggerRect.width + this.triggerOverlayDistance;\r\n } else {\r\n const triggerOverlayDifferenceWidth = this.triggerOverlayDifferenceWidth;\r\n const triggerOverlayDifferenceHalf = triggerOverlayDifferenceWidth / 2;\r\n\r\n // Fluid Alignment only works for Overlays that are wider than the Trigger\r\n if (this.fluidAlignment && triggerOverlayDifferenceWidth > 0) {\r\n const scrollLeft: number = this.getAbsoluteScroll('left');\r\n const distanceLeft: number = this.triggerBoundaryDistance(POSITION.LEFT);\r\n const distanceRight: number = this.triggerBoundaryDistance(POSITION.RIGHT);\r\n const boundaryLeft: number = this.isBoundaryCustom ? this.boundaryRect.left : 0;\r\n const boundaryRight: number = this.isBoundaryCustom\r\n ? this.viewportSize.width - this.boundaryRect.right + this.boundaryScrollSize.vertical\r\n : 0;\r\n let posLeft!: number;\r\n let posRight!: number;\r\n\r\n if (this.isAlignmentCenterOnly || (this.isAlignmentCenterAllowed && this.isCenter)) {\r\n posLeft = distanceLeft - triggerOverlayDifferenceHalf;\r\n posRight = distanceRight - triggerOverlayDifferenceHalf;\r\n } else if (this.isStart) {\r\n posLeft = distanceLeft;\r\n posRight = distanceRight - triggerOverlayDifferenceWidth;\r\n } else if (this.isEnd) {\r\n posLeft = distanceLeft - triggerOverlayDifferenceWidth;\r\n posRight = distanceRight;\r\n }\r\n\r\n this.overlayOutsideCheckX(posLeft, posRight);\r\n\r\n if (posRight > 0) {\r\n posX.left =\r\n Math.max(posLeft + scrollLeft, scrollLeft) -\r\n Math.min(boundaryLeft - Number(this.safeSpace.left), 0);\r\n } else {\r\n posX.right = scrollLeft * -1 - Math.min(boundaryRight - Number(this.safeSpace.right), 0);\r\n }\r\n } else {\r\n if (this.isStart) {\r\n posX.left = offsetPosition;\r\n } else if (this.isEnd) {\r\n posX.left = offsetPosition - triggerOverlayDifferenceWidth;\r\n } else {\r\n posX.left = offsetPosition - triggerOverlayDifferenceHalf;\r\n }\r\n }\r\n }\r\n\r\n return posX;\r\n }\r\n\r\n /**\r\n * @description\r\n * If the Trigger is (at least partially) outside of the Boundary on one or both of its axes\r\n * and the viewport size is not big enough to fit the overlay,\r\n * it'll choose the side with more available space.\r\n */\r\n private get getAutoPosition(): OverlayBasePosition {\r\n const viewport: ViewportSize = this.viewportSizeSafe;\r\n const squareAreas: OverlayBaseSquareAreas = {\r\n [POSITION.TOP]: this.triggerBoundaryDistance(POSITION.TOP) * viewport.width,\r\n [POSITION.BOTTOM]: this.triggerBoundaryDistance(POSITION.BOTTOM) * viewport.width,\r\n [POSITION.LEFT]: this.triggerBoundaryDistance(POSITION.LEFT) * viewport.height,\r\n [POSITION.RIGHT]: this.triggerBoundaryDistance(POSITION.RIGHT) * viewport.height,\r\n };\r\n\r\n let maxVisibleArea: number = -Infinity;\r\n let availablePosition!: OverlayBasePosition;\r\n\r\n for (const theArea in squareAreas) {\r\n const area: OverlayBasePosition = theArea as OverlayBasePosition;\r\n const squareArea: number = squareAreas[area];\r\n\r\n if (this.isPositionAllowed(area) && squareArea > maxVisibleArea) {\r\n maxVisibleArea = squareArea;\r\n availablePosition = area;\r\n }\r\n }\r\n\r\n return availablePosition;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the final position.\r\n */\r\n private get getPosition(): OverlayBasePosition {\r\n let position: OverlayBasePosition | undefined = undefined;\r\n let order!: OverlayBasePosition[];\r\n\r\n if (this.desiredPosition === POSITION.TOP) {\r\n order = [POSITION.TOP, POSITION.BOTTOM, POSITION.LEFT, POSITION.RIGHT];\r\n } else if (this.desiredPosition === POSITION.BOTTOM) {\r\n order = [POSITION.BOTTOM, POSITION.TOP, POSITION.LEFT, POSITION.RIGHT];\r\n } else if (this.desiredPosition === POSITION.LEFT) {\r\n order = [POSITION.LEFT, POSITION.RIGHT, POSITION.TOP, POSITION.BOTTOM];\r\n } else if (this.desiredPosition === POSITION.RIGHT) {\r\n order = [POSITION.RIGHT, POSITION.LEFT, POSITION.TOP, POSITION.BOTTOM];\r\n }\r\n\r\n for (let pos = 0; pos < order.length; pos++) {\r\n position = this.canPositionAt(order[pos]);\r\n if (position) break;\r\n }\r\n\r\n // If no position found, check for best option based on free space\r\n return position || this.getAutoPosition;\r\n }\r\n\r\n /**\r\n * @description\r\n * Returns the final alignment.\r\n */\r\n private get getAlignment(): OverlayBaseAlignment {\r\n if (this.isTopBottom) return this.getAlignmentHorizontally;\r\n\r\n return this.getAlignmentVertically;\r\n }\r\n\r\n /**\r\n * @description\r\n * Base listeners for Page Scroll, Page Resize, Boundary Scroll & Update on demand.\r\n */\r\n get overlayListeners$(): Observable<void> {\r\n return from(this.listeners).pipe(mergeAll());\r\n }\r\n\r\n /**\r\n * @description\r\n * Update on demand to return recalculated position/alignment data.\r\n */\r\n recalculate(): void {\r\n this.forceUpdate$.next();\r\n }\r\n\r\n /**\r\n * @description\r\n * Update Overlay ClientRect data on demand in case its content changes.\r\n *\r\n * This will force recalculations.\r\n */\r\n updateOverlaySize(): void {\r\n this.getOverlayOriginalClientRect(true);\r\n this.recalculate();\r\n }\r\n\r\n /**\r\n * @description\r\n * Sets / updates the basic config.\r\n */\r\n setBaseConfig(customConfig?: OverlayBaseConfig): void {\r\n if (!customConfig) return;\r\n\r\n if ('trigger' in customConfig) {\r\n if (customConfig.trigger instanceof HTMLElement) {\r\n this.triggerElement = customConfig.trigger;\r\n } else {\r\n this.virtualTriggerRect = customConfig.trigger as DOMRect;\r\n }\r\n }\r\n\r\n if ('fluidAlignment' in customConfig)\r\n this.fluidAlignment = this.getBooleanValue(customConfig.fluidAlignment) ?? DEFAULTS.fluidAlignment;\r\n if ('fluidSize' in customConfig)\r\n this.fluidSize = this.getBooleanValue(customConfig.fluidSize) ?? DEFAULTS.fluidSize;\r\n\r\n if ('alignmentsAllowed' in customConfig)\r\n this.alignmentsAllowed = customConfig.alignmentsAllowed as OverlayBaseAlignmentsAllowed;\r\n if ('positionsAllowed' in customConfig) {\r\n const positionsAllowed = customConfig.positionsAllowed as OverlayBasePositionsAllowed;\r\n this.allowedOpposite =\r\n typeof positionsAllowed === 'string' && positionsAllowed.toLowerCase().trim() === 'opposite';\r\n if (!this.allowedOpposite) this.positionsAllowed = positionsAllowed;\r\n }\r\n\r\n // First input will not have desired position nor alignment.\r\n const noDefaultPositionOrAlignment: boolean = !this.desiredPosition && !this.desiredAlignment;\r\n if (noDefaultPositionOrAlignment || 'position' in customConfig) {\r\n if (this.allowedOpposite) this.oppositePositionsAllowed = customConfig.position as OverlayBasePositionInput;\r\n this.overlayPosition = customConfig.position as OverlayBasePositionInput;\r\n } else {\r\n if (this.allowedOpposite) {\r\n this.oppositePositionsAllowed = undefined;\r\n } else {\r\n this.overlayPosition = undefined as unknown as OverlayBasePositionInput;\r\n }\r\n }\r\n\r\n if ('positionStrategy' in customConfig)\r\n this.positionStrategy = customConfig.positionStrategy as OverlayBasePositionStrategy;\r\n if ('boundary' in customConfig) this.boundaryElement = customConfig.boundary as HTMLElement;\r\n if ('safeSpace' in customConfig) this.safeSpace = customConfig.safeSpace as OverlayBaseSafeSpace;\r\n if ('offsetSize' in customConfig) this.offsetSize = customConfig.offsetSize as number;\r\n if ('allowScrollListener' in customConfig)\r\n this.allowScrollListener =\r\n this.getBooleanValue(customConfig.allowScrollListener) ?? DEFAULTS.allowScrollListener;\r\n }\r\n\r\n /**\r\n * @description\r\n * Assigns the provided overlay element and starts listening to the scroll & resize to calculate and return the best position for it.\r\n *\r\n * @param { HTMLElement } overlayElement - The `overlay` HTML element to base all calculation on.\r\n * @param { number } debounceTimeMs - Delay between emissions.\r\n * @returns { Observable<OverlayBaseCalculatedPosition> } An `observable` with\r\n * - the `position` (top, bottom, left, right),\r\n * - the `alignment` (start, center, end),\r\n * - the position to `render` (top, bottom, left, right) based on the chosen `position strategy` and\r\n * - the `max size` (if \"`fluidSize`\" is active) that'll provide max width/height so the overlay is always visible on screen.\r\n */\r\n attachOverlay(overlayElement: HTMLElement, debounceTimeMs: number = 10): Observable<OverlayBaseCalculatedPosition> {\r\n if (!this.isAttached) {\r\n this.overlayElement = overlayElement;\r\n\r\n if (this.isBoundaryCustom) {\r\n this.boundaryElement.addEventListener('scroll', this.boundaryScrollFn);\r\n }\r\n\r\n this.forceUpdate$ = new BehaviorSubject<void | undefined>(undefined);\r\n this.isDetached$ = new Subject();\r\n this.isAttached = true;\r\n\r\n if (this.allowScrollListener && this.triggerElement) {\r\n window.addEventListener('scroll', this.scrollFn);\r\n this.listeners.push(this.scroll$);\r\n }\r\n\r\n window.addEventListener('resize', this.resizeFn);\r\n this.listeners.push(this.resize$, this.boundaryScroll$, this.forceUpdate$);\r\n }\r\n\r\n return this.overlayListeners$.pipe(\r\n debounceTime(debounceTimeMs),\r\n map(() => this.getCalculatedPosition)\r\n );\r\n }\r\n\r\n /**\r\n * @description\r\n * Detaches the Overlay and removes the scroll listener for custom Boundary.\r\n */\r\n detachOverlay(): void {\r\n if (!this.isAttached) return;\r\n\r\n this.isAttached = false;\r\n\r\n this.isDetached$.next();\r\n this.isDetached$.complete();\r\n this.forceUpdate$.complete();\r\n\r\n window.removeEventListener('scroll', this.scrollFn);\r\n window.removeEventListener('resize', this.resizeFn);\r\n\r\n this.listeners.length = 0;\r\n\r\n if (this.isBoundaryCustom) {\r\n this.boundaryElement.removeEventListener('scroll', this.boundaryScrollFn);\r\n }\r\n }\r\n\r\n /**\r\n * @description\r\n * Gets all the necessary ClientRect, Boundary and Viewport data.\r\n */\r\n private getElementsSizeInfo(): void {\r\n this.getTriggerClientRect();\r\n this.getOverlayClientRect();\r\n this.getBoundaryClientRect();\r\n this.getBoundaryScrollSize();\r\n this.getBoundaryCalculatedRect();\r\n this.getViewportSizeSafe();\r\n }\r\n\r\n private getTriggerClientRect(): void {\r\n this.triggerRect = this.virtualTriggerRect || this.triggerElement?.getBoundingClientRect();\r\n if (!this.triggerRect) throw new Error(ERROR_NO_TRIGGER_PROVIDED());\r\n }\r\n\r\n private getOverlayClientRect(): void {\r\n this.overlayRect = this.overlayElement.getBoundingClientRect();\r\n this.getOverlayOriginalClientRect();\r\n }\r\n\r\n private getOverlayOriginalClientRect(forceUpdate?: boolean): void {\r\n if (!this.overlayOriginalRect || forceUpdate) {\r\n this.overlayOriginalRect = this.overlayElement.getBoundingClientRect();\r\n }\r\n }\r\n\r\n private getBoundaryClientRect(): void {\r\n this.boundaryRect = this.boundaryElement?.getBoundingClientRect();\r\n }\r\n\r\n private getBoundaryCalculatedRect(): void {\r\n const viewportSize = this.viewportSize;\r\n let top: number = 0;\r\n let bottom: number = viewportSize.height;\r\n let left: number = 0;\r\n let right: number = viewportSize.width;\r\n let width: number = viewportSize.width;\r\n let height: number = viewportSize.height;\r\n\r\n if (this.isBoundaryCustom) {\r\n const boundaryBottom: number = this.boundaryRect.bottom - this.boundaryScrollSize.horizontal;\r\n const boundaryRight: number = this.boundaryRect.right - this.boundaryScrollSize.vertical;\r\n\r\n height = boundaryBottom - this.boundaryRect.top;\r\n width = boundaryRight - this.boundaryRect.left;\r\n\r\n top = this.boundaryRect.top;\r\n left = this.boundaryRect.left;\r\n bottom = boundaryBottom;\r\n right = boundaryRight;\r\n }\r\n\r\n this.boundaryData = { top, bottom, left, right, width, height };\r\n }\r\n\r\n private getBoundaryScrollSize(): void {\r\n const vertical: number = this.isBoundaryCustom\r\n ? this.boundaryElement.offsetWidth - this.boundaryElement.clientWidth\r\n : 0;\r\n const horizontal: number = this.isBoundaryCustom\r\n ? this.boundaryElement.offsetHeight - this.boundaryElement.clientHeight\r\n : 0;\r\n\r\n this.boundaryScrollSize = { vertical, horizontal };\r\n }\r\n\r\n private getViewportSizeSafe(): void {\r\n const viewportSize = this.viewportSize;\r\n this.viewportSafe = {\r\n width:\r\n viewportSize.width -\r\n Math.max(this.boundaryViewportDistance(POSITION.LEFT), Number(this.safeSpace.left)) -\r\n Math.max(this.boundaryViewportDistance(POSITION.RIGHT), Number(this.safeSpace.right)),\r\n height:\r\n viewportSize.height -\r\n Math.max(this.boundaryViewportDistance(POSITION.TOP), Number(this.safeSpace.top)) -\r\n Math.max(this.boundaryViewportDistance(POSITION.BOTTOM), Number(this.safeSpace.bottom)),\r\n };\r\n }\r\n\r\n private getNumericValue(value: unknown): number | null {\r\n const isNumeric = (val: unknown): boolean => {\r\n return String(val)?.trim().length > 0 && !isNaN(Number(val ?? '!'));\r\n };\r\n\r\n const numericValue: number = parseFloat(String(value ?? ''));\r\n if (!isNumeric(value) || isNaN(numericValue)) return null;\r\n\r\n return numericValue;\r\n }\r\n\r\n private getBooleanValue(value: unknown): boolean | null {\r\n const isBoolean = (val: unknown): boolean => {\r\n const valueStr: string = String(val).trim();\r\n return ['true', 'false'].indexOf(valueStr) !== -1;\r\n };\r\n\r\n try {\r\n return isBoolean(value) ? JSON.parse(String(value)) : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["POSITION","ALIGNMENT","POSITION_STRATEGY","Subject","DEFAULTS","from","mergeAll","BehaviorSubject","debounceTime","map"],"mappings":";;;;;;AAEYA,8BAKX;IALD,CAAA,UAAY,QAAQ,EAAA;IAChB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;IACX,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;IACjB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;IACb,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;IACnB,CAAC,EALWA,gBAAQ,KAARA,gBAAQ,GAKnB,EAAA,CAAA,CAAA,CAAA;AAEWC,+BAIX;IAJD,CAAA,UAAY,SAAS,EAAA;IACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;IACf,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;IACX,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;IACrB,CAAC,EAJWA,iBAAS,KAATA,iBAAS,GAIpB,EAAA,CAAA,CAAA,CAAA;AAEWC,uCAGX;IAHD,CAAA,UAAY,iBAAiB,EAAA;IACzB,IAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;IACf,IAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;IACzB,CAAC,EAHWA,yBAAiB,KAAjBA,yBAAiB,GAG5B,EAAA,CAAA,CAAA,CAAA;AAEY,QAAA,qBAAqB,GAA8D;IAC5F,IAAA,UAAU,EAAE,CAAC;IACb,IAAA,cAAc,EAAE,KAAK;IACrB,IAAA,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,CAACF,gBAAQ,CAAC,GAAG,EAAEC,iBAAS,CAAC,MAAM,CAA6B;QACtE,gBAAgB,EAAEC,yBAAiB,CAAC,KAAK;IACzC,IAAA,gBAAgB,EAAE,CAACF,gBAAQ,CAAC,GAAG,EAAEA,gBAAQ,CAAC,MAAM,EAAEA,gBAAQ,CAAC,IAAI,EAAEA,gBAAQ,CAAC,KAAK,CAAC;IAChF,IAAA,iBAAiB,EAAE,CAACC,iBAAS,CAAC,MAAM,EAAEA,iBAAS,CAAC,KAAK,EAAEA,iBAAS,CAAC,GAAG,CAAC;IACrE,IAAA,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;IACnD,IAAA,mBAAmB,EAAE,IAAI;;;IC7B7B,IAAM,gBAAgB,GAAG,UAAC,GAAW,EAAA,EAAa,OAAA,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,EAAA,CAAC;IAErE,IAAM,yBAAyB,GAAG,YAAA;QACrC,IAAM,GAAG,GAAW,qFAGnB,CAAC;IACF,IAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;;ICyBD,IAAI,GAAG,GAAW,CAAC,CAAC;AAEpB,QAAA,WAAA,kBAAA,YAAA;IAAA,IAAA,SAAA,WAAA,GAAA;YAAA,IAk2CC,KAAA,GAAA,IAAA,CAAA;IAj2CY,QAAA,IAAG,CAAA,GAAA,GAAW,GAAG,EAAE,CAAC;IACpB,QAAA,IAAa,CAAA,aAAA,GAAsB,EAAE,CAAC;YAQ/C,IAAY,CAAA,YAAA,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAGrF,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;IAG5B,QAAA,IAAA,CAAA,OAAO,GAAkB,IAAIE,YAAO,EAAQ,CAAC;IAC7C,QAAA,IAAQ,CAAA,QAAA,GAAG,YAAA,EAAY,OAAA,KAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA,EAAA,CAAC;IAE3C,QAAA,IAAA,CAAA,OAAO,GAAkB,IAAIA,YAAO,EAAQ,CAAC;IAC7C,QAAA,IAAQ,CAAA,QAAA,GAAG,YAAA,EAAY,OAAA,KAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA,EAAA,CAAC;IAE3C,QAAA,IAAA,CAAA,eAAe,GAAkB,IAAIA,YAAO,EAAQ,CAAC;IACrD,QAAA,IAAgB,CAAA,gBAAA,GAAG,YAAA,EAAY,OAAA,KAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA,EAAA,CAAC;IAEnE;;;IAGG;YACK,IAAA,CAAA,OAAO,GAAuB;gBAClC,SAAS,EAAEC,qBAAQ,CAAC,gBAAyC;gBAC7D,UAAU,EAAEA,qBAAQ,CAAC,iBAA2C;aACnE,CAAC;IAGF;;;IAGG;IACK,QAAA,IAAS,CAAA,SAAA,GAAoB,EAAE,CAAC;IAExC;;;IAGG;IACK,QAAA,IAAmB,CAAA,mBAAA,GAAY,IAAI,CAAC;IAE5C;;;;IAIG;YACM,IAAA,CAAA,OAAO,GAAuB;IACnC,YAAA,KAAK,EAAE,IAAI;IACX,YAAA,MAAM,EAAE,IAAI;aACf,CAAC;IAiDF;;;;IAIG;IACH,QAAA,IAAc,CAAA,cAAA,GAAoC,SAAS,CAAC;SAqvC/D;IA/xCG,IAAA,MAAA,CAAA,cAAA,CAAI,WAAY,CAAA,SAAA,EAAA,cAAA,EAAA;IAJhB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO;IACH,gBAAA,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,WAAW;IAC3C,gBAAA,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,YAAY;iBAChD,CAAC;aACL;;;IAAA,KAAA,CAAA,CAAA;IAOD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAgB,CAAA,SAAA,EAAA,kBAAA,EAAA;IALpB;;;;IAIG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,YAAY,CAAC;aAC5B;;;IAAA,KAAA,CAAA,CAAA;IAOD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAkB,CAAA,SAAA,EAAA,oBAAA,EAAA;IAJtB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,eAAe,CAAC;aAC/B;;;IAAA,KAAA,CAAA,CAAA;IAQD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAmB,CAAA,SAAA,EAAA,qBAAA,EAAA;IAJvB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,gBAAgB,CAAC;aAChC;;;IAAA,KAAA,CAAA,CAAA;IAWD;;;;;;IAMG;IACK,IAAA,WAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,UAAqB,QAAgB,EAAE,WAAmB,EAAA;IAC9D,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,GAAGJ,gBAAQ,CAAC,GAAG,GAAG,WAAW,GAAG,CAAC,GAAGA,gBAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;SACrG,CAAA;IAED;;;;;;IAMG;IACK,IAAA,WAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,UAAqB,SAAiB,EAAE,UAAkB,EAAA;IAC9D,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,CAAC,GAAGA,gBAAQ,CAAC,IAAI,GAAG,UAAU,GAAG,CAAC,GAAGA,gBAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;SACrG,CAAA;IAYD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAc,CAAA,SAAA,EAAA,gBAAA,EAAA;IAJlB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,OAAsB,CAAC;aACpD;IACD,QAAA,GAAA,EAAA,UAAmB,cAA2B,EAAA;IAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,cAA6B,CAAC;aAC9D;;;IAHA,KAAA,CAAA,CAAA;IASD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAc,CAAA,SAAA,EAAA,gBAAA,EAAA;IAJlB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;aAClC;IACD,QAAA,GAAA,EAAA,UAAmB,cAA2B,EAAA;gBAC1C,IAAM,mBAAmB,GAAmB,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAd,cAAc,CAAE,aAAa,CACrE,mBAAmB,CACJ,CAAC;gBAEpB,IAAI,CAAC,kBAAkB,IAAI,mBAAmB,IAAI,cAAc,CAAgB,CAAC;aACpF;;;IAPA,KAAA,CAAA,CAAA;IAaD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAe,CAAA,SAAA,EAAA,iBAAA,EAAA;IAJ3B;;;IAGG;IACH,QAAA,GAAA,EAAA,UAA4B,QAAkC,EAAA;;IAC1D,YAAA,IAAM,aAAa,GAAGI,qBAAQ,CAAC,QAAuD,CAAC;IAEvF,YAAA,IAAI,CAAC,QAAQ;IAAE,gBAAA,QAAQ,GAAG,CAAC,SAAS,EAAE,SAAS,CAAwC,CAAC;IAExF,YAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;oBAC9B,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA,EAAA,CAGnE,CAAC;IACL,aAAA;IAED,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAI,aAAa,CAAC,CAAC,CAAC,CAAC;IACtG,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,mCAAI,aAAa,CAAC,CAAC,CAAC,CAAC;gBAExG,IAAM,eAAe,GAAY,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,YAAA,IAAI,CAAC,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAAJ,gBAAQ,CAAC,GAAG,CAAC;gBAEjG,IAAM,gBAAgB,GAAY,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,YAAA,IAAM,gBAAgB,GAAyB,IAAI,CAAC,wBAAwB;sBACtEC,iBAAS,CAAC,MAAM;IAClB,kBAAEA,iBAAS,CAAC,KAAK,CAAC;IAEtB,YAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,gBAAgB,CAAC;aAC3G;;;IAAA,KAAA,CAAA,CAAA;IAED;;;;;;IAMG;QACK,WAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,QAA6B,EAAA;YACjD,OAAO,MAAM,CAAC,MAAM,CAACD,gBAAQ,CAAC,CAAC,QAAQ,CAAC,QAAoB,CAAC,CAAC;SACjE,CAAA;IAED;;;;;;IAMG;QACK,WAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAiB,SAA+B,EAAA;YACpD,OAAO,MAAM,CAAC,MAAM,CAACC,iBAAS,CAAC,CAAC,QAAQ,CAAC,SAAsB,CAAC,CAAC;SACpE,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAgB,CAAA,SAAA,EAAA,kBAAA,EAAA;IAJpB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;;IACI,YAAA,QAAQ,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAIG,qBAAQ,CAAC,gBAAgB,EAAiC;aAC5G;IACD,QAAA,GAAA,EAAA,UAAqB,gBAA6C,EAAA;gBAC9D,gBAAgB,GAAG,gBAAgB,KAAA,IAAA,IAAhB,gBAAgB,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAhB,gBAAgB,CAAE,WAAW,EAAA,CAAG,IAAI,EAAuB,CAAC;IAC/E,YAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAACF,yBAAiB,CAAC,CAAC,QAAQ,CAC3E,gBAAqC,CACxC;IACG,kBAAE,gBAAgB;IAClB,kBAAEE,qBAAQ,CAAC,gBAAgB,CAAC;aACnC;;;IARA,KAAA,CAAA,CAAA;IAcD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAgB,CAAA,SAAA,EAAA,kBAAA,EAAA;IAJ5B;;;IAGG;IACH,QAAA,GAAA,EAAA,UAA6B,OAAoC,EAAA;gBAC7D,IAAI,OAAO,OAAO,KAAK,QAAQ;IAAE,gBAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;IAEvF,YAAA,OAAO,GAAG,OAAO;IACZ,iBAAA,GAAG,CAAC,UAAC,QAAQ,EAAA,EAAK,OAAA,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAyB,CAAA,EAAA,CAAC;IACvE,iBAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAA0B,CAAC;IAE3D,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM;IACnC,kBAAG,OAAiC;IACpC,kBAAGA,qBAAQ,CAAC,gBAA0C,CAAC;aAC9D;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAwB,CAAA,SAAA,EAAA,0BAAA,EAAA;IAJpC;;;IAGG;IACH,QAAA,GAAA,EAAA,UAAqC,QAA8C,EAAA;;IAC/E,YAAA,QAAQ,GAAG,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,QAAQ,GAAI,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAIA,qBAAQ,CAAC,QAAQ,CAAC;gBAEjE,IAAI,OAAO,QAAQ,KAAK,QAAQ;IAAE,gBAAA,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAgD,CAAC;gBAChH,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAAE,gBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAAJ,gBAAQ,CAAC,GAAG,CAAC;IAE3F,YAAA,IAAM,SAAS,GAAoC;oBAC/C,GAAG,EAAEA,gBAAQ,CAAC,MAAM;oBACpB,MAAM,EAAEA,gBAAQ,CAAC,GAAG;oBACpB,IAAI,EAAEA,gBAAQ,CAAC,KAAK;oBACpB,KAAK,EAAEA,gBAAQ,CAAC,IAAI;iBACvB,CAAC;IACF,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAClE;;;IAAA,KAAA,CAAA,CAAA;IAED;;;;;;IAMG;QACK,WAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,QAA6B,EAAA;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACpD,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAiB,CAAA,SAAA,EAAA,mBAAA,EAAA;IAJ7B;;;IAGG;IACH,QAAA,GAAA,EAAA,UAA8B,OAAqC,EAAA;gBAC/D,IAAI,OAAO,KAAK,OAAO,EAAE;IACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAACC,iBAAS,CAAC,KAAK,EAAEA,iBAAS,CAAC,GAAG,CAAC,CAAC;IAC9D,aAAA;IAAM,iBAAA,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;oBACpD,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAACA,iBAAS,CAAC,MAAM,CAAC,CAAC;IAChD,aAAA;IAAM,iBAAA;oBACH,IAAI,OAAO,OAAO,KAAK,QAAQ;IAAE,oBAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;IAExF,gBAAA,OAAO,GAAG,OAAO;IACZ,qBAAA,GAAG,CAAC,UAAC,SAAS,EAAA,EAAK,OAAA,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAA0B,CAAA,EAAA,CAAC;IAC1E,qBAAA,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAA2B,CAAC;IAE7D,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM;IACpC,sBAAG,OAAkC;IACrC,sBAAGG,qBAAQ,CAAC,iBAA4C,CAAC;IAChE,aAAA;aACJ;;;IAAA,KAAA,CAAA,CAAA;IAED;;;;;;IAMG;QACK,WAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,SAA+B,EAAA;YACtD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACtD,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAuB,CAAA,SAAA,EAAA,yBAAA,EAAA;IAAnC,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,kBAAkB,CAACH,iBAAS,CAAC,KAAK,CAAC,CAAC;aACnD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAwB,CAAA,SAAA,EAAA,0BAAA,EAAA;IAApC,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,kBAAkB,CAACA,iBAAS,CAAC,MAAM,CAAC,CAAC;aACpD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAqB,CAAA,SAAA,EAAA,uBAAA,EAAA;IAAjC,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,kBAAkB,CAACA,iBAAS,CAAC,GAAG,CAAC,CAAC;aACjD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAqB,CAAA,SAAA,EAAA,uBAAA,EAAA;IAAjC,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAKA,iBAAS,CAAC,MAAM,CAAC;aAClG;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAuB,CAAA,SAAA,EAAA,yBAAA,EAAA;IAAnC,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,gBAAgB,KAAKA,iBAAS,CAAC,KAAK,CAAC;aACpD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAwB,CAAA,SAAA,EAAA,0BAAA,EAAA;IAApC,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,gBAAgB,KAAKA,iBAAS,CAAC,MAAM,CAAC;aACrD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAqB,CAAA,SAAA,EAAA,uBAAA,EAAA;IAAjC,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,gBAAgB,KAAKA,iBAAS,CAAC,GAAG,CAAC;aAClD;;;IAAA,KAAA,CAAA,CAAA;IAQD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAe,CAAA,SAAA,EAAA,iBAAA,EAAA;IANnB;;;;;IAKG;IACH,QAAA,GAAA,EAAA,YAAA;;gBACI,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,QAAQ,CAAC,IAAI,CAAC;aACvD;IACD,QAAA,GAAA,EAAA,UAAoB,eAA4B,EAAA;IAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,eAAe,YAAY,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC;aAC1G;;;IAHA,KAAA,CAAA,CAAA;IASD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAgB,CAAA,SAAA,EAAA,kBAAA,EAAA;IAJ5B;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,KAAK,MAAM,CAAC;aAClD;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAS,CAAA,SAAA,EAAA,WAAA,EAAA;IAJb;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;;gBACI,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAAG,qBAAQ,CAAC,SAAS,CAAC;aAC7D;IACD,QAAA,GAAA,EAAA,UAAc,SAA+B,EAAA;gBACzC,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,gCAAKA,qBAAQ,CAAC,SAAS,CAAA,GAAM,SAAS,IAAI,EAAE,EAA2B,CAAC;aAC1G;;;IAHA,KAAA,CAAA,CAAA;IASD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAU,CAAA,SAAA,EAAA,YAAA,EAAA;IAJd;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;;gBACI,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,CAAC,UAAU,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAAA,qBAAQ,CAAC,UAAU,CAAC;aAC/D;IACD,QAAA,GAAA,EAAA,UAAe,UAAkB,EAAA;;IAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,SAAS,CAAC;aACjF;;;IAHA,KAAA,CAAA,CAAA;IAUD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAc,CAAA,SAAA,EAAA,gBAAA,EAAA;IALlB;;;;IAIG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;aAC9C;IACD,QAAA,GAAA,EAAA,UAAmB,cAAuB,EAAA;IACtC,YAAA,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;aACtD;;;IAHA,KAAA,CAAA,CAAA;IAYD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAS,CAAA,SAAA,EAAA,WAAA,EAAA;IAPb;;;;;;IAMG;IACH,QAAA,GAAA,EAAA,YAAA;;gBACI,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAAA,qBAAQ,CAAC,SAAS,CAAC;aAC7D;IACD,QAAA,GAAA,EAAA,UAAc,SAAkB,EAAA;IAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC;aAC5C;;;IAHA,KAAA,CAAA,CAAA;IAKD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAK,CAAA,SAAA,EAAA,OAAA,EAAA;IAAT,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,eAAe,KAAKJ,gBAAQ,CAAC,GAAG,CAAC;aAChD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;IAAZ,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,eAAe,KAAKA,gBAAQ,CAAC,MAAM,CAAC;aACnD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAM,CAAA,SAAA,EAAA,QAAA,EAAA;IAAV,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,eAAe,KAAKA,gBAAQ,CAAC,IAAI,CAAC;aACjD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAO,CAAA,SAAA,EAAA,SAAA,EAAA;IAAX,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,eAAe,KAAKA,gBAAQ,CAAC,KAAK,CAAC;aAClD;;;IAAA,KAAA,CAAA,CAAA;IAED,IAAA,MAAA,CAAA,cAAA,CAAI,WAAO,CAAA,SAAA,EAAA,SAAA,EAAA;IAAX,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,gBAAgB,KAAKC,iBAAS,CAAC,KAAK,CAAC;aACpD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;IAAZ,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,gBAAgB,KAAKA,iBAAS,CAAC,MAAM,CAAC;aACrD;;;IAAA,KAAA,CAAA,CAAA;IACD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAK,CAAA,SAAA,EAAA,OAAA,EAAA;IAAT,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,gBAAgB,KAAKA,iBAAS,CAAC,GAAG,CAAC;aAClD;;;IAAA,KAAA,CAAA,CAAA;IAED,IAAA,MAAA,CAAA,cAAA,CAAI,WAAW,CAAA,SAAA,EAAA,aAAA,EAAA;IAAf,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;aACtC;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAsB,CAAA,SAAA,EAAA,wBAAA,EAAA;IAJlC;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,UAAU,CAAC;aAC1B;;;IAAA,KAAA,CAAA,CAAA;IAQD,IAAA,MAAA,CAAA,cAAA,CAAY,WAA6B,CAAA,SAAA,EAAA,+BAAA,EAAA;IANzC;;;;;IAKG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;aAC1D;;;IAAA,KAAA,CAAA,CAAA;IAQD,IAAA,MAAA,CAAA,cAAA,CAAY,WAA8B,CAAA,SAAA,EAAA,gCAAA,EAAA;IAN1C;;;;;IAKG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;aAC5D;;;IAAA,KAAA,CAAA,CAAA;IAQD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAqC,CAAA,SAAA,EAAA,uCAAA,EAAA;IANjD;;;;;IAKG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;aAClE;;;IAAA,KAAA,CAAA,CAAA;IAQD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAsC,CAAA,SAAA,EAAA,wCAAA,EAAA;IANlD;;;;;IAKG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;aACpE;;;IAAA,KAAA,CAAA,CAAA;IAED;;;;;;IAMG;QACK,WAAwB,CAAA,SAAA,CAAA,wBAAA,GAAxB,UAAyB,QAA6B,EAAA;YAC1D,IAAM,YAAY,GAAW,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,QAAQ,KAAKD,gBAAQ,CAAC,GAAG,IAAI,QAAQ,KAAKA,gBAAQ,CAAC,IAAI;IAAE,YAAA,OAAO,YAAY,CAAC;IACjF,QAAA,IAAI,QAAQ,KAAKA,gBAAQ,CAAC,MAAM;IAAE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC;YACjF,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC;SACjD,CAAA;IAED;;;;;;;IAOG;QACH,WAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,QAA6B,EAAA;IACjD,QAAA,IAAM,SAAS,GAAW,IAAI,CAAC,gBAAgB;kBACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;kBAC5F,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,IAAM,UAAU,GAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAM,WAAW,GAAW,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAA,IAAM,QAAQ,GACV,QAAQ,KAAKA,gBAAQ,CAAC,GAAG,IAAI,QAAQ,KAAKA,gBAAQ,CAAC,IAAI;kBACjD,UAAU,GAAG,WAAW;IAC1B,cAAE,WAAW,GAAG,UAAU,CAAC;YACnC,OAAO,QAAQ,GAAG,SAAS,CAAC;SAC/B,CAAA;IAED;;;IAGG;QACK,WAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,QAA6B,EAAA;IACtD,QAAA,IAAM,WAAW,GAAY,QAAQ,KAAKA,gBAAQ,CAAC,GAAG,IAAI,QAAQ,KAAKA,gBAAQ,CAAC,MAAM,CAAC;IACvF,QAAA,OAAO,WAAW,GAAG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC;SAClF,CAAA;IAOD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAuB,CAAA,SAAA,EAAA,yBAAA,EAAA;IALnC;;;;IAIG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,IAAM,6BAA6B,GAAW,IAAI,CAAC,qCAAqC,CAAC;gBACzF,IAAM,YAAY,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,IAAI,CAAC,CAAC;gBACzE,IAAM,aAAa,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,KAAK,CAAC,CAAC;gBAE3E,IAAI,6BAA6B,IAAI,CAAC,EAAE;IACpC,gBAAA,OAAO,CAAC,YAAY,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC;IAC5E,aAAA;IAED,YAAA,IAAM,kBAAkB,GAAW,6BAA6B,GAAG,CAAC,CAAC,CAAC;IACtE,YAAA,IAAM,sBAAsB,GAAW,kBAAkB,GAAG,CAAC,CAAC;gBAE9D,IAAM,UAAU,GAAY,YAAY,GAAG,CAAC,IAAI,aAAa,GAAG,kBAAkB,GAAG,CAAC,CAAC;IACvF,YAAA,IAAM,WAAW,GACb,YAAY,GAAG,sBAAsB,GAAG,CAAC,IAAI,aAAa,GAAG,sBAAsB,GAAG,CAAC,CAAC;gBAC5F,IAAM,QAAQ,GAAY,YAAY,GAAG,kBAAkB,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC;gBAErF,IAAM,gBAAgB,GAClB,CAAC,IAAI,CAAC,uBAAuB,IAAI,UAAU;IAC3C,iBAAC,IAAI,CAAC,wBAAwB,IAAI,WAAW,CAAC;IAC9C,iBAAC,IAAI,CAAC,qBAAqB,IAAI,QAAQ,CAAC,CAAC;IAE7C,YAAA,OAAO,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC;aACnD;;;IAAA,KAAA,CAAA,CAAA;IAOD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAqB,CAAA,SAAA,EAAA,uBAAA,EAAA;IALjC;;;;IAIG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,IAAM,8BAA8B,GAAW,IAAI,CAAC,sCAAsC,CAAC;gBAC3F,IAAM,WAAW,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,GAAG,CAAC,CAAC;gBACvE,IAAM,cAAc,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,MAAM,CAAC,CAAC;gBAE7E,IAAI,8BAA8B,IAAI,CAAC,EAAE;IACrC,gBAAA,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC;IAC5E,aAAA;IAED,YAAA,IAAM,kBAAkB,GAAW,8BAA8B,GAAG,CAAC,CAAC,CAAC;IACvE,YAAA,IAAM,sBAAsB,GAAW,kBAAkB,GAAG,CAAC,CAAC;gBAE9D,IAAM,UAAU,GAAY,WAAW,GAAG,CAAC,IAAI,cAAc,GAAG,kBAAkB,GAAG,CAAC,CAAC;IACvF,YAAA,IAAM,WAAW,GACb,WAAW,GAAG,sBAAsB,GAAG,CAAC,IAAI,cAAc,GAAG,sBAAsB,GAAG,CAAC,CAAC;gBAC5F,IAAM,QAAQ,GAAY,WAAW,GAAG,kBAAkB,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;gBAErF,IAAM,cAAc,GAChB,CAAC,IAAI,CAAC,uBAAuB,IAAI,UAAU;IAC3C,iBAAC,IAAI,CAAC,wBAAwB,IAAI,WAAW,CAAC;IAC9C,iBAAC,IAAI,CAAC,qBAAqB,IAAI,QAAQ,CAAC,CAAC;IAE7C,YAAA,OAAO,cAAc,IAAI,IAAI,CAAC,eAAe,CAAC;aACjD;;;IAAA,KAAA,CAAA,CAAA;IAED;;;;;;IAMG;QACK,WAAmB,CAAA,SAAA,CAAA,mBAAA,GAAnB,UAAoB,QAA6B,EAAA;YACrD,IAAI,WAAW,GAAW,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAEjE,IAAI,QAAQ,KAAKA,gBAAQ,CAAC,GAAG,IAAI,QAAQ,KAAKA,gBAAQ,CAAC,MAAM,EAAE;gBAC3D,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAChF,SAAA;IAAM,aAAA;gBACH,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAC/E,SAAA;IAED,QAAA,OAAO,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;SAC/B,CAAA;IAED;;;IAGG;QACK,WAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAc,QAA6B,EAAA;IAC/C,QAAA,IAAM,aAAa,GACf,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IAChC,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;IAClC,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACxC,OAAO,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;SAC/C,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAsB,CAAA,SAAA,EAAA,wBAAA,EAAA;IAJlC;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,IAAI,kBAAkB,GAAW,IAAI,CAAC,sCAAsC,CAAC;IAC7E,YAAA,IAAI,sBAAsB,GAAW,kBAAkB,GAAG,CAAC,CAAC;IAE5D,YAAA,IAAI,IAAI,CAAC,cAAc,IAAI,kBAAkB,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;gBAEhF,IAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,GAAG,CAAC,CAAC;gBAC/D,IAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,MAAM,CAAC,CAAC;IAErE,YAAA,IAAI,UAAoB,CAAC;IACzB,YAAA,IAAI,aAAuB,CAAC;IAC5B,YAAA,IAAI,QAAkB,CAAC;gBAEvB,IAAI,kBAAkB,GAAG,CAAC,EAAE;;IAExB,gBAAA,IAAM,gBAAgB,GAAG,WAAW,GAAG,sBAAsB,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;IACpF,gBAAA,IAAM,mBAAmB,GAAG,cAAc,GAAG,sBAAsB,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC;IAE7F,gBAAA,UAAU,GAAG,kBAAkB,IAAI,mBAAmB,CAAC;oBACvD,aAAa,GAAG,sBAAsB,IAAI,gBAAgB,IAAI,sBAAsB,IAAI,mBAAmB,CAAC;IAC5G,gBAAA,QAAQ,GAAG,kBAAkB,IAAI,gBAAgB,CAAC;IACrD,aAAA;IAAM,iBAAA;;IAEH,gBAAA,kBAAkB,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC;IAC7C,gBAAA,sBAAsB,GAAG,sBAAsB,GAAG,CAAC,CAAC,CAAC;oBACrD,UAAU,GAAG,WAAW,GAAG,CAAC,IAAI,cAAc,GAAG,kBAAkB,GAAG,CAAC,CAAC;IACxE,gBAAA,aAAa,GAAG,WAAW,GAAG,sBAAsB,GAAG,CAAC,IAAI,cAAc,GAAG,sBAAsB,GAAG,CAAC,CAAC;oBACxG,QAAQ,GAAG,WAAW,GAAG,kBAAkB,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;IACzE,aAAA;IAED,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;aACnF;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAwB,CAAA,SAAA,EAAA,0BAAA,EAAA;IAJpC;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,IAAI,kBAAkB,GAAW,IAAI,CAAC,qCAAqC,CAAC;IAC5E,YAAA,IAAI,sBAAsB,GAAW,kBAAkB,GAAG,CAAC,CAAC;IAE5D,YAAA,IAAI,IAAI,CAAC,cAAc,IAAI,kBAAkB,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;gBAEhF,IAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,IAAI,CAAC,CAAC;gBACjE,IAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,KAAK,CAAC,CAAC;IAEnE,YAAA,IAAI,UAAoB,CAAC;IACzB,YAAA,IAAI,aAAuB,CAAC;IAC5B,YAAA,IAAI,QAAkB,CAAC;gBAEvB,IAAI,kBAAkB,GAAG,CAAC,EAAE;;IAExB,gBAAA,IAAM,iBAAiB,GAAG,YAAY,GAAG,sBAAsB,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC;IACvF,gBAAA,IAAM,kBAAkB,GAAG,aAAa,GAAG,sBAAsB,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;IAE1F,gBAAA,UAAU,GAAG,kBAAkB,IAAI,kBAAkB,CAAC;oBACtD,aAAa,GAAG,sBAAsB,IAAI,iBAAiB,IAAI,sBAAsB,IAAI,kBAAkB,CAAC;IAC5G,gBAAA,QAAQ,GAAG,kBAAkB,IAAI,iBAAiB,CAAC;IACtD,aAAA;IAAM,iBAAA;;IAEH,gBAAA,kBAAkB,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC;IAC7C,gBAAA,sBAAsB,GAAG,sBAAsB,GAAG,CAAC,CAAC,CAAC;oBAErD,UAAU,GAAG,YAAY,GAAG,CAAC,IAAI,aAAa,GAAG,kBAAkB,GAAG,CAAC,CAAC;IACxE,gBAAA,aAAa,GAAG,YAAY,GAAG,sBAAsB,GAAG,CAAC,IAAI,aAAa,GAAG,sBAAsB,GAAG,CAAC,CAAC;oBACxG,QAAQ,GAAG,YAAY,GAAG,kBAAkB,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC;IACzE,aAAA;IAED,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;aACpF;;;IAAA,KAAA,CAAA,CAAA;IAED;;;;;;;;;IASG;QACK,WAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UACJ,QAAgB,EAChB,aAAsB,EACtB,UAAmB,EACnB,QAAiB,EAAA;IAEjB,QAAA,IAAM,uBAAuB,GAAY,IAAI,CAAC,uBAAuB,CAAC;IACtE,QAAA,IAAM,wBAAwB,GAAY,IAAI,CAAC,wBAAwB,CAAC;IACxE,QAAA,IAAM,qBAAqB,GAAY,IAAI,CAAC,qBAAqB,CAAC;IAClE,QAAA,IAAM,8BAA8B,GAAY,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,CAAC;IACxG,QAAA,IAAM,+BAA+B,GAAY,wBAAwB,IAAI,IAAI,CAAC,wBAAwB,CAAC;IAC3G,QAAA,IAAM,4BAA4B,GAAY,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC;;YAGlG,IAAI,+BAA+B,IAAI,aAAa;gBAAE,OAAOC,iBAAS,CAAC,MAAM,CAAC;YAC9E,IAAI,8BAA8B,IAAI,UAAU;gBAAE,OAAOA,iBAAS,CAAC,KAAK,CAAC;YACzE,IAAI,4BAA4B,IAAI,QAAQ;gBAAE,OAAOA,iBAAS,CAAC,GAAG,CAAC;;YAGnE,IAAI,wBAAwB,IAAI,aAAa;gBAAE,OAAOA,iBAAS,CAAC,MAAM,CAAC;YACvE,IAAI,uBAAuB,IAAI,UAAU;gBAAE,OAAOA,iBAAS,CAAC,KAAK,CAAC;YAClE,IAAI,qBAAqB,IAAI,QAAQ;gBAAE,OAAOA,iBAAS,CAAC,GAAG,CAAC;;IAG5D,QAAA,IAAI,CAAC,wBAAwB,IAAI,uBAAuB,IAAI,qBAAqB,EAAE;IAC/E,YAAA,OAAO,QAAQ,GAAG,CAAC,GAAGA,iBAAS,CAAC,KAAK,GAAGA,iBAAS,CAAC,GAAG,CAAC;IACzD,SAAA;;IAGD,QAAA,IAAI,uBAAuB,IAAI,CAAC,qBAAqB,IAAI,CAAC,wBAAwB;gBAAE,OAAOA,iBAAS,CAAC,KAAK,CAAC;IAC3G,QAAA,IAAI,qBAAqB,IAAI,CAAC,uBAAuB,IAAI,CAAC,wBAAwB;gBAAE,OAAOA,iBAAS,CAAC,GAAG,CAAC;YAEzG,OAAOA,iBAAS,CAAC,MAAM,CAAC;SAC3B,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAU,CAAA,SAAA,EAAA,YAAA,EAAA;IAJtB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAM,OAAO,GAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAElE,IAAI,IAAI,CAAC,SAAS,EAAE;IAChB,gBAAA,IAAM,IAAI,GAAW,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;oBAEtG,IAAI,IAAI,CAAC,WAAW,EAAE;IAClB,oBAAA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpE,iBAAA;IAAM,qBAAA;IACH,oBAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClE,iBAAA;IACJ,aAAA;IAED,YAAA,OAAO,OAAO,CAAC;aAClB;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAqB,CAAA,SAAA,EAAA,uBAAA,EAAA;IAJjC;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAE3B,IAAM,eAAe,GAAY,IAAI,CAAC,gBAAgB,KAAKC,yBAAiB,CAAC,KAAK,CAAC;IAEnF,YAAA,IAAM,QAAQ,GAAwB,IAAI,CAAC,WAAW,CAAC;IACvD,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;IAEhC,YAAA,IAAM,SAAS,GAAyB,IAAI,CAAC,YAAY,CAAC;IAC1D,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBAElC,IAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,GACJ,eAAe,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EACrD,GAAC,eAAe,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAC3D,CAAC;IAEF,YAAA,IAAM,OAAO,GAAuB,IAAI,CAAC,UAAU,CAAC;IAEpD,YAAA,OAAO,EAAE,QAAQ,EAAA,QAAA,EAAE,SAAS,EAAA,SAAA,EAAE,MAAM,EAAA,MAAA,EAAE,OAAO,EAAA,OAAA,EAAE,CAAC;aACnD;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAS,CAAA,SAAA,EAAA,WAAA,EAAA;IAJrB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAM,IAAI,GAAyB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAE/D,IAAI,IAAI,CAAC,KAAK,EAAE;IACZ,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAC/F,aAAA;qBAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;IACtB,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC;IACpE,aAAA;IAAM,iBAAA;IACH,gBAAA,IAAM,8BAA8B,GAAG,IAAI,CAAC,8BAA8B,CAAC;IAC3E,gBAAA,IAAM,4BAA4B,GAAG,8BAA8B,GAAG,CAAC,CAAC;;IAGxE,gBAAA,IAAI,IAAI,CAAC,cAAc,IAAI,8BAA8B,GAAG,CAAC,EAAE;wBAC3D,IAAM,WAAW,GAAW,IAAI,CAAC,uBAAuB,CAACF,gBAAQ,CAAC,GAAG,CAAC,CAAC;wBACvE,IAAM,cAAc,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,MAAM,CAAC,CAAC;wBAC7E,IAAI,UAAmB,SAAA,CAAC;wBACxB,IAAI,MAAe,SAAA,CAAC;wBACpB,IAAI,SAAkB,SAAA,CAAC;IAEvB,oBAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;IAChF,wBAAA,UAAU,GAAG,WAAW,GAAG,4BAA4B,CAAC;4BACxD,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,4BAA4B,CAAC;IAC7D,wBAAA,SAAS,GAAG,cAAc,GAAG,4BAA4B,CAAC;IAC7D,qBAAA;6BAAM,IAAI,IAAI,CAAC,OAAO,EAAE;4BACrB,UAAU,GAAG,WAAW,CAAC;IACzB,wBAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC9B,wBAAA,SAAS,GAAG,cAAc,GAAG,8BAA8B,CAAC;IAC/D,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,UAAU,GAAG,WAAW,GAAG,8BAA8B,CAAC;4BAC1D,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,8BAA8B,CAAC;4BAC/D,SAAS,GAAG,cAAc,CAAC;IAC9B,qBAAA;IAED,oBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;wBAEjD,IAAI,SAAS,GAAG,CAAC,EAAE;4BACf,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CACf,MAAM,EACN,IAAI,CAAC,wBAAwB,CAACA,gBAAQ,CAAC,GAAG,CAAC,EAC3C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAC7B,CAAC;IACL,qBAAA;IAAM,yBAAA;4BACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAClB,SAAS,EACT,IAAI,CAAC,wBAAwB,CAACA,gBAAQ,CAAC,MAAM,CAAC,EAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAChC,CAAC;IACL,qBAAA;IACJ,iBAAA;IAAM,qBAAA;wBACH,IAAI,IAAI,CAAC,OAAO,EAAE;4BACd,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IACnC,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACpE,qBAAA;IAAM,yBAAA;4BACH,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,4BAA4B,CAAC;IAClE,qBAAA;IACJ,iBAAA;IACJ,aAAA;IAED,YAAA,OAAO,IAAI,CAAC;aACf;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAS,CAAA,SAAA,EAAA,WAAA,EAAA;IAJrB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAM,IAAI,GAAyB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAE/D,IAAI,IAAI,CAAC,MAAM,EAAE;IACb,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAC9F,aAAA;qBAAM,IAAI,IAAI,CAAC,OAAO,EAAE;IACrB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC;IACpE,aAAA;IAAM,iBAAA;IACH,gBAAA,IAAM,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,CAAC;IACzE,gBAAA,IAAM,4BAA4B,GAAG,6BAA6B,GAAG,CAAC,CAAC;;IAGvE,gBAAA,IAAI,IAAI,CAAC,cAAc,IAAI,6BAA6B,GAAG,CAAC,EAAE;wBAC1D,IAAM,YAAY,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,IAAI,CAAC,CAAC;wBACzE,IAAM,aAAa,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,KAAK,CAAC,CAAC;wBAC3E,IAAI,WAAoB,SAAA,CAAC;wBACzB,IAAI,OAAgB,SAAA,CAAC;wBACrB,IAAI,QAAiB,SAAA,CAAC;IAEtB,oBAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;IAChF,wBAAA,WAAW,GAAG,YAAY,GAAG,4BAA4B,CAAC;4BAC1D,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC/D,wBAAA,QAAQ,GAAG,aAAa,GAAG,4BAA4B,CAAC;IAC3D,qBAAA;6BAAM,IAAI,IAAI,CAAC,OAAO,EAAE;4BACrB,WAAW,GAAG,YAAY,CAAC;IAC3B,wBAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAChC,wBAAA,QAAQ,GAAG,aAAa,GAAG,6BAA6B,CAAC;IAC5D,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,WAAW,GAAG,YAAY,GAAG,6BAA6B,CAAC;4BAC3D,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,6BAA6B,CAAC;4BAChE,QAAQ,GAAG,aAAa,CAAC;IAC5B,qBAAA;IAED,oBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;wBAEjD,IAAI,QAAQ,GAAG,CAAC,EAAE;4BACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAChB,OAAO,EACP,IAAI,CAAC,wBAAwB,CAACA,gBAAQ,CAAC,IAAI,CAAC,EAC5C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAC9B,CAAC;IACL,qBAAA;IAAM,yBAAA;4BACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CACjB,QAAQ,EACR,IAAI,CAAC,wBAAwB,CAACA,gBAAQ,CAAC,KAAK,CAAC,EAC7C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAC/B,CAAC;IACL,qBAAA;IACJ,iBAAA;IAAM,qBAAA;wBACH,IAAI,IAAI,CAAC,OAAO,EAAE;4BACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACrC,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACjE,qBAAA;IAAM,yBAAA;4BACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,4BAA4B,CAAC;IACpE,qBAAA;IACJ,iBAAA;IACJ,aAAA;IAED,YAAA,OAAO,IAAI,CAAC;aACf;;;IAAA,KAAA,CAAA,CAAA;IAED;;;;;;IAMG;QACK,WAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,QAAwB,EAAA;IAC9C,QAAA,IAAI,SAAS,GAAgB,IAAI,CAAC,cAAc,CAAC;YACjD,IAAI,MAAM,GAAW,CAAC,CAAC;YAEvB,GAAG;IACC,YAAA,MAAM,IAAI,QAAQ,KAAK,KAAK,GAAG,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC;IAC1E,YAAA,SAAS,GAAG,SAAS,CAAC,YAA2B,CAAC;aACrD,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,KAAT,IAAA,IAAA,SAAS,KAAT,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,SAAS,CAAE,YAAY,CAAC,EAAE;IAEjE,QAAA,OAAO,MAAM,CAAC;SACjB,CAAA;IAED;;;;;;IAMG;QACK,WAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,QAAwB,EAAA;IAC9C,QAAA,IAAM,aAAa,GAAgB,CAAC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAC5G,QAAA,OAAO,QAAQ,KAAK,KAAK,GAAG,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC;SAClF,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAY,CAAA,SAAA,EAAA,cAAA,EAAA;IAJxB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAM,IAAI,GAAyB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAC/D,IAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAErD,IAAI,IAAI,CAAC,KAAK,EAAE;IACZ,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC;IACzF,aAAA;qBAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;IACtB,gBAAA,IAAI,CAAC,GAAG,GAAG,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC;IACrF,aAAA;IAAM,iBAAA;IACH,gBAAA,IAAM,8BAA8B,GAAG,IAAI,CAAC,8BAA8B,CAAC;IAC3E,gBAAA,IAAM,4BAA4B,GAAG,8BAA8B,GAAG,CAAC,CAAC;;IAGxE,gBAAA,IAAI,IAAI,CAAC,cAAc,IAAI,8BAA8B,GAAG,CAAC,EAAE;wBAC3D,IAAM,SAAS,GAAW,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;wBACxD,IAAM,WAAW,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,GAAG,CAAC,CAAC;wBACvE,IAAM,cAAc,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,MAAM,CAAC,CAAC;IAC7E,oBAAA,IAAM,WAAW,GAAW,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9E,oBAAA,IAAM,cAAc,GAAW,IAAI,CAAC,gBAAgB;IAChD,0BAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU;8BACxF,CAAC,CAAC;wBACR,IAAI,MAAe,SAAA,CAAC;wBACpB,IAAI,SAAkB,SAAA,CAAC;IAEvB,oBAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;IAChF,wBAAA,MAAM,GAAG,WAAW,GAAG,4BAA4B,CAAC;IACpD,wBAAA,SAAS,GAAG,cAAc,GAAG,4BAA4B,CAAC;IAC7D,qBAAA;6BAAM,IAAI,IAAI,CAAC,OAAO,EAAE;4BACrB,MAAM,GAAG,WAAW,CAAC;IACrB,wBAAA,SAAS,GAAG,cAAc,GAAG,8BAA8B,CAAC;IAC/D,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,MAAM,GAAG,WAAW,GAAG,8BAA8B,CAAC;4BACtD,SAAS,GAAG,cAAc,CAAC;IAC9B,qBAAA;IAED,oBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;wBAE7C,IAAI,SAAS,GAAG,CAAC,EAAE;IACf,wBAAA,IAAI,CAAC,GAAG;gCACJ,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,qBAAA;IAAM,yBAAA;4BACH,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,qBAAA;IACJ,iBAAA;IAAM,qBAAA;wBACH,IAAI,IAAI,CAAC,OAAO,EAAE;IACd,wBAAA,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC;IAC7B,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,IAAI,CAAC,GAAG,GAAG,cAAc,GAAG,8BAA8B,CAAC;IAC9D,qBAAA;IAAM,yBAAA;IACH,wBAAA,IAAI,CAAC,GAAG,GAAG,cAAc,GAAG,4BAA4B,CAAC;IAC5D,qBAAA;IACJ,iBAAA;IACJ,aAAA;IAED,YAAA,OAAO,IAAI,CAAC;aACf;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAY,CAAA,SAAA,EAAA,cAAA,EAAA;IAJxB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAM,IAAI,GAAyB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC/D,IAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAEtD,IAAI,IAAI,CAAC,MAAM,EAAE;IACb,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC;IACvF,aAAA;qBAAM,IAAI,IAAI,CAAC,OAAO,EAAE;IACrB,gBAAA,IAAI,CAAC,IAAI,GAAG,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC;IACrF,aAAA;IAAM,iBAAA;IACH,gBAAA,IAAM,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,CAAC;IACzE,gBAAA,IAAM,4BAA4B,GAAG,6BAA6B,GAAG,CAAC,CAAC;;IAGvE,gBAAA,IAAI,IAAI,CAAC,cAAc,IAAI,6BAA6B,GAAG,CAAC,EAAE;wBAC1D,IAAM,UAAU,GAAW,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;wBAC1D,IAAM,YAAY,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,IAAI,CAAC,CAAC;wBACzE,IAAM,aAAa,GAAW,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,KAAK,CAAC,CAAC;IAC3E,oBAAA,IAAM,YAAY,GAAW,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;IAChF,oBAAA,IAAM,aAAa,GAAW,IAAI,CAAC,gBAAgB;IAC/C,0BAAE,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ;8BACpF,CAAC,CAAC;wBACR,IAAI,OAAgB,SAAA,CAAC;wBACrB,IAAI,QAAiB,SAAA,CAAC;IAEtB,oBAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;IAChF,wBAAA,OAAO,GAAG,YAAY,GAAG,4BAA4B,CAAC;IACtD,wBAAA,QAAQ,GAAG,aAAa,GAAG,4BAA4B,CAAC;IAC3D,qBAAA;6BAAM,IAAI,IAAI,CAAC,OAAO,EAAE;4BACrB,OAAO,GAAG,YAAY,CAAC;IACvB,wBAAA,QAAQ,GAAG,aAAa,GAAG,6BAA6B,CAAC;IAC5D,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,OAAO,GAAG,YAAY,GAAG,6BAA6B,CAAC;4BACvD,QAAQ,GAAG,aAAa,CAAC;IAC5B,qBAAA;IAED,oBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;wBAE7C,IAAI,QAAQ,GAAG,CAAC,EAAE;IACd,wBAAA,IAAI,CAAC,IAAI;gCACL,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,EAAE,UAAU,CAAC;IAC1C,gCAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,qBAAA;IAAM,yBAAA;4BACH,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,qBAAA;IACJ,iBAAA;IAAM,qBAAA;wBACH,IAAI,IAAI,CAAC,OAAO,EAAE;IACd,wBAAA,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC9B,qBAAA;6BAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnB,wBAAA,IAAI,CAAC,IAAI,GAAG,cAAc,GAAG,6BAA6B,CAAC;IAC9D,qBAAA;IAAM,yBAAA;IACH,wBAAA,IAAI,CAAC,IAAI,GAAG,cAAc,GAAG,4BAA4B,CAAC;IAC7D,qBAAA;IACJ,iBAAA;IACJ,aAAA;IAED,YAAA,OAAO,IAAI,CAAC;aACf;;;IAAA,KAAA,CAAA,CAAA;IAQD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAe,CAAA,SAAA,EAAA,iBAAA,EAAA;IAN3B;;;;;IAKG;IACH,QAAA,GAAA,EAAA,YAAA;;IACI,YAAA,IAAM,QAAQ,GAAiB,IAAI,CAAC,gBAAgB,CAAC;IACrD,YAAA,IAAM,WAAW,IAAA,EAAA,GAAA,EAAA;IACb,gBAAA,EAAA,CAACA,gBAAQ,CAAC,GAAG,CAAA,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK;IAC3E,gBAAA,EAAA,CAACA,gBAAQ,CAAC,MAAM,CAAA,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK;IACjF,gBAAA,EAAA,CAACA,gBAAQ,CAAC,IAAI,CAAA,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM;IAC9E,gBAAA,EAAA,CAACA,gBAAQ,CAAC,KAAK,CAAA,GAAG,IAAI,CAAC,uBAAuB,CAACA,gBAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM;uBACnF,CAAC;IAEF,YAAA,IAAI,cAAc,GAAW,CAAC,QAAQ,CAAC;IACvC,YAAA,IAAI,iBAAuC,CAAC;IAE5C,YAAA,KAAK,IAAM,OAAO,IAAI,WAAW,EAAE;oBAC/B,IAAM,IAAI,GAAwB,OAA8B,CAAC;IACjE,gBAAA,IAAM,UAAU,GAAW,WAAW,CAAC,IAAI,CAAC,CAAC;oBAE7C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,UAAU,GAAG,cAAc,EAAE;wBAC7D,cAAc,GAAG,UAAU,CAAC;wBAC5B,iBAAiB,GAAG,IAAI,CAAC;IAC5B,iBAAA;IACJ,aAAA;IAED,YAAA,OAAO,iBAAiB,CAAC;aAC5B;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAW,CAAA,SAAA,EAAA,aAAA,EAAA;IAJvB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAI,QAAQ,GAAoC,SAAS,CAAC;IAC1D,YAAA,IAAI,KAA6B,CAAC;IAElC,YAAA,IAAI,IAAI,CAAC,eAAe,KAAKA,gBAAQ,CAAC,GAAG,EAAE;IACvC,gBAAA,KAAK,GAAG,CAACA,gBAAQ,CAAC,GAAG,EAAEA,gBAAQ,CAAC,MAAM,EAAEA,gBAAQ,CAAC,IAAI,EAAEA,gBAAQ,CAAC,KAAK,CAAC,CAAC;IAC1E,aAAA;IAAM,iBAAA,IAAI,IAAI,CAAC,eAAe,KAAKA,gBAAQ,CAAC,MAAM,EAAE;IACjD,gBAAA,KAAK,GAAG,CAACA,gBAAQ,CAAC,MAAM,EAAEA,gBAAQ,CAAC,GAAG,EAAEA,gBAAQ,CAAC,IAAI,EAAEA,gBAAQ,CAAC,KAAK,CAAC,CAAC;IAC1E,aAAA;IAAM,iBAAA,IAAI,IAAI,CAAC,eAAe,KAAKA,gBAAQ,CAAC,IAAI,EAAE;IAC/C,gBAAA,KAAK,GAAG,CAACA,gBAAQ,CAAC,IAAI,EAAEA,gBAAQ,CAAC,KAAK,EAAEA,gBAAQ,CAAC,GAAG,EAAEA,gBAAQ,CAAC,MAAM,CAAC,CAAC;IAC1E,aAAA;IAAM,iBAAA,IAAI,IAAI,CAAC,eAAe,KAAKA,gBAAQ,CAAC,KAAK,EAAE;IAChD,gBAAA,KAAK,GAAG,CAACA,gBAAQ,CAAC,KAAK,EAAEA,gBAAQ,CAAC,IAAI,EAAEA,gBAAQ,CAAC,GAAG,EAAEA,gBAAQ,CAAC,MAAM,CAAC,CAAC;IAC1E,aAAA;IAED,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBACzC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,gBAAA,IAAI,QAAQ;wBAAE,MAAM;IACvB,aAAA;;IAGD,YAAA,OAAO,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC;aAC3C;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAY,WAAY,CAAA,SAAA,EAAA,cAAA,EAAA;IAJxB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;gBACI,IAAI,IAAI,CAAC,WAAW;oBAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC;gBAE3D,OAAO,IAAI,CAAC,sBAAsB,CAAC;aACtC;;;IAAA,KAAA,CAAA,CAAA;IAMD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAiB,CAAA,SAAA,EAAA,mBAAA,EAAA;IAJrB;;;IAGG;IACH,QAAA,GAAA,EAAA,YAAA;IACI,YAAA,OAAOK,SAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAACC,kBAAQ,EAAE,CAAC,CAAC;aAChD;;;IAAA,KAAA,CAAA,CAAA;IAED;;;IAGG;IACH,IAAA,WAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;IACI,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B,CAAA;IAED;;;;;IAKG;IACH,IAAA,WAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,YAAA;IACI,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB,CAAA;IAED;;;IAGG;QACH,WAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAc,YAAgC,EAAA;;IAC1C,QAAA,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE1B,IAAI,SAAS,IAAI,YAAY,EAAE;IAC3B,YAAA,IAAI,YAAY,CAAC,OAAO,YAAY,WAAW,EAAE;IAC7C,gBAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC;IAC9C,aAAA;IAAM,iBAAA;IACH,gBAAA,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,OAAkB,CAAC;IAC7D,aAAA;IACJ,SAAA;YAED,IAAI,gBAAgB,IAAI,YAAY;IAChC,YAAA,IAAI,CAAC,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAIF,qBAAQ,CAAC,cAAc,CAAC;YACvG,IAAI,WAAW,IAAI,YAAY;IAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAIA,qBAAQ,CAAC,SAAS,CAAC;YAExF,IAAI,mBAAmB,IAAI,YAAY;IACnC,YAAA,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,iBAAiD,CAAC;YAC5F,IAAI,kBAAkB,IAAI,YAAY,EAAE;IACpC,YAAA,IAAM,gBAAgB,GAAG,YAAY,CAAC,gBAA+C,CAAC;IACtF,YAAA,IAAI,CAAC,eAAe;IAChB,gBAAA,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC;gBACjG,IAAI,CAAC,IAAI,CAAC,eAAe;IAAE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACvE,SAAA;;YAGD,IAAM,4BAA4B,GAAY,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAC9F,QAAA,IAAI,4BAA4B,IAAI,UAAU,IAAI,YAAY,EAAE;gBAC5D,IAAI,IAAI,CAAC,eAAe;IAAE,gBAAA,IAAI,CAAC,wBAAwB,GAAG,YAAY,CAAC,QAAoC,CAAC;IAC5G,YAAA,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,QAAoC,CAAC;IAC5E,SAAA;IAAM,aAAA;gBACH,IAAI,IAAI,CAAC,eAAe,EAAE;IACtB,gBAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAC7C,aAAA;IAAM,iBAAA;IACH,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAgD,CAAC;IAC3E,aAAA;IACJ,SAAA;YAED,IAAI,kBAAkB,IAAI,YAAY;IAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,gBAA+C,CAAC;YACzF,IAAI,UAAU,IAAI,YAAY;IAAE,YAAA,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,QAAuB,CAAC;YAC5F,IAAI,WAAW,IAAI,YAAY;IAAE,YAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAiC,CAAC;YACjG,IAAI,YAAY,IAAI,YAAY;IAAE,YAAA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,UAAoB,CAAC;YACtF,IAAI,qBAAqB,IAAI,YAAY;IACrC,YAAA,IAAI,CAAC,mBAAmB;IACpB,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,mBAAmB,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAAA,qBAAQ,CAAC,mBAAmB,CAAC;SAClG,CAAA;IAED;;;;;;;;;;;IAWG;IACH,IAAA,WAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAc,cAA2B,EAAE,cAA2B,EAAA;YAAtE,IAyBC,KAAA,GAAA,IAAA,CAAA;IAzB0C,QAAA,IAAA,cAAA,KAAA,KAAA,CAAA,EAAA,EAAA,cAA2B,GAAA,EAAA,CAAA,EAAA;IAClE,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;IAClB,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;gBAErC,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACvB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1E,aAAA;gBAED,IAAI,CAAC,YAAY,GAAG,IAAIG,oBAAe,CAAmB,SAAS,CAAC,CAAC;IACrE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAIJ,YAAO,EAAE,CAAC;IACjC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAEvB,YAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,cAAc,EAAE;oBACjD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,aAAA;gBAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9E,SAAA;YAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAC9BK,sBAAY,CAAC,cAAc,CAAC,EAC5BC,aAAG,CAAC,YAAA,EAAM,OAAA,KAAI,CAAC,qBAAqB,CAA1B,EAA0B,CAAC,CACxC,CAAC;SACL,CAAA;IAED;;;IAGG;IACH,IAAA,WAAA,CAAA,SAAA,CAAA,aAAa,GAAb,YAAA;YACI,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO;IAE7B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAExB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACxB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAE7B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAE1B,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7E,SAAA;SACJ,CAAA;IAED;;;IAGG;IACK,IAAA,WAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,YAAA;YACJ,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B,CAAA;IAEO,IAAA,WAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,YAAA;;IACJ,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,qBAAqB,EAAE,CAAA,CAAC;YAC3F,IAAI,CAAC,IAAI,CAAC,WAAW;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC;SACvE,CAAA;IAEO,IAAA,WAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,YAAA;YACJ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAC/D,IAAI,CAAC,4BAA4B,EAAE,CAAC;SACvC,CAAA;QAEO,WAA4B,CAAA,SAAA,CAAA,4BAAA,GAA5B,UAA6B,WAAqB,EAAA;IACtD,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,WAAW,EAAE;gBAC1C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC;IAC1E,SAAA;SACJ,CAAA;IAEO,IAAA,WAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,YAAA;;IACJ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,qBAAqB,EAAE,CAAC;SACrE,CAAA;IAEO,IAAA,WAAA,CAAA,SAAA,CAAA,yBAAyB,GAAzB,YAAA;IACJ,QAAA,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,IAAI,GAAG,GAAW,CAAC,CAAC;IACpB,QAAA,IAAI,MAAM,GAAW,YAAY,CAAC,MAAM,CAAC;YACzC,IAAI,IAAI,GAAW,CAAC,CAAC;IACrB,QAAA,IAAI,KAAK,GAAW,YAAY,CAAC,KAAK,CAAC;IACvC,QAAA,IAAI,KAAK,GAAW,YAAY,CAAC,KAAK,CAAC;IACvC,QAAA,IAAI,MAAM,GAAW,YAAY,CAAC,MAAM,CAAC;YAEzC,IAAI,IAAI,CAAC,gBAAgB,EAAE;IACvB,YAAA,IAAM,cAAc,GAAW,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAC7F,YAAA,IAAM,aAAa,GAAW,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAEzF,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBAChD,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAE/C,YAAA,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;IAC5B,YAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC9B,MAAM,GAAG,cAAc,CAAC;gBACxB,KAAK,GAAG,aAAa,CAAC;IACzB,SAAA;YAED,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,EAAA,GAAA,EAAE,MAAM,EAAA,MAAA,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;SACnE,CAAA;IAEO,IAAA,WAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,YAAA;IACJ,QAAA,IAAM,QAAQ,GAAW,IAAI,CAAC,gBAAgB;kBACxC,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW;kBACnE,CAAC,CAAC;IACR,QAAA,IAAM,UAAU,GAAW,IAAI,CAAC,gBAAgB;kBAC1C,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY;kBACrE,CAAC,CAAC;YAER,IAAI,CAAC,kBAAkB,GAAG,EAAE,QAAQ,UAAA,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;SACtD,CAAA;IAEO,IAAA,WAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,YAAA;IACJ,QAAA,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,IAAI,CAAC,YAAY,GAAG;gBAChB,KAAK,EACD,YAAY,CAAC,KAAK;oBAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAACT,gBAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACnF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAACA,gBAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACzF,MAAM,EACF,YAAY,CAAC,MAAM;oBACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAACA,gBAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACjF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAACA,gBAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aAC9F,CAAC;SACL,CAAA;QAEO,WAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,KAAc,EAAA;YAClC,IAAM,SAAS,GAAG,UAAC,GAAY,EAAA;;gBAC3B,OAAO,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,EAAA,CAAG,MAAM,IAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,GAAG,GAAI,GAAG,CAAC,CAAC,CAAC;IACxE,SAAC,CAAC;YAEF,IAAM,YAAY,GAAW,UAAU,CAAC,MAAM,CAAC,KAAK,KAAL,IAAA,IAAA,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC;IAAE,YAAA,OAAO,IAAI,CAAC;IAE1D,QAAA,OAAO,YAAY,CAAC;SACvB,CAAA;QAEO,WAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,KAAc,EAAA;YAClC,IAAM,SAAS,GAAG,UAAC,GAAY,EAAA;gBAC3B,IAAM,QAAQ,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,YAAA,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,SAAC,CAAC;YAEF,IAAI;gBACA,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9D,SAAA;IAAC,QAAA,OAAM,EAAA,EAAA;IACJ,YAAA,OAAO,IAAI,CAAC;IACf,SAAA;SACJ,CAAA;QACJ,OAAA,WAAA,CAAA;IAAA,CAAA,EAAA;;ICr4CD;;IAEG;;;;;;;;;;;"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYTExeS1uZ3gtb3ZlcmxheS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYTExeS1uZ3gvb3ZlcmxheS1iYXNlL3NyYy9hMTF5LW5neC1vdmVybGF5LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==