{"version":3,"file":"3.DoEy4UqG.mjs","sources":["../../../../../../node_modules/@melt-ui/svelte/dist/internal/helpers/highlight.js","../../../../../../node_modules/@melt-ui/svelte/dist/internal/helpers/debounce.js","../../../../../../node_modules/@melt-ui/svelte/dist/internal/helpers/store/derivedVisible.js","../../../../../../node_modules/@melt-ui/svelte/dist/internal/helpers/rovingFocus.js","../../../../../../node_modules/@melt-ui/svelte/dist/internal/helpers/typeahead.js","../../../../../../node_modules/@melt-ui/svelte/dist/internal/actions/popper/action.js","../../../../../../node_modules/@melt-ui/svelte/dist/builders/menu/create.js","../../../../../../node_modules/@melt-ui/svelte/dist/builders/menubar/create.js","../../../../../../node_modules/@melt-ui/svelte/dist/builders/separator/create.js","../../../../../../node_modules/bits-ui/dist/bits/menu/ctx.js","../../../../../../node_modules/bits-ui/dist/bits/menu/components/menu-item.svelte","../../../../../../node_modules/bits-ui/dist/bits/menu/components/menu-separator.svelte","../../../../../../node_modules/bits-ui/dist/bits/menu/components/menu-content.svelte","../../../../../../node_modules/bits-ui/dist/bits/menubar/ctx.js","../../../../../../node_modules/bits-ui/dist/bits/menubar/components/menubar.svelte","../../../../../../node_modules/bits-ui/dist/bits/menubar/components/menubar-menu.svelte","../../../../../../node_modules/bits-ui/dist/bits/menubar/components/menubar-trigger.svelte","../../../../../../src/routes/(workspace)/Drop.svelte","../../../../../../src/routes/(workspace)/MenuGroup.svelte","../../../../../../src/routes/(workspace)/MenuItem.svelte","../../../../../../src/lib/cms/telegraph/index.ts","../../../../../../src/lib/pyodide/api/gen.ts","../../../../../../src/lib/pyodide/api/suggest.ts","../../../../../../src/routes/(workspace)/Menu.svelte","../../../../../../src/routes/(workspace)/+layout.svelte"],"sourcesContent":["export function addHighlight(element) {\n    element.setAttribute('data-highlighted', '');\n}\nexport function removeHighlight(element) {\n    element.removeAttribute('data-highlighted');\n}\n","export function debounce(fn, wait = 500) {\n    let timeout = null;\n    return function (...args) {\n        const later = () => {\n            timeout = null;\n            fn(...args);\n        };\n        timeout && clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n    };\n}\n","import { derived } from 'svelte/store';\n/**\n * Helper function to standardize the way we derive a visible state for the\n * popper/floating elements.\n */\nexport function derivedVisible(obj) {\n    const { open, forceVisible, activeTrigger } = obj;\n    return derived([open, forceVisible, activeTrigger], ([$open, $forceVisible, $activeTrigger]) => ($open || $forceVisible) && $activeTrigger !== null);\n}\n","import { isBrowser, isHTMLElement } from './is.js';\nimport { sleep } from './sleep.js';\n/**\n * Manage roving focus between elements. Sets the current active element to\n * tabindex -1 and the next element to tabindex 0.\n *\n * @param nextElement The element to focus on\n */\nexport function handleRovingFocus(nextElement) {\n    if (!isBrowser)\n        return;\n    sleep(1).then(() => {\n        const currentFocusedElement = document.activeElement;\n        if (!isHTMLElement(currentFocusedElement) || currentFocusedElement === nextElement)\n            return;\n        currentFocusedElement.tabIndex = -1;\n        if (nextElement) {\n            nextElement.tabIndex = 0;\n            nextElement.focus();\n        }\n    });\n}\nfunction getFocusableElements() {\n    return Array.from(document.querySelectorAll('a[href]:not([tabindex=\"-1\"]), button:not([disabled]):not([tabindex=\"-1\"]), input:not([disabled]):not([tabindex=\"-1\"]), select:not([disabled]):not([tabindex=\"-1\"]), textarea:not([disabled]):not([tabindex=\"-1\"]), [tabindex]:not([tabindex=\"-1\"])'));\n}\nexport function getNextFocusable(currentElement) {\n    const focusableElements = getFocusableElements();\n    const currentIndex = focusableElements.indexOf(currentElement);\n    const nextIndex = currentIndex + 1;\n    const nextElement = focusableElements[nextIndex];\n    if (nextIndex < focusableElements.length && isHTMLElement(nextElement)) {\n        return nextElement;\n    }\n    return null;\n}\nexport function getPreviousFocusable(currentElement) {\n    const focusableElements = getFocusableElements();\n    const currentIndex = focusableElements.indexOf(currentElement);\n    const previousIndex = currentIndex - 1;\n    const prevElement = focusableElements[previousIndex];\n    if (previousIndex >= 0 && isHTMLElement(prevElement)) {\n        return prevElement;\n    }\n    return null;\n}\n","import { get, writable } from 'svelte/store';\nimport { wrapArray } from './array.js';\nimport { debounce } from './debounce.js';\nimport { isHTMLElement } from './is.js';\nimport { handleRovingFocus } from './rovingFocus.js';\nimport { withGet } from './withGet.js';\n/**\n * Keys to ignore for typeahead so we aren't matching things\n * like `Shift menu item` or `Control center` or `Alt menu` when\n * a user presses those keys.\n */\nconst ignoredKeys = new Set(['Shift', 'Control', 'Alt', 'Meta', 'CapsLock', 'NumLock']);\n/**\n * Default options for the typeahead search.\n * We default to roving focus when a match is found, but\n * you can override this with the `onMatch` option.\n */\nconst defaults = {\n    onMatch: handleRovingFocus,\n    getCurrentItem: () => document.activeElement,\n};\nexport function createTypeaheadSearch(args = {}) {\n    const withDefaults = { ...defaults, ...args };\n    const typed = withGet(writable([]));\n    const resetTyped = debounce(() => {\n        typed.update(() => []);\n    });\n    const handleTypeaheadSearch = (key, items) => {\n        if (ignoredKeys.has(key))\n            return;\n        const currentItem = withDefaults.getCurrentItem();\n        const $typed = get(typed);\n        if (!Array.isArray($typed)) {\n            return;\n        }\n        $typed.push(key.toLowerCase());\n        typed.set($typed);\n        const candidateItems = items.filter((item) => {\n            if (item.getAttribute('disabled') === 'true' ||\n                item.getAttribute('aria-disabled') === 'true' ||\n                item.hasAttribute('data-disabled')) {\n                return false;\n            }\n            return true;\n        });\n        const isRepeated = $typed.length > 1 && $typed.every((char) => char === $typed[0]);\n        const normalizeSearch = isRepeated ? $typed[0] : $typed.join('');\n        const currentItemIndex = isHTMLElement(currentItem) ? candidateItems.indexOf(currentItem) : -1;\n        let wrappedItems = wrapArray(candidateItems, Math.max(currentItemIndex, 0));\n        const excludeCurrentItem = normalizeSearch.length === 1;\n        if (excludeCurrentItem) {\n            wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n        }\n        const nextItem = wrappedItems.find((item) => item?.innerText && item.innerText.toLowerCase().startsWith(normalizeSearch.toLowerCase()));\n        if (isHTMLElement(nextItem) && nextItem !== currentItem) {\n            withDefaults.onMatch(nextItem);\n        }\n        resetTyped();\n    };\n    return {\n        typed,\n        resetTyped,\n        handleTypeaheadSearch,\n    };\n}\n","import { createFocusTrap, useEscapeKeydown, useFloating, usePortal, } from '../index.js';\nimport { executeCallbacks, noop, isHTMLElement, } from '../../helpers/index.js';\nimport { useModal } from '../modal/action.js';\nconst defaultConfig = {\n    floating: {},\n    focusTrap: {},\n    modal: {},\n    escapeKeydown: {},\n    portal: 'body',\n};\nexport const usePopper = ((popperElement, args) => {\n    popperElement.dataset.escapee = '';\n    const { anchorElement, open, options } = args;\n    if (!anchorElement || !open || !options) {\n        return { destroy: noop };\n    }\n    const opts = { ...defaultConfig, ...options };\n    const callbacks = [];\n    if (opts.portal !== null) {\n        callbacks.push(usePortal(popperElement, opts.portal).destroy);\n    }\n    callbacks.push(useFloating(anchorElement, popperElement, opts.floating).destroy);\n    if (opts.focusTrap !== null) {\n        const { useFocusTrap } = createFocusTrap({\n            immediate: true,\n            escapeDeactivates: false,\n            allowOutsideClick: true,\n            returnFocusOnDeactivate: false,\n            fallbackFocus: popperElement,\n            ...opts.focusTrap,\n        });\n        callbacks.push(useFocusTrap(popperElement).destroy);\n    }\n    if (opts.modal !== null) {\n        callbacks.push(useModal(popperElement, {\n            onClose: () => {\n                if (isHTMLElement(anchorElement)) {\n                    open.set(false);\n                    anchorElement.focus();\n                }\n            },\n            shouldCloseOnInteractOutside: (e) => {\n                if (e.defaultPrevented)\n                    return false;\n                if (isHTMLElement(anchorElement) && anchorElement.contains(e.target)) {\n                    return false;\n                }\n                return true;\n            },\n            ...opts.modal,\n        }).destroy);\n    }\n    if (opts.escapeKeydown !== null) {\n        callbacks.push(useEscapeKeydown(popperElement, {\n            enabled: open,\n            handler: () => {\n                open.set(false);\n            },\n            ...opts.escapeKeydown,\n        }).destroy);\n    }\n    // @ts-expect-error - This works and is correct, but TS doesn't like it\n    const unsubscribe = executeCallbacks(...callbacks);\n    return {\n        destroy() {\n            unsubscribe();\n        },\n    };\n});\n","import { createSeparator } from '../index.js';\nimport { useEscapeKeydown, usePopper, usePortal } from '../../internal/actions/index.js';\nimport { FIRST_LAST_KEYS, SELECTION_KEYS, addEventListener, addHighlight, addMeltEventListener, makeElement, createElHelpers, createTypeaheadSearch, derivedVisible, disabledAttr, effect, executeCallbacks, generateIds, getNextFocusable, getPortalDestination, getPreviousFocusable, handleFocus, handleRovingFocus, isBrowser, isElementDisabled, isHTMLElement, kbd, noop, omit, overridable, removeHighlight, removeScroll, sleep, styleToString, toWritableStores, portalAttr, } from '../../internal/helpers/index.js';\nimport { tick } from 'svelte';\nimport { derived, writable } from 'svelte/store';\nimport { safeOnMount } from '../../internal/helpers/lifecycle.js';\nimport { withGet } from '../../internal/helpers/withGet.js';\nexport const SUB_OPEN_KEYS = {\n    ltr: [...SELECTION_KEYS, kbd.ARROW_RIGHT],\n    rtl: [...SELECTION_KEYS, kbd.ARROW_LEFT],\n};\nexport const SUB_CLOSE_KEYS = {\n    ltr: [kbd.ARROW_LEFT],\n    rtl: [kbd.ARROW_RIGHT],\n};\nexport const menuIdParts = ['menu', 'trigger'];\nconst defaults = {\n    arrowSize: 8,\n    positioning: {\n        placement: 'bottom',\n    },\n    preventScroll: true,\n    closeOnEscape: true,\n    closeOnOutsideClick: true,\n    portal: undefined,\n    loop: false,\n    dir: 'ltr',\n    defaultOpen: false,\n    typeahead: true,\n    closeOnItemClick: true,\n    onOutsideClick: undefined,\n};\nexport function createMenuBuilder(opts) {\n    const { name, selector } = createElHelpers(opts.selector);\n    const { preventScroll, arrowSize, positioning, closeOnEscape, closeOnOutsideClick, portal, forceVisible, typeahead, loop, closeFocus, disableFocusFirstItem, closeOnItemClick, onOutsideClick, } = opts.rootOptions;\n    const rootOpen = opts.rootOpen;\n    const rootActiveTrigger = opts.rootActiveTrigger;\n    /**\n     * Keeps track of the next/previous focusable element when the menu closes.\n     * This is because we are portaling the menu to the body and we need\n     * to be able to focus the next element in the DOM when the menu closes.\n     *\n     * Without keeping track of this, the focus would be reset to the top of\n     * the page (or the first focusable element in the body).\n     */\n    const nextFocusable = opts.nextFocusable;\n    const prevFocusable = opts.prevFocusable;\n    /**\n     * Keeps track of if the user is using the keyboard to navigate the menu.\n     * This is used to determine how we handle focus on open behavior differently\n     * than when the user is using the mouse.\n     */\n    const isUsingKeyboard = withGet.writable(false);\n    /**\n     * Stores used to manage the grace area for submenus. This prevents us\n     * from closing a submenu when the user is moving their mouse from the\n     * trigger to the submenu.\n     */\n    const lastPointerX = withGet(writable(0));\n    const pointerGraceIntent = withGet(writable(null));\n    const pointerDir = withGet(writable('right'));\n    /**\n     * Track currently focused item in the menu.\n     */\n    const currentFocusedItem = withGet(writable(null));\n    const pointerMovingToSubmenu = withGet(derived([pointerDir, pointerGraceIntent], ([$pointerDir, $pointerGraceIntent]) => {\n        return (e) => {\n            const isMovingTowards = $pointerDir === $pointerGraceIntent?.side;\n            return isMovingTowards && isPointerInGraceArea(e, $pointerGraceIntent?.area);\n        };\n    }));\n    const { typed, handleTypeaheadSearch } = createTypeaheadSearch();\n    const rootIds = toWritableStores({ ...generateIds(menuIdParts), ...opts.ids });\n    const isVisible = derivedVisible({\n        open: rootOpen,\n        forceVisible,\n        activeTrigger: rootActiveTrigger,\n    });\n    const rootMenu = makeElement(name(), {\n        stores: [isVisible, portal, rootIds.menu, rootIds.trigger],\n        returned: ([$isVisible, $portal, $rootMenuId, $rootTriggerId]) => {\n            return {\n                role: 'menu',\n                hidden: $isVisible ? undefined : true,\n                style: styleToString({\n                    display: $isVisible ? undefined : 'none',\n                }),\n                id: $rootMenuId,\n                'aria-labelledby': $rootTriggerId,\n                'data-state': $isVisible ? 'open' : 'closed',\n                'data-portal': portalAttr($portal),\n                tabindex: -1,\n            };\n        },\n        action: (node) => {\n            let unsubPopper = noop;\n            const unsubDerived = effect([isVisible, rootActiveTrigger, positioning, closeOnOutsideClick, portal, closeOnEscape], ([$isVisible, $rootActiveTrigger, $positioning, $closeOnOutsideClick, $portal, $closeOnEscape,]) => {\n                unsubPopper();\n                if (!$isVisible || !$rootActiveTrigger)\n                    return;\n                tick().then(() => {\n                    unsubPopper();\n                    setMeltMenuAttribute(node, selector);\n                    unsubPopper = usePopper(node, {\n                        anchorElement: $rootActiveTrigger,\n                        open: rootOpen,\n                        options: {\n                            floating: $positioning,\n                            modal: {\n                                closeOnInteractOutside: $closeOnOutsideClick,\n                                shouldCloseOnInteractOutside: (e) => {\n                                    onOutsideClick.get()?.(e);\n                                    if (e.defaultPrevented)\n                                        return false;\n                                    if (isHTMLElement($rootActiveTrigger) &&\n                                        $rootActiveTrigger.contains(e.target)) {\n                                        return false;\n                                    }\n                                    return true;\n                                },\n                                onClose: () => {\n                                    rootOpen.set(false);\n                                    $rootActiveTrigger.focus();\n                                },\n                                open: $isVisible,\n                            },\n                            portal: getPortalDestination(node, $portal),\n                            escapeKeydown: $closeOnEscape ? undefined : null,\n                        },\n                    }).destroy;\n                });\n            });\n            const unsubEvents = executeCallbacks(addMeltEventListener(node, 'keydown', (e) => {\n                const target = e.target;\n                const menuEl = e.currentTarget;\n                if (!isHTMLElement(target) || !isHTMLElement(menuEl))\n                    return;\n                /**\n                 * Submenu key events bubble through portals and\n                 * we only care about key events that happen inside this menu.\n                 */\n                const isKeyDownInside = target.closest('[role=\"menu\"]') === menuEl;\n                if (!isKeyDownInside)\n                    return;\n                if (FIRST_LAST_KEYS.includes(e.key)) {\n                    handleMenuNavigation(e, loop.get() ?? false);\n                }\n                /**\n                 * Menus should not be navigated using tab\n                 * @see https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_general_within\n                 */\n                if (e.key === kbd.TAB) {\n                    e.preventDefault();\n                    rootOpen.set(false);\n                    handleTabNavigation(e, nextFocusable, prevFocusable);\n                    return;\n                }\n                /**\n                 * Check for typeahead search and handle it.\n                 */\n                const isCharacterKey = e.key.length === 1;\n                const isModifierKey = e.ctrlKey || e.altKey || e.metaKey;\n                if (!isModifierKey && isCharacterKey && typeahead.get() === true) {\n                    handleTypeaheadSearch(e.key, getMenuItems(menuEl));\n                }\n            }));\n            return {\n                destroy() {\n                    unsubDerived();\n                    unsubEvents();\n                    unsubPopper();\n                },\n            };\n        },\n    });\n    const rootTrigger = makeElement(name('trigger'), {\n        stores: [rootOpen, rootIds.menu, rootIds.trigger],\n        returned: ([$rootOpen, $rootMenuId, $rootTriggerId]) => {\n            return {\n                'aria-controls': $rootMenuId,\n                'aria-expanded': $rootOpen,\n                'data-state': $rootOpen ? 'open' : 'closed',\n                id: $rootTriggerId,\n                tabindex: 0,\n            };\n        },\n        action: (node) => {\n            applyAttrsIfDisabled(node);\n            rootActiveTrigger.update((p) => {\n                if (p)\n                    return p;\n                return node;\n            });\n            const unsub = executeCallbacks(addMeltEventListener(node, 'click', (e) => {\n                const $rootOpen = rootOpen.get();\n                const triggerEl = e.currentTarget;\n                if (!isHTMLElement(triggerEl))\n                    return;\n                handleOpen(triggerEl);\n                if (!$rootOpen)\n                    e.preventDefault();\n            }), addMeltEventListener(node, 'keydown', (e) => {\n                const triggerEl = e.currentTarget;\n                if (!isHTMLElement(triggerEl))\n                    return;\n                if (!(SELECTION_KEYS.includes(e.key) || e.key === kbd.ARROW_DOWN))\n                    return;\n                e.preventDefault();\n                handleOpen(triggerEl);\n                const menuId = triggerEl.getAttribute('aria-controls');\n                if (!menuId)\n                    return;\n                const menu = document.getElementById(menuId);\n                if (!menu)\n                    return;\n                const menuItems = getMenuItems(menu);\n                if (!menuItems.length)\n                    return;\n                handleRovingFocus(menuItems[0]);\n            }));\n            return {\n                destroy: unsub,\n            };\n        },\n    });\n    const rootArrow = makeElement(name('arrow'), {\n        stores: arrowSize,\n        returned: ($arrowSize) => ({\n            'data-arrow': true,\n            style: styleToString({\n                position: 'absolute',\n                width: `var(--arrow-size, ${$arrowSize}px)`,\n                height: `var(--arrow-size, ${$arrowSize}px)`,\n            }),\n        }),\n    });\n    const overlay = makeElement(name('overlay'), {\n        stores: [isVisible],\n        returned: ([$isVisible]) => {\n            return {\n                hidden: $isVisible ? undefined : true,\n                tabindex: -1,\n                style: styleToString({\n                    display: $isVisible ? undefined : 'none',\n                }),\n                'aria-hidden': 'true',\n                'data-state': stateAttr($isVisible),\n            };\n        },\n        action: (node) => {\n            let unsubEscapeKeydown = noop;\n            if (closeOnEscape.get()) {\n                const escapeKeydown = useEscapeKeydown(node, {\n                    handler: () => {\n                        rootOpen.set(false);\n                        const $rootActiveTrigger = rootActiveTrigger.get();\n                        if ($rootActiveTrigger)\n                            $rootActiveTrigger.focus();\n                    },\n                });\n                if (escapeKeydown && escapeKeydown.destroy) {\n                    unsubEscapeKeydown = escapeKeydown.destroy;\n                }\n            }\n            const unsubPortal = effect([portal], ([$portal]) => {\n                if ($portal === null)\n                    return noop;\n                const portalDestination = getPortalDestination(node, $portal);\n                if (portalDestination === null)\n                    return noop;\n                return usePortal(node, portalDestination).destroy;\n            });\n            return {\n                destroy() {\n                    unsubEscapeKeydown();\n                    unsubPortal();\n                },\n            };\n        },\n    });\n    const item = makeElement(name('item'), {\n        returned: () => {\n            return {\n                role: 'menuitem',\n                tabindex: -1,\n                'data-orientation': 'vertical',\n            };\n        },\n        action: (node) => {\n            setMeltMenuAttribute(node, selector);\n            applyAttrsIfDisabled(node);\n            const unsub = executeCallbacks(addMeltEventListener(node, 'pointerdown', (e) => {\n                const itemEl = e.currentTarget;\n                if (!isHTMLElement(itemEl))\n                    return;\n                if (isElementDisabled(itemEl)) {\n                    e.preventDefault();\n                    return;\n                }\n            }), addMeltEventListener(node, 'click', (e) => {\n                const itemEl = e.currentTarget;\n                if (!isHTMLElement(itemEl))\n                    return;\n                if (isElementDisabled(itemEl)) {\n                    e.preventDefault();\n                    return;\n                }\n                if (e.defaultPrevented) {\n                    handleRovingFocus(itemEl);\n                    return;\n                }\n                if (closeOnItemClick.get()) {\n                    // Allows forms to submit before the menu is removed from the DOM\n                    sleep(1).then(() => {\n                        rootOpen.set(false);\n                    });\n                }\n            }), addMeltEventListener(node, 'keydown', (e) => {\n                onItemKeyDown(e);\n            }), addMeltEventListener(node, 'pointermove', (e) => {\n                onMenuItemPointerMove(e);\n            }), addMeltEventListener(node, 'pointerleave', (e) => {\n                onMenuItemPointerLeave(e);\n            }), addMeltEventListener(node, 'focusin', (e) => {\n                onItemFocusIn(e);\n            }), addMeltEventListener(node, 'focusout', (e) => {\n                onItemFocusOut(e);\n            }));\n            return {\n                destroy: unsub,\n            };\n        },\n    });\n    const group = makeElement(name('group'), {\n        returned: () => {\n            return (groupId) => ({\n                role: 'group',\n                'aria-labelledby': groupId,\n            });\n        },\n    });\n    const groupLabel = makeElement(name('group-label'), {\n        returned: () => {\n            return (groupId) => ({\n                id: groupId,\n            });\n        },\n    });\n    const checkboxItemDefaults = {\n        defaultChecked: false,\n        disabled: false,\n    };\n    const createCheckboxItem = (props) => {\n        const withDefaults = { ...checkboxItemDefaults, ...props };\n        const checkedWritable = withDefaults.checked ?? writable(withDefaults.defaultChecked ?? null);\n        const checked = overridable(checkedWritable, withDefaults.onCheckedChange);\n        const disabled = writable(withDefaults.disabled);\n        const checkboxItem = makeElement(name('checkbox-item'), {\n            stores: [checked, disabled],\n            returned: ([$checked, $disabled]) => {\n                return {\n                    role: 'menuitemcheckbox',\n                    tabindex: -1,\n                    'data-orientation': 'vertical',\n                    'aria-checked': isIndeterminate($checked) ? 'mixed' : $checked ? 'true' : 'false',\n                    'data-disabled': disabledAttr($disabled),\n                    'data-state': getCheckedState($checked),\n                };\n            },\n            action: (node) => {\n                setMeltMenuAttribute(node, selector);\n                applyAttrsIfDisabled(node);\n                const unsub = executeCallbacks(addMeltEventListener(node, 'pointerdown', (e) => {\n                    const itemEl = e.currentTarget;\n                    if (!isHTMLElement(itemEl))\n                        return;\n                    if (isElementDisabled(itemEl)) {\n                        e.preventDefault();\n                        return;\n                    }\n                }), addMeltEventListener(node, 'click', (e) => {\n                    const itemEl = e.currentTarget;\n                    if (!isHTMLElement(itemEl))\n                        return;\n                    if (isElementDisabled(itemEl)) {\n                        e.preventDefault();\n                        return;\n                    }\n                    if (e.defaultPrevented) {\n                        handleRovingFocus(itemEl);\n                        return;\n                    }\n                    checked.update((prev) => {\n                        if (isIndeterminate(prev))\n                            return true;\n                        return !prev;\n                    });\n                    if (closeOnItemClick.get()) {\n                        // We're waiting for a tick to let the checked store update\n                        // before closing the menu. If we don't, and the user was to hit\n                        // spacebar or enter twice really fast, the menu would close and\n                        // reopen without the checked state being updated.\n                        tick().then(() => {\n                            rootOpen.set(false);\n                        });\n                    }\n                }), addMeltEventListener(node, 'keydown', (e) => {\n                    onItemKeyDown(e);\n                }), addMeltEventListener(node, 'pointermove', (e) => {\n                    const itemEl = e.currentTarget;\n                    if (!isHTMLElement(itemEl))\n                        return;\n                    if (isElementDisabled(itemEl)) {\n                        onItemLeave(e);\n                        return;\n                    }\n                    onMenuItemPointerMove(e, itemEl);\n                }), addMeltEventListener(node, 'pointerleave', (e) => {\n                    onMenuItemPointerLeave(e);\n                }), addMeltEventListener(node, 'focusin', (e) => {\n                    onItemFocusIn(e);\n                }), addMeltEventListener(node, 'focusout', (e) => {\n                    onItemFocusOut(e);\n                }));\n                return {\n                    destroy: unsub,\n                };\n            },\n        });\n        const isChecked = derived(checked, ($checked) => $checked === true);\n        const _isIndeterminate = derived(checked, ($checked) => $checked === 'indeterminate');\n        return {\n            elements: {\n                checkboxItem,\n            },\n            states: {\n                checked,\n            },\n            helpers: {\n                isChecked,\n                isIndeterminate: _isIndeterminate,\n            },\n            options: {\n                disabled,\n            },\n        };\n    };\n    const createMenuRadioGroup = (args = {}) => {\n        const valueWritable = args.value ?? writable(args.defaultValue ?? null);\n        const value = overridable(valueWritable, args.onValueChange);\n        const radioGroup = makeElement(name('radio-group'), {\n            returned: () => ({\n                role: 'group',\n            }),\n        });\n        const radioItemDefaults = {\n            disabled: false,\n        };\n        const radioItem = makeElement(name('radio-item'), {\n            stores: [value],\n            returned: ([$value]) => {\n                return (itemProps) => {\n                    const { value: itemValue, disabled } = { ...radioItemDefaults, ...itemProps };\n                    const checked = $value === itemValue;\n                    return {\n                        disabled,\n                        role: 'menuitemradio',\n                        'data-state': checked ? 'checked' : 'unchecked',\n                        'aria-checked': checked,\n                        'data-disabled': disabledAttr(disabled),\n                        'data-value': itemValue,\n                        'data-orientation': 'vertical',\n                        tabindex: -1,\n                    };\n                };\n            },\n            action: (node) => {\n                setMeltMenuAttribute(node, selector);\n                const unsub = executeCallbacks(addMeltEventListener(node, 'pointerdown', (e) => {\n                    const itemEl = e.currentTarget;\n                    if (!isHTMLElement(itemEl))\n                        return;\n                    const itemValue = node.dataset.value;\n                    const disabled = node.dataset.disabled;\n                    if (disabled || itemValue === undefined) {\n                        e.preventDefault();\n                        return;\n                    }\n                }), addMeltEventListener(node, 'click', (e) => {\n                    const itemEl = e.currentTarget;\n                    if (!isHTMLElement(itemEl))\n                        return;\n                    const itemValue = node.dataset.value;\n                    const disabled = node.dataset.disabled;\n                    if (disabled || itemValue === undefined) {\n                        e.preventDefault();\n                        return;\n                    }\n                    if (e.defaultPrevented) {\n                        if (!isHTMLElement(itemEl))\n                            return;\n                        handleRovingFocus(itemEl);\n                        return;\n                    }\n                    value.set(itemValue);\n                    if (closeOnItemClick.get()) {\n                        // We're waiting for a tick to let the checked store update\n                        // before closing the menu. If we don't, and the user was to hit\n                        // spacebar or enter twice really fast, the menu would close and\n                        // reopen without the checked state being updated.\n                        tick().then(() => {\n                            rootOpen.set(false);\n                        });\n                    }\n                }), addMeltEventListener(node, 'keydown', (e) => {\n                    onItemKeyDown(e);\n                }), addMeltEventListener(node, 'pointermove', (e) => {\n                    const itemEl = e.currentTarget;\n                    if (!isHTMLElement(itemEl))\n                        return;\n                    const itemValue = node.dataset.value;\n                    const disabled = node.dataset.disabled;\n                    if (disabled || itemValue === undefined) {\n                        onItemLeave(e);\n                        return;\n                    }\n                    onMenuItemPointerMove(e, itemEl);\n                }), addMeltEventListener(node, 'pointerleave', (e) => {\n                    onMenuItemPointerLeave(e);\n                }), addMeltEventListener(node, 'focusin', (e) => {\n                    onItemFocusIn(e);\n                }), addMeltEventListener(node, 'focusout', (e) => {\n                    onItemFocusOut(e);\n                }));\n                return {\n                    destroy: unsub,\n                };\n            },\n        });\n        const isChecked = derived(value, ($value) => {\n            return (itemValue) => {\n                return $value === itemValue;\n            };\n        });\n        return {\n            elements: {\n                radioGroup,\n                radioItem,\n            },\n            states: {\n                value,\n            },\n            helpers: {\n                isChecked,\n            },\n        };\n    };\n    const { elements: { root: separator }, } = createSeparator({\n        orientation: 'horizontal',\n    });\n    /* -------------------------------------------------------------------------------------------------\n     * SUBMENU\n     * -----------------------------------------------------------------------------------------------*/\n    const subMenuDefaults = {\n        ...defaults,\n        disabled: false,\n        positioning: {\n            placement: 'right-start',\n            gutter: 8,\n        },\n    };\n    const createSubmenu = (args) => {\n        const withDefaults = { ...subMenuDefaults, ...args };\n        const subOpenWritable = withDefaults.open ?? writable(false);\n        const subOpen = overridable(subOpenWritable, withDefaults?.onOpenChange);\n        // options\n        const options = toWritableStores(omit(withDefaults, 'ids'));\n        const { positioning, arrowSize, disabled } = options;\n        const subActiveTrigger = withGet(writable(null));\n        const subOpenTimer = withGet(writable(null));\n        const pointerGraceTimer = withGet(writable(0));\n        const subIds = toWritableStores({ ...generateIds(menuIdParts), ...withDefaults.ids });\n        safeOnMount(() => {\n            /**\n             * Set active trigger on mount to handle controlled/forceVisible\n             * state.\n             */\n            const subTrigger = document.getElementById(subIds.trigger.get());\n            if (subTrigger) {\n                subActiveTrigger.set(subTrigger);\n            }\n        });\n        const subIsVisible = derivedVisible({\n            open: subOpen,\n            forceVisible,\n            activeTrigger: subActiveTrigger,\n        });\n        const subMenu = makeElement(name('submenu'), {\n            stores: [subIsVisible, subIds.menu, subIds.trigger],\n            returned: ([$subIsVisible, $subMenuId, $subTriggerId]) => {\n                return {\n                    role: 'menu',\n                    hidden: $subIsVisible ? undefined : true,\n                    style: styleToString({\n                        display: $subIsVisible ? undefined : 'none',\n                    }),\n                    id: $subMenuId,\n                    'aria-labelledby': $subTriggerId,\n                    'data-state': $subIsVisible ? 'open' : 'closed',\n                    // unit tests fail on `.closest` if the id starts with a number\n                    // so using a data attribute\n                    'data-id': $subMenuId,\n                    tabindex: -1,\n                };\n            },\n            action: (node) => {\n                let unsubPopper = noop;\n                const unsubDerived = effect([subIsVisible, positioning], ([$subIsVisible, $positioning]) => {\n                    unsubPopper();\n                    if (!$subIsVisible)\n                        return;\n                    const activeTrigger = subActiveTrigger.get();\n                    if (!activeTrigger)\n                        return;\n                    tick().then(() => {\n                        unsubPopper();\n                        const parentMenuEl = getParentMenu(activeTrigger);\n                        unsubPopper = usePopper(node, {\n                            anchorElement: activeTrigger,\n                            open: subOpen,\n                            options: {\n                                floating: $positioning,\n                                portal: isHTMLElement(parentMenuEl) ? parentMenuEl : undefined,\n                                modal: null,\n                                focusTrap: null,\n                                escapeKeydown: null,\n                            },\n                        }).destroy;\n                    });\n                });\n                const unsubEvents = executeCallbacks(addMeltEventListener(node, 'keydown', (e) => {\n                    if (e.key === kbd.ESCAPE) {\n                        return;\n                    }\n                    // Submenu key events bubble through portals.\n                    // We only want the keys in this menu.\n                    const target = e.target;\n                    const menuEl = e.currentTarget;\n                    if (!isHTMLElement(target) || !isHTMLElement(menuEl))\n                        return;\n                    const isKeyDownInside = target.closest('[role=\"menu\"]') === menuEl;\n                    if (!isKeyDownInside)\n                        return;\n                    if (FIRST_LAST_KEYS.includes(e.key)) {\n                        // prevent events from bubbling\n                        e.stopImmediatePropagation();\n                        handleMenuNavigation(e, loop.get() ?? false);\n                        return;\n                    }\n                    const isCloseKey = SUB_CLOSE_KEYS['ltr'].includes(e.key);\n                    const isModifierKey = e.ctrlKey || e.altKey || e.metaKey;\n                    const isCharacterKey = e.key.length === 1;\n                    // close the submenu if the user presses a close key\n                    if (isCloseKey) {\n                        const $subActiveTrigger = subActiveTrigger.get();\n                        e.preventDefault();\n                        subOpen.update(() => {\n                            if ($subActiveTrigger) {\n                                handleRovingFocus($subActiveTrigger);\n                            }\n                            return false;\n                        });\n                        return;\n                    }\n                    /**\n                     * Menus should not be navigated using tab, so we prevent it.\n                     * @see https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_general_within\n                     */\n                    if (e.key === kbd.TAB) {\n                        e.preventDefault();\n                        rootOpen.set(false);\n                        handleTabNavigation(e, nextFocusable, prevFocusable);\n                        return;\n                    }\n                    if (!isModifierKey && isCharacterKey && typeahead.get() === true) {\n                        // typeahead logic\n                        handleTypeaheadSearch(e.key, getMenuItems(menuEl));\n                    }\n                }), addMeltEventListener(node, 'pointermove', (e) => {\n                    onMenuPointerMove(e);\n                }), addMeltEventListener(node, 'focusout', (e) => {\n                    const $subActiveTrigger = subActiveTrigger.get();\n                    if (isUsingKeyboard.get()) {\n                        const target = e.target;\n                        const submenuEl = document.getElementById(subIds.menu.get());\n                        if (!isHTMLElement(submenuEl) || !isHTMLElement(target))\n                            return;\n                        if (!submenuEl.contains(target) && target !== $subActiveTrigger) {\n                            subOpen.set(false);\n                        }\n                    }\n                    else {\n                        const menuEl = e.currentTarget;\n                        const relatedTarget = e.relatedTarget;\n                        if (!isHTMLElement(relatedTarget) || !isHTMLElement(menuEl))\n                            return;\n                        if (!menuEl.contains(relatedTarget) && relatedTarget !== $subActiveTrigger) {\n                            subOpen.set(false);\n                        }\n                    }\n                }));\n                return {\n                    destroy() {\n                        unsubDerived();\n                        unsubPopper();\n                        unsubEvents();\n                    },\n                };\n            },\n        });\n        const subTrigger = makeElement(name('subtrigger'), {\n            stores: [subOpen, disabled, subIds.menu, subIds.trigger],\n            returned: ([$subOpen, $disabled, $subMenuId, $subTriggerId]) => {\n                return {\n                    role: 'menuitem',\n                    id: $subTriggerId,\n                    tabindex: -1,\n                    'aria-controls': $subMenuId,\n                    'aria-expanded': $subOpen,\n                    'data-state': $subOpen ? 'open' : 'closed',\n                    'data-disabled': disabledAttr($disabled),\n                    'aria-haspopop': 'menu',\n                };\n            },\n            action: (node) => {\n                setMeltMenuAttribute(node, selector);\n                applyAttrsIfDisabled(node);\n                subActiveTrigger.update((p) => {\n                    if (p)\n                        return p;\n                    return node;\n                });\n                const unsubTimer = () => {\n                    clearTimerStore(subOpenTimer);\n                    window.clearTimeout(pointerGraceTimer.get());\n                    pointerGraceIntent.set(null);\n                };\n                const unsubEvents = executeCallbacks(addMeltEventListener(node, 'click', (e) => {\n                    if (e.defaultPrevented)\n                        return;\n                    const triggerEl = e.currentTarget;\n                    if (!isHTMLElement(triggerEl) || isElementDisabled(triggerEl))\n                        return;\n                    // Manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n                    handleRovingFocus(triggerEl);\n                    if (!subOpen.get()) {\n                        subOpen.update((prev) => {\n                            const isAlreadyOpen = prev;\n                            if (!isAlreadyOpen) {\n                                subActiveTrigger.set(triggerEl);\n                                return !prev;\n                            }\n                            return prev;\n                        });\n                    }\n                }), addMeltEventListener(node, 'keydown', (e) => {\n                    const $typed = typed.get();\n                    const triggerEl = e.currentTarget;\n                    if (!isHTMLElement(triggerEl) || isElementDisabled(triggerEl))\n                        return;\n                    const isTypingAhead = $typed.length > 0;\n                    if (isTypingAhead && e.key === kbd.SPACE)\n                        return;\n                    if (SUB_OPEN_KEYS['ltr'].includes(e.key)) {\n                        if (!subOpen.get()) {\n                            triggerEl.click();\n                            e.preventDefault();\n                            return;\n                        }\n                        const menuId = triggerEl.getAttribute('aria-controls');\n                        if (!menuId)\n                            return;\n                        const menuEl = document.getElementById(menuId);\n                        if (!isHTMLElement(menuEl))\n                            return;\n                        const firstItem = getMenuItems(menuEl)[0];\n                        handleRovingFocus(firstItem);\n                    }\n                }), addMeltEventListener(node, 'pointermove', (e) => {\n                    if (!isMouse(e))\n                        return;\n                    onItemEnter(e);\n                    if (e.defaultPrevented)\n                        return;\n                    const triggerEl = e.currentTarget;\n                    if (!isHTMLElement(triggerEl))\n                        return;\n                    if (!isFocusWithinSubmenu(subIds.menu.get())) {\n                        handleRovingFocus(triggerEl);\n                    }\n                    const openTimer = subOpenTimer.get();\n                    if (!subOpen.get() && !openTimer && !isElementDisabled(triggerEl)) {\n                        subOpenTimer.set(window.setTimeout(() => {\n                            subOpen.update(() => {\n                                subActiveTrigger.set(triggerEl);\n                                return true;\n                            });\n                            clearTimerStore(subOpenTimer);\n                        }, 100));\n                    }\n                }), addMeltEventListener(node, 'pointerleave', (e) => {\n                    if (!isMouse(e))\n                        return;\n                    clearTimerStore(subOpenTimer);\n                    const submenuEl = document.getElementById(subIds.menu.get());\n                    const contentRect = submenuEl?.getBoundingClientRect();\n                    if (contentRect) {\n                        const side = submenuEl?.dataset.side;\n                        const rightSide = side === 'right';\n                        const bleed = rightSide ? -5 : +5;\n                        const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];\n                        const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];\n                        pointerGraceIntent.set({\n                            area: [\n                                // Apply a bleed on clientX to ensure that our exit point is\n                                // consistently within polygon bounds\n                                { x: e.clientX + bleed, y: e.clientY },\n                                { x: contentNearEdge, y: contentRect.top },\n                                { x: contentFarEdge, y: contentRect.top },\n                                { x: contentFarEdge, y: contentRect.bottom },\n                                { x: contentNearEdge, y: contentRect.bottom },\n                            ],\n                            side,\n                        });\n                        window.clearTimeout(pointerGraceTimer.get());\n                        pointerGraceTimer.set(window.setTimeout(() => {\n                            pointerGraceIntent.set(null);\n                        }, 300));\n                    }\n                    else {\n                        onTriggerLeave(e);\n                        if (e.defaultPrevented)\n                            return;\n                        // There's 100ms where the user may leave an item before the submenu was opened.\n                        pointerGraceIntent.set(null);\n                    }\n                }), addMeltEventListener(node, 'focusout', (e) => {\n                    const triggerEl = e.currentTarget;\n                    if (!isHTMLElement(triggerEl))\n                        return;\n                    removeHighlight(triggerEl);\n                    const relatedTarget = e.relatedTarget;\n                    if (!isHTMLElement(relatedTarget))\n                        return;\n                    const menuId = triggerEl.getAttribute('aria-controls');\n                    if (!menuId)\n                        return;\n                    const menu = document.getElementById(menuId);\n                    if (menu && !menu.contains(relatedTarget)) {\n                        subOpen.set(false);\n                    }\n                }), addMeltEventListener(node, 'focusin', (e) => {\n                    onItemFocusIn(e);\n                }));\n                return {\n                    destroy() {\n                        unsubTimer();\n                        unsubEvents();\n                    },\n                };\n            },\n        });\n        const subArrow = makeElement(name('subarrow'), {\n            stores: arrowSize,\n            returned: ($arrowSize) => ({\n                'data-arrow': true,\n                style: styleToString({\n                    position: 'absolute',\n                    width: `var(--arrow-size, ${$arrowSize}px)`,\n                    height: `var(--arrow-size, ${$arrowSize}px)`,\n                }),\n            }),\n        });\n        /* -------------------------------------------------------------------------------------------------\n         * Sub Menu Effects\n         * -----------------------------------------------------------------------------------------------*/\n        effect([rootOpen], ([$rootOpen]) => {\n            if (!$rootOpen) {\n                subActiveTrigger.set(null);\n                subOpen.set(false);\n            }\n        });\n        effect([pointerGraceIntent], ([$pointerGraceIntent]) => {\n            if (!isBrowser || $pointerGraceIntent)\n                return;\n            window.clearTimeout(pointerGraceTimer.get());\n        });\n        effect([subOpen], ([$subOpen]) => {\n            if (!isBrowser)\n                return;\n            if ($subOpen && isUsingKeyboard.get()) {\n                sleep(1).then(() => {\n                    const menuEl = document.getElementById(subIds.menu.get());\n                    if (!menuEl)\n                        return;\n                    const menuItems = getMenuItems(menuEl);\n                    if (!menuItems.length)\n                        return;\n                    handleRovingFocus(menuItems[0]);\n                });\n            }\n            if (!$subOpen) {\n                const focusedItem = currentFocusedItem.get();\n                const subTriggerEl = document.getElementById(subIds.trigger.get());\n                if (focusedItem) {\n                    sleep(1).then(() => {\n                        const menuEl = document.getElementById(subIds.menu.get());\n                        if (!menuEl)\n                            return;\n                        if (menuEl.contains(focusedItem)) {\n                            removeHighlight(focusedItem);\n                        }\n                    });\n                }\n                if (!subTriggerEl || document.activeElement === subTriggerEl)\n                    return;\n                removeHighlight(subTriggerEl);\n            }\n        });\n        return {\n            ids: subIds,\n            elements: {\n                subTrigger,\n                subMenu,\n                subArrow,\n            },\n            states: {\n                subOpen,\n            },\n            options,\n        };\n    };\n    safeOnMount(() => {\n        /**\n         * We need to set the active trigger on mount to cover the\n         * case where the user sets the `open` store to `true` without\n         * clicking on the trigger.\n         */\n        const triggerEl = document.getElementById(rootIds.trigger.get());\n        if (isHTMLElement(triggerEl) && rootOpen.get()) {\n            rootActiveTrigger.set(triggerEl);\n        }\n        const unsubs = [];\n        const handlePointer = () => isUsingKeyboard.set(false);\n        const handleKeyDown = () => {\n            isUsingKeyboard.set(true);\n            unsubs.push(executeCallbacks(addEventListener(document, 'pointerdown', handlePointer, { capture: true, once: true }), addEventListener(document, 'pointermove', handlePointer, { capture: true, once: true })));\n        };\n        const keydownListener = (e) => {\n            if (e.key === kbd.ESCAPE && closeOnEscape.get()) {\n                rootOpen.set(false);\n                return;\n            }\n        };\n        unsubs.push(addEventListener(document, 'keydown', handleKeyDown, { capture: true }));\n        unsubs.push(addEventListener(document, 'keydown', keydownListener));\n        return () => {\n            unsubs.forEach((unsub) => unsub());\n        };\n    });\n    /* -------------------------------------------------------------------------------------------------\n     * Root Effects\n     * -----------------------------------------------------------------------------------------------*/\n    effect([rootOpen, currentFocusedItem], ([$rootOpen, $currentFocusedItem]) => {\n        if (!$rootOpen && $currentFocusedItem) {\n            removeHighlight($currentFocusedItem);\n        }\n    });\n    effect([rootOpen], ([$rootOpen]) => {\n        if (!isBrowser)\n            return;\n        if (!$rootOpen) {\n            const $rootActiveTrigger = rootActiveTrigger.get();\n            if (!$rootActiveTrigger)\n                return;\n            const $closeFocus = closeFocus.get();\n            if (!$rootOpen && $rootActiveTrigger) {\n                handleFocus({ prop: $closeFocus, defaultEl: $rootActiveTrigger });\n            }\n        }\n    });\n    effect([rootOpen, preventScroll], ([$rootOpen, $preventScroll]) => {\n        if (!isBrowser)\n            return;\n        const unsubs = [];\n        if (opts.removeScroll && $rootOpen && $preventScroll) {\n            unsubs.push(removeScroll());\n        }\n        // if the menu is open, we'll sleep for a sec so the menu can render\n        // before we focus on either the first item or the menu itself.\n        sleep(1).then(() => {\n            const menuEl = document.getElementById(rootIds.menu.get());\n            if (menuEl && $rootOpen && isUsingKeyboard.get()) {\n                if (disableFocusFirstItem.get()) {\n                    handleRovingFocus(menuEl);\n                    return;\n                }\n                // Get menu items belonging to the root menu\n                const menuItems = getMenuItems(menuEl);\n                if (!menuItems.length)\n                    return;\n                // Focus on first menu item\n                handleRovingFocus(menuItems[0]);\n            }\n        });\n        return () => {\n            unsubs.forEach((unsub) => unsub());\n        };\n    });\n    effect(rootOpen, ($rootOpen) => {\n        if (!isBrowser)\n            return;\n        const handlePointer = () => isUsingKeyboard.set(false);\n        const handleKeyDown = (e) => {\n            isUsingKeyboard.set(true);\n            if (e.key === kbd.ESCAPE && $rootOpen && closeOnEscape.get()) {\n                rootOpen.set(false);\n                return;\n            }\n        };\n        return executeCallbacks(addEventListener(document, 'pointerdown', handlePointer, { capture: true, once: true }), addEventListener(document, 'pointermove', handlePointer, { capture: true, once: true }), addEventListener(document, 'keydown', handleKeyDown, { capture: true }));\n    });\n    function handleOpen(triggerEl) {\n        rootOpen.update((prev) => {\n            const isOpen = !prev;\n            if (isOpen) {\n                nextFocusable.set(getNextFocusable(triggerEl));\n                prevFocusable.set(getPreviousFocusable(triggerEl));\n                rootActiveTrigger.set(triggerEl);\n            }\n            return isOpen;\n        });\n    }\n    /* -------------------------------------------------------------------------------------------------\n     * Pointer Event Effects\n     * -----------------------------------------------------------------------------------------------*/\n    function onItemFocusIn(e) {\n        const itemEl = e.currentTarget;\n        if (!isHTMLElement(itemEl))\n            return;\n        const $currentFocusedItem = currentFocusedItem.get();\n        if ($currentFocusedItem) {\n            removeHighlight($currentFocusedItem);\n        }\n        addHighlight(itemEl);\n        /**\n         * Accomodates for Firefox focus event behavior, which differs\n         * from other browsers. We're setting the current focused item\n         * so when we close the menu, we can remove the data-highlighted\n         * attribute from the item, since a blur nor focusout event will be fired\n         * when the menu is closed via `clickOutside` or the ESC key.\n         */\n        currentFocusedItem.set(itemEl);\n    }\n    /**\n     * Each of the menu items share the same focusout event handler.\n     */\n    function onItemFocusOut(e) {\n        const itemEl = e.currentTarget;\n        if (!isHTMLElement(itemEl))\n            return;\n        removeHighlight(itemEl);\n    }\n    function onItemEnter(e) {\n        if (isPointerMovingToSubmenu(e)) {\n            e.preventDefault();\n        }\n    }\n    function onItemLeave(e) {\n        if (isPointerMovingToSubmenu(e)) {\n            return;\n        }\n        const target = e.target;\n        if (!isHTMLElement(target))\n            return;\n        const parentMenuEl = getParentMenu(target);\n        if (!parentMenuEl)\n            return;\n        handleRovingFocus(parentMenuEl);\n    }\n    function onTriggerLeave(e) {\n        if (isPointerMovingToSubmenu(e)) {\n            e.preventDefault();\n        }\n    }\n    function onMenuPointerMove(e) {\n        if (!isMouse(e))\n            return;\n        const target = e.target;\n        const currentTarget = e.currentTarget;\n        if (!isHTMLElement(currentTarget) || !isHTMLElement(target))\n            return;\n        const $lastPointerX = lastPointerX.get();\n        const pointerXHasChanged = $lastPointerX !== e.clientX;\n        // We don't use `e.movementX` for this check because Safari will\n        // always return `0` on a pointer e.\n        if (currentTarget.contains(target) && pointerXHasChanged) {\n            const newDir = e.clientX > $lastPointerX ? 'right' : 'left';\n            pointerDir.set(newDir);\n            lastPointerX.set(e.clientX);\n        }\n    }\n    function onMenuItemPointerMove(e, currTarget = null) {\n        if (!isMouse(e))\n            return;\n        onItemEnter(e);\n        if (e.defaultPrevented)\n            return;\n        // if we've already checked the current target, we don't need to again\n        if (currTarget) {\n            handleRovingFocus(currTarget);\n            return;\n        }\n        // otherwise we will\n        const currentTarget = e.currentTarget;\n        if (!isHTMLElement(currentTarget))\n            return;\n        // focus on the current menu item\n        handleRovingFocus(currentTarget);\n    }\n    function onMenuItemPointerLeave(e) {\n        if (!isMouse(e))\n            return;\n        onItemLeave(e);\n    }\n    /* -------------------------------------------------------------------------------------------------\n     * Helper Functions\n     * -----------------------------------------------------------------------------------------------*/\n    function onItemKeyDown(e) {\n        const $typed = typed.get();\n        const isTypingAhead = $typed.length > 0;\n        if (isTypingAhead && e.key === kbd.SPACE) {\n            e.preventDefault();\n            return;\n        }\n        if (SELECTION_KEYS.includes(e.key)) {\n            /**\n             * We prevent default browser behaviour for selection keys as they should trigger\n             * a selection only:\n             * - prevents space from scrolling the page.\n             * - if keydown causes focus to move, prevents keydown from firing on the new target.\n             */\n            e.preventDefault();\n            const itemEl = e.currentTarget;\n            if (!isHTMLElement(itemEl))\n                return;\n            itemEl.click();\n        }\n    }\n    function isIndeterminate(checked) {\n        return checked === 'indeterminate';\n    }\n    function getCheckedState(checked) {\n        return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n    }\n    function isPointerMovingToSubmenu(e) {\n        return pointerMovingToSubmenu.get()(e);\n    }\n    /**\n     * Get the parent menu element for a menu item.\n     * @param element The menu item element\n     */\n    function getParentMenu(element) {\n        const parentMenuEl = element.closest('[role=\"menu\"]');\n        if (!isHTMLElement(parentMenuEl))\n            return null;\n        return parentMenuEl;\n    }\n    return {\n        elements: {\n            trigger: rootTrigger,\n            menu: rootMenu,\n            overlay,\n            item,\n            group,\n            groupLabel,\n            arrow: rootArrow,\n            separator,\n        },\n        builders: {\n            createCheckboxItem,\n            createSubmenu,\n            createMenuRadioGroup,\n        },\n        states: {\n            open: rootOpen,\n        },\n        helpers: {\n            handleTypeaheadSearch,\n        },\n        ids: rootIds,\n        options: opts.rootOptions,\n    };\n}\nexport function handleTabNavigation(e, nextFocusable, prevFocusable) {\n    if (e.shiftKey) {\n        const $prevFocusable = prevFocusable.get();\n        if ($prevFocusable) {\n            e.preventDefault();\n            sleep(1).then(() => $prevFocusable.focus());\n            prevFocusable.set(null);\n        }\n    }\n    else {\n        const $nextFocusable = nextFocusable.get();\n        if ($nextFocusable) {\n            e.preventDefault();\n            sleep(1).then(() => $nextFocusable.focus());\n            nextFocusable.set(null);\n        }\n    }\n}\n/**\n * Get the menu items for a given menu element.\n * This only selects menu items that are direct children of the menu element,\n * not menu items that are nested in submenus.\n * @param element The menu item element\n */\nexport function getMenuItems(menuElement) {\n    return Array.from(menuElement.querySelectorAll(`[data-melt-menu-id=\"${menuElement.id}\"]`)).filter((item) => isHTMLElement(item));\n}\nexport function applyAttrsIfDisabled(element) {\n    if (!element || !isElementDisabled(element))\n        return;\n    element.setAttribute('data-disabled', '');\n    element.setAttribute('aria-disabled', 'true');\n}\n/**\n * Given a timer store, clear the timeout and set the store to null\n * @param openTimer The timer store\n */\nexport function clearTimerStore(timerStore) {\n    if (!isBrowser)\n        return;\n    const timer = timerStore.get();\n    if (timer) {\n        window.clearTimeout(timer);\n        timerStore.set(null);\n    }\n}\n/**\n * Check if the event is a mouse event\n * @param e The pointer event\n */\nfunction isMouse(e) {\n    return e.pointerType === 'mouse';\n}\n/**\n * Set the `data-melt-menu-id` attribute on a menu item element.\n * @param element The menu item element\n */\nexport function setMeltMenuAttribute(element, selector) {\n    if (!element)\n        return;\n    const menuEl = element.closest(`${selector()}, ${selector('submenu')}`);\n    if (!isHTMLElement(menuEl))\n        return;\n    element.setAttribute('data-melt-menu-id', menuEl.id);\n}\n/**\n * Keyboard event handler for menu navigation\n * @param e The keyboard event\n */\nexport function handleMenuNavigation(e, loop) {\n    e.preventDefault();\n    // currently focused menu item\n    const currentFocusedItem = document.activeElement;\n    // menu element being navigated\n    const currentTarget = e.currentTarget;\n    if (!isHTMLElement(currentFocusedItem) || !isHTMLElement(currentTarget))\n        return;\n    // menu items of the current menu\n    const menuItems = getMenuItems(currentTarget);\n    if (!menuItems.length)\n        return;\n    const candidateNodes = menuItems.filter((item) => {\n        if (item.hasAttribute('data-disabled') || item.getAttribute('disabled') === 'true') {\n            return false;\n        }\n        return true;\n    });\n    // Index of the currently focused item in the candidate nodes array\n    const currentIndex = candidateNodes.indexOf(currentFocusedItem);\n    // Calculate the index of the next menu item\n    let nextIndex;\n    switch (e.key) {\n        case kbd.ARROW_DOWN:\n            if (loop) {\n                nextIndex = currentIndex < candidateNodes.length - 1 ? currentIndex + 1 : 0;\n            }\n            else {\n                nextIndex = currentIndex < candidateNodes.length - 1 ? currentIndex + 1 : currentIndex;\n            }\n            break;\n        case kbd.ARROW_UP:\n            if (loop) {\n                nextIndex = currentIndex > 0 ? currentIndex - 1 : candidateNodes.length - 1;\n            }\n            else {\n                nextIndex =\n                    currentIndex < 0 ? candidateNodes.length - 1 : currentIndex > 0 ? currentIndex - 1 : 0;\n            }\n            break;\n        case kbd.HOME:\n            nextIndex = 0;\n            break;\n        case kbd.END:\n            nextIndex = candidateNodes.length - 1;\n            break;\n        default:\n            return;\n    }\n    handleRovingFocus(candidateNodes[nextIndex]);\n}\nfunction isPointerInGraceArea(e, area) {\n    if (!area)\n        return false;\n    const cursorPos = { x: e.clientX, y: e.clientY };\n    return isPointInPolygon(cursorPos, area);\n}\n/**\n * Determine if a point is inside of a polygon.\n *\n * @see https://github.com/substack/point-in-polygon\n */\nfunction isPointInPolygon(point, polygon) {\n    const { x, y } = point;\n    let inside = false;\n    for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n        const xi = polygon[i].x;\n        const yi = polygon[i].y;\n        const xj = polygon[j].x;\n        const yj = polygon[j].y;\n        // prettier-ignore\n        const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n        if (intersect)\n            inside = !inside;\n    }\n    return inside;\n}\nfunction isFocusWithinSubmenu(submenuId) {\n    const activeEl = document.activeElement;\n    if (!isHTMLElement(activeEl))\n        return false;\n    // unit tests don't allow `.closest(#id)` to start with a number\n    // so we're using a data attribute.\n    const submenuEl = activeEl.closest(`[data-id=\"${submenuId}\"]`);\n    return isHTMLElement(submenuEl);\n}\nfunction stateAttr(open) {\n    return open ? 'open' : 'closed';\n}\n","import { usePopper } from '../../internal/actions/index.js';\nimport { FIRST_LAST_KEYS, SELECTION_KEYS, addEventListener, addHighlight, addMeltEventListener, makeElement, createElHelpers, derivedVisible, effect, executeCallbacks, generateIds, getNextFocusable, getPortalDestination, getPreviousFocusable, handleRovingFocus, isBrowser, isElement, isHTMLElement, kbd, noop, omit, removeHighlight, removeScroll, styleToString, toWritableStores, portalAttr, } from '../../internal/helpers/index.js';\nimport { safeOnDestroy, safeOnMount } from '../../internal/helpers/lifecycle.js';\nimport { tick } from 'svelte';\nimport { writable } from 'svelte/store';\nimport { applyAttrsIfDisabled, createMenuBuilder, getMenuItems, handleMenuNavigation, handleTabNavigation, } from '../menu/index.js';\nimport { withGet } from '../../internal/helpers/withGet.js';\nconst MENUBAR_NAV_KEYS = [kbd.ARROW_LEFT, kbd.ARROW_RIGHT, kbd.HOME, kbd.END];\nconst { name } = createElHelpers('menubar');\nconst defaults = {\n    loop: true,\n    closeOnEscape: true,\n    preventScroll: false,\n};\nexport const menubarIdParts = ['menubar'];\nexport function createMenubar(props) {\n    const withDefaults = { ...defaults, ...props };\n    const options = toWritableStores(omit(withDefaults, 'ids'));\n    const { loop, closeOnEscape, preventScroll } = options;\n    const activeMenu = withGet(writable(''));\n    const nextFocusable = withGet(writable(null));\n    const prevFocusable = withGet(writable(null));\n    const lastFocusedMenuTrigger = withGet(writable(null));\n    const closeTimer = withGet(writable(0));\n    let scrollRemoved = false;\n    const ids = toWritableStores({ ...generateIds(menubarIdParts), ...withDefaults.ids });\n    const menubar = makeElement(name(), {\n        stores: [ids.menubar],\n        returned([$menubarId]) {\n            return {\n                role: 'menubar',\n                'data-melt-menubar': '',\n                'data-orientation': 'horizontal',\n                id: $menubarId,\n            };\n        },\n        action: (node) => {\n            const menuTriggers = Array.from(node.querySelectorAll('[data-melt-menubar-trigger]'));\n            if (!isHTMLElement(menuTriggers[0]))\n                return {};\n            menuTriggers[0].tabIndex = 0;\n            return {\n                destroy: noop,\n            };\n        },\n    });\n    const menuDefaults = {\n        positioning: {\n            placement: 'bottom-start',\n        },\n        arrowSize: 8,\n        dir: 'ltr',\n        loop: false,\n        closeOnEscape: true,\n        closeOnOutsideClick: true,\n        portal: undefined,\n        forceVisible: false,\n        defaultOpen: false,\n        typeahead: true,\n        closeFocus: undefined,\n        disableFocusFirstItem: false,\n        closeOnItemClick: true,\n        onOutsideClick: undefined,\n    };\n    const createMenu = (props) => {\n        const withDefaults = { ...menuDefaults, ...props };\n        const rootOpen = withGet(writable(false));\n        const rootActiveTrigger = withGet(writable(null));\n        // options\n        const options = toWritableStores(withDefaults);\n        const { positioning, portal, forceVisible, closeOnOutsideClick, onOutsideClick } = options;\n        const m = createMenuBuilder({\n            rootOptions: { ...options, preventScroll },\n            rootOpen: withGet(rootOpen),\n            rootActiveTrigger: withGet(rootActiveTrigger),\n            nextFocusable: withGet(nextFocusable),\n            prevFocusable: withGet(prevFocusable),\n            selector: 'menubar-menu',\n            removeScroll: false,\n        });\n        const isVisible = derivedVisible({\n            open: rootOpen,\n            forceVisible,\n            activeTrigger: rootActiveTrigger,\n        });\n        const menu = makeElement(name('menu'), {\n            stores: [isVisible, portal, m.ids.menu, m.ids.trigger, ids.menubar],\n            returned: ([$isVisible, $portal, $menuId, $triggerId, $menubarId]) => {\n                return {\n                    role: 'menu',\n                    hidden: $isVisible ? undefined : true,\n                    style: styleToString({\n                        display: $isVisible ? undefined : 'none',\n                    }),\n                    id: $menuId,\n                    'aria-labelledby': $triggerId,\n                    'data-state': $isVisible ? 'open' : 'closed',\n                    'data-melt-scope': $menubarId,\n                    'data-portal': portalAttr($portal),\n                    tabindex: -1,\n                };\n            },\n            action: (node) => {\n                let unsubPopper = noop;\n                const unsubDerived = effect([rootOpen, rootActiveTrigger, positioning, portal, closeOnOutsideClick], ([$rootOpen, $rootActiveTrigger, $positioning, $portal, $closeOnOutsideClick]) => {\n                    unsubPopper();\n                    if (!($rootOpen && $rootActiveTrigger))\n                        return;\n                    tick().then(() => {\n                        unsubPopper();\n                        unsubPopper = usePopper(node, {\n                            anchorElement: $rootActiveTrigger,\n                            open: rootOpen,\n                            options: {\n                                floating: $positioning,\n                                portal: getPortalDestination(node, $portal),\n                                modal: {\n                                    closeOnInteractOutside: $closeOnOutsideClick,\n                                    shouldCloseOnInteractOutside: (e) => {\n                                        onOutsideClick.get()?.(e);\n                                        if (e.defaultPrevented)\n                                            return false;\n                                        const target = e.target;\n                                        const menubarEl = document.getElementById(ids.menubar.get());\n                                        if (!menubarEl || !isElement(target))\n                                            return true;\n                                        if (menubarEl.contains(target))\n                                            return false;\n                                        return true;\n                                    },\n                                    onClose: () => {\n                                        activeMenu.set('');\n                                    },\n                                    open: $rootOpen,\n                                },\n                            },\n                        }).destroy;\n                    });\n                });\n                const unsubEvents = executeCallbacks(addMeltEventListener(node, 'keydown', (e) => {\n                    const target = e.target;\n                    const menuEl = e.currentTarget;\n                    if (!isHTMLElement(menuEl) || !isHTMLElement(target))\n                        return;\n                    if (MENUBAR_NAV_KEYS.includes(e.key)) {\n                        handleCrossMenuNavigation(e);\n                    }\n                    /**\n                     * Submenu key events bubble through portals and\n                     * we only care about key events that happen inside this menu.\n                     */\n                    const isKeyDownInside = target.closest('[role=\"menu\"]') === menuEl;\n                    if (!isKeyDownInside)\n                        return;\n                    if (FIRST_LAST_KEYS.includes(e.key)) {\n                        handleMenuNavigation(e);\n                    }\n                    /**\n                     * Menus should not be navigated using tab, so we prevent it.\n                     * @see https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_general_within\n                     */\n                    if (e.key === kbd.TAB) {\n                        e.preventDefault();\n                        rootActiveTrigger.set(null);\n                        rootOpen.set(false);\n                        handleTabNavigation(e, nextFocusable, prevFocusable);\n                    }\n                    /**\n                     * Check for typeahead search and handle it.\n                     */\n                    const isCharacterKey = e.key.length === 1;\n                    const isModifierKey = e.ctrlKey || e.altKey || e.metaKey;\n                    if (!isModifierKey && isCharacterKey) {\n                        m.helpers.handleTypeaheadSearch(e.key, getMenuItems(menuEl));\n                    }\n                }));\n                return {\n                    destroy() {\n                        unsubDerived();\n                        unsubEvents();\n                        unsubPopper();\n                    },\n                };\n            },\n        });\n        const trigger = makeElement(name('trigger'), {\n            stores: [rootOpen, m.ids.menu, m.ids.trigger],\n            returned: ([$rootOpen, $menuId, $triggerId]) => {\n                return {\n                    'aria-controls': $menuId,\n                    'aria-expanded': $rootOpen,\n                    'data-state': $rootOpen ? 'open' : 'closed',\n                    id: $triggerId,\n                    'aria-haspopup': 'menu',\n                    'data-orientation': 'horizontal',\n                    role: 'menuitem',\n                };\n            },\n            action: (node) => {\n                applyAttrsIfDisabled(node);\n                const menubarEl = document.getElementById(ids.menubar.get());\n                if (!menubarEl)\n                    return {};\n                const menubarTriggers = Array.from(menubarEl.querySelectorAll('[data-melt-menubar-trigger]'));\n                if (!menubarTriggers.length)\n                    return {};\n                const unsubEffect = effect([lastFocusedMenuTrigger], ([$lastFocusedMenuTrigger]) => {\n                    if (!$lastFocusedMenuTrigger && menubarTriggers[0] === node) {\n                        node.tabIndex = 0;\n                    }\n                    else if ($lastFocusedMenuTrigger === node) {\n                        node.tabIndex = 0;\n                    }\n                    else {\n                        node.tabIndex = -1;\n                    }\n                });\n                if (menubarTriggers[0] === node) {\n                    node.tabIndex = 0;\n                }\n                else {\n                    node.tabIndex = -1;\n                }\n                const unsub = executeCallbacks(addMeltEventListener(node, 'click', (e) => {\n                    const $rootOpen = rootOpen.get();\n                    const triggerEl = e.currentTarget;\n                    if (!isHTMLElement(triggerEl))\n                        return;\n                    handleOpen(triggerEl);\n                    if (!$rootOpen)\n                        e.preventDefault();\n                }), addMeltEventListener(node, 'keydown', (e) => {\n                    const triggerEl = e.currentTarget;\n                    if (!isHTMLElement(triggerEl))\n                        return;\n                    if (SELECTION_KEYS.includes(e.key) || e.key === kbd.ARROW_DOWN) {\n                        e.preventDefault();\n                        handleOpen(triggerEl);\n                        const menuId = triggerEl.getAttribute('aria-controls');\n                        if (!menuId)\n                            return;\n                        const menu = document.getElementById(menuId);\n                        if (!menu)\n                            return;\n                        const menuItems = getMenuItems(menu);\n                        if (!menuItems.length)\n                            return;\n                        handleRovingFocus(menuItems[0]);\n                    }\n                }), addMeltEventListener(node, 'pointerenter', (e) => {\n                    const triggerEl = e.currentTarget;\n                    if (!isHTMLElement(triggerEl))\n                        return;\n                    const $activeMenu = activeMenu.get();\n                    const $rootOpen = rootOpen.get();\n                    if ($activeMenu && !$rootOpen) {\n                        rootOpen.set(true);\n                        activeMenu.set(m.ids.menu.get());\n                        rootActiveTrigger.set(triggerEl);\n                    }\n                }));\n                return {\n                    destroy() {\n                        unsub();\n                        unsubEffect();\n                    },\n                };\n            },\n        });\n        function handleOpen(triggerEl) {\n            rootOpen.update((prev) => {\n                const isOpen = !prev;\n                if (isOpen) {\n                    nextFocusable.set(getNextFocusable(triggerEl));\n                    prevFocusable.set(getPreviousFocusable(triggerEl));\n                    rootActiveTrigger.set(triggerEl);\n                    activeMenu.set(m.ids.menu.get());\n                }\n                else {\n                    rootActiveTrigger.set(null);\n                }\n                return isOpen;\n            });\n        }\n        effect([activeMenu], ([$activeMenu]) => {\n            if (!isBrowser)\n                return;\n            if ($activeMenu === m.ids.menu.get()) {\n                if (rootOpen.get())\n                    return;\n                const triggerEl = document.getElementById(m.ids.trigger.get());\n                if (!triggerEl)\n                    return;\n                rootActiveTrigger.set(triggerEl);\n                addHighlight(triggerEl);\n                rootOpen.set(true);\n                return;\n            }\n            if ($activeMenu !== m.ids.menu.get()) {\n                if (!isBrowser)\n                    return;\n                if (rootOpen.get()) {\n                    const triggerEl = document.getElementById(m.ids.trigger.get());\n                    if (!triggerEl)\n                        return;\n                    rootActiveTrigger.set(null);\n                    rootOpen.set(false);\n                    removeHighlight(triggerEl);\n                }\n                return;\n            }\n        });\n        effect([rootOpen], ([$rootOpen]) => {\n            if (!isBrowser)\n                return;\n            const triggerEl = document.getElementById(m.ids.trigger.get());\n            if (!triggerEl)\n                return;\n            if (!$rootOpen && activeMenu.get() === m.ids.menu.get()) {\n                rootActiveTrigger.set(null);\n                activeMenu.set('');\n                removeHighlight(triggerEl);\n                return;\n            }\n            if ($rootOpen) {\n                lastFocusedMenuTrigger.set(triggerEl);\n                addHighlight(triggerEl);\n            }\n        });\n        safeOnMount(() => {\n            if (!isBrowser)\n                return;\n            const triggerEl = document.getElementById(m.ids.trigger.get());\n            if (isHTMLElement(triggerEl) && rootOpen.get()) {\n                rootActiveTrigger.set(triggerEl);\n            }\n        });\n        return {\n            ids: m.ids,\n            elements: {\n                ...m.elements,\n                menu,\n                trigger,\n            },\n            builders: m.builders,\n            states: m.states,\n            options,\n        };\n    };\n    /* -------- */\n    /* Helpers */\n    /* -------- */\n    /**\n     * KBD Navigation handler for moving between menus in the menu bar.\n     */\n    function handleCrossMenuNavigation(e) {\n        if (!isBrowser)\n            return;\n        e.preventDefault();\n        // menu element being navigated\n        const currentTarget = e.currentTarget;\n        const target = e.target;\n        if (!isHTMLElement(target) || !isHTMLElement(currentTarget))\n            return;\n        const targetIsSubTrigger = target.hasAttribute('data-melt-menubar-menu-subtrigger');\n        const isKeyDownInsideSubMenu = target.closest('[role=\"menu\"]') !== currentTarget;\n        const prevMenuKey = kbd.ARROW_LEFT;\n        const isPrevKey = e.key === prevMenuKey;\n        const isNextKey = !isPrevKey;\n        // prevent navigation when opening a submenu\n        if (isNextKey && targetIsSubTrigger)\n            return;\n        // prevent navigation when closing a submenu\n        if (isPrevKey && isKeyDownInsideSubMenu)\n            return;\n        // Index of the currently focused item in the candidate nodes array\n        const menubarEl = document.getElementById(ids.menubar.get());\n        if (!isHTMLElement(menubarEl))\n            return;\n        const triggers = getMenuTriggers(menubarEl);\n        const currTriggerId = currentTarget.getAttribute('aria-labelledby');\n        const currIndex = triggers.findIndex((trigger) => trigger.id === currTriggerId);\n        let nextIndex;\n        switch (e.key) {\n            case kbd.ARROW_RIGHT:\n                nextIndex = currIndex < triggers.length - 1 ? currIndex + 1 : 0;\n                break;\n            case kbd.ARROW_LEFT:\n                nextIndex = currIndex > 0 ? currIndex - 1 : triggers.length - 1;\n                break;\n            case kbd.HOME:\n                nextIndex = 0;\n                break;\n            case kbd.END:\n                nextIndex = triggers.length - 1;\n                break;\n            default:\n                return;\n        }\n        const nextFocusedTrigger = triggers[nextIndex];\n        const menuId = nextFocusedTrigger.getAttribute('aria-controls');\n        menuId && activeMenu.set(menuId);\n    }\n    function getMenuTriggers(el) {\n        const menuEl = el.closest('[role=\"menubar\"]');\n        if (!isHTMLElement(menuEl))\n            return [];\n        return Array.from(menuEl.querySelectorAll('[data-melt-menubar-trigger]')).filter((el) => isHTMLElement(el));\n    }\n    /**\n     * Keyboard event handler for menubar navigation.\n     * @param e The keyboard event\n     */\n    function handleMenubarNavigation(e) {\n        e.preventDefault();\n        // currently focused menu item\n        const currentFocusedItem = document.activeElement;\n        // menu element being navigated\n        const currentTarget = e.currentTarget;\n        if (!isHTMLElement(currentTarget) || !isHTMLElement(currentFocusedItem))\n            return;\n        // menu items of the current menu\n        const menuTriggers = getMenuTriggers(currentTarget);\n        if (!menuTriggers.length)\n            return;\n        const candidateNodes = menuTriggers.filter((item) => {\n            if (item.hasAttribute('data-disabled')) {\n                return false;\n            }\n            if (item.getAttribute('disabled') === 'true') {\n                return false;\n            }\n            return true;\n        });\n        // Index of the currently focused item in the candidate nodes array\n        const currentIndex = candidateNodes.indexOf(currentFocusedItem);\n        // Calculate the index of the next menu item\n        let nextIndex;\n        const $loop = loop.get();\n        switch (e.key) {\n            case kbd.ARROW_RIGHT:\n                nextIndex =\n                    currentIndex < candidateNodes.length - 1 ? currentIndex + 1 : $loop ? 0 : currentIndex;\n                break;\n            case kbd.ARROW_LEFT:\n                nextIndex = currentIndex > 0 ? currentIndex - 1 : $loop ? candidateNodes.length - 1 : 0;\n                break;\n            case kbd.HOME:\n                nextIndex = 0;\n                break;\n            case kbd.END:\n                nextIndex = candidateNodes.length - 1;\n                break;\n            default:\n                return;\n        }\n        handleRovingFocus(candidateNodes[nextIndex]);\n    }\n    /* --------------------*/\n    /* Lifecycle & Effects */\n    /* --------------------*/\n    safeOnMount(() => {\n        if (!isBrowser)\n            return;\n        const menubarEl = document.getElementById(ids.menubar.get());\n        if (!menubarEl)\n            return;\n        const unsubEvents = executeCallbacks(addMeltEventListener(menubarEl, 'keydown', (e) => {\n            const target = e.target;\n            const menuEl = e.currentTarget;\n            if (!isHTMLElement(menuEl) || !isHTMLElement(target))\n                return;\n            /**\n             * Submenu key events bubble through portals and\n             * we only care about key events that happen inside this menu.\n             */\n            const isTargetTrigger = target.hasAttribute('data-melt-menubar-trigger');\n            if (!isTargetTrigger)\n                return;\n            if (MENUBAR_NAV_KEYS.includes(e.key)) {\n                handleMenubarNavigation(e);\n            }\n        }), addEventListener(document, 'keydown', (e) => {\n            if (closeOnEscape.get() && e.key === kbd.ESCAPE) {\n                window.clearTimeout(closeTimer.get());\n                activeMenu.set('');\n            }\n        }));\n        return () => {\n            unsubEvents();\n        };\n    });\n    const unsubs = [];\n    effect([activeMenu, preventScroll], ([$activeMenu, $preventScroll]) => {\n        if (!isBrowser || !$preventScroll)\n            return;\n        /**\n         * To prevent adding/removing the scroll as we cycle through\n         * menus (which causes horrible performance issues), we only\n         * want to remove the scroll when the first menu is opened, and\n         * remove it when no menus are open.\n         */\n        if (!$activeMenu) {\n            unsubs.forEach((unsub) => unsub());\n            scrollRemoved = false;\n        }\n        else if (!scrollRemoved) {\n            unsubs.push(removeScroll());\n            scrollRemoved = true;\n        }\n    });\n    safeOnDestroy(() => {\n        unsubs.forEach((unsub) => unsub());\n    });\n    return {\n        ids,\n        elements: {\n            menubar,\n        },\n        builders: {\n            createMenu,\n        },\n        options,\n    };\n}\n","import { makeElement, toWritableStores } from '../../internal/helpers/index.js';\nconst defaults = {\n    orientation: 'horizontal',\n    decorative: false,\n};\nexport const createSeparator = (props) => {\n    const withDefaults = { ...defaults, ...props };\n    const options = toWritableStores(withDefaults);\n    const { orientation, decorative } = options;\n    const root = makeElement('separator', {\n        stores: [orientation, decorative],\n        returned: ([$orientation, $decorative]) => {\n            const ariaOrientation = $orientation === 'vertical' ? $orientation : undefined;\n            return {\n                role: $decorative ? 'none' : 'separator',\n                'aria-orientation': ariaOrientation,\n                'aria-hidden': $decorative,\n                'data-orientation': $orientation,\n            };\n        },\n    });\n    return {\n        elements: {\n            root,\n        },\n        options,\n    };\n};\n","import { createDropdownMenu, } from \"@melt-ui/svelte\";\nimport { getContext, setContext } from \"svelte\";\nimport { getPositioningUpdater } from \"../floating/helpers.js\";\nimport { createBitAttrs, generateId, getOptionUpdater, removeUndefined, } from \"../../internal/index.js\";\nexport function getMenuData() {\n    const NAME = \"menu\";\n    const SUB_NAME = \"menu-submenu\";\n    const RADIO_GROUP_NAME = \"menu-radiogroup\";\n    const CHECKBOX_ITEM_NAME = \"menu-checkboxitem\";\n    const RADIO_ITEM_NAME = \"menu-radioitem\";\n    const GROUP_NAME = \"menu-group\";\n    const PARTS = [\n        \"arrow\",\n        \"checkbox-indicator\",\n        \"checkbox-item\",\n        \"content\",\n        \"group\",\n        \"item\",\n        \"label\",\n        \"radio-group\",\n        \"radio-item\",\n        \"radio-indicator\",\n        \"separator\",\n        \"sub-content\",\n        \"sub-trigger\",\n        \"trigger\",\n    ];\n    return {\n        NAME,\n        SUB_NAME,\n        RADIO_GROUP_NAME,\n        CHECKBOX_ITEM_NAME,\n        RADIO_ITEM_NAME,\n        GROUP_NAME,\n        PARTS,\n    };\n}\nexport function getCtx() {\n    const { NAME } = getMenuData();\n    return getContext(NAME);\n}\nexport function setCtx(props) {\n    const { NAME, PARTS } = getMenuData();\n    const getAttrs = createBitAttrs(\"menu\", PARTS);\n    const dropdownMenu = {\n        ...createDropdownMenu({ ...removeUndefined(props), forceVisible: true }),\n        getAttrs,\n    };\n    setContext(NAME, dropdownMenu);\n    return {\n        ...dropdownMenu,\n        updateOption: getOptionUpdater(dropdownMenu.options),\n    };\n}\nexport function setSubMenuCtx(props) {\n    const { SUB_NAME } = getMenuData();\n    const { builders: { createSubmenu }, getAttrs, } = getCtx();\n    const sub = { ...createSubmenu(removeUndefined(props)), getAttrs };\n    setContext(SUB_NAME, sub);\n    return {\n        ...sub,\n        updateOption: getOptionUpdater(sub.options),\n    };\n}\nexport function setRadioGroupCtx(props) {\n    const { RADIO_GROUP_NAME } = getMenuData();\n    const { builders: { createMenuRadioGroup }, getAttrs, } = getCtx();\n    const radioGroup = createMenuRadioGroup(props);\n    setContext(RADIO_GROUP_NAME, { ...radioGroup, getAttrs });\n    return {\n        ...radioGroup,\n        getAttrs,\n    };\n}\nexport function setRadioItem(value) {\n    const { RADIO_ITEM_NAME, RADIO_GROUP_NAME } = getMenuData();\n    const dropdownMenu = getContext(RADIO_GROUP_NAME);\n    setContext(RADIO_ITEM_NAME, { ...dropdownMenu, value });\n    return {\n        ...dropdownMenu,\n        value,\n    };\n}\nexport function getRadioIndicator() {\n    const { RADIO_ITEM_NAME } = getMenuData();\n    const radioItem = getContext(RADIO_ITEM_NAME);\n    return {\n        ...radioItem,\n    };\n}\nexport function getSubTrigger() {\n    const { SUB_NAME } = getMenuData();\n    const submenu = getContext(SUB_NAME);\n    return submenu;\n}\nexport function getSubmenuCtx() {\n    const { SUB_NAME } = getMenuData();\n    return getContext(SUB_NAME);\n}\nexport function setCheckboxItem(props) {\n    const { CHECKBOX_ITEM_NAME } = getMenuData();\n    const { builders: { createCheckboxItem }, getAttrs, } = getCtx();\n    const checkboxItem = createCheckboxItem(removeUndefined(props));\n    setContext(CHECKBOX_ITEM_NAME, checkboxItem.states.checked);\n    return {\n        ...checkboxItem,\n        updateOption: getOptionUpdater(checkboxItem.options),\n        getAttrs,\n    };\n}\nexport function getCheckboxIndicator() {\n    const { CHECKBOX_ITEM_NAME } = getMenuData();\n    return getContext(CHECKBOX_ITEM_NAME);\n}\nexport function setGroupCtx() {\n    const { GROUP_NAME } = getMenuData();\n    const { elements: { group }, getAttrs, } = getCtx();\n    const id = generateId();\n    setContext(GROUP_NAME, id);\n    return { group, id, getAttrs };\n}\nexport function getGroupLabel() {\n    const { GROUP_NAME } = getMenuData();\n    const id = getContext(GROUP_NAME) ?? generateId();\n    const { elements: { groupLabel }, getAttrs, } = getCtx();\n    return { groupLabel, id, getAttrs };\n}\nexport function setArrow(size = 8) {\n    const menu = getCtx();\n    menu.options.arrowSize.set(size);\n    return menu;\n}\nexport function updatePositioning(props) {\n    const defaultPlacement = {\n        side: \"bottom\",\n        align: \"center\",\n    };\n    const withDefaults = { ...defaultPlacement, ...props };\n    const { options: { positioning }, } = getCtx();\n    const updater = getPositioningUpdater(positioning);\n    updater(withDefaults);\n}\nexport function updateSubPositioning(props) {\n    const defaultSubPlacement = {\n        side: \"right\",\n        align: \"start\",\n    };\n    const withDefaults = { ...defaultSubPlacement, ...props };\n    const { options: { positioning }, } = getSubmenuCtx();\n    const updater = getPositioningUpdater(positioning);\n    updater(withDefaults);\n}\n","<script>import { melt } from \"@melt-ui/svelte\";\nimport { getCtx } from \"../ctx.js\";\nimport { disabledAttrs } from \"../../../internal/index.js\";\nimport { createDispatcher } from \"../../../internal/events.js\";\nexport let href = void 0;\nexport let asChild = false;\nexport let disabled = false;\nexport let el = void 0;\nconst {\n  elements: { item },\n  getAttrs\n} = getCtx();\nconst dispatch = createDispatcher();\n$: builder = $item;\n$: attrs = { ...getAttrs(\"item\"), ...disabledAttrs(disabled) };\n$: Object.assign(builder, attrs);\n</script>\n\n{#if asChild}\n\t<slot {builder} />\n{:else}\n\t<svelte:element\n\t\tthis={href ? \"a\" : \"div\"}\n\t\tbind:this={el}\n\t\t{href}\n\t\t{...builder} use:builder.action\n\t\t{...$$restProps}\n\t\ton:m-click={dispatch}\n\t\ton:m-focusin={dispatch}\n\t\ton:m-focusout={dispatch}\n\t\ton:m-keydown={dispatch}\n\t\ton:m-pointerdown={dispatch}\n\t\ton:m-pointerleave={dispatch}\n\t\ton:m-pointermove={dispatch}\n\t\ton:pointerenter\n\t>\n\t\t<slot {builder} />\n\t</svelte:element>\n{/if}\n","<script>import { melt } from \"@melt-ui/svelte\";\nimport { getCtx } from \"../ctx.js\";\nexport let asChild = false;\nexport let el = void 0;\nconst {\n  elements: { separator },\n  getAttrs\n} = getCtx();\nconst attrs = getAttrs(\"separator\");\n$: builder = $separator;\n$: Object.assign(builder, attrs);\n</script>\n\n{#if asChild}\n\t<slot {builder} />\n{:else}\n\t<div bind:this={el} {...$separator} use:$separator.action {...$$restProps}></div>\n{/if}\n","<script>import { melt } from \"@melt-ui/svelte\";\nimport { getCtx, updatePositioning } from \"../ctx.js\";\nimport { createDispatcher } from \"../../../internal/events.js\";\nexport let transition = void 0;\nexport let transitionConfig = void 0;\nexport let inTransition = void 0;\nexport let inTransitionConfig = void 0;\nexport let outTransition = void 0;\nexport let outTransitionConfig = void 0;\nexport let asChild = false;\nexport let id = void 0;\nexport let side = \"bottom\";\nexport let align = \"center\";\nexport let sideOffset = 0;\nexport let alignOffset = 0;\nexport let collisionPadding = 8;\nexport let avoidCollisions = true;\nexport let collisionBoundary = void 0;\nexport let sameWidth = false;\nexport let fitViewport = false;\nexport let strategy = \"absolute\";\nexport let overlap = false;\nexport let el = void 0;\nconst {\n  elements: { menu },\n  states: { open },\n  ids,\n  getAttrs\n} = getCtx();\nconst dispatch = createDispatcher();\nconst attrs = getAttrs(\"content\");\n$: if (id) {\n  ids.menu.set(id);\n}\n$: builder = $menu;\n$: Object.assign(builder, attrs);\n$: if ($open) {\n  updatePositioning({\n    side,\n    align,\n    sideOffset,\n    alignOffset,\n    collisionPadding,\n    avoidCollisions,\n    collisionBoundary,\n    sameWidth,\n    fitViewport,\n    strategy,\n    overlap\n  });\n}\n</script>\n\n{#if asChild && $open}\n\t<slot {builder} />\n{:else if transition && $open}\n\t<div\n\t\tbind:this={el}\n\t\ttransition:transition={transitionConfig}\n\t\t{...builder} use:builder.action\n\t\t{...$$restProps}\n\t\ton:m-keydown={dispatch}\n\t>\n\t\t<slot {builder} />\n\t</div>\n{:else if inTransition && outTransition && $open}\n\t<div\n\t\tbind:this={el}\n\t\tin:inTransition={inTransitionConfig}\n\t\tout:outTransition={outTransitionConfig}\n\t\t{...builder} use:builder.action\n\t\t{...$$restProps}\n\t\ton:m-keydown={dispatch}\n\t>\n\t\t<slot {builder} />\n\t</div>\n{:else if inTransition && $open}\n\t<div\n\t\tbind:this={el}\n\t\tin:inTransition={inTransitionConfig}\n\t\t{...builder} use:builder.action\n\t\t{...$$restProps}\n\t\ton:m-keydown={dispatch}\n\t>\n\t\t<slot {builder} />\n\t</div>\n{:else if outTransition && $open}\n\t<div\n\t\tbind:this={el}\n\t\tout:outTransition={outTransitionConfig}\n\t\t{...builder} use:builder.action\n\t\t{...$$restProps}\n\t\ton:m-keydown={dispatch}\n\t>\n\t\t<slot {builder} />\n\t</div>\n{:else if $open}\n\t<div bind:this={el} {...builder} use:builder.action {...$$restProps} on:m-keydown={dispatch}>\n\t\t<slot {builder} />\n\t</div>\n{/if}\n","import { createMenubar, } from \"@melt-ui/svelte\";\nimport { getContext, setContext } from \"svelte\";\nimport { getPositioningUpdater } from \"../floating/helpers.js\";\nimport { getSubmenuCtx } from \"../menu/ctx.js\";\nimport { createBitAttrs, getOptionUpdater, removeUndefined } from \"../../internal/index.js\";\nfunction getMenubarData() {\n    const NAME = \"menubar\";\n    const MENU_NAME = \"menu\";\n    const SUB_NAME = \"menu-submenu\";\n    const PARTS = [\n        \"arrow\",\n        \"checkbox-indicator\",\n        \"checkbox-item\",\n        \"content\",\n        \"group\",\n        \"item\",\n        \"label\",\n        \"radio-group\",\n        \"radio-item\",\n        \"separator\",\n        \"sub-content\",\n        \"sub-trigger\",\n        \"trigger\",\n    ];\n    return {\n        NAME,\n        MENU_NAME,\n        SUB_NAME,\n        PARTS,\n    };\n}\nexport function setCtx(props) {\n    const { NAME, PARTS, MENU_NAME } = getMenubarData();\n    const getMenubarAttrs = createBitAttrs(NAME, [\"root\"]);\n    const getAttrs = createBitAttrs(MENU_NAME, PARTS);\n    const menubar = { ...createMenubar(removeUndefined(props)), getAttrs, getMenubarAttrs };\n    setContext(NAME, menubar);\n    return {\n        ...menubar,\n        updateOption: getOptionUpdater(menubar.options),\n    };\n}\nexport function getCtx() {\n    const { NAME } = getMenubarData();\n    return getContext(NAME);\n}\nexport function setMenuCtx(props) {\n    const { MENU_NAME } = getMenubarData();\n    const { builders: { createMenu }, getAttrs, } = getCtx();\n    const menu = { ...createMenu({ ...removeUndefined(props), forceVisible: false }), getAttrs };\n    setContext(MENU_NAME, menu);\n    return {\n        ...menu,\n        updateOption: getOptionUpdater(menu.options),\n    };\n}\nexport function getMenuCtx() {\n    const { MENU_NAME } = getMenubarData();\n    return getContext(MENU_NAME);\n}\nexport function setSubMenuCtx(props) {\n    const { SUB_NAME } = getMenubarData();\n    const { builders: { createSubmenu }, getAttrs, } = getMenuCtx();\n    const sub = { ...createSubmenu(removeUndefined(props)), getAttrs };\n    setContext(SUB_NAME, sub);\n    return {\n        ...sub,\n        updateOption: getOptionUpdater(sub.options),\n    };\n}\nexport function getSubMenuCtx() {\n    const { SUB_NAME } = getMenubarData();\n    return getContext(SUB_NAME);\n}\nconst defaultPlacement = {\n    side: \"bottom\",\n    align: \"center\",\n};\nexport function updatePositioning(props) {\n    const withDefaults = { ...defaultPlacement, ...props };\n    const { options: { positioning }, } = getMenuCtx();\n    const updater = getPositioningUpdater(positioning);\n    updater(withDefaults);\n}\nconst defaultSubPlacement = {\n    side: \"right\",\n    align: \"start\",\n};\nexport function updateSubPositioning(props) {\n    const withDefaults = { ...defaultSubPlacement, ...props };\n    const { options: { positioning }, } = getSubmenuCtx();\n    const updater = getPositioningUpdater(positioning);\n    updater(withDefaults);\n}\n","<script>import { melt } from \"@melt-ui/svelte\";\nimport { derived } from \"svelte/store\";\nimport { setCtx } from \"../ctx.js\";\nexport let loop = true;\nexport let closeOnEscape = true;\nexport let asChild = false;\nexport let id = void 0;\nexport let preventScroll = void 0;\nexport let el = void 0;\nconst {\n  elements: { menubar },\n  updateOption,\n  ids,\n  getMenubarAttrs\n} = setCtx({ loop, closeOnEscape, preventScroll });\nconst idValues = derived([ids.menubar], ([$menubarId]) => ({\n  menubar: $menubarId\n}));\nconst attrs = getMenubarAttrs(\"root\");\n$: if (id) {\n  ids.menubar.set(id);\n}\n$: updateOption(\"loop\", loop);\n$: updateOption(\"closeOnEscape\", closeOnEscape);\n$: updateOption(\"preventScroll\", preventScroll);\n$: builder = $menubar;\n$: Object.assign(builder, attrs);\n</script>\n\n{#if asChild}\n\t<slot {builder} ids={$idValues} />\n{:else}\n\t<div bind:this={el} {...builder} use:builder.action {...$$restProps}>\n\t\t<slot {builder} ids={$idValues} />\n\t</div>\n{/if}\n","<script>import { derived } from \"svelte/store\";\nimport { setMenuCtx } from \"../ctx.js\";\nexport let closeOnOutsideClick = void 0;\nexport let closeOnEscape = void 0;\nexport let portal = void 0;\nexport let open = void 0;\nexport let onOpenChange = void 0;\nexport let loop = void 0;\nexport let dir = void 0;\nexport let typeahead = void 0;\nexport let closeFocus = void 0;\nexport let disableFocusFirstItem = void 0;\nexport let closeOnItemClick = void 0;\nexport let onOutsideClick = void 0;\nconst {\n  states: { open: localOpen },\n  updateOption,\n  ids\n} = setMenuCtx({\n  closeOnOutsideClick,\n  closeOnEscape,\n  portal,\n  loop,\n  dir,\n  typeahead,\n  closeFocus,\n  disableFocusFirstItem,\n  closeOnItemClick,\n  onOutsideClick,\n  onOpenChange: ({ next }) => {\n    if (open !== next) {\n      onOpenChange?.(next);\n      open = next;\n    }\n    return next;\n  }\n});\nconst idValues = derived([ids.menu, ids.trigger], ([$menuId, $triggerId]) => ({\n  menu: $menuId,\n  trigger: $triggerId\n}));\n$: open !== void 0 && localOpen.set(open);\n$: updateOption(\"closeOnOutsideClick\", closeOnOutsideClick);\n$: updateOption(\"closeOnEscape\", closeOnEscape);\n$: updateOption(\"portal\", portal);\n$: updateOption(\"loop\", loop);\n$: updateOption(\"dir\", dir);\n$: updateOption(\"closeFocus\", closeFocus);\n$: updateOption(\"disableFocusFirstItem\", disableFocusFirstItem);\n$: updateOption(\"typeahead\", typeahead);\n$: updateOption(\"closeOnItemClick\", closeOnItemClick);\n$: updateOption(\"onOutsideClick\", onOutsideClick);\n</script>\n\n<slot menuIds={$idValues} />\n","<script>import { melt } from \"@melt-ui/svelte\";\nimport { getMenuCtx } from \"../ctx.js\";\nimport { createDispatcher } from \"../../../internal/events.js\";\nexport let asChild = false;\nexport let id = void 0;\nexport let el = void 0;\nconst {\n  elements: { trigger },\n  ids,\n  getAttrs\n} = getMenuCtx();\nconst dispatch = createDispatcher();\nconst attrs = getAttrs(\"trigger\");\n$: if (id) {\n  ids.trigger.set(id);\n}\n$: builder = $trigger;\n$: Object.assign(builder, attrs);\n</script>\n\n{#if asChild}\n\t<slot {builder} />\n{:else}\n\t<button\n\t\tbind:this={el}\n\t\t{...builder} use:builder.action\n\t\ttype=\"button\"\n\t\t{...$$restProps}\n\t\ton:m-click={dispatch}\n\t\ton:m-keydown={dispatch}\n\t\ton:m-pointerenter={dispatch}\n\t>\n\t\t<slot {builder} />\n\t</button>\n{/if}\n","<script context=\"module\" lang=\"ts\">\n  import Drop from \"$lib/components/Drop.svelte\";\n  import Modal from \"$lib/components/Modal.svelte\";\n  import { writable } from \"svelte/store\";\n  import { scale } from \"svelte/transition\";\n\n  let resolve = (_: Record<string, string>) => {};\n\n  const show = writable(false);\n\n  export function requestDrop(): Promise<Record<string, string>> {\n    return new Promise((r) => {\n      show.set(true);\n      resolve = r;\n    });\n  }\n</script>\n\n<Modal show={$show}>\n  <div class=\"max-w-1/2 rounded-lg bg-neutral-8/50 p-5 shadow-md\" transition:scale={{ start: 0.95 }}>\n    <Drop on:collected={(({ detail: sources }) => [resolve(sources), ($show = false)])} />\n  </div>\n</Modal>\n","<script lang=\"ts\">\n  import { Menubar } from \"bits-ui\";\n\n  export let title: string;\n\n  let open: boolean;\n</script>\n\n<Menubar.Menu bind:open>\n  <Menubar.Trigger asChild let:builder>\n    <button class=\"h-full px-2 text-0.8rem text-neutral-3 hover:(bg-neutral-8 text-neutral-2)\" {...builder} use:builder.action>\n      <div class=\"translate-y-0.25\">\n        {title}\n      </div>\n    </button>\n  </Menubar.Trigger>\n  <Menubar.Content class=\"min-w-50 flex flex-col rounded rounded-lt-0 bg-neutral-8 p-1 text-0.8rem text-neutral-3 shadow-md\" align=\"start\">\n    <slot />\n  </Menubar.Content>\n</Menubar.Menu>\n\n<style>\n  button:global([data-state=\"open\"]) {\n    --uno: bg-neutral-8 text-neutral-2;\n  }\n</style>\n","<script lang=\"ts\">\n  import { Menubar } from \"bits-ui\";\n\n  export let icon: string;\n  export let disabled = false;\n</script>\n\n<Menubar.Item asChild let:builder>\n  <button {disabled} class=\"w-full flex flex-row items-center gap-1.3 rounded-sm px-2 py-1 text-left disabled:op-40 not-disabled:active:(bg-neutral-6 text-neutral-1) not-disabled:hover:(bg-neutral-6/50 text-neutral-2)\" on:click {...builder} use:builder.action>\n    <div class=\"{icon} text-base op-40\" />\n    <slot />\n  </button>\n</Menubar.Item>\n","import type { Payload } from \"../../../routes/(workspace)/telegraph/[path]/+server\";\nimport type { WorkspaceInfo } from \"../types\";\nimport type { Page } from \"telegra.ph/typings/telegraph\";\n\nimport { deserialize } from \"$lib/cms/telegraph/utils\";\nimport { toastMarkdown } from \"$lib/utils/toast\";\n\ntype TelegraphResponse<T> = {\n  ok: true;\n  result: T;\n} | {\n  ok: false;\n  error: string;\n};\n\nexport async function forkWorkspace(info: WorkspaceInfo, token?: string) {\n  const id = toastMarkdown(\"正在创建新的工作区\", \"loading\");\n  const res = await fetch(\"/telegraph\", { method: \"PUT\", body: JSON.stringify({ ...info, token }) });\n\n  if (res.ok) {\n    const result: { path: string; token?: string } = await res.json();\n    toastMarkdown(`成功创建 \\`${result.path}\\``, \"success\", id);\n    return result;\n  }\n  const { error }: { error: string } = await res.json();\n  toastMarkdown(`创建失败 \\`${error}\\``, \"warning\", id);\n  throw new Error(error);\n}\n\nexport async function updateWorkspace(payload: Payload) {\n  const id = toastMarkdown(\"正在保存工作区\", \"loading\");\n  const res = await fetch(\"\", { method: \"PUT\", body: JSON.stringify(payload) });\n  if (!res.ok) {\n    const error = await res.text();\n    toastMarkdown(`保存失败 \\`${error}\\``, \"warning\", id);\n    throw new Error(error);\n  }\n  toastMarkdown(\"保存成功\", \"success\", id);\n}\n\nexport async function loadWorkspace(path: string): Promise<WorkspaceInfo & { own: boolean }> {\n  const url = `https://api.telegra.ph/getPage/${path}?return_content=true`;\n  const res: TelegraphResponse<Page> = await fetch(url).then(r => r.json());\n  if (!res.ok)\n    throw new Error(res.error);\n  const { content, title, author_name, can_edit } = res.result;\n  const sources = deserialize(content!);\n  return { sources, title, author: author_name!, own: can_edit! };\n}\n","import getPy from \"..\";\nimport { toastMarkdown } from \"$lib/utils/toast\";\n\nexport async function* genReadme(sources: Record<string, string>) {\n  const py = await getPy({ chat: true });\n  const generateTitle = py.pyimport(\"chat.gen.generate_readme\");\n  const id = toastMarkdown(\"正在生成自述文件……\", \"loading\");\n  let res = \"\";\n  try {\n    for await (const i of generateTitle(py.toPy(sources) as AsyncGenerator<string>)) {\n      res += i;\n      yield res;\n      toastMarkdown(`正在生成自述文件……${res.length}`, \"loading\", id);\n    }\n    toastMarkdown(\"成功生成自述文件\", \"success\", id);\n    return res;\n  }\n  catch (e) {\n    toastMarkdown((e as Error).message, \"error\", id);\n    throw e;\n  }\n}\n","import getPy from \"..\";\nimport { toastMarkdown } from \"$lib/utils/toast\";\n\nexport async function suggestTitle(sources: Record<string, string>) {\n  const py = await getPy({ chat: true });\n  const generateTitle = py.pyimport(\"chat.suggest.suggest_title\");\n  const id = toastMarkdown(\"正在生成标题...\", \"loading\");\n  let res = \"\";\n  try {\n    for await (const i of generateTitle(py.toPy(sources) as AsyncGenerator<string>)) {\n      res += i;\n      toastMarkdown(res, \"loading\", id);\n    }\n    toastMarkdown(res, \"success\", id);\n    return res;\n  }\n  catch (e) {\n    toastMarkdown((e as Error).message, \"error\", id);\n    throw e;\n  }\n}\n","<script lang=\"ts\">\n  import type { WorkspaceInfo } from \"$lib/cms/types\";\n\n  import { withProgress } from \"./+layout.svelte\";\n  import { requestDrop } from \"./Drop.svelte\";\n  import Group from \"./MenuGroup.svelte\";\n  import Item from \"./MenuItem.svelte\";\n  import { sources } from \"./store\";\n  import { recents, telegraphToken } from \"./telegraph/store\";\n  import { focusedFile } from \"./Workspace.svelte\";\n  import { goto, invalidateAll } from \"$app/navigation\";\n  import { page } from \"$app/stores\";\n  import { forkWorkspace, updateWorkspace } from \"$lib/cms/telegraph\";\n  import { newChat } from \"$lib/components/ChatWindow.svelte\";\n  import { input } from \"$lib/components/Input.svelte\";\n  import { genReadme } from \"$lib/pyodide/api/gen\";\n  import { suggestTitle } from \"$lib/pyodide/api/suggest\";\n  import { toastMarkdown } from \"$lib/utils/toast\";\n  import { Menubar } from \"bits-ui\";\n\n  $: metadata = $recents[$page.params.path];\n\n  async function newFile() {\n    const path = await input(\"文件路径，例如 a/b/c.py\");\n    if (path) {\n      $sources = { ...$sources, [path]: \"\" };\n      $focusedFile = path;\n    }\n  }\n\n  async function newModule(folder = false) {\n    const path = await input(\"模块路径，例如 a.b.c\");\n    if (path) {\n      const target = folder ? `${path.replace(/\\./g, \"/\")}/__init__.py` : `${path.replace(/\\./g, \"/\")}.py`;\n      $sources = { ...$sources, [target]: \"\" };\n      $focusedFile = target;\n    }\n  }\n\n  async function share() {\n    const [title = \"untitled-project\", author = \"Anonymous\"] = await Promise.all([input(\"标题\", \"untitled-project\"), input(\"作者\", \"Anonymous\")]);\n    const payload: WorkspaceInfo = { sources: $sources, title, author };\n    await withProgress((async () => {\n      const { path, token } = await forkWorkspace(payload, $telegraphToken);\n      token && telegraphToken.set(token);\n      await goto(`/telegraph/${path}`);\n      metadata = { title, author, own: true };\n      $recents = { ...$recents, [path]: metadata };\n    })());\n  }\n\n  async function update(updateTitle = false, updateUser = false) {\n    const title = updateTitle ? await input(\"标题\", metadata.title) ?? metadata.title : metadata.title;\n    const author = updateUser ? await input(\"作者\", metadata.author) ?? metadata.author : metadata.author;\n    await withProgress(updateWorkspace({ title, author, sources: $sources, token: $telegraphToken! }));\n    await withProgress(invalidateAll());\n  }\n\n  async function autoGenerateTitle() {\n    const res = await withProgress(suggestTitle($sources));\n    const title = await input(\"请确认标题\", res) ?? res;\n    await withProgress(updateWorkspace({ title, author: metadata.author, sources: $sources, token: $telegraphToken! }).then(invalidateAll));\n  }\n\n  async function autoGenerateReadme() {\n    if ($sources[\"README.md\"])\n      return toastMarkdown(\"`README.md` 已存在\", \"warning\");\n\n    $sources[\"README.md\"] = \"\";\n    $focusedFile = \"README.md\";\n\n    for await (const content of genReadme($sources)) {\n      $sources[\"README.md\"] = content;\n    }\n  }\n\n  async function dropFiles() {\n    $sources = { ...$sources, ...await requestDrop() };\n  }\n\n  $: canUpdate = $telegraphToken && $page.route.id === \"/(workspace)/telegraph/[path]\" && metadata?.own;\n</script>\n\n<Menubar.Root class=\"h-full flex flex-row items-center\">\n\n  <button on:click={() => history.back()} class=\"group z-1 h-full text-neutral-3 [&:active>div>div]:(scale-80 duration-100) hover:(bg-neutral-8 text-neutral-2)\">\n    <div class=\"pointer-events-none relative mx-2 aspect-1 h-1/2 [&>div]:(absolute inset-0 h-full w-full transition duration-250 ease-out)\">\n      <div class=\"i-mdi-language-python group-hover:(op-0 -translate-x-1.5)\" />\n      <div class=\"i-iconamoon-arrow-left-1-bold group-not-hover:(translate-x-1.5 op-0)\" />\n    </div>\n  </button>\n\n  <Group title=\"文件\">\n    <Item icon=\"i-carbon-document-add -translate-y-0.2\" on:click={newFile}>新建文件</Item>\n    <Menubar.Separator class=\"my-1 h-1px w-full rounded-full bg-neutral-7\" />\n    <Item icon=\"i-carbon-new-tab\" on:click={() => newModule(true)}>新建 py 模块（文件夹）</Item>\n    <Item icon=\"i-carbon-new-tab\" on:click={() => newModule()}>新建 py 模块（文件）</Item>\n    <Menubar.Separator class=\"my-1 h-1px w-full rounded-full bg-neutral-7\" />\n    <Item icon=\"i-carbon-file-storage -translate-y-0.2\" on:click={dropFiles}>选取本地文件（可拖拽）</Item>\n  </Group>\n\n  <Group title=\"项目\">\n    <Item icon=\"i-carbon-save -translate-y-0.2\" on:click={() => withProgress(update())} disabled={!canUpdate}>保存（更新）</Item>\n    <Item icon=\"i-carbon-share\" on:click={share}>分支（另存为）</Item>\n    <Menubar.Separator class=\"my-1 h-1px w-full rounded-full bg-neutral-7\" />\n    <Item icon=\"i-carbon-pen-fountain\" on:click={() => withProgress(update(false, true))} disabled={!canUpdate}>修改作者</Item>\n    <Item icon=\"i-carbon-pen\" on:click={() => withProgress(update(true, false))} disabled={!canUpdate}>修改标题</Item>\n  </Group>\n\n  <Group title=\"导航\">\n    <Item icon=\"i-carbon-home -translate-y-0.2\" on:click={() => goto(\"/\")}>首页</Item>\n    <Item icon=\"i-carbon-repo-source-code\" on:click={() => goto(\"/playground\")}>本站 Python 代码</Item>\n    <Item icon=\"i-carbon-time\" on:click={() => goto(\"/recents\")}>最近访问</Item>\n    <Menubar.Separator class=\"my-1 h-1px w-full rounded-full bg-neutral-7\" />\n    <Item icon=\"i-carbon-link\" on:click={() => open(\"https://py3.online/\")}>英文站（较久）</Item>\n    <Item icon=\"i-carbon-logo-github\" on:click={() => open(\"https://github.com/promplate/pyth-on-line\")}>开源仓库</Item>\n    <Item icon=\"i-carbon-ai-results-urgent\" on:click={() => open(\"https://github.com/promplate/pyth-on-line/discussions\")}>问题反馈</Item>\n    <Item icon=\"i-carbon-feature-membership-filled\" on:click={() => open(\"https://github.com/promplate/pyth-on-line/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22\")}>参与贡献</Item>\n    <Item icon=\"i-carbon-logo-github\" on:click={() => open(\"https://github.com/pyodide/pyodide\")}>Pyodide 开源仓库</Item>\n    <Item icon=\"i-carbon-logo-github\" on:click={() => open(\"https://github.com/promplate/core\")}>Promplate 开源仓库</Item>\n    <Item icon=\"i-carbon-information-square-filled\" on:click={() => open(\"https://docs.py.promplate.dev/\")}>Promplate 文档</Item>\n    <Item icon=\"i-carbon-interactive-segmentation-cursor\" on:click={() => open(\"https://promplate.dev/\")}>Promplate 交互式文档</Item>\n    <Item icon=\"i-carbon-interactive-segmentation-cursor\" on:click={() => open(\"https://zh.promplate.dev/\")}>Promplate 中文交互式文档</Item>\n  </Group>\n\n  <Group title=\"生成式 AI\">\n    <Item icon=\"i-carbon-ai-generate\" on:click={autoGenerateTitle} disabled={!canUpdate}>建议标题</Item>\n    <Item icon=\"i-carbon-ai-generate\" on:click={autoGenerateReadme}>生成自述文件</Item>\n    <Item icon=\"i-carbon-chat-bot\" on:click={newChat}>通用助手</Item>\n  </Group>\n\n</Menubar.Root>\n","<script context=\"module\" lang=\"ts\">\n  import type { Spring } from \"svelte/motion\";\n\n  import Drop from \"./Drop.svelte\";\n  import { writable } from \"svelte/store\";\n\n  let progress: Spring<number>;\n  let reset: () => any;\n  const tasks = writable<[number, number]>([0, 0]);\n\n  const ONE_THIRD = 1 / 3;\n\n  function addTask() {\n    tasks.update(([total, finished]) => {\n      total++;\n      return [total, finished];\n    });\n  }\n\n  function finish() {\n    tasks.update(([total, finished]) => {\n      finished++;\n      if (total <= finished) {\n        progress.set(2, { soft: true });\n        return [0, 0];\n      }\n      return [total, finished];\n    });\n  }\n\n  function cancel() {\n    tasks.update(([total, finished]) => {\n      total--;\n      if (total === finished) {\n        progress.set(0);\n        return [0, 0];\n      }\n      return [total, finished];\n    });\n  }\n\n  export async function withProgress<T>(promise: Promise<T>) {\n    addTask();\n    try {\n      const res = await promise;\n      finish();\n      return res;\n    }\n    catch (e) {\n      cancel();\n      throw e;\n    }\n  }\n</script>\n\n<script lang=\"ts\">\n  import Menu from \"./Menu.svelte\";\n  import { showEditor, sources } from \"./store\";\n  import Workspace from \"./Workspace.svelte\";\n  import { afterNavigate, beforeNavigate } from \"$app/navigation\";\n  import { currentConsole } from \"$lib/components/console/store\";\n  import Progress from \"$lib/components/Progress.svelte\";\n  import { onDestroy } from \"svelte\";\n  import { cubicOut } from \"svelte/easing\";\n  import { fade, fly } from \"svelte/transition\";\n\n  beforeNavigate(addTask);\n  afterNavigate(finish);\n\n  afterNavigate(() => {\n    $currentConsole?.clear();\n  });\n\n  onDestroy(() => {\n    // @ts-ignore\n    reset = undefined;\n  });\n\n  let show: boolean;\n\n  $: {\n    const [total, finished] = $tasks;\n\n    if (total === 1 && finished === 0) {\n      reset?.();\n      progress.set(0.25);\n      show = true;\n    }\n    else if (total === finished) {\n      show = false;\n    }\n    else {\n      show = true;\n      progress.set((ONE_THIRD + finished) / (ONE_THIRD + total), { soft: 1 });\n    }\n  }\n</script>\n\n<slot />\n\n<div class=\"fixed top-0 h-8 w-full\" class:-translate-y-8={!$showEditor}>\n  <Menu />\n</div>\n\n{#if $showEditor}\n  <div class=\"fixed top-8 h-[calc(100vh-2rem)] w-full\" in:fade={{ delay: 100, easing: cubicOut }} out:fly={{ y: -5, duration: 150 }}>\n    <Workspace bind:sources={$sources} />\n  </div>\n{/if}\n\n<div class=\"absolute top-0 z-1 w-full [&>div]:transition-opacity [&_*]:!rounded-none\" class:translate-y-7={$showEditor}>\n  <Progress {show} bind:progress bind:reset />\n</div>\n\n<Drop />\n\n<style>\n  * {\n    --uno: transition-transform;\n  }\n</style>\n"],"names":["addHighlight","element","removeHighlight","debounce","fn","wait","timeout","args","later","derivedVisible","obj","open","forceVisible","activeTrigger","derived","$open","$forceVisible","$activeTrigger","handleRovingFocus","nextElement","isBrowser","sleep","currentFocusedElement","isHTMLElement","getFocusableElements","getNextFocusable","currentElement","focusableElements","nextIndex","getPreviousFocusable","previousIndex","prevElement","ignoredKeys","defaults","createTypeaheadSearch","withDefaults","typed","withGet","writable","resetTyped","key","items","currentItem","$typed","get","candidateItems","item","normalizeSearch","char","currentItemIndex","wrappedItems","wrapArray","v","nextItem","defaultConfig","usePopper","popperElement","anchorElement","options","noop","opts","callbacks","usePortal","useFloating","useFocusTrap","createFocusTrap","useModal","e","useEscapeKeydown","unsubscribe","executeCallbacks","SUB_OPEN_KEYS","SELECTION_KEYS","kbd","SUB_CLOSE_KEYS","menuIdParts","createMenuBuilder","name","selector","createElHelpers","preventScroll","arrowSize","positioning","closeOnEscape","closeOnOutsideClick","portal","typeahead","loop","closeFocus","disableFocusFirstItem","closeOnItemClick","onOutsideClick","rootOpen","rootActiveTrigger","nextFocusable","prevFocusable","isUsingKeyboard","lastPointerX","pointerGraceIntent","pointerDir","currentFocusedItem","pointerMovingToSubmenu","$pointerDir","$pointerGraceIntent","isPointerInGraceArea","handleTypeaheadSearch","rootIds","toWritableStores","generateIds","isVisible","rootMenu","makeElement","$isVisible","$portal","$rootMenuId","$rootTriggerId","styleToString","portalAttr","node","unsubPopper","unsubDerived","effect","$rootActiveTrigger","$positioning","$closeOnOutsideClick","$closeOnEscape","tick","setMeltMenuAttribute","_a","getPortalDestination","unsubEvents","addMeltEventListener","target","menuEl","FIRST_LAST_KEYS","handleMenuNavigation","handleTabNavigation","isCharacterKey","getMenuItems","rootTrigger","$rootOpen","applyAttrsIfDisabled","p","triggerEl","handleOpen","menuId","menu","menuItems","rootArrow","$arrowSize","overlay","stateAttr","unsubEscapeKeydown","escapeKeydown","unsubPortal","portalDestination","itemEl","isElementDisabled","onItemKeyDown","onMenuItemPointerMove","onMenuItemPointerLeave","onItemFocusIn","onItemFocusOut","group","groupId","groupLabel","checkboxItemDefaults","createCheckboxItem","props","checkedWritable","checked","overridable","disabled","checkboxItem","$checked","$disabled","isIndeterminate","disabledAttr","getCheckedState","prev","onItemLeave","isChecked","_isIndeterminate","createMenuRadioGroup","valueWritable","value","radioGroup","radioItemDefaults","radioItem","$value","itemProps","itemValue","separator","createSeparator","subMenuDefaults","createSubmenu","subOpenWritable","subOpen","omit","subActiveTrigger","subOpenTimer","pointerGraceTimer","subIds","safeOnMount","subTrigger","subIsVisible","subMenu","$subIsVisible","$subMenuId","$subTriggerId","parentMenuEl","getParentMenu","isCloseKey","isModifierKey","$subActiveTrigger","onMenuPointerMove","submenuEl","relatedTarget","$subOpen","unsubTimer","clearTimerStore","firstItem","isMouse","onItemEnter","isFocusWithinSubmenu","openTimer","contentRect","side","rightSide","bleed","contentNearEdge","contentFarEdge","onTriggerLeave","subArrow","focusedItem","subTriggerEl","unsubs","handlePointer","handleKeyDown","addEventListener","keydownListener","unsub","$currentFocusedItem","$closeFocus","handleFocus","$preventScroll","isOpen","isPointerMovingToSubmenu","currentTarget","$lastPointerX","pointerXHasChanged","newDir","currTarget","$prevFocusable","$nextFocusable","menuElement","timerStore","timer","candidateNodes","currentIndex","area","cursorPos","isPointInPolygon","point","polygon","x","y","inside","i","j","xi","yi","xj","yj","submenuId","activeEl","MENUBAR_NAV_KEYS","menubarIdParts","createMenubar","activeMenu","lastFocusedMenuTrigger","closeTimer","scrollRemoved","ids","menubar","$menubarId","menuTriggers","menuDefaults","createMenu","m","$menuId","$triggerId","menubarEl","isElement","handleCrossMenuNavigation","trigger","menubarTriggers","unsubEffect","$lastFocusedMenuTrigger","$activeMenu","targetIsSubTrigger","isKeyDownInsideSubMenu","prevMenuKey","isPrevKey","triggers","getMenuTriggers","currTriggerId","currIndex","el","handleMenubarNavigation","$loop","removeScroll","safeOnDestroy","orientation","decorative","$orientation","$decorative","getMenuData","getCtx","NAME","getContext","updatePositioning","getPositioningUpdater","ctx","create_dynamic_element","svelte_element_levels","svelte_element","svelte_element_data","insert_hydration","anchor","get_spread_update","href","$$props","asChild","getAttrs","dispatch","createDispatcher","$$value","$$invalidate","builder","$item","attrs","disabledAttrs","div_levels","div","$separator","transition","transitionConfig","inTransition","inTransitionConfig","outTransition","outTransitionConfig","id","align","sideOffset","alignOffset","collisionPadding","avoidCollisions","collisionBoundary","sameWidth","fitViewport","strategy","overlap","$menu","getMenubarData","setCtx","PARTS","MENU_NAME","getMenubarAttrs","createBitAttrs","removeUndefined","setContext","getOptionUpdater","setMenuCtx","getMenuCtx","updateOption","idValues","$menubar","onOpenChange","dir","localOpen","next","button_levels","button","$trigger","div_transition","create_bidirectional_transition","scale","resolve","_","show","requestDrop","r","sources","set_store_value","$show","append_hydration","title","icon","forkWorkspace","info","token","toastMarkdown","res","result","error","updateWorkspace","payload","genReadme","py","getPy","generateTitle","suggestTitle","newChat","newFile","path","input","$sources","$focusedFile","newModule","folder","share","author","withProgress","$telegraphToken","telegraphToken","goto","metadata","$recents","update","updateTitle","updateUser","invalidateAll","autoGenerateTitle","autoGenerateReadme","content","dropFiles","click_handler","click_handler_1","click_handler_3","click_handler_4","click_handler_5","click_handler_6","click_handler_7","click_handler_8","click_handler_9","click_handler_10","click_handler_11","click_handler_12","click_handler_13","click_handler_14","click_handler_15","click_handler_16","click_handler_17","$page","canUpdate","div_intro","create_in_transition","fade","cubicOut","div_outro","create_out_transition","fly","create_if_block","div0","div1","progress","reset","tasks","ONE_THIRD","addTask","total","finished","finish","cancel","promise","beforeNavigate","afterNavigate","$currentConsole","onDestroy","$tasks"],"mappings":"kmDAAO,SAASA,GAAaC,EAAS,CAClCA,EAAQ,aAAa,mBAAoB,EAAE,CAC/C,CACO,SAASC,GAAgBD,EAAS,CACrCA,EAAQ,gBAAgB,kBAAkB,CAC9C,CCLO,SAASE,GAASC,EAAIC,EAAO,IAAK,CACrC,IAAIC,EAAU,KACd,OAAO,YAAaC,EAAM,CACtB,MAAMC,EAAQ,IAAM,CAChBF,EAAU,KACVF,EAAG,GAAGG,CAAI,CACd,EACAD,GAAW,aAAaA,CAAO,EAC/BA,EAAU,WAAWE,EAAOH,CAAI,CACpC,CACJ,CCLO,SAASI,GAAeC,EAAK,CAChC,KAAM,CAAE,KAAAC,EAAM,aAAAC,EAAc,cAAAC,CAAa,EAAKH,EAC9C,OAAOI,GAAQ,CAACH,EAAMC,EAAcC,CAAa,EAAG,CAAC,CAACE,EAAOC,EAAeC,CAAc,KAAOF,GAASC,IAAkBC,IAAmB,IAAI,CACvJ,CCAO,SAASC,GAAkBC,EAAa,CACtCC,IAELC,GAAM,CAAC,EAAE,KAAK,IAAM,CAChB,MAAMC,EAAwB,SAAS,cACnC,CAACC,EAAcD,CAAqB,GAAKA,IAA0BH,IAEvEG,EAAsB,SAAW,GAC7BH,IACAA,EAAY,SAAW,EACvBA,EAAY,MAAK,GAEzB,CAAC,CACL,CACA,SAASK,IAAuB,CAC5B,OAAO,MAAM,KAAK,SAAS,iBAAiB,oPAAoP,CAAC,CACrS,CACO,SAASC,GAAiBC,EAAgB,CAC7C,MAAMC,EAAoBH,GAAoB,EAExCI,EADeD,EAAkB,QAAQD,CAAc,EAC5B,EAC3BP,EAAcQ,EAAkBC,CAAS,EAC/C,OAAIA,EAAYD,EAAkB,QAAUJ,EAAcJ,CAAW,EAC1DA,EAEJ,IACX,CACO,SAASU,GAAqBH,EAAgB,CACjD,MAAMC,EAAoBH,GAAoB,EAExCM,EADeH,EAAkB,QAAQD,CAAc,EACxB,EAC/BK,EAAcJ,EAAkBG,CAAa,EACnD,OAAIA,GAAiB,GAAKP,EAAcQ,CAAW,EACxCA,EAEJ,IACX,CCjCA,MAAMC,GAAc,IAAI,IAAI,CAAC,QAAS,UAAW,MAAO,OAAQ,WAAY,SAAS,CAAC,EAMhFC,GAAW,CACb,QAASf,GACT,eAAgB,IAAM,SAAS,aACnC,EACO,SAASgB,GAAsB3B,EAAO,GAAI,CAC7C,MAAM4B,EAAe,CAAE,GAAGF,GAAU,GAAG1B,CAAI,EACrC6B,EAAQC,GAAQC,GAAS,CAAA,CAAE,CAAC,EAC5BC,EAAapC,GAAS,IAAM,CAC9BiC,EAAM,OAAO,IAAM,EAAE,CACzB,CAAC,EAiCD,MAAO,CACH,MAAAA,EACA,WAAAG,EACA,sBAnC0B,CAACC,EAAKC,IAAU,CAC1C,GAAIT,GAAY,IAAIQ,CAAG,EACnB,OACJ,MAAME,EAAcP,EAAa,eAAc,EACzCQ,EAASC,GAAIR,CAAK,EACxB,GAAI,CAAC,MAAM,QAAQO,CAAM,EACrB,OAEJA,EAAO,KAAKH,EAAI,aAAa,EAC7BJ,EAAM,IAAIO,CAAM,EAChB,MAAME,EAAiBJ,EAAM,OAAQK,GAC7B,EAAAA,EAAK,aAAa,UAAU,IAAM,QAClCA,EAAK,aAAa,eAAe,IAAM,QACvCA,EAAK,aAAa,eAAe,EAIxC,EAEKC,EADaJ,EAAO,OAAS,GAAKA,EAAO,MAAOK,GAASA,IAASL,EAAO,CAAC,CAAC,EAC5CA,EAAO,CAAC,EAAIA,EAAO,KAAK,EAAE,EACzDM,EAAmB1B,EAAcmB,CAAW,EAAIG,EAAe,QAAQH,CAAW,EAAI,GAC5F,IAAIQ,EAAeC,GAAUN,EAAgB,KAAK,IAAII,EAAkB,CAAC,CAAC,EAC/CF,EAAgB,SAAW,IAElDG,EAAeA,EAAa,OAAQE,GAAMA,IAAMV,CAAW,GAE/D,MAAMW,EAAWH,EAAa,KAAMJ,IAASA,GAAA,YAAAA,EAAM,YAAaA,EAAK,UAAU,YAAW,EAAG,WAAWC,EAAgB,YAAW,CAAE,CAAC,EAClIxB,EAAc8B,CAAQ,GAAKA,IAAaX,GACxCP,EAAa,QAAQkB,CAAQ,EAEjCd,EAAU,CACd,CAKJ,CACA,CC7DA,MAAMe,GAAgB,CAClB,SAAU,CAAA,EACV,UAAW,CAAA,EACX,MAAO,CAAA,EACP,cAAe,CAAA,EACf,OAAQ,MACZ,EACaC,GAAa,CAACC,EAAejD,IAAS,CAC/CiD,EAAc,QAAQ,QAAU,GAChC,KAAM,CAAE,cAAAC,EAAe,KAAA9C,EAAM,QAAA+C,CAAO,EAAKnD,EACzC,GAAI,CAACkD,GAAiB,CAAC9C,GAAQ,CAAC+C,EAC5B,MAAO,CAAE,QAASC,EAAI,EAE1B,MAAMC,EAAO,CAAE,GAAGN,GAAe,GAAGI,CAAO,EACrCG,EAAY,CAAA,EAKlB,GAJID,EAAK,SAAW,MAChBC,EAAU,KAAKC,GAAUN,EAAeI,EAAK,MAAM,EAAE,OAAO,EAEhEC,EAAU,KAAKE,GAAYN,EAAeD,EAAeI,EAAK,QAAQ,EAAE,OAAO,EAC3EA,EAAK,YAAc,KAAM,CACzB,KAAM,CAAE,aAAAI,CAAY,EAAKC,GAAgB,CACrC,UAAW,GACX,kBAAmB,GACnB,kBAAmB,GACnB,wBAAyB,GACzB,cAAeT,EACf,GAAGI,EAAK,SACpB,CAAS,EACDC,EAAU,KAAKG,EAAaR,CAAa,EAAE,OAAO,CACtD,CACII,EAAK,QAAU,MACfC,EAAU,KAAKK,GAASV,EAAe,CACnC,QAAS,IAAM,CACPjC,EAAckC,CAAa,IAC3B9C,EAAK,IAAI,EAAK,EACd8C,EAAc,MAAK,EAE3B,EACA,6BAA+BU,GACvB,EAAAA,EAAE,kBAEF5C,EAAckC,CAAa,GAAKA,EAAc,SAASU,EAAE,MAAM,GAKvE,GAAGP,EAAK,KACpB,CAAS,EAAE,OAAO,EAEVA,EAAK,gBAAkB,MACvBC,EAAU,KAAKO,GAAiBZ,EAAe,CAC3C,QAAS7C,EACT,QAAS,IAAM,CACXA,EAAK,IAAI,EAAK,CAClB,EACA,GAAGiD,EAAK,aACpB,CAAS,EAAE,OAAO,EAGd,MAAMS,EAAcC,GAAiB,GAAGT,CAAS,EACjD,MAAO,CACH,SAAU,CACNQ,EAAW,CACf,CACR,CACA,EC7DaE,GAAgB,CACzB,IAAK,CAAC,GAAGC,GAAgBC,GAAI,WAAW,CAE5C,EACaC,GAAiB,CAC1B,IAAK,CAACD,GAAI,UAAU,CAExB,EACaE,GAAc,CAAC,OAAQ,SAAS,EACvC1C,GAAW,CACb,UAAW,EACX,YAAa,CACT,UAAW,QACnB,EACI,cAAe,GACf,cAAe,GACf,oBAAqB,GACrB,OAAQ,OACR,KAAM,GACN,IAAK,MACL,YAAa,GACb,UAAW,GACX,iBAAkB,GAClB,eAAgB,MACpB,EACO,SAAS2C,GAAkBhB,EAAM,CACpC,KAAM,CAAE,KAAAiB,EAAM,SAAAC,CAAQ,EAAKC,GAAgBnB,EAAK,QAAQ,EAClD,CAAE,cAAAoB,EAAe,UAAAC,EAAW,YAAAC,EAAa,cAAAC,EAAe,oBAAAC,EAAqB,OAAAC,EAAQ,aAAAzE,EAAc,UAAA0E,EAAW,KAAAC,EAAM,WAAAC,EAAY,sBAAAC,EAAuB,iBAAAC,EAAkB,eAAAC,CAAc,EAAM/B,EAAK,YAClMgC,EAAWhC,EAAK,SAChBiC,EAAoBjC,EAAK,kBASzBkC,EAAgBlC,EAAK,cACrBmC,EAAgBnC,EAAK,cAMrBoC,EAAkB3D,GAAQ,SAAS,EAAK,EAMxC4D,EAAe5D,GAAQC,GAAS,CAAC,CAAC,EAClC4D,EAAqB7D,GAAQC,GAAS,IAAI,CAAC,EAC3C6D,EAAa9D,GAAQC,GAAS,OAAO,CAAC,EAItC8D,GAAqB/D,GAAQC,GAAS,IAAI,CAAC,EAC3C+D,GAAyBhE,GAAQvB,GAAQ,CAACqF,EAAYD,CAAkB,EAAG,CAAC,CAACI,EAAaC,CAAmB,IACvGpC,GACoBmC,KAAgBC,GAAA,YAAAA,EAAqB,OACnCC,GAAqBrC,EAAGoC,GAAA,YAAAA,EAAqB,IAAI,CAElF,CAAC,EACI,CAAE,MAAAnE,GAAO,sBAAAqE,CAAqB,EAAKvE,GAAqB,EACxDwE,EAAUC,GAAiB,CAAE,GAAGC,GAAYjC,EAAW,EAAG,GAAGf,EAAK,IAAK,EACvEiD,GAAYpG,GAAe,CAC7B,KAAMmF,EACN,aAAAhF,EACA,cAAeiF,CACvB,CAAK,EACKiB,GAAWC,GAAYlC,IAAQ,CACjC,OAAQ,CAACgC,GAAWxB,EAAQqB,EAAQ,KAAMA,EAAQ,OAAO,EACzD,SAAU,CAAC,CAACM,EAAYC,EAASC,EAAaC,CAAc,KACjD,CACH,KAAM,OACN,OAAQH,EAAa,OAAY,GACjC,MAAOI,GAAc,CACjB,QAASJ,EAAa,OAAY,MACtD,CAAiB,EACD,GAAIE,EACJ,kBAAmBC,EACnB,aAAcH,EAAa,OAAS,SACpC,cAAeK,GAAWJ,CAAO,EACjC,SAAU,EAC1B,GAEQ,OAASK,GAAS,CACd,IAAIC,EAAc5D,GAClB,MAAM6D,EAAeC,GAAO,CAACZ,GAAWhB,EAAmBX,EAAaE,EAAqBC,EAAQF,CAAa,EAAG,CAAC,CAAC6B,EAAYU,GAAoBC,GAAcC,GAAsBX,EAASY,KAAqB,CACrNN,EAAW,EACP,GAACP,GAAc,CAACU,KAEpBI,GAAI,EAAG,KAAK,IAAM,CACdP,EAAW,EACXQ,GAAqBT,EAAMxC,CAAQ,EACnCyC,EAAchE,GAAU+D,EAAM,CAC1B,cAAeI,GACf,KAAM9B,EACN,QAAS,CACL,SAAU+B,GACV,MAAO,CACH,uBAAwBC,GACxB,6BAA+BzD,GAAM,OAIjC,OAHA6D,EAAArC,EAAe,IAAG,IAAlB,MAAAqC,EAAuB7D,GACnB,EAAAA,EAAE,kBAEF5C,EAAcmG,EAAkB,GAChCA,GAAmB,SAASvD,EAAE,MAAM,EAI5C,EACA,QAAS,IAAM,CACXyB,EAAS,IAAI,EAAK,EAClB8B,GAAmB,MAAK,CAC5B,EACA,KAAMV,CACtC,EAC4B,OAAQiB,GAAqBX,EAAML,CAAO,EAC1C,cAAeY,EAAiB,OAAY,IACxE,CACA,CAAqB,EAAE,OACP,CAAC,CACL,CAAC,EACKK,EAAc5D,GAAiB6D,EAAqBb,EAAM,UAAYnD,GAAM,CAC9E,MAAMiE,GAASjE,EAAE,OACXkE,GAASlE,EAAE,cAQjB,GAPI,CAAC5C,EAAc6G,EAAM,GAAK,CAAC7G,EAAc8G,EAAM,GAO/C,EADoBD,GAAO,QAAQ,eAAe,IAAMC,IAExD,OAQJ,GAPIC,GAAgB,SAASnE,EAAE,GAAG,GAC9BoE,GAAqBpE,EAAGoB,EAAK,IAAG,GAAM,EAAK,EAM3CpB,EAAE,MAAQM,GAAI,IAAK,CACnBN,EAAE,eAAc,EAChByB,EAAS,IAAI,EAAK,EAClB4C,GAAoBrE,EAAG2B,EAAeC,CAAa,EACnD,MACJ,CAIA,MAAM0C,EAAiBtE,EAAE,IAAI,SAAW,EAEpC,EADkBA,EAAE,SAAWA,EAAE,QAAUA,EAAE,UAC3BsE,GAAkBnD,EAAU,IAAG,IAAO,IACxDmB,EAAsBtC,EAAE,IAAKuE,GAAaL,EAAM,CAAC,CAEzD,CAAC,CAAC,EACF,MAAO,CACH,SAAU,CACNb,EAAY,EACZU,EAAW,EACXX,EAAW,CACf,CAChB,CACQ,CACR,CAAK,EACKoB,GAAc5B,GAAYlC,EAAK,SAAS,EAAG,CAC7C,OAAQ,CAACe,EAAUc,EAAQ,KAAMA,EAAQ,OAAO,EAChD,SAAU,CAAC,CAACkC,EAAW1B,EAAaC,CAAc,KACvC,CACH,gBAAiBD,EACjB,gBAAiB0B,EACjB,aAAcA,EAAY,OAAS,SACnC,GAAIzB,EACJ,SAAU,CAC1B,GAEQ,OAASG,IACLuB,GAAqBvB,CAAI,EACzBzB,EAAkB,OAAQiD,GAClBA,GAEGxB,CACV,EA4BM,CACH,QA5BUhD,GAAiB6D,EAAqBb,EAAM,QAAUnD,GAAM,CACtE,MAAMyE,EAAYhD,EAAS,IAAG,EACxBmD,EAAY5E,EAAE,cACf5C,EAAcwH,CAAS,IAE5BC,GAAWD,CAAS,EACfH,GACDzE,EAAE,eAAc,EACxB,CAAC,EAAGgE,EAAqBb,EAAM,UAAYnD,GAAM,CAC7C,MAAM4E,EAAY5E,EAAE,cAGpB,GAFI,CAAC5C,EAAcwH,CAAS,GAExB,EAAEvE,GAAe,SAASL,EAAE,GAAG,GAAKA,EAAE,MAAQM,GAAI,YAClD,OACJN,EAAE,eAAc,EAChB6E,GAAWD,CAAS,EACpB,MAAME,EAASF,EAAU,aAAa,eAAe,EACrD,GAAI,CAACE,EACD,OACJ,MAAMC,GAAO,SAAS,eAAeD,CAAM,EAC3C,GAAI,CAACC,GACD,OACJ,MAAMC,GAAYT,GAAaQ,EAAI,EAC9BC,GAAU,QAEfjI,GAAkBiI,GAAU,CAAC,CAAC,CAClC,CAAC,CAAC,CAGd,EAEA,CAAK,EACKC,GAAYrC,GAAYlC,EAAK,OAAO,EAAG,CACzC,OAAQI,EACR,SAAWoE,IAAgB,CACvB,aAAc,GACd,MAAOjC,GAAc,CACjB,SAAU,WACV,MAAO,qBAAqBiC,CAAU,MACtC,OAAQ,qBAAqBA,CAAU,KACvD,CAAa,CACb,EACA,CAAK,EACKC,GAAUvC,GAAYlC,EAAK,SAAS,EAAG,CACzC,OAAQ,CAACgC,EAAS,EAClB,SAAU,CAAC,CAACG,CAAU,KACX,CACH,OAAQA,EAAa,OAAY,GACjC,SAAU,GACV,MAAOI,GAAc,CACjB,QAASJ,EAAa,OAAY,MACtD,CAAiB,EACD,cAAe,OACf,aAAcuC,GAAUvC,CAAU,CAClD,GAEQ,OAASM,GAAS,CACd,IAAIkC,EAAqB7F,GACzB,GAAIwB,EAAc,MAAO,CACrB,MAAMsE,EAAgBrF,GAAiBkD,EAAM,CACzC,QAAS,IAAM,CACX1B,EAAS,IAAI,EAAK,EAClB,MAAM8B,EAAqB7B,EAAkB,IAAG,EAC5C6B,GACAA,EAAmB,MAAK,CAChC,CACpB,CAAiB,EACG+B,GAAiBA,EAAc,UAC/BD,EAAqBC,EAAc,QAE3C,CACA,MAAMC,EAAcjC,GAAO,CAACpC,CAAM,EAAG,CAAC,CAAC4B,CAAO,IAAM,CAChD,GAAIA,IAAY,KACZ,OAAOtD,GACX,MAAMgG,EAAoB1B,GAAqBX,EAAML,CAAO,EAC5D,OAAI0C,IAAsB,KACfhG,GACJG,GAAUwD,EAAMqC,CAAiB,EAAE,OAC9C,CAAC,EACD,MAAO,CACH,SAAU,CACNH,EAAkB,EAClBE,EAAW,CACf,CAChB,CACQ,CACR,CAAK,EACK5G,GAAOiE,GAAYlC,EAAK,MAAM,EAAG,CACnC,SAAU,KACC,CACH,KAAM,WACN,SAAU,GACV,mBAAoB,UACpC,GAEQ,OAASyC,IACLS,GAAqBT,EAAMxC,CAAQ,EACnC+D,GAAqBvB,CAAI,EAsClB,CACH,QAtCUhD,GAAiB6D,EAAqBb,EAAM,cAAgBnD,GAAM,CAC5E,MAAMyF,EAASzF,EAAE,cACjB,GAAK5C,EAAcqI,CAAM,GAErBC,GAAkBD,CAAM,EAAG,CAC3BzF,EAAE,eAAc,EAChB,MACJ,CACJ,CAAC,EAAGgE,EAAqBb,EAAM,QAAUnD,GAAM,CAC3C,MAAMyF,EAASzF,EAAE,cACjB,GAAK5C,EAAcqI,CAAM,EAEzB,IAAIC,GAAkBD,CAAM,EAAG,CAC3BzF,EAAE,eAAc,EAChB,MACJ,CACA,GAAIA,EAAE,iBAAkB,CACpBjD,GAAkB0I,CAAM,EACxB,MACJ,CACIlE,EAAiB,OAEjBrE,GAAM,CAAC,EAAE,KAAK,IAAM,CAChBuE,EAAS,IAAI,EAAK,CACtB,CAAC,EAET,CAAC,EAAGuC,EAAqBb,EAAM,UAAYnD,GAAM,CAC7C2F,GAAc3F,CAAC,CACnB,CAAC,EAAGgE,EAAqBb,EAAM,cAAgBnD,GAAM,CACjD4F,GAAsB5F,CAAC,CAC3B,CAAC,EAAGgE,EAAqBb,EAAM,eAAiBnD,GAAM,CAClD6F,GAAuB7F,CAAC,CAC5B,CAAC,EAAGgE,EAAqBb,EAAM,UAAYnD,GAAM,CAC7C8F,GAAc9F,CAAC,CACnB,CAAC,EAAGgE,EAAqBb,EAAM,WAAanD,GAAM,CAC9C+F,GAAe/F,CAAC,CACpB,CAAC,CAAC,CAGd,EAEA,CAAK,EACKgG,EAAQpD,GAAYlC,EAAK,OAAO,EAAG,CACrC,SAAU,IACEuF,IAAa,CACjB,KAAM,QACN,kBAAmBA,CACnC,EAEA,CAAK,EACKC,EAAatD,GAAYlC,EAAK,aAAa,EAAG,CAChD,SAAU,IACEuF,IAAa,CACjB,GAAIA,CACpB,EAEA,CAAK,EACKE,GAAuB,CACzB,eAAgB,GAChB,SAAU,EAClB,EACUC,GAAsBC,GAAU,CAClC,MAAMrI,EAAe,CAAE,GAAGmI,GAAsB,GAAGE,CAAK,EAClDC,EAAkBtI,EAAa,SAAWG,GAASH,EAAa,gBAAkB,IAAI,EACtFuI,EAAUC,GAAYF,EAAiBtI,EAAa,eAAe,EACnEyI,EAAWtI,GAASH,EAAa,QAAQ,EACzC0I,GAAe9D,GAAYlC,EAAK,eAAe,EAAG,CACpD,OAAQ,CAAC6F,EAASE,CAAQ,EAC1B,SAAU,CAAC,CAACE,EAAUC,CAAS,KACpB,CACH,KAAM,mBACN,SAAU,GACV,mBAAoB,WACpB,eAAgBC,GAAgBF,CAAQ,EAAI,QAAUA,EAAW,OAAS,QAC1E,gBAAiBG,GAAaF,CAAS,EACvC,aAAcG,GAAgBJ,CAAQ,CAC1D,GAEY,OAASxD,IACLS,GAAqBT,EAAMxC,CAAQ,EACnC+D,GAAqBvB,CAAI,EAqDlB,CACH,QArDUhD,GAAiB6D,EAAqBb,EAAM,cAAgBnD,GAAM,CAC5E,MAAMyF,EAASzF,EAAE,cACjB,GAAK5C,EAAcqI,CAAM,GAErBC,GAAkBD,CAAM,EAAG,CAC3BzF,EAAE,eAAc,EAChB,MACJ,CACJ,CAAC,EAAGgE,EAAqBb,EAAM,QAAUnD,GAAM,CAC3C,MAAMyF,EAASzF,EAAE,cACjB,GAAK5C,EAAcqI,CAAM,EAEzB,IAAIC,GAAkBD,CAAM,EAAG,CAC3BzF,EAAE,eAAc,EAChB,MACJ,CACA,GAAIA,EAAE,iBAAkB,CACpBjD,GAAkB0I,CAAM,EACxB,MACJ,CACAc,EAAQ,OAAQS,IACRH,GAAgBG,EAAI,EACb,GACJ,CAACA,EACX,EACGzF,EAAiB,OAKjBoC,GAAI,EAAG,KAAK,IAAM,CACdlC,EAAS,IAAI,EAAK,CACtB,CAAC,EAET,CAAC,EAAGuC,EAAqBb,EAAM,UAAYnD,GAAM,CAC7C2F,GAAc3F,CAAC,CACnB,CAAC,EAAGgE,EAAqBb,EAAM,cAAgBnD,GAAM,CACjD,MAAMyF,EAASzF,EAAE,cACjB,GAAK5C,EAAcqI,CAAM,EAEzB,IAAIC,GAAkBD,CAAM,EAAG,CAC3BwB,GAAYjH,CAAC,EACb,MACJ,CACA4F,GAAsB5F,EAAGyF,CAAM,EACnC,CAAC,EAAGzB,EAAqBb,EAAM,eAAiBnD,GAAM,CAClD6F,GAAuB7F,CAAC,CAC5B,CAAC,EAAGgE,EAAqBb,EAAM,UAAYnD,GAAM,CAC7C8F,GAAc9F,CAAC,CACnB,CAAC,EAAGgE,EAAqBb,EAAM,WAAanD,GAAM,CAC9C+F,GAAe/F,CAAC,CACpB,CAAC,CAAC,CAGlB,EAEA,CAAS,EACKkH,GAAYvK,GAAQ4J,EAAUI,GAAaA,IAAa,EAAI,EAC5DQ,GAAmBxK,GAAQ4J,EAAUI,GAAaA,IAAa,eAAe,EACpF,MAAO,CACH,SAAU,CACN,aAAAD,EAChB,EACY,OAAQ,CACJ,QAAAH,CAChB,EACY,QAAS,CACL,UAAAW,GACA,gBAAiBC,EACjC,EACY,QAAS,CACL,SAAAV,CAChB,CACA,CACI,EACMW,EAAuB,CAAChL,EAAO,KAAO,CACxC,MAAMiL,EAAgBjL,EAAK,OAAS+B,GAAS/B,EAAK,cAAgB,IAAI,EAChEkL,EAAQd,GAAYa,EAAejL,EAAK,aAAa,EACrDmL,EAAa3E,GAAYlC,EAAK,aAAa,EAAG,CAChD,SAAU,KAAO,CACb,KAAM,OACtB,EACA,CAAS,EACK8G,EAAoB,CACtB,SAAU,EACtB,EACcC,GAAY7E,GAAYlC,EAAK,YAAY,EAAG,CAC9C,OAAQ,CAAC4G,CAAK,EACd,SAAU,CAAC,CAACI,EAAM,IACNC,GAAc,CAClB,KAAM,CAAE,MAAOC,EAAW,SAAAnB,CAAQ,EAAK,CAAE,GAAGe,EAAmB,GAAGG,CAAS,EACrEpB,EAAUmB,KAAWE,EAC3B,MAAO,CACH,SAAAnB,EACA,KAAM,gBACN,aAAcF,EAAU,UAAY,YACpC,eAAgBA,EAChB,gBAAiBO,GAAaL,CAAQ,EACtC,aAAcmB,EACd,mBAAoB,WACpB,SAAU,EAClC,CACgB,EAEJ,OAASzE,KACLS,GAAqBT,GAAMxC,CAAQ,EAyD5B,CACH,QAzDUR,GAAiB6D,EAAqBb,GAAM,cAAgBnD,GAAM,CAC5E,MAAMyF,EAASzF,EAAE,cACjB,GAAI,CAAC5C,EAAcqI,CAAM,EACrB,OACJ,MAAMmC,EAAYzE,GAAK,QAAQ,MAE/B,GADiBA,GAAK,QAAQ,UACdyE,IAAc,OAAW,CACrC5H,EAAE,eAAc,EAChB,MACJ,CACJ,CAAC,EAAGgE,EAAqBb,GAAM,QAAUnD,GAAM,CAC3C,MAAMyF,EAASzF,EAAE,cACjB,GAAI,CAAC5C,EAAcqI,CAAM,EACrB,OACJ,MAAMmC,EAAYzE,GAAK,QAAQ,MAE/B,GADiBA,GAAK,QAAQ,UACdyE,IAAc,OAAW,CACrC5H,EAAE,eAAc,EAChB,MACJ,CACA,GAAIA,EAAE,iBAAkB,CACpB,GAAI,CAAC5C,EAAcqI,CAAM,EACrB,OACJ1I,GAAkB0I,CAAM,EACxB,MACJ,CACA6B,EAAM,IAAIM,CAAS,EACfrG,EAAiB,OAKjBoC,GAAI,EAAG,KAAK,IAAM,CACdlC,EAAS,IAAI,EAAK,CACtB,CAAC,CAET,CAAC,EAAGuC,EAAqBb,GAAM,UAAYnD,GAAM,CAC7C2F,GAAc3F,CAAC,CACnB,CAAC,EAAGgE,EAAqBb,GAAM,cAAgBnD,GAAM,CACjD,MAAMyF,EAASzF,EAAE,cACjB,GAAI,CAAC5C,EAAcqI,CAAM,EACrB,OACJ,MAAMmC,EAAYzE,GAAK,QAAQ,MAE/B,GADiBA,GAAK,QAAQ,UACdyE,IAAc,OAAW,CACrCX,GAAYjH,CAAC,EACb,MACJ,CACA4F,GAAsB5F,EAAGyF,CAAM,CACnC,CAAC,EAAGzB,EAAqBb,GAAM,eAAiBnD,GAAM,CAClD6F,GAAuB7F,CAAC,CAC5B,CAAC,EAAGgE,EAAqBb,GAAM,UAAYnD,GAAM,CAC7C8F,GAAc9F,CAAC,CACnB,CAAC,EAAGgE,EAAqBb,GAAM,WAAanD,GAAM,CAC9C+F,GAAe/F,CAAC,CACpB,CAAC,CAAC,CAGlB,EAEA,CAAS,EACKkH,GAAYvK,GAAQ2K,EAAQI,IACtBE,GACGF,KAAWE,CAEzB,EACD,MAAO,CACH,SAAU,CACN,WAAAL,EACA,UAAAE,EAChB,EACY,OAAQ,CACJ,MAAAH,CAChB,EACY,QAAS,CACL,UAAAJ,EAChB,CACA,CACI,EACM,CAAE,SAAU,CAAE,KAAMW,EAAS,CAAE,EAAMC,GAAgB,CACvD,YAAa,YACrB,CAAK,EAIKC,EAAkB,CACpB,GAAGjK,GACH,SAAU,GACV,YAAa,CACT,UAAW,cACX,OAAQ,CACpB,CACA,EACUkK,GAAiB5L,GAAS,CAC5B,MAAM4B,EAAe,CAAE,GAAG+J,EAAiB,GAAG3L,CAAI,EAC5C6L,EAAkBjK,EAAa,MAAQG,GAAS,EAAK,EACrD+J,EAAU1B,GAAYyB,EAAiBjK,GAAA,YAAAA,EAAc,YAAY,EAEjEuB,EAAUiD,GAAiB2F,GAAKnK,EAAc,KAAK,CAAC,EACpD,CAAE,YAAA+C,GAAa,UAAAD,GAAW,SAAA2F,EAAQ,EAAKlH,EACvC6I,EAAmBlK,GAAQC,GAAS,IAAI,CAAC,EACzCkK,EAAenK,GAAQC,GAAS,IAAI,CAAC,EACrCmK,EAAoBpK,GAAQC,GAAS,CAAC,CAAC,EACvCoK,EAAS/F,GAAiB,CAAE,GAAGC,GAAYjC,EAAW,EAAG,GAAGxC,EAAa,IAAK,EACpFwK,GAAY,IAAM,CAKd,MAAMC,EAAa,SAAS,eAAeF,EAAO,QAAQ,KAAK,EAC3DE,GACAL,EAAiB,IAAIK,CAAU,CAEvC,CAAC,EACD,MAAMC,GAAepM,GAAe,CAChC,KAAM4L,EACN,aAAAzL,EACA,cAAe2L,CAC3B,CAAS,EACKO,GAAU/F,GAAYlC,EAAK,SAAS,EAAG,CACzC,OAAQ,CAACgI,GAAcH,EAAO,KAAMA,EAAO,OAAO,EAClD,SAAU,CAAC,CAACK,EAAeC,GAAYC,EAAa,KACzC,CACH,KAAM,OACN,OAAQF,EAAgB,OAAY,GACpC,MAAO3F,GAAc,CACjB,QAAS2F,EAAgB,OAAY,MAC7D,CAAqB,EACD,GAAIC,GACJ,kBAAmBC,GACnB,aAAcF,EAAgB,OAAS,SAGvC,UAAWC,GACX,SAAU,EAC9B,GAEY,OAAS1F,GAAS,CACd,IAAIC,GAAc5D,GAClB,MAAM6D,GAAeC,GAAO,CAACoF,GAAc3H,EAAW,EAAG,CAAC,CAAC6H,EAAepF,EAAY,IAAM,CAExF,GADAJ,GAAW,EACP,CAACwF,EACD,OACJ,MAAMlM,GAAgB0L,EAAiB,IAAG,EACrC1L,IAELiH,GAAI,EAAG,KAAK,IAAM,CACdP,GAAW,EACX,MAAM2F,GAAeC,GAActM,EAAa,EAChD0G,GAAchE,GAAU+D,EAAM,CAC1B,cAAezG,GACf,KAAMwL,EACN,QAAS,CACL,SAAU1E,GACV,OAAQpG,EAAc2L,EAAY,EAAIA,GAAe,OACrD,MAAO,KACP,UAAW,KACX,cAAe,IAC/C,CACA,CAAyB,EAAE,OACP,CAAC,CACL,CAAC,EACKhF,EAAc5D,GAAiB6D,EAAqBb,EAAM,UAAYnD,GAAM,CAC9E,GAAIA,EAAE,MAAQM,GAAI,OACd,OAIJ,MAAM2D,GAASjE,EAAE,OACXkE,GAASlE,EAAE,cAIjB,GAHI,CAAC5C,EAAc6G,EAAM,GAAK,CAAC7G,EAAc8G,EAAM,GAG/C,EADoBD,GAAO,QAAQ,eAAe,IAAMC,IAExD,OACJ,GAAIC,GAAgB,SAASnE,EAAE,GAAG,EAAG,CAEjCA,EAAE,yBAAwB,EAC1BoE,GAAqBpE,EAAGoB,EAAK,IAAG,GAAM,EAAK,EAC3C,MACJ,CACA,MAAM6H,GAAa1I,GAAe,IAAO,SAASP,EAAE,GAAG,EACjDkJ,GAAgBlJ,EAAE,SAAWA,EAAE,QAAUA,EAAE,QAC3CsE,GAAiBtE,EAAE,IAAI,SAAW,EAExC,GAAIiJ,GAAY,CACZ,MAAME,GAAoBf,EAAiB,IAAG,EAC9CpI,EAAE,eAAc,EAChBkI,EAAQ,OAAO,KACPiB,IACApM,GAAkBoM,EAAiB,EAEhC,GACV,EACD,MACJ,CAKA,GAAInJ,EAAE,MAAQM,GAAI,IAAK,CACnBN,EAAE,eAAc,EAChByB,EAAS,IAAI,EAAK,EAClB4C,GAAoBrE,EAAG2B,EAAeC,CAAa,EACnD,MACJ,CACI,CAACsH,IAAiB5E,IAAkBnD,EAAU,IAAG,IAAO,IAExDmB,EAAsBtC,EAAE,IAAKuE,GAAaL,EAAM,CAAC,CAEzD,CAAC,EAAGF,EAAqBb,EAAM,cAAgBnD,GAAM,CACjDoJ,GAAkBpJ,CAAC,CACvB,CAAC,EAAGgE,EAAqBb,EAAM,WAAanD,GAAM,CAC9C,MAAMmJ,GAAoBf,EAAiB,IAAG,EAC9C,GAAIvG,EAAgB,MAAO,CACvB,MAAMoC,GAASjE,EAAE,OACXqJ,GAAY,SAAS,eAAed,EAAO,KAAK,KAAK,EAC3D,GAAI,CAACnL,EAAciM,EAAS,GAAK,CAACjM,EAAc6G,EAAM,EAClD,OACA,CAACoF,GAAU,SAASpF,EAAM,GAAKA,KAAWkF,IAC1CjB,EAAQ,IAAI,EAAK,CAEzB,KACK,CACD,MAAMhE,GAASlE,EAAE,cACXsJ,GAAgBtJ,EAAE,cACxB,GAAI,CAAC5C,EAAckM,EAAa,GAAK,CAAClM,EAAc8G,EAAM,EACtD,OACA,CAACA,GAAO,SAASoF,EAAa,GAAKA,KAAkBH,IACrDjB,EAAQ,IAAI,EAAK,CAEzB,CACJ,CAAC,CAAC,EACF,MAAO,CACH,SAAU,CACN7E,GAAY,EACZD,GAAW,EACXW,EAAW,CACf,CACpB,CACY,CACZ,CAAS,EACK0E,GAAa7F,GAAYlC,EAAK,YAAY,EAAG,CAC/C,OAAQ,CAACwH,EAASzB,GAAU8B,EAAO,KAAMA,EAAO,OAAO,EACvD,SAAU,CAAC,CAACgB,EAAU3C,GAAWiC,GAAYC,CAAa,KAC/C,CACH,KAAM,WACN,GAAIA,EACJ,SAAU,GACV,gBAAiBD,GACjB,gBAAiBU,EACjB,aAAcA,EAAW,OAAS,SAClC,gBAAiBzC,GAAaF,EAAS,EACvC,gBAAiB,MACrC,GAEY,OAASzD,GAAS,CACdS,GAAqBT,EAAMxC,CAAQ,EACnC+D,GAAqBvB,CAAI,EACzBiF,EAAiB,OAAQzD,GACjBA,GAEGxB,CACV,EACD,MAAMqG,GAAa,IAAM,CACrBC,GAAgBpB,CAAY,EAC5B,OAAO,aAAaC,EAAkB,KAAK,EAC3CvG,EAAmB,IAAI,IAAI,CAC/B,EACMgC,GAAc5D,GAAiB6D,EAAqBb,EAAM,QAAUnD,GAAM,CAC5E,GAAIA,EAAE,iBACF,OACJ,MAAM4E,EAAY5E,EAAE,cAChB,CAAC5C,EAAcwH,CAAS,GAAKc,GAAkBd,CAAS,IAG5D7H,GAAkB6H,CAAS,EACtBsD,EAAQ,OACTA,EAAQ,OAAQlB,IACUA,KAElBoB,EAAiB,IAAIxD,CAAS,EACvB,CAACoC,GAGf,EAET,CAAC,EAAGhD,EAAqBb,EAAM,UAAYnD,GAAM,CAC7C,MAAMxB,EAASP,GAAM,IAAG,EAClB2G,GAAY5E,EAAE,cAIpB,GAHI,GAAC5C,EAAcwH,EAAS,GAAKc,GAAkBd,EAAS,GAEtCpG,EAAO,OAAS,GACjBwB,EAAE,MAAQM,GAAI,QAE/BF,GAAc,IAAO,SAASJ,EAAE,GAAG,EAAG,CACtC,GAAI,CAACkI,EAAQ,MAAO,CAChBtD,GAAU,MAAK,EACf5E,EAAE,eAAc,EAChB,MACJ,CACA,MAAM8E,GAASF,GAAU,aAAa,eAAe,EACrD,GAAI,CAACE,GACD,OACJ,MAAMZ,GAAS,SAAS,eAAeY,EAAM,EAC7C,GAAI,CAAC1H,EAAc8G,EAAM,EACrB,OACJ,MAAMwF,GAAYnF,GAAaL,EAAM,EAAE,CAAC,EACxCnH,GAAkB2M,EAAS,CAC/B,CACJ,CAAC,EAAG1F,EAAqBb,EAAM,cAAgBnD,GAAM,CAIjD,GAHI,CAAC2J,GAAQ3J,CAAC,IAEd4J,GAAY5J,CAAC,EACTA,EAAE,kBACF,OACJ,MAAM4E,EAAY5E,EAAE,cACpB,GAAI,CAAC5C,EAAcwH,CAAS,EACxB,OACCiF,GAAqBtB,EAAO,KAAK,IAAG,CAAE,GACvCxL,GAAkB6H,CAAS,EAE/B,MAAMkF,GAAYzB,EAAa,IAAG,EAC9B,CAACH,EAAQ,IAAG,GAAM,CAAC4B,IAAa,CAACpE,GAAkBd,CAAS,GAC5DyD,EAAa,IAAI,OAAO,WAAW,IAAM,CACrCH,EAAQ,OAAO,KACXE,EAAiB,IAAIxD,CAAS,EACvB,GACV,EACD6E,GAAgBpB,CAAY,CAChC,EAAG,GAAG,CAAC,CAEf,CAAC,EAAGrE,EAAqBb,EAAM,eAAiBnD,GAAM,CAClD,GAAI,CAAC2J,GAAQ3J,CAAC,EACV,OACJyJ,GAAgBpB,CAAY,EAC5B,MAAMgB,EAAY,SAAS,eAAed,EAAO,KAAK,KAAK,EACrDwB,GAAcV,GAAA,YAAAA,EAAW,wBAC/B,GAAIU,GAAa,CACb,MAAMC,GAAOX,GAAA,YAAAA,EAAW,QAAQ,KAC1BY,GAAYD,KAAS,QACrBE,GAAQD,GAAY,GAAK,EACzBE,GAAkBJ,GAAYE,GAAY,OAAS,OAAO,EAC1DG,GAAiBL,GAAYE,GAAY,QAAU,MAAM,EAC/DlI,EAAmB,IAAI,CACnB,KAAM,CAGF,CAAE,EAAG/B,EAAE,QAAUkK,GAAO,EAAGlK,EAAE,OAAO,EACpC,CAAE,EAAGmK,GAAiB,EAAGJ,GAAY,GAAG,EACxC,CAAE,EAAGK,GAAgB,EAAGL,GAAY,GAAG,EACvC,CAAE,EAAGK,GAAgB,EAAGL,GAAY,MAAM,EAC1C,CAAE,EAAGI,GAAiB,EAAGJ,GAAY,MAAM,CAC3E,EAC4B,KAAAC,EAC5B,CAAyB,EACD,OAAO,aAAa1B,EAAkB,KAAK,EAC3CA,EAAkB,IAAI,OAAO,WAAW,IAAM,CAC1CvG,EAAmB,IAAI,IAAI,CAC/B,EAAG,GAAG,CAAC,CACX,KACK,CAED,GADAsI,GAAerK,CAAC,EACZA,EAAE,iBACF,OAEJ+B,EAAmB,IAAI,IAAI,CAC/B,CACJ,CAAC,EAAGiC,EAAqBb,EAAM,WAAanD,GAAM,CAC9C,MAAM4E,EAAY5E,EAAE,cACpB,GAAI,CAAC5C,EAAcwH,CAAS,EACxB,OACJ7I,GAAgB6I,CAAS,EACzB,MAAM0E,GAAgBtJ,EAAE,cACxB,GAAI,CAAC5C,EAAckM,EAAa,EAC5B,OACJ,MAAMxE,GAASF,EAAU,aAAa,eAAe,EACrD,GAAI,CAACE,GACD,OACJ,MAAMC,GAAO,SAAS,eAAeD,EAAM,EACvCC,IAAQ,CAACA,GAAK,SAASuE,EAAa,GACpCpB,EAAQ,IAAI,EAAK,CAEzB,CAAC,EAAGlE,EAAqBb,EAAM,UAAYnD,GAAM,CAC7C8F,GAAc9F,CAAC,CACnB,CAAC,CAAC,EACF,MAAO,CACH,SAAU,CACNwJ,GAAU,EACVzF,GAAW,CACf,CACpB,CACY,CACZ,CAAS,EACKuG,GAAW1H,GAAYlC,EAAK,UAAU,EAAG,CAC3C,OAAQI,GACR,SAAWoE,IAAgB,CACvB,aAAc,GACd,MAAOjC,GAAc,CACjB,SAAU,WACV,MAAO,qBAAqBiC,CAAU,MACtC,OAAQ,qBAAqBA,CAAU,KAC3D,CAAiB,CACjB,EACA,CAAS,EAID,OAAA5B,GAAO,CAAC7B,CAAQ,EAAG,CAAC,CAACgD,CAAS,IAAM,CAC3BA,IACD2D,EAAiB,IAAI,IAAI,EACzBF,EAAQ,IAAI,EAAK,EAEzB,CAAC,EACD5E,GAAO,CAACvB,CAAkB,EAAG,CAAC,CAACK,CAAmB,IAAM,CAChD,CAACnF,IAAamF,GAElB,OAAO,aAAakG,EAAkB,KAAK,CAC/C,CAAC,EACDhF,GAAO,CAAC4E,CAAO,EAAG,CAAC,CAACqB,CAAQ,IAAM,CAC9B,GAAKtM,KAEDsM,GAAY1H,EAAgB,OAC5B3E,GAAM,CAAC,EAAE,KAAK,IAAM,CAChB,MAAMgH,GAAS,SAAS,eAAeqE,EAAO,KAAK,KAAK,EACxD,GAAI,CAACrE,GACD,OACJ,MAAMc,GAAYT,GAAaL,EAAM,EAChCc,GAAU,QAEfjI,GAAkBiI,GAAU,CAAC,CAAC,CAClC,CAAC,EAED,CAACuE,GAAU,CACX,MAAMgB,GAActI,GAAmB,IAAG,EACpCuI,GAAe,SAAS,eAAejC,EAAO,QAAQ,KAAK,EAWjE,GAVIgC,IACArN,GAAM,CAAC,EAAE,KAAK,IAAM,CAChB,MAAMgH,EAAS,SAAS,eAAeqE,EAAO,KAAK,KAAK,EACnDrE,GAEDA,EAAO,SAASqG,EAAW,GAC3BxO,GAAgBwO,EAAW,CAEnC,CAAC,EAED,CAACC,IAAgB,SAAS,gBAAkBA,GAC5C,OACJzO,GAAgByO,EAAY,CAChC,CACJ,CAAC,EACM,CACH,IAAKjC,EACL,SAAU,CACN,WAAAE,GACA,QAAAE,GACA,SAAA2B,EAChB,EACY,OAAQ,CACJ,QAAApC,CAChB,EACY,QAAA3I,CACZ,CACI,EACAiJ,GAAY,IAAM,CAMd,MAAM5D,EAAY,SAAS,eAAerC,EAAQ,QAAQ,KAAK,EAC3DnF,EAAcwH,CAAS,GAAKnD,EAAS,IAAG,GACxCC,EAAkB,IAAIkD,CAAS,EAEnC,MAAM6F,EAAS,CAAA,EACTC,EAAgB,IAAM7I,EAAgB,IAAI,EAAK,EAC/C8I,EAAgB,IAAM,CACxB9I,EAAgB,IAAI,EAAI,EACxB4I,EAAO,KAAKtK,GAAiByK,GAAiB,SAAU,cAAeF,EAAe,CAAE,QAAS,GAAM,KAAM,GAAM,EAAGE,GAAiB,SAAU,cAAeF,EAAe,CAAE,QAAS,GAAM,KAAM,EAAI,CAAE,CAAC,CAAC,CAClN,EACMG,EAAmB7K,IAAM,CAC3B,GAAIA,GAAE,MAAQM,GAAI,QAAUU,EAAc,MAAO,CAC7CS,EAAS,IAAI,EAAK,EAClB,MACJ,CACJ,EACA,OAAAgJ,EAAO,KAAKG,GAAiB,SAAU,UAAWD,EAAe,CAAE,QAAS,EAAI,CAAE,CAAC,EACnFF,EAAO,KAAKG,GAAiB,SAAU,UAAWC,CAAe,CAAC,EAC3D,IAAM,CACTJ,EAAO,QAASK,IAAUA,GAAK,CAAE,CACrC,CACJ,CAAC,EAIDxH,GAAO,CAAC7B,EAAUQ,EAAkB,EAAG,CAAC,CAACwC,EAAWsG,CAAmB,IAAM,CACrE,CAACtG,GAAasG,GACdhP,GAAgBgP,CAAmB,CAE3C,CAAC,EACDzH,GAAO,CAAC7B,CAAQ,EAAG,CAAC,CAACgD,CAAS,IAAM,CAChC,GAAKxH,IAED,CAACwH,EAAW,CACZ,MAAMlB,EAAqB7B,EAAkB,IAAG,EAChD,GAAI,CAAC6B,EACD,OACJ,MAAMyH,EAAc3J,EAAW,IAAG,EAC9B,CAACoD,GAAalB,GACd0H,GAAY,CAAE,KAAMD,EAAa,UAAWzH,CAAkB,CAAE,CAExE,CACJ,CAAC,EACDD,GAAO,CAAC7B,EAAUZ,CAAa,EAAG,CAAC,CAAC4D,EAAWyG,CAAc,IAAM,CAC/D,GAAI,CAACjO,GACD,OACJ,MAAMwN,EAAS,CAAA,EAMf,OAAAvN,GAAM,CAAC,EAAE,KAAK,IAAM,CAChB,MAAMgH,EAAS,SAAS,eAAe3B,EAAQ,KAAK,KAAK,EACzD,GAAI2B,GAAUO,GAAa5C,EAAgB,IAAG,EAAI,CAC9C,GAAIP,EAAsB,MAAO,CAC7BvE,GAAkBmH,CAAM,EACxB,MACJ,CAEA,MAAMc,EAAYT,GAAaL,CAAM,EACrC,GAAI,CAACc,EAAU,OACX,OAEJjI,GAAkBiI,EAAU,CAAC,CAAC,CAClC,CACJ,CAAC,EACM,IAAM,CACTyF,EAAO,QAASK,GAAUA,EAAK,CAAE,CACrC,CACJ,CAAC,EACDxH,GAAO7B,EAAWgD,GAAc,CAC5B,GAAI,CAACxH,GACD,OACJ,MAAMyN,EAAgB,IAAM7I,EAAgB,IAAI,EAAK,EAC/C8I,EAAiB3K,GAAM,CAEzB,GADA6B,EAAgB,IAAI,EAAI,EACpB7B,EAAE,MAAQM,GAAI,QAAUmE,GAAazD,EAAc,MAAO,CAC1DS,EAAS,IAAI,EAAK,EAClB,MACJ,CACJ,EACA,OAAOtB,GAAiByK,GAAiB,SAAU,cAAeF,EAAe,CAAE,QAAS,GAAM,KAAM,EAAI,CAAE,EAAGE,GAAiB,SAAU,cAAeF,EAAe,CAAE,QAAS,GAAM,KAAM,EAAI,CAAE,EAAGE,GAAiB,SAAU,UAAWD,EAAe,CAAE,QAAS,EAAI,CAAE,CAAC,CACrR,CAAC,EACD,SAAS9F,GAAWD,EAAW,CAC3BnD,EAAS,OAAQuF,GAAS,CACtB,MAAMmE,EAAS,CAACnE,EAChB,OAAImE,IACAxJ,EAAc,IAAIrE,GAAiBsH,CAAS,CAAC,EAC7ChD,EAAc,IAAIlE,GAAqBkH,CAAS,CAAC,EACjDlD,EAAkB,IAAIkD,CAAS,GAE5BuG,CACX,CAAC,CACL,CAIA,SAASrF,GAAc9F,EAAG,CACtB,MAAMyF,EAASzF,EAAE,cACjB,GAAI,CAAC5C,EAAcqI,CAAM,EACrB,OACJ,MAAMsF,EAAsB9I,GAAmB,IAAG,EAC9C8I,GACAhP,GAAgBgP,CAAmB,EAEvClP,GAAa4J,CAAM,EAQnBxD,GAAmB,IAAIwD,CAAM,CACjC,CAIA,SAASM,GAAe/F,EAAG,CACvB,MAAMyF,EAASzF,EAAE,cACZ5C,EAAcqI,CAAM,GAEzB1J,GAAgB0J,CAAM,CAC1B,CACA,SAASmE,GAAY5J,EAAG,CAChBoL,GAAyBpL,CAAC,GAC1BA,EAAE,eAAc,CAExB,CACA,SAASiH,GAAYjH,EAAG,CACpB,GAAIoL,GAAyBpL,CAAC,EAC1B,OAEJ,MAAMiE,EAASjE,EAAE,OACjB,GAAI,CAAC5C,EAAc6G,CAAM,EACrB,OACJ,MAAM8E,EAAeC,GAAc/E,CAAM,EACpC8E,GAELhM,GAAkBgM,CAAY,CAClC,CACA,SAASsB,GAAerK,EAAG,CACnBoL,GAAyBpL,CAAC,GAC1BA,EAAE,eAAc,CAExB,CACA,SAASoJ,GAAkBpJ,EAAG,CAC1B,GAAI,CAAC2J,GAAQ3J,CAAC,EACV,OACJ,MAAMiE,EAASjE,EAAE,OACXqL,EAAgBrL,EAAE,cACxB,GAAI,CAAC5C,EAAciO,CAAa,GAAK,CAACjO,EAAc6G,CAAM,EACtD,OACJ,MAAMqH,EAAgBxJ,EAAa,IAAG,EAChCyJ,EAAqBD,IAAkBtL,EAAE,QAG/C,GAAIqL,EAAc,SAASpH,CAAM,GAAKsH,EAAoB,CACtD,MAAMC,GAASxL,EAAE,QAAUsL,EAAgB,QAAU,OACrDtJ,EAAW,IAAIwJ,EAAM,EACrB1J,EAAa,IAAI9B,EAAE,OAAO,CAC9B,CACJ,CACA,SAAS4F,GAAsB5F,EAAGyL,EAAa,KAAM,CAIjD,GAHI,CAAC9B,GAAQ3J,CAAC,IAEd4J,GAAY5J,CAAC,EACTA,EAAE,kBACF,OAEJ,GAAIyL,EAAY,CACZ1O,GAAkB0O,CAAU,EAC5B,MACJ,CAEA,MAAMJ,EAAgBrL,EAAE,cACnB5C,EAAciO,CAAa,GAGhCtO,GAAkBsO,CAAa,CACnC,CACA,SAASxF,GAAuB7F,EAAG,CAC1B2J,GAAQ3J,CAAC,GAEdiH,GAAYjH,CAAC,CACjB,CAIA,SAAS2F,GAAc3F,EAAG,CAGtB,GAFe/B,GAAM,IAAG,EACK,OAAS,GACjB+B,EAAE,MAAQM,GAAI,MAAO,CACtCN,EAAE,eAAc,EAChB,MACJ,CACA,GAAIK,GAAe,SAASL,EAAE,GAAG,EAAG,CAOhCA,EAAE,eAAc,EAChB,MAAMyF,EAASzF,EAAE,cACjB,GAAI,CAAC5C,EAAcqI,CAAM,EACrB,OACJA,EAAO,MAAK,CAChB,CACJ,CACA,SAASoB,GAAgBN,EAAS,CAC9B,OAAOA,IAAY,eACvB,CACA,SAASQ,GAAgBR,EAAS,CAC9B,OAAOM,GAAgBN,CAAO,EAAI,gBAAkBA,EAAU,UAAY,WAC9E,CACA,SAAS6E,GAAyBpL,EAAG,CACjC,OAAOkC,GAAuB,IAAG,EAAGlC,CAAC,CACzC,CAKA,SAASgJ,GAAclN,EAAS,CAC5B,MAAMiN,EAAejN,EAAQ,QAAQ,eAAe,EACpD,OAAKsB,EAAc2L,CAAY,EAExBA,EADI,IAEf,CACA,MAAO,CACH,SAAU,CACN,QAASvE,GACT,KAAM7B,GACN,QAAAwC,GACA,KAAAxG,GACA,MAAAqH,EACA,WAAAE,EACA,MAAOjB,GACP,UAAA4C,EACZ,EACQ,SAAU,CACN,mBAAAzB,GACA,cAAA4B,GACA,qBAAAZ,CACZ,EACQ,OAAQ,CACJ,KAAM3F,CAClB,EACQ,QAAS,CACL,sBAAAa,CACZ,EACQ,IAAKC,EACL,QAAS9C,EAAK,WACtB,CACA,CACO,SAAS4E,GAAoBrE,EAAG2B,EAAeC,EAAe,CACjE,GAAI5B,EAAE,SAAU,CACZ,MAAM0L,EAAiB9J,EAAc,IAAG,EACpC8J,IACA1L,EAAE,eAAc,EAChB9C,GAAM,CAAC,EAAE,KAAK,IAAMwO,EAAe,MAAK,CAAE,EAC1C9J,EAAc,IAAI,IAAI,EAE9B,KACK,CACD,MAAM+J,EAAiBhK,EAAc,IAAG,EACpCgK,IACA3L,EAAE,eAAc,EAChB9C,GAAM,CAAC,EAAE,KAAK,IAAMyO,EAAe,MAAK,CAAE,EAC1ChK,EAAc,IAAI,IAAI,EAE9B,CACJ,CAOO,SAAS4C,GAAaqH,EAAa,CACtC,OAAO,MAAM,KAAKA,EAAY,iBAAiB,uBAAuBA,EAAY,EAAE,IAAI,CAAC,EAAE,OAAQjN,GAASvB,EAAcuB,CAAI,CAAC,CACnI,CACO,SAAS+F,GAAqB5I,EAAS,CACtC,CAACA,GAAW,CAAC4J,GAAkB5J,CAAO,IAE1CA,EAAQ,aAAa,gBAAiB,EAAE,EACxCA,EAAQ,aAAa,gBAAiB,MAAM,EAChD,CAKO,SAAS2N,GAAgBoC,EAAY,CACxC,GAAI,CAAC5O,GACD,OACJ,MAAM6O,EAAQD,EAAW,IAAG,EACxBC,IACA,OAAO,aAAaA,CAAK,EACzBD,EAAW,IAAI,IAAI,EAE3B,CAKA,SAASlC,GAAQ3J,EAAG,CAChB,OAAOA,EAAE,cAAgB,OAC7B,CAKO,SAAS4D,GAAqB9H,EAAS6E,EAAU,CACpD,GAAI,CAAC7E,EACD,OACJ,MAAMoI,EAASpI,EAAQ,QAAQ,GAAG6E,GAAU,KAAKA,EAAS,SAAS,CAAC,EAAE,EACjEvD,EAAc8G,CAAM,GAEzBpI,EAAQ,aAAa,oBAAqBoI,EAAO,EAAE,CACvD,CAKO,SAASE,GAAqBpE,EAAGoB,EAAM,CAC1CpB,EAAE,eAAc,EAEhB,MAAMiC,EAAqB,SAAS,cAE9BoJ,EAAgBrL,EAAE,cACxB,GAAI,CAAC5C,EAAc6E,CAAkB,GAAK,CAAC7E,EAAciO,CAAa,EAClE,OAEJ,MAAMrG,EAAYT,GAAa8G,CAAa,EAC5C,GAAI,CAACrG,EAAU,OACX,OACJ,MAAM+G,EAAiB/G,EAAU,OAAQrG,GACjC,EAAAA,EAAK,aAAa,eAAe,GAAKA,EAAK,aAAa,UAAU,IAAM,OAI/E,EAEKqN,EAAeD,EAAe,QAAQ9J,CAAkB,EAE9D,IAAIxE,EACJ,OAAQuC,EAAE,IAAG,CACT,KAAKM,GAAI,WACDc,EACA3D,EAAYuO,EAAeD,EAAe,OAAS,EAAIC,EAAe,EAAI,EAG1EvO,EAAYuO,EAAeD,EAAe,OAAS,EAAIC,EAAe,EAAIA,EAE9E,MACJ,KAAK1L,GAAI,SACDc,EACA3D,EAAYuO,EAAe,EAAIA,EAAe,EAAID,EAAe,OAAS,EAG1EtO,EACIuO,EAAe,EAAID,EAAe,OAAS,EAAIC,EAAe,EAAIA,EAAe,EAAI,EAE7F,MACJ,KAAK1L,GAAI,KACL7C,EAAY,EACZ,MACJ,KAAK6C,GAAI,IACL7C,EAAYsO,EAAe,OAAS,EACpC,MACJ,QACI,MACZ,CACIhP,GAAkBgP,EAAetO,CAAS,CAAC,CAC/C,CACA,SAAS4E,GAAqBrC,EAAGiM,EAAM,CACnC,GAAI,CAACA,EACD,MAAO,GACX,MAAMC,EAAY,CAAE,EAAGlM,EAAE,QAAS,EAAGA,EAAE,OAAO,EAC9C,OAAOmM,GAAiBD,EAAWD,CAAI,CAC3C,CAMA,SAASE,GAAiBC,EAAOC,EAAS,CACtC,KAAM,CAAE,EAAAC,EAAG,EAAAC,CAAC,EAAKH,EACjB,IAAII,EAAS,GACb,QAASC,EAAI,EAAGC,EAAIL,EAAQ,OAAS,EAAGI,EAAIJ,EAAQ,OAAQK,EAAID,IAAK,CACjE,MAAME,EAAKN,EAAQI,CAAC,EAAE,EAChBG,EAAKP,EAAQI,CAAC,EAAE,EAChBI,EAAKR,EAAQK,CAAC,EAAE,EAChBI,EAAKT,EAAQK,CAAC,EAAE,EAEFE,EAAKL,GAAQO,EAAKP,GAAQD,GAAKO,EAAKF,IAAOJ,EAAIK,IAAOE,EAAKF,GAAMD,IAEjFH,EAAS,CAACA,EAClB,CACA,OAAOA,CACX,CACA,SAAS3C,GAAqBkD,EAAW,CACrC,MAAMC,EAAW,SAAS,cAC1B,GAAI,CAAC5P,EAAc4P,CAAQ,EACvB,MAAO,GAGX,MAAM3D,EAAY2D,EAAS,QAAQ,aAAaD,CAAS,IAAI,EAC7D,OAAO3P,EAAciM,CAAS,CAClC,CACA,SAASjE,GAAU5I,EAAM,CACrB,OAAOA,EAAO,OAAS,QAC3B,CC10CA,MAAMyQ,GAAmB,CAAC3M,GAAI,WAAYA,GAAI,YAAaA,GAAI,KAAMA,GAAI,GAAG,EACtE,CAAE,KAAAI,EAAI,EAAKE,GAAgB,SAAS,EACpC9C,GAAW,CACb,KAAM,GACN,cAAe,GACf,cAAe,EACnB,EACaoP,GAAiB,CAAC,SAAS,EACjC,SAASC,GAAc9G,EAAO,CACjC,MAAMrI,EAAe,CAAE,GAAGF,GAAU,GAAGuI,CAAK,EACtC9G,EAAUiD,GAAiB2F,GAAKnK,EAAc,KAAK,CAAC,EACpD,CAAE,KAAAoD,EAAM,cAAAJ,EAAe,cAAAH,CAAa,EAAKtB,EACzC6N,EAAalP,GAAQC,GAAS,EAAE,CAAC,EACjCwD,EAAgBzD,GAAQC,GAAS,IAAI,CAAC,EACtCyD,EAAgB1D,GAAQC,GAAS,IAAI,CAAC,EACtCkP,EAAyBnP,GAAQC,GAAS,IAAI,CAAC,EAC/CmP,EAAapP,GAAQC,GAAS,CAAC,CAAC,EACtC,IAAIoP,EAAgB,GACpB,MAAMC,EAAMhL,GAAiB,CAAE,GAAGC,GAAYyK,EAAc,EAAG,GAAGlP,EAAa,IAAK,EAC9EyP,EAAU7K,GAAYlC,KAAQ,CAChC,OAAQ,CAAC8M,EAAI,OAAO,EACpB,SAAS,CAACE,CAAU,EAAG,CACnB,MAAO,CACH,KAAM,UACN,oBAAqB,GACrB,mBAAoB,aACpB,GAAIA,CACpB,CACQ,EACA,OAASvK,GAAS,CACd,MAAMwK,EAAe,MAAM,KAAKxK,EAAK,iBAAiB,6BAA6B,CAAC,EACpF,OAAK/F,EAAcuQ,EAAa,CAAC,CAAC,GAElCA,EAAa,CAAC,EAAE,SAAW,EACpB,CACH,QAASnO,EACzB,GAJuB,CAAA,CAKf,CACR,CAAK,EACKoO,EAAe,CACjB,YAAa,CACT,UAAW,cACvB,EACQ,UAAW,EACX,IAAK,MACL,KAAM,GACN,cAAe,GACf,oBAAqB,GACrB,OAAQ,OACR,aAAc,GACd,YAAa,GACb,UAAW,GACX,WAAY,OACZ,sBAAuB,GACvB,iBAAkB,GAClB,eAAgB,MACxB,EACUC,EAAcxH,GAAU,CAC1B,MAAMrI,EAAe,CAAE,GAAG4P,EAAc,GAAGvH,CAAK,EAC1C5E,EAAWvD,GAAQC,GAAS,EAAK,CAAC,EAClCuD,EAAoBxD,GAAQC,GAAS,IAAI,CAAC,EAE1CoB,GAAUiD,GAAiBxE,CAAY,EACvC,CAAE,YAAA+C,GAAa,OAAAG,GAAQ,aAAAzE,EAAc,oBAAAwE,EAAqB,eAAAO,EAAc,EAAKjC,GAC7EuO,GAAIrN,GAAkB,CACxB,YAAa,CAAE,GAAGlB,GAAS,cAAAsB,CAAa,EACxC,SAAU3C,GAAQuD,CAAQ,EAC1B,kBAAmBvD,GAAQwD,CAAiB,EAC5C,cAAexD,GAAQyD,CAAa,EACpC,cAAezD,GAAQ0D,CAAa,EACpC,SAAU,cAEd,CAAC,EACKc,GAAYpG,GAAe,CAC7B,KAAMmF,EACN,aAAAhF,EACA,cAAeiF,CAC3B,CAAS,EACKqD,GAAOnC,GAAYlC,GAAK,MAAM,EAAG,CACnC,OAAQ,CAACgC,GAAWxB,GAAQ4M,GAAE,IAAI,KAAMA,GAAE,IAAI,QAASN,EAAI,OAAO,EAClE,SAAU,CAAC,CAAC3K,EAAYC,EAASiL,GAASC,GAAYN,CAAU,KACrD,CACH,KAAM,OACN,OAAQ7K,EAAa,OAAY,GACjC,MAAOI,GAAc,CACjB,QAASJ,EAAa,OAAY,MAC1D,CAAqB,EACD,GAAIkL,GACJ,kBAAmBC,GACnB,aAAcnL,EAAa,OAAS,SACpC,kBAAmB6K,EACnB,cAAexK,GAAWJ,CAAO,EACjC,SAAU,EAC9B,GAEY,OAASK,GAAS,CACd,IAAIC,EAAc5D,GAClB,MAAM6D,GAAeC,GAAO,CAAC7B,EAAUC,EAAmBX,GAAaG,GAAQD,CAAmB,EAAG,CAAC,CAACwD,EAAWlB,GAAoBC,EAAcV,GAASW,EAAoB,IAAM,CACnLL,EAAW,EACLqB,GAAalB,IAEnBI,GAAI,EAAG,KAAK,IAAM,CACdP,EAAW,EACXA,EAAchE,GAAU+D,EAAM,CAC1B,cAAeI,GACf,KAAM9B,EACN,QAAS,CACL,SAAU+B,EACV,OAAQM,GAAqBX,EAAML,EAAO,EAC1C,MAAO,CACH,uBAAwBW,GACxB,6BAA+BzD,IAAM,QAEjC,IADA6D,GAAArC,GAAe,IAAG,IAAlB,MAAAqC,GAAuB7D,IACnBA,GAAE,iBACF,MAAO,GACX,MAAMiE,GAASjE,GAAE,OACXiO,GAAY,SAAS,eAAeT,EAAI,QAAQ,KAAK,EAC3D,MAAI,CAACS,IAAa,CAACC,GAAUjK,EAAM,EACxB,GACP,CAAAgK,GAAU,SAAShK,EAAM,CAGjC,EACA,QAAS,IAAM,CACXmJ,EAAW,IAAI,EAAE,CACrB,EACA,KAAM3I,CAC1C,CACA,CACA,CAAyB,EAAE,OACP,CAAC,CACL,CAAC,EACKV,GAAc5D,GAAiB6D,EAAqBb,EAAM,UAAYnD,GAAM,CAC9E,MAAMiE,GAASjE,EAAE,OACXkE,EAASlE,EAAE,cAWjB,GAVI,CAAC5C,EAAc8G,CAAM,GAAK,CAAC9G,EAAc6G,EAAM,IAE/CgJ,GAAiB,SAASjN,EAAE,GAAG,GAC/BmO,EAA0BnO,CAAC,EAO3B,EADoBiE,GAAO,QAAQ,eAAe,IAAMC,IAExD,OACAC,GAAgB,SAASnE,EAAE,GAAG,GAC9BoE,GAAqBpE,CAAC,EAMtBA,EAAE,MAAQM,GAAI,MACdN,EAAE,eAAc,EAChB0B,EAAkB,IAAI,IAAI,EAC1BD,EAAS,IAAI,EAAK,EAClB4C,GAAoBrE,EAAG2B,EAAeC,CAAa,GAKvD,MAAM0C,GAAiBtE,EAAE,IAAI,SAAW,EAEpC,EADkBA,EAAE,SAAWA,EAAE,QAAUA,EAAE,UAC3BsE,IAClBwJ,GAAE,QAAQ,sBAAsB9N,EAAE,IAAKuE,GAAaL,CAAM,CAAC,CAEnE,CAAC,CAAC,EACF,MAAO,CACH,SAAU,CACNb,GAAY,EACZU,GAAW,EACXX,EAAW,CACf,CACpB,CACY,CACZ,CAAS,EACKgL,GAAUxL,GAAYlC,GAAK,SAAS,EAAG,CACzC,OAAQ,CAACe,EAAUqM,GAAE,IAAI,KAAMA,GAAE,IAAI,OAAO,EAC5C,SAAU,CAAC,CAACrJ,EAAWsJ,EAASC,EAAU,KAC/B,CACH,gBAAiBD,EACjB,gBAAiBtJ,EACjB,aAAcA,EAAY,OAAS,SACnC,GAAIuJ,GACJ,gBAAiB,OACjB,mBAAoB,aACpB,KAAM,UAC1B,GAEY,OAAS7K,GAAS,CACduB,GAAqBvB,CAAI,EACzB,MAAM8K,EAAY,SAAS,eAAeT,EAAI,QAAQ,KAAK,EAC3D,GAAI,CAACS,EACD,MAAO,CAAA,EACX,MAAMI,GAAkB,MAAM,KAAKJ,EAAU,iBAAiB,6BAA6B,CAAC,EAC5F,GAAI,CAACI,GAAgB,OACjB,MAAO,CAAA,EACX,MAAMC,GAAchL,GAAO,CAAC+J,CAAsB,EAAG,CAAC,CAACkB,EAAuB,IAAM,CAC5E,CAACA,IAA2BF,GAAgB,CAAC,IAAMlL,GAG9CoL,KAA4BpL,EAFjCA,EAAK,SAAW,EAMhBA,EAAK,SAAW,EAExB,CAAC,EACGkL,GAAgB,CAAC,IAAMlL,EACvBA,EAAK,SAAW,EAGhBA,EAAK,SAAW,GAEpB,MAAM2H,EAAQ3K,GAAiB6D,EAAqBb,EAAM,QAAUnD,IAAM,CACtE,MAAMyE,EAAYhD,EAAS,IAAG,EACxBmD,GAAY5E,GAAE,cACf5C,EAAcwH,EAAS,IAE5BC,GAAWD,EAAS,EACfH,GACDzE,GAAE,eAAc,EACxB,CAAC,EAAGgE,EAAqBb,EAAM,UAAYnD,IAAM,CAC7C,MAAM4E,EAAY5E,GAAE,cACpB,GAAK5C,EAAcwH,CAAS,IAExBvE,GAAe,SAASL,GAAE,GAAG,GAAKA,GAAE,MAAQM,GAAI,YAAY,CAC5DN,GAAE,eAAc,EAChB6E,GAAWD,CAAS,EACpB,MAAME,GAASF,EAAU,aAAa,eAAe,EACrD,GAAI,CAACE,GACD,OACJ,MAAMC,GAAO,SAAS,eAAeD,EAAM,EAC3C,GAAI,CAACC,GACD,OACJ,MAAMC,GAAYT,GAAaQ,EAAI,EACnC,GAAI,CAACC,GAAU,OACX,OACJjI,GAAkBiI,GAAU,CAAC,CAAC,CAClC,CACJ,CAAC,EAAGhB,EAAqBb,EAAM,eAAiBnD,IAAM,CAClD,MAAM4E,EAAY5E,GAAE,cACpB,GAAI,CAAC5C,EAAcwH,CAAS,EACxB,OACJ,MAAM4J,GAAcpB,EAAW,IAAG,EAC5B3I,GAAYhD,EAAS,IAAG,EAC1B+M,IAAe,CAAC/J,KAChBhD,EAAS,IAAI,EAAI,EACjB2L,EAAW,IAAIU,GAAE,IAAI,KAAK,IAAG,CAAE,EAC/BpM,EAAkB,IAAIkD,CAAS,EAEvC,CAAC,CAAC,EACF,MAAO,CACH,SAAU,CACNkG,EAAK,EACLwD,GAAW,CACf,CACpB,CACY,CACZ,CAAS,EACD,SAASzJ,GAAWD,EAAW,CAC3BnD,EAAS,OAAQuF,GAAS,CACtB,MAAMmE,GAAS,CAACnE,EAChB,OAAImE,IACAxJ,EAAc,IAAIrE,GAAiBsH,CAAS,CAAC,EAC7ChD,EAAc,IAAIlE,GAAqBkH,CAAS,CAAC,EACjDlD,EAAkB,IAAIkD,CAAS,EAC/BwI,EAAW,IAAIU,GAAE,IAAI,KAAK,IAAG,CAAE,GAG/BpM,EAAkB,IAAI,IAAI,EAEvByJ,EACX,CAAC,CACL,CACA,OAAA7H,GAAO,CAAC8J,CAAU,EAAG,CAAC,CAACoB,CAAW,IAAM,CACpC,GAAKvR,GAEL,IAAIuR,IAAgBV,GAAE,IAAI,KAAK,IAAG,EAAI,CAClC,GAAIrM,EAAS,IAAG,EACZ,OACJ,MAAMmD,EAAY,SAAS,eAAekJ,GAAE,IAAI,QAAQ,KAAK,EAC7D,GAAI,CAAClJ,EACD,OACJlD,EAAkB,IAAIkD,CAAS,EAC/B/I,GAAa+I,CAAS,EACtBnD,EAAS,IAAI,EAAI,EACjB,MACJ,CACA,GAAI+M,IAAgBV,GAAE,IAAI,KAAK,IAAG,EAAI,CAClC,GAAI,CAAC7Q,GACD,OACJ,GAAIwE,EAAS,MAAO,CAChB,MAAMmD,EAAY,SAAS,eAAekJ,GAAE,IAAI,QAAQ,KAAK,EAC7D,GAAI,CAAClJ,EACD,OACJlD,EAAkB,IAAI,IAAI,EAC1BD,EAAS,IAAI,EAAK,EAClB1F,GAAgB6I,CAAS,CAC7B,CACA,MACJ,EACJ,CAAC,EACDtB,GAAO,CAAC7B,CAAQ,EAAG,CAAC,CAACgD,CAAS,IAAM,CAChC,GAAI,CAACxH,GACD,OACJ,MAAM2H,EAAY,SAAS,eAAekJ,GAAE,IAAI,QAAQ,KAAK,EAC7D,GAAKlJ,EAEL,IAAI,CAACH,GAAa2I,EAAW,IAAG,IAAOU,GAAE,IAAI,KAAK,MAAO,CACrDpM,EAAkB,IAAI,IAAI,EAC1B0L,EAAW,IAAI,EAAE,EACjBrR,GAAgB6I,CAAS,EACzB,MACJ,CACIH,IACA4I,EAAuB,IAAIzI,CAAS,EACpC/I,GAAa+I,CAAS,GAE9B,CAAC,EACD4D,GAAY,IAAM,CACd,GAAI,CAACvL,GACD,OACJ,MAAM2H,EAAY,SAAS,eAAekJ,GAAE,IAAI,QAAQ,KAAK,EACzD1Q,EAAcwH,CAAS,GAAKnD,EAAS,IAAG,GACxCC,EAAkB,IAAIkD,CAAS,CAEvC,CAAC,EACM,CACH,IAAKkJ,GAAE,IACP,SAAU,CACN,GAAGA,GAAE,SACL,KAAA/I,GACA,QAAAqJ,EAChB,EACY,SAAUN,GAAE,SACZ,OAAQA,GAAE,OACV,QAAAvO,EACZ,CACI,EAOA,SAAS4O,EAA0BnO,EAAG,CAClC,GAAI,CAAC/C,GACD,OACJ+C,EAAE,eAAc,EAEhB,MAAMqL,EAAgBrL,EAAE,cAClBiE,EAASjE,EAAE,OACjB,GAAI,CAAC5C,EAAc6G,CAAM,GAAK,CAAC7G,EAAciO,CAAa,EACtD,OACJ,MAAMoD,EAAqBxK,EAAO,aAAa,mCAAmC,EAC5EyK,GAAyBzK,EAAO,QAAQ,eAAe,IAAMoH,EAC7DsD,GAAcrO,GAAI,WAClBsO,GAAY5O,EAAE,MAAQ2O,GAM5B,GALkB,CAACC,IAEFH,GAGbG,IAAaF,GACb,OAEJ,MAAMT,EAAY,SAAS,eAAeT,EAAI,QAAQ,KAAK,EAC3D,GAAI,CAACpQ,EAAc6Q,CAAS,EACxB,OACJ,MAAMY,GAAWC,EAAgBb,CAAS,EACpCc,GAAgB1D,EAAc,aAAa,iBAAiB,EAC5D2D,GAAYH,GAAS,UAAWT,GAAYA,EAAQ,KAAOW,EAAa,EAC9E,IAAItR,GACJ,OAAQuC,EAAE,IAAG,CACT,KAAKM,GAAI,YACL7C,GAAYuR,GAAYH,GAAS,OAAS,EAAIG,GAAY,EAAI,EAC9D,MACJ,KAAK1O,GAAI,WACL7C,GAAYuR,GAAY,EAAIA,GAAY,EAAIH,GAAS,OAAS,EAC9D,MACJ,KAAKvO,GAAI,KACL7C,GAAY,EACZ,MACJ,KAAK6C,GAAI,IACL7C,GAAYoR,GAAS,OAAS,EAC9B,MACJ,QACI,MAChB,CAEQ,MAAM/J,GADqB+J,GAASpR,EAAS,EACX,aAAa,eAAe,EAC9DqH,IAAUsI,EAAW,IAAItI,EAAM,CACnC,CACA,SAASgK,EAAgBG,EAAI,CACzB,MAAM/K,EAAS+K,EAAG,QAAQ,kBAAkB,EAC5C,OAAK7R,EAAc8G,CAAM,EAElB,MAAM,KAAKA,EAAO,iBAAiB,6BAA6B,CAAC,EAAE,OAAQ+K,GAAO7R,EAAc6R,CAAE,CAAC,EAD/F,CAAA,CAEf,CAKA,SAASC,EAAwBlP,EAAG,CAChCA,EAAE,eAAc,EAEhB,MAAMiC,EAAqB,SAAS,cAE9BoJ,EAAgBrL,EAAE,cACxB,GAAI,CAAC5C,EAAciO,CAAa,GAAK,CAACjO,EAAc6E,CAAkB,EAClE,OAEJ,MAAM0L,EAAemB,EAAgBzD,CAAa,EAClD,GAAI,CAACsC,EAAa,OACd,OACJ,MAAM5B,GAAiB4B,EAAa,OAAQhP,GACpC,EAAAA,EAAK,aAAa,eAAe,GAGjCA,EAAK,aAAa,UAAU,IAAM,OAIzC,EAEKqN,GAAeD,GAAe,QAAQ9J,CAAkB,EAE9D,IAAIxE,GACJ,MAAM0R,EAAQ/N,EAAK,IAAG,EACtB,OAAQpB,EAAE,IAAG,CACT,KAAKM,GAAI,YACL7C,GACIuO,GAAeD,GAAe,OAAS,EAAIC,GAAe,EAAImD,EAAQ,EAAInD,GAC9E,MACJ,KAAK1L,GAAI,WACL7C,GAAYuO,GAAe,EAAIA,GAAe,EAAImD,EAAQpD,GAAe,OAAS,EAAI,EACtF,MACJ,KAAKzL,GAAI,KACL7C,GAAY,EACZ,MACJ,KAAK6C,GAAI,IACL7C,GAAYsO,GAAe,OAAS,EACpC,MACJ,QACI,MAChB,CACQhP,GAAkBgP,GAAetO,EAAS,CAAC,CAC/C,CAIA+K,GAAY,IAAM,CACd,GAAI,CAACvL,GACD,OACJ,MAAMgR,EAAY,SAAS,eAAeT,EAAI,QAAQ,KAAK,EAC3D,GAAI,CAACS,EACD,OACJ,MAAMlK,EAAc5D,GAAiB6D,EAAqBiK,EAAW,UAAYjO,GAAM,CACnF,MAAMiE,EAASjE,EAAE,OACXkE,GAASlE,EAAE,cACb,CAAC5C,EAAc8G,EAAM,GAAK,CAAC9G,EAAc6G,CAAM,GAO/C,CADoBA,EAAO,aAAa,2BAA2B,GAGnEgJ,GAAiB,SAASjN,EAAE,GAAG,GAC/BkP,EAAwBlP,CAAC,CAEjC,CAAC,EAAG4K,GAAiB,SAAU,UAAY5K,GAAM,CACzCgB,EAAc,IAAG,GAAMhB,EAAE,MAAQM,GAAI,SACrC,OAAO,aAAagN,EAAW,KAAK,EACpCF,EAAW,IAAI,EAAE,EAEzB,CAAC,CAAC,EACF,MAAO,IAAM,CACTrJ,EAAW,CACf,CACJ,CAAC,EACD,MAAM0G,EAAS,CAAA,EACf,OAAAnH,GAAO,CAAC8J,EAAYvM,CAAa,EAAG,CAAC,CAAC2N,EAAatD,CAAc,IAAM,CAC/D,CAACjO,IAAa,CAACiO,IAQdsD,EAIKjB,IACN9C,EAAO,KAAK2E,IAAc,EAC1B7B,EAAgB,KALhB9C,EAAO,QAASK,GAAUA,EAAK,CAAE,EACjCyC,EAAgB,IAMxB,CAAC,EACD8B,GAAc,IAAM,CAChB5E,EAAO,QAASK,GAAUA,EAAK,CAAE,CACrC,CAAC,EACM,CACH,IAAA0C,EACA,SAAU,CACN,QAAAC,CACZ,EACQ,SAAU,CACN,WAAAI,CACZ,EACQ,QAAAtO,CACR,CACA,CC3gBA,MAAMzB,GAAW,CACb,YAAa,aACb,WAAY,EAChB,EACagK,GAAmBzB,GAAU,CACtC,MAAMrI,EAAe,CAAE,GAAGF,GAAU,GAAGuI,CAAK,EACtC9G,EAAUiD,GAAiBxE,CAAY,EACvC,CAAE,YAAAsR,EAAa,WAAAC,CAAU,EAAKhQ,EAapC,MAAO,CACH,SAAU,CACN,KAdKqD,GAAY,YAAa,CAClC,OAAQ,CAAC0M,EAAaC,CAAU,EAChC,SAAU,CAAC,CAACC,EAAcC,CAAW,KAE1B,CACH,KAAMA,EAAc,OAAS,YAC7B,mBAHoBD,IAAiB,WAAaA,EAAe,OAIjE,cAAeC,EACf,mBAAoBD,CACpC,EAEA,CAAK,CAIL,EACQ,QAAAjQ,CACR,CACA,ECvBO,SAASmQ,IAAc,CAuB1B,MAAO,CACH,KAvBS,OAwBT,SAvBa,eAwBb,iBAvBqB,kBAwBrB,mBAvBuB,oBAwBvB,gBAvBoB,iBAwBpB,WAvBe,aAwBf,MAvBU,CACV,QACA,qBACA,gBACA,UACA,QACA,OACA,QACA,cACA,aACA,kBACA,YACA,cACA,cACA,SACR,CASA,CACA,CACO,SAASC,IAAS,CACrB,KAAM,CAAE,KAAAC,CAAI,EAAKF,GAAW,EAC5B,OAAOG,GAAWD,CAAI,CAC1B,CA4FO,SAASE,GAAkBzJ,EAAO,CAKrC,MAAMrI,EAAe,CAAE,GAJE,CACrB,KAAM,SACN,MAAO,QACf,EACgD,GAAGqI,CAAK,EAC9C,CAAE,QAAS,CAAE,YAAAtF,CAAW,CAAE,EAAM4O,GAAM,EAC5BI,GAAsBhP,CAAW,EACzC/C,CAAY,CACxB,sHCvHQgS,EAAI,CAAA,EAAG,IAAM,aAAbA,EAAI,CAAA,EAAG,IAAM,QAAKC,GAAAD,CAAA,8FAAlBA,EAAI,CAAA,SAAJA,EAAI,CAAA,EAAG,IAAM,KAAK,oBAAlBA,EAAI,CAAA,EAAG,IAAM,qDAAbA,EAAI,CAAA,EAAG,IAAM,4aAGf,IAAAE,EAAA,CAAA,CAAA,KAAAF,EAAA,CAAA,GAAAA,KACAA,EAAW,CAAA,CAAA,gEAJTA,EAAI,CAAA,EAAG,IAAM,KAAK,kCAAlBA,EAAI,CAAA,EAAG,IAAM,OAAK,YAAA,EAAA,CAAA,KAAA,EAAA,CAAA,sDAAlBA,EAAI,CAAA,EAAG,IAAM,KAAK,EAAAG,EAAAC,CAAA,UADzBC,EAgBgBpM,EAAAkM,EAAAG,CAAA,wEAVHN,EAAQ,CAAA,CAAA,mBACNA,EAAQ,CAAA,CAAA,oBACPA,EAAQ,CAAA,CAAA,mBACTA,EAAQ,CAAA,CAAA,uBACJA,EAAQ,CAAA,CAAA,wBACPA,EAAQ,CAAA,CAAA,uBACTA,EAAQ,CAAA,CAAA,qHAXpBA,EAAI,CAAA,EAAG,IAAM,KAAK,EAAAG,EAAAC,EAAAG,GAAAL,EAAA,6BAGpBF,EAAO,CAAA,QACPA,EAAW,CAAA,sKARZA,EAAO,CAAA,EAAA,gbAdD,CAAA,KAAAQ,QAAa,EAAAC,EACb,CAAA,QAAAC,EAAU,EAAK,EAAAD,EACf,CAAA,SAAAhK,EAAW,EAAK,EAAAgK,EAChB,CAAA,GAAAxB,QAAW,EAAAwB,EAEpB,KAAA,CAAA,SAAQ,CAAI,KAAA9R,CAAI,EAChB,SAAAgS,CAAA,EACEhB,GAAM,sBACJ,MAAAiB,EAAWC,GAAgB,4EAWpB5B,EAAE6B,uPAVdC,EAAA,EAAEC,EAAUC,CAAK,sBACfC,EAAK,CAAQ,GAAAP,EAAS,MAAM,EAAM,GAAAQ,GAAc1K,CAAQ,oBACxD,OAAO,OAAOuK,EAASE,CAAK,gNCCNE,EAAA,CAAApB,KAAsCA,EAAW,CAAA,CAAA,sJAAzEK,EAAgFpM,EAAAoN,EAAAf,CAAA,mEAAxDN,EAAU,CAAA,QAA4BA,EAAW,CAAA,uXAHrEA,EAAO,CAAA,EAAA,4ZAXD,CAAA,QAAAU,EAAU,EAAK,EAAAD,EACf,CAAA,GAAAxB,QAAW,EAAAwB,EAEpB,KAAA,CAAA,SAAQ,CAAI,UAAA5I,CAAS,EACrB,SAAA8I,CAAA,EACEhB,GAAM,4BACJuB,EAAQP,EAAS,WAAW,4CAQjB1B,EAAE6B,wLAPlBC,EAAA,EAAEC,EAAUM,CAAU,gBACpB,OAAO,OAAON,EAASE,CAAK,8dCuFN,IAAAE,EAAA,CAAApB,KAAgCA,EAAW,EAAA,CAAA,iLAAnEK,EAEKpM,EAAAoN,EAAAf,CAAA,0EAF8EN,EAAQ,EAAA,CAAA,sHAAnEA,EAAO,CAAA,aAAyBA,EAAW,EAAA,qKAP9D,IAAAoB,EAAA,CAAApB,KACAA,EAAW,EAAA,CAAA,iLAJhBK,EAQKpM,EAAAoN,EAAAf,CAAA,0EAHUN,EAAQ,EAAA,CAAA,0HAFlBA,EAAO,CAAA,aACPA,EAAW,EAAA,qEAFIA,EAAmB,CAAA,CAAA,6IATlC,IAAAoB,EAAA,CAAApB,KACAA,EAAW,EAAA,CAAA,iLAJhBK,EAQKpM,EAAAoN,EAAAf,CAAA,0EAHUN,EAAQ,EAAA,CAAA,0HAFlBA,EAAO,CAAA,aACPA,EAAW,EAAA,iDAFEA,EAAkB,CAAA,CAAA,gKAT/B,IAAAoB,EAAA,CAAApB,KACAA,EAAW,EAAA,CAAA,iLALhBK,EASKpM,EAAAoN,EAAAf,CAAA,0EAHUN,EAAQ,EAAA,CAAA,0HAFlBA,EAAO,CAAA,aACPA,EAAW,EAAA,6DAHEA,EAAkB,CAAA,CAAA,oEAChBA,EAAmB,CAAA,CAAA,6IAVlC,IAAAoB,EAAA,CAAApB,KACAA,EAAW,EAAA,CAAA,iLAJhBK,EAQKpM,EAAAoN,EAAAf,CAAA,0EAHUN,EAAQ,EAAA,CAAA,0HAFlBA,EAAO,CAAA,aACPA,EAAW,EAAA,qDAFQA,EAAgB,CAAA,EAAA,EAAA,sDAAhBA,EAAgB,CAAA,EAAA,EAAA,yaALpC,OAAAA,MAAWA,EAAK,CAAA,EAAA,EAEXA,MAAcA,EAAK,CAAA,EAAA,EAUnBA,EAAY,CAAA,GAAIA,EAAa,CAAA,GAAIA,EAAK,CAAA,EAAA,EAWtCA,MAAgBA,EAAK,CAAA,EAAA,EAUrBA,MAAiBA,EAAK,CAAA,EAAA,EAUtBA,EAAK,CAAA,EAAA,ssBA7FJ,CAAA,WAAAuB,QAAmB,EAAAd,EACnB,CAAA,iBAAAe,QAAyB,EAAAf,EACzB,CAAA,aAAAgB,QAAqB,EAAAhB,EACrB,CAAA,mBAAAiB,QAA2B,EAAAjB,EAC3B,CAAA,cAAAkB,QAAsB,EAAAlB,EACtB,CAAA,oBAAAmB,QAA4B,EAAAnB,EAC5B,CAAA,QAAAC,EAAU,EAAK,EAAAD,EACf,CAAA,GAAAoB,QAAW,EAAApB,EACX,CAAA,KAAAzG,EAAO,QAAQ,EAAAyG,EACf,CAAA,MAAAqB,EAAQ,QAAQ,EAAArB,EAChB,CAAA,WAAAsB,EAAa,CAAC,EAAAtB,EACd,CAAA,YAAAuB,EAAc,CAAC,EAAAvB,EACf,CAAA,iBAAAwB,EAAmB,CAAC,EAAAxB,EACpB,CAAA,gBAAAyB,EAAkB,EAAI,EAAAzB,EACtB,CAAA,kBAAA0B,SAA0B,EAAA1B,EAC1B,CAAA,UAAA2B,GAAY,EAAK,EAAA3B,EACjB,CAAA,YAAA4B,GAAc,EAAK,EAAA5B,EACnB,CAAA,SAAA6B,EAAW,UAAU,EAAA7B,EACrB,CAAA,QAAA8B,EAAU,EAAK,EAAA9B,EACf,CAAA,GAAAxB,SAAW,EAAAwB,QAEpB,SAAQ,CAAI,KAAA1L,EAAI,EAChB,OAAM,CAAI,KAAAvI,EAAI,EACd,IAAAgR,GACA,SAAAmD,EAAA,EACEhB,GAAM,6CACJ,MAAAiB,GAAWC,GAAgB,EAC3BK,EAAQP,GAAS,SAAS,4CA2BnB1B,GAAE6B,uDAUF7B,GAAE6B,uDAWF7B,GAAE6B,sDAUF7B,GAAE6B,uDASE7B,GAAE6B,46BAlEZe,GACLrE,GAAI,KAAK,IAAIqE,CAAE,0BAEhBd,EAAA,EAAEC,EAAUwB,CAAK,qBACf,OAAO,OAAOxB,EAASE,CAAK,0BACxBtU,GACLkT,GAAiB,CACf,KAAA9F,EACA,MAAA8H,EACA,WAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,kBAAAC,GACA,UAAAC,GACA,YAAAC,GACA,SAAAC,EACA,QAAAC,gcC3CJ,SAASE,IAAiB,CAmBtB,MAAO,CACH,KAnBS,UAoBT,UAnBc,OAoBd,SAnBa,eAoBb,MAnBU,CACV,QACA,qBACA,gBACA,UACA,QACA,OACA,QACA,cACA,aACA,YACA,cACA,cACA,SACR,CAMA,CACA,CACO,SAASC,GAAOrM,EAAO,CAC1B,KAAM,CAAE,KAAAuJ,EAAM,MAAA+C,EAAO,UAAAC,CAAS,EAAKH,GAAc,EAC3CI,EAAkBC,GAAelD,EAAM,CAAC,MAAM,CAAC,EAC/Ce,EAAWmC,GAAeF,EAAWD,CAAK,EAC1ClF,EAAU,CAAE,GAAGN,GAAc4F,GAAgB1M,CAAK,CAAC,EAAG,SAAAsK,EAAU,gBAAAkC,CAAe,EACrF,OAAAG,GAAWpD,EAAMnC,CAAO,EACjB,CACH,GAAGA,EACH,aAAcwF,GAAiBxF,EAAQ,OAAO,CACtD,CACA,CACO,SAASkC,IAAS,CACrB,KAAM,CAAE,KAAAC,CAAI,EAAK6C,GAAc,EAC/B,OAAO5C,GAAWD,CAAI,CAC1B,CACO,SAASsD,GAAW7M,EAAO,CAC9B,KAAM,CAAE,UAAAuM,CAAS,EAAKH,GAAc,EAC9B,CAAE,SAAU,CAAE,WAAA5E,CAAU,EAAI,SAAA8C,CAAQ,EAAMhB,GAAM,EAChD5K,EAAO,CAAE,GAAG8I,EAAW,CAAE,GAAGkF,GAAgB1M,CAAK,EAAG,aAAc,EAAK,CAAE,EAAG,SAAAsK,CAAQ,EAC1F,OAAAqC,GAAWJ,EAAW7N,CAAI,EACnB,CACH,GAAGA,EACH,aAAckO,GAAiBlO,EAAK,OAAO,CACnD,CACA,CACO,SAASoO,IAAa,CACzB,KAAM,CAAE,UAAAP,CAAS,EAAKH,GAAc,EACpC,OAAO5C,GAAW+C,CAAS,CAC/B,8DC1BuB5C,EAAS,CAAA,2DAHVA,EAAS,CAAA,wEAEN,IAAAoB,EAAA,CAAApB,KAAgCA,EAAW,CAAA,CAAA,iLAAnEK,EAEKpM,EAAAoN,EAAAf,CAAA,8JAFmBN,EAAO,CAAA,QAAyBA,EAAW,CAAA,waAH/DA,EAAO,CAAA,EAAA,0cA1BD,CAAA,KAAA5O,EAAO,EAAI,EAAAqP,EACX,CAAA,cAAAzP,EAAgB,EAAI,EAAAyP,EACpB,CAAA,QAAAC,EAAU,EAAK,EAAAD,EACf,CAAA,GAAAoB,QAAW,EAAApB,EACX,CAAA,cAAA5P,QAAsB,EAAA4P,EACtB,CAAA,GAAAxB,QAAW,EAAAwB,EAEpB,KAAA,CAAA,SAAQ,CAAI,QAAAhD,CAAO,EACnB,aAAA2F,EACA,IAAA5F,EACA,gBAAAqF,CAAA,EACEH,GAAM,CAAG,KAAAtR,EAAM,cAAAJ,EAAe,cAAAH,CAAa,CAAA,6BACzCwS,EAAW1W,GAAO,CAAE6Q,EAAI,OAAO,EAAA,CAAA,CAAKE,CAAU,KAAA,CAClD,QAASA,CAAC,EAAA,4BAENwD,EAAQ2B,EAAgB,MAAM,4CAcnB5D,EAAE6B,oUAbZe,GACLrE,EAAI,QAAQ,IAAIqE,CAAE,kBAEjBuB,EAAa,OAAQhS,CAAI,kBACzBgS,EAAa,gBAAiBpS,CAAa,mBAC3CoS,EAAa,gBAAiBvS,CAAa,mBAC7CkQ,EAAA,EAAEC,EAAUsC,CAAQ,gBAClB,OAAO,OAAOtC,EAASE,CAAK,6MC4BhBlB,EAAS,CAAA,CAAA,8TApDb,CAAA,oBAAA/O,QAA4B,EAAAwP,EAC5B,CAAA,cAAAzP,QAAsB,EAAAyP,EACtB,CAAA,OAAAvP,QAAe,EAAAuP,EACf,CAAA,KAAAjU,QAAa,EAAAiU,EACb,CAAA,aAAA8C,QAAqB,EAAA9C,EACrB,CAAA,KAAArP,QAAa,EAAAqP,EACb,CAAA,IAAA+C,QAAY,EAAA/C,EACZ,CAAA,UAAAtP,QAAkB,EAAAsP,EAClB,CAAA,WAAApP,QAAmB,EAAAoP,EACnB,CAAA,sBAAAnP,QAA8B,EAAAmP,EAC9B,CAAA,iBAAAlP,QAAyB,EAAAkP,EACzB,CAAA,eAAAjP,QAAuB,EAAAiP,QAEhC,OAAM,CAAI,KAAMgD,CAAS,EACzB,aAAAL,EACA,IAAA5F,GACE0F,GAAU,CACZ,oBAAAjS,EACA,cAAAD,EACA,OAAAE,EACA,KAAAE,EACA,IAAAoS,EACA,UAAArS,EACA,WAAAE,EACA,sBAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,eAAiB,KAAAkS,MACXlX,IAASkX,IACXH,GAAA,MAAAA,EAAeG,GACf3C,EAAA,EAAAvU,EAAOkX,CAAI,GAENA,KAGLL,EAAW1W,GAAO,CAAE6Q,EAAI,KAAMA,EAAI,OAAO,IAAKO,EAASC,CAAU,KAAA,CACrE,KAAMD,EACN,QAASC,CAAC,EAAA,4kBAETxR,IAAI,QAAeiX,EAAU,IAAIjX,CAAI,gBACrC4W,EAAa,sBAAuBnS,CAAmB,iBACvDmS,EAAa,gBAAiBpS,CAAa,iBAC3CoS,EAAa,SAAUlS,CAAM,kBAC7BkS,EAAa,OAAQhS,CAAI,kBACzBgS,EAAa,MAAOI,CAAG,mBACvBJ,EAAa,aAAc/R,CAAU,mBACrC+R,EAAa,wBAAyB9R,CAAqB,kBAC3D8R,EAAa,YAAajS,CAAS,mBACnCiS,EAAa,mBAAoB7R,CAAgB,mBACjD6R,EAAa,iBAAkB5R,CAAc,obC1B1C,IAAAmS,EAAA,CAAA3D,qBAEAA,EAAW,CAAA,CAAA,8LAJhBK,EAUQpM,EAAA2P,EAAAtD,CAAA,+FALKN,EAAQ,CAAA,CAAA,mBACNA,EAAQ,CAAA,CAAA,wBACHA,EAAQ,CAAA,CAAA,qGALvBA,EAAO,CAAA,wBAEPA,EAAW,CAAA,oaAPZA,EAAO,CAAA,EAAA,iaAjBD,CAAA,QAAAU,EAAU,EAAK,EAAAD,EACf,CAAA,GAAAoB,QAAW,EAAApB,EACX,CAAA,GAAAxB,QAAW,EAAAwB,EAEpB,KAAA,CAAA,UAAY,QAAArC,CAAO,EACnB,IAAAZ,EACA,SAAAmD,GACEwC,GAAU,sBACR,MAAAvC,EAAWC,GAAgB,EAC3BK,EAAQP,EAAS,SAAS,4CAYnB1B,EAAE6B,+MAXRe,GACLrE,EAAI,QAAQ,IAAIqE,CAAE,kBAEnBd,EAAA,EAAEC,EAAU6C,CAAQ,gBAClB,OAAO,OAAO7C,EAASE,CAAK,uYCE7Bb,EAEKpM,EAAAoN,EAAAf,CAAA,oEAF+EwD,IAAAA,EAAAC,GAAA1C,EAAA2C,GAAA,CAAA,MAAO,GAAI,EAAA,EAAA,kDAAXF,IAAAA,EAAAC,GAAA1C,EAAA2C,GAAA,CAAA,MAAO,GAAI,EAAA,EAAA,yGADpFhE,EAAK,CAAA,mJAALA,EAAK,CAAA,kIAZZiE,GAAWC,GAAA,GAET,MAAAC,GAAOhW,GAAS,EAAK,EAEX,SAAAiW,IAAA,YACH,QAASC,GAAA,CAClBF,GAAK,IAAI,EAAI,EACbF,GAAUI,8DAOY,OAAQC,CAAO,IAAA,CAAQL,GAAQK,CAAO,EAAAC,GAAAJ,GAAIK,EAAQ,GAAKA,CAAA,CAAA,+LCVgBxE,EAAO,CAAA,4FAEjGA,EAAK,CAAA,CAAA,qGAALA,EAAK,CAAA,CAAA,oHAFVK,EAIQpM,EAAA2P,EAAAtD,CAAA,EAHNmE,GAEKb,EAAAvC,CAAA,kFADFrB,EAAK,CAAA,CAAA,8GAFqFA,EAAO,CAAA,u+CAP7F,CAAA,MAAA0E,CAAA,EAAAjE,EAEPjU,6gBCGkOwT,EAAO,CAAA,kQAC9NA,EAAI,CAAA,EAAA,kBAAA,kBADnBK,EAGQpM,EAAA2P,EAAAtD,CAAA,EAFNmE,GAAqCb,EAAAvC,CAAA,kIAAxBrB,EAAI,CAAA,EAAA,oYADmNA,EAAO,CAAA,2eALlO,CAAA,KAAA2E,CAAA,EAAAlE,GACA,SAAAhK,EAAW,EAAA,EAAAgK,kPCWxB,eAAsBmE,GAAcC,EAAqBC,EAAgB,CACvE,MAAMjD,EAAKkD,GAAc,YAAa,SAAS,EACzCC,EAAM,MAAM,MAAM,aAAc,CAAE,OAAQ,MAAO,KAAM,KAAK,UAAU,CAAE,GAAGH,EAAM,MAAAC,CAAA,CAAO,EAAG,EAEjG,GAAIE,EAAI,GAAI,CACV,MAAMC,EAA2C,MAAMD,EAAI,KAAA,EAC3D,OAAAD,GAAc,UAAUE,EAAO,IAAI,KAAM,UAAWpD,CAAE,EAC/CoD,CACT,CACA,KAAM,CAAE,MAAAC,CAAA,EAA6B,MAAMF,EAAI,KAAA,EAC/C,MAAAD,GAAc,UAAUG,CAAK,KAAM,UAAWrD,CAAE,EAC1C,IAAI,MAAMqD,CAAK,CACvB,CAEA,eAAsBC,GAAgBC,EAAkB,CACtD,MAAMvD,EAAKkD,GAAc,UAAW,SAAS,EACvCC,EAAM,MAAM,MAAM,GAAI,CAAE,OAAQ,MAAO,KAAM,KAAK,UAAUI,CAAO,CAAA,CAAG,EAC5E,GAAI,CAACJ,EAAI,GAAI,CACX,MAAME,EAAQ,MAAMF,EAAI,KAAA,EACxB,MAAAD,GAAc,UAAUG,CAAK,KAAM,UAAWrD,CAAE,EAC1C,IAAI,MAAMqD,CAAK,CACvB,CACAH,GAAc,OAAQ,UAAWlD,CAAE,CACrC,CCnCA,eAAuBwD,GAAUf,EAAiC,CAChE,MAAMgB,EAAK,MAAMC,GAAM,CAAE,KAAM,GAAM,EAC/BC,EAAgBF,EAAG,SAAS,0BAA0B,EACtDzD,EAAKkD,GAAc,aAAc,SAAS,EAChD,IAAIC,EAAM,GACV,GAAI,CACF,gBAAiBvI,KAAK+I,EAAcF,EAAG,KAAKhB,CAAO,CAA2B,EAC5EU,GAAOvI,EACP,MAAMuI,EACND,GAAc,aAAaC,EAAI,MAAM,GAAI,UAAWnD,CAAE,EAExD,OAAAkD,GAAc,WAAY,UAAWlD,CAAE,EAChCmD,CACT,OACOhV,EAAG,CACR,MAAA+U,GAAe/U,EAAY,QAAS,QAAS6R,CAAE,EACzC7R,CACR,CACF,CClBA,eAAsByV,GAAanB,EAAiC,CAClE,MAAMgB,EAAK,MAAMC,GAAM,CAAE,KAAM,GAAM,EAC/BC,EAAgBF,EAAG,SAAS,4BAA4B,EACxDzD,EAAKkD,GAAc,YAAa,SAAS,EAC/C,IAAIC,EAAM,GACV,GAAI,CACF,gBAAiBvI,KAAK+I,EAAcF,EAAG,KAAKhB,CAAO,CAA2B,EAC5EU,GAAOvI,EACPsI,GAAcC,EAAK,UAAWnD,CAAE,EAElC,OAAAkD,GAAcC,EAAK,UAAWnD,CAAE,EACzBmD,CACT,OACOhV,EAAG,CACR,MAAA+U,GAAe/U,EAAY,QAAS,QAAS6R,CAAE,EACzC7R,CACR,CACF,sCCyE2E,MAAI,eAAJ,MAAI,wEAEZ,eAAa,eAAb,eAAa,wEACjB,cAAY,eAAZ,cAAY,wEAEE,aAAW,eAAX,aAAW,4MALtBgQ,EAAO,CAAA,CAAA,ydAKPA,EAAS,CAAA,CAAA,s/BAImC,QAAM,eAAN,QAAM,wEACnE,SAAO,eAAP,SAAO,wEAEwD,MAAI,eAAJ,MAAI,wEACb,MAAI,eAAJ,MAAI,kJAJRA,EAAS,CAAA,gKAClEA,EAAK,CAAA,CAAA,kIAEsDA,EAAS,CAAA,gHAClBA,EAAS,CAAA,0bAJFA,EAAS,CAAA,0IAGPA,EAAS,CAAA,iFAClBA,EAAS,CAAA,mXAI1B,IAAE,eAAF,IAAE,wEACG,cAAY,eAAZ,cAAY,wEAC3B,MAAI,eAAJ,MAAI,wEAEO,SAAO,eAAP,SAAO,wEACsB,MAAI,eAAJ,MAAI,wEACc,MAAI,eAAJ,MAAI,wEACqD,MAAI,eAAJ,MAAI,wEACtF,cAAY,eAAZ,cAAY,wEACb,gBAAc,eAAd,gBAAc,wEACH,cAAY,eAAZ,cAAY,wEACd,iBAAe,eAAf,iBAAe,wEACZ,mBAAiB,eAAjB,mBAAiB,kzHAIrC,MAAI,eAAJ,MAAI,wEACzB,QAAM,eAAN,QAAM,wEACpB,MAAI,eAAJ,MAAI,gIAFoBA,EAAS,CAAA,0DAAvCA,EAAiB,CAAA,CAAA,uGACjBA,EAAkB,CAAA,CAAA,oGACrB0F,EAAO,qPAF0B1F,EAAS,CAAA,ilDAzCrFK,EAKQpM,EAAA2P,EAAAtD,CAAA,ylCApEO,eAAAqF,GAAA,CACP,MAAAC,EAAA,MAAaC,GAAM,kBAAkB,EACvCD,UACFE,EAAA,CAAA,GAAgBA,EAAA,CAAWF,CAAI,EAAG,EAAA,EAAAE,CAAA,QAClCC,EAAeH,EAAAG,CAAA,GAIJ,eAAAC,EAAUC,EAAS,GAAA,CAC1B,MAAAL,EAAA,MAAaC,GAAM,eAAe,EACpC,GAAAD,EAAA,OACI3R,GAASgS,KAAYL,EAAK,QAAQ,MAAO,GAAG,CAAA,kBAAqBA,EAAK,QAAQ,MAAO,GAAG,CAAA,YAC9FE,EAAA,CAAA,GAAgBA,EAAA,CAAW7R,EAAM,EAAG,EAAA,EAAA6R,CAAA,QACpCC,EAAe9R,GAAA8R,CAAA,GAIJ,eAAAG,GAAA,CACN,KAAA,CAAAxB,EAAQ,mBAAoByB,EAAS,WAAW,EAAA,MAAU,QAAQ,IAAA,CAAKN,GAAM,KAAM,kBAAkB,EAAGA,GAAM,KAAM,WAAW,IAChIT,GAAA,CAA2B,QAASU,EAAU,MAAApB,EAAO,OAAAyB,CAAA,EACrD,MAAAC,IAAA,SAAA,OACI,KAAAR,GAAM,MAAAd,CAAA,EAAA,MAAgBF,GAAcQ,GAASiB,CAAe,EACpEvB,GAASwB,GAAe,IAAIxB,CAAK,EAC3B,MAAAyB,GAAA,cAAmBX,EAAI,EAAA,MAC7BY,EAAA,CAAa,MAAA9B,EAAO,OAAAyB,EAAQ,IAAK,GAAA,QACjCM,EAAA,CAAA,GAAgBA,EAAA,CAAWb,EAAI,EAAGY,CAAA,EAAAC,CAAA,sBAIvBC,EAAOC,EAAc,GAAOC,EAAa,GAAA,OAChDlC,GAAQiC,EAAoB,MAAAd,GAAM,KAAMW,EAAS,KAAK,GAAKA,EAAS,MAAQA,EAAS,MACrFL,GAASS,EAAmB,MAAAf,GAAM,KAAMW,EAAS,MAAM,GAAKA,EAAS,OAASA,EAAS,aACvFJ,GAAajB,GAAA,CAAkB,MAAAT,GAAO,OAAAyB,GAAQ,QAASL,EAAU,MAAOO,WACxED,GAAaS,IAAA,EAGN,eAAAC,GAAA,OACP9B,EAAA,MAAYoB,GAAaX,GAAaK,CAAQ,CAAA,EAC9CpB,EAAA,MAAcmB,GAAM,QAASb,CAAG,GAAKA,QACrCoB,GAAajB,GAAA,CAAkB,MAAAT,EAAO,OAAQ8B,EAAS,OAAQ,QAASV,EAAU,MAAOO,CAAoB,CAAA,EAAA,KAAKQ,EAAa,CAAA,EAGxH,eAAAE,GAAA,CACT,GAAAjB,EAAS,WAAW,EAAA,OACff,GAAc,kBAAmB,SAAS,EAEnDR,GAAAD,GAAAwB,EAAS,WAAW,EAAI,GAAAA,CAAA,QACxBC,EAAe,YAAAA,CAAA,EAEE,gBAAAiB,KAAW3B,GAAUS,CAAQ,EAC5CvB,GAAAD,GAAAwB,EAAS,WAAW,EAAIkB,EAAAlB,CAAA,EAIb,eAAAmB,GAAA,CACb1C,GAAAD,GAAAwB,EAAA,CAAA,GAAgBA,EAAA,GAAA,MAAmB1B,IAAA,EAAA0B,CAAA,EAQb,MAAAoB,EAAA,IAAA,QAAQ,KAAI,EAUYC,EAAA,IAAAnB,EAAU,EAAI,QACdA,EAAS,EAMKoB,EAAA,IAAAhB,GAAaM,GAAM,EAG5BW,EAAA,IAAAjB,GAAaM,EAAO,GAAO,EAAI,CAAA,EACxCY,EAAA,IAAAlB,GAAaM,EAAO,GAAM,EAAK,CAAA,EAIba,EAAA,IAAAhB,GAAK,GAAG,EACbiB,GAAA,IAAAjB,GAAK,aAAa,EAC9BkB,GAAA,IAAAlB,GAAK,UAAU,EAEfmB,GAAA,IAAA,KAAK,qBAAqB,EACnBC,EAAA,IAAA,KAAK,2CAA2C,EAC1CC,EAAA,IAAA,KAAK,uDAAuD,EACpDC,GAAA,IAAA,KAAK,wGAAwG,EAC3HC,GAAA,IAAA,KAAK,oCAAoC,EACzCC,GAAA,IAAA,KAAK,mCAAmC,EAC1BC,GAAA,IAAA,KAAK,gCAAgC,EAC/BC,GAAA,IAAA,KAAK,wBAAwB,EAC7BC,GAAA,IAAA,KAAK,2BAA2B,8CAtGxGnH,EAAA,EAAGyF,EAAWC,EAAS0B,EAAM,OAAO,IAAI,CAAA,sBA4DxCpH,EAAA,EAAGqH,EAAY/B,GAAmB8B,EAAM,MAAM,KAAO,kCAAmC3B,GAAA,YAAAA,EAAU,IAAA,+NC0BvExG,EAAQ,CAAA,IAAA,mBAARA,EAAQ,CAAA,yQADnCK,EAEKpM,EAAAoN,EAAAf,CAAA,+DADsBN,EAAQ,CAAA,kFAD6BqI,EAAAC,GAAAjH,EAAAkH,GAAA,CAAA,MAAO,IAAK,OAAQC,GAAQ,oEAAeC,EAAAC,GAAArH,EAAAsH,GAAA,CAAA,EAAC,GAAM,SAAU,IAAG,kJAD5H3I,EAAW,CAAA,GAAA4I,GAAA5I,CAAA,6oBAJ2CA,EAAW,CAAA,CAAA,+HAUqCA,EAAW,CAAA,CAAA,+BAVtHK,EAEKpM,EAAA4U,EAAAvI,CAAA,4CAQLD,EAEKpM,EAAA6U,EAAAxI,CAAA,sJAZsDN,EAAW,CAAA,CAAA,EAIjEA,EAAW,CAAA,sQAM2FA,EAAW,CAAA,CAAA,uPAxGhH,IAAA+I,GACAC,SACEC,GAAQ9a,GAAA,CAA4B,EAAG,CAAC,CAAA,EAExC+a,GAAY,EAAI,EAEb,SAAAC,IAAA,CACPF,GAAM,OAAA,CAAA,CAASG,EAAOC,CAAQ,KAC5BD,IACQ,CAAAA,EAAOC,CAAQ,IAIlB,SAAAC,IAAA,CACPL,GAAM,OAAA,CAAA,CAASG,EAAOC,CAAQ,KAC5BA,IACID,GAASC,GACXN,GAAS,IAAI,GAAK,KAAM,EAAA,CAAA,EAChB,CAAA,EAAG,CAAC,GAEN,CAAAK,EAAOC,CAAQ,IAIlB,SAAAE,IAAA,CACPN,GAAM,OAAA,CAAA,CAASG,EAAOC,CAAQ,KAC5BD,IACIA,IAAUC,GACZN,GAAS,IAAI,CAAC,EACN,CAAA,EAAG,CAAC,GAEN,CAAAK,EAAOC,CAAQ,mBAILjD,GAAgBoD,EAAA,CACpCL,GAAA,YAEQnE,EAAA,MAAYwE,EAClB,OAAAF,GAAA,EACOtE,CAEF,OAAA,EAAA,CACL,MAAAuE,GAAA,EACM,oJAgBVE,GAAeN,EAAO,EACtBO,GAAcJ,EAAM,EAEpBI,GAAA,IAAA,CACEC,GAAA,MAAAA,EAAiB,UAGnBC,GAAA,IAAA,CAEEZ,GAAA,SAGE,IAAA7E,gBA4BuB2B,EAAQxO,uIA1BnC,CACS,KAAA,CAAA8R,EAAOC,CAAQ,EAAIQ,EAEtBT,IAAU,GAAKC,IAAa,GAC9BL,IAAA,MAAAA,KACAD,GAAS,IAAI,GAAI,MACjB5E,EAAO,EAAA,GAEAiF,IAAUC,MACjBlF,EAAO,EAAA,OAGPA,EAAO,EAAA,EACP4E,GAAS,KAAKG,GAAYG,IAAaH,GAAYE,IAAU,KAAM,EAAA","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}