{"version":3,"file":"vexip-ui.cjs","sources":["../common/utils/src/common.ts","../common/utils/src/color.ts","../common/utils/src/counter.ts","../common/utils/src/data.ts","../common/utils/src/number.ts","../common/utils/src/date.ts","../common/utils/src/deep-clone.ts","../common/utils/src/destroy-object.ts","../common/utils/src/dom-event.ts","../common/utils/src/dom.ts","../common/utils/src/event-emitter.ts","../common/utils/src/log.ts","../common/utils/src/performance.ts","../common/utils/src/support.ts","../common/utils/src/transform.ts","../common/utils/src/word-case.ts","../common/config/src/hover-delay.ts","../common/config/src/locale/zh-CN.ts","../common/config/src/locale/index.ts","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/Icon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/arrow-left-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/calendar.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-left.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-up.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-left.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/chevrons-right.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-alert.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-check.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-help.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/circle-x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/clock.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/cloud-upload.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/ellipsis.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/eye-off.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/eye.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-archive.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-code.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-image.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-music.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-text.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file-video.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/file.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-horizontal.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/flip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/fullscreen.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/funnel.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/grip-vertical.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/image.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-decrease.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/indent-increase.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/info.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/loader-circle.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/log-out.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/maximize.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/message-circle-question.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/minimize.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/minus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/moon.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/pause.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/picture-in-picture.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/play.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/plus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/refresh-cw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/repeat-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-ccw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/rotate-cw.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/siren.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-back.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/skip-forward.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/square-minus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/square-plus.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/sun.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/trash-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/upload.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/user-round.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-1.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-2.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/volume-x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/x.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/zoom-in.js","../node_modules/.pnpm/lucide-vue-next@0.511.0_vue@3.5.15_typescript@5.8.3_/node_modules/lucide-vue-next/dist/esm/icons/zoom-out.js","../common/config/src/icons.ts","../common/bem-helper/src/index.ts","../common/config/src/namespace.ts","../common/config/src/id.ts","../common/config/src/props.ts","../common/config/src/z-index.ts","../components/icon/props.ts","../components/icon/icon.tsx","../components/renderer/props.ts","../components/renderer/renderer.ts","../components/spin/props.ts","../components/spin/spin.vue","../directives/loading/index.ts","../common/hooks/src/listener.ts","../common/hooks/src/clickoutside.ts","../common/hooks/src/display.ts","../common/hooks/src/shared/utils.ts","../common/hooks/src/full-screen.ts","../common/hooks/src/hover.ts","../common/hooks/src/intersection.ts","../common/hooks/src/manual-ref.ts","../common/hooks/src/modifier.ts","../common/hooks/src/mounted.ts","../common/hooks/src/moving.ts","../common/hooks/src/pointer.ts","../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/.pnpm/@floating-ui+core@1.7.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/.pnpm/@floating-ui+utils@0.2.9/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/.pnpm/@floating-ui+dom@1.7.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/freeze.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/element.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/global.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/process.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../common/hooks/src/resize.ts","../common/hooks/src/rtl.ts","../common/hooks/src/popper.ts","../common/hooks/src/theme.ts","../common/hooks/src/timer-record.ts","../common/hooks/src/virtual.ts","../directives/resize/index.ts","../directives/index.ts","../components/affix/props.ts","../components/affix/helpers.ts","../components/affix/affix.vue","../components/collapse/props.ts","../components/collapse/collapse-transition.ts","../components/alert/props.ts","../components/alert/symbol.ts","../components/alert/alert.vue","../components/anchor/props.ts","../components/anchor/symbol.ts","../components/anchor/anchor-link.vue","../components/anchor/helper.ts","../components/anchor/anchor.vue","../components/row/props.ts","../components/row/symbol.ts","../components/row/row.ts","../components/form/props.ts","../components/form/symbol.ts","../components/form/form.vue","../components/form/helper.ts","../components/form/validator.ts","../components/input/props.ts","../components/input/input.tsx","../components/scrollbar/props.ts","../components/scrollbar/symbol.ts","../components/scrollbar/hooks.ts","../components/scrollbar/scrollbar.vue","../components/resize-observer/props.ts","../components/resize-observer/resize-observer.ts","../components/native-scroll/props.ts","../components/native-scroll/helper.ts","../components/native-scroll/hooks.ts","../components/native-scroll/native-scroll.tsx","../components/option/props.ts","../components/option/option.vue","../components/overflow/props.ts","../components/overflow/overflow.tsx","../components/portal/portal.vue","../components/popper/props.ts","../components/popper/popper.vue","../components/tag/props.ts","../components/tag/tag.tsx","../components/tooltip/props.ts","../components/tooltip/tooltip.tsx","../components/virtual-list/props.ts","../components/virtual-list/virtual-list.tsx","../components/select/props.ts","../components/select/symbol.ts","../components/select/select.vue","../components/auto-complete/props.ts","../components/auto-complete/auto-complete.vue","../components/avatar/props.ts","../components/avatar/symbol.ts","../components/avatar/avatar.vue","../components/avatar/avatar-group.vue","../components/badge/props.ts","../components/badge/symbol.ts","../components/badge/badge.vue","../components/breadcrumb/props.ts","../components/breadcrumb/symbol.ts","../components/breadcrumb/breadcrumb-item.vue","../components/breadcrumb/breadcrumb.vue","../components/bubble/props.ts","../components/bubble/symbol.ts","../components/bubble/bubble.vue","../components/button/props.ts","../components/button/symbol.ts","../components/button/button.tsx","../components/button/button-group.vue","../components/row/column.ts","../components/number-input/props.ts","../components/number-input/number-input.vue","../components/calendar/calendar-cell.vue","../components/calendar/props.ts","../components/calendar/calendar-panel.vue","../components/calendar/calendar.vue","../components/captcha/props.ts","../components/captcha/captcha-slider.vue","../components/captcha/hollow-paths.ts","../components/captcha/captcha.tsx","../components/card/props.ts","../components/card/card.vue","../components/carousel/props.ts","../components/carousel/symbol.ts","../components/carousel/carousel.vue","../components/carousel/carousel-item.vue","../components/checkbox/props.ts","../components/checkbox/symbol.ts","../components/checkbox/checkbox.vue","../components/cascader/cascader-panel.vue","../components/cascader/props.ts","../components/cascader/cascader.vue","../components/grid/props.ts","../components/grid/helper.ts","../components/grid/symbol.ts","../components/grid/cell.ts","../components/checkbox/checkbox-group.vue","../components/collapse/symbol.ts","../components/collapse/collapse.vue","../components/collapse/collapse-panel.vue","../components/color-picker/color-palette.vue","../components/color-picker/color-hue.vue","../components/color-picker/color-alpha.vue","../components/color-picker/props.ts","../components/color-picker/symbol.ts","../components/color-picker/color-picker.vue","../components/config-provider/props.ts","../components/config-provider/config-provider.tsx","../components/masker/props.ts","../components/masker/masker.vue","../components/modal/props.ts","../components/modal/modal.vue","../components/modal/index.ts","../components/confirm/props.ts","../components/confirm/confirm.vue","../components/confirm/index.ts","../components/dropdown/symbol.ts","../components/dropdown/dropdown-drop.ts","../components/dropdown/props.ts","../components/dropdown/hooks.ts","../components/dropdown/dropdown.vue","../components/dropdown/dropdown-list.vue","../components/dropdown/dropdown-item.vue","../components/contextmenu/render.tsx","../components/contextmenu/contextmenu.vue","../components/contextmenu/index.ts","../components/date-picker/symbol.ts","../components/date-picker/helper.ts","../components/date-picker/date-control.vue","../components/scroll/props.ts","../components/scroll/hooks.ts","../components/scroll/symbol.ts","../components/scroll/scroll.vue","../components/wheel/symbol.ts","../components/wheel/wheel-item.vue","../components/wheel/props.ts","../components/wheel/wheel.vue","../components/date-picker/time-wheel.vue","../components/date-picker/date-panel.vue","../components/date-picker/props.ts","../components/date-picker/date-picker.vue","../components/divider/props.ts","../components/divider/divider.vue","../components/drawer/props.ts","../components/drawer/symbol.ts","../components/drawer/drawer.vue","../components/ellipsis/props.ts","../components/ellipsis/ellipsis.vue","../components/form/form-item.vue","../components/form/form-reset.vue","../components/form/form-submit.vue","../components/full-screen/props.ts","../components/full-screen/full-screen.vue","../components/grid/grid.ts","../components/highlight/props.ts","../components/highlight/highlight.vue","../components/viewer/props.ts","../components/viewer/symbol.ts","../components/viewer/viewer.vue","../components/image/props.ts","../components/image/image-viewer.vue","../components/skeleton/props.ts","../components/skeleton/symbol.ts","../components/skeleton/skeleton.tsx","../components/image/symbol.ts","../components/image/image.vue","../components/image/image-group.vue","../components/layout/props.ts","../components/layout/symbol.ts","../components/layout/helper.ts","../components/layout/layout-main.tsx","../components/menu/props.ts","../components/menu/symbol.ts","../components/menu/menu-item.tsx","../components/menu/menu-group.tsx","../components/menu/menu-rest.tsx","../components/menu/menu.tsx","../components/switch/props.ts","../components/switch/switch.vue","../components/layout/layout-header.tsx","../components/linker/props.ts","../components/linker/linker.vue","../components/layout/layout-footer.tsx","../components/layout/layout-aside.tsx","../components/layout/layout.tsx","../components/loading/loading.vue","../components/loading/index.ts","../components/popup/symbol.ts","../components/popup/popup-item.vue","../components/popup/popup.vue","../components/message/symbol.ts","../components/message/message.vue","../components/message/index.ts","../components/notice/symbol.ts","../components/notice/notice.vue","../components/notice/index.ts","../components/option/option-group.vue","../components/pagination/props.ts","../components/pagination/pagination.tsx","../components/progress/props.ts","../components/progress/symbol.ts","../components/progress/progress.vue","../components/radio/props.ts","../components/radio/symbol.ts","../components/radio/radio.vue","../components/radio/radio-group.vue","../components/result/props.ts","../components/result/symbol.ts","../components/result/result.vue","../components/skeleton/skeleton-group.ts","../components/slider/slider-trigger.vue","../components/slider/props.ts","../components/slider/slider.vue","../components/space/props.ts","../components/space/space.tsx","../components/split/props.ts","../components/split/split.vue","../components/tab-nav/props.ts","../components/tab-nav/symbol.ts","../components/tab-nav/tab-nav-item.vue","../components/tab-nav/tab-nav.vue","../components/tabs/props.ts","../components/tabs/symbol.ts","../components/tabs/tab-panel.vue","../components/table/props.ts","../components/table/symbol.ts","../components/table/table-column.ts","../components/table/table-column-group.tsx","../components/table/table-summary.ts","../components/table/table-icon.vue","../components/table/table-head-cell.vue","../components/table/table-row.vue","../components/table/table-head.vue","../components/table/table-cell.vue","../components/table/table-body.vue","../components/table/table-foot-cell.vue","../components/table/table-foot.vue","../components/tree/hooks.ts","../components/table/store.ts","../components/table/table.vue","../components/table/helper.ts","../components/tabs/tabs.vue","../components/textarea/props.ts","../components/textarea/textarea.vue","../components/time-ago/helper.ts","../components/time-ago/props.ts","../components/time-ago/time-ago.vue","../components/date-picker/time-control.vue","../components/date-picker/time-picker.vue","../components/timeline/props.ts","../components/timeline/symbol.ts","../components/timeline/timeline.vue","../components/timeline/timeline-item.vue","../components/toast/props.ts","../components/toast/symbol.ts","../components/toast/toast.vue","../components/toast/index.ts","../components/tour/props.ts","../components/tour/symbol.ts","../components/tour/tour.vue","../components/tour/tour-step.ts","../components/transfer/transfer-panel.tsx","../components/transfer/props.ts","../components/transfer/transfer.tsx","../components/tree/symbol.ts","../components/tree/tree-node.vue","../components/tree/props.ts","../components/tree/tree.vue","../components/upload/props.ts","../components/upload/file-icon.ts","../components/upload/symbol.ts","../components/upload/upload-file.vue","../components/upload/upload-list.vue","../components/upload/request.ts","../components/upload/upload.tsx","../components/video/props.ts","../components/video/symbol.ts","../components/video/video-control.vue","../components/video/helper.ts","../components/video/video-progress.vue","../components/video/video-timer.vue","../components/video/video-volume.vue","../components/video/video.tsx","../components/typography/props.ts","../components/typography/title.tsx","../components/typography/text.tsx","../components/typography/blockquote.tsx","../components/typography/ol.tsx","../components/typography/ul.tsx","../components/typography/h.tsx","../components/typography/p.tsx","../components/typography/strong.tsx","../components/create.ts","../components/version.ts","../components/index.ts"],"sourcesContent":["/** 当前环境是否为客户端 */\nexport const isClient = typeof window !== 'undefined'\n/** 当前环境是否为 IOS */\nexport const isIOS =\n  /* #__PURE__ */ isClient &&\n  window?.navigator?.userAgent &&\n  /iP(ad|hone|od)/.test(window.navigator.userAgent)\n\nconst toString = Object.prototype.toString\nconst hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * 判断一个值是否为指定的类型\n *\n * @param value 需判断的值\n * @param type 指定的类型，注意大小写\n *\n * @returns 类型是否匹配\n */\nexport function is(value: unknown, type: string) {\n  return toString.call(value) === `[object ${type}]`\n}\n\n/**\n * 判断一个对象是否包含指定的键值\n *\n * @param value 需判断的对象\n * @param key 指定的键值\n *\n * @returns 是否包含键值\n */\nexport function has(value: Record<string, any>, key: string | symbol): key is keyof typeof value {\n  return hasOwnProperty.call(value, key)\n}\n\n/**\n * 判断一个值是否已定义\n *\n * @param value 需判断的值\n *\n * @returns 是否已定义\n */\nexport function isDefined<T = unknown>(\n  value: T | undefined | null,\n): value is Exclude<T, undefined | null> {\n  return value !== undefined && value !== null\n}\n\n/**\n * 判断一个值是否未被定义\n *\n * @param value 需判断的值\n *\n * @returns 是否未定义\n */\nexport function isNull(value: unknown): value is null | undefined {\n  return value === undefined || value === null\n}\n\n/**\n * 判断一个值是否为数字\n *\n * @param value 需判断的值\n *\n * @returns 是否为数字\n */\nexport function isNumber(value: unknown): value is number {\n  return typeof value === 'number'\n}\n\n/**\n * 判断一个值是否为 `NaN`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `NaN`\n */\nexport function isNaN(value: unknown): value is number {\n  return Number.isNaN(value)\n}\n\n/**\n * 判断一个值是否为字符串\n *\n * @param value 需判断的值\n *\n * @returns 是否为字符串\n */\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string'\n}\n\n/**\n * 判断一个值是否为布尔值\n *\n * @param value 需判断的值\n *\n * @returns 是否为布尔值\n */\nexport function isBoolean(value: unknown): value is boolean {\n  return typeof value === 'boolean'\n}\n\n/**\n * 判断一个值是否为 `true`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `true`\n */\nexport function isTrue(value: unknown): value is true {\n  return value === true\n}\n\n/**\n * 判断一个值是否为 `false`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `false`\n */\nexport function isFalse(value: unknown): value is false {\n  return value === false\n}\n\n/**\n * 判断一个值是否为 `Symbol`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Symbol`\n */\nexport function isSymbol(value: unknown): value is symbol {\n  return typeof value === 'symbol'\n}\n\n/**\n * 判断一个值是否为 `BigInt`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `BigInt`\n */\nexport function isBigInt(value: unknown): value is bigint {\n  return typeof value === 'bigint'\n}\n\n/**\n * 判断一个值是否为数组\n *\n * @param value 需判断的值\n *\n * @returns 是否为数组\n */\nexport function isArray<T = any>(value: unknown): value is T[] {\n  return Array.isArray(value)\n}\n\n/**\n * 判断一个值是否为对象\n *\n * 注意，`null` 与原生的特殊对象不被包含\n *\n * @param value 需判断的值\n *\n * @returns 是否为对象\n */\nexport function isObject<T extends Record<any, any> = Record<any, any>>(\n  value: unknown,\n): value is T {\n  return is(value, 'Object')\n}\n\n/**\n * 判断一个值是否为 `Promise`\n *\n * 如果一个对象包含 `then` 和 `catch` 方法，则被认为是一个 `Promise`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Promise`\n */\nexport function isPromise<T = any>(value: unknown): value is Promise<T> {\n  return (\n    !!value &&\n    typeof (value as any).then === 'function' &&\n    typeof (value as any).catch === 'function'\n  )\n}\n\n/**\n * 判断一个值是否为函数\n *\n * @param value 需判断的值\n *\n * @returns 是否为函数\n */\nexport function isFunction(value: unknown): value is (...any: any[]) => any {\n  return typeof value === 'function'\n}\n\n/**\n * 判断一个值是否为 `Set`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Set`\n */\nexport function isSet<T = any>(value: unknown): value is Set<T> {\n  return is(value, 'Set')\n}\n\n/**\n * 判断一个值是否为 `Map`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Map`\n */\nexport function isMap<K = any, V = any>(value: unknown): value is Map<K, V> {\n  return is(value, 'Map')\n}\n\n/**\n * 判断一个值是否为 `Date`\n *\n * @param value 需判断的值\n *\n * @returns 是否为 `Date`\n */\nexport function isDate(value: unknown): value is Date {\n  return is(value, 'Date')\n}\n\n/**\n * 判断一个值是否为正则\n *\n * @param value 需判断的值\n *\n * @returns 是否为正则\n */\nexport function isRegExp(value: unknown): value is RegExp {\n  return is(value, 'RegExp')\n}\n\n/**\n * 判断一个值是否为空\n *\n * - 如果这是一个数组或字符串，则 `length` 为 `0` 时为空\n * - 如果这是一个 `Set` 或 `Map`，则 `size` 为 `0` 时为空\n * - 如果这是一个对象，则无任何键值时为空\n * - 如果这是一个数字，则为 `NaN` 时为空\n * - 其余情况下，未定义时为空\n *\n * @param value 需判断的值\n *\n * @returns 是否为空\n */\nexport function isEmpty(value: unknown) {\n  if (Array.isArray(value) || typeof value === 'string') {\n    return value.length === 0\n  }\n\n  if (value instanceof Map || value instanceof Set) {\n    return value.size === 0\n  }\n\n  if (isObject(value)) {\n    return Object.keys(value).length === 0\n  }\n\n  if (typeof value === 'number') {\n    return isNaN(value)\n  }\n\n  return isNull(value)\n}\n\n/**\n * 判断一个值是否为 `Element`\n *\n * @param value 需判断的值\n * @param ssr 是否考虑服务端渲染\n *\n * @returns 是否为 `Element`\n */\nexport function isElement<T extends Element = Element>(value: unknown, ssr = false): value is T {\n  if (!ssr && !isClient) return false\n\n  return !!(value && 'nodeType' in (value as any))\n}\n\n/**\n * 判断一个值能否被迭代\n *\n * @param value 需判断的值\n *\n * @returns 能否被迭代\n */\nexport function isIterable(value: unknown) {\n  return isDefined(value) && typeof (value as any)[Symbol.iterator] === 'function'\n}\n\n/**\n * 一个空的占位函数\n */\nexport function noop(...args: any[]): any\nexport function noop() {}\n\n/**\n * 一个返回 `true` 的占位函数\n *\n * @returns `true`\n */\nexport function toTrue(...args: any[]): true\nexport function toTrue() {\n  return true\n}\n\n/**\n * 一个返回 `false` 的占位函数\n *\n * @returns `false`\n */\nexport function toFalse(...args: any[]): false\nexport function toFalse() {\n  return false\n}\n\n/**\n * 生成一个值递进的数组\n *\n * @param size 大小\n * @param start 开始的数值，默认为 1\n * @param step 跨度，默认为 1\n *\n * @returns 生成的数组\n */\nexport function range(size: number, start = 1, step = 1) {\n  const array: number[] = []\n\n  for (let i = 0; i < size; ++i) {\n    array.push(start + i * step)\n  }\n\n  return array\n}\n\n/**\n * 获取变量的类型\n *\n * @param value 任意变量\n *\n * @returns 变量的类型\n */\nexport function getType(value: unknown) {\n  return Object.prototype.toString.call(value).slice(8, -1)\n}\n\n/**\n * 根据长度生成一串随机的字符串\n *\n * @param length 字符串的长度\n *\n * @returns 生成的字符串\n */\nexport function randomString(length = 16) {\n  const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'\n  const maxPos = chars.length\n\n  let string = ''\n\n  while (length--) {\n    string += chars.charAt(Math.floor(Math.random() * maxPos))\n  }\n\n  return string\n}\n\n/**\n * 根据一系列判断条件，执行第一个为 `true` 的条件所对应的回调函数\n *\n * @param conditions 判断条件及回调函数\n * @param options 额外的选项\n *\n * @returns 是否匹配了任一条件\n */\nexport async function decide(\n  conditions: [boolean | (() => boolean), () => void | Promise<void>][],\n  options: {\n    /**\n     * 当匹配任意一个条件时，会在该条件对应的回调函数执行前执行\n     */\n    beforeMatchAny?: () => void | Promise<void>,\n    /**\n     * 当匹配任意一个条件时，会在该条件对应的回调函数执行完后执行\n     */\n    afterMatchAny?: () => void | Promise<void>,\n  } = {},\n) {\n  if (conditions.length) {\n    for (const [condition, callback] of conditions) {\n      if (typeof condition === 'function' ? condition() : condition) {\n        if (typeof options.beforeMatchAny === 'function') {\n          await options.beforeMatchAny()\n        }\n\n        await callback()\n\n        if (typeof options.afterMatchAny === 'function') {\n          await options.afterMatchAny()\n        }\n\n        return true\n      }\n    }\n  }\n\n  return false\n}\n","import { isDefined } from './common'\n\ninterface RGB extends Record<any, any> {\n  r: number,\n  g: number,\n  b: number,\n  a?: number,\n}\n\nexport interface RGBColor extends RGB {\n  a?: 1,\n  format?: 'name' | 'rgb',\n}\n\nexport interface RGBAColor extends RGB {\n  a: number,\n  format?: 'name' | 'rgba',\n}\n\nexport interface HEX3Color extends RGB {\n  a?: 1,\n  format?: 'name' | 'hex3',\n}\nexport interface HEX4Color extends RGB {\n  a: number,\n  format?: 'name' | 'hex4',\n}\nexport interface HEX6Color extends RGB {\n  a?: 1,\n  format?: 'name' | 'hex6',\n}\nexport interface HEX8Color extends RGB {\n  a: number,\n  format?: 'name' | 'hex8',\n}\n\ninterface HSL extends Record<any, any> {\n  h: number,\n  s: number,\n  l: number,\n  a?: number,\n}\n\nexport interface HSLColor extends HSL {\n  a?: 1,\n  format?: 'name' | 'hsl',\n}\n\nexport interface HSLAColor extends HSL {\n  a: number,\n  format?: 'name' | 'hsla',\n}\n\ninterface HSV extends Record<any, any> {\n  h: number,\n  s: number,\n  v: number,\n  a?: number,\n}\n\nexport interface HSVColor extends HSV {\n  a?: 1,\n  format?: 'name' | 'hsv',\n}\n\nexport interface HSVAColor extends HSV {\n  a: number,\n  format?: 'name' | 'hsva',\n}\n\nexport type Color =\n  | string\n  | RGBColor\n  | RGBAColor\n  | HSLColor\n  | HSLAColor\n  | HSVColor\n  | HSVAColor\n  | HEX3Color\n  | HEX4Color\n  | HEX6Color\n  | HEX8Color\n\nexport type ObjectColor = Exclude<Color, string>\n\nexport interface ColorMeta {\n  rgb: RGBColor,\n  hsl: HSLColor,\n  hsv: HSVColor,\n  hex: string,\n  alpha: number,\n  rgba: RGBAColor,\n  hsla: HSLAColor,\n  hsva: HSVAColor,\n  hex8: string,\n  gray: number,\n  origin: Color,\n}\n\nexport type ColorType = 'hex' | 'rgb' | 'hsv' | 'hsl'\n\nconst INTEGER_REG = '[-\\\\+]?\\\\d+%?'\nconst NUMBER_REG = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?'\n\nconst NUMBER_UNIT = `(?:${NUMBER_REG})|(?:${INTEGER_REG})`\n\nconst COLOR_REG_3 = `[\\\\s|\\\\(]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})\\\\s*\\\\)?`\nconst COLOR_REG_4 = `[\\\\s|\\\\(]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})[,|\\\\s]+(${NUMBER_UNIT})\\\\s*\\\\)?`\n\n// const UNIT_REG = new RegExp(NUMBER_UNIT)\n\n// const FORMAT_REG = /^((((?:rgb)|(?:hsl)|(?:hsv))a?)|hex[3468]?|name)$/\n\nexport const RGB_REG = new RegExp(`rgb${COLOR_REG_3}`)\nexport const RGBA_REG = new RegExp(`rgba${COLOR_REG_4}`)\nexport const HSL_REG = new RegExp(`hsl${COLOR_REG_4}`)\nexport const HSLA_REG = new RegExp(`hsla${COLOR_REG_4}`)\nexport const HSV_REG = new RegExp(`hsv${COLOR_REG_4}`)\nexport const HSVA_REG = new RegExp(`hsva${COLOR_REG_4}`)\n\nexport const HEX_REG_3 = /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/\nexport const HEX_REG_4 = /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/\nexport const HEX_REG_6 = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\nexport const HEX_REG_8 = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n\nexport const NAMED_COLORS = Object.freeze({\n  aliceblue: 'f0f8ff',\n  antiquewhite: 'faebd7',\n  aqua: '0ff',\n  aquamarine: '7fffd4',\n  azure: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '000',\n  blanchedalmond: 'ffebcd',\n  blue: '00f',\n  blueviolet: '8a2be2',\n  brown: 'a52a2a',\n  burlywood: 'deb887',\n  burntsienna: 'ea7e5d',\n  cadetblue: '5f9ea0',\n  chartreuse: '7fff00',\n  chocolate: 'd2691e',\n  coral: 'ff7f50',\n  cornflowerblue: '6495ed',\n  cornsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: '0ff',\n  darkblue: '00008b',\n  darkcyan: '008b8b',\n  darkgoldenrod: 'b8860b',\n  darkgray: 'a9a9a9',\n  darkgreen: '006400',\n  darkgrey: 'a9a9a9',\n  darkkhaki: 'bdb76b',\n  darkmagenta: '8b008b',\n  darkolivegreen: '556b2f',\n  darkorange: 'ff8c00',\n  darkorchid: '9932cc',\n  darkred: '8b0000',\n  darksalmon: 'e9967a',\n  darkseagreen: '8fbc8f',\n  darkslateblue: '483d8b',\n  darkslategray: '2f4f4f',\n  darkslategrey: '2f4f4f',\n  darkturquoise: '00ced1',\n  darkviolet: '9400d3',\n  deeppink: 'ff1493',\n  deepskyblue: '00bfff',\n  dimgray: '696969',\n  dimgrey: '696969',\n  dodgerblue: '1e90ff',\n  firebrick: 'b22222',\n  floralwhite: 'fffaf0',\n  forestgreen: '228b22',\n  fuchsia: 'f0f',\n  gainsboro: 'dcdcdc',\n  ghostwhite: 'f8f8ff',\n  gold: 'ffd700',\n  goldenrod: 'daa520',\n  gray: '808080',\n  green: '008000',\n  greenyellow: 'adff2f',\n  grey: '808080',\n  honeydew: 'f0fff0',\n  hotpink: 'ff69b4',\n  indianred: 'cd5c5c',\n  indigo: '4b0082',\n  ivory: 'fffff0',\n  khaki: 'f0e68c',\n  lavender: 'e6e6fa',\n  lavenderblush: 'fff0f5',\n  lawngreen: '7cfc00',\n  lemonchiffon: 'fffacd',\n  lightblue: 'add8e6',\n  lightcoral: 'f08080',\n  lightcyan: 'e0ffff',\n  lightgoldenrodyellow: 'fafad2',\n  lightgray: 'd3d3d3',\n  lightgreen: '90ee90',\n  lightgrey: 'd3d3d3',\n  lightpink: 'ffb6c1',\n  lightsalmon: 'ffa07a',\n  lightseagreen: '20b2aa',\n  lightskyblue: '87cefa',\n  lightslategray: '789',\n  lightslategrey: '789',\n  lightsteelblue: 'b0c4de',\n  lightyellow: 'ffffe0',\n  lime: '0f0',\n  limegreen: '32cd32',\n  linen: 'faf0e6',\n  magenta: 'f0f',\n  maroon: '800000',\n  mediumaquamarine: '66cdaa',\n  mediumblue: '0000cd',\n  mediumorchid: 'ba55d3',\n  mediumpurple: '9370db',\n  mediumseagreen: '3cb371',\n  mediumslateblue: '7b68ee',\n  mediumspringgreen: '00fa9a',\n  mediumturquoise: '48d1cc',\n  mediumvioletred: 'c71585',\n  midnightblue: '191970',\n  mintcream: 'f5fffa',\n  mistyrose: 'ffe4e1',\n  moccasin: 'ffe4b5',\n  navajowhite: 'ffdead',\n  navy: '000080',\n  oldlace: 'fdf5e6',\n  olive: '808000',\n  olivedrab: '6b8e23',\n  orange: 'ffa500',\n  orangered: 'ff4500',\n  orchid: 'da70d6',\n  palegoldenrod: 'eee8aa',\n  palegreen: '98fb98',\n  paleturquoise: 'afeeee',\n  palevioletred: 'db7093',\n  papayawhip: 'ffefd5',\n  peachpuff: 'ffdab9',\n  peru: 'cd853f',\n  pink: 'ffc0cb',\n  plum: 'dda0dd',\n  powderblue: 'b0e0e6',\n  purple: '800080',\n  rebeccapurple: '663399',\n  red: 'f00',\n  rosybrown: 'bc8f8f',\n  royalblue: '4169e1',\n  saddlebrown: '8b4513',\n  salmon: 'fa8072',\n  sandybrown: 'f4a460',\n  seagreen: '2e8b57',\n  seashell: 'fff5ee',\n  sienna: 'a0522d',\n  silver: 'c0c0c0',\n  skyblue: '87ceeb',\n  slateblue: '6a5acd',\n  slategray: '708090',\n  slategrey: '708090',\n  snow: 'fffafa',\n  springgreen: '00ff7f',\n  steelblue: '4682b4',\n  tan: 'd2b48c',\n  teal: '008080',\n  thistle: 'd8bfd8',\n  tomato: 'ff6347',\n  turquoise: '40e0d0',\n  violet: 'ee82ee',\n  wheat: 'f5deb3',\n  white: 'fff',\n  whitesmoke: 'f5f5f5',\n  yellow: 'ff0',\n  yellowgreen: '9acd32',\n})\n\nexport type ColorName = keyof typeof NAMED_COLORS\n\nexport const COLOR_NAMES = Object.freeze(new Set(Object.keys(NAMED_COLORS))) as Readonly<\n  Set<ColorName>\n>\n\n/**\n * 判断给定的字符串是否为一个合法颜色值\n *\n * @param value 原始字符串\n *\n * @returns 是否为合法颜色\n */\nexport function isColor(value: string): boolean {\n  value = String(value).trim().toLowerCase()\n\n  if (!value) {\n    return false\n  }\n\n  if (value === 'transparent' || NAMED_COLORS[value as ColorName]) {\n    return true\n  }\n\n  return (\n    value === 'transparent' ||\n    COLOR_NAMES.has(value as ColorName) ||\n    RGB_REG.test(value) ||\n    RGBA_REG.test(value) ||\n    HSL_REG.test(value) ||\n    HSLA_REG.test(value) ||\n    HSV_REG.test(value) ||\n    HSVA_REG.test(value) ||\n    HEX_REG_3.test(value) ||\n    HEX_REG_4.test(value) ||\n    HEX_REG_6.test(value) ||\n    HEX_REG_8.test(value)\n  )\n}\n\n/**\n * 将给定的字符串转化为 {@link ObjectColor}，无法转换时返回 null\n *\n * @param color 原始颜色字符串\n *\n * @returns 解析后的颜色对象\n */\nexport function parseStringColor(color: string): ObjectColor | null {\n  color = color.toString().trim().toLowerCase()\n\n  if (color === 'transparent') {\n    return { r: 0, g: 0, b: 0, a: 0, format: 'name', toString: toRgbString }\n  }\n\n  let named = false\n\n  if (NAMED_COLORS[color as ColorName]) {\n    color = NAMED_COLORS[color as ColorName]\n    named = true\n  }\n\n  let match\n\n  if ((match = RGB_REG.exec(color))) {\n    const { r, g, b } = normalizeRgb(match[1], match[2], match[3])\n\n    return {\n      r: r * 255,\n      g: g * 255,\n      b: b * 255,\n      format: 'rgb',\n      toString: toRgbString,\n    }\n  }\n\n  if ((match = RGBA_REG.exec(color))) {\n    const { r, g, b } = normalizeRgb(match[1], match[2], match[3])\n\n    return {\n      r: r * 255,\n      g: g * 255,\n      b: b * 255,\n      a: normalizeAlpha(match[4]),\n      format: 'rgba',\n      toString: toRgbString,\n    }\n  }\n\n  if ((match = HSL_REG.exec(color))) {\n    const { h, s, l } = normalizeHsl(match[0], match[1], match[3])\n\n    return { h: h * 360, s, l, format: 'hsl', toString: toHslString }\n  }\n\n  if ((match = HSLA_REG.exec(color))) {\n    const { h, s, l } = normalizeHsl(match[0], match[1], match[3])\n\n    return {\n      h: h * 360,\n      s,\n      l,\n      a: normalizeAlpha(match[4]),\n      format: 'hsla',\n      toString: toHslString,\n    }\n  }\n\n  if ((match = HSV_REG.exec(color))) {\n    const { h, s, v } = normalizeHsv(match[0], match[1], match[3])\n\n    return { h: h * 360, s, v, format: 'hsv', toString: toHsvString }\n  }\n\n  if ((match = HSVA_REG.exec(color))) {\n    const { h, s, v } = normalizeHsv(match[0], match[1], match[3])\n\n    return {\n      h: h * 360,\n      s,\n      v,\n      a: normalizeAlpha(match[4]),\n      format: 'hsva',\n      toString: toHsvString,\n    }\n  }\n\n  if ((match = HEX_REG_3.exec(color))) {\n    return {\n      r: parseInt(`${match[1]}${match[1]}`, 16),\n      g: parseInt(`${match[2]}${match[2]}`, 16),\n      b: parseInt(`${match[3]}${match[3]}`, 16),\n      format: named ? 'name' : 'hex3',\n      toString: toRgbString,\n    }\n  }\n\n  if ((match = HEX_REG_4.exec(color))) {\n    return {\n      r: parseInt(`${match[1]}${match[1]}`, 16),\n      g: parseInt(`${match[2]}${match[2]}`, 16),\n      b: parseInt(`${match[3]}${match[3]}`, 16),\n      a: convertHexToDecimal(`${match[4]}${match[4]}`),\n      format: named ? 'name' : 'hex4',\n      toString: toRgbString,\n    }\n  }\n\n  if ((match = HEX_REG_6.exec(color))) {\n    return {\n      r: parseInt(match[1], 16),\n      g: parseInt(match[2], 16),\n      b: parseInt(match[3], 16),\n      format: named ? 'name' : 'hex6',\n      toString: toRgbString,\n    }\n  }\n\n  if ((match = HEX_REG_8.exec(color))) {\n    return {\n      r: parseInt(match[1], 16),\n      g: parseInt(match[2], 16),\n      b: parseInt(match[3], 16),\n      a: convertHexToDecimal(match[4]),\n      format: named ? 'name' : 'hex8',\n      toString: toRgbString,\n    }\n  }\n\n  return null\n}\n\n/**\n * 将给定的 {@link Color} 解析为 {@link ColorMeta}\n *\n * @param color 原始颜色值\n *\n * @returns 解析后的颜色元数据\n */\nexport function parseColor(color: Color): ColorMeta {\n  const { a, ...rgb } = parseColorToRgba(color)\n\n  delete rgb.format\n\n  const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b)\n  const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b)\n  const hex = rgbToHex(rgb.r, rgb.g, rgb.b)\n\n  const hex8 = rgbaToHex(rgb.r, rgb.g, rgb.b, a)\n\n  return {\n    rgb: rgb as RGBColor,\n    hsl,\n    hsv,\n    hex,\n    alpha: a,\n    rgba: { ...rgb, a, format: 'rgba' },\n    hsla: { ...hsl, a, format: 'hsla' },\n    hsva: { ...hsv, a, format: 'hsva' },\n    hex8,\n    gray: rgbToGrayScale(rgb),\n    origin: color,\n  }\n}\n\n/**\n * 将给定的 {@link Color} 解析为 {@link RGBAColor}\n *\n * @param originColor 原始颜色值\n *\n * @returns 解析后的 RGB 颜色对象\n */\nexport function parseColorToRgba(originColor: Color): RGBAColor {\n  let rgb: RGBColor = { r: 0, g: 0, b: 0 }\n  let a = 1\n  let color: Color | null\n\n  if (typeof originColor === 'string') {\n    color = parseStringColor(originColor)\n  } else {\n    color = originColor\n  }\n\n  if (color !== null && typeof color === 'object') {\n    if ('l' in color) {\n      rgb = hslToRgb(color.h, color.s, color.l)\n    } else if ('v' in color) {\n      rgb = hsvToRgb(color.h, color.s, color.v)\n    }\n\n    if ('a' in color) {\n      a = normalizeAlpha(color.a ?? 1)\n\n      if (Number.isNaN(a)) {\n        a = 1\n      }\n    }\n\n    rgb = color as RGBColor\n  }\n\n  return { ...rgb, a, format: 'rgba', toString: toRgbString }\n}\n\n/**\n * 将原始的 h、s、l 值标准化为 0 ~ 1 的值\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param l 0 ~ 1，0% ~ 100%\n *\n * @returns 标准化后的 HSL 对象\n */\nexport function normalizeHsl(h: number | string, s: number | string, l: number | string) {\n  return {\n    h: boundRange(h, 0, 360) / 360,\n    s: boundRange(isPercentage(s) ? parsePercentage(s) : s, 0, 1),\n    l: boundRange(isPercentage(l) ? parsePercentage(l) : l, 0, 1),\n  }\n}\n\n/**\n * 将原始的 r、g、b 值标准化为 0 ~ 1 的值\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n *\n * @returns 标准化后 RGB 对象\n */\nexport function normalizeRgb(r: number | string, g: number | string, b: number | string) {\n  return {\n    r: boundRange(r, 0, 255) / 255,\n    g: boundRange(g, 0, 255) / 255,\n    b: boundRange(b, 0, 255) / 255,\n  }\n}\n\n/**\n * 将原始的 h、s、v 值标准化为 0 ~ 1 的值\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param v 0 ~ 1，0% ~ 100%\n *\n * @returns 标准化的 HSV 对象\n */\nexport function normalizeHsv(h: number | string, s: number | string, v: number | string) {\n  return {\n    h: boundRange(h, 0, 360) / 360,\n    s: boundRange(isPercentage(s) ? parsePercentage(s) : s, 0, 1),\n    v: boundRange(isPercentage(v) ? parsePercentage(v) : v, 0, 1),\n  }\n}\n\n/**\n * 将原始透明度值标准化为 0 ~ 1 的值\n *\n * @param a 0 ~ 1，0% ~ 100%\n *\n * @returns 标准化后的透明度\n */\nexport function normalizeAlpha(a: number | string) {\n  return boundRange(isPercentage(a) ? parsePercentage(a) : a, 0, 1)\n}\n\n/**\n * 将 HSL 颜色转换为 RGB 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param l 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 RGB 颜色\n */\nexport function hslToRgb(h: number | string, s: number | string, l: number | string): RGBColor {\n  let r, g, b\n  ;({ h, s, l } = normalizeHsl(h, s, l))\n\n  if (s === 0) {\n    r = g = b = l\n  } else {\n    const q = l < 0.5 ? 1 * (1 + s) : l + s - l * s\n    const p = 2 * l - q\n\n    r = hueToRgb(p, q, h + 1 / 3)\n    g = hueToRgb(p, q, h)\n    b = hueToRgb(p, q, h - 1 / 3)\n  }\n\n  r *= 255\n  g *= 255\n  b *= 255\n\n  return { r, g, b, toString: toRgbString }\n}\n\n/**\n * 将 RGB 颜色转换为 HSL 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n *\n * @returns 转换后的 HSL 颜色\n */\nexport function rgbToHsl(r: number | string, g: number | string, b: number | string): HSLColor {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const max = Math.max(r, g, b)\n  const min = Math.min(r, g, b)\n  let h, s\n\n  const l = (max + min) / 2\n\n  if (max === min) {\n    h = s = 0\n  } else {\n    const d = max - min\n\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n    switch (max) {\n      case r: {\n        h = (g - b) / d + (g < b ? 6 : 0)\n        break\n      }\n      case g: {\n        h = (b - r) / d + 2\n        break\n      }\n      case b: {\n        h = (r - g) / d + 4\n        break\n      }\n      default: {\n        h = 0\n      }\n    }\n\n    h *= 60\n  }\n\n  return { h, s, l, toString: toHslString }\n}\n\n/**\n * 将 HSL 颜色转换为 HSV 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param l 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 HSV 颜色\n */\nexport function hslToHsv(h: number | string, s: number | string, l: number | string): HSVColor {\n  ;({ h, s, l } = normalizeHsl(h, s, l))\n\n  const v = 0.5 * (2 * l + s * (1 - Math.abs(2 * l - 1)))\n\n  s = (2 * (v - l)) / v\n\n  return { h: h * 360, s, v, toString: toHsvString }\n}\n\n/**\n * 将 HSV 颜色转换为 HSL 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param v 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 HSL 颜色\n */\nexport function hsvToHsl(h: number | string, s: number | string, v: number | string): HSLColor {\n  ;({ h, s, v } = normalizeHsv(h, s, v))\n\n  const l = 0.5 * v * (2 - s)\n\n  s = (v * s) / (1 - Math.abs(2 * l - 1))\n\n  return { h: h * 360, s, l, toString: toHslString }\n}\n\n/**\n * 将 HSV 颜色转换为 RGB 颜色\n *\n * @param h 0 ~ 360\n * @param s 0 ~ 1，0% ~ 100%\n * @param v 0 ~ 1，0% ~ 100%\n *\n * @returns 转换后的 RGB 颜色\n */\nexport function hsvToRgb(h: number | string, s: number | string, v: number | string): RGBColor {\n  ;({ h, s, v } = normalizeHsv(h, s, v))\n\n  h *= 6\n\n  const i = Math.floor(h)\n  const f = h - i\n  const p = v * (1 - s)\n  const q = v * (1 - f * s)\n  const t = v * (1 - (1 - f) * s)\n  const mod = i % 6\n\n  let r = [v, q, p, p, t, v][mod]\n  let g = [t, v, v, q, p, p][mod]\n  let b = [p, p, t, v, v, q][mod]\n\n  r *= 255\n  g *= 255\n  b *= 255\n\n  return { r, g, b, toString: toRgbString }\n}\n\n/**\n * 将 RGB 颜色转换为 HSV 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n *\n * @returns 转换后的 HSV 颜色\n */\nexport function rgbToHsv(r: number | string, g: number | string, b: number | string): HSVColor {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const max = Math.max(r, g, b)\n  const min = Math.min(r, g, b)\n\n  let h\n\n  const v = max\n  const d = max - min\n  const s = max === 0 ? 0 : d / max\n\n  if (max === min) {\n    h = 0\n  } else {\n    switch (max) {\n      case r: {\n        h = (g - b) / d + (g < b ? 6 : 0)\n        break\n      }\n      case g: {\n        h = (b - r) / d + 2\n        break\n      }\n      case b: {\n        h = (r - g) / d + 4\n        break\n      }\n      default: {\n        h = 0\n      }\n    }\n\n    h *= 60\n  }\n\n  return { h, s, v, toString: toHsvString }\n}\n\n/**\n * 将 RGB 颜色转换为 HEX 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n * @param allow3Char 是否允许 3 位的 HEX 值\n *\n * @returns 转换后的 HEX 颜色\n */\nexport function rgbToHex(\n  r: number | string,\n  g: number | string,\n  b: number | string,\n  allow3Char = false,\n) {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const hex = [\n    repairDigits(Math.round(r * 255).toString(16)),\n    repairDigits(Math.round(g * 255).toString(16)),\n    repairDigits(Math.round(b * 255).toString(16)),\n  ]\n\n  if (allow3Char && isRepetitive(hex[0]) && isRepetitive(hex[1]) && isRepetitive(hex[2])) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0)\n  }\n\n  return '#' + hex.join('')\n}\n\n/**\n * 将 RGBA 颜色转换为 HEX 颜色\n *\n * @param r 0 ~ 255\n * @param g 0 ~ 255\n * @param b 0 ~ 255\n * @param a 0 ~ 1，0% ~ 100%\n * @param allow4Char 是否允许 4 位的 HEX 值\n *\n * @returns 转换后的 HEX 颜色\n */\nexport function rgbaToHex(\n  r: number | string,\n  g: number | string,\n  b: number | string,\n  a: number | string,\n  allow4Char = false,\n) {\n  ;({ r, g, b } = normalizeRgb(r, g, b))\n\n  const hex = [\n    repairDigits(Math.round(r * 255).toString(16)),\n    repairDigits(Math.round(g * 255).toString(16)),\n    repairDigits(Math.round(b * 255).toString(16)),\n    repairDigits(convertDecimalToHex(normalizeAlpha(a))),\n  ]\n\n  if (\n    allow4Char &&\n    isRepetitive(hex[0]) &&\n    isRepetitive(hex[1]) &&\n    isRepetitive(hex[2]) &&\n    isRepetitive(hex[3])\n  ) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0)\n  }\n\n  return '#' + hex.join('')\n}\n\n/**\n * 将两种颜色按照一定的比例混合\n *\n * @param color1 第一种颜色\n * @param color2 第二种颜色\n * @param weight 混合比例 0 ~ 1，越小则第一种颜色越少\n *\n * @returns 混合后的颜色\n */\nexport function mixColor(color1: Color, color2: Color, weight = 0.5): RGBAColor {\n  if (!color1 && !color2) return { r: 0, g: 0, b: 0, a: 1 }\n  if (!color1) return parseColorToRgba(color2)\n  if (!color2) return parseColorToRgba(color1)\n\n  const rgba1 = parseColorToRgba(color1)\n  const rgba2 = parseColorToRgba(color2)\n\n  const originalWeight = boundRange(weight, 0, 1)\n  const normalizedWeight = originalWeight * 2 - 1\n\n  const alphaDistance = rgba1.a - rgba2.a\n  const mixWeight =\n    normalizedWeight * alphaDistance === -1\n      ? normalizedWeight\n      : (normalizedWeight + alphaDistance) / (1 + normalizedWeight * alphaDistance)\n  const weight1 = (mixWeight + 1) / 2\n  const weight2 = 1 - weight1\n\n  return {\n    r: Math.round(rgba1.r * weight1 + rgba2.r * weight2),\n    g: Math.round(rgba1.g * weight1 + rgba2.g * weight2),\n    b: Math.round(rgba1.b * weight1 + rgba2.b * weight2),\n    a: Math.round(rgba1.a * originalWeight + rgba2.a * (1 - originalWeight)),\n    format: 'rgba',\n    toString: toRgbString,\n  }\n}\n\n/**\n * 调整给定颜色值的透明度\n *\n * @param color 需要调整的颜色\n * @param alpha 调整后的透明度 0 ~ 1，0% ~ 100%\n *\n * @returns 调整后的颜色\n */\nexport function adjustAlpha(color: Color, alpha: number | string) {\n  const rgba = parseColorToRgba(color)\n\n  rgba.a = normalizeAlpha(alpha)\n\n  return rgba\n}\n\n/**\n * 随机生成一个颜色值\n *\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomColor(withAlpha = false, type: ColorType = 'hex') {\n  const r = Math.round(Math.random() * 255)\n  const g = Math.round(Math.random() * 255)\n  const b = Math.round(Math.random() * 255)\n\n  if (type === 'hex') {\n    return withAlpha ? rgbaToHex(r, g, b, Math.random()) : rgbToHex(r, g, b)\n  }\n\n  let color: ObjectColor\n\n  if (type === 'hsl') {\n    color = rgbToHsl(r, g, b)\n  } else if (type === 'hsv') {\n    color = rgbToHsv(r, g, b)\n  } else {\n    color = Object.create({ r, g, b, toString: toRgbString })\n  }\n\n  if (withAlpha) {\n    ;(color as RGBAColor).a = Math.random()\n  }\n\n  return color.toString()\n}\n\n/**\n * 随机生成一个特定色调（冷暖色）的颜色值\n *\n * @param prefer 色调\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomPreferColor(\n  prefer: 'hard' | 'soft',\n  withAlpha = false,\n  type: ColorType = 'hex',\n) {\n  const h = Math.round(Math.random() * 360)\n  const s = Math.round(prefer === 'hard' ? 80 + Math.random() * 20 : 20 + Math.random() * 70) / 100\n  const l = Math.round(prefer === 'hard' ? 40 + Math.random() * 20 : 80 + Math.random() * 15) / 100\n\n  if (type === 'hsl') {\n    return toHslString.bind({ h, s, l })()\n  }\n\n  let color!: ObjectColor\n\n  if (type === 'hex' || type === 'rgb') {\n    color = hslToRgb(h, s, l)\n\n    if (type === 'hex') {\n      const { r, g, b } = color\n\n      return withAlpha ? rgbaToHex(r, g, b, Math.random()) : rgbToHex(r, g, b)\n    }\n  } else if (type === 'hsv') {\n    color = hslToHsv(h, s, l)\n  }\n\n  if (withAlpha) {\n    ;(color as RGBAColor).a = Math.random()\n  }\n\n  return color.toString()\n}\n\n/**\n * 随机生成一个冷色调的颜色值\n *\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomHardColor(withAlpha = false, type: ColorType = 'hex') {\n  return randomPreferColor('hard', withAlpha, type)\n}\n\n/**\n * 随机生成一个暖色调的颜色值\n *\n * @param withAlpha 是否具有透明度\n * @param type 颜色的类型\n *\n * @returns 生成的颜色字面值\n */\nexport function randomSoftColor(withAlpha = false, type: ColorType = 'hex') {\n  return randomPreferColor('soft', withAlpha, type)\n}\n\n/**\n * 获取给定颜色的灰度\n *\n * @param color 颜色字面值\n *\n * @returns 颜色的灰度\n */\nexport function toGrayScale(color: string) {\n  return rgbToGrayScale(parseColorToRgba(color))\n}\n\nfunction repairDigits(str: string) {\n  return str.length === 1 ? `0${str}` : str.toString()\n}\n\nfunction isRepetitive(string: string): boolean {\n  return string.charAt(0) === string.charAt(1)\n}\n\n// function testUnit(color: number | string): boolean {\n//   return UNIT_REG.test(color as string)\n// }\n\nfunction convertDecimalToHex(number: number | string): string {\n  return Math.round(parseFloat(number as string) * 255).toString(16)\n}\n\nfunction convertHexToDecimal(hex: string): number {\n  return parseInt(hex, 16) / 255\n}\n\nfunction boundRange(number: number | string, min: number, max: number): number {\n  return Math.max(min, Math.min(max, parseFloat(number as string)))\n}\n\nfunction hueToRgb(p: number, q: number, t: number): number {\n  if (t < 0) t += 1\n  if (t > 1) t -= 1\n  if (t < 1 / 6) return p + (q - p) * 6 * t\n  if (t < 1 / 2) return q\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n\n  return p\n}\n\nfunction isPercentage(percent: number | string): boolean {\n  return String(percent).trim().includes('%')\n}\n\nfunction parsePercentage(percent: number | string): number {\n  const number = parseFloat(percent as string) / 100\n\n  return Number.isNaN(number) ? 0 : number\n}\n\nfunction toRgbString(this: RGB) {\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\n    return `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})`\n  }\n\n  return `rgb(${this.r}, ${this.g}, ${this.b})`\n}\n\nfunction toHslString(this: HSL) {\n  const s = `${this.s * 100}%`\n  const l = `${this.l * 100}%`\n\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\n    return `hsla(${this.h}, ${s}, ${l}, ${this.a})`\n  }\n\n  return `hsl(${this.h}, ${s}, ${l})`\n}\n\nfunction toHsvString(this: HSV) {\n  const s = `${this.s * 100}%`\n  const v = `${this.v * 100}%`\n\n  if (isDefined(this.a) && this.a >= 0 && this.a < 1) {\n    return `hsva(${this.h}, ${s}, ${v}, ${this.a})`\n  }\n\n  return `hsv(${this.h}, ${s}, ${v})`\n}\n\nfunction rgbToGrayScale(rgb: RGB) {\n  return (rgb.r * 0.2126 + rgb.g * 0.7152 + rgb.b * 0.0722) / 255\n}\n","let globalCount = 0\n\nexport function getGlobalCount() {\n  return globalCount++\n}\n\nexport function setGlobalCount(count: number) {\n  globalCount = Math.round(count)\n}\n\nexport function createCounter(count = 0) {\n  return {\n    getCount: () => count++,\n    setCount: (newCount: number) => {\n      count = newCount\n    },\n  }\n}\n","export interface BITree {\n  tree: number[],\n  /**\n   * 为第 index 个元素增减值\n   *\n   * @param index 索引值\n   * @param num 增减的值\n   */\n  add(index: number, num: number): void,\n  /**\n   * 求前 index 个元素的和\n   *\n   * @param index 索引值\n   *\n   * @returns 前 index 个元素的和\n   */\n  sum(index?: number): number,\n  /**\n   * 获取第 index 个元素的值\n   *\n   * @param index 索引值\n   *\n   * @returns 第 index 个元素的值\n   */\n  get(index: number): number,\n  /**\n   * 根据目标值寻找一个最接近的元素的索引值\n   *\n   * @param target 目标值\n   *\n   * @returns 最接近的元素的索引值\n   */\n  boundIndex(target: number): number,\n}\n\nfunction lowBit(num: number) {\n  return num & -num\n}\n\n/**\n * 创建一个二叉索引树（Fenwick 树）对象\n *\n * 为了节省初始化性能开销，需确保元素最小值已知，其初始值为：元素最小值 * 元素总数\n *\n * @param length 树的大小，即元素的总数\n * @param min 规定元素的最小值\n *\n * @returns 二叉索引树对象\n */\nexport function createBITree(length: number, min = 0): BITree {\n  const tree: number[] = new Array(length + 1).fill(0)\n\n  function add(index: number, delta: number) {\n    if (!delta || index >= length) return\n\n    index += 1\n\n    while (index <= length) {\n      tree[index] += delta\n      index += lowBit(index)\n    }\n  }\n\n  function sum(index = length) {\n    if (index <= 0) return 0\n    if (index > length) index = length\n\n    let sum = index * min\n\n    while (index > 0) {\n      sum += tree[index]\n      index -= lowBit(index)\n    }\n\n    return sum\n  }\n\n  function get(index: number) {\n    return sum(index + 1) - sum(index)\n  }\n\n  function boundIndex(target: number) {\n    let left = 0\n    let right = length\n\n    while (right > left) {\n      const middle = Math.floor((left + right) / 2)\n      const total = sum(middle)\n\n      if (total > target) {\n        right = middle\n        continue\n      } else if (total < target) {\n        if (left === middle) {\n          return sum(left + 1) <= target ? left + 1 : left\n        }\n\n        left = middle\n      } else {\n        return middle\n      }\n    }\n\n    return left\n  }\n\n  return { tree, add, sum, get, boundIndex }\n}\n","import type { AnyCase } from './word-case'\n\nexport const numberRE = /^\\s*[+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?\\s*$/\n\n/**\n * 检测给定的值是否可以通过 parseFlat 或 Number 方法转为数字\n *\n * 开启严格模式则通过正则以更严格的方法判断\n *\n * @param value 需要检测的值\n * @param strict 是否为严格模式\n *\n * @returns 值是否可以转为数字\n */\nexport function isValidNumber(value: unknown, strict = false) {\n  if (typeof value === 'number') {\n    return !Number.isNaN(value)\n  }\n\n  if (strict) {\n    return numberRE.test(String(value))\n  }\n\n  return !Number.isNaN(parseFloat(value as string)) || !Number.isNaN(Number(value))\n}\n\n/**\n * 将给定的值转成数字，NaN 的情况将会处理成 0\n *\n * @param value 需要转换的值\n *\n * @returns 转换后的数字\n */\nexport function toNumber(value: unknown) {\n  let number = parseFloat(value as string)\n\n  if (Number.isNaN(number)) {\n    number = Number(value)\n  }\n\n  return Number.isNaN(number) ? 0 : number\n}\n\n/**\n * 为给定的整数开头填充 0，直至满足指定的长度\n *\n * @param number 需要处理的整数\n * @param length 填充至的长度\n *\n * @returns 填充后的字面值\n */\nexport function padStartZeros(number: number, length: number) {\n  if (length <= 0) {\n    return number.toString()\n  }\n\n  return `${number < 0 ? '-' : ''}${String(Math.abs(Math.round(number))).padStart(length, '0')}`\n}\n\n/**\n * 将小于 10 整数 N 变成 `0N` 的字符串，方法不会对入参校验\n *\n * @param number 需要处理的整数\n *\n * @returns 填充后的字面值\n */\nexport function doubleDigits(number: number) {\n  return padStartZeros(number, 2)\n}\n\n/**\n * 返回数字的小数位数\n *\n * @param number 指定的数字\n *\n * @returns 数字的小数位数\n */\nexport function decimalLength(number: number | string) {\n  // Get digit length of e\n  const eSplit = number.toString().split(/[eE]/)\n  const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0)\n\n  return len > 0 ? len : 0\n}\n\n/**\n * Return decimal length of a number\n *\n * @param number The input number\n * @deprecated Using `decimalLength` to replace it\n */\nexport function digitLength(number: number | string) {\n  return decimalLength(number)\n}\n\n/**\n * 将给定的数字格式化为指定的位阶\n *\n * @param number 需要格式化的数字\n * @param segment 分隔的位数，默认为 3\n * @param separator 分隔的符号，默认为 ','\n *\n * @returns 格式化后的字面值\n */\nexport function segmentNumber(number: number | string, segment = 3, separator = ',') {\n  if (typeof number !== 'number') {\n    number = parseFloat(number)\n  }\n\n  if (Number.isNaN(number)) return '0'\n\n  let [integer, decimal] = String(number).split('.')\n\n  const formatRegExp = new RegExp(`(\\\\d+)(\\\\d{${segment}})`)\n\n  while (formatRegExp.test(integer)) {\n    integer = integer.replace(formatRegExp, `$1${separator}$2`)\n  }\n\n  decimal = decimal ? `.${decimal}` : ''\n\n  return `${integer}${decimal}`\n}\n\n/**\n * 将给定的实数保留一定的小数\n *\n * @param number 需要处理的实数\n * @param decimal 需要保留的小数\n *\n * @returns 保留小数后的值\n */\nexport function toFixed(number: number, decimal: number) {\n  decimal = Math.max(Math.round(decimal), 0)\n\n  let snum = number.toFixed(decimalLength(number))\n\n  const pointPos = snum.indexOf('.')\n\n  if (pointPos === -1) return number\n\n  const nums = snum.replace('.', '').split('')\n  const targetPos = pointPos + decimal\n  const datum = nums[targetPos]\n\n  if (!datum) return number\n\n  if (snum.charAt(targetPos + 1) === '5') {\n    snum = snum.substring(0, targetPos + 1) + '6'\n  } else {\n    snum = snum.substring(0, targetPos + 2)\n  }\n\n  return parseFloat(Number(snum).toFixed(decimal))\n}\n\n/**\n * 将给定的实数扩大一定的倍数并保留一定的小数\n *\n * @param number 要处理的实数\n * @param multiple 要扩大的倍数\n * @param decimal 要保留的小数\n *\n * @returns 扩大并保留小数后的值\n */\nexport function multipleFixed(number: number, multiple: number, decimal: number) {\n  return toFixed(number * multiple, decimal)\n}\n\n/**\n * 根据临界值对给定的数字进行舍入\n *\n * @param number 需要舍入的数\n * @param criticalValue 舍入的临界值 (0 ~ 1)，达到临界值进位反之舍弃\n *\n * @returns 舍入后的值\n */\nexport function round(number: number, criticalValue: number) {\n  if (criticalValue < 0 || criticalValue > 1) {\n    return Math.round(number)\n  }\n\n  const ceilValue = Math.ceil(number)\n\n  if (number + 1 - criticalValue >= ceilValue) {\n    return ceilValue\n  } else {\n    return Math.floor(number)\n  }\n}\n\n/**\n * 将给定的数字限定在指定的范围内\n *\n * @param number 需要限定范围的数\n * @param min 边界最小值，包含该值\n * @param max 边界最大值，包含该值\n *\n * @returns 限定在范围内的值\n */\nexport function boundRange(number: number | string, min: number, max: number) {\n  return Math.max(min, Math.min(max, parseFloat(number as string)))\n}\n\n/**\n * 将给定的被除数和除数，不断的取余直至达到次数限制或余数小于除数，返回系列余数\n *\n * @param number 被除数，需大于 0\n * @param divideBy 除数，需大于 1\n * @param limit 次数限制，默认为 0，小于 1 则不作限制\n *\n * @returns 相除过程的系列余数\n */\nexport function leaveNumber(number: number, divideBy: number, limit = 0) {\n  if (number <= 0 || divideBy <= 1) return [number]\n\n  if (limit < 1) {\n    limit = Infinity\n  }\n\n  const remainders: number[] = []\n  let count = 0\n\n  while (number >= divideBy && count < limit) {\n    remainders.push(number % divideBy)\n    number = Math.floor(number / divideBy)\n    ++count\n  }\n\n  remainders.push(number)\n\n  return remainders.reverse()\n}\n\nconst ordinalSuffixes = ['th', 'st', 'nd', 'rd']\n\n/**\n * 将给定的数字转换为序数词\n *\n * @param value 需要转换的数字\n *\n * @returns 转换后的序数词\n */\nexport function ordinalNumber(value: number) {\n  value = Math.round(value)\n\n  if (value <= 0) return `${value}th`\n\n  const suffix =\n    value % 100 > 10 && value % 100 < 14\n      ? ordinalSuffixes[0]\n      : ordinalSuffixes[value % 10] || ordinalSuffixes[0]\n\n  return `${value}${suffix}`\n}\n\nexport type SizeUnitWithAuto = AnyCase<'B' | 'KB' | 'MB' | 'GB' | 'TB' | 'AUTO'>\nexport type SizeUnit = Exclude<SizeUnitWithAuto, AnyCase<'AUTO'>>\n\nconst SIZE_UNIT_WITH_AUTO = Object.freeze([\n  'B',\n  'KB',\n  'MB',\n  'GB',\n  'TB',\n  'AUTO',\n] as Uppercase<SizeUnitWithAuto>[])\n\n/**\n * 根据给定的 Byte 数值，将其格式化成指定单位的大小\n *\n * @param byte 需要计算的 Byte 数值\n * @param unit 格式化的单位\n * @param precision 结果的精度\n * @param joinUtil 是否加入单位\n *\n * @returns 格式化后的值\n */\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto): number\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto, precision?: number): number\nexport function formatByteSize(byte: number, unit?: SizeUnitWithAuto, joinUtil?: true): number\nexport function formatByteSize(\n  byte: number,\n  unit?: SizeUnitWithAuto,\n  joinUtil?: true,\n  precision?: number\n): number\nexport function formatByteSize(\n  byte: number,\n  unit: SizeUnitWithAuto = 'AUTO',\n  joinUtil: number | boolean = false,\n  precision?: number,\n) {\n  if (typeof precision === 'undefined') {\n    if (typeof joinUtil === 'number') {\n      precision = joinUtil\n      joinUtil = false\n    } else {\n      precision = 2\n    }\n  }\n\n  let upperUnit = unit.toUpperCase() as Uppercase<SizeUnitWithAuto>\n  upperUnit = SIZE_UNIT_WITH_AUTO.includes(upperUnit) ? upperUnit : 'AUTO'\n\n  let power\n  switch (upperUnit) {\n    case 'AUTO':\n      power = 0\n      break\n    case 'KB':\n      power = 1\n      break\n    case 'MB':\n      power = 2\n      break\n    case 'GB':\n      power = 3\n      break\n    case 'TB':\n      power = 4\n      break\n    default:\n      return byte\n  }\n\n  let targetSize\n\n  if (!power) {\n    for (targetSize = byte; targetSize > 1024; ++power) {\n      if (power > 4) break\n      targetSize = targetSize / 1024\n    }\n  } else {\n    targetSize = byte / 1024 ** power\n  }\n\n  targetSize = toFixed(targetSize, precision)\n\n  return joinUtil\n    ? `${targetSize}${upperUnit === 'AUTO' ? SIZE_UNIT_WITH_AUTO[Math.min(power, 4)] : upperUnit}`\n    : targetSize\n}\n\n/**\n * 在给定的范围内随机一个数\n *\n * @param max 最大值\n * @param min 最小值，默认为 0\n *\n * @returns 生成的随机数\n */\nexport function random(max: number, min = 0) {\n  if (min === max) return min\n\n  if (min > max) {\n    ;[min, max] = [max, min]\n  }\n\n  return Math.random() * (max - min) + min\n}\n\n/**\n * 将数字处理为的指定的有效位数\n *\n * @param number 需要处理的数字\n * @param precision 数字的有效位数\n *\n * @returns 处理后的数字\n *\n * @example\n * ```ts\n * toPrecision(0.09999999999999998) === 0.1 // true\n * ```\n */\nexport function toPrecision(number: number | string, precision = 15) {\n  return +parseFloat(Number(number).toPrecision(precision))\n}\n\nfunction multipleInt(number: number | string) {\n  const snum = String(number)\n\n  if (!snum.includes('e')) {\n    return Number(snum.replace('.', ''))\n  }\n\n  const dLength = decimalLength(number)\n\n  return dLength > 0 ? toPrecision(Number(number) * 10 ** dLength) : Number(number)\n}\n\n/**\n * Create an operation to support rest params.\n *\n * @param operation The original operation\n */\nfunction createOperation(operation: (n1: number | string, n2: number | string) => number) {\n  return (...numbers: (number | string)[]) => {\n    let result = numbers[0] as number\n\n    for (let i = 1, len = numbers.length; i < len; ++i) {\n      result = operation(result, numbers[i])\n    }\n\n    return result\n  }\n}\n\n/**\n * 精确的乘法\n *\n * @param numbers 需要依次相乘的数字\n *\n * @returns 乘积\n */\nexport const times = createOperation((number1, number2) => {\n  const int1 = multipleInt(number1)\n  const int2 = multipleInt(number2)\n  const base = decimalLength(number1) + decimalLength(number2)\n  const int = int1 * int2\n\n  return int / 10 ** base\n})\n\n/**\n * 精确的加法\n *\n * @param numbers 需要依次相加的数字\n *\n * @returns 和\n */\nexport const plus = createOperation((number1, number2) => {\n  const base = 10 ** Math.max(decimalLength(number1), decimalLength(number2))\n\n  return (times(number1, base) + times(number2, base)) / base\n})\n\n/**\n * 精确的减法\n *\n * @param numbers 需要依次相减的数字\n *\n * @returns 差值\n */\nexport const minus = createOperation((number1, number2) => {\n  const base = 10 ** Math.max(decimalLength(number1), decimalLength(number2))\n\n  return (times(number1, base) - times(number2, base)) / base\n})\n\n/**\n * 精确的除法\n *\n * @param numbers 需要依次相除的数字\n *\n * @returns 商\n */\nexport const divide = createOperation((number1, number2) => {\n  const int1 = multipleInt(number1)\n  const int2 = multipleInt(number2)\n\n  return times(int1 / int2, toPrecision(10 ** (decimalLength(number2) - decimalLength(number1))))\n})\n","import { doubleDigits } from './number'\n\nexport type Dateable = number | string | Date\n\n/** @deprecated renames to `SECOND_ON_MILLISECONDS` */\nexport const SECOND_ON_MILLS = 1000\nexport const SECOND_ON_MILLISECONDS = 1000\n\nexport const MINUTE_ON_SECONDS = 60\n/** @deprecated renames to `MINUTE_ON_MILLISECONDS` */\nexport const MINUTE_ON_MILLS = MINUTE_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const MINUTE_ON_MILLISECONDS = MINUTE_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const HOUR_ON_MINUTES = 60\nexport const HOUR_ON_SECONDS = HOUR_ON_MINUTES * MINUTE_ON_SECONDS\n/** @deprecated renames to `HOUR_ON_MILLISECONDS` */\nexport const HOUR_ON_MILLS = HOUR_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const HOUR_ON_MILLISECONDS = HOUR_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const DAY_ON_HOURS = 24\nexport const DAY_ON_MINUTES = DAY_ON_HOURS * HOUR_ON_MINUTES\nexport const DAY_ON_SECONDS = DAY_ON_MINUTES * MINUTE_ON_SECONDS\n/** @deprecated renames to `DAY_ON_MILLISECONDS` */\nexport const DAY_ON_MILLS = DAY_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const DAY_ON_MILLISECONDS = DAY_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const WEEK_ON_DAYS = 7\nexport const WEEK_ON_HOURS = WEEK_ON_DAYS * DAY_ON_HOURS\nexport const WEEK_ON_MINUTES = WEEK_ON_HOURS * HOUR_ON_MINUTES\nexport const WEEK_ON_SECONDS = WEEK_ON_MINUTES * MINUTE_ON_SECONDS\n/** @deprecated renames to `WEEK_ON_MILLISECONDS` */\nexport const WEEK_ON_MILLS = WEEK_ON_SECONDS * SECOND_ON_MILLISECONDS\nexport const WEEK_ON_MILLISECONDS = WEEK_ON_SECONDS * SECOND_ON_MILLISECONDS\n\nexport const QUARTER_ON_MONTHS = 3\n\nexport const YEAR_ON_QUARTERS = 4\nexport const YEAR_ON_MONTHS = YEAR_ON_QUARTERS * QUARTER_ON_MONTHS\n\ntype Formatter = (date: Date, match: string) => string | number\n\ninterface Formatters {\n  [prop: string]: Formatter,\n}\n\nconst formatters: Formatters = {\n  y(date, match) {\n    const year = date.getFullYear()\n\n    return match.length === 4 ? year : (year % 1000) % 100\n  },\n  M(date, match) {\n    const month = date.getMonth() + 1\n\n    return match.length === 2 ? doubleDigits(month) : month\n  },\n  d(date, match) {\n    const day = date.getDate()\n\n    return match.length === 2 ? doubleDigits(day) : day\n  },\n  H(date, match) {\n    const hour = date.getHours()\n\n    return match.length === 2 ? doubleDigits(hour) : hour\n  },\n  m(date, match) {\n    const minute = date.getMinutes()\n\n    return match.length === 2 ? doubleDigits(minute) : minute\n  },\n  s(date, match) {\n    const second = date.getSeconds()\n\n    return match.length === 2 ? doubleDigits(second) : second\n  },\n  q(date, match) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3)\n\n    return match.length === 2 ? doubleDigits(quarter) : quarter\n  },\n}\n\nconst formatRegExp = /[yMdHmsq](\\w)*|./g\nconst quotationRegExp = /'(.+?)'/g\n\n/**\n * 将任意可转为 `Date` 对象的变量转为一个新日期\n *\n * @param any 任意可转换的值\n * @param strict 是否在传入非法值时抛错\n *\n * @returns 转换后的 `Date` 对象\n */\nexport function toDate(any: Dateable, strict = false) {\n  const date = new Date(any)\n\n  if (strict && Number.isNaN(+date)) {\n    throw new RangeError('Invalid date value')\n  }\n\n  if (typeof any === 'string' && !any.includes(':')) {\n    date.setHours(0)\n    date.setMinutes(0)\n    date.setSeconds(0)\n  }\n\n  return date\n}\n\n/**\n * 将日期格式化成指定格式\n *\n * @param date 需要格式化的Date对象\n * @param pattern 格式化结构 年-y 月-M 日-d 时-H 分-m 秒-s 季度-q\n *\n * @returns 格式化后的字面值\n *\n * @example\n * ```ts\n * format(new Date(), 'yyyy-MM-dd')\n * ```\n *\n * @example\n * ```ts\n * format(Date.now(), 'yyyy-MM-dd\\'T\\'HH:mm:ss\\'Z\\'')\n * ```\n */\nexport function format(date: Dateable, pattern = 'yyyy-MM-dd HH:mm:ss') {\n  date = toDate(date)\n\n  const matches = pattern.match(formatRegExp)\n  const length = matches?.length\n\n  if (!length) {\n    return pattern\n  }\n\n  let i = 0\n  let result = ''\n\n  while (i < length) {\n    const substring = (matches as RegExpMatchArray)[i]\n    const firstCharacter = substring[0]\n    const formatter = formatters[firstCharacter]\n\n    if (formatter) {\n      result += formatter(date, substring)\n    } else {\n      result += substring\n    }\n\n    ++i\n  }\n\n  return result.replace(quotationRegExp, '$1')\n}\n\n/**\n * 获取日期的时间部分\n *\n * @param date 给定的日期\n *\n * @returns 日期的时间部分\n */\nexport function getTime(date: Dateable) {\n  date = toDate(date)\n\n  return `${doubleDigits(date.getHours())}:${doubleDigits(date.getMinutes())}:${doubleDigits(\n    date.getSeconds(),\n  )}`\n}\n\n/**\n * 获取日期所在的季度\n *\n * @param date 给定的日期\n *\n * @returns 日期所在的季度\n */\nexport function getQuarter(date: Dateable) {\n  date = toDate(date)\n\n  return Math.floor(date.getMonth() / 3) + 1\n}\n\nconst weeksForChinese = ['日', '一', '二', '三', '四', '五', '六']\n\n/**\n * 获取中文星期\n *\n * @param date 给定的日期\n *\n * @returns 中文星期\n */\nexport function getChineseWeek(date: Date) {\n  return weeksForChinese[date.getDay()]\n}\n\n/**\n * 为日期增减给定的毫秒\n *\n * @param date 原始日期\n * @param amount 增减的毫秒\n *\n * @returns 修改后的日期\n */\nexport function addMilliseconds(date: Dateable, amount: number) {\n  date = toDate(date)\n  date.setTime(date.getTime() + amount)\n\n  return date\n}\n\n/**\n * 为日期增减给定的秒\n *\n * @param date 原始日期\n * @param amount 增减的秒\n *\n * @returns 修改后的日期\n */\nexport function addSeconds(date: Dateable, amount: number) {\n  amount *= SECOND_ON_MILLISECONDS\n\n  return addMilliseconds(date, amount)\n}\n\n/**\n * 为日期增减给定的分钟\n *\n * @param date 原始日期\n * @param amount 增减的分钟\n *\n * @returns 修改后的日期\n */\nexport function addMinutes(date: Dateable, amount: number) {\n  amount *= MINUTE_ON_SECONDS\n\n  return addSeconds(date, amount)\n}\n\n/**\n * 为日期增减给定的小时\n *\n * @param date 原始日期\n * @param amount 增减的小时\n *\n * @returns 修改后的日期\n */\nexport function addHours(date: Dateable, amount: number) {\n  amount *= HOUR_ON_MINUTES\n\n  return addMinutes(date, amount)\n}\n\n/**\n * 为日期增减给定的半天数（12小时）\n *\n * @param date 原始日期\n * @param amount 增减的半天数\n *\n * @returns 修改后的日期\n */\nexport function addHalfDays(date: Dateable, amount: number) {\n  amount *= 12\n\n  return addHours(date, amount)\n}\n\n/**\n * 为日期增减给定的天数\n *\n * @param date 原始日期\n * @param amount 增减的天数\n *\n * @returns 修改后的日期\n */\nexport function addDays(date: Dateable, amount: number) {\n  date = toDate(date)\n  amount = ~~amount\n\n  date.setDate(date.getDate() + amount)\n\n  return date\n}\n\n/**\n * 为日期增减给定的周数\n *\n * @param date 原始日期\n * @param amount 增减的周数\n *\n * @returns 修改后的日期\n */\nexport function addWeeks(date: Dateable, amount: number) {\n  amount *= WEEK_ON_DAYS\n\n  return addDays(date, amount)\n}\n\n/**\n * 为日期增减给定的月数\n *\n * @param date 原始日期\n * @param amount 增减的月数\n *\n * @returns 修改后的日期\n */\nexport function addMonths(date: Dateable, amount: number) {\n  date = toDate(date)\n  amount = ~~amount\n\n  date.setMonth(date.getMonth() + amount)\n\n  return date\n}\n\n/**\n * 为日期增减给定的季度（3个月）\n *\n * @param date 原始日期\n * @param amount 增减的季度\n *\n * @returns 修改后的日期\n */\nexport function addQuarters(date: Dateable, amount: number) {\n  amount *= QUARTER_ON_MONTHS\n\n  return addMonths(date, amount)\n}\n\n/**\n * 为日期增减给定的年份\n *\n * @param date 原始日期\n * @param amount 增减的年份\n *\n * @returns 修改后的日期\n */\nexport function addYears(date: Dateable, amount: number) {\n  amount *= YEAR_ON_MONTHS\n\n  return addMonths(date, amount)\n}\n\n/**\n * 生成一个天数递进的日期数组\n *\n * @param start 开始日期\n * @param size range 的大小, 默认 42 (一般电子日历为 6 行 7 列)\n * @param step range 的跨幅\n *\n * @returns 生成的日期数组\n */\nexport function rangeDate(start: Dateable, size = 42, step = 1) {\n  start = toDate(start)\n\n  const dateRange: Date[] = []\n\n  for (let i = 0; i < size; ++i) {\n    dateRange.push(addDays(start, i * step))\n  }\n\n  return dateRange\n}\n\n/**\n * 生成一个月份递进的日期数组\n *\n * @param start 开始日期\n * @param size range 的大小, 默认 12 (一年)\n * @param step range 的跨幅\n *\n * @returns 生成的日期数组\n */\nexport function rangeMonth(start: Dateable, size = 12, step = 1) {\n  start = toDate(start)\n\n  const dateRange: Date[] = []\n\n  for (let i = 0; i < size; ++i) {\n    dateRange.push(addMonths(start, i * step))\n  }\n\n  return dateRange\n}\n\n/**\n * 根据给定的日期获取上一个周日\n *\n * @param date 原始日期\n *\n * @returns 上一个周日\n */\nexport function getLastSunday(date: Date) {\n  const day = date.getDay() ?? 7\n\n  return addDays(date, -day)\n}\n\n/**\n * 获取给定的日期所在秒的开始日期（毫秒归零）\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfSecond(date: Dateable) {\n  date = toDate(date)\n  date.setMilliseconds(0)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在分钟的开始日期 (秒归零)\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfMinute(date: Dateable) {\n  date = toDate(date)\n  date.setSeconds(0, 0)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在小时的开始日期 (分钟归零)\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfHour(date: Dateable) {\n  date = toDate(date)\n  date.setMinutes(0, 0, 0)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在天的开始日期\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfDay(date: Dateable) {\n  date = toDate(date)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 获取给定日期所在天的结束日期\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function endOfDay(date: Dateable) {\n  date = toDate(date)\n  date.setHours(23, 59, 59, 999)\n\n  return date\n}\n\n/**\n * 获取给定的日期所在周的第一天的开始日期\n *\n * @param date 需要解析的时间\n * @param startOn 设定周的第一天，默认为周日\n *\n * @returns 新的开始日期\n */\nexport function startOfWeek(date: Dateable, startOn = 0) {\n  startOn = startOn % 7\n\n  if (startOn < 0) {\n    startOn += 7\n  }\n\n  date = toDate(date)\n\n  const day = date.getDay()\n  const difference = (day < startOn ? 7 : 0) + day - startOn\n\n  date.setDate(date.getDate() - difference)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 判断给定的年份是否为闰年\n *\n * @param year 原始年份\n *\n * @returns 是否为闰年\n */\nexport function isLeapYear(year: number) {\n  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0\n}\n\n/**\n * 获取给定年份和月份的最后一天\n *\n * @param year 原始年份\n * @param month 原始月份\n *\n * @returns 最后一天\n */\nexport function getLastDayOfMonth(year: number, month: number) {\n  let lastDay: number\n\n  if (month < 7) {\n    if (month !== 2) {\n      lastDay = 30 + (month % 2)\n    } else {\n      if (isLeapYear(year)) {\n        lastDay = 29\n      } else {\n        lastDay = 28\n      }\n    }\n  } else {\n    lastDay = 31 - (month % 2)\n  }\n\n  return lastDay\n}\n\n/**\n * 获取给定的日期所在月份的第一天的开始日期\n *\n * @param date 原始日期\n * @param startOn 设定一个月的第一天，默认为 1 号\n *\n * @returns 新的开始日期\n */\nexport function startOfMonth(date: Dateable, startOn = 1) {\n  date = toDate(date)\n\n  const year = date.getFullYear()\n  const month = date.getMonth() + 1\n  const day = date.getDate()\n\n  const lastDay = getLastDayOfMonth(year, month)\n\n  startOn = startOn % lastDay\n\n  if (startOn < 0) {\n    startOn += lastDay\n  }\n\n  if (day < startOn) {\n    date.setMonth(month - 1)\n  }\n\n  date.setDate(startOn)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 获取给定日期所在季度的第一天的开始日期\n *\n * @param date 原始日期\n *\n * @returns 新的开始日期\n */\nexport function startOfQuarter(date: Dateable) {\n  date = toDate(date)\n\n  const quarter = getQuarter(date)\n\n  date.setDate(1)\n  date.setHours(0, 0, 0, 0)\n  date.setMonth((quarter - 1) * 3)\n\n  return date\n}\n\n/**\n * 获取给定日期所在年份的第一天的开始日期\n *\n * @param date 原始日期\n * @param startOn 设定年的开始月份，默认为一月\n *\n * @returns 新的开始日期\n */\nexport function startOfYear(date: Dateable, startOn = 0) {\n  startOn = startOn % 11\n\n  if (startOn < 0) {\n    startOn += 11\n  }\n\n  date = toDate(date)\n\n  const month = date.getMonth()\n  const difference = (month < startOn ? 11 : 0) + month - startOn\n\n  date.setMonth(date.getMonth() - difference)\n  date.setDate(1)\n  date.setHours(0, 0, 0, 0)\n\n  return date\n}\n\n/**\n * 比较两个日期相差的毫秒\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的毫秒数\n */\nexport function differenceMilliseconds(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  return right.getTime() - left.getTime()\n}\n\n/**\n * 比较两个日期相差的秒\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的秒数\n */\nexport function differenceSeconds(left: Dateable, right: Dateable) {\n  const diff = differenceMilliseconds(left, right) / SECOND_ON_MILLS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的分钟\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的分钟数\n */\nexport function differenceMinutes(left: Dateable, right: Dateable) {\n  const diff = differenceMilliseconds(left, right) / MINUTE_ON_MILLS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的小时\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的小时数\n */\nexport function differenceHours(left: Dateable, right: Dateable) {\n  const diff = differenceMilliseconds(left, right) / HOUR_ON_MILLS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的天数\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的天数\n */\nexport function differenceDays(left: Dateable, right: Dateable) {\n  left = startOfDay(left)\n  right = startOfDay(right)\n\n  return (right.getTime() - left.getTime()) / DAY_ON_MILLS\n}\n\n/**\n * 比较两个日期相差的周\n *\n * @param left 原始日期\n * @param right 原始日期\n * @param weekStartOn 设定周的第一天，默认为周日\n *\n * @returns 相差的周数\n */\nexport function differenceWeeks(left: Dateable, right: Dateable, weekStartOn = 0) {\n  left = startOfWeek(left, weekStartOn)\n  right = startOfWeek(right, weekStartOn)\n\n  return (right.getTime() - left.getTime()) / WEEK_ON_MILLS\n}\n\n/**\n * 比较两个日期相差的月\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的月份\n */\nexport function differenceMonths(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  const yearDiff = right.getFullYear() - left.getFullYear()\n  const monthDiff = right.getMonth() - left.getMonth()\n\n  return yearDiff * 12 + monthDiff\n}\n\n/**\n * 比较两个日期相差的季度\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的季度\n */\nexport function differenceQuarters(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  const yearDiff = right.getFullYear() - left.getFullYear()\n  const quarterDiff = getQuarter(right) - getQuarter(left)\n\n  return yearDiff * 4 + quarterDiff\n}\n\n/**\n * 比较两个日期相差的年份\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的年份\n */\nexport function differenceYears(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  return right.getFullYear() - left.getFullYear()\n}\n\n/**\n * 升序比较两个日期大小，用于给数组的 sort 方法使用\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 比较后的结果，`-1` 则左侧小，`1` 则右侧小，`0` 则相等\n */\nexport function compareAsc(left: Dateable, right: Dateable) {\n  left = toDate(left)\n  right = toDate(right)\n\n  const diff = left.getTime() - right.getTime()\n\n  return diff < 0 ? -1 : diff > 0 ? 1 : diff\n}\n\n/**\n * 降序比较两个日期大小，用于给数组的 sort 方法使用\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 比较后的结果，`1` 则左侧小，`-1` 则右侧小，`0` 则相等\n */\nexport function compareDesc(left: Dateable, right: Dateable) {\n  return -compareAsc(left, right)\n}\n\n/**\n * 比较两个日期相差的完整秒\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整秒数\n */\nexport function differenceFullSeconds(left: Dateable, right: Dateable) {\n  left = startOfSecond(left)\n  right = startOfSecond(right)\n\n  return differenceSeconds(left, right)\n}\n\n/**\n * 比较两个日期相差的完整分钟\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整分钟数\n */\nexport function differenceFullMinutes(left: Dateable, right: Dateable) {\n  left = startOfMinute(left)\n  right = startOfMinute(right)\n\n  return differenceMinutes(left, right)\n}\n\n/**\n * 比较两个日期相差的完整小时\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整小时数\n */\nexport function differenceFullHours(left: Dateable, right: Dateable) {\n  left = startOfHour(left)\n  right = startOfHour(right)\n\n  return differenceHours(left, right)\n}\n\n/**\n * 比较两个日期相差的完整天\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整天数\n */\nexport function differenceFullDays(left: Dateable, right: Dateable) {\n  const sign = compareDesc(left, right)\n  const difference = Math.abs(differenceDays(left, right))\n\n  left = toDate(left)\n  left.setDate(left.getDate() + sign * difference)\n\n  const isLastNotFull = compareDesc(left, right) === -sign\n\n  return sign * (difference - (isLastNotFull ? 1 : 0))\n}\n\n/**\n * 比较两个日期相差的完整周\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整周数\n */\nexport function differenceFullWeeks(left: Dateable, right: Dateable) {\n  const diff = differenceFullDays(left, right) / WEEK_ON_DAYS\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的完整月\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整月份\n */\nexport function differenceFullMonths(left: Dateable, right: Dateable) {\n  const sign = compareDesc(left, right)\n  const difference = Math.abs(differenceMonths(left, right))\n\n  left = toDate(left)\n  left.setMonth(left.getMonth() + sign * difference)\n\n  const isLastNotFull = compareDesc(left, right) === -sign\n\n  return sign * (difference - (isLastNotFull ? 1 : 0))\n}\n\n/**\n * 比较两个日期相差的完整季度\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整季度\n */\nexport function differenceFullQuarters(left: Dateable, right: Dateable) {\n  const diff = differenceFullMonths(left, right) / 3\n\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n\n/**\n * 比较两个日期相差的完整年份\n *\n * @param left 原始日期\n * @param right 原始日期\n *\n * @returns 相差的完整年份\n */\nexport function differenceFullYears(left: Dateable, right: Dateable) {\n  const sign = compareDesc(left, right)\n  const difference = Math.abs(differenceYears(left, right))\n\n  left = toDate(left)\n  left.setFullYear(left.getFullYear() + sign * difference)\n\n  const isLastNotFull = compareDesc(left, right) === -sign\n\n  return sign * (difference - (isLastNotFull ? 1 : 0))\n}\n","import { getType, noop } from './common'\n\nexport interface DeepCloneOptions {\n  /**\n   * 一个自定义的克隆对象方法，用于处理方法内置以外的对象克隆，如 Class 的实例\n   *\n   * @param type 对象的类型，注意格式为大驼峰\n   * @param obj 原始对象\n   *\n   * @returns 克隆后对象\n   */\n  cloneObject?: (type: string, obj: unknown) => any,\n}\n\n/**\n * 深度拷贝对象或数组\n *\n * @param obj 需要拷贝的对象或数组\n *\n * @returns 克隆后的对象\n */\nexport function deepClone<T>(obj: T, options: DeepCloneOptions = {}): T {\n  if (obj == null || typeof obj !== 'object') {\n    return obj\n  }\n\n  const { cloneObject = noop } = options\n  const temp = Object.create(null) as any\n\n  // 循环数组栈\n  const loopList: Array<{\n    parent: any,\n    prop: any,\n    data: any,\n  }> = [\n    {\n      parent: temp,\n      prop: 'root',\n      data: obj,\n    },\n  ]\n\n  const referenceMap = new WeakMap<any, any>()\n  const setProps: Array<{ parent: any, prop: any }> = []\n  const mapProps: Array<{ parent: any, prop: any }> = []\n\n  while (loopList.length) {\n    // 先入后出，深度优先\n    const { parent, prop, data } = loopList.pop()!\n\n    if (!parent) continue\n\n    const type = getType(data)\n\n    if (type === 'Date') {\n      parent[prop] = new Date(data as Date)\n      continue\n    }\n\n    if (type !== 'Array') {\n      const result = cloneObject(type, data)\n\n      if (result != null) {\n        parent[prop] = result\n        continue\n      }\n    }\n\n    // 初始化克隆对象\n    const cloned: any = (parent[prop] =\n      type === 'Array' || type === 'Set' || type === 'Map' ? [] : Object.create(null))\n\n    if (type === 'Set' || type === 'Map') {\n      let i = 0\n\n      if (type === 'Set') {\n        for (const item of data) {\n          if (referenceMap.has(item)) {\n            cloned[i] = referenceMap.get(item)!\n          } else if (item !== null && typeof item === 'object') {\n            loopList.push({\n              parent: cloned,\n              prop: i,\n              data: item,\n            })\n          } else {\n            cloned[i] = item\n          }\n\n          ++i\n        }\n\n        setProps.push({ parent, prop })\n      } else {\n        for (const entry of data) {\n          const clonedEntry = []\n          i = 0\n\n          for (const item of entry) {\n            if (referenceMap.has(item)) {\n              clonedEntry[i] = referenceMap.get(item)!\n            } else if (item !== null && typeof item === 'object') {\n              loopList.push({\n                parent: clonedEntry,\n                prop: i,\n                data: item,\n              })\n            } else {\n              clonedEntry[i] = item\n            }\n\n            ++i\n          }\n\n          cloned.push(clonedEntry)\n        }\n\n        mapProps.push({ parent, prop })\n      }\n    } else {\n      for (const key of Object.keys(data)) {\n        const item = data[key]\n\n        // 处理循环引用\n        if (referenceMap.has(item)) {\n          cloned[key] = referenceMap.get(item)!\n        } else if (item !== null && typeof item === 'object') {\n          loopList.push({\n            parent: cloned,\n            prop: key,\n            data: item,\n          })\n        } else {\n          cloned[key] = item\n        }\n      }\n    }\n\n    referenceMap.set(data, cloned)\n  }\n\n  for (const { parent, prop } of setProps) {\n    parent[prop] = new Set(parent[prop])\n  }\n\n  for (const { parent, prop } of mapProps) {\n    parent[prop] = new Map(parent[prop])\n  }\n\n  return temp.root\n}\n","const defaultMessage = 'This object was destroyed, do not use it anywhere'\nconst returnTrue = () => true\n\n/**\n * 将一个对象销毁，销毁后的对象所有方法不可用，属性值均为 `null`\n *\n * @param object 要销毁的对象\n * @param message 销毁后，调用方法时的错误信息\n */\nexport function destroyObject(object: any, message = defaultMessage) {\n  const throwDestroyed = () => {\n    throw new Error(message)\n  }\n\n  Object.keys(object).forEach(name => {\n    if (typeof object[name] === 'function') {\n      object[name] = throwDestroyed.bind(object)\n    } else {\n      object[name] = null\n    }\n  })\n\n  Object.getOwnPropertyNames(object.constructor.prototype).forEach(name => {\n    if (name !== 'constructor' && typeof object[name] === 'function') {\n      object[name] = throwDestroyed.bind(object)\n    }\n  })\n\n  object.isDestroyed = returnTrue\n}\n","import { isClient, isDefined } from './common'\n\n/**\n * 专用的类型，用于适配 Vexip UI 中 `transfer` 属性的处理\n */\nexport interface TransferNode extends Element {\n  __transferElement?: Element | null,\n}\n\nexport interface EventPayload extends EventInit {\n  /**\n   * 事件的类型\n   */\n  type: string,\n  [prop: string]: any,\n}\n\n/**\n * 当前是否可以使用触摸交互\n */\nexport const USE_TOUCH = isClient && ('ontouchstart' in window || getMaxTouchPoints() > 0)\n/**\n * 当前点击的类型，可以使用触摸交互时为 `pointerdown`，否则为 `click`\n */\nexport const CLICK_TYPE = USE_TOUCH ? 'pointerdown' : 'click'\n\nfunction getMaxTouchPoints() {\n  return typeof navigator !== 'undefined'\n    ? navigator.maxTouchPoints || ((navigator as any).msMaxTouchPoints as number) || 0\n    : 0\n}\n\n/**\n * 为指定的元素派发事件\n *\n * @param el 指定的元素\n * @param payload 事件的属性\n * @param Event 事件类\n *\n * @returns 事件是否派发成功\n */\nexport function dispatchEvent(el: Element, payload: EventPayload, Event = window.Event) {\n  const { type, bubbles = false, cancelable = false, ...data } = payload\n\n  if (!isDefined(type) || type === '') return false\n\n  let event\n\n  if (isDefined(Event)) {\n    event = new Event(type, { bubbles, cancelable })\n  } else {\n    event = document.createEvent('HTMLEvents')\n    event.initEvent(type, bubbles, cancelable)\n  }\n\n  Object.assign(event, data)\n\n  return el.dispatchEvent(event)\n}\n","import { isClient, isDefined } from './common'\nimport { isValidNumber, toNumber } from './number'\n\nimport type { TransferNode } from './dom-event'\n\nconst TABABLE_SELECTOR = [\n  'button',\n  '[href]:not(.disabled)',\n  'input',\n  'select',\n  'textarea',\n  '[tabindex]',\n  '[contenteditable]',\n]\n  .map(s => `${s}:not(:disabled):not([disabled])`)\n  .join(', ')\n\nfunction isElement(el?: Element | null): el is HTMLElement {\n  return !!el && el.nodeType === 1\n}\n\nfunction ensureElement(el?: Element | null) {\n  return isElement(el) ? el : document.body\n}\n\n/**\n * 检索匹配指定选择器的所有元素\n *\n * @param selector 选择器\n * @param root 根元素，不指定时为 `document.body`\n *\n * @returns 匹配的所有元素\n */\nexport function queryAll(selector: string, root?: Element | null) {\n  if (!isClient || !selector) return []\n\n  return Array.from(ensureElement(root).querySelectorAll(selector)) as HTMLElement[]\n}\n\n/**\n * 判断指定的元素是否聚焦或包含聚焦的元素\n *\n * @param el 需判断的元素\n *\n * @returns 是否聚焦或包含聚焦的元素\n */\nexport function isFocusIn(el?: Element | null) {\n  if (!isClient) return false\n\n  const activeEl = document.activeElement as HTMLElement\n\n  if (!isElement(el) || !activeEl) return false\n\n  return el === activeEl || contains(activeEl, el)\n}\n\n/**\n * 判断一个元素是否包含另一个元素\n *\n * @param el 被包含的元素（子元素）\n * @param parent 包含的元素（父元素）\n *\n * @returns 元素是否包含另一个元素\n */\nexport function contains(el?: Element | null, parent?: HTMLElement | null) {\n  if (!el || !parent) return false\n\n  const tel = (parent as TransferNode).__transferElement\n\n  return parent.contains(el) || (!!tel && (tel === el || tel.contains(el)))\n}\n\n/**\n * 判断指定的元素是否隐藏\n *\n * @param el 需判断的元素\n *\n * @returns 元素是否隐藏\n */\nexport function isHidden(el?: Element | null) {\n  if (!isClient || !isElement(el) || !el.parentNode || !contains(el, document.body)) {\n    return true\n  }\n\n  if (el.style.display === 'none') {\n    return true\n  }\n\n  const rect = el.getBoundingClientRect()\n\n  return !(rect && rect.width > 0 && rect.height > 0)\n}\n\n/**\n * 判断指定的元素是否可见\n *\n * @param el 需判断的元素\n *\n * @returns 元素是否可见\n */\nexport function isVisible(el?: Element | null) {\n  return !isHidden(el)\n}\n\n/**\n * 判断指定的元素是否被禁用\n *\n * @param el 需判断的元素\n *\n * @returns 元素是否被禁用\n */\nexport function isDisabled(el?: Element | null) {\n  return (\n    !isElement(el) ||\n    (el.hasAttribute('disabled') && el.getAttribute('disabled') !== 'false') ||\n    (el as HTMLInputElement).disabled\n  )\n}\n\n/**\n * 检索可以被切换焦点（Tab）的元素\n *\n * @param root 根元素，不指定时为 `document.body`\n * @param includeDisabled 是否包含被禁用的元素\n *\n * @returns 可以被切换焦点的元素\n */\nexport function queryTabables(root?: HTMLElement, includeDisabled = false) {\n  const isDis = includeDisabled ? () => false : isDisabled\n\n  return queryAll(TABABLE_SELECTOR, root).filter(\n    el => isVisible(el) && el.tabIndex > -1 && !isDis(el),\n  )\n}\n\n/**\n * 获取元素横向的内边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素横向的内边距像素值\n */\nexport function getXPadding(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const padding = parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight)\n\n  return padding || 0\n}\n\n/**\n * 获取元素纵向的内边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素纵向的内边距像素值\n */\nexport function getYPadding(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const padding = parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom)\n\n  return padding || 0\n}\n\n/**\n * 获取元素横向的外边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素横向的外边距像素值\n */\nexport function getXMargin(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const margin = parseFloat(computedStyle.marginLeft) + parseFloat(computedStyle.marginRight)\n\n  return margin || 0\n}\n\n/**\n * 获取元素纵向的外边距像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素纵向的外边距像素值\n */\nexport function getYMargin(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const margin = parseFloat(computedStyle.marginTop) + parseFloat(computedStyle.marginBottom)\n\n  return margin || 0\n}\n\n/**\n * 获取元素横向的边框像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素横向的边框像素值\n */\nexport function getXBorder(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const width =\n    parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth)\n\n  return width || 0\n}\n\n/**\n * 获取元素纵向的边框像素值\n *\n * @param el 指定的元素\n *\n * @returns 元素纵向的边框像素值\n */\nexport function getYBorder(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const computedStyle = getComputedStyle(el)\n  const width =\n    parseFloat(computedStyle.borderTopWidth) + parseFloat(computedStyle.borderBottomWidth)\n\n  return width || 0\n}\n\n/**\n * 获取元素的选中宽度\n *\n * @param el 指定的元素\n *\n * @returns 元素的选中宽度\n */\nexport function getRangeWidth(el: HTMLElement | null) {\n  if (!isClient || !el) return 0\n\n  const range = document.createRange()\n\n  range.setStart(el, 0)\n  range.setEnd(el, el.childNodes.length)\n\n  const rangeWidth = range.getBoundingClientRect().width\n  const xPadding = getXPadding(el)\n\n  return rangeWidth + xPadding\n}\n\n/**\n * 给定的值如果为合法数字，则将转换为像素值\n *\n * @param value 需要判断的值\n *\n * @returns 转换后的像素值\n */\nexport function toCssSize(value: number | string) {\n  return isValidNumber(value, true) ? `${toNumber(value)}px` : String(value).trim()\n}\n\n/**\n * 将指定的值转换为 HTML 属性值\n *\n * @param value 需要转换的值\n *\n * @returns 转换后的 HTML 属性值\n */\nexport function toAttrValue(value?: boolean | null): 'true' | undefined\nexport function toAttrValue(value?: string | number | null): string | undefined\nexport function toAttrValue(value?: string | number | boolean | null) {\n  return isDefined(value) && value !== false ? String(value) : undefined\n}\n","export type EventType = number | string | symbol\nexport type EventHandler = (...payload: any[]) => void\nexport type EventHandlerSet = Set<EventHandler>\nexport type EventHandlerMap = Map<EventType, EventHandlerSet>\n\nexport interface EventEmitter {\n  /**\n   * 为指定的事件添加回调方法\n   *\n   * @param type 事件类型\n   * @param handler 回调方法\n   */\n  on: (type: EventType, handler: EventHandler) => void,\n  /**\n   * 为指定的事件移除回调方法\n   *\n   * @param type 事件类型\n   * @param handler 回调方法\n   */\n  off: (type: EventType, handler: EventHandler) => void,\n  /**\n   * 为指定的事件清除所有回调方法\n   *\n   * @param type 事件类型\n   */\n  clear: (type: EventType) => void,\n  /**\n   * 清除所有事件的所有回调方法\n   */\n  clearAll: () => void,\n  /**\n   * 派发特定的事件\n   *\n   * @param type 事件类型\n   * @param payload 传入事件回调方法的参数\n   */\n  emit: (type: EventType, ...payload: any[]) => void,\n}\n\n/**\n * 创建一个自定义的事件发射器\n *\n * @returns 事件发射器\n */\nexport function createEventEmitter() {\n  const handlerMap: EventHandlerMap = new Map()\n\n  return {\n    on(type, handler) {\n      const handlers = handlerMap.get(type)\n      const added = handlers?.add(handler)\n\n      if (!added) {\n        handlerMap.set(type, new Set([handler]))\n      }\n    },\n    off(type, handler) {\n      const handlers = handlerMap.get(type)\n\n      if (handlers) {\n        handlers.delete(handler)\n      }\n    },\n    clear(type) {\n      const handlers = handlerMap.get(type)\n\n      if (handlers) {\n        handlers.clear()\n      }\n    },\n    clearAll() {\n      handlerMap.clear()\n    },\n    emit(type, ...payload) {\n      const handlers = handlerMap.get(type)\n\n      if (handlers) {\n        handlers.forEach(handler => {\n          handler(...payload)\n        })\n      }\n    },\n  } as EventEmitter\n}\n","function logOnce(message: string, cache: Set<string>, logFn: (...data: any[]) => void) {\n  if (message && !cache.has(message)) {\n    logFn(message)\n    cache.add(message)\n  }\n}\n\nconst infoCache = new Set<string>()\n\n/**\n * 仅发出一次的提示消息\n *\n * @param message 消息内容\n * @param logFn 输出函数\n */\nexport function infoOnce(message: string, logFn = console.info) {\n  logOnce(message, infoCache, logFn)\n}\n\nconst warnCache = new Set<string>()\n\n/**\n * 仅发出一次的警告消息\n *\n * @param message 消息内容\n * @param logFn 输出函数\n */\nexport function warnOnce(message: string, logFn = console.warn) {\n  logOnce(message, warnCache, logFn)\n}\n\nconst errorCache = new Set<string>()\n\n/**\n * 仅发出一次的错误消息\n *\n * @param message 消息内容\n * @param logFn 输出函数\n */\nexport function errorOnce(message: string, logFn = console.warn) {\n  logOnce(message, errorCache, logFn)\n}\n","import { isClient, noop } from './common'\n\nexport const raf = isClient\n  ? requestAnimationFrame\n  : (cb: FrameRequestCallback) => {\n    setTimeout(cb, 16)\n  }\n\n/**\n * 将一个方法进行节流\n *\n * @param method 需要节流的方法，需自行绑定 this\n * @param interval 节流后的触发间隔，默认 16 ms (1 帧)\n *\n * @returns 节流后的方法\n */\nexport function throttle<T extends (...args: any[]) => any>(\n  method: T,\n  interval = 16,\n): (...args: Parameters<T>) => void {\n  if (typeof method !== 'function') {\n    return noop\n  }\n\n  const invoke = (...args: Parameters<T>) => {\n    method(...args)\n  }\n\n  if (interval <= 0) {\n    return debounceMinor(invoke)\n  }\n\n  let lastCall = 0\n  let timer: ReturnType<typeof setTimeout>\n\n  return function (...args: Parameters<T>) {\n    const current = Date.now()\n    const elapsed = current - lastCall\n\n    clearTimeout(timer)\n\n    if (elapsed >= interval) {\n      lastCall = current\n      invoke(...args)\n    } else {\n      timer = setTimeout(\n        () => {\n          lastCall = Date.now()\n          invoke(...args)\n        },\n        Math.max(0, interval - elapsed),\n      )\n    }\n  }\n}\n\n/**\n * 将一个方法进行防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n * @param delay 防抖的限制时间，默认 100ms\n *\n * @returns 防抖后的方法\n */\nexport function debounce<T extends (...args: any[]) => any>(\n  method: T,\n  delay = 100,\n): (...args: Parameters<T>) => void {\n  if (typeof method !== 'function') {\n    return noop\n  }\n\n  const invoke = (...args: Parameters<T>) => {\n    method(...args)\n  }\n\n  if (delay <= 0) {\n    return debounceMinor(invoke)\n  }\n\n  let timer: ReturnType<typeof setTimeout>\n\n  return function (...args: Parameters<T>) {\n    clearTimeout(timer)\n\n    timer = setTimeout(() => {\n      invoke(...args)\n    }, delay)\n  }\n}\n\n/**\n * 对给定的方法进行微任务级别的防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n *\n * @returns 防抖后的方法\n */\nexport function debounceMinor<T extends (...args: any[]) => any>(method: T) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  let called = false\n  let lastArgs: Parameters<T>\n  let promise: Promise<Awaited<ReturnType<T>>>\n\n  return function (...args: Parameters<T>) {\n    lastArgs = args\n\n    if (!called) {\n      called = true\n      promise = Promise.resolve().then(() => {\n        called = false\n        promise = undefined!\n\n        return method(...lastArgs)\n      })\n    }\n\n    return promise\n  }\n}\n\n/**\n * 对给定的方法进行渲染帧级别的防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n *\n * @returns 防抖后的方法\n */\nexport function debounceFrame<T extends (...args: any[]) => any>(method: T) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  let called = false\n  let lastArgs: Parameters<T>\n  let promise: Promise<Awaited<ReturnType<T>>>\n\n  return function (...args: Parameters<T>) {\n    lastArgs = args\n\n    if (!called) {\n      called = true\n      promise = new Promise(resolve =>\n        raf(() => {\n          called = false\n          promise = undefined!\n\n          resolve(method(...lastArgs))\n        }),\n      )\n    }\n\n    return promise\n  }\n}\n\nconst tickCallbacks = new Set<(...args: any[]) => any>()\nconst tickArgsMap = new WeakMap<any, any[]>()\n\nfunction flushTickCallbacks() {\n  tickCallbacks.forEach(fn => {\n    fn(...tickArgsMap.get(fn)!)\n  })\n  tickCallbacks.clear()\n}\n\n/**\n * 在下一微任务，仅执行一次传入的方法\n *\n * @param method 需要执行的方法\n * @param args 方法的额外参数，在方法调用前多次传入将会覆盖之前的参数\n */\nexport function nextTickOnce<T extends (...args: any[]) => any>(method: T, ...args: any[]) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  tickArgsMap.set(method, args)\n\n  if (tickCallbacks.has(method)) {\n    return\n  }\n\n  tickCallbacks.add(method)\n\n  if (tickCallbacks.size === 1) {\n    Promise.resolve().then(flushTickCallbacks)\n  }\n}\n\nconst frameCallbacks = new Set<(...args: any[]) => any>()\nconst frameArgsMap = new WeakMap<any, any[]>()\n\nfunction flushFrameCallbacks() {\n  frameCallbacks.forEach(fn => {\n    fn(...frameArgsMap.get(fn)!)\n  })\n  frameCallbacks.clear()\n}\n\n/**\n * 在下一渲染帧，仅执行一次传入的方法\n *\n * @param method 需要执行的方法\n * @param args 方法的额外参数，在方法调用前多次传入将会覆盖之前的参数\n */\nexport function nextFrameOnce<T extends (...args: any[]) => any>(method: T, ...args: any[]) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  frameArgsMap.set(method, args)\n\n  if (frameCallbacks.has(method)) {\n    return\n  }\n\n  frameCallbacks.add(method)\n\n  if (frameCallbacks.size === 1) {\n    raf(flushFrameCallbacks)\n  }\n}\n\n/**\n * 按指定的并发数，并行地为系列源数据执行操作\n *\n * @param maxConcurrency 最大的并发数\n * @param source 源数据\n * @param iteratorFn 处理操作的异步函数\n *\n * @returns 等待所有任务执行完的 Promise 对象\n */\nexport async function runParallel<T>(\n  maxConcurrency: number,\n  source: T[],\n  iteratorFn: (item: T, source: T[]) => Promise<any>,\n) {\n  const ret: Array<Promise<any>> = []\n  const executing: Array<Promise<any>> = []\n\n  for (const item of source) {\n    const p = Promise.resolve().then(() => iteratorFn(item, source))\n\n    ret.push(p)\n\n    if (maxConcurrency <= source.length) {\n      const e: Promise<any> = p.then(() => executing.splice(executing.indexOf(e), 1))\n\n      executing.push(e)\n\n      if (executing.length >= maxConcurrency) {\n        await Promise.race(executing)\n      }\n    }\n  }\n\n  return Promise.all(ret)\n}\n","import { isClient } from './common'\n\nlet flexGapSupported: boolean | null = null\n\n/**\n * 判断当前的环境是否支持 CSS 样式：`gap`、`row-gap` 和 `column-gap`\n *\n * @returns 是否支持\n */\nexport function supportFlexGap() {\n  if (!isClient) {\n    return true\n  }\n\n  if (flexGapSupported === null) {\n    const flex = document.createElement('div')\n\n    flex.style.display = 'flex'\n    flex.style.flexDirection = 'column'\n    flex.style.rowGap = '1px'\n\n    flex.appendChild(document.createElement('div'))\n    flex.appendChild(document.createElement('div'))\n    document.body.appendChild(flex)\n\n    flexGapSupported = flex.scrollHeight === 1\n\n    document.body.removeChild(flex)\n  }\n\n  return flexGapSupported\n}\n\nlet imgLoadingSupported: boolean | null = null\n\n/**\n * 判断当前环境是否支持 `<img>` 标签的 `loading` 属性\n *\n * @returns 是否支持\n */\nexport function supportImgLoading() {\n  if (!isClient) {\n    return false\n  }\n\n  if (imgLoadingSupported === null) {\n    imgLoadingSupported = 'loading' in document.createElement('img')\n  }\n\n  return imgLoadingSupported\n}\n","import { isDefined, isFunction, isIterable, isObject, toTrue } from './common'\nimport { deepClone } from './deep-clone'\nimport { raf } from './performance'\n\n/**\n * 如果一个值不为数组，则将其转换为数组\n *\n * @param value 指定的值\n *\n * @returns 原始数组或转换后的数组\n */\nexport function ensureArray<T>(value: T | T[]) {\n  return Array.isArray(value) ? value : [value]\n}\n\n/**\n * 如果一个值为函数，则执行它并返回结果，否则返回其本身\n *\n * @param value 指定的值\n * @param args 若为函数时，传入的参数\n *\n * @returns 原始值或函数执行结果\n */\nexport function callIfFunc<T, P extends any[] = any[]>(value: T | ((...args: P) => T), ...args: P) {\n  return isFunction(value) ? value(...args) : value\n}\n\n/**\n * 将路径中的 `\\` 替换为 `/`\n *\n * @param path 指定的路径\n *\n * @returns 替换后的路径\n */\nexport function normalizePath(path: string) {\n  return path.replace(/[\\\\/]+/g, '/')\n}\n\n/**\n * 获取字符串的最后一个字符\n *\n * @param value 指定的字符串\n *\n * @returns 最后一个字符\n */\nexport function getLast(value: string): string | undefined\n/**\n * 获取数组的最后一个元素\n *\n * @param value 指定的数组\n *\n * @returns 最后一个元素\n */\nexport function getLast<T>(value: T[]): T | undefined\nexport function getLast(value: string | any[]) {\n  return value[value.length - 1]\n}\n\ntype RecordKey = string | number | symbol\n\nconst defaultAccessor = (v: unknown) => v\n\nexport function listToMap<T = any, K extends keyof T = keyof T>(\n  list: T[],\n  prop: K,\n  useMap?: false,\n): Record<T[K] extends RecordKey ? T[K] : RecordKey, T>\nexport function listToMap<T = any, O = T, K extends keyof T = keyof T>(\n  list: T[],\n  prop: K,\n  accessor?: (item: T) => O,\n  useMap?: false,\n): Record<T[K] extends RecordKey ? T[K] : RecordKey, O>\nexport function listToMap<T = any, K = RecordKey>(\n  list: T[],\n  prop: (item: T) => K,\n  useMap?: false,\n): Record<K extends RecordKey ? K : RecordKey, T>\nexport function listToMap<T = any, O = T, K = RecordKey>(\n  list: T[],\n  prop: (item: T) => K,\n  accessor?: (item: T) => O,\n  useMap?: false,\n): Record<K extends RecordKey ? K : RecordKey, O>\nexport function listToMap<T = any, K extends keyof T = keyof T>(\n  list: T[],\n  prop: K,\n  useMap?: true,\n): Map<T[K], T>\nexport function listToMap<T = any, O = T, K extends keyof T = keyof T>(\n  list: T[],\n  prop: K,\n  accessor?: (item: T) => O,\n  useMap?: true,\n): Map<T[K], O>\nexport function listToMap<T = any, K = any>(\n  list: T[],\n  prop: (item: T) => K,\n  useMap?: true,\n): Map<K, T>\nexport function listToMap<T = any, O = T, K = any>(\n  list: T[],\n  prop: (item: T) => K,\n  accessor?: (item: T) => O,\n  useMap?: true,\n): Map<K, O>\n/**\n * 根据数组元素中某个或多个属性的值转换为映射对象\n *\n * @param list 需要被转换的数组\n * @param prop 需要被转换的属性或提供一个读取方法\n * @param accessor 映射的值的读取方法，默认返回元素本身\n * @param useMap 是否使用 Map 对象储存结果\n *\n * @returns 转换后的映射对象\n */\nexport function listToMap<T = any, O = T>(\n  list: T[],\n  prop: keyof T | ((item: T) => any),\n  accessor?: boolean | ((item: T) => O),\n  useMap?: boolean,\n) {\n  let normalizeAccessor: (item: T) => O\n\n  if (typeof accessor !== 'function' && useMap === undefined) {\n    useMap = !!accessor\n    normalizeAccessor = defaultAccessor as any\n  } else {\n    normalizeAccessor = typeof accessor === 'function' ? accessor : (defaultAccessor as any)\n  }\n\n  const map = (useMap ? new Map<string, any>() : {}) as any\n\n  if (!isDefined(prop)) return map\n\n  const set = useMap\n    ? (key: any, value: O) => map.set(key, value)\n    : (key: any, value: O) => (map[key] = value)\n  const propAccessor = isFunction(prop) ? prop : (item: T) => item[prop]\n\n  list.forEach(item => {\n    if (!isDefined(item)) return\n\n    const key = propAccessor(item)\n\n    if (isDefined(key)) {\n      set(key, normalizeAccessor(item))\n    }\n  })\n\n  return map\n}\n\nexport {\n  /** @deprecated please use listToMap to replace it */\n  listToMap as transformListToMap,\n}\n\n/**\n * 移除数组中的某个元素\n *\n * @param array 需要被移除元素的数组\n * @param item 需要被移除的元素, 或一个查找方法，如果元素为函数时则需要做一层简单包装\n * @param isFn 标记数组的元素是否为函数\n *\n * @returns 被移除的元素\n */\nexport function removeArrayItem<T = any>(\n  array: T[],\n  item: T | ((item: T) => boolean),\n  isFn = false,\n): T | null {\n  let index = -1\n\n  if (isFn || typeof item !== 'function') {\n    index = array.findIndex(current => current === item)\n  } else {\n    index = array.findIndex(item as (item: T) => boolean)\n  }\n\n  if (~index) {\n    return array.splice(index, 1)[0]\n  }\n\n  return null\n}\n\n/**\n * 按照一定顺序的属性对数据进行分组\n *\n * @param list 需要分数的数据\n * @param props 需要按顺序分组的属性\n *\n * @returns 分组后的对象\n */\nexport function groupByProps<T = any>(\n  list: T[],\n  props: Array<string | ((item: T) => any)> | string | ((item: T) => any) = [],\n): Record<string, T[]> {\n  if (typeof props === 'string' || typeof props === 'function') {\n    props = [props]\n  }\n\n  const propCount = props.length\n  const zipData: Record<string, any> = {}\n\n  for (const item of list) {\n    let data\n\n    for (let i = 0; i < propCount; ++i) {\n      const isLast = i === propCount - 1\n      const prop = props[i]\n      const value = typeof prop === 'function' ? prop(item) : item[prop as keyof T]\n\n      if (!data) {\n        if (!zipData[value]) {\n          zipData[value] = isLast ? [] : {}\n        }\n\n        data = zipData[value]\n      } else {\n        if (!data[value]) {\n          data[value] = isLast ? [] : {}\n        }\n\n        data = data[value]\n      }\n    }\n\n    data.push(item)\n  }\n\n  return zipData\n}\n\nexport interface TreeOptions<T = string> {\n  keyField?: T,\n  childField?: T,\n  parentField?: T,\n  /** 若指定，`parent` 值等于 `rootId` 的节点被认为是顶级节点 */\n  rootId?: any,\n}\n\n/**\n * 将一个展平的列表转换为树\n *\n * @param list 要转换的列表\n * @param options 转换的配置项\n *\n * @returns 转换后的树\n */\nexport function transformTree<T = any>(list: T[], options: TreeOptions<keyof T> = {}) {\n  const {\n    keyField = 'id' as keyof T,\n    childField = 'children' as keyof T,\n    parentField = 'parent' as keyof T,\n    rootId = null,\n  } = options\n\n  const hasRootId = isDefined(rootId) && rootId !== ''\n  const tree: T[] = []\n  const record = new Map<T[keyof T], T[]>()\n\n  for (let i = 0, len = list.length; i < len; ++i) {\n    const item = list[i]\n    const id = item[keyField]\n\n    if (hasRootId ? id === rootId : !isDefined(id)) {\n      continue\n    }\n\n    if (record.has(id)) {\n      ;(item as any)[childField] = record.get(id)!\n    } else {\n      ;(item as any)[childField] = []\n      record.set(id, (item as any)[childField])\n    }\n\n    if (item[parentField] && (!hasRootId || item[parentField] !== rootId)) {\n      const parentId = item[parentField]\n\n      if (!record.has(parentId)) {\n        record.set(parentId, [])\n      }\n\n      record.get(parentId)!.push(item)\n    } else {\n      tree.push(item)\n    }\n  }\n\n  return tree\n}\n\nexport { transformTree as buildTree }\n\n/**\n * 将一个树展平成列表\n *\n * @param tree 要展平的树\n * @param options 转换的配置项\n *\n * @returns 展平后的列表\n */\nexport function flatTree<T = any>(\n  tree: T[],\n  options: TreeOptions<keyof T> & {\n    /** 是否为深度优先遍历 */\n    depthFirst?: boolean,\n    /**\n     * 是否为无 ID 的节点插入 ID 值\n     *\n     * @default true\n     */\n    injectId?: boolean,\n    /** 构建节点的 ID 的方法 */\n    buildId?: (index: number) => any,\n    /** 过滤节点的方法 */\n    filter?: (item: T) => boolean,\n    /** 过滤的结果是否会影响其子级 */\n    cascaded?: boolean,\n    /** 是否强制为节点插入 ID 值 */\n    forceInject?: boolean,\n  } = {},\n) {\n  const {\n    keyField = 'id' as keyof T,\n    childField = 'children' as keyof T,\n    parentField = 'parent' as keyof T,\n    rootId = null,\n    depthFirst = false,\n    injectId = true,\n    buildId = i => i,\n    filter = toTrue,\n    cascaded = false,\n    forceInject = false,\n  } = options\n\n  let idCount = 1\n\n  const hasRootId = isDefined(rootId) && rootId !== ''\n  const list: T[] = []\n  const loop = [...tree]\n\n  while (loop.length) {\n    const item = loop.shift()!\n\n    const childrenValue = item[childField]\n    const children: T[] = Array.isArray(childrenValue) && childrenValue.length ? childrenValue : []\n\n    if (injectId && (forceInject || !item[keyField])) {\n      item[keyField] = buildId(idCount++)\n    }\n\n    const id = item[keyField]\n\n    if (\n      injectId &&\n      parentField &&\n      (hasRootId ? item[parentField] === rootId : !item[parentField])\n    ) {\n      ;(item as any)[parentField] = rootId\n    }\n\n    const filterResult = filter(item)\n\n    if (filterResult) list.push(item)\n\n    if (filterResult || !cascaded) {\n      for (let i = 0, len = children.length; i < len; ++i) {\n        const child = children[i]\n\n        if (injectId && parentField) {\n          child[parentField] = id\n        }\n\n        !depthFirst && loop.push(child)\n      }\n\n      if (depthFirst) {\n        loop.unshift(...children)\n      }\n    }\n  }\n\n  return list\n}\n\n/**\n * 遍历树并为每个节点执行回调方法\n *\n * @param tree 要遍历的树\n * @param cb 回调函数\n * @param options 遍历的配置项\n */\nexport function walkTree<T = any>(\n  tree: T[],\n  cb: (item: T, depth: number, parent: T | null) => void,\n  options: {\n    /** 是否为深度优先遍历 */\n    depthFirst?: boolean,\n    childField?: keyof T,\n  } = {},\n) {\n  const { childField = 'children' as keyof T, depthFirst = false } = options\n  const loop = [...tree.map(item => ({ item, depth: 0, parent: null as T | null }))]\n\n  while (loop.length) {\n    const { item, depth, parent } = loop.shift()!\n    const children = item[childField] as T[]\n\n    cb(item, depth, parent)\n\n    if (isIterable(children)) {\n      loop[depthFirst ? 'unshift' : 'push'](\n        ...Array.from(children).map(child => ({ item: child, depth: depth + 1, parent: item })),\n      )\n    }\n  }\n}\n\n/**\n * 遍历树并为每个节点执行回调方法，并用其返回值构建一颗新的树\n *\n * @param tree 要遍历的树\n * @param cb 回调函数\n * @param options 遍历的配置项\n *\n * @returns 构建后新的树\n */\nexport function mapTree<T = any, R = any>(\n  tree: T[],\n  cb: (item: T, depth: number, parent: T | null) => R,\n  options: {\n    /** 是否为深度优先遍历 */\n    depthFirst?: boolean,\n    childField?: keyof T,\n    /** 是否强制重置 `children` 字段 */\n    clearChildren?: boolean,\n  } = {},\n) {\n  const { childField = 'children' as keyof T, depthFirst = false, clearChildren = true } = options\n  const result: R[] = []\n  const loop = [...tree.map(item => ({ item, depth: 0, parent: null as T | null, result }))]\n\n  while (loop.length) {\n    const { item, depth, parent, result } = loop.shift()!\n    const children = item[childField] as T[]\n    const newItem = cb(item, depth, parent) ?? ({} as any)\n\n    if (clearChildren) {\n      newItem[childField] = []\n    }\n\n    result.push(newItem)\n\n    if (isIterable(children)) {\n      const items = Array.from(children)\n\n      if (items.length) {\n        newItem[childField] = []\n        loop[depthFirst ? 'unshift' : 'push'](\n          ...Array.from(children).map(child => ({\n            item: child,\n            depth: depth + 1,\n            parent: item,\n            result: newItem[childField],\n          })),\n        )\n      }\n    }\n  }\n\n  return result\n}\n\n/**\n * 遍历树并为每个节点执行过滤方法，并用符合条件的节点构建一棵新的树\n *\n * @param tree 要遍历的树\n * @param cb 过滤的方法\n * @param options 遍历的配置项\n *\n * @returns 过滤后新的树\n */\nexport function filterTree<T = any>(\n  tree: T[],\n  cb: (item: T, depth: number, parent: T | null) => boolean,\n  options: {\n    /** 判断一个节点是否为叶子节点 */\n    isLeaf?: (item: T) => boolean,\n    /** 是否只对叶子节点进行过滤 */\n    leafOnly?: boolean,\n    childField?: keyof T,\n  } = {},\n) {\n  const {\n    childField = 'children' as keyof T,\n    leafOnly = false,\n    isLeaf = item => !isIterable(item[childField]),\n  } = options\n\n  const filter = (data: T[], depth: number, parent: T | null): T[] => {\n    return data\n      .map(item => ({ ...item }))\n      .filter(item => {\n        const children = item[childField] as T[]\n        const leaf = isLeaf(item)\n        const items = isIterable(children) && Array.from(children)\n\n        if (leafOnly && !leaf) {\n          if (items && items.length) {\n            const matched = filter(items, depth + 1, item)\n            item[childField] = matched as any\n\n            return !!matched.length\n          }\n\n          return false\n        }\n\n        const result = cb(item, depth, parent)\n\n        if (leaf) return result\n        if (!leafOnly && result) return true\n\n        if (items && items.length) {\n          const matched = filter(items, depth + 1, item)\n          item[childField] = matched as any\n\n          return !!matched.length\n        }\n\n        return result\n      })\n  }\n\n  return filter(tree, 0, null)\n}\n\nexport interface SortOptions<T = string> {\n  /** 属性名 */\n  key: T,\n  /** 排序方法 */\n  method?: (prev: any, next: any) => number,\n  /** 读取方法 */\n  accessor?: (...args: any[]) => any,\n  /** 升降序 */\n  type?: 'asc' | 'desc',\n  /** 传入读取器的额外参数 */\n  params?: any[],\n}\n\nconst defaultSortMethod = (prev: any, next: any) => {\n  if (Number.isNaN(Number(prev) - Number(next))) {\n    return String(prev).localeCompare(next)\n  }\n\n  return prev - next\n}\n\n/**\n * 根据依赖的属性对数组逐层排序\n *\n * @param list 需要排序的数组\n * @param props 排序依赖的属性\n *\n * @returns 排序后的数组\n */\nexport function sortByProps<T = any>(\n  list: T[],\n  props: keyof T | SortOptions<keyof T> | (keyof T | SortOptions<keyof T>)[],\n) {\n  if (\n    !list.sort ||\n    (isObject<SortOptions>(props) && !props.key) ||\n    !(props as string | SortOptions[]).length\n  ) {\n    return list\n  }\n\n  const sortedList = Array.from(list)\n\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const formattedProps = props\n    .map(\n      value =>\n        (typeof value === 'string'\n          ? {\n            key: value,\n            method: defaultSortMethod,\n            type: 'asc',\n          }\n          : value) as SortOptions<keyof T>,\n    )\n    .map(value => {\n      if (typeof value.accessor !== 'function') {\n        value.accessor = (data: T) => data[value.key]\n      }\n\n      if (typeof value.method !== 'function') {\n        value.method = defaultSortMethod\n      }\n\n      value.params = Array.isArray(value.params) ? value.params : []\n\n      return value as Required<SortOptions>\n    })\n\n  sortedList.sort((prev, next) => {\n    let lastResult = 0\n\n    for (const prop of formattedProps) {\n      const { method, type, accessor, params } = prop\n      const desc = type === 'desc'\n      const result = method(accessor(prev, ...params), accessor(next, ...params))\n\n      lastResult = desc ? -result : result\n      // 若不为0则无需进行下一层排序\n      if (lastResult) break\n    }\n\n    return lastResult\n  })\n\n  return sortedList\n}\n\n/**\n * 将两个对象进行深度的动态合并\n *\n * @param sourceObj 用于接收合并的源对象\n * @param targetObj 被合并的对象，当属性名相同但值类型不同的情况，此对象的权重更高\n * @param isNewObj 标记合并至一个全新的对象（深度的）\n *\n * @returns 合并后的对象\n */\nexport function mergeObjects<T extends Record<string, any>, U extends Record<string, any>>(\n  sourceObj: T,\n  targetObj: U,\n  isNewObj = true,\n) {\n  sourceObj = isNewObj ? deepClone(sourceObj) : sourceObj\n\n  const loop: Array<{\n    source: Record<string, any>,\n    target: Record<string, any>,\n  }> = [\n    {\n      source: sourceObj,\n      target: targetObj,\n    },\n  ]\n\n  while (loop.length) {\n    const { source, target } = loop.pop()!\n\n    Object.keys(target).forEach(key => {\n      if (isObject(target[key])) {\n        if (!isObject(source[key])) {\n          source[key] = Object.create(null)\n        }\n\n        loop.push({\n          source: source[key],\n          target: target[key],\n        })\n      } else if (Array.isArray(target[key])) {\n        if (!Array.isArray(source[key])) {\n          source[key] = []\n        }\n\n        loop.push({\n          source: source[key],\n          target: target[key],\n        })\n      } else {\n        source[key] = target[key]\n      }\n    })\n  }\n\n  return sourceObj as T & U\n}\n\n/**\n * 将一个任务队列按每帧一次依次指定，返回一个触发取消的方法\n *\n * @param queue 任务队列\n *\n * @returns 终止队列执行的方法\n */\nexport function runQueueFrame(queue: Array<() => void>) {\n  queue = Array.from(queue)\n\n  let cancelled = false\n\n  const run = () => {\n    if (cancelled) return\n\n    queue.shift()?.()\n    queue.length && raf(run)\n  }\n\n  run()\n\n  return () => (cancelled = true)\n}\n","/**\n * 将给定的常量字符串类型拓展为不区分大小写的任意组合\n */\nexport type AnyCase<S> = string extends S\n  ? string\n  : S extends `${infer F1}${infer F2}${infer R}`\n    ? `${Uppercase<F1> | Lowercase<F1>}${Uppercase<F2> | Lowercase<F2>}${AnyCase<R>}`\n    : S extends `${infer F}${infer R}`\n      ? `${Uppercase<F> | Lowercase<F>}${AnyCase<R>}`\n      : ''\n\nfunction allCapital(value: string) {\n  const matched = value.match(/[A-Z]+/)\n\n  return matched && matched[0] === value\n}\n\n// const kebabRE = /\\B([A-Z])/g\nconst kebabRE = /\\B([A-Z])(?=[^A-Z_-])/g\n\n/**\n * 将字面值转换为短横线连接\n *\n * @param value 需要转换的字面值\n *\n * @returns 转换后的短横线连接字面值\n *\n * @example\n * ```ts\n * toKebabCase('AaBbCc') // aa-bb-cc\n * toKebabCase('AABb') // aa-bb\n * toKebabCase('AAA') // aaa\n * toKebabCase('AaBb CcDd') // aa-bb cc-dd\n * ```\n */\nexport function toKebabCase(value: string) {\n  // if (allCapital(value)) {\n  //   return value.toLocaleLowerCase()\n  // }\n\n  return value.replace(kebabRE, '-$1').toLowerCase()\n}\n\n/**\n * 将给定的常量字符串类型拓展为大驼峰\n */\nexport type CapitalCase<T extends string> = T extends `${infer First} ${infer Rest}`\n  ? CapitalCase<`${First}-${Rest}`>\n  : T extends `${infer First}-${infer Rest}`\n    ? `${Capitalize<First>}${CapitalCase<Rest>}`\n    : Capitalize<T>\n\n/**\n * 将字面值转换为大驼峰\n *\n * @param value 需要转换的字面值\n *\n * @returns 转换后的大驼峰字面值\n */\nexport function toCapitalCase<T extends string>(value: T) {\n  value = value.trim().replace(/\\s+/g, '-') as T\n  value = value.replace(/-+(\\w)/g, (_, char) => (char ? char.toUpperCase() : '')) as T\n\n  return (value.charAt(0).toLocaleUpperCase() + value.slice(1)).replace(\n    /[^\\w]/g,\n    '',\n  ) as CapitalCase<T>\n}\n\n/**\n *  将字面值转换为小驼峰\n *\n * @param value 需要转换的字面值\n *\n * @returns 转换后的小驼峰字面值\n */\nexport function toCamelCase(value: string) {\n  const capitalName = toCapitalCase(value)\n\n  if (allCapital(capitalName)) {\n    return capitalName.toLocaleLowerCase()\n  }\n\n  return capitalName.charAt(0).toLowerCase() + capitalName.slice(1)\n}\n","import { computed, getCurrentInstance, inject, provide, unref } from 'vue'\n\nimport { isDefined } from '@vexip-ui/utils'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\n\nexport const PROVIDED_HOVER_DELAY = '___vxp-provided-hover-delay'\nexport const globalDelay = computed(() => 100)\n\nfunction getOrDefault(num: number, def: number) {\n  return isDefined(num) && !Number.isNaN(num) ? num : def\n}\n\n/**\n * Provide a hover delay config for under components.\n *\n * @param sourceDelay hover delay config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configHoverDelay(sourceDelay: MaybeRef<number>, app?: App) {\n  if (app) {\n    const delay = computed(() => {\n      const delay = unref(sourceDelay)\n\n      return getOrDefault(delay, globalDelay.value)\n    })\n\n    app.provide(PROVIDED_HOVER_DELAY, delay)\n  } else {\n    const upstreamDelay = inject<ComputedRef<number> | null>(PROVIDED_HOVER_DELAY, null)\n    const delay = computed(() => {\n      const delay = unref(sourceDelay)\n\n      return getOrDefault(\n        delay,\n        upstreamDelay ? getOrDefault(upstreamDelay.value, globalDelay.value) : globalDelay.value,\n      )\n    })\n\n    provide(PROVIDED_HOVER_DELAY, delay)\n  }\n}\n\nexport function useHoverDelay() {\n  return getCurrentInstance()\n    ? inject<ComputedRef<number>>(PROVIDED_HOVER_DELAY, globalDelay)\n    : globalDelay\n}\n","import { defineLocaleConfig } from './helper'\n\n/**\n * Chinese (Simplified) locale config.\n *\n * @author @qmhc\n */\nexport function zhCNLocale() {\n  return defineLocaleConfig({\n    locale: 'zh-CN',\n    wordSpace: false,\n\n    calendar: {\n      year: '年',\n      month: '月',\n      month1: '01月',\n      month2: '02月',\n      month3: '03月',\n      month4: '04月',\n      month5: '05月',\n      month6: '06月',\n      month7: '07月',\n      month8: '08月',\n      month9: '09月',\n      month10: '10月',\n      month11: '11月',\n      month12: '12月',\n      week1: '一',\n      week2: '二',\n      week3: '三',\n      week4: '四',\n      week5: '五',\n      week6: '六',\n      week7: '日',\n\n      ariaLabel: {\n        year: '年',\n        month: '月',\n        month1: '一月',\n        month2: '二月',\n        month3: '三月',\n        month4: '四月',\n        month5: '五月',\n        month6: '六月',\n        month7: '七月',\n        month8: '八月',\n        month9: '九月',\n        month10: '十月',\n        month11: '十一月',\n        month12: '十二月',\n        week1: '星期一',\n        week2: '星期二',\n        week3: '星期三',\n        week4: '星期四',\n        week5: '星期五',\n        week6: '星期六',\n        week7: '星期日',\n      },\n    },\n\n    captcha: {\n      slideEnd: '请滑动到最后',\n      slide: '请滑动到适当的位置',\n      success: '验证成功',\n      fail: '验证失败，请重试',\n      doCaptcha: '请完成下面的验证',\n      pointInOrder: '请按顺序点击',\n      trigger: '点击进行验证',\n      completed: '已完成验证',\n    },\n\n    checkbox: {\n      all: '全选',\n    },\n\n    colorPicker: {\n      confirm: '确定',\n      cancel: '重置',\n\n      ariaLabel: {\n        clear: '清空颜色',\n      },\n    },\n\n    confirm: {\n      confirm: '确认',\n      cancel: '取消',\n    },\n\n    datePicker: {\n      confirm: '确认',\n      cancel: '取消',\n      placeholder: {\n        year: '年份',\n        month: '月份',\n        date: '日期',\n        datetime: '日期时间',\n        start: '开始',\n        end: '结束',\n        select: '请选择',\n      },\n      startTime: '开始时间',\n      endTime: '结束时间',\n\n      ariaLabel: {\n        clear: '清空日期',\n        quarter: '季度',\n        week: '周',\n        date: '日',\n        hour: '时',\n        minute: '分',\n        second: '秒',\n      },\n    },\n\n    drawer: {\n      confirm: '确认',\n      cancel: '取消',\n    },\n\n    form: {\n      submit: '提交',\n      reset: '重置',\n      notNullable: '不可为空',\n      validateFail: '验证未通过',\n    },\n\n    image: {\n      placeholder: '加载中...',\n      error: '加载失败',\n    },\n\n    input: {\n      placeholder: '请输入',\n\n      ariaLabel: {\n        clear: '清空文本',\n      },\n    },\n\n    layout: {\n      signOut: '注销',\n      signType: '导航模式',\n      majorColor: '主题颜色',\n      themeMode: '主题模式',\n    },\n\n    modal: {\n      confirm: '确认',\n      cancel: '取消',\n    },\n\n    numberInput: {\n      placeholder: '请输入数字',\n      outOfRange: '超出范围',\n\n      ariaLabel: {\n        clear: '清空数字',\n        increase: '增加',\n        decrease: '减少',\n      },\n    },\n\n    pagination: {\n      page: '页',\n      perPage: '条/页',\n      prevPage: '上一页',\n      nextPage: '下一页',\n      prev: '向前',\n      next: '向后',\n      total: '共',\n      jumpTo: '跳转',\n      itemUnit: '条',\n    },\n\n    select: {\n      placeholder: '请选择',\n      empty: '暂无数据',\n      search: '搜索选项',\n\n      ariaLabel: {\n        clear: '清空选项',\n      },\n    },\n\n    table: {\n      empty: '暂无数据',\n      filterConfirm: '筛选',\n      filterReset: '重置',\n      filterAll: '全部',\n    },\n\n    timeAgo: {\n      ago: '前',\n      late: '后',\n      justNow: '刚刚',\n      second: '秒',\n      minute: '分钟',\n      hour: '小时',\n      yesterday: '昨天',\n      days: '天',\n      lastMonth: '上个月',\n      months: '个月',\n      lastYear: '去年',\n      years: '年',\n    },\n\n    timePicker: {\n      confirm: '确认',\n      cancel: '取消',\n      placeholder: {\n        time: '时间',\n        start: '开始',\n        end: '结束',\n        select: '请选择',\n      },\n\n      ariaLabel: {\n        clear: '清空时间',\n        hour: '时',\n        minute: '分',\n        second: '秒',\n      },\n    },\n\n    tour: {\n      prev: '上一步',\n      next: '下一步',\n      done: '完成',\n      stepCount: '第 {n} 步',\n    },\n\n    transfer: {\n      source: '源',\n      target: '目标',\n      empty: '暂无数据',\n      reverse: '反选',\n      search: '搜索 (Ctrl + F)',\n    },\n\n    tree: {\n      empty: '暂无数据',\n    },\n\n    upload: {\n      upload: '上传文件',\n      uploading: '上传中',\n      dragOrClick: '将文件拖到此处, 或点击上传',\n\n      ariaLabel: {\n        preview: '预览文件',\n        delete: '删除文件',\n      },\n    },\n\n    video: {\n      play: '播放',\n      pause: '暂停',\n      playPrev: '上一个',\n      playNext: '下一个',\n      refresh: '刷新',\n      flip: '镜像翻转',\n      requestPip: '进入画中画',\n      exitPip: '退出画中画',\n      fullWindow: '进入网页全屏',\n      fullWindowExit: '退出网页全屏',\n      fullScreen: '进入全屏',\n      fullScreenExit: '退出全屏',\n      chapterCount: '第 {n} 章',\n    },\n\n    viewer: {\n      rotateRight: '向右旋转',\n      rotateLeft: '向左旋转',\n      flipHorizontal: '横向翻转',\n      flipVertical: '纵向翻转',\n      zoomIn: '放大',\n      zoomOut: '缩小',\n      fullScreen: '进入全屏',\n      fullScreenExit: '退出全屏',\n      reset: '重置',\n    },\n  })\n}\n","import { computed, inject, provide, unref } from 'vue'\n\nimport { mergeObjects } from '@vexip-ui/utils'\nimport { zhCNLocale } from './zh-CN'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\nimport type { LocaleConfig, LocaleNames, LocaleOptions } from './helper'\n\nexport * from './helper'\n\nexport * from './ar-EG'\nexport * from './de-DE'\nexport * from './en-US'\nexport * from './fa-IR'\nexport * from './fr-FR'\nexport * from './ta-IN'\nexport * from './zh-CN'\nexport * from './zh-HK'\nexport * from './zh-TW'\n\nexport const PROVIDED_LOCALE = '__vxp-provided-locale'\nexport const globalLocal = computed(() => zhCNLocale())\n\nconst cached = new Map<string, LocaleConfig>()\n\nexport function getDefaultLocaleConfig(locale?: string) {\n  if (!locale) {\n    return globalLocal.value\n  }\n\n  return cached.get(locale) || globalLocal.value\n}\n\nexport function registerLocale(locale: LocaleConfig) {\n  locale.locale && cached.set(locale.locale, locale)\n}\n\n/**\n * Provide a locale config for under components.\n *\n * @param sourceLocale locale config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configLocale(sourceLocale: MaybeRef<LocaleOptions>, app?: App) {\n  if (app) {\n    const locale = computed(() => {\n      const locale = unref(sourceLocale)\n\n      return mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\n    })\n\n    app.provide(PROVIDED_LOCALE, locale)\n  } else {\n    const upstreamLocale = inject<ComputedRef<LocaleConfig> | null>(PROVIDED_LOCALE, null)\n    const locale = computed(() => {\n      const locale = unref(sourceLocale)\n      // const providedLocale = mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\n\n      if (!upstreamLocale?.value) {\n        return mergeObjects(getDefaultLocaleConfig(locale.locale), locale)\n      }\n\n      return mergeObjects(upstreamLocale.value as any, locale)\n    })\n\n    provide(PROVIDED_LOCALE, locale)\n  }\n}\n\nexport function useLocale(): ComputedRef<LocaleConfig>\nexport function useLocale<T extends LocaleNames>(name: T): ComputedRef<LocaleConfig[T]>\nexport function useLocale<T extends LocaleNames>(\n  name: T,\n  customLocale: MaybeRef<Partial<LocaleConfig[T]>>\n): ComputedRef<LocaleConfig[T]>\nexport function useLocale<T extends LocaleNames>(\n  name?: T,\n  customLocale?: MaybeRef<Partial<LocaleConfig[T]>>,\n) {\n  const locale = inject<ComputedRef<LocaleConfig>>(PROVIDED_LOCALE, globalLocal)\n\n  if (!name) {\n    return locale\n  }\n\n  if (customLocale) {\n    return computed(() => ({ ...(locale.value?.[name] ?? {}), ...(unref(customLocale) ?? {}) }))\n  }\n\n  return computed(() => locale.value?.[name] ?? {})\n}\n\nexport function useWordSpace() {\n  const locale = inject<ComputedRef<LocaleConfig>>(PROVIDED_LOCALE, globalLocal)\n\n  return computed(() => locale.value.wordSpace ?? false)\n}\n\nexport function getCountWord(wordTemplate: string, count: number) {\n  const words = wordTemplate.split('|')\n\n  if (words.length === 1) return `${count} ${wordTemplate}`\n\n  return `${count} ${count > 1 ? words[1].trim() : words[0].trim()}`\n}\n\nexport function getCountWordOnly(wordTemplate: string, count: number) {\n  const words = wordTemplate.split('|')\n\n  if (words.length === 1) return wordTemplate\n\n  return count > 1 ? words[1].trim() : words[0].trim()\n}\n\nexport function makeSentence(words: string, wordSpace = globalLocal.value.wordSpace ?? false) {\n  return !wordSpace ? words.replace(/\\s+/g, '') : words\n}\n\nexport function getStepByWord(wordTemplate: string, step: number) {\n  return wordTemplate.replace(/{n}/g, `${step}`)\n}\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n  /^([A-Z])|[\\s-_]+(\\w)/g,\n  (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n  const camelCase = toCamelCase(string);\n  return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n  return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 24,\n  height: 24,\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": 2,\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport defaultAttributes from './defaultAttributes.js';\n\nconst Icon = ({ size, strokeWidth = 2, absoluteStrokeWidth, color, iconNode, name, class: classes, ...props }, { slots }) => {\n  return h(\n    \"svg\",\n    {\n      ...defaultAttributes,\n      width: size || defaultAttributes.width,\n      height: size || defaultAttributes.height,\n      stroke: color || defaultAttributes.stroke,\n      \"stroke-width\": absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n      class: mergeClasses(\n        \"lucide\",\n        ...name ? [`lucide-${toKebabCase(toPascalCase(name))}-icon`, `lucide-${toKebabCase(name)}`] : [\"lucide-icon\"]\n      ),\n      ...props\n    },\n    [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []]\n  );\n};\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => (props, { slots }) => h(\n  Icon,\n  {\n    ...props,\n    iconNode,\n    name: iconName\n  },\n  slots\n);\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowLeftRight = createLucideIcon(\"arrow-left-right\", [\n  [\"path\", { d: \"M8 3 4 7l4 4\", key: \"9rb6wj\" }],\n  [\"path\", { d: \"M4 7h16\", key: \"6tx8e3\" }],\n  [\"path\", { d: \"m16 21 4-4-4-4\", key: \"siv7j2\" }],\n  [\"path\", { d: \"M20 17H4\", key: \"h6l3hr\" }]\n]);\n\nexport { ArrowLeftRight as default };\n//# sourceMappingURL=arrow-left-right.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Calendar = createLucideIcon(\"calendar\", [\n  [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n  [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n  [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n]);\n\nexport { Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Check = createLucideIcon(\"check\", [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]);\n\nexport { Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"chevron-down\", [\n  [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronLeft = createLucideIcon(\"chevron-left\", [\n  [\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]\n]);\n\nexport { ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronRight = createLucideIcon(\"chevron-right\", [\n  [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronUp = createLucideIcon(\"chevron-up\", [\n  [\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]\n]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronsLeft = createLucideIcon(\"chevrons-left\", [\n  [\"path\", { d: \"m11 17-5-5 5-5\", key: \"13zhaf\" }],\n  [\"path\", { d: \"m18 17-5-5 5-5\", key: \"h8a8et\" }]\n]);\n\nexport { ChevronsLeft as default };\n//# sourceMappingURL=chevrons-left.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronsRight = createLucideIcon(\"chevrons-right\", [\n  [\"path\", { d: \"m6 17 5-5-5-5\", key: \"xnjwq\" }],\n  [\"path\", { d: \"m13 17 5-5-5-5\", key: \"17xmmf\" }]\n]);\n\nexport { ChevronsRight as default };\n//# sourceMappingURL=chevrons-right.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleAlert = createLucideIcon(\"circle-alert\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n  [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n]);\n\nexport { CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleCheck = createLucideIcon(\"circle-check\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleHelp = createLucideIcon(\"circle-help\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { CircleHelp as default };\n//# sourceMappingURL=circle-help.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleX = createLucideIcon(\"circle-x\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n  [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n]);\n\nexport { CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"clock\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CloudUpload = createLucideIcon(\"cloud-upload\", [\n  [\"path\", { d: \"M12 13v8\", key: \"1l5pq0\" }],\n  [\"path\", { d: \"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242\", key: \"1pljnt\" }],\n  [\"path\", { d: \"m8 17 4-4 4 4\", key: \"1quai1\" }]\n]);\n\nexport { CloudUpload as default };\n//# sourceMappingURL=cloud-upload.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Ellipsis = createLucideIcon(\"ellipsis\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n  [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n  [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n]);\n\nexport { Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst EyeOff = createLucideIcon(\"eye-off\", [\n  [\n    \"path\",\n    {\n      d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n      key: \"ct8e1f\"\n    }\n  ],\n  [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n  [\n    \"path\",\n    {\n      d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n      key: \"13bj9a\"\n    }\n  ],\n  [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n]);\n\nexport { EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Eye = createLucideIcon(\"eye\", [\n  [\n    \"path\",\n    {\n      d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n      key: \"1nclc0\"\n    }\n  ],\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n]);\n\nexport { Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileArchive = createLucideIcon(\"file-archive\", [\n  [\"path\", { d: \"M10 12v-1\", key: \"v7bkov\" }],\n  [\"path\", { d: \"M10 18v-2\", key: \"1cjy8d\" }],\n  [\"path\", { d: \"M10 7V6\", key: \"dljcrl\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\n    \"path\",\n    { d: \"M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01\", key: \"gkbcor\" }\n  ],\n  [\"circle\", { cx: \"10\", cy: \"20\", r: \"2\", key: \"1xzdoj\" }]\n]);\n\nexport { FileArchive as default };\n//# sourceMappingURL=file-archive.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileCode = createLucideIcon(\"file-code\", [\n  [\"path\", { d: \"M10 12.5 8 15l2 2.5\", key: \"1tg20x\" }],\n  [\"path\", { d: \"m14 12.5 2 2.5-2 2.5\", key: \"yinavb\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z\", key: \"1mlx9k\" }]\n]);\n\nexport { FileCode as default };\n//# sourceMappingURL=file-code.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileImage = createLucideIcon(\"file-image\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n  [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n]);\n\nexport { FileImage as default };\n//# sourceMappingURL=file-image.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileMusic = createLucideIcon(\"file-music\", [\n  [\"path\", { d: \"M10.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v8.4\", key: \"1d3kfm\" }],\n  [\"path\", { d: \"M8 18v-7.7L16 9v7\", key: \"1oie6o\" }],\n  [\"circle\", { cx: \"14\", cy: \"16\", r: \"2\", key: \"1bzzi3\" }],\n  [\"circle\", { cx: \"6\", cy: \"18\", r: \"2\", key: \"1fncim\" }]\n]);\n\nexport { FileMusic as default };\n//# sourceMappingURL=file-music.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"file-text\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n  [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n  [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileVideo = createLucideIcon(\"file-video\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"m10 11 5 3-5 3v-6Z\", key: \"7ntvm4\" }]\n]);\n\nexport { FileVideo as default };\n//# sourceMappingURL=file-video.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst File = createLucideIcon(\"file\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }]\n]);\n\nexport { File as default };\n//# sourceMappingURL=file.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FlipHorizontal = createLucideIcon(\"flip-horizontal\", [\n  [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3\", key: \"1i73f7\" }],\n  [\"path\", { d: \"M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3\", key: \"saxlbk\" }],\n  [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n  [\"path\", { d: \"M12 14v2\", key: \"8jcxud\" }],\n  [\"path\", { d: \"M12 8v2\", key: \"1woqiv\" }],\n  [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }]\n]);\n\nexport { FlipHorizontal as default };\n//# sourceMappingURL=flip-horizontal.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FlipVertical = createLucideIcon(\"flip-vertical\", [\n  [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3\", key: \"14bfxa\" }],\n  [\"path\", { d: \"M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3\", key: \"14rx03\" }],\n  [\"path\", { d: \"M4 12H2\", key: \"rhcxmi\" }],\n  [\"path\", { d: \"M10 12H8\", key: \"s88cx1\" }],\n  [\"path\", { d: \"M16 12h-2\", key: \"10asgb\" }],\n  [\"path\", { d: \"M22 12h-2\", key: \"14jgyd\" }]\n]);\n\nexport { FlipVertical as default };\n//# sourceMappingURL=flip-vertical.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Fullscreen = createLucideIcon(\"fullscreen\", [\n  [\"path\", { d: \"M3 7V5a2 2 0 0 1 2-2h2\", key: \"aa7l1z\" }],\n  [\"path\", { d: \"M17 3h2a2 2 0 0 1 2 2v2\", key: \"4qcy5o\" }],\n  [\"path\", { d: \"M21 17v2a2 2 0 0 1-2 2h-2\", key: \"6vwrx8\" }],\n  [\"path\", { d: \"M7 21H5a2 2 0 0 1-2-2v-2\", key: \"ioqczr\" }],\n  [\"rect\", { width: \"10\", height: \"8\", x: \"7\", y: \"8\", rx: \"1\", key: \"vys8me\" }]\n]);\n\nexport { Fullscreen as default };\n//# sourceMappingURL=fullscreen.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Funnel = createLucideIcon(\"funnel\", [\n  [\n    \"path\",\n    {\n      d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n      key: \"sc7q7i\"\n    }\n  ]\n]);\n\nexport { Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GripVertical = createLucideIcon(\"grip-vertical\", [\n  [\"circle\", { cx: \"9\", cy: \"12\", r: \"1\", key: \"1vctgf\" }],\n  [\"circle\", { cx: \"9\", cy: \"5\", r: \"1\", key: \"hp0tcf\" }],\n  [\"circle\", { cx: \"9\", cy: \"19\", r: \"1\", key: \"fkjjf6\" }],\n  [\"circle\", { cx: \"15\", cy: \"12\", r: \"1\", key: \"1tmaij\" }],\n  [\"circle\", { cx: \"15\", cy: \"5\", r: \"1\", key: \"19l28e\" }],\n  [\"circle\", { cx: \"15\", cy: \"19\", r: \"1\", key: \"f4zoj3\" }]\n]);\n\nexport { GripVertical as default };\n//# sourceMappingURL=grip-vertical.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Image = createLucideIcon(\"image\", [\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n  [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n  [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n]);\n\nexport { Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst IndentDecrease = createLucideIcon(\"indent-decrease\", [\n  [\"path\", { d: \"M21 12H11\", key: \"wd7e0v\" }],\n  [\"path\", { d: \"M21 18H11\", key: \"4wu86t\" }],\n  [\"path\", { d: \"M21 6H11\", key: \"6dy1d6\" }],\n  [\"path\", { d: \"m7 8-4 4 4 4\", key: \"o5hrat\" }]\n]);\n\nexport { IndentDecrease as default };\n//# sourceMappingURL=indent-decrease.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst IndentIncrease = createLucideIcon(\"indent-increase\", [\n  [\"path\", { d: \"M21 12H11\", key: \"wd7e0v\" }],\n  [\"path\", { d: \"M21 18H11\", key: \"4wu86t\" }],\n  [\"path\", { d: \"M21 6H11\", key: \"6dy1d6\" }],\n  [\"path\", { d: \"m3 8 4 4-4 4\", key: \"1a3j6y\" }]\n]);\n\nexport { IndentIncrease as default };\n//# sourceMappingURL=indent-increase.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Info = createLucideIcon(\"info\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n  [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n]);\n\nexport { Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"loader-circle\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LogOut = createLucideIcon(\"log-out\", [\n  [\"path\", { d: \"m16 17 5-5-5-5\", key: \"1bji2h\" }],\n  [\"path\", { d: \"M21 12H9\", key: \"dn1m92\" }],\n  [\"path\", { d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\", key: \"1uf3rs\" }]\n]);\n\nexport { LogOut as default };\n//# sourceMappingURL=log-out.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Maximize = createLucideIcon(\"maximize\", [\n  [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v3\", key: \"1dcmit\" }],\n  [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2h-3\", key: \"1e4gt3\" }],\n  [\"path\", { d: \"M3 16v3a2 2 0 0 0 2 2h3\", key: \"wsl5sc\" }],\n  [\"path\", { d: \"M16 21h3a2 2 0 0 0 2-2v-3\", key: \"18trek\" }]\n]);\n\nexport { Maximize as default };\n//# sourceMappingURL=maximize.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MessageCircleQuestion = createLucideIcon(\"message-circle-question\", [\n  [\"path\", { d: \"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\", key: \"vv11sd\" }],\n  [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { MessageCircleQuestion as default };\n//# sourceMappingURL=message-circle-question.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Minimize = createLucideIcon(\"minimize\", [\n  [\"path\", { d: \"M8 3v3a2 2 0 0 1-2 2H3\", key: \"hohbtr\" }],\n  [\"path\", { d: \"M21 8h-3a2 2 0 0 1-2-2V3\", key: \"5jw1f3\" }],\n  [\"path\", { d: \"M3 16h3a2 2 0 0 1 2 2v3\", key: \"198tvr\" }],\n  [\"path\", { d: \"M16 21v-3a2 2 0 0 1 2-2h3\", key: \"ph8mxp\" }]\n]);\n\nexport { Minimize as default };\n//# sourceMappingURL=minimize.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Minus = createLucideIcon(\"minus\", [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]]);\n\nexport { Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Moon = createLucideIcon(\"moon\", [\n  [\"path\", { d: \"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\", key: \"a7tn18\" }]\n]);\n\nexport { Moon as default };\n//# sourceMappingURL=moon.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Pause = createLucideIcon(\"pause\", [\n  [\"rect\", { x: \"14\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"zuxfzm\" }],\n  [\"rect\", { x: \"6\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"1okwgv\" }]\n]);\n\nexport { Pause as default };\n//# sourceMappingURL=pause.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst PictureInPicture = createLucideIcon(\"picture-in-picture\", [\n  [\"path\", { d: \"M2 10h6V4\", key: \"zwrco\" }],\n  [\"path\", { d: \"m2 4 6 6\", key: \"ug085t\" }],\n  [\"path\", { d: \"M21 10V7a2 2 0 0 0-2-2h-7\", key: \"git5jr\" }],\n  [\"path\", { d: \"M3 14v2a2 2 0 0 0 2 2h3\", key: \"1f7fh3\" }],\n  [\"rect\", { x: \"12\", y: \"14\", width: \"10\", height: \"7\", rx: \"1\", key: \"1wjs3o\" }]\n]);\n\nexport { PictureInPicture as default };\n//# sourceMappingURL=picture-in-picture.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Play = createLucideIcon(\"play\", [\n  [\"polygon\", { points: \"6 3 20 12 6 21 6 3\", key: \"1oa8hb\" }]\n]);\n\nexport { Play as default };\n//# sourceMappingURL=play.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Plus = createLucideIcon(\"plus\", [\n  [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n  [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n]);\n\nexport { Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RefreshCw = createLucideIcon(\"refresh-cw\", [\n  [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n  [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n  [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n  [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n]);\n\nexport { RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Repeat2 = createLucideIcon(\"repeat-2\", [\n  [\"path\", { d: \"m2 9 3-3 3 3\", key: \"1ltn5i\" }],\n  [\"path\", { d: \"M13 18H7a2 2 0 0 1-2-2V6\", key: \"1r6tfw\" }],\n  [\"path\", { d: \"m22 15-3 3-3-3\", key: \"4rnwn2\" }],\n  [\"path\", { d: \"M11 6h6a2 2 0 0 1 2 2v10\", key: \"2f72bc\" }]\n]);\n\nexport { Repeat2 as default };\n//# sourceMappingURL=repeat-2.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", [\n  [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n  [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n]);\n\nexport { RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RotateCw = createLucideIcon(\"rotate-cw\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\", key: \"1p45f6\" }],\n  [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }]\n]);\n\nexport { RotateCw as default };\n//# sourceMappingURL=rotate-cw.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Search = createLucideIcon(\"search\", [\n  [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n]);\n\nexport { Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Siren = createLucideIcon(\"siren\", [\n  [\"path\", { d: \"M7 18v-6a5 5 0 1 1 10 0v6\", key: \"pcx96s\" }],\n  [\n    \"path\",\n    { d: \"M5 21a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2z\", key: \"1b4s83\" }\n  ],\n  [\"path\", { d: \"M21 12h1\", key: \"jtio3y\" }],\n  [\"path\", { d: \"M18.5 4.5 18 5\", key: \"g5sp9y\" }],\n  [\"path\", { d: \"M2 12h1\", key: \"1uaihz\" }],\n  [\"path\", { d: \"M12 2v1\", key: \"11qlp1\" }],\n  [\"path\", { d: \"m4.929 4.929.707.707\", key: \"1i51kw\" }],\n  [\"path\", { d: \"M12 12v6\", key: \"3ahymv\" }]\n]);\n\nexport { Siren as default };\n//# sourceMappingURL=siren.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SkipBack = createLucideIcon(\"skip-back\", [\n  [\"polygon\", { points: \"19 20 9 12 19 4 19 20\", key: \"o2sva\" }],\n  [\"line\", { x1: \"5\", x2: \"5\", y1: \"19\", y2: \"5\", key: \"1ocqjk\" }]\n]);\n\nexport { SkipBack as default };\n//# sourceMappingURL=skip-back.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SkipForward = createLucideIcon(\"skip-forward\", [\n  [\"polygon\", { points: \"5 4 15 12 5 20 5 4\", key: \"16p6eg\" }],\n  [\"line\", { x1: \"19\", x2: \"19\", y1: \"5\", y2: \"19\", key: \"futhcm\" }]\n]);\n\nexport { SkipForward as default };\n//# sourceMappingURL=skip-forward.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquareMinus = createLucideIcon(\"square-minus\", [\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n  [\"path\", { d: \"M8 12h8\", key: \"1wcyev\" }]\n]);\n\nexport { SquareMinus as default };\n//# sourceMappingURL=square-minus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquarePlus = createLucideIcon(\"square-plus\", [\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n  [\"path\", { d: \"M8 12h8\", key: \"1wcyev\" }],\n  [\"path\", { d: \"M12 8v8\", key: \"napkw2\" }]\n]);\n\nexport { SquarePlus as default };\n//# sourceMappingURL=square-plus.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Sun = createLucideIcon(\"sun\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n  [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n  [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n  [\"path\", { d: \"m4.93 4.93 1.41 1.41\", key: \"149t6j\" }],\n  [\"path\", { d: \"m17.66 17.66 1.41 1.41\", key: \"ptbguv\" }],\n  [\"path\", { d: \"M2 12h2\", key: \"1t8f8n\" }],\n  [\"path\", { d: \"M20 12h2\", key: \"1q8mjw\" }],\n  [\"path\", { d: \"m6.34 17.66-1.41 1.41\", key: \"1m8zz5\" }],\n  [\"path\", { d: \"m19.07 4.93-1.41 1.41\", key: \"1shlcs\" }]\n]);\n\nexport { Sun as default };\n//# sourceMappingURL=sun.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Trash2 = createLucideIcon(\"trash-2\", [\n  [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n  [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n  [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }],\n  [\"line\", { x1: \"10\", x2: \"10\", y1: \"11\", y2: \"17\", key: \"1uufr5\" }],\n  [\"line\", { x1: \"14\", x2: \"14\", y1: \"11\", y2: \"17\", key: \"xtxkd\" }]\n]);\n\nexport { Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Upload = createLucideIcon(\"upload\", [\n  [\"path\", { d: \"M12 3v12\", key: \"1x0j5s\" }],\n  [\"path\", { d: \"m17 8-5-5-5 5\", key: \"7q97r8\" }],\n  [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }]\n]);\n\nexport { Upload as default };\n//# sourceMappingURL=upload.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst UserRound = createLucideIcon(\"user-round\", [\n  [\"circle\", { cx: \"12\", cy: \"8\", r: \"5\", key: \"1hypcn\" }],\n  [\"path\", { d: \"M20 21a8 8 0 0 0-16 0\", key: \"rfgkzh\" }]\n]);\n\nexport { UserRound as default };\n//# sourceMappingURL=user-round.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Volume1 = createLucideIcon(\"volume-1\", [\n  [\n    \"path\",\n    {\n      d: \"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\",\n      key: \"uqj9uw\"\n    }\n  ],\n  [\"path\", { d: \"M16 9a5 5 0 0 1 0 6\", key: \"1q6k2b\" }]\n]);\n\nexport { Volume1 as default };\n//# sourceMappingURL=volume-1.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Volume2 = createLucideIcon(\"volume-2\", [\n  [\n    \"path\",\n    {\n      d: \"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\",\n      key: \"uqj9uw\"\n    }\n  ],\n  [\"path\", { d: \"M16 9a5 5 0 0 1 0 6\", key: \"1q6k2b\" }],\n  [\"path\", { d: \"M19.364 18.364a9 9 0 0 0 0-12.728\", key: \"ijwkga\" }]\n]);\n\nexport { Volume2 as default };\n//# sourceMappingURL=volume-2.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst VolumeX = createLucideIcon(\"volume-x\", [\n  [\n    \"path\",\n    {\n      d: \"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\",\n      key: \"uqj9uw\"\n    }\n  ],\n  [\"line\", { x1: \"22\", x2: \"16\", y1: \"9\", y2: \"15\", key: \"1ewh16\" }],\n  [\"line\", { x1: \"16\", x2: \"22\", y1: \"9\", y2: \"15\", key: \"5ykzw1\" }]\n]);\n\nexport { VolumeX as default };\n//# sourceMappingURL=volume-x.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst X = createLucideIcon(\"x\", [\n  [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n  [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n]);\n\nexport { X as default };\n//# sourceMappingURL=x.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ZoomIn = createLucideIcon(\"zoom-in\", [\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n  [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n  [\"line\", { x1: \"11\", x2: \"11\", y1: \"8\", y2: \"14\", key: \"1vmskp\" }],\n  [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n]);\n\nexport { ZoomIn as default };\n//# sourceMappingURL=zoom-in.js.map\n","/**\n * @license lucide-vue-next v0.511.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ZoomOut = createLucideIcon(\"zoom-out\", [\n  [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n  [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n  [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n]);\n\nexport { ZoomOut as default };\n//# sourceMappingURL=zoom-out.js.map\n","import { computed, getCurrentScope, inject, markRaw, provide, unref } from 'vue'\n\nimport {\n  AlertCircle,\n  ArrowLeftRight,\n  Calendar,\n  Check,\n  CheckCircle2,\n  ChevronDown,\n  ChevronLeft,\n  ChevronRight,\n  ChevronUp,\n  ChevronsLeft,\n  ChevronsRight,\n  Clock,\n  Eye,\n  EyeOff,\n  File,\n  FileArchive,\n  FileCode,\n  FileImage,\n  FileMusic,\n  FileText,\n  FileVideo,\n  Filter,\n  FlipHorizontal,\n  FlipVertical,\n  Fullscreen,\n  GripVertical,\n  HelpCircle,\n  Image,\n  Indent,\n  Info,\n  Loader2,\n  LogOut,\n  Maximize,\n  MessageCircleQuestion,\n  Minimize,\n  Minus,\n  MinusSquare,\n  Moon,\n  MoreHorizontal,\n  Outdent,\n  Pause,\n  PictureInPicture,\n  Play,\n  Plus,\n  PlusSquare,\n  RefreshCw,\n  Repeat2,\n  RotateCcw,\n  RotateCw,\n  Search,\n  Siren,\n  SkipBack,\n  SkipForward,\n  Sun,\n  Trash2,\n  Upload,\n  UploadCloud,\n  UserRound,\n  Volume1,\n  Volume2,\n  VolumeX,\n  X,\n  XCircle,\n  ZoomIn,\n  ZoomOut,\n} from 'lucide-vue-next'\nimport { ensureArray } from '@vexip-ui/utils'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\nimport type { ClassType, StyleType } from './props'\n\nexport const PROVIDED_ICONS = '__vxp-provided-icons'\n\nexport type IconValue = Record<string, any> | (() => any)\n\nexport interface IconOptions extends Record<string, any> {\n  class?: ClassType,\n  style?: StyleType,\n  scale?: number | string,\n  title?: string,\n  label?: string,\n  flip?: 'horizontal' | 'vertical' | 'both',\n  effect?: string,\n  size?: string,\n  color?: string,\n  rotate?: number | string,\n}\n\nexport type IconArrayValue = [IconValue, IconOptions?]\nexport type IconConfig = IconValue | IconArrayValue\n\nexport interface IconsOptions {\n  loading?: IconConfig,\n  clear?: IconConfig,\n  close?: IconConfig,\n  calendar?: IconConfig,\n  clock?: IconConfig,\n  exchange?: IconConfig,\n  angleUp?: IconConfig,\n  angleRight?: IconConfig,\n  angleDown?: IconConfig,\n  angleLeft?: IconConfig,\n  anglesRight?: IconConfig,\n  anglesLeft?: IconConfig,\n  retweet?: IconConfig,\n  refresh?: IconConfig,\n  filter?: IconConfig,\n  ellipsis?: IconConfig,\n  upload?: IconConfig,\n  uploadCloud?: IconConfig,\n  check?: IconConfig,\n  help?: IconConfig,\n  alert?: IconConfig,\n  question?: IconConfig,\n  info?: IconConfig,\n  success?: IconConfig,\n  warning?: IconConfig,\n  error?: IconConfig,\n  delete?: IconConfig,\n  preview?: IconConfig,\n  image?: IconConfig,\n  plus?: IconConfig,\n  minus?: IconConfig,\n  plusSquare?: IconConfig,\n  minusSquare?: IconConfig,\n  cipherText?: IconConfig,\n  plainText?: IconConfig,\n  user?: IconConfig,\n  light?: IconConfig,\n  dark?: IconConfig,\n  signOut?: IconConfig,\n  indent?: IconConfig,\n  outdent?: IconConfig,\n  search?: IconConfig,\n  rotateRight?: IconConfig,\n  rotateLeft?: IconConfig,\n  flipX?: IconConfig,\n  flipY?: IconConfig,\n  zoomIn?: IconConfig,\n  zoonOut?: IconConfig,\n  fullScreen?: IconConfig,\n  resetScreen?: IconConfig,\n  dragger?: IconConfig,\n  file?: IconConfig,\n  fileText?: IconConfig,\n  fileCode?: IconConfig,\n  fileImage?: IconConfig,\n  fileAudio?: IconConfig,\n  fileVideo?: IconConfig,\n  fileZip?: IconConfig,\n  volume?: IconConfig,\n  volumeLow?: IconConfig,\n  volumeMute?: IconConfig,\n  play?: IconConfig,\n  pause?: IconConfig,\n  fullWindow?: IconConfig,\n  pip?: IconConfig,\n  playState?: IconConfig,\n  pauseState?: IconConfig,\n  playPrev?: IconConfig,\n  playNext?: IconConfig,\n}\n\nexport type IconName = keyof IconsOptions\nexport type IconsConfig = {\n  [K in keyof IconsOptions]-?: IconConfig\n}\nexport type NormalizedIconsConfig = Record<IconName, IconOptions & { icon: IconValue }>\n\nconst iconMap: IconsConfig = {\n  loading: [Loader2, { effect: 'spin-in' }],\n  clear: XCircle,\n  close: X,\n  calendar: Calendar,\n  clock: Clock,\n  exchange: ArrowLeftRight,\n  angleUp: ChevronUp,\n  angleRight: ChevronRight,\n  angleDown: ChevronDown,\n  angleLeft: ChevronLeft,\n  anglesRight: ChevronsRight,\n  anglesLeft: ChevronsLeft,\n  retweet: Repeat2,\n  refresh: RefreshCw,\n  filter: Filter,\n  ellipsis: MoreHorizontal,\n  upload: Upload,\n  uploadCloud: UploadCloud,\n  check: Check,\n  help: HelpCircle,\n  alert: Siren,\n  question: MessageCircleQuestion,\n  info: Info,\n  success: CheckCircle2,\n  warning: AlertCircle,\n  error: XCircle,\n  delete: Trash2,\n  preview: Eye,\n  image: Image,\n  plus: Plus,\n  minus: Minus,\n  plusSquare: PlusSquare,\n  minusSquare: MinusSquare,\n  cipherText: EyeOff,\n  plainText: Eye,\n  user: UserRound,\n  light: Sun,\n  dark: Moon,\n  signOut: LogOut,\n  indent: Indent,\n  outdent: Outdent,\n  search: Search,\n  rotateRight: RotateCw,\n  rotateLeft: RotateCcw,\n  flipX: FlipHorizontal,\n  flipY: FlipVertical,\n  zoomIn: ZoomIn,\n  zoonOut: ZoomOut,\n  fullScreen: Maximize,\n  resetScreen: Minimize,\n  dragger: GripVertical,\n  file: File,\n  fileText: FileText,\n  fileCode: FileCode,\n  fileImage: FileImage,\n  fileAudio: FileMusic,\n  fileVideo: FileVideo,\n  fileZip: FileArchive,\n  volume: Volume2,\n  volumeLow: Volume1,\n  volumeMute: VolumeX,\n  play: Play,\n  pause: Pause,\n  fullWindow: Fullscreen,\n  pip: PictureInPicture,\n  playState: Play,\n  pauseState: Pause,\n  playPrev: SkipBack,\n  playNext: SkipForward,\n}\n\nexport const iconNames = Object.freeze(Object.keys(iconMap) as IconName[])\n\nexport const globalIcons = computed(() => {\n  const icons = {} as NormalizedIconsConfig\n\n  for (const name of iconNames) {\n    const [icon, options = {}] = ensureArray(iconMap[name]) as [Record<string, any>, IconOptions?]\n\n    icons[name] = { ...options, icon }\n  }\n\n  return icons\n})\n\n/**\n * Provide a icons config for under components.\n *\n * @param icons icons config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configIcons(icons: MaybeRef<IconsOptions>, app?: App) {\n  const upstreamIcons =\n    app || !getCurrentScope()\n      ? globalIcons\n      : inject<ComputedRef<IconsConfig> | null>(PROVIDED_ICONS, null)\n  const normalizedIcons = computed(() => {\n    const normalizedIcons = {} as IconsConfig\n    const unrefIcons = unref(icons)\n\n    for (const name of iconNames) {\n      const config = unrefIcons[name]\n\n      if (!config) {\n        normalizedIcons[name] = upstreamIcons?.value[name] || globalIcons.value[name]\n      } else {\n        const [icon, options = {}] = ensureArray(config) as IconArrayValue\n        const normalizedIcon = typeof icon === 'function' ? icon : markRaw(icon)\n\n        normalizedIcons[name] = { ...options, icon: normalizedIcon }\n      }\n    }\n\n    return normalizedIcons\n  })\n\n  if (app) {\n    app.provide(PROVIDED_ICONS, normalizedIcons)\n  } else {\n    provide(PROVIDED_ICONS, normalizedIcons)\n  }\n}\n\nexport function useIcons() {\n  return inject<ComputedRef<NormalizedIconsConfig>>(PROVIDED_ICONS, globalIcons)\n}\n","import type { BEM, NBEM } from './types'\n\nexport * from './types'\n\n/**\n * Get `--variable` CSS variable.\n *\n * @param v the variable\n */\nexport const cv = <V extends string>(v: V) => `--${v}` as const\n/**\n * Get `var(--variable)` CSS style value.\n *\n * @param v the variable\n */\nexport const gcv = <V extends string>(v: V) => `var(--${v})` as const\n/**\n * Get `--variable: style;` CSS style content.\n *\n * @param v the variable\n * @param s the style\n */\nexport const scv = <V extends string, S extends string>(v: V, s: S) => `--${v}: ${s};` as const\n\nexport function useBEM<B extends string>(block: B): BEM<B>\nexport function useBEM<B extends string, N extends string>(block: B, namespace: N): NBEM<B, N>\nexport function useBEM<B extends string, N extends string>(\n  block: B,\n  namespace: (isVar?: boolean) => N\n): NBEM<B, N>\nexport function useBEM<B extends string, N extends string>(\n  block: B,\n  namespace?: N | ((isVar?: boolean) => N),\n) {\n  if (!namespace) {\n    return <BEM<B>>{\n      b: () => `${block}`,\n      be: e => `${block}__${e}`,\n      bm: m => `${block}--${m}`,\n      bem: (e, m) => `${block}__${e}--${m}`,\n      bs: s => `${block}-${s}`,\n\n      cb: () => `.${block}`,\n      cbe: e => `.${block}__${e}`,\n      cbm: m => `.${block}--${m}`,\n      cbem: (e, m) => `.${block}__${e}--${m}`,\n      cbs: s => `.${block}-${s}`,\n\n      cv: v => cv(`${block}-${v}`),\n      cvm: (m, s = {} as any) => {\n        for (const key of Object.keys(m)) {\n          s[cv(`${block}-${key}`)] = m[key]\n        }\n\n        return s\n      },\n      gcv: v => gcv(`${block}-${v}`),\n      scv: (v, s) => scv(`${block}-${v}`, s),\n    }\n  }\n\n  const n = (isVar?: boolean) => (typeof namespace === 'function' ? namespace(isVar) : namespace)\n\n  return <NBEM<B, N>>{\n    b: () => `${n()}-${block}`,\n    be: e => `${n()}-${block}__${e}`,\n    bm: m => `${n()}-${block}--${m}`,\n    bem: (e, m) => `${n()}-${block}__${e}--${m}`,\n    bs: s => `${n()}-${block}-${s}`,\n    ns: s => `${n()}-${s}`,\n\n    cb: () => `.${n()}-${block}`,\n    cbe: e => `.${n()}-${block}__${e}`,\n    cbm: m => `.${n()}-${block}--${m}`,\n    cbem: (e, m) => `.${n()}-${block}__${e}--${m}`,\n    cbs: s => `.${n()}-${block}-${s}`,\n    cns: s => `.${n()}-${s}`,\n\n    cv: v => cv(`${n(true)}-${block}-${v}`),\n    cvm: (m, s = {} as any) => {\n      const namespace = n(true)\n\n      for (const key of Object.keys(m)) {\n        s[cv(`${namespace}-${block}-${key}`)] = m[key]\n      }\n\n      return s\n    },\n    gcv: v => gcv(`${n(true)}-${block}-${v}`),\n    scv: (v, s) => scv(`${n(true)}-${block}-${v}`, s),\n    nv: v => cv(`${n(true)}-${v}`),\n    nvm: (m, s = {} as any) => {\n      const namespace = n(true)\n\n      for (const key of Object.keys(m)) {\n        s[cv(`${namespace}-${key}`)] = m[key]\n      }\n\n      return s\n    },\n    gnv: v => gcv(`${n(true)}-${v}`),\n    snv: (v, s) => scv(`${n(true)}-${v}`, s),\n  }\n}\n","import { computed, inject, provide, unref } from 'vue'\n\nimport { useBEM } from '@vexip-ui/bem-helper'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\n\nexport type Namespace = 'vxp'\n\nexport const PROVIDED_NAMESPACE = '__vxp-provided-namespace'\nexport const globalNamespace = computed(() => 'vxp' as Namespace)\n\n/**\n * Provide a namespace config for under components.\n *\n * You only should use this method when initialize application.\n *\n * @param sourceNamespace namespace config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configNamespace<N extends string = Namespace>(\n  sourceNamespace: MaybeRef<N>,\n  app?: App,\n) {\n  if (app) {\n    const namespace = computed(() => {\n      const namespace = unref(sourceNamespace)\n\n      return namespace || globalNamespace.value\n    })\n\n    app.provide(PROVIDED_NAMESPACE, namespace)\n  } else {\n    const upstreamNamespace = inject<ComputedRef<string> | null>(PROVIDED_NAMESPACE, null)\n    const namespace = computed(() => {\n      return unref(sourceNamespace) || upstreamNamespace?.value || globalNamespace.value\n    })\n\n    provide(PROVIDED_NAMESPACE, namespace)\n  }\n}\n\nexport function useNamespace<N extends string = Namespace>() {\n  return inject(PROVIDED_NAMESPACE, globalNamespace) as ComputedRef<N>\n}\n\n/**\n * Create a name helper for BEM.\n *\n * For css vars name, the namespace is fixed to 'vxp' (not responsive).\n */\nexport function useNameHelper<B extends string, N extends string = Namespace>(\n  block: B,\n  namespace: MaybeRef<N> = useNamespace(),\n) {\n  return useBEM(block, isVar => (isVar ? 'vxp' : unref(namespace)))\n}\n\nexport type NameHelper = ReturnType<typeof useNameHelper>\n","import { getCurrentInstance, inject, provide, readonly, shallowRef, unref, watchEffect } from 'vue'\n\nimport { useNamespace } from './namespace'\n\nimport type { App, MaybeRef } from 'vue'\n\nexport const PROVIDED_ID_CONTER = '__vxp-provided-id-counter'\n\nexport interface IDCounter {\n  getNext: () => number | string,\n}\n\nclass VxpIDCounter implements IDCounter {\n  private current: number\n\n  constructor({ current = 0 }: { current?: number } = {}) {\n    this.current = current\n  }\n\n  getNext() {\n    return this.current++\n  }\n}\n\nconst defaultCounter = new VxpIDCounter()\n\n/**\n * Provide a id counter config for under components.\n *\n * You only should use this method when initialize application.\n *\n * @param sourceCounter id counter config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configIdCounter(sourceCounter: IDCounter = defaultCounter, app?: App) {\n  if (app) {\n    app.provide(PROVIDED_ID_CONTER, sourceCounter)\n  } else {\n    const upstreamCounter = inject<IDCounter | null>(PROVIDED_ID_CONTER, null)\n\n    provide(PROVIDED_ID_CONTER, sourceCounter || upstreamCounter)\n  }\n}\n\nexport function useId(customId?: MaybeRef<string>) {\n  const namespace = useNamespace()\n  const counter = getCurrentInstance()\n    ? inject<IDCounter>(PROVIDED_ID_CONTER, defaultCounter)\n    : defaultCounter\n\n  const id = shallowRef()\n\n  watchEffect(\n    () => {\n      id.value = unref(customId) || `${namespace.value}-id-${counter.getNext()}`\n    },\n    { flush: 'sync' },\n  )\n\n  return readonly(id)\n}\n","import { computed, inject, provide, reactive, unref, watch } from 'vue'\n\nimport { has, isFunction, isNull, isObject, mergeObjects } from '@vexip-ui/utils'\n\nimport type {\n  App,\n  CSSProperties,\n  ComponentObjectPropsOptions,\n  ComputedRef,\n  MaybeRef,\n  PropType,\n} from 'vue'\nimport type { LocaleConfig, LocaleNames } from './locale'\nimport type { AnyFunction, EnsureValue, Expand, MaybeFunction, VoidFunction } from './types'\n\nexport type PropsOptions = Record<string, Record<string, unknown>>\n\ninterface PropsConfig<T = any> {\n  /**\n   * The default value of the prop\n   */\n  default: T | (() => T) | null,\n  /**\n   * Whether the prop is a function type\n   *\n   * @default false\n   */\n  isFunc?: boolean,\n  /**\n   * Whether the prop is not configurable\n   *\n   * @default false\n   */\n  static?: boolean,\n  /**\n   * Whether the prop is required\n   *\n   * @default false\n   */\n  required?: boolean,\n  /**\n   * The validator for the prop, decide whether the value of the prop is valid\n   *\n   * @param value the value of the prop\n   */\n  validator?: (value: T) => any,\n}\n\ntype PropsConfigOptions<T> = {\n  [K in keyof T]?:\n    | PropsConfig<EnsureValue<T[K]>>\n    | EnsureValue<T[K]>\n    | (() => EnsureValue<T[K]>)\n    | null\n}\n\nexport const PROVIDED_PROPS = '__vxp-provided-props'\nconst eventPropRE = /^on[A-Z]/\n\n/**\n * Provide a props config for under components.\n *\n * @param props props config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configProps<T>(props: MaybeRef<T>, app?: App) {\n  if (app) {\n    app.provide(\n      PROVIDED_PROPS,\n      computed(() => unref(props)),\n    )\n  } else {\n    const upstreamProps = inject<ComputedRef<Record<string, any>> | null>(PROVIDED_PROPS, null)\n    const providedProps = computed(() => {\n      if (!upstreamProps?.value) {\n        return unref(props)\n      }\n\n      return mergeObjects(upstreamProps.value, unref(props) as any)\n    })\n\n    provide(PROVIDED_PROPS, providedProps)\n  }\n}\n\nexport function useProps<T extends Record<string, any>>(\n  name: string,\n  sourceProps: T,\n  config: PropsConfigOptions<T> = {},\n) {\n  const providedProps = inject<ComputedRef<Record<string, PropsConfigOptions<T>>> | null>(\n    PROVIDED_PROPS,\n    null,\n  )\n  const commonProps = computed<PropsConfigOptions<T>>(() => {\n    return providedProps?.value?.default ?? {}\n  })\n  const configProps = computed<PropsConfigOptions<T>>(() => {\n    return providedProps?.value?.[name] ?? {}\n  })\n  const keys = Object.keys(sourceProps) as Array<keyof T>\n  const props: {\n    [P in keyof T]?: ComputedRef<T[P]>\n  } = {}\n\n  keys.forEach(key => {\n    const defs = config[key]\n    const propOptions = (\n      isObject(defs) && has(defs, 'default') ? defs : { default: defs }\n    ) as PropsConfig<T[keyof T]>\n    const validator = isFunction(propOptions.validator) ? propOptions.validator : null\n    const defaultValue = propOptions.default\n    const isFunc = isNull(propOptions.isFunc) ? eventPropRE.test(String(key)) : propOptions.isFunc\n    const getValue = (value: PropsConfigOptions<T>[keyof T]) =>\n      !isFunc && isFunction(value) ? value() : value\n    const getDefault = () =>\n      (!isFunc && isFunction(defaultValue) ? defaultValue() : defaultValue) as T[keyof T]\n\n    ;(propOptions.required || validator) &&\n      watch(\n        () => sourceProps[key],\n        value => {\n          if (isNull(value)) {\n            if (propOptions.required) {\n              console.warn(`${toWarnPrefix(name)}: '${key as string}' prop is required but not set`)\n            }\n\n            return\n          } else if (!validator) {\n            return\n          }\n\n          const result = validator(value)\n\n          if (result === false) {\n            console.warn(\n              `${toWarnPrefix(name)}: an invalid value is set to '${key as string}' prop`,\n            )\n          }\n        },\n        { immediate: true },\n      )\n\n    if (propOptions.static) {\n      props[key] = computed(() => sourceProps[key] ?? getDefault())\n    } else {\n      props[key] = computed(() => {\n        if (isNull(sourceProps[key])) {\n          if (!isNull(configProps.value[key])) {\n            return getValue(configProps.value[key])\n          }\n          if (!isNull(commonProps.value[key])) {\n            return getValue(commonProps.value[key])\n          }\n\n          return getDefault()\n        }\n\n        return sourceProps[key]\n      })\n    }\n  })\n\n  return reactive(props) as {\n    [P in keyof T]-?: Exclude<T[P], undefined>\n  }\n}\n\nexport function useHookProps<T extends Record<any, any>>(\n  props: T,\n  defaults: { [K in keyof T]: T[K] | null },\n) {\n  const propsWithDefault: { [P in keyof T]?: ComputedRef<T[P]> } = {}\n\n  for (const key of Object.keys(props) as (keyof T)[]) {\n    propsWithDefault[key] = computed(() => props[key] ?? defaults[key]!)\n  }\n\n  return reactive(propsWithDefault) as {\n    [P in keyof T]-?: Exclude<T[P], undefined>\n  }\n}\n\nfunction toWarnPrefix(name: string) {\n  return `[vexip-ui:${name.charAt(0).toLocaleUpperCase() + name.substring(1)}]`\n}\n\nexport const booleanProp = {\n  type: Boolean,\n  default: null,\n}\nexport const booleanStringProp = {\n  type: [Boolean, String],\n  default: null,\n}\nexport const booleanNumberProp = {\n  type: [Boolean, Number],\n  default: null,\n}\n\ntype CommonExcludedProps =\n  | 'inherit'\n  | 'value'\n  | 'checked'\n  | 'active'\n  | 'visible'\n  | 'label'\n  | 'options'\n  | 'name'\ntype ExcludeProps<P, E extends string = never, I extends string = never> =\n  | Exclude<CommonExcludedProps, I>\n  | Exclude<E, I>\n  | (P extends I ? never : P extends `on${Capitalize<string>}` ? P : never)\ntype PostProps<T, E extends string> = Omit<{ [P in keyof T]: MaybeFunction<T[P]> }, E>\n\n/**\n * Create a configurable props\n *\n * @param T the type of import('vue').ExtractPropTypes\n * @param E the props should force exclude\n * @param I the props should force include\n */\nexport type ConfigurableProps<T, E extends string = never, I extends string = never> = PostProps<\n  {\n    [P in keyof T]?: P extends I\n      ? T[P]\n      : P extends `on${Capitalize<string>}`\n        ? never\n        : T[Exclude<P, CommonExcludedProps | E>]\n  },\n  ExcludeProps<keyof T, E, I>\n>\n\ntype VexipProps<T> = {\n  [P in keyof T]: T[P] extends PropType<infer I>\n    ? PropType<I & {}>\n    : T[P] extends { type: PropType<infer I> }\n      ? PropType<I & {}>\n      : T[P]\n}\n\nexport function wrapProps<T extends ComponentObjectPropsOptions>(props: T) {\n  return Object.freeze(props) as Expand<T>\n}\n\nexport function buildProps<T extends ComponentObjectPropsOptions>(props: T) {\n  const common = {\n    inherit: booleanProp,\n  }\n\n  return Object.freeze({ ...common, ...props }) as Expand<VexipProps<typeof common & T>>\n}\n\nexport function omitProps<T extends ComponentObjectPropsOptions, K extends keyof T>(\n  props: T,\n  keys: K[],\n): Expand<Omit<T, K>>\nexport function omitProps<\n  T extends ComponentObjectPropsOptions,\n  K extends keyof T,\n  E extends ComponentObjectPropsOptions,\n>(props: T, keys: K[], extra: E): Expand<Omit<T, K> & E>\nexport function omitProps<\n  T extends ComponentObjectPropsOptions,\n  K extends keyof T,\n  E extends ComponentObjectPropsOptions,\n>(props: T, keys: K[], extra?: E) {\n  const omittedKeys = new Set(keys)\n\n  return Object.freeze(\n    Object.assign(\n      (Object.keys(props) as any[]).reduce((prev, current) => {\n        if (!omittedKeys.has(current)) {\n          prev[current] = props[current]\n        }\n\n        return prev\n      }, {}),\n      extra || {},\n    ),\n  )\n}\n\nexport type ComponentSize = 'small' | 'default' | 'large'\n\nexport const sizeProp = String as PropType<ComponentSize>\nconst validSizeValues: ComponentSize[] = ['small', 'default', 'large']\nconst sizeValidator = (value: ComponentSize) => validSizeValues.includes(value)\n\nexport function createSizeProp(defaultValue: MaybeRef<ComponentSize> = 'default') {\n  return {\n    default: () => unref(defaultValue),\n    validator: sizeValidator,\n  }\n}\n\nexport type ComponentState = 'default' | 'success' | 'error' | 'warning'\n\nexport const stateProp = String as PropType<ComponentState>\nconst validStateValues: ComponentState[] = ['default', 'success', 'error', 'warning']\nconst stateValidator = (value: ComponentState) => validStateValues.includes(value)\n\nexport function createStateProp(defaultValue: MaybeRef<ComponentState> = 'default') {\n  return {\n    default: () => unref(defaultValue),\n    validator: stateValidator,\n  }\n}\n\ntype MaybeArray<T> = T | T[]\n// type MaybeArrayDeep<T> = T | (MaybeArrayDeep<T>[] extends infer R ? R : never)\n\nexport type ClassType = string | Record<string, any> | Array<string | Record<string, any>>\nexport type StyleType = string | CSSProperties | Array<string | CSSProperties>\n\nexport const classProp = [String, Object, Array] as PropType<ClassType>\nexport const styleProp = [String, Object, Array] as PropType<StyleType>\n\ntype ForceBoolean<T> = true extends T\n  ? Exclude<T, boolean> | boolean\n  : false extends T\n    ? Exclude<T, boolean> | boolean\n    : T\ntype ForceBooleanDeep<T> = T extends unknown ? { [K in keyof T]: ForceBoolean<T[K]> } : never\ntype SplitAndCombo<T, O = T> = T extends unknown\n  ?\n      | [T]\n      | (SplitAndCombo<Exclude<O, T>> extends infer U extends any[]\n        ? U extends U\n          ? [ForceBoolean<T | U[number]>]\n          : never\n        : never)\n  : never\ntype GenerateEvent<T extends any[], Others extends any[], R = any> = T extends unknown\n  ? Others extends never\n    ? (value: T[0]) => R\n    : (value: T[0], ...args: Others) => R\n  : never\n\n/**\n * Split and combo the first parameter of the given function\n *\n * @example\n * ```ts\n * // origin function\n * type Fn = (value: string | number | boolean) => void\n *\n * // after transform\n * type After =\n *  | ((value: string | number | boolean) => void)\n *  | ((value: string | number) => void)\n *  | ((value: string | boolean) => void)\n *  | ((value: number | boolean) => void)\n *  | ((value: string) => void)\n *  | ((value: number) => void)\n *  | ((value: boolean) => void)\n * ```\n */\nexport type EventListener<T extends AnyFunction> =\n  Expand<ForceBooleanDeep<SplitAndCombo<Parameters<T>[0]>>> extends infer F extends any[]\n    ? Parameters<T> extends [unknown, ...infer Others]\n      ? GenerateEvent<F, Others, ReturnType<T>>\n      : GenerateEvent<F, never, ReturnType<T>>\n    : never\n\nconst eventTypes = [Function, Array]\n\nexport function eventProp<F extends AnyFunction = VoidFunction>() {\n  return eventTypes as PropType<MaybeArray<F>>\n}\n\nexport function emitEvent<A extends any[]>(\n  handlers: MaybeArray<(...args: A) => void> | undefined,\n  ...args: A\n) {\n  if (Array.isArray(handlers)) {\n    for (let i = 0, len = handlers.length; i < len; ++i) {\n      const handler = handlers[i]\n\n      typeof handler === 'function' && handler(...args)\n    }\n  } else {\n    typeof handlers === 'function' && handlers(...args)\n  }\n}\n\nexport function localeProp<N extends LocaleNames>(_name: N) {\n  return Object as PropType<Partial<LocaleConfig[N]>>\n}\n\nexport const valueProp = {\n  type: [String, Number, Boolean],\n  default: null,\n}\nexport const valuesProp = {\n  type: [String, Number, Boolean, Array] as PropType<MaybeArray<string | number | boolean>>,\n  default: null,\n}\n\nexport const iconProp = [Object, Function]\n\nexport function createIconProp(defaultValue: Record<any, any> | AnyFunction | null = null) {\n  return {\n    isFunc: true,\n    default: defaultValue,\n  }\n}\n","import { computed, getCurrentInstance, inject, provide, unref } from 'vue'\n\nimport { isClient, isDefined } from '@vexip-ui/utils'\n\nimport type { App, ComputedRef, MaybeRef } from 'vue'\n\nexport const PROVIDED_Z_INDEX = '___vxp-provided-z-index'\n\nlet initZIndex = 2000\n\nif (isClient) {\n  const rootStyle = getComputedStyle(document.documentElement)\n  const cssZIndex = parseFloat(rootStyle.getPropertyValue('--vxp-z-index-popup').trim())\n\n  if (!Number.isNaN(cssZIndex)) {\n    initZIndex = cssZIndex\n  }\n}\n\nconst counter = {\n  current: 0,\n}\n\nexport const globalZIndex = computed(() => initZIndex)\n\nfunction getOrDefault(num: number, def: number) {\n  return isDefined(num) && !Number.isNaN(num) ? num : def\n}\n\n/**\n * Provide a z-index config for under components.\n *\n * @param sourceZIndex z-index config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function configZIndex(sourceZIndex: MaybeRef<number>, app?: App) {\n  if (app) {\n    const zIndex = computed(() => {\n      const zIndex = unref(sourceZIndex)\n\n      return getOrDefault(zIndex, globalZIndex.value)\n    })\n\n    app.provide(PROVIDED_Z_INDEX, zIndex)\n  } else {\n    const upstreamZIndex = inject<ComputedRef<number> | null>(PROVIDED_Z_INDEX, null)\n    const zIndex = computed(() => {\n      const zIndex = unref(sourceZIndex)\n\n      return getOrDefault(\n        zIndex,\n        upstreamZIndex ? getOrDefault(upstreamZIndex.value, globalZIndex.value) : globalZIndex.value,\n      )\n    })\n\n    provide(PROVIDED_Z_INDEX, zIndex)\n  }\n}\n\nexport function useZIndex() {\n  const zIndex = getCurrentInstance()\n    ? inject<ComputedRef<number>>(PROVIDED_Z_INDEX, globalZIndex)\n    : globalZIndex\n\n  // return computed(() => zIndex.value + counter++)\n  return () => zIndex.value + counter.current++\n}\n","import { buildProps, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconEffect, IconRenderer } from './symbol'\n\nexport const iconProps = buildProps({\n  icon: iconProp,\n  scale: [Number, String],\n  title: String,\n  label: String,\n  flip: String as PropType<'horizontal' | 'vertical' | 'both'>,\n  effect: String as PropType<IconEffect>,\n  size: String,\n  color: String,\n  rotate: [Number, String],\n  renderer: Function as PropType<IconRenderer>,\n})\n\nexport type IconProps = ExtractPropTypes<typeof iconProps>\nexport type IconCProps = ConfigurableProps<IconProps, 'icon'>\n","import { computed, defineComponent, h, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { toNumber } from '@vexip-ui/utils'\nimport { iconProps } from './props'\n\nimport type { CSSProperties } from 'vue'\nimport type { IconPresetEffect } from './symbol'\n\nconst internalEffects = Object.freeze<IconPresetEffect[]>([\n  'spin-in',\n  'spin-out',\n  'pulse-in',\n  'pulse-out',\n])\n\nconst angleRE = /(^\\s*[+-]?\\d*\\.?\\d+\\s*)(deg|grad|turn|rad)?\\s*/i\n\nexport default defineComponent({\n  name: 'Icon',\n  props: iconProps,\n  setup(_props, { attrs, slots }) {\n    const props = useProps('icon', _props, {\n      icon: {\n        isFunc: true,\n        default: null,\n        static: true,\n      },\n      scale: 1,\n      title: null,\n      label: null,\n      flip: {\n        default: null,\n        validator: value => ['horizontal', 'vertical', 'both'].includes(value),\n      },\n      effect: null,\n      size: null,\n      color: null,\n      rotate: null,\n      renderer: {\n        default: null,\n        isFunc: true,\n      },\n    })\n\n    const nh = useNameHelper('icon')\n\n    const className = computed(() => {\n      let effectCls = ''\n\n      if (props.effect) {\n        effectCls = internalEffects.includes(props.effect as IconPresetEffect)\n          ? nh.bm(props.effect)\n          : props.effect\n      }\n\n      return {\n        [nh.b()]: true,\n        [nh.bm(`flip-${props.flip}`)]: props.flip,\n        [effectCls]: effectCls,\n      }\n    })\n    const computedScale = computed(() => toNumber(props.scale) || 1)\n    const rotate = computed(() => {\n      if (typeof props.rotate === 'number') {\n        return `${(props.rotate % 4) / 4}turn`\n      }\n\n      const matched = props.rotate?.match(angleRE)\n\n      if (!matched) return null\n\n      const number = toNumber(matched[1])\n\n      if (!matched[2]) {\n        return `${(number % 4) / 4}turn`\n      }\n\n      return number ? `${number}${matched[2]}` : null\n    })\n    const style = computed(() => {\n      const style: CSSProperties = {\n        color: props.color,\n      }\n\n      if (props.size) {\n        style.fontSize = props.size\n      } else if (computedScale.value !== 1) {\n        style.fontSize = `${computedScale.value}em`\n      }\n\n      if (rotate.value) {\n        style[nh.cv('rotate')] = rotate.value\n      }\n\n      return style\n    })\n\n    function renderDefault() {\n      const iAttrs = {\n        class: className.value,\n        style: style.value,\n        title: props.title,\n        role: (attrs.role as string) || (props.label || props.title ? 'img' : undefined),\n        'aria-label': props.label,\n        'aria-hidden': !(props.label || props.title),\n      }\n\n      if (slots.default) {\n        return (\n          <i {...iAttrs}>\n            <g>{renderSlot(slots, 'default')}</g>\n          </i>\n        )\n      }\n\n      if (props.icon) {\n        return (\n          <i {...iAttrs}>\n            <g>{h(props.icon)}</g>\n          </i>\n        )\n      }\n\n      return <i {...iAttrs}></i>\n    }\n\n    return () => {\n      if (typeof props.renderer === 'function') {\n        return props.renderer(props as any, attrs, renderDefault)\n      }\n\n      return renderDefault()\n    }\n  },\n})\n","import { wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\n\nexport const rendererProps = wrapProps({\n  renderer: {\n    type: Function,\n    default: null,\n  },\n  data: {\n    type: Object as PropType<Record<string, any>>,\n    default: undefined,\n  },\n})\n\nexport type RendererProps = ExtractPropTypes<typeof rendererProps>\n","import { defineComponent, renderSlot } from 'vue'\n\nimport { rendererProps } from './props'\n\nexport default defineComponent({\n  name: 'Renderer',\n  props: rendererProps,\n  setup(props, { slots }) {\n    return () => {\n      if (typeof props.renderer !== 'function') {\n        return renderSlot(slots, 'default', props.data)\n      }\n\n      return props.renderer(props.data)\n    }\n  },\n})\n","import { booleanProp, buildProps, classProp, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { SpinSlots } from './symbol'\n\nexport const spinProps = buildProps({\n  active: booleanProp,\n  icon: iconProp,\n  inner: booleanProp,\n  delay: {\n    type: [Boolean, Number, Array] as PropType<boolean | number | number[]>,\n    default: null,\n  },\n  tip: String,\n  hideMask: booleanProp,\n  maskColor: String,\n  maskClass: classProp,\n  transitionName: String,\n  iconEffect: String as PropType<IconEffect>,\n  slots: Object as PropType<SpinSlots>,\n  onMaskClick: eventProp<(event: MouseEvent) => void>(),\n  onShow: eventProp(),\n  onHide: eventProp(),\n})\n\nexport type SpinProps = ExtractPropTypes<typeof spinProps>\nexport type SpinCProps = ConfigurableProps<SpinProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { toNumber } from '@vexip-ui/utils'\nimport { spinProps } from './props'\n\nimport type { SpinSlots } from './symbol'\n\ndefineOptions({ name: 'Spin' })\n\nconst nh = useNameHelper('spin')\nconst _props = defineProps(spinProps)\nconst props = useProps('spin', _props, {\n  active: {\n    default: false,\n    static: true,\n  },\n  icon: createIconProp(),\n  inner: false,\n  delay: false,\n  tip: '',\n  hideMask: false,\n  maskColor: '',\n  maskClass: null,\n  transitionName: () => nh.ns('fade'),\n  iconEffect: null,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<SpinSlots>()\n\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\n\nconst hasTip = computed(() => !!(props.tip || slots.tip))\nconst maskStyle = computed(() => {\n  const style = {} as any\n\n  if (props.maskColor) {\n    style[nh.cv('mask-bg-color')] = props.maskColor\n  }\n\n  return style\n})\nconst delayTime = computed(() => {\n  if (props.delay) {\n    if (props.delay === true) {\n      return { enter: 500, leave: 500 }\n    }\n\n    if (typeof props.delay === 'number') {\n      return { enter: props.delay, leave: props.delay }\n    }\n\n    if (Array.isArray(props.delay)) {\n      return { enter: toNumber(props.delay[0]), leave: toNumber(props.delay[1]) }\n    }\n  }\n\n  return { enter: 0, leave: 0 }\n})\n\nlet timer: ReturnType<typeof setTimeout>\n\nwatch(\n  () => props.active,\n  value => {\n    clearTimeout(timer)\n\n    const delay = value ? delayTime.value.enter : delayTime.value.leave\n\n    if (delay) {\n      timer = setTimeout(() => {\n        currentActive.value = value\n      }, delay)\n    } else {\n      currentActive.value = value\n    }\n  },\n)\n\ndefineExpose({\n  currentActive,\n  hasTip,\n  handleShow,\n  handleHide,\n})\n\nfunction handleMaskClick(event: MouseEvent) {\n  emitEvent(props.onMaskClick, event)\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n</script>\n\n<template>\n  <div\n    v-if=\"!props.inner\"\n    :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\"\n    :aria-busy=\"currentActive ? 'true' : undefined\"\n  >\n    <slot>\n      <Renderer :renderer=\"props.slots.default\"></Renderer>\n    </slot>\n    <Transition\n      appear\n      :name=\"props.transitionName\"\n      @after-enter=\"handleShow\"\n      @after-leave=\"handleHide\"\n    >\n      <div v-if=\"currentActive\" :class=\"nh.be('loading')\">\n        <div\n          v-if=\"!props.hideMask\"\n          :class=\"[nh.be('mask'), props.maskClass]\"\n          :style=\"maskStyle\"\n          @click=\"handleMaskClick\"\n        ></div>\n        <slot name=\"content\">\n          <Renderer :renderer=\"props.slots.content\">\n            <div :class=\"nh.be('icon')\">\n              <slot name=\"icon\">\n                <Renderer :renderer=\"props.slots.icon\">\n                  <Icon\n                    v-bind=\"icons.loading\"\n                    :icon=\"props.icon || icons.loading.icon\"\n                    :effect=\"props.iconEffect || icons.loading.effect\"\n                    label=\"loading\"\n                  ></Icon>\n                </Renderer>\n              </slot>\n            </div>\n            <div v-if=\"hasTip\" :class=\"nh.be('tip')\">\n              <slot name=\"tip\">\n                <Renderer :renderer=\"props.slots.tip\">\n                  {{ props.tip }}\n                </Renderer>\n              </slot>\n            </div>\n          </Renderer>\n        </slot>\n      </div>\n    </Transition>\n  </div>\n  <Transition\n    v-else\n    appear\n    :name=\"props.transitionName\"\n    @after-enter=\"handleShow\"\n    @after-leave=\"handleHide\"\n  >\n    <div v-if=\"currentActive\" :class=\"[nh.b(), nh.bs('vars'), nh.bm('inner')]\">\n      <div\n        v-if=\"!props.hideMask\"\n        :class=\"[nh.be('mask'), props.maskClass]\"\n        :style=\"maskStyle\"\n        @click=\"handleMaskClick\"\n      ></div>\n      <slot name=\"content\">\n        <Renderer :renderer=\"props.slots.content\">\n          <div :class=\"nh.be('icon')\">\n            <slot name=\"icon\">\n              <Renderer :renderer=\"props.slots.icon\">\n                <Icon\n                  v-bind=\"icons.loading\"\n                  :icon=\"props.icon || icons.loading.icon\"\n                  :effect=\"props.iconEffect || icons.loading.effect\"\n                  label=\"loading\"\n                ></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <div v-if=\"hasTip\" :class=\"nh.be('tip')\">\n            <slot name=\"tip\">\n              <Renderer :renderer=\"props.slots.tip\">\n                {{ props.tip }}\n              </Renderer>\n            </slot>\n          </div>\n        </Renderer>\n      </slot>\n    </div>\n  </Transition>\n</template>\n","import { Spin } from '@/components/spin'\n\nimport { createVNode, nextTick, render } from 'vue'\n\nimport { isObject } from '@vexip-ui/utils'\n\nimport type { SpinProps } from '@/components/spin'\nimport type { DirectiveBinding, ObjectDirective, VNode } from 'vue'\n\ninterface LoadingRecord {\n  spin: VNode,\n  props: SpinProps,\n  originPosition: string,\n}\n\ntype LoadingElement = HTMLElement & { __loading?: LoadingRecord }\n\nfunction createSpin(\n  el: LoadingElement,\n  binding: DirectiveBinding<boolean | SpinProps>,\n  vnode: VNode<any, LoadingElement>,\n) {\n  const props: SpinProps = isObject(binding.value)\n    ? { ...binding.value }\n    : { active: binding.value }\n\n  props.inner = true\n\n  const spin = createVNode(Spin, props, null, 0, Object.keys(props))\n  const position = getComputedStyle(el).position\n\n  spin.appContext = vnode.appContext ?? (vnode as any).ctx?.appContext\n\n  el.__loading = {\n    spin,\n    props,\n    originPosition: position,\n  }\n\n  if (position === 'static') {\n    el.style.position = 'relative'\n  }\n\n  render(spin, el)\n}\n\nexport const vLoading: ObjectDirective<LoadingElement, boolean | SpinProps> = {\n  mounted(el, binding, vnode) {\n    nextTick(() => createSpin(el, binding, vnode))\n  },\n  updated(el, binding, vnode) {\n    nextTick(() => {\n      if (!el.__loading) {\n        createSpin(el, binding, vnode)\n        return\n      }\n\n      const props: SpinProps = isObject(binding.value) ? binding.value : { active: binding.value }\n      const component = el.__loading.spin.component\n\n      if (component) {\n        Object.keys(props).forEach(key => {\n          component.props[key] = props[key as keyof SpinProps]\n        })\n\n        component.props.inner = true\n      }\n    })\n  },\n  beforeUnmount(el) {\n    if (!el.__loading) return\n\n    render(null, el)\n    delete el.__loading\n  },\n}\n","import { computed, getCurrentScope, onScopeDispose, unref, watch } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\n\nimport type { MaybeRef } from 'vue'\n\nexport interface UseListenerOptions extends AddEventListenerOptions {\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n}\n\nexport function useListener<E = Event>(\n  target: MaybeRef<EventTarget | null | undefined>,\n  event: string,\n  listener: (event: E) => any,\n  options?: UseListenerOptions | boolean,\n) {\n  if (!target) {\n    return noop\n  }\n\n  const normalizedOptions = computed(() => {\n    if (typeof options === 'boolean') {\n      return { capture: options }\n    }\n\n    return options || {}\n  })\n\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el) {\n        return\n      }\n\n      const { disabled, ...opts } = normalizedOptions.value\n      const handler = (event: Event) => {\n        if (!unref(disabled)) {\n          listener(event as E)\n        }\n      }\n\n      el.addEventListener(event, handler, opts)\n\n      remove = () => {\n        el.removeEventListener(event, handler, opts)\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  const stop = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(stop)\n\n  return stop\n}\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { CLICK_TYPE, dispatchEvent, isClient, noop } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { Ref } from 'vue'\nimport type { TransferNode } from '@vexip-ui/utils'\n\nexport const CLICK_OUTSIDE = 'clickoutside'\n\nconst elements = new Set<TransferNode>()\n\nif (isClient) {\n  document.addEventListener(\n    CLICK_TYPE,\n    (event: Event) => {\n      const target = event.target as Node | null\n      const path = event.composedPath && event.composedPath()\n\n      elements.forEach(el => {\n        if (\n          el !== target &&\n          (path ? !path.includes(el) : !el.contains(target)) &&\n          (!el.__transferElement ||\n            (el.__transferElement !== target && !el.__transferElement.contains(target)))\n        ) {\n          dispatchEvent(el, { type: CLICK_OUTSIDE })\n        }\n      })\n    },\n    true,\n  )\n}\n\n/**\n * 创建一个可以添加 clickoutside 事件的元素 Ref\n *\n * @param handler 事件的回调方法\n * @param target 需要处理的元素 ref，可不传\n */\nexport function useClickOutside(\n  handler: () => void,\n  target: Ref<HTMLElement | null | undefined> = ref(null),\n) {\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el) {\n        return\n      }\n\n      elements.add(el)\n\n      remove = () => {\n        elements.delete(el)\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  const stop = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(stop)\n  useListener(target, CLICK_OUTSIDE, handler)\n\n  return target\n}\n","import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\n/**\n * 创建一个观察了最近的上级元素 display 变化的元素 Ref\n *\n * @param displayInit 元素初次显示后执行的回调\n * @returns 观察了 display 变化的元素 Ref\n */\nexport function useDisplay(\n  displayInit = noop,\n  element: Ref<HTMLElement | null | undefined> = ref(null),\n) {\n  let observer: MutationObserver | null\n\n  onMounted(() => {\n    nextTick(() => {\n      const hiddenParentNode = queryOutsideHiddenElement(element.value)\n\n      if (hiddenParentNode) {\n        observer = new MutationObserver(() => {\n          if (hiddenParentNode.style.display !== 'none') {\n            if (typeof displayInit === 'function') {\n              displayInit()\n            }\n\n            observer?.disconnect()\n            observer = null\n          }\n        })\n\n        observer.observe(hiddenParentNode, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          attributeFilter: ['style'],\n        })\n      } else {\n        typeof displayInit === 'function' && displayInit()\n      }\n    })\n  })\n\n  onBeforeUnmount(() => {\n    observer?.disconnect()\n    observer = null\n  })\n\n  return element\n}\n\nexport function queryOutsideHiddenElement(el?: Element | null) {\n  if (el) {\n    let parentElement = el.parentElement\n\n    while (parentElement && parentElement !== document.body) {\n      if (parentElement.style.display === 'none') {\n        return parentElement\n      }\n\n      parentElement = parentElement.parentElement\n    }\n  }\n\n  return null\n}\n\nexport function isHiddenElement(el?: HTMLElement | null) {\n  if (el?.style.display !== 'none') {\n    return !!queryOutsideHiddenElement(el)\n  }\n\n  return true\n}\n","import {\n  Comment,\n  Fragment,\n  createTextVNode,\n  isVNode,\n  readonly,\n  ref,\n  renderSlot,\n  toRef,\n  unref,\n  watch,\n} from 'vue'\n\nimport { ensureArray, isClient, noop } from '@vexip-ui/utils'\n\nimport type {\n  ComponentPublicInstance,\n  MaybeRef,\n  Ref,\n  Slots,\n  VNode,\n  VNodeChild,\n  VNodeNormalizedChildren,\n} from 'vue'\nimport type { MaybeElement, MaybeInstance } from './types'\n\nexport function createSlotRender(\n  slots: Slots,\n  names: string[]\n): ((params?: any) => VNodeChild) | null\nexport function createSlotRender(\n  slots: Slots,\n  names: string[],\n  fallback: (params?: any) => VNodeChild\n): (params?: any) => VNodeChild\nexport function createSlotRender(\n  slots: Slots,\n  names: string[],\n  fallback?: (params?: any) => VNodeChild,\n) {\n  for (const name of names) {\n    if (slots[name]) {\n      return (params: any) =>\n        renderSlot(slots, name, params, () => {\n          const vnodes = fallback?.(params)\n\n          return vnodes ? ensureArray(vnodes) : []\n        })\n    }\n  }\n\n  return fallback || null\n}\n\nexport function flatVNodes(children: VNodeNormalizedChildren) {\n  const result: VNode[] = []\n  const loop = Array.isArray(children) ? [...children] : []\n\n  while (loop.length) {\n    const vnode = loop.shift()!\n\n    if (vnode === null) continue\n\n    if (Array.isArray(vnode)) {\n      loop.unshift(...vnode)\n    }\n\n    if (\n      typeof vnode !== 'string' &&\n      typeof vnode !== 'number' &&\n      (!isVNode(vnode) || vnode.type === Comment)\n    ) {\n      continue\n    }\n\n    if (typeof vnode === 'string' || typeof vnode === 'number') {\n      result.push(createTextVNode(String(vnode)))\n    } else if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n      loop.unshift(vnode.children)\n    } else {\n      result.push(vnode)\n    }\n  }\n\n  return result\n}\n\nexport function unrefElement<T extends string | MaybeInstance = string | MaybeInstance>(\n  ref: MaybeRef<T>,\n): T extends string | ComponentPublicInstance ? MaybeElement : T {\n  const plain = unref(ref)\n\n  if (typeof plain === 'string') {\n    return (isClient ? document.querySelector(plain) : null) as any\n  }\n\n  return (plain as ComponentPublicInstance)?.$el ?? plain\n}\n\nexport function proxyExposed<T>(vnode: VNode): T {\n  return new Proxy({} as any, {\n    get(_, key) {\n      if (!vnode.component) return undefined\n\n      return (\n        (vnode.component.proxy as any)?.[key] ??\n        (vnode.component.exposeProxy as any)?.[key] ??\n        (vnode.component.exposed as any)?.[key]\n      )\n    },\n  }) as T\n}\n\nexport function watchPauseable(...args: Parameters<typeof watch>) {\n  const active = ref(true)\n  const handle = args[1] || noop\n\n  function pause() {\n    active.value = false\n  }\n\n  function resume() {\n    active.value = true\n  }\n\n  const stop = watch(\n    args[0],\n    (...callbackArgs) =>\n      new Promise<void>((resolve, reject) => {\n        if (active.value) {\n          Promise.resolve(handle(...callbackArgs))\n            .then(resolve)\n            .catch(reject)\n        }\n      }),\n    args[2],\n  )\n\n  return { active: readonly(active), pause, resume, stop }\n}\n\nexport function pickToRefs<T extends Record<any, any>, K extends keyof T>(reactive: T, keys: K[]) {\n  return keys.map(key => toRef(reactive, key)) as { [P in K]: Ref<T[P]> }\n}\n","import { computed, getCurrentScope, isRef, onScopeDispose, ref, watch } from 'vue'\n\nimport { isClient, noop } from '@vexip-ui/utils'\nimport { unrefElement } from './shared/utils'\n\nimport type { ComputedRef, MaybeRef, Ref } from 'vue'\nimport type { MaybeInstance } from './shared/types'\n\nexport interface UseFullScreenResult {\n  target: Ref<MaybeInstance>,\n  supported: boolean,\n  full: ComputedRef<boolean>,\n  enter: (force?: boolean) => Promise<boolean>,\n  exit: (force?: boolean) => Promise<boolean>,\n  toggle: (force?: boolean) => Promise<boolean>,\n}\n\ntype PropertiesMap = [\n  'requestFullscreen',\n  'exitFullscreen',\n  'fullscreenElement',\n  'fullscreenEnabled',\n  'fullscreenchange',\n  'fullscreenerror',\n]\n\nconst functionsMap = [\n  [\n    'requestFullscreen',\n    'exitFullscreen',\n    'fullscreenElement',\n    'fullscreenEnabled',\n    'fullscreenchange',\n    'fullscreenerror',\n  ],\n  // New WebKit\n  [\n    'webkitRequestFullscreen',\n    'webkitExitFullscreen',\n    'webkitFullscreenElement',\n    'webkitFullscreenEnabled',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror',\n  ],\n  // Old WebKit\n  [\n    'webkitRequestFullScreen',\n    'webkitCancelFullScreen',\n    'webkitCurrentFullScreenElement',\n    'webkitCancelFullScreen',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror',\n  ],\n  [\n    'mozRequestFullScreen',\n    'mozCancelFullScreen',\n    'mozFullScreenElement',\n    'mozFullScreenEnabled',\n    'mozfullscreenchange',\n    'mozfullscreenerror',\n  ],\n  [\n    'msRequestFullscreen',\n    'msExitFullscreen',\n    'msFullscreenElement',\n    'msFullscreenEnabled',\n    'MSFullscreenChange',\n    'MSFullscreenError',\n  ],\n] as PropertiesMap[]\n\nlet map!: PropertiesMap\n\nif (isClient) {\n  for (const m of functionsMap) {\n    if (m[1] in document) {\n      map = m\n      break\n    }\n  }\n}\n\nconst supported = !!map\nconst notSupportedResult = {\n  supported,\n  full: computed(() => false),\n  enter: noop,\n  exit: noop,\n  toggle: noop,\n}\n\nconst states = new Set<Ref<boolean>>()\nconst subscriptions = new WeakMap<Element, Ref<boolean>>()\n\nif (isClient && map) {\n  const ELEMENT = map[2]\n  const EVENT = map[4]\n\n  document.addEventListener(\n    EVENT,\n    () => {\n      states.forEach(state => {\n        state.value = false\n      })\n\n      if (document[ELEMENT]) {\n        const full = subscriptions.get(document[ELEMENT])\n\n        if (full) {\n          full.value = true\n        }\n      }\n    },\n    false,\n  )\n}\n\nexport function useFullScreen(target: MaybeRef<MaybeInstance> = ref(null)): UseFullScreenResult {\n  const targetRef = computed({\n    get: () => unrefElement(target),\n    set: el => {\n      if (isRef(target)) {\n        target.value = el\n      }\n    },\n  })\n\n  if (!isClient || !supported) {\n    return { ...notSupportedResult, target: targetRef }\n  }\n\n  const [REQUEST, EXIT, ELEMENT] = map\n  const full = ref(false)\n\n  watch(\n    () => unrefElement(target),\n    (el, old) => {\n      old && subscriptions.delete(old)\n      el && subscriptions.set(el, full)\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  states.add(full)\n\n  if (getCurrentScope()) {\n    onScopeDispose(exit)\n  }\n\n  async function enter(force = false) {\n    await exit()\n\n    const el = unrefElement(target)\n\n    if (el) {\n      if (force || !document[ELEMENT]) {\n        await el[REQUEST]()\n        full.value = true\n\n        return document[ELEMENT] === el\n      }\n    }\n\n    return false\n  }\n\n  async function exit(force = false) {\n    const el = unrefElement(target)\n\n    if (force || (document[ELEMENT] && document[ELEMENT] === el)) {\n      await document[EXIT]()\n      full.value = false\n\n      return document[ELEMENT] !== el\n    }\n\n    return false\n  }\n\n  async function toggle(force = false) {\n    return full.value ? await exit(force) : await enter(force)\n  }\n\n  return {\n    supported,\n    target: targetRef,\n    full: computed(() => full.value),\n    enter,\n    exit,\n    toggle,\n  }\n}\n","import { ref } from 'vue'\n\nimport { useListener } from './listener'\n\nimport type { Ref } from 'vue'\n\nexport function useHover(wrapper: Ref<HTMLElement | null | undefined> = ref(null)) {\n  const isHover = ref(false)\n\n  useListener(wrapper, 'mouseenter', enterWrapper)\n  useListener(wrapper, 'mouseleave', leaveWrapper)\n\n  function enterWrapper() {\n    isHover.value = true\n  }\n\n  function leaveWrapper() {\n    isHover.value = false\n  }\n\n  return { wrapper, isHover }\n}\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { ensureArray, isClient, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport type IntersectionHandler = (entry: IntersectionObserverEntry) => any\nexport type UseIntersectionOptions = IntersectionObserverInit & {\n  /**\n   * 元素交叉状态变化时的回调方法\n   */\n  handler: IntersectionHandler,\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n}\n\nconst observerCache = new WeakMap<\n  Element | Document,\n  Map<\n    string,\n    Map<\n      string,\n      { ob: IntersectionObserver, count: number, handlers: WeakMap<Element, IntersectionHandler> }\n    >\n  >\n>()\n\nconst spaceRE = /\\s+/g\nconst unitRE = /(px|%)$/\n\nexport function useIntersection(options: UseIntersectionOptions) {\n  const target = options.target || ref(null)\n\n  if (!isClient) {\n    return { target, disconnect: noop }\n  }\n\n  const { handler } = options\n\n  let root = options.root ?? document\n\n  const threshold = ensureArray(options.threshold || 0).join() || '0'\n  const margin = normalizeMargin(options.rootMargin)\n\n  if (!observerCache.has(root)) {\n    observerCache.set(root, new Map())\n  }\n\n  const thresholdCache = observerCache.get(root)!\n\n  if (!thresholdCache.has(threshold)) {\n    thresholdCache.set(threshold, new Map())\n  }\n\n  const marginCache = thresholdCache.get(threshold)!\n\n  if (!marginCache.has(margin)) {\n    marginCache.set(margin, {\n      ob: new IntersectionObserver(handleIntersect, { ...options, rootMargin: margin }),\n      count: 0,\n      handlers: new WeakMap<Element, IntersectionHandler>(),\n    })\n  }\n\n  let state = marginCache.get(margin)\n  let { ob: observer, handlers } = state!\n\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el || !observer) {\n        return\n      }\n\n      handlers.set(el, handler)\n      observer.observe(el)\n      state && state.count++\n\n      remove = () => {\n        observer.unobserve(el)\n        handlers.delete(el)\n        state && state.count--\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  getCurrentScope() && onScopeDispose(disconnect)\n\n  function normalizeMargin(margin?: string) {\n    if (!margin || !margin.trim()) return '_'\n\n    const parts = margin.trim().split(spaceRE, 4)\n    parts.length = 4\n\n    for (let i = 0; i < 4; ++i) {\n      const part = parts[i]\n\n      parts[i] = unitRE.test(part) ? part : `${toNumber(part)}px`\n    }\n\n    return parts.join(' ')\n  }\n\n  function handleIntersect(entries: IntersectionObserverEntry[]) {\n    for (let i = 0, len = entries.length; i < len; ++i) {\n      const entry = entries[i]\n      const handler = handlers.get(entry.target)\n\n      if (typeof handler === 'function') {\n        handler(entry)\n      }\n    }\n  }\n\n  function disconnect() {\n    stopWatch()\n    remove()\n\n    if (!state) return\n\n    if (state.count <= 0) {\n      marginCache.delete(margin)\n\n      if (!marginCache.size) {\n        thresholdCache.delete(threshold)\n\n        if (!thresholdCache.size) {\n          observerCache.delete(root)\n        }\n      }\n    }\n\n    state = undefined\n    observer = undefined!\n    handlers = undefined!\n    root = undefined!\n  }\n\n  return { target, disconnect }\n}\n","import { customRef } from 'vue'\n\nexport function useManualRef() {\n  const updateSet = new Set<() => void>()\n\n  function manualRef<T>(value: T) {\n    return customRef<T>((track, trigger) => {\n      let origin = value\n\n      const update = () => {\n        if (value !== origin) {\n          origin = value\n          trigger()\n        }\n      }\n\n      return {\n        get: () => (track(), value),\n        set: newValue => {\n          if (newValue === value) return\n\n          value = newValue\n          updateSet.add(update)\n        },\n      }\n    })\n  }\n\n  function triggerUpdate() {\n    for (const trigger of updateSet) {\n      trigger()\n    }\n\n    updateSet.clear()\n  }\n\n  return { updateSet, manualRef, triggerUpdate }\n}\n","import { computed, isRef, reactive, ref, unref } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { MaybeRef, Ref } from 'vue'\n\nexport type ModifierState = Readonly<\n  Omit<Record<string, boolean>, 'activeKeys'> & {\n    activeKeys: Set<string>,\n    resetAll: () => void,\n  }\n>\n\nexport interface UseModifierOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n  /**\n   * 配置键名的别名，会与默认别名动态合并\n   */\n  aliasMap?: Record<string, string>,\n  /**\n   * 是否在目标元素失去焦点时重置修饰符\n   *\n   * @default true\n   */\n  autoReset?: boolean,\n  /**\n   * 事件的 capture 选项\n   *\n   * @default false\n   */\n  capture?: boolean,\n  /**\n   * 事件的 passive 选项\n   *\n   * @default true\n   */\n  passive?: boolean,\n  /**\n   * 是否严格匹配目标元素\n   */\n  strictTarget?: boolean,\n  /**\n   * 键按下的事件回调函数\n   */\n  onKeyDown?: (event: KeyboardEvent, modifier: ModifierState) => void,\n  /**\n   * 键抬起的时间回调函数\n   */\n  onKeyUp?: (event: KeyboardEvent, modifier: ModifierState) => void,\n}\n\nconst defaultAliasMap: Record<string, string> = {\n  ctrl: 'control',\n  command: 'meta',\n  cmd: 'meta',\n  option: 'alt',\n  up: 'arrowup',\n  down: 'arrowdown',\n  left: 'arrowleft',\n  right: 'arrowright',\n}\n\nconst separatorRE = /[+_-]/\nconst splitRE = /[+_-]/g\n\nconst internalProps = ['activeKeys', 'resetAll']\n\nexport function useModifier(options: UseModifierOptions = {}) {\n  const {\n    autoReset = true,\n    capture = false,\n    passive = true,\n    strictTarget = false,\n    onKeyDown = noop,\n    onKeyUp = noop,\n  } = options\n\n  const target = options.target || ref(null)\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\n  const aliasMap = { ...defaultAliasMap, ...(options.aliasMap || {}) }\n  const activeKeys = reactive(new Set<string>())\n  const metaDeps = new Set<string>()\n  const modifier: Record<string, any> = reactive({ activeKeys, resetAll })\n\n  function setModifier(key: string, value: boolean) {\n    if (key in modifier) {\n      modifier[key] = value\n    }\n  }\n\n  function updateModifier(event: KeyboardEvent, value: boolean) {\n    const key = event.key?.toLocaleLowerCase()\n    const code = event.code?.toLocaleLowerCase()\n    const keys = [code, key].filter(Boolean)\n\n    for (const key of keys) {\n      activeKeys[value ? 'add' : 'delete'](key)\n      setModifier(key, value)\n    }\n\n    if (!value && key === 'meta') {\n      for (const key of metaDeps) {\n        activeKeys.delete(key)\n        setModifier(key, false)\n      }\n\n      metaDeps.clear()\n    } else if (\n      value &&\n      typeof event.getModifierState === 'function' &&\n      event.getModifierState('Meta')\n    ) {\n      for (const key of [...activeKeys, ...keys]) {\n        metaDeps.add(key)\n      }\n    }\n  }\n\n  function resetAll() {\n    Object.keys(modifier).forEach(key => {\n      modifier[key] = false\n    })\n\n    modifier.activeKeys = activeKeys\n    modifier.resetAll = resetAll\n  }\n\n  const modifierProxy = new Proxy(modifier, {\n    get(target, prop, receiver) {\n      if (typeof prop !== 'string' || internalProps.includes(prop)) {\n        return Reflect.get(target, prop, receiver)\n      }\n\n      prop = prop.toLocaleLowerCase()\n\n      if (prop in aliasMap) {\n        prop = aliasMap[prop]\n      }\n\n      if (!(prop in modifier)) {\n        if (separatorRE.test(prop)) {\n          const keys = prop.split(splitRE).map(key => key.trim())\n\n          modifier[prop] = computed(() => keys.every(key => unref(modifierProxy[key])))\n        } else {\n          modifier[prop] = ref(activeKeys.has(prop))\n        }\n      }\n\n      return unref(Reflect.get(target, prop, receiver))\n    },\n  })\n\n  useListener(\n    target,\n    'keydown',\n    (event: KeyboardEvent) => {\n      if (strictTarget && event.target !== unref(target)) {\n        return\n      }\n\n      updateModifier(event, true)\n      onKeyDown(event, modifierProxy)\n    },\n    { capture, passive, disabled },\n  )\n  useListener(\n    target,\n    'keyup',\n    (event: KeyboardEvent) => {\n      if (strictTarget && event.target !== unref(target)) {\n        return\n      }\n\n      updateModifier(event, false)\n      onKeyUp(event, modifierProxy)\n    },\n    { capture, passive, disabled },\n  )\n\n  if (autoReset) {\n    useListener(target, 'blur', resetAll, { capture, passive, disabled })\n  }\n\n  return { target, modifier: modifierProxy as ModifierState }\n}\n","import { nextTick, onBeforeUnmount, onMounted, readonly, ref } from 'vue'\n\nexport function useMounted(wait?: 'tick' | 'frame') {\n  const isMounted = ref(false)\n\n  const mount = () => (isMounted.value = true)\n\n  onMounted(() => {\n    if (wait === 'tick') {\n      nextTick(mount)\n    } else if (wait === 'frame') {\n      requestAnimationFrame(mount)\n    } else {\n      mount()\n    }\n  })\n\n  onBeforeUnmount(() => {\n    isMounted.value = false\n  })\n\n  return { isMounted: readonly(isMounted) }\n}\n","import { computed, isRef, ref } from 'vue'\n\nimport { throttle } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { MaybeRef, Ref } from 'vue'\n\nexport interface MovingState {\n  xStart: number,\n  yStart: number,\n  xEnd: number,\n  yEnd: number,\n  clientX: number,\n  clientY: number,\n  deltaX: number,\n  deltaY: number,\n  lazy: boolean,\n  [custom: string]: unknown,\n}\n\nexport interface UseMovingOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 横向位置的初始值\n   */\n  x?: MaybeRef<number>,\n  /**\n   * 纵向位置的初始值\n   */\n  y?: MaybeRef<number>,\n  /**\n   * 为否为懒加载，开启后会在 End 事件再更新位置状态\n   */\n  lazy?: MaybeRef<boolean>,\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n  /**\n   * 事件的 capture 选项\n   *\n   * @default true\n   */\n  capture?: boolean,\n  /**\n   * 是否阻止 MouseDown 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopMouse?: boolean,\n  /**\n   * 是否阻止 TouchStart 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopTouch?: boolean,\n  /**\n   * 移动开始时的回调函数，返回 false 可以阻止本次移动\n   */\n  onStart?: (state: MovingState, event: PointerEvent) => any,\n  /**\n   * 移动中的回调函数\n   */\n  onMove?: (state: MovingState, event: PointerEvent) => void,\n  /**\n   * 移动结束时的回调函数\n   */\n  onEnd?: (state: MovingState, event: PointerEvent) => void,\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nexport function useMoving(options: UseMovingOptions) {\n  const target = options.target || ref(null)\n  const x = isRef(options.x) ? options.x : ref(0)\n  const y = isRef(options.y) ? options.y : ref(0)\n  const lazy = isRef(options.lazy) ? options.lazy : ref(options.lazy || false)\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\n\n  const { capture = true, stopMouse = true, stopTouch = true } = options\n\n  const moving = ref(false)\n  const internalState: MovingState = {\n    xStart: 0,\n    yStart: 0,\n    xEnd: 0,\n    yEnd: 0,\n    clientX: 0,\n    clientY: 0,\n    deltaX: 0,\n    deltaY: 0,\n    lazy: false,\n  }\n\n  let current = 0\n  let record = 0\n\n  const throttleMove = throttle((event: PointerEvent) => {\n    if (record < current) return\n\n    updateState(event)\n\n    if (!internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    options.onMove?.(internalState, event)\n  })\n\n  function start(event: PointerEvent) {\n    if (disabled.value) return\n\n    Object.assign(internalState, {\n      xStart: x.value,\n      yStart: y.value,\n      xEnd: x.value,\n      yEnd: y.value,\n      clientX: event.clientX,\n      clientY: event.clientY,\n      lazy: lazy.value,\n    })\n\n    if (options.onStart?.(internalState, event) === false) {\n      return\n    }\n\n    document.addEventListener('pointermove', move, { capture })\n    document.addEventListener('pointerup', end, { capture })\n\n    record = current\n    moving.value = true\n  }\n\n  function move(event: PointerEvent) {\n    if (disabled.value) return\n\n    disableEvent(event)\n    throttleMove(event)\n  }\n\n  function end(event: PointerEvent) {\n    document.removeEventListener('pointermove', move, { capture })\n    document.removeEventListener('pointerup', end, { capture })\n\n    if (disabled.value) return\n\n    updateState(event)\n\n    if (internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    moving.value = false\n    ++current\n\n    options.onEnd?.(internalState, event)\n  }\n\n  function updateState(event: PointerEvent) {\n    const { clientX, clientY } = event\n    const { xStart, yStart, clientX: clientXStart, clientY: clientYStart } = internalState\n    const deltaX = clientX - clientXStart\n    const deltaY = clientY - clientYStart\n\n    internalState.deltaX = deltaX\n    internalState.deltaY = deltaY\n    internalState.xEnd = xStart + deltaX\n    internalState.yEnd = yStart + deltaY\n  }\n\n  useListener(target, 'pointerdown', start, { capture })\n\n  stopMouse && useListener(target, 'mousedown', disableEvent, { capture })\n  stopTouch && useListener(target, 'touchstart', disableEvent, { capture })\n\n  return {\n    target,\n    moving: computed(() => moving.value),\n    x,\n    y,\n    lazy,\n    disabled,\n  }\n}\n","import { onBeforeUnmount, ref } from 'vue'\n\nimport { throttle } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport interface UsePointerOption {\n  /**\n   * 横向位置的初始值\n   */\n  x?: number,\n  /**\n   * 纵向位置的初始值\n   */\n  y?: number,\n  /**\n   * 是否手动停止，默认情况下会在组件的 BeforeUnmount 生命周期注销\n   *\n   * @default false\n   */\n  manualStop?: boolean,\n}\n\ninterface PointerState {\n  x: Ref<number>,\n  y: Ref<number>,\n}\n\nconst registered = new Set<PointerState>()\nconst record = new Map<'x' | 'y', number>()\n\nrecord.set('x', 0)\nrecord.set('y', 0)\n\nfunction handler(event: PointerEvent) {\n  const { pageX, pageY } = event\n\n  record.set('x', pageX)\n  record.set('y', pageY)\n\n  registered.forEach(state => {\n    state.x.value = pageX\n    state.y.value = pageY\n  })\n}\n\nconst throttleHandler = throttle(handler)\n\nfunction register(state: PointerState) {\n  if (!registered.size && window) {\n    record.set('x', 0)\n    record.set('y', 0)\n    window.addEventListener('pointermove', throttleHandler, { passive: true })\n  }\n\n  registered.add(state)\n}\n\nfunction unregister(state: PointerState) {\n  registered.delete(state)\n\n  if (!registered.size && window) {\n    window.removeEventListener('pointermove', throttleHandler)\n  }\n}\n\nexport function usePointer(options: UsePointerOption = {}) {\n  const x = ref(options.x ?? record.get('x')!)\n  const y = ref(options.y ?? record.get('y')!)\n\n  const state = { x, y }\n\n  register(state)\n\n  if (!options.manualStop) {\n    onBeforeUnmount(() => {\n      unregister(state)\n    })\n  }\n\n  return { ...state, unregister: () => unregister(state) }\n}\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          var _overflowsData$;\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          const hasInitialMainAxisOverflow = ((_overflowsData$ = overflowsData[0]) == null ? void 0 : _overflowsData$.overflows[0]) > 0;\n          if (!ignoreCrossAxisOverflow || hasInitialMainAxisOverflow) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  return [':popover-open', ':modal'].some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n  if (ignoreScrollbarX === void 0) {\n    ignoreScrollbarX = false;\n  }\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n  // RTL <body> scrollbar.\n  getWindowScrollBarX(documentElement, htmlRect));\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","var resizeObservers = [];\nexport { resizeObservers };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n    return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n    return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n    var event;\n    if (typeof ErrorEvent === 'function') {\n        event = new ErrorEvent('error', {\n            message: msg\n        });\n    }\n    else {\n        event = document.createEvent('Event');\n        event.initEvent('error', false, false);\n        event.message = msg;\n    }\n    window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n    ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n    ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n    ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n    function ResizeObserverSize(inlineSize, blockSize) {\n        this.inlineSize = inlineSize;\n        this.blockSize = blockSize;\n        freeze(this);\n    }\n    return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n    function DOMRectReadOnly(x, y, width, height) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.top = this.y;\n        this.left = this.x;\n        this.bottom = this.top + this.height;\n        this.right = this.left + this.width;\n        return freeze(this);\n    }\n    DOMRectReadOnly.prototype.toJSON = function () {\n        var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n        return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n    };\n    DOMRectReadOnly.fromRect = function (rectangle) {\n        return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n    };\n    return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n    if (isSVG(target)) {\n        var _a = target.getBBox(), width = _a.width, height = _a.height;\n        return !width && !height;\n    }\n    var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n    return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n    var _a;\n    if (obj instanceof Element) {\n        return true;\n    }\n    var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n    return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n    switch (target.tagName) {\n        case 'INPUT':\n            if (target.type !== 'image') {\n                break;\n            }\n        case 'VIDEO':\n        case 'AUDIO':\n        case 'EMBED':\n        case 'OBJECT':\n        case 'CANVAS':\n        case 'IFRAME':\n        case 'IMG':\n            return true;\n    }\n    return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n    if (inlineSize === void 0) { inlineSize = 0; }\n    if (blockSize === void 0) { blockSize = 0; }\n    if (switchSizes === void 0) { switchSizes = false; }\n    return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n    devicePixelContentBoxSize: size(),\n    borderBoxSize: size(),\n    contentBoxSize: size(),\n    contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n    if (forceRecalculation === void 0) { forceRecalculation = false; }\n    if (cache.has(target) && !forceRecalculation) {\n        return cache.get(target);\n    }\n    if (isHidden(target)) {\n        cache.set(target, zeroBoxes);\n        return zeroBoxes;\n    }\n    var cs = getComputedStyle(target);\n    var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n    var removePadding = !IE && cs.boxSizing === 'border-box';\n    var switchSizes = verticalRegexp.test(cs.writingMode || '');\n    var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n    var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n    var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n    var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n    var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n    var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n    var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n    var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n    var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n    var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n    var horizontalPadding = paddingLeft + paddingRight;\n    var verticalPadding = paddingTop + paddingBottom;\n    var horizontalBorderArea = borderLeft + borderRight;\n    var verticalBorderArea = borderTop + borderBottom;\n    var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n    var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n    var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n    var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n    var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n    var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n    var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n    var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n    var boxes = freeze({\n        devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n        borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n        contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n        contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n    });\n    cache.set(target, boxes);\n    return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n    var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n    switch (observedBox) {\n        case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n            return devicePixelContentBoxSize;\n        case ResizeObserverBoxOptions.BORDER_BOX:\n            return borderBoxSize;\n        default:\n            return contentBoxSize;\n    }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nimport { freeze } from './utils/freeze';\nvar ResizeObserverEntry = (function () {\n    function ResizeObserverEntry(target) {\n        var boxes = calculateBoxSizes(target);\n        this.target = target;\n        this.contentRect = boxes.contentRect;\n        this.borderBoxSize = freeze([boxes.borderBoxSize]);\n        this.contentBoxSize = freeze([boxes.contentBoxSize]);\n        this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);\n    }\n    return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n    if (isHidden(node)) {\n        return Infinity;\n    }\n    var depth = 0;\n    var parent = node.parentNode;\n    while (parent) {\n        depth += 1;\n        parent = parent.parentNode;\n    }\n    return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n    var shallowestDepth = Infinity;\n    var callbacks = [];\n    resizeObservers.forEach(function processObserver(ro) {\n        if (ro.activeTargets.length === 0) {\n            return;\n        }\n        var entries = [];\n        ro.activeTargets.forEach(function processTarget(ot) {\n            var entry = new ResizeObserverEntry(ot.target);\n            var targetDepth = calculateDepthForNode(ot.target);\n            entries.push(entry);\n            ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n            if (targetDepth < shallowestDepth) {\n                shallowestDepth = targetDepth;\n            }\n        });\n        callbacks.push(function resizeObserverCallback() {\n            ro.callback.call(ro.observer, entries, ro.observer);\n        });\n        ro.activeTargets.splice(0, ro.activeTargets.length);\n    });\n    for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n        var callback = callbacks_1[_i];\n        callback();\n    }\n    return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n    resizeObservers.forEach(function processObserver(ro) {\n        ro.activeTargets.splice(0, ro.activeTargets.length);\n        ro.skippedTargets.splice(0, ro.skippedTargets.length);\n        ro.observationTargets.forEach(function processTarget(ot) {\n            if (ot.isActive()) {\n                if (calculateDepthForNode(ot.target) > depth) {\n                    ro.activeTargets.push(ot);\n                }\n                else {\n                    ro.skippedTargets.push(ot);\n                }\n            }\n        });\n    });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n    var depth = 0;\n    gatherActiveObservationsAtDepth(depth);\n    while (hasActiveObservations()) {\n        depth = broadcastActiveObservations();\n        gatherActiveObservationsAtDepth(depth);\n    }\n    if (hasSkippedObservations()) {\n        deliverResizeLoopError();\n    }\n    return depth > 0;\n};\nexport { process };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n    if (!trigger) {\n        var toggle_1 = 0;\n        var el_1 = document.createTextNode('');\n        var config = { characterData: true };\n        new MutationObserver(function () { return notify(); }).observe(el_1, config);\n        trigger = function () { el_1.textContent = \"\".concat(toggle_1 ? toggle_1-- : toggle_1++); };\n    }\n    callbacks.push(callback);\n    trigger();\n};\nexport { queueMicroTask };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n    queueMicroTask(function ResizeObserver() {\n        requestAnimationFrame(cb);\n    });\n};\nexport { queueResizeObserver };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n    'resize',\n    'load',\n    'transitionend',\n    'animationend',\n    'animationstart',\n    'animationiteration',\n    'keyup',\n    'keydown',\n    'mouseup',\n    'mousedown',\n    'mouseover',\n    'mouseout',\n    'blur',\n    'focus'\n];\nvar time = function (timeout) {\n    if (timeout === void 0) { timeout = 0; }\n    return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n    function Scheduler() {\n        var _this = this;\n        this.stopped = true;\n        this.listener = function () { return _this.schedule(); };\n    }\n    Scheduler.prototype.run = function (timeout) {\n        var _this = this;\n        if (timeout === void 0) { timeout = CATCH_PERIOD; }\n        if (scheduled) {\n            return;\n        }\n        scheduled = true;\n        var until = time(timeout);\n        queueResizeObserver(function () {\n            var elementsHaveResized = false;\n            try {\n                elementsHaveResized = process();\n            }\n            finally {\n                scheduled = false;\n                timeout = until - time();\n                if (!isWatching()) {\n                    return;\n                }\n                if (elementsHaveResized) {\n                    _this.run(1000);\n                }\n                else if (timeout > 0) {\n                    _this.run(timeout);\n                }\n                else {\n                    _this.start();\n                }\n            }\n        });\n    };\n    Scheduler.prototype.schedule = function () {\n        this.stop();\n        this.run();\n    };\n    Scheduler.prototype.observe = function () {\n        var _this = this;\n        var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n        document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n    };\n    Scheduler.prototype.start = function () {\n        var _this = this;\n        if (this.stopped) {\n            this.stopped = false;\n            this.observer = new MutationObserver(this.listener);\n            this.observe();\n            events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n        }\n    };\n    Scheduler.prototype.stop = function () {\n        var _this = this;\n        if (!this.stopped) {\n            this.observer && this.observer.disconnect();\n            events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n            this.stopped = true;\n        }\n    };\n    return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n    !watching && n > 0 && scheduler.start();\n    watching += n;\n    !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n    return !isSVG(target)\n        && !isReplacedElement(target)\n        && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n    function ResizeObservation(target, observedBox) {\n        this.target = target;\n        this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n        this.lastReportedSize = {\n            inlineSize: 0,\n            blockSize: 0\n        };\n    }\n    ResizeObservation.prototype.isActive = function () {\n        var size = calculateBoxSize(this.target, this.observedBox, true);\n        if (skipNotifyOnElement(this.target)) {\n            this.lastReportedSize = size;\n        }\n        if (this.lastReportedSize.inlineSize !== size.inlineSize\n            || this.lastReportedSize.blockSize !== size.blockSize) {\n            return true;\n        }\n        return false;\n    };\n    return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n    function ResizeObserverDetail(resizeObserver, callback) {\n        this.activeTargets = [];\n        this.skippedTargets = [];\n        this.observationTargets = [];\n        this.observer = resizeObserver;\n        this.callback = callback;\n    }\n    return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n    for (var i = 0; i < observationTargets.length; i += 1) {\n        if (observationTargets[i].target === target) {\n            return i;\n        }\n    }\n    return -1;\n};\nvar ResizeObserverController = (function () {\n    function ResizeObserverController() {\n    }\n    ResizeObserverController.connect = function (resizeObserver, callback) {\n        var detail = new ResizeObserverDetail(resizeObserver, callback);\n        observerMap.set(resizeObserver, detail);\n    };\n    ResizeObserverController.observe = function (resizeObserver, target, options) {\n        var detail = observerMap.get(resizeObserver);\n        var firstObservation = detail.observationTargets.length === 0;\n        if (getObservationIndex(detail.observationTargets, target) < 0) {\n            firstObservation && resizeObservers.push(detail);\n            detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n            updateCount(1);\n            scheduler.schedule();\n        }\n    };\n    ResizeObserverController.unobserve = function (resizeObserver, target) {\n        var detail = observerMap.get(resizeObserver);\n        var index = getObservationIndex(detail.observationTargets, target);\n        var lastObservation = detail.observationTargets.length === 1;\n        if (index >= 0) {\n            lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n            detail.observationTargets.splice(index, 1);\n            updateCount(-1);\n        }\n    };\n    ResizeObserverController.disconnect = function (resizeObserver) {\n        var _this = this;\n        var detail = observerMap.get(resizeObserver);\n        detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n        detail.activeTargets.splice(0, detail.activeTargets.length);\n    };\n    return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n    function ResizeObserver(callback) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (typeof callback !== 'function') {\n            throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n        }\n        ResizeObserverController.connect(this, callback);\n    }\n    ResizeObserver.prototype.observe = function (target, options) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (!isElement(target)) {\n            throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n        }\n        ResizeObserverController.observe(this, target, options);\n    };\n    ResizeObserver.prototype.unobserve = function (target) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (!isElement(target)) {\n            throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n        }\n        ResizeObserverController.unobserve(this, target);\n    };\n    ResizeObserver.prototype.disconnect = function () {\n        ResizeObserverController.disconnect(this);\n    };\n    ResizeObserver.toString = function () {\n        return 'function ResizeObserver () { [polyfill code] }';\n    };\n    return ResizeObserver;\n}());\nexport { ResizeObserver };\n","import { type MaybeRef, getCurrentScope, onScopeDispose, unref, watch } from 'vue'\n\nimport { isClient, noop } from '@vexip-ui/utils'\nimport { ResizeObserver } from '@juggle/resize-observer'\n\nexport interface ResizeInfo extends ResizeObserverEntry {\n  offsetWidth: number,\n  offsetHeight: number,\n  width: number,\n  height: number,\n}\n\nexport type ResizeHandler = (entry: ResizeInfo) => any\n\nexport interface UseResizeOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: MaybeRef<HTMLElement | null | undefined>,\n  onResize?: ResizeHandler,\n}\n\nconst handlerMap = new WeakMap<Element, ResizeHandler>()\n\nfunction handleResize(entries: ResizeObserverEntry[]) {\n  for (let i = 0, len = entries.length; i < len; ++i) {\n    const entry = entries[i]\n    const handler = handlerMap.get(entry.target)\n\n    if (typeof handler === 'function') {\n      const { inlineSize, blockSize } = entry.borderBoxSize?.[0] ?? {}\n      const { offsetWidth, offsetHeight } = entry.target as HTMLElement\n\n      handler(\n        Object.assign(entry, {\n          offsetWidth,\n          offsetHeight,\n          width: inlineSize ?? offsetWidth,\n          height: blockSize ?? offsetHeight,\n        }),\n      )\n    }\n  }\n}\n\nconst resizeObserver = new (isClient ? window.ResizeObserver || ResizeObserver : ResizeObserver)(\n  handleResize,\n)\n\nexport function observeResize(el: Element, handler: ResizeHandler) {\n  handlerMap.set(el, handler)\n  resizeObserver.observe(el)\n}\n\nexport function unobserveResize(el: Element) {\n  if (handlerMap.has(el)) {\n    resizeObserver.unobserve(el)\n    handlerMap.delete(el)\n  }\n}\n\nexport function useResize(options: UseResizeOptions = {}) {\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(options.target),\n    el => {\n      remove()\n\n      if (!el || typeof options.onResize !== 'function') {\n        return\n      }\n\n      observeResize(el, options.onResize)\n\n      remove = () => {\n        unobserveResize(el)\n        remove = noop\n      }\n    },\n    { immediate: true },\n  )\n\n  const unobserve = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(unobserve)\n\n  return {\n    /**\n     * @deprecated Will be removed in next major version, please directly use `observeResize` from imports.\n     */\n    observeResize,\n    /**\n     * @deprecated Will be removed in next major version, please directly use `unobserveResize` from imports.\n     */\n    unobserveResize,\n    unobserve,\n  }\n}\n","import { computed, ref } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\nimport { observeResize } from './resize'\n\nimport type { Ref } from 'vue'\n\nconst rtl = ref(false)\nconst computedRtl: Ref<boolean> = computed(() => rtl.value)\n\nconst elId = '__rtl_observer__'\n\nexport function useRtl() {\n  if (isClient && !document.querySelector(`#${elId}`)) {\n    initObserver()\n  }\n\n  return { isRtl: computedRtl }\n}\n\nfunction initObserver() {\n  if (!isClient) return\n\n  const style = document.createElement('style')\n  const content = `#${elId} { width: 1px } html.rtl #${elId}, html[dir='rtl'] #${elId} { width: 2px }`\n\n  style.textContent = content\n  document.head.appendChild(style)\n\n  const observer = document.createElement('div')\n\n  observer.id = elId\n  observer.role = 'none'\n  observer.style.cssText =\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\n\n  observeResize(observer, () => {\n    if (!isClient) return\n\n    rtl.value =\n      document.documentElement.classList.contains('rtl') ||\n      document.documentElement.getAttribute('dir') === 'rtl'\n  })\n\n  document.body.appendChild(observer)\n}\n","import { onMounted, ref, shallowRef, unref, watch, watchEffect } from 'vue'\n\nimport {\n  arrow,\n  autoUpdate,\n  computePosition,\n  flip,\n  hide,\n  offset,\n  platform,\n  shift,\n} from '@floating-ui/dom'\nimport { useRtl } from './rtl'\nimport { isClient } from '@vexip-ui/utils'\n\nimport type { MaybeRef, Ref } from 'vue'\nimport type {\n  ComputePositionConfig,\n  Middleware,\n  OffsetOptions,\n  Placement,\n  ShiftOptions,\n  VirtualElement,\n} from '@floating-ui/dom'\nimport type { TransferNode } from '@vexip-ui/utils'\n\nexport interface UsePopperOptions {\n  /**\n   * popper 元素出现的位置\n   */\n  placement: MaybeRef<Placement>,\n  /**\n   * popper 元素需要迁移至的目标选择器，为 true 时会迁移至 body\n   */\n  transfer?: MaybeRef<boolean | string>,\n  /**\n   * 设置是否为从右向左的阅读方向\n   */\n  isRtl?: MaybeRef<boolean>,\n  /**\n   * 包围元素，用于判断 clickoutside 事件\n   *\n   * 即使 popper 元素迁移至 wrapper 元素外部，点击 popper 元素时仍认为处于 wrapper 元素内部\n   */\n  wrapper?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 设置 popper 元素为否需要 drop，此时 transform-origin 会自动调整\n   */\n  isDrop?: MaybeRef<boolean>,\n  /**\n   * 参考元素，popper 元素的位置计算依据\n   */\n  reference?: Ref<HTMLElement | VirtualElement | null | undefined>,\n  /**\n   * popper 元素\n   */\n  popper?: Ref<HTMLElement | null | undefined>,\n  /**\n   * arrow 元素\n   */\n  arrow?: Ref<HTMLElement | null | undefined>,\n  /**\n   * popper 元素的偏移量，可传入一个回调函数\n   */\n  offset?: MaybeRef<number[] | OffsetOptions>,\n  /**\n   * popper 元素是否限制在窗口内\n   */\n  shift?: MaybeRef<boolean | ShiftOptions>,\n  /**\n   * 设置是否自动更新 popper 元素\n   *\n   * @default false\n   */\n  autoUpdate?: boolean,\n}\n\nexport type { Placement, VirtualElement }\n\nexport const placementWhileList = Object.freeze<Placement[]>([\n  'top',\n  'top-start',\n  'top-end',\n  'bottom',\n  'bottom-start',\n  'bottom-end',\n  'left',\n  'left-start',\n  'left-end',\n  'right',\n  'right-start',\n  'right-end',\n])\n\nexport function usePopper(initOptions: UsePopperOptions) {\n  const { transfer, wrapper, isDrop = false } = initOptions\n\n  const reference: Ref<HTMLElement | null | undefined> =\n    (initOptions.reference as any) ?? shallowRef(null)\n  const popper: Ref<HTMLElement | null | undefined> = initOptions.popper ?? shallowRef(null)\n  const arrowRef: Ref<HTMLElement | null | undefined> = initOptions.arrow ?? shallowRef(null)\n\n  const placement = ref(unref(initOptions.placement))\n  const transferTo = ref('')\n  const isRtl = initOptions.isRtl ?? useRtl().isRtl\n\n  if (wrapper) {\n    watchEffect(() => {\n      const wrapperEl = unref(wrapper)\n      const popperEl = unref(popper)\n\n      if (wrapperEl) {\n        ;(wrapperEl as TransferNode).__transferElement = popperEl\n      }\n    })\n  }\n\n  if (transfer != null) {\n    watch(\n      () => unref(transfer),\n      value => {\n        setTransferTo(value)\n        updatePopper()\n      },\n    )\n\n    setTransferTo(unref(transfer))\n  }\n\n  onMounted(() => {\n    requestAnimationFrame(() => {\n      watchEffect(updatePopperInternal)\n    })\n  })\n\n  let cleanup: (() => void) | undefined\n\n  async function updatePopperInternal() {\n    if (!isClient) return\n\n    cleanup?.()\n\n    const referenceEl = unref(reference)\n    const popperEl = unref(popper)\n\n    if (!referenceEl || !popperEl) return\n\n    const arrowEl = unref(arrowRef)\n\n    const middleware: Middleware[] = [flip()]\n\n    if (isDrop) {\n      middleware.push({\n        name: 'origin',\n        fn({ placement, elements }) {\n          const origin = setPopperDropOrigin(placement)\n\n          if (origin) {\n            elements.floating.style.transformOrigin = origin\n          }\n\n          return {}\n        },\n      })\n    }\n\n    if (initOptions.offset) {\n      let offsetOptions = unref(initOptions.offset)\n\n      if (Array.isArray(offsetOptions)) {\n        offsetOptions = {\n          mainAxis: offsetOptions[1],\n          crossAxis: offsetOptions[0],\n        }\n      }\n\n      middleware.push(offset(offsetOptions))\n    }\n\n    if (initOptions.shift) {\n      let shiftOptions = unref(initOptions.shift)\n\n      if (typeof shiftOptions === 'boolean') {\n        shiftOptions = {}\n      }\n\n      middleware.push(shift(shiftOptions))\n    }\n\n    if (arrowEl) {\n      middleware.push(arrow({ element: arrowEl }))\n    }\n\n    middleware.push(hide({ strategy: 'escaped' }))\n\n    const rtl = unref(isRtl) || false\n    const options: ComputePositionConfig = {\n      middleware,\n      placement: unref(initOptions.placement),\n      platform: {\n        ...platform,\n        isRTL: async () => rtl,\n      },\n    }\n\n    const update = async () => {\n      const {\n        x,\n        y,\n        placement: activePlacement,\n        strategy,\n        middlewareData,\n      } = await computePosition(referenceEl, popperEl, options)\n\n      if (unref(reference) !== referenceEl) {\n        if (unref(popper) === popperEl) {\n          Object.assign(popperEl.style, {\n            position: '',\n            top: '',\n            left: '',\n          })\n        }\n\n        return\n      }\n\n      const style: Partial<CSSStyleDeclaration> = {\n        position: strategy,\n        top: `${y}px`,\n        left: `${x}px`,\n      }\n\n      // if (middlewareData.hide?.escaped) {\n      //   style.visibility = 'hidden'\n      // } else {\n      //   style.visibility = ''\n      // }\n\n      if (arrowEl) {\n        if (middlewareData.arrow) {\n          const { x, y } = middlewareData.arrow\n\n          Object.assign(arrowEl.style, {\n            top: y != null ? `${y}px` : '',\n            left: x != null ? `${x}px` : '',\n          })\n        } else {\n          Object.assign(arrowEl.style, { top: '', left: '' })\n        }\n      }\n\n      Object.assign(popperEl.style, style)\n      popperEl.dataset.popperPlacement = activePlacement\n      placement.value = activePlacement\n    }\n\n    if (initOptions.autoUpdate) {\n      cleanup = autoUpdate(referenceEl, popperEl, update)\n    }\n\n    await update()\n  }\n\n  const updatePopper = () => {\n    return new Promise<void>(resolve => {\n      requestAnimationFrame(() => {\n        updatePopperInternal().then(resolve)\n      })\n    })\n  }\n\n  function setTransferTo(value: boolean | string) {\n    transferTo.value = typeof value === 'boolean' ? (value ? 'body' : '') : value\n  }\n\n  // function normalizePlacement(placement: Placement, rtl: boolean) {\n  //   if (!rtl) return placement\n\n  //   let [start, end] = placement.split('-')\n\n  //   if (start === 'left' || start === 'right') {\n  //     start = start === 'left' ? 'right' : 'left'\n  //   } else {\n  //     if (!end) return placement\n\n  //     end = end === 'start' ? 'end' : 'start'\n  //   }\n\n  //   return `${start}-${end}` as Placement\n  // }\n\n  function setPopperDropOrigin(placement: Placement) {\n    if (placement !== 'left' && placement !== 'right') {\n      const [start, end] = placement.split('-')\n\n      return start === 'bottom' || (start !== 'top' && end === 'start')\n        ? 'center top'\n        : 'center bottom'\n    }\n  }\n\n  return {\n    wrapper,\n    reference,\n    popper,\n    placement,\n    transferTo,\n    updatePopper,\n  }\n}\n","import { reactive, ref, watch } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\nimport { observeResize } from './resize'\n\nimport type { Ref } from 'vue'\nimport type { MaybeElement } from './shared/types'\n\nexport interface InitThemeOptions {\n  name: string,\n  rootClass?: string,\n  varsClass?: string,\n}\n\nconst styleId = '__theme_style__'\nconst elClass = '__theme_observer__'\n\nconst elCache = new WeakMap<Element, Element>()\n\nexport function useTheme(wrapper?: MaybeElement) {\n  const theme = ref<string>()\n\n  if (isClient) {\n    wrapper = wrapper || document.body\n\n    let observer = elCache.get(wrapper)\n\n    if (!observer) {\n      observer = createObserver(theme)!\n      wrapper.appendChild(observer)\n      elCache.set(wrapper, observer)\n    }\n  }\n\n  return { theme }\n}\n\nconst activeThemes = reactive(new Map<string, string[]>())\nconst themeWidths = new Map<number, string>()\n\nwatch(activeThemes, () => {\n  if (!isClient) return\n\n  themeWidths.clear()\n\n  const prevStyle = document.head.querySelector(`#${styleId}`)\n\n  if (prevStyle) {\n    document.head.removeChild(prevStyle)\n  }\n\n  const style = document.createElement('style')\n\n  let content = `.${elClass} { width: 1px }`\n  let width = 1\n\n  for (const [name, [rootClass, varsClass]] of activeThemes.entries()) {\n    content += ` html.${rootClass} .${elClass}, .${varsClass} .${elClass} { width: ${++width}px }`\n    themeWidths.set(width, name)\n  }\n\n  style.textContent = content\n  style.id = styleId\n  document.head.appendChild(style)\n})\n\nexport function addActiveThemes(themes: (string | InitThemeOptions)[]) {\n  for (const theme of themes) {\n    const {\n      name,\n      rootClass = name,\n      varsClass = `vxp-theme-vars-${rootClass}`,\n    } = typeof theme === 'string' ? ({ name: theme } as InitThemeOptions) : theme\n\n    activeThemes.set(name, [rootClass, varsClass])\n  }\n}\n\nexport function setActiveThemes(themes: (string | InitThemeOptions)[]) {\n  activeThemes.clear()\n  addActiveThemes(themes)\n}\n\nlet idCount = 0\n\nfunction getElId() {\n  return `__theme_observer_${idCount++}__`\n}\n\nfunction createObserver(theme: Ref<string | undefined>) {\n  if (!isClient) return\n\n  const observer = document.createElement('div')\n\n  observer.id = getElId()\n  observer.className = elClass\n  observer.role = 'none'\n  observer.style.cssText =\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\n\n  observeResize(observer, entry => {\n    if (!isClient) return\n\n    const width = entry.borderBoxSize?.[0].inlineSize ?? entry.contentRect.width\n\n    theme.value = themeWidths.get(width)\n  })\n\n  return observer\n}\n","import { onScopeDispose } from 'vue'\n\n/**\n * 获取用于记录 `setTimeout` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useSetTimeout() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      clearTimeout(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取用于记录 `setInterval` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useSetInterval() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      clearInterval(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取用于记录 `requestAnimationFrame` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useRaf() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      cancelAnimationFrame(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取三个分别用于记录 `setTimeout`、`setInterval` 和 `requestAnimationFrame` 返回值的对象\n *\n * 记录在这些对象上的定时器将会在作用域消除时自动清理\n */\nexport function useTimerRecord() {\n  const { timer: timeout } = useSetTimeout()\n  const { timer: interval } = useSetInterval()\n  const { timer: raf } = useRaf()\n\n  return { timeout, interval, raf }\n}\n","import { computed, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { createBITree, isDefined, nextFrameOnce, noop } from '@vexip-ui/utils'\nimport { isHiddenElement } from './display'\nimport { observeResize, unobserveResize } from './resize'\n\nimport type { MaybeRef } from 'vue'\n\ntype Key = number | string | symbol\ntype Data = Record<string, any>\ntype Behavior = ScrollToOptions['behavior']\n\nexport interface VirtualOptions<T extends Data> {\n  /**\n   * 虚拟滚动的元素\n   */\n  items: MaybeRef<T[]>,\n  /**\n   * 设置元素的最小高度\n   */\n  itemSize: MaybeRef<number>,\n  /**\n   * 设置元素是否为固定高度，固定高度时不处理 resize\n   */\n  itemFixed: MaybeRef<boolean>,\n  /**\n   * 元素的主键\n   */\n  idKey: MaybeRef<keyof T>,\n  /**\n   * 默认停留在的元素的主键，未实现\n   */\n  defaultKeyAt?: Key,\n  /**\n   * 设置前后的缓冲元素的个数\n   */\n  bufferSize?: MaybeRef<number>,\n  /**\n   * 虚拟滚动的包围元素\n   */\n  wrapper?: MaybeRef<HTMLElement | null | undefined>,\n  /**\n   * 是否自动观察 wrapper 缩放\n   *\n   * @default true\n   */\n  autoResize?: boolean,\n}\n\nexport function useVirtual<T extends Data = Data>(options: VirtualOptions<T>) {\n  const {\n    items,\n    itemSize,\n    itemFixed,\n    idKey,\n    defaultKeyAt,\n    bufferSize = ref(5),\n    wrapper = ref(null),\n    autoResize = true,\n  } = options\n\n  const indexMap = computed(() => {\n    const itemList = unref(items)\n    const length = itemList.length\n    const keyField = unref(idKey)\n    const map = new Map<Key, number>()\n\n    for (let i = 0; i < length; ++i) {\n      map.set(itemList[i][keyField], i)\n    }\n\n    return map\n  })\n  const visibleHeight = ref(0)\n  const heightDiffMap = new Map<Key, number>()\n  const heightTree = computed(() => {\n    const itemList = unref(items)\n    const length = itemList.length\n    const keyField = unref(idKey)\n    const tree = createBITree(length, unref(itemSize))\n\n    for (let i = 0; i < length; ++i) {\n      const key = itemList[i][keyField]\n      const heightDiff = heightDiffMap.get(key)\n\n      if (heightDiff) {\n        tree.add(i, heightDiff)\n      }\n    }\n\n    return tree\n  })\n  const treeUpdateDep = ref(0)\n  const scrollOffset = ref(0)\n  const startIndex = computed(() => {\n    return Math.max(\n      heightTree.value.boundIndex(scrollOffset.value) - Math.max(unref(bufferSize), 0),\n      0,\n    )\n  })\n  const visibleItems = computed(() => {\n    if (!visibleHeight.value || visibleHeight.value < 0) return []\n\n    const unrefItems = unref(items)\n    const endIndex = Math.min(\n      heightTree.value.boundIndex(scrollOffset.value + visibleHeight.value) +\n        1 +\n        Math.max(unref(bufferSize), 0),\n      unrefItems.length,\n    )\n\n    return unrefItems.slice(startIndex.value, endIndex)\n  })\n  const listStyle = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    treeUpdateDep.value\n\n    const height = heightTree.value.sum()\n    const fixed = unref(itemFixed)\n\n    return {\n      height: fixed ? `${height}px` : undefined,\n      minHeight: fixed ? undefined : `${height}px`,\n      boxSizing: 'content-box',\n    } as const\n  })\n  const itemsStyle = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    treeUpdateDep.value\n\n    return {\n      transform: `translate3d(0, ${heightTree.value.sum(startIndex.value)}px, 0)`,\n    }\n  })\n\n  watch(\n    () => unref(wrapper),\n    el => {\n      if (el && isDefined(defaultKeyAt)) {\n        requestAnimationFrame(() => {\n          requestAnimationFrame(() => {\n            scrollToKey(defaultKeyAt)\n          })\n        })\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  if (autoResize) {\n    let unobserve = noop\n\n    const stopWatch = watch(\n      () => [unref(wrapper), autoResize] as const,\n      ([el]) => {\n        unobserve()\n\n        if (!el) return\n\n        observeResize(el, handleResize)\n\n        unobserve = () => {\n          unobserveResize(el)\n          unobserve = noop\n        }\n\n        if (isDefined(defaultKeyAt)) {\n          scrollToKey(defaultKeyAt)\n        }\n      },\n      { immediate: true, flush: 'post' },\n    )\n\n    onScopeDispose(() => {\n      stopWatch()\n      unobserve()\n    })\n  }\n\n  function syncScrollOffset() {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      scrollOffset.value = wrapperEl.scrollTop\n    }\n  }\n\n  function handleScroll() {\n    nextFrameOnce(syncScrollOffset)\n  }\n\n  function handleResize(entry: ResizeObserverEntry) {\n    if (\n      isHiddenElement(entry.target as HTMLElement) ||\n      entry.contentRect.height === visibleHeight.value\n    ) {\n      return\n    }\n\n    visibleHeight.value = entry.contentRect.height\n  }\n\n  function handleItemResize(key: Key, entry: ResizeObserverEntry) {\n    if (unref(itemFixed)) return\n\n    const index = indexMap.value.get(key)!\n    const tree = heightTree.value\n    const prevHeight = tree.get(index)\n    const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\n\n    if (height === prevHeight) return\n\n    if (isHiddenElement(entry.target as HTMLElement)) {\n      if (prevHeight) {\n        tree.add(index, -prevHeight)\n        treeUpdateDep.value++\n      }\n\n      return\n    }\n\n    const diff = height - unref(itemSize)\n    const delta = height - prevHeight\n\n    if (diff) {\n      heightDiffMap.set(key, diff)\n    } else {\n      heightDiffMap.delete(key)\n    }\n\n    if (!delta) return\n\n    tree.add(index, delta)\n    treeUpdateDep.value++\n\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      const prevTop = tree.sum(index)\n\n      if (wrapperEl.scrollTop > prevTop) {\n        wrapperEl.scrollBy(0, delta)\n      }\n\n      scrollOffset.value = wrapperEl.scrollTop\n    }\n  }\n\n  function scrollTo(top: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollTo({\n        behavior,\n        top,\n        left: 0,\n      })\n    }\n  }\n\n  function scrollBy(delta: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollBy({\n        behavior,\n        top: delta,\n        left: 0,\n      })\n    }\n  }\n\n  function scrollToKey(key: Key, behavior?: Behavior) {\n    const index = indexMap.value.get(key)\n\n    if (index != null) {\n      scrollToIndex(index, behavior)\n    }\n  }\n\n  function scrollToIndex(index: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollTo({\n        behavior,\n        top: heightTree.value.sum(index),\n        left: 0,\n      })\n    }\n  }\n\n  function ensureIndexInView(index: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (!wrapperEl) return\n\n    const tree = heightTree.value\n    const viewTop = wrapperEl.scrollTop\n    const top = tree.sum(index)\n\n    if (top < viewTop) {\n      scrollToIndex(index, behavior)\n      return\n    }\n\n    const viewHeight = wrapperEl.offsetHeight\n    const viewBottom = viewTop + viewHeight\n    const bottom = tree.sum(index + 1)\n\n    if (bottom > viewBottom) {\n      scrollTo(bottom - viewHeight, behavior)\n    }\n  }\n\n  function ensureKeyInView(key: Key, behavior?: Behavior) {\n    const index = indexMap.value.get(key)\n\n    if (index != null) {\n      ensureIndexInView(index, behavior)\n    }\n  }\n\n  return {\n    wrapper,\n    indexMap,\n    heightTree,\n    startIndex,\n    scrollOffset,\n    visibleItems,\n    listStyle,\n    itemsStyle,\n    handleScroll,\n    handleResize,\n    handleItemResize,\n    scrollTo,\n    scrollBy,\n    scrollToKey,\n    scrollToIndex,\n    ensureIndexInView,\n    ensureKeyInView,\n  }\n}\n","import { observeResize, unobserveResize } from '@vexip-ui/hooks'\nimport { noop, throttle } from '@vexip-ui/utils'\n\nimport type { DirectiveBinding, ObjectDirective } from 'vue'\nimport type { ResizeHandler } from '@vexip-ui/hooks'\n\nexport interface VResizeOptions {\n  handler: ResizeHandler,\n  throttle?: boolean | number,\n  disabled?: boolean,\n}\n\ninterface ResizeRecord {\n  useThrottle: boolean | number,\n  observed: boolean,\n}\n\nfunction createObserver(\n  el: HTMLElement & { __resize?: ResizeRecord },\n  binding: DirectiveBinding<ResizeHandler | VResizeOptions>,\n) {\n  const options: VResizeOptions =\n    typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\n  const useThrottle = options.throttle || binding.modifiers.throttle || false\n\n  el.__resize = {\n    useThrottle,\n    observed: false,\n  }\n\n  if (options.disabled) {\n    unobserveResize(el)\n    el.__resize.observed = false\n    return\n  }\n\n  const throttleResize = useThrottle\n    ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\n    : options.handler\n\n  observeResize(el, throttleResize)\n  el.__resize.observed = true\n}\n\nexport const vResize: ObjectDirective<\n  HTMLElement & { __resize?: ResizeRecord },\n  ResizeHandler | VResizeOptions\n> = {\n  mounted(el, binding) {\n    createObserver(el, binding)\n  },\n  updated(el, binding) {\n    if (!el.__resize) {\n      createObserver(el, binding)\n      return\n    }\n\n    const options: VResizeOptions =\n      typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\n    const useThrottle = options.throttle || binding.modifiers.throttle\n\n    const getHandler = () =>\n      useThrottle\n        ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\n        : options.handler\n\n    if (options.disabled) {\n      if (el.__resize.observed) {\n        unobserveResize(el)\n        el.__resize.observed = false\n      }\n    } else if (!el.__resize.observed) {\n      observeResize(el, getHandler())\n      el.__resize.observed = true\n    } else {\n      const prevOptions: VResizeOptions =\n        typeof binding.oldValue === 'function'\n          ? { handler: binding.oldValue }\n          : { ...(binding.oldValue || { handler: noop }) }\n\n      if (useThrottle !== el.__resize.useThrottle || options.handler !== prevOptions.handler) {\n        unobserveResize(el)\n        observeResize(el, getHandler())\n      }\n    }\n  },\n  beforeUnmount(el) {\n    if (el.__resize?.observed) {\n      unobserveResize(el)\n    }\n\n    delete el.__resize\n  },\n}\n","import { vLoading } from './loading'\nimport { vResize } from './resize'\n\nimport type { App } from 'vue'\n\nexport function installDirectives(app: App) {\n  app.directive('loading', vLoading)\n  app.directive('resize', vResize)\n}\n\nexport * from './loading'\nexport * from './resize'\n","import { buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { AffixPositionType } from './symbol'\n\nexport const affixProps = buildProps({\n  offset: Number,\n  zIndex: Number,\n  position: String as PropType<AffixPositionType>,\n  target: [String, Object, Function] as PropType<unknown>,\n\n  onScroll: eventProp(),\n  onChange: eventProp(),\n})\n\nexport type AffixProps = ExtractPropTypes<typeof affixProps>\nexport type AffixCProps = ConfigurableProps<ExtractPropTypes<typeof affixProps>>\n","import { unref } from 'vue'\n\nimport type { MaybeRef } from 'vue'\n\nlet lastScroller: Window | HTMLElement | null | undefined = null\n\nexport function handleLastScroller(target: MaybeRef<HTMLElement | null | undefined>) {\n  target = unref(target)\n\n  if (lastScroller !== unref(target)) {\n    if (lastScroller && lastScroller !== window && lastScroller !== document.documentElement) {\n      const targetAffix = (lastScroller as HTMLElement).querySelector(\n        '.vxp-affix--fixed',\n      ) as HTMLElement\n\n      if (targetAffix) {\n        targetAffix.classList.remove('vxp-affix--fixed')\n      }\n    }\n\n    lastScroller = target\n  }\n}\n\nexport function clearLastScroller(target: MaybeRef<HTMLElement | null | undefined>) {\n  if (lastScroller && lastScroller === unref(target)) {\n    lastScroller = null\n  }\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  shallowRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { affixProps } from './props'\nimport { callIfFunc, isClient, isElement } from '@vexip-ui/utils'\nimport { clearLastScroller, handleLastScroller } from './helpers'\n\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { ScrollExposed } from '@/components/scroll'\n\nimport type { CSSProperties, ComponentInternalInstance } from 'vue'\n\ntype ScrollType = NativeScrollExposed & ScrollExposed\n\ndefineOptions({ name: 'Affix' })\n\nconst _props = defineProps(affixProps)\nconst props = useProps('affix', _props, {\n  offset: 0,\n  zIndex: 100,\n  position: 'top',\n  target: null,\n})\n\nconst nh = useNameHelper('affix')\n\nconst instance = getCurrentInstance()!\n\nconst wrapper = shallowRef<HTMLElement>()\nconst target = shallowRef<HTMLElement>()\nconst container = shallowRef<Window | HTMLElement>()\n\nlet isRawViewer = false\nlet scroller: ScrollType | null = null\n\nconst fixed = ref(false)\nconst affixHeight = ref(0)\nconst affixWidth = ref(0)\nconst scrollTop = ref(0)\nconst clientHeight = ref(0)\nconst transform = ref(0)\n\nconst affixStyle = computed<CSSProperties>(() => {\n  return {\n    height: fixed.value ? `${affixHeight.value}px` : '',\n    width: fixed.value ? `${affixWidth.value}px` : '',\n  }\n})\nconst fixedStyle = computed<CSSProperties>(() => {\n  if (!fixed.value) return {}\n\n  let _top = props.offset\n  let _bottom = props.offset\n\n  if (isElement(container.value)) {\n    if (props.target && props.position === 'top') {\n      _top += transform.value\n    } else {\n      _bottom += transform.value\n    }\n  }\n\n  return {\n    height: `${affixHeight.value}px`,\n    width: `${affixWidth.value}px`,\n    top: props.position === 'top' ? `${_top}px` : '',\n    bottom: props.position === 'bottom' ? `${_bottom}px` : '',\n    zIndex: props.zIndex,\n  }\n})\n\nwatchEffect(update)\nwatch(fixed, fixed => {\n  emitEvent(props.onChange, fixed)\n})\n\ndefineExpose({ update })\n\nonMounted(() => {\n  if (props.target) {\n    const _target: unknown = callIfFunc(props.target)\n\n    if (typeof _target === 'string') {\n      target.value = document.querySelector<HTMLElement>(_target) ?? undefined\n\n      if (!target.value) {\n        throw new Error(`[vexip-ui:Affix] target not exists: ${props.target}`)\n      }\n    } else {\n      target.value = _target as any\n    }\n  } else {\n    target.value = document.documentElement\n  }\n\n  updateContainer()\n})\n\nonBeforeUnmount(() => {\n  removeListener()\n})\n\nfunction update() {\n  if (!wrapper.value || !target.value || !container.value) return\n\n  const wrapperRect = wrapper.value.getBoundingClientRect()\n  const targetRect = target.value.getBoundingClientRect()\n\n  affixHeight.value = wrapperRect.height\n  affixWidth.value = wrapperRect.width\n  scrollTop.value =\n    container.value === window\n      ? document.documentElement.scrollTop\n      : (container.value as unknown as ScrollType).scrollY || 0\n  scrollTop.value = document.documentElement.scrollTop\n  clientHeight.value = document.documentElement.clientHeight\n\n  if (props.position === 'top') {\n    if (props.target) {\n      transform.value = targetRect.top\n      fixed.value = wrapperRect.top < targetRect.top + props.offset\n    } else {\n      fixed.value = props.offset > wrapperRect.top\n    }\n  } else {\n    if (props.target) {\n      transform.value = clientHeight.value - targetRect.bottom\n      fixed.value = targetRect.bottom < props.offset + wrapperRect.bottom\n    } else {\n      fixed.value = clientHeight.value - props.offset < wrapperRect.bottom\n    }\n  }\n}\n\nfunction handleContainerScroll() {\n  handleLastScroller(target)\n  update()\n\n  emitEvent(props.onScroll, {\n    scrollTop: scrollTop.value,\n    fixed: fixed.value,\n  })\n}\n\nfunction updateContainer() {\n  removeListener()\n\n  if (!isClient) return\n\n  if (props.target) {\n    container.value = target.value!\n    container.value.addEventListener('scroll', handleContainerScroll)\n  } else {\n    let _container: ComponentInternalInstance | null = instance.parent!\n    const refName = 'scroll'\n\n    while (_container) {\n      const name = _container.type?.name\n\n      if (name === 'Scroll' || name === 'NativeScroll') {\n        const { exposeProxy, exposed, proxy } = _container\n        const _scroller = new Proxy({} as any, {\n          get(_, key) {\n            return (proxy as any)?.[key] ?? (exposeProxy as any)?.[key] ?? (exposed as any)?.[key]\n          },\n        })\n        const scrollerEl = _scroller?.$el as HTMLElement\n\n        if (!scrollerEl.getAttribute('class')?.includes('vxp-native-scroll--horizontal')) {\n          scroller = _scroller\n          break\n        }\n      }\n\n      const refTemp = _container.refs?.[refName]\n\n      if (refTemp) {\n        if (isElement(refTemp)) {\n          isRawViewer = true\n          container.value = refTemp as HTMLElement\n        } else {\n          scroller = refTemp as ScrollType\n        }\n\n        break\n      }\n\n      _container = _container.parent\n    }\n\n    if (scroller) {\n      scroller.addScrollListener(handleContainerScroll)\n      container.value = scroller.$el\n    } else if (!container.value) {\n      isRawViewer = true\n      container.value = window\n    }\n\n    if (isRawViewer && container.value) {\n      container.value.addEventListener('scroll', handleContainerScroll)\n    }\n  }\n}\n\nfunction removeListener() {\n  if (scroller) {\n    scroller.removeScrollListener(handleContainerScroll)\n    scroller = null\n  }\n\n  if (container.value) {\n    container.value.removeEventListener('scroll', handleContainerScroll)\n    container.value = undefined\n  }\n\n  clearLastScroller(target)\n}\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"nh.b()\" :style=\"affixStyle\">\n    <div :class=\"{ [nh.bm('fixed')]: fixed }\" :style=\"fixedStyle\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { CollapseAliveType, CollapseArrowType, CollapsePanelSlots } from './symbol'\n\nexport const collapseProps = buildProps({\n  expanded: [String, Number, Array] as PropType<string | number | (string | number)[]>,\n  card: booleanProp,\n  accordion: booleanProp,\n  arrowType: String as PropType<CollapseArrowType>,\n  ghost: booleanProp,\n  alive: {\n    type: [Boolean, String] as PropType<boolean | CollapseAliveType>,\n    default: null,\n  },\n  onChange: eventProp<(expanded: (string | number)[]) => void>(),\n})\n\nexport type CollapseProps = ExtractPropTypes<typeof collapseProps>\nexport type CollapseCProps = ConfigurableProps<CollapseProps, 'expanded'>\n\nexport const collapsePanelProps = buildProps({\n  label: [String, Number],\n  title: String,\n  disabled: booleanProp,\n  contentStyle: styleProp,\n  expanded: booleanProp,\n  card: booleanProp,\n  arrowType: String as PropType<CollapseArrowType>,\n  icon: iconProp,\n  ghost: booleanProp,\n  alive: {\n    type: [Boolean, String] as PropType<boolean | CollapseAliveType>,\n    default: null,\n  },\n  slots: Object as PropType<CollapsePanelSlots>,\n  onToggle: eventProp<(expanded: boolean) => void>(),\n})\n\nexport type CollapsePanelProps = ExtractPropTypes<typeof collapsePanelProps>\nexport type CollapsePanelCProps = ConfigurableProps<CollapsePanelProps>\n\ntype TransitionMode = 'in-out' | 'out-in' | 'default'\n\nexport const collapseTransitionProps = buildProps({\n  appear: booleanProp,\n  mode: String as PropType<TransitionMode>,\n  horizontal: booleanProp,\n  duration: Number,\n  timing: String,\n  fadeEffect: booleanProp,\n  /**\n   * Internal prop for Tree, reverse the enter transition\n   *\n   * @internal\n   */\n  reverse: booleanProp,\n  disabled: booleanProp,\n  onBeforeEnter: eventProp<(el: Element) => void>(),\n  onEnter: eventProp<(el: Element) => void>(),\n  onAfterEnter: eventProp<(el: Element) => void>(),\n  onEnterCancelled: eventProp<(el: Element) => void>(),\n  onBeforeLeave: eventProp<(el: Element) => void>(),\n  onLeave: eventProp<(el: Element) => void>(),\n  onAfterLeave: eventProp<(el: Element) => void>(),\n  onLeaveCancelled: eventProp<(el: Element) => void>(),\n})\n\nexport type CollapseTransitionProps = ExtractPropTypes<typeof collapseTransitionProps>\nexport type CollapseTransitionCProps = ConfigurableProps<CollapseTransitionProps>\n","import { Transition, defineComponent, h, renderSlot } from 'vue'\n\nimport { emitEvent, useProps } from '@vexip-ui/config'\nimport { collapseTransitionProps } from './props'\n\nexport default defineComponent({\n  name: 'CollapseTransition',\n  props: collapseTransitionProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('collapseTransition', _props, {\n      appear: false,\n      mode: {\n        default: 'default',\n        validator: value => ['in-out', 'out-in', 'default'].includes(value),\n      },\n      horizontal: false,\n      duration: {\n        default: 250,\n        validator: (value: number) => value >= 200,\n      },\n      timing: null,\n      fadeEffect: false,\n      reverse: false,\n    })\n\n    let enterStage: 'before' | 'in' | null = null\n    let leaveStage: 'before' | 'in' | null = null\n\n    return () => {\n      if (props.disabled) {\n        return renderSlot(slots, 'default')\n      }\n\n      const duration = props.duration\n      const timing = props.timing || 'ease-in-out'\n\n      let height: 'maxWidth' | 'maxHeight' = 'maxHeight'\n      let paddingTop: 'paddingTop' | 'paddingLeft' = 'paddingTop'\n      let paddingBottom: 'paddingRight' | 'paddingBottom' = 'paddingBottom'\n      let marginTop: 'marginTop' | 'marginLeft' = 'marginTop'\n      let marginBottom: 'marginRight' | 'marginBottom' = 'marginBottom'\n      let scrollHeight: 'scrollHeight' | 'scrollWidth' = 'scrollHeight'\n      let transition = `\n        max-height ${duration}ms ${timing},\n        padding-top ${duration}ms ${timing},\n        padding-bottom ${duration}ms ${timing},\n        margin-top ${duration}ms ${timing},\n        margin-bottom ${duration}ms ${timing}\n      `\n\n      if (props.horizontal) {\n        height = 'maxWidth'\n        paddingTop = 'paddingLeft'\n        paddingBottom = 'paddingRight'\n        marginTop = 'marginLeft'\n        marginBottom = 'marginRight'\n        scrollHeight = 'scrollWidth'\n        transition = `\n          max-width ${duration}ms ${timing},\n          padding-inline-start ${duration}ms ${timing},\n          padding-inline-end ${duration}ms ${timing},\n          margin-inline-start ${duration}ms ${timing},\n          margin-inline-end ${duration}ms ${timing}\n        `\n      }\n\n      if (props.fadeEffect) {\n        transition = `\n          ${transition},\n          opacity ${duration}ms ease\n        `\n      }\n\n      const enterRecord: Partial<CSSStyleDeclaration> = {}\n      const leaveRecord: Partial<CSSStyleDeclaration> = {}\n\n      return h(\n        Transition,\n        {\n          appear: props.appear,\n          mode: props.mode,\n          onBeforeEnter($el) {\n            if (enterStage) return\n\n            enterStage = 'before'\n            const el = $el as HTMLElement\n\n            enterRecord.paddingTop = el.style[paddingTop]\n            enterRecord.paddingBottom = el.style[paddingBottom]\n            enterRecord.marginTop = el.style[marginTop]\n            enterRecord.marginBottom = el.style[marginBottom]\n            enterRecord.transition = el.style.transition\n            enterRecord.boxSizing = el.style.boxSizing\n            enterRecord.opacity = el.style.opacity\n\n            el.style.transition = transition\n\n            if (!props.reverse) {\n              el.style[height] = '0'\n              el.style[paddingTop] = '0'\n              el.style[paddingBottom] = '0'\n              el.style[marginTop] = '0'\n              el.style[marginBottom] = '0'\n              el.style.boxSizing = 'content-box'\n\n              if (props.fadeEffect) {\n                el.style.opacity = '0'\n              }\n            }\n\n            emitEvent(props.onBeforeEnter, $el)\n          },\n          onEnter($el) {\n            if (enterStage === 'in') return\n\n            enterStage = 'in'\n            const el = $el as HTMLElement\n\n            enterRecord.overflow = el.style.overflow\n            el.style.overflow = 'hidden'\n\n            if (el[scrollHeight] !== 0) {\n              el.style[height] = `${el[scrollHeight]}px`\n            } else {\n              el.style[height] = ''\n            }\n\n            el.style[paddingTop] = enterRecord.paddingTop!\n            el.style[paddingBottom] = enterRecord.paddingBottom!\n            el.style[marginTop] = enterRecord.marginTop!\n            el.style[marginBottom] = enterRecord.marginBottom!\n\n            if (!props.reverse) {\n              if (props.fadeEffect) {\n                el.style.opacity = enterRecord.opacity!\n              }\n            } else {\n              // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n              el[scrollHeight]\n\n              el.style[height] = '0'\n              el.style[paddingTop] = '0'\n              el.style[paddingBottom] = '0'\n              el.style[marginTop] = '0'\n              el.style[marginBottom] = '0'\n              el.style.boxSizing = 'content-box'\n\n              if (props.fadeEffect) {\n                el.style.opacity = '0'\n              }\n            }\n\n            emitEvent(props.onEnter, $el)\n          },\n          onAfterEnter($el) {\n            const el = $el as HTMLElement\n\n            el.style.transition = enterRecord.transition || ''\n\n            if (!props.reverse) {\n              el.style[height] = ''\n              el.style.overflow = enterRecord.overflow!\n              el.style.boxSizing = enterRecord.boxSizing!\n            }\n\n            enterStage = null\n            emitEvent(props.onAfterEnter, $el)\n          },\n          onEnterCancelled($el) {\n            const el = $el as HTMLElement\n\n            el.style.transition = enterRecord.transition || ''\n            el.style[height] = ''\n            el.style.overflow = enterRecord.overflow!\n            el.style.boxSizing = enterRecord.boxSizing!\n\n            enterStage = null\n            emitEvent(props.onEnterCancelled, $el)\n          },\n          onBeforeLeave($el) {\n            if (leaveStage) return\n\n            leaveStage = 'before'\n            const el = $el as HTMLElement\n\n            leaveRecord.paddingTop = el.style[paddingTop]\n            leaveRecord.paddingBottom = el.style[paddingBottom]\n            leaveRecord.marginTop = el.style[marginTop]\n            leaveRecord.marginBottom = el.style[marginBottom]\n            leaveRecord.overflow = el.style.overflow\n            leaveRecord.boxSizing = el.style.boxSizing\n            leaveRecord.opacity = el.style.opacity\n\n            el.style[height] = `${el[scrollHeight]}px`\n            el.style.overflow = 'hidden'\n\n            emitEvent(props.onBeforeLeave, $el)\n          },\n          onLeave($el) {\n            if (leaveStage === 'in') return\n\n            leaveStage = 'in'\n            const el = $el as HTMLElement\n\n            if (el[scrollHeight] !== 0) {\n              leaveRecord.transition = el.style.transition\n\n              el.style.transition = transition\n\n              el.style[height] = '0'\n              el.style[paddingTop] = '0'\n              el.style[paddingBottom] = '0'\n              el.style[marginTop] = '0'\n              el.style[marginBottom] = '0'\n\n              if (props.fadeEffect) {\n                el.style.opacity = '0'\n              }\n            }\n\n            emitEvent(props.onLeave, $el)\n          },\n          onAfterLeave($el) {\n            const el = $el as HTMLElement\n\n            el.style[height] = ''\n            el.style[paddingTop] = leaveRecord.paddingTop!\n            el.style[paddingBottom] = leaveRecord.paddingBottom!\n            el.style[marginTop] = leaveRecord.marginTop!\n            el.style[marginBottom] = leaveRecord.marginBottom!\n            el.style.overflow = leaveRecord.overflow!\n            el.style.transition = leaveRecord.transition || ''\n            el.style.boxSizing = leaveRecord.boxSizing!\n            el.style.opacity = leaveRecord.opacity!\n\n            leaveStage = null\n            emitEvent(props.onAfterLeave, $el)\n          },\n          onLeaveCancelled($el) {\n            const el = $el as HTMLElement\n\n            el.style[height] = ''\n            el.style[paddingTop] = leaveRecord.paddingTop!\n            el.style[paddingBottom] = leaveRecord.paddingBottom!\n            el.style[marginTop] = leaveRecord.marginTop!\n            el.style[marginBottom] = leaveRecord.marginBottom!\n            el.style.overflow = leaveRecord.overflow!\n            el.style.transition = leaveRecord.transition || ''\n            el.style.boxSizing = leaveRecord.boxSizing!\n            el.style.opacity = leaveRecord.opacity!\n\n            leaveStage = null\n            emitEvent(props.onLeaveCancelled, $el)\n          },\n        },\n        slots,\n      )\n    }\n  },\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { AlertSlots, AlertType } from './symbol'\n\nexport const alertProps = buildProps({\n  type: String as PropType<AlertType>,\n  title: String,\n  colorfulText: booleanProp,\n  icon: {\n    type: [Boolean, Object, Function],\n    default: null,\n  },\n  closable: booleanProp,\n  iconColor: String,\n  noBorder: booleanProp,\n  banner: booleanProp,\n  manual: booleanProp,\n  scroll: booleanProp,\n  scrollSpeed: Number,\n  color: String,\n  slots: Object as PropType<AlertSlots>,\n  onClose: eventProp(),\n  onHide: eventProp(),\n  onScrollEnd: eventProp(),\n})\n\nexport type AlertProps = ExtractPropTypes<typeof alertProps>\nexport type AlertCProps = ConfigurableProps<ExtractPropTypes<typeof alertProps>>\n","export type AlertType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertSlots {\n  default?: () => any,\n  title?: () => any,\n  close?: () => any,\n  icon?: () => any,\n}\n\nexport const alertTypes = Object.freeze<AlertType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error',\n])\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, onMounted, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { adjustAlpha, getRangeWidth, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\nimport { alertProps } from './props'\nimport { alertTypes } from './symbol'\n\nimport type { AlertSlots } from './symbol'\n\ndefineOptions({ name: 'Alert' })\n\nconst _props = defineProps(alertProps)\nconst props = useProps('alert', _props, {\n  type: {\n    default: 'primary',\n    validator: value => alertTypes.includes(value),\n  },\n  title: '',\n  colorfulText: false,\n  icon: {\n    isFunc: true,\n    default: false,\n  },\n  closable: false,\n  iconColor: '',\n  noBorder: false,\n  banner: false,\n  manual: false,\n  scroll: false,\n  scrollSpeed: 1,\n  color: null,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<AlertSlots>()\n\nconst nh = useNameHelper('alert')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  default: icons.value.alert,\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error,\n}))\n\nconst closed = ref(false)\nconst hidden = ref(false)\nconst scrollDuration = ref(0)\nconst scrollOffset = ref(0)\nconst scrollWidth = ref(0)\n\nconst content = ref<HTMLElement>()\nconst scrollEl = ref<HTMLElement>()\n\nconst hasTitle = computed(() => {\n  return !!(props.title || slots.title)\n})\nconst hasIcon = computed(() => {\n  return !!(props.icon || slots.icon)\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.type)]: props.type,\n    [nh.bm('colorful-text')]: props.colorfulText,\n    [nh.bm('has-title')]: hasTitle.value,\n    [nh.bm('has-icon')]: hasIcon.value,\n    [nh.bm('closable')]: props.closable,\n    [nh.bm('no-border')]: !props.banner && props.noBorder,\n    [nh.bm('banner')]: props.banner,\n  }\n})\nconst style = computed(() => {\n  if (!props.color) return undefined\n\n  const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\n  const black = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-black')) || '#000')\n  const baseColor = parseColorToRgba(props.color)\n\n  return nh.cvm({\n    'bg-color': adjustAlpha(baseColor, 0.2).toString(),\n    'b-color': adjustAlpha(baseColor, 0.5).toString(),\n    'icon-color': mixColor(black, baseColor, 0.2).toString(),\n    ...(props.colorfulText\n      ? {\n        'text-color': mixColor(black, baseColor, 0.2).toString(),\n        'title-color': mixColor(black, baseColor, 0.2).toString(),\n      }\n      : {}),\n  })\n})\nconst iconComp = computed(() => {\n  if (typeof props.icon === 'boolean') {\n    return predefinedIcons.value[props.type] ?? {}\n  }\n\n  return { icon: props.icon }\n})\nconst scrollStyle = computed(() => {\n  return {\n    width: `${scrollWidth.value}px`,\n    transitionDuration: `${scrollDuration.value}ms`,\n    transform: `translateX(${scrollOffset.value}px)`,\n  }\n})\n\nwatch(\n  () => props.scroll,\n  value => {\n    value && startScroll()\n  },\n)\n\nonMounted(() => {\n  props.scroll && startScroll()\n})\n\nfunction handleClose() {\n  if (!props.manual) {\n    closed.value = true\n  }\n\n  emitEvent(props.onClose)\n}\n\nfunction handleAfterLeave() {\n  emitEvent(props.onHide)\n  hidden.value = true\n}\n\nfunction startScroll() {\n  if (content.value && scrollEl.value) {\n    const contentRect = content.value.getBoundingClientRect()\n    const rangeWidth = getRangeWidth(scrollEl.value)\n    const duration = ((contentRect.width + rangeWidth) * 12) / (Math.max(props.scrollSpeed, 0) || 1)\n\n    scrollDuration.value = 0\n    scrollOffset.value = contentRect.width\n    scrollWidth.value = rangeWidth\n\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        scrollDuration.value = duration\n        scrollOffset.value = -rangeWidth\n      })\n    })\n  }\n}\n\nfunction handleScrollEnd() {\n  emitEvent(props.onScrollEnd)\n  requestAnimationFrame(startScroll)\n}\n</script>\n\n<template>\n  <CollapseTransition v-if=\"!hidden\" fade-effect @after-leave=\"handleAfterLeave\">\n    <div\n      v-if=\"!closed\"\n      :class=\"className\"\n      role=\"alert\"\n      :style=\"style\"\n    >\n      <div :class=\"nh.be('wrapper')\">\n        <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\n          <slot name=\"title\">\n            <Renderer :renderer=\"props.slots.title\">\n              {{ title }}\n            </Renderer>\n          </slot>\n        </div>\n        <div ref=\"content\" :class=\"[nh.be('content'), props.scroll && nh.bem('content', 'scroll')]\">\n          <span\n            v-if=\"props.scroll\"\n            ref=\"scrollEl\"\n            :class=\"nh.be('scroll')\"\n            :style=\"scrollStyle\"\n            @transitionend=\"handleScrollEnd\"\n          >\n            <slot>\n              <Renderer :renderer=\"props.slots.default\"></Renderer>\n            </slot>\n          </span>\n          <slot v-else>\n            <Renderer :renderer=\"props.slots.default\"></Renderer>\n          </slot>\n        </div>\n      </div>\n      <button\n        v-if=\"props.closable\"\n        type=\"button\"\n        :class=\"nh.be('close')\"\n        @click=\"handleClose\"\n      >\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.close\">\n            <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n          </Renderer>\n        </slot>\n      </button>\n      <div v-if=\"hasIcon\" :class=\"nh.be('icon')\">\n        <slot name=\"icon\">\n          <Renderer :renderer=\"props.slots.icon\">\n            <Icon\n              v-bind=\"iconComp\"\n              :scale=\"hasTitle ? 2 : 1\"\n              :style=\"{ color: props.iconColor }\"\n            ></Icon>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n  </CollapseTransition>\n</template>\n","import { booleanProp, buildProps, eventProp, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { AnchorLinkOptions, AnchorSlots } from './symbol'\n\nexport const anchorProps = buildProps({\n  active: String,\n  viewer: [String, Object, Function] as PropType<unknown>,\n  offset: Number,\n  marker: booleanProp,\n  scrollDuration: Number,\n  markerTransition: String,\n  options: Array as PropType<AnchorLinkOptions[]>,\n  bindHash: booleanProp,\n  forceActive: booleanProp,\n  slots: Object as PropType<AnchorSlots>,\n  onChange: eventProp<(value: string) => void>(),\n})\n\nexport type AnchorProps = ExtractPropTypes<typeof anchorProps>\nexport type AnchorCProps = ConfigurableProps<AnchorProps, 'viewer'>\n\nexport const anchorLinkProps = wrapProps({\n  to: {\n    type: String,\n    default: '',\n  },\n  title: {\n    type: String,\n    default: '',\n  },\n  children: {\n    type: Array as PropType<AnchorLinkOptions[]>,\n    default: () => [],\n  },\n})\n\nexport type AnchorLinkProps = ExtractPropTypes<typeof anchorLinkProps>\n","import type { InjectionKey } from 'vue'\n\nexport interface AnchorLinkOptions {\n  to: string,\n  label: string,\n  title?: string,\n  children?: AnchorLinkOptions[],\n}\n\nexport interface AnchorLinkState {\n  el?: HTMLElement,\n  to: string,\n  active: boolean,\n  indent: number,\n}\n\nexport interface AnchorState {\n  currentActive: string,\n  increaseLink(state: AnchorLinkState): void,\n  decreaseLink(state: AnchorLinkState): void,\n  handleActive(label: string): void,\n}\n\nexport interface AnchorSlots {\n  default?: () => any,\n  marker?: () => any,\n}\n\nexport const baseIndentWidth = 14 // px\nexport const LINK_STATE = '__VXP_ANCHOR_LINK_STATE' as unknown as InjectionKey<AnchorLinkState>\nexport const ANCHOR_STATE = '__VXP_ANCHOR_STATE' as unknown as InjectionKey<AnchorState>\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  inject,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  toRef,\n  watch,\n} from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { anchorLinkProps } from './props'\nimport { ANCHOR_STATE, LINK_STATE, baseIndentWidth } from './symbol'\n\ndefineOptions({ name: 'AnchorLink' })\n\nconst props = defineProps(anchorLinkProps)\n\nconst anchorState = inject(ANCHOR_STATE, null)\nconst parentLinkState = inject(LINK_STATE, null)\n\nconst nh = useNameHelper('anchor')\nconst indent = ref(parentLinkState?.indent ? parentLinkState?.indent + 1 : 1)\nconst active = ref(false)\n\nconst link = ref<HTMLElement>()\n\nconst state = reactive({\n  el: link,\n  to: toRef(props, 'to'),\n  active,\n  indent,\n})\n\nconst linkClass = computed(() => {\n  return {\n    [nh.be('link')]: true,\n    [nh.bem('link', 'active')]: state.active,\n  }\n})\nconst linkStyle = computed(() => {\n  return {\n    paddingInlineStart: `${baseIndentWidth * indent.value}px`,\n  }\n})\n\nprovide(LINK_STATE, state)\n\nif (anchorState) {\n  watch(\n    () => anchorState.currentActive,\n    value => {\n      active.value = value === props.to\n    },\n  )\n\n  onMounted(() => {\n    anchorState.increaseLink(state)\n  })\n\n  onBeforeUnmount(() => {\n    anchorState.decreaseLink(state)\n  })\n}\n\nfunction handleSelect() {\n  if (anchorState) {\n    anchorState.handleActive(props.to)\n  }\n\n  return false\n}\n</script>\n\n<template>\n  <li :class=\"nh.be('item')\">\n    <a\n      ref=\"link\"\n      :class=\"linkClass\"\n      :href=\"to\"\n      :style=\"linkStyle\"\n      :title=\"title\"\n      @click.prevent=\"handleSelect\"\n    >\n      <slot></slot>\n    </a>\n    <ul v-if=\"$slots.group || (children && children.length)\" :class=\"nh.be('list')\">\n      <slot name=\"group\">\n        <template v-if=\"children && children.length\">\n          <AnchorLink\n            v-for=\"child in children\"\n            :key=\"child.to\"\n            :to=\"child.to\"\n            :title=\"child.title\"\n            :children=\"child.children\"\n          >\n            {{ child.label }}\n          </AnchorLink>\n        </template>\n      </slot>\n    </ul>\n  </li>\n</template>\n","export interface ScrollElement {\n  scrollTo(x: number, y: number): void,\n  [prop: string]: any,\n}\n\nexport function animateScrollTo(\n  el: ScrollElement,\n  from: number,\n  to: number,\n  duration: number,\n  callback: unknown,\n): void {\n  const distance = to - from\n  const step = Math.ceil((distance / duration) * 16)\n\n  const end = () => {\n    typeof callback === 'function' && callback()\n  }\n\n  if (!distance) {\n    end()\n    return\n  }\n\n  if (duration <= 0) {\n    el.scrollTo(0, to)\n    end()\n    return\n  }\n\n  let current = from\n\n  const scroll = () => {\n    if (!distance) return\n\n    current = current + step\n\n    if ((to - current) / distance <= 0) {\n      current = to\n    }\n\n    el.scrollTo(0, current)\n\n    if (current === to) {\n      end()\n    } else {\n      requestAnimationFrame(scroll)\n    }\n  }\n\n  scroll()\n}\n","<script setup lang=\"ts\">\nimport { AnchorLink } from '@/components/anchor-link'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  getCurrentInstance,\n  isVNode,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { proxyExposed } from '@vexip-ui/hooks'\nimport { isClient, isElement } from '@vexip-ui/utils'\nimport { anchorProps } from './props'\nimport { animateScrollTo } from './helper'\nimport { ANCHOR_STATE } from './symbol'\n\nimport type { ComponentInternalInstance } from 'vue'\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { Scroll } from '@/components/scroll'\nimport type { AnchorLinkState, AnchorSlots, AnchorState } from './symbol'\n\ntype ScrollType = NativeScrollExposed & InstanceType<typeof Scroll>\n\ndefineOptions({ name: 'Anchor' })\n\nconst nh = useNameHelper('anchor')\n\nconst _props = defineProps(anchorProps)\nconst props = useProps('anchor', _props, {\n  active: {\n    default: '',\n    static: true,\n  },\n  viewer: {\n    default: null,\n    static: true,\n  },\n  offset: 8,\n  marker: false,\n  scrollDuration: 500,\n  markerTransition: () => nh.ns('fade'),\n  options: {\n    default: () => [],\n    static: true,\n  },\n  bindHash: false,\n  forceActive: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\ndefineSlots<AnchorSlots>()\n\nconst currentActive = ref(props.active)\nconst animating = ref(false)\nconst markerTop = ref(0)\nconst linkStates = new Set<AnchorLinkState>()\n\nconst wrapper = ref<HTMLElement>()\n\nlet timer: ReturnType<typeof setTimeout>\n\nlet isRawViewer = false\nlet container: Window | HTMLElement | null = null\nlet scroller: ScrollType | null = null\nlet prevScrollTop = 0\n\nif (isClient && !currentActive.value && props.bindHash) {\n  currentActive.value = decodeURIComponent(location.hash)\n}\n\nprovide<AnchorState>(\n  ANCHOR_STATE,\n  reactive({\n    currentActive,\n    increaseLink,\n    decreaseLink,\n    handleActive,\n  }),\n)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  },\n)\nwatch(() => props.viewer, updateContainer)\n\nonMounted(() => {\n  updateContainer()\n  computeMarkerPosition()\n})\n\nonBeforeUnmount(() => {\n  removeListener()\n  clearTimeout(timer)\n})\n\nfunction increaseLink(state: AnchorLinkState) {\n  linkStates.add(state)\n  state.active = currentActive.value === state.to\n}\n\nfunction decreaseLink(state: AnchorLinkState) {\n  linkStates.delete(state)\n}\n\nconst instance = getCurrentInstance()!\n\nfunction updateContainer() {\n  removeListener()\n  isClient &&\n    nextTick(() => {\n      const viewer: unknown = props.viewer\n\n      prevScrollTop = 0\n\n      let _container: Window | Node | ComponentInternalInstance | null = null\n      let refName = 'scroll'\n\n      if (typeof viewer === 'string') {\n        if (viewer.startsWith('ref:')) {\n          refName = viewer.substring(4)\n          refName = refName || 'scroll'\n        } else if (['window', 'document', 'html'].includes(viewer)) {\n          _container = window\n        } else if (viewer === 'body') {\n          _container = document.body\n        } else if (viewer === 'root') {\n          _container = instance.root\n        } else {\n          _container = document.querySelector(viewer)\n        }\n      } else if (typeof viewer === 'function') {\n        _container = viewer()\n      } else if (isElement(viewer)) {\n        _container = viewer\n      }\n\n      if (_container === window || isElement(_container)) {\n        isRawViewer = true\n      } else {\n        isRawViewer = false\n        // container = this.$parent\n      }\n\n      if (!isRawViewer) {\n        // ComponentInternalInstance\n        _container = _container as ComponentInternalInstance\n        _container = isVNode(_container?.vnode) ? _container : instance.parent\n\n        while (_container) {\n          const name = _container.type?.name\n\n          if (name === 'Scroll' || name === 'NativeScroll') {\n            scroller = proxyExposed({ component: _container } as any)\n\n            break\n          }\n\n          const refTemp = _container.refs?.[refName]\n\n          if (refTemp) {\n            if (isElement(refTemp)) {\n              isRawViewer = true\n              container = refTemp as HTMLElement\n            } else {\n              scroller = refTemp as ScrollType\n            }\n\n            break\n          }\n\n          _container = _container.parent\n        }\n\n        if (scroller) {\n          scroller.addScrollListener(handleContainerScroll)\n          container = scroller.$el\n        } else if (!container) {\n          isRawViewer = true\n          container = instance.parent?.proxy?.$el as HTMLElement\n        }\n\n        if (isRawViewer && container) {\n          container.addEventListener('scroll', handleContainerScroll)\n        }\n      } else {\n        container = _container as HTMLElement\n        container.addEventListener('scroll', handleContainerScroll)\n      }\n    })\n}\n\nfunction getContainerEl() {\n  if (!container) return null\n\n  return container === window ? document.documentElement : (container as HTMLElement)\n}\n\nfunction computeCurrentLink(scrollTop: number) {\n  if (!linkStates.size || !container) return\n\n  const containerTop = getContainerEl()!.offsetTop\n  const offsetList: { link: string, offset: number }[] = []\n\n  let offset = scrollTop + props.offset\n\n  if (isRawViewer) {\n    offset += containerTop\n  }\n\n  linkStates.forEach(state => {\n    const id = state.to\n\n    if (!id.startsWith('#')) return\n\n    const element = document.querySelector(id) as HTMLElement | null\n\n    if (element) {\n      offsetList.push({\n        link: id,\n        offset: element.offsetTop,\n      })\n    }\n  })\n\n  offsetList.sort((prev, next) => prev.offset - next.offset)\n  offsetList.push({\n    link: '',\n    offset: Infinity,\n  })\n\n  let currentLink = ''\n\n  for (let i = 0, len = offsetList.length - 1; i < len; ++i) {\n    const current = offsetList[i]\n    const next = offsetList[i + 1]\n\n    if (current.offset <= offset && next.offset > offset) {\n      currentLink = current.link\n\n      break\n    }\n  }\n\n  prevScrollTop = scrollTop\n\n  if (currentActive.value !== currentLink) {\n    currentActive.value = currentLink\n    emit('update:active', currentLink)\n    emitEvent(props.onChange, currentLink)\n  }\n}\n\nfunction handleContainerScroll(event: Event) {\n  if (animating.value) return\n\n  const scrollTop = isRawViewer\n    ? (\n      (event.target === window || event.target === document\n        ? document.documentElement\n        : event.target) as HTMLElement\n    ).scrollTop\n    : (event as MouseEvent).clientY\n\n  computeCurrentLink(scrollTop)\n  computeMarkerPosition()\n}\n\nfunction removeListener() {\n  if (scroller) {\n    scroller.removeScrollListener(handleContainerScroll)\n    scroller = null\n  }\n\n  if (container) {\n    container.removeEventListener('scroll', handleContainerScroll)\n  }\n}\n\nfunction handleActive(link: string) {\n  if (\n    (!props.forceActive && link === currentActive.value) ||\n    !link.startsWith('#') ||\n    link.length < 2\n  ) {\n    return\n  }\n\n  const element = document.querySelector(link) as HTMLElement | null\n\n  if (!element) return\n\n  clearTimeout(timer)\n\n  animating.value = true\n\n  const elementTop = element.offsetTop\n  const duration = Math.max(props.scrollDuration, 0)\n\n  if (isRawViewer && container) {\n    const containerEl = getContainerEl()!\n    // const from = containerEl.scrollTop\n    const to = Math.min(\n      elementTop - containerEl.offsetTop - props.offset,\n      containerEl.scrollHeight - containerEl.clientHeight,\n    )\n\n    animateScrollTo(containerEl, prevScrollTop, to, duration, () => {\n      timer = setTimeout(() => {\n        animating.value = false\n      }, 10)\n    })\n    computeCurrentLink(to)\n    computeMarkerPosition()\n  } else if (scroller) {\n    const [min, max] = scroller.getYScrollLimit()\n    const clientY = Math.max(Math.min(elementTop - props.offset, max), min)\n\n    scroller.scrollTo(0, clientY, duration).then(() => {\n      timer = setTimeout(() => {\n        animating.value = false\n      }, duration + 10)\n    })\n\n    computeCurrentLink(clientY)\n    computeMarkerPosition()\n  } else {\n    animating.value = false\n  }\n\n  if (isClient && props.bindHash && location) {\n    location.hash = encodeURIComponent(currentActive.value.replace(/^#/, ''))\n  }\n}\n\nfunction computeMarkerPosition() {\n  const currentLink = Array.from(linkStates).find(\n    state => state.to && state.to === currentActive.value,\n  )\n\n  if (currentLink?.el) {\n    const linkRect = currentLink.el.getBoundingClientRect()\n    const wrapperTop = wrapper.value?.getBoundingClientRect().top ?? 0\n\n    markerTop.value = linkRect.top - wrapperTop + linkRect.height / 2 + 0.5\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"{\n      [nh.b()]: true,\n      [nh.bs('vars')]: true,\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('no-marker')]: !props.marker\n    }\"\n  >\n    <ul :class=\"nh.be('list')\">\n      <slot>\n        <Renderer :renderer=\"props.slots.default\">\n          <AnchorLink\n            v-for=\"link in props.options\"\n            :key=\"link.to\"\n            :to=\"link.to\"\n            :title=\"link.title\"\n            :children=\"link.children\"\n          >\n            {{ link.label }}\n          </AnchorLink>\n        </Renderer>\n      </slot>\n    </ul>\n    <Transition appear :name=\"props.markerTransition\">\n      <div\n        v-if=\"props.marker && currentActive\"\n        :class=\"nh.be('marker')\"\n        :style=\"{ top: `${markerTop}px` }\"\n      >\n        <slot name=\"marker\">\n          <Renderer :renderer=\"props.slots.marker\">\n            <div :class=\"nh.be('pointer')\"></div>\n          </Renderer>\n        </slot>\n      </div>\n    </Transition>\n  </div>\n</template>\n","import { buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ColumnFlex, ColumnOptions, RowGridAlign, RowGridJustify } from './symbol'\n\nexport const rowProps = buildProps({\n  tag: String,\n  gap: [Number, Array] as PropType<number | number[]>,\n  justify: String as PropType<RowGridJustify>,\n  align: String as PropType<RowGridAlign>,\n  columnFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<ColumnFlex>>,\n    default: null,\n  },\n})\n\nexport type RowProps = ExtractPropTypes<typeof rowProps>\nexport type RowCProps = ConfigurableProps<RowProps>\n\nconst mediaProp = [Number, Object] as PropType<number | ColumnOptions>\n\nexport const columnProps = buildProps({\n  tag: String,\n  span: Number,\n  offset: Number,\n  push: Number,\n  pull: Number,\n  order: Number,\n  xs: mediaProp,\n  sm: mediaProp,\n  md: mediaProp,\n  lg: mediaProp,\n  xl: mediaProp,\n  xxl: mediaProp,\n  flex: [Number, String],\n  useFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<ColumnFlex>>,\n    default: null,\n  },\n})\n\nexport type ColumnProps = ExtractPropTypes<typeof columnProps>\nexport type ColumnCProps = ConfigurableProps<ColumnProps>\n","import type { InjectionKey } from 'vue'\n\nexport type BreakPoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'\n\nexport type RowGridJustify =\n  | 'start'\n  | 'end'\n  | 'center'\n  | 'space-around'\n  | 'space-between'\n  | 'space-evenly'\nexport type RowGridAlign = 'top' | 'middle' | 'bottom' | 'stretch'\n\nexport interface ColumnFlex {\n  justify: RowGridJustify,\n  align: RowGridAlign,\n}\n\nexport interface RowState {\n  columnFlex: ColumnFlex | false,\n  gap: number | number[],\n}\n\nexport interface ColumnOptions {\n  span?: number,\n  offset?: number,\n  pull?: number,\n  push?: number,\n  order?: number,\n}\n\nexport const breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\n\nexport const ROW_STATE = '__VXP_GRID_ROW_STATE' as unknown as InjectionKey<RowState>\n","import { computed, defineComponent, h, provide, reactive, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { rowProps } from './props'\nimport { ROW_STATE } from './symbol'\n\nimport type { RowGridAlign, RowGridJustify, RowState } from './symbol'\n\nconst justifyList = Object.freeze<RowGridJustify[]>([\n  'start',\n  'end',\n  'center',\n  'space-around',\n  'space-between',\n  'space-evenly',\n])\nconst alignList = Object.freeze<RowGridAlign[]>(['top', 'middle', 'bottom', 'stretch'])\n\nexport default defineComponent({\n  name: 'Row',\n  props: rowProps,\n  setup(_props, { slots }) {\n    const props = useProps('row', _props, {\n      tag: 'div',\n      gap: 0,\n      justify: {\n        default: 'start',\n        validator: value => justifyList.includes(value),\n      },\n      align: {\n        default: 'top',\n        validator: value => alignList.includes(value),\n      },\n      columnFlex: false,\n    })\n\n    const nh = useNameHelper('row')\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(props.justify),\n        nh.bm(props.align),\n        {\n          [nh.bm('inherit')]: props.inherit,\n        },\n      ]\n    })\n    const style = computed(() => {\n      if (!props.gap) return null\n\n      if (typeof props.gap === 'number') {\n        return {\n          [nh.cv('h-gap')]: `${props.gap}px`,\n        }\n      }\n\n      if (Array.isArray(props.gap)) {\n        const [horizontal, vertical] = props.gap\n\n        return {\n          [nh.cv('h-gap')]: `${horizontal}px`,\n          [nh.cv('v-gap')]: `${vertical}px`,\n        }\n      }\n\n      return null\n    })\n    const columnFlex = computed(() => {\n      if (props.columnFlex === true) {\n        return {\n          justify: 'start',\n          align: 'top',\n        }\n      } else if (props.columnFlex) {\n        return {\n          justify: 'start',\n          align: 'top',\n          ...props.columnFlex,\n        }\n      }\n\n      return false\n    })\n\n    provide(\n      ROW_STATE,\n      reactive({\n        columnFlex,\n        gap: toRef(props, 'gap'),\n      }) as RowState,\n    )\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value,\n        },\n        {\n          default: () => slots.default && slots.default(),\n        },\n      )\n  },\n})\n","import {\n  booleanProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonAttrType, ButtonType } from '@/components/button'\nimport type { RowGridAlign, RowGridJustify } from '@/components/row'\nimport type { ColumnOptions } from '@/components/column'\nimport type { Rule } from './validator'\nimport type { FormLabelAlign, SubmitMethod } from './symbol'\n\nexport const formProps = buildProps({\n  method: String as PropType<SubmitMethod>,\n  action: String,\n  model: Object,\n  rules: Object,\n  labelWidth: [Number, String] as PropType<number | 'auto'>,\n  labelAlign: String as PropType<FormLabelAlign>,\n  allRequired: booleanProp,\n  labelSuffix: String,\n  hideAsterisk: booleanProp,\n  validateAll: booleanProp,\n  hideLabel: booleanProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  size: sizeProp,\n  inline: booleanProp,\n  gap: [Number, Array] as PropType<number | number[]>,\n  justify: String as PropType<RowGridJustify>,\n  align: String as PropType<RowGridAlign>,\n  onSubmit: eventProp<(e: SubmitEvent) => void>(),\n})\n\nexport type FormProps = ExtractPropTypes<typeof formProps>\nexport type FormCProps = ConfigurableProps<FormProps, 'model'>\n\nconst mediaProp = [Number, Object] as PropType<number | ColumnOptions>\n\nexport const formItemProps = buildProps({\n  locale: localeProp('form'),\n  label: String,\n  prop: String,\n  name: String,\n  rules: [Object, Array] as PropType<Rule | Rule[]>,\n  labelWidth: Number,\n  required: booleanProp,\n  htmlFor: String,\n  errorTransition: String,\n  defaultValue: {\n    type: [String, Number, Boolean, Object, Array, Function] as PropType<any>,\n    default: null,\n  },\n  hideErrorTip: booleanProp,\n  validateAll: booleanProp,\n  hideAsterisk: booleanProp,\n  hideLabel: booleanProp,\n  action: booleanProp,\n  help: String,\n  pure: booleanProp,\n  manual: booleanProp,\n  span: Number,\n  offset: Number,\n  push: Number,\n  pull: Number,\n  order: Number,\n  xs: mediaProp,\n  sm: mediaProp,\n  md: mediaProp,\n  lg: mediaProp,\n  xl: mediaProp,\n  xxl: mediaProp,\n  flex: [Number, String],\n})\n\nexport type FormItemProps = ExtractPropTypes<typeof formItemProps>\nexport type FormItemCProps = ConfigurableProps<FormItemProps, 'prop' | 'htmlFor' | 'defaultValue'>\n\nexport const formSubmitProps = buildProps({\n  size: sizeProp,\n  locale: localeProp('form'),\n  type: String as PropType<ButtonType>,\n  label: String,\n  dashed: booleanProp,\n  text: booleanProp,\n  simple: booleanProp,\n  ghost: booleanProp,\n  disabled: booleanProp,\n  circle: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  icon: iconProp,\n  color: String,\n  buttonType: String as PropType<ButtonAttrType>,\n  block: booleanProp,\n  tag: String,\n  onBeforeSubmit: Function as PropType<() => unknown>,\n  onSubmit: eventProp(),\n  onError: eventProp<(errors: string[]) => void>(),\n})\n\nexport type FormSubmitProps = ExtractPropTypes<typeof formSubmitProps>\nexport type FormSubmitCProps = ConfigurableProps<FormSubmitProps, never, 'onBeforeReset'>\n\nexport const formResetProps = buildProps({\n  size: sizeProp,\n  locale: localeProp('form'),\n  type: String as PropType<ButtonType>,\n  label: String,\n  dashed: booleanProp,\n  text: booleanProp,\n  simple: booleanProp,\n  ghost: booleanProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  circle: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  icon: iconProp,\n  color: String,\n  buttonType: String as PropType<ButtonAttrType>,\n  block: booleanProp,\n  tag: String,\n  onBeforeReset: Function as PropType<() => unknown>,\n  onReset: eventProp(),\n})\n\nexport type FormResetProps = ExtractPropTypes<typeof formResetProps>\nexport type FormResetCProps = ConfigurableProps<FormResetProps, never, 'onBeforeReset'>\n","import type { InjectionKey, Ref } from 'vue'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\nimport type { EventEmitter } from '@vexip-ui/utils'\nimport type { Rule } from './validator'\n\nexport type FormLabelAlign = 'right' | 'top' | 'left'\nexport type SubmitMethod = 'get' | 'post' | 'put' | 'delete'\n\nexport interface FormProps {\n  method: SubmitMethod,\n  action: string,\n  model: Record<string, any>,\n  rules: Record<string, any>,\n  labelWidth: number | 'auto',\n  labelAlign: FormLabelAlign,\n  allRequired: boolean,\n  labelSuffix: string,\n  hideAsterisk: boolean,\n  validateAll: boolean,\n  hideLabel: boolean,\n  disabled: boolean,\n  loading: boolean,\n  size: ComponentSize,\n  inline: boolean,\n}\n\nexport interface FormItemProps {\n  label: string,\n  prop: string,\n  rules: Rule | Rule[],\n  labelWidth: number | 'auto',\n  required: boolean,\n  htmlFor: string,\n  errorTransition: string,\n  defaultValue: unknown,\n  hideErrorTip: boolean,\n  validateAll: boolean,\n  hideAsterisk: boolean,\n}\n\nexport interface FormItemSlots {\n  default?: (parmas: { isError: boolean }) => any,\n  help?: () => any,\n  label?: () => any,\n  error?: (params: { tip: string }) => any,\n}\n\nexport interface FieldOptions {\n  prop: Ref<string>,\n  idFor: Ref<string>,\n  labelId: Ref<string>,\n  state: Ref<ComponentState>,\n  disabled: Ref<boolean>,\n  loading: Ref<boolean>,\n  size: Ref<ComponentSize>,\n  emitter: EventEmitter,\n  labelWidth: Ref<number>,\n  validate: () => Promise<string[] | null>,\n  reset: () => boolean,\n  clearError: () => void,\n  getValue: (defaultValue?: unknown) => unknown,\n  setValue: (value: unknown, strict?: boolean) => void,\n  sync: (instance: any) => void,\n  unSync: (instance: any) => void,\n}\n\nexport interface FormActions {\n  getLabelWidth: () => number,\n  validate: () => Promise<string[]>,\n  validateFields: (props: string | string[]) => Promise<string[]>,\n  reset: () => void,\n  resetFields: (props: string | string[]) => void,\n  clearError: () => void,\n  clearFieldsError: (props: string | string[]) => void,\n}\n\n// form\nexport const FORM_PROPS = '__VXP_FORM_PROPS' as unknown as InjectionKey<Partial<FormProps>>\nexport const FORM_FIELDS = '__VXP_FORM_FIELDS' as unknown as InjectionKey<Set<FieldOptions>>\nexport const FORM_ACTIONS = '__VXP_FORM_ACTIONS' as unknown as InjectionKey<FormActions>\n\n// form-item\nexport const FIELD_OPTIONS = '__VXP_FIELD_OPTIONS' as unknown as InjectionKey<FieldOptions | null>\n\nexport const submitMethods = Object.freeze<SubmitMethod[]>(['get', 'post', 'put', 'delete'])\nexport const labelAligns = Object.freeze<FormLabelAlign[]>(['right', 'top', 'left'])\n","<script setup lang=\"ts\">\nimport { Row } from '@/components/row'\n\nimport { computed, provide, reactive } from 'vue'\n\nimport { createSizeProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { formProps } from './props'\nimport { FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, labelAligns, submitMethods } from './symbol'\n\nimport type { FieldOptions } from './symbol'\n\ndefineOptions({ name: 'Form', inheritAttrs: true })\n\nconst _props = defineProps(formProps)\nconst props = useProps('form', _props, {\n  method: {\n    default: 'post',\n    validator: value => submitMethods.includes(value),\n  },\n  action: null,\n  model: {\n    default: () => ({}),\n    static: true,\n  },\n  rules: () => ({}),\n  labelWidth: 'auto',\n  labelAlign: {\n    default: 'right',\n    validator: value => labelAligns.includes(value),\n  },\n  allRequired: false,\n  labelSuffix: '',\n  hideAsterisk: false,\n  validateAll: false,\n  hideLabel: false,\n  disabled: false,\n  loading: false,\n  size: createSizeProp(),\n  inline: false,\n  gap: [8, 0],\n  justify: 'start',\n  align: 'top',\n})\n\nconst nh = useNameHelper('form')\nconst fieldSet: Set<FieldOptions> = reactive(new Set<any>())\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`label-${props.labelAlign}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('inline')]: props.inline,\n    },\n  ]\n})\nconst labelWidth = computed(() => {\n  return Math.max(...Array.from(fieldSet).map(field => field.labelWidth.value))\n})\n\nprovide(FORM_PROPS, props)\nprovide(FORM_FIELDS, fieldSet)\nprovide(FORM_ACTIONS, {\n  getLabelWidth,\n  validate,\n  validateFields,\n  reset,\n  resetFields,\n  clearError,\n  clearFieldsError,\n})\n\ndefineExpose({\n  validate,\n  validateFields,\n  reset,\n  resetFields,\n  clearError,\n  clearFieldsError,\n})\n\nfunction getLabelWidth() {\n  if (typeof props.labelWidth === 'number') {\n    return props.labelWidth\n  }\n\n  return labelWidth.value\n}\n\nfunction getPropMap() {\n  const propMap: Record<string, FieldOptions> = {}\n\n  for (const field of fieldSet) {\n    if (field.prop.value) {\n      propMap[field.prop.value] = field\n    }\n  }\n\n  return propMap\n}\n\nfunction validate() {\n  return validateItems(fieldSet)\n}\n\nfunction validateFields(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n  const fields = new Set<FieldOptions>()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      fields.add(propMap[prop])\n    }\n  })\n\n  return validateItems(fields)\n}\n\nfunction validateItems(items: Set<FieldOptions>) {\n  const validations: Promise<string[] | null>[] = []\n\n  items.forEach(item => {\n    validations.push(item.validate())\n  })\n\n  return new Promise<string[]>(resolve => {\n    Promise.all(validations).then(errors => {\n      resolve(errors.flat().filter(Boolean) as string[])\n    })\n  })\n}\n\nfunction reset() {\n  fieldSet.forEach(field => {\n    field.reset()\n  })\n}\n\nfunction resetFields(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      propMap[prop].reset()\n    }\n  })\n}\n\nfunction clearError() {\n  fieldSet.forEach(field => {\n    field.clearError()\n  })\n}\n\nfunction clearFieldsError(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      propMap[prop].clearError()\n    }\n  })\n}\n\nfunction handleSubmit(event: SubmitEvent) {\n  event.stopPropagation()\n\n  if (!props.action) {\n    event.preventDefault()\n  }\n\n  emitEvent(props.onSubmit, event)\n}\n</script>\n\n<template>\n  <Row\n    v-bind=\"$attrs\"\n    :class=\"className\"\n    :inherit=\"props.inherit\"\n    tag=\"form\"\n    :method=\"props.action && props.method\"\n    :action=\"props.action\"\n    :gap=\"props.gap\"\n    :justify=\"props.justify\"\n    :align=\"props.align\"\n    :column-flex=\"undefined\"\n    @submit=\"handleSubmit\"\n    @reset.prevent.stop\n  >\n    <slot></slot>\n  </Row>\n</template>\n","import { computed, getCurrentInstance, inject, onBeforeUnmount, provide } from 'vue'\n\nimport { isNull, noop, toFalse } from '@vexip-ui/utils'\nimport { FIELD_OPTIONS } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\n\n/**\n * 根据路径读取对象中的值 (实现 ?. 的逻辑)\n *\n * @param obj 需要被读取的对象\n * @param path 读取的路径\n * @param strict 是否开启严格模式 (非法路径报错)\n */\nexport function getValueByPath<T = unknown>(\n  obj: Record<string, any>,\n  path: string | string[],\n  strict = false,\n): T | null {\n  if (!obj || !path) return null\n\n  if (typeof path === 'string') {\n    if (path in obj) return obj[path]\n\n    path = path.split('.')\n  }\n\n  if (Array.isArray(path) && path.length) {\n    const lastKey = path.pop()\n\n    if (!lastKey) return null\n\n    for (let i = 0, len = path.length; i < len; ++i) {\n      const key = String(path[i])\n\n      if (!key) break\n\n      obj = obj[key]\n\n      if (isNull(obj)) {\n        if (strict) {\n          throw new Error('[vexip-ui:Form] Get value by an invalid path')\n        }\n\n        return obj\n      }\n    }\n\n    if (strict && isNull(obj[lastKey])) {\n      throw new Error('[vexip-ui:Form] Get value by an invalid path')\n    }\n\n    return obj[lastKey]\n  }\n\n  return null\n}\n\n/**\n * 根据路径设置对象中的值\n *\n * @param obj 需要被设置的对象\n * @param path 设置的路径\n * @param value 需要设置的值\n * @param strict 是否开启严格模式 (非法路径报错)\n */\nexport function setValueByPath(\n  obj: Record<string, any>,\n  path: string | string[],\n  value: unknown,\n  strict = false,\n): boolean {\n  if (!obj || !path) return false\n\n  if (typeof path === 'string') {\n    if (path in obj) {\n      obj[path] = value\n\n      return true\n    }\n\n    path = path.split('.')\n  }\n\n  if (Array.isArray(path) && path.length) {\n    const lastKey = path.pop()\n\n    if (!lastKey) return false\n\n    for (let i = 0, len = path.length; i < len; ++i) {\n      const key = String(path[i])\n\n      if (!key) {\n        return false\n      }\n\n      if (typeof obj[key] !== 'object') {\n        if (strict) {\n          throw new Error('[vexip-ui:Form] Set value by an invalid path')\n        }\n\n        obj[key] = {}\n      }\n\n      obj = obj[key]\n    }\n\n    if (strict && typeof obj !== 'object') {\n      throw new Error('[vexip-ui:Form] Set value by an invalid path')\n    }\n\n    obj[lastKey] = value\n\n    return true\n  }\n\n  return false\n}\n\nexport interface FormFieldStore<V = unknown> {\n  isField: boolean,\n  idFor: Ref<string | undefined>,\n  labelId: Ref<string | undefined>,\n  state: Ref<ComponentState>,\n  disabled: Ref<boolean>,\n  loading: Ref<boolean>,\n  size: Ref<ComponentSize>,\n  validateField: () => Promise<string[] | null>,\n  clearField: (defaultValue?: V) => void,\n  resetField: () => boolean,\n  getFieldValue: (defaultValue?: V) => V,\n  setFieldValue: (value: V, strict?: boolean) => void,\n}\n\nconst defaultId = computed(() => undefined as string | undefined)\nconst defaultState = computed(() => 'default' as ComponentState)\nconst defaultFalse = computed(() => false)\nconst defaultSize = computed(() => 'default' as ComponentSize)\n\nfunction getEmptyActions<V>() {\n  return {\n    isField: false,\n    idFor: defaultId,\n    labelId: defaultId,\n    state: defaultState,\n    disabled: defaultFalse,\n    loading: defaultFalse,\n    size: defaultSize,\n    validateField: noop,\n    clearField: noop,\n    resetField: toFalse,\n    getFieldValue: v => v,\n    setFieldValue: noop,\n  } as FormFieldStore<V>\n}\n\n/**\n * Create a field store, provide field states and control methods\n *\n * @param onFocus a focus method for focusing when label is clicked\n */\nexport function useFieldStore<V = unknown>(onFocus?: () => void): FormFieldStore<V> {\n  const instance = getCurrentInstance()\n\n  if (!instance) return getEmptyActions<V>()\n\n  const fieldOptions = inject(FIELD_OPTIONS, null)\n\n  if (!fieldOptions) {\n    return getEmptyActions<V>()\n  }\n\n  // Block the provided if there are dependencies between control components.\n  // e.g. AutoComplete -> Select, ColorPicker -> Input\n  provide(FIELD_OPTIONS, null)\n  fieldOptions.sync(instance)\n  onFocus && fieldOptions.emitter.on('focus', onFocus)\n\n  onBeforeUnmount(() => {\n    fieldOptions.unSync(instance)\n    onFocus && fieldOptions.emitter.off('focus', onFocus)\n  })\n\n  function clearField(defaultValue?: V) {\n    if (!fieldOptions) return\n\n    fieldOptions.setValue(defaultValue)\n    fieldOptions.clearError()\n  }\n\n  return {\n    isField: true,\n    idFor: fieldOptions.idFor,\n    labelId: fieldOptions.labelId,\n    state: fieldOptions.state,\n    disabled: fieldOptions.disabled,\n    loading: fieldOptions.loading,\n    size: fieldOptions.size,\n    validateField: fieldOptions.validate,\n    clearField,\n    resetField: fieldOptions.reset,\n    getFieldValue: fieldOptions.getValue as (defaultValue?: V) => V,\n    setFieldValue: fieldOptions.setValue as (value: V, strict?: boolean) => void,\n  }\n}\n","import { isColor, isDefined, isObject, isPromise, toDate, toNumber } from '@vexip-ui/utils'\n\n// export type Trigger = 'blur' | 'change'\n\nexport type Types =\n  | 'string'\n  | 'number'\n  | 'boolean'\n  | 'int'\n  | 'float'\n  | 'array'\n  | 'object'\n  | 'date'\n  | 'url'\n  | 'color'\n  | 'email'\ntype Range = [number, number]\ntype ValidatorResult = boolean | string | Error | Promise<boolean | string | Error>\n\nexport interface Rule<T = any> {\n  // trigger?: Trigger,\n  required?: boolean,\n  type?: Types,\n  length?: number,\n  range?: Range,\n  strict?: boolean,\n  enums?: T[],\n  message?: string,\n  validator?(value: T, model: Record<string, any>): ValidatorResult,\n}\n\ntype TypeOptions = Pick<Rule, 'length' | 'range' | 'strict'>\n\nconst DEFAULT_MESSAGE = 'Validate failed'\n\nconst N_100_200 = '1\\\\d\\\\d|2([0-4]\\\\d|5[0-5])'\nconst IPV4_FIRST = `[1-9](\\\\d)?|${N_100_200}`\nconst IPV4_UNIT = `\\\\d{1,2}|${N_100_200}`\nconst IPV4_REG = `(?:${IPV4_FIRST})\\\\.(?:${IPV4_UNIT})\\\\.(?:${IPV4_UNIT})\\\\.(?:${IPV4_UNIT})`\n\nconst HOST_REG = '(?:[a-zA-Z0-9][\\\\w-]*\\\\.)?(?:[a-zA-Z0-9][\\\\w-]*)(?:\\\\.[a-zA-Z]+){1,2}'\nconst PARAM_REG =\n  '(?:(?:[\\\\/]+[^\\\\?\\\\.]+)+)?(?:[\\\\/]*)?(\\\\?([^&\\\\.]+=[^&\\\\.]*)(&[^&\\\\.]+=[^&\\\\.]*)*)?(#.*)?'\nconst URL_REG = new RegExp(\n  `^(?:[a-z]{2,5}:(\\\\/+)?)?\\\\/\\\\/((?:${IPV4_REG})|(?:${HOST_REG}))(?:${PARAM_REG})?$`,\n)\n\nconst EMAIL_REG = /^(?:[a-zA-Z0-9][\\w-]*)@(?:[a-zA-Z0-9][\\w-]*)(?:\\.[a-zA-Z]+){1,2}$/\n\nconst TYPE_LIST = new Set([\n  'string',\n  'number',\n  'boolean',\n  'int',\n  'float',\n  'array',\n  'object',\n  'date',\n  'url',\n  'color',\n  'email',\n] as Types[])\n\nexport async function validate(\n  rules: Rule | Rule[],\n  value: unknown,\n  model: Record<string, unknown>,\n  validateAll = true,\n  defaultMsg = DEFAULT_MESSAGE,\n) {\n  if (!Array.isArray(rules)) {\n    rules = [rules]\n  }\n\n  const errors: string[] = []\n\n  for (const rule of rules as Rule[]) {\n    const { message = defaultMsg, validator } = rule\n\n    if (typeof validator === 'function') {\n      let result\n\n      try {\n        result = validator(value, model)\n\n        if (isPromise(result)) {\n          result = await result\n        }\n      } catch (error) {\n        result = error instanceof Error ? error.message : error\n      }\n\n      if (result !== true) {\n        const errorMessage = typeof result === 'string' ? result : message\n\n        errors.push(errorMessage)\n\n        if (!validateAll) break\n      }\n    }\n\n    if (rule.required && !validateRequirement(value)) {\n      errors.push(message)\n\n      if (!validateAll) break\n    }\n\n    if (isDefined(value) && value !== '') {\n      if (rule.enums && !validateEnumeration(value, rule.enums)) {\n        errors.push(message)\n\n        if (!validateAll) break\n      }\n\n      if (rule.type && !validateType(value, rule.type, rule)) {\n        errors.push(message)\n\n        if (!validateAll) break\n      }\n    }\n  }\n\n  return errors\n}\n\nexport function validateRequirement(value: any) {\n  return !(\n    !isDefined(value) ||\n    value.toString().trim() === '' ||\n    (Array.isArray(value) && !value.length) ||\n    (isObject(value) && !Object.keys(value).length)\n  )\n}\n\nexport function validateEnumeration<T>(value: T | T[], options: T[]) {\n  if (!Array.isArray(options) || !options.length) return true\n\n  if (Array.isArray(value)) {\n    const enumSet = new Set(options)\n\n    for (const item of value) {\n      if (!enumSet.has(item)) {\n        return false\n      }\n    }\n\n    return true\n  } else {\n    return options.includes(value)\n  }\n}\n\nexport function validateType(value: unknown, type: Types, options: TypeOptions = {}) {\n  if (!TYPE_LIST.has(type)) return true\n\n  switch (type) {\n    case 'string':\n      return validateString(value, options.length, options.range)\n    case 'number':\n      return validateNumber(value, options.strict, options.length, options.range)\n    case 'boolean':\n      return validateBoolean(value, options.strict)\n    case 'int':\n      return validateInt(value, options.strict, options.length, options.range)\n    case 'float':\n      return validateFloat(value, options.strict, options.length, options.range)\n    case 'array':\n      return Array.isArray(value)\n    case 'object':\n      return isObject(value)\n    case 'date':\n      return validateDate(value, options.strict)\n    case 'url':\n      return validateUrl(value)\n    case 'color':\n      return typeof value === 'string' && isColor(value)\n    case 'email':\n      return validateEmail(value)\n  }\n}\n\nexport function validateString(value: unknown, length?: number, range?: Range) {\n  if (typeof value !== 'string') return false\n\n  if (isDefined(length) && value.length !== length) {\n    return false\n  }\n\n  if (Array.isArray(range)) {\n    const [min, max] = range\n\n    if (min && value.length < min) return false\n\n    if (max && value.length > max) return false\n  }\n\n  return true\n}\n\nexport function validateNumber(value: unknown, strict?: boolean, length?: number, range?: Range) {\n  if (strict) {\n    if (typeof value !== 'number') return false\n  } else {\n    value = Number(value)\n\n    if (Number.isNaN(value)) return false\n  }\n\n  const number = value as number\n\n  if (isDefined(length) && number.toString().length !== length) {\n    return false\n  }\n\n  if (Array.isArray(range)) {\n    const [min, max] = range\n\n    if (isDefined(min) && number < min) return false\n\n    if (isDefined(max) && number > max) return false\n  }\n\n  return true\n}\n\nexport function validateBoolean(value: unknown, strict?: boolean) {\n  if (!strict) {\n    if (typeof value === 'string') {\n      return value === 'true' || value === 'false'\n    }\n\n    if (typeof value === 'number') {\n      return value === 1 || value === 0\n    }\n  }\n\n  return typeof value === 'boolean'\n}\n\nexport function validateInt(value: unknown, strict?: boolean, length?: number, range?: Range) {\n  if (validateNumber(value, strict, length, range)) {\n    const number = toNumber(value as any)\n\n    return Math.ceil(number) === number\n  }\n\n  return false\n}\n\nexport function validateFloat(value: unknown, strict?: boolean, length?: number, range?: Range) {\n  if (validateNumber(value, strict, length, range)) {\n    const number = toNumber(value as any)\n\n    return strict ? Math.ceil(number) !== number : number.toString().includes('.')\n  }\n\n  return false\n}\n\nexport function validateDate(value: unknown, strict?: boolean) {\n  if (strict && !(value instanceof Date)) {\n    return false\n  }\n\n  try {\n    toDate(value as any)\n  } catch (e) {\n    return false\n  }\n\n  return true\n}\n\nexport function validateUrl(value: unknown) {\n  return typeof value === 'string' && URL_REG.test(value)\n}\n\nexport function validateEmail(value: unknown) {\n  return typeof value === 'string' && EMAIL_REG.test(value)\n}\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { ChangeEvent, InputSlots, InputType } from './symbol'\n\nexport const inputProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('input'),\n  type: String as PropType<InputType>,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  formatter: Function as PropType<(value: string | number) => string | number>,\n  value: [String, Number],\n  placeholder: String,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  autocomplete: booleanStringProp,\n  readonly: booleanProp,\n  disabled: booleanProp,\n  controlClass: classProp,\n  debounce: booleanProp,\n  delay: Number,\n  maxLength: Number,\n  hideCount: booleanProp,\n  before: String,\n  after: String,\n  /**\n   * 是否显示切换 password 为明文的按钮\n   */\n  plainPassword: booleanProp,\n  clearable: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  transparent: booleanProp,\n  sync: booleanProp,\n  controlAttrs: Object as PropType<Record<string, any>>,\n  name: String,\n  slots: Object as PropType<InputSlots>,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onInput: eventProp<EventListener<ChangeEvent>>(),\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n  onEnter: eventProp(),\n  onClear: eventProp(),\n  onPrefixClick: eventProp<(event: MouseEvent) => void>(),\n  onSuffixClick: eventProp<(event: MouseEvent) => void>(),\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\n  onCompositionStart: eventProp<(event: CompositionEvent) => void>(),\n  onCompositionEnd: eventProp<(event: CompositionEvent) => void>(),\n})\n\nexport type InputProps = ExtractPropTypes<typeof inputProps>\nexport type InputCProps = ConfigurableProps<InputProps>\n","import { Icon } from '@/components/icon'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { Transition, computed, defineComponent, nextTick, ref, renderSlot, toRef, watch } from 'vue'\n\nimport { useHover } from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { debounce, isNull, noop, throttle, toNumber } from '@vexip-ui/utils'\nimport { inputProps } from './props'\n\nimport type { ChangeEvent, InputType } from './symbol'\n\ntype InputEventType = 'input' | 'change'\n\nconst inputTypes = Object.freeze<InputType[]>(['text', 'password', 'date', 'datetime', 'time'])\n\nfunction toNotNullString(value: any) {\n  return isNull(value) ? '' : String(value)\n}\n\nexport default defineComponent({\n  name: 'Input',\n  props: inputProps,\n  emits: ['update:value'],\n  setup(_props, { slots, emit, expose }) {\n    const {\n      idFor,\n      labelId,\n      state,\n      disabled,\n      loading,\n      size,\n      validateField,\n      clearField,\n      getFieldValue,\n      setFieldValue,\n    } = useFieldStore<string | number>(() => inputControl.value?.focus())\n\n    const props = useProps('input', _props, {\n      size: createSizeProp(size),\n      state: createStateProp(state),\n      locale: null,\n      type: {\n        default: 'text',\n        validator: value => inputTypes.includes(value),\n      },\n      prefix: createIconProp(),\n      prefixColor: '',\n      suffix: createIconProp(),\n      suffixColor: '',\n      formatter: {\n        default: null,\n        isFunc: true,\n      },\n      value: {\n        default: () => getFieldValue(),\n        static: true,\n      },\n      placeholder: null,\n      autofocus: false,\n      spellcheck: false,\n      autocomplete: false,\n      readonly: false,\n      disabled: () => disabled.value,\n      controlClass: null,\n      debounce: false,\n      delay: null,\n      maxLength: 0,\n      hideCount: false,\n      before: '',\n      after: '',\n      plainPassword: false,\n      clearable: false,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingLock: false,\n      loadingEffect: null,\n      transparent: false,\n      sync: false,\n      controlAttrs: null,\n      name: {\n        default: '',\n        static: true,\n      },\n      slots: () => ({}),\n    })\n\n    const initValue = toNotNullString(props.value)\n\n    const nh = useNameHelper('input')\n    const icons = useIcons()\n    const focused = ref(false)\n    const currentValue = ref(initValue)\n    const showPassword = ref(false)\n    const currentLength = ref(initValue.length)\n    const beforeHover = ref(false)\n    const afterHover = ref(false)\n    const composing = ref(false)\n\n    const inputControl = ref<HTMLInputElement>()\n\n    const { wrapper: control, isHover } = useHover()\n    const locale = useLocale('input', toRef(props, 'locale'))\n\n    let lastValue = props.value\n\n    const hasBefore = computed(() => {\n      return !!(\n        slots.before ||\n        slots.beforeAction ||\n        slots['before-action'] ||\n        props.before ||\n        props.slots.before ||\n        props.slots.beforeAction\n      )\n    })\n    const hasAfter = computed(() => {\n      return !!(\n        slots.after ||\n        slots.afterAction ||\n        slots['after-action'] ||\n        props.after ||\n        props.slots.after ||\n        props.slots.afterAction\n      )\n    })\n    const basisClass = computed(() => {\n      return {\n        [nh.bs('wrapper')]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.size)]: props.size !== 'default',\n      }\n    })\n    const readonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bm(props.type),\n        !hasBefore.value && !hasAfter.value && basisClass.value,\n        {\n          [nh.bm('focused')]: focused.value,\n          [nh.bm('disabled')]: props.disabled,\n          [nh.bm('readonly')]: readonly.value,\n          [nh.bm('loading')]: props.loading,\n          [nh.bm(props.state)]: props.state !== 'default',\n          [nh.bm('before')]: slots.beforeAction || slots['before-action'] || props.slots.before,\n          [nh.bm('after')]: slots.afterAction || slots['after-action'] || props.slots.after,\n          [nh.bm('transparent')]: props.transparent,\n          [nh.bm('plain-password')]: props.plainPassword,\n        },\n      ]\n    })\n    const wrapperClass = computed(() => {\n      return {\n        ...basisClass.value,\n        [nh.bm(`wrapper--${props.size}`)]: props.size !== 'default',\n        [nh.bs('wrapper--before-only')]: hasBefore.value && !hasAfter.value,\n        [nh.bs('wrapper--after-only')]: !hasBefore.value && hasAfter.value,\n        [nh.bm('transparent')]: props.transparent,\n      }\n    })\n    const hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\n    const hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\n    const inputType = computed(() => {\n      const type = props.type\n\n      if (type === 'password') {\n        return showPassword.value ? 'text' : 'password'\n      }\n\n      if (type === 'datetime') {\n        return 'datetime-local'\n      }\n\n      return type\n    })\n    const formattedValue = computed(() => {\n      return typeof props.formatter === 'function'\n        ? toNotNullString(props.formatter(currentValue.value))\n        : currentValue.value\n    })\n    const passwordIcon = computed(() =>\n      showPassword.value ? icons.value.plainText : icons.value.cipherText,\n    )\n    const hasValue = computed(() => {\n      return !(isNull(currentValue.value) || currentValue.value === '')\n    })\n    const showClear = computed(() => {\n      return (\n        !props.disabled && !readonly.value && props.clearable && hasValue.value && isHover.value\n      )\n    })\n    const autoComplete = computed(() => {\n      return typeof props.autocomplete === 'boolean'\n        ? props.autocomplete\n          ? 'on'\n          : 'off'\n        : props.autocomplete\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        currentValue.value = toNotNullString(value)\n        lastValue = currentValue.value\n        limitValueLength()\n      },\n    )\n    watch(\n      [formattedValue, inputControl],\n      () => {\n        if (inputControl.value) {\n          inputControl.value.value = formattedValue.value\n        }\n      },\n      { immediate: true, flush: 'post' },\n    )\n\n    // Expose api methods.\n    // Need to define some same name methods in 'methods' option to support infer types.\n    expose({\n      idFor,\n      labelId,\n      focused,\n      currentValue,\n      showPassword,\n      currentLength,\n      composing,\n      input: inputControl,\n      copyValue,\n      focus: (options?: FocusOptions) => {\n        inputControl.value?.focus(options)\n      },\n      blur: () => {\n        inputControl.value?.blur()\n      },\n    })\n\n    function getLatestValue() {\n      return typeof props.value === 'number' ? parseFloat(currentValue.value) : currentValue.value\n    }\n\n    function handleFocus(event: FocusEvent) {\n      if (!focused.value) {\n        focused.value = true\n        emitEvent(props.onFocus, event)\n      }\n    }\n\n    function handleBlur(event: FocusEvent) {\n      if (focused.value) {\n        focused.value = false\n\n        setTimeout(() => {\n          if (!focused.value) {\n            emitEvent(props.onBlur, event)\n            lastValue !== getLatestValue() && emitChangeEvent('change')\n          }\n        }, 120)\n      }\n    }\n\n    function handleChange(event: Event) {\n      const type = event.type as InputEventType\n\n      if (composing.value) {\n        if (type === 'input') return\n\n        composing.value = false\n      }\n\n      currentValue.value = (event.target as HTMLInputElement).value\n      limitValueLength()\n\n      const value = currentValue.value\n\n      setValue(value, type)\n    }\n\n    function setValue(value: string, type: InputEventType, sync = props.sync) {\n      currentValue.value = value\n      emitChangeEvent(type, sync)\n    }\n\n    function emitChangeEvent(type: InputEventType, sync = props.sync) {\n      type = type === 'input' ? 'input' : 'change'\n\n      const value = getLatestValue()\n\n      if (type === 'change') {\n        lastValue = value\n\n        if (!sync) {\n          emit('update:value', value)\n          setFieldValue(value)\n        }\n\n        emitEvent(props.onChange as ChangeEvent, value)\n\n        if (!sync) {\n          validateField()\n        }\n      } else {\n        if (sync) {\n          emit('update:value', value)\n          setFieldValue(value)\n        }\n\n        emitEvent(props.onInput as ChangeEvent, value)\n\n        if (sync) {\n          validateField()\n        }\n      }\n    }\n\n    function limitValueLength() {\n      let value = currentValue.value\n\n      if (isNull(value)) {\n        currentLength.value = 0\n\n        return\n      }\n\n      const maxLength = props.maxLength\n\n      if (maxLength && value.length > maxLength) {\n        value = value.slice(0, maxLength)\n      }\n\n      currentLength.value = value.length\n      currentValue.value = value\n    }\n\n    function toggleShowPassword() {\n      if (props.disabled) {\n        return\n      }\n\n      showPassword.value = !showPassword.value\n      nextTick(() => {\n        inputControl.value?.focus()\n      })\n    }\n\n    function handleClear(event: MouseEvent) {\n      if (props.disabled || readonly.value) return\n\n      event.stopPropagation()\n      setValue('', 'change', false)\n      emitEvent(props.onClear)\n      nextTick(() => clearField(''))\n      currentLength.value = 0\n      inputControl.value?.focus()\n    }\n\n    function handleEnter() {\n      emitEvent(props.onEnter)\n    }\n\n    function handlePrefixClick(event: MouseEvent) {\n      emitEvent(props.onPrefixClick, event)\n    }\n\n    function handleSuffixClick(event: MouseEvent) {\n      emitEvent(props.onSuffixClick, event)\n    }\n\n    function handleKeyDown(event: KeyboardEvent) {\n      emitEvent(props.onKeyDown, event)\n    }\n\n    function handleKeyPress(event: KeyboardEvent) {\n      emitEvent(props.onKeyPress, event)\n    }\n\n    function handleKeyUp(event: KeyboardEvent) {\n      if (event.key === 'Enter') {\n        handleEnter()\n      }\n\n      emitEvent(props.onKeyUp, event)\n    }\n\n    function handleCompositionStart(event: CompositionEvent) {\n      composing.value = true\n      emitEvent(props.onCompositionStart, event)\n    }\n\n    function handleCompositionEnd(event: CompositionEvent) {\n      if (composing.value) {\n        composing.value = false\n\n        if (inputControl.value) {\n          inputControl.value.dispatchEvent(new Event('input'))\n        }\n      }\n\n      emitEvent(props.onCompositionEnd, event)\n    }\n\n    function copyValue() {\n      const input = document.createElement('input')\n\n      input.style.height = '0'\n      input.setAttribute('readonly', 'readonly')\n      input.value = currentValue.value\n      document.body.appendChild(input)\n      input.select()\n\n      const isSuccess = document.execCommand('copy')\n\n      document.body.removeChild(input)\n\n      return isSuccess\n    }\n\n    function preventDefault(event: Event) {\n      event.preventDefault()\n    }\n\n    const delay = toNumber(props.delay)\n    const handleInput = props.debounce\n      ? debounce(handleChange, delay || 100)\n      : throttle(handleChange, delay || 16)\n\n    function renderPrefix() {\n      return (\n        <div\n          class={[nh.be('icon'), nh.be('prefix')]}\n          style={{ color: props.prefixColor }}\n          onClick={handlePrefixClick}\n        >\n          {renderSlot(slots, 'prefix', undefined, () => [\n            <Renderer renderer={props.slots.prefix}>\n              <Icon icon={props.prefix}></Icon>\n            </Renderer>,\n          ])}\n        </div>\n      )\n    }\n\n    function renderCustomSuffix() {\n      if (hasSuffix.value) {\n        return (\n          <div\n            key={'suffix'}\n            class={[nh.be('icon'), nh.be('suffix')]}\n            style={{\n              color: props.suffixColor,\n              opacity: showClear.value || props.loading ? '0%' : '',\n            }}\n            onClick={handleSuffixClick}\n          >\n            {renderSlot(slots, 'suffix', undefined, () => [\n              <Renderer renderer={props.slots.suffix}>\n                <Icon icon={props.suffix}></Icon>\n              </Renderer>,\n            ])}\n          </div>\n        )\n      }\n\n      if (props.clearable || props.loading) {\n        return (\n          <div key={'placeholder'} class={[nh.be('icon'), nh.bem('icon', 'placeholder')]}></div>\n        )\n      }\n\n      return null\n    }\n\n    function renderSuffixAction() {\n      if (showClear.value) {\n        return (\n          <button\n            key={'clear'}\n            class={[nh.be('icon'), nh.be('clear')]}\n            type={'button'}\n            tabindex={-1}\n            aria-label={locale.value.ariaLabel.clear}\n            onClick={handleClear}\n          >\n            <Icon {...icons.value.clear} label={'clear'}></Icon>\n          </button>\n        )\n      }\n\n      if (props.loading) {\n        return (\n          <div key={'loading'} class={[nh.be('icon'), nh.be('loading')]}>\n            <Icon\n              {...icons.value.loading}\n              effect={props.loadingEffect || icons.value.loading.effect}\n              icon={props.loadingIcon || icons.value.loading.icon}\n              label={'loading'}\n            ></Icon>\n          </div>\n        )\n      }\n\n      return null\n    }\n\n    function renderSuffix() {\n      return (\n        <div class={nh.be('suffix-wrapper')}>\n          {renderCustomSuffix()}\n          <Transition name={nh.ns('fade')} appear>\n            {renderSuffixAction()}\n          </Transition>\n        </div>\n      )\n    }\n\n    function renderCount() {\n      return (\n        <div class={nh.be('count')}>\n          {renderSlot(slots, 'count', { value: currentValue.value }, () => [\n            <Renderer renderer={props.slots.count} data={{ value: currentValue.value }}>\n              {props.maxLength === Infinity\n                ? currentLength.value\n                : `${currentLength.value}/${props.maxLength}`}\n            </Renderer>,\n          ])}\n        </div>\n      )\n    }\n\n    function renderPlainPassword() {\n      if (props.type === 'password' && props.plainPassword) {\n        return (\n          <div\n            key={'password'}\n            class={[nh.be('icon'), nh.be('password')]}\n            style={{\n              color: props.suffixColor,\n            }}\n            onClick={toggleShowPassword}\n          >\n            {renderSlot(slots, 'password', { plain: showPassword.value }, () => [\n              <Renderer renderer={props.slots.password} data={{ plain: showPassword.value }}>\n                <Icon {...passwordIcon.value}></Icon>\n              </Renderer>,\n            ])}\n          </div>\n        )\n      }\n\n      return null\n    }\n\n    function renderControl() {\n      return (\n        <div\n          id={idFor.value}\n          ref={control}\n          class={className.value}\n          onClick={() => inputControl.value?.focus()}\n        >\n          {hasPrefix.value && renderPrefix()}\n          <input\n            {...props.controlAttrs}\n            ref={inputControl}\n            class={[nh.be('control'), props.controlAttrs?.class, props.controlClass]}\n            type={inputType.value}\n            autofocus={props.autofocus}\n            autocomplete={autoComplete.value}\n            spellcheck={props.spellcheck}\n            disabled={props.disabled}\n            readonly={readonly.value || undefined}\n            placeholder={props.placeholder ?? locale.value.placeholder}\n            maxlength={props.maxLength > 0 ? props.maxLength : undefined}\n            name={props.name || props.controlAttrs?.name}\n            aria-labelledby={labelId.value}\n            onBlur={handleBlur}\n            onFocus={handleFocus}\n            onInput={handleInput}\n            onChange={handleChange}\n            onKeypress={handleKeyPress}\n            onKeydown={handleKeyDown}\n            onKeyup={handleKeyUp}\n            onSubmit={preventDefault}\n            onCompositionstart={handleCompositionStart}\n            onCompositionend={handleCompositionEnd}\n          />\n          {renderSuffix()}\n          {props.maxLength > 0 && !props.hideCount ? renderCount() : null}\n          {renderPlainPassword()}\n        </div>\n      )\n    }\n\n    function renderAside(type: 'before' | 'after') {\n      const buttonSlot =\n        slots[`${type}Action`] || slots[`${type}-action`] || props.slots[`${type}Action`]\n\n      if (buttonSlot) {\n        return (\n          <div\n            class={[nh.be(type), nh.bem(type, 'action')]}\n            onMouseenter={() => ((type === 'before' ? beforeHover : afterHover).value = true)}\n            onMouseleave={() => ((type === 'before' ? beforeHover : afterHover).value = false)}\n          >\n            {buttonSlot()}\n          </div>\n        )\n      }\n\n      return (\n        <div class={nh.be(type)}>\n          {slots[type] ? (\n            slots[type]!()\n          ) : (\n            <Renderer renderer={props.slots[type]}>{props[type]}</Renderer>\n          )}\n        </div>\n      )\n    }\n\n    return () => {\n      if (hasBefore.value || hasAfter.value) {\n        return (\n          <div class={wrapperClass.value}>\n            {hasBefore.value && renderAside('before')}\n            {renderControl()}\n            {hasAfter.value && renderAside('after')}\n          </div>\n        )\n      }\n\n      return renderControl()\n    }\n  },\n  methods: {\n    focus: noop as (options?: FocusOptions) => void,\n    blur: noop as () => void,\n  },\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ScrollbarPlacement } from './symbol'\n\nexport const scrollbarProps = buildProps({\n  placement: String as PropType<ScrollbarPlacement>,\n  scroll: Number,\n  barLength: Number,\n  width: Number,\n  appear: booleanProp,\n  fade: Number,\n  barColor: String,\n  trackColor: String,\n  disabled: booleanProp,\n  wrapper: [String, Object] as PropType<string | HTMLElement>,\n  duration: Number,\n  useTrack: booleanProp,\n  trackSpeed: Number,\n  onScrollStart: eventProp<(percent: number) => void>(),\n  onScroll: eventProp<(percent: number) => void>(),\n  onScrollEnd: eventProp<(percent: number) => void>(),\n})\n\nexport type ScrollbarProps = ExtractPropTypes<typeof scrollbarProps>\nexport type ScrollbarCProps = ConfigurableProps<ScrollbarProps, 'scroll'>\n","export type ScrollbarPlacement = 'top' | 'right' | 'bottom' | 'left'\n\nexport const enum ScrollbarType {\n  HORIZONTAL,\n  VERTICAL,\n}\n\nexport const scrollbarPlacements = Object.freeze<ScrollbarPlacement[]>([\n  'top',\n  'right',\n  'bottom',\n  'left',\n])\n","import { ref } from 'vue'\n\nimport { USE_TOUCH, noop } from '@vexip-ui/utils'\nimport { ScrollbarType } from './symbol'\n\nimport type { Ref } from 'vue'\n\nexport function useTrack({\n  currentScroll = ref(0),\n  trackSpeed = ref(2),\n  track = ref(null),\n  bar = ref(null),\n  tracking = ref(false),\n  type = ref(ScrollbarType.VERTICAL),\n  barLength = ref(35),\n  disabled = ref(false),\n  onDown = noop,\n  onMove = noop,\n  onUp = noop,\n  onScroll = noop,\n}: {\n  currentScroll: Ref<number>,\n  type: Ref<ScrollbarType>,\n  trackSpeed?: Ref<number>,\n  track?: Ref<HTMLElement | null | undefined>,\n  bar?: Ref<HTMLElement | null | undefined>,\n  tracking?: Ref<boolean>,\n  barLength?: Ref<number>,\n  disabled?: Ref<boolean>,\n  onDown?: (scroll: number) => void,\n  onMove?: (scroll: number) => void,\n  onUp?: (scroll: number) => void,\n  onScroll?: (scroll: number) => void,\n}) {\n  let length: number\n  let startAt: number\n  let cursorAt: number\n  let targetScroll: number\n  let forward = true\n  let processing = false\n\n  function animateMoveBar() {\n    if (!tracking.value) return\n\n    processing = true\n\n    const speedRate = computeSpeedRate(targetScroll, currentScroll.value)\n    let changed = false\n\n    if (forward) {\n      if (currentScroll.value < targetScroll) {\n        currentScroll.value += speedRate * trackSpeed.value\n        changed = true\n      }\n    } else if (currentScroll.value > targetScroll) {\n      currentScroll.value -= speedRate * trackSpeed.value\n      changed = true\n    }\n\n    if (changed) {\n      verifyScroll()\n      onScroll(currentScroll.value)\n    }\n\n    if (\n      tracking.value && forward\n        ? currentScroll.value < targetScroll\n        : currentScroll.value > targetScroll\n    ) {\n      requestAnimationFrame(animateMoveBar)\n    } else {\n      processing = false\n    }\n  }\n\n  function handleMouseDown(event: PointerEvent) {\n    if (disabled.value || event.button > 0) {\n      return false\n    }\n\n    event.stopPropagation()\n    event.preventDefault()\n\n    if (!track.value || !bar.value) return false\n\n    document.addEventListener('pointermove', handleMouseMove)\n    document.addEventListener('pointerup', handleMouseUp)\n\n    const rect = track.value.getBoundingClientRect()\n    const barRect = bar.value.getBoundingClientRect()\n\n    let position: number\n\n    if (type.value === ScrollbarType.VERTICAL) {\n      length = rect.height\n      startAt = barRect.top - rect.top\n      cursorAt = barRect.top\n      position = startAt + event.clientY - cursorAt\n    } else {\n      length = rect.width\n      startAt = barRect.left - rect.left\n      cursorAt = barRect.left\n      position = startAt + event.clientX - cursorAt\n    }\n\n    targetScroll = Math.max(\n      0,\n      Math.min((position / length / (100 - barLength.value / 2)) * 1e4, 100),\n    )\n    forward = targetScroll >= currentScroll.value\n\n    tracking.value = true\n\n    onDown(currentScroll.value)\n    animateMoveBar()\n  }\n\n  function handleMouseMove(event: PointerEvent) {\n    event.stopPropagation()\n\n    if (!USE_TOUCH) {\n      event.preventDefault()\n    }\n\n    onMove(currentScroll.value)\n\n    let position: number\n\n    if (type.value === ScrollbarType.VERTICAL) {\n      position = startAt + event.clientY - cursorAt\n    } else {\n      position = startAt + event.clientX - cursorAt\n    }\n\n    targetScroll = Math.max(\n      0,\n      Math.min((position / length / (100 - barLength.value / 2)) * 1e4, 100),\n    )\n\n    !processing && animateMoveBar()\n  }\n\n  function handleMouseUp(event: PointerEvent) {\n    event.preventDefault()\n\n    document.removeEventListener('pointermove', handleMouseMove)\n    document.removeEventListener('pointerup', handleMouseUp)\n\n    tracking.value = false\n\n    onUp(currentScroll.value)\n  }\n\n  function verifyScroll() {\n    currentScroll.value = Math.max(0, Math.min(currentScroll.value, 100))\n  }\n\n  return {\n    currentScroll,\n    trackSpeed,\n    track,\n    bar,\n    tracking,\n    type,\n    barLength,\n    disabled,\n\n    handleMouseDown,\n  }\n}\n\nfunction computeSpeedRate(start: number, end: number) {\n  const span = Math.abs(start - end)\n\n  for (let i = 0; i < 5; ++i) {\n    if (span < (i + 1) * 20) {\n      return 1 + 0.25 * i\n    }\n  }\n\n  return 2\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  getCurrentInstance,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useManualRef, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, isDefined, throttle } from '@vexip-ui/utils'\nimport { scrollbarProps } from './props'\nimport { useTrack } from './hooks'\nimport { ScrollbarType, scrollbarPlacements } from './symbol'\n\ndefineOptions({ name: 'Scrollbar' })\n\nconst _props = defineProps(scrollbarProps)\nconst props = useProps('scrollbar', _props, {\n  placement: {\n    default: 'right',\n    validator: value => scrollbarPlacements.includes(value),\n  },\n  scroll: {\n    default: 0,\n    validator: value => value >= 0 && value <= 100,\n    static: true,\n  },\n  barLength: {\n    default: 35,\n    validator: value => value > 0 && value < 100,\n  },\n  width: null,\n  appear: false,\n  fade: 1500,\n  barColor: null,\n  trackColor: null,\n  disabled: false,\n  wrapper: null,\n  duration: null,\n  useTrack: false,\n  trackSpeed: {\n    default: 2,\n    validator: value => value > 0 && value < 10,\n  },\n})\n\nconst nh = useNameHelper('scrollbar')\nconst active = ref(false)\nconst scrolling = ref(false)\n\nconst { manualRef, triggerUpdate } = useManualRef()\n\nconst { isRtl } = useRtl()\n\nconst currentScroll = manualRef(props.scroll)\n\nconst container = ref<HTMLElement>()\nconst bar = ref<HTMLElement>()\nconst track = ref<HTMLElement>()\n\nconst { timer } = useSetTimeout()\n\nconst type = computed(() => {\n  return props.placement === 'right' || props.placement === 'left'\n    ? ScrollbarType.VERTICAL\n    : ScrollbarType.HORIZONTAL\n})\n\nconst { tracking, handleMouseDown: handleTrackMouseDown } = useTrack({\n  currentScroll,\n  track,\n  bar,\n  type,\n  trackSpeed: toRef(props, 'trackSpeed'),\n  barLength: toRef(props, 'barLength'),\n  disabled: toRef(props, 'disabled'),\n  onDown: scroll => {\n    clearTimeout(timer.fade)\n    emitEvent(props.onScrollStart, scroll)\n  },\n  // onMove: () => clearTimeout(timer.fade),\n  onUp: scroll => {\n    setScrollbarFade()\n    triggerUpdate()\n    emitEvent(props.onScrollEnd, scroll)\n  },\n  onScroll: scroll => {\n    triggerUpdate()\n    emitEvent(props.onScroll, scroll)\n  },\n})\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.placement),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('fade')]: props.fade,\n      [nh.bm('scrolling')]: scrolling.value,\n      [nh.bm('tracking')]: tracking.value,\n      [nh.bm('active')]: active.value,\n      [nh.bm('disabled')]: props.disabled,\n    },\n  ]\n})\nconst style = computed<Record<string, string>>(() => {\n  return {\n    [nh.cv('bar-bg-color')]: props.barColor,\n    [nh.cv('track-bg-color')]: props.trackColor,\n    [nh.cv('width')]: props.width ? `${props.width}px` : null!,\n  }\n})\n\nwatch(\n  () => props.scroll,\n  value => {\n    currentScroll.value = value\n    triggerUpdate()\n  },\n)\nwatchEffect(() => {\n  if (!bar.value) return\n\n  const position = `${((100 - props.barLength) * currentScroll.value) / props.barLength}%`\n  const length = `${props.barLength}%`\n\n  if (type.value === ScrollbarType.VERTICAL) {\n    bar.value.style.height = length\n    bar.value.style.transform = `translate3d(0, ${position}, 0)`\n  } else {\n    bar.value.style.width = length\n    bar.value.style.transform = `translate3d(${isRtl.value ? '-' : ''}${position}, 0, 0)`\n  }\n})\nwatchEffect(() => {\n  if (!bar.value) return\n\n  bar.value.style.transitionDuration =\n    isDefined(props.duration) && props.duration >= 0 ? `${props.duration}ms` : ''\n})\n\nif (props.appear) {\n  watch(currentScroll, () => {\n    clearTimeout(timer.fade)\n    active.value = true\n\n    if (!scrolling.value && !tracking.value) {\n      setScrollbarFade()\n    }\n  })\n}\n\nconst handleWrapperMouseMove = throttle(() => {\n  clearTimeout(timer.fade)\n\n  if (props.disabled) {\n    active.value = false\n  } else {\n    active.value = true\n\n    if (!scrolling.value && !tracking.value) {\n      setScrollbarFade()\n    }\n  }\n})\n\nlet wrapperElement: HTMLElement | null\n\nonMounted(() => {\n  let instance = getCurrentInstance()\n\n  nextTick(() => {\n    if (typeof props.wrapper === 'string') {\n      wrapperElement = document.querySelector(props.wrapper)\n    } else {\n      wrapperElement = props.wrapper\n    }\n\n    if (!wrapperElement) {\n      if (instance?.parent) {\n        wrapperElement = instance.parent.proxy?.$el\n\n        if (!wrapperElement) {\n          wrapperElement = container.value?.parentElement ?? null\n        }\n      } else {\n        wrapperElement = container.value?.parentElement ?? null\n      }\n    }\n\n    if (wrapperElement && props.fade >= 300) {\n      wrapperElement.addEventListener('mousemove', handleWrapperMouseMove)\n    }\n\n    instance = null\n\n    if (!props.appear) {\n      watch(currentScroll, () => {\n        clearInterval(timer.fade)\n        active.value = true\n        setScrollbarFade()\n      })\n    }\n  })\n})\n\nonBeforeUnmount(() => {\n  if (wrapperElement) {\n    wrapperElement.removeEventListener('mousemove', handleWrapperMouseMove)\n  }\n\n  wrapperElement = null\n  clearTimeout(timer.fade)\n})\n\ndefineExpose({\n  currentScroll,\n  container,\n  bar,\n  track,\n  handleScroll,\n})\n\nlet length: number\nlet startAt: number\nlet cursorAt: number\n\nfunction handleMouseDown(event: PointerEvent) {\n  if (event.button !== 0 || props.disabled) {\n    return false\n  }\n\n  event.stopPropagation()\n  event.preventDefault()\n\n  if (!track.value || !bar.value) return false\n\n  document.addEventListener('pointermove', handleMouseMove)\n  document.addEventListener('pointerup', handleMouseUp)\n\n  const rect = track.value.getBoundingClientRect()\n  const barRect = bar.value.getBoundingClientRect()\n\n  if (type.value === ScrollbarType.VERTICAL) {\n    length = rect.height\n    startAt = barRect.top - rect.top\n    cursorAt = event.clientY\n  } else {\n    length = rect.width\n    startAt = isRtl.value ? barRect.right - rect.right : barRect.left - rect.left\n    cursorAt = event.clientX\n  }\n\n  clearTimeout(timer.fade)\n\n  scrolling.value = true\n  emitEvent(props.onScrollStart, currentScroll.value)\n}\n\nfunction handleMouseMove(event: PointerEvent) {\n  event.stopPropagation()\n\n  if (!USE_TOUCH) {\n    event.preventDefault()\n  }\n\n  let position: number\n\n  if (type.value === ScrollbarType.VERTICAL) {\n    position = startAt + event.clientY - cursorAt\n  } else {\n    position = isRtl.value\n      ? -(startAt + event.clientX - cursorAt)\n      : startAt + event.clientX - cursorAt\n  }\n\n  // position / length * 100 === (100 - barLength) * currentScroll / 100\n  currentScroll.value = (position / length / (100 - props.barLength)) * 1e4\n\n  verifyScroll()\n  triggerUpdate()\n  emitEvent(props.onScroll, currentScroll.value)\n}\n\nfunction handleMouseUp(event: PointerEvent) {\n  event.preventDefault()\n\n  document.removeEventListener('pointermove', handleMouseMove)\n  document.removeEventListener('pointerup', handleMouseUp)\n\n  setScrollbarFade()\n\n  scrolling.value = false\n  emitEvent(props.onScrollEnd, currentScroll.value)\n}\n\nfunction verifyScroll() {\n  currentScroll.value = Math.max(0, Math.min(currentScroll.value, 100))\n}\n\nfunction setScrollbarFade() {\n  if (props.fade >= 300) {\n    timer.fade = setTimeout(() => {\n      active.value = false\n    }, props.fade)\n  }\n}\n\nfunction handleScroll(scroll: number) {\n  if (Math.abs(currentScroll.value - scroll) < 0.0001) return\n\n  currentScroll.value = boundRange(scroll, 0, 100)\n  triggerUpdate()\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"container\"\n    :class=\"className\"\n    role=\"scrollbar\"\n    :style=\"style\"\n  >\n    <div\n      ref=\"track\"\n      :class=\"[nh.be('track'), props.useTrack ? null : nh.bem('track', 'disabled')]\"\n      @touchstart=\"disableEvent\"\n      @pointerdown=\"handleTrackMouseDown\"\n    ></div>\n    <div\n      ref=\"bar\"\n      :class=\"nh.be('bar')\"\n      @touchstart=\"disableEvent\"\n      @pointerdown=\"handleMouseDown\"\n    ></div>\n  </div>\n</template>\n","import { booleanNumberProp, booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const resizeObserverProps = buildProps({\n  throttle: booleanNumberProp,\n  disabled: booleanProp,\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n})\n\nexport type ResizeObserverProps = ExtractPropTypes<typeof resizeObserverProps>\nexport type ResizeObserverCProps = ConfigurableProps<ResizeObserverProps>\n","import {\n  defineComponent,\n  getCurrentInstance,\n  onBeforeUnmount,\n  onMounted,\n  renderSlot,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useProps } from '@vexip-ui/config'\nimport { useResize } from '@vexip-ui/hooks'\nimport { throttle } from '@vexip-ui/utils'\nimport { resizeObserverProps } from './props'\n\nexport default defineComponent({\n  name: 'ResizeObserver',\n  props: resizeObserverProps,\n  setup(_props, { slots }) {\n    const props = useProps('resizeObserver', _props, {\n      throttle: {\n        default: false,\n        validator: value => typeof value === 'boolean' || value > 0,\n      },\n      disabled: false,\n    })\n\n    const { observeResize, unobserveResize } = useResize()\n\n    let observed = false\n\n    function handleResize(entry: ResizeObserverEntry) {\n      emitEvent(props.onResize, entry)\n    }\n\n    const throttleResize = props.throttle\n      ? throttle(handleResize, typeof props.throttle === 'boolean' ? 16 : props.throttle)\n      : handleResize\n\n    const instance = getCurrentInstance()\n\n    onMounted(() => {\n      watch(\n        () => props.disabled,\n        value => {\n          value ? unobserve() : observe()\n        },\n        { immediate: true, flush: 'post' },\n      )\n    })\n\n    onBeforeUnmount(() => {\n      if (observed) {\n        const el = getCurrentInstance()?.proxy?.$el as Element | null\n\n        if (el?.nextElementSibling) {\n          unobserveResize(el.nextElementSibling)\n        }\n      }\n    })\n\n    function observe() {\n      if (observed) return\n\n      const el = instance?.proxy?.$el as Element | null\n\n      if (el?.nextElementSibling) {\n        if (el.nextElementSibling !== el.nextSibling && el.nodeType === 3 && el.nodeValue !== '') {\n          return\n        }\n\n        observeResize(el.nextElementSibling, throttleResize)\n        observed = true\n      }\n    }\n\n    function unobserve() {\n      if (observed) {\n        const el = instance?.proxy?.$el as Element | null\n\n        if (el?.nextElementSibling) {\n          unobserveResize(el.nextElementSibling)\n        }\n\n        observed = false\n      }\n    }\n\n    return () => renderSlot(slots, 'default')\n  },\n})\n","import {\n  booleanNumberProp,\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  styleProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BarScrollPayload } from '@/components/scroll'\nimport type { NativeScrollMode, NativeScrollPayload } from './symbol'\n\nexport const nativeScrollProps = buildProps({\n  scrollClass: classProp,\n  scrollStyle: styleProp,\n  scrollAttrs: Object as PropType<Record<string, any>>,\n  mode: String as PropType<NativeScrollMode>,\n  width: [Number, String],\n  height: [Number, String],\n  disabled: booleanProp,\n  pointer: booleanProp,\n  scrollX: Number,\n  scrollY: Number,\n  useXBar: booleanProp,\n  useYBar: booleanProp,\n  barFade: Number,\n  barClass: classProp,\n  autoplay: booleanNumberProp,\n  playWaiting: Number,\n  appear: booleanProp,\n  barDuration: Number,\n  useBarTrack: booleanProp,\n  scrollTag: String,\n  observeDeep: booleanProp,\n  scrollOnly: booleanProp,\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n  onXEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onYEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onWheel: eventProp<(event: WheelEvent, type: 'vertical' | 'horizontal') => void>(),\n  onScrollStart: eventProp<(payload: Omit<NativeScrollPayload, 'type'>) => void>(),\n  onScroll: eventProp<(payload: NativeScrollPayload) => void>(),\n  onScrollEnd: eventProp<(payload: Omit<NativeScrollPayload, 'type'>) => void>(),\n  onBarScrollStart: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScroll: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScrollEnd: eventProp<(payload: BarScrollPayload) => void>(),\n})\n\nexport type NativeScrollProps = ExtractPropTypes<typeof nativeScrollProps>\nexport type NativeScrollCProps = ConfigurableProps<\n  NativeScrollProps,\n  'scrollX' | 'scrollY',\n  'onBeforeScroll'\n>\n","interface ScrollElement {\n  scrollTo(x: number, y: number): void,\n  [prop: string]: any,\n}\n\nexport function animateScrollTo(options: {\n  el: ScrollElement,\n  xFrom?: number,\n  xTo?: number,\n  yFrom?: number,\n  yTo?: number,\n  duration?: number,\n  callback?: null | (() => any),\n}): void {\n  const { el, xFrom = 0, xTo = 0, yFrom = 0, yTo = 0, duration = 500, callback = null } = options\n\n  if (!el) return\n\n  const end = () => {\n    typeof callback === 'function' && callback()\n  }\n\n  if (duration <= 0) {\n    el.scrollTo(xTo, yTo)\n    end()\n    return\n  }\n\n  const xDistance = xTo - xFrom\n  const yDistance = yTo - yFrom\n\n  if (!xDistance && !yDistance) {\n    end()\n    return\n  }\n\n  const xStep = Math.ceil((xDistance / duration) * 16)\n  const yStep = Math.ceil((yDistance / duration) * 16)\n\n  let currentX = xFrom\n  let currentY = yFrom\n\n  const scroll = () => {\n    currentX += xStep\n    currentY += yStep\n\n    if (xDistance && (xTo - currentX) / xDistance <= 0) {\n      currentX = xTo\n    }\n\n    if (yDistance && (yTo - currentY) / yDistance <= 0) {\n      currentY = yTo\n    }\n\n    el.scrollTo(currentX, currentY)\n\n    if ((!xDistance || currentX === xTo) && (!yDistance || currentY === yTo)) {\n      end()\n    } else {\n      requestAnimationFrame(scroll)\n    }\n  }\n\n  scroll()\n}\n","import { computed, onMounted, reactive, ref, watch } from 'vue'\n\nimport { isHiddenElement, useManualRef, useMounted, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, debounce, debounceMinor, isElement, multipleFixed } from '@vexip-ui/utils'\nimport { animateScrollTo } from './helper'\n\nimport type { Ref } from 'vue'\nimport type { NativeScrollMode } from './symbol'\n\nexport function useScrollWrapper({\n  mode,\n  disabled,\n  appear,\n  scrollX,\n  scrollY,\n  onResize,\n  onBeforeRefresh,\n  onAfterRefresh,\n}: {\n  mode: Ref<NativeScrollMode>,\n  disabled: Ref<boolean>,\n  appear: Ref<boolean>,\n  // width: Ref<number | string>,\n  // height: Ref<number | string>,\n  scrollX: Ref<number>,\n  scrollY: Ref<number>,\n  onResize?: (entity: ResizeObserverEntry) => void,\n  onBeforeRefresh?: () => void,\n  onAfterRefresh?: () => void,\n}) {\n  const { manualRef, triggerUpdate } = useManualRef()\n\n  const { isRtl } = useRtl()\n\n  const contentEl = ref<HTMLElement>()\n\n  const content = reactive({\n    el: contentEl,\n    scrollWidth: 0,\n    offsetWidth: 0,\n    scrollHeight: 0,\n    offsetHeight: 0,\n  })\n\n  // 当前滚动位置\n  const x = manualRef(0)\n  const y = manualRef(0)\n\n  const percentX = manualRef(0)\n  const percentY = manualRef(0)\n\n  const xScrollLimit = computed(() => {\n    return content.el ? content.scrollWidth - content.offsetWidth : 0\n  })\n  const yScrollLimit = computed(() => {\n    return content.el ? content.scrollHeight - content.offsetHeight : 0\n  })\n  const enableXScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'vertical' &&\n      !!content.el &&\n      content.scrollWidth > content.offsetWidth\n    )\n  })\n  const enableYScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'horizontal' &&\n      !!content.el &&\n      content.scrollHeight > content.offsetHeight\n    )\n  })\n  const xBarLength = computed(() => {\n    if (content.el) {\n      return boundRange((content.offsetWidth / (content.scrollWidth || 1)) * 100, 5, 99)\n    }\n\n    return 35\n  })\n  const yBarLength = computed(() => {\n    if (content.el) {\n      return boundRange((content.offsetHeight / (content.scrollHeight || 1)) * 100, 5, 99)\n    }\n\n    return 35\n  })\n\n  watch(contentEl, () => {\n    computeContentSize()\n  })\n  watch(scrollX, value => {\n    setScrollX(value)\n  })\n  watch(scrollY, value => {\n    setScrollY(value)\n  })\n\n  function setScrollX(value: number) {\n    x.value = boundRange(value, 0, xScrollLimit.value)\n    syncScroll()\n  }\n\n  function setScrollY(value: number) {\n    y.value = boundRange(value, 0, yScrollLimit.value)\n    syncScroll()\n  }\n\n  function syncScroll() {\n    if (content.el) {\n      content.el.scrollTo({\n        top: y.value,\n        left: isRtl.value ? -x.value : x.value,\n        behavior: 'instant',\n      })\n    }\n  }\n\n  const { isMounted } = useMounted()\n\n  function computeContentSize() {\n    if (!content.el || isHiddenElement(content.el)) return\n\n    content.scrollWidth = content.el.scrollWidth\n    content.offsetWidth = content.el.offsetWidth\n    content.scrollHeight = content.el.scrollHeight\n    content.offsetHeight = content.el.offsetHeight\n\n    if (mode.value !== 'vertical') {\n      setScrollX(!isMounted.value && appear.value ? scrollX.value : x.value || 0)\n    }\n\n    if (mode.value !== 'horizontal') {\n      setScrollY(!isMounted.value && appear.value ? scrollY.value : y.value || 0)\n    }\n\n    computePercent()\n    triggerUpdate()\n  }\n\n  function computePercent() {\n    if (content.el) {\n      percentX.value = isRtl.value\n        ? -multipleFixed(x.value / (xScrollLimit.value || 1), 100, 2)\n        : multipleFixed(x.value / (xScrollLimit.value || 1), 100, 2)\n      percentY.value = multipleFixed(y.value / (yScrollLimit.value || 1), 100, 2)\n    }\n  }\n\n  function handleResize(entity: ResizeObserverEntry) {\n    refresh()\n    onResize?.(entity)\n  }\n\n  onMounted(() => {\n    refresh()\n\n    if (appear.value) {\n      scrollTo(scrollX.value, scrollY.value)\n    }\n  })\n\n  const refresh = debounceMinor(() => {\n    return new Promise<void>(resolve => {\n      if (typeof onBeforeRefresh === 'function') {\n        onBeforeRefresh()\n      }\n\n      computeContentSize()\n      setTimeout(() => {\n        if (typeof onAfterRefresh === 'function') {\n          onAfterRefresh()\n        }\n\n        resolve()\n      }, 0)\n    })\n  })\n\n  function scrollTo(clientX: number, clientY: number, duration = 500) {\n    return new Promise<void>(resolve => {\n      if (!content.el) return\n\n      if (!enableXScroll.value || Math.abs(x.value - clientX) < 0.01) {\n        clientX = x.value\n      }\n\n      if (!enableYScroll.value || Math.abs(y.value - clientY) < 0.01) {\n        clientY = y.value\n      }\n\n      animateScrollTo({\n        duration,\n        el: content.el,\n        xFrom: x.value,\n        xTo: boundRange(clientX, 0, xScrollLimit.value),\n        yFrom: y.value,\n        yTo: boundRange(clientY, 0, yScrollLimit.value),\n        callback: resolve,\n      })\n    })\n  }\n\n  function scrollBy(deltaX: number, deltaY: number, duration = 500) {\n    return scrollTo(x.value + deltaX, y.value + deltaY, duration)\n  }\n\n  function scrollToElement(el: string | Element, duration?: number, offset = 0) {\n    if (!content.el) return Promise.resolve()\n\n    if (typeof el === 'string') {\n      el = content.el.querySelector(el)!\n    }\n\n    if (!isElement(el)) return Promise.resolve()\n\n    const wrapperRect = content.el.getBoundingClientRect()\n    const elRect = el.getBoundingClientRect()\n\n    let clientX = 0\n    let clientY = 0\n\n    if (mode.value !== 'vertical') {\n      clientX = elRect.left - wrapperRect.left + offset\n    }\n\n    if (mode.value !== 'horizontal') {\n      clientY = elRect.top - wrapperRect.top + offset\n    }\n\n    return scrollTo(clientX, clientY, duration)\n  }\n\n  return {\n    contentEl,\n\n    content,\n    x,\n    y,\n    percentX,\n    percentY,\n    xScrollLimit,\n    yScrollLimit,\n    enableXScroll,\n    enableYScroll,\n    xBarLength,\n    yBarLength,\n\n    handleResize: debounce(handleResize),\n    setScrollX,\n    setScrollY,\n    computePercent,\n    refresh,\n    scrollTo,\n    scrollBy,\n    scrollToElement,\n    triggerUpdate,\n  }\n}\n","import { Scrollbar } from '@/components/scrollbar'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onBeforeUnmount,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { createSlotRender, flatVNodes, useRtl } from '@vexip-ui/hooks'\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\nimport { nativeScrollProps } from './props'\nimport { useScrollWrapper } from './hooks'\n\nimport type { EventHandler } from '@vexip-ui/utils'\nimport type { NativeScrollMode } from './symbol'\n\nconst scrollModes = Object.freeze<NativeScrollMode[]>(['horizontal', 'vertical', 'both'])\n\nconst MOVE_EVENT = 'mousemove'\nconst UP_EVENT = 'mouseup'\n\nexport default defineComponent({\n  name: 'NativeScroll',\n  inheritAttrs: false,\n  props: nativeScrollProps,\n  emits: [],\n  setup(_props, { attrs, slots, expose }) {\n    const props = useProps('nativeScroll', _props, {\n      scrollClass: null,\n      scrollStyle: null,\n      scrollAttrs: null,\n      mode: {\n        default: 'vertical',\n        validator: value => scrollModes.includes(value),\n      },\n      width: '',\n      height: '',\n      disabled: false,\n      pointer: false,\n      scrollX: {\n        default: 0,\n        static: true,\n      },\n      scrollY: {\n        default: 0,\n        static: true,\n      },\n      useXBar: false,\n      useYBar: false,\n      barFade: 1500,\n      barClass: null,\n      autoplay: false,\n      playWaiting: 500,\n      appear: false,\n      barDuration: null,\n      useBarTrack: false,\n      scrollTag: 'div',\n      observeDeep: false,\n      scrollOnly: false,\n    })\n\n    const emitter = createEventEmitter()\n\n    const nh = useNameHelper('native-scroll')\n    const { isRtl } = useRtl()\n    const usingBar = ref(false)\n    const scrolling = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const xBar = ref<InstanceType<typeof Scrollbar>>()\n    const yBar = ref<InstanceType<typeof Scrollbar>>()\n\n    let initialized = false\n\n    const {\n      contentEl,\n\n      content,\n      x,\n      y,\n      percentX,\n      percentY,\n      xScrollLimit,\n      yScrollLimit,\n      enableXScroll,\n      enableYScroll,\n      xBarLength,\n      yBarLength,\n\n      handleResize,\n      setScrollX,\n      setScrollY,\n      computePercent,\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      triggerUpdate,\n    } = useScrollWrapper({\n      mode: toRef(props, 'mode'),\n      disabled: toRef(props, 'disabled'),\n      appear: toRef(props, 'appear'),\n      // width: toRef(props, 'width'),\n      // height: toRef(props, 'height'),\n      scrollX: toRef(props, 'scrollX'),\n      scrollY: toRef(props, 'scrollY'),\n      onResize: entry => {\n        emitEvent(props.onResize, entry)\n      },\n      // onBeforeRefresh: stopAutoplay,\n      onAfterRefresh: () => {\n        syncBarScroll()\n\n        if (!initialized) {\n          initialized = true\n          startAutoplay()\n        }\n      },\n    })\n\n    const slotParams = shallowReadonly({\n      getState,\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      ensureInView,\n    })\n\n    /* autoplay */\n    const canPlay = ref(false)\n\n    const canAutoplay = computed(() => {\n      return (\n        props.mode !== 'both' &&\n        (isTrue(props.autoplay) || +props.autoplay > 1000) &&\n        ((props.mode === 'horizontal' && enableXScroll.value) ||\n          (props.mode === 'vertical' && enableYScroll.value))\n      )\n    })\n\n    watch([() => props.autoplay, () => props.playWaiting, contentEl], () => {\n      stopAutoplay()\n      nextTick(startAutoplay)\n    })\n\n    let playTimer: ReturnType<typeof setTimeout>\n    let startTimer: ReturnType<typeof setTimeout>\n    let endTimer: ReturnType<typeof setTimeout>\n\n    onBeforeUnmount(stopAutoplay)\n\n    function startAutoplay() {\n      stopAutoplay()\n\n      if (!canAutoplay.value || !contentEl.value) return\n\n      const mode = props.mode\n      const distance = mode === 'horizontal' ? 'offsetWidth' : 'offsetHeight'\n      const limit = mode === 'horizontal' ? xScrollLimit : yScrollLimit\n      const prop = mode === 'horizontal' ? x : y\n      const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\n      const setScroll = mode === 'horizontal' ? setScrollX : setScrollY\n\n      let playSpeed = 0.5\n\n      if (typeof props.autoplay === 'number') {\n        playSpeed = (contentEl.value[distance] / props.autoplay) * 16\n      }\n\n      const scroll = () => {\n        setScroll(prop.value + playSpeed)\n\n        if (prop.value >= limit.value) {\n          setScroll(limit.value)\n          canPlay.value = false\n\n          computePercent()\n          triggerUpdate()\n          syncBarScroll()\n\n          endTimer = setTimeout(() => {\n            scrollTo(0, 0, 500)\n\n            startTimer = setTimeout(() => {\n              canPlay.value = true\n              scroll()\n            }, 500 + waiting)\n          }, waiting)\n        } else {\n          computePercent()\n          triggerUpdate()\n          syncBarScroll()\n\n          if (canPlay.value) {\n            requestAnimationFrame(scroll)\n          }\n        }\n      }\n\n      playTimer = setTimeout(() => {\n        canPlay.value = true\n        scroll()\n      }, waiting)\n    }\n\n    function stopAutoplay() {\n      canPlay.value = false\n\n      clearTimeout(playTimer)\n      clearTimeout(startTimer)\n      clearTimeout(endTimer)\n    }\n    /* autoplay */\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bm(props.mode),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('scrolling')]: scrolling.value,\n          [nh.bm('using-bar')]: usingBar.value,\n        },\n      ]\n    })\n    const style = computed(() => {\n      const { width, height } = props\n\n      return {\n        width: width\n          ? typeof width === 'string'\n            ? Number.isNaN(Number(width))\n              ? width\n              : `${Number(width)}px`\n            : `${width}px`\n          : undefined,\n        height: height\n          ? typeof height === 'string'\n            ? Number.isNaN(Number(height))\n              ? height\n              : `${Number(height)}px`\n            : `${height}px`\n          : undefined,\n      }\n    })\n    const wrapperClass = computed(() => {\n      return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\n    })\n    const barFade = computed(() => (canAutoplay.value ? 0 : props.barFade))\n\n    const willMutate = ref(false)\n\n    function handleMutate() {\n      willMutate.value = true\n      nextTick(refresh)\n      requestAnimationFrame(() => {\n        willMutate.value = false\n      })\n    }\n\n    let observer: MutationObserver | undefined\n\n    function createMutation() {\n      if (!isClient || !contentEl.value) return\n\n      observer = new MutationObserver(handleMutate)\n      observer.observe(contentEl.value, {\n        childList: true,\n      })\n    }\n\n    function clearMutation() {\n      observer?.disconnect()\n      observer = undefined\n    }\n\n    watch(\n      contentEl,\n      () => {\n        clearMutation()\n        createMutation()\n      },\n      { immediate: true },\n    )\n    watch(enableXScroll, value => {\n      emitEvent(props.onXEnabledChange, value)\n    })\n    watch(enableYScroll, value => {\n      emitEvent(props.onYEnabledChange, value)\n    })\n\n    expose({\n      x,\n      y,\n      percentX,\n      percentY,\n      xScrollLimit,\n      yScrollLimit,\n\n      xBarLength,\n      yBarLength,\n      enableXScroll,\n      enableYScroll,\n\n      wrapper,\n      content: contentEl,\n      xBar,\n      yBar,\n\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      ensureInView,\n      getXScrollLimit,\n      getYScrollLimit,\n      addScrollListener,\n      removeScrollListener,\n    })\n\n    function getCommonPayload() {\n      return {\n        clientX: (isRtl.value ? -1 : 1) * x.value,\n        clientY: y.value,\n        percentX: percentX.value,\n        percentY: percentY.value,\n      }\n    }\n\n    function syncBarScroll() {\n      xBar.value?.handleScroll(percentX.value)\n      yBar.value?.handleScroll(percentY.value)\n    }\n\n    function handleMouseDown(event: MouseEvent) {\n      if (!props.pointer || event.button !== 0 || USE_TOUCH) {\n        return false\n      }\n\n      handlePointerDown(event)\n    }\n\n    // 记录滚动开始位置\n    let xScrollStartAt = 0\n    let yScrollStartAt = 0\n\n    // 记录滚动开始鼠标位置\n    let cursorXPosition = 0\n    let cursorYPosition = 0\n\n    function handlePointerDown(event: MouseEvent) {\n      if (!enableXScroll.value && !enableYScroll.value) {\n        return false\n      }\n\n      prepareScroll()\n\n      xScrollStartAt = x.value\n      yScrollStartAt = y.value\n      cursorXPosition = event.clientX\n      cursorYPosition = event.clientY\n\n      document.addEventListener(MOVE_EVENT, handlePointerMove)\n      document.addEventListener(UP_EVENT, handlePointerUp)\n\n      emitEvent(props.onScrollStart, getCommonPayload())\n    }\n\n    function handlePointerMove(event: MouseEvent) {\n      event.stopPropagation()\n      event.preventDefault()\n\n      scrolling.value = true\n\n      if (enableXScroll.value) {\n        setScrollX(xScrollStartAt - (event.clientX - cursorXPosition))\n      }\n\n      if (enableYScroll.value) {\n        setScrollY(yScrollStartAt - (event.clientY - cursorYPosition))\n      }\n\n      computePercent()\n      triggerUpdate()\n      syncBarScroll()\n      emitScrollEvent(props.mode)\n    }\n\n    function handlePointerUp() {\n      document.removeEventListener(MOVE_EVENT, handlePointerMove)\n      document.removeEventListener(UP_EVENT, handlePointerUp)\n\n      emitEvent(props.onScrollEnd, getCommonPayload())\n      startAutoplay()\n    }\n\n    function handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\n      const isVerticalScroll = enableYScroll.value && type === 'vertical'\n      const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\n      const sign = event.deltaY > 0 ? 1 : -1\n\n      emitEvent(props.onWheel, event, type)\n\n      if (isVerticalScroll || isHorizontalScroll) {\n        const maxLimit = isVerticalScroll ? yScrollLimit.value : xScrollLimit.value\n        const scroll = isVerticalScroll ? y.value : x.value\n\n        if (sign > 0 ? scroll < maxLimit : scroll > 0) {\n          event.stopPropagation()\n\n          return false\n        }\n      }\n    }\n\n    function handleScroll(event: UIEvent) {\n      if (!contentEl.value) return\n\n      event.stopPropagation()\n\n      const type = contentEl.value?.scrollLeft !== x.value ? 'horizontal' : 'vertical'\n\n      y.value = contentEl.value.scrollTop\n      x.value = contentEl.value.scrollLeft\n\n      computePercent()\n      triggerUpdate()\n      syncBarScroll()\n      emitScrollEvent(type)\n    }\n\n    function prepareScroll() {\n      stopAutoplay()\n    }\n\n    function handleBarScrollStart(type: 'vertical' | 'horizontal') {\n      usingBar.value = true\n      prepareScroll()\n      emitEvent(props.onBarScrollStart, {\n        ...getCommonPayload(),\n        type,\n      })\n    }\n\n    function handleBarScrollEnd(type: 'vertical' | 'horizontal') {\n      usingBar.value = false\n      startAutoplay()\n      emitEvent(props.onBarScrollEnd, {\n        ...getCommonPayload(),\n        type,\n      })\n    }\n\n    function handleXBarScroll(percent: number) {\n      percentX.value = percent\n      setScrollX((percent * xScrollLimit.value) / 100)\n      triggerUpdate()\n      emitEvent(props.onBarScroll, {\n        ...getCommonPayload(),\n        type: 'horizontal',\n      })\n      emitScrollEvent('horizontal')\n    }\n\n    function handleYBarScroll(percent: number) {\n      percentY.value = percent\n      setScrollY((percent * yScrollLimit.value) / 100)\n      triggerUpdate()\n      emitEvent(props.onBarScroll, {\n        ...getCommonPayload(),\n        type: 'vertical',\n      })\n      emitScrollEvent('vertical')\n    }\n\n    function emitScrollEvent(type: NativeScrollMode) {\n      emitEvent(props.onScroll, {\n        ...getCommonPayload(),\n        type,\n      })\n      emitter.emit('scroll', {\n        ...getCommonPayload(),\n        type,\n      })\n    }\n\n    function getState() {\n      const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\n\n      return {\n        scrollX,\n        scrollY,\n        percentX,\n        percentY,\n        enableXScroll: enableXScroll.value,\n        enableYScroll: enableYScroll.value,\n      }\n    }\n\n    function getXScrollLimit() {\n      return [0, xScrollLimit.value]\n    }\n\n    function getYScrollLimit() {\n      return [0, yScrollLimit.value]\n    }\n\n    function ensureInView(el: string | Element, duration?: number, offset = 0) {\n      if (!wrapper.value) return Promise.resolve()\n\n      if (typeof el === 'string') {\n        el = wrapper.value.querySelector(el)!\n      }\n\n      if (!isElement(el)) return Promise.resolve()\n\n      const wrapperRect = wrapper.value.getBoundingClientRect()\n      const elRect = el.getBoundingClientRect()\n\n      let clientX = 0\n      let clientY = 0\n\n      if (props.mode !== 'vertical') {\n        if (elRect.left < wrapperRect.left + offset) {\n          clientX = elRect.left - wrapperRect.left - offset\n        } else if (elRect.right > wrapperRect.right - offset) {\n          clientX = elRect.right - wrapperRect.right + offset\n        }\n      }\n\n      if (props.mode !== 'horizontal') {\n        if (elRect.top < wrapperRect.top + offset) {\n          clientY = elRect.top - wrapperRect.top - offset\n        } else if (elRect.bottom > wrapperRect.bottom - offset) {\n          clientY = elRect.bottom - wrapperRect.bottom + offset\n        }\n      }\n\n      return scrollBy(clientX, clientY, duration)\n    }\n\n    function addScrollListener(listener: EventHandler) {\n      emitter.on('scroll', listener)\n    }\n\n    function removeScrollListener(listener: EventHandler) {\n      emitter.off('scroll', listener)\n    }\n\n    function renderContent() {\n      const Content = (props.scrollTag || 'div') as any\n      const children =\n        props.observeDeep && slots.default ? renderSlot(slots, 'default', slotParams).children : []\n\n      return (\n        <Content\n          {...props.scrollAttrs}\n          {...(props.scrollOnly ? attrs : {})}\n          ref={contentEl}\n          class={wrapperClass.value}\n          style={[props.scrollAttrs?.style, props.scrollStyle, props.scrollOnly && style.value]}\n          onMousedown={handleMouseDown}\n          onWheelPassive={(event: WheelEvent) =>\n            handleWheel(event, event.shiftKey ? 'horizontal' : 'vertical')}\n          onScroll={handleScroll}\n        >\n          {slots.extra && (\n            <div\n              class={nh.be('extra')}\n              style={{\n                width: willMutate.value ? undefined : `${content.scrollWidth}px`,\n                height: willMutate.value ? undefined : `${content.scrollHeight}px`,\n              }}\n            >\n              <div\n                class={nh.be('extra-inner')}\n                style={{\n                  width: `${content.offsetWidth}px`,\n                  height: `${content.offsetHeight}px`,\n                }}\n              >\n                {renderSlot(slots, 'extra', slotParams)}\n              </div>\n            </div>\n          )}\n          {slots.default &&\n            (props.observeDeep\n              ? flatVNodes(children).map((vnode, index) => {\n                return (\n                  <ResizeObserver key={vnode.key ?? index} on-resize={handleResize}>\n                    {() => vnode}\n                  </ResizeObserver>\n                )\n              })\n              : renderSlot(slots, 'default', slotParams))}\n        </Content>\n      )\n    }\n\n    return () => {\n      if (props.scrollOnly) {\n        return <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\n      }\n\n      return (\n        <div\n          {...attrs}\n          ref={wrapper}\n          class={[className.value, attrs.class]}\n          style={[style.value, attrs.style as any]}\n        >\n          {createSlotRender(slots, ['prefix-trap', 'prefixTrap'])?.()}\n          <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\n          {props.useXBar && (\n            <Scrollbar\n              ref={xBar}\n              inherit\n              placement={'bottom'}\n              class={[nh.bem('bar', 'horizontal'), props.barClass]}\n              fade={barFade.value}\n              bar-length={xBarLength.value}\n              disabled={!enableXScroll.value}\n              appear={props.appear}\n              duration={props.barDuration}\n              use-track={props.useBarTrack}\n              onScrollStart={() => handleBarScrollStart('horizontal')}\n              onScroll={handleXBarScroll}\n              onScrollEnd={() => handleBarScrollEnd('horizontal')}\n            ></Scrollbar>\n          )}\n          {props.useYBar && (\n            <Scrollbar\n              ref={yBar}\n              inherit\n              placement={'right'}\n              class={[nh.bem('bar', 'vertical'), props.barClass]}\n              fade={barFade.value}\n              bar-length={yBarLength.value}\n              disabled={!enableYScroll.value}\n              appear={props.appear}\n              duration={props.barDuration}\n              use-track={props.useBarTrack}\n              onScrollStart={() => handleBarScrollStart('vertical')}\n              onScroll={handleYBarScroll}\n              onScrollEnd={() => handleBarScrollEnd('vertical')}\n            ></Scrollbar>\n          )}\n          {createSlotRender(slots, ['suffix-trap', 'suffixTrap'])?.()}\n        </div>\n      )\n    }\n  },\n})\n","import { eventProp, valueProp, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\n\nexport const optionProps = wrapProps({\n  value: valueProp,\n  label: {\n    type: String,\n    default: '',\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  divided: {\n    type: Boolean,\n    default: false,\n  },\n  title: {\n    type: String,\n    default: '',\n  },\n  hitting: {\n    type: Boolean,\n    default: false,\n  },\n  noHover: {\n    type: Boolean,\n    default: false,\n  },\n  selected: {\n    type: Boolean,\n    default: false,\n  },\n  onSelect: eventProp(),\n})\n\nexport type OptionProps = ExtractPropTypes<typeof optionProps>\n\nexport const optionGroupProps = wrapProps({\n  label: {\n    type: String,\n    default: '',\n  },\n  divided: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nexport type OptionGroupProps = ExtractPropTypes<typeof optionGroupProps>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\nimport { toAttrValue } from '@vexip-ui/utils'\nimport { optionProps } from './props'\n\ndefineOptions({ name: 'Option' })\n\nconst props = defineProps(optionProps)\n\nconst nh = useNameHelper('option')\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('selected')]: !props.disabled && props.selected,\n    [nh.bm('divided')]: props.divided,\n    [nh.bm('hitting')]: props.hitting,\n    [nh.bm('no-hover')]: props.noHover,\n  }\n})\n\nfunction handleSelect() {\n  if (props.disabled) return\n\n  emitEvent(props.onSelect!)\n}\n</script>\n\n<template>\n  <li\n    ref=\"wrapper\"\n    :class=\"className\"\n    :title=\"title || undefined\"\n    role=\"option\"\n    :aria-disabled=\"toAttrValue(disabled)\"\n    :aria-selected=\"selected\"\n    @click=\"handleSelect\"\n  >\n    <slot>{{ label || value }}</slot>\n  </li>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const overflowProps = buildProps({\n  items: Array as PropType<any[]>,\n  tag: String,\n  attrFlag: booleanStringProp,\n  static: booleanProp,\n  maxCount: Number,\n  onRestChange: eventProp<(rest: number) => void>(),\n  onToggle: eventProp<(overflow: boolean) => void>(),\n})\n\nexport type OverflowProps = ExtractPropTypes<typeof overflowProps>\nexport type OverflowCProps = ConfigurableProps<OverflowProps, 'items'>\n","import { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, defineComponent, nextTick, onMounted, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isDefined } from '@vexip-ui/utils'\nimport { overflowProps } from './props'\n\nexport default defineComponent({\n  name: 'Overflow',\n  inheritAttrs: false,\n  props: overflowProps,\n  emits: [],\n  setup(_props, { attrs, slots, expose }) {\n    const props = useProps('overflow', _props, {\n      items: {\n        default: null,\n        static: true,\n      },\n      tag: 'div',\n      attrFlag: false,\n      static: false,\n      maxCount: 0,\n    })\n\n    const nh = useNameHelper('overflow')\n    const restCount = ref(0)\n\n    const wrapper = ref<HTMLElement>()\n    const counter = ref<HTMLElement>()\n    const suffix = ref<HTMLElement>()\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('manual')]: props.maxCount > 0,\n        },\n      ]\n    })\n    const hiddenFlag = computed(() => {\n      return props.attrFlag ? (props.attrFlag === true ? 'hidden' : props.attrFlag) : false\n    })\n\n    watch([() => props.items?.length, () => props.maxCount], () => {\n      nextTick(refresh)\n    })\n\n    expose({ refresh })\n\n    onMounted(refresh)\n\n    function toggleDisplay(el: HTMLElement, show: boolean) {\n      if (hiddenFlag.value) {\n        show ? el.removeAttribute(hiddenFlag.value) : el.setAttribute(hiddenFlag.value, '')\n      } else {\n        if (show) {\n          el.style.display = ''\n        } else {\n          el.style.display = 'none'\n        }\n      }\n    }\n\n    function computeHorizontalMargin(el: HTMLElement) {\n      const style = getComputedStyle(el)\n      const marginLeft = parseFloat(style.marginLeft) || 0\n      const marginRight = parseFloat(style.marginRight) || 0\n\n      return marginLeft + marginRight\n    }\n\n    function computeHorizontalPadding(elOrStyle: HTMLElement | CSSStyleDeclaration) {\n      const style = elOrStyle instanceof Element ? getComputedStyle(elOrStyle) : elOrStyle\n      const paddingLeft = parseFloat(style.paddingLeft) || 0\n      const paddingRight = parseFloat(style.paddingRight) || 0\n\n      return paddingLeft + paddingRight\n    }\n\n    function computeOuterWidth(el: HTMLElement) {\n      return el.offsetWidth + computeHorizontalMargin(el)\n    }\n\n    let lastOverflow = false\n    let lastRestCount = restCount.value\n\n    function refresh() {\n      const counterEl = counter.value\n\n      if (!wrapper.value || !counterEl) return\n\n      toggleDisplay(counterEl, true)\n\n      const children = wrapper.value.children\n      const childCount = children.length\n      const suffixEl = suffix.value\n      const length = childCount - (suffixEl ? 2 : 1)\n\n      let overflow = false\n\n      if (props.maxCount > 0) {\n        for (let i = 0; i < length; ++i) {\n          const child = children[i] as HTMLElement\n\n          child.style.display = i < props.maxCount ? '' : 'none'\n        }\n\n        if (props.maxCount >= length) {\n          toggleDisplay(counterEl, false)\n\n          restCount.value = 0\n        } else {\n          restCount.value = length - props.maxCount\n          overflow = restCount.value > 0\n        }\n\n        postRefresh(overflow)\n        return\n      }\n\n      const style = getComputedStyle(wrapper.value)\n      const wrapperWidth = wrapper.value.offsetWidth - computeHorizontalPadding(style)\n      const gap = parseFloat(style.columnGap) || 0\n      const counterMargin = computeHorizontalMargin(counterEl)\n      const childWidths: number[] = []\n\n      let totalWidth = suffixEl ? suffixEl.offsetWidth + computeHorizontalMargin(suffixEl) + gap : 0\n\n      for (let i = 0; i < length; ++i) {\n        if (i < 0) continue\n\n        const child = children[i] as HTMLElement\n\n        if (overflow) {\n          toggleDisplay(child, false)\n          continue\n        } else {\n          toggleDisplay(child, true)\n        }\n\n        const childWidth = computeOuterWidth(child) + gap\n\n        totalWidth += childWidth\n        childWidths[i] = childWidth\n\n        if (totalWidth > wrapperWidth) {\n          for (let j = i; j >= 0; --j) {\n            restCount.value = length - j\n            totalWidth -= childWidths[j]\n\n            if (totalWidth + counterEl.offsetWidth + counterMargin <= wrapperWidth || !j) {\n              overflow = true\n              i = j - 1\n\n              if (suffixEl) {\n                suffixEl.style.maxWidth =\n                  i === -1 ? `${wrapperWidth - counterEl.offsetWidth}px` : ''\n              }\n\n              break\n            }\n          }\n        }\n      }\n\n      postRefresh(overflow)\n    }\n\n    function postRefresh(overflow: boolean) {\n      if (lastRestCount !== restCount.value) {\n        lastRestCount = restCount.value\n        emitEvent(props.onRestChange, restCount.value)\n      }\n\n      counter.value && toggleDisplay(counter.value, overflow)\n\n      if (overflow !== lastOverflow) {\n        lastOverflow = overflow\n        emitEvent(props.onToggle, overflow)\n      }\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'div') as any\n      const itemSlot = slots.default\n      const staticItem = props.static\n      const counterVNode = slots.counter?.({ count: restCount.value })[0] || null\n\n      const render = () => (\n        <CustomTag {...attrs} ref={wrapper} class={className.value}>\n          {itemSlot && isDefined(props.items)\n            ? props.items.map((item, index) => {\n              const vnode = itemSlot({ item, index })[0]\n\n              if (staticItem) {\n                vnode.key = index\n\n                return vnode\n              }\n\n              return (\n                <ResizeObserver key={index} onResize={refresh}>\n                  {() => vnode}\n                </ResizeObserver>\n              )\n            })\n            : itemSlot?.()}\n          {<span ref={counter}>{counterVNode}</span>}\n          {slots.suffix ? (\n            <ResizeObserver onResize={refresh}>\n              <div ref={suffix} class={nh.be('suffix')}>\n                {slots.suffix()}\n              </div>\n            </ResizeObserver>\n          ) : null}\n        </CustomTag>\n      )\n\n      if (import.meta.env.MODE === 'test') {\n        // It is difficult to test ResizeObserver in vitest, so directly rendering all items\n        return render()\n      }\n\n      return <ResizeObserver onResize={refresh}>{render()}</ResizeObserver>\n    }\n  },\n})\n","<script setup lang=\"ts\">\ndefineOptions({ name: 'Portal' })\n\ndefineProps({\n  to: {\n    type: String,\n    default: '',\n  },\n})\n</script>\n\n<template>\n  <Teleport :to=\"to || 'body'\" :disabled=\"!to\">\n    <slot></slot>\n  </Teleport>\n</template>\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const popperProps = buildProps({\n  visible: booleanProp,\n  alive: booleanProp,\n  to: String,\n  transition: String,\n  appear: booleanProp,\n  role: String,\n  onBeforeEnter: eventProp<(el: Element) => void>(),\n  onEnter: eventProp<(el: Element) => void>(),\n  onAfterEnter: eventProp<(el: Element) => void>(),\n  onEnterCancelled: eventProp<(el: Element) => void>(),\n  onBeforeLeave: eventProp<(el: Element) => void>(),\n  onLeave: eventProp<(el: Element) => void>(),\n  onAfterLeave: eventProp<(el: Element) => void>(),\n  onLeaveCancelled: eventProp<(el: Element) => void>(),\n})\n\nexport type PopperProps = ExtractPropTypes<typeof popperProps>\nexport type PopperCProps = ConfigurableProps<PopperProps>\n","<template>\n  <Portal :to=\"props.to\">\n    <Transition\n      :name=\"props.transition\"\n      :appear=\"props.appear\"\n      @before-enter=\"emitHookEvent('be', $event)\"\n      @enter=\"emitHookEvent('e', $event)\"\n      @after-enter=\"emitHookEvent('ae', $event)\"\n      @enter-cancelled=\"emitHookEvent('ec', $event)\"\n      @before-leave=\"emitHookEvent('bl', $event)\"\n      @leave=\"emitHookEvent('l', $event)\"\n      @after-leave=\"emitHookEvent('al', $event)\"\n      @leave-cancelled=\"emitHookEvent('lc', $event)\"\n    >\n      <div\n        v-if=\"props.alive || props.visible\"\n        v-show=\"!props.alive || props.visible\"\n        ref=\"wrapper\"\n        v-bind=\"$attrs\"\n        :class=\"[nh.b(), props.to !== 'body' && nh.bm('inherit')]\"\n        :role=\"props.role\"\n        :style=\"{ zIndex: props.to && props.visible ? zIndex : undefined }\"\n      >\n        <slot></slot>\n      </div>\n    </Transition>\n  </Portal>\n</template>\n\n<script lang=\"ts\">\nimport { Portal } from '@/components/portal'\n\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { popperProps } from './props'\n\nexport default defineComponent({\n  name: 'Popper',\n  components: {\n    Portal,\n  },\n  inheritAttrs: false,\n  props: popperProps,\n  emits: [],\n  setup(_props) {\n    const nh = useNameHelper('popper')\n    const props = useProps('popper', _props, {\n      visible: false,\n      alive: false,\n      to: '',\n      transition: () => nh.ns('drop'),\n      appear: false,\n      role: 'dialog',\n    })\n    const getIndex = useZIndex()\n\n    const zIndex = ref(10)\n\n    const wrapper = ref<HTMLElement>()\n\n    watch(\n      () => props.visible,\n      value => {\n        if (props.to && value) {\n          zIndex.value = getIndex()\n        }\n      },\n      { immediate: true },\n    )\n\n    function emitHookEvent(name: 'be' | 'e' | 'ae' | 'ec' | 'bl' | 'l' | 'al' | 'lc', el: Element) {\n      switch (name) {\n        case 'be':\n          emitEvent(props.onBeforeEnter, el)\n          break\n        case 'e':\n          emitEvent(props.onEnter, el)\n          break\n        case 'ae':\n          emitEvent(props.onAfterEnter, el)\n          break\n        case 'ec':\n          emitEvent(props.onEnterCancelled, el)\n          break\n        case 'bl':\n          emitEvent(props.onBeforeLeave, el)\n          break\n        case 'l':\n          emitEvent(props.onLeave, el)\n          break\n        case 'al':\n          emitEvent(props.onAfterLeave, el)\n          break\n        case 'lc':\n          emitEvent(props.onLeaveCancelled, el)\n          break\n      }\n    }\n\n    return {\n      nh,\n      props,\n      zIndex,\n\n      wrapper,\n\n      emitHookEvent,\n    }\n  },\n})\n</script>\n","import { booleanProp, buildProps, eventProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TagSlots, TagType } from './symbol'\n\nexport const tagProps = buildProps({\n  size: sizeProp,\n  type: String as PropType<TagType>,\n  border: booleanProp,\n  closable: booleanProp,\n  color: String,\n  simple: booleanProp,\n  circle: booleanProp,\n  prefix: [String, Number],\n  prefixBg: String,\n  prefixColor: String,\n  suffix: [String, Number],\n  suffixBg: String,\n  suffixColor: String,\n  disabled: booleanProp,\n  slots: Object as PropType<TagSlots>,\n  onClose: eventProp(),\n})\n\nexport type TagProps = ExtractPropTypes<typeof tagProps>\nexport type TagCProps = ConfigurableProps<TagProps>\n","import { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, defineComponent, renderSlot } from 'vue'\n\nimport { createSizeProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { adjustAlpha, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\nimport { tagProps } from './props'\n\nimport type { TagType } from './symbol'\n\nconst tagTypes = Object.freeze<TagType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'error',\n  'warning',\n  'lime',\n  'pink',\n  'magenta',\n  'tomato',\n  'orange',\n  'cyan',\n  'navy',\n  'gold',\n  'purple',\n])\n\nexport default defineComponent({\n  name: 'Tag',\n  components: {\n    Icon,\n  },\n  props: tagProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('tag', _props, {\n      size: createSizeProp(),\n      type: {\n        default: 'default',\n        validator: (value: TagType) => tagTypes.includes(value),\n      },\n      border: false,\n      closable: false,\n      color: null,\n      simple: false,\n      circle: false,\n      prefix: '',\n      prefixBg: '',\n      prefixColor: '',\n      suffix: '',\n      suffixBg: '',\n      suffixColor: '',\n      disabled: false,\n      slots: () => ({}),\n    })\n\n    const nh = useNameHelper('tag')\n    const icons = useIcons()\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.size)]: props.size !== 'default',\n        [nh.bm(props.type)]: props.type !== 'default',\n        [nh.bm('border')]: props.border,\n        [nh.bm('simple')]: props.simple,\n        [nh.bm('circle')]: props.circle,\n        [nh.bm('closable')]: props.closable,\n        [nh.bm('disabled')]: props.disabled,\n      }\n    })\n    const style = computed(() => {\n      if (!props.color) return undefined\n\n      const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\n      const white = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-white')) || '#fff')\n      const baseColor = parseColorToRgba(props.color)\n      const base = baseColor.toString()\n\n      return nh.cvm({\n        color: 'var(--vxp-color-white)',\n        'bg-color': base,\n        'b-color': base,\n        'close-color': 'var(--vxp-color-white)',\n        'd-color': mixColor(white, baseColor, 0.3).toString(),\n        ...(props.simple || props.border\n          ? {\n            color: base,\n            'close-color': base,\n          }\n          : {}),\n        ...(props.simple\n          ? {\n            'bg-color': adjustAlpha(baseColor, 0.2).toString(),\n          }\n          : {}),\n      })\n    })\n\n    function handleClose(event: MouseEvent) {\n      if (!props.closable || props.disabled || event.button > 0) {\n        return false\n      }\n\n      event.stopPropagation()\n      emitEvent(props.onClose)\n    }\n\n    function renderClose() {\n      if (!props.closable) return null\n\n      return (\n        <button type={'button'} class={nh.be('close')} onClick={handleClose}>\n          <Icon {...icons.value.close} label={'close'}></Icon>\n        </button>\n      )\n    }\n\n    return () => {\n      const hasPrefix = !!(props.prefix === 0 || props.prefix || slots.prefix || props.slots.prefix)\n      const hasSuffix = !!(props.suffix === 0 || props.suffix || slots.suffix || props.slots.suffix)\n\n      return (\n        <div class={className.value} style={style.value}>\n          {hasPrefix ? (\n            <span\n              class={[nh.be('unit'), nh.be('prefix')]}\n              style={{\n                color: props.prefixColor,\n                backgroundColor: props.prefixBg,\n                borderColor: props.prefixBg,\n              }}\n            >\n              {renderSlot(slots, 'prefix', undefined, () => [\n                <Renderer renderer={props.slots.prefix}>{props.prefix}</Renderer>,\n              ])}\n            </span>\n          ) : null}\n          <span class={[nh.be('unit'), nh.be('content')]}>\n            {renderSlot(slots, 'default', undefined, () => [\n              <Renderer renderer={props.slots.default}></Renderer>,\n            ])}\n            {!hasSuffix && renderClose()}\n          </span>\n          {hasSuffix ? (\n            <span\n              class={[nh.be('unit'), nh.be('suffix')]}\n              style={{\n                color: props.suffixColor,\n                backgroundColor: props.suffixBg,\n                borderColor: props.suffixBg,\n              }}\n            >\n              {renderSlot(slots, 'suffix', undefined, () => [\n                <Renderer renderer={props.slots.suffix}>{props.suffix}</Renderer>,\n              ])}\n              {renderClose()}\n            </span>\n          ) : null}\n        </div>\n      )\n    }\n  },\n})\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  styleProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TooltipShift, TooltipTrigger, TooltipVirtual } from './symbol'\n\nexport const tooltipProps = buildProps({\n  trigger: [String, Array] as PropType<TooltipTrigger>,\n  wrapper: booleanStringProp,\n  noArrow: booleanProp,\n  transitionName: String,\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  outsideClose: booleanProp,\n  noHover: booleanProp,\n  tipClass: classProp,\n  tipStyle: styleProp,\n  transfer: booleanStringProp,\n  disabled: booleanProp,\n  raw: booleanProp,\n  delay: [Number, Array] as PropType<number | number[]>,\n  tipAlive: booleanProp,\n  reverse: booleanProp,\n  width: [String, Number] as PropType<number | 'trigger' | 'auto'>,\n  virtual: Object as PropType<TooltipVirtual>,\n  shift: {\n    type: [Boolean, String] as PropType<boolean | TooltipShift>,\n    default: null,\n  },\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onTipEnter: eventProp(),\n  onTipLeave: eventProp(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n})\n\nexport type TooltipProps = ExtractPropTypes<typeof tooltipProps>\nexport type TooltipCProps = ConfigurableProps<TooltipProps>\n","import { Popper } from '@/components/popper'\n\nimport {\n  Fragment,\n  computed,\n  createTextVNode,\n  defineComponent,\n  mergeProps,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useHoverDelay, useId, useNameHelper, useProps } from '@vexip-ui/config'\nimport {\n  placementWhileList,\n  useClickOutside,\n  useListener,\n  usePopper,\n  useSetTimeout,\n} from '@vexip-ui/hooks'\nimport { isElement } from '@vexip-ui/utils'\nimport { tooltipProps } from './props'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { VirtualElement } from '@vexip-ui/hooks'\n\nconst TEXT_VNODE = createTextVNode('').type\n\nexport default defineComponent({\n  name: 'Tooltip',\n  inheritAttrs: true,\n  props: tooltipProps,\n  emits: ['clickoutside', 'update:visible'],\n  setup(_props, { attrs, slots, emit, expose }) {\n    const nh = useNameHelper('tooltip')\n    const props = useProps('tooltip', _props, {\n      trigger: {\n        default: 'hover',\n        validator: value => {\n          return ['hover', 'click', 'focus', 'hover-focus', 'custom'].includes(value)\n        },\n      },\n      wrapper: false,\n      noArrow: false,\n      transitionName: () => nh.ns('fade'),\n      visible: false,\n      placement: {\n        default: 'top',\n        validator: value => placementWhileList.includes(value),\n      },\n      outsideClose: true,\n      noHover: false,\n      tipClass: null,\n      tipStyle: null,\n      transfer: false,\n      disabled: false,\n      raw: false,\n      delay: 250,\n      tipAlive: false,\n      reverse: false,\n      width: 'auto',\n      virtual: null,\n      shift: false,\n    })\n\n    const tooltipId = useId()\n\n    const hoverDelay = useHoverDelay()\n    const { timer } = useSetTimeout()\n\n    const placement = toRef(props, 'placement')\n    const currentVisible = ref(props.visible)\n    const rendering = ref(props.visible)\n    const transfer = toRef(props, 'transfer')\n    const triggerWidth = ref(100)\n\n    let hovered = false\n    let focused = false\n\n    const useHover = computed(() => props.trigger === 'hover' || props.trigger === 'hover-focus')\n    const useFocus = computed(() => props.trigger === 'focus' || props.trigger === 'hover-focus')\n\n    const originalTrigger = ref<HTMLElement>()\n\n    const reference = computed(() => {\n      const virtual = (props.virtual as any)?.$el ?? props.virtual\n\n      if (virtual) {\n        if ('getBoundingClientRect' in virtual) {\n          return virtual as VirtualElement\n        }\n\n        if ('x' in virtual && 'y' in virtual) {\n          return {\n            getBoundingClientRect: () => ({\n              x: virtual.x,\n              y: virtual.y,\n              left: virtual.x,\n              top: virtual.y,\n              width: 0,\n              height: 0,\n            }),\n          } as VirtualElement\n        }\n      }\n\n      return originalTrigger.value\n    })\n    const triggerEl = computed(() => (isElement(reference.value) ? reference.value : null))\n    const delay = computed(() => {\n      return typeof props.delay === 'number'\n        ? new Array<number>(2).fill(Math.max(props.delay, 0))\n        : props.delay.map(delay => Math.max(delay, 0))\n    })\n\n    const popper = ref<PopperExposed>()\n    const popperEl = computed(() => popper.value?.wrapper)\n    const arrow = ref<HTMLElement>()\n    const shift = computed<{ mainAxis: boolean, crossAxis: boolean }>(() => {\n      if (!props.shift) {\n        return { mainAxis: false, crossAxis: false }\n      }\n\n      if (props.shift === true || props.shift === 'both') {\n        return { mainAxis: true, crossAxis: true }\n      }\n\n      const side = placement.value.split('-')[0]\n\n      return props.shift === (side === 'top' || side === 'bottom' ? 'vertical' : 'horizontal')\n        ? { mainAxis: false, crossAxis: true }\n        : {\n          mainAxis: true,\n          crossAxis: false,\n        }\n    })\n    const { transferTo, updatePopper } = usePopper({\n      placement,\n      transfer,\n      arrow,\n      reference,\n      shift,\n      wrapper: originalTrigger,\n      popper: popperEl,\n    })\n\n    useClickOutside(handleClickOutside, originalTrigger)\n    useClickOutside(() => {\n      if (currentVisible.value && !originalTrigger.value) {\n        handleClickOutside()\n      }\n    }, popperEl)\n\n    const tipStyle = computed(() => {\n      if (props.width === 'auto') {\n        return props.tipStyle\n      }\n\n      if (props.width === 'trigger') {\n        return [{ width: `${triggerWidth.value}px` }, props.tipStyle]\n      }\n\n      return [{ width: `${props.width}px` }, props.tipStyle]\n    })\n\n    const slotParams = shallowReadonly({ toggleVisible, updatePopper })\n\n    useListener(triggerEl, 'mouseenter', handleTriggerEnter)\n    useListener(triggerEl, 'mouseleave', handleTriggerLeave)\n    useListener(triggerEl, 'click', handleTriggerClick)\n    useListener(triggerEl, 'focus', handleTriggerFocus)\n    useListener(triggerEl, 'blur', handleTriggerBlur)\n    useListener(popperEl, 'mouseenter', handleTriggerEnter)\n    useListener(popperEl, 'mouseleave', handleTriggerLeave)\n\n    watch(\n      () => props.visible,\n      value => {\n        currentVisible.value = value\n\n        if (value) {\n          rendering.value = true\n          updatePopper()\n        }\n      },\n    )\n    watch(\n      () => props.disabled,\n      value => {\n        if (value) {\n          toggleVisible(false)\n        }\n      },\n    )\n\n    expose({ rendering, trigger: triggerEl, toggleVisible, updatePopper })\n\n    function toggleVisible(visible = !currentVisible.value) {\n      if (currentVisible.value === visible) return\n\n      currentVisible.value = visible\n\n      if (visible) {\n        computeTriggerWidth()\n        rendering.value = true\n        updatePopper()\n      }\n\n      emit('update:visible', visible)\n      emitEvent(props.onToggle, visible)\n    }\n\n    function computeTriggerWidth() {\n      if (!triggerEl.value) return\n\n      triggerWidth.value = triggerEl.value.offsetWidth\n    }\n\n    function getActiveState() {\n      return (useHover.value && hovered) || (useFocus.value && focused)\n    }\n\n    function handleTriggerEnter() {\n      if (props.disabled) return\n\n      if (useHover.value) {\n        clearTimeout(timer.hover)\n\n        timer.hover = setTimeout(() => {\n          hovered = true\n          toggleVisible(getActiveState())\n        }, delay.value[0] ?? hoverDelay.value)\n      }\n\n      emitEvent(props.onTipEnter)\n    }\n\n    function handleTriggerLeave() {\n      if (props.disabled) return\n\n      if (useHover.value) {\n        clearTimeout(timer.hover)\n\n        timer.hover = setTimeout(() => {\n          hovered = false\n          toggleVisible(getActiveState())\n        }, delay.value[1] ?? hoverDelay.value)\n      }\n\n      emitEvent(props.onTipLeave)\n    }\n\n    function handleTriggerClick() {\n      if (props.disabled) return\n\n      if (props.trigger === 'click') {\n        toggleVisible()\n      }\n    }\n\n    function handleTriggerFocus() {\n      if (props.disabled) return\n\n      if (useFocus.value) {\n        focused = true\n        toggleVisible(getActiveState())\n      }\n    }\n\n    function handleTriggerBlur() {\n      if (props.disabled) return\n\n      if (useFocus.value) {\n        focused = false\n        toggleVisible(getActiveState())\n      }\n    }\n\n    function handleClickOutside() {\n      if (props.disabled) return\n\n      emitEvent(props.onClickOutside)\n\n      if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\n        toggleVisible(false)\n        emitEvent(props.onOutsideClose)\n      }\n    }\n\n    function syncTriggerRef(el?: HTMLElement | null) {\n      if (el) {\n        originalTrigger.value = el.nextElementSibling as HTMLElement | undefined\n      } else {\n        originalTrigger.value = undefined\n      }\n    }\n\n    function syncRendering() {\n      rendering.value = currentVisible.value\n    }\n\n    function stopPropagation(event: MouseEvent) {\n      event.stopPropagation()\n    }\n\n    return () => {\n      const Wrapper = props.wrapper\n        ? ((props.wrapper === true ? 'span' : props.wrapper) as any)\n        : null\n      const triggers = slots.trigger?.(slotParams)\n      const triggerVNode = triggers ? triggers[0] : null\n\n      const renderTrigger = () => {\n        if (!triggerVNode) return null\n\n        if (triggerVNode.type === TEXT_VNODE || triggerVNode.type === Fragment) {\n          return Wrapper ? <span>{triggerVNode}</span> : <span {...attrs}>{triggerVNode}</span>\n        }\n\n        if (!Wrapper) {\n          triggerVNode.props = mergeProps(triggerVNode.props || {}, attrs, {\n            'aria-describedby': tooltipId.value,\n          })\n        }\n\n        return triggerVNode\n      }\n\n      return [\n        triggerVNode &&\n          (Wrapper ? (\n            <Wrapper\n              {...attrs}\n              ref={originalTrigger}\n              class={[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]}\n              aria-describedby={tooltipId.value}\n            >\n              {triggers}\n            </Wrapper>\n          ) : (\n            <Fragment ref={syncTriggerRef as any}>{renderTrigger()}</Fragment>\n          )),\n        !props.disabled && (props.tipAlive || rendering.value) && (\n          <Popper\n            ref={popper}\n            id={tooltipId.value}\n            class={{\n              [nh.be('popper')]: true,\n              [nh.bs('vars')]: true,\n              [nh.bem('popper', props.reverse ? 'dark' : 'light')]: true,\n              [nh.bem('popper', 'no-hover')]: props.noHover,\n              [nh.bem('popper', 'no-arrow')]: props.noArrow,\n            }}\n            appear\n            visible={currentVisible.value}\n            alive={props.tipAlive}\n            to={transferTo.value}\n            transition={props.transitionName}\n            role={'tooltip'}\n            tabindex={-1}\n            onClick={stopPropagation}\n            onAnimationend={syncRendering}\n            onTransitionend={syncRendering}\n          >\n            <div class={[!props.raw && nh.be('tip'), props.tipClass]} style={tipStyle.value}>\n              {renderSlot(slots, 'default', slotParams)}\n            </div>\n            {!props.raw && !props.noArrow && <div ref={arrow} class={nh.be('arrow')}></div>}\n          </Popper>\n        ),\n      ]\n    }\n  },\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ScrollPayload } from './symbol'\n\nexport const virtualListProps = buildProps({\n  items: Array as PropType<Array<Record<string, any>>>,\n  itemSize: Number,\n  itemFixed: booleanProp,\n  idKey: String,\n  defaultKeyAt: [Number, String, Symbol],\n  bufferSize: Number,\n  listTag: String,\n  itemsTag: String,\n  hideBar: booleanProp,\n  lockItems: booleanProp,\n  itemsAttrs: Object as PropType<Record<string, any>>,\n  autoplay: booleanProp,\n  ignoreResize: booleanProp,\n  disabled: booleanProp,\n  onScroll: eventProp<(payload: ScrollPayload) => void>(),\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n})\n\nexport type VirtualListProps = ExtractPropTypes<typeof virtualListProps>\nexport type VirtualListCProps = ConfigurableProps<VirtualListProps, 'items'>\n","import { NativeScroll } from '@/components/native-scroll'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, defineComponent, nextTick, ref, renderSlot, toRefs, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { createSlotRender, useVirtual } from '@vexip-ui/hooks'\nimport { virtualListProps } from './props'\n\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { ScrollPayload } from './symbol'\n\nexport default defineComponent({\n  name: 'VirtualList',\n  components: {\n    NativeScroll,\n    ResizeObserver,\n  },\n  inheritAttrs: false,\n  props: virtualListProps,\n  emits: [],\n  setup(_props, { slots, attrs, expose }) {\n    const props = useProps('virtualList', _props, {\n      items: {\n        default: () => [],\n        static: true,\n      },\n      itemSize: 36,\n      itemFixed: false,\n      idKey: 'id',\n      defaultKeyAt: null,\n      bufferSize: 5,\n      listTag: 'div',\n      itemsTag: 'ul',\n      itemsAttrs: null,\n      hideBar: false,\n      lockItems: false,\n      autoplay: false,\n      ignoreResize: false,\n      disabled: false,\n    })\n\n    const nh = useNameHelper('virtual-list')\n\n    const { items, itemSize, itemFixed, idKey, bufferSize } = toRefs(props)\n\n    const scroll = ref<NativeScrollExposed>()\n    const list = ref<HTMLElement>()\n    const wrapper = computed(() => scroll.value?.content)\n\n    const {\n      indexMap,\n      heightTree,\n      scrollOffset,\n      visibleItems,\n      listStyle,\n      itemsStyle,\n      handleScroll,\n      handleResize,\n      handleItemResize,\n      scrollTo,\n      scrollBy,\n      scrollToKey,\n      scrollToIndex,\n      ensureIndexInView,\n      ensureKeyInView,\n    } = useVirtual({\n      items,\n      itemSize,\n      itemFixed,\n      idKey,\n      bufferSize,\n      wrapper,\n      defaultKeyAt: props.defaultKeyAt,\n      autoResize: false,\n    })\n\n    expose({\n      scroll,\n      wrapper,\n      list,\n      indexMap,\n      heightTree,\n      scrollOffset,\n      scrollTo,\n      scrollBy,\n      scrollToKey,\n      scrollToIndex,\n      ensureIndexInView,\n      ensureKeyInView,\n      refresh,\n    })\n\n    watch(\n      () => props.items.length,\n      () => {\n        nextTick(refresh)\n      },\n    )\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        props.inherit && nh.bm('inherit'),\n        props.disabled && nh.bm('disabled'),\n        attrs.class,\n      ]\n    })\n\n    function onScroll(payload: ScrollPayload) {\n      handleScroll()\n      emitEvent(props.onScroll, payload)\n    }\n\n    function onResize(entry: ResizeObserverEntry) {\n      if (props.ignoreResize) return\n\n      handleResize(entry)\n      emitEvent(props.onResize, entry)\n    }\n\n    function onItemResize(key: number | string | symbol, entry: ResizeObserverEntry) {\n      if (!props.lockItems && !props.ignoreResize) {\n        handleItemResize(key, entry)\n      }\n    }\n\n    async function refresh() {\n      await scroll.value?.refresh()\n      handleScroll()\n    }\n\n    function renderList(items: Record<string, any>[]) {\n      const keyField = props.idKey\n      const itemFixed = props.itemFixed\n      const keyIndexMap = indexMap.value\n      const { class: itemsClass, style: itemsOtherStyle, ...itemsAttrs } = props.itemsAttrs || {}\n\n      const ListTag = (props.listTag || 'div') as any\n      const ItemsTag = (props.itemsTag || 'ul') as any\n\n      return (\n        <ResizeObserver onResize={refresh}>\n          <ListTag ref={list} class={nh.be('list')} style={listStyle.value}>\n            <ItemsTag\n              {...itemsAttrs}\n              class={[nh.be('items'), itemsClass]}\n              style={[itemsStyle.value, itemsOtherStyle]}\n            >\n              {slots.default && props.items.length\n                ? items.map(item => {\n                  const key = item[keyField]\n                  const index = keyIndexMap.get(key)\n                  const vnode = renderSlot(slots, 'default', { item, index })\n\n                  if (itemFixed) {\n                    vnode.key = key\n\n                    return vnode\n                  }\n\n                  const onResize = onItemResize.bind(null, key)\n\n                  return (\n                    <ResizeObserver key={key} onResize={onResize}>\n                      {() => vnode}\n                    </ResizeObserver>\n                  )\n                })\n                : renderSlot(slots, 'empty')}\n            </ItemsTag>\n          </ListTag>\n        </ResizeObserver>\n      )\n    }\n\n    return () => {\n      let renderingItems = visibleItems.value\n\n      if (import.meta.env.MODE === 'test') {\n        // It is difficult to test ResizeObserver in vitest, so directly rendering all items\n        renderingItems = props.items\n      }\n\n      return (\n        <NativeScroll\n          {...attrs}\n          ref={scroll}\n          class={className.value}\n          inherit={props.inherit}\n          use-y-bar={!props.hideBar}\n          scroll-y={scrollOffset.value}\n          autoplay={props.autoplay}\n          onScroll={onScroll}\n          onResize={onResize}\n        >\n          {{\n            default: () => {\n              if (props.disabled) {\n                return slots.default && props.items.length\n                  ? props.items.map((item, index) => {\n                    const key = item[props.idKey]\n                    const vnode = renderSlot(slots, 'default', { item, index })\n\n                    vnode.key = key\n\n                    return vnode\n                  })\n                  : renderSlot(slots, 'empty')\n              }\n\n              return renderList(renderingItems)\n            },\n            prefixTrap: createSlotRender(slots, ['prefix-trap', 'prefixTrap']),\n            suffixTrap: createSlotRender(slots, ['suffix-trap', 'suffixTrap']),\n          }}\n        </NativeScroll>\n      )\n    }\n  },\n})\n","import {\n  booleanNumberProp,\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n  valuesProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TagType } from '@/components/tag'\nimport type {\n  ChangeEvent,\n  SelectBaseValue,\n  SelectEvent,\n  SelectFilter,\n  SelectFilterPosition,\n  SelectKeyConfig,\n  SelectRawOption,\n  SelectSlots,\n} from './symbol'\n\ntype CustomChangeEvent =\n  | ChangeEvent\n  | ((value: SelectBaseValue, data: any) => void)\n  | ((value: string, data: any) => void)\n  | ((value: number, data: any) => void)\n  | ((value: boolean, data: any) => void)\n  | ((values: SelectBaseValue[], data: any[]) => void)\n  | ((values: string[], data: any[]) => void)\n  | ((values: number[], data: any[]) => void)\n  | ((value: boolean[], data: any) => void)\n\nexport const selectProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('select'),\n  visible: booleanProp,\n  options: Array as PropType<SelectRawOption[]>,\n  disabled: booleanProp,\n  transitionName: String,\n  outsideClose: booleanProp,\n  placeholder: String,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  value: valuesProp,\n  multiple: booleanProp,\n  clearable: booleanProp,\n  maxListHeight: Number,\n  listClass: classProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  optionCheck: booleanProp,\n  emptyText: String,\n  staticSuffix: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  keyConfig: Object as PropType<SelectKeyConfig>,\n  filter: {\n    type: [Boolean, Function] as PropType<boolean | SelectFilter>,\n    default: null,\n  },\n  ignoreCase: booleanProp,\n  creatable: booleanProp,\n  transparent: booleanProp,\n  maxTagCount: Number,\n  noRestTip: booleanProp,\n  tagType: String as PropType<TagType>,\n  noPreview: booleanProp,\n  remote: booleanProp,\n  fitPopper: booleanNumberProp,\n  name: String,\n  popperAlive: booleanProp,\n  countLimit: Number,\n  filterPosition: String as PropType<SelectFilterPosition>,\n  slots: Object as PropType<SelectSlots>,\n  shift: booleanProp,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onSelect: eventProp<EventListener<SelectEvent>>(),\n  onCancel: eventProp<EventListener<SelectEvent>>(),\n  onChange: eventProp<CustomChangeEvent>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n  onClear: eventProp(),\n  onFilterInput: eventProp<(value: string) => void>(),\n})\n\nexport type SelectProps = ExtractPropTypes<typeof selectProps>\nexport type SelectCProps = ConfigurableProps<SelectProps>\n","import type { OptionKeyConfig, OptionState, RawOption } from '@/components/option'\n\nexport interface SelectKeyConfig extends OptionKeyConfig {\n  group?: string,\n  children?: string,\n}\n\nexport type SelectRawOption = RawOption\nexport type SelectBaseValue = string | number | boolean\nexport type SelectValue = SelectBaseValue | SelectBaseValue[] | null\n\nexport interface SelectOptionState extends OptionState {\n  group: boolean,\n  depth: number,\n  parent: SelectOptionState | null,\n  data: SelectRawOption,\n}\n\nexport type SelectFilter = (value: string, option: SelectOptionState) => boolean\n\nexport type SelectFilterPosition = 'in-control' | 'in-list'\n\nexport type SelectEvent = (value: SelectBaseValue, data: any) => void\nexport type ChangeEvent = (value: SelectValue, data: any | any[]) => void\n\nexport interface SelectListSlotParams {\n  options: SelectOptionState[],\n  isSelected: (option: SelectOptionState) => boolean,\n  handleSelect: (option?: SelectOptionState | null) => void,\n}\n\nexport interface SelectSlots {\n  selected?: (params: {\n    value: SelectBaseValue,\n    option: SelectOptionState | null,\n    preview?: boolean,\n  }) => any,\n  prefix?: () => any,\n  suffix?: () => any,\n  control?: () => any,\n  tag?: (params: {\n    value: SelectBaseValue,\n    option: SelectOptionState | null,\n    handleClose: () => void,\n  }) => any,\n  restTag?: (params: { restCount: number }) => any,\n  list?: (params: SelectListSlotParams) => any,\n  prepend?: () => any,\n  append?: () => any,\n  /**\n   * Option content slot.\n   */\n  default?: (params: { option: SelectOptionState, index: number, selected: boolean }) => any,\n  group?: (params: { option: SelectOptionState, index: number }) => any,\n  empty?: () => any,\n}\n\nexport const defaultKeyConfig: Required<SelectKeyConfig> = Object.freeze({\n  value: 'value',\n  label: 'label',\n  disabled: 'disabled',\n  divided: 'divided',\n  title: 'title',\n  group: 'group',\n  children: 'children',\n})\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { NativeScroll } from '@/components/native-scroll'\nimport { Option } from '@/components/option'\nimport { Overflow } from '@/components/overflow'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { Tag } from '@/components/tag'\nimport { Tooltip } from '@/components/tooltip'\nimport { VirtualList } from '@/components/virtual-list'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, onMounted, reactive, ref, toRef, watch, watchEffect } from 'vue'\n\nimport {\n  placementWhileList,\n  useClickOutside,\n  useHover,\n  useModifier,\n  useMounted,\n  usePopper,\n} from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport {\n  decide,\n  getLast,\n  getRangeWidth,\n  isNull,\n  removeArrayItem,\n  toAttrValue,\n} from '@vexip-ui/utils'\nimport { selectProps } from './props'\nimport { defaultKeyConfig } from './symbol'\n\nimport type { InputExposed } from '@/components/input'\nimport type { PopperExposed } from '@/components/popper'\nimport type { TooltipExposed } from '@/components/tooltip'\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type {\n  ChangeEvent,\n  SelectBaseValue,\n  SelectEvent,\n  SelectOptionState,\n  SelectSlots,\n  SelectValue,\n} from './symbol'\n\nfunction isSameValue(newValue: SelectValue, oldValue: SelectValue) {\n  const isNewArray = Array.isArray(newValue)\n  const isOldArray = Array.isArray(oldValue)\n\n  if (isNewArray !== isOldArray) return false\n\n  if (isNewArray && isOldArray) {\n    if (newValue.length !== oldValue.length) return false\n\n    for (let i = 0, len = newValue.length; i < len; ++i) {\n      if (newValue[i] !== oldValue[i]) return false\n    }\n\n    return true\n  }\n\n  if (isNull(newValue)) return isNull(oldValue)\n\n  return newValue === oldValue\n}\n\ndefineOptions({ name: 'Select' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<SelectValue>(focus)\n\nconst nh = useNameHelper('select')\n\nconst _props = defineProps(selectProps)\nconst props = useProps('select', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  visible: {\n    default: false,\n    static: true,\n  },\n  options: {\n    default: () => [],\n    static: true,\n  },\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  outsideClose: true,\n  placeholder: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  value: {\n    default: () => getFieldValue()!,\n    static: true,\n  },\n  multiple: false,\n  clearable: false,\n  maxListHeight: 300,\n  listClass: null,\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value),\n  },\n  transfer: false,\n  optionCheck: false,\n  emptyText: null,\n  staticSuffix: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  keyConfig: () => ({}),\n  filter: false,\n  ignoreCase: false,\n  creatable: false,\n  transparent: false,\n  maxTagCount: 0,\n  noRestTip: false,\n  tagType: null,\n  noPreview: false,\n  remote: false,\n  fitPopper: false,\n  name: {\n    default: '',\n    static: true,\n  },\n  popperAlive: null,\n  countLimit: 0,\n  filterPosition: 'in-control',\n  slots: () => ({}),\n  shift: true,\n})\n\nconst emit = defineEmits(['update:value', 'update:visible', 'update:label'])\n\nconst slots = defineSlots<SelectSlots>()\n\nconst locale = useLocale('select', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst currentVisible = ref(props.visible)\nconst currentLabels = ref<string[]>([])\nconst currentValues = ref<SelectBaseValue[]>([])\nconst currentIndex = ref(-1)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\n// const listHeight = ref<string>()\nconst baseOptions = ref<SelectOptionState[]>([])\nconst currentFilter = ref('')\nconst anchorWidth = ref(0)\nconst userOptions = ref<SelectOptionState[]>([])\nconst restTagCount = ref(0)\nconst restTipShow = ref(false)\nconst composing = ref(false)\n\nconst { isMounted } = useMounted()\n\nconst dynamicOption = reactive<SelectOptionState>({\n  disabled: false,\n  divided: false,\n  title: '',\n  value: '',\n  label: '',\n  group: false,\n  depth: 0,\n  parent: null,\n  hidden: false,\n  hitting: true,\n  data: '',\n})\n\nconst optionValues = reactive(new Set<string | number>())\nconst hittingOption = ref<SelectOptionState>()\nconst optionStates = computed(() => userOptions.value.concat(baseOptions.value))\nconst visibleOptions = computed(() => optionStates.value.filter(state => !state.hidden))\n\nconst keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst nativeInput = ref<HTMLInputElement>()\nconst filterInput = ref<InputExposed>()\nconst device = ref<HTMLElement>()\nconst virtualList = ref<VirtualListExposed>()\nconst popper = ref<PopperExposed>()\nconst restTip = ref<TooltipExposed>()\n\nconst input = computed(() => filterInput.value?.input ?? nativeInput.value)\n\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n  shift: toRef(props, 'shift'),\n})\nconst { isHover } = useHover(reference)\n\nconst cachedSelected = reactive(new Map<SelectBaseValue, SelectOptionState>())\nconst optionValueMap = ref(new Map<SelectBaseValue, SelectOptionState>())\n\nlet emittedValue: typeof props.value | null = props.value\n\nconst updateTrigger = ref(0)\n\nwatchEffect(() => {\n  /* eslint-disable @typescript-eslint/no-unused-expressions */\n  props.keyConfig.value\n  props.keyConfig.label\n  props.keyConfig.disabled\n  props.keyConfig.divided\n  props.keyConfig.title\n  props.keyConfig.group\n  props.keyConfig.children\n\n  // If we only read the `props.options`, when user use Array native methods to\n  // change options, Vue will not trigger the watch callback\n  for (let i = 0, len = props.options.length; i < len; ++i) {\n    props.options[i]\n  }\n  /* eslint-enable */\n\n  updateTrigger.value++\n})\n\nwatch(updateTrigger, initOptionState, { immediate: true })\n\nfunction initOptionState() {\n  const {\n    value: valueKey,\n    label: labelKey,\n    disabled: disabledKey,\n    divided: dividedKey,\n    title: titleKey,\n    group: groupKey,\n    children: childrenKey,\n  } = keyConfig.value\n  const oldMap = optionValueMap.value\n  const map = new Map<string | number, SelectOptionState>()\n  const states: SelectOptionState[] = []\n  const loop = props.options\n    .map(option => ({ option, depth: 0, parent: null as SelectOptionState | null }))\n    .reverse()\n\n  optionValues.clear()\n\n  for (const option of userOptions.value) {\n    map.set(option.value, option)\n    optionValues.add(option.value)\n  }\n\n  while (loop.length) {\n    const { option, depth, parent } = loop.pop()!\n    const rawOption = typeof option === 'string' ? { [valueKey]: option } : option\n    const group = !!rawOption[groupKey]\n    const value = rawOption[valueKey]\n\n    if (!group && isNull(value)) continue\n\n    const label = rawOption[labelKey] || String(value)\n    const {\n      [disabledKey]: disabled = false,\n      [dividedKey]: divided = false,\n      [titleKey]: title = '',\n      [childrenKey]: children = null,\n    } = rawOption\n    const oldState = oldMap.get(rawOption.value)\n    const optionState = reactive({\n      disabled,\n      divided,\n      title,\n      value,\n      label,\n      group,\n      depth,\n      parent,\n      hidden: oldState?.hidden ?? false,\n      hitting: oldState?.hitting ?? false,\n      data: option,\n    }) as SelectOptionState\n\n    states.push(optionState)\n\n    if (!group) {\n      map.set(value, optionState)\n      optionValues.add(String(value))\n    }\n\n    if (Array.isArray(children) && children.length) {\n      loop.push(\n        ...children\n          .map(child => {\n            return { option: child, depth: depth + 1, parent: optionState }\n          })\n          .reverse(),\n      )\n    }\n  }\n\n  optionValueMap.value = map\n  baseOptions.value = states\n\n  initValueAndLabel(emittedValue)\n}\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (composing.value) {\n      event.stopPropagation()\n      return\n    }\n\n    if (!currentVisible.value) {\n      if (modifier.space || modifier.enter) {\n        event.preventDefault()\n        event.stopPropagation()\n        toggleVisible()\n      }\n\n      return\n    }\n\n    if (modifier.tab || modifier.escape) {\n      setVisible(false)\n      modifier.resetAll()\n\n      return\n    }\n\n    decide(\n      [\n        [\n          () => modifier.up || modifier.down,\n          () => {\n            const options = visibleOptions.value\n            const length = options.length\n\n            if (!length) return\n\n            const step = modifier.down ? 1 : -1\n\n            let index = (Math.max(-1, currentIndex.value + step) + length) % length\n            let option = options[index]\n\n            for (let i = 0; (option.disabled || option.group) && i < length; ++i) {\n              index += step\n              index = (index + length) % length\n              option = options[index]\n            }\n\n            updateHitting(index)\n          },\n        ],\n        [\n          () => modifier.enter || (!props.filter && modifier.space),\n          () => {\n            if (currentIndex.value >= 0) {\n              handleSelect(totalOptions.value[currentIndex.value])\n            } else if (showDynamic.value) {\n              handleSelect(dynamicOption)\n            } else {\n              setVisible(false)\n            }\n          },\n        ],\n      ],\n      {\n        beforeMatchAny: () => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n        afterMatchAny: modifier.resetAll,\n      },\n    )\n  },\n})\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('multiple')]: props.multiple,\n    [nh.bm('filter')]: props.filter,\n    [nh.bm('responsive')]: props.multiple && props.maxTagCount <= 0,\n    [nh.bm('disabled')]: props.disabled,\n  }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--focused`]: !props.disabled && currentVisible.value,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n    [`${baseCls}--has-prefix`]: hasPrefix.value,\n    [`${baseCls}--has-suffix`]: !props.noSuffix,\n    [`${baseCls}--transparent`]: props.transparent,\n  }\n})\nconst hasValue = computed(\n  () => !isNull(currentValues.value[0]) && (props.multiple || currentValues.value[0] !== ''),\n)\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst showDynamic = computed(() => {\n  return !!(\n    props.filter &&\n    props.creatable &&\n    dynamicOption.value &&\n    !optionValues.has(dynamicOption.value)\n  )\n})\nconst totalOptions = computed(() => {\n  return showDynamic.value ? [dynamicOption].concat(visibleOptions.value) : visibleOptions.value\n})\nconst normalOptions = computed(() => optionStates.value.filter(option => !option.group))\nconst optionParentMap = computed(() => {\n  const options = normalOptions.value\n  const map = new Map<string | number, SelectOptionState>()\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    const option = options[i]\n\n    if (option.parent) {\n      map.set(option.value, option.parent)\n    }\n  }\n\n  return map\n})\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && hasValue.value\n})\nconst previewOption = computed(() => {\n  return !props.noPreview && currentVisible.value ? hittingOption.value : undefined\n})\nconst limited = computed(() => {\n  return props.multiple && props.countLimit > 0 && currentValues.value.length >= props.countLimit\n})\nconst showPlaceholder = computed(() => {\n  if (props.filterPosition !== 'in-control') {\n    return (\n      !hasValue.value && !previewOption.value && !!(props.placeholder ?? locale.value.placeholder)\n    )\n  }\n\n  // 采用反推，出现下列情况时不显示：\n  // 1. 开始组合（如输入了任意拼音）\n  // 2. 有值且 未开预览/多选模式/未打开列表\n  // 3. 没有预览选项且没有合法的占位值\n  // 4. 打开列表且输入了过滤值\n  return (\n    !composing.value &&\n    !(hasValue.value && (props.noPreview || props.multiple || !currentVisible.value)) &&\n    !(!previewOption.value && !(props.placeholder ?? locale.value.placeholder)) &&\n    !(currentVisible.value && currentFilter.value)\n  )\n})\n\nfunction getOptionFromMap(value?: SelectBaseValue | null) {\n  if (isNull(value)) return null\n\n  return optionValueMap.value.get(value) ?? cachedSelected.get(value) ?? null\n}\n\nfunction fitPopperWidth() {\n  requestAnimationFrame(() => {\n    updatePopper()\n\n    if (wrapper.value && popper.value?.wrapper) {\n      if (typeof props.fitPopper === 'number') {\n        popper.value.wrapper.style.width = `${props.fitPopper}px`\n      } else if (props.fitPopper) {\n        popper.value.wrapper.style.width = `${wrapper.value.offsetWidth}px`\n      } else {\n        popper.value.wrapper.style.minWidth = `${wrapper.value.offsetWidth}px`\n      }\n    }\n  })\n}\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  },\n)\nwatch(currentVisible, value => {\n  if (value) {\n    restTipShow.value = false\n    initHittingIndex()\n    fitPopperWidth()\n  }\n\n  if (props.filterPosition !== 'in-control') {\n    requestAnimationFrame(syncInputValue)\n  } else {\n    syncInputValue()\n  }\n})\nwatch(\n  () => props.value,\n  value => {\n    if (!emittedValue || !isSameValue(value, emittedValue)) {\n      emittedValue = value\n      initValueAndLabel(value)\n      syncInputValue()\n    }\n  },\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n    }\n  },\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\nwatch(currentFilter, value => {\n  dynamicOption.value = value\n  dynamicOption.label = value\n  dynamicOption.data = value\n\n  filterOptions(value)\n})\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentVisible,\n  currentValues,\n  currentLabels,\n  optionStates,\n  isHover,\n  currentFilter,\n  composing,\n  visibleOptions,\n  totalOptions,\n\n  wrapper,\n  reference,\n  popper,\n  input,\n  device,\n  virtualList,\n  restTip,\n\n  updatePopper,\n  isSelected,\n  getOptionFromMap,\n  updateHitting,\n  handleClear,\n  focus,\n  blur: () => {\n    input.value?.blur()\n    reference.value?.blur()\n  },\n})\n\nonMounted(() => {\n  syncInputValue()\n\n  if (props.visible) {\n    restTipShow.value = false\n    initHittingIndex()\n    fitPopperWidth()\n  }\n})\n\nfunction initValueAndLabel(value: SelectValue | null) {\n  if (isNull(value)) {\n    currentValues.value = []\n    currentLabels.value = []\n    return\n  }\n\n  const normalizedValue = !Array.isArray(value) ? [value] : value\n\n  const valueSet = new Set(normalizedValue)\n  const selectedValues: SelectBaseValue[] = []\n  const selectedLabels: string[] = []\n\n  valueSet.forEach(value => {\n    let option = getOptionFromMap(value)\n\n    if (option) {\n      selectedValues.push(option.value)\n      selectedLabels.push(option.label)\n\n      if (!cachedSelected.has(option.value)) {\n        cachedSelected.set(option.value, option)\n      }\n    } else if (props.remote) {\n      option = reactive({\n        value,\n        disabled: false,\n        divided: false,\n        title: '',\n        label: String(value),\n        group: false,\n        depth: -1,\n        parent: null,\n        hidden: true,\n        hitting: false,\n        data: value,\n      }) as SelectOptionState\n\n      cachedSelected.set(value, option)\n      selectedValues.push(value)\n      selectedLabels.push(option.label)\n    }\n  })\n\n  for (const cachedValue of Array.from(cachedSelected.keys())) {\n    if (!valueSet.has(cachedValue)) {\n      cachedSelected.delete(cachedValue)\n    }\n  }\n\n  currentValues.value = selectedValues\n  currentLabels.value = selectedLabels\n\n  initHittingIndex()\n  filterOptions(currentFilter.value)\n}\n\nfunction initHittingIndex() {\n  const value = currentValues.value[0]\n\n  if (isNull(value)) {\n    updateHitting(-1)\n  } else {\n    if (!isMounted.value) return\n\n    updateHitting(visibleOptions.value.findIndex(option => option.value === value))\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction updateHitting(hitting: number, ensureInView = true) {\n  currentIndex.value = hitting\n  hittingOption.value = undefined\n\n  let index = -1\n\n  optionStates.value.forEach(option => {\n    if (!option.hidden) {\n      index += 1\n      option.hitting = hitting === index\n\n      if (option.hitting) {\n        hittingOption.value = option\n      }\n    } else {\n      option.hitting = false\n    }\n  })\n\n  if (ensureInView && currentVisible.value && virtualList.value) {\n    virtualList.value.ensureIndexInView(hitting)\n  }\n}\n\nfunction isSelected(option: SelectOptionState) {\n  if (props.multiple) {\n    return currentValues.value.includes(option.value)\n  }\n\n  return currentValues.value[0] === option.value\n}\n\nfunction filterOptions(inputValue: string) {\n  const filter = props.filter\n\n  if (!filter || props.remote) return\n\n  if (!inputValue) {\n    optionStates.value.forEach(state => {\n      state.hidden = false\n    })\n  } else {\n    optionStates.value.forEach(state => {\n      state.hidden = true\n    })\n\n    if (typeof filter === 'function') {\n      normalOptions.value.forEach(state => {\n        state.hidden = !filter(inputValue, state)\n      })\n    } else {\n      if (props.ignoreCase) {\n        const ignoreCaseValue = inputValue.toString().toLocaleLowerCase()\n\n        normalOptions.value.forEach(state => {\n          state.hidden = !state.label?.toString().toLocaleLowerCase().includes(ignoreCaseValue)\n        })\n      } else {\n        normalOptions.value.forEach(state => {\n          state.hidden = !state.label?.toString().includes(inputValue?.toString())\n        })\n      }\n    }\n\n    const parentMap = optionParentMap.value\n\n    normalOptions.value.forEach(option => {\n      if (!option.hidden && option.parent) {\n        let parent = parentMap.get(option.value) || null\n\n        while (parent && parent.hidden) {\n          parent.hidden = false\n          parent = parent.parent\n        }\n      }\n    })\n  }\n\n  updateHitting(currentIndex.value)\n}\n\nfunction handleTagClose(value?: SelectBaseValue | null) {\n  if (props.disabled || readonly.value) return\n\n  !isNull(value) && handleSelect(getOptionFromMap(value))\n}\n\nfunction handleRestTagClose(value?: SelectBaseValue | null) {\n  handleTagClose(value)\n\n  if (restTipShow.value) {\n    restTip.value?.updatePopper()\n  }\n}\n\nfunction handleSelect(option?: SelectOptionState | null) {\n  if (!option) return\n\n  const selected = isSelected(option)\n  const value = option.value\n\n  if (selected) {\n    if (userOptions.value.find(item => item.value === value)) {\n      removeArrayItem(userOptions.value, item => item.value === value)\n      optionValueMap.value.delete(value)\n    }\n\n    cachedSelected.delete(value)\n  } else {\n    if (!props.multiple) {\n      userOptions.value.length = 0\n    }\n\n    if (limited.value) return\n\n    if (dynamicOption.value && value === dynamicOption.value) {\n      const newOption = { ...dynamicOption }\n\n      userOptions.value.push(newOption)\n      optionValueMap.value.set(value, newOption)\n    }\n\n    cachedSelected.set(option.value, option)\n  }\n\n  emitEvent(\n    props[props.multiple && selected ? 'onCancel' : 'onSelect'] as SelectEvent,\n    value,\n    option.data,\n  )\n  handleChange(option)\n\n  if (props.multiple) {\n    if (props.filterPosition === 'in-control') {\n      currentFilter.value = ''\n      syncInputValue()\n    }\n\n    requestAnimationFrame(updatePopper)\n  } else {\n    setVisible(false)\n  }\n\n  anchorWidth.value = 0\n}\n\nfunction handleChange(option: SelectOptionState) {\n  if (props.multiple) {\n    if (isSelected(option)) {\n      const index = currentValues.value.findIndex(v => v === option.value)\n\n      if (~index) {\n        currentValues.value.splice(index, 1)\n        currentLabels.value.splice(index, 1)\n      }\n    } else {\n      currentValues.value.push(option.value)\n      currentLabels.value.push(option.label)\n    }\n\n    emittedValue = Array.from(currentValues.value)\n\n    emit('update:value', emittedValue)\n    emit('update:label', currentLabels.value)\n    setFieldValue(emittedValue)\n    emitEvent(\n      props.onChange as ChangeEvent,\n      emittedValue,\n      emittedValue.map(value => getOptionFromMap(value)?.data ?? value),\n    )\n    validateField()\n  } else {\n    const prevValue = currentValues.value[0]\n\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n    currentValues.value.push(option.value)\n    currentLabels.value.push(option.label)\n\n    if (prevValue !== option.value) {\n      emittedValue = option.value\n\n      emit('update:value', emittedValue)\n      emit('update:label', currentLabels.value[0])\n      setFieldValue(emittedValue)\n      emitEvent(props.onChange as ChangeEvent, emittedValue, option.data)\n      validateField()\n    }\n  }\n}\n\nfunction toggleVisible() {\n  if (props.disabled || readonly.value) return\n\n  setVisible(!currentVisible.value)\n}\n\nfunction handleClickOutside() {\n  restTipShow.value = false\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    setVisible(false)\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    for (const option of userOptions.value) {\n      optionValueMap.value.delete(option.value)\n    }\n\n    cachedSelected.clear()\n\n    userOptions.value.length = 0\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n    restTipShow.value = false\n\n    emittedValue = props.multiple ? [] : ''\n\n    syncInputValue()\n    emit('update:value', emittedValue)\n    emitEvent(props.onChange as ChangeEvent, emittedValue, props.multiple ? [] : '')\n    emitEvent(props.onClear)\n    clearField(emittedValue!)\n    updatePopper()\n  }\n}\n\nlet focused = false\n\nfunction handleFocus(event: FocusEvent) {\n  if (!focused) {\n    focused = true\n    emitEvent(props.onFocus, event)\n  }\n}\n\nfunction handleBlur(event: FocusEvent) {\n  if (focused) {\n    focused = false\n\n    setTimeout(() => {\n      if (!focused) {\n        emitEvent(props.onBlur, event)\n      }\n    }, 120)\n  }\n}\n\nfunction syncInputValue() {\n  if (!input.value) return\n\n  const visible = currentVisible.value\n\n  if (props.multiple) {\n    input.value.value = ''\n  } else {\n    input.value.value = visible ? '' : currentLabels.value[0] || ''\n  }\n\n  visible ? input.value.focus() : input.value.blur()\n}\n\nfunction handleFilterInput() {\n  if (!input.value || composing.value) return\n\n  let hittingIndex: number\n\n  currentFilter.value = input.value.value\n\n  if (!currentFilter.value) {\n    hittingIndex = -1\n  } else if (showDynamic.value || currentIndex.value !== -1) {\n    hittingIndex = 0\n  } else {\n    hittingIndex = visibleOptions.value.findIndex(\n      option => String(option.label) === currentFilter.value,\n    )\n    hittingIndex = hittingIndex === -1 ? 0 : hittingIndex\n  }\n\n  requestAnimationFrame(() => {\n    if (!hittingIndex) {\n      hittingIndex = visibleOptions.value.findIndex(\n        option => !currentValues.value.includes(option.value),\n      )\n    }\n\n    if (hittingIndex !== currentIndex.value) {\n      updateHitting(hittingIndex)\n    }\n\n    if (props.multiple && device.value) {\n      anchorWidth.value = getRangeWidth(device.value)\n    }\n\n    updatePopper()\n  })\n\n  emitEvent(props.onFilterInput, currentFilter.value)\n}\n\nfunction handleCompositionEnd() {\n  if (!composing.value) return\n\n  composing.value = false\n\n  if (input.value) {\n    input.value.dispatchEvent(new Event('input'))\n  }\n}\n\nfunction handleFilterKeyDown(event: KeyboardEvent) {\n  if (!input.value) return\n\n  if (\n    props.filterPosition !== 'in-list' &&\n    event.key === 'Backspace' &&\n    !input.value.value &&\n    !isNull(getLast(currentValues.value))\n  ) {\n    event.stopPropagation()\n    handleTagClose(getLast(currentValues.value))\n  }\n}\n\nfunction toggleShowRestTip() {\n  if (!currentVisible.value) {\n    restTipShow.value = !restTipShow.value\n\n    if (restTipShow.value) {\n      nextTick(() => {\n        restTip.value?.updatePopper()\n      })\n    }\n  } else {\n    toggleVisible()\n    restTipShow.value = false\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  if (currentVisible.value) {\n    ;(input.value || reference.value)?.focus(options)\n  } else {\n    reference.value?.focus(options)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"listbox\"\n    :aria-labelledby=\"labelId\"\n    @click=\"toggleVisible\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @focus=\"handleFocus\"\n      @blur=\";(!props.filter || !currentVisible) && handleBlur($event)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <slot name=\"control\">\n          <Renderer :renderer=\"props.slots.control\">\n            <template v-if=\"props.multiple\">\n              <Overflow\n                inherit\n                :class=\"[nh.be('tags')]\"\n                :items=\"currentValues\"\n                :max-count=\"props.maxTagCount\"\n                :style=\"{\n                  maxWidth: props.maxTagCount <= 0 && `calc(100% - ${anchorWidth}px)`,\n                }\"\n                @rest-change=\"restTagCount = $event\"\n                @click.stop=\"toggleVisible\"\n              >\n                <template #default=\"{ item: value, index }\">\n                  <slot\n                    name=\"tag\"\n                    :value=\"value\"\n                    :option=\"getOptionFromMap(value)\"\n                    :handle-close=\"handleTagClose.bind(null, value)\"\n                  >\n                    <Renderer\n                      :renderer=\"props.slots.tag\"\n                      :data=\"{\n                        value,\n                        option: getOptionFromMap(value),\n                        handleClose: handleTagClose.bind(null, value),\n                      }\"\n                    >\n                      <Tag\n                        inherit\n                        :class=\"nh.be('tag')\"\n                        :type=\"props.tagType\"\n                        closable\n                        :disabled=\"props.disabled\"\n                        @close=\"handleTagClose(value)\"\n                      >\n                        <span :class=\"nh.be('label')\">\n                          <slot name=\"selected\" :value=\"value\" :option=\"getOptionFromMap(value)\">\n                            <Renderer\n                              :renderer=\"props.slots.selected\"\n                              :data=\"{ value, option: getOptionFromMap(value) }\"\n                            >\n                              {{ currentLabels[index] }}\n                            </Renderer>\n                          </slot>\n                        </span>\n                      </Tag>\n                    </Renderer>\n                  </slot>\n                </template>\n                <template #counter=\"{ count }\">\n                  <slot v-if=\"props.noRestTip\" name=\"restTag\" :rest-count=\"count\">\n                    <Renderer :renderer=\"props.slots.restTag\" :data=\"{ restCount: count }\">\n                      <Tag\n                        inherit\n                        :class=\"[nh.be('tag'), nh.be('counter')]\"\n                        :type=\"props.tagType\"\n                        :disabled=\"props.disabled\"\n                      >\n                        {{ `+${count}` }}\n                      </Tag>\n                    </Renderer>\n                  </slot>\n                  <template v-else>\n                    <Tooltip\n                      ref=\"restTip\"\n                      inherit\n                      :transfer=\"false\"\n                      :visible=\"restTipShow\"\n                      trigger=\"custom\"\n                      placement=\"top\"\n                      :tip-class=\"nh.be('rest-tip')\"\n                      @click.stop=\"toggleShowRestTip\"\n                    >\n                      <template #trigger>\n                        <slot name=\"restTag\" :rest-count=\"count\">\n                          <Renderer :renderer=\"props.slots.restTag\" :data=\"{ restCount: count }\">\n                            <Tag\n                              inherit\n                              :class=\"[nh.be('tag'), nh.be('counter')]\"\n                              :type=\"props.tagType\"\n                              :disabled=\"props.disabled\"\n                            >\n                              {{ `+${count}` }}\n                            </Tag>\n                          </Renderer>\n                        </slot>\n                      </template>\n                      <NativeScroll inherit use-y-bar>\n                        <template v-for=\"(value, index) in currentValues\" :key=\"index\">\n                          <slot\n                            v-if=\"index >= currentValues.length - restTagCount\"\n                            name=\"tag\"\n                            :value=\"value\"\n                            :option=\"getOptionFromMap(value)\"\n                            :handle-close=\"handleRestTagClose.bind(null, value)\"\n                          >\n                            <Renderer\n                              :renderer=\"props.slots.tag\"\n                              :data=\"{\n                                value,\n                                option: getOptionFromMap(value),\n                                handleClose: handleRestTagClose.bind(null, value),\n                              }\"\n                            >\n                              <Tag\n                                inherit\n                                :class=\"nh.be('tag')\"\n                                closable\n                                :type=\"props.tagType\"\n                                :disabled=\"props.disabled\"\n                                @close=\"handleRestTagClose(value)\"\n                              >\n                                <span :class=\"nh.be('label')\">\n                                  <slot\n                                    name=\"selected\"\n                                    :value=\"value\"\n                                    :option=\"getOptionFromMap(value)\"\n                                  >\n                                    <Renderer\n                                      :renderer=\"props.slots.selected\"\n                                      :data=\"{ value, option: getOptionFromMap(value) }\"\n                                    >\n                                      {{ currentLabels[index] }}\n                                    </Renderer>\n                                  </slot>\n                                </span>\n                              </Tag>\n                            </Renderer>\n                          </slot>\n                        </template>\n                      </NativeScroll>\n                    </Tooltip>\n                  </template>\n                </template>\n              </Overflow>\n              <div\n                v-if=\"props.filter && props.filterPosition === 'in-control'\"\n                :class=\"nh.be('anchor')\"\n                :style=\"{\n                  width: `${anchorWidth}px`,\n                }\"\n              >\n                <input\n                  ref=\"nativeInput\"\n                  :class=\"[\n                    nh.be('input'),\n                    nh.bem('input', 'multiple'),\n                    currentVisible && nh.bem('input', 'visible'),\n                  ]\"\n                  :disabled=\"props.disabled\"\n                  autocomplete=\"off\"\n                  tabindex=\"-1\"\n                  role=\"combobox\"\n                  aria-autocomplete=\"list\"\n                  :name=\"props.name\"\n                  @submit.prevent\n                  @input=\"handleFilterInput\"\n                  @keydown=\"handleFilterKeyDown\"\n                  @focus=\"handleFocus($event)\"\n                  @blur=\"handleBlur($event)\"\n                  @compositionstart=\"composing = true\"\n                  @compositionend=\"handleCompositionEnd\"\n                  @change=\"handleCompositionEnd\"\n                />\n                <span ref=\"device\" :class=\"nh.be('device')\" aria-hidden=\"true\">\n                  {{ currentFilter }}\n                </span>\n              </div>\n            </template>\n            <template v-else>\n              <input\n                v-if=\"props.filter && props.filterPosition === 'in-control'\"\n                ref=\"nativeInput\"\n                :class=\"[nh.be('input'), currentVisible && nh.bem('input', 'visible')]\"\n                :disabled=\"props.disabled\"\n                autocomplete=\"off\"\n                tabindex=\"-1\"\n                role=\"combobox\"\n                aria-autocomplete=\"list\"\n                :name=\"props.name\"\n                :style=\"{\n                  opacity: currentVisible ? undefined : '0%',\n                }\"\n                @submit.prevent\n                @input=\"handleFilterInput\"\n                @focus=\"handleFocus($event)\"\n                @blur=\"handleBlur($event)\"\n                @compositionstart=\"composing = true\"\n                @compositionend=\"handleCompositionEnd\"\n                @change=\"handleCompositionEnd\"\n              />\n              <span\n                v-if=\"\n                  (props.noPreview || !currentVisible) &&\n                    hasValue &&\n                    (props.filterPosition !== 'in-control' || !currentFilter)\n                \"\n                :class=\"{\n                  [nh.be('selected')]: true,\n                  [nh.bem('selected', 'placeholder')]: props.filter && currentVisible && hasValue,\n                }\"\n              >\n                <slot\n                  v-if=\"getOptionFromMap(currentValues[0])\"\n                  name=\"selected\"\n                  :value=\"currentValues[0]\"\n                  :option=\"getOptionFromMap(currentValues[0])\"\n                >\n                  <Renderer\n                    :renderer=\"props.slots.selected\"\n                    :data=\"{ value: currentValues[0], option: getOptionFromMap(currentValues[0]) }\"\n                  >\n                    {{ currentLabels[0] }}\n                  </Renderer>\n                </slot>\n                <template v-else>\n                  {{ currentLabels[0] }}\n                </template>\n              </span>\n            </template>\n            <span v-if=\"showPlaceholder\" :class=\"nh.be('placeholder')\">\n              <slot\n                v-if=\"previewOption\"\n                name=\"selected\"\n                :preview=\"true\"\n                :value=\"previewOption.value\"\n                :option=\"previewOption\"\n              >\n                <Renderer\n                  :renderer=\"props.slots.selected\"\n                  :data=\"{ value: previewOption.value, preview: true, option: previewOption }\"\n                >\n                  {{ previewOption.label }}\n                </Renderer>\n              </slot>\n              <template v-else>\n                {{ props.placeholder ?? locale.placeholder }}\n              </template>\n            </span>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : '',\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon\n              v-if=\"props.suffix\"\n              :icon=\"props.suffix\"\n              :class=\"{\n                [nh.be('arrow')]: !props.staticSuffix,\n              }\"\n            ></Icon>\n            <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"locale.ariaLabel.clear\"\n          @click.stop=\"handleClear\"\n        >\n          <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop=\"focus\"\n      @after-leave=\"currentFilter = ''\"\n    >\n      <slot\n        name=\"list\"\n        :options=\"totalOptions\"\n        :is-selected=\"isSelected\"\n        :handle-select=\"handleSelect\"\n      >\n        <Renderer\n          :renderer=\"props.slots.list\"\n          :data=\"{ options: totalOptions, isSelected, handleSelect }\"\n        >\n          <div\n            :class=\"[\n              nh.be('list'),\n              (slots.prepend || slots.append) && nh.bem('list', 'with-extra'),\n              props.listClass,\n            ]\"\n          >\n            <div v-if=\"props.filter && props.filterPosition === 'in-list'\" :class=\"nh.be('filter')\">\n              <Input\n                ref=\"filterInput\"\n                :class=\"nh.be('filter-input')\"\n                transparent\n                :disabled=\"props.disabled\"\n                :placeholder=\"locale.search\"\n                :autocomplete=\"false\"\n                :tabindex=\"-1\"\n                role=\"combobox\"\n                aria-autocomplete=\"list\"\n                @input=\"handleFilterInput\"\n                @keydown=\"handleFilterKeyDown\"\n                @focus=\"handleFocus\"\n                @blur=\"handleBlur\"\n                @compositionstart=\"composing = true\"\n                @compositionend=\"handleCompositionEnd\"\n                @change=\"handleCompositionEnd\"\n              >\n                <template #suffix>\n                  <Icon v-bind=\"icons.search\"></Icon>\n                </template>\n              </Input>\n            </div>\n            <slot v-if=\"slots.prepend || props.slots.prepend\" name=\"prepend\">\n              <Renderer :renderer=\"props.slots.prepend\"></Renderer>\n            </slot>\n            <VirtualList\n              ref=\"virtualList\"\n              inherit\n              :style=\"{\n                height: undefined,\n                maxHeight: `${props.maxListHeight}px`,\n              }\"\n              :items=\"totalOptions\"\n              :item-size=\"32\"\n              use-y-bar\n              :height=\"'100%'\"\n              id-key=\"value\"\n              :items-attrs=\"{\n                class: [nh.be('options'), props.optionCheck ? nh.bem('options', 'has-check') : ''],\n                role: 'listbox',\n                ariaLabel: 'options',\n                ariaMultiselectable: props.multiple,\n              }\"\n            >\n              <template #default=\"{ item: option, index }\">\n                <li\n                  v-if=\"option.group\"\n                  :class=\"[nh.ns('option-vars'), nh.be('group')]\"\n                  :title=\"option.label\"\n                >\n                  <slot name=\"group\" :option=\"option\" :index=\"index\">\n                    <Renderer :renderer=\"props.slots.group\" :data=\"{ option, index }\">\n                      <div\n                        :class=\"[nh.be('label'), nh.bem('label', 'group')]\"\n                        :style=\"{ paddingInlineStart: `${option.depth * 6}px` }\"\n                      >\n                        {{ option.label }}\n                      </div>\n                    </Renderer>\n                  </slot>\n                </li>\n                <Option\n                  v-else\n                  :label=\"option.label\"\n                  :value=\"option.value\"\n                  :disabled=\"option.disabled || (limited && !isSelected(option))\"\n                  :divided=\"option.divided\"\n                  :no-title=\"option.title\"\n                  :hitting=\"option.hitting\"\n                  :selected=\"isSelected(option)\"\n                  no-hover\n                  @select=\"handleSelect(option)\"\n                  @mousemove=\"updateHitting(index, false)\"\n                >\n                  <slot :option=\"option\" :index=\"index\" :selected=\"isSelected(option)\">\n                    <Renderer\n                      :renderer=\"props.slots.default\"\n                      :data=\"{ option, index, selected: isSelected(option) }\"\n                    >\n                      <span\n                        :class=\"nh.be('label')\"\n                        :style=\"{ paddingInlineStart: `${option.depth * 6}px` }\"\n                      >\n                        {{ option.label }}\n                      </span>\n                      <Transition v-if=\"props.optionCheck\" :name=\"nh.ns('fade')\" appear>\n                        <Icon\n                          v-if=\"isSelected(option)\"\n                          v-bind=\"icons.check\"\n                          :class=\"nh.be('check')\"\n                        ></Icon>\n                      </Transition>\n                    </Renderer>\n                  </slot>\n                </Option>\n              </template>\n              <template #empty>\n                <div :class=\"nh.be('empty')\">\n                  <slot name=\"empty\">\n                    <Renderer :renderer=\"props.slots.empty\">\n                      {{ props.emptyText ?? locale.empty }}\n                    </Renderer>\n                  </slot>\n                </div>\n              </template>\n            </VirtualList>\n            <slot v-if=\"slots.append || props.slots.append\" name=\"append\">\n              <Renderer :renderer=\"props.slots.append\"></Renderer>\n            </slot>\n          </div>\n        </Renderer>\n      </slot>\n    </Popper>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type {\n  AutoCompleteFilter,\n  AutoCompleteKeyConfig,\n  AutoCompleteRawOption,\n  AutoCompleteSlots,\n  ChangeEvent,\n  EnterEvent,\n} from './symbol'\n\nexport const autoCompleteProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('input'),\n  transfer: booleanStringProp,\n  value: [String, Number],\n  options: Array as PropType<AutoCompleteRawOption[]>,\n  filter: {\n    type: [Boolean, Function] as PropType<boolean | AutoCompleteFilter>,\n    default: null,\n  },\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  placeholder: String,\n  disabled: booleanProp,\n  transitionName: String,\n  dropDisabled: booleanProp,\n  placement: String as PropType<Placement>,\n  clearable: booleanProp,\n  ignoreCase: booleanProp,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  transparent: booleanProp,\n  debounce: booleanProp,\n  delay: Number,\n  keyConfig: Object as PropType<Omit<AutoCompleteKeyConfig, 'label'>>,\n  showEmpty: booleanProp,\n  name: String,\n  popperAlive: booleanProp,\n  slots: Object as PropType<AutoCompleteSlots>,\n  shift: booleanProp,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onSelect: eventProp<EventListener<ChangeEvent>>(),\n  onInput: eventProp<(value: string) => void>(),\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onEnter: eventProp<EventListener<EnterEvent>>(),\n  onClear: eventProp(),\n})\n\nexport type AutoCompleteProps = ExtractPropTypes<typeof autoCompleteProps>\nexport type AutoCompleteCProps = ConfigurableProps<ExtractPropTypes<typeof autoCompleteProps>>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Select } from '@/components/select'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, onMounted, ref, toRef, watch, watchEffect } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { placementWhileList, useSetTimeout } from '@vexip-ui/hooks'\nimport { debounce, isNull, throttle, toNumber } from '@vexip-ui/utils'\nimport { autoCompleteProps } from './props'\n\nimport type { SelectExposed } from '@/components/select'\nimport type {\n  AutoCompleteListSlotParams,\n  AutoCompleteRawOption,\n  AutoCompleteSlots,\n  ChangeEvent,\n  EnterEvent,\n} from './symbol'\n\ndefineOptions({ name: 'AutoComplete' })\n\nconst select = ref<SelectExposed>()\nconst control = ref<HTMLInputElement>()\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<string | number>(() => control.value?.focus())\n\nconst nh = useNameHelper('auto-complete')\n\nconst _props = defineProps(autoCompleteProps)\nconst props = useProps('autoComplete', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  transfer: false,\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  options: {\n    default: () => [],\n    static: true,\n  },\n  filter: false,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  placeholder: null,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  dropDisabled: false,\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value),\n  },\n  clearable: false,\n  ignoreCase: false,\n  autofocus: false,\n  spellcheck: false,\n  keyConfig: () => ({}),\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  transparent: false,\n  debounce: false,\n  delay: null,\n  showEmpty: false,\n  name: {\n    default: '',\n    static: true,\n  },\n  popperAlive: null,\n  slots: () => ({}),\n  shift: true,\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<AutoCompleteSlots>()\n\nconst locale = useLocale('input', toRef(props, 'locale'))\n\nconst { timer } = useSetTimeout()\n\nconst currentValue = ref(props.value)\nconst currentIndex = ref(-1)\nconst currentVisible = ref(false)\nconst composing = ref(false)\n\nlet changed = false\nlet lastValue = props.value\nlet lastInput = String(lastValue)\n\nconst isReadonly = computed(() => props.loading && props.loadingLock)\nconst optionStates = computed(() => select.value?.optionStates || [])\nconst filteredOptions = computed(() => select.value?.visibleOptions || [])\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n    lastValue = value\n    lastInput = String(value)\n\n    if (control.value) {\n      control.value.value = String(value)\n    }\n  },\n)\nwatch(currentIndex, computeHitting)\nwatch(currentVisible, value => {\n  if (!value) {\n    currentIndex.value = -1\n  } else {\n    control.value?.focus()\n  }\n})\nwatch(currentValue, value => {\n  if (props.filter && select.value) {\n    select.value.currentFilter = `${value}`\n  }\n})\nwatchEffect(() => {\n  if (!props.filter || !currentVisible.value || !select.value) return\n\n  select.value.currentFilter = String(currentValue.value)\n})\n\ndefineExpose({\n  idFor,\n  composing,\n  select,\n  control,\n  focus: (options?: FocusOptions) => control.value?.focus(options),\n  blur: () => control.value?.blur(),\n})\n\nonMounted(() => {\n  nextTick(() => {\n    if (control.value && !isNull(currentValue.value)) {\n      control.value.value = String(currentValue.value)\n    }\n  })\n})\n\nfunction computeHitting() {\n  const hitting = currentIndex.value\n  let index = -1\n\n  optionStates.value.forEach(state => {\n    if (!state.hidden) {\n      index += 1\n      state.hitting = hitting === index\n\n      if (state.hitting) {\n        if (control.value) {\n          control.value.value = String(state.value)\n        }\n      }\n    } else {\n      state.hitting = false\n    }\n  })\n\n  if (control.value && hitting < 0) {\n    control.value.value = lastInput\n  }\n}\n\nlet focused = false\n\nfunction handleFocus(event: FocusEvent) {\n  if (!focused) {\n    focused = true\n    emitEvent(props.onFocus, event)\n  }\n}\n\nfunction handleBlur(event: FocusEvent) {\n  if (focused) {\n    focused = false\n\n    timer.focus = setTimeout(() => {\n      if (!focused) {\n        emitEvent(props.onBlur, event)\n        handleChange()\n      }\n    }, 120)\n  }\n}\n\nfunction handleSelect(value: string | number, data: AutoCompleteRawOption) {\n  if (composing.value || isNull(value)) {\n    return\n  }\n\n  const prevValue = currentValue.value\n  currentValue.value = value\n\n  emitEvent(props.onSelect as ChangeEvent, value, data)\n\n  if (value !== prevValue) {\n    changed = true\n    handleChange()\n  } else {\n    currentVisible.value = false\n  }\n}\n\nfunction handleInputInternal(event: string | Event) {\n  const value = typeof event === 'string' ? event : (event.target as HTMLInputElement).value\n\n  currentValue.value = value\n  changed = true\n  lastInput = value\n\n  if (currentIndex.value !== -1) {\n    currentIndex.value = 0\n  }\n\n  if (props.showEmpty) {\n    currentVisible.value = !props.dropDisabled\n\n    if (select.value) {\n      select.value.currentVisible = currentVisible.value\n    }\n  }\n\n  emitEvent(props.onInput, value)\n  nextTick(testOptionCanDrop)\n  select.value?.updatePopper()\n}\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n  ? debounce(handleInputInternal, delay || 100)\n  : throttle(handleInputInternal, delay || 16)\n\nfunction handleChange(valid = true) {\n  if (!changed || currentValue.value === lastValue) return\n\n  changed = false\n  lastValue = currentValue.value\n  lastInput = String(lastValue)\n\n  const option = optionStates.value.find(option => option.value === lastValue)\n\n  if (select.value) {\n    select.value.currentValues.length = 0\n    ;(currentValue.value || currentValue.value === 0) &&\n      select.value.currentValues.push(currentValue.value)\n  }\n\n  emit('update:value', currentValue.value)\n  setFieldValue(currentValue.value)\n  emitEvent(props.onChange as ChangeEvent, currentValue.value, option?.data || null!)\n  valid && validateField()\n\n  currentVisible.value = false\n\n  if (control.value) {\n    control.value.value = String(lastValue)\n  }\n}\n\nlet beforeVisible = false\nlet inClickProcess = false\n\nfunction beforeClick() {\n  if (props.disabled || isReadonly.value) return\n\n  beforeVisible = currentVisible.value\n  inClickProcess = true\n\n  if (select.value) {\n    select.value.currentFilter = String(currentValue.value)\n  }\n}\n\nfunction handleClick() {\n  if (props.disabled || isReadonly.value) return\n\n  inClickProcess = false\n\n  if (!select.value) return\n\n  currentVisible.value = true\n\n  if (!beforeVisible) {\n    testOptionCanDrop()\n    beforeVisible = currentVisible.value\n    beforeVisible && emitEvent(props.onToggle, beforeVisible)\n  } else {\n    select.value.currentVisible = true\n  }\n}\n\nfunction handleToggle(visible: boolean) {\n  if (props.disabled || isReadonly.value || inClickProcess) return\n\n  currentVisible.value = visible\n\n  visible && testOptionCanDrop()\n  beforeVisible = currentVisible.value\n\n  if (currentVisible.value !== visible) {\n    emitEvent(props.onToggle, currentVisible.value)\n  }\n\n  if (!currentVisible.value) {\n    currentIndex.value = -1\n  }\n}\n\nfunction testOptionCanDrop() {\n  currentVisible.value = !(\n    props.dropDisabled ||\n    (!props.showEmpty && !filteredOptions.value.length)\n  )\n\n  if (select.value) {\n    select.value.currentVisible = currentVisible.value\n  }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (composing.value) {\n    event.stopPropagation()\n    return\n  }\n\n  const key = event.code || event.key\n\n  if (key === 'Enter' || key === 'NumpadEnter') {\n    handleEnter(event)\n  } else if (key === 'ArrowDown' || key === 'ArrowUp') {\n    event.preventDefault()\n    event.stopPropagation()\n\n    const options = filteredOptions.value\n    const length = options.length\n\n    if (!length) return\n\n    const step = key === 'ArrowDown' ? 1 : -1\n\n    // 初始状态时 currentIndex 为 -1，往上时会得到 -2 导致行为不按预期，需限制\n    let index = (Math.max(currentIndex.value + step, -1) + length) % length\n    let option = options[index]\n\n    for (let i = 0; (option.disabled || option.group) && i < length; ++i) {\n      index += step\n      index = (index + length) % length\n      option = options[index]\n    }\n\n    currentIndex.value = index\n  } else {\n    if (['Space', ' '].includes(key)) {\n      event.stopPropagation()\n    }\n\n    if (!['Enter', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n      // 进行了其他按键则重置\n      currentIndex.value = -1\n    }\n  }\n}\n\nfunction handleEnter(event: KeyboardEvent) {\n  event.stopPropagation()\n\n  if (composing.value) return\n\n  if (currentIndex.value >= 0 && filteredOptions.value.length) {\n    const option = filteredOptions.value[currentIndex.value === -1 ? 0 : currentIndex.value]\n\n    handleSelect(option.value, option.data)\n  } else {\n    handleChange()\n  }\n\n  emitEvent(props.onEnter as EnterEvent, currentValue.value)\n  currentVisible.value = false\n}\n\nfunction handleClear() {\n  if (props.clearable) {\n    const prevValue = currentValue.value\n\n    currentValue.value = ''\n    currentVisible.value = false\n\n    if (!isNull(prevValue) && prevValue !== currentValue.value) {\n      changed = true\n    }\n\n    handleChange(false)\n    emitEvent(props.onClear)\n    nextTick(clearField)\n    control.value?.focus()\n  }\n}\n\nfunction handleCompositionEnd() {\n  if (composing.value) {\n    composing.value = false\n\n    if (control.value) {\n      control.value.dispatchEvent(new Event('input'))\n    }\n  }\n}\n</script>\n\n<template>\n  <Select\n    :id=\"idFor\"\n    ref=\"select\"\n    v-model:visible=\"currentVisible\"\n    :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\"\n    :inherit=\"props.inherit\"\n    :label-id=\"labelId\"\n    :list-class=\"nh.be('list')\"\n    :value=\"currentValue\"\n    :size=\"props.size\"\n    :state=\"props.state\"\n    :clearable=\"props.clearable\"\n    :transition-name=\"props.transitionName\"\n    :disabled=\"props.disabled\"\n    :transfer=\"props.transfer\"\n    :placement=\"props.placement\"\n    :prefix-color=\"props.prefixColor\"\n    :suffix-color=\"props.suffixColor\"\n    :no-suffix=\"!hasSuffix\"\n    :placeholder=\"props.placeholder\"\n    :options=\"props.options\"\n    :key-config=\"props.keyConfig\"\n    :loading=\"props.loading\"\n    :loading-icon=\"props.loadingIcon\"\n    :loading-lock=\"props.loadingLock\"\n    :loading-effect=\"props.loadingEffect\"\n    :transparent=\"transparent\"\n    :filter=\"props.filter\"\n    :ignore-case=\"props.ignoreCase\"\n    :popper-alive=\"props.popperAlive\"\n    :shift=\"props.shift\"\n    @toggle=\"handleToggle\"\n    @select=\"handleSelect\"\n    @clear=\"handleClear\"\n    @focus=\"control?.focus()\"\n    @outside-close=\"handleChange\"\n    @click=\"handleClick\"\n    @click.capture=\"beforeClick\"\n  >\n    <template v-if=\"hasPrefix\" #prefix>\n      <slot name=\"prefix\">\n        <Renderer :renderer=\"props.slots.prefix\">\n          <Icon :icon=\"props.prefix\"></Icon>\n        </Renderer>\n      </slot>\n    </template>\n    <template #control>\n      <slot\n        name=\"control\"\n        :value=\"currentValue\"\n        :on-input=\"handleInput\"\n        :on-change=\"handleChange\"\n        :on-enter=\"handleEnter\"\n        :on-clear=\"handleClear\"\n      >\n        <Renderer\n          :renderer=\"props.slots.control\"\n          :data=\"{\n            value: currentValue,\n            onInput: handleInput,\n            onChange: handleChange,\n            onEnter: handleEnter,\n            onClear: handleClear\n          }\"\n        >\n          <input\n            ref=\"control\"\n            :class=\"nh.be('input')\"\n            :autofocus=\"props.autofocus\"\n            :spellcheck=\"props.spellcheck\"\n            :disabled=\"props.disabled\"\n            :placeholder=\"props.placeholder ?? locale.placeholder\"\n            :readonly=\"isReadonly\"\n            :name=\"props.name\"\n            autocomplete=\"off\"\n            tabindex=\"-1\"\n            role=\"combobox\"\n            aria-autocomplete=\"list\"\n            @submit.prevent\n            @input=\"handleInput\"\n            @keydown=\"handleKeyDown\"\n            @focus=\"handleFocus($event)\"\n            @blur=\"handleBlur($event)\"\n            @compositionstart=\"composing = true\"\n            @compositionend=\"handleCompositionEnd\"\n            @change=\"handleCompositionEnd\"\n          />\n        </Renderer>\n      </slot>\n    </template>\n    <template v-if=\"hasSuffix\" #suffix>\n      <slot name=\"suffix\">\n        <Renderer :renderer=\"props.slots.suffix\">\n          <Icon :icon=\"props.suffix\"></Icon>\n        </Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.default || props.slots.default\" #default=\"{ option, index, selected }\">\n      <slot :option=\"option\" :index=\"index\" :selected=\"selected\">\n        <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index, selected }\"></Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.group || props.slots.group\" #group=\"{ option, index }\">\n      <slot name=\"group\" :option=\"option\" :index=\"index\">\n        <Renderer :renderer=\"props.slots.group\" :data=\"{ option, index }\"></Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.prepend || props.slots.prepend\" #prepend>\n      <slot name=\"prepend\">\n        <Renderer :renderer=\"props.slots.prepend\"></Renderer>\n      </slot>\n    </template>\n    <template v-if=\"$slots.append || props.slots.append\" #append>\n      <slot name=\"append\">\n        <Renderer :renderer=\"props.slots.append\"></Renderer>\n      </slot>\n    </template>\n    <template\n      v-if=\"$slots.list || props.slots.list\"\n      #list=\"{ options, isSelected, handleSelect: onSelect }\"\n    >\n      <slot\n        name=\"list\"\n        :options=\"options\"\n        :is-selected=\"isSelected as AutoCompleteListSlotParams['isSelected']\"\n        :handle-select=\"onSelect as AutoCompleteListSlotParams['handleSelect']\"\n      >\n        <Renderer\n          :renderer=\"props.slots.list\"\n          :data=\"{\n            options,\n            isSelected,\n            handleSelect: onSelect\n          }\"\n        ></Renderer>\n      </slot>\n    </template>\n  </Select>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ComponentSize, ConfigurableProps } from '@vexip-ui/config'\nimport type { AvatarGroupSlots, AvatarObjectFit, AvatarOption, AvatarSlots } from './symbol'\n\nexport const avatarProps = buildProps({\n  size: [Number, String] as PropType<number | ComponentSize>,\n  src: String,\n  icon: iconProp,\n  circle: booleanProp,\n  alt: String,\n  fit: String as PropType<AvatarObjectFit>,\n  srcSet: String,\n  gap: Number,\n  iconScale: Number,\n  fallbackSrc: String,\n  color: String,\n  background: String,\n  slots: Object as PropType<AvatarSlots>,\n  onError: eventProp<(event: Event) => void>(),\n  onClick: eventProp<(event: MouseEvent) => void>(),\n})\n\nexport type AvatarProps = ExtractPropTypes<typeof avatarProps>\nexport type AvatarCProps = ConfigurableProps<ExtractPropTypes<typeof avatarProps>, 'src'>\n\nexport const avatarGroupProps = buildProps({\n  size: [Number, String] as PropType<number | ComponentSize>,\n  options: Object as PropType<AvatarOption[]>,\n  circle: booleanProp,\n  max: Number,\n  showTip: booleanProp,\n  tipTrigger: String as PropType<'hover' | 'click'>,\n  vertical: booleanProp,\n  offset: Number,\n  restColor: String,\n  restBackground: String,\n  slots: Object as PropType<AvatarGroupSlots>,\n})\n\nexport type AvatarGroupProps = ExtractPropTypes<typeof avatarGroupProps>\nexport type AvatarGroupCProps = ConfigurableProps<ExtractPropTypes<typeof avatarGroupProps>>\n","import type { InjectionKey } from 'vue'\nimport type { ComponentSize } from '@vexip-ui/config'\n\nexport type AvatarObjectFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'\nexport type AvatarOption = ({ src: string } | { icon: Record<string, any> } | { text: string }) &\n  Record<string, any>\n\nexport interface AvatarGroupState {\n  size: number | ComponentSize,\n}\n\nexport interface AvatarSlots {\n  default?: () => any,\n  icon?: () => any,\n}\n\nexport interface AvatarGroupSlots {\n  default?: (params: { option: AvatarOption, index: number }) => any,\n  rest?: (params: { options: AvatarOption[], count: number }) => any,\n  tip?: (params: { options: AvatarOption[], count: number }) => any,\n}\n\nexport const GROUP_STATE = '__VXP_AVATAR_GROUP_STATE' as unknown as InjectionKey<AvatarGroupState>\n\nexport const objectFitValues = Object.freeze<AvatarObjectFit[]>([\n  'fill',\n  'contain',\n  'cover',\n  'none',\n  'scale-down',\n])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { avatarProps } from './props'\nimport { GROUP_STATE, objectFitValues } from './symbol'\n\nimport type { ComponentSize, StyleType } from '@vexip-ui/config'\n\ndefineOptions({ name: 'Avatar' })\n\nconst _props = defineProps(avatarProps)\nconst props = useProps('avatar', _props, {\n  size: 'default',\n  src: {\n    default: '',\n    static: true,\n  },\n  icon: createIconProp(),\n  circle: false,\n  alt: '',\n  fit: {\n    default: 'cover',\n    validator: value => objectFitValues.includes(value),\n  },\n  srcSet: '',\n  gap: 4,\n  iconScale: 1.4,\n  fallbackSrc: '',\n  color: null,\n  background: null,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  icon?: () => any,\n}>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('avatar')\n\nconst loadFail = ref(false)\nconst fallbackFail = ref(false)\n\nconst wrapper = ref<HTMLElement>()\nconst text = useDisplay(() => scaleText(true))\n\nconst size = computed(() => {\n  return groupState?.size ?? props.size\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(size.value as ComponentSize)]:\n      typeof size.value !== 'number' && size.value !== 'default',\n    [nh.bm('circle')]: props.circle,\n  }\n})\nconst style = computed(() => {\n  const style: StyleType = {\n    [nh.cv('color')]: props.color,\n    [nh.cv('bg-color')]: props.background,\n    [nh.cv('image-fit')]: props.fit,\n  }\n\n  if (typeof size.value === 'number') {\n    style[nh.cv('size')] = `${size.value}px`\n  }\n\n  return style\n})\n\nwatch(\n  () => props.src,\n  () => {\n    loadFail.value = false\n    fallbackFail.value = false\n    scaleText()\n  },\n)\nwatch(\n  () => props.fallbackSrc,\n  () => {\n    fallbackFail.value = false\n    scaleText()\n  },\n)\nwatch(\n  () => props.gap,\n  () => scaleText(),\n)\n\ndefineExpose({ loadFail, fallbackFail })\n\nfunction handleError(event: Event) {\n  loadFail.value = true\n  emitEvent(props.onError, event)\n}\n\nlet lastText: string | null = null\n\nfunction scaleText(force = false) {\n  const avatarEl = wrapper.value\n  const textEl = text.value\n\n  if (avatarEl && textEl && (force || lastText === null || lastText !== textEl.textContent)) {\n    lastText = textEl.textContent\n\n    const { offsetWidth: avatarWidth, offsetHeight: avatarHeight } = avatarEl\n    const { offsetWidth: textWidth, offsetHeight: textHeight } = textEl\n    const padding = props.gap * 2\n\n    const ratio = Math.min(\n      (avatarWidth - padding) / (textWidth || 1),\n      (avatarHeight - padding) / (textHeight || 1),\n      1,\n    )\n\n    textEl.style.transform = `scale(${ratio})`\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    :style=\"style\"\n    @click=\"handleClick\"\n  >\n    <img\n      v-if=\"(props.src || props.srcSet) && !loadFail\"\n      :class=\"nh.be('image')\"\n      :src=\"props.src\"\n      :alt=\"props.alt\"\n      :srcset=\"props.srcSet\"\n      @error=\"handleError\"\n    />\n    <img\n      v-else-if=\"loadFail && props.fallbackSrc && !fallbackFail\"\n      :class=\"nh.be('image')\"\n      :src=\"props.fallbackSrc\"\n      :alt=\"props.alt\"\n      @error=\"fallbackFail = true\"\n    />\n    <template v-else-if=\"icon || slots.icon\">\n      <slot name=\"icon\">\n        <Renderer :renderer=\"props.slots.icon\">\n          <Icon :class=\"nh.be('icon')\" :icon=\"icon\" :scale=\"props.iconScale\"></Icon>\n        </Renderer>\n      </slot>\n    </template>\n    <ResizeObserver v-else :on-resize=\"scaleText\">\n      <span ref=\"text\" :class=\"nh.be('text')\">\n        <slot>\n          <Renderer :renderer=\"props.slots.default\"></Renderer>\n        </slot>\n      </span>\n    </ResizeObserver>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Avatar } from '@/components/avatar'\nimport { Renderer } from '@/components/renderer'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, provide, ref, watchEffect } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { avatarGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nimport type { ComponentSize } from '@vexip-ui/config'\nimport type { AvatarGroupSlots, AvatarOption } from './symbol'\n\ndefineOptions({ name: 'AvatarGroup' })\n\nconst _props = defineProps(avatarGroupProps)\nconst props = useProps('avatarGroup', _props, {\n  size: 'default',\n  options: {\n    default: () => [],\n    static: true,\n  },\n  circle: false,\n  max: null,\n  showTip: false,\n  tipTrigger: 'hover',\n  vertical: false,\n  offset: null,\n  restColor: null,\n  restBackground: null,\n  slots: () => ({}),\n})\n\ndefineSlots<AvatarGroupSlots>()\n\nconst nh = useNameHelper('avatar-group')\n\nconst renderAvatars = ref<AvatarOption[]>([])\nconst restAvatars = ref<AvatarOption[]>([])\n\nwatchEffect(() => {\n  const size = props.options.length\n\n  if (props.max > 0 && size > props.max) {\n    renderAvatars.value = props.options.slice(0, props.max - 1)\n    restAvatars.value = props.options.slice(props.max - 1)\n  } else {\n    renderAvatars.value = Array.from(props.options)\n    restAvatars.value = []\n  }\n})\n\nprovide(GROUP_STATE, props)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('avatar-vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.size as ComponentSize)]:\n      typeof props.size !== 'number' && props.size !== 'default',\n    [nh.bm('circle')]: props.circle,\n    [nh.bm('vertical')]: props.vertical,\n  }\n})\nconst style = computed(() => {\n  const style: Record<string, string> = {}\n\n  if (typeof props.offset === 'number') {\n    style[nh.cv('offset')] = `${props.offset}px`\n  }\n\n  return style\n})\n</script>\n\n<template>\n  <div :class=\"className\" role=\"group\" :style=\"style\">\n    <div v-for=\"(option, index) in renderAvatars\" :key=\"index\" :class=\"nh.be('item')\">\n      <slot :option=\"option\" :index=\"index\">\n        <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index }\">\n          <Avatar\n            inherit\n            :src=\"option.src\"\n            :icon=\"option.icon\"\n            :alt=\"option.alt\"\n            :fit=\"option.fit\"\n            :src-set=\"option.srcSet\"\n            :gap=\"option.gap\"\n            :icon-scale=\"option.iconScale\"\n            :fallback-src=\"option.fallbackSrc\"\n          >\n            {{ option.text }}\n          </Avatar>\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"restAvatars.length\" :class=\"[nh.be('item'), nh.bem('item', 'rest')]\">\n      <Tooltip\n        v-if=\"props.showTip\"\n        inherit\n        :trigger=\"props.tipTrigger\"\n        :tip-class=\"nh.be('rest')\"\n      >\n        <template #trigger>\n          <slot name=\"rest\" :options=\"restAvatars\" :count=\"restAvatars.length\">\n            <Renderer\n              :renderer=\"props.slots.rest\"\n              :data=\"{ options: restAvatars, count: restAvatars.length }\"\n            >\n              <Avatar inherit :color=\"props.restColor\" :background=\"props.restBackground\">\n                {{ `+${restAvatars.length}` }}\n              </Avatar>\n            </Renderer>>\n          </slot>\n        </template>\n        <slot name=\"tip\" :options=\"restAvatars\" :count=\"restAvatars.length\">\n          <Renderer\n            :renderer=\"props.slots.tip\"\n            :data=\"{ options: restAvatars, count: restAvatars.length }\"\n          >\n            <Avatar\n              v-for=\"(option, index) in restAvatars\"\n              :key=\"index\"\n              inherit\n              :src=\"option.src\"\n              :icon=\"option.icon\"\n              :alt=\"option.alt\"\n              :fit=\"option.fit\"\n              :src-set=\"option.srcSet\"\n              :gap=\"option.gap\"\n              :icon-scale=\"option.iconScale\"\n              :fallback-src=\"option.fallbackSrc\"\n            >\n              {{ option.text }}\n            </Avatar>\n          </Renderer>\n        </slot>\n      </Tooltip>\n      <slot\n        v-else\n        name=\"rest\"\n        :options=\"restAvatars\"\n        :count=\"restAvatars.length\"\n      >\n        <Renderer\n          :renderer=\"props.slots.rest\"\n          :data=\"{ options: restAvatars, count: restAvatars.length }\"\n        >\n          <Avatar inherit :color=\"props.restColor\" :background=\"props.restBackground\">\n            {{ `+${restAvatars.length}` }}\n          </Avatar>\n        </Renderer>\n      </slot>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BadgeSlots, BadgeType } from './symbol'\n\nexport const badgeProps = buildProps({\n  content: [Number, String],\n  max: Number,\n  disabled: booleanProp,\n  isDot: booleanProp,\n  type: String as PropType<BadgeType>,\n  color: String,\n  slots: Object as PropType<BadgeSlots>,\n  onBadgeClick: eventProp<(event: MouseEvent) => void>(),\n})\n\nexport type BadgeProps = ExtractPropTypes<typeof badgeProps>\nexport type BadgeCProps = ConfigurableProps<BadgeProps, 'content'>\n","export type BadgeType = 'error' | 'primary' | 'success' | 'warning' | 'info' | 'disabled'\n\nexport interface BadgeSlots {\n  default?: () => any,\n  content?: (params: { content: number | string }) => any,\n}\n\nexport const badgeTypes = Object.freeze<BadgeType[]>([\n  'error',\n  'primary',\n  'success',\n  'warning',\n  'info',\n  'disabled',\n])\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { badgeProps } from './props'\nimport { badgeTypes } from './symbol'\n\nimport type { BadgeSlots } from './symbol'\n\ndefineOptions({ name: 'Badge' })\n\nconst _props = defineProps(badgeProps)\nconst props = useProps('badge', _props, {\n  content: {\n    default: null,\n    static: true,\n  },\n  max: 0,\n  disabled: false,\n  isDot: false,\n  type: {\n    default: 'error',\n    validator: value => badgeTypes.includes(value),\n  },\n  color: null,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<BadgeSlots>()\n\nconst nh = useNameHelper('badge')\n\nconst hasSlot = computed(() => {\n  return !!slots.default\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('not-wrapper')]: !hasSlot.value,\n    [nh.bm('is-dot')]: props.isDot,\n  }\n})\nconst renderContent = computed(() => {\n  if (props.isDot) return ''\n\n  if (typeof props.content === 'number' && props.max > 0) {\n    return props.content > props.max ? `${props.max}+` : props.content\n  }\n\n  return props.content\n})\nconst transitionName = computed(() => {\n  return hasSlot.value ? nh.bs('badge-zoom') : nh.bs('zoom')\n})\nconst title = computed(() => {\n  return props.content || props.content === 0 ? props.content.toString() : undefined\n})\nconst showSub = computed(() => {\n  return !props.disabled && (props.content || props.content === 0 || props.isDot)\n})\n\nfunction handleBadgeClick(event: MouseEvent) {\n  emitEvent(props.onBadgeClick, event)\n}\n</script>\n\n<template>\n  <div :class=\"className\">\n    <slot>\n      <Renderer :renderer=\"props.slots.default\"></Renderer>\n    </slot>\n    <Transition :name=\"transitionName\">\n      <sup\n        v-show=\"showSub\"\n        :class=\"{\n          [nh.be('content')]: true,\n          [nh.bem('content', 'fixed')]: hasSlot,\n          [nh.bem('content', props.type)]: props.type !== 'error'\n        }\"\n        :style=\"{ backgroundColor: props.color }\"\n        :title=\"title\"\n        @click=\"handleBadgeClick\"\n      >\n        <slot name=\"content\" :content=\"renderContent\">\n          <Renderer :renderer=\"props.slots.content\" :data=\"{ content: renderContent }\">\n            {{ renderContent }}\n          </Renderer>\n        </slot>\n      </sup>\n    </Transition>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { BreadcrumbOptions, BreadcrumbSlots, SelectEvent } from './symbol'\n\nexport const breadcrumbProps = buildProps({\n  separator: String,\n  border: booleanProp,\n  options: Array as PropType<(string | BreadcrumbOptions)[]>,\n  router: Object as PropType<Router>,\n  slots: Object as PropType<BreadcrumbSlots>,\n  onSelect: eventProp<EventListener<SelectEvent>>(),\n  onSeparatorClick: eventProp<EventListener<SelectEvent>>(),\n})\n\nexport type BreadcrumbProps = ExtractPropTypes<typeof breadcrumbProps>\nexport type BreadcrumbCProps = ConfigurableProps<BreadcrumbProps>\n\nexport const breadcrumbItemProps = wrapProps({\n  label: {\n    type: [String, Number],\n    default: null,\n  },\n  onSelect: eventProp<EventListener<SelectEvent>>(),\n  onSeparatorClick: eventProp<EventListener<SelectEvent>>(),\n})\n\nexport type BreadcrumbItemProps = ExtractPropTypes<typeof breadcrumbItemProps>\n","import type { InjectionKey } from 'vue'\n\nexport interface BreadcrumbOptions {\n  label: string,\n  name?: string | (() => string),\n}\n\nexport type SeparatorRenderFn = (data: { label: string | number }) => any\n\nexport interface BreadcrumbItemState {\n  label: string | number,\n}\n\nexport interface BreadcrumbState {\n  separator: string,\n  separatorRenderer: null | SeparatorRenderFn,\n  increaseItem: (item: BreadcrumbItemState) => void,\n  decreaseItem: (item: BreadcrumbItemState) => void,\n  handleSelect: (label: string | number) => void,\n  refreshLabels: () => void,\n  handleSeparatorClick: (label: string | number) => void,\n}\n\nexport type SelectEvent = (label: string | number) => void\n\nexport interface BreadcrumbSlots {\n  default?: () => any,\n  item?: (params: { option: BreadcrumbOptions, index: number }) => any,\n  separator?: (params: { label: string | number }) => any,\n}\n\nexport const BREADCRUMB_STATE = '__VXP_BREADCRUMB_STATE' as unknown as InjectionKey<BreadcrumbState>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\nimport { isFunction } from '@vexip-ui/utils'\nimport { breadcrumbItemProps } from './props'\nimport { BREADCRUMB_STATE } from './symbol'\n\nimport type { BreadcrumbItemState, SelectEvent, SeparatorRenderFn } from './symbol'\n\ndefineOptions({ name: 'BreadcrumbItem' })\n\nconst props = defineProps(breadcrumbItemProps)\n\ndefineSlots<{\n  default: () => any,\n  separator: () => any,\n}>()\n\nconst nh = useNameHelper('breadcrumb')\n\nconst breadcrumbState = inject(BREADCRUMB_STATE, null)\n\nconst currentLabel = ref(props.label)\nconst separator = ref('/')\nconst separatorRenderer = ref<SeparatorRenderFn | null>(null)\n\nwatch(\n  () => props.label,\n  value => {\n    currentLabel.value = value\n    breadcrumbState?.refreshLabels()\n  },\n)\n\nif (breadcrumbState) {\n  const state: BreadcrumbItemState = reactive({\n    label: currentLabel,\n  })\n\n  watch(\n    () => breadcrumbState.separator,\n    value => {\n      separator.value = value\n    },\n    { immediate: true },\n  )\n  watch(\n    () => breadcrumbState.separatorRenderer,\n    value => {\n      separatorRenderer.value = value\n    },\n    { immediate: true },\n  )\n\n  breadcrumbState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    breadcrumbState.decreaseItem(state)\n  })\n}\n\nfunction handleClick() {\n  emitEvent(props.onSelect! as SelectEvent, currentLabel.value)\n  breadcrumbState?.handleSelect(currentLabel.value)\n}\n\nfunction handleSeparatorClick() {\n  emitEvent(props.onSeparatorClick! as SelectEvent, currentLabel.value)\n  breadcrumbState?.handleSeparatorClick(currentLabel.value)\n}\n</script>\n\n<template>\n  <li :class=\"nh.be('item')\">\n    <a\n      :class=\"nh.be('label')\"\n      tabindex=\"0\"\n      @click=\"handleClick\"\n      @keydown.enter=\"handleClick\"\n    >\n      <slot>{{ label }}</slot>\n    </a>\n    <span :class=\"nh.be('separator')\" role=\"separator\" @click=\"handleSeparatorClick\">\n      <slot name=\"separator\">\n        <Renderer\n          v-if=\"isFunction(separatorRenderer)\"\n          :renderer=\"separatorRenderer\"\n          :data=\"{ label: currentLabel }\"\n        ></Renderer>\n        <template v-else>\n          {{ separator }}\n        </template>\n      </slot>\n    </span>\n  </li>\n</template>\n","<script setup lang=\"ts\">\nimport { BreadcrumbItem } from '@/components/breadcrumb-item'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, toRef, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc, debounceMinor, isNull } from '@vexip-ui/utils'\nimport { breadcrumbProps } from './props'\nimport { BREADCRUMB_STATE } from './symbol'\n\nimport type {\n  BreadcrumbItemState,\n  BreadcrumbOptions,\n  BreadcrumbSlots,\n  BreadcrumbState,\n  SelectEvent,\n} from './symbol'\n\ndefineOptions({ name: 'Breadcrumb' })\n\nconst _props = defineProps(breadcrumbProps)\nconst props = useProps('breadcrumb', _props, {\n  separator: '/',\n  border: false,\n  options: {\n    default: () => [],\n    static: true,\n  },\n  router: null,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<BreadcrumbSlots>()\n\nconst nh = useNameHelper('breadcrumb')\nconst itemStates = new Set<BreadcrumbItemState>()\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('border')]: props.border,\n  }\n})\nconst normalizedOptions = computed(() => {\n  if (props.router && !props.options?.length) {\n    const matched = props.router.currentRoute.value.matched\n    const options: BreadcrumbOptions[] = []\n\n    for (const route of matched) {\n      const meta = (route.meta || {}) as any\n\n      if (meta.menu === false) {\n        continue\n      }\n\n      options.push({\n        label: meta.label || route.path,\n        name: meta.name || route.name,\n      })\n    }\n\n    return options\n  }\n\n  return props.options.map(option => {\n    if (typeof option === 'string') {\n      return { label: option }\n    }\n\n    return option\n  })\n})\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(itemStates).forEach((item, index) => {\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n})\n\nconst state: BreadcrumbState = reactive({\n  separator: toRef(props, 'separator'),\n  separatorRenderer: null,\n  increaseItem,\n  decreaseItem,\n  handleSelect,\n  refreshLabels,\n  handleSeparatorClick,\n})\n\nprovide(BREADCRUMB_STATE, state)\n\nwatch(\n  [() => slots.separator, () => props.slots.separator],\n  ([slotValue, propValue]) => {\n    state.separatorRenderer = slotValue\n      ? data => slotValue(data)\n      : propValue\n        ? data => propValue(data)\n        : null\n  },\n  { immediate: true },\n)\n\nfunction increaseItem(item: BreadcrumbItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: BreadcrumbItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleSelect(label: string | number) {\n  emitEvent(props.onSelect as SelectEvent, label)\n}\n\nfunction handleSeparatorClick(label: string | number) {\n  emitEvent(props.onSeparatorClick as SelectEvent, label)\n}\n</script>\n\n<template>\n  <ol :class=\"className\">\n    <slot>\n      <Renderer :renderer=\"props.slots.default\">\n        <BreadcrumbItem\n          v-for=\"(option, index) in normalizedOptions\"\n          :key=\"option.label\"\n          :label=\"option.label\"\n        >\n          <slot name=\"item\" :option=\"option\" :index=\"index\">\n            <Renderer :renderer=\"props.slots.item\" :data=\"{ option, index }\">\n              {{ option.name ? callIfFunc(option.name) : option.label }}\n            </Renderer>\n          </slot>\n        </BreadcrumbItem>\n      </Renderer>\n    </slot>\n  </ol>\n</template>\n","import { booleanStringProp, buildProps, classProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { BubbleType } from './symbol'\n\nexport const bubbleProps = buildProps({\n  placement: String as PropType<Placement>,\n  type: String as PropType<BubbleType>,\n  background: String,\n  shadow: booleanStringProp,\n  contentClass: classProp,\n})\n\nexport type BubbleProps = ExtractPropTypes<typeof bubbleProps>\nexport type BubbleCProps = ConfigurableProps<BubbleProps>\n","export type BubbleType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\n\nexport const bubbleTypes = Object.freeze<BubbleType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error',\n])\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport { placementWhileList } from '@vexip-ui/hooks'\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { bubbleProps } from './props'\nimport { bubbleTypes } from './symbol'\n\ndefineOptions({ name: 'Bubble' })\n\nconst _props = defineProps(bubbleProps)\nconst props = useProps('bubble', _props, {\n  placement: {\n    default: 'right',\n    validator: value => placementWhileList.includes(value),\n  },\n  type: {\n    default: null,\n    validator: value => bubbleTypes.includes(value),\n  },\n  background: '',\n  shadow: false,\n  contentClass: null,\n})\n\nconst nh = useNameHelper('bubble')\n\nconst wrapper = ref<HTMLElement>()\nconst arrow = ref<HTMLElement>()\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.placement),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('background')]: props.background,\n      [nh.bm('shadow')]: props.shadow,\n      [nh.bm(props.type)]: props.type !== 'default',\n    },\n  ]\n})\nconst style = computed(() => {\n  if (props.background) {\n    return {\n      [nh.cv('color')]: nh.gnv('color-white'),\n      [nh.cv('bg-color')]: props.background,\n    }\n  }\n\n  return undefined\n})\n\ndefineExpose({ wrapper, arrow })\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"className\" :style=\"style\">\n    <div\n      :class=\"[nh.be('content'), props.contentClass]\"\n      :style=\"{\n        boxShadow: props.shadow ? `0 0 4px ${props.shadow}` : undefined\n      }\"\n    >\n      <slot></slot>\n    </div>\n    <div ref=\"arrow\" :class=\"nh.be('arrow')\"></div>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonAttrType, ButtonSlots, ButtonType } from './symbol'\n\nexport const buttonProps = buildProps({\n  size: sizeProp,\n  type: String as PropType<ButtonType>,\n  dashed: booleanProp,\n  text: booleanProp,\n  simple: booleanProp,\n  ghost: booleanProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  circle: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  icon: iconProp,\n  color: String,\n  buttonType: String as PropType<ButtonAttrType>,\n  block: booleanProp,\n  tag: String,\n  noPulse: booleanProp,\n  badge: [String, Number],\n  slots: Object as PropType<ButtonSlots>,\n  onClick: eventProp<(event: MouseEvent) => void>(),\n})\n\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>\nexport type ButtonCProps = ConfigurableProps<ButtonProps>\n\nexport const buttonGroupProps = buildProps({\n  size: sizeProp,\n  type: String as PropType<ButtonType>,\n  circle: booleanProp,\n})\n\nexport type ButtonGroupProps = ExtractPropTypes<typeof buttonGroupProps>\nexport type ButtonGroupCProps = ConfigurableProps<ButtonGroupProps>\n","import type { InjectionKey } from 'vue'\nimport type { ComponentSize } from '@vexip-ui/config'\n\nexport type ButtonType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error'\nexport type ButtonAttrType = 'button' | 'submit' | 'reset'\n\nexport interface ButtonState {\n  index: number,\n  isLast: boolean,\n}\n\nexport interface ButtonGroupState {\n  type: ButtonType,\n  size: ComponentSize,\n  increaseItem: (item: ButtonState) => void,\n  decreaseItem: (item: ButtonState) => void,\n  refreshIndexes: () => void,\n}\n\nexport interface ButtonSlots {\n  default?: () => any,\n  icon?: () => any,\n  loading?: () => any,\n}\n\nexport const GROUP_STATE = '__VXP_BUTTON_GROUP_STATE' as unknown as InjectionKey<ButtonGroupState>\n\nexport const buttonTypes = Object.freeze<ButtonType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error',\n])\n","import { Badge } from '@/components/badge'\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, defineComponent, inject, onBeforeUnmount, reactive, ref, renderSlot } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { adjustAlpha, isClient, mixColor, parseColorToRgba } from '@vexip-ui/utils'\nimport { buttonProps } from './props'\nimport { GROUP_STATE, buttonTypes } from './symbol'\n\nexport default defineComponent({\n  name: 'Button',\n  props: buttonProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const fieldActions = inject(FIELD_OPTIONS, null)\n\n    const props = useProps('button', _props, {\n      size: createSizeProp(fieldActions ? fieldActions.size : undefined),\n      type: {\n        default: null,\n        validator: value => buttonTypes.includes(value),\n      },\n      dashed: false,\n      text: false,\n      simple: false,\n      ghost: false,\n      disabled: () => (fieldActions ? fieldActions.disabled.value : false),\n      loading: () => (fieldActions ? fieldActions.loading.value : false),\n      circle: false,\n      loadingIcon: createIconProp(),\n      loadingEffect: null,\n      icon: createIconProp(),\n      color: null,\n      buttonType: {\n        default: 'button',\n        validator: value => ['button', 'submit', 'reset'].includes(value),\n      },\n      block: false,\n      tag: 'button',\n      noPulse: false,\n      badge: null,\n      slots: () => ({}),\n    })\n\n    const groupState = inject(GROUP_STATE, null)\n\n    const nh = useNameHelper('button')\n    const icons = useIcons()\n    const pulsing = ref(false)\n    const index = ref(0)\n    const isLast = ref(false)\n\n    const isIconOnly = computed(() => {\n      return !slots.default && !props.slots.default\n    })\n    const type = computed(() => {\n      return props.type ?? groupState?.type ?? 'default'\n    })\n    const size = computed(() => {\n      return groupState?.size ?? props.size\n    })\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(type.value)]: type.value !== 'default',\n        [nh.bm('simple')]: !props.ghost && props.simple,\n        [nh.bm('ghost')]: props.ghost,\n        [nh.bm('text')]: props.text,\n        [nh.bm('dashed')]: props.dashed,\n        [nh.bm('disabled')]: props.disabled,\n        [nh.bm('loading')]: props.loading,\n        [nh.bm('circle')]: props.circle,\n        [nh.bm('icon-only')]: isIconOnly.value,\n        [nh.bm(size.value)]: size.value !== 'default',\n        [nh.bm('pulsing')]: pulsing.value,\n        [nh.bm('first')]: index.value === 1,\n        [nh.bm('last')]: isLast.value,\n        [nh.bm('block')]: props.block,\n      }\n    })\n    const colorMap = computed(() => {\n      if (!props.color) return null\n\n      const rootStyle = isClient ? getComputedStyle(document.documentElement) : null\n      const black = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-black')) || '#000')\n      const white = parseColorToRgba(rootStyle?.getPropertyValue(nh.nv('color-white')) || '#fff')\n      const baseColor = parseColorToRgba(props.color)\n\n      return {\n        base: baseColor.toString(),\n        light2: mixColor(white, baseColor, 0.2).toString(),\n        dark1: mixColor(black, baseColor, 0.1).toString(),\n        opacity1: adjustAlpha(baseColor, 0.9).toString(),\n        opacity3: adjustAlpha(baseColor, 0.7).toString(),\n        opacity4: adjustAlpha(baseColor, 0.6).toString(),\n        opacity7: adjustAlpha(baseColor, 0.3).toString(),\n        opacity8: adjustAlpha(baseColor, 0.2).toString(),\n        white8: adjustAlpha(white, 0.2).toString(),\n        white9: adjustAlpha(white, 0.1).toString(),\n      }\n    })\n    const style = computed<Record<string, string>>(() => {\n      if (!colorMap.value) return {}\n\n      const {\n        base,\n        light2,\n        dark1,\n        opacity1,\n        opacity3,\n        opacity4,\n        opacity7,\n        opacity8,\n        white8,\n        white9,\n      } = colorMap.value\n      const { cvm, gnv } = nh\n\n      if (props.ghost) {\n        return cvm({\n          color: base,\n          'color-hover': base,\n          'color-focus': base,\n          'color-active': base,\n          'color-disabled': base,\n          'bg-color': 'transparent',\n          'bg-color-hover': white9,\n          'bg-color-focus': white9,\n          'bg-color-active': white8,\n          'bg-color-disabled': 'transparent',\n          'b-color': base,\n          'b-color-hover': light2,\n          'b-color-focus': light2,\n          'b-color-active': dark1,\n          'b-color-disabled': gnv('content-color-disabled'),\n          'pulse-s-color': dark1,\n        })\n      }\n\n      if (props.simple) {\n        return cvm({\n          color: base,\n          'color-hover': base,\n          'color-focus': gnv('color-white'),\n          'color-active': gnv('color-white'),\n          'color-disabled': gnv('content-color-disabled'),\n          'bg-color': opacity8,\n          'bg-color-hover': opacity7,\n          'bg-color-focus': opacity1,\n          'bg-color-active': opacity1,\n          'bg-color-disabled': gnv('fill-color-background'),\n          'b-color': opacity4,\n          'b-color-hover': opacity4,\n          'b-color-focus': opacity3,\n          'b-color-active': opacity3,\n          'b-color-disabled': gnv('border-color-light-1'),\n          'pulse-s-color': dark1,\n        })\n      }\n\n      if (props.text || props.dashed) {\n        return cvm({\n          ...(props.dashed\n            ? {\n              'b-color': base,\n              'b-color-hover': light2,\n              'b-color-focus': light2,\n              'b-color-active': dark1,\n              'pulse-s-color': dark1,\n            }\n            : {}),\n          color: base,\n          'color-hover': light2,\n          'color-focus': light2,\n          'color-active': dark1,\n          'color-disabled': opacity4,\n        })\n      }\n\n      return cvm({\n        color: gnv('color-white'),\n        'color-hover': gnv('color-white'),\n        'color-focus': gnv('color-white'),\n        'color-active': gnv('color-white'),\n        'color-disabled': gnv('content-color-disabled'),\n        'bg-color': base,\n        'bg-color-hover': light2,\n        'bg-color-focus': light2,\n        'bg-color-active': dark1,\n        'bg-color-disabled': gnv('fill-color-background'),\n        'b-color': base,\n        'b-color-hover': light2,\n        'b-color-focus': light2,\n        'b-color-active': dark1,\n        'b-color-disabled': gnv('border-color-light-1'),\n        'pulse-s-color': dark1,\n      })\n    })\n\n    if (groupState) {\n      const state = reactive({ index, isLast })\n\n      groupState.increaseItem(state)\n\n      onBeforeUnmount(() => {\n        groupState.decreaseItem(state)\n      })\n    }\n\n    function handleClick(event: MouseEvent) {\n      if (props.disabled || props.loading || event.button) return\n\n      if (!props.noPulse) {\n        pulsing.value = false\n        requestAnimationFrame(() => {\n          pulsing.value = true\n        })\n      }\n\n      emitEvent(props.onClick, event)\n    }\n\n    function handleAnimationEnd() {\n      pulsing.value = false\n    }\n\n    function renderLoadingIcon() {\n      return (\n        <div class={[nh.be('icon'), nh.bem('icon', 'loading')]}>\n          {renderSlot(slots, 'loading', undefined, () => [\n            <Renderer renderer={props.slots.loading}>\n              <Icon\n                {...icons.value.loading}\n                effect={props.loadingEffect || icons.value.loading.effect}\n                icon={props.loadingIcon || icons.value.loading.icon}\n                label={'loading'}\n              ></Icon>\n            </Renderer>,\n          ])}\n        </div>\n      )\n    }\n\n    function renderSingleIcon() {\n      return props.loading ? (\n        renderLoadingIcon()\n      ) : (\n        <div class={nh.be('icon')}>\n          {renderSlot(slots, 'icon', undefined, () => [\n            <Renderer renderer={props.slots.icon}>\n              {props.icon ? <Icon icon={props.icon}></Icon> : null}\n            </Renderer>,\n          ])}\n        </div>\n      )\n    }\n\n    function renderCollapseIcon() {\n      if (props.icon || slots.icon || props.slots.icon) {\n        return props.loading ? (\n          renderLoadingIcon()\n        ) : (\n          <div class={nh.be('icon')}>\n            {renderSlot(slots, 'icon', undefined, () => [\n              <Renderer renderer={props.slots.icon}>\n                <Icon icon={props.icon}></Icon>\n              </Renderer>,\n            ])}\n          </div>\n        )\n      }\n\n      return (\n        <CollapseTransition appear horizontal fade-effect>\n          {props.loading && renderLoadingIcon()}\n        </CollapseTransition>\n      )\n    }\n\n    function renderBadge() {\n      const badgeType = props.disabled\n        ? 'disabled'\n        : props.type === 'default'\n          ? 'error'\n          : props.type\n\n      return (\n        <Badge\n          inherit\n          class={[nh.be('badge'), nh.bem('badge', badgeType)]}\n          content={props.badge}\n          type={badgeType}\n        ></Badge>\n      )\n    }\n\n    return () => {\n      const Button = (props.tag || 'button') as any\n\n      return (\n        <Button\n          type={props.buttonType}\n          class={className.value}\n          role={'button'}\n          style={style.value}\n          disabled={props.disabled}\n          onClick={handleClick}\n          onAnimationend={handleAnimationEnd}\n        >\n          {isIconOnly.value ? renderSingleIcon() : renderCollapseIcon()}\n          {!isIconOnly.value &&\n            renderSlot(slots, 'default', undefined, () => [\n              <Renderer renderer={props.slots.default}></Renderer>,\n            ])}\n          {!isIconOnly.value && (props.badge || props.badge === 0) ? renderBadge() : null}\n        </Button>\n      )\n    }\n  },\n})\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { buttonGroupProps } from './props'\nimport { GROUP_STATE, buttonTypes } from './symbol'\n\nimport type { ButtonState, ButtonType } from './symbol'\n\ndefineOptions({ name: 'ButtonGroup' })\n\nconst _props = defineProps(buttonGroupProps)\nconst props = useProps('buttonGroup', _props, {\n  size: null,\n  type: {\n    default: 'default' as ButtonType,\n    validator: (value: ButtonType) => buttonTypes.includes(value),\n  },\n  circle: false,\n})\n\ndefineSlots<{ default: () => any }>()\n\nconst nh = useNameHelper('button-group')\n\nconst itemStates = reactive(new Set<ButtonState>())\nconst size = toRef(props, 'size')\nconst type = toRef(props, 'type')\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('circle')]: props.circle,\n  }\n})\nconst itemList = computed(() => Array.from(itemStates))\n\nconst refreshIndexes = debounceMinor(() => {\n  for (let i = 0, len = itemList.value.length; i < len; ++i) {\n    const item = itemList.value[i]\n\n    item.index = i + 1\n    item.isLast = i === len - 1\n  }\n})\n\nprovide(\n  GROUP_STATE,\n  reactive({\n    size,\n    type,\n    increaseItem,\n    decreaseItem,\n    refreshIndexes,\n  }),\n)\n\nfunction increaseItem(item: ButtonState) {\n  itemStates.add(item)\n  refreshIndexes()\n}\n\nfunction decreaseItem(item: ButtonState) {\n  itemStates.delete(item)\n  refreshIndexes()\n}\n</script>\n\n<template>\n  <div :class=\"className\" role=\"group\">\n    <slot></slot>\n  </div>\n</template>\n","import { computed, defineComponent, h, inject, provide } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { columnProps } from './props'\nimport { ROW_STATE, breakPoints } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { ClassType } from '@vexip-ui/config'\n\ntype LayerProp = 'span' | 'offset' | 'pull' | 'push' | 'order'\n\nconst colProps: LayerProp[] = ['span', 'offset', 'pull', 'push', 'order']\n\nexport default defineComponent({\n  name: 'Column',\n  props: columnProps,\n  setup(_props, { slots }) {\n    const props = useProps('column', _props, {\n      tag: 'div',\n      span: 24,\n      offset: null,\n      push: null,\n      pull: null,\n      order: null,\n      xs: null,\n      sm: null,\n      md: null,\n      lg: null,\n      xl: null,\n      xxl: null,\n      flex: null,\n      useFlex: null,\n    })\n\n    const rowState = inject(ROW_STATE, null)\n    const nh = useNameHelper('column')\n\n    provide(ROW_STATE, null!)\n\n    const className = computed(() => {\n      const columnFlex = (props.useFlex || rowState?.columnFlex) && {\n        ...(rowState?.columnFlex || {}),\n        ...(props.useFlex\n          ? props.useFlex === true\n            ? { justify: 'start', align: 'top' }\n            : props.useFlex\n          : {}),\n      }\n      const className: ClassType = [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('flex')]: columnFlex,\n          [nh.bm('inherit')]: rowState || props.inherit,\n        },\n      ]\n\n      if (columnFlex) {\n        columnFlex.justify && className.push(nh.bm(columnFlex.justify))\n        columnFlex.align && className.push(nh.bm(columnFlex.align))\n      }\n\n      colProps.forEach(prop => {\n        if (typeof props[prop] === 'number') {\n          className.push(\n            prop === 'span' ? nh.bm(`${props[prop]}`) : nh.bm(`${prop}-${props[prop]}`),\n          )\n        }\n      })\n\n      breakPoints.forEach(size => {\n        const sizeProp = props[size]\n\n        if (!sizeProp && sizeProp !== 0) return\n\n        if (typeof sizeProp === 'number') {\n          className.push(nh.bm(`${size}-${sizeProp}`))\n        } else if (typeof sizeProp === 'object') {\n          colProps.forEach(prop => {\n            const value = sizeProp[prop]\n\n            if (!value && value !== 0) return\n\n            className.push(prop === 'span' ? nh.bm(`${value}`) : nh.bm(`${prop}-${value}`))\n          })\n        }\n      })\n\n      return className\n    })\n    const style = computed(() => {\n      const flex = props.flex\n      const style: CSSProperties = {}\n\n      if (rowState) {\n        if (typeof rowState.gap === 'number') {\n          style.paddingInlineStart = style.paddingInlineEnd = `${rowState.gap / 2}px`\n        } else if (Array.isArray(rowState.gap)) {\n          style.paddingInlineStart = style.paddingInlineEnd = `${rowState.gap[0] / 2}px`\n        }\n      }\n\n      if (flex) {\n        if (typeof flex === 'number') {\n          style.flex = `${flex} ${flex} auto`\n        } else if (typeof flex === 'string') {\n          if (/^\\d+\\s\\d+\\s\\d+(\\w+)?$/.test(flex)) {\n            style.flex = flex\n          } else {\n            style.flex = flex === 'auto' ? '1 1 auto' : `0 0 ${flex}`\n          }\n        }\n      }\n\n      return style\n    })\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value,\n        },\n        {\n          default: () => slots.default && slots.default(),\n        },\n      )\n  },\n})\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { NumberInputControlType, NumberInputEmptyType, NumberInputSlots } from './symbol'\n\nexport const numberInputProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('numberInput'),\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  /**\n   * 格式化后显示\n   */\n  formatter: Function as PropType<(value: number) => number | string>,\n  value: Number,\n  min: Number,\n  max: Number,\n  placeholder: String,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  autocomplete: booleanStringProp,\n  precision: Number,\n  readonly: booleanProp,\n  step: Number,\n  ctrlStep: Number,\n  shiftStep: Number,\n  altStep: Number,\n  disabled: booleanProp,\n  controlClass: classProp,\n  debounce: booleanProp,\n  delay: Number,\n  clearable: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  sync: booleanProp,\n  syncStep: booleanProp,\n  controlType: String as PropType<NumberInputControlType>,\n  emptyType: String as PropType<NumberInputEmptyType>,\n  controlAttrs: Object as PropType<Record<string, any>>,\n  name: String,\n  slots: Object as PropType<NumberInputSlots>,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onInput: eventProp<(value: number) => void>(),\n  onChange: eventProp<(value: number) => void>(),\n  onEnter: eventProp(),\n  onClear: eventProp(),\n  onPrefixClick: eventProp<(event: MouseEvent) => void>(),\n  onSuffixClick: eventProp<(event: MouseEvent) => void>(),\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\n})\n\nexport type NumberInputProps = ExtractPropTypes<typeof numberInputProps>\nexport type NumberInputCProps = ConfigurableProps<NumberInputProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, onMounted, ref, toRef, watch } from 'vue'\n\nimport { useHover, useModifier, useTimerRecord } from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useId,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport {\n  boundRange,\n  debounce,\n  isNull,\n  isValidNumber,\n  minus,\n  plus,\n  throttle,\n  toFixed,\n  toNumber,\n} from '@vexip-ui/utils'\nimport { numberInputProps } from './props'\n\nimport type { NumberInputSlots } from './symbol'\n\ntype InputEventType = 'input' | 'change'\n\nconst isEmpty = (value: unknown) => !value && value !== 0\nconst isNullOrNaN = (value: unknown) => isNull(value) || Number.isNaN(value)\n\ndefineOptions({ name: 'NumberInput' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<number>(focus)\n\nconst _props = defineProps(numberInputProps)\nconst props = useProps('numberInput', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  // 格式化后显示\n  formatter: {\n    default: null,\n    isFunc: true,\n  },\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  min: -Infinity,\n  max: Infinity,\n  placeholder: null,\n  autofocus: false,\n  spellcheck: false,\n  autocomplete: false,\n  precision: -1,\n  readonly: false,\n  step: 1,\n  ctrlStep: 100,\n  shiftStep: 10,\n  altStep: 0.1,\n  disabled: () => disabled.value,\n  controlClass: null,\n  debounce: false,\n  delay: null,\n  clearable: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  sync: false,\n  syncStep: false,\n  controlType: 'right',\n  emptyType: 'NaN',\n  controlAttrs: null,\n  name: {\n    default: '',\n    static: true,\n  },\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<NumberInputSlots>()\n\nconst nh = useNameHelper('number-input')\nconst locale = useLocale('numberInput', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst { timeout, interval } = useTimerRecord()\n\nconst focused = ref(false)\nconst currentValue = ref<string | number>(isEmpty(props.value) ? getEmptyValue() : props.value)\nconst inputting = ref(false)\nconst plusHolding = ref(false)\nconst minusHolding = ref(false)\n\nconst control = ref<HTMLInputElement>()\nconst { wrapper, isHover } = useHover()\n\nuseModifier({\n  target: control,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    emitEvent(props.onKeyDown, event)\n\n    if (modifier.up || modifier.down) {\n      event.preventDefault()\n      event.stopPropagation()\n\n      if ((modifier.up && plusDisabled.value) || (modifier.down && minusDisabled.value)) {\n        return\n      }\n\n      changeStep(\n        modifier.up ? 'plus' : 'minus',\n        event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\n      )\n      modifier.resetAll()\n    } else if (modifier.enter) {\n      event.preventDefault()\n      event.stopPropagation()\n      emitChangeEvent('change')\n      modifier.resetAll()\n    }\n  },\n  onKeyUp: event => {\n    emitEvent(props.onKeyUp, event)\n\n    if (event.key === 'Enter') {\n      handleEnter()\n    }\n  },\n})\n\nlet lastValue: number\n\nconst controlId = useId()\nconst outOfRange = computed(() => {\n  return (\n    !isNullOrNaN(currentValue.value) &&\n    (toNumber(currentValue.value) > props.max || toNumber(currentValue.value) < props.min)\n  )\n})\nconst isReadonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\nconst plusDisabled = computed(() => {\n  return (\n    props.disabled ||\n    isReadonly.value ||\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) >= props.max)\n  )\n})\nconst minusDisabled = computed(() => {\n  return (\n    props.disabled ||\n    isReadonly.value ||\n    (!isNullOrNaN(currentValue.value) && toNumber(currentValue.value) <= props.min)\n  )\n})\nconst className = computed(() => {\n  const [display, fade] = (props.controlType || 'right').split('-')\n\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.ns('input-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('focused')]: inputting.value,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: isReadonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm(`control-${display}`)]: display !== 'right',\n      [nh.bm('control-fade')]: fade,\n      [nh.bm('out-of-range')]: outOfRange.value,\n    },\n  ]\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.prefix || props.slots.prefix)\n})\nconst hasSuffix = computed(() => {\n  return !!(slots.suffix || props.suffix || props.slots.suffix)\n})\nconst preciseNumber = computed(() => {\n  return !inputting.value &&\n    typeof currentValue.value === 'number' &&\n    !Number.isNaN(currentValue.value) &&\n    props.precision >= 0\n    ? toFixed(currentValue.value, props.precision)\n    : currentValue.value\n})\nconst formattedValue = computed(() => {\n  if (isNullOrNaN(preciseNumber.value) || typeof preciseNumber.value !== 'number')\n    return preciseNumber.value ?? ''\n\n  return !inputting.value && typeof props.formatter === 'function'\n    ? props.formatter(preciseNumber.value as number)\n    : preciseNumber.value.toString()\n})\nconst hasValue = computed(() => !!(currentValue.value || currentValue.value === 0))\nconst showClear = computed(() => {\n  return !props.disabled && !isReadonly.value && props.clearable && isHover.value && hasValue.value\n})\nconst autoComplete = computed(() => {\n  return typeof props.autocomplete === 'boolean'\n    ? props.autocomplete\n      ? 'on'\n      : 'off'\n    : props.autocomplete\n})\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n  ? debounce(handleChange, delay || 100)\n  : throttle(handleChange, delay || 16)\n\nwatch(\n  () => props.value,\n  value => {\n    if (value !== lastValue) {\n      parseValue()\n    }\n  },\n  { immediate: true },\n)\nwatch(inputting, value => {\n  if (!value) {\n    setInputValue(inputting.value ? currentValue.value : formattedValue.value)\n  }\n})\n\nonMounted(() => {\n  setInputValue(inputting.value ? currentValue.value : formattedValue.value)\n})\n\ndefineExpose({\n  idFor,\n  focused,\n  isHover,\n  outOfRange,\n  preciseNumber,\n  formattedValue,\n  isReadonly,\n  wrapper,\n  input: control,\n  focus,\n  blur: () => control.value?.blur(),\n})\n\nfunction setInputValue(value?: number | string | null) {\n  if (control.value) {\n    control.value.value = isNullOrNaN(value) ? '' : value!.toString()\n  }\n}\n\nfunction boundValueRange(value: number) {\n  return boundRange(value, props.min, props.max)\n}\n\nfunction parseValue() {\n  let value = props.value\n  value = inputting.value ? value : isValidNumber(value, true) ? toNumber(value) : getEmptyValue()\n\n  if (props.precision >= 0 && !isNullOrNaN(value)) {\n    value = toFixed(boundValueRange(value), props.precision)\n  }\n\n  currentValue.value = value\n  lastValue = value\n\n  setInputValue(inputting.value ? value : formattedValue.value)\n}\n\nfunction focus(options?: FocusOptions) {\n  control.value?.focus(options)\n}\n\nfunction handleFocus(event: FocusEvent) {\n  focused.value = true\n  inputting.value = true\n  emitEvent(props.onFocus, event)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  focused.value = false\n\n  setTimeout(() => {\n    if (!focused.value) {\n      inputting.value = false\n      emitEvent(props.onBlur, event)\n      emitChangeEvent('change')\n    }\n  }, 120)\n}\n\nfunction handleHold(type: 'plus' | 'minus', event: PointerEvent) {\n  const disabled = type === 'plus' ? plusDisabled : minusDisabled\n  const change = type === 'plus' ? plusNumber : minusNumber\n\n  if (event.button !== 0 || disabled.value) return\n\n  change(event)\n  document.addEventListener('pointerup', cancelStep)\n  document.addEventListener('touchend', cancelStep)\n  clearTimeout(timeout.step)\n  clearInterval(interval.step)\n  ;(type === 'plus' ? plusHolding : minusHolding).value = true\n\n  timeout.step = setTimeout(() => {\n    interval.step = setInterval(() => {\n      disabled.value ? cancelStep() : change(event)\n    }, 32)\n  }, 500)\n}\n\nfunction cancelStep() {\n  document.removeEventListener('pointerup', cancelStep)\n  document.removeEventListener('touchend', cancelStep)\n  clearTimeout(timeout.step)\n  clearInterval(interval.step)\n\n  plusHolding.value = false\n  minusHolding.value = false\n}\n\nfunction plusNumber(event: PointerEvent) {\n  !focused.value && focus()\n  changeStep(\n    'plus',\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\n  )\n}\n\nfunction minusNumber(event: PointerEvent) {\n  !focused.value && focus()\n  changeStep(\n    'minus',\n    event.ctrlKey ? 'ctrl' : event.shiftKey ? 'shift' : event.altKey ? 'alt' : undefined,\n  )\n}\n\nfunction changeStep(type: 'plus' | 'minus', modifier?: 'ctrl' | 'shift' | 'alt') {\n  if (props.disabled || isReadonly.value) return\n\n  let value = currentValue.value || 0\n  let step!: number\n\n  switch (modifier) {\n    case 'ctrl':\n      step = props.ctrlStep\n      break\n    case 'shift':\n      step = props.shiftStep\n      break\n    case 'alt':\n      step = props.altStep\n      break\n    default:\n      step = props.step\n  }\n\n  const stringValue = value.toString().trim()\n\n  if (stringValue.endsWith('.')) {\n    value = toNumber(stringValue.slice(0, -1))\n  }\n\n  if (type === 'plus') {\n    value = plus(value, step)\n  } else {\n    value = minus(value, step)\n  }\n\n  setValue(value, props.syncStep && !props.sync ? 'change' : 'input')\n}\n\nfunction handleChange(event: Event) {\n  const type = event.type as InputEventType\n  const stringValue = (event.target as HTMLInputElement).value\n\n  let value = stringValue.trim()\n\n  // to rollback invalid value to empty in `<input>` when change\n  if (type === 'change' && stringValue && !isValidNumber(stringValue, true)) {\n    const floatValue = parseFloat(stringValue)\n\n    if (Number.isNaN(floatValue)) {\n      value = ''\n    } else {\n      value = floatValue.toString()\n    }\n  }\n\n  inputting.value = type === 'input'\n\n  setValue(value, type)\n}\n\nfunction setValue(value: string | number, type: InputEventType, sync = props.sync) {\n  if (type !== 'input') {\n    currentValue.value = isEmpty(value) ? getEmptyValue() : toNumber(value)\n  } else {\n    currentValue.value = value\n  }\n\n  setInputValue(currentValue.value)\n  emitChangeEvent(type, sync)\n}\n\nfunction getEmptyValue() {\n  switch (props.emptyType) {\n    case 'undefined':\n      return undefined! as number\n    case 'null':\n      return null! as number\n    default:\n      return NaN\n  }\n}\n\nfunction emitChangeEvent(type: InputEventType, sync = props.sync) {\n  type = type === 'input' ? 'input' : 'change'\n\n  if (type === 'change') {\n    const empty = isEmpty(currentValue.value)\n    const value = empty ? getEmptyValue() : toNumber(currentValue.value)\n\n    let boundValue = empty ? value : boundValueRange(toNumber(value))\n\n    if (!empty && props.precision >= 0) {\n      boundValue = toFixed(boundValue, props.precision)\n    }\n\n    const changed = !Object.is(boundValue, value)\n\n    if (!empty) {\n      currentValue.value = boundValue\n    }\n\n    if (!sync && Object.is(lastValue, boundValue)) {\n      !Object.is(props.value, value) && emit('update:value', boundValue)\n      return\n    }\n\n    lastValue = boundValue\n\n    if (!sync || changed) {\n      emit('update:value', boundValue)\n      setFieldValue(boundValue)\n    }\n\n    emitEvent(props.onChange, boundValue)\n\n    if (!sync || changed) {\n      validateField()\n    }\n  } else {\n    const value = parseFloat(currentValue.value as string)\n    const empty = Number.isNaN(value)\n\n    let boundValue = empty ? getEmptyValue() : boundValueRange(toNumber(value))\n\n    if (!empty && props.precision >= 0) {\n      boundValue = toFixed(boundValue, props.precision)\n    }\n\n    const emitUpdate = sync && !Object.is(lastValue, boundValue)\n\n    if (emitUpdate) {\n      lastValue = boundValue\n\n      emit('update:value', boundValue)\n      setFieldValue(boundValue)\n    }\n\n    emitEvent(props.onInput, value)\n\n    if (emitUpdate) {\n      validateField()\n    }\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || isReadonly.value) return\n\n  setValue(NaN, 'change', false)\n  emitEvent(props.onClear)\n  clearField(NaN)\n  focus()\n}\n\nfunction handleEnter() {\n  emitEvent(props.onEnter)\n}\n\nfunction handlePrefixClick(event: MouseEvent) {\n  emitEvent(props.onPrefixClick, event)\n}\n\nfunction handleSuffixClick(event: MouseEvent) {\n  emitEvent(props.onSuffixClick, event)\n}\n\nfunction handleKeyPress(event: KeyboardEvent) {\n  emitEvent(props.onKeyPress, event)\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    @click=\"control?.focus()\"\n  >\n    <div\n      v-if=\"hasPrefix\"\n      :class=\"[nh.be('icon'), nh.be('prefix')]\"\n      :style=\"{ color: props.prefixColor }\"\n      @click=\"handlePrefixClick\"\n    >\n      <slot name=\"prefix\">\n        <Renderer :renderer=\"props.slots.prefix\">\n          <Icon :icon=\"props.prefix\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <input\n      v-bind=\"props.controlAttrs\"\n      :id=\"controlId\"\n      ref=\"control\"\n      :class=\"[nh.be('control'), props.controlAttrs?.class, props.controlClass]\"\n      type=\"text\"\n      :autofocus=\"props.autofocus\"\n      :autocomplete=\"autoComplete\"\n      :spellcheck=\"props.spellcheck\"\n      :disabled=\"props.disabled\"\n      :readonly=\"isReadonly\"\n      :placeholder=\"props.placeholder ?? locale.placeholder\"\n      :name=\"props.name || props.controlAttrs?.name\"\n      role=\"spinbutton\"\n      :title=\"outOfRange ? locale.outOfRange : undefined\"\n      :aria-valuenow=\"preciseNumber\"\n      :aria-valuemin=\"props.min !== -Infinity ? props.min : undefined\"\n      :aria-valuemax=\"props.max !== Infinity ? props.max : undefined\"\n      :aria-labelledby=\"labelId\"\n      @submit.prevent\n      @blur=\"handleBlur\"\n      @focus=\"handleFocus\"\n      @keypress=\"handleKeyPress\"\n      @input=\"handleInput\"\n      @change=\"handleChange\"\n    />\n    <div\n      v-if=\"hasSuffix\"\n      :class=\"[nh.be('icon'), nh.be('suffix')]\"\n      :style=\"{\n        color: props.suffixColor,\n        opacity: showClear || props.loading ? '0%' : ''\n      }\"\n      @click=\"handleSuffixClick\"\n    >\n      <slot name=\"suffix\">\n        <Renderer :renderer=\"props.slots.suffix\">\n          <Icon :icon=\"props.suffix\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <div\n      v-else-if=\"props.clearable || props.loading\"\n      :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n    ></div>\n    <Transition :name=\"nh.ns('fade')\" appear>\n      <button\n        v-if=\"showClear\"\n        :class=\"[nh.be('icon'), nh.be('clear')]\"\n        type=\"button\"\n        tabindex=\"-1\"\n        :aria-label=\"locale.ariaLabel.clear\"\n        @click.stop=\"handleClear\"\n      >\n        <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\n      </button>\n      <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n        <Icon\n          v-bind=\"icons.loading\"\n          :effect=\"props.loadingEffect || icons.loading.effect\"\n          :icon=\"props.loadingIcon || icons.loading.icon\"\n          label=\"loading\"\n        ></Icon>\n      </div>\n    </Transition>\n    <template v-if=\"props.controlType !== 'none'\">\n      <div\n        :class=\"{\n          [nh.be('plus')]: true,\n          [nh.bem('plus', 'disabled')]: plusDisabled,\n          [nh.bem('plus', 'holding')]: plusHolding\n        }\"\n        role=\"button\"\n        :aria-label=\"locale.ariaLabel.increase\"\n        :aria-labelledby=\"labelId\"\n        :aria-controls=\"controlId\"\n        @pointerdown.prevent=\"handleHold('plus', $event)\"\n        @mousedown.prevent\n        @touchstart.prevent\n      >\n        <Icon v-bind=\"icons.angleUp\" :scale=\"+(icons.angleUp.scale || 1) * 0.8\"></Icon>\n      </div>\n      <div\n        :class=\"{\n          [nh.be('minus')]: true,\n          [nh.bem('minus', 'disabled')]: minusDisabled,\n          [nh.bem('minus', 'holding')]: minusHolding\n        }\"\n        :aria-label=\"locale.ariaLabel.decrease\"\n        :aria-labelledby=\"labelId\"\n        :aria-controls=\"controlId\"\n        @pointerdown.prevent=\"handleHold('minus', $event)\"\n        @mousedown.prevent\n        @touchstart.prevent\n      >\n        <Icon v-bind=\"icons.angleDown\" :scale=\"+(icons.angleDown.scale || 1) * 0.8\"></Icon>\n      </div>\n    </template>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { toAttrValue } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { MonthIndex, WeekIndex } from './symbol'\n\nconst props = defineProps({\n  date: {\n    type: Date,\n    required: true,\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['calendar']>,\n    required: true,\n  },\n  selected: {\n    type: Boolean,\n    default: false,\n  },\n  hovered: {\n    type: Boolean,\n    default: false,\n  },\n  isPrev: {\n    type: Boolean,\n    default: false,\n  },\n  isNext: {\n    type: Boolean,\n    default: false,\n  },\n  isToday: {\n    type: Boolean,\n    default: false,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  inRange: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst emit = defineEmits(['select', 'hover'])\n\ndefineSlots<{\n  item: (params: {\n    date: Date,\n    label: string,\n    selected: boolean,\n    hovered: boolean,\n    isPrev: boolean,\n    isNext: boolean,\n    isToday: boolean,\n    disabled: boolean,\n    inRange: boolean,\n  }) => any,\n  default: (params: {\n    date: Date,\n    label: string,\n    selected: boolean,\n    hovered: boolean,\n    isPrev: boolean,\n    isNext: boolean,\n    isToday: boolean,\n    disabled: boolean,\n    inRange: boolean,\n  }) => any,\n}>()\n\nconst nh = useNameHelper('calendar')\n\nconst label = computed(() => {\n  const label = props.locale.ariaLabel\n  const year = props.date.getFullYear()\n  const month = (props.date.getMonth() + 1) as MonthIndex\n  const day = props.date.getDate()\n  const weekDay = (props.date.getDay() || 7) as WeekIndex\n\n  return `${label[`week${weekDay}`]}, ${label[`month${month}`]} ${day}, ${year}`\n})\n</script>\n\n<template>\n  <div\n    :class=\"nh.be('cell')\"\n    role=\"gridcell\"\n    :aria-selected=\"toAttrValue(selected)\"\n    :aria-disabled=\"toAttrValue(disabled)\"\n    @mouseenter=\"emit('hover', date)\"\n  >\n    <slot\n      name=\"item\"\n      :date=\"date\"\n      :label=\"label\"\n      :selected=\"selected\"\n      :hovered=\"hovered\"\n      :is-prev=\"isPrev\"\n      :is-next=\"isNext\"\n      :is-today=\"isToday\"\n      :disabled=\"disabled\"\n      :in-range=\"inRange\"\n    >\n      <div\n        :class=\"{\n          [nh.be('index')]: true,\n          [nh.bem('index', 'selected')]: selected,\n          [nh.bem('index', 'hovered')]: hovered,\n          [nh.bem('index', 'prev')]: isPrev,\n          [nh.bem('index', 'next')]: isNext,\n          [nh.bem('index', 'today')]: isToday,\n          [nh.bem('index', 'disabled')]: disabled,\n          [nh.bem('index', 'in-range')]: inRange,\n        }\"\n        tabindex=\"0\"\n        role=\"button\"\n        :aria-label=\"label\"\n        :aria-disabled=\"toAttrValue(disabled)\"\n        @click=\"emit('select', date)\"\n        @keydown.enter.prevent=\"emit('select', date)\"\n        @keydown.space.prevent=\"emit('select', date)\"\n      >\n        <slot\n          :date=\"date\"\n          :label=\"label\"\n          :selected=\"selected\"\n          :hovered=\"hovered\"\n          :is-prev=\"isPrev\"\n          :is-next=\"isNext\"\n          :is-today=\"isToday\"\n          :disabled=\"disabled\"\n          :in-range=\"inRange\"\n        >\n          <div :class=\"nh.be('index-inner')\">\n            {{ date.getDate() }}\n          </div>\n        </slot>\n      </div>\n    </slot>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type { CalendarPanelSlots, CalendarSlots } from './symbol'\n\nexport const calendarPanelProps = buildProps({\n  locale: localeProp('calendar'),\n  /**\n   * 选中的日期\n   */\n  value: [Number, String, Date, Array] as PropType<Dateable | Dateable[]>,\n  /**\n   * 当前日历显示的年份\n   */\n  year: Number,\n  /**\n   * 当前日历显示的月份 (1 ~ 12)\n   */\n  month: Number,\n  /**\n   * 头部星期显示的内容，数量须为 7 个\n   */\n  weekDays: Array as PropType<string[]>,\n  weekStart: Number,\n  today: [Number, String, Date] as PropType<Dateable>,\n  disabledDate: Function as PropType<(data: Date) => boolean>,\n  valueType: String as PropType<'start' | 'end'>,\n  min: [Number, String, Date] as PropType<Dateable>,\n  max: [Number, String, Date] as PropType<Dateable>,\n  range: booleanProp,\n  selectRow: booleanProp,\n  slots: Object as PropType<CalendarPanelSlots>,\n  onSelect: eventProp<(date: Date) => void>(),\n  onHover: eventProp<(date: Date | null) => void>(),\n})\n\nexport type CalendarPanelProps = ExtractPropTypes<typeof calendarPanelProps>\nexport type CalendarPanelCProps = ConfigurableProps<CalendarPanelProps>\n\nexport const calendarProps = buildProps({\n  locale: localeProp('calendar'),\n  value: [Number, String, Date] as PropType<Dateable | Dateable[]>,\n  year: Number,\n  /**\n   * 当前日历显示的月份 (1 ~ 12)\n   */\n  month: Number,\n  /**\n   * 头部星期显示的内容，数量须为 7 个\n   */\n  weekDays: Array as PropType<string[]>,\n  weekStart: Number,\n  today: [Number, String, Date] as PropType<Dateable>,\n  disabledDate: Function as PropType<(data: Date) => boolean>,\n  slots: Object as PropType<CalendarSlots>,\n  onSelect: eventProp<(date: Date) => void>(),\n  onYearChange: eventProp<(year: number, month: number) => void>(),\n  onMonthChange: eventProp<(year: number, month: number) => void>(),\n})\n\nexport type CalendarProps = ExtractPropTypes<typeof calendarProps>\nexport type CalendarCProps = ConfigurableProps<CalendarProps>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, ref, toRef, watch } from 'vue'\n\nimport CalendarCell from './calendar-cell.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useHover } from '@vexip-ui/hooks'\nimport {\n  debounceMinor,\n  differenceDays,\n  differenceWeeks,\n  endOfDay,\n  rangeDate,\n  startOfDay,\n  startOfWeek,\n  toFalse,\n} from '@vexip-ui/utils'\nimport { calendarPanelProps } from './props'\n\nimport type { Dateable } from '@vexip-ui/utils'\nimport type { CalendarPanelSlots, WeekIndex } from './symbol'\n\ndefineOptions({ name: 'CalendarPanel' })\n\nconst _props = defineProps(calendarPanelProps)\nconst props = useProps('calendarBase', _props, {\n  locale: null,\n  value: {\n    default: null,\n    static: true,\n  },\n  year: () => new Date().getFullYear(),\n  month: {\n    default: () => new Date().getMonth() + 1,\n    validator: value => value > 0 && value <= 12,\n  },\n  weekDays: {\n    default: null,\n    validator: value => !value || value.length === 0 || value.length === 7,\n  },\n  weekStart: {\n    default: 0,\n    validator: value => value >= 0 && value < 7,\n  },\n  today: {\n    default: () => new Date(),\n    validator: value => !Number.isNaN(+new Date(value)),\n  },\n  disabledDate: {\n    default: toFalse,\n    isFunc: true,\n  },\n  valueType: {\n    default: 'start',\n    validator: value => value === 'start' || value === 'end',\n  },\n  min: null,\n  max: null,\n  range: null,\n  selectRow: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<CalendarPanelSlots>()\n\nconst nh = useNameHelper('calendar')\n\nconst startValue = ref<Date | null>(null)\nconst endValue = ref<Date | null>(null)\nconst dateRange = ref<Date[]>([])\nconst hoveredDate = ref<Date | null>(null)\n\nconst { wrapper: body, isHover } = useHover()\nconst locale = useLocale('calendar', toRef(props, 'locale'))\n\nconst min = computed(() => (props.min ? +startOfDay(props.min) : -Infinity))\nconst max = computed(() => (props.max ? +endOfDay(props.max) : Infinity))\nconst reversed = computed(() => {\n  if (Number.isNaN(min.value) || Number.isNaN(max.value)) {\n    return false\n  }\n\n  return min.value > max.value\n})\n\nconst updateDateRange = debounceMinor(setDateRange)\n\nparseValue(props.value)\nsetDateRange()\n\nwatch(() => props.value, parseValue)\nwatch([() => props.year, () => props.month, () => props.weekStart], updateDateRange)\nwatch(isHover, value => {\n  if (!value) {\n    hoveredDate.value = null\n  }\n})\nwatch(hoveredDate, value => {\n  emitEvent(props.onHover, value)\n})\n\ndefineExpose({\n  startValue,\n  endValue,\n  body,\n  isSelected,\n  isHovered,\n  isPrevMonth,\n  isNextMonth,\n  isDisabled,\n  isToday,\n  isInRange,\n})\n\nfunction getWeekLabel(index: number) {\n  return props.weekDays?.[index] || locale.value[`week${(index || 7) as WeekIndex}`]\n}\n\nfunction setDateRange() {\n  dateRange.value = rangeDate(\n    startOfWeek(new Date(props.year, props.month - 1, 1), props.weekStart),\n    42,\n  )\n}\n\nfunction parseValue(value: Dateable | Dateable[]) {\n  if (!Array.isArray(value)) {\n    value = [value, value]\n  }\n\n  for (let i = 0; i < 2; ++i) {\n    const date = new Date(value[i] ?? '')\n\n    if (i === 0) {\n      startValue.value = Number.isNaN(+date) ? null : date\n    } else {\n      endValue.value = Number.isNaN(+date) ? null : date\n    }\n\n    if (!props.range) break\n  }\n}\n\nfunction isSameRow(current: Date, target: Date) {\n  return props.selectRow && differenceWeeks(current, target) === 0\n}\n\nfunction isSelected(date: Date) {\n  if (!date || (!startValue.value && !endValue.value)) {\n    return false\n  }\n\n  return !!(\n    (startValue.value &&\n      (!differenceDays(date, startValue.value) || isSameRow(date, startValue.value))) ||\n    (endValue.value && (!differenceDays(date, endValue.value) || isSameRow(date, endValue.value)))\n  )\n}\n\nfunction isDisabled(date: Date) {\n  if (typeof props.disabledDate === 'function') {\n    if (props.disabledDate(date)) {\n      return true\n    }\n  }\n\n  const time = date.getTime()\n\n  if (reversed.value) {\n    if (time > max.value && time < min.value) {\n      return true\n    }\n  } else {\n    if (time < min.value || time > max.value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction isHovered(date: Date) {\n  if (!date || !hoveredDate.value) {\n    return false\n  }\n\n  return !differenceDays(date, hoveredDate.value) || isSameRow(date, hoveredDate.value)\n}\n\nfunction isPrevMonth(date: Date) {\n  const { year, month } = props\n  const dateYear = date.getFullYear()\n  const dateMonth = date.getMonth()\n\n  return dateYear < year || (dateYear === year && dateMonth < month - 1)\n}\n\nfunction isNextMonth(date: Date) {\n  const { year, month } = props\n  const dateYear = date.getFullYear()\n  const dateMonth = date.getMonth()\n\n  return dateYear > year || (dateYear === year && dateMonth > month - 1)\n}\n\nfunction isToday(date: Date) {\n  return differenceDays(date, props.today) === 0\n}\n\nfunction handleSelect(date: Date) {\n  if (isDisabled(date)) {\n    return\n  }\n\n  if (props.valueType === 'start') {\n    startValue.value = date\n  } else {\n    endValue.value = date\n  }\n\n  emitEvent(props.onSelect, date)\n  emit('update:value', date)\n}\n\nfunction handleHover(date: Date) {\n  hoveredDate.value = isDisabled(date) ? null : date\n}\n\nfunction isInRange(date: Date) {\n  if (!hoveredDate.value && !startValue.value && !endValue.value) {\n    return false\n  }\n\n  let min: number\n  let max: number\n\n  if (startValue.value && endValue.value) {\n    const startTime = startValue.value.getTime()\n    const endTime = endValue.value.getTime()\n\n    min = Math.min(startTime, endTime)\n    max = Math.max(startTime, endTime)\n  } else if (hoveredDate.value) {\n    if (!startValue.value && !endValue.value) return false\n\n    const hoveredTime = hoveredDate.value.getTime()\n\n    if (!startValue.value || !endValue.value) {\n      const selectedTime = (startValue.value ?? endValue.value)!.getTime()\n\n      min = Math.min(hoveredTime, selectedTime)\n      max = Math.max(hoveredTime, selectedTime)\n    } else {\n      const startTime = startValue.value.getTime()\n      const endTime = endValue.value.getTime()\n      const minTime = Math.min(startTime, endTime)\n      const maxTime = Math.max(startTime, endTime)\n\n      min = Math.min(hoveredTime, minTime)\n      max = Math.max(hoveredTime, maxTime)\n    }\n  } else {\n    return false\n  }\n\n  return date.getTime() >= min && date.getTime() <= max\n}\n</script>\n\n<template>\n  <div\n    :class=\"[\n      nh.be('panel'),\n      nh.bs('vars'),\n      props.selectRow && nh.bem('panel', 'select-row'),\n      props.inherit && nh.bem('panel', 'inherit')\n    ]\"\n    role=\"grid\"\n  >\n    <slot name=\"header\">\n      <Renderer :renderer=\"props.slots.header\"></Renderer>\n    </slot>\n    <div :class=\"[nh.be('row'), nh.bem('row', 'week')]\" aria-hidden>\n      <div v-for=\"week in 7\" :key=\"week\" :class=\"[nh.be('cell'), nh.be('cell-week')]\">\n        <slot\n          name=\"week\"\n          :label=\"getWeekLabel((week - 1 + props.weekStart) % 7)\"\n          :index=\"week - 1\"\n          :week=\"(week - 1 + props.weekStart) % 7\"\n        >\n          <Renderer\n            :renderer=\"props.slots.week\"\n            :data=\"{\n              label: getWeekLabel((week - 1 + props.weekStart) % 7),\n              index: week - 1,\n              week: (week - 1 + props.weekStart) % 7\n            }\"\n          >\n            <div :class=\"nh.be('index')\">\n              {{ getWeekLabel((week - 1 + props.weekStart) % 7) }}\n            </div>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n    <div ref=\"body\" :class=\"nh.be('body')\">\n      <div v-for=\"row in 6\" :key=\"row\" :class=\"nh.be('row')\">\n        <CalendarCell\n          v-for=\"cell in 7\"\n          :key=\"(row - 1) * 7 + cell\"\n          :date=\"dateRange[(row - 1) * 7 + cell - 1]\"\n          :locale=\"locale\"\n          :selected=\"isSelected(dateRange[(row - 1) * 7 + cell - 1])\"\n          :hovered=\"isHovered(dateRange[(row - 1) * 7 + cell - 1])\"\n          :is-prev=\"isPrevMonth(dateRange[(row - 1) * 7 + cell - 1])\"\n          :is-next=\"isNextMonth(dateRange[(row - 1) * 7 + cell - 1])\"\n          :is-today=\"isToday(dateRange[(row - 1) * 7 + cell - 1])\"\n          :disabled=\"isDisabled(dateRange[(row - 1) * 7 + cell - 1])\"\n          :in-range=\"props.range && isInRange(dateRange[(row - 1) * 7 + cell - 1])\"\n          @hover=\"handleHover\"\n          @select=\"handleSelect\"\n        >\n          <template\n            v-if=\"$slots.item || props.slots.item\"\n            #item=\"{\n              date,\n              label,\n              selected,\n              hovered,\n              isPrev,\n              isNext,\n              isToday: matchedToday,\n              disabled,\n              inRange\n            }\"\n          >\n            <slot\n              name=\"item\"\n              :date=\"date\"\n              :label=\"label\"\n              :selected=\"selected\"\n              :hovered=\"hovered\"\n              :is-prev=\"isPrev\"\n              :is-next=\"isNext\"\n              :is-today=\"matchedToday\"\n              :disabled=\"disabled\"\n              :in-range=\"inRange\"\n            >\n              <Renderer\n                :renderer=\"props.slots.item\"\n                :data=\"{\n                  date,\n                  label,\n                  selected,\n                  hovered,\n                  isPrev,\n                  isNext,\n                  isToday: matchedToday,\n                  disabled,\n                  inRange\n                }\"\n              ></Renderer>\n            </slot>\n          </template>\n          <template v-if=\"$slots.itemContent || props.slots.itemContent\" #default=\"cellParams\">\n            <slot name=\"itemContent\" v-bind=\"cellParams\">\n              <Renderer :renderer=\"props.slots.itemContent\" :data=\"cellParams\"></Renderer>\n            </slot>\n          </template>\n        </CalendarCell>\n      </div>\n    </div>\n    <slot name=\"footer\">\n      <Renderer :renderer=\"props.slots.footer\"></Renderer>\n    </slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Column } from '@/components/column'\nimport { NumberInput } from '@/components/number-input'\nimport { Renderer } from '@/components/renderer'\nimport { Row } from '@/components/row'\n\nimport { ref, toRef, watch } from 'vue'\n\nimport CalendarPanel from './calendar-panel.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { calendarProps } from './props'\n\nimport type { CalendarSlots } from './symbol'\n\ndefineOptions({ name: 'Calendar' })\n\nconst _props = defineProps(calendarProps)\nconst props = useProps('calendar', _props, {\n  locale: null,\n  value: {\n    default: null,\n    static: true,\n  },\n  year: () => new Date().getFullYear(),\n  month: {\n    default: () => new Date().getMonth() + 1,\n    validator: value => value > 0 && value <= 12,\n  },\n  weekDays: {\n    default: null,\n    validator: value => !value || value.length === 0 || value.length === 7,\n  },\n  weekStart: {\n    default: 0,\n    validator: value => value >= 0 && value < 7,\n  },\n  today: {\n    default: () => new Date(),\n    validator: value => !Number.isNaN(+new Date(value)),\n  },\n  disabledDate: {\n    default: () => false,\n    isFunc: true,\n  },\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value', 'update:year', 'update:month'])\n\ndefineSlots<CalendarSlots>()\n\nconst nh = useNameHelper('calendar')\nconst locale = useLocale('calendar', toRef(props, 'locale'))\n\nconst calendarValue = ref(props.value)\nconst calendarYear = ref(props.year)\nconst calendarMonth = ref(props.month)\n\nwatch(\n  () => props.value,\n  value => {\n    calendarValue.value = value\n  },\n)\nwatch(\n  () => props.year,\n  value => {\n    calendarYear.value = value\n  },\n)\nwatch(\n  () => props.month,\n  value => {\n    calendarMonth.value = value\n  },\n)\n\ndefineExpose({ calendarValue, calendarYear, calendarMonth })\n\nfunction formatYearInput(value: number) {\n  return `${value}${locale.value.year}`\n}\n\nfunction formatMonthInput(value: number) {\n  return `${value}${locale.value.month}`\n}\n\nfunction isDisabled(date: Date) {\n  if (typeof props.disabledDate !== 'function') {\n    return true\n  }\n\n  return props.disabledDate(date)\n}\n\nfunction handleClick(date: Date) {\n  if (!isDisabled(date)) {\n    calendarValue.value = date\n  }\n\n  emitEvent(props.onSelect, date)\n  emit('update:value', date)\n}\n\nfunction handleYearChange(value: number) {\n  calendarYear.value = value\n\n  emitEvent(props.onYearChange, value, calendarMonth.value)\n  emit('update:year', value)\n}\n\nfunction handleMonthChange(value: number) {\n  calendarMonth.value = value\n\n  emitEvent(props.onMonthChange, calendarYear.value, value)\n  emit('update:month', value)\n}\n</script>\n\n<template>\n  <CalendarPanel\n    v-model:value=\"calendarValue\"\n    :inherit=\"props.inherit\"\n    :class=\"[nh.b()]\"\n    :year=\"calendarYear\"\n    :month=\"calendarMonth\"\n    :week-start=\"props.weekStart\"\n    :today=\"props.today\"\n    :disabled-date=\"props.disabledDate\"\n  >\n    <template #header>\n      <slot name=\"header\">\n        <Renderer :renderer=\"props.slots.header\">\n          <Row inherit :class=\"nh.be('header')\" align=\"middle\">\n            <Column flex=\"auto\">\n              <slot name=\"title\">\n                <Renderer :renderer=\"props.slots.title\"></Renderer>\n              </slot>\n            </Column>\n            <Column :class=\"nh.be('actions')\" flex=\"0\">\n              <NumberInput\n                :value=\"calendarYear\"\n                inherit\n                :class=\"nh.be('year-input')\"\n                :min=\"1970\"\n                :max=\"2300\"\n                :formatter=\"formatYearInput\"\n                @change=\"handleYearChange\"\n              ></NumberInput>\n              <NumberInput\n                :value=\"calendarMonth\"\n                inherit\n                :class=\"nh.be('month-input')\"\n                :min=\"1\"\n                :max=\"12\"\n                :formatter=\"formatMonthInput\"\n                @change=\"handleMonthChange\"\n              ></NumberInput>\n            </Column>\n          </Row>\n        </Renderer>\n      </slot>\n    </template>\n    <template #week=\"{ label, index, week }\">\n      <div :class=\"nh.be('week')\">\n        <slot\n          name=\"week\"\n          :label=\"label\"\n          :index=\"index\"\n          :week=\"week\"\n        >\n          <Renderer :renderer=\"props.slots.week\" :data=\"{ label, index, week }\">\n            <div :class=\"nh.be('week-value')\">\n              {{ label }}\n            </div>\n          </Renderer>\n        </slot>\n      </div>\n    </template>\n    <template #item=\"{ date, label, selected, hovered, isPrev, isNext, isToday, disabled }\">\n      <div\n        :class=\"{\n          [nh.be('date')]: true,\n          [nh.bem('date', 'selected')]: selected,\n          [nh.bem('date', 'prev')]: isPrev,\n          [nh.bem('date', 'next')]: isNext,\n          [nh.bem('date', 'today')]: isToday,\n          [nh.bem('date', 'disabled')]: disabled\n        }\"\n        tabindex=\"0\"\n        @click=\"handleClick(date)\"\n        @keydown.enter.prevent=\"handleClick(date)\"\n        @keydown.space.prevent=\"handleClick(date)\"\n      >\n        <div :class=\"nh.be('date-header')\">\n          <slot\n            name=\"date\"\n            :selected=\"selected\"\n            :hovered=\"hovered\"\n            :date=\"date\"\n            :is-prev=\"isPrev\"\n            :is-next=\"isNext\"\n            :is-today=\"isToday\"\n            :disabled=\"disabled\"\n          >\n            <Renderer\n              :renderer=\"props.slots.date\"\n              :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\n            >\n              <div :class=\"nh.be('date-value')\" :aria-label=\"label\">\n                {{ date.getDate() }}\n              </div>\n            </Renderer>\n          </slot>\n        </div>\n        <div :class=\"nh.be('date-content')\">\n          <slot\n            name=\"content\"\n            :selected=\"selected\"\n            :hovered=\"hovered\"\n            :date=\"date\"\n            :is-prev=\"isPrev\"\n            :is-next=\"isNext\"\n            :is-today=\"isToday\"\n            :disabled=\"disabled\"\n          >\n            <Renderer\n              :renderer=\"props.slots.content\"\n              :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\n            ></Renderer>\n          </slot>\n        </div>\n      </div>\n    </template>\n  </CalendarPanel>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  sizeProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { CaptchaHollowProcess, CaptchaHollowType } from './hollow-paths'\nimport type {\n  CaptchaBeforeTest,\n  CaptchaSliderSlots,\n  CaptchaSlots,\n  CaptchaType,\n  SuccessEvent,\n} from './symbol'\n\nexport const captchaProps = buildProps({\n  type: String as PropType<CaptchaType>,\n  slideTarget: [Number, Array] as PropType<number | number[]>,\n  title: String,\n  tip: String,\n  successTip: String,\n  failTip: String,\n  image: [String, Function] as PropType<string | (() => Promise<string>)>,\n  tolerance: Number,\n  canvasSize: Array as PropType<number[]>,\n  refreshIcon: iconProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  onBeforeTest: Function as PropType<CaptchaBeforeTest>,\n  texts: Array as PropType<string[]>,\n  failLimit: Number,\n  remotePoint: booleanProp,\n  useTrigger: booleanProp,\n  triggerSize: sizeProp,\n  triggerText: String,\n  transfer: booleanStringProp,\n  hideDelay: Number,\n  hollowShape: [String, Function] as PropType<CaptchaHollowType | CaptchaHollowProcess>,\n  slots: Object as PropType<CaptchaSlots>,\n  onSuccess: eventProp<EventListener<SuccessEvent>>(),\n  onFail: eventProp(),\n  onDragStart: eventProp<(percent: number) => void>(),\n  onDrag: eventProp<(percent: number) => void>(),\n  onDragEnd: eventProp<(percent: number) => void>(),\n  onRefresh: eventProp(),\n})\n\nexport type CaptchaProps = ExtractPropTypes<typeof captchaProps>\nexport type CaptchaCProps = ConfigurableProps<ExtractPropTypes<typeof captchaProps>>\n\nexport const captchaSliderProps = buildProps({\n  size: sizeProp,\n  target: Number,\n  tip: String,\n  successTip: String,\n  tolerance: Number,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  onBeforeTest: Function as PropType<(percent: number, matched: boolean) => unknown>,\n  slots: Object as PropType<CaptchaSliderSlots>,\n  onSuccess: eventProp<(percent: number) => void>(),\n  onFail: eventProp(),\n  onDragStart: eventProp<(percent: number) => void>(),\n  onDrag: eventProp<(percent: number) => void>(),\n  onDragEnd: eventProp<(percent: number) => void>(),\n})\n\nexport type CaptchaSliderProps = ExtractPropTypes<typeof captchaSliderProps>\nexport type CaptchaSliderCProps = ConfigurableProps<ExtractPropTypes<typeof captchaSliderProps>>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\nimport { captchaSliderProps } from './props'\n\nimport type { CaptchaSliderSlots } from './symbol'\n\ndefineOptions({ name: 'CaptchaSlider' })\n\nconst { idFor, labelId, disabled, loading, size, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<boolean>(focus)\n\nconst _props = defineProps(captchaSliderProps)\nconst props = useProps('captcha', _props, {\n  size: createSizeProp(size),\n  target: {\n    default: 100,\n    validator: value => value >= 0 && value <= 100,\n  },\n  tip: null,\n  successTip: null,\n  tolerance: {\n    default: 1,\n    validator: value => value >= 0,\n  },\n  disabled: () => disabled.value,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  onBeforeTest: {\n    default: null,\n    isFunc: true,\n  },\n  slots: () => ({}),\n})\n\ndefineSlots<CaptchaSliderSlots>()\n\nconst nh = useNameHelper('captcha')\nconst locale = useLocale('captcha')\nconst icons = useIcons()\n\nconst { timer } = useSetTimeout()\n\nconst currentLeft = ref(0)\nconst testing = ref(false)\nconst resetting = ref(false)\nconst isSuccess = ref(false)\nconst testLoading = ref(false)\n\nconst track = ref<HTMLElement>()\n\nconst readonly = computed(() => props.disabled || (props.loading && props.loadingLock))\n\nlet widthLimit: number\n\nconst { target: trigger, moving: dragging } = useMoving({\n  onStart: (_, event) => {\n    if (\n      testing.value ||\n      readonly.value ||\n      !track.value ||\n      !trigger.value ||\n      isSuccess.value ||\n      resetting.value ||\n      event.button > 0\n    ) {\n      return false\n    }\n\n    widthLimit = track.value.getBoundingClientRect().width\n    currentLeft.value = 0\n    verifyPosition()\n    trigger.value.focus()\n    emitEvent(props.onDragStart, currentLeft.value)\n  },\n  onMove: state => {\n    if (testing.value || readonly.value || isSuccess.value || resetting.value) {\n      return false\n    }\n\n    currentLeft.value = (state.deltaX / widthLimit) * 100\n    verifyPosition()\n    emitEvent(props.onDrag, currentLeft.value)\n  },\n  onEnd: async () => {\n    if (testing.value || readonly.value) return\n\n    testing.value = true\n\n    const matched = matchTarget(currentLeft.value)\n    let customResult: unknown\n\n    if (typeof props.onBeforeTest === 'function') {\n      nextTick(() => {\n        testLoading.value = true\n      })\n      customResult = await props.onBeforeTest(currentLeft.value, matched)\n      nextTick(() => {\n        testLoading.value = false\n      })\n    }\n\n    if (currentLeft.value && (customResult === false || (!matched && customResult !== true))) {\n      resetting.value = true\n      currentLeft.value = 0\n      isSuccess.value = false\n\n      setFieldValue(false)\n      emitEvent(props.onFail)\n    } else if (matched || customResult === true) {\n      isSuccess.value = true\n\n      if (customResult && !matched) {\n        resetting.value = true\n        currentLeft.value = props.target\n      }\n\n      setFieldValue(true)\n      emitEvent(props.onSuccess, currentLeft.value)\n    }\n\n    validateField()\n    trigger.value?.blur()\n    emitEvent(props.onDragEnd, currentLeft.value)\n\n    clearTimeout(timer.testing)\n    testing.value = false\n  },\n})\n\nconst isLoading = computed(() => props.loading || testLoading.value)\nconst className = computed(() => {\n  const baseCls = nh.be('slider')\n\n  return {\n    [baseCls]: true,\n    [nh.bs('vars')]: true,\n    [`${baseCls}--success`]: isSuccess.value,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--loading`]: isLoading.value,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n  }\n})\nconst fillerStyle = computed(() => {\n  return {\n    [nh.cv('filler-transition')]: resetting.value ? 'transform 250ms ease' : undefined,\n    transform: `scaleX(${currentLeft.value / 100})`,\n  }\n})\nconst tipStyle = computed(() => {\n  return {\n    [nh.cv('tip-transition')]: resetting.value ? 'background-position 250ms ease' : undefined,\n    backgroundPosition: `-${currentLeft.value}%`,\n  }\n})\nconst triggerStyle = computed(() => {\n  return {\n    left: `${currentLeft.value}%`,\n    [nh.cv('trigger-transition')]: resetting.value ? 'left 250ms ease' : undefined,\n  }\n})\n\nwatch(\n  () => getFieldValue(),\n  value => {\n    if (!value) {\n      reset()\n    } else {\n      if (!matchTarget(currentLeft.value)) {\n        resetting.value = true\n        currentLeft.value = props.target\n      }\n\n      isSuccess.value = true\n    }\n  },\n)\nwatch(readonly, value => value && reset())\n\ndefineExpose({\n  idFor,\n  currentLeft,\n  resetting,\n  isSuccess,\n  dragging,\n  isLoading,\n  track,\n  trigger,\n  focus,\n  reset,\n})\n\nfunction verifyPosition() {\n  currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n}\n\nfunction reset() {\n  resetting.value = true\n  currentLeft.value = 0\n  isSuccess.value = false\n}\n\nfunction afterReset() {\n  resetting.value = false\n}\n\nfunction matchTarget(value: number) {\n  return Math.abs(props.target - value) <= props.tolerance\n}\n\nfunction focus(options?: FocusOptions) {\n  trigger.value?.focus(options)\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    tabindex=\"-1\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n  >\n    <div\n      :class=\"{\n        [nh.be('filler')]: true,\n        [nh.bem('filler', 'loading')]: isLoading,\n        [nh.bem('filler', 'success')]: isSuccess\n      }\"\n      :style=\"fillerStyle\"\n    ></div>\n    <div\n      :class=\"{\n        [nh.be('tip')]: true,\n        [nh.bem('tip', 'focused')]: dragging,\n        [nh.bem('tip', 'loading')]: isLoading,\n        [nh.bem('tip', 'success')]: isSuccess\n      }\"\n      :style=\"tipStyle\"\n    >\n      <slot name=\"tip\" :success=\"isSuccess\">\n        <Renderer :renderer=\"props.slots.tip\" :data=\"{ success: isSuccess }\">\n          {{ isSuccess ? (props.successTip ?? locale.success) : (props.tip ?? locale.slideEnd) }}\n        </Renderer>\n      </slot>\n    </div>\n    <div ref=\"track\" :class=\"nh.be('track')\">\n      <div\n        ref=\"trigger\"\n        :class=\"{\n          [nh.be('trigger')]: true,\n          [nh.bem('trigger', 'focused')]: dragging,\n          [nh.bem('trigger', 'loading')]: isLoading,\n          [nh.bem('trigger', 'success')]: isSuccess\n        }\"\n        tabindex=\"0\"\n        :style=\"triggerStyle\"\n        @transitionend=\"afterReset\"\n      >\n        <slot name=\"trigger\" :success=\"isSuccess\">\n          <Renderer :renderer=\"props.slots.trigger\" :data=\"{ success: isSuccess }\">\n            <Icon v-if=\"isSuccess\" v-bind=\"icons.check\"></Icon>\n            <Icon\n              v-else-if=\"isLoading\"\n              v-bind=\"icons.loading\"\n              :effect=\"props.loadingEffect || icons.loading.effect\"\n              :icon=\"props.loadingIcon || icons.loading.icon\"\n            ></Icon>\n            <Icon v-else v-bind=\"icons.anglesRight\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n","export interface CaptchaHollowOptions {\n  ctx: CanvasRenderingContext2D,\n  /**\n   * The x coordinate of slide target center\n   */\n  x: number,\n  /**\n   * The y coordinate of slide target center\n   */\n  y: number,\n  /**\n   * Current canvas width\n   */\n  width: number,\n  /**\n   * Current canvas height\n   */\n  height: number,\n}\n\n/**\n * Specify the react of the hollow's shape\n */\nexport type CaptchaHollowResult = [x: number, y: number, width: number, height: number]\nexport type CaptchaHollowProcess = (options: CaptchaHollowOptions) => CaptchaHollowResult\n\nexport type CaptchaHollowType = 'square' | 'puzzle' | 'shield' | 'heart'\n\nexport const squarePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x - halfSide, y - halfSide)\n  ctx.lineTo(x + halfSide, y - halfSide)\n  ctx.lineTo(x + halfSide, y + halfSide)\n  ctx.lineTo(x - halfSide, y + halfSide)\n  ctx.closePath()\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\n}\n\nexport const puzzlePath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.2\n  const halfSide = side * 0.5\n  const left = x - halfSide\n  const top = y - halfSide\n  const radius = side * 0.2\n\n  ctx.moveTo(left, top)\n  ctx.arc(left + halfSide, top - radius + 2, radius, 0.72 * Math.PI, 2.26 * Math.PI)\n  ctx.lineTo(left + side, top)\n  ctx.arc(left + side + radius - 2, top + halfSide, radius, 1.21 * Math.PI, 2.78 * Math.PI)\n  ctx.lineTo(left + side, top + side)\n  ctx.lineTo(left, top + side)\n  ctx.arc(left + radius - 2, top + halfSide, radius + 0.4, 2.76 * Math.PI, 1.24 * Math.PI, true)\n  ctx.lineTo(left, top)\n\n  return [x - halfSide - 2, y - side * 0.9 - 2, side * 1.4 + 4, side * 1.4 + 4]\n}\n\nexport const shieldPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x, y - halfSide)\n  ctx.bezierCurveTo(\n    x,\n    y - halfSide + side * 0.05,\n    x - halfSide + side * 0.3,\n    y - halfSide * 0.5 + side * 0.1,\n    x - halfSide,\n    y - halfSide * 0.7,\n  )\n  ctx.bezierCurveTo(x - halfSide, y + side * 0.3, x - side * 0.1, y + halfSide, x, y + halfSide)\n  ctx.bezierCurveTo(\n    x + side * 0.1,\n    y + halfSide,\n    x + halfSide,\n    y + side * 0.3,\n    x + halfSide,\n    y - halfSide * 0.7,\n  )\n  ctx.bezierCurveTo(\n    x + halfSide - side * 0.3,\n    y - halfSide * 0.5 + side * 0.1,\n    x,\n    y - halfSide + side * 0.05,\n    x,\n    y - halfSide,\n  )\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side + 4]\n}\n\nexport const heartPath: CaptchaHollowProcess = ({ ctx, x, y, width, height }) => {\n  const side = Math.min(width, height) * 0.25\n  const halfSide = side * 0.5\n\n  ctx.moveTo(x, y - side * 0.25)\n  ctx.bezierCurveTo(\n    x,\n    y - side * 0.4,\n    x - side * 0.1,\n    y - halfSide,\n    x - halfSide * 0.5,\n    y - halfSide,\n  )\n  ctx.bezierCurveTo(\n    x - halfSide * 0.5 - side * 0.1,\n    y - halfSide,\n    x - halfSide,\n    y - side * 0.4,\n    x - halfSide,\n    y - side * 0.2,\n  )\n  ctx.bezierCurveTo(\n    x - halfSide,\n    y + side * 0.2,\n    x - side * 0.05,\n    y + halfSide * 0.8,\n    x,\n    y + halfSide * 0.8,\n  )\n  ctx.bezierCurveTo(\n    x + side * 0.05,\n    y + halfSide * 0.8,\n    x + halfSide,\n    y + side * 0.2,\n    x + halfSide,\n    y - side * 0.2,\n  )\n  ctx.bezierCurveTo(\n    x + halfSide,\n    y - side * 0.4,\n    x + halfSide * 0.5 + side * 0.1,\n    y - halfSide,\n    x + halfSide * 0.5,\n    y - halfSide,\n  )\n  ctx.bezierCurveTo(x + side * 0.1, y - halfSide, x, y - side * 0.4, x, y - side * 0.25)\n\n  return [x - halfSide - 2, y - halfSide - 2, side + 4, side * 0.9 + 4]\n}\n","import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Spin } from '@/components/spin'\nimport { Tooltip } from '@/components/tooltip'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  Transition,\n  TransitionGroup,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  reactive,\n  ref,\n  renderSlot,\n  shallowRef,\n  toRef,\n  watch,\n} from 'vue'\n\nimport CaptchaSlider from './captcha-slider.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { createSlotRender, useSetTimeout } from '@vexip-ui/hooks'\nimport {\n  ensureArray,\n  isClient,\n  isNull,\n  nextFrameOnce,\n  random,\n  randomHardColor,\n} from '@vexip-ui/utils'\nimport { captchaProps } from './props'\nimport { heartPath, puzzlePath, shieldPath, squarePath } from './hollow-paths'\n\nimport type { CaptchaSliderExposed } from '@/components/captcha-slider'\nimport type { SuccessEvent } from './symbol'\n\nexport default defineComponent({\n  name: 'Captcha',\n  props: captchaProps,\n  emits: ['update:visible'],\n  setup(_props, { slots, expose }) {\n    const { idFor, labelId, disabled, loading, validateField, setFieldValue } = useFieldStore<\n      number | number[]\n    >(focus)\n\n    const props = useProps('captcha', _props, {\n      type: 'slide',\n      slideTarget: {\n        default: null,\n        validator: value => {\n          if (isNull(value)) return true\n\n          if (Array.isArray(value)) {\n            return value[0] >= 0 && value[0] <= 100 && value[1] >= 0 && value[1] <= 100\n          } else {\n            return value >= 0 && value <= 100\n          }\n        },\n      },\n      title: null,\n      tip: null,\n      successTip: null,\n      failTip: null,\n      image: null,\n      tolerance: {\n        default: 1,\n        validator: value => value >= 0,\n      },\n      canvasSize: () => [1000, 600],\n      refreshIcon: createIconProp(),\n      disabled: () => disabled.value,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingEffect: null,\n      onBeforeTest: {\n        default: null,\n        isFunc: true,\n      },\n      texts: {\n        default: () => [],\n        validator: value => !value.find(text => text.length > 1),\n      },\n      failLimit: 0,\n      remotePoint: false,\n      useTrigger: false,\n      triggerSize: createSizeProp(),\n      triggerText: null,\n      transfer: false,\n      hideDelay: {\n        default: 3000,\n        validator: value => value >= 0,\n      },\n      hollowShape: {\n        default: squarePath,\n        isFunc: true,\n      },\n      slots: () => ({}),\n    })\n\n    const nh = useNameHelper('captcha')\n    const locale = useLocale('captcha')\n    const icons = useIcons()\n\n    const { timer } = useSetTimeout()\n\n    const currentTarget = ref(parseTarget(props.slideTarget))\n    const dragging = ref(false)\n    const pointers = reactive<number[][]>([])\n    const testLoading = ref(false)\n    const success = ref(false)\n    const failed = ref(false)\n    const failedCount = ref(0)\n    const visible = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const canvas = ref<HTMLCanvasElement>()\n    const subCanvas = ref<HTMLCanvasElement>()\n    const slider = ref<CaptchaSliderExposed>()\n\n    const track = computed(() => slider.value?.track)\n\n    const isSuccess = computed(() => !!slider.value?.isSuccess || success.value)\n    const currentLeft = computed(() => slider.value?.currentLeft || 0)\n    const resetting = computed(() => slider.value?.resetting)\n\n    const usedTarget = computed(() => currentTarget.value[0])\n\n    const imageLoading = ref(false)\n    const imagePromise = shallowRef(Promise.resolve())\n\n    const pointerTargets: number[][] = []\n\n    const fontRate = 0.108\n\n    let imageLoaded = false\n    let image: HTMLImageElement | undefined\n    let memoryCanvas: HTMLCanvasElement | undefined\n\n    const isLoading = computed(() => props.loading || imageLoading.value || testLoading.value)\n    const failLocked = computed(() => props.failLimit > 0 && failedCount.value >= props.failLimit)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(props.type),\n        {\n          [nh.bm('success')]: isSuccess.value,\n          [nh.bm('fail')]: !isSuccess.value && failed.value,\n          [nh.bm('dragging')]: dragging.value,\n          [nh.bm('disabled')]: props.disabled,\n          [nh.bm('loading')]: isLoading.value,\n          [nh.bm('fail-locked')]: failLocked.value,\n        },\n      ]\n    })\n    const subCanvasStyle = computed(() => {\n      return {\n        left: `${currentLeft.value}%`,\n        [nh.cv('trigger-transition')]: resetting.value ? 'left 250ms ease' : undefined,\n      }\n    })\n    const canvasSize = computed(() => {\n      return [props.canvasSize[0] || 1000, props.canvasSize[1] || 600]\n    })\n    const actionLocked = computed(() => props.disabled || isSuccess.value || isLoading.value)\n\n    watch(\n      () => props.slideTarget,\n      value => {\n        currentTarget.value = parseTarget(value)\n      },\n    )\n    watch([() => props.image, wrapper], async () => {\n      image = undefined\n      await (imagePromise.value = loadImage())\n      drawImageNextFrame()\n    })\n    watch(\n      [\n        currentTarget,\n        () => props.canvasSize[0],\n        () => props.canvasSize[1],\n        () => props.hollowShape,\n      ],\n      drawImageNextFrame,\n    )\n    watch(\n      [() => props.type, () => props.remotePoint],\n      () => {\n        if (\n          props.type !== 'slide' &&\n          props.remotePoint &&\n          typeof props.onBeforeTest !== 'function'\n        ) {\n          console.warn(\n            \"[vexip-ui:Captcha] You should specify 'on-before-test' prop to valid the captcha \" +\n              \"if you are using the 'point' type in remote\",\n          )\n        }\n      },\n      { immediate: true },\n    )\n    watch(\n      [() => props.type, () => props.texts, () => props.texts.length, () => props.remotePoint],\n      () => {\n        if (props.type === 'point' && props.texts.length && !props.remotePoint && image) {\n          drawImageNextFrame()\n        }\n      },\n    )\n    watch(visible, async value => {\n      if (value) {\n        await (imagePromise.value = loadImage())\n        drawImageNextFrame()\n      }\n    })\n    watch(isSuccess, value => {\n      if (value && props.useTrigger && visible.value) {\n        clearTimeout(timer.hideTrigger)\n\n        timer.hideTrigger = setTimeout(() => {\n          visible.value = false\n        }, props.hideDelay)\n      }\n    })\n\n    onMounted(async () => {\n      await (imagePromise.value = loadImage())\n      drawImage()\n    })\n\n    expose({\n      dragging,\n      resetting,\n      isSuccess,\n      imageLoading,\n      imagePromise,\n      wrapper,\n      canvas,\n      subCanvas,\n      slider,\n      reset,\n    })\n\n    // 避免多次触发时发生竞态问题\n    let loadFlag: string\n\n    async function loadImage() {\n      if (image) return\n\n      imageLoading.value = true\n      loadFlag = `${Date.now()}${Math.round(Math.random() * 10e6)}`\n\n      const flag = loadFlag\n      const src = typeof props.image === 'function' ? await props.image() : props.image\n\n      await new Promise<void>(resolve => {\n        if (!isClient || flag !== loadFlag || !src) {\n          resolve()\n          return\n        }\n\n        image = new Image()\n        imageLoaded = false\n        image.src = src\n\n        if (src.trim().startsWith('data:image')) {\n          imageLoaded = true\n          resolve()\n        } else {\n          image.onload = () => {\n            imageLoaded = true\n            resolve()\n          }\n        }\n      }).finally(() => {\n        imageLoading.value = false\n      })\n    }\n\n    function drawImageWithTexts() {\n      const canvasEl = canvas.value\n      const ctx = canvasEl?.getContext?.('2d')\n\n      if (!image || !canvasEl || !ctx) return\n\n      const { width, height } = canvasEl\n\n      ctx.drawImage(image, 0, 0, width, height)\n\n      if (!props.texts.length || props.remotePoint) return\n\n      pointerTargets.length = 0\n\n      const fontSize = Math.max(width, height) * fontRate\n\n      ctx.textBaseline = 'middle'\n      ctx.textAlign = 'center'\n      ctx.font = `bold ${fontSize}px sans-serif`\n      ctx.lineWidth = 2\n      ctx.strokeStyle = '#fff'\n\n      const drawText = (\n        text: string,\n        x: number,\n        y: number,\n        radian = 0,\n        color = randomHardColor(),\n      ) => {\n        ctx.save()\n        ctx.translate(x, y)\n        radian && ctx.rotate(radian * Math.PI)\n        ctx.fillStyle = color\n        ctx.fillText(text, 0, 0)\n        ctx.strokeText(text, 0, 0)\n        ctx.restore()\n      }\n\n      const metrics = ctx.measureText(props.texts[0])\n      const xLimit = Math.max(fontSize, metrics.width) * 1.2\n      const yLimit =\n        Math.max(fontSize, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent) * 1.2\n\n      let prevX = -2 * fontSize\n      let prevY = -2 * fontSize\n\n      for (const text of props.texts) {\n        let x = prevX\n        let y = prevY\n\n        while (Math.abs(x - prevX) < xLimit && Math.abs(y - prevY) < yLimit) {\n          x = width * 0.1 + Math.random() * width * 0.8\n          y = height * 0.1 + Math.random() * height * 0.8\n        }\n\n        prevX = x\n        prevY = y\n\n        pointerTargets.push([(x / width) * 100, (y / height) * 100])\n        drawText(text, x, y, Math.random() * 2)\n      }\n    }\n\n    function getHollowProcess() {\n      if (typeof props.hollowShape === 'function') return props.hollowShape\n\n      switch (props.hollowShape) {\n        case 'puzzle':\n          return puzzlePath\n        case 'shield':\n          return shieldPath\n        case 'heart':\n          return heartPath\n        default:\n          return squarePath\n      }\n    }\n\n    function drawImage() {\n      const canvasEl = canvas.value\n      const ctx = canvasEl?.getContext?.('2d')\n      const subCanvasEl = subCanvas.value\n      const subCtx = subCanvasEl?.getContext?.('2d')\n\n      if (!image || !imageLoaded || !canvasEl || !ctx || !props.image) return\n\n      if (props.type === 'point') {\n        drawImageWithTexts()\n        return\n      }\n\n      if (!subCanvasEl || !subCtx || !track.value) return\n\n      if (!memoryCanvas) {\n        if (!isClient) return\n\n        memoryCanvas = document.createElement('canvas')\n      }\n\n      memoryCanvas.width = canvasEl.width\n      memoryCanvas.height = canvasEl.height\n\n      const pathCtx = memoryCanvas.getContext('2d')\n\n      if (!pathCtx) return\n\n      ctx.clearRect(0, 0, canvasEl.width, canvasEl.height)\n      subCtx.clearRect(0, 0, subCanvasEl.width, subCanvasEl.height)\n      pathCtx.clearRect(0, 0, memoryCanvas.width, memoryCanvas.height)\n\n      const canvasRect = canvasEl.getBoundingClientRect()\n      const trackRect = track.value.getBoundingClientRect()\n      // 滑动时以轨道为准，所以需要补正 canvas 宽度和 track 宽度的差值\n      const widthFix = ((canvasRect.width - trackRect.width) / canvasRect.width) * canvasEl.width\n\n      const targetX = widthFix / 2 + currentTarget.value[0] * (canvasEl.width - widthFix) * 0.01\n      const targetY = currentTarget.value[1] * canvasEl.height * 0.01\n\n      const hollowProcess = getHollowProcess()\n\n      pathCtx.beginPath()\n      pathCtx.strokeStyle = 'rgba(255, 255, 255, 0.5)'\n      pathCtx.lineWidth = 4\n\n      const [clipX, clipY, clipWidth, clipHeight] = hollowProcess({\n        ctx: pathCtx,\n        x: targetX,\n        y: targetY,\n        width: props.canvasSize[0],\n        height: props.canvasSize[1],\n      })\n\n      pathCtx.stroke()\n      pathCtx.clip()\n      pathCtx.drawImage(image, 0, 0, canvasEl.width, canvasEl.height)\n\n      // 中心点偏移修正\n      const xLeftWidth = targetX - clipX\n      const translateFix = ((clipWidth * 0.5 - xLeftWidth) / clipWidth) * 100\n\n      subCanvasEl.style.transform = `translate3d(${translateFix - 50}%, 0, 0)`\n      subCanvasEl.width = clipWidth\n\n      subCtx.drawImage(\n        memoryCanvas,\n        clipX,\n        clipY,\n        clipWidth,\n        clipHeight,\n        0,\n        clipY,\n        clipWidth,\n        clipHeight,\n      )\n\n      ctx.save()\n      ctx.beginPath()\n      ctx.fillStyle = 'rgba(255, 255, 255, 0.75)'\n      ctx.strokeStyle = 'rgba(255, 255, 255, 0.5)'\n      ctx.lineWidth = 10\n\n      hollowProcess({\n        ctx,\n        x: targetX,\n        y: targetY,\n        width: props.canvasSize[0],\n        height: props.canvasSize[1],\n      })\n\n      ctx.stroke()\n      ctx.fill()\n      ctx.restore()\n      ctx.globalCompositeOperation = 'destination-over'\n      ctx.drawImage(image, 0, 0, canvasEl.width, canvasEl.height)\n    }\n\n    function drawImageNextFrame() {\n      nextFrameOnce(drawImage)\n    }\n\n    async function reset(newImage?: string | (() => Promise<string>)) {\n      if (newImage) {\n        image = undefined\n        await (imagePromise.value = loadImage())\n        drawImage()\n      }\n\n      success.value = false\n      failed.value = false\n      failedCount.value = 0\n      currentTarget.value = parseTarget()\n      pointers.length = 0\n\n      slider.value?.reset()\n      props.type === 'point' && drawImageWithTexts()\n    }\n\n    function parseTarget(target = props.slideTarget) {\n      if (isNull(target)) return [random(75, 25), random(75, 25)]\n\n      const [targetX = random(75, 25), targetY = random(75, 25)] = ensureArray(target)\n\n      return [targetX, targetY]\n    }\n\n    function focus(options?: FocusOptions) {\n      slider.value?.focus(options)\n    }\n\n    function handleDragStart(percent: number) {\n      dragging.value = true\n      emitEvent(props.onDragStart, percent)\n    }\n\n    function handleDrag(percent: number) {\n      emitEvent(props.onDrag, percent)\n    }\n\n    function handleDragEnd(percent: number) {\n      dragging.value = false\n      emitEvent(props.onDragEnd, percent)\n    }\n\n    function handleSlideSuccess(percent: number) {\n      success.value = true\n      failed.value = false\n\n      emitEvent(props.onSuccess as SuccessEvent, percent)\n      setFieldValue(percent)\n      validateField()\n    }\n\n    function handleSlideFail() {\n      failed.value = true\n      ++failedCount.value\n\n      emitEvent(props.onFail)\n    }\n\n    function handleRefresh() {\n      !actionLocked.value && emitEvent(props.onRefresh)\n    }\n\n    function stopPropagation(event: Event) {\n      event.stopPropagation()\n    }\n\n    async function verifyPointers() {\n      if (isLoading.value) return\n\n      pointers.length = props.texts.length\n\n      let result = props.remotePoint\n      let customResult: unknown\n\n      if (!props.remotePoint && canvas.value) {\n        const { width, height } = canvas.value\n        const fontSize = Math.max(width, height) * fontRate\n        const xTolerance = (fontSize / width) * 50 + props.tolerance\n        const yTolerance = (fontSize / height) * 50 + props.tolerance\n\n        result = true\n\n        for (let i = 0, len = pointers.length; i < len; ++i) {\n          const [x, y] = pointers[i]\n          const [targetX, targetY] = pointerTargets[i]\n\n          if (Math.abs(x - targetX) > xTolerance || Math.abs(y - targetY) > yTolerance) {\n            result = false\n            break\n          }\n        }\n      }\n\n      if (typeof props.onBeforeTest === 'function') {\n        nextTick(() => {\n          testLoading.value = true\n        })\n        customResult = await (props.onBeforeTest as any)(pointers.flat())\n        nextTick(() => {\n          testLoading.value = false\n        })\n      }\n\n      if (!result || customResult === false) {\n        success.value = false\n        pointers.length = 0\n        failed.value = true\n        ++failedCount.value\n\n        emitEvent(props.onFail)\n      } else {\n        success.value = true\n        failed.value = false\n\n        emitEvent(props.onSuccess as SuccessEvent, pointers.flat())\n      }\n    }\n\n    function handleImageClick(event: MouseEvent) {\n      if (props.type !== 'point' || actionLocked.value || !canvas.value) return\n\n      const { clientWidth: canvasWidth, clientHeight: canvasHeight } = canvas.value\n      const { offsetX, offsetY } = event\n\n      pointers.push([(offsetX / canvasWidth) * 100, (offsetY / canvasHeight) * 100])\n\n      if (pointers.length >= props.texts.length) {\n        nextTick(verifyPointers)\n      }\n    }\n\n    function cancelPointer(index: number, event: Event) {\n      event.stopPropagation()\n\n      if (actionLocked.value || index !== pointers.length - 1) return\n\n      pointers.pop()\n    }\n\n    function handleTrigger() {\n      if (!isSuccess.value) {\n        visible.value = true\n      }\n    }\n\n    function renderImage() {\n      return (\n        <div\n          class={[nh.be('image'), actionLocked.value && nh.bem('image', 'locked')]}\n          onClick={handleImageClick}\n        >\n          {props.image && (\n            <div class={nh.be('image-inner')}>\n              <canvas\n                ref={canvas}\n                class={nh.be('canvas')}\n                width={canvasSize.value[0]}\n                height={canvasSize.value[1]}\n              ></canvas>\n              {props.type === 'slide' && (\n                <div class={nh.be('sub-image')}>\n                  <canvas\n                    ref={subCanvas}\n                    class={nh.be('sub-canvas')}\n                    height={canvasSize.value[1]}\n                    style={subCanvasStyle.value}\n                  ></canvas>\n                </div>\n              )}\n            </div>\n          )}\n          {props.type === 'point' && (\n            <TransitionGroup name={nh.ns('fade')} appear>\n              {pointers.map(([x, y], index) => (\n                <span\n                  key={index}\n                  class={nh.be('pointer')}\n                  style={{ top: `${y}%`, left: `${x}%` }}\n                  onClick={cancelPointer.bind(null, index)}\n                >\n                  {index + 1}\n                </span>\n              ))}\n            </TransitionGroup>\n          )}\n          <Transition name={nh.ns('fade')}>\n            {(isSuccess.value || failed.value) && (\n              <div\n                class={[\n                  nh.be('image-tip'),\n                  nh.bem('image-tip', isSuccess.value ? 'success' : 'fail'),\n                ]}\n                onClick={stopPropagation}\n              >\n                {isSuccess.value\n                  ? (props.successTip ?? locale.value.success)\n                  : (props.failTip ?? locale.value.fail)}\n              </div>\n            )}\n          </Transition>\n        </div>\n      )\n    }\n\n    function renderSlider() {\n      return (\n        <CaptchaSlider\n          ref={slider}\n          class={nh.bem('slider', 'inner')}\n          target={usedTarget.value}\n          tolerance={props.tolerance}\n          loading={isLoading.value}\n          loading-icon={props.loadingIcon}\n          loading-lock\n          loading-effect={props.loadingEffect}\n          disabled={props.disabled || failLocked.value}\n          onBeforeTest={props.onBeforeTest}\n          onSuccess={handleSlideSuccess}\n          onFail={handleSlideFail}\n          onDragStart={handleDragStart}\n          onDrag={handleDrag}\n          onDragEnd={handleDragEnd}\n        >\n          {{\n            tip: () =>\n              renderSlot(slots, 'tip', { success: isSuccess.value }, () => [\n                <Renderer renderer={props.slots.tip} data={{ success: isSuccess.value }}>\n                  {props.tip ?? locale.value.slide}\n                </Renderer>,\n              ]),\n          }}\n        </CaptchaSlider>\n      )\n    }\n\n    function renderTextList() {\n      return (\n        <div class={nh.be('text-list')}>\n          <div class={nh.be('tip')}>\n            {renderSlot(slots, 'tip', { success: isSuccess.value }, () => [\n              <Renderer renderer={props.slots.tip} data={{ success: isSuccess.value }}>\n                {props.tip ?? locale.value.pointInOrder}\n              </Renderer>,\n            ])}\n          </div>\n          <span>{':'}</span>\n          {renderSlot(slots, 'texts', { texts: toRef(props, 'texts') }, () => [\n            <Renderer renderer={props.slots.texts} data={{ texts: toRef(props, 'texts') }}>\n              {props.texts.map((text, index) => (\n                <span key={index} class={nh.be('text')}>\n                  {text}\n                </span>\n              ))}\n            </Renderer>,\n          ])}\n        </div>\n      )\n    }\n\n    function renderFooter() {\n      if (props.type === 'slide') return renderSlider()\n      if (props.type === 'point') return renderTextList()\n\n      return null\n    }\n\n    function renderPanel() {\n      return (\n        <div\n          ref={wrapper}\n          id={idFor.value}\n          class={className.value}\n          tabindex={-1}\n          role={'application'}\n          aria-labelledby={labelId.value}\n        >\n          <div class={nh.be('header')}>\n            <div class={nh.be('title')}>\n              {renderSlot(slots, 'title', { success: isSuccess.value }, () => [\n                <Renderer renderer={props.slots.title} data={{ success: isSuccess.value }}>\n                  {props.title ?? locale.value.doCaptcha}\n                </Renderer>,\n              ])}\n            </div>\n            <span role={'none'} style={'flex: auto'}></span>\n            <button\n              class={[\n                nh.be('action'),\n                nh.be('refresh'),\n                actionLocked.value && nh.bem('action', 'disabled'),\n              ]}\n              type={'button'}\n              onClick={handleRefresh}\n            >\n              {renderSlot(slots, 'refresh', undefined, () => [\n                <Renderer renderer={props.slots.refresh}>\n                  <Icon\n                    {...icons.value.refresh}\n                    icon={props.refreshIcon || icons.value.refresh.icon}\n                  ></Icon>\n                </Renderer>,\n              ])}\n            </button>\n          </div>\n          <Spin active={isLoading.value || slider.value?.isLoading} delay={false}>\n            {{\n              default: renderImage,\n              icon: createSlotRender(slots, ['loading-icon', 'loadingIcon'], () => (\n                <Renderer renderer={props.slots.loadingIcon}></Renderer>\n              )),\n            }}\n          </Spin>\n          {renderFooter()}\n        </div>\n      )\n    }\n\n    function renderTrigger() {\n      return renderSlot(\n        slots,\n        'trigger',\n        { visible: visible.value, success: isSuccess.value },\n        () => [\n          <Renderer\n            renderer={props.slots.trigger}\n            data={{ visible: visible.value, success: isSuccess.value }}\n          >\n            <Button\n              class={[nh.be('button'), isSuccess.value && nh.bem('button', 'success')]}\n              type={isSuccess.value ? 'success' : 'primary'}\n              size={props.triggerSize}\n              block\n              loading={visible.value && !isSuccess.value}\n              icon={isSuccess.value ? icons.value.success.icon : null}\n              onClick={handleTrigger}\n            >\n              {props.triggerText ??\n                (isSuccess.value ? locale.value.completed : locale.value.trigger)}\n            </Button>\n          </Renderer>,\n        ],\n      )\n    }\n\n    return () => {\n      if (props.useTrigger) {\n        return (\n          <Tooltip\n            class={nh.bs('wrapper')}\n            visible={visible.value}\n            trigger={'custom'}\n            raw\n            wrapper\n            transfer={props.transfer}\n          >\n            {{\n              trigger: renderTrigger,\n              default: renderPanel,\n            }}\n          </Tooltip>\n        )\n      }\n\n      return renderPanel()\n    }\n  },\n})\n","import { buildProps, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { CardShadowType, CardSlots } from './symbol'\n\nexport const cardProps = buildProps({\n  title: String,\n  shadow: String as PropType<CardShadowType>,\n  contentStyle: styleProp,\n  slots: Object as PropType<CardSlots>,\n})\n\nexport type CardProps = ExtractPropTypes<typeof cardProps>\nexport type CardCProps = ConfigurableProps<CardProps>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { cardProps } from './props'\n\nimport type { CardShadowType, CardSlots } from './symbol'\n\ndefineOptions({ name: 'Card' })\n\nconst _props = defineProps(cardProps)\nconst props = useProps('card', _props, {\n  title: '',\n  shadow: {\n    default: 'always' as CardShadowType,\n    validator: (value: CardShadowType) => ['always', 'hover', 'never'].includes(value),\n  },\n  contentStyle: () => ({}),\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<CardSlots>()\n\nconst nh = useNameHelper('card')\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`shadow-${props.shadow}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n    },\n  ]\n})\nconst hasTitle = computed(() => !!(slots.title || props.title || props.slots.title))\nconst hasExtra = computed(() => !!(slots.extra || props.slots.extra))\nconst hasHeader = computed(() => !!slots.header || hasTitle.value || hasExtra.value)\n</script>\n\n<template>\n  <article :class=\"className\">\n    <div v-if=\"hasHeader\" :class=\"nh.be('header')\">\n      <slot name=\"header\">\n        <Renderer :renderer=\"props.slots.header\">\n          <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\n            <slot name=\"title\">\n              <Renderer :renderer=\"props.slots.title\">\n                {{ props.title }}\n              </Renderer>\n            </slot>\n          </div>\n          <div v-if=\"hasExtra\" :class=\"nh.be('extra')\">\n            <slot name=\"extra\">\n              <Renderer :renderer=\"props.slots.extra\"></Renderer>\n            </slot>\n          </div>\n        </Renderer>\n      </slot>\n    </div>\n    <div :class=\"nh.be('content')\" :style=\"props.contentStyle\">\n      <slot>\n        <Renderer :renderer=\"props.slots.default\"></Renderer>\n      </slot>\n    </div>\n  </article>\n</template>\n","import { booleanNumberProp, booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  CarouselArrowTrigger,\n  CarouselArrowType,\n  CarouselPointerType,\n  CarouselSlots,\n} from './symbol'\n\nexport const carouselProps = buildProps({\n  active: Number,\n  viewSize: Number,\n  vertical: booleanProp,\n  disabled: booleanProp,\n  loop: booleanProp,\n  arrow: String as PropType<CarouselArrowType>,\n  arrowTrigger: String as PropType<CarouselArrowTrigger>,\n  autoplay: booleanNumberProp,\n  pointer: String as PropType<CarouselPointerType>,\n  speed: Number,\n  activeOffset: Number,\n  height: [Number, String],\n  ignoreHover: booleanProp,\n  slots: Object as PropType<CarouselSlots>,\n  onChange: eventProp<(active: number) => void>(),\n  onPrev: eventProp<(active: number) => void>(),\n  onNext: eventProp<(active: number) => void>(),\n  onSelect: eventProp<(active: number) => void>(),\n})\n\nexport type CarouselProps = ExtractPropTypes<typeof carouselProps>\nexport type CarouselCProps = ConfigurableProps<CarouselProps>\n","import type { InjectionKey } from 'vue'\n\nexport type CarouselArrowType = 'outside' | 'inside' | 'none'\nexport type CarouselArrowTrigger = 'hover' | 'always'\nexport type CarouselPointerType = 'outside' | 'inside' | 'none'\n\nexport interface ItemState {\n  label: number,\n  width: number,\n  height: number,\n  offset: number,\n}\n\nexport interface CarouselState {\n  vertical: boolean,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  isItemActive: (label: number) => boolean,\n  handleSelect: (label: number) => void,\n}\n\nexport interface CarouselSlots {\n  default?: () => any,\n  prevArrow?: (params: { disabled: boolean }) => any,\n  nextArrow?: (params: { disabled: boolean }) => any,\n  pointer?: (params: { active: boolean }) => any,\n}\n\nexport const CAROUSEL_STATE = '__VXP_CAROUSEL_STATE' as unknown as InjectionKey<CarouselState>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useHoverDelay, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useHover, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { carouselProps } from './props'\nimport { CAROUSEL_STATE } from './symbol'\n\nimport type { CarouselSlots, CarouselState, ItemState } from './symbol'\n\ndefineOptions({ name: 'Carousel' })\n\nconst _props = defineProps(carouselProps)\nconst props = useProps('carousel', _props, {\n  active: {\n    default: 0,\n    static: true,\n  },\n  viewSize: {\n    default: 3,\n    validator: value => value > 0,\n  },\n  vertical: false,\n  disabled: false,\n  loop: false,\n  arrow: {\n    default: 'outside',\n    validator: value => ['outside', 'inside', 'none'].includes(value),\n  },\n  arrowTrigger: {\n    default: 'hover',\n    validator: value => ['hover', 'always'].includes(value),\n  },\n  autoplay: {\n    default: false,\n    validator: value => (typeof value === 'number' ? value > 500 : true),\n  },\n  pointer: {\n    default: 'none',\n    validator: value => ['outside', 'inside', 'none'].includes(value),\n  },\n  speed: 300,\n  activeOffset: 0,\n  height: null,\n  ignoreHover: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\ndefineSlots<CarouselSlots>()\n\nconst nh = useNameHelper('carousel')\nconst icons = useIcons()\nconst hoverDelay = useHoverDelay()\nconst { isRtl } = useRtl()\nconst itemStates = ref(new Set<ItemState>())\nconst currentActive = ref(0)\nconst isLocked = ref(false) // 用于控制阻断快速连点\nconst arrowActive = ref(props.arrowTrigger === 'always')\n\nconst listRect = reactive({\n  width: 0,\n  height: 0,\n})\nconst trackRect = reactive({\n  width: 0,\n  height: 0,\n  offset: 0,\n})\nconst itemRect = reactive({\n  width: 0,\n  height: 0,\n})\n\nconst { wrapper, isHover } = useHover()\n\nconst prev = ref<HTMLElement>()\nconst next = ref<HTMLElement>()\n\nconst isDisabled = computed(() => {\n  return props.disabled || itemStates.value.size <= props.viewSize\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('vertical')]: props.vertical,\n    [nh.bm('disabled')]: isDisabled.value,\n  }\n})\nconst style = computed(() => {\n  return {\n    height:\n      props.vertical && props.height\n        ? `${props.height}${typeof props.height === 'number' ? 'px' : ''}`\n        : undefined,\n  }\n})\nconst listStyle = computed(() => {\n  return {\n    width: listRect.width ? `${listRect.width}px` : undefined,\n    height: listRect.height ? `${listRect.height}px` : undefined,\n  }\n})\nconst trackStyle = computed(() => {\n  return {\n    width: trackRect.width ? `${trackRect.width}px` : undefined,\n    height: trackRect.height ? `${trackRect.height}px` : undefined,\n    transform: trackRect.offset\n      ? `translate${props.vertical ? 'Y' : 'X'}(${\n        isRtl.value && !props.vertical ? `${-trackRect.offset}` : trackRect.offset\n      }px) translateZ(0)`\n      : undefined,\n    transitionDuration: isLocked.value ? '0ms' : `${props.speed}ms`,\n  }\n})\nconst disabledPrev = computed(() => {\n  return isDisabled.value || (!props.loop && currentActive.value <= 0)\n})\nconst disabledNext = computed(() => {\n  return (\n    isDisabled.value ||\n    (!props.loop && currentActive.value >= itemStates.value.size - props.viewSize)\n  )\n})\nconst arrowIcons = computed(() => {\n  return props.vertical\n    ? [icons.value.angleUp, icons.value.angleDown]\n    : isRtl.value\n      ? [icons.value.angleRight, icons.value.angleLeft]\n      : [icons.value.angleLeft, icons.value.angleRight]\n})\n\nwatch(\n  () => props.active,\n  value => {\n    handleWheel(value - props.activeOffset)\n  },\n)\nwatch(isHover, value => {\n  if (props.ignoreHover) return\n\n  if (value) {\n    handleMouseEnter()\n  } else {\n    handleMouseLeave()\n  }\n})\nwatch(() => props.viewSize, refresh)\nwatch(() => props.autoplay, setAutoplay)\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(itemStates.value).forEach((item, index) => {\n    item.label = index\n  })\n})\nconst updateItemRect = debounceMinor(() => {\n  itemStates.value.forEach(state => {\n    state.width = itemRect.width\n    state.height = itemRect.height\n  })\n})\nconst updateListRect = debounceMinor(() => {\n  trackRect.width = itemRect.width * itemStates.value.size\n  trackRect.height = itemRect.height * itemStates.value.size\n})\n\nprovide<CarouselState>(\n  CAROUSEL_STATE,\n  reactive({\n    vertical: toRef(props, 'vertical'),\n    increaseItem,\n    decreaseItem,\n    isItemActive,\n    handleSelect,\n  }),\n)\n\n// 初始化时不使用过渡效果\nlet inTransition = false\nlet shouldReset = false\n\nisLocked.value = true\n\nonMounted(() => {\n  computeItemRect()\n  handleWheel(props.active - props.activeOffset)\n  handleAfterMove()\n\n  setTimeout(() => {\n    isLocked.value = false\n    inTransition = false\n\n    setAutoplay()\n  }, 0)\n})\n\ndefineExpose({\n  itemStates,\n  currentActive,\n  arrowActive,\n  wrapper,\n  prev,\n  next,\n  refresh,\n})\n\nfunction increaseItem(item: ItemState) {\n  itemStates.value.add(item)\n  refreshLabels()\n  updateItemRect()\n  updateListRect()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.value.delete(item)\n  refreshLabels()\n  updateListRect()\n}\n\nfunction isItemActive(label: number) {\n  return (currentActive.value + props.activeOffset) % itemStates.value.size === label\n}\n\nfunction computeItemRect() {\n  if (!wrapper.value) return\n\n  let prevFix = 0\n  let nextFix = 0\n\n  if (props.arrow === 'outside') {\n    if (props.vertical) {\n      prevFix = prev.value ? prev.value.offsetHeight : 0\n      nextFix = next.value ? next.value.offsetHeight : 0\n    } else {\n      prevFix = prev.value ? prev.value.offsetWidth : 0\n      nextFix = next.value ? next.value.offsetWidth : 0\n    }\n  }\n\n  if (props.vertical) {\n    listRect.width = 0\n    listRect.height = wrapper.value.offsetHeight - prevFix - nextFix\n\n    itemRect.width = 0\n    itemRect.height = listRect.height / props.viewSize\n  } else {\n    listRect.width = wrapper.value.offsetWidth - prevFix - nextFix\n    listRect.height = 0\n\n    itemRect.width = listRect.width / props.viewSize\n    itemRect.height = 0\n  }\n}\n\nfunction refresh() {\n  computeItemRect()\n  updateItemRect()\n  updateListRect()\n\n  if (trackRect.offset > 0) {\n    handlePrev(0)\n  } else {\n    handleNext(0)\n  }\n\n  setTimeout(() => {\n    isLocked.value = false\n    inTransition = false\n  }, 0)\n}\n\nfunction emitChangeEvent() {\n  const active = (currentActive.value + props.activeOffset) % itemStates.value.size\n\n  emit('update:active', active)\n  emitEvent(props.onChange, active)\n}\n\nfunction handlePrev(amount = 1) {\n  if (isDisabled.value || inTransition) return\n\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\n  const itemList = Array.from(itemStates.value)\n  const itemCount = itemList.length\n  const targetIndex = (currentActive.value - amount + itemCount) % itemCount\n  const prevActive = currentActive.value\n\n  if (targetIndex >= itemCount - props.viewSize) {\n    if (!props.loop) return\n\n    if (trackRect.offset < 0) {\n      if (amount < currentActive.value) {\n        trackRect.offset = -targetIndex * itemLength\n      } else {\n        trackRect.offset = itemLength * (itemCount - targetIndex)\n\n        for (let i = targetIndex; i < itemCount; ++i) {\n          itemList[i].offset = -itemCount * itemLength\n        }\n      }\n    } else {\n      for (let i = 0; i < itemCount; ++i) {\n        itemList[i].offset =\n          i < targetIndex\n            ? 0\n            : (isRtl.value && !props.vertical ? itemCount : -itemCount) * itemLength\n      }\n\n      trackRect.offset = itemLength * (itemCount - targetIndex)\n    }\n\n    currentActive.value = targetIndex\n  } else {\n    currentActive.value = targetIndex\n    trackRect.offset = -currentActive.value * itemLength\n  }\n\n  shouldReset = currentActive.value <= itemCount - props.viewSize\n  inTransition = true\n\n  currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleNext(amount = 1) {\n  if (isDisabled.value || inTransition) return\n\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\n  const itemList = Array.from(itemStates.value)\n  const itemCount = itemList.length\n  const targetIndex = currentActive.value + amount\n  const prevActive = currentActive.value\n\n  if (targetIndex > itemStates.value.size - props.viewSize) {\n    if (!props.loop) return\n\n    if (trackRect.offset > 0) {\n      trackRect.offset = itemLength * (itemCount - targetIndex)\n    } else {\n      const anchorIndex = targetIndex + props.viewSize - itemCount\n\n      for (let i = 0, len = itemList.length; i < len; ++i) {\n        itemList[i].offset =\n          i < anchorIndex\n            ? (isRtl.value && !props.vertical ? -itemCount : itemCount) * itemLength\n            : 0\n      }\n\n      trackRect.offset = -targetIndex * itemLength\n    }\n\n    currentActive.value = targetIndex % itemCount\n  } else {\n    currentActive.value = targetIndex\n    trackRect.offset = -currentActive.value * itemLength\n  }\n\n  shouldReset = currentActive.value <= itemCount - props.viewSize\n  inTransition = true\n\n  currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleWheel(active: number) {\n  if (isDisabled.value || inTransition || active === currentActive.value) return\n\n  const itemCount = itemStates.value.size\n\n  active = (active % itemCount) + (active < 0 ? itemCount : 0)\n\n  if (props.loop) {\n    let forward: number\n    let back: number\n\n    if (active > currentActive.value) {\n      forward = active - currentActive.value\n      back = itemCount - active + currentActive.value\n    } else {\n      forward = itemCount - currentActive.value + active\n      back = currentActive.value - active\n    }\n\n    if (forward < back) {\n      handleNext(forward)\n    } else if (forward > back) {\n      handlePrev(back)\n    } else {\n      if (trackRect.offset > 0) {\n        handlePrev(forward)\n      } else {\n        handleNext(forward)\n      }\n    }\n  } else {\n    if (active < currentActive.value) {\n      handlePrev(currentActive.value - active)\n    } else {\n      handleNext(active - currentActive.value)\n    }\n  }\n}\n\nfunction handleAfterMove() {\n  if (!shouldReset) {\n    inTransition = false\n  } else {\n    itemStates.value.forEach(state => {\n      state.offset = 0\n    })\n\n    shouldReset = false\n    isLocked.value = true\n\n    requestAnimationFrame(() => {\n      trackRect.offset = -currentActive.value * (props.vertical ? itemRect.height : itemRect.width)\n\n      requestAnimationFrame(() => {\n        isLocked.value = false\n        inTransition = false\n      })\n    })\n  }\n}\n\nfunction handlePrevClick() {\n  handlePrev(1)\n  emitEvent(props.onPrev, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleNextClick() {\n  handleNext(1)\n  emitEvent(props.onNext, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleSelect(label: number) {\n  emitEvent(props.onSelect, label)\n}\n\nconst { timer } = useSetTimeout()\n\nfunction setAutoplay() {\n  clearInterval(timer.play)\n\n  if (!props.autoplay) return\n\n  let waiting = 4000\n\n  if (typeof props.autoplay === 'number') {\n    waiting = props.autoplay\n  }\n\n  timer.play = window.setInterval(() => {\n    if (!props.loop && disabledNext.value) {\n      handleWheel(0)\n    } else {\n      handleNext()\n    }\n  }, waiting)\n}\n\nfunction handleMouseEnter() {\n  if (props.autoplay) {\n    clearTimeout(timer.hover)\n\n    timer.hover = setTimeout(() => {\n      clearInterval(timer.play)\n    }, hoverDelay.value)\n  }\n\n  if (props.arrowTrigger === 'hover' && props.arrow === 'inside') {\n    arrowActive.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  if (props.autoplay) {\n    clearTimeout(timer.hover)\n\n    timer.hover = setTimeout(() => {\n      setAutoplay()\n    }, hoverDelay.value)\n  }\n\n  if (props.arrowTrigger === 'hover') {\n    arrowActive.value = false\n  }\n}\n\nfunction isPointerDisabled(index: number) {\n  if (props.loop) return false\n\n  return !(\n    index >= props.activeOffset - 1 && index < itemStates.value.size - props.activeOffset - 1\n  )\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"list\"\n    :style=\"style\"\n  >\n    <ResizeObserver @resize=\"refresh\">\n      <div\n        :style=\"{\n          position: 'relative',\n          display: 'flex',\n          flexDirection: props.vertical ? 'column' : 'row',\n          width: '100%'\n        }\"\n      >\n        <div\n          v-if=\"props.arrow !== 'none'\"\n          ref=\"prev\"\n          :class=\"[\n            nh.bem('arrow', props.arrow),\n            nh.bem('arrow', 'prev'),\n            arrowActive ? nh.bem('arrow', 'show') : ''\n          ]\"\n        >\n          <div\n            :class=\"{\n              [nh.be('handler')]: true,\n              [nh.bem('handler', 'disabled')]: disabledPrev\n            }\"\n            @click=\"handlePrevClick\"\n          >\n            <slot name=\"prevArrow\" :disabled=\"disabledPrev\">\n              <Renderer :renderer=\"props.slots.prevArrow\" :data=\"{ disabled: disabledPrev }\">\n                <Icon v-bind=\"arrowIcons[0]\" :scale=\"+(arrowIcons[0].scale || 1) * 1.5\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n        <div :class=\"nh.be('list')\" :style=\"listStyle\">\n          <div :class=\"nh.be('track')\" :style=\"trackStyle\" @transitionend.self=\"handleAfterMove\">\n            <slot> <Renderer :renderer=\"props.slots.default\"></Renderer>> </slot>\n          </div>\n        </div>\n        <div\n          v-if=\"props.arrow !== 'none'\"\n          ref=\"next\"\n          :class=\"[\n            nh.bem('arrow', props.arrow),\n            nh.bem('arrow', 'next'),\n            arrowActive ? nh.bem('arrow', 'show') : ''\n          ]\"\n        >\n          <div\n            :class=\"{\n              [nh.be('handler')]: true,\n              [nh.bem('handler', 'disabled')]: disabledNext\n            }\"\n            @click=\"handleNextClick\"\n          >\n            <slot name=\"nextArrow\" :disabled=\"disabledNext\">\n              <Renderer :renderer=\"props.slots.nextArrow\" :data=\"{ disabled: disabledNext }\">\n                <Icon v-bind=\"arrowIcons[1]\" :scale=\"+(arrowIcons[1].scale || 1) * 1.5\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n      </div>\n    </ResizeObserver>\n    <div v-if=\"props.pointer !== 'none'\" :class=\"nh.bem('pointers', props.pointer)\">\n      <div\n        v-for=\"index in itemStates.size\"\n        :key=\"index\"\n        :class=\"{\n          [nh.be('pointer')]: true,\n          [nh.bem('pointer', 'active')]:\n            index - 1 === (currentActive + props.activeOffset) % itemStates.size,\n          [nh.bem('pointer', 'disabled')]: isPointerDisabled(index - props.activeOffset - 1)\n        }\"\n        @click=\"handleWheel(index - props.activeOffset - 1)\"\n      >\n        <slot\n          name=\"pointer\"\n          :active=\"index - 1 === (currentActive + props.activeOffset) % itemStates.size\"\n        >\n          <Renderer\n            :renderer=\"props.slots.pointer\"\n            :data=\"{ active: index - 1 === (currentActive + props.activeOffset) % itemStates.size }\"\n          >\n            <span :class=\"nh.be('pointer-inner')\"></span>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, reactive } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { CAROUSEL_STATE } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'CarouselItem' })\n\ndefineSlots<{\n  default: (params: { active: boolean }) => any,\n}>()\n\nconst carouselState = inject(CAROUSEL_STATE, null)\n\nconst nh = useNameHelper('carousel')\nconst state: ItemState = reactive({\n  label: -1,\n  width: 0,\n  height: 0,\n  offset: 0,\n})\n\nconst active = computed(() => {\n  return carouselState?.isItemActive(state.label) ?? false\n})\nconst className = computed(() => {\n  return {\n    [nh.be('item')]: true,\n    [nh.bem('item', 'active')]: active.value,\n  }\n})\nconst style = computed(() => {\n  const { width, height, offset } = state\n\n  return {\n    width: width ? `${width}px` : undefined,\n    height: height ? `${height}px` : undefined,\n    transform: offset ? `translate${carouselState?.vertical ? 'Y' : 'X'}(${offset}px)` : undefined,\n  }\n})\n\nif (carouselState) {\n  carouselState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    carouselState.decreaseItem(state)\n  })\n}\n\nfunction handleClick() {\n  carouselState?.handleSelect(state.label)\n}\n</script>\n\n<template>\n  <div\n    :class=\"className\"\n    role=\"listitem\"\n    :style=\"style\"\n    @click=\"handleClick\"\n  >\n    <slot :active=\"active\"></slot>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const checkboxProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  checked: booleanProp,\n  label: String,\n  value: [String, Number],\n  labelClass: classProp,\n  disabled: booleanProp,\n  border: booleanProp,\n  control: booleanProp,\n  partial: booleanProp,\n  tabIndex: [String, Number],\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  name: String,\n  color: String,\n  stateColor: booleanProp,\n  onChange: eventProp<(checked: boolean) => void>(),\n  onClick: eventProp<(event: MouseEvent) => void>(),\n})\n\nexport type CheckboxProps = ExtractPropTypes<typeof checkboxProps>\nexport type CheckboxCProps = ConfigurableProps<CheckboxProps>\n\nexport type RawOption =\n  | string\n  | {\n    value: string | number,\n    label?: string,\n    control?: boolean,\n    disabled?: boolean,\n  }\n\nexport const checkboxGroupProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('checkbox'),\n  value: Array as PropType<(string | number)[]>,\n  vertical: booleanProp,\n  disabled: booleanProp,\n  border: booleanProp,\n  options: Array as PropType<RawOption[]>,\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  control: booleanStringProp,\n  color: String,\n  stateColor: booleanProp,\n  onChange: eventProp<(value: (string | number)[]) => void>(),\n})\n\nexport type CheckboxGroupProps = ExtractPropTypes<typeof checkboxGroupProps>\nexport type CheckboxGroupCProps = ConfigurableProps<CheckboxGroupProps>\n","import type { InjectionKey, Ref } from 'vue'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\n\nexport interface ControlState {\n  checked: boolean,\n  partial: boolean,\n}\n\nexport interface GroupState {\n  currentValues: (string | number)[],\n  size: ComponentSize,\n  state: ComponentState,\n  disabled: boolean,\n  loading: boolean,\n  loadingLock: boolean,\n  colorMap: Record<string, string> | null,\n  stateColor: boolean,\n  increaseItem(\n    value: string | number,\n    checked: boolean,\n    input: Ref<HTMLElement | null | undefined>,\n  ): void,\n  decreaseItem(value: string | number, input: Ref<HTMLElement | null | undefined>): void,\n  increaseControl(state: ControlState): void,\n  decreaseControl(state: ControlState): void,\n  handleControlChange(): void,\n  setItemChecked(value: string | number, checked: boolean): void,\n  replaceValue(prevValue: string | number, newValue: string | number): void,\n}\n\nexport const GROUP_STATE = '__VXP_CHECKBOX_GROUP_STATE' as unknown as InjectionKey<GroupState>\n","<script setup lang=\"ts\">\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { adjustAlpha, isDefined, isFunction, parseColorToRgba } from '@vexip-ui/utils'\nimport { checkboxProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\ndefineOptions({ name: 'Checkbox' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<boolean>(() => input.value?.focus())\n\nconst _props = defineProps(checkboxProps)\nconst props = useProps('checkbox', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  checked: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  label: null,\n  value: {\n    default: null,\n    static: true,\n  },\n  labelClass: null,\n  disabled: () => disabled.value,\n  border: false,\n  control: false,\n  partial: false,\n  tabIndex: 0,\n  loading: () => loading.value,\n  loadingLock: false,\n  name: {\n    default: '',\n    static: true,\n  },\n  color: null,\n  stateColor: false,\n})\n\nconst emit = defineEmits(['update:checked'])\n\nconst slots = defineSlots<{\n  default?: () => any,\n}>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('checkbox')\nconst currentChecked = ref(props.checked ?? false)\nconst currentPartial = ref(props.partial)\n\nconst input = ref<HTMLInputElement>()\n\nconst controlState = reactive({\n  checked: currentChecked,\n  partial: currentPartial,\n})\n\nconst computedSize = computed(() => groupState?.size || props.size)\nconst computedState = computed(() => groupState?.state || props.state)\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\nconst isLoading = computed(() => groupState?.loading || props.loading)\nconst isLoadingLock = computed(() => groupState?.loadingLock || props.loadingLock)\nconst stateColor = computed(() => groupState?.stateColor || props.stateColor)\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('checked')]: currentChecked.value,\n      [nh.bm('disabled')]: isDisabled.value,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: isLoading.value,\n      [nh.bm(computedSize.value)]: computedSize.value !== 'default',\n      [nh.bm('border')]: props.border,\n      [nh.bm('partial')]: props.control && currentPartial.value,\n      [nh.bm(computedState.value)]: computedState.value !== 'default',\n    },\n  ]\n})\nconst colorMap = computed(() => {\n  if (!props.color) return groupState?.colorMap\n\n  const baseColor = parseColorToRgba(props.color)\n\n  return {\n    base: baseColor.toString(),\n    opacity6: adjustAlpha(baseColor, 0.4).toString(),\n  }\n})\nconst style = computed<Record<string, string>>(() => {\n  if (!colorMap.value) return {}\n\n  const { base, opacity6 } = colorMap.value\n\n  return nh.cvm({\n    'label-color-checked': base,\n    'b-color': stateColor.value ? base : undefined,\n    'b-color-hover': base,\n    'b-color-checked': base,\n    'signal-bg-color-checked': base,\n    's-color-focus': opacity6,\n  })\n})\nconst hasLabel = computed(() => {\n  return isDefined(props.label) && props.label !== ''\n})\nconst currentValue = computed(() => {\n  return props.value ?? props.label\n})\n\nwatch(\n  () => props.checked,\n  value => {\n    setCurrentChecked(value)\n  },\n)\nwatch(\n  () => props.partial,\n  value => {\n    currentPartial.value = value\n  },\n)\n\nif (groupState) {\n  let increased = false\n\n  watch(currentValue, (value, prevValue) => {\n    if (isFunction(groupState.replaceValue)) {\n      groupState.replaceValue(prevValue, value)\n    }\n  })\n  watch(\n    () => props.control,\n    value => {\n      if (value) {\n        if (increased) {\n          groupState.decreaseItem(currentValue.value, input)\n          increased = false\n        }\n\n        groupState.increaseControl(controlState)\n      } else {\n        groupState.decreaseControl(controlState)\n      }\n    },\n    { immediate: true },\n  )\n  watch(\n    () => groupState.currentValues,\n    value => {\n      if (!props.control) {\n        setCurrentChecked(value.includes(currentValue.value))\n      }\n    },\n    { immediate: true },\n  )\n\n  onMounted(() => {\n    if (!props.control) {\n      groupState.increaseItem(currentValue.value, currentChecked.value, input)\n      increased = true\n    }\n  })\n\n  onBeforeUnmount(() => {\n    if (!props.control) {\n      groupState.decreaseItem(currentValue.value, input)\n    } else {\n      groupState.decreaseControl(controlState)\n    }\n  })\n}\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentChecked,\n  input,\n  focus: (options?: FocusOptions) => input.value?.focus(options),\n  blur: () => input.value?.blur(),\n})\n\nfunction emitCheckEvent() {\n  const checked = currentChecked.value\n\n  emit('update:checked', checked)\n  setFieldValue(checked)\n  emitEvent(props.onChange, checked)\n}\n\nfunction setCurrentChecked(checked: boolean) {\n  if (props.control && isFunction(groupState?.handleControlChange)) {\n    groupState!.handleControlChange()\n  } else if (currentChecked.value !== checked) {\n    currentChecked.value = checked\n    emitCheckEvent()\n  }\n}\n\nfunction handleChange(checked: boolean) {\n  if (isDisabled.value || readonly.value) {\n    return\n  }\n\n  setCurrentChecked(checked)\n\n  if (!props.control && groupState) {\n    isFunction(groupState.setItemChecked) && groupState.setItemChecked(currentValue.value, checked)\n  }\n\n  if (!groupState) {\n    validateField()\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n  <label\n    :id=\"idFor\"\n    :class=\"className\"\n    :style=\"style\"\n    :aria-disabled=\"isDisabled\"\n    :aria-labelledby=\"labelId\"\n    @click=\"handleClick\"\n  >\n    <input\n      ref=\"input\"\n      type=\"checkbox\"\n      :class=\"nh.be('input')\"\n      :checked=\"currentChecked\"\n      :disabled=\"isDisabled || readonly\"\n      :tabindex=\"props.tabIndex\"\n      :name=\"props.name\"\n      @submit.prevent\n      @change=\"handleChange(!currentChecked)\"\n      @click.stop\n    />\n    <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\n    <span v-if=\"hasLabel || slots.default\" :class=\"[nh.be('label'), props.labelClass]\">\n      <slot>{{ props.label }}</slot>\n    </span>\n  </label>\n</template>\n","<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Icon } from '@/components/icon'\nimport { Option } from '@/components/option'\nimport { VirtualList } from '@/components/virtual-list'\n\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type { CascaderOptionState, CascaderPanelSlots } from './symbol'\n\ndefineOptions({ name: 'CascaderPanel' })\n\nconst props = defineProps({\n  options: {\n    type: Array as PropType<CascaderOptionState[]>,\n    default: () => [],\n  },\n  openedId: {\n    type: Number,\n    default: null,\n  },\n  values: {\n    type: Array as PropType<string[]>,\n    default: () => [],\n  },\n  ready: {\n    type: Boolean,\n    default: false,\n  },\n  multiple: {\n    type: Boolean,\n    default: false,\n  },\n  checkIcon: {\n    type: Object,\n    default: null,\n  },\n  isAsync: {\n    type: Boolean,\n    default: false,\n  },\n  merged: {\n    type: Boolean,\n    default: false,\n  },\n  noCascaded: {\n    type: Boolean,\n    default: false,\n  },\n  visible: {\n    type: Boolean,\n    default: false,\n  },\n  labeledBy: {\n    type: String,\n    default: undefined,\n  },\n})\n\nconst emit = defineEmits(['select', 'check', 'hover', 'open', 'back', 'close'])\n\ndefineSlots<CascaderPanelSlots>()\n\nconst nh = useNameHelper('cascader')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\nconst currentHitting = ref(-1)\n\nconst list = ref<VirtualListExposed>()\n\nconst { target: wrapper } = useModifier({\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.escape) {\n      emit('close')\n      return\n    }\n\n    decide(\n      [\n        [\n          () => modifier.up || modifier.down,\n          () => {\n            if (currentHitting.value < 0) {\n              currentHitting.value = props.options.findIndex(isSelected)\n\n              if (currentHitting.value < 0) {\n                currentHitting.value = 0\n              }\n\n              return\n            }\n\n            currentHitting.value = boundRange(\n              findEnabledIndex(currentHitting.value + (modifier.up ? -1 : 1), modifier.up ? -1 : 1),\n              0,\n              props.options.length - 1,\n            )\n            ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\n          },\n        ],\n        [\n          () => modifier.left || modifier.right,\n          () => {\n            if (modifier.right) {\n              const option = props.options[currentHitting.value]\n\n              if (option && hasChildren(option)) {\n                emit('open', option)\n              }\n            } else {\n              emit('back')\n            }\n          },\n        ],\n        [\n          () => modifier.enter || modifier.space,\n          () => {\n            event.stopPropagation()\n\n            const option = props.options[currentHitting.value]\n\n            if (option) {\n              if (props.multiple) {\n                handleToggleCheck(option)\n              } else {\n                handleSelect(option, currentHitting.value)\n              }\n            }\n          },\n        ],\n      ],\n      {\n        beforeMatchAny: () => event.preventDefault(),\n        afterMatchAny: modifier.resetAll,\n      },\n    )\n  },\n})\n\nlet listHeight = 0\nlet hoverTimer: ReturnType<typeof setTimeout>\n\nwatch([() => props.ready, () => props.options], () => {\n  requestAnimationFrame(computeListHeight)\n\n  if (props.ready) {\n    list.value?.refresh()\n    currentHitting.value = props.options.findIndex(isSelected)\n  } else {\n    currentHitting.value = -1\n  }\n})\n\nonMounted(() => {\n  requestAnimationFrame(computeListHeight)\n})\n\nonBeforeUnmount(handleMouseLeave)\n\ndefineExpose({ currentHitting })\n\nfunction hasChildren(option: CascaderOptionState) {\n  return !!(option.hasChild || option.children?.length)\n}\n\nfunction isSelected(option: CascaderOptionState) {\n  return (\n    (hasChildren(option) && option.id === props.openedId) || props.values.includes(option.fullValue)\n  )\n}\n\nfunction isCheckboxDisabled(option: CascaderOptionState) {\n  return (\n    option.disabled ||\n    (!props.merged &&\n      props.multiple &&\n      props.isAsync &&\n      hasChildren(option) &&\n      !option.childrenLoaded)\n  )\n}\n\nfunction handleSelect(option: CascaderOptionState, index: number) {\n  if (option.disabled) return\n\n  currentHitting.value = index\n\n  if (props.multiple || props.noCascaded) {\n    hasChildren(option) ? emit('select', option) : handleToggleCheck(option)\n  } else {\n    emit('select', option)\n  }\n}\n\nfunction handleToggleCheck(option: CascaderOptionState) {\n  !isCheckboxDisabled(option) && emit('check', option)\n}\n\nfunction handleMouseEnter(option: CascaderOptionState) {\n  clearTimeout(hoverTimer)\n\n  hoverTimer = setTimeout(() => {\n    !option.disabled && emit('hover', option)\n  }, 100)\n}\n\nfunction handleMouseLeave() {\n  clearTimeout(hoverTimer)\n}\n\nfunction computeListHeight() {\n  const el = list.value?.wrapper\n\n  if (el) {\n    const style = getComputedStyle(el)\n    const paddingTop = parseInt(style.paddingTop)\n    const paddingBottom = parseInt(style.paddingBottom)\n\n    listHeight = el.offsetHeight - paddingTop - paddingBottom\n  }\n}\n\nfunction queryEnabledIndex(index: number, step: number) {\n  const options = props.options\n  step = step / Math.abs(step)\n\n  while (options[index]?.disabled) {\n    index += step\n\n    if (index < 0 || index >= options.length) break\n  }\n\n  return index\n}\n\nfunction findEnabledIndex(index: number, sign: 1 | -1 = 1) {\n  const options = props.options\n\n  if (options[index]?.disabled) {\n    index = queryEnabledIndex(index, sign)\n\n    if (sign > 0 ? index >= options.length : index < 0) {\n      index = queryEnabledIndex(index, -sign)\n\n      // 全禁用\n      if (sign > 0 ? index < 0 : index >= options.length) index = -1\n    }\n  }\n\n  return index\n}\n\nfunction ensureOptionInView(index: number, direction: 'top' | 'bottom') {\n  const option = props.options[index]\n  const optionHeight = 32\n\n  if (!option || !list.value) return\n\n  if (direction === 'bottom') {\n    const target = (index + 1) * optionHeight\n\n    if (list.value.scrollOffset + listHeight < target) {\n      list.value.scrollTo(target - listHeight)\n    }\n  } else {\n    const target = index * optionHeight\n\n    if (list.value.scrollOffset > target) {\n      list.value.scrollTo(target)\n    }\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('panel')\"\n    tabindex=\"-1\"\n    :aria-labelledby=\"labeledBy\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <VirtualList\n      ref=\"list\"\n      inherit\n      :items=\"options\"\n      :item-size=\"32\"\n      height=\"100%\"\n      id-key=\"id\"\n      :items-attrs=\"{\n        class: [\n          nh.be('options'),\n          multiple ? nh.bem('options', 'multiple') : null,\n          noCascaded ? nh.bem('options', 'no-cascaded') : null\n        ],\n        role: 'listbox',\n        ariaMultiselectable: multiple\n      }\"\n      @resize=\"computeListHeight\"\n    >\n      <template #default=\"{ item, index }\">\n        <Option\n          :class=\"{\n            [nh.ns('option--error')]: item.error\n          }\"\n          :value=\"item.value\"\n          :label=\"item.label\"\n          :disabled=\"item.disabled\"\n          :selected=\"isSelected(item)\"\n          :hitting=\"index === currentHitting\"\n          @select=\"handleSelect(item, index)\"\n          @mouseenter=\"handleMouseEnter(item)\"\n        >\n          <slot\n            :option=\"item\"\n            :index=\"index\"\n            :selected=\"isSelected(item)\"\n            :can-check=\"isCheckboxDisabled(item)\"\n            :has-child=\"hasChildren(item)\"\n          >\n            <Checkbox\n              v-if=\"multiple || noCascaded\"\n              inherit\n              :class=\"nh.be('checkbox')\"\n              :checked=\"item.checked\"\n              :control=\"hasChildren(item)\"\n              :partial=\"item.partial\"\n              :disabled=\"isCheckboxDisabled(item)\"\n              size=\"small\"\n              @click.prevent.stop=\"handleToggleCheck(item)\"\n            ></Checkbox>\n            <span :class=\"nh.be('label')\">\n              <slot\n                name=\"label\"\n                :option=\"item\"\n                :index=\"index\"\n                :selected=\"isSelected(item)\"\n                :can-check=\"isCheckboxDisabled(item)\"\n                :has-child=\"hasChildren(item)\"\n                :handle-select=\"() => handleSelect(item, index)\"\n              >\n                {{ item.label }}\n              </slot>\n            </span>\n            <div :class=\"nh.be('icon')\">\n              <Icon v-if=\"item.loading\" v-bind=\"icons.loading\"></Icon>\n              <Icon v-else-if=\"item.error\" v-bind=\"icons.refresh\"></Icon>\n              <template v-else-if=\"hasChildren(item)\">\n                <Icon v-if=\"isRtl\" v-bind=\"icons.angleLeft\"></Icon>\n                <Icon v-else v-bind=\"icons.angleRight\"></Icon>\n              </template>\n              <Icon\n                v-else-if=\"!multiple && !noCascaded && checkIcon && values.includes(item.fullValue)\"\n                v-bind=\"icons.check\"\n                :icon=\"checkIcon || icons.check.icon\"\n              ></Icon>\n            </div>\n          </slot>\n        </Option>\n      </template>\n    </VirtualList>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TagType } from '@/components/tag'\nimport type { CascaderKeyConfig, CascaderSlots, CascaderValue, Data } from './symbol'\n\ntype ChangeEvent =\n  | ((value: CascaderValue, data: Data[] | Data[][]) => void)\n  | ((value: (string | number)[], data: Data[]) => void)\n  | ((value: string[], data: Data[]) => void)\n  | ((value: number[], data: Data[]) => void)\n  | ((value: (string | number)[][], data: Data[][]) => void)\n  | ((value: string[][], data: Data[][]) => void)\n  | ((value: number[][], data: Data[][]) => void)\n\nexport const cascaderProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('select'),\n  value: Array as PropType<CascaderValue>,\n  visible: booleanProp,\n  options: Array as PropType<Data[]>,\n  placeholder: String,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noCascaded: booleanProp,\n  multiple: booleanProp,\n  disabled: booleanProp,\n  clearable: booleanProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  staticSuffix: booleanProp,\n  noSuffix: booleanProp,\n  transitionName: String,\n  outsideClose: booleanProp,\n  keyConfig: Object as PropType<CascaderKeyConfig>,\n  separator: String,\n  hoverTrigger: booleanProp,\n  maxTagCount: Number,\n  briefLabel: booleanProp,\n  noRestTip: booleanProp,\n  onAsyncLoad: Function as PropType<(data: Data) => any[] | Promise<any[]>>,\n  mergeTags: booleanProp,\n  tagType: String as PropType<TagType>,\n  emptyText: String,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  transparent: booleanProp,\n  popperAlive: booleanProp,\n  slots: Object as PropType<CascaderSlots>,\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onSelect: eventProp<(fullValue: string, data: Data) => void>(),\n  onCancel: eventProp<(fullValue: string, data: Data) => void>(),\n  onChange: eventProp<ChangeEvent>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n  onClear: eventProp(),\n})\n\nexport type CascaderProps = ExtractPropTypes<typeof cascaderProps>\nexport type CascaderCProps = ConfigurableProps<CascaderProps, never, 'onAsyncLoad'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { NativeScroll } from '@/components/native-scroll'\nimport { Overflow } from '@/components/overflow'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { Tag } from '@/components/tag'\nimport { Tooltip } from '@/components/tooltip'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, onBeforeUpdate, reactive, ref, toRef, watch, watchEffect } from 'vue'\n\nimport CascaderPanel from './cascader-panel.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\nimport { flatTree, getLast, isNull, isPromise, toAttrValue, transformTree } from '@vexip-ui/utils'\nimport { cascaderProps } from './props'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type {\n  CascaderKeyConfig,\n  CascaderOptionState,\n  CascaderSlots,\n  CascaderValue,\n  Data,\n} from './symbol'\n\ntype ChangeListener = (value: CascaderValue, data: Data[] | Data[][]) => void\n\nconst ID_KEY = Symbol('ID_KEY')\nconst PARENT_KEY = Symbol('PARENT_KEY')\n\nconst defaultKeyConfig: Required<CascaderKeyConfig> = {\n  value: 'value',\n  label: 'label',\n  children: 'children',\n  disabled: 'disabled',\n  hasChild: 'hasChild',\n}\n\ndefineOptions({ name: 'Cascader' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<CascaderValue>(() => reference.value?.focus())\n\nconst _props = defineProps(cascaderProps)\nconst nh = useNameHelper('cascader')\nconst props = useProps('cascader', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  visible: {\n    default: false,\n    static: true,\n  },\n  options: {\n    default: () => [],\n    static: true,\n  },\n  placeholder: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noCascaded: false,\n  multiple: false,\n  disabled: () => disabled.value,\n  clearable: false,\n  placement: {\n    default: 'bottom-start',\n    validator: value => placementWhileList.includes(value),\n  },\n  transfer: false,\n  staticSuffix: false,\n  noSuffix: false,\n  transitionName: () => nh.ns('drop'),\n  outsideClose: true,\n  keyConfig: () => ({}),\n  separator: {\n    default: '/',\n    validator: value => value.length === 1,\n  },\n  hoverTrigger: false,\n  maxTagCount: 0,\n  briefLabel: false,\n  noRestTip: false,\n  onAsyncLoad: {\n    default: null,\n    isFunc: true,\n  },\n  mergeTags: false,\n  tagType: null,\n  emptyText: null,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  transparent: false,\n  popperAlive: null,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:visible', 'update:value'])\n\nconst slots = defineSlots<CascaderSlots>()\n\nconst icons = useIcons()\nconst locale = useLocale('select', toRef(props, 'locale'))\n\nconst currentVisible = ref(props.visible)\nconst currentValues = ref<string[]>([])\nconst currentLabels = ref<string[]>([])\nconst mergedValues = ref<string[]>([])\nconst mergedLabels = ref<string[]>([])\nconst isPopperShow = ref(false)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\n\nconst emittedValue = ref<CascaderValue | null>(null)\nconst optionTree = ref<CascaderOptionState[]>(null!)\nconst isAsyncLoad = computed(() => typeof props.onAsyncLoad === 'function')\nconst usingMerged = computed(() => props.mergeTags && !props.noCascaded)\nconst templateValues = computed(() =>\n  usingMerged.value ? mergedValues.value : currentValues.value,\n)\nconst templateLabels = computed(() =>\n  usingMerged.value ? mergedLabels.value : currentLabels.value,\n)\n\nlet optionList: CascaderOptionState[] = null!\nlet optionIdMap: Map<number, CascaderOptionState> = null!\nlet optionValueMap: Map<string, CascaderOptionState> = null!\nlet outsideClosed = false\nlet prevClosedId = -1\nlet flattedOptions: Record<any, any>[]\n\nconst updateTrigger = ref(0)\n\nwatchEffect(() => {\n  /* eslint-disable @typescript-eslint/no-unused-expressions */\n  props.keyConfig.value\n  props.keyConfig.label\n  props.keyConfig.disabled\n  props.keyConfig.hasChild\n  props.separator\n  isAsyncLoad.value\n  /* eslint-enable */\n\n  flattedOptions = flatTree(props.options as Record<any, any>[], {\n    keyField: ID_KEY,\n    parentField: PARENT_KEY,\n    childField: props.keyConfig.children ?? defaultKeyConfig.children,\n    forceInject: true,\n  })\n\n  updateTrigger.value++\n})\n\nwatch(updateTrigger, initOptionStates, { immediate: true })\n\nfunction initOptionStates() {\n  const separator = props.separator\n  const isAsync = isAsyncLoad.value\n\n  optionList = createOptionStates(flattedOptions)\n  optionIdMap = new Map()\n  optionValueMap = new Map()\n\n  for (let i = 0, len = optionList.length; i < len; ++i) {\n    const option = optionList[i]\n\n    initOptionFull(option, separator)\n    optionIdMap.set(option.id, option)\n    optionValueMap.set(option.fullValue, option)\n\n    if (isAsync) {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    }\n  }\n\n  optionTree.value = transformTree(optionList)\n  initValueAndLabel(emittedValue.value)\n}\n\nconst openedIds = ref<number[]>([])\nconst optionsList = computed(() => {\n  return [\n    optionTree.value,\n    ...openedIds.value.map(id => optionIdMap.get(id)?.children).filter(Boolean),\n  ]\n})\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n})\nconst { isHover } = useHover(reference)\n\nconst panelElList = ref<InstanceType<typeof CascaderPanel>[]>([])\nconst restTagCount = ref(0)\nconst restTipShow = ref(false)\nconst selectorWidth = ref(0)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('multiple')]: props.multiple,\n    [nh.bm('responsive')]: props.multiple && props.maxTagCount <= 0,\n  }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--focused`]: !props.disabled && currentVisible.value,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n    [`${baseCls}--has-prefix`]: hasPrefix.value,\n    [`${baseCls}--has-suffix`]: !props.noSuffix,\n    [`${baseCls}--transparent`]: props.transparent,\n  }\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.slots.prefix || props.prefix)\n})\nconst hasValue = computed(() => !!templateValues.value[0])\nconst usingHover = computed(() => props.hoverTrigger && !isAsyncLoad.value)\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && hasValue.value\n})\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  },\n)\nwatch(currentVisible, async value => {\n  if (value) {\n    restTipShow.value = false\n    selectorWidth.value = wrapper.value?.offsetWidth || 0\n\n    await updatePopper()\n    nextTick(() => {\n      getLast(panelElList.value)?.$el?.focus()\n    })\n  } else {\n    isPopperShow.value = false\n\n    if (reference.value && !outsideClosed) {\n      reference.value.focus()\n    }\n  }\n\n  outsideClosed = false\n})\n\nlet outsideChanged = false\n\nwatch(emittedValue, () => {\n  outsideChanged = true\n})\nwatch(\n  () => props.value,\n  value => {\n    if (value !== emittedValue.value || outsideChanged) {\n      emittedValue.value = value\n      initValueAndLabel(value)\n      nextTick(() => {\n        outsideChanged = false\n      })\n    }\n  },\n  { immediate: true },\n)\nwatch(\n  () => props.briefLabel,\n  brief => {\n    currentLabels.value = currentValues.value\n      .map(value => optionValueMap.get(value)?.[brief ? 'label' : 'fullLabel'] as string)\n      .filter(Boolean)\n\n    // nextTick(computeTagsOverflow)\n  },\n)\nwatch(isAsyncLoad, value => {\n  if (value) {\n    for (const option of optionIdMap.values()) {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    }\n  }\n})\nwatch(usingMerged, value => {\n  if (value) {\n    mergedValues.value.length = 0\n    mergedLabels.value.length = 0\n\n    updateMergedProps()\n  }\n\n  if (isAsyncLoad.value) {\n    const originalOptions: CascaderOptionState[] = []\n\n    for (const option of optionIdMap.values()) {\n      if (option.checked) {\n        originalOptions.push(option)\n      }\n\n      if (option.hasChild && !option.children.length && !option.loaded) {\n        option.checked = false\n      }\n    }\n\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\n      const option = originalOptions[i]\n\n      updateCheckedUpward(option)\n      updateCheckedDown(option)\n    }\n  }\n\n  emitMultipleChange()\n})\nwatch(\n  () => optionsList.value.length,\n  () => {\n    updatePopper()\n    nextTick(() => {\n      getLast(panelElList.value)?.$el?.focus()\n      prevClosedId = -1\n    })\n  },\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n    }\n  },\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\n\nonBeforeUpdate(() => {\n  panelElList.value.length = 0\n})\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentVisible,\n  currentValues,\n  currentLabels,\n  isHover,\n  openedIds,\n  restTagCount,\n  restTipShow,\n  optionsList,\n  hasValue,\n  templateValues,\n  templateLabels,\n  showClear,\n  wrapper,\n  reference,\n  popper,\n  panelElList,\n  handlePanelOpen,\n  handleOptionSelect,\n  handleOptionCheck,\n  toggleVisible,\n  handleClear,\n  handlePanelBack,\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\n  blur: () => reference.value?.blur(),\n})\n\nfunction createOptionStates(rawOptions: Record<string | symbol, any>[]) {\n  const {\n    value: valueKey,\n    label: labelKey,\n    disabled: disabledKey,\n    hasChild: hasChildKey,\n  } = { ...defaultKeyConfig, ...props.keyConfig }\n\n  return rawOptions.map(rawOption => {\n    const {\n      [ID_KEY]: id,\n      [PARENT_KEY]: parent,\n      [valueKey]: value,\n      [labelKey]: label,\n      [disabledKey]: disabled,\n      [hasChildKey]: hasChild,\n    } = rawOption\n\n    return reactive<CascaderOptionState>({\n      id,\n      parent,\n      value,\n      disabled,\n      hasChild,\n      label: label || String(value),\n      fullValue: '',\n      fullLabel: '',\n      children: [],\n      checked: false,\n      partial: false,\n      loading: false,\n      loaded: false,\n      error: false,\n      childrenLoaded: false,\n      data: rawOption,\n    })\n  })\n}\n\nfunction initOptionFull(option: CascaderOptionState, separator: string) {\n  let value = option.value as string\n  let label = option.label\n  let parent = optionIdMap.get(option.parent)\n\n  while (parent) {\n    value = `${parent.value}${separator}${value}`\n    label = `${parent.label}${separator}${label}`\n    parent = optionIdMap.get(parent.parent)\n  }\n\n  option.fullValue = value\n  option.fullLabel = label\n}\n\nfunction queryChildrenLoaded(option: CascaderOptionState) {\n  if (option.hasChild && !option.children?.length) {\n    return option.loaded\n  }\n\n  const loop: CascaderOptionState[] = [...option.children]\n\n  while (loop.length) {\n    const child = loop.shift()!\n\n    if (child.childrenLoaded) continue\n\n    if (child.hasChild && !child.children?.length) {\n      child.childrenLoaded = child.loaded\n\n      if (!child.loaded) return false\n    }\n\n    loop.push(...child.children)\n  }\n\n  return true\n}\n\nfunction updateMergedProps() {\n  const baseValues = isAsyncLoad.value\n    ? currentValues.value.concat(mergedValues.value)\n    : currentValues.value\n  const values = new Set(baseValues)\n  const loop = [...baseValues]\n\n  while (loop.length) {\n    const value = loop.shift()!\n\n    const option = optionValueMap.get(value)\n\n    if (option) {\n      const parent = optionIdMap.get(option.parent)\n\n      if (parent?.checked) {\n        values.delete(value)\n        values.add(parent.fullValue)\n        loop.push(parent.fullValue)\n      }\n    }\n  }\n\n  const briefLabel = props.briefLabel\n\n  mergedValues.value = Array.from(values).filter(value => optionValueMap.has(value))\n  mergedLabels.value = mergedValues.value\n    .map(value => {\n      const option = optionValueMap.get(value)!\n\n      return briefLabel ? option.label : option.fullLabel\n    })\n    .filter(Boolean)\n}\n\nfunction isFlatArray<T extends string | number>(value: T[] | T[][]): value is T[] {\n  return !!value.length && !Array.isArray(value[0])\n}\n\nfunction isComplexArray<T extends string | number>(value: T[] | T[][]): value is T[][] {\n  return !!value.length && Array.isArray(value[0])\n}\n\nfunction initValueAndLabel(value: CascaderValue | null) {\n  const processMerged = () => {\n    if (usingMerged.value) {\n      if (isAsyncLoad.value) {\n        mergedValues.value = Array.from(optionIdMap.values())\n          .filter(option => option.checked)\n          .map(option => option.fullValue)\n      }\n\n      updateMergedProps()\n    }\n  }\n\n  for (const option of optionList) {\n    option.checked = false\n    option.partial = false\n  }\n\n  if (!value?.length) {\n    currentValues.value = []\n    currentLabels.value = []\n    processMerged()\n    return\n  }\n\n  const briefLabel = props.briefLabel\n\n  if (props.multiple) {\n    const normalizedValue = isFlatArray(value) ? [value] : value\n    const valueSet = new Set<string>(normalizedValue.map(v => v.join(props.separator)))\n    const selectedValues: string[] = []\n    const selectedLabels: string[] = []\n    const selectedOptions: CascaderOptionState[] = []\n\n    valueSet.forEach(value => {\n      const option = optionValueMap.get(value)\n\n      if (option) {\n        option.checked = true\n        option.partial = false\n\n        selectedValues.push(value)\n        selectedLabels.push(briefLabel ? option.label : option.fullLabel)\n        selectedOptions.push(option)\n      }\n    })\n\n    if (!props.noCascaded) {\n      const originalOptions = selectedOptions.concat(\n        Array.from(optionIdMap.values()).filter(option => option.disabled && option.checked),\n      )\n\n      for (let i = 0, len = originalOptions.length; i < len; ++i) {\n        const option = originalOptions[i]\n\n        updateCheckedUpward(option)\n        updateCheckedDown(option)\n      }\n    }\n\n    currentValues.value = selectedValues\n    currentLabels.value = selectedLabels\n  } else {\n    const normalizedValue = isComplexArray(value) ? value[0] : value\n    const stringValue = normalizedValue.join(props.separator)\n    const option = optionValueMap.get(stringValue)\n\n    if (option) {\n      currentValues.value = [stringValue]\n      currentLabels.value = [briefLabel ? option.label : option.fullLabel]\n\n      if (props.noCascaded) {\n        option.checked = true\n        option.partial = false\n      }\n    } else {\n      currentValues.value = []\n      currentLabels.value = []\n    }\n  }\n\n  processMerged()\n\n  if (openedIds.value.length) return\n\n  const firstValue = currentValues.value[0]\n\n  if (firstValue) {\n    const option = optionValueMap.get(firstValue)!\n    const ids = [option.id]\n\n    let parent = optionIdMap.get(option.parent)\n\n    while (parent) {\n      ids.push(parent.id)\n      parent = optionIdMap.get(parent.parent)\n    }\n\n    openedIds.value = ids.reverse().slice(0, -1)\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nasync function handlePanelOpen(option: CascaderOptionState, depth: number) {\n  if (!option.hasChild && !option.children?.length) return\n\n  if (isAsyncLoad.value && !option.children?.length && !option.loaded) {\n    option.loading = true\n\n    let result: ReturnType<typeof props.onAsyncLoad>\n\n    try {\n      result = props.onAsyncLoad(option.data)\n      result = isPromise(result) ? await result : result\n    } catch (e) {\n      option.error = true\n      option.loading = false\n      return\n    }\n\n    const rawOptions = result as any[]\n\n    if (!Array.isArray(rawOptions) || !rawOptions.length) {\n      option.hasChild = false\n    } else {\n      const options = createOptionStates(rawOptions)\n      const parentId = option.id\n      const separator = props.separator\n\n      option.children.push(...options)\n\n      let idCount = Math.max(...Array.from(optionIdMap.keys()).map(Number)) + 1\n\n      options.forEach(option => {\n        option.id = idCount++\n        option.parent = parentId\n\n        initOptionFull(option, separator)\n\n        optionIdMap.set(option.id, option)\n        optionValueMap.set(option.fullValue, option)\n      })\n\n      optionList.push(...options)\n    }\n\n    option.loaded = true\n    option.loading = false\n\n    const upstream = queryUpstreamOptions(option)\n    upstream.forEach(option => {\n      option.childrenLoaded = queryChildrenLoaded(option)\n    })\n  }\n\n  if (depth < openedIds.value.length) {\n    openedIds.value = openedIds.value.slice(0, depth)\n  }\n\n  openedIds.value.push(option.id)\n  requestAnimationFrame(() => {\n    getLast(panelElList.value)?.$el?.focus()\n  })\n}\n\nfunction handleOptionSelect(option: CascaderOptionState, depth: number) {\n  if (!option) return\n\n  if (option.hasChild || option.children?.length) {\n    handlePanelOpen(option, depth)\n  } else {\n    handleSingleSelect(option.fullValue)\n  }\n}\n\nfunction queryUpstreamOptions(option: CascaderOptionState) {\n  const options = [option]\n  let parent = optionIdMap.get(option.parent)\n\n  while (parent) {\n    options.push(parent)\n    parent = optionIdMap.get(parent.parent)\n  }\n\n  return options\n}\n\nfunction updateCheckedUpward(originalOption: CascaderOptionState) {\n  let option = originalOption\n\n  while (!isNull(option.parent)) {\n    const parent = optionIdMap.get(option.parent)\n\n    if (!parent) break\n\n    if (option.checked === parent.checked && option.partial === parent.partial) {\n      break\n    }\n\n    if (option.checked) {\n      parent.checked = parent.children.every(item => item.disabled || item.checked)\n      parent.partial = !parent.checked\n    } else {\n      parent.checked = false\n      parent.partial = parent.children.some(item => item.checked || item.partial)\n    }\n\n    option = parent\n  }\n}\n\nfunction updateCheckedDown(originalOption: CascaderOptionState) {\n  const checked = originalOption.checked\n  const partial = originalOption.partial\n\n  const loop = [...originalOption.children]\n\n  let option\n\n  while (loop.length) {\n    option = loop.shift()!\n\n    if (option.disabled) continue\n\n    option.checked = checked\n    option.partial = partial\n\n    if (option.children?.length) {\n      loop.push(...option.children)\n    }\n  }\n}\n\nfunction handleOptionCheck(option: CascaderOptionState) {\n  if (!option) return\n\n  const options = Array.from(optionIdMap.values())\n  const checked = !option.checked\n\n  if (!props.multiple) {\n    for (let i = 0, len = options.length; i < len; ++i) {\n      options[i].checked = false\n    }\n\n    option.checked = checked\n    option.partial = false\n\n    return handleSingleSelect(option.fullValue)\n  }\n\n  option.checked = checked\n  option.partial = false\n\n  if (!props.noCascaded) {\n    const originalOptions = [option].concat(\n      options.filter(option => option.disabled && option.checked),\n    )\n\n    for (let i = 0, len = originalOptions.length; i < len; ++i) {\n      const option = originalOptions[i]\n\n      updateCheckedUpward(option)\n      updateCheckedDown(option)\n    }\n  }\n\n  emitEvent(props[checked ? 'onSelect' : 'onCancel'], option.fullValue, option.data)\n  emitMultipleChange()\n}\n\nfunction emitMultipleChange() {\n  const options = Array.from(optionIdMap.values())\n  const selectedOptions = props.noCascaded\n    ? options.filter(option => option.checked)\n    : options.filter(option => option.checked && !(option.hasChild || option.children?.length))\n\n  const selectedValues: string[] = []\n  const selectedLabels: string[] = []\n\n  const values: (string | number)[][] = []\n  const dataList: Data[][] = []\n  const briefLabel = props.briefLabel\n\n  selectedOptions.forEach(option => {\n    selectedValues.push(option.fullValue)\n    selectedLabels.push(briefLabel ? option.label : option.fullLabel)\n\n    const { value, data } = queryArrayMeta(option.fullValue)\n\n    values.push(value)\n    dataList.push(data)\n  })\n\n  currentValues.value = selectedValues\n  currentLabels.value = selectedLabels\n\n  if (usingMerged.value) {\n    if (isAsyncLoad.value) {\n      mergedValues.value = options.filter(option => option.checked).map(option => option.fullValue)\n    }\n\n    updateMergedProps()\n  }\n\n  if (usingMerged.value && isAsyncLoad.value) {\n    values.length = 0\n    dataList.length = 0\n\n    mergedValues.value.forEach(fullValue => {\n      const option = optionValueMap.get(fullValue)\n\n      if (option) {\n        const { value, data } = queryArrayMeta(option.fullValue)\n\n        values.push(value)\n        dataList.push(data)\n      }\n    })\n  }\n\n  emitChangeEvent(values, dataList)\n  nextTick(updatePopper)\n}\n\nfunction handleSingleSelect(fullValue: string) {\n  const option = optionValueMap.get(fullValue)\n\n  if (!option) return\n\n  emitEvent(props.onSelect, fullValue, option.data)\n\n  if (fullValue) {\n    currentValues.value[0] = fullValue\n    currentLabels.value[0] = props.briefLabel ? option.label : option.fullLabel\n  } else {\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n  }\n\n  const { value, data } = queryArrayMeta(fullValue)\n\n  emitChangeEvent(value, data)\n  setVisible(false)\n}\n\nfunction emitChangeEvent(value: CascaderValue, data: Data[] | Data[][]) {\n  emittedValue.value = value\n\n  nextTick(() => {\n    outsideChanged = false\n\n    emit('update:value', value)\n    setFieldValue(value)\n    emitEvent(props.onChange as ChangeListener, value, data)\n    validateField()\n  })\n}\n\nfunction queryArrayMeta(fullValue: string) {\n  let option = optionValueMap.get(fullValue)!\n\n  if (!option) return { value: [], data: [] }\n\n  const value = [option.value]\n  const data = [option.data]\n\n  while (option.parent) {\n    const parent = optionIdMap.get(option.parent)\n\n    if (!parent) break\n\n    value.push(parent.value)\n    data.push(parent.data)\n    option = parent\n  }\n\n  return {\n    value: value.reverse(),\n    data: data.reverse(),\n  }\n}\n\nfunction toggleVisible(visible = !currentVisible.value) {\n  if (props.disabled || readonly.value) return\n\n  setVisible(visible)\n}\n\nfunction handleClickOutside() {\n  restTipShow.value = false\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    setVisible(false)\n    outsideClosed = true\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleClear() {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    const prev = emittedValue.value\n\n    currentValues.value.length = 0\n    currentLabels.value.length = 0\n    mergedValues.value.length = 0\n    mergedLabels.value.length = 0\n    openedIds.value.length = 0\n    emittedValue.value = prev?.length === 0 ? prev : []\n    restTipShow.value = false\n\n    for (const option of optionIdMap.values()) {\n      option.checked = false\n      option.partial = false\n    }\n\n    if (prev?.length !== 0) {\n      emit('update:value', emittedValue.value)\n      emitEvent(props.onChange as ChangeListener, emittedValue.value, [])\n    }\n\n    emitEvent(props.onClear)\n    clearField(emittedValue.value)\n  }\n}\n\nfunction toggleShowRestTip() {\n  if (!currentVisible.value) {\n    restTipShow.value = !restTipShow.value\n  } else {\n    restTipShow.value = false\n  }\n}\n\nfunction handleTipClose(fullValue: string) {\n  if (props.disabled || readonly.value) return\n\n  if (props.multiple) {\n    handleOptionCheck(optionValueMap.get(fullValue)!)\n  } else {\n    handleSingleSelect(fullValue)\n  }\n}\n\nfunction handlePanelKeyOpen(option: CascaderOptionState, depth: number) {\n  handlePanelOpen(option, depth)\n\n  requestAnimationFrame(() => {\n    const panel = getLast(panelElList.value)\n\n    if (panel && panel.currentHitting < 0) {\n      panel.currentHitting = panel.options.findIndex(option => option.id === prevClosedId)\n\n      if (panel.currentHitting < 0) {\n        panel.currentHitting = 0\n      }\n    }\n  })\n}\n\nfunction handlePanelBack() {\n  prevClosedId = openedIds.value.pop()!\n}\n\nfunction handlePanelsEnter() {\n  requestAnimationFrame(() => {\n    isPopperShow.value = true\n  })\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"dialog\"\n    :aria-labelledby=\"labelId\"\n    @click=\"toggleVisible()\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @keydown.space.prevent=\"toggleVisible()\"\n      @keydown.tab=\"toggleVisible(false)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <slot name=\"control\">\n          <Renderer :renderer=\"props.slots.control\">\n            <Overflow\n              v-if=\"props.multiple\"\n              inherit\n              :class=\"[nh.be('tags')]\"\n              :items=\"templateValues\"\n              :max-count=\"props.maxTagCount\"\n              @rest-change=\"restTagCount = $event\"\n            >\n              <template #default=\"{ item, index }\">\n                <Tag\n                  inherit\n                  :class=\"nh.be('tag')\"\n                  :type=\"props.tagType\"\n                  closable\n                  :disabled=\"props.disabled\"\n                  @click.stop=\"toggleVisible()\"\n                  @close=\"handleTipClose(item)\"\n                >\n                  {{ templateLabels[index] }}\n                </Tag>\n              </template>\n              <template #counter=\"{ count }\">\n                <Tag\n                  v-if=\"props.noRestTip\"\n                  inherit\n                  :class=\"[nh.be('tag'), nh.be('counter')]\"\n                  :type=\"props.tagType\"\n                  :disabled=\"props.disabled\"\n                >\n                  {{ `+${count}` }}\n                </Tag>\n                <span v-else>\n                  <Tooltip\n                    inherit\n                    :transfer=\"false\"\n                    :visible=\"restTipShow\"\n                    trigger=\"custom\"\n                    placement=\"top-end\"\n                    :tip-class=\"nh.be('rest-tip')\"\n                    @click.stop=\"toggleShowRestTip\"\n                  >\n                    <template #trigger>\n                      <Tag\n                        inherit\n                        :class=\"[nh.be('tag'), nh.be('counter')]\"\n                        :type=\"props.tagType\"\n                        :disabled=\"props.disabled\"\n                      >\n                        {{ `+${count}` }}\n                      </Tag>\n                    </template>\n                    <NativeScroll inherit use-y-bar>\n                      <template v-for=\"(item, index) in templateValues\" :key=\"index\">\n                        <Tag\n                          v-if=\"index >= templateValues.length - restTagCount\"\n                          inherit\n                          :class=\"nh.be('tag')\"\n                          closable\n                          :type=\"props.tagType\"\n                          :disabled=\"props.disabled\"\n                          @close=\"handleTipClose(item)\"\n                        >\n                          {{ templateLabels[index] }}\n                        </Tag>\n                      </template>\n                    </NativeScroll>\n                  </Tooltip>\n                </span>\n              </template>\n            </Overflow>\n            <template v-else>\n              {{ currentLabels[0] }}\n            </template>\n            <span\n              v-if=\"(props.placeholder ?? locale.placeholder) && !hasValue\"\n              :class=\"nh.be('placeholder')\"\n            >\n              {{ props.placeholder ?? locale.placeholder }}\n            </span>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon\n              v-if=\"props.suffix\"\n              :icon=\"props.suffix\"\n              :class=\"{\n                [nh.be('arrow')]: !props.staticSuffix\n              }\"\n            ></Icon>\n            <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"locale.ariaLabel.clear\"\n          @click.stop=\"handleClear\"\n        >\n          <Icon v-bind=\"icons.clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.ns('input-vars'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop\n      @enter=\"handlePanelsEnter\"\n    >\n      <div\n        :class=\"{\n          [nh.be('panels')]: true,\n          [nh.bem('panels', 'empty')]: !optionsList[0] || !optionsList[0].length\n        }\"\n      >\n        <template v-if=\"optionsList[0] && optionsList[0].length\">\n          <CascaderPanel\n            v-for=\"(items, index) in optionsList\"\n            :key=\"index\"\n            :ref=\"(panel: any) => panel && panelElList.push(panel)\"\n            :options=\"items\"\n            :opened-id=\"openedIds[index]\"\n            :values=\"currentValues\"\n            :ready=\"isPopperShow\"\n            :multiple=\"props.multiple\"\n            :is-async=\"isAsyncLoad\"\n            :merged=\"usingMerged\"\n            :no-cascaded=\"props.noCascaded\"\n            :labeled-by=\"labelId\"\n            @select=\"handleOptionSelect($event, index)\"\n            @hover=\"usingHover && handlePanelOpen($event, index)\"\n            @check=\"handleOptionCheck($event)\"\n            @open=\"handlePanelKeyOpen($event, index)\"\n            @back=\"handlePanelBack\"\n            @close=\"currentVisible = false\"\n          >\n            <template v-if=\"slots.default || props.slots.default\" #default=\"payload\">\n              <slot v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\n              <slot name=\"label\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n          </CascaderPanel>\n        </template>\n        <div v-else :class=\"nh.be('empty')\" :style=\"{ width: `${selectorWidth}px` }\">\n          <slot name=\"empty\">\n            <Renderer :renderer=\"props.slots.empty\">\n              {{ props.emptyText ?? locale.empty }}\n            </Renderer>\n          </slot>\n        </div>\n      </div>\n    </Popper>\n  </div>\n</template>\n","import { booleanProp, buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { CellFlex, CellOptions, GridAlign, GridJustify, LayoutProp } from './symbol'\n\nconst layoutProp = [Number, String, Array] as PropType<LayoutProp>\n\nexport const gridProps = buildProps({\n  tag: String,\n  gap: [Number, Array] as PropType<number | number[]>,\n  rows: layoutProp,\n  columns: layoutProp,\n  autoRows: layoutProp,\n  autoColumns: layoutProp,\n  dense: booleanProp,\n  justify: String as PropType<GridJustify>,\n  align: String as PropType<GridAlign>,\n  cellFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<CellFlex>>,\n    default: null,\n  },\n})\n\nexport type GridProps = ExtractPropTypes<typeof gridProps>\nexport type GridCProps = ConfigurableProps<GridProps>\n\nconst mediaProp = [Number, Object] as PropType<CellOptions>\n\nexport const cellProps = buildProps({\n  tag: String,\n  top: [Number, String],\n  left: [Number, String],\n  width: Number,\n  height: Number,\n  right: [Number, String],\n  bottom: [Number, String],\n  xs: mediaProp,\n  sm: mediaProp,\n  md: mediaProp,\n  lg: mediaProp,\n  xl: mediaProp,\n  xxl: mediaProp,\n  useFlex: {\n    type: [Boolean, Object] as PropType<boolean | Partial<CellFlex>>,\n    default: null,\n  },\n})\n\nexport type CellProps = ExtractPropTypes<typeof cellProps>\nexport type CellCProps = ConfigurableProps<CellProps>\n","import { ref } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\n\nexport type BreakPoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'\n\nexport const breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\nexport const currentBreakPoint = ref<BreakPoint>('xs')\n\nif (isClient) {\n  const computedStyle = getComputedStyle(document.documentElement)\n  const queryMap = {} as Record<BreakPoint, MediaQueryList>\n\n  breakPoints.forEach(point => {\n    const media = computedStyle.getPropertyValue(`--vxp-break-point-${point}`).trim()\n    const query = matchMedia(`only screen and ${media}`)\n\n    query.addEventListener('change', handleBreakPointChange)\n    queryMap[point] = query\n  })\n\n  const queryEntries = Object.entries(queryMap).reverse() as [BreakPoint, MediaQueryList][]\n\n  function handleBreakPointChange() {\n    for (const [point, query] of queryEntries) {\n      if (query.matches) {\n        currentBreakPoint.value = point\n        break\n      }\n    }\n  }\n\n  handleBreakPointChange()\n}\n","import type { InjectionKey } from 'vue'\n\nexport type LayoutProp = number | string | (number | string)[]\n\nexport type GridJustify =\n  | 'start'\n  | 'end'\n  | 'center'\n  | 'space-around'\n  | 'space-between'\n  | 'space-evenly'\nexport type GridAlign = 'top' | 'middle' | 'bottom' | 'stretch'\n\nexport interface CellFlex {\n  justify: 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly',\n  align: 'top' | 'middle' | 'bottom' | 'stretch',\n}\n\nexport interface GridState {\n  cellFlex: CellFlex | false,\n  columns: LayoutProp,\n}\n\nexport interface CellOptions {\n  top?: number | string,\n  left?: number | string,\n  width?: number,\n  height?: number,\n  right?: number | string,\n  bottom?: number | string,\n}\n\nexport const GRID_STATE = '__VXP_GRID_STATE' as unknown as InjectionKey<GridState>\n","import { computed, defineComponent, h, inject, provide, reactive, watch } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { has, isDefined } from '@vexip-ui/utils'\nimport { cellProps } from './props'\nimport { breakPoints, currentBreakPoint } from './helper'\nimport { GRID_STATE } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { ClassType } from '@vexip-ui/config'\nimport type { BreakPoint } from './helper'\n\nexport default defineComponent({\n  name: 'Cell',\n  props: cellProps,\n  setup(_props, { slots }) {\n    const props = useProps('cell', _props, {\n      tag: 'div',\n      top: 'auto',\n      left: 'auto',\n      width: null,\n      height: 1,\n      right: '',\n      bottom: '',\n      xs: null,\n      sm: null,\n      md: null,\n      lg: null,\n      xl: null,\n      xxl: null,\n      useFlex: null,\n    })\n\n    const gridState = inject(GRID_STATE, null)\n    const nh = useNameHelper('cell')\n\n    provide(GRID_STATE, null!)\n\n    const layoutState = reactive({\n      top: props.top,\n      right: props.right,\n      bottom: props.bottom,\n      left: props.left,\n      width: props.width,\n      height: props.height,\n    })\n    const layoutKeys = Object.keys(layoutState) as (\n      | 'top'\n      | 'right'\n      | 'bottom'\n      | 'left'\n      | 'width'\n      | 'height'\n    )[]\n\n    const defaultWidth = computed(() => {\n      if (isDefined(props.width)) {\n        return props.width\n      }\n\n      return gridState?.columns && typeof gridState.columns === 'number' ? gridState.columns : 1\n    })\n\n    watch(\n      currentBreakPoint,\n      value => {\n        const matchSize = queryBreakPointOptions(value)\n\n        if (matchSize) {\n          if (typeof matchSize === 'number') {\n            layoutKeys.forEach(key => {\n              layoutState[key] = props[key] as any\n            })\n\n            layoutState.width = matchSize\n          } else {\n            layoutKeys.forEach(key => {\n              layoutState[key] = has(matchSize, key) ? matchSize[key] : (props[key] as any)\n            })\n\n            layoutState.width = layoutState.width ?? defaultWidth.value\n          }\n        } else {\n          layoutKeys.forEach(key => {\n            layoutState[key] = props[key] as any\n          })\n\n          layoutState.width = defaultWidth.value\n        }\n      },\n      { immediate: true },\n    )\n\n    const className = computed(() => {\n      const cellFlex = props.useFlex !== false &&\n        (props.useFlex || gridState?.cellFlex) && {\n        ...(gridState?.cellFlex || {}),\n        ...(props.useFlex\n          ? props.useFlex === true\n            ? { justify: 'start', align: 'top' }\n            : props.useFlex\n          : {}),\n      }\n      const className: ClassType = {\n        [nh.b()]: true,\n        [nh.bm('inherit')]: gridState || props.inherit,\n        [nh.bm('flex')]: cellFlex,\n      }\n\n      if (cellFlex) {\n        if (cellFlex.justify) className[nh.bm(cellFlex.justify)] = true\n        if (cellFlex.align) className[nh.bm(cellFlex.align)] = true\n      }\n\n      return className\n    })\n    const style = computed(() => {\n      const style: CSSProperties = {}\n\n      const topSet = isPositionSet(layoutState.top)\n      const rightSet = isPositionSet(layoutState.right)\n      const bottomSet = isPositionSet(layoutState.bottom)\n      const leftSet = isPositionSet(layoutState.left)\n\n      if (topSet && bottomSet) {\n        style.gridRowStart = parsePosition(layoutState.top)\n        style.gridRowEnd = parsePosition(layoutState.bottom)\n      } else if (topSet) {\n        style.gridRowStart = parsePosition(layoutState.top)\n        style.gridRowEnd = `span ${layoutState.height}`\n      } else if (bottomSet) {\n        style.gridRowStart = `span ${layoutState.height}`\n        style.gridRowEnd = parsePosition(layoutState.bottom)\n      } else {\n        style.gridRowEnd = `span ${layoutState.height}`\n      }\n\n      if (leftSet && rightSet) {\n        style.gridColumnStart = parsePosition(layoutState.left)\n        style.gridColumnEnd = parsePosition(layoutState.right)\n      } else if (leftSet) {\n        style.gridColumnStart = parsePosition(layoutState.left)\n        style.gridColumnEnd = `span ${layoutState.width}`\n      } else if (rightSet) {\n        style.gridColumnStart = `span ${layoutState.width}`\n        style.gridColumnEnd = parsePosition(layoutState.right)\n      } else {\n        style.gridColumnStart = `span ${layoutState.width}`\n      }\n\n      return style\n    })\n\n    function isPositionSet(value: number | string) {\n      return value === 0 || (value && value !== 'auto')\n    }\n\n    function parsePosition(value: number | string) {\n      return typeof value === 'number' ? value + 1 : value\n    }\n\n    function queryBreakPointOptions(breakPoint: BreakPoint) {\n      const index = breakPoints.findIndex(v => v === breakPoint)\n\n      if (~index) {\n        for (let i = index; i >= 0; --i) {\n          if (isDefined(props[breakPoints[i]])) {\n            return props[breakPoints[i]]\n          }\n        }\n      }\n\n      return null\n    }\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value,\n        },\n        {\n          default: () => slots.default?.(),\n        },\n      )\n  },\n})\n","<script setup lang=\"ts\">\nimport { useFieldStore } from '@/components/form'\nimport { Checkbox } from '@/components/checkbox'\n\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport {\n  adjustAlpha,\n  debounceMinor,\n  isClient,\n  isDefined,\n  isObject,\n  parseColorToRgba,\n} from '@vexip-ui/utils'\nimport { checkboxGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { ControlState } from './symbol'\n\ndefineOptions({ name: 'CheckboxGroup' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<(string | number)[]>(focus)\n\nconst _props = defineProps(checkboxGroupProps)\nconst props = useProps('checkboxGroup', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  vertical: false,\n  disabled: () => disabled.value,\n  border: false,\n  options: {\n    default: () => [],\n    static: true,\n  },\n  loading: () => loading.value,\n  control: null,\n  loadingLock: false,\n  color: null,\n  stateColor: false,\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst nh = useNameHelper('checkbox-group')\nconst locale = useLocale('checkbox', toRef(props, 'locale'))\nconst valueMap = new Map<string | number, boolean>()\nconst inputSet = new Set<Ref<HTMLElement | null | undefined>>()\nconst controlSet = new Set<ControlState>()\nconst currentValues = ref<(string | number)[]>(props.value || [])\n\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('checkbox-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('vertical')]: props.vertical,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('border')]: props.border,\n      [nh.bm(props.state)]: props.state !== 'default',\n    },\n  ]\n})\nconst controlLabel = computed(() => {\n  return typeof props.control === 'string' ? props.control : locale.value.all\n})\nconst colorMap = computed(() => {\n  if (!props.color) return null\n\n  const baseColor = parseColorToRgba(props.color)\n\n  return {\n    base: baseColor.toString(),\n    opacity6: adjustAlpha(baseColor, 0.4).toString(),\n  }\n})\n\nconst updateValue = debounceMinor(() => {\n  currentValues.value = []\n\n  valueMap.forEach((checked, value) => {\n    if (checked) {\n      currentValues.value.push(value)\n    }\n  })\n\n  handleChange(currentValues.value)\n})\n\nconst updateControl = debounceMinor(() => {\n  const valueLength = currentValues.value.length\n  const checked = valueLength === valueMap.size\n  const partial = valueLength > 0 && !checked\n\n  controlSet.forEach(state => {\n    state.checked = checked\n    state.partial = partial\n  })\n})\n\nprovide(\n  GROUP_STATE,\n  reactive({\n    currentValues,\n    size: toRef(props, 'size'),\n    state: toRef(props, 'state'),\n    disabled: toRef(props, 'disabled'),\n    loading: toRef(props, 'loading'),\n    loadingLock: toRef(props, 'loadingLock'),\n    colorMap,\n    stateColor: toRef(props, 'stateColor'),\n    increaseItem,\n    decreaseItem,\n    increaseControl,\n    decreaseControl,\n    handleControlChange,\n    setItemChecked,\n    replaceValue,\n  }),\n)\n\nwatch(\n  () => props.value,\n  value => {\n    const checkedValues = new Set(value)\n    const allValues = Array.from(valueMap.keys())\n\n    currentValues.value = []\n\n    allValues.forEach(value => {\n      const checked = checkedValues.has(value)\n\n      valueMap.set(value, checkedValues.has(value))\n      checked && currentValues.value.push(value)\n    })\n  },\n)\nwatch(currentValues, () => {\n  updateControl()\n})\n\nfunction increaseItem(\n  value: string | number,\n  checked: boolean,\n  input: Ref<HTMLElement | null | undefined>,\n) {\n  valueMap.set(value, checked)\n  inputSet.add(input)\n}\n\nfunction decreaseItem(value: string | number, input: Ref<HTMLElement | null | undefined>) {\n  valueMap.delete(value)\n  inputSet.delete(input)\n}\n\nfunction increaseControl(state: ControlState) {\n  controlSet.add(state)\n  updateControl()\n}\n\nfunction decreaseControl(state: ControlState) {\n  controlSet.delete(state)\n}\n\nfunction setItemChecked(value: string | number, checked: boolean) {\n  if (!isDefined(value) || !valueMap.has(value)) return\n\n  valueMap.set(value, checked)\n  updateValue()\n  updateControl()\n}\n\nfunction handleControlChange() {\n  // 在 group 层进行更新, 未选满则全选, 反之全不选\n  const allValues = Array.from(valueMap.keys())\n  const checked = currentValues.value.length !== allValues.length\n\n  allValues.forEach(value => {\n    valueMap.set(value, checked)\n  })\n\n  updateValue()\n  updateControl()\n}\n\nfunction handleChange(value: (string | number)[]) {\n  emit('update:value', value)\n  setFieldValue(value)\n  emitEvent(props.onChange, value)\n  validateField()\n}\n\nfunction replaceValue(prevValue: string | number, newValue: string | number) {\n  if (\n    isDefined(prevValue) &&\n    isDefined(newValue) &&\n    prevValue !== newValue &&\n    valueMap.has(prevValue)\n  ) {\n    valueMap.set(newValue, valueMap.get(prevValue)!)\n    valueMap.delete(prevValue)\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  const input = Array.from(inputSet)[0]?.value\n\n  if (isClient && input && document.activeElement !== input) {\n    input.focus(options)\n  }\n}\n\ndefineExpose({\n  idFor,\n  labelId,\n  increaseControl,\n  decreaseControl,\n  focus,\n  blur: () => {\n    for (const input of inputSet) {\n      input.value?.blur()\n    }\n  },\n})\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n  >\n    <slot>\n      <Checkbox v-if=\"props.control\" inherit control>\n        {{ controlLabel }}\n      </Checkbox>\n      <template v-for=\"(item, index) in props.options\" :key=\"index\">\n        <Checkbox\n          v-if=\"isObject(item)\"\n          inherit\n          :value=\"item.value\"\n          :control=\"item.control\"\n          :disabled=\"item.disabled\"\n        >\n          {{ item.label || item.value }}\n        </Checkbox>\n        <Checkbox v-else inherit :value=\"item\">\n          {{ item }}\n        </Checkbox>\n      </template>\n    </slot>\n  </div>\n</template>\n","import type { InjectionKey } from 'vue'\n\nexport type CollapseArrowType = 'right' | 'left' | 'none'\nexport type CollapseAliveType = 'always' | 'mounted' | 'never'\n\nexport interface PanelState {\n  tab?: HTMLElement | null,\n  label: string | number,\n  expanded: boolean,\n  setExpanded: (expanded: boolean) => void,\n}\n\nexport interface CollapseState {\n  arrowType: CollapseArrowType,\n  alive: boolean | CollapseAliveType,\n  registerPanel(panel: PanelState): void,\n  unregisterPanel(panel: PanelState): void,\n  expandPanel(label: string | number, expanded: boolean): void,\n  refreshLabels: () => void,\n}\n\nexport interface CollapsePanelSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  /**\n   * @internal\n   */\n  title?: () => any,\n  arrow?: (params: { expanded: boolean }) => any,\n}\n\nexport const COLLAPSE_STATE = '__VXP_COLLAPSE_STATE' as unknown as InjectionKey<CollapseState>\n\nlet idCount = 0\n\nexport function getIndexId() {\n  return idCount++\n}\n","<script setup lang=\"ts\">\nimport {\n  computed,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useModifier } from '@vexip-ui/hooks'\nimport { debounceMinor, isNull, removeArrayItem } from '@vexip-ui/utils'\nimport { collapseProps } from './props'\nimport { COLLAPSE_STATE } from './symbol'\n\nimport type { CollapseArrowType, PanelState } from './symbol'\n\ndefineOptions({ name: 'Collapse' })\n\nconst _props = defineProps(collapseProps)\nconst props = useProps('collapse', _props, {\n  expanded: {\n    default: null,\n    static: true,\n  },\n  card: false,\n  accordion: false,\n  arrowType: {\n    default: 'right' as CollapseArrowType,\n    validator: (value: CollapseArrowType) => ['right', 'left', 'none'].includes(value),\n  },\n  ghost: false,\n  alive: false,\n})\n\nconst emit = defineEmits(['update:expanded'])\n\nconst nh = useNameHelper('collapse')\nconst panelStates = reactive(new Set<PanelState>())\nconst currentExpanded = ref<(string | number)[]>([])\n\nconst { target: wrapper } = useModifier({\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.left || modifier.right) {\n      if (!wrapper.value || ![...panelStates].find(({ tab }) => tab === event.target)) return\n\n      const tabs = Array.from(wrapper.value.querySelectorAll(nh.cbe('header'))) as HTMLElement[]\n\n      if (tabs.length < 1) return\n\n      event.preventDefault()\n      event.stopPropagation()\n\n      const index = document.activeElement\n        ? tabs.findIndex(panel => panel === document.activeElement)\n        : -1\n\n      if (~index) {\n        const target = tabs[(index + (modifier.left ? -1 : 1) + tabs.length) % tabs.length]\n\n        target?.focus()\n      }\n    } else if (modifier.escape) {\n      event.preventDefault()\n      event.stopPropagation()\n\n      clearExpanded()\n    }\n  },\n})\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`arrow-${props.arrowType}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('card')]: props.card,\n      [nh.bm('ghost')]: !props.card && props.ghost,\n    },\n  ]\n})\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(panelStates.values()).forEach((item, index) => {\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n\n  if (panelStates.size) {\n    for (const panel of panelStates) {\n      if (currentExpanded.value.includes(panel.label)) {\n        panel.expanded = true\n      } else if (panel.expanded) {\n        expandPanel(panel.label, true)\n      }\n    }\n  }\n})\n\nprovide(\n  COLLAPSE_STATE,\n  reactive({\n    arrowType: toRef(props, 'arrowType'),\n    alive: toRef(props, 'alive'),\n    registerPanel,\n    unregisterPanel,\n    expandPanel,\n    refreshLabels,\n  }),\n)\n\nwatchEffect(() => {\n  const rawExpanded = props.expanded\n  const expanded =\n    props.accordion && Array.isArray(rawExpanded)\n      ? rawExpanded[0]\n      : rawExpanded || rawExpanded === 0\n        ? rawExpanded\n        : []\n\n  currentExpanded.value = Array.isArray(expanded) ? Array.from(expanded) : [expanded]\n})\n\nonMounted(() => {\n  nextTick(updateItemExpanded)\n\n  watch(currentExpanded, (prev, next) => {\n    if (!isSameExpanded(prev, next)) {\n      updateItemExpanded()\n    }\n  })\n})\n\ndefineExpose({ currentExpanded, wrapper })\n\nfunction registerPanel(panel: PanelState) {\n  panelStates.add(panel)\n\n  refreshLabels()\n}\n\nfunction unregisterPanel(panel: PanelState) {\n  panelStates.delete(panel)\n  expandPanel(panel.label, false)\n  refreshLabels()\n}\n\nfunction isSameExpanded(prev: (string | number)[], next: (string | number)[]) {\n  const prevSet = new Set(prev)\n\n  if (prevSet.size !== new Set(next).size) return false\n\n  return next.every(item => prevSet.has(item))\n}\n\nfunction expandPanel(label: string | number, expanded: boolean) {\n  if (!label && label !== 0) return\n\n  if (props.accordion) {\n    currentExpanded.value = expanded ? [label] : []\n  } else {\n    if (expanded) {\n      currentExpanded.value.push(label)\n    } else {\n      removeArrayItem(currentExpanded.value, label)\n    }\n  }\n\n  emitChangeEvent()\n  updateItemExpanded()\n}\n\nfunction clearExpanded() {\n  if (!currentExpanded.value.length) return\n\n  currentExpanded.value = []\n\n  emitChangeEvent()\n  updateItemExpanded()\n}\n\nfunction emitChangeEvent() {\n  emit('update:expanded', currentExpanded.value)\n  emitEvent(props.onChange, currentExpanded.value)\n}\n\nfunction updateItemExpanded() {\n  panelStates.forEach(panel => {\n    panel.setExpanded(currentExpanded.value.includes(panel.label))\n  })\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"tablist\"\n    tabindex=\"-1\"\n  >\n    <slot></slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { collapsePanelProps } from './props'\nimport { COLLAPSE_STATE, getIndexId } from './symbol'\n\nimport type { CollapseArrowType, CollapsePanelSlots, PanelState } from './symbol'\n\ndefineOptions({ name: 'CollapsePanel' })\n\nconst _props = defineProps(collapsePanelProps)\nconst props = useProps('collapsePanel', _props, {\n  label: {\n    default: null,\n    static: true,\n  },\n  title: '',\n  disabled: false,\n  contentStyle: null,\n  expanded: false,\n  card: false,\n  arrowType: {\n    default: 'right' as CollapseArrowType,\n    validator: (value: CollapseArrowType) => ['right', 'left', 'none'].includes(value),\n  },\n  icon: createIconProp(),\n  ghost: false,\n  alive: null,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:expanded'])\n\ndefineSlots<CollapsePanelSlots>()\n\nconst collapseState = inject(COLLAPSE_STATE, null)\n\nconst nh = useNameHelper('collapse')\nconst icons = useIcons()\nconst currentExpanded = ref(props.expanded)\nconst currentLabel = ref(props.label)\nconst loaded = ref(currentExpanded.value)\n\nconst tab = ref<HTMLElement>()\n\nconst id = getIndexId()\n\nconst tabId = computed(() => `${nh.be('tab')}-${id}`)\nconst bodyId = computed(() => `${nh.be('body')}-${id}`)\nconst useCard = computed(() => {\n  if (!collapseState) {\n    return props.card\n  }\n\n  return false\n})\nconst useGhost = computed(() => {\n  if (!collapseState) {\n    return props.ghost\n  }\n\n  return false\n})\nconst useArrowType = computed(() => {\n  if (collapseState) {\n    return collapseState.arrowType\n  }\n\n  return props.arrowType\n})\nconst alive = computed(() => {\n  // 以 CollapsePanel 自身的 alive 属性优先\n  return props.alive ?? collapseState?.alive ?? false\n})\nconst className = computed(() => {\n  return [\n    nh.be('panel'),\n    nh.bs('vars'),\n    nh.bem('panel', `arrow-${useArrowType.value}`),\n    {\n      [nh.bem('panel', 'inherit')]: collapseState || props.inherit,\n      [nh.bem('panel', 'card')]: useCard.value,\n      [nh.bem('panel', 'ghost')]: !useCard.value && useGhost.value,\n      [nh.bem('panel', 'expanded')]: currentExpanded.value,\n      [nh.bem('panel', 'disabled')]: props.disabled,\n    },\n  ]\n})\n\nif (collapseState) {\n  const state: PanelState = reactive({\n    tab,\n    label: currentLabel,\n    expanded: currentExpanded,\n    setExpanded,\n  })\n\n  watch(\n    () => props.label,\n    value => {\n      const prevValue = currentLabel.value\n      currentLabel.value = value || value === 0 ? value : prevValue\n    },\n  )\n\n  collapseState.registerPanel(state)\n\n  onBeforeUnmount(() => {\n    collapseState.unregisterPanel(state)\n  })\n} else {\n  watch(\n    () => props.expanded,\n    value => {\n      currentExpanded.value = value\n    },\n  )\n}\n\nconst ifDirectiveValue = computed(() => {\n  switch (alive.value) {\n    case true:\n    case 'always':\n      return true\n    case 'mounted':\n      return loaded.value\n    default:\n      return currentExpanded.value\n  }\n})\n\nconst showDirectiveValue = computed(() => {\n  return !alive.value || currentExpanded.value\n})\n\nif (!currentExpanded.value) {\n  watch(\n    currentExpanded,\n    () => {\n      loaded.value = true\n    },\n    { once: true },\n  )\n}\n\nfunction setExpanded(expanded: boolean) {\n  currentExpanded.value = expanded\n\n  emit('update:expanded', expanded)\n  emitEvent(props.onToggle, expanded)\n}\n\nfunction handleToggle(expanded = !currentExpanded.value) {\n  if (props.disabled) return\n\n  if (collapseState) {\n    // 由父级进行管理\n    collapseState.expandPanel(currentLabel.value, expanded)\n  } else {\n    setExpanded(expanded)\n  }\n}\n\ndefineExpose({\n  currentExpanded,\n  tab,\n  tabId,\n  bodyId,\n  handleToggle,\n})\n</script>\n\n<template>\n  <section :class=\"className\">\n    <button\n      :id=\"tabId\"\n      ref=\"tab\"\n      :class=\"nh.be('header')\"\n      type=\"button\"\n      role=\"tab\"\n      :aria-expanded=\"currentExpanded\"\n      :aria-controls=\"bodyId\"\n      :aria-describedby=\"bodyId\"\n      @click=\"handleToggle()\"\n    >\n      <div :class=\"nh.be('arrow')\">\n        <slot name=\"arrow\" :expanded=\"currentExpanded\">\n          <Renderer :renderer=\"props.slots.arrow\" :data=\"{ expanded: currentExpanded }\">\n            <Icon v-bind=\"icons.angleRight\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <slot name=\"title\">\n        <div v-if=\"props.icon\" :class=\"nh.be('icon')\">\n          <Icon :icon=\"props.icon\"></Icon>\n        </div>\n        {{ props.title }}\n      </slot>\n    </button>\n    <CollapseTransition>\n      <div\n        v-if=\"ifDirectiveValue\"\n        v-show=\"showDirectiveValue\"\n        :id=\"bodyId\"\n        :class=\"nh.be('body')\"\n        role=\"tabpanel\"\n        tabindex=\"0\"\n        :aria-labelledby=\"tabId\"\n      >\n        <div :class=\"nh.be('content')\" :style=\"props.contentStyle\">\n          <slot></slot>\n        </div>\n      </div>\n    </CollapseTransition>\n  </section>\n</template>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('palette')\"\n    tabindex=\"-1\"\n    role=\"group\"\n    :style=\"{\n      backgroundColor: `hsl(${hue}, 100%, 50%)`\n    }\"\n  >\n    <div :class=\"nh.be('saturation')\" role=\"none\"></div>\n    <div :class=\"nh.be('value')\" role=\"none\"></div>\n    <div\n      :class=\"nh.be('palette-handler')\"\n      :style=\"{\n        top: `${currentTop}%`,\n        left: `${currentLeft}%`\n      }\"\n    >\n      <div :class=\"nh.be('palette-pointer')\"></div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorPalette',\n  props: {\n    hue: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 360\n      },\n    },\n    value: {\n      type: Number,\n      default: 1,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      },\n    },\n    saturation: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      },\n    },\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentTop = ref((1 - props.value) * 100)\n    const currentLeft = ref(props.saturation * 100)\n\n    let prevTop = currentTop.value\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let heightLimit: number\n    let topStartAt: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.up || modifier.down || modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const sign = modifier.up || modifier.left ? -1 : 1\n          const delta = step * sign\n\n          if (modifier.up || modifier.down) {\n            currentTop.value += delta\n          } else {\n            currentLeft.value += delta\n          }\n\n          verifyPosition()\n          prevTop = currentTop.value\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { top, left, width, height } = rect\n\n        widthLimit = width\n        heightLimit = height\n\n        currentTop.value = ((topStartAt = state.clientY - top) / height) * 100\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        let changed = false\n\n        if (Math.abs(currentTop.value - prevTop) >= 0.01) {\n          prevTop = currentTop.value\n          changed = true\n        }\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          changed = true\n        }\n\n        changed && handleChange()\n      },\n      onMove: state => {\n        currentTop.value = ((topStartAt + state.deltaY) / heightLimit) * 100\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      },\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        currentTop.value = (1 - value) * 100\n        verifyPosition()\n      },\n      { immediate: true },\n    )\n    watch(\n      () => props.saturation,\n      value => {\n        currentLeft.value = value * 100\n        verifyPosition()\n      },\n      { immediate: true },\n    )\n\n    function verifyPosition() {\n      currentTop.value = toFixed(boundRange(currentTop.value, 0, 100), 3)\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', {\n        h: props.hue,\n        s: currentLeft.value / 100,\n        v: toFixed(1 - currentTop.value / 100, 3),\n      })\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentTop,\n      currentLeft,\n      editing,\n\n      wrapper,\n\n      // handleMouseDown\n    }\n  },\n})\n</script>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('hue')\"\n    tabindex=\"-1\"\n    role=\"group\"\n  >\n    <div :class=\"nh.be('hue-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorHue',\n  props: {\n    hue: {\n      type: Number,\n      default: 0,\n      validator: (value: number) => {\n        return value >= 0 && value <= 360\n      },\n    },\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentLeft = ref(props.hue * 100)\n\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const delta = step * (modifier.left ? -1 : 1)\n\n          currentLeft.value += delta\n\n          verifyPosition()\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { left, width } = rect\n\n        widthLimit = width\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n      onMove: state => {\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      },\n    })\n\n    watch(\n      () => props.hue,\n      value => {\n        currentLeft.value = (value / 360) * 100\n        verifyPosition()\n      },\n      { immediate: true },\n    )\n\n    function verifyPosition() {\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', (currentLeft.value / 100) * 360)\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentLeft,\n      editing,\n\n      wrapper,\n    }\n  },\n})\n</script>\n","<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('alpha')\"\n    tabindex=\"-1\"\n    role=\"group\"\n  >\n    <div\n      :class=\"nh.be('opacity')\"\n      :style=\"{\n        backgroundImage: `linear-gradient(to right, rgba(${rgbString}, 0) 0%, rgb(${rgbString}) 100%)`\n      }\"\n    ></div>\n    <div :class=\"nh.be('alpha-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { RGBColor } from '@vexip-ui/utils'\n\nexport default defineComponent({\n  name: 'ColorAlpha',\n  props: {\n    rgb: {\n      type: Object as PropType<RGBColor>,\n      default: () => {\n        return { r: 0, g: 0, b: 0 }\n      },\n      validator: (value: RGBColor) => {\n        return 'r' in value && 'g' in value && 'b' in value\n      },\n    },\n    alpha: {\n      type: Number,\n      default: 1,\n      validator: (value: number) => {\n        return value >= 0 && value <= 1\n      },\n    },\n  },\n  emits: ['edit-start', 'edit-end', 'change'],\n  setup(props, { emit }) {\n    const currentLeft = ref(props.alpha * 100)\n\n    let prevLeft = currentLeft.value\n    let widthLimit: number\n    let leftStartAt: number\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (modifier.left || modifier.right) {\n          event.preventDefault()\n\n          const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n          const delta = step * (modifier.left ? -1 : 1)\n\n          currentLeft.value += delta\n\n          verifyPosition()\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n    })\n\n    const { moving: editing } = useMoving({\n      target: wrapper,\n      onStart: (state, event) => {\n        if (!wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const rect = wrapper.value.getBoundingClientRect()\n        const { left, width } = rect\n\n        widthLimit = width\n        currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n        verifyPosition()\n        emit('edit-start')\n\n        if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n          prevLeft = currentLeft.value\n          handleChange()\n        }\n      },\n      onMove: state => {\n        currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n        verifyPosition()\n        handleChange()\n      },\n      onEnd: () => {\n        emit('edit-end')\n      },\n    })\n\n    const rgbString = computed(() => {\n      const { r, g, b } = props.rgb\n\n      return `${r}, ${g}, ${b}`\n    })\n\n    verifyPosition()\n\n    watch(\n      () => props.alpha,\n      value => {\n        currentLeft.value = value * 100\n        verifyPosition()\n      },\n      { immediate: true },\n    )\n\n    function verifyPosition() {\n      currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n    }\n\n    function handleChange() {\n      emit('change', currentLeft.value / 100)\n    }\n\n    return {\n      nh: useNameHelper('color-picker'),\n      currentLeft,\n      editing,\n\n      rgbString,\n\n      wrapper,\n    }\n  },\n})\n</script>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { Color, HSLAColor, HSVAColor, RGBAColor } from '@vexip-ui/utils'\nimport type { ColorFormat, ColorPrickerSlots } from './symbol'\n\ntype FormattedColor = string | RGBAColor | HSLAColor | HSVAColor\n\nexport const colorPickerProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('colorPicker'),\n  value: [String, Object] as PropType<Color | null>,\n  visible: booleanProp,\n  format: String as PropType<ColorFormat>,\n  alpha: booleanProp,\n  disabled: booleanProp,\n  transitionName: String,\n  noInput: booleanProp,\n  shortcut: {\n    type: [Boolean, Array] as PropType<boolean | string[]>,\n    default: null,\n  },\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  outsideClose: booleanProp,\n  clearable: booleanProp,\n  cancelText: String,\n  confirmText: String,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  staticSuffix: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  popperAlive: booleanProp,\n  showLabel: booleanProp,\n  labelFormat: String as PropType<ColorFormat>,\n  slots: Object as PropType<ColorPrickerSlots>,\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n  onClear: eventProp(),\n  onChange: eventProp<(color: FormattedColor) => void>(),\n  onShortcut: eventProp<(color: FormattedColor) => void>(),\n})\n\nexport type ColorPickerProps = ExtractPropTypes<typeof colorPickerProps>\nexport type ColorPickerCProps = ConfigurableProps<ColorPickerProps>\n","import { rgbToHsv } from '@vexip-ui/utils'\n\nimport type { RGBColor } from '@vexip-ui/utils'\n\nexport type ColorFormat = 'rgb' | 'hsl' | 'hsv' | 'hex'\n\nexport interface ColorPrickerSlots {\n  control?: (params: { color: RGBColor, alpha: number, empty: boolean }) => any,\n  prefix?: () => any,\n  suffix?: () => any,\n  label?: (params: { color: RGBColor, alpha: number, empty: boolean, label: string }) => any,\n}\n\nexport const defaultShortcuts = Object.freeze([\n  '#2d8cf0',\n  '#19be6b',\n  '#ff9900',\n  '#ed4014',\n  '#00b5ff',\n  '#19c919',\n  '#f9e31c',\n  '#ea1a1a',\n  '#9b1dea',\n  '#00c2b1',\n  '#ac7a33',\n  '#1d35ea',\n  '#8bc34a',\n  '#f16b62',\n  '#ea4ca3',\n  '#0d94aa',\n  '#febd79',\n  '#5d4037',\n  '#00bcd4',\n  '#f06292',\n  '#cddc39',\n  '#607d8b',\n  '#000000',\n  '#ffffff',\n])\n\nexport const getDefaultHsv = () => rgbToHsv(0, 0, 0)\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, ref, toRef, watch } from 'vue'\n\nimport ColorPalette from './color-palette.vue'\nimport ColorHue from './color-hue.vue'\nimport ColorAlpha from './color-alpha.vue'\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport {\n  getLast,\n  hsvToHsl,\n  hsvToRgb,\n  isClient,\n  isElement,\n  parseColorToRgba,\n  rgbToHex,\n  rgbToHsv,\n  rgbaToHex,\n  toAttrValue,\n  toFixed,\n} from '@vexip-ui/utils'\nimport { colorPickerProps } from './props'\nimport { defaultShortcuts, getDefaultHsv } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Color, HSLAColor, HSVAColor, HSVColor, RGBAColor } from '@vexip-ui/utils'\nimport type { ColorFormat, ColorPrickerSlots } from './symbol'\n\ndefineOptions({ name: 'ColorPicker' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<Color | null>(() => reference.value?.focus())\n\nconst nh = useNameHelper('color-picker')\n\nconst _props = defineProps(colorPickerProps)\nconst props = useProps('colorPicker', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue()!,\n    static: true,\n  },\n  visible: false,\n  format: {\n    default: 'rgb',\n    validator: value => ['rgb', 'hsl', 'hsv', 'hex'].includes(value),\n  },\n  alpha: false,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  noInput: false,\n  shortcut: false,\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value),\n  },\n  transfer: false,\n  outsideClose: true,\n  clearable: false,\n  cancelText: null,\n  confirmText: null,\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  staticSuffix: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  popperAlive: null,\n  showLabel: false,\n  labelFormat: null,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value', 'update:visible'])\n\nconst slots = defineSlots<ColorPrickerSlots>()\n\nconst icons = useIcons()\nconst locale = useLocale('colorPicker', toRef(props, 'locale'))\n\nconst isEmpty = ref(true)\nconst currentVisible = ref(props.visible)\nconst currentValue = ref<HSVColor>(null!)\nconst currentAlpha = ref(1)\nconst editing = ref(false)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst shortcutHitting = ref(0)\nconst shortcutsFocused = ref(false)\n\nparseValue(props.value)\n\nconst palette = ref(null)\nconst hue = ref(null)\nconst alphaEl = ref(null)\nconst shortcutEl = ref(null)\nconst input = ref(null)\nconst cancel = ref(null)\nconst confirm = ref(null)\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n})\nconst { isHover } = useHover(reference)\n\nconst unitList = computed(() => {\n  return [\n    palette.value,\n    hue.value,\n    alphaEl.value,\n    shortcutEl.value,\n    input.value,\n    cancel.value,\n    confirm.value,\n  ].filter(Boolean) as any[]\n})\n\nconst lastValue = ref<HSVAColor>({\n  ...currentValue.value,\n  a: currentAlpha.value,\n  format: 'hsva',\n})\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('empty')]: isEmpty.value && !currentVisible.value,\n    [nh.bm('focused')]: currentVisible.value,\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('alpha')]: props.alpha,\n    [nh.bm(props.size)]: props.size !== 'default',\n    [nh.bm(props.state)]: props.state !== 'default',\n  }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--focused`]: currentVisible.value,\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n  }\n})\nconst rgb = computed(() => {\n  const { h, s, v } =\n    currentValue.value && currentVisible.value\n      ? currentValue.value\n      : (lastValue.value ?? { h: 0, s: 0, v: 0 })\n\n  return hsvToRgb(h, s, v)\n})\nconst hex = computed(() => {\n  const { r, g, b } = rgb.value\n\n  if (props.alpha) {\n    return rgbaToHex(r, g, b, currentAlpha.value)\n  }\n\n  return rgbToHex(r, g, b)\n})\nconst shortcutList = computed(() => {\n  if (!props.shortcut) return []\n\n  if (Array.isArray(props.shortcut)) {\n    return props.shortcut\n  }\n\n  return defaultShortcuts\n})\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !isEmpty.value\n})\nconst formattedColor = computed(() => getFormattedColor(props.format))\nconst labelColor = computed(() => {\n  return (\n    props.labelFormat ? getFormattedColor(props.labelFormat) : formattedColor.value\n  )?.toString()\n})\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  },\n)\nwatch(currentVisible, value => {\n  value && updatePopper()\n})\nwatch(\n  () => props.value,\n  value => {\n    parseValue(value)\n    lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\n  },\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n    }\n  },\n)\n\ndefineExpose({\n  idFor,\n  isEmpty,\n  currentVisible,\n  currentValue,\n  currentAlpha,\n  rgb,\n  hex,\n  labelColor,\n  wrapper,\n  reference,\n  popper,\n  toggleVisible,\n  focus,\n  blur,\n})\n\nfunction parseValue(value: Color | null) {\n  if (value) {\n    const { r, g, b, a } = parseColorToRgba(value)\n\n    isEmpty.value = false\n    currentValue.value = rgbToHsv(r, g, b)\n    currentAlpha.value = a\n  } else {\n    isEmpty.value = true\n    currentValue.value = getDefaultHsv()\n    currentAlpha.value = 1\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction getFormattedColor(format: ColorFormat) {\n  let color: Color\n\n  if (format === 'hex') {\n    const { r, g, b } = rgb.value\n\n    if (props.alpha) {\n      color = rgbaToHex(r, g, b, currentAlpha.value)\n    } else {\n      color = rgbToHex(r, g, b)\n    }\n  } else {\n    switch (format) {\n      case 'rgb': {\n        color = { ...rgb.value } as RGBAColor\n        color.r = Math.round(color.r)\n        color.g = Math.round(color.g)\n        color.b = Math.round(color.b)\n\n        break\n      }\n      case 'hsl': {\n        const { h, s, v } = currentValue.value\n\n        color = hsvToHsl(h, s, v) as HSLAColor\n        color.h = Math.round(color.h)\n        color.s = toFixed(color.s, 3)\n        color.l = toFixed(color.l, 3)\n\n        break\n      }\n      default: {\n        color = { ...currentValue.value } as HSVAColor\n        color.h = Math.round(color.h)\n        color.s = toFixed(color.s, 3)\n        color.v = toFixed(color.v, 3)\n      }\n    }\n\n    color.a = toFixed(currentAlpha.value, 3)\n  }\n\n  return color\n}\n\nfunction handleClickOutside() {\n  if (!editing.value) {\n    emitEvent(props.onClickOutside)\n\n    if (props.outsideClose && currentVisible.value) {\n      setVisible(false)\n      emitEvent(props.onOutsideClose)\n    }\n  }\n}\n\nfunction toggleVisible() {\n  if (props.disabled || readonly.value) return\n\n  setVisible(!currentVisible.value)\n}\n\nfunction handleClear() {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    setVisible(false)\n    emit('update:value', '')\n    emitEvent(props.onChange, '')\n\n    nextTick(() => {\n      parseValue(null)\n      clearField()\n      emitEvent(props.onClear)\n    })\n  }\n}\n\nfunction handleConfirm() {\n  if (props.disabled || readonly.value) return\n\n  lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\n  isEmpty.value = false\n  setVisible(false)\n  handleChange()\n}\n\nfunction handleChange() {\n  const color = formattedColor.value\n\n  emit('update:value', color)\n  setFieldValue(color)\n  emitEvent(props.onChange, color)\n  validateField()\n}\n\nfunction handlePaletteChange({ s, v }: HSVColor) {\n  currentValue.value.s = s\n  currentValue.value.v = v\n}\n\nfunction handleHueChange(hue: number) {\n  currentValue.value.h = hue\n}\n\nfunction handleAlphaChange(alpha: number) {\n  currentAlpha.value = alpha\n}\n\nfunction handleInputColor(value: string) {\n  const { r, g, b, a } = parseColorToRgba(value)\n\n  currentValue.value = rgbToHsv(r, g, b)\n  currentAlpha.value = a\n}\n\nfunction handleShortcutClick(color: string) {\n  const { r, g, b, a } = parseColorToRgba(color)\n\n  currentValue.value = rgbToHsv(r, g, b)\n  currentAlpha.value = a\n\n  emitEvent(props.onShortcut, formattedColor.value)\n}\n\nfunction toggleEditing(able: boolean) {\n  if (!able) {\n    setTimeout(() => {\n      editing.value = false\n    }, 0)\n  } else {\n    editing.value = true\n  }\n}\n\nfunction handleTabDown(event: KeyboardEvent) {\n  if (isClient && currentVisible.value) {\n    const activeEl = document && document.activeElement\n\n    if (!activeEl) return\n\n    event.preventDefault()\n\n    const shift = event.shiftKey\n    const elList = Array.from(unitList.value)\n    const index = elList.findIndex(unit => {\n      const el = isElement(unit) ? unit : unit.$el\n\n      return el === activeEl || el.contains(activeEl)\n    })\n\n    let maybeEl: any\n\n    if (!~index) {\n      maybeEl = shift ? getLast(elList) : elList[0]\n    } else if (shift ? !index : index === elList.length - 1) {\n      maybeEl = reference.value\n    } else {\n      maybeEl = elList[index + (shift ? -1 : 1)]\n    }\n\n    if (maybeEl) {\n      if (typeof maybeEl.focus === 'function') {\n        maybeEl.focus()\n      } else {\n        maybeEl.$el?.focus()\n      }\n    }\n  }\n}\n\nfunction handleShortcutsFocus() {\n  shortcutHitting.value = 0\n  shortcutsFocused.value = true\n}\n\nfunction handleShortcutsKeydown(event: KeyboardEvent) {\n  const key = event.code || event.key\n  const shortcutCount = shortcutList.value.length\n\n  switch (key) {\n    case 'ArrowUp':\n    case 'ArrowLeft': {\n      shortcutHitting.value--\n      break\n    }\n    case 'ArrowDown':\n    case 'ArrowRight': {\n      shortcutHitting.value++\n      break\n    }\n    case 'Enter':\n    case 'Space':\n    case ' ': {\n      const color = shortcutList.value[shortcutHitting.value]\n\n      color && handleShortcutClick(color)\n      break\n    }\n  }\n\n  shortcutHitting.value = (shortcutHitting.value + shortcutCount) % shortcutCount\n}\n\nfunction handleSpaceDown(event: KeyboardEvent) {\n  if (props.disabled) {\n    setVisible(false)\n  } else {\n    event.preventDefault()\n\n    if (currentVisible.value) {\n      handleConfirm()\n      reference.value?.focus()\n    } else {\n      setVisible(true)\n    }\n  }\n}\n\nfunction handleEscDown() {\n  setVisible(false)\n  reference.value?.focus()\n}\n\nfunction focus(options?: FocusOptions) {\n  reference.value?.focus(options)\n}\n\nfunction blur() {\n  reference.value?.blur()\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"listbox\"\n    :aria-labelledby=\"labelId\"\n    @click=\"toggleVisible\"\n    @keydown.tab.stop=\"handleTabDown\"\n    @keydown.space=\"handleSpaceDown\"\n    @keydown.escape=\"handleEscDown\"\n  >\n    <div ref=\"reference\" :class=\"selectorClass\" tabindex=\"0\">\n      <slot\n        name=\"control\"\n        :color=\"rgb\"\n        :alpha=\"currentAlpha\"\n        :empty=\"isEmpty\"\n      >\n        <Renderer\n          :renderer=\"props.slots.control\"\n          :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty }\"\n        >\n          <div\n            v-if=\"hasPrefix\"\n            :class=\"[nh.be('icon'), nh.be('prefix')]\"\n            :style=\"{ color: props.prefixColor }\"\n          >\n            <slot name=\"prefix\">\n              <Renderer :renderer=\"props.slots.prefix\">\n                <Icon :icon=\"props.prefix\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <div :class=\"nh.be('control')\">\n            <div :class=\"[nh.be('marker'), showLabel && nh.bem('marker', 'with-label')]\">\n              <Icon v-if=\"!currentVisible && isEmpty\" v-bind=\"icons.close\"></Icon>\n              <div\n                v-else\n                :style=\"{\n                  width: '100%',\n                  height: '100%',\n                  backgroundColor: `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${\n                    currentVisible ? currentAlpha : lastValue.a\n                  })`\n                }\"\n              ></div>\n            </div>\n            <div v-if=\"showLabel\" :class=\"nh.be('label')\">\n              <slot\n                name=\"label\"\n                :color=\"rgb\"\n                :alpha=\"currentAlpha\"\n                :empty=\"isEmpty\"\n                :label=\"labelColor\"\n              >\n                <Renderer\n                  :renderer=\"props.slots.label\"\n                  :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty, label: labelColor }\"\n                >\n                  {{ labelColor }}\n                </Renderer>\n              </slot>\n            </div>\n          </div>\n          <div\n            v-if=\"!props.noSuffix\"\n            :class=\"[nh.be('icon'), nh.be('suffix')]\"\n            :style=\"{\n              color: props.suffixColor,\n              opacity: showClear || props.loading ? '0%' : ''\n            }\"\n          >\n            <slot name=\"suffix\">\n              <Renderer :renderer=\"props.slots.suffix\">\n                <Icon\n                  v-if=\"props.suffix\"\n                  :icon=\"props.suffix\"\n                  :class=\"{\n                    [nh.be('arrow')]: !props.staticSuffix\n                  }\"\n                ></Icon>\n                <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <div\n            v-else-if=\"props.clearable || props.loading\"\n            :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n          ></div>\n          <Transition :name=\"nh.ns('fade')\" appear>\n            <button\n              v-if=\"showClear\"\n              :class=\"[nh.be('icon'), nh.be('clear')]\"\n              type=\"button\"\n              tabindex=\"-1\"\n              :aria-label=\"locale.ariaLabel.clear\"\n              @click.stop=\"handleClear\"\n            >\n              <Icon v-bind=\"icons.clear\"></Icon>\n            </button>\n            <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n              <Icon\n                v-bind=\"icons.loading\"\n                :effect=\"props.loadingEffect || icons.loading.effect\"\n                :icon=\"props.loadingIcon || icons.loading.icon\"\n              ></Icon>\n            </div>\n          </Transition>\n        </Renderer>\n      </slot>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop\n      @keydown.tab.stop=\"handleTabDown\"\n      @keydown.space=\"handleSpaceDown\"\n      @keydown.escape=\"handleEscDown\"\n    >\n      <div :class=\"nh.be('panel')\">\n        <div :class=\"nh.be('section')\">\n          <ColorPalette\n            ref=\"palette\"\n            :hue=\"currentValue.h\"\n            :saturation=\"currentValue.s\"\n            :value=\"currentValue.v\"\n            @edit-start=\"toggleEditing(true)\"\n            @edit-end=\"toggleEditing(false)\"\n            @change=\"handlePaletteChange\"\n          ></ColorPalette>\n          <ColorHue\n            ref=\"hue\"\n            :hue=\"currentValue.h\"\n            @edit-start=\"toggleEditing(true)\"\n            @edit-end=\"toggleEditing(false)\"\n            @change=\"handleHueChange\"\n          ></ColorHue>\n          <ColorAlpha\n            v-if=\"props.alpha\"\n            ref=\"alphaEl\"\n            :rgb=\"rgb\"\n            :alpha=\"currentAlpha\"\n            @edit-start=\"toggleEditing(true)\"\n            @edit-end=\"toggleEditing(false)\"\n            @change=\"handleAlphaChange\"\n          ></ColorAlpha>\n          <div\n            v-if=\"props.shortcut\"\n            ref=\"shortcutEl\"\n            :class=\"nh.be('shortcuts')\"\n            tabindex=\"-1\"\n            @focus=\"handleShortcutsFocus\"\n            @blur=\"shortcutsFocused = false\"\n            @keydown=\"handleShortcutsKeydown\"\n          >\n            <div\n              v-for=\"(item, index) in shortcutList\"\n              :key=\"index\"\n              :class=\"{\n                [nh.be('shortcut-item')]: true,\n                [nh.bem('shortcut-item', 'hitting')]: shortcutsFocused && shortcutHitting === index\n              }\"\n              :style=\"{ backgroundColor: item }\"\n              @click=\"handleShortcutClick(item)\"\n            ></div>\n          </div>\n        </div>\n        <div :class=\"nh.be('action')\">\n          <Input\n            v-if=\"!props.noInput\"\n            ref=\"input\"\n            inherit\n            :class=\"nh.be('input')\"\n            size=\"small\"\n            :value=\"hex.toUpperCase()\"\n            :respond=\"false\"\n            @change=\"handleInputColor\"\n          ></Input>\n          <Button\n            v-if=\"props.clearable\"\n            ref=\"cancel\"\n            inherit\n            text\n            size=\"small\"\n            @click=\"handleClear\"\n          >\n            {{ props.cancelText || locale.cancel }}\n          </Button>\n          <Button\n            ref=\"confirm\"\n            inherit\n            type=\"primary\"\n            size=\"small\"\n            @click=\"handleConfirm\"\n          >\n            {{ props.confirmText || locale.confirm }}\n          </Button>\n        </div>\n      </div>\n    </Popper>\n  </div>\n</template>\n","import { wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconsOptions, LocaleOptions } from '@vexip-ui/config'\nimport type { PropsOptions } from '@/components/props'\n\nexport const configProviderProps = wrapProps({\n  props: {\n    type: Object as PropType<PropsOptions>,\n    default: () => ({}),\n  },\n  locale: {\n    type: Object as PropType<LocaleOptions>,\n    default: () => ({}),\n  },\n  icons: {\n    type: Object as PropType<IconsOptions>,\n    default: () => ({}),\n  },\n  zIndex: {\n    type: Number,\n    default: null,\n  },\n  theme: {\n    type: String as PropType<'base' | 'dark' | (string & {})>,\n    default: null,\n  },\n  hoverDelay: {\n    type: Number,\n    default: null,\n  },\n})\n\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>\n","import { defineComponent, renderSlot, toRefs } from 'vue'\n\nimport {\n  configHoverDelay,\n  configIcons,\n  configLocale,\n  configProps,\n  configZIndex,\n  useNameHelper,\n} from '@vexip-ui/config'\nimport { configProviderProps } from './props'\n\nexport default defineComponent({\n  name: 'ConfigProvider',\n  props: configProviderProps,\n  setup(_props, { slots }) {\n    const { props, locale, icons, zIndex, theme, hoverDelay } = toRefs(_props)\n\n    const nh = useNameHelper('config-provider')\n\n    configProps(props)\n    configLocale(locale)\n    configIcons(icons)\n    configZIndex(zIndex)\n    configHoverDelay(hoverDelay)\n\n    return () => {\n      if (theme.value) {\n        return (\n          <section class={[nh.b(), nh.ns(`theme-vars-${theme.value}`)]}>\n            {renderSlot(slots, 'default')}\n          </section>\n        )\n      }\n\n      return renderSlot(slots, 'default')\n    }\n  },\n})\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const maskerProps = buildProps({\n  active: booleanProp,\n  closable: booleanProp,\n  inner: booleanProp,\n  maskTransition: String,\n  transitionName: String,\n  disabled: booleanProp,\n  onBeforeClose: Function as PropType<() => any | Promise<any>>,\n  transfer: booleanStringProp,\n  autoRemove: booleanProp,\n  permeable: booleanProp,\n  disableEsc: booleanProp,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onClose: eventProp(),\n  onHide: eventProp(),\n  onShow: eventProp(),\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n  onMaskClick: eventProp<(event: MouseEvent) => void>(),\n})\n\nexport type MaskerProps = ExtractPropTypes<typeof maskerProps>\nexport type MaskerCProps = ConfigurableProps<MaskerProps, never, 'onBeforeClose'>\n","<script setup lang=\"ts\">\nimport { Portal } from '@/components/portal'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { getLast, isPromise, queryTabables } from '@vexip-ui/utils'\nimport { maskerProps } from './props'\n\ndefineOptions({ name: 'Masker' })\n\nconst nh = useNameHelper('masker')\nconst _props = defineProps(maskerProps)\nconst props = useProps('masker', _props, {\n  active: {\n    default: false,\n    static: true,\n  },\n  closable: false,\n  inner: false,\n  maskTransition: () => nh.ns('fade'),\n  transitionName: () => nh.ns('fade'),\n  disabled: false,\n  onBeforeClose: {\n    default: null,\n    isFunc: true,\n  },\n  transfer: false,\n  autoRemove: false,\n  permeable: false,\n  disableEsc: false,\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<{\n  mask?: () => any,\n  default?: (params: { show: boolean }) => any,\n}>()\n\nconst getIndex = useZIndex()\n\nconst currentActive = ref(props.active)\n// If initial active, we should set a valid index as initial value\nconst zIndex = ref(props.active ? getIndex() : 0)\nconst wrapperShow = ref(props.active)\n\nconst wrapper = ref<HTMLElement>()\nconst topTrap = ref<HTMLElement>()\nconst bottomTrap = ref<HTMLElement>()\n\nlet maskShow = false\nlet contentShow = false\nlet stable = false\nlet prevFocusedEl: HTMLElement | null = null\n\nconst transferTo = computed(() => {\n  return props.inner\n    ? ''\n    : typeof props.transfer === 'boolean'\n      ? props.transfer\n        ? 'body'\n        : ''\n      : props.transfer\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: transferTo.value !== 'body' && props.inherit,\n      [nh.bm('inner')]: props.inner,\n      [nh.bm('disabled')]: props.disabled,\n    },\n  ]\n})\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n\n    if (value) {\n      wrapperShow.value = value\n    }\n  },\n)\nwatch(currentActive, value => {\n  if (!value) {\n    stable = false\n\n    if (prevFocusedEl) {\n      prevFocusedEl.focus()\n      prevFocusedEl = null\n    }\n  } else {\n    prevFocusedEl = document.activeElement as HTMLElement\n    zIndex.value = getIndex()\n  }\n\n  if ((!props.maskTransition || props.disabled) && !props.transitionName) {\n    value ? afterOpen() : afterClose()\n  }\n})\nwatch(\n  [() => props.permeable, wrapper],\n  () => {\n    if (wrapper.value) {\n      wrapper.value.removeEventListener('wheel', disableWheel)\n\n      if (!props.permeable) {\n        wrapper.value.addEventListener('wheel', disableWheel)\n      }\n    }\n  },\n  { immediate: true, flush: 'post' },\n)\n\ndefineExpose({\n  currentActive,\n  zIndex,\n  wrapperShow,\n  wrapper,\n  topTrap,\n  bottomTrap,\n})\n\nfunction disableWheel(event: WheelEvent) {\n  event.preventDefault()\n  event.stopPropagation()\n}\n\nfunction toggleActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nasync function handleClose() {\n  if (!props.closable) return\n\n  let result: unknown = true\n\n  if (typeof props.onBeforeClose === 'function') {\n    result = props.onBeforeClose()\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    nextTick(() => {\n      toggleActive(false)\n      emitEvent(props.onClose)\n    })\n  }\n}\n\nfunction afterOpen() {\n  if (!currentActive.value) return\n\n  const activeEl = document && document.activeElement\n\n  if (!activeEl || !wrapper.value || !wrapper.value.contains(activeEl)) {\n    topTrap.value?.focus()\n  }\n\n  nextTick(() => {\n    stable = true\n    emitEvent(props.onShow)\n  })\n}\n\nfunction afterClose() {\n  if (currentActive.value) return\n\n  nextTick(() => {\n    wrapperShow.value = false\n    emitEvent(props.onHide)\n  })\n}\n\nfunction afterMaskOpen() {\n  if (!currentActive.value) return\n\n  maskShow = true\n  ;(!props.transitionName || !slots.default || contentShow) && afterOpen()\n}\n\nfunction afterMaskClose() {\n  if (currentActive.value) return\n\n  maskShow = false\n  ;(!props.transitionName || !slots.default || !contentShow) && afterClose()\n}\n\nfunction afterContentOpen() {\n  if (!currentActive.value) return\n\n  contentShow = true\n  ;(!props.maskTransition || props.disabled || maskShow) && afterOpen()\n}\n\nfunction afterContentClose() {\n  if (currentActive.value) return\n\n  contentShow = false\n  ;(!props.maskTransition || props.disabled || !maskShow) && afterClose()\n}\n\nfunction handleMaskClick(event: MouseEvent) {\n  emitEvent(props.onMaskClick, event)\n  handleClose()\n}\n\nfunction handleFocusIn(event: FocusEvent) {\n  const target = event.target as HTMLElement\n\n  if (!stable || !wrapper.value || !target || !topTrap.value || !bottomTrap.value) {\n    return\n  }\n\n  const tabables = queryTabables(wrapper.value)\n\n  if (!tabables.length) {\n    return\n  }\n\n  if (topTrap.value === target) {\n    getLast(tabables)!.focus()\n  } else if (bottomTrap.value === target) {\n    tabables[0].focus()\n  }\n}\n\nfunction handleResize(entry: ResizeObserverEntry) {\n  emitEvent(props.onResize, entry)\n}\n\nfunction handleEscape(event: KeyboardEvent) {\n  if (!props.disableEsc) {\n    event.preventDefault()\n    handleClose()\n  }\n}\n</script>\n\n<template>\n  <Portal v-if=\"!props.autoRemove || wrapperShow\" :to=\"transferTo\">\n    <div\n      v-bind=\"$attrs\"\n      ref=\"wrapper\"\n      :class=\"[className, $attrs.class]\"\n      tabindex=\"-1\"\n      :style=\"{\n        zIndex,\n        ...($attrs.style || {}),\n        pointerEvents: wrapperShow ? undefined : 'none',\n        visibility: wrapperShow ? undefined : 'hidden',\n      }\"\n      @focusin=\"handleFocusIn\"\n      @keydown.escape=\"handleEscape\"\n    >\n      <ResizeObserver @resize=\"handleResize\">\n        <Transition\n          v-if=\"!props.disabled\"\n          appear\n          :name=\"props.maskTransition\"\n          @after-enter=\"afterMaskOpen\"\n          @after-leave=\"afterMaskClose\"\n        >\n          <div v-show=\"currentActive\" :class=\"nh.be('mask')\" @click=\"handleMaskClick\">\n            <slot name=\"mask\">\n              <div :class=\"nh.be('mask-inner')\"></div>\n            </slot>\n          </div>\n        </Transition>\n        <div\n          v-else\n          :class=\"nh.be('placeholder')\"\n          role=\"none\"\n          aria-hidden\n        ></div>\n      </ResizeObserver>\n      <div\n        ref=\"topTrap\"\n        tabindex=\"0\"\n        role=\"none\"\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\n      ></div>\n      <div :class=\"nh.be('content')\" @wheel.stop.prevent>\n        <Transition\n          v-if=\"props.transitionName\"\n          appear\n          :name=\"props.transitionName\"\n          @after-enter=\"afterContentOpen\"\n          @after-leave=\"afterContentClose\"\n        >\n          <slot :show=\"currentActive\"></slot>\n        </Transition>\n        <slot v-else :show=\"currentActive\"></slot>\n      </div>\n      <div\n        ref=\"bottomTrap\"\n        tabindex=\"0\"\n        role=\"none\"\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\n      ></div>\n    </div>\n  </Portal>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp,\n  styleProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonProps, ButtonType } from '@/components/button'\nimport type { ModalSlots, PositionPayload, SizePayload } from './symbol'\n\nconst positionType = [Number, String]\n\nexport const positionValidator = (value: string | number) => {\n  return value === 'auto' || !Number.isNaN(parseFloat(value as string))\n}\nexport const positionProp = {\n  default: 'auto' as const,\n  validator: positionValidator,\n}\n\nexport const modalProps = buildProps({\n  locale: localeProp('modal'),\n  transfer: booleanStringProp,\n  active: booleanProp,\n  width: positionType,\n  height: positionType,\n  top: positionType,\n  left: positionType,\n  right: positionType,\n  bottom: positionType,\n  title: String,\n  closable: booleanProp,\n  inner: booleanProp,\n  maskClose: booleanProp,\n  modalClass: classProp,\n  modalStyle: styleProp,\n  noFooter: booleanProp,\n  hideMask: booleanProp,\n  draggable: booleanProp,\n  resizable: booleanProp,\n  onBeforeClose: Function as PropType<(isConfirm: boolean) => any>,\n  loading: booleanProp,\n  minWidth: Number,\n  minHeight: Number,\n  transitionName: String,\n  confirmText: String,\n  cancelText: String,\n  actionSize: sizeProp,\n  autoRemove: booleanProp,\n  confirmType: String as PropType<ButtonType>,\n  confirmProps: Object as PropType<ButtonProps>,\n  cancelType: String as PropType<ButtonType>,\n  cancelProps: Object as PropType<ButtonProps>,\n  undivided: booleanProp,\n  xOffset: positionType,\n  yOffset: positionType,\n  disableEsc: booleanProp,\n  slots: Object as PropType<ModalSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onConfirm: eventProp(),\n  onCancel: eventProp(),\n  onClose: eventProp(),\n  onShow: eventProp(),\n  onHide: eventProp(),\n  onDragStart: eventProp<(position: PositionPayload) => void>(),\n  onDragMove: eventProp<(position: PositionPayload) => void>(),\n  onDragEnd: eventProp<(position: PositionPayload) => void>(),\n  onResizeStart: eventProp<(size: SizePayload) => void>(),\n  onResizeMove: eventProp<(size: SizePayload) => void>(),\n  onResizeEnd: eventProp<(size: SizePayload) => void>(),\n})\n\nexport type ModalProps = ExtractPropTypes<typeof modalProps>\nexport type ModalCProps = ConfigurableProps<ModalProps, never, 'onBeforeClose'>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useId,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { isNull, isPromise, isValidNumber, toNumber } from '@vexip-ui/utils'\nimport { modalProps, positionProp } from './props'\n\nimport type { MaskerExposed } from '@/components/masker'\nimport type { ModalSlots } from './symbol'\n\ndefineOptions({ name: 'Modal' })\n\nconst nh = useNameHelper('modal')\n\nconst _props = defineProps(modalProps)\nconst props = useProps('modal', _props, {\n  locale: null,\n  transfer: false,\n  active: {\n    default: false,\n    static: true,\n  },\n  width: positionProp,\n  height: positionProp,\n  top: positionProp,\n  left: positionProp,\n  right: positionProp,\n  bottom: positionProp,\n  title: '',\n  closable: true,\n  inner: false,\n  maskClose: true,\n  modalClass: null,\n  modalStyle: null,\n  noFooter: false,\n  hideMask: false,\n  draggable: false,\n  resizable: false,\n  onBeforeClose: {\n    default: null,\n    isFunc: true,\n  },\n  loading: false,\n  minWidth: 150,\n  minHeight: 120,\n  transitionName: () => nh.ns('ease'),\n  confirmText: null,\n  cancelText: null,\n  autoRemove: false,\n  confirmType: 'primary',\n  confirmProps: null,\n  cancelType: 'default',\n  cancelProps: null,\n  actionSize: createSizeProp('small'),\n  undivided: false,\n  xOffset: 0,\n  yOffset: 0,\n  disableEsc: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<ModalSlots>()\n\nconst locale = useLocale('modal', toRef(props, 'locale'))\nconst icons = useIcons()\n\nfunction isSpecified(value?: string | number) {\n  return !isNull(value) && value !== 'auto'\n}\n\nfunction normalizeStyle(value?: string | number) {\n  return isValidNumber(value, true)\n    ? `${toNumber(value)}px`\n    : isNull(value)\n      ? 'auto'\n      : String(value)\n}\n\nconst currentActive = ref(props.active)\nconst rect = reactive({\n  top: normalizeStyle(props.top),\n  right: normalizeStyle(props.right),\n  bottom: normalizeStyle(props.bottom),\n  left: normalizeStyle(props.left),\n  width: normalizeStyle(props.width),\n  height: normalizeStyle(props.height),\n})\nconst maskerRect = reactive({ width: 0, height: 0 })\nconst modalRect = reactive({ width: 0, height: 0 })\n\nconst transformed = ref(false)\n\nconst masker = ref<MaskerExposed>()\nconst wrapper = ref<HTMLElement>()\nconst footer = ref<HTMLElement>()\n\nconst uselessTop = computed(() => {\n  return props.top === 'auto' && isSpecified(props.bottom) && isSpecified(props.height)\n})\nconst uselessLeft = computed(() => {\n  return props.left === 'auto' && isSpecified(props.right) && isSpecified(props.width)\n})\n\nconst { target: header, moving: dragging } = useMoving({\n  capture: false,\n  onStart: (state, event) => {\n    if (!wrapper.value || !props.draggable || event.button > 0) {\n      return false\n    }\n\n    transferRect(false)\n\n    transformed.value = true\n    state.xStart = parseFloat(rect.left)\n    state.yStart = parseFloat(rect.top)\n\n    emitEvent(props.onDragStart, {\n      top: state.yStart,\n      left: state.xStart,\n    })\n  },\n  onMove: state => {\n    rect.left = `${state.xEnd}px`\n    rect.top = `${state.yEnd}px`\n\n    emitEvent(props.onDragMove, {\n      top: state.yEnd,\n      left: state.xEnd,\n    })\n  },\n  onEnd: state => {\n    emitEvent(props.onDragEnd, {\n      top: state.yEnd,\n      left: state.xEnd,\n    })\n  },\n})\n\nconst { target: resizer, moving: resizing } = useMoving({\n  onStart: (state, event) => {\n    if (!wrapper.value || !props.resizable || event.button > 0) {\n      return false\n    }\n\n    transferRect()\n\n    let minHeight = 32\n\n    if (header.value) {\n      minHeight += header.value.offsetHeight\n    }\n\n    if (footer.value) {\n      minHeight += footer.value.offsetHeight\n    }\n\n    transformed.value = true\n    state.xStart = parseFloat(rect.width)\n    state.yStart = parseFloat(rect.height)\n    state.minHeight = Math.max(minHeight, props.minHeight)\n\n    emitEvent(props.onResizeStart, {\n      width: state.xStart,\n      height: state.yStart,\n    })\n  },\n  onMove: state => {\n    const width = Math.max(props.minWidth, state.xEnd, 32)\n    const height = Math.max(state.minHeight as number, state.yEnd)\n\n    rect.width = `${width}px`\n    rect.height = `${height}px`\n\n    emitEvent(props.onResizeMove, { width, height })\n  },\n  onEnd: state => {\n    const width = Math.max(props.minWidth, state.xEnd, 32)\n    const height = Math.max(state.minHeight as number, state.yEnd)\n\n    emitEvent(props.onResizeEnd, { width, height })\n  },\n})\n\n// const shouldParse = computed(() => !props.draggable && !props.resizable)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('inner')]: props.inner,\n      [nh.bm('draggable')]: props.draggable,\n      [nh.bm('resizable')]: props.resizable,\n      [nh.bm('undivided')]: props.undivided,\n    },\n  ]\n})\nconst wrapperClass = computed(() => {\n  return [\n    nh.be('wrapper'),\n    {\n      [nh.bem('wrapper', 'closable')]: props.closable,\n      [nh.bem('wrapper', 'dragging')]: dragging.value,\n      [nh.bem('wrapper', 'resizing')]: resizing.value,\n    },\n    props.modalClass,\n  ]\n})\nconst transform = computed(() => {\n  const transforms: string[] = []\n\n  if (props.xOffset) {\n    transforms.push(`translateX(${normalizeStyle(props.xOffset)})`)\n  }\n\n  if (props.yOffset) {\n    transforms.push(`translateY(${normalizeStyle(props.yOffset)})`)\n  }\n\n  if (transforms.length) {\n    transforms.push('translateZ(0)')\n  }\n\n  return transforms.length ? transforms.join(' ') : undefined\n})\nconst wrapperStyle = computed(() => {\n  return [\n    props.modalStyle,\n    {\n      ...rect,\n      height: rect.height !== 'auto' ? rect.height : undefined,\n      transform: transform.value,\n    },\n  ]\n})\nconst transformOrigin = computed(() => {\n  const origin = { x: '50%', y: '50%' }\n\n  if (transformed.value) {\n    origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n    origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n  } else {\n    if (uselessTop.value) {\n      origin.y = `calc(100% - ${parseFloat(rect.bottom) + 0.5 * parseFloat(rect.height)}px)`\n    } else if (isSpecified(props.top)) {\n      const top = parseFloat(rect.top)\n\n      if (isSpecified(props.height)) {\n        origin.y = `${top + 0.5 * parseFloat(rect.height)}px`\n      } else if (isSpecified(props.bottom)) {\n        const bottom = parseFloat(rect.bottom)\n        const height = maskerRect.height - top - bottom\n\n        origin.y = `${top + 0.5 * height}px`\n      } else {\n        origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n      }\n    }\n\n    if (uselessLeft.value) {\n      origin.x = `calc(100% - ${parseFloat(rect.right) + 0.5 * parseFloat(rect.width)}px)`\n    } else if (isSpecified(props.left)) {\n      const left = parseFloat(rect.left)\n\n      if (isSpecified(props.width)) {\n        origin.x = `${left + 0.5 * parseFloat(rect.width)}px`\n      } else if (isSpecified(props.right)) {\n        const right = parseFloat(rect.right)\n        const width = maskerRect.width - left - right\n\n        origin.x = `${left + 0.5 * width}px`\n      } else {\n        origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n      }\n    }\n  }\n\n  return `${origin.x} ${origin.y}`\n})\nconst hasHeader = computed(() => {\n  return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\n})\nconst titleId = useId()\nconst bodyId = useId()\n\nfor (const style of Object.keys(rect) as Array<keyof typeof rect>) {\n  watch(\n    () => props[style],\n    value => {\n      rect[style] = normalizeStyle(value)\n    },\n  )\n}\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  },\n)\nwatch(currentActive, value => {\n  props.hideMask && value && handleResize()\n})\nwatch([() => props.top, () => props.bottom, () => props.height], () => {\n  currentActive.value && nextTick(computeTop)\n})\nwatch([() => props.left, () => props.right, () => props.width], () => {\n  currentActive.value && nextTick(computeLeft)\n})\n\nconst handleResize = () => {\n  if (currentActive.value && !transformed.value) {\n    nextTick(() => {\n      computeTop()\n      computeLeft()\n    })\n  }\n\n  if (masker.value?.wrapper) {\n    maskerRect.width = masker.value.wrapper.offsetWidth\n    maskerRect.height = masker.value.wrapper.offsetHeight\n  }\n}\n\ndefineExpose({\n  dragging,\n  resizing,\n  titleId,\n  bodyId,\n  wrapper,\n  header,\n  footer,\n  resizer,\n  handleResize,\n  handleConfirm,\n  handleCancel,\n  handleClose,\n})\n\nconst slotParams = shallowReadonly(\n  reactive({\n    dragging,\n    resizing,\n    handleResize,\n    handleConfirm,\n    handleCancel,\n    handleClose,\n  }),\n)\n\nfunction setActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nfunction findPositionalParent() {\n  if (!wrapper.value) return document.body\n\n  let parentElement = wrapper.value.parentElement as HTMLElement\n\n  while (parentElement && parentElement !== document.body) {\n    if (getComputedStyle(parentElement).position !== 'static') {\n      return parentElement\n    }\n\n    parentElement = parentElement.parentElement as HTMLElement\n  }\n\n  return parentElement\n}\n\nfunction computeTop() {\n  if (!wrapper.value || props.top !== 'auto' || uselessTop.value) return\n\n  const currentHeight = wrapper.value.offsetHeight\n\n  if (props.inner) {\n    rect.top = `${(findPositionalParent().offsetHeight - currentHeight) / 2}px`\n  } else {\n    rect.top = `${(window.innerHeight - currentHeight) / 2 - 20}px`\n  }\n}\n\nfunction computeLeft() {\n  if (!wrapper.value || props.left !== 'auto' || uselessLeft.value) return\n\n  const currentWidth = wrapper.value.offsetWidth\n\n  if (props.inner) {\n    rect.left = `${(findPositionalParent().offsetWidth - currentWidth) / 2}px`\n  } else {\n    rect.left = `${(window.innerWidth - currentWidth) / 2}px`\n  }\n}\n\nfunction transferRect(withSize = true) {\n  if (!wrapper.value) return\n\n  const { offsetWidth, offsetHeight, offsetTop, offsetLeft } = wrapper.value\n\n  // If user is using top/bottom or right/left to specify size,\n  // here need to force transfer to use offset size\n  if (\n    !withSize &&\n    ((!uselessTop.value && props.bottom !== 'auto') ||\n      (!uselessLeft.value && props.right !== 'auto'))\n  ) {\n    withSize = true\n  }\n\n  Object.assign(\n    rect,\n    {\n      top: `${offsetTop}px`,\n      right: 'auto',\n      bottom: 'auto',\n      left: `${offsetLeft}px`,\n    },\n    withSize\n      ? {\n        width: `${offsetWidth}px`,\n        height: `${offsetHeight}px`,\n      }\n      : {},\n  )\n}\n\nfunction handleConfirm() {\n  handleClose(true)\n  emitEvent(props.onConfirm)\n}\n\nfunction handleCancel() {\n  handleClose(false)\n  emitEvent(props.onCancel)\n}\n\nasync function handleClose(isConfirm = false) {\n  let result: unknown = true\n\n  if (typeof props.onBeforeClose === 'function') {\n    result = props.onBeforeClose(isConfirm)\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    await nextTick(() => {\n      setActive(false)\n      emitEvent(props.onClose)\n    })\n  }\n\n  return result\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n\nfunction handleMaskClose() {\n  if (props.maskClose) {\n    return handleClose(false)\n  }\n}\n\nfunction handleModalResize(entry: ResizeObserverEntry) {\n  const box = entry.borderBoxSize?.[0]\n\n  if (box) {\n    modalRect.width = box.inlineSize\n    modalRect.height = box.blockSize\n  } else {\n    modalRect.width = entry.contentRect.width\n    modalRect.height = entry.contentRect.height\n  }\n}\n</script>\n\n<template>\n  <Masker\n    ref=\"masker\"\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :inner=\"props.inner\"\n    :transition-name=\"props.transitionName\"\n    :closable=\"props.maskClose\"\n    :disabled=\"props.hideMask\"\n    :on-before-close=\"handleMaskClose\"\n    :transfer=\"props.transfer\"\n    :auto-remove=\"props.autoRemove\"\n    :disable-esc=\"props.disableEsc\"\n    @show=\"handleShow\"\n    @hide=\"handleHide\"\n    @resize=\"handleResize\"\n  >\n    <template #default=\"{ show }\">\n      <section v-show=\"show\" :class=\"nh.be('transform')\" :style=\"{ transformOrigin }\">\n        <ResizeObserver @resize=\"handleModalResize\">\n          <div\n            ref=\"wrapper\"\n            :class=\"wrapperClass\"\n            role=\"dialog\"\n            :style=\"wrapperStyle\"\n            :aria-modal=\"show ? 'true' : undefined\"\n            :aria-labelledby=\"titleId\"\n            :aria-describedby=\"bodyId\"\n          >\n            <div v-if=\"hasHeader\" ref=\"header\" :class=\"nh.be('header')\">\n              <slot name=\"header\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n                  <div :id=\"titleId\" :class=\"nh.be('title')\">\n                    <slot name=\"title\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                        {{ props.title }}\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <button\n                    v-if=\"props.closable\"\n                    type=\"button\"\n                    :class=\"nh.be('close')\"\n                    @pointerdown.stop\n                    @mousedown.stop\n                    @touchstart.stop\n                    @click=\"handleClose(false)\"\n                  >\n                    <slot name=\"close\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                        <Icon\n                          v-bind=\"icons.close\"\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\n                          label=\"close\"\n                        ></Icon>\n                      </Renderer>\n                    </slot>\n                  </button>\n                </Renderer>\n              </slot>\n            </div>\n            <div\n              :id=\"bodyId\"\n              :class=\"nh.be('content')\"\n              :style=\"{\n                overflow: resizing ? 'hidden' : undefined\n              }\"\n            >\n              <slot v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\n              </slot>\n            </div>\n            <div v-if=\"!props.noFooter\" ref=\"footer\" :class=\"nh.be('footer')\">\n              <slot name=\"footer\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n                  <Button\n                    :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n                    inherit\n                    text\n                    :type=\"props.cancelType\"\n                    :size=\"props.actionSize\"\n                    v-bind=\"props.cancelProps\"\n                    @click=\"handleCancel\"\n                  >\n                    {{ props.cancelText || locale.cancel }}\n                  </Button>\n                  <Button\n                    :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n                    inherit\n                    :type=\"props.confirmType\"\n                    :size=\"props.actionSize\"\n                    :loading=\"props.loading\"\n                    v-bind=\"props.confirmProps\"\n                    @click=\"handleConfirm\"\n                  >\n                    {{ props.confirmText || locale.confirm }}\n                  </Button>\n                </Renderer>\n              </slot>\n            </div>\n            <div v-if=\"props.resizable\" ref=\"resizer\" :class=\"nh.be('resizer')\"></div>\n          </div>\n        </ResizeObserver>\n      </section>\n    </template>\n  </Masker>\n</template>\n","import { createApp, createVNode, getCurrentInstance, h, nextTick, ref, render, unref } from 'vue'\n\nimport Component from './modal.vue'\nimport { isClient, noop } from '@vexip-ui/utils'\n\nimport type { App, AppContext, ComponentPublicInstance, MaybeRef } from 'vue'\nimport type { ModalProps } from './props'\nimport type { ModalCommonSlot } from './symbol'\n\nexport type ModalOptions = Omit<ModalProps, 'active' | 'transfer' | 'loading' | 'autoRemove'> & {\n  /**\n   * Specify the app context, ensue the modal using same context\n   */\n  appContext: AppContext,\n  /**\n   * Specify whether the modal is loading\n   */\n  loading: MaybeRef<boolean>,\n  /**\n   * Another way to use default slot\n   */\n  renderer: ModalCommonSlot,\n  /**\n   * Another way to use header slot\n   */\n  headerRenderer: ModalCommonSlot,\n  /**\n   * Another way to use title slot\n   */\n  titleRenderer: ModalCommonSlot,\n  /**\n   * Another way to use close slot\n   */\n  closeRenderer: ModalCommonSlot,\n  /**\n   * Another way to use footer slot\n   */\n  footerRenderer: ModalCommonSlot,\n}\n\nexport function useModal(options: Partial<ModalOptions> = {}): () => Promise<void> {\n  if (!isClient) return noop\n\n  const {\n    appContext,\n    loading,\n    renderer,\n    headerRenderer,\n    titleRenderer,\n    closeRenderer,\n    footerRenderer,\n    onHide,\n    ...props\n  } = options\n\n  const active = ref(false)\n\n  let instance = getCurrentInstance()\n\n  let container: HTMLElement | undefined = document.createElement('div')\n  let app: App | undefined\n\n  if (appContext || instance) {\n    const vnode = createVNode(createModal, null, null)\n\n    vnode.appContext = appContext || instance!.appContext\n    render(vnode, container)\n  } else {\n    app = createApp(createModal)\n    app.mount(container)\n  }\n\n  document.body.appendChild(container)\n\n  // Ensure Modal show transition is effective\n  nextTick(() => {\n    active.value = true\n  })\n\n  function createModal() {\n    return h(\n      Component,\n      {\n        ...props,\n        active: active.value,\n        transfer: false,\n        autoRemove: false,\n        loading: unref(loading),\n        onHide: Array.isArray(onHide) ? [...onHide, destroy] : onHide ? [onHide, destroy] : destroy,\n      },\n      {\n        header: headerRenderer,\n        title: titleRenderer,\n        close: closeRenderer,\n        default: renderer,\n        footer: footerRenderer,\n      },\n    )\n  }\n\n  function destroy() {\n    if (instance) {\n      container && render(null, container)\n      instance = null\n    }\n\n    if (app) {\n      app.unmount()\n      app = undefined\n    }\n\n    if (container) {\n      document.body.removeChild(container)\n      container = undefined\n    }\n  }\n\n  return () =>\n    nextTick(() => {\n      active.value = false\n    })\n}\n\nComponent.open = useModal\n\nconst Modal = Component as typeof Component & { open: typeof useModal }\n\nexport { Modal }\nexport { modalProps } from './props'\n\nexport type ModalExposed = ComponentPublicInstance & InstanceType<typeof Component>\n\nexport type { ModalProps, ModalCProps } from './props'\nexport type { ModalSlotParams } from './symbol'\n","import { booleanProp, buildProps, classProp, localeProp, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { ConfirmAlign, ConfirmButtonType, ConfirmRenderFn } from './symbol'\n\nconst positionType = [Number, String]\n\nexport const confirmProps = buildProps({\n  locale: localeProp('confirm'),\n  width: positionType,\n  height: positionType,\n  top: positionType,\n  left: positionType,\n  right: positionType,\n  bottom: positionType,\n  maskClose: booleanProp,\n  confirmType: String as PropType<ConfirmButtonType>,\n  cancelType: String as PropType<ConfirmButtonType>,\n  confirmText: String,\n  cancelText: String,\n  icon: {\n    type: [Boolean, Object, Function],\n    default: null,\n  },\n  className: classProp,\n  style: styleProp,\n  renderer: Function as PropType<ConfirmRenderFn>,\n  iconProps: Object as PropType<IconMinorProps>,\n  closable: booleanProp,\n  contentAlign: String as PropType<ConfirmAlign>,\n  actionsAlign: String as PropType<ConfirmAlign>,\n  parseHtml: booleanProp,\n  cancelable: booleanProp,\n  xOffset: positionType,\n  yOffset: positionType,\n})\n\nexport type ConfirmProps = ExtractPropTypes<typeof confirmProps>\nexport type ConfirmCProps = ConfigurableProps<ConfirmProps>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Modal } from '@/components/modal'\nimport { Renderer } from '@/components/renderer'\n\nimport { nextTick, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isFunction, isPromise } from '@vexip-ui/utils'\nimport { confirmProps } from './props'\n\nimport type { ConfirmButtonType, ConfirmOptions, ConfirmRenderFn, ConfirmState } from './symbol'\n\nconst positionValidator = (value: string | number) => {\n  return value === 'auto' || !Number.isNaN(parseFloat(value as string))\n}\nconst positionProp = {\n  default: 'auto',\n  validator: positionValidator,\n}\n\nconst confirmButtonTypes = Object.freeze<ConfirmButtonType[]>([\n  'default',\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error',\n])\n\ndefineOptions({ name: 'Confirm' })\n\nconst _props = defineProps(confirmProps)\nconst props = useProps('confirm', _props, {\n  locale: null,\n  width: {\n    default: 420,\n    validator: positionValidator,\n  },\n  height: positionProp,\n  top: positionProp,\n  left: positionProp,\n  right: positionProp,\n  bottom: positionProp,\n  maskClose: false,\n  confirmType: {\n    default: 'primary',\n    validator: value => confirmButtonTypes.includes(value),\n  },\n  cancelType: {\n    default: 'default',\n    validator: value => confirmButtonTypes.includes(value),\n  },\n  confirmText: null,\n  cancelText: null,\n  icon: {\n    isFunc: true,\n    default: false,\n  },\n  className: null,\n  style: null,\n  renderer: {\n    default: null,\n    isFunc: true,\n    static: true,\n  },\n  iconProps: () => ({}),\n  closable: false,\n  parseHtml: false,\n  contentAlign: 'left',\n  actionsAlign: 'right',\n  cancelable: true,\n  xOffset: 0,\n  yOffset: 0,\n})\n\nconst nh = useNameHelper('confirm')\nconst icons = useIcons()\nconst locale = useLocale('confirm', toRef(props, 'locale'))\n\nconst commonProps = [\n  'className',\n  'style',\n  'icon',\n  'iconProps',\n  'maskClose',\n  'confirmType',\n  'cancelType',\n  'confirmText',\n  'cancelText',\n  'parseHtml',\n  'closable',\n  'contentAlign',\n  'actionsAlign',\n  'cancelable',\n  'width',\n  'height',\n  'top',\n  'right',\n  'bottom',\n  'left',\n  'xOffset',\n  'yOffset',\n] as const\n\nconst state = reactive<ConfirmState>({\n  ...commonProps.reduce((prev, current) => ((prev[current] = props[current]), prev), {} as any),\n  visible: false,\n  loading: false,\n  title: '',\n  content: '',\n  raw: {},\n})\n\nconst rendererR = ref<ConfirmRenderFn | null>(props.renderer)\n\nlet beforeConfirmR: (() => unknown) | null = null\n\nlet onConfirm: (() => void) | null = null\nlet onCancel: (() => void) | null = null\n\nconst mountedPromise = new Promise<void>(resolve => {\n  onMounted(() => {\n    nextTick(resolve)\n  })\n})\n\ndefineExpose({ state, openConfirm, closeConfirm: handleCancel, handleReset })\n\nasync function openConfirm(options: ConfirmOptions) {\n  await mountedPromise\n\n  return await new Promise<boolean>(resolve => {\n    for (const prop of commonProps) {\n      ;(state as any)[prop] = options[prop] ?? props[prop]\n    }\n\n    state.title = options.title ?? ''\n    state.content = options.content ?? ''\n\n    state.raw = options\n\n    rendererR.value = isFunction(options.renderer) ? options.renderer : props.renderer\n    beforeConfirmR = isFunction(options.onBeforeConfirm) ? options.onBeforeConfirm : null\n\n    if (isFunction(rendererR.value)) {\n      const render = rendererR.value\n\n      rendererR.value = () => render(state, handleConfirm, handleCancel)\n    }\n\n    state.visible = true\n\n    let resolved = false\n\n    onConfirm = () => {\n      !resolved && resolve(true)\n      resolved = true\n      beforeConfirmR = null\n    }\n    onCancel = () => {\n      !resolved && resolve(false)\n      resolved = true\n      beforeConfirmR = null\n    }\n  })\n}\n\nasync function handleConfirm() {\n  state.loading = true\n\n  if (isFunction(beforeConfirmR)) {\n    let result = beforeConfirmR()\n\n    if (isPromise(result)) {\n      result = await result\n    }\n\n    if (result === false) {\n      state.loading = false\n\n      return\n    }\n  }\n\n  state.visible = false\n  state.loading = false\n\n  if (isFunction(onConfirm)) {\n    onConfirm()\n    onConfirm = null\n  }\n}\n\nfunction handleCancel() {\n  state.visible = false\n\n  if (isFunction(onCancel)) {\n    onCancel()\n    onCancel = null\n  }\n}\n\nfunction handleReset() {\n  for (const prop of commonProps) {\n    ;(state as any)[prop] = props[prop]\n  }\n\n  state.visible = false\n  state.loading = false\n  state.title = ''\n  state.content = ''\n\n  state.raw = {}\n\n  rendererR.value = props.renderer\n}\n</script>\n\n<template>\n  <!-- eslint-disable vue/no-v-html -->\n  <div :class=\"[nh.b(), nh.bs('vars')]\">\n    <Modal\n      no-footer\n      :auto-remove=\"false\"\n      :transfer=\"false\"\n      :closable=\"false\"\n      :active=\"state.visible\"\n      :modal-class=\"state.className\"\n      :modal-style=\"state.style\"\n      :width=\"state.width\"\n      :height=\"state.height\"\n      :top=\"state.top\"\n      :left=\"state.left\"\n      :right=\"state.right\"\n      :bottom=\"state.bottom\"\n      :x-offset=\"state.xOffset\"\n      :y-offset=\"state.yOffset\"\n      :mask-close=\"state.maskClose\"\n      @hide=\"handleReset\"\n      @close=\"handleCancel\"\n    >\n      <Renderer v-if=\"isFunction(rendererR)\" :renderer=\"rendererR\"></Renderer>\n      <template v-else>\n        <div v-if=\"state.title\" :class=\"nh.be('header')\">\n          <div :class=\"nh.be('title')\">\n            <Renderer v-if=\"typeof state.title === 'function'\" :renderer=\"state.title\"></Renderer>\n            <template v-else>\n              {{ state.title }}\n            </template>\n          </div>\n          <button\n            v-if=\"state.closable\"\n            type=\"button\"\n            :class=\"nh.be('close')\"\n            @mousedown.stop\n            @click=\"handleCancel\"\n          >\n            <slot name=\"close\">\n              <Icon\n                v-bind=\"icons.close\"\n                :scale=\"+(icons.close.scale || 1) * 1.2\"\n                label=\"close\"\n              ></Icon>\n            </slot>\n          </button>\n        </div>\n        <div\n          :class=\"[\n            nh.be('body'),\n            nh.bem('body', state.contentAlign),\n            !state.title && nh.bem('body', 'no-title'),\n          ]\"\n        >\n          <div v-if=\"state.icon !== false\" :class=\"nh.be('icon')\">\n            <Icon\n              v-if=\"typeof state.icon !== 'boolean'\"\n              v-bind=\"state.iconProps\"\n              :icon=\"state.icon\"\n            ></Icon>\n            <Icon\n              v-else\n              :scale=\"2.2\"\n              v-bind=\"{\n                ...(state.cancelable ? icons.question : icons.warning),\n                ...state.iconProps,\n              }\"\n              :icon=\"(state.cancelable ? icons.question : icons.warning).icon\"\n            ></Icon>\n          </div>\n          <Renderer v-if=\"typeof state.content === 'function'\" :renderer=\"state.content\"></Renderer>\n          <template v-else>\n            <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\n            <div v-else :class=\"nh.be('content')\">\n              {{ state.content }}\n            </div>\n          </template>\n        </div>\n        <div :class=\"[nh.be('footer'), nh.bem('footer', state.actionsAlign)]\">\n          <Button\n            v-if=\"state.cancelable\"\n            :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n            inherit\n            no-pulse\n            :type=\"state.cancelType\"\n            @click=\"handleCancel\"\n          >\n            {{ state.cancelText || locale.cancel }}\n          </Button>\n          <Button\n            :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n            inherit\n            no-pulse\n            :type=\"state.confirmType\"\n            :loading=\"state.loading\"\n            @click=\"handleConfirm\"\n          >\n            {{ state.confirmText || locale.confirm }}\n          </Button>\n        </div>\n      </template>\n    </Modal>\n  </div>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './confirm.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { ConfirmButtonType, ConfirmInstance, ConfirmOptions, ConfirmState } from './symbol'\n\nexport { confirmProps } from './props'\n\nexport type { ConfirmProps, ConfirmCProps } from './props'\nexport type { ConfirmButtonType, ConfirmOptions, ConfirmState }\n\ntype FuzzyOptions = string | ConfirmOptions\n\nComponent.name = 'Confirm'\n\nexport class ConfirmManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  private _mountedApp: App<unknown> | null\n  private _instance: ConfirmInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: Partial<ConfirmOptions> = {}) {\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Confirm'\n    this.defaults = {}\n\n    this.config(options)\n  }\n\n  open(content: string, type?: ConfirmButtonType): Promise<boolean>\n  open(options: ConfirmOptions): Promise<boolean>\n  open(content: string, title: string, type?: ConfirmButtonType): Promise<boolean>\n  open(options: FuzzyOptions, title?: string, type?: ConfirmButtonType) {\n    if (!isClient) {\n      return\n    }\n\n    if (typeof options === 'string') {\n      if (type) {\n        options = { title, content: options, confirmType: type }\n      } else {\n        options = { content: options, confirmType: title as ConfirmButtonType }\n      }\n    }\n\n    const item: ConfirmOptions = { ...this.defaults, ...options }\n\n    if (item.icon && typeof item.icon === 'object') {\n      item.icon = markRaw(item.icon)\n    }\n\n    return this._getInstance()?.openConfirm(item)\n  }\n\n  close() {\n    this._getInstance()?.closeConfirm()\n  }\n\n  config(options: Record<string, unknown>) {\n    this.defaults = { ...this.defaults, ...options }\n  }\n\n  clone() {\n    const manager = new ConfirmManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: Partial<ConfirmOptions> & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$confirm) {\n      app.config.globalProperties[property || '$confirm'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Confirm]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as ConfirmInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<ConfirmInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n}\n\nexport const Confirm = new ConfirmManager()\n","import type { InjectionKey } from 'vue'\n\nexport type DropdownTrigger = 'hover' | 'click' | 'custom'\n\ntype SelectHandler = (labels: (string | number)[], metas: Array<Record<string, any>>) => void\n\nexport interface DropdownState {\n  alive: boolean,\n  shift: boolean,\n  handleSelect: SelectHandler,\n  handleTriggerEnter: () => void,\n  handleTriggerLeave: () => void,\n}\n\nexport const SELECT_HANDLER = '__VXP_SELECT_HANDLER' as unknown as InjectionKey<SelectHandler>\nexport const DROPDOWN_STATE = '__VXP_DROPDOWN_STATE' as unknown as InjectionKey<DropdownState>\n","import { defineComponent, inject, provide, renderSlot } from 'vue'\n\nimport { DROPDOWN_STATE, SELECT_HANDLER } from './symbol'\n\nexport default defineComponent({\n  setup(_, { slots }) {\n    const dropdownState = inject(DROPDOWN_STATE, null)\n\n    dropdownState && provide(SELECT_HANDLER, dropdownState.handleSelect)\n\n    return () => renderSlot(slots, 'default')\n  },\n})\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  wrapProps,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { DropdownTrigger } from './symbol'\n\nexport const dropdownProps = buildProps({\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  outsideClose: booleanProp,\n  trigger: String as PropType<DropdownTrigger>,\n  label: [String, Number],\n  transitionName: String,\n  transfer: booleanStringProp,\n  dropClass: classProp,\n  appear: booleanProp,\n  meta: Object as PropType<Record<string, any>>,\n  alive: booleanProp,\n  custom: booleanProp,\n  shift: booleanProp,\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onSelect: eventProp<(labels: (string | number)[], metas: Array<Record<string, any>>) => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n})\n\nexport type DropdownProps = ExtractPropTypes<typeof dropdownProps>\nexport type DropdownCProps = ConfigurableProps<DropdownProps>\n\nexport const dropdownItemProps = wrapProps({\n  label: {\n    type: [String, Number],\n    default: null,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  selected: {\n    type: Boolean,\n    default: false,\n  },\n  divided: {\n    type: Boolean,\n    default: false,\n  },\n  reference: {\n    type: Boolean,\n    default: false,\n  },\n  meta: {\n    type: Object,\n    default: () => ({}),\n  },\n  onSelect: eventProp<(label: string | number) => void>(),\n})\n\nexport type DropdownItemProps = ExtractPropTypes<typeof dropdownItemProps>\n","import { nextTick, onMounted, ref, watch } from 'vue'\n\nimport type { Ref } from 'vue'\n\nexport function useLabel(\n  rawLabel: Ref<string | number | null>,\n  element: Ref<HTMLElement | null | undefined>,\n) {\n  const label = ref(rawLabel.value)\n\n  function setLabel(value: string | number | null) {\n    if (element.value) {\n      label.value = value ?? element.value.textContent?.trim() ?? null\n    } else {\n      label.value = value\n    }\n  }\n\n  watch(rawLabel, value => {\n    setLabel(value)\n  })\n\n  onMounted(() => {\n    nextTick(() => {\n      setLabel(rawLabel.value)\n    })\n  })\n\n  return label\n}\n","<script setup lang=\"ts\">\nimport { Popper } from '@/components/popper'\n\nimport { computed, inject, nextTick, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  placementWhileList,\n  useClickOutside,\n  usePopper,\n  useRtl,\n  useSetTimeout,\n} from '@vexip-ui/hooks'\nimport { emitEvent, useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\nimport DropdownDrop from './dropdown-drop'\nimport { dropdownProps } from './props'\nimport { useLabel } from './hooks'\nimport { DROPDOWN_STATE, SELECT_HANDLER } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Placement } from '@vexip-ui/hooks'\n\ndefineOptions({ name: 'Dropdown' })\n\nconst nh = useNameHelper('dropdown')\n\nconst _props = defineProps(dropdownProps)\nconst props = useProps('dropdown', _props, {\n  visible: {\n    default: false,\n    static: true,\n  },\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value),\n  },\n  outsideClose: true,\n  trigger: {\n    default: 'hover',\n    validator: value => ['hover', 'click', 'custom'].includes(value),\n  },\n  label: {\n    default: null,\n    static: true,\n  },\n  transitionName: () => nh.ns('drop'),\n  transfer: false,\n  dropClass: null,\n  appear: false,\n  meta: null,\n  alive: false,\n  custom: false,\n  shift: true,\n})\n\nconst emit = defineEmits(['update:visible'])\n\nconst parentState = inject(DROPDOWN_STATE, null)\nconst { isRtl } = useRtl()\nconst hoverDelay = useHoverDelay()\n\nconst isNested = !!parentState\nconst label = toRef(props, 'label')\nconst placement = ref(props.placement)\nconst currentVisible = ref(props.visible)\nconst popperAlive = ref(false)\n\nconst transfer = isNested ? ref(false) : toRef(props, 'transfer')\n\nconst shift = computed(() => !!(parentState?.shift || props.shift))\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  shift,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n  offset: isNested ? [-5, 0] : undefined,\n})\nconst currentLabel = useLabel(label, reference)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('visible')]: currentVisible.value,\n  }\n})\nconst isAlive = computed(() => parentState?.alive || props.alive)\n\nprovide(SELECT_HANDLER, null!)\n!props.custom &&\n  provide(\n    DROPDOWN_STATE,\n    reactive({\n      alive: isAlive,\n      shift,\n      handleSelect,\n      handleTriggerEnter,\n      handleTriggerLeave,\n    }),\n  )\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  },\n)\n\nwatch(\n  () => props.placement,\n  value => {\n    setPlacement(value)\n  },\n)\n\nwatch(currentVisible, value => {\n  if (value) {\n    updatePopper()\n  }\n})\n\nonMounted(() => {\n  nextTick(() => {\n    setPlacement(props.placement)\n  })\n})\n\ndefineExpose({\n  isNested,\n  currentVisible,\n  isAlive,\n  wrapper,\n  reference,\n  popper,\n  handleTriggerEnter,\n  handleTriggerLeave,\n  handleTriggerClick,\n})\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction handleClickOutside() {\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\n    setVisible(false)\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleSelect(labels: (string | number)[], metaList: Array<Record<string, any>>) {\n  if (props.trigger !== 'custom') {\n    setVisible(false)\n    emitEvent(props.onSelect, labels, metaList)\n  }\n\n  if (typeof parentState?.handleSelect === 'function') {\n    parentState.handleSelect([currentLabel.value!, ...labels], [props.meta || {}, ...metaList])\n  }\n}\n\nfunction setPlacement(value: Placement) {\n  const [xPlacement] = value.split('-')\n\n  if (isNested && xPlacement !== 'right' && xPlacement !== 'left') {\n    placement.value = isRtl.value ? 'left-start' : 'right-start'\n  } else {\n    placement.value = value\n  }\n}\n\nconst { timer } = useSetTimeout()\n\nfunction handleTriggerEnter() {\n  if (props.trigger === 'hover') {\n    clearTimeout(timer.hover)\n\n    if (typeof parentState?.handleTriggerEnter === 'function') {\n      parentState.handleTriggerEnter()\n    }\n\n    timer.hover = setTimeout(() => {\n      setVisible(true)\n    }, hoverDelay.value)\n  }\n}\n\nfunction handleTriggerLeave() {\n  if (props.trigger === 'hover') {\n    clearTimeout(timer.hover)\n\n    if (typeof parentState?.handleTriggerLeave === 'function') {\n      parentState.handleTriggerLeave()\n    }\n\n    timer.hover = setTimeout(() => {\n      setVisible(false)\n    }, hoverDelay.value)\n  }\n}\n\nfunction handleTriggerClick() {\n  if (props.trigger === 'click') {\n    setVisible(!currentVisible.value)\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    @mouseenter=\"handleTriggerEnter\"\n    @mouseleave=\"handleTriggerLeave\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"[nh.be('trigger'), currentVisible ? nh.bem('trigger', 'active') : '']\"\n      @click=\"handleTriggerClick\"\n      @keydown.enter.prevent=\"handleTriggerClick\"\n      @keydown.space.prevent=\"handleTriggerClick\"\n    >\n      <slot></slot>\n    </div>\n    <DropdownDrop>\n      <Popper\n        ref=\"popper\"\n        :class=\"[\n          nh.be('popper'),\n          nh.bs('vars'),\n          isNested ? nh.bem('popper', 'nested') : null,\n          props.dropClass\n        ]\"\n        :visible=\"currentVisible\"\n        :alive=\"isAlive || popperAlive\"\n        :to=\"transferTo\"\n        :transition=\"props.transitionName\"\n        :appear=\"props.appear\"\n        @mouseenter=\"handleTriggerEnter\"\n        @mouseleave=\"handleTriggerLeave\"\n        @after-enter=\"popperAlive = true\"\n        @after-leave=\"popperAlive = false\"\n      >\n        <slot name=\"drop\"></slot>\n      </Popper>\n    </DropdownDrop>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useNameHelper } from '@vexip-ui/config'\n\ndefineOptions({ name: 'DropdownList' })\n\nconst nh = useNameHelper('dropdown')\n</script>\n\n<template>\n  <ul :class=\"nh.be('list')\" role=\"menu\">\n    <slot></slot>\n  </ul>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { emitEvent, useNameHelper } from '@vexip-ui/config'\nimport { dropdownItemProps } from './props'\nimport { useLabel } from './hooks'\nimport { SELECT_HANDLER } from './symbol'\n\ndefineOptions({ name: 'DropdownItem' })\n\nconst props = defineProps(dropdownItemProps)\n\nconst parentSelectHandler = inject(SELECT_HANDLER, null)\n\nconst nh = useNameHelper('dropdown')\nconst wrapper = ref(null)\nconst label = toRef(props, 'label')\nconst isReference = ref(props.reference)\n\nconst currentLabel = useLabel(label, wrapper)\n\nconst className = computed(() => {\n  const baseClass = nh.be('item')\n\n  return {\n    [baseClass]: true,\n    [`${baseClass}--disabled`]: props.disabled,\n    [`${baseClass}--selected`]: !props.disabled && props.selected,\n    [`${baseClass}--divided`]: props.divided,\n  }\n})\n\ndefineExpose({ wrapper, handleSelect })\n\nfunction handleSelect() {\n  if (props.disabled || isReference.value) {\n    return\n  }\n\n  if (typeof parentSelectHandler === 'function') {\n    parentSelectHandler([currentLabel.value!], [props.meta || {}])\n  }\n\n  emitEvent(props.onSelect!, currentLabel.value!)\n}\n</script>\n\n<template>\n  <li\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"menuitem\"\n    tabindex=\"0\"\n    @click=\"handleSelect\"\n  >\n    <slot></slot>\n  </li>\n</template>\n","import { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { DropdownItem } from '@/components/dropdown-item'\nimport { Icon } from '@/components/icon'\n\nimport { useIcons } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\n\nimport type { NameHelper } from '@vexip-ui/config'\nimport type { ContextmenuConfig } from './symbol'\n\nfunction renderItemIcon(item: ContextmenuConfig, nh: NameHelper) {\n  if (!item.icon) return null\n\n  return (\n    <div class={nh.be('icon')}>\n      <Icon\n        icon={item.icon}\n        style={[{ color: item.iconColor || item.color }, (item.icon as any).style]}\n      ></Icon>\n    </div>\n  )\n}\n\nfunction renderItemShortcut(item: ContextmenuConfig, nh: NameHelper) {\n  if (!item.shortcut) return null\n\n  return <div class={nh.be('shortcut')}>{item.shortcut}</div>\n}\n\nfunction renderGroupItem(item: ContextmenuConfig, nh: NameHelper) {\n  const icons = useIcons()\n  const { isRtl } = useRtl()\n\n  return (\n    <Dropdown\n      inherit\n      transfer={false}\n      {...{\n        onContextmenu: (event: MouseEvent) => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n      }}\n    >\n      {{\n        default: () => (\n          <DropdownItem\n            class={nh.be('item')}\n            label={item.key}\n            divided={item.divided}\n            disabled={item.disabled}\n          >\n            {renderItemIcon(item, nh)}\n            {typeof item.renderer === 'function' ? (\n              item.renderer()\n            ) : (\n              <span class={nh.be('label')} style={{ color: item.color }}>\n                {item.label || item.key}\n              </span>\n            )}\n            {renderItemShortcut(item, nh)}\n            <div class={[nh.be('icon'), nh.be('arrow')]}>\n              <Icon\n                {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\n                style={{ color: item.iconColor || item.color }}\n              ></Icon>\n            </div>\n          </DropdownItem>\n        ),\n        drop: () => (\n          <DropdownList\n            class={[\n              nh.be('list'),\n              item.children!.some(c => c.icon)\n                ? nh.bem('list', 'icons')\n                : nh.bem('list', 'no-icon'),\n              item.children!.some(c => c.children?.length)\n                ? nh.bem('list', 'arrows')\n                : nh.bem('list', 'no-arrow'),\n            ]}\n          >\n            {item.children!.map(i => renderItem({ nh, config: i }))}\n          </DropdownList>\n        ),\n      }}\n    </Dropdown>\n  )\n}\n\nexport function renderItem({ config, nh }: { config: ContextmenuConfig, nh: NameHelper }) {\n  if (config.children?.length) {\n    return renderGroupItem(config, nh)\n  } else {\n    return (\n      <DropdownItem\n        class={nh.be('item')}\n        label={config.key}\n        divided={config.divided}\n        disabled={config.disabled}\n      >\n        {renderItemIcon(config, nh)}\n        {typeof config.renderer === 'function' ? (\n          config.renderer()\n        ) : (\n          <span class={nh.be('label')} style={{ color: config.color }}>\n            {config.label || config.key}\n          </span>\n        )}\n        {renderItemShortcut(config, nh)}\n      </DropdownItem>\n    )\n  }\n}\n","<script setup lang=\"ts\">\nimport { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { Renderer } from '@/components/renderer'\n\nimport { reactive, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { isFunction } from '@vexip-ui/utils'\nimport { renderItem } from './render'\n\nimport type { ContextmenuConfig, ContextmenuOptions, Key } from './symbol'\n\ndefineOptions({ name: 'Contextmenu' })\n\nconst nh = useNameHelper('contextmenu')\nconst { isRtl } = useRtl()\nconst visible = ref(false)\nconst configs = ref<ContextmenuConfig[]>([])\nconst appear = ref(false)\n\nconst position = reactive({\n  x: 0,\n  y: 0,\n})\n\nconst onSelect = ref<((keys: Key[]) => void) | null>(null)\nconst onCancel = ref<(() => void) | null>(null)\n\nfunction openContextmenu(options: ContextmenuOptions) {\n  position.x = options.clientX || 0\n  position.y = options.clientY || 0\n  configs.value = options.configs\n  appear.value = options.appear ?? false\n\n  visible.value = true\n\n  return new Promise<Key[] | null>(resolve => {\n    onSelect.value = (keys: Key[]) => {\n      resolve(keys)\n    }\n    onCancel.value = () => {\n      resolve(null)\n    }\n  })\n}\n\nfunction afterContextmenu() {\n  onSelect.value = null\n  onCancel.value = null\n}\n\nfunction handleSelect(keys: Key[]) {\n  visible.value = false\n\n  if (isFunction(onSelect.value)) {\n    onSelect.value(keys)\n    afterContextmenu()\n  }\n}\n\nfunction handleCancel() {\n  visible.value = false\n\n  if (isFunction(onCancel.value)) {\n    onCancel.value()\n    afterContextmenu()\n  }\n}\n\ndefineExpose({ visible, position, openContextmenu, handleSelect, handleCancel })\n</script>\n\n<template>\n  <Dropdown\n    v-model:visible=\"visible\"\n    :class=\"[nh.b(), nh.bs('vars')]\"\n    trigger=\"click\"\n    :placement=\"isRtl ? 'left-start' : 'right-start'\"\n    :appear=\"appear\"\n    :transfer=\"false\"\n    :style=\"{\n      top: `${position.y}px`,\n      left: `${position.x}px`\n    }\"\n    @contextmenu.prevent.stop\n    @select=\"handleSelect\"\n    @outside-close=\"handleCancel\"\n  >\n    <!-- <div :class=\"nh.be('anchor')\"></div> -->\n    <template #drop>\n      <DropdownList\n        :class=\"[\n          nh.be('list'),\n          configs.some(c => c.icon) ? nh.bem('list', 'icons') : nh.bem('list', 'no-icon'),\n          configs.some(c => c.children && c.children.length)\n            ? nh.bem('list', 'arrows')\n            : nh.bem('list', 'no-arrow')\n        ]\"\n      >\n        <Renderer\n          v-for=\"item in configs\"\n          :key=\"item.key\"\n          :data=\"{ config: item, nh }\"\n          :renderer=\"renderItem\"\n        ></Renderer>\n      </DropdownList>\n    </template>\n  </Dropdown>\n</template>\n","import { createApp, createVNode, render } from 'vue'\n\nimport Component from './contextmenu.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { ContextmenuConfig, ContextmenuInstance, ContextmenuOptions, Key } from './symbol'\n\nexport type { ContextmenuConfig, ContextmenuOptions }\n\nexport class ContextmenuManager {\n  name: string\n\n  private _mountedApp: App<unknown> | null\n  private _instance: ContextmenuInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _pending: Promise<Key[] | null> | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor() {\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._pending = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Contextmenu'\n  }\n\n  open(options: ContextmenuOptions) {\n    if (!isClient) {\n      return\n    }\n\n    const { target = document.body, ...others } = options\n\n    this._pending = this._getInstance(target)!.openContextmenu(others)\n\n    return this._pending\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: { property?: string } = {}) {\n    const { property } = options\n\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$contextmenu) {\n      app.config.globalProperties[property || '$contextmenu'] = this\n    }\n  }\n\n  private _getInstance(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    if (this._pending) {\n      let innerApp = this._innerApp\n      let container = this._container\n\n      const unmount = () => {\n        innerApp?.unmount()\n        container && render(null, container)\n\n        innerApp = null\n        container = null\n      }\n\n      this._pending.finally(unmount)\n      this._instance?.handleCancel()\n    } else {\n      this._innerApp?.unmount()\n      this._container && render(null, this._container)\n    }\n\n    this._pending = null\n\n    if (!this._mountedApp) {\n      console.warn('[vexip-ui:Contextmenu]: App missing, the plugin maybe not installed.')\n\n      this._container = document.createElement('div')\n      this._innerApp = createApp(Component)\n      this._instance = this._innerApp.mount(this._container) as ContextmenuInstance\n    } else {\n      const vnode = createVNode(Component, null, null)\n\n      this._container = document.createElement('div')\n      vnode.appContext = this._mountedApp._context\n\n      render(vnode, this._container)\n\n      this._instance = proxyExposed<ContextmenuInstance>(vnode)\n    }\n\n    this._mountedEl = this._container.firstElementChild as HTMLElement\n    this._wrapper = unrefElement(target) || document.body\n\n    this._wrapper.appendChild(this._mountedEl)\n\n    return this._instance\n  }\n}\n\nexport const Contextmenu = new ContextmenuManager()\n","import type { Dateable } from '@vexip-ui/utils'\nimport type { CalendarPanelSlots } from '../calendar'\nimport type { WheelSlots } from '../wheel'\n\nexport type DateType = 'year' | 'month' | 'date'\nexport type TimeType = 'hour' | 'minute' | 'second'\nexport type DateTimeType = DateType | TimeType\n\nexport type DatePickerType = 'date' | 'datetime' | 'year' | 'month'\nexport type DateShortcutsPlacement = 'top' | 'right' | 'bottom' | 'left'\nexport type TimeShortcutsPlacement = DateShortcutsPlacement\n\nexport type DatePickerFormatFn = (timestamp: number, type: 'start' | 'end') => unknown\n\nexport interface DateShortcut {\n  name: string,\n  value: Dateable | Dateable[] | (() => Dateable | Dateable[]),\n}\n\nexport interface TimeShortcut {\n  name: string,\n  value: string | string[] | (() => string | string[]),\n}\n\nexport interface DatePickerState {\n  type: DatePickerType,\n  currentColumn: DateTimeType,\n  enabled: Record<DateTimeType, boolean>,\n  activated: Record<DateTimeType, boolean>,\n  dateValue: Record<DateTimeType, number>,\n  enterColumn(type: 'prev' | 'next'): void,\n}\n\nexport interface DisabledTime {\n  hour?(hour: number): boolean,\n  minute?(hour: number, minute: number): boolean,\n  second?(hour: number, minute: number, second: number): boolean,\n}\n\nexport const enum DisabledType {\n  UPSTREAM,\n  TRUE,\n  AT_MIN_TRUE,\n  AT_MAX_TRUE,\n  FALSE,\n}\n\nexport type DatePickerChangeEvent = (value: number | number[] | null) => void\nexport type TimePickerChangeEvent = (value: string | string[]) => void\n\nexport const datePickerTypes = Object.freeze<DatePickerType[]>([\n  'date',\n  'datetime',\n  'year',\n  'month',\n])\n\nexport const invalidDate = new Date('')\n\n// export const TIME_REG = /^((?:[01]?[0-9])|(?:2[0-3]))((?::[0-5]?[0-9]))?((?::[0-5]?[0-9]))?$/\nexport const TIME_REG = /^((?:\\d{1,2}))((?::\\d{1,2}))?((?::\\d{1,2}))?$/\n\nexport interface TimeWheelSlots {\n  hour?: WheelSlots['default'],\n  minute?: WheelSlots['default'],\n  second?: WheelSlots['default'],\n}\n\nexport interface DatePanelSlots {\n  title?: (params: {\n    panel: DateType,\n    yearStart: number,\n    year: number,\n    month: number,\n    togglePanel: (panel: DateType) => void,\n  }) => any,\n  year?: (params: {\n    year: number,\n    selected: boolean,\n    isNext: boolean,\n    disabled: boolean,\n    inRange: boolean,\n  }) => any,\n  month?: (params: {\n    year: number,\n    month: number,\n    selected: boolean,\n    disabled: boolean,\n    inRange: boolean,\n  }) => any,\n  week?: CalendarPanelSlots['week'],\n  date?: CalendarPanelSlots['item'],\n}\n\nexport interface DatePickerSlots {\n  prefix?: () => any,\n  suffix?: () => any,\n  exchange?: () => any,\n  panelTitle?: DatePanelSlots['title'],\n  panelYear?: DatePanelSlots['year'],\n  panelMonth?: DatePanelSlots['month'],\n  panelWeek?: DatePanelSlots['week'],\n  panelDate?: DatePanelSlots['date'],\n}\n\nexport interface TimePickerSlots {\n  prefix?: () => any,\n  exchange?: () => any,\n  suffix?: () => any,\n}\n","import { computed, reactive, ref } from 'vue'\n\nimport { getLast, toNumber } from '@vexip-ui/utils'\nimport { DisabledType } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { DisabledTime } from './symbol'\n\ntype Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\n\nconst numberKeys = Array.from({ length: 10 }, (_, i) => i) as Digit[]\n\nfunction isNumberKey(key: string, num: Digit) {\n  return key === `Digit${num}` || key === `Numpad${num}` || key === `${num}`\n}\n\nexport function handleKeyEnter(event: KeyboardEvent) {\n  const key = event.code || event.key\n\n  let type: null | number | 'next' | 'prev' | 'up' | 'down' | 'ok' | 'esc' = null\n  let isMatch = false\n\n  switch (key) {\n    case 'Tab': {\n      isMatch = true\n      type = event.shiftKey ? 'prev' : 'next'\n      break\n    }\n    case 'ArrowRight': {\n      // 下一列\n      isMatch = true\n      type = 'next'\n      break\n    }\n    case 'Delete':\n    case 'ArrowLeft': {\n      // 上一列\n      isMatch = true\n      type = 'prev'\n      break\n    }\n    case 'ArrowUp': {\n      // 加一\n      isMatch = true\n      type = 'up'\n      break\n    }\n    case 'ArrowDown': {\n      // 减一\n      isMatch = true\n      type = 'down'\n      break\n    }\n    case 'Space':\n    case ' ':\n    case 'Enter':\n    case 'NumpadEnter': {\n      // 确认\n      isMatch = true\n      type = 'ok'\n      break\n    }\n    case 'Escape': {\n      // 取消\n      isMatch = true\n      type = 'esc'\n      break\n    }\n  }\n\n  if (isMatch) {\n    event.preventDefault()\n    event.stopPropagation()\n  } else {\n    // 键入数字\n    const inputtedNumber = numberKeys.findIndex(num => isNumberKey(key, num))\n\n    if (~inputtedNumber) {\n      type = inputtedNumber\n\n      event.preventDefault()\n      event.stopPropagation()\n    }\n  }\n\n  return type\n}\n\nexport function useColumn<T extends string>(\n  colTypes: T[],\n  currentColumn = ref(colTypes[0]) as Ref<T | null>,\n) {\n  const columnTypes = Array.from(colTypes)\n  const columnCount = columnTypes.length\n  const enabled = reactive(\n    columnTypes.reduce((prev, current) => {\n      prev[current] = false\n      return prev\n    }, {} as any),\n  ) as Record<T, boolean>\n\n  function findEnabledColumn(types: T[]) {\n    currentColumn.value = types.find(type => enabled[type]) ?? currentColumn.value\n  }\n\n  function resetColumn(type?: T | null, reverse = false) {\n    if (!type) {\n      currentColumn.value = null\n    }\n\n    const types = reverse ? Array.from(columnTypes).reverse() : columnTypes\n    const index = types.findIndex(column => column === type)\n\n    if (~index) {\n      findEnabledColumn(types.slice(index, columnCount).concat(types.slice(0, index)))\n    } else {\n      findEnabledColumn(types)\n    }\n  }\n\n  function enterColumn(type: 'prev' | 'next', canLoop = true) {\n    if (!currentColumn.value) {\n      currentColumn.value = (type === 'next' ? getLast(columnTypes) : columnTypes[0]) ?? null\n    }\n\n    for (let i = 0; i < columnCount; ++i) {\n      if (currentColumn.value === columnTypes[i]) {\n        const rawTypes = type === 'prev' ? Array.from(columnTypes).reverse() : columnTypes\n        const nextIndex = (type === 'prev' ? columnCount - i : i + 1) % columnCount\n        const types = canLoop\n          ? rawTypes.slice(nextIndex, columnCount).concat(rawTypes.slice(0, nextIndex))\n          : nextIndex\n            ? rawTypes.slice(nextIndex, columnCount)\n            : []\n\n        findEnabledColumn(types)\n\n        break\n      }\n    }\n  }\n\n  return {\n    currentColumn,\n    enabled,\n    resetColumn,\n    enterColumn,\n  }\n}\n\nconst defaultMin = [0, 0, 0]\nconst defaultMax = [23, 59, 59]\n\nexport function useTimeBound(originMin: Ref<string>, originMax: Ref<string>) {\n  const minUnits = computed(() => {\n    return originMin.value ? originMin.value.split(':').map(toNumber) : defaultMin\n  })\n  const maxUnits = computed(() => {\n    return originMax.value ? originMax.value.split(':').map(toNumber) : defaultMax\n  })\n  const reversed = computed(() => {\n    const min = minUnits.value\n    const max = maxUnits.value\n\n    for (let i = 0; i < 3; ++i) {\n      if (min[i] < max[i]) return false\n      if (min[i] > max[i]) return true\n    }\n\n    return false\n  })\n\n  const isTimeDisabled: Required<DisabledTime> = {\n    hour: isHourDisabled,\n    minute: (hour, minute) => isMinuteDisabled(hour, minute) !== DisabledType.FALSE,\n    second: (hour, minute, second) => isSecondDisabled(hour, minute, second) !== DisabledType.FALSE,\n  }\n\n  function isHourDisabled(hour: number) {\n    const min = minUnits.value[0] || defaultMin[0]\n    const max = maxUnits.value[0] || defaultMax[0]\n\n    return reversed.value ? hour > max && hour < min : hour < min || hour > max\n  }\n\n  function isMinuteDisabled(hour: number, minute: number) {\n    if (isHourDisabled(hour)) return DisabledType.UPSTREAM\n\n    if (minUnits.value[0] === maxUnits.value[0] && hour === minUnits.value[0]) {\n      const min = minUnits.value[1] || defaultMin[1]\n      const max = maxUnits.value[1] || defaultMax[1]\n\n      if (reversed.value ? minute > max && minute < min : minute < min || minute > max) {\n        return DisabledType.TRUE\n      }\n    }\n\n    if (hour === minUnits.value[0]) {\n      const min = minUnits.value[1] || defaultMin[1]\n\n      if (minute < min) return DisabledType.AT_MIN_TRUE\n    }\n\n    if (hour === maxUnits.value[0]) {\n      const max = maxUnits.value[1] || defaultMax[1]\n\n      if (minute > max) return DisabledType.AT_MAX_TRUE\n    }\n\n    return DisabledType.FALSE\n  }\n\n  function isSecondDisabled(hour: number, minute: number, second: number) {\n    if (isMinuteDisabled(hour, minute) !== DisabledType.FALSE) return DisabledType.UPSTREAM\n\n    if (\n      minUnits.value[0] === maxUnits.value[0] &&\n      hour === minUnits.value[0] &&\n      minUnits.value[1] === maxUnits.value[1] &&\n      minute === minUnits.value[1]\n    ) {\n      const min = minUnits.value[2] || defaultMin[2]\n      const max = maxUnits.value[2] || defaultMax[2]\n\n      if (reversed.value ? second > max && second < min : second < min || second > max) {\n        return DisabledType.TRUE\n      }\n    }\n\n    if (hour === minUnits.value[0] && minute === minUnits.value[1]) {\n      const min = minUnits.value[2] || defaultMin[2]\n\n      if (second < min) return DisabledType.AT_MIN_TRUE\n    }\n\n    if (hour === maxUnits.value[0] && minute === maxUnits.value[1]) {\n      const max = maxUnits.value[2] || defaultMax[2]\n\n      if (second > max) return DisabledType.AT_MAX_TRUE\n    }\n\n    return DisabledType.FALSE\n  }\n\n  return {\n    minUnits,\n    maxUnits,\n    reversed,\n    isTimeDisabled,\n  }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { doubleDigits, getLastDayOfMonth } from '@vexip-ui/utils'\nimport { handleKeyEnter } from './helper'\n\nimport type { PropType } from 'vue'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { DateTimeType, DateType } from './symbol'\n\ndefineOptions({ name: 'DateControl' })\n\nconst props = defineProps({\n  unitType: {\n    type: String as PropType<DateTimeType | ''>,\n    default: '',\n  },\n  enabled: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({}),\n  },\n  activated: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({}),\n  },\n  dateValue: {\n    type: Object as PropType<Record<DateTimeType, number>>,\n    default: () => ({}),\n  },\n  dateSeparator: {\n    type: String,\n    default: '/',\n  },\n  timeSeparator: {\n    type: String,\n    default: ':',\n  },\n  visible: {\n    type: Boolean,\n    default: false,\n  },\n  focused: {\n    type: Boolean,\n    default: false,\n  },\n  filler: {\n    type: String,\n    default: '-',\n    validator: (value: string) => {\n      return value.length === 1\n    },\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1],\n  },\n  ctrlSteps: {\n    type: Array as PropType<number[]>,\n    default: () => [5, 5, 5],\n  },\n  labels: {\n    type: Object as PropType<Partial<Record<DateTimeType, string>>>,\n    default: () => ({}),\n  },\n  hasError: {\n    type: Boolean,\n    default: false,\n  },\n  placeholder: {\n    type: String,\n    default: '',\n  },\n  readonly: {\n    type: Boolean,\n    default: false,\n  },\n  labeledBy: {\n    type: String,\n    default: undefined,\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\n    default: () => ({}),\n  },\n  dateUnitOrder: {\n    type: Array as PropType<DateType[]>,\n    default: () => ['year', 'month', 'date'],\n  },\n})\n\nconst emit = defineEmits([\n  'input',\n  'plus',\n  'minus',\n  'enter',\n  'cancel',\n  'unit-focus',\n  'prev-unit',\n  'next-unit',\n  'blur',\n])\n\nconst nh = useNameHelper('date-picker')\n\nconst wrapper = ref<HTMLElement>()\n\nconst label = computed(() => props.locale.ariaLabel ?? {})\nconst isActivated = computed(() => {\n  return (Object.keys(props.enabled) as DateTimeType[]).every(type => {\n    return !props.enabled[type] || props.activated[type]\n  })\n})\nconst className = computed(() => {\n  return {\n    [nh.be('input')]: true,\n    [nh.bem('input', 'activated')]: isActivated.value,\n    [nh.bem('input', 'error')]: props.hasError,\n  }\n})\nconst showTimeUnits = computed(() => {\n  return props.enabled.hour || props.enabled.minute || props.enabled.second\n})\nconst formattedYear = computed(() => {\n  return formatValue('year')\n})\nconst formattedMonth = computed(() => {\n  return formatValue('month')\n})\nconst formattedDate = computed(() => {\n  return formatValue('date')\n})\nconst formattedHour = computed(() => {\n  return formatValue('hour')\n})\nconst formattedMinute = computed(() => {\n  return formatValue('minute')\n})\nconst formattedSecond = computed(() => {\n  return formatValue('second')\n})\nconst maxDateCount = computed(() => {\n  return getLastDayOfMonth(props.dateValue.year, props.dateValue.month)\n})\nconst dateUnitOrder = computed(() => {\n  const [one, two, three] = props.dateUnitOrder\n\n  return {\n    [one]: -4,\n    [two]: -2,\n    [three]: 0,\n  }\n})\n\ndefineExpose({\n  isActivated,\n  wrapper,\n  focus: () => {\n    wrapper.value?.focus()\n  },\n  blur: () => {\n    wrapper.value?.blur()\n  },\n})\n\nfunction formatValue(type: DateTimeType) {\n  const isYear = type === 'year'\n  const filler = props.filler\n\n  return props.activated[type]\n    ? isYear\n      ? props.dateValue.year.toString().padStart(4, '0')\n      : doubleDigits(props.dateValue[type])\n    : `${isYear ? `${filler}${filler}` : ''}${filler}${filler}`\n}\n\nfunction getUnitFocusClass(type: DateTimeType) {\n  return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\n}\n\nfunction handleInputFocus(type: DateTimeType) {\n  if (props.readonly) return\n\n  emit('unit-focus', type)\n}\n\nfunction handleInput(event: KeyboardEvent) {\n  if (!props.visible) return\n\n  const type = handleKeyEnter(event)\n\n  if (props.readonly) {\n    switch (type) {\n      case 'ok': {\n        emit('enter')\n        break\n      }\n      case 'esc': {\n        emit('cancel')\n        break\n      }\n    }\n\n    return\n  }\n\n  switch (type) {\n    case 'next': {\n      emit('next-unit')\n      break\n    }\n    case 'prev': {\n      emit('prev-unit')\n      break\n    }\n    case 'up': {\n      emit('minus', event.ctrlKey)\n      break\n    }\n    case 'down': {\n      emit('plus', event.ctrlKey)\n      break\n    }\n    case 'ok': {\n      emit('enter')\n      break\n    }\n    case 'esc': {\n      emit('cancel')\n      break\n    }\n    default: {\n      if (typeof type === 'number') {\n        emit('input', type)\n      }\n    }\n  }\n}\n\nfunction handleBlur() {\n  emit('blur')\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"none\"\n    tabindex=\"-1\"\n    @keydown=\"handleInput\"\n    @blur=\"handleBlur\"\n  >\n    <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\n      {{ placeholder }}\n    </div>\n    <template v-else>\n      <div\n        v-if=\"enabled.year\"\n        :class=\"[nh.be('unit'), getUnitFocusClass('year')]\"\n        role=\"spinbutton\"\n        :aria-label=\"label.year\"\n        :aria-valuenow=\"props.dateValue.year\"\n        :aria-valuetext=\"formattedYear\"\n        :aria-valuemin=\"1\"\n        :aria-valuemax=\"9999\"\n        :aria-labelledby=\"labeledBy\"\n        :style=\"{ order: dateUnitOrder['year'] }\"\n        @click=\"handleInputFocus('year')\"\n      >\n        {{ formattedYear }}\n      </div>\n      <div\n        v-if=\"labels.year\"\n        :class=\"nh.be('label')\"\n        aria-hidden\n        :style=\"{ order: dateUnitOrder['year'] }\"\n        @click=\"handleInputFocus('year')\"\n      >\n        {{ labels.year }}\n      </div>\n      <template v-if=\"enabled.month\">\n        <div\n          v-if=\"enabled.year\"\n          :class=\"nh.be('separator')\"\n          aria-hidden\n          style=\"order: -3\"\n        >\n          {{ dateSeparator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('month')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.month\"\n          :aria-valuenow=\"props.dateValue.month\"\n          :aria-valuetext=\"formattedMonth\"\n          :aria-valuemin=\"1\"\n          :aria-valuemax=\"12\"\n          :aria-labelledby=\"labeledBy\"\n          :style=\"{ order: dateUnitOrder['month'] }\"\n          @click=\"handleInputFocus('month')\"\n        >\n          {{ formattedMonth }}\n        </div>\n        <div\n          v-if=\"labels.month\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          :style=\"{ order: dateUnitOrder['month'] }\"\n          @click=\"handleInputFocus('month')\"\n        >\n          {{ labels.month }}\n        </div>\n      </template>\n      <template v-if=\"enabled.date\">\n        <div\n          v-if=\"enabled.month || enabled.year\"\n          :class=\"nh.be('separator')\"\n          aria-hidden\n          style=\"order: -1\"\n        >\n          {{ dateSeparator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('date')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.date\"\n          :aria-valuenow=\"props.dateValue.date\"\n          :aria-valuetext=\"formattedDate\"\n          :aria-valuemin=\"1\"\n          :aria-valuemax=\"maxDateCount || 31\"\n          :aria-labelledby=\"labeledBy\"\n          :style=\"{ order: dateUnitOrder['date'] }\"\n          @click=\"handleInputFocus('date')\"\n        >\n          {{ formattedDate }}\n        </div>\n        <div\n          v-if=\"labels.date\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          :style=\"{ order: dateUnitOrder['date'] }\"\n          @click=\"handleInputFocus('date')\"\n        >\n          {{ labels.date }}\n        </div>\n      </template>\n\n      <template v-if=\"showTimeUnits\">\n        <div :class=\"nh.be('pad')\"></div>\n        <div\n          v-if=\"enabled.hour\"\n          :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.hour\"\n          :aria-valuenow=\"props.dateValue.hour\"\n          :aria-valuetext=\"formattedHour\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"23\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('hour')\"\n        >\n          {{ formattedHour }}\n        </div>\n        <div\n          v-if=\"labels.hour\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('hour')\"\n        >\n          {{ labels.hour }}\n        </div>\n        <template v-if=\"enabled.minute\">\n          <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n            {{ timeSeparator }}\n          </div>\n          <div\n            :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\n            role=\"spinbutton\"\n            :aria-label=\"label.minute\"\n            :aria-valuenow=\"props.dateValue.minute\"\n            :aria-valuetext=\"formattedMinute\"\n            :aria-valuemin=\"0\"\n            :aria-valuemax=\"59\"\n            :aria-labelledby=\"labeledBy\"\n            @click=\"handleInputFocus('minute')\"\n          >\n            {{ formattedMinute }}\n          </div>\n          <div\n            v-if=\"labels.minute\"\n            :class=\"nh.be('label')\"\n            aria-hidden\n            @click=\"handleInputFocus('minute')\"\n          >\n            {{ labels.minute }}\n          </div>\n        </template>\n        <template v-if=\"enabled.second\">\n          <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n            {{ timeSeparator }}\n          </div>\n          <div\n            :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\n            role=\"spinbutton\"\n            :aria-label=\"label.second\"\n            :aria-valuenow=\"props.dateValue.second\"\n            :aria-valuetext=\"formattedSecond\"\n            :aria-valuemin=\"0\"\n            :aria-valuemax=\"59\"\n            :aria-labelledby=\"labeledBy\"\n            @click=\"handleInputFocus('second')\"\n          >\n            {{ formattedSecond }}\n          </div>\n          <div\n            v-if=\"labels.second\"\n            :class=\"nh.be('label')\"\n            aria-hidden\n            @click=\"handleInputFocus('second')\"\n          >\n            {{ labels.second }}\n          </div>\n        </template>\n      </template>\n    </template>\n  </div>\n</template>\n","import {\n  booleanNumberProp,\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  styleProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BarScrollPayload, ScrollMode, ScrollPayload } from './symbol'\n\nexport const scrollProps = buildProps({\n  scrollClass: classProp,\n  scrollStyle: styleProp,\n  scrollAttrs: Object as PropType<Record<string, any>>,\n  mode: String as PropType<ScrollMode>,\n  width: [Number, String],\n  height: [Number, String],\n  deltaX: Number,\n  deltaY: Number,\n  disabled: booleanProp,\n  pointer: booleanProp,\n  wheel: booleanProp,\n  scrollX: Number,\n  scrollY: Number,\n  useXBar: booleanProp,\n  useYBar: booleanProp,\n  barFade: Number,\n  barClass: classProp,\n  autoplay: booleanNumberProp,\n  playWaiting: Number,\n  noBuffer: booleanProp,\n  noTransition: booleanProp,\n  onBeforeScroll: Function as PropType<(payload: { signX: number, signY: number }) => boolean>,\n  useBarTrack: booleanProp,\n  scrollTag: String,\n  onResize: eventProp<(entry: ResizeObserverEntry) => void>(),\n  onXEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onYEnabledChange: eventProp<(enabled: boolean) => void>(),\n  onWheel: eventProp<(payload: BarScrollPayload & { sign: 1 | -1 }) => void>(),\n  onScrollStart: eventProp<(payload: Omit<ScrollPayload, 'type'>) => void>(),\n  onScroll: eventProp<(payload: ScrollPayload) => void>(),\n  onScrollEnd: eventProp<(payload: Omit<ScrollPayload, 'type'>) => void>(),\n  onBarScrollStart: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScroll: eventProp<(payload: BarScrollPayload) => void>(),\n  onBarScrollEnd: eventProp<(payload: BarScrollPayload) => void>(),\n  onReady: eventProp(),\n})\n\nexport type ScrollProps = ExtractPropTypes<typeof scrollProps>\nexport type ScrollCProps = ConfigurableProps<ScrollProps, 'scrollX' | 'scrollY', 'onBeforeScroll'>\n","import { computed, nextTick, onMounted, reactive, ref, watch } from 'vue'\n\nimport { useManualRef } from '@vexip-ui/hooks'\nimport { multipleFixed, toNumber } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\nimport type { ScrollMode } from './symbol'\n\nexport function useScrollWrapper({\n  mode,\n  disabled,\n  width,\n  height,\n  scrollX,\n  scrollY,\n  onResize,\n  onBeforeRefresh,\n  onAfterRefresh,\n}: {\n  mode: Ref<Exclude<ScrollMode, 'horizontal-exact'>>,\n  disabled: Ref<boolean>,\n  width: Ref<number | string>,\n  height: Ref<number | string>,\n  scrollX: Ref<number>,\n  scrollY: Ref<number>,\n  onResize?: (entry: ResizeObserverEntry) => void,\n  onBeforeRefresh?: () => void,\n  onAfterRefresh?: () => void,\n}) {\n  const { manualRef, triggerUpdate } = useManualRef()\n\n  const wrapperEl = ref<HTMLElement>()\n  const contentEl = ref<HTMLElement>()\n\n  // 容器长宽\n  const wrapper = reactive({\n    el: wrapperEl,\n    width: toNumber(width.value),\n    height: toNumber(height.value),\n  })\n\n  // 内容长宽\n  const content = reactive({\n    el: contentEl,\n    width: 0,\n    height: 0,\n  })\n\n  const x = manualRef(-scrollX.value)\n  const y = manualRef(-scrollY.value)\n\n  const isReady = ref(false)\n\n  const percentX = manualRef(0)\n  const percentY = manualRef(0)\n\n  const xScrollLimit = computed(() => {\n    return wrapper.width ? wrapper.width - content.width : 0\n  })\n  const yScrollLimit = computed(() => {\n    return wrapper.height ? wrapper.height - content.height : 0\n  })\n  const enableXScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'vertical' &&\n      !!wrapper.width &&\n      content.width - wrapper.width > 1\n    )\n  })\n  const enableYScroll = computed(() => {\n    return (\n      !disabled.value &&\n      mode.value !== 'horizontal' &&\n      !!wrapper.height &&\n      content.height - wrapper.height > 1\n    )\n  })\n  const xBarLength = computed(() => {\n    if (wrapper.width) {\n      return Math.max(Math.min((wrapper.width / (content.width || 1)) * 100, 99), 5)\n    }\n\n    return 35\n  })\n  const yBarLength = computed(() => {\n    if (wrapper.height) {\n      return Math.max(Math.min((wrapper.height / (content.height || 1)) * 100, 99), 5)\n    }\n\n    return 35\n  })\n\n  watch(wrapperEl, () => {\n    refreshWrapper()\n  })\n  watch(contentEl, () => {\n    computeContentSize()\n  })\n  watch(scrollX, value => {\n    x.value = -value\n    verifyScroll()\n  })\n  watch(scrollY, value => {\n    y.value = -value\n    verifyScroll()\n  })\n  watch(width, () => {\n    refreshWrapper().then(verifyScroll)\n  })\n  watch(height, () => {\n    refreshWrapper().then(verifyScroll)\n  })\n\n  function computeWrapperSize(sizeType: 'width' | 'height') {\n    return nextTick(() => {\n      if (!wrapper.el) return\n\n      const size = sizeType === 'width' ? width.value : height.value\n      const titleCaseSizeType = sizeType.slice(0, 1).toUpperCase() + sizeType.slice(1)\n\n      // 获取 wrapper 的 px 大小\n      if (typeof size === 'string') {\n        if (!size.endsWith('px') && (!size || Number.isNaN(Number(size)))) {\n          wrapper[sizeType] =\n            wrapper.el[`offset${titleCaseSizeType}` as 'offsetWidth' | 'offsetHeight']\n        } else {\n          wrapper[sizeType] = parseInt(size)\n        }\n      } else {\n        wrapper[sizeType] = size\n      }\n    })\n  }\n\n  async function refreshWrapper() {\n    const promises: Promise<void>[] = []\n\n    if (mode.value !== 'vertical') {\n      promises.push(computeWrapperSize('width'))\n    }\n\n    if (mode.value !== 'horizontal') {\n      promises.push(computeWrapperSize('height'))\n    }\n\n    await Promise.all(promises)\n  }\n\n  let timer: ReturnType<typeof setTimeout>\n\n  function computeContentSize() {\n    clearTimeout(timer)\n\n    return new Promise<void>(resolve => {\n      isReady.value = false\n\n      timer = setTimeout(() => {\n        if (!content.el) {\n          resolve()\n          return\n        }\n\n        if (mode.value !== 'vertical') {\n          content.width = content.el.offsetWidth\n\n          if (wrapper.width >= content.width) {\n            x.value = 0\n          } else {\n            if (x.value === 0) {\n              x.value = -scrollX.value\n            }\n          }\n        }\n\n        if (mode.value !== 'horizontal') {\n          content.height = content.el.offsetHeight\n\n          if (wrapper.height >= content.height) {\n            y.value = 0\n          } else {\n            if (y.value === 0) {\n              y.value = -scrollY.value\n            }\n          }\n        }\n\n        setTimeout(() => {\n          isReady.value = true\n          verifyScroll()\n          resolve()\n        }, 1)\n      }, 0)\n    })\n  }\n\n  /**\n   * Will post process the percent scroll values.\n   */\n  function verifyScroll() {\n    if (!isReady.value) {\n      return\n    }\n\n    if (mode.value !== 'vertical') {\n      x.value = Math.min(0, Math.max(x.value, xScrollLimit.value))\n\n      if (mode.value !== 'both') {\n        y.value = 0\n      }\n    }\n\n    if (mode.value !== 'horizontal') {\n      y.value = Math.min(0, Math.max(y.value, yScrollLimit.value))\n\n      if (mode.value !== 'both') {\n        x.value = 0\n      }\n    }\n\n    computePercent()\n    triggerUpdate()\n  }\n\n  function computePercent() {\n    percentX.value = multipleFixed(x.value / (xScrollLimit.value || -1), 100, 2)\n    percentY.value = multipleFixed(y.value / (yScrollLimit.value || -1), 100, 2)\n\n    percentX.value = Math.max(0, Math.min(percentX.value, 100))\n    percentY.value = Math.max(0, Math.min(percentY.value, 100))\n  }\n\n  function handleResize(entity: ResizeObserverEntry) {\n    refresh()\n    onResize?.(entity)\n  }\n\n  let isMounted = false\n\n  onMounted(() => {\n    refresh()\n    isMounted = true\n  })\n\n  async function refresh() {\n    if (typeof onBeforeRefresh === 'function') {\n      onBeforeRefresh()\n    }\n\n    refreshWrapper()\n    await computeContentSize().then(() => {\n      setTimeout(\n        () => {\n          verifyScroll()\n\n          if (typeof onAfterRefresh === 'function') {\n            onAfterRefresh()\n          }\n        },\n        isMounted ? 20 : 100,\n      )\n    })\n  }\n\n  return {\n    wrapperEl,\n    contentEl,\n\n    wrapper,\n    content,\n    isReady,\n    x,\n    y,\n    percentX,\n    percentY,\n    xScrollLimit,\n    yScrollLimit,\n    enableXScroll,\n    enableYScroll,\n    xBarLength,\n    yBarLength,\n\n    handleResize,\n    verifyScroll,\n    computePercent,\n    refresh,\n    triggerUpdate,\n  }\n}\n","import { USE_TOUCH } from '@vexip-ui/utils'\n\nexport type ScrollMode = 'horizontal' | 'horizontal-exact' | 'vertical' | 'both'\n\nexport interface ScrollPayload {\n  type: Exclude<ScrollMode, 'horizontal-exact'>,\n  clientX: number,\n  clientY: number,\n  percentX: number,\n  percentY: number,\n}\n\nexport interface BarScrollPayload {\n  type: 'vertical' | 'horizontal',\n  clientX: number,\n  clientY: number,\n  percentX: number,\n  percentY: number,\n}\n\nexport interface ScrollState {\n  scrollX: number,\n  scrollY: number,\n  percentX: number,\n  percentY: number,\n  enableXScroll: number,\n  enableYScroll: number,\n}\n\nexport interface ScrollSlotParams {\n  getState: () => ScrollState,\n  refresh: () => void,\n  scrollTo: (clientX: number, clientY: number, duration?: number) => void,\n  scrollBy: (deltaX: number, deltaY: number, duration?: number) => void,\n  scrollToElement: (el: string | Element, duration?: number, offset?: number) => void,\n  ensureInView: (el: string | Element, duration?: number, offset?: number) => void,\n}\n\nexport const scrollModes = Object.freeze<ScrollMode[]>([\n  'horizontal',\n  'horizontal-exact',\n  'vertical',\n  'both',\n])\n\nexport const MOVE_EVENT = USE_TOUCH ? 'touchmove' : 'mousemove'\nexport const UP_EVENT = USE_TOUCH ? 'touchend' : 'mouseup'\n","<script setup lang=\"ts\">\nimport { Scrollbar } from '@/components/scrollbar'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  shallowReadonly,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\nimport { scrollProps } from './props'\nimport { useScrollWrapper } from './hooks'\nimport { MOVE_EVENT, UP_EVENT, scrollModes } from './symbol'\n\nimport type { ScrollbarExposed } from '@/components/scrollbar'\nimport type { EventHandler } from '@vexip-ui/utils'\nimport type { ScrollMode } from './symbol'\n\ndefineOptions({ name: 'Scroll' })\n\nconst _props = defineProps(scrollProps)\nconst props = useProps('scroll', _props, {\n  scrollClass: null,\n  scrollStyle: null,\n  scrollAttrs: null,\n  mode: {\n    default: 'vertical',\n    validator: value => scrollModes.includes(value),\n  },\n  width: '',\n  height: '',\n  deltaX: 40,\n  deltaY: 40,\n  disabled: false,\n  pointer: USE_TOUCH,\n  wheel: true,\n  scrollX: {\n    default: 0,\n    static: true,\n  },\n  scrollY: {\n    default: 0,\n    static: true,\n  },\n  useXBar: false,\n  useYBar: false,\n  barFade: 1500,\n  barClass: null,\n  autoplay: false,\n  playWaiting: 500,\n  noBuffer: false,\n  noTransition: false,\n  onBeforeScroll: {\n    default: null,\n    isFunc: true,\n  },\n  useBarTrack: false,\n  scrollTag: 'div',\n})\n\nconst emitter = createEventEmitter()\n\nconst nh = useNameHelper('scroll')\nconst { isRtl } = useRtl()\nconst { timer } = useSetTimeout()\n\nconst usingBar = ref(false)\nconst scrolling = ref(false)\nconst transitionDuration = ref<number>(0)\nconst mode = computed(() => (props.mode === 'horizontal-exact' ? 'horizontal' : props.mode))\n\nlet waitDelay = 180\n\nconst xBar = ref<ScrollbarExposed>()\nconst yBar = ref<ScrollbarExposed>()\n\nlet initialized = false\n\nconst {\n  wrapperEl,\n  contentEl,\n\n  wrapper,\n  isReady,\n  x,\n  y,\n  percentX,\n  percentY,\n  xScrollLimit,\n  yScrollLimit,\n  enableXScroll,\n  enableYScroll,\n  xBarLength,\n  yBarLength,\n\n  handleResize,\n  verifyScroll,\n  computePercent,\n  refresh,\n  triggerUpdate,\n} = useScrollWrapper({\n  mode,\n  disabled: toRef(props, 'disabled'),\n  width: toRef(props, 'width'),\n  height: toRef(props, 'height'),\n  scrollX: toRef(props, 'scrollX'),\n  scrollY: toRef(props, 'scrollY'),\n  onResize: entry => {\n    emitEvent(props.onResize, entry)\n  },\n  // onBeforeRefresh: stopAutoplay,\n  onAfterRefresh: () => {\n    syncBarScroll()\n\n    if (!initialized) {\n      initialized = true\n      startAutoplay()\n    }\n  },\n})\n\nconst slotParams = shallowReadonly({\n  getState,\n  refresh,\n  scrollTo,\n  scrollBy,\n  scrollToElement,\n  ensureInView,\n})\n\n/* autoplay */\nconst canPlay = ref(false)\n\nconst canAutoplay = computed(() => {\n  return (\n    mode.value !== 'both' &&\n    (isTrue(props.autoplay) || +props.autoplay > 1000) &&\n    ((mode.value === 'horizontal' && enableXScroll.value) ||\n      (mode.value === 'vertical' && enableYScroll.value))\n  )\n})\n\nwatch([() => props.autoplay, () => props.playWaiting], () => {\n  stopAutoplay()\n  nextTick(startAutoplay)\n})\n\nfunction startAutoplay() {\n  if (!canAutoplay.value) return\n\n  stopAutoplay()\n\n  const distance = mode.value === 'horizontal' ? 'width' : 'height'\n  const limit = mode.value === 'horizontal' ? xScrollLimit : yScrollLimit\n  // const prop = mode.value === 'horizontal' ? 'x' : 'y'\n  const prop = mode.value === 'horizontal' ? x : y\n  const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\n\n  let playSpeed = 0.5\n\n  if (typeof props.autoplay === 'number') {\n    playSpeed = (wrapper[distance] / props.autoplay) * 16\n  }\n\n  const precessScroll = () => {\n    computePercent()\n    triggerUpdate()\n    syncBarScroll()\n    emitScrollEvent(mode.value)\n  }\n  const scroll = () => {\n    prop.value -= playSpeed\n\n    if (prop.value <= limit.value) {\n      prop.value = limit.value\n      canPlay.value = false\n\n      precessScroll()\n\n      timer.end = setTimeout(() => {\n        scrollTo(0, 0, 500)\n\n        timer.start = setTimeout(() => {\n          canPlay.value = true\n\n          emitScrollEvent(mode.value)\n          scroll()\n        }, 500 + waiting)\n      }, waiting)\n    } else {\n      precessScroll()\n\n      if (canPlay.value) {\n        requestAnimationFrame(scroll)\n      }\n    }\n  }\n\n  timer.play = setTimeout(() => {\n    canPlay.value = true\n    scroll()\n  }, waiting)\n}\n\nfunction stopAutoplay() {\n  canPlay.value = false\n\n  clearTimeout(timer.play)\n  clearTimeout(timer.start)\n  clearTimeout(timer.end)\n}\n/* autoplay */\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(mode.value),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('using-bar')]: usingBar.value,\n      [nh.bm('scrolling')]: scrolling.value,\n      [nh.bm('no-ready')]: !isReady.value,\n      [nh.bm('no-transition')]: props.noTransition,\n    },\n  ]\n})\nconst style = computed(() => {\n  const { width, height } = props\n\n  return {\n    width: width\n      ? typeof width === 'string'\n        ? Number.isNaN(Number(width))\n          ? width\n          : `${Number(width)}px`\n        : `${width}px`\n      : undefined,\n    height: height\n      ? typeof height === 'string'\n        ? Number.isNaN(Number(height))\n          ? height\n          : `${Number(height)}px`\n        : `${height}px`\n      : undefined,\n  }\n})\nconst wrapperClass = computed(() => {\n  return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\n})\nconst wrapperStyle = computed(() => {\n  return [props.scrollAttrs?.style, props.scrollStyle]\n})\n\nwatch(enableXScroll, value => {\n  emitEvent(props.onXEnabledChange, value)\n})\nwatch(enableYScroll, value => {\n  emitEvent(props.onYEnabledChange, value)\n})\nwatch(isReady, value => {\n  if (value) {\n    transitionDuration.value = -1\n    emitEvent(props.onReady)\n  } else {\n    transitionDuration.value = 0\n  }\n})\nwatchEffect(() => {\n  if (!contentEl.value) return\n\n  contentEl.value.style.transform = `translate3d(${isRtl.value ? -x.value : x.value}px, ${\n    y.value\n  }px, 0)`\n})\nwatchEffect(() => {\n  if (!contentEl.value) return\n\n  contentEl.value.style.transitionDuration =\n    transitionDuration.value < 0 ? '' : `${transitionDuration.value}ms`\n})\n\nonMounted(() => {\n  if (!isClient || !wrapperEl.value) return\n\n  const style = getComputedStyle(wrapperEl.value)\n  const duration = style.getPropertyValue(nh.cv('move-duration')).trim()\n\n  if (duration.endsWith('ms')) {\n    waitDelay = parseFloat(duration)\n  } else if (duration.endsWith('s')) {\n    waitDelay = parseFloat(duration) * 1000\n  }\n\n  waitDelay = Number.isNaN(waitDelay) ? 140 : waitDelay\n})\n\nonBeforeUnmount(stopAutoplay)\n\ndefineExpose({\n  percentX,\n  percentY,\n  x,\n  y,\n  isReady,\n\n  xBarLength,\n  yBarLength,\n  enableXScroll,\n  enableYScroll,\n\n  wrapper: wrapperEl,\n  content: contentEl,\n  xBar,\n  yBar,\n\n  refresh,\n  scrollTo,\n  scrollBy,\n  scrollToElement,\n  ensureInView,\n  getXScrollLimit,\n  getYScrollLimit,\n  addScrollListener,\n  removeScrollListener,\n})\n\nfunction getCommonPayload() {\n  return {\n    clientX: -x.value,\n    clientY: -y.value,\n    percentX: percentX.value,\n    percentY: percentY.value,\n  }\n}\n\nfunction syncBarScroll() {\n  xBar.value?.handleScroll(percentX.value)\n  yBar.value?.handleScroll(percentY.value)\n}\n\nfunction handleMouseDown(event: MouseEvent) {\n  if (!props.pointer || event.button > 0 || USE_TOUCH) {\n    return false\n  }\n\n  handlePointerDown(event)\n}\n\nfunction handleTouchStart(event: TouchEvent) {\n  if (!props.pointer || event.touches.length !== 1) {\n    return false\n  }\n\n  handlePointerDown(event)\n}\n\n// 记录滚动开始位置\nlet xScrollStartAt = 0\nlet yScrollStartAt = 0\n\n// 记录滚动开始鼠标位置\nlet cursorXPosition = 0\nlet cursorYPosition = 0\n\nlet moved = false\nlet target: EventTarget | null = null\nlet lastDate = 0\n\nfunction handlePointerDown(event: MouseEvent | TouchEvent) {\n  if (!enableXScroll.value && !enableYScroll.value) {\n    return false\n  }\n\n  if (event.cancelable) {\n    event.preventDefault()\n  }\n\n  prepareScroll()\n\n  transitionDuration.value = 0\n\n  const pointer = 'touches' in event ? event.touches[0] : event\n\n  xScrollStartAt = x.value\n  yScrollStartAt = y.value\n  cursorXPosition = pointer.clientX\n  cursorYPosition = pointer.clientY\n\n  moved = false\n  target = event.target\n  lastDate = Date.now()\n\n  document.addEventListener(MOVE_EVENT, handlePointerMove)\n  document.addEventListener(UP_EVENT, handlePointerUp)\n\n  emitEvent(props.onScrollStart, getCommonPayload())\n}\n\nfunction handlePointerMove(event: MouseEvent | TouchEvent) {\n  event.stopPropagation()\n\n  if (!USE_TOUCH) {\n    event.preventDefault()\n  }\n\n  const pointer = 'touches' in event ? event.touches[0] : event\n  const signX = pointer.clientX - cursorXPosition > 0 ? 1 : -1\n  const signY = pointer.clientY - cursorYPosition > 0 ? 1 : -1\n\n  if (props.onBeforeScroll?.({ signX, signY }) === false) {\n    return false\n  }\n\n  scrolling.value = true\n\n  if (enableXScroll.value) {\n    x.value = xScrollStartAt + pointer.clientX - cursorXPosition\n    moved = true\n  }\n\n  if (enableYScroll.value) {\n    y.value = yScrollStartAt + pointer.clientY - cursorYPosition\n    moved = true\n  }\n\n  if (props.noBuffer) {\n    verifyScroll()\n  } else {\n    computePercent()\n    triggerUpdate()\n  }\n\n  syncBarScroll()\n  emitScrollEvent(mode.value)\n}\n\nfunction handlePointerUp(event: MouseEvent | TouchEvent) {\n  if (!moved && target && event.target === target && Date.now() - lastDate <= 500) {\n    target.dispatchEvent(new MouseEvent('click', event))\n  }\n\n  document.removeEventListener(MOVE_EVENT, handlePointerMove)\n  document.removeEventListener(UP_EVENT, handlePointerUp)\n\n  transitionDuration.value = -1\n  moved = false\n\n  handleBuffer()\n  verifyScroll()\n  syncBarScroll()\n  emitEvent(props.onScrollEnd, getCommonPayload())\n  startAutoplay()\n}\n\n// 按下 shift 时为横向滚动，保持和原生操作一致\nfunction handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\n  const isVerticalScroll = enableYScroll.value && type === 'vertical'\n  const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\n\n  // 纵横滚动均使用 deltaY 标记\n  const sign = event.deltaY > 0 ? -1 : 1\n\n  if (\n    props.wheel &&\n    (isVerticalScroll || isHorizontalScroll) &&\n    props.onBeforeScroll?.({ signX: -sign, signY: -sign }) !== false\n  ) {\n    event.preventDefault()\n    event.stopPropagation()\n  } else {\n    return true\n  }\n\n  if (mode.value !== 'both' && mode.value !== type) return false\n\n  prepareScroll()\n\n  const computedDelta = sign * (type === 'horizontal' ? props.deltaX : props.deltaY)\n\n  if (isVerticalScroll) {\n    y.value += computedDelta\n  } else if (isHorizontalScroll) {\n    x.value += computedDelta\n  }\n\n  verifyScroll()\n  syncBarScroll()\n  emitScrollEvent(type)\n\n  emitEvent(props.onWheel, {\n    ...getCommonPayload(),\n    type,\n    sign: -sign as 1 | -1,\n  })\n\n  startAutoplay()\n}\n\nfunction prepareScroll() {\n  stopAutoplay()\n  clearTimeout(timer.buffer)\n}\n\nfunction handleBuffer() {\n  if (props.noBuffer) {\n    timer.buffer = setTimeout(() => {\n      scrolling.value = false\n    }, 300)\n  } else {\n    scrolling.value = false\n  }\n}\n\nfunction handleBarScrollStart(type: 'vertical' | 'horizontal') {\n  usingBar.value = true\n  emitEvent(props.onBarScrollStart, { ...getCommonPayload(), type })\n}\n\nfunction handleBarScrollEnd(type: 'vertical' | 'horizontal') {\n  usingBar.value = false\n  emitEvent(props.onBarScrollEnd, { ...getCommonPayload(), type })\n}\n\nfunction handleXBarScroll(percent: number) {\n  percentX.value = percent\n  x.value = (percent * xScrollLimit.value) / 100\n  triggerUpdate()\n\n  emitEvent(props.onBarScroll, {\n    ...getCommonPayload(),\n    type: 'horizontal',\n  })\n  emitScrollEvent('horizontal')\n}\n\nfunction handleYBarScroll(percent: number) {\n  percentY.value = percent\n  y.value = (percent * yScrollLimit.value) / 100\n  triggerUpdate()\n\n  emitEvent(props.onBarScroll, {\n    ...getCommonPayload(),\n    type: 'vertical',\n  })\n  emitScrollEvent('vertical')\n}\n\nfunction emitScrollEvent(type: Exclude<ScrollMode, 'horizontal-exact'>) {\n  emitEvent(props.onScroll, {\n    ...getCommonPayload(),\n    type,\n  })\n  emitter.emit('scroll', {\n    ...getCommonPayload(),\n    type,\n  })\n}\n\nfunction ensureScrollOffset() {\n  if (wrapperEl.value) {\n    wrapperEl.value.scrollTop = 0\n    wrapperEl.value.scrollLeft = 0\n  }\n}\n\nfunction getState() {\n  const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\n\n  return {\n    scrollX,\n    scrollY,\n    percentX,\n    percentY,\n    enableXScroll: enableXScroll.value,\n    enableYScroll: enableYScroll.value,\n  }\n}\n\nfunction waitTransition(duration = waitDelay) {\n  clearTimeout(timer.wait)\n\n  return new Promise<void>(resolve => {\n    timer.wait = setTimeout(() => resolve(), duration + 1)\n  })\n}\n\nfunction scrollTo(clientX: number, clientY: number, duration?: number) {\n  setDuration(duration)\n  nextTick(() => {\n    let changed = false\n\n    if (enableXScroll.value && Math.abs(x.value + clientX) > 0.01) {\n      x.value = -clientX\n      changed = true\n    }\n\n    if (enableYScroll.value && Math.abs(y.value + clientY) > 0.01) {\n      y.value = -clientY\n      changed = true\n    }\n\n    verifyScroll()\n    syncBarScroll()\n\n    if (!changed) transitionDuration.value = -1\n  })\n\n  return waitTransition(duration)\n}\n\nfunction scrollBy(deltaX: number, deltaY: number, duration?: number) {\n  setDuration(duration)\n  nextTick(() => {\n    let changed = false\n\n    if (deltaX && enableXScroll) {\n      x.value -= deltaX\n      changed = true\n    }\n\n    if (deltaY && enableYScroll) {\n      y.value -= deltaY\n      changed = true\n    }\n\n    verifyScroll()\n    syncBarScroll()\n\n    if (!changed) transitionDuration.value = -1\n  })\n\n  return waitTransition(duration)\n}\n\nfunction setDuration(duration?: number) {\n  if (typeof duration === 'number') {\n    transitionDuration.value = duration\n\n    if (transitionDuration.value === 0) {\n      nextTick(() => {\n        transitionDuration.value = -1\n      })\n    }\n  }\n}\n\nfunction scrollToElement(el: string | Element, duration?: number, offset = 0) {\n  if (!contentEl.value) return Promise.resolve()\n\n  if (typeof el === 'string') {\n    el = contentEl.value.querySelector(el)!\n  }\n\n  if (!isElement(el)) return Promise.resolve()\n\n  const wrapperRect = contentEl.value.getBoundingClientRect()\n  const elRect = el.getBoundingClientRect()\n\n  let clientX = 0\n  let clientY = 0\n\n  if (mode.value !== 'vertical') {\n    clientX = elRect.left - wrapperRect.left + offset\n  }\n\n  if (mode.value !== 'horizontal') {\n    clientY = elRect.top - wrapperRect.top + offset\n  }\n\n  return scrollTo(clientX, clientY, duration)\n}\n\nfunction ensureInView(el: string | Element, duration?: number, offset = 0) {\n  if (!wrapperEl.value) return Promise.resolve()\n\n  if (typeof el === 'string') {\n    el = wrapperEl.value.querySelector(el)!\n  }\n\n  if (!isElement(el)) return Promise.resolve()\n\n  const wrapperRect = wrapperEl.value.getBoundingClientRect()\n  const elRect = el.getBoundingClientRect()\n\n  let clientX = 0\n  let clientY = 0\n\n  if (mode.value !== 'vertical') {\n    if (elRect.left < wrapperRect.left + offset) {\n      clientX = elRect.left - wrapperRect.left - offset\n    } else if (elRect.right > wrapperRect.right - offset) {\n      clientX = elRect.right - wrapperRect.right + offset\n    }\n  }\n\n  if (mode.value !== 'horizontal') {\n    if (elRect.top < wrapperRect.top + offset) {\n      clientY = elRect.top - wrapperRect.top - offset\n    } else if (elRect.bottom > wrapperRect.bottom - offset) {\n      clientY = elRect.bottom - wrapperRect.bottom + offset\n    }\n  }\n\n  return scrollBy(clientX, clientY, duration)\n}\n\nfunction getXScrollLimit() {\n  return [0, -xScrollLimit.value]\n}\n\nfunction getYScrollLimit() {\n  return [0, -yScrollLimit.value]\n}\n\nfunction addScrollListener(listener: EventHandler) {\n  emitter.on('scroll', listener)\n}\n\nfunction removeScrollListener(listener: EventHandler) {\n  emitter.off('scroll', listener)\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapperEl\"\n    :class=\"className\"\n    :style=\"style\"\n    @mousedown=\"handleMouseDown\"\n    @touchstart=\"handleTouchStart\"\n    @scroll=\"ensureScrollOffset\"\n    @wheel.exact=\"\n      handleWheel($event, props.mode === 'horizontal-exact' ? 'horizontal' : 'vertical')\n    \"\n    @wheel.shift=\"handleWheel($event, 'horizontal')\"\n  >\n    <div v-if=\"$slots.extra\" :class=\"nh.be('extra')\">\n      <slot name=\"extra\" v-bind=\"slotParams\"></slot>\n    </div>\n    <ResizeObserver throttle :on-resize=\"handleResize\">\n      <component\n        :is=\"props.scrollTag || 'div'\"\n        v-bind=\"props.scrollAttrs\"\n        ref=\"contentEl\"\n        :class=\"wrapperClass\"\n        :style=\"wrapperStyle\"\n        @transitionend=\"transitionDuration = -1\"\n      >\n        <slot v-bind=\"slotParams\"></slot>\n      </component>\n    </ResizeObserver>\n    <Scrollbar\n      v-if=\"props.useXBar\"\n      ref=\"xBar\"\n      inherit\n      placement=\"bottom\"\n      :class=\"[nh.bem('bar', 'horizontal'), props.barClass]\"\n      :fade=\"props.barFade\"\n      :bar-length=\"xBarLength\"\n      :disabled=\"!enableXScroll\"\n      :duration=\"transitionDuration\"\n      :use-track=\"props.useBarTrack\"\n      @scroll-start=\"handleBarScrollStart('horizontal')\"\n      @scroll=\"handleXBarScroll\"\n      @scroll-end=\"handleBarScrollEnd('horizontal')\"\n    ></Scrollbar>\n    <Scrollbar\n      v-if=\"props.useYBar\"\n      ref=\"yBar\"\n      inherit\n      placement=\"right\"\n      :class=\"[nh.bem('bar', 'vertical'), props.barClass]\"\n      :fade=\"props.barFade\"\n      :bar-length=\"yBarLength\"\n      :disabled=\"!enableYScroll\"\n      :duration=\"transitionDuration\"\n      :use-track=\"props.useBarTrack\"\n      @scroll-start=\"handleBarScrollStart('vertical')\"\n      @scroll=\"handleYBarScroll\"\n      @scroll-end=\"handleBarScrollEnd('vertical')\"\n    ></Scrollbar>\n  </div>\n</template>\n","import type { InjectionKey } from 'vue'\n\nexport type WheelRawOption =\n  | string\n  | number\n  | {\n    value: string | number,\n    label?: string,\n    disabled?: boolean,\n  }\n\nexport interface WheelOption {\n  value: string | number,\n  label: string,\n  disabled: boolean,\n  meta: WheelRawOption,\n}\n\nexport interface ItemState {\n  width: number,\n  height: number,\n  el?: HTMLElement | null,\n  value: number | string,\n  disabled: boolean,\n  meta: any,\n}\n\nexport interface WheelState {\n  increaseItem(item: ItemState): void,\n  decreaseItem(item: ItemState): void,\n}\n\nexport interface WheelSlots {\n  default?: (params: { option: WheelOption, index: number }) => any,\n}\n\nexport const WHEEL_STATE = '__VXP_WHEEL_STATE' as unknown as InjectionKey<WheelState>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { WHEEL_STATE } from './symbol'\n\ndefineOptions({ name: 'WheelItem' })\n\nconst props = defineProps({\n  value: {\n    type: [Number, String],\n    default: null,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  active: {\n    type: Boolean,\n    default: false,\n  },\n  meta: {\n    type: [String, Number, Object],\n    default: null,\n  },\n})\n\nconst nh = useNameHelper('wheel')\n\nconst wheelState = inject(WHEEL_STATE, null)\n\nconst width = ref(0)\nconst height = ref(0)\n\nconst wrapper = ref<HTMLElement>()\n\nconst state = reactive({\n  width,\n  height,\n  el: wrapper,\n  value: toRef(props, 'value'),\n  disabled: toRef(props, 'disabled'),\n  meta: toRef(props, 'meta'),\n})\n\nconst style = computed(() => {\n  return {\n    width: width.value ? `${width.value}px` : undefined,\n    height: height.value ? `${height.value}px` : undefined,\n  }\n})\n\nif (wheelState) {\n  onMounted(() => {\n    wheelState.increaseItem(state)\n  })\n\n  onBeforeUnmount(() => {\n    wheelState.decreaseItem(state)\n  })\n}\n\ndefineExpose({ wrapper })\n</script>\n\n<template>\n  <li\n    ref=\"wrapper\"\n    :class=\"[\n      nh.be('item'),\n      disabled && nh.bem('item', 'disabled'),\n      active && nh.bem('item', 'active')\n    ]\"\n    role=\"option\"\n    :aria-disabled=\"disabled ? 'true' : undefined\"\n    :aria-selected=\"active\"\n    :style=\"style\"\n  >\n    <slot>\n      {{ value }}\n    </slot>\n  </li>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { WheelRawOption, WheelSlots } from './symbol'\n\nexport const wheelProps = buildProps({\n  state: stateProp,\n  horizontal: booleanProp,\n  value: [String, Number],\n  /**\n   * 上下或左右两侧的候选数\n   */\n  candidate: Number as PropType<0 | 1 | 2 | 3>,\n  arrow: booleanProp,\n  pointer: booleanProp,\n  options: Array as PropType<WheelRawOption[]>,\n  insertEmpty: booleanStringProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  disabledItem: Function as PropType<(value: string | number, data: WheelRawOption) => boolean>,\n  noTransition: booleanProp,\n  selectable: booleanProp,\n  slots: Object as PropType<WheelSlots>,\n  onChange: eventProp<(value: string | number, data: WheelRawOption) => void>(),\n  onPrev: eventProp<(value: string | number, data: WheelRawOption) => void>(),\n  onNext: eventProp<(value: string | number, data: WheelRawOption) => void>(),\n  onItemClick: eventProp<(value: string | number, data: WheelRawOption) => void>(),\n})\n\nexport type WheelProps = ExtractPropTypes<typeof wheelProps>\nexport type WheelCProps = ConfigurableProps<WheelProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon/'\nimport { Renderer } from '@/components/renderer'\nimport { Scroll } from '@/components/scroll'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, provide, ref, watch } from 'vue'\n\nimport WheelItem from './wheel-item.vue'\nimport { createStateProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useDisplay, useModifier, useRtl } from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, debounce, debounceMinor, toFalse } from '@vexip-ui/utils'\nimport { wheelProps } from './props'\nimport { WHEEL_STATE } from './symbol'\n\nimport type { ItemState, WheelOption, WheelSlots } from './symbol'\n\ndefineOptions({ name: 'Wheel' })\n\nconst { idFor, labelId, state, disabled, loading, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<string | number>(() => wrapper.value?.focus())\n\nconst _props = defineProps(wheelProps)\nconst props = useProps('wheel', _props, {\n  state: createStateProp(state),\n  horizontal: false,\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  candidate: {\n    default: 2,\n    validator: value => [0, 1, 2, 3].includes(value),\n  },\n  arrow: false,\n  pointer: USE_TOUCH,\n  options: {\n    default: () => [],\n    static: true,\n  },\n  insertEmpty: false,\n  disabled: () => disabled.value,\n  loading: () => loading.value,\n  loadingLock: false,\n  disabledItem: {\n    default: toFalse,\n    isFunc: true,\n  },\n  noTransition: false,\n  selectable: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<WheelSlots>()\n\nconst nh = useNameHelper('wheel')\nconst icons = useIcons()\n\nconst items = ref(new Set<ItemState>())\nconst currentActive = ref(0)\nconst wrapperWidth = ref(0)\nconst wrapperHeight = ref(0)\nconst targetWidth = ref(0)\nconst targetHeight = ref(0)\nconst horizontalPadding = ref(0)\nconst verticalPadding = ref(0)\nconst isInit = ref(false)\n\nconst { isRtl } = useRtl()\n\nconst wrapper = useDisplay(displayInit)\nconst scroll = ref<InstanceType<typeof Scroll>>()\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.up || modifier.down) {\n      event.preventDefault()\n      modifier.up ? handlePrev() : handleNext()\n    }\n  },\n})\n\nconst normalizedOptions = computed<WheelOption[]>(() => {\n  const options = props.options.map(option => {\n    if (typeof option === 'object') {\n      const { value, label, disabled = false } = option\n\n      return {\n        value,\n        label: label || String(value),\n        disabled,\n        meta: option,\n      }\n    }\n\n    return { value: option, label: String(option), disabled: false, meta: option }\n  })\n\n  if (props.insertEmpty) {\n    options.unshift({\n      value: '',\n      label: typeof props.insertEmpty === 'string' ? props.insertEmpty : '-',\n      disabled: false,\n      meta: '',\n    })\n  }\n\n  return options\n})\nconst itemList = computed(() => {\n  return Array.from(items.value)\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.horizontal ? 'horizontal' : 'vertical'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: props.loading,\n    },\n  ]\n})\nconst listStyle = computed(() => {\n  if (props.horizontal) {\n    return {\n      paddingRight: `${horizontalPadding.value}px`,\n      paddingLeft: `${horizontalPadding.value}px`,\n    }\n  }\n\n  return {\n    paddingTop: `${verticalPadding.value}px`,\n    paddingBottom: `${verticalPadding.value}px`,\n  }\n})\nconst maskStyle = computed(() => {\n  if (props.horizontal) {\n    return {\n      width: horizontalPadding.value ? `${horizontalPadding.value}px` : undefined,\n    }\n  }\n\n  return {\n    height: verticalPadding.value ? `${verticalPadding.value}px` : undefined,\n  }\n})\nconst borderStyle = computed(() => {\n  const style: Record<string, string> = {\n    inset: props.horizontal\n      ? `0 ${horizontalPadding.value - 1}px`\n      : `${verticalPadding.value - 1}px 0`,\n  }\n\n  if (props.horizontal) {\n    style.borderTop = '0'\n    style.borderBottom = '0'\n  } else {\n    style.borderRight = '0'\n    style.borderLeft = '0'\n  }\n\n  return style\n})\nconst prevDisabled = computed(() => {\n  return (\n    props.disabled ||\n    !itemList.value.slice(0, currentActive.value).some(item => !isItemDisabled(item))\n  )\n})\nconst nextDisabled = computed(() => {\n  return (\n    props.disabled ||\n    currentActive.value >= itemList.value.length - 1 ||\n    !itemList.value\n      .slice(currentActive.value + 1, itemList.value.length)\n      .some(item => !isItemDisabled(item))\n  )\n})\nconst prevIcon = computed(() =>\n  props.horizontal\n    ? isRtl.value\n      ? icons.value.angleRight\n      : icons.value.angleLeft\n    : icons.value.angleUp,\n)\nconst nextIcon = computed(() =>\n  props.horizontal\n    ? isRtl.value\n      ? icons.value.angleLeft\n      : icons.value.angleRight\n    : icons.value.angleDown,\n)\n\nprovide(WHEEL_STATE, { increaseItem, decreaseItem })\n\nconst updateActive = debounceMinor(() => {\n  const active = Math.max(\n    itemList.value.findIndex(item => item.value === props.value),\n    0,\n  )\n\n  setActive(findEnabledActive(active))\n})\n\nconst computeSize = debounceMinor(() => {\n  nextTick(() => {\n    const horizontal = props.horizontal\n\n    itemList.value.forEach(item => {\n      if (item && item.el) {\n        targetWidth.value = Math.max(targetWidth.value, item.el.offsetWidth)\n        targetHeight.value = Math.max(targetHeight.value, item.el.offsetHeight)\n      }\n    })\n\n    const candidate = props.candidate\n    const showCount = 2 * candidate + 1\n\n    wrapperWidth.value = showCount * targetWidth.value\n    wrapperHeight.value = showCount * targetHeight.value\n\n    horizontalPadding.value = candidate * targetWidth.value\n    verticalPadding.value = candidate * targetHeight.value\n\n    items.value.forEach(item => {\n      if (horizontal) {\n        item.width = targetWidth.value\n      } else {\n        item.height = targetHeight.value\n      }\n    })\n\n    setTimeout(() => {\n      scroll.value?.refresh()\n    }, 0)\n  })\n})\n\nconst refreshScroll = debounce(() => {\n  if (scroll.value) {\n    let targetXScroll = 0\n    let targetYScroll = 0\n\n    if (props.horizontal) {\n      targetXScroll = currentActive.value * targetWidth.value\n    } else {\n      targetYScroll = currentActive.value * targetHeight.value\n    }\n\n    nextTick(() => {\n      scroll.value?.scrollTo(targetXScroll, targetYScroll)\n    })\n  }\n}, 20)\n\nwatch(\n  () => props.value,\n  () => {\n    updateActive()\n    refreshScroll()\n  },\n  { immediate: true },\n)\nwatch(() => props.horizontal, computeSize)\nwatch(() => props.candidate, computeSize)\n\ndefineExpose({\n  idFor,\n  currentActive,\n  isInit,\n  targetWidth,\n  targetHeight,\n  wrapperWidth,\n  wrapperHeight,\n  itemList,\n  wrapper,\n  scroll,\n  refreshScroll,\n  focus: (options?: FocusOptions) => wrapper.value?.focus(options),\n  blur: () => wrapper.value?.blur(),\n})\n\nfunction isItemDisabled(item: ItemState) {\n  return item.disabled || props.disabledItem(item.value, item.meta)\n}\n\nfunction setActive(active: number) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  const item = itemList.value[active]\n  const value = item?.value\n\n  refreshScroll()\n  emit('update:value', value)\n  setFieldValue(value)\n  emitEvent(props.onChange, value, item?.meta)\n  validateField()\n}\n\nfunction queryEnabledActive(active: number, step: number) {\n  step = step / Math.abs(step)\n\n  while (itemList.value[active].disabled) {\n    active += step\n\n    if (active < 0 || active >= itemList.value.length) break\n  }\n\n  return active\n}\n\nfunction findEnabledActive(active: number, sign = 1) {\n  if (itemList.value[active] && isItemDisabled(itemList.value[active])) {\n    active = queryEnabledActive(active, 1 * sign)\n\n    if (sign > 0 ? active >= itemList.value.length : active < 0) {\n      active = queryEnabledActive(boundRange(active, 0, itemList.value.length - 1), -1 * sign)\n\n      // 全禁用\n      if (sign > 0 ? active < 0 : active >= itemList.value.length) active = 0\n    }\n  }\n\n  return active\n}\n\nfunction increaseItem(item: ItemState) {\n  items.value.add(item)\n  computeSize()\n  updateActive()\n}\n\nfunction decreaseItem(item: ItemState) {\n  items.value.delete(item)\n  computeSize()\n  updateActive()\n}\n\nfunction displayInit() {\n  computeSize()\n  scroll.value?.refresh()\n\n  nextTick(() => {\n    isInit.value = true\n\n    updateActive()\n    refreshScroll()\n  })\n}\n\nfunction beforeScroll({ signX, signY }: { signX: number, signY: number }) {\n  if (props.disabled || readonly.value) return false\n\n  const sign = props.horizontal ? signX : signY\n\n  return !((sign < 0 && prevDisabled.value) || (sign > 0 && nextDisabled.value))\n}\n\nfunction handleScrollEnd({ clientX, clientY }: { clientX: number, clientY: number }) {\n  const aboutActive = props.horizontal ? clientX / targetWidth.value : clientY / targetHeight.value\n  const active = Math.round(aboutActive)\n\n  if (active !== currentActive.value) {\n    setActive(findEnabledActive(active, active > aboutActive ? 1 : -1))\n  } else {\n    refreshScroll()\n  }\n}\n\nfunction handleWheel({\n  sign,\n  clientX,\n  clientY,\n}: {\n  clientX: number,\n  clientY: number,\n  sign: 1 | -1,\n}) {\n  const active = props.horizontal\n    ? Math.round(clientX / targetWidth.value)\n    : Math.round(clientY / targetHeight.value)\n\n  setActive(findEnabledActive(active, sign))\n}\n\nfunction handlePrev() {\n  if (!prevDisabled.value) {\n    setActive(findEnabledActive(currentActive.value - 1, -1))\n\n    const item = itemList.value[currentActive.value]\n\n    emitEvent(props.onPrev, item?.value, item?.meta)\n  }\n}\n\nfunction handleNext() {\n  if (!nextDisabled.value) {\n    setActive(findEnabledActive(currentActive.value + 1, 1))\n\n    const item = itemList.value[currentActive.value]\n\n    emitEvent(props.onNext, item?.value, item?.meta)\n  }\n}\n\nfunction handleItemClick(option: WheelOption, index: number) {\n  if (props.selectable && !isItemDisabled(itemList.value[index])) {\n    setActive(index)\n  }\n\n  emitEvent(props.onItemClick, option.value, option.meta)\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    tabindex=\"0\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n  >\n    <div\n      v-if=\"props.arrow\"\n      ref=\"prevArrow\"\n      :class=\"[\n        nh.be('arrow'),\n        nh.bem('arrow', 'prev'),\n        prevDisabled ? nh.bem('arrow', 'disabled') : '',\n      ]\"\n      aria-hidden\n      @click=\"handlePrev\"\n    >\n      <Icon v-bind=\"prevIcon\"></Icon>\n    </div>\n    <div :class=\"nh.be('scroll')\" role=\"none\">\n      <Scroll\n        ref=\"scroll\"\n        inherit\n        :scroll-x=\"props.horizontal ? targetWidth * currentActive : 0\"\n        :scroll-y=\"props.horizontal ? 0 : targetHeight * currentActive\"\n        :width=\"props.horizontal ? wrapperWidth : '100%'\"\n        :height=\"props.horizontal ? '100%' : wrapperHeight\"\n        :pointer=\"props.pointer\"\n        :mode=\"props.horizontal ? 'horizontal' : 'vertical'\"\n        :delta-x=\"targetWidth\"\n        :delta-y=\"targetHeight\"\n        :on-before-scroll=\"beforeScroll\"\n        :no-transition=\"props.noTransition\"\n        @wheel=\"handleWheel\"\n        @scroll-end=\"handleScrollEnd\"\n      >\n        <ul ref=\"list\" :class=\"nh.be('list')\" :style=\"listStyle\">\n          <template v-if=\"isInit\">\n            <WheelItem\n              v-for=\"(option, index) in normalizedOptions\"\n              :key=\"index\"\n              :value=\"option.value\"\n              :disabled=\"option.disabled || props.disabledItem(option.value, option)\"\n              :active=\"currentActive === index\"\n              :meta=\"option.meta\"\n              @click=\"handleItemClick(option, index)\"\n            >\n              <slot :option=\"option\" :index=\"index\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index }\">\n                  {{ option.label }}\n                </Renderer>\n              </slot>\n            </WheelItem>\n          </template>\n        </ul>\n      </Scroll>\n      <template v-if=\"props.candidate\">\n        <div :class=\"[nh.be('mask'), nh.bem('mask', 'top')]\" :style=\"maskStyle\"></div>\n        <div :class=\"[nh.be('mask'), nh.bem('mask', 'bottom')]\" :style=\"maskStyle\"></div>\n      </template>\n      <div\n        :class=\"{\n          [nh.be('border')]: true,\n          [nh.bem('border', 'active')]: props.loading,\n          [nh.bem('border', 'vertical')]: props.horizontal,\n        }\"\n        :style=\"borderStyle\"\n      ></div>\n    </div>\n    <div\n      v-if=\"props.arrow\"\n      ref=\"nextArrow\"\n      :class=\"[\n        nh.be('arrow'),\n        nh.bem('arrow', 'next'),\n        nextDisabled ? nh.bem('arrow', 'disabled') : '',\n      ]\"\n      aria-hidden\n      @click=\"handleNext\"\n    >\n      <Icon v-bind=\"nextIcon\"></Icon>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Wheel } from '@/components/wheel'\n\nimport { ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { USE_TOUCH, doubleDigits, range } from '@vexip-ui/utils'\n\nimport type { WheelExposed } from '@/components/wheel'\nimport type { PropType } from 'vue'\nimport type { DisabledTime, TimeType, TimeWheelSlots } from './symbol'\n\ndefineOptions({ name: 'TimeWheel' })\n\nconst props = defineProps({\n  noArrow: {\n    type: Boolean,\n    default: false,\n  },\n  hour: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 23,\n  },\n  minute: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 59,\n  },\n  second: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 59,\n  },\n  candidate: {\n    default: 2 as 0 | 1 | 2 | 3,\n    validator: (value: number) => [0, 1, 2, 3].includes(value),\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1],\n    validator: (value: [number, number, number]) => {\n      if (value[0] && 24 % value[0] !== 0) {\n        return false\n      }\n\n      for (let i = 1; i < 3; ++i) {\n        if (value[i] && 60 % value[i] !== 0) {\n          return false\n        }\n      }\n\n      return true\n    },\n  },\n  pointer: {\n    type: Boolean,\n    default: USE_TOUCH,\n  },\n  disabledTime: {\n    type: Object as PropType<DisabledTime>,\n    default: () => ({}),\n  },\n  noTransition: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst emit = defineEmits(['change', 'toggle-col', 'update:hour', 'update:minute', 'update:second'])\n\ndefineSlots<TimeWheelSlots>()\n\nconst nh = useNameHelper('time-picker')\n\nconst currentHour = ref(props.hour)\nconst currentMinute = ref(props.minute)\nconst currentSecond = ref(props.second)\nconst hourRange = ref<number[]>([])\nconst minuteRange = ref<number[]>([])\nconst secondRange = ref<number[]>([])\n\nconst hourWheel = ref<WheelExposed>()\nconst minuteWheel = ref<WheelExposed>()\nconst secondWheel = ref<WheelExposed>()\n\nwatch(() => props.steps, updateTimeRange, { immediate: true })\nwatch(\n  () => props.hour,\n  value => {\n    currentHour.value = value\n  },\n)\nwatch(\n  () => props.minute,\n  value => {\n    currentMinute.value = value\n  },\n)\nwatch(\n  () => props.second,\n  value => {\n    currentSecond.value = value\n  },\n)\nwatch(currentHour, value => {\n  emit('update:hour', value)\n  emit('change', 'hour', value)\n})\nwatch(currentMinute, value => {\n  emit('update:minute', value)\n  emit('change', 'minute', value)\n})\nwatch(currentSecond, value => {\n  emit('update:second', value)\n  emit('change', 'second', value)\n})\n\ndefineExpose({ refreshWheel })\n\nfunction isHourDisabled(hour: number) {\n  return typeof props.disabledTime.hour === 'function' && props.disabledTime.hour(hour)\n}\n\nfunction isMinuteDisabled(minute: number) {\n  return (\n    typeof props.disabledTime.minute === 'function' &&\n    props.disabledTime.minute(currentHour.value, minute)\n  )\n}\n\nfunction isSecondDisabled(second: number) {\n  return (\n    typeof props.disabledTime.second === 'function' &&\n    props.disabledTime.second(currentHour.value, currentMinute.value, second)\n  )\n}\n\nfunction updateTimeRange() {\n  const [hourStep = 1, minuteStep = 1, secondStep = 1] = props.steps\n\n  hourRange.value = range(24 / hourStep, 0, hourStep)\n  minuteRange.value = range(60 / minuteStep, 0, minuteStep)\n  secondRange.value = range(60 / secondStep, 0, secondStep)\n}\n\nfunction handleToggleColumn(type: TimeType) {\n  emit('toggle-col', type)\n}\n\nfunction refreshWheel() {\n  ;[hourWheel.value, minuteWheel.value, secondWheel.value].forEach(wheel => {\n    wheel?.refreshScroll()\n  })\n}\n</script>\n\n<template>\n  <div :class=\"nh.be('wheel')\">\n    <Wheel\n      ref=\"hourWheel\"\n      v-model:value=\"currentHour\"\n      inherit\n      :class=\"nh.be('hour-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"hourRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('hour')\"\n      @touchstart=\"handleToggleColumn('hour')\"\n      @keydown.stop\n      @item-click=\"currentHour = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('hour'),\n            isHourDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"hour\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n    <Wheel\n      ref=\"minuteWheel\"\n      v-model:value=\"currentMinute\"\n      inherit\n      :class=\"nh.be('minute-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"minuteRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('minute')\"\n      @touchstart=\"handleToggleColumn('minute')\"\n      @keydown.stop\n      @item-click=\"currentMinute = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('minute'),\n            isMinuteDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"minute\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n    <Wheel\n      ref=\"secondWheel\"\n      v-model:value=\"currentSecond\"\n      inherit\n      :class=\"nh.be('second-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"secondRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('second')\"\n      @touchstart=\"handleToggleColumn('second')\"\n      @keydown.stop\n      @item-click=\"currentSecond = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('second'),\n            isSecondDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"second\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { CalendarPanel } from '@/components/calendar-panel'\nimport { Icon } from '@/components/icon'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, onMounted, reactive, ref, watch } from 'vue'\n\nimport TimeWheel from './time-wheel.vue'\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { callIfFunc, range as rangeNumbers, toDate } from '@vexip-ui/utils'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { datePickerTypes } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { MonthIndex } from '@/components/calendar'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type {\n  DatePanelSlots,\n  DatePickerType,\n  DateShortcut,\n  DateShortcutsPlacement,\n  DateTimeType,\n  DateType,\n  DisabledTime,\n  TimeType,\n} from './symbol'\n\ndefineOptions({ name: 'DatePanel' })\n\nconst props = defineProps({\n  type: {\n    default: 'date' as DatePickerType,\n    validator: (value: DatePickerType) => datePickerTypes.includes(value),\n  },\n  enabled: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({}),\n  },\n  startValue: {\n    type: Object as PropType<Record<DateTimeType, number>>,\n    default: null,\n  },\n  endValue: {\n    type: Object as PropType<Record<DateTimeType, number>>,\n    default: null,\n  },\n  shortcuts: {\n    type: Array as PropType<DateShortcut[]>,\n    default: () => [],\n  },\n  confirmText: {\n    type: String,\n    default: null,\n  },\n  cancelText: {\n    type: String,\n    default: null,\n  },\n  today: {\n    type: [Number, String, Date] as PropType<Dateable>,\n    default: () => new Date(),\n  },\n  disabledDate: {\n    type: Function as PropType<(date: Date) => boolean>,\n    default: () => false,\n  },\n  noAction: {\n    type: Boolean,\n    default: false,\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1],\n  },\n  range: {\n    type: Boolean,\n    default: false,\n  },\n  startActivated: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({}),\n  },\n  endActivated: {\n    type: Object as PropType<Record<DateTimeType, boolean>>,\n    default: () => ({}),\n  },\n  min: {\n    type: [Number, String, Date] as PropType<Dateable>,\n    default: null,\n  },\n  max: {\n    type: [Number, String, Date] as PropType<Dateable>,\n    default: null,\n  },\n  disabledTime: {\n    type: Object as PropType<DisabledTime>,\n    default: () => ({}),\n  },\n  hasError: {\n    type: Boolean,\n    default: false,\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\n    default: () => ({}),\n  },\n  selectingType: {\n    type: String as PropType<'start' | 'end'>,\n    default: 'start',\n  },\n  weekStart: {\n    type: Number,\n    default: null,\n  },\n  staticWheel: {\n    type: Boolean,\n    default: false,\n  },\n  shortcutsPlacement: {\n    type: String as PropType<DateShortcutsPlacement>,\n    default: 'left',\n  },\n  labeledBy: {\n    type: String,\n    default: undefined,\n  },\n})\n\nconst emit = defineEmits([\n  'click',\n  'shortcut',\n  'toggle-col',\n  'change',\n  'cancel',\n  'confirm',\n  'hover',\n  'type-change',\n  'time-change',\n])\n\ndefineSlots<DatePanelSlots>()\n\nconst nh = useNameHelper('date-picker')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst today = toDate(props.today)\nconst monthRange = rangeNumbers(12, 1, 1)\n\nconst currentPanel = ref<DateType>(\n  props.type === 'year' ? 'year' : props.type === 'month' ? 'month' : 'date',\n)\nconst calendarYear = ref(today.getFullYear())\nconst calendarMonth = ref(today.getMonth() + 1) // 1 ~ 12\nconst hoveredYear = ref(0) // 0 is no hover (falsy)\nconst hoveredMonth = ref(0) // 0 is no hover (falsy)\nconst yearRange = ref<number[]>([])\n\nconst shortcutsRect = reactive({ width: 0, height: 0 })\n\nconst panelStyle = computed(() => {\n  const { width, height } = shortcutsRect\n\n  switch (props.shortcutsPlacement) {\n    case 'top':\n      return { paddingTop: `${height}px` }\n    case 'right':\n      return { paddingRight: `${width}px` }\n    case 'bottom':\n      return { paddingBottom: `${height}px` }\n    default:\n      return { paddingLeft: `${width}px` }\n  }\n})\nconst startActivated = computed(() => {\n  const activated = props.startActivated\n\n  return activated.year && activated.month && activated.date\n})\nconst endActivated = computed(() => {\n  const activated = props.endActivated\n\n  return activated.year && activated.month && activated.date\n})\nconst isDatetime = computed(() => {\n  return props.type === 'datetime'\n})\nconst calendarValue = computed(() => {\n  return props.range\n    ? startActivated.value || endActivated.value\n      ? [getStringValue('start'), getStringValue('end')]\n      : ['', '']\n    : startActivated.value\n      ? getStringValue('start')\n      : ''\n})\nconst weekDays = computed(() => {\n  return [\n    props.locale.week7,\n    props.locale.week1,\n    props.locale.week2,\n    props.locale.week3,\n    props.locale.week4,\n    props.locale.week5,\n    props.locale.week6,\n  ].map(week => week.slice(0, 2))\n})\n\nwatch(\n  calendarYear,\n  value => {\n    yearRange.value = rangeNumbers(12, Math.floor(value / 10) * 10, 1)\n  },\n  { immediate: true },\n)\n\nonMounted(() => {\n  refreshCalendar('start')\n})\n\ndefineExpose({ refreshCalendar })\n\nfunction getStringValue(type: 'start' | 'end') {\n  const value = type === 'start' ? props.startValue : props.endValue\n\n  return value ? `${value.year}-${value.month}-${value.date}` : ''\n}\n\nfunction getMonthLabel(index: number) {\n  return props.locale[`month${index as MonthIndex}`]\n}\n\nfunction togglePanel(type: DateType) {\n  currentPanel.value = type\n}\n\nfunction adjustCalendar(type: 'year' | 'month', amount: number) {\n  if (type === 'year') {\n    calendarYear.value += amount\n  } else {\n    // 月份存在进位\n    calendarMonth.value += amount\n\n    const date = new Date(calendarYear.value, calendarMonth.value - 1, 1)\n\n    calendarYear.value = date.getFullYear()\n    calendarMonth.value = date.getMonth() + 1\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  emit('click', event)\n}\n\nfunction handleShortcut(index: number) {\n  const { value, name } = props.shortcuts[index]\n\n  emit('shortcut', name, callIfFunc(value))\n}\n\nfunction handleSelectDate(date: Date) {\n  emitChange([date.getFullYear(), date.getMonth() + 1, date.getDate()])\n}\n\nfunction handleSelectYear(year: number) {\n  if (isDisabledYear(year)) return\n\n  calendarYear.value = year\n\n  if (props.type !== 'year') {\n    togglePanel('month')\n  } else {\n    emitChange([year, 1, 1])\n  }\n}\n\nfunction handleSelectMonth(month: number) {\n  if (isDisabledMonth(month)) return\n\n  calendarMonth.value = month\n\n  if (props.type !== 'month') {\n    togglePanel('date')\n  } else {\n    emitChange([calendarYear.value, month, 1])\n  }\n}\n\nfunction emitChange(values: number[]) {\n  emit('change', values)\n}\n\nfunction handleStartTimeChange(type: TimeType, time: number) {\n  emit('time-change', 'start', type, time)\n}\n\nfunction handleEndTimeChange(type: TimeType, time: number) {\n  emit('time-change', 'end', type, time)\n}\n\nfunction handleDoublePrevClick() {\n  if (currentPanel.value === 'year') {\n    yearRange.value = rangeNumbers(12, yearRange.value[0] - 10, 1)\n  } else {\n    adjustCalendar('year', -1)\n  }\n}\nfunction handleDoubleNextClick() {\n  if (currentPanel.value === 'year') {\n    yearRange.value = rangeNumbers(12, yearRange.value[10], 1)\n  } else {\n    adjustCalendar('year', 1)\n  }\n}\n\nfunction handleCancel() {\n  emit('cancel')\n}\n\nfunction handleConfirm() {\n  emit('confirm')\n}\n\nfunction handleHoverDate(date: Date | null) {\n  emit('hover', date)\n}\n\nfunction isSelectedYear(year: number) {\n  if (!year) return false\n\n  return (\n    (props.startActivated.year && props.startValue.year === year) ||\n    (props.endActivated.year && props.endValue.year === year)\n  )\n}\n\nfunction isSelectedMonth(month: number) {\n  if (!month) return false\n\n  const monthYear = 100 * calendarYear.value + month\n\n  return (\n    (props.startActivated.month &&\n      100 * props.startValue.year + props.startValue.month === monthYear) ||\n    (props.endActivated.month && 100 * props.endValue.year + props.endValue.month === monthYear)\n  )\n}\n\nfunction isDisabledYear(year: number) {\n  if (props.type === 'year') {\n    return props.disabledDate(new Date(year, 0))\n  }\n\n  for (let i = 1; i <= 12; ++i) {\n    if (!isDisabledMonth(i, year)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction isDisabledMonth(month: number, year = calendarYear.value) {\n  if (props.type === 'year') return false\n\n  if (props.type === 'month') {\n    return props.disabledDate(new Date(year, month - 1))\n  }\n\n  const current = new Date(year, month - 1)\n  const end = new Date(year, month, 0)\n  const dayCount = end.getDate()\n\n  for (let i = 1; i <= dayCount; ++i) {\n    current.setDate(i)\n\n    if (!props.disabledDate(current)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction handleYearHover(year: number) {\n  hoveredYear.value = isDisabledYear(year) ? 0 : year\n}\n\nfunction handleMonthHover(month: number) {\n  hoveredMonth.value = isDisabledMonth(month) ? 0 : month\n}\n\nfunction isYearInRange(year: number) {\n  if (\n    !props.range ||\n    (!hoveredYear.value && !props.startActivated.year && !props.endActivated.year)\n  ) {\n    return false\n  }\n\n  // if (\n  //   (props.valueType === 'start' && !props.endActivated.year) ||\n  //   (props.valueType === 'end' && !props.startActivated.year)\n  // ) {\n  //   return false\n  // }\n\n  const startYear = props.startValue.year\n  const endYear = props.endValue.year\n\n  let min: number\n  let max: number\n\n  if (!hoveredYear.value && props.startActivated.year && props.endActivated.year) {\n    min = Math.min(startYear, endYear)\n    max = Math.max(startYear, endYear)\n  } else if (hoveredYear.value) {\n    if (!props.startActivated.year && !props.endActivated.year) return false\n\n    if (!props.startActivated.year || !props.endActivated.year) {\n      const selectedYear = props.startActivated.year ? startYear : endYear\n\n      min = Math.min(hoveredYear.value, selectedYear)\n      max = Math.max(hoveredYear.value, selectedYear)\n    } else {\n      const minYear = Math.min(startYear, endYear)\n      const maxYear = Math.max(startYear, endYear)\n\n      min = Math.min(hoveredYear.value, minYear)\n      max = Math.max(hoveredYear.value, maxYear)\n    }\n  } else {\n    return false\n  }\n\n  return year >= min && year <= max\n}\n\nfunction isMonthInRange(month: number) {\n  if (\n    !props.range ||\n    (!hoveredMonth.value && !props.startActivated.month && !props.endActivated.month)\n  ) {\n    return false\n  }\n\n  // if (\n  //   (props.valueType === 'start' && !props.endActivated.month) ||\n  //   (props.valueType === 'end' && !props.startActivated.month)\n  // ) {\n  //   return false\n  // }\n\n  const startMonthYear = 100 * props.startValue.year + props.startValue.month\n  const endMonthYear = 100 * props.endValue.year + props.endValue.month\n\n  let min: number\n  let max: number\n\n  if (!hoveredMonth.value && props.startActivated.month && props.endActivated.month) {\n    min = Math.min(startMonthYear, endMonthYear)\n    max = Math.max(startMonthYear, endMonthYear)\n  } else if (hoveredMonth.value) {\n    if (!props.startActivated.month && !props.endActivated.month) return false\n\n    const hoveredMonthYear = 100 * calendarYear.value + hoveredMonth.value\n\n    if (!props.startActivated.month || !props.endActivated.month) {\n      const selectedMonthYear = props.startActivated.month ? startMonthYear : endMonthYear\n\n      min = Math.min(hoveredMonthYear, selectedMonthYear)\n      max = Math.max(hoveredMonthYear, selectedMonthYear)\n    } else {\n      const minMonthYear = Math.min(startMonthYear, endMonthYear)\n      const maxMonthYear = Math.max(startMonthYear, endMonthYear)\n\n      min = Math.min(hoveredMonthYear, minMonthYear)\n      max = Math.max(hoveredMonthYear, maxMonthYear)\n    }\n  } else {\n    return false\n  }\n\n  const monthYear = 100 * calendarYear.value + month\n\n  return monthYear >= min && monthYear <= max\n}\n\n// 重新计算日历页面\nfunction refreshCalendar(valueType: 'start' | 'end') {\n  const today = toDate(props.today)\n\n  if (valueType === 'start') {\n    calendarYear.value = props.startActivated.year ? props.startValue.year : today.getFullYear()\n    calendarMonth.value = props.startActivated.month ? props.startValue.month : today.getMonth() + 1\n  } else {\n    calendarYear.value = props.endActivated.year ? props.endValue.year : today.getFullYear()\n    calendarMonth.value = props.endActivated.month ? props.endValue.month : today.getMonth() + 1\n  }\n}\n\nfunction handleShortcutsResize(entry: ResizeObserverEntry) {\n  const box = entry.borderBoxSize?.[0]\n\n  if (box) {\n    shortcutsRect.width = box.inlineSize\n    shortcutsRect.height = box.blockSize\n  } else {\n    shortcutsRect.width = entry.contentRect.width\n    shortcutsRect.height = entry.contentRect.height\n  }\n}\n</script>\n\n<template>\n  <div\n    :class=\"{\n      [nh.be('panel')]: true,\n      [nh.bem('panel', 'vertical')]:\n        shortcuts.length && (shortcutsPlacement === 'top' || shortcutsPlacement === 'bottom')\n    }\"\n    :aria-labelledby=\"labeledBy\"\n    :style=\"panelStyle\"\n    @click=\"handleClick\"\n  >\n    <ResizeObserver v-if=\"shortcuts.length\" :on-resize=\"handleShortcutsResize\">\n      <div\n        :class=\"[\n          nh.be('list'),\n          nh.bem('list', 'sub'),\n          nh.be('shortcuts'),\n          nh.bem('shortcuts', shortcutsPlacement)\n        ]\"\n      >\n        <div\n          v-for=\"(item, index) in shortcuts\"\n          :key=\"index\"\n          :class=\"nh.be('shortcut')\"\n          :title=\"item.name\"\n          @click=\"handleShortcut(index)\"\n        >\n          {{ item.name }}\n        </div>\n      </div>\n    </ResizeObserver>\n    <div :class=\"nh.be('list')\" role=\"application\">\n      <div :class=\"nh.be('panel-body')\">\n        <div :class=\"nh.be('date-panel')\">\n          <div :class=\"nh.be('header')\">\n            <div :class=\"[nh.be('arrow'), nh.be('prev-year')]\" @click=\"handleDoublePrevClick\">\n              <Icon v-bind=\"isRtl ? icons.anglesRight : icons.anglesLeft\"></Icon>\n            </div>\n            <div\n              v-show=\"currentPanel === 'date'\"\n              :class=\"[nh.be('arrow'), nh.be('prev-month')]\"\n              @click=\"adjustCalendar('month', -1)\"\n            >\n              <Icon v-bind=\"isRtl ? icons.angleRight : icons.angleLeft\"></Icon>\n            </div>\n            <div :class=\"nh.be('year-month')\">\n              <slot\n                name=\"title\"\n                :panel=\"currentPanel\"\n                :year-start=\"yearRange[0]\"\n                :year=\"calendarYear\"\n                :month=\"calendarMonth\"\n                :toggle-panel=\"togglePanel\"\n              >\n                <div key=\"year\" :class=\"nh.be('year')\" @click.stop=\"togglePanel('year')\">\n                  <template v-if=\"currentPanel === 'year'\">\n                    {{ `${yearRange[0]}${locale.year} - ${yearRange[9]}${locale.year}` }}\n                  </template>\n                  <template v-else>\n                    {{ `${calendarYear}${locale.year}` }}\n                  </template>\n                </div>\n                <div\n                  v-show=\"currentPanel === 'date'\"\n                  :class=\"nh.be('month')\"\n                  @click.stop=\"togglePanel('month')\"\n                >\n                  {{ getMonthLabel(calendarMonth) }}\n                </div>\n              </slot>\n            </div>\n            <div\n              v-show=\"currentPanel === 'date'\"\n              :class=\"[nh.be('arrow'), nh.be('next-month')]\"\n              @click=\"adjustCalendar('month', 1)\"\n            >\n              <Icon v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\n            </div>\n            <div :class=\"[nh.be('arrow'), nh.be('next-year')]\" @click=\"handleDoubleNextClick\">\n              <Icon v-bind=\"isRtl ? icons.anglesLeft : icons.anglesRight\"></Icon>\n            </div>\n          </div>\n          <div :class=\"nh.be('calendar')\">\n            <div\n              v-if=\"currentPanel === 'year'\"\n              :class=\"nh.be('year-panel')\"\n              @mouseleave=\"hoveredYear = 0\"\n            >\n              <div\n                v-for=\"(item, index) in yearRange\"\n                :key=\"index\"\n                :class=\"{\n                  [nh.be('year-item')]: true,\n                  [nh.bem('year-item', 'selected')]: isSelectedYear(item),\n                  [nh.bem('year-item', 'next')]: index > 9,\n                  [nh.bem('year-item', 'disabled')]: isDisabledYear(item),\n                  [nh.bem('year-item', 'in-range')]: isYearInRange(item)\n                }\"\n                @click.stop=\"handleSelectYear(item)\"\n                @mouseenter=\"handleYearHover(item)\"\n              >\n                <div :class=\"nh.be('year-label')\">\n                  <slot\n                    name=\"year\"\n                    :year=\"item\"\n                    :selected=\"isSelectedYear(item)\"\n                    :is-next=\"index > 9\"\n                    :disabled=\"isDisabledYear(item)\"\n                    :in-range=\"isYearInRange(item)\"\n                  >\n                    <div :class=\"nh.be('year-label-inner')\">\n                      {{ item }}\n                    </div>\n                  </slot>\n                </div>\n              </div>\n            </div>\n            <div\n              v-else-if=\"currentPanel === 'month'\"\n              :class=\"nh.be('month-panel')\"\n              @mouseleave=\"hoveredMonth = 0\"\n            >\n              <div\n                v-for=\"index in monthRange\"\n                :key=\"index\"\n                :class=\"{\n                  [nh.be('month-item')]: true,\n                  [nh.bem('month-item', 'selected')]: isSelectedMonth(index),\n                  [nh.bem('month-item', 'disabled')]: isDisabledMonth(index),\n                  [nh.bem('month-item', 'in-range')]: isMonthInRange(index)\n                }\"\n                @click.stop=\"handleSelectMonth(index)\"\n                @mouseenter=\"handleMonthHover(index)\"\n              >\n                <div :class=\"nh.be('month-label')\">\n                  <slot\n                    name=\"month\"\n                    :year=\"calendarYear\"\n                    :month=\"index\"\n                    :selected=\"isSelectedMonth(index)\"\n                    :disabled=\"isDisabledMonth(index)\"\n                    :in-range=\"isMonthInRange(index)\"\n                  >\n                    <div :class=\"nh.be('month-label-inner')\">\n                      {{ getMonthLabel(index) }}\n                    </div>\n                  </slot>\n                </div>\n              </div>\n            </div>\n            <CalendarPanel\n              v-else\n              inherit\n              :value=\"calendarValue\"\n              :year=\"calendarYear\"\n              :month=\"calendarMonth\"\n              :value-type=\"selectingType\"\n              :disabled-date=\"disabledDate\"\n              :range=\"range\"\n              :min=\"min\"\n              :max=\"max\"\n              :week-start=\"weekStart\"\n              :week-days=\"weekDays\"\n              @select=\"handleSelectDate\"\n              @hover=\"handleHoverDate\"\n            >\n              <template v-if=\"$slots.week\" #week=\"weekParams\">\n                <slot name=\"week\" v-bind=\"weekParams\"></slot>\n              </template>\n              <template v-if=\"$slots.date\" #itemContent=\"itemParams\">\n                <slot name=\"date\" v-bind=\"itemParams\"></slot>\n              </template>\n            </CalendarPanel>\n          </div>\n        </div>\n        <div v-if=\"isDatetime\" :class=\"nh.be('time-panel')\">\n          <div :class=\"[nh.be('header'), nh.bem('header', 'time')]\">\n            <template v-if=\"range\">\n              <div :class=\"nh.be('title')\">\n                {{ locale.startTime }}\n              </div>\n              <div :class=\"nh.be('title')\">\n                {{ locale.endTime }}\n              </div>\n            </template>\n          </div>\n          <div :class=\"nh.be('wheel')\">\n            <TimeWheel\n              :hour=\"startValue.hour\"\n              :minute=\"startValue.minute\"\n              :second=\"startValue.second\"\n              :candidate=\"3\"\n              :steps=\"steps\"\n              :disabled-time=\"disabledTime\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleStartTimeChange\"\n            ></TimeWheel>\n            <TimeWheel\n              v-if=\"range\"\n              :hour=\"endValue.hour\"\n              :minute=\"endValue.minute\"\n              :second=\"endValue.second\"\n              :candidate=\"3\"\n              :steps=\"steps\"\n              :disabled-time=\"disabledTime\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleEndTimeChange\"\n            ></TimeWheel>\n          </div>\n        </div>\n      </div>\n      <div v-if=\"!noAction\" :class=\"nh.be('action')\">\n        <Button\n          inherit\n          text\n          size=\"small\"\n          @click=\"handleCancel\"\n        >\n          {{ cancelText || locale.cancel }}\n        </Button>\n        <Button\n          inherit\n          type=\"primary\"\n          size=\"small\"\n          :disabled=\"hasError\"\n          @click=\"handleConfirm\"\n        >\n          {{ confirmText || locale.confirm }}\n        </Button>\n      </div>\n    </div>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  sizeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener, LocaleConfig } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type {\n  DatePickerChangeEvent,\n  DatePickerFormatFn,\n  DatePickerSlots,\n  DatePickerType,\n  DateShortcut,\n  DateShortcutsPlacement,\n  DateTimeType,\n  TimePickerChangeEvent,\n  TimePickerSlots,\n  TimeShortcut,\n  TimeShortcutsPlacement,\n  TimeType,\n} from './symbol'\n\nexport interface DatePickerShortcutEvent {\n  (name: string, value: Dateable | Dateable[]): void,\n  (name: string, value: Dateable): void,\n  (name: string, value: Dateable[]): void,\n}\n\nexport const datePickerProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: Object as PropType<Partial<LocaleConfig['calendar'] & LocaleConfig['datePicker']>>,\n  type: String as PropType<DatePickerType>,\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  value: [Number, String, Date, Array] as PropType<Dateable | Dateable[]>,\n  format: String,\n  valueFormat: [String, Array, Function] as PropType<string | string[] | DatePickerFormatFn>,\n  filler: String,\n  clearable: booleanProp,\n  noAction: booleanProp,\n  labels: Object as PropType<Partial<Record<DateTimeType, string>>>,\n  dateSeparator: String,\n  timeSeparator: String,\n  shortcuts: Array as PropType<DateShortcut[]>,\n  disabledDate: Function as PropType<(date: Date) => boolean>,\n  steps: Array as PropType<number[]>,\n  ctrlSteps: Array as PropType<number[]>,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  disabled: booleanProp,\n  transitionName: String,\n  confirmText: String,\n  cancelText: String,\n  today: [Number, String, Date] as PropType<Dateable>,\n  range: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  min: [Number, String, Date] as PropType<Dateable>,\n  max: [Number, String, Date] as PropType<Dateable>,\n  outsideClose: booleanProp,\n  outsideCancel: booleanProp,\n  placeholder: [String, Array] as PropType<string | string[]>,\n  unitReadonly: booleanProp,\n  weekStart: Number,\n  popperAlive: booleanProp,\n  shortcutsPlacement: String as PropType<DateShortcutsPlacement>,\n  slots: Object as PropType<DatePickerSlots>,\n  onInput: eventProp<(type: DateTimeType, value: number) => void>(),\n  onPlus: eventProp<(type: DateTimeType, value: number) => void>(),\n  onMinus: eventProp<(type: DateTimeType, value: number) => void>(),\n  onEnter: eventProp(),\n  onCancel: eventProp(),\n  onChange: eventProp<EventListener<DatePickerChangeEvent>>(),\n  onClear: eventProp(),\n  onShortcut: eventProp<DatePickerShortcutEvent>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onFocus: eventProp(),\n  onBlur: eventProp(),\n  onChangeCol: eventProp<(type: DateTimeType | null, inputType: 'start' | 'end') => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n})\n\nexport type DatePickerProps = ExtractPropTypes<typeof datePickerProps>\nexport type DatePickerCProps = ConfigurableProps<DatePickerProps>\n\nexport interface TimePickerShortcutEvent {\n  (name: string, value: string | string[]): void,\n  (name: string, value: string): void,\n  (name: string, value: string[]): void,\n}\n\nexport const timePickerProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  locale: localeProp('timePicker'),\n  visible: booleanProp,\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  format: String,\n  separator: String,\n  value: [String, Array] as PropType<string | string[]>,\n  filler: String,\n  clearable: booleanProp,\n  noAction: booleanProp,\n  noArrow: booleanProp,\n  pointer: booleanProp,\n  candidate: Number as PropType<0 | 1 | 2 | 3>,\n  steps: Array as PropType<number[]>,\n  labels: Object as PropType<Partial<Record<TimeType, string>>>,\n  shortcuts: Array as PropType<TimeShortcut[]>,\n  range: booleanProp,\n  disabled: booleanProp,\n  transitionName: String,\n  confirmText: String,\n  cancelText: String,\n  ctrlSteps: Array as PropType<number[]>,\n  prefix: iconProp,\n  prefixColor: String,\n  suffix: iconProp,\n  suffixColor: String,\n  noSuffix: booleanProp,\n  exchange: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  min: String,\n  max: String,\n  outsideClose: booleanProp,\n  outsideCancel: booleanProp,\n  unitReadonly: booleanProp,\n  popperAlive: booleanProp,\n  shortcutsPlacement: String as PropType<TimeShortcutsPlacement>,\n  placeholder: [String, Array] as PropType<string | string[]>,\n  slots: Object as PropType<TimePickerSlots>,\n  onInput: eventProp<(type: TimeType, value: number) => void>(),\n  onPlus: eventProp<(type: TimeType, value: number) => void>(),\n  onMinus: eventProp<(type: TimeType, value: number) => void>(),\n  onEnter: eventProp(),\n  onCancel: eventProp(),\n  onChange: eventProp<EventListener<TimePickerChangeEvent>>(),\n  onClear: eventProp(),\n  onShortcut: eventProp<TimePickerShortcutEvent>(),\n  onToggle: eventProp<(visible: boolean) => void>(),\n  onFocus: eventProp(),\n  onBlur: eventProp(),\n  onChangeCol: eventProp<(type: TimeType | null, inputType: 'start' | 'end') => void>(),\n  onClickOutside: eventProp(),\n  onOutsideClose: eventProp(),\n})\n\nexport type TimePickerProps = ExtractPropTypes<typeof timePickerProps>\nexport type TimePickerCProps = ConfigurableProps<TimePickerProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue'\n\nimport DateControl from './date-control.vue'\nimport DatePanel from './date-panel.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  makeSentence,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n  useWordSpace,\n} from '@vexip-ui/config'\nimport {\n  placementWhileList,\n  useClickOutside,\n  useHover,\n  usePopper,\n  useSetTimeout,\n} from '@vexip-ui/hooks'\nimport {\n  boundRange,\n  differenceDays,\n  doubleDigits,\n  format,\n  getTime,\n  isLeapYear,\n  isObject,\n  mergeObjects,\n  startOfMonth,\n  toAttrValue,\n  toDate,\n  toFalse,\n} from '@vexip-ui/utils'\nimport { datePickerProps } from './props'\nimport { useColumn, useTimeBound } from './helper'\nimport { datePickerTypes, invalidDate } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Dateable } from '@vexip-ui/utils'\nimport type {\n  DatePickerChangeEvent,\n  DatePickerFormatFn,\n  DatePickerSlots,\n  DateTimeType,\n  DateType,\n  TimeType,\n} from './symbol'\n\ndefineOptions({ name: 'DatePicker' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<Dateable | Dateable[]>(() => reference.value?.focus())\n\nconst nh = useNameHelper('date-picker')\n\nconst _props = defineProps(datePickerProps)\nconst props = useProps('datePicker', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  type: {\n    default: 'date',\n    validator: value => datePickerTypes.includes(value),\n  },\n  visible: false,\n  placement: {\n    default: 'bottom-start',\n    validator: value => placementWhileList.includes(value),\n  },\n  transfer: false,\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  format: 'yMd Hms',\n  valueFormat: null,\n  filler: {\n    default: '-',\n    validator: value => value.length === 1,\n  },\n  clearable: false,\n  noAction: false,\n  labels: () => ({}),\n  dateSeparator: '/',\n  timeSeparator: ':',\n  shortcuts: () => [],\n  disabledDate: {\n    default: toFalse,\n    isFunc: true,\n  },\n  steps: () => [1, 1, 1],\n  ctrlSteps: () => [5, 5, 5],\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  confirmText: null,\n  cancelText: null,\n  today: {\n    default: () => new Date(),\n    validator: value => !Number.isNaN(new Date(value)),\n  },\n  range: null,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  min: null,\n  max: null,\n  outsideClose: true,\n  outsideCancel: false,\n  placeholder: null,\n  unitReadonly: false,\n  weekStart: null,\n  popperAlive: null,\n  shortcutsPlacement: 'left',\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value', 'update:formatted-value', 'update:visible'])\n\nconst slots = defineSlots<DatePickerSlots>()\n\nconst calendarLocale = useLocale('calendar')\nconst datePickerLocale = useLocale('datePicker')\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst currentVisible = ref(props.visible)\nconst focused = ref(false)\nconst startState = createDateState()\nconst endState = createDateState()\nconst currentState = ref<'start' | 'end'>('start')\nconst lastValue = ref('')\nconst firstSelected = ref<number[] | undefined>()\nconst hoveredDate = ref(new Date())\nconst staticWheel = ref(false)\nconst dateUnitOrder = ref<DateType[]>([])\n\nconst { timer } = useSetTimeout()\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n})\nconst { isHover } = useHover(reference)\n\nconst startInput = ref<InstanceType<typeof DateControl>>()\nconst endInput = ref<InstanceType<typeof DateControl>>()\nconst datePanel = ref<InstanceType<typeof DatePanel>>()\n\nconst mergedLocale = computed(() => {\n  const locale = mergeObjects(calendarLocale.value, datePickerLocale.value, true)\n\n  return isObject(props.locale) ? mergeObjects(locale, props.locale) : locale\n})\nconst startPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder\n  }\n\n  const { select, start, [props.type]: type } = mergedLocale.value.placeholder\n\n  return makeSentence(props.range ? `${start} ${type}` : `${select} ${type}`, wordSpace.value)\n})\nconst endPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder)\n      ? props.placeholder[1] || props.placeholder[0]\n      : props.placeholder\n  }\n\n  const { end, [props.type]: type } = mergedLocale.value.placeholder\n\n  return makeSentence(`${end} ${type}`, wordSpace.value)\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('input-vars'),\n    nh.bs('vars'),\n    nh.bm(props.type),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('no-hour')]: !startState.enabled.hour,\n      [nh.bm('no-minute')]: !startState.enabled.minute,\n      [nh.bm('no-second')]: !startState.enabled.second,\n      [nh.bm('visible')]: currentVisible.value,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('is-range')]: props.range,\n    },\n  ]\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--focused`]: focused.value,\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n  }\n})\nconst hasPrefix = computed(() => {\n  return !!(slots.prefix || props.prefix)\n})\nconst currentValue = computed(() => {\n  const values = [startState, endState].map(state => {\n    const values = Object.values(state.dateValue).map(doubleDigits)\n\n    return `${values.slice(0, 3).join('-')} ${values.slice(3).join(':')}`\n  })\n\n  return props.range ? values : values[0]\n})\nconst hoveredLarge = computed(() => {\n  if (!firstSelected.value) return false\n\n  const [year, month, date] = firstSelected.value\n  const firstTime = new Date(`${year}-${month}-${date}`).getTime()\n  const hoverTime = hoveredDate.value.getTime()\n\n  return firstTime < hoverTime\n})\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !!lastValue.value\n})\nconst min = computed(() => {\n  if (props.min) {\n    const date = rawValueToDate(props.min, invalidDate)\n\n    if (Number.isNaN(+date)) return -Infinity\n\n    date.setHours(0, 0, 0, 0)\n\n    return date.getTime()\n  }\n\n  return -Infinity\n})\nconst max = computed(() => {\n  if (props.max) {\n    let date = rawValueToDate(props.max, invalidDate)\n\n    if (Number.isNaN(+date)) return Infinity\n\n    if (props.type !== 'datetime') {\n      date.setHours(23, 59, 59, 999)\n\n      if (props.type === 'year') {\n        date.setMonth(11)\n        date.setDate(31)\n      } else if (props.type === 'month') {\n        date.setMonth(date.getMonth() + 1)\n        date = startOfMonth(date)\n        date.setDate(date.getDate() - 1)\n      }\n    }\n\n    return date.getTime()\n  }\n\n  return Infinity\n})\nconst reversed = computed(() => {\n  if (Number.isNaN(min.value) || Number.isNaN(max.value)) {\n    return false\n  }\n\n  return min.value > max.value\n})\nconst startMinTime = computed(() => {\n  if (props.type === 'datetime' && props.min && !differenceDays(props.min, startState.getDate())) {\n    return getTime(props.min)\n  }\n\n  return ''\n})\nconst startMaxTime = computed(() => {\n  if (props.type === 'datetime' && props.max && !differenceDays(props.max, startState.getDate())) {\n    return getTime(props.max)\n  }\n\n  return ''\n})\nconst endMinTime = computed(() => {\n  if (\n    props.type === 'datetime' &&\n    props.range &&\n    props.min &&\n    !differenceDays(props.min, startState.getDate())\n  ) {\n    return getTime(props.min)\n  }\n\n  return ''\n})\nconst endMaxTime = computed(() => {\n  if (\n    props.type === 'datetime' &&\n    props.range &&\n    props.max &&\n    !differenceDays(props.max, startState.getDate())\n  ) {\n    return getTime(props.max)\n  }\n\n  return ''\n})\nconst startReversed = computed(() => {\n  if (!props.range) return false\n\n  const startValue = startState.dateValue\n  const endValue = endState.dateValue\n\n  let types: DateTimeType[]\n\n  if (props.type === 'year') {\n    types = ['year']\n  } else if (props.type === 'month') {\n    types = ['year', 'month']\n  } else if (props.type === 'date') {\n    types = ['year', 'month', 'date']\n  } else {\n    types = ['year', 'month', 'date', 'hour', 'minute', 'second']\n  }\n\n  for (const type of types) {\n    if (startValue[type] < endValue[type]) return false\n    if (startValue[type] > endValue[type]) return true\n  }\n\n  return false\n})\n\nconst startTimeBound = useTimeBound(startMinTime, startMaxTime)\nconst endTimeBound = useTimeBound(endMinTime, endMaxTime)\n\nconst isTimeDisabled = computed(() => {\n  return currentState.value === 'start'\n    ? startTimeBound.isTimeDisabled\n    : endTimeBound.isTimeDisabled\n})\nconst startError = computed(() => {\n  const { hour, minute, second } = startState.dateValue\n  const { isTimeDisabled } = startTimeBound\n\n  return (\n    startReversed.value ||\n    isDateDisabled(startState.getDate()) ||\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\nconst endError = computed(() => {\n  if (!props.range) return false\n\n  const { hour, minute, second } = endState.dateValue\n  const { isTimeDisabled } = endTimeBound\n\n  return (\n    startReversed.value ||\n    isDateDisabled(endState.getDate()) ||\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\nconst noActionMode = computed(() => props.type !== 'datetime' && props.noAction)\n\nwatch(() => props.type, parseFormat)\nwatch(\n  () => props.value,\n  value => {\n    parseValue(value)\n\n    lastValue.value = (Array.isArray(value) ? value[0] || value[1] : value) ? getStringValue() : ''\n  },\n  { immediate: true },\n)\nwatch(\n  () => props.type,\n  value => {\n    const hasMonth = value !== 'year'\n    const hasDate = hasMonth && value !== 'month'\n\n    startState.enabled.year = true\n    endState.enabled.year = true\n    startState.enabled.month = hasMonth\n    endState.enabled.month = hasMonth\n    startState.enabled.date = hasDate\n    endState.enabled.date = hasDate\n  },\n  { immediate: true },\n)\nwatch(() => props.format, parseFormat, { immediate: true })\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  },\n)\nwatch(currentVisible, value => {\n  if (value) {\n    updatePopper()\n  }\n})\nwatch(focused, value => {\n  if (value) {\n    emitEvent(props.onFocus)\n  } else {\n    emitEvent(props.onBlur)\n  }\n})\nwatch(currentState, value => {\n  if (!props.unitReadonly && currentVisible.value) {\n    emitEvent(props.onChangeCol, getCurrentState().column, value)\n  }\n})\nwatch(\n  () => startState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'start') {\n      emitEvent(props.onChangeCol, value, 'start')\n    }\n  },\n)\nwatch(\n  () => endState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'end') {\n      emitEvent(props.onChangeCol, value, 'end')\n    }\n  },\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n      handleBlur()\n    }\n  },\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\n\ndefineExpose({\n  idFor,\n  currentVisible,\n  focused,\n  isHover,\n  startState,\n  endState,\n  currentState,\n  startError,\n  endError,\n  wrapper,\n  reference,\n  popper,\n  start: startInput,\n  end: endInput,\n  panel: datePanel,\n  updatePopper,\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\n  blur: () => reference.value?.blur(),\n})\n\nfunction createDateState() {\n  // const noFiller = props.noFiller\n  const { currentColumn, enabled, resetColumn, enterColumn } = useColumn([\n    'year',\n    'month',\n    'date',\n    'hour',\n    'minute',\n    'second',\n  ] as DateTimeType[])\n\n  const dateValue = reactive({\n    year: 1970,\n    month: 1, // 1 ~ 12\n    date: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n  })\n  const activated = reactive({\n    year: false,\n    month: false,\n    date: false,\n    hour: false,\n    minute: false,\n    second: false,\n  })\n\n  let valueRecord = { ...dateValue }\n  let activatedRecord = { ...activated }\n\n  return reactive({\n    column: currentColumn,\n    enabled,\n    activated,\n    dateValue,\n    resetColumn,\n    enterColumn,\n    setDate: (date: Date, withTime = true) => {\n      dateValue.year = date.getFullYear()\n      dateValue.month = date.getMonth() + 1\n      dateValue.date = date.getDate()\n\n      if (withTime) {\n        dateValue.hour = date.getHours()\n        dateValue.minute = date.getMinutes()\n        dateValue.second = date.getSeconds()\n      }\n    },\n    getDate: () => {\n      return new Date(\n        dateValue.year,\n        dateValue.month - 1,\n        dateValue.date,\n        dateValue.hour,\n        dateValue.minute,\n        dateValue.second,\n      )\n    },\n    record() {\n      valueRecord = { ...dateValue }\n      activatedRecord = { ...activated }\n    },\n    restore() {\n      Object.assign(dateValue, valueRecord)\n      Object.assign(activated, activatedRecord)\n    },\n  })\n}\n\nfunction getCurrentState() {\n  return currentState.value === 'start' ? startState : endState\n}\n\nfunction rawValueToDate(value: Dateable, defaultValue = new Date(props.today)) {\n  let date = toDate(value)\n\n  if (Number.isNaN(date.getTime())) {\n    date = defaultValue\n  }\n\n  return date\n}\n\nfunction parseValue<T extends Dateable | null>(value: T | T[]) {\n  if (!Array.isArray(value)) {\n    value = [value, value]\n  }\n\n  for (let i = 0; i < 2; ++i) {\n    const date = rawValueToDate(value[i] ?? '')\n    const state = i === 0 ? startState : endState\n\n    state.setDate(date)\n    toggleActivated(!!value[i], i === 0 ? 'start' : 'end')\n\n    if (!props.range) break\n  }\n}\n\nfunction parseDateUnitOrder() {\n  const orderSet = new Set<DateType>()\n\n  // to ignore 'xxx'\n  let inQuotation = false\n\n  for (let i = 0, len = props.format.length; i < len; ++i) {\n    const char = props.format.charAt(i)\n\n    if (char === \"'\") {\n      inQuotation = !inQuotation\n    } else if (!inQuotation) {\n      switch (char) {\n        case 'y':\n          orderSet.add('year')\n          break\n        case 'M':\n          orderSet.add('month')\n          break\n        case 'd':\n          orderSet.add('date')\n          break\n      }\n    }\n  }\n\n  dateUnitOrder.value = [...orderSet]\n}\n\nfunction parseTimeUnitEnabled() {\n  const isDatetime = props.type === 'datetime'\n\n  ;[startState, endState].forEach(state => {\n    state.enabled.hour = false\n    state.enabled.minute = false\n    state.enabled.second = false\n\n    if (isDatetime && props.format) {\n      // to ignore 'H', 'm' and 's'\n      let inQuotation = false\n\n      for (let i = 0, len = props.format.length; i < len; ++i) {\n        const char = props.format.charAt(i)\n\n        if (char === \"'\") {\n          inQuotation = !inQuotation\n        } else if (!inQuotation) {\n          switch (char) {\n            case 'H':\n              state.enabled.hour = true\n              break\n            case 'm':\n              state.enabled.minute = true\n              break\n            case 's':\n              state.enabled.second = true\n              break\n          }\n        }\n      }\n    }\n  })\n}\n\nfunction parseFormat() {\n  parseDateUnitOrder()\n  parseTimeUnitEnabled()\n}\n\nfunction toggleActivated(value: boolean, valueType?: 'start' | 'end') {\n  const states = valueType\n    ? valueType === 'start'\n      ? [startState]\n      : [endState]\n    : [startState, endState]\n\n  states.forEach(state => {\n    ;(Object.keys(state.activated) as DateTimeType[]).forEach(type => {\n      state.activated[type] = value\n    })\n  })\n}\n\nfunction getStringValue() {\n  return Array.isArray(currentValue.value) ? currentValue.value.join('|') : currentValue.value\n}\n\nfunction isDateDisabled(date: Date) {\n  if (typeof props.disabledDate === 'function') {\n    if (props.disabledDate(date)) {\n      return true\n    }\n  }\n\n  const time = date.getTime()\n\n  if (reversed.value) {\n    if (time > max.value && time < min.value) {\n      return true\n    }\n  } else {\n    if (time < min.value || time > max.value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction verifyDate() {\n  if (startError.value || (props.range && endError.value)) {\n    parseValue(props.value)\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction emitChange() {\n  verifyDate()\n\n  if (lastValue.value !== getStringValue()) {\n    lastValue.value = getStringValue()\n\n    const values = Array.isArray(currentValue.value) ? currentValue.value : [currentValue.value]\n    const emitValues: number[] = []\n    const formattedValues: unknown[] = []\n\n    const valueFormat = props.valueFormat\n    const formatValue: DatePickerFormatFn =\n      typeof valueFormat === 'function'\n        ? valueFormat\n        : valueFormat\n          ? (timestamp, type) =>\n            format(\n              timestamp,\n              !Array.isArray(valueFormat)\n                ? valueFormat\n                : type === 'start'\n                  ? valueFormat[0]\n                  : valueFormat[1],\n            )\n          : timestamp => timestamp\n\n    for (let i = 0; i < 2; ++i) {\n      if (props.type === 'year') {\n        emitValues[i] = new Date(\n          i === 0 ? startState.dateValue.year : endState.dateValue.year,\n          0,\n        ).getTime()\n      } else if (props.type !== 'datetime') {\n        emitValues[i] = new Date(values[i].split(' ')[0] + ' 00:00:00').getTime()\n      } else {\n        emitValues[i] = new Date(values[i]).getTime()\n      }\n\n      formattedValues[i] = formatValue(emitValues[i], i === 0 ? 'start' : 'end')\n\n      if (!props.range) break\n    }\n\n    const emitValue = props.range ? emitValues : emitValues[0]\n    const formattedValue = props.range ? formattedValues : formattedValues[0]\n\n    toggleActivated(true)\n    emit('update:value', emitValue)\n    emit('update:formatted-value', formattedValue)\n    setFieldValue(emitValue)\n    emitEvent(props.onChange as DatePickerChangeEvent, emitValue)\n    validateField()\n  }\n}\n\nfunction finishInput(shouldChange = true) {\n  setVisible(false)\n\n  shouldChange && emitChange()\n  startState.resetColumn()\n  endState.resetColumn()\n}\n\nfunction verifyValue(type: DateTimeType) {\n  const dateValue = getCurrentState().dateValue\n\n  switch (type) {\n    case 'year': {\n      dateValue.year = boundRange(dateValue.year, 1970, 9999)\n      break\n    }\n    case 'month': {\n      dateValue.month = boundRange(dateValue.month, 1, 12)\n      break\n    }\n    case 'date': {\n      const month = dateValue.month\n\n      let lastDay\n\n      if (month < 7) {\n        if (month !== 2) {\n          lastDay = 30 + (month % 2)\n        } else {\n          if (isLeapYear(dateValue.year)) {\n            lastDay = 29\n          } else {\n            lastDay = 28\n          }\n        }\n      } else {\n        lastDay = 31 - (month % 2)\n      }\n\n      dateValue.date = boundRange(dateValue.date, 1, lastDay)\n      break\n    }\n    case 'hour':\n    case 'minute':\n    case 'second': {\n      dateValue[type] = boundRange(dateValue[type], 0, type === 'hour' ? 23 : 59)\n      dateValue[type] = Math.round(dateValue[type] / getStep(type)) * getStep(type)\n    }\n  }\n}\n\nfunction handleFocused() {\n  if (props.disabled) return\n\n  focused.value = true\n\n  timer.focus = setTimeout(() => {\n    if (focused.value) {\n      if (currentState.value === 'start') {\n        startInput.value?.focus()\n      } else {\n        endInput.value?.focus()\n      }\n    }\n  }, 120)\n}\n\nfunction handleBlur() {\n  clearTimeout(timer.focus)\n\n  focused.value = false\n  startInput.value?.blur()\n  endInput.value?.blur()\n}\n\nfunction showPanel(event: Event) {\n  if (props.disabled || readonly.value) return\n\n  const target = event.target as Node\n\n  setVisible(true)\n\n  if (wrapper.value && target) {\n    const units = Array.from(wrapper.value.querySelectorAll(`.${nh.be('unit')}`))\n    const index = units.findIndex(unit => unit === target || unit.contains(target))\n\n    if (!~index) {\n      startState.column = null\n      endState.column = null\n    }\n\n    if (props.range && index >= units.length / 2) {\n      toggleCurrentState('end')\n    } else {\n      toggleCurrentState('start')\n    }\n  }\n\n  handleFocused()\n}\n\nfunction handleInput(value: number) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  handleInputNumber(type, value)\n\n  if (type === 'year' ? state.dateValue.year >= 1000 : state.dateValue[type] >= 10) {\n    state.enterColumn('next', false)\n  }\n}\n\nfunction handleInputNumber(type: DateTimeType, number: number) {\n  const state = getCurrentState()\n  const prev = state.dateValue[type]\n\n  if (state.activated[type] && prev > 0 && prev < (type === 'year' ? 1000 : 10)) {\n    state.dateValue[type] = prev * 10 + number\n  } else {\n    state.dateValue[type] = number\n    setActivatedTrue(type)\n  }\n\n  type !== 'year' && verifyValue(type)\n  emitEvent(props.onInput, type, state.dateValue[type])\n}\n\nfunction setActivatedTrue(type: DateTimeType) {\n  const activated = getCurrentState().activated\n\n  if (type === 'date') {\n    activated.year = true\n    activated.month = true\n  } else if (type === 'month') {\n    activated.year = true\n  } else if (type === 'minute') {\n    activated.hour = true\n  } else if (type === 'second') {\n    activated.hour = true\n    activated.minute = true\n  }\n\n  activated[type] = true\n}\n\nfunction handleInputFocus(type: DateTimeType) {\n  getCurrentState().column = type\n}\n\nfunction isTimeType(type: DateTimeType): type is TimeType {\n  return ['hour', 'minute', 'second'].includes(type)\n}\n\nfunction handleAdjust(adjustType: 'plus' | 'minus', ctrlKey: boolean) {\n  const isPlus = adjustType === 'plus'\n  const sign = isPlus ? 1 : -1\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  if (state.enabled[type]) {\n    if (isTimeType(type)) {\n      state.dateValue[type] += sign * (ctrlKey ? getCtrlStep(type) : getStep(type))\n    } else {\n      if (ctrlKey) {\n        if (type === 'year') {\n          state.dateValue.year += sign * 10\n        } else {\n          state.dateValue[type === 'date' ? 'month' : 'year'] += sign\n        }\n      } else {\n        state.dateValue[type] += sign\n      }\n\n      computeDate()\n      updateDateActivated(type)\n    }\n\n    verifyValue(type)\n    emitEvent(props[isPlus ? 'onPlus' : 'onMinus'], type, state.dateValue[type])\n    datePanel.value?.refreshCalendar(currentState.value)\n  }\n}\n\nfunction handlePlus(ctrlKey: boolean) {\n  handleAdjust('plus', ctrlKey)\n}\n\nfunction handleMinus(ctrlKey: boolean) {\n  handleAdjust('minus', ctrlKey)\n}\n\nfunction computeDate() {\n  const dateValue = getCurrentState().dateValue\n  const date = new Date(dateValue.year, dateValue.month - 1, dateValue.date)\n\n  dateValue.year = date.getFullYear()\n  dateValue.month = date.getMonth() + 1\n  dateValue.date = date.getDate()\n}\n\nfunction fallbackFocus() {\n  requestAnimationFrame(() => {\n    handleBlur()\n    reference.value?.focus()\n  })\n}\n\nfunction handleEnter() {\n  fallbackFocus()\n  finishInput()\n  emitEvent(props.onEnter)\n}\n\nfunction handleCancel() {\n  fallbackFocus()\n  parseValue(lastValue.value.split('|'))\n  finishInput(false)\n  emitEvent(props.onCancel)\n}\n\nfunction handleClear(finish = true) {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    nextTick(() => {\n      const emitValue = props.range ? ([] as number[]) : null\n\n      parseValue(null)\n      finish && finishInput(false)\n      emit('update:value', emitValue)\n      emit('update:formatted-value', props.range ? [] : null)\n      emitEvent(props.onChange as DatePickerChangeEvent, emitValue)\n      emitEvent(props.onClear)\n      clearField(emitValue!)\n      finish && handleBlur()\n\n      lastValue.value = ''\n\n      nextTick(() => {\n        toggleActivated(false)\n      })\n    })\n  }\n}\n\nfunction handleShortcut(name: string, value: Dateable | Dateable[]) {\n  fallbackFocus()\n  parseValue(value)\n  emitEvent(props.onShortcut as (name: string, value: Dateable | Dateable[]) => void, name, value)\n  finishInput()\n}\n\n// 只有时分秒\nfunction getStep(type: TimeType) {\n  return props.steps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\n// 只有时分秒\nfunction getCtrlStep(type: TimeType) {\n  return props.ctrlSteps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction handleDateHover(hoverDate: Date | null) {\n  if (props.range && hoverDate) {\n    hoveredDate.value = hoverDate\n\n    if (firstSelected.value) {\n      const hoverValues = [hoverDate.getFullYear(), hoverDate.getMonth() + 1, hoverDate.getDate()]\n      const start = hoveredLarge.value ? firstSelected.value : hoverValues\n      const end = hoveredLarge.value ? hoverValues : firstSelected.value\n\n      let types: DateTimeType[]\n\n      if (props.type === 'year') {\n        types = ['year']\n      } else if (props.type === 'month') {\n        types = ['year', 'month']\n      } else {\n        types = ['year', 'month', 'date']\n      }\n\n      for (let i = 0, len = types.length; i < len; ++i) {\n        startState.dateValue[types[i]] = start[i]\n        endState.dateValue[types[i]] = end[i]\n      }\n    }\n  }\n}\n\nfunction handlePanelChange(values: number[]) {\n  let types: DateTimeType[]\n\n  if (props.type === 'year') {\n    types = ['year']\n  } else if (props.type === 'month') {\n    types = ['year', 'month']\n  } else {\n    types = ['year', 'month', 'date']\n  }\n\n  if (!props.range) {\n    for (let i = 0, len = types.length; i < len; ++i) {\n      startState.dateValue[types[i]] = values[i]\n      updateDateActivated(types[i], 'start')\n    }\n\n    if (noActionMode.value) handleEnter()\n\n    return\n  }\n\n  if (!firstSelected.value) {\n    firstSelected.value = values\n\n    for (let i = 0, len = types.length; i < len; ++i) {\n      startState.dateValue[types[i]] = values[i]\n      endState.dateValue[types[i]] = values[i]\n      updateDateActivated(types[i], 'start')\n      updateDateActivated(types[i], 'end')\n    }\n  } else {\n    const [year, month, date] = firstSelected.value\n    const firstTime = new Date(`${year}-${month}-${date}`).getTime()\n    const secondTime = new Date(`${values[0]}-${values[1]}-${values[2]}`).getTime()\n    const start = firstTime < secondTime ? firstSelected.value : values\n    const end = firstTime < secondTime ? values : firstSelected.value\n\n    for (let i = 0, len = types.length; i < len; ++i) {\n      startState.dateValue[types[i]] = start[i]\n      endState.dateValue[types[i]] = end[i]\n      updateDateActivated(types[i], 'start')\n      updateDateActivated(types[i], 'end')\n    }\n\n    verifyRangeValue()\n    firstSelected.value = undefined\n\n    if (noActionMode.value) handleEnter()\n  }\n}\n\nfunction handleTimeChange(valueType: 'start' | 'end', type: TimeType, time: number) {\n  const state = valueType === 'start' ? startState : endState\n\n  state.dateValue[type] = time\n  updateDateActivated('hour', valueType)\n  updateDateActivated('minute', valueType)\n  updateDateActivated('second', valueType)\n}\n\nfunction updateDateActivated(type: DateTimeType, valueType?: 'start' | 'end') {\n  const state = valueType ? (valueType === 'start' ? startState : endState) : getCurrentState()\n\n  if (type === 'month') {\n    state.activated.year = true\n  } else if (type === 'date') {\n    state.activated.year = true\n    state.activated.month = true\n  }\n\n  state.activated[type] = true\n}\n\nfunction verifyRangeValue() {\n  if (!props.range) return\n\n  const startDate = startState.getDate()\n  const endDate = endState.getDate()\n\n  if (startDate.getTime() > endDate.getTime()) {\n    startState.setDate(endDate)\n    endState.setDate(startDate)\n  }\n}\n\nfunction toggleCurrentState(type: 'start' | 'end') {\n  currentState.value = type\n}\n\nfunction enterColumn(type: 'prev' | 'next') {\n  if (props.range) {\n    if (type === 'prev' && currentState.value === 'start' && !startState.column) {\n      toggleCurrentState('end')\n    }\n\n    const state = getCurrentState()\n    const currentColumn = state.column\n\n    state.enterColumn(type, !currentColumn)\n\n    if (currentColumn === state.column) {\n      const isStart = currentState.value === 'start'\n      const otherState = isStart ? endState : startState\n\n      otherState.resetColumn(type === 'prev' ? 'second' : 'year', type === 'prev')\n      toggleCurrentState(isStart ? 'end' : 'start')\n    }\n  } else {\n    startState.enterColumn(type)\n  }\n}\n\nfunction handleStartInput(type: DateTimeType) {\n  toggleCurrentState('start')\n  handleInputFocus(type)\n\n  nextTick(() => {\n    datePanel.value?.refreshCalendar('start')\n  })\n}\n\nfunction handleEndInput(type: DateTimeType) {\n  toggleCurrentState('end')\n  handleInputFocus(type)\n\n  nextTick(() => {\n    datePanel.value?.refreshCalendar('end')\n  })\n}\n\nfunction handleClickOutside() {\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    finishInput(!noActionMode.value && !props.outsideCancel)\n    handleBlur()\n    emitEvent(props.onOutsideClose)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"dialog\"\n    :aria-labelledby=\"labelId\"\n    @click=\"showPanel\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @keydown.space.prevent=\"showPanel\"\n      @keydown.backspace.prevent=\"handleClear(false)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <DateControl\n          ref=\"start\"\n          :unit-type=\"currentState === 'start' ? startState.column! : ''\"\n          :enabled=\"startState.enabled\"\n          :activated=\"startState.activated\"\n          :date-value=\"startState.dateValue\"\n          :steps=\"props.steps\"\n          :ctrl-steps=\"props.ctrlSteps\"\n          :focused=\"focused\"\n          :visible=\"currentVisible\"\n          :date-separator=\"props.dateSeparator\"\n          :time-separator=\"props.timeSeparator\"\n          :filler=\"props.filler\"\n          :labels=\"props.labels\"\n          :has-error=\"startError\"\n          :placeholder=\"startPlaceholder\"\n          :readonly=\"props.unitReadonly\"\n          :labeled-by=\"labelId\"\n          :date-unit-order=\"dateUnitOrder\"\n          @input=\"handleInput\"\n          @plus=\"handlePlus\"\n          @minus=\"handleMinus\"\n          @enter=\"handleEnter\"\n          @cancel=\"handleCancel\"\n          @unit-focus=\"handleStartInput\"\n          @prev-unit=\"enterColumn('prev')\"\n          @next-unit=\"enterColumn('next')\"\n          @blur=\"startState.column = null\"\n        ></DateControl>\n        <template v-if=\"props.range\">\n          <div :class=\"nh.be('exchange')\">\n            <slot name=\"exchange\">\n              <Renderer :renderer=\"props.slots.exchange\">\n                <Icon v-bind=\"icons.exchange\" style=\"padding-top: 1px\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <DateControl\n            ref=\"end\"\n            :unit-type=\"currentState === 'end' ? endState.column! : ''\"\n            :enabled=\"endState.enabled\"\n            :activated=\"endState.activated\"\n            :date-value=\"endState.dateValue\"\n            :steps=\"props.steps\"\n            :ctrl-steps=\"props.ctrlSteps\"\n            :focused=\"focused\"\n            :visible=\"currentVisible\"\n            :date-separator=\"props.dateSeparator\"\n            :time-separator=\"props.timeSeparator\"\n            :filler=\"props.filler\"\n            :labels=\"props.labels\"\n            :has-error=\"endError\"\n            :placeholder=\"endPlaceholder\"\n            :readonly=\"props.unitReadonly\"\n            :labeled-by=\"labelId\"\n            :date-unit-order=\"dateUnitOrder\"\n            @input=\"handleInput\"\n            @plus=\"handlePlus\"\n            @minus=\"handleMinus\"\n            @enter=\"handleEnter\"\n            @cancel=\"handleCancel\"\n            @unit-focus=\"handleEndInput\"\n            @prev-unit=\"enterColumn('prev')\"\n            @next-unit=\"enterColumn('next')\"\n            @blur=\"endState.column = null\"\n          ></DateControl>\n        </template>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon v-bind=\"icons.calendar\" :icon=\"props.suffix || icons.calendar.icon\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"mergedLocale.ariaLabel.clear\"\n          @click.stop=\"handleClear()\"\n        >\n          <Icon v-bind=\"icons.clear\" label=\"clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.ns('calendar-vars'), nh.ns('time-picker-vars'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop=\"handleFocused\"\n      @before-enter=\"staticWheel = true\"\n      @before-leave=\"staticWheel = true\"\n      @after-enter=\"staticWheel = false\"\n      @after-leave=\"staticWheel = false\"\n    >\n      <DatePanel\n        ref=\"panel\"\n        :type=\"props.type\"\n        :start-value=\"startState.dateValue\"\n        :end-value=\"endState.dateValue\"\n        :start-activated=\"startState.activated\"\n        :end-activated=\"endState.activated\"\n        :value-type=\"currentState\"\n        :shortcuts=\"props.shortcuts\"\n        :confirm-text=\"props.confirmText\"\n        :cancel-text=\"props.cancelText\"\n        :today=\"props.today\"\n        :no-action=\"props.noAction\"\n        :steps=\"props.steps\"\n        :range=\"props.range\"\n        :min=\"props.min\"\n        :max=\"props.max\"\n        :disabled-date=\"isDateDisabled\"\n        :disabled-time=\"isTimeDisabled\"\n        :has-error=\"startError || endError\"\n        :selecting-type=\"hoveredLarge ? 'end' : 'start'\"\n        :locale=\"mergedLocale\"\n        :week-start=\"props.weekStart\"\n        :static-wheel=\"staticWheel\"\n        :shortcuts-placement=\"props.shortcutsPlacement\"\n        :labeled-by=\"labelId\"\n        @shortcut=\"handleShortcut\"\n        @change=\"handlePanelChange\"\n        @confirm=\"handleEnter\"\n        @cancel=\"handleCancel\"\n        @hover=\"handleDateHover\"\n        @time-change=\"handleTimeChange\"\n      >\n        <template v-if=\"$slots.panelTitle || props.slots.panelTitle\" #title=\"titleParams\">\n          <slot name=\"panelTitle\" v-bind=\"titleParams\">\n            <Renderer :renderer=\"props.slots.panelTitle\" :data=\"titleParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelYear || props.slots.panelYear\" #year=\"yearParams\">\n          <slot name=\"panelYear\" v-bind=\"yearParams\">\n            <Renderer :renderer=\"props.slots.panelYear\" :data=\"yearParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelMonth || props.slots.panelMonth\" #month=\"monthParams\">\n          <slot name=\"panelMonth\" v-bind=\"monthParams\">\n            <Renderer :renderer=\"props.slots.panelMonth\" :data=\"monthParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelWeek || props.slots.panelWeek\" #week=\"weekParams\">\n          <slot name=\"panelWeek\" v-bind=\"weekParams\">\n            <Renderer :renderer=\"props.slots.panelWeek\" :data=\"weekParams\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"$slots.panelDate || props.slots.panelDate\" #date=\"dateParams\">\n          <slot name=\"panelDate\" v-bind=\"dateParams\">\n            <Renderer :renderer=\"props.slots.panelDate\" :data=\"dateParams\"></Renderer>\n          </slot>\n        </template>\n      </DatePanel>\n    </Popper>\n  </div>\n</template>\n","import { booleanProp, buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { DividerTextPosition } from './symbol'\n\nexport const dividerProps = buildProps({\n  vertical: booleanProp,\n  textPosition: String as PropType<DividerTextPosition>,\n  /**\n   * 字体增大加粗\n   */\n  primary: booleanProp,\n  dashed: booleanProp,\n  margin: [String, Number],\n})\n\nexport type DividerProps = ExtractPropTypes<typeof dividerProps>\nexport type DividerCProps = ConfigurableProps<DividerProps>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { toCssSize } from '@vexip-ui/utils'\nimport { dividerProps } from './props'\n\ndefineOptions({ name: 'Divider' })\n\nconst _props = defineProps(dividerProps)\nconst props = useProps('divider', _props, {\n  vertical: false,\n  textPosition: {\n    default: 'center',\n    validator: value => ['center', 'left', 'right'].includes(value),\n  },\n  primary: false,\n  dashed: false,\n  margin: null,\n})\n\nconst slots = defineSlots<{ default: () => any }>()\n\nconst nh = useNameHelper('divider')\n\nconst hasText = computed(() => !!slots.default)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(props.vertical ? 'vertical' : 'horizontal'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('primary')]: !props.vertical && props.primary,\n      [nh.bm('dashed')]: props.dashed,\n      [nh.bm('with-text')]: !props.vertical && hasText.value,\n      [nh.bm(`with-text-${props.textPosition}`)]:\n        !props.vertical && hasText.value && props.textPosition !== 'center',\n    },\n  ]\n})\nconst margin = computed(() => toCssSize(props.margin))\nconst style = computed(() => {\n  if (!margin.value) return {}\n\n  return props.vertical\n    ? {\n      marginRight: margin.value,\n      marginLeft: margin.value,\n    }\n    : {\n      marginTop: margin.value,\n      marginBottom: margin.value,\n    }\n})\n</script>\n\n<template>\n  <div :class=\"className\" role=\"separator\" :style=\"style\">\n    <span v-if=\"!props.vertical && hasText\" :class=\"nh.be('text')\">\n      <slot></slot>\n    </span>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ButtonProps, ButtonType } from '@/components/button'\nimport type { DrawerPlacement, DrawerSlots } from './symbol'\n\nexport const drawerProps = buildProps({\n  locale: localeProp('drawer'),\n  transfer: booleanStringProp,\n  active: booleanProp,\n  width: [Number, String],\n  height: [Number, String],\n  placement: String as PropType<DrawerPlacement>,\n  title: String,\n  closable: booleanProp,\n  inner: booleanProp,\n  maskClose: booleanProp,\n  drawerClass: classProp,\n  hideMask: booleanProp,\n  onBeforeClose: Function as PropType<(isConfirm?: boolean) => any>,\n  resizable: booleanProp,\n  autoRemove: booleanProp,\n  footer: booleanProp,\n  confirmText: String,\n  cancelText: String,\n  loading: booleanProp,\n  confirmType: String as PropType<ButtonType>,\n  confirmProps: Object as PropType<ButtonProps>,\n  cancelType: String as PropType<ButtonType>,\n  cancelProps: Object as PropType<ButtonProps>,\n  actionSize: sizeProp,\n  undivided: booleanProp,\n  disableEsc: booleanProp,\n  slots: Object as PropType<DrawerSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onClose: eventProp(),\n  onShow: eventProp(),\n  onHide: eventProp(),\n  onResizeStart: eventProp<(rect: { width: number, height: number }) => void>(),\n  onResizeMove: eventProp<(rect: { width: number, height: number }) => void>(),\n  onResizeEnd: eventProp<(rect: { width: number, height: number }) => void>(),\n  onConfirm: eventProp(),\n  onCancel: eventProp(),\n})\n\nexport type DrawerProps = ExtractPropTypes<typeof drawerProps>\nexport type DrawerCProps = ConfigurableProps<DrawerProps, never, 'onBeforeClose'>\n","export type DrawerPlacement = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface DrawerSlotParams {\n  resizing: boolean,\n  handleConfirm: () => void,\n  handleCancel: () => void,\n  handleClose: (isConfirm?: boolean) => Promise<unknown>,\n}\n\nexport type DrawerCommonSlot = (params: DrawerSlotParams) => any\n\nexport interface DrawerSlots {\n  header?: DrawerCommonSlot,\n  title?: DrawerCommonSlot,\n  close?: DrawerCommonSlot,\n  default?: DrawerCommonSlot,\n  footer?: DrawerCommonSlot,\n  handler?: DrawerCommonSlot,\n}\n\nexport const drawerPlacements = Object.freeze<DrawerPlacement[]>(['top', 'right', 'bottom', 'left'])\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useId,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { isPromise, toNumber } from '@vexip-ui/utils'\nimport { drawerProps } from './props'\nimport { drawerPlacements } from './symbol'\n\nimport type { DrawerSlots } from './symbol'\n\ndefineOptions({ name: 'Drawer' })\n\nconst _props = defineProps(drawerProps)\nconst props = useProps('drawer', _props, {\n  locale: null,\n  transfer: false,\n  active: {\n    default: false,\n    static: true,\n  },\n  width: {\n    default: 280,\n    validator: value => typeof value === 'string' || value > 0,\n  },\n  height: {\n    default: 280,\n    validator: value => typeof value === 'string' || value > 0,\n  },\n  placement: {\n    default: 'right',\n    validator: value => drawerPlacements.includes(value),\n  },\n  title: '',\n  closable: true,\n  inner: false,\n  maskClose: true,\n  drawerClass: null,\n  hideMask: false,\n  onBeforeClose: {\n    default: null,\n    isFunc: true,\n  },\n  resizable: false,\n  autoRemove: false,\n  footer: false,\n  confirmText: null,\n  confirmProps: null,\n  cancelText: null,\n  cancelProps: null,\n  loading: false,\n  confirmType: 'primary',\n  cancelType: 'default',\n  actionSize: createSizeProp('small'),\n  undivided: false,\n  disableEsc: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<DrawerSlots>()\n\nconst nh = useNameHelper('drawer')\nconst icons = useIcons()\nconst locale = useLocale('drawer', toRef(props, 'locale'))\n\nconst currentActive = ref(props.active)\nconst currentWidth = ref(props.width)\nconst currentHeight = ref(props.height)\n\nconst wrapper = ref<HTMLElement>()\n\nconst { target: resizer, moving: resizing } = useMoving({\n  onStart: (state, event) => {\n    if (!props.resizable || event.button > 0 || !wrapper.value) {\n      return false\n    }\n\n    const width = `${currentWidth.value}`.endsWith('%')\n      ? wrapper.value.offsetWidth\n      : toNumber(currentWidth.value)\n    const height = `${currentHeight.value}`.endsWith('%')\n      ? wrapper.value.offsetHeight\n      : toNumber(currentHeight.value)\n\n    state.xStart = width\n    state.yStart = height\n\n    emitEvent(props.onResizeStart, { width, height })\n  },\n  onMove: (state, event) => {\n    const deltaX = event.clientX - state.clientX\n    const deltaY = event.clientY - state.clientY\n\n    let width = toNumber(currentWidth.value)\n    let height = toNumber(currentHeight.value)\n\n    switch (props.placement) {\n      case 'top': {\n        height = state.yStart + deltaY\n        break\n      }\n      case 'right': {\n        width = state.xStart - deltaX\n        break\n      }\n      case 'bottom': {\n        height = state.yStart - deltaY\n        break\n      }\n      default: {\n        width = state.xStart + deltaX\n      }\n    }\n\n    currentWidth.value = Math.max(width, 100)\n    currentHeight.value = Math.max(height, 100)\n\n    emitEvent(props.onResizeMove, {\n      width: toNumber(currentWidth.value),\n      height: toNumber(currentHeight.value),\n    })\n  },\n  onEnd: () => {\n    emitEvent(props.onResizeEnd, {\n      width: toNumber(currentWidth.value),\n      height: toNumber(currentHeight.value),\n    })\n  },\n})\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('inner')]: props.inner,\n      [nh.bm('closable')]: props.closable,\n      [nh.bm('resizable')]: props.resizable,\n      [nh.bm('undivided')]: props.undivided,\n    },\n  ]\n})\nconst moveTransition = computed(() => {\n  return nh.ns(`move-${props.placement}`)\n})\nconst wrapperClass = computed(() => {\n  return [\n    nh.be('wrapper'),\n    nh.bem('wrapper', props.placement),\n    {\n      [nh.bem('wrapper', 'hide-mask')]: props.hideMask,\n      [nh.bem('wrapper', 'resizing')]: resizing.value,\n    },\n    props.drawerClass,\n  ]\n})\nconst wrapperStyle = computed(() => {\n  const placement = props.placement\n\n  if (placement === 'top' || placement === 'bottom') {\n    const height = currentHeight.value\n\n    return {\n      height: `${height}`.endsWith('%') ? height : `${height}px`,\n    }\n  }\n\n  const width = currentWidth.value\n\n  return {\n    width: `${width}`.endsWith('%') ? width : `${width}px`,\n  }\n})\nconst hasTitle = computed(() => {\n  return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\n})\nconst titleId = useId()\nconst bodyId = useId()\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  },\n)\nwatch(\n  () => props.width,\n  value => {\n    currentWidth.value = value\n  },\n)\nwatch(\n  () => props.height,\n  value => {\n    currentHeight.value = value\n  },\n)\n\ndefineExpose({\n  resizing,\n  titleId,\n  bodyId,\n  wrapper,\n  resizer,\n  handleConfirm,\n  handleCancel,\n  handleClose,\n})\n\nconst slotParams = shallowReadonly(\n  reactive({\n    resizing,\n    handleConfirm,\n    handleCancel,\n    handleClose,\n  }),\n)\n\nfunction setActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nasync function handleClose(isConfirm = false) {\n  let result: unknown = true\n\n  if (typeof props.onBeforeClose === 'function') {\n    result = props.onBeforeClose(isConfirm)\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    nextTick(() => {\n      setActive(false)\n      emitEvent(props.onClose)\n    })\n  }\n\n  return result\n}\n\nfunction handleMaskClose() {\n  if (props.maskClose) {\n    return handleClose()\n  }\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n\nfunction handleConfirm() {\n  handleClose(true)\n  emitEvent(props.onConfirm)\n}\n\nfunction handleCancel() {\n  handleClose(false)\n  emitEvent(props.onCancel)\n}\n</script>\n\n<template>\n  <Masker\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :inner=\"props.inner\"\n    :transition-name=\"moveTransition\"\n    :closable=\"props.maskClose\"\n    :disabled=\"props.hideMask\"\n    :on-before-close=\"handleMaskClose\"\n    :transfer=\"props.transfer\"\n    :auto-remove=\"props.autoRemove\"\n    :disable-esc=\"props.disableEsc\"\n    @show=\"handleShow\"\n    @hide=\"handleHide\"\n  >\n    <template #default=\"{ show }\">\n      <section\n        v-show=\"show\"\n        ref=\"wrapper\"\n        :class=\"wrapperClass\"\n        :style=\"wrapperStyle\"\n        role=\"dialog\"\n        :aria-modal=\"show ? 'true' : undefined\"\n        :aria-labelledby=\"titleId\"\n        :aria-describedby=\"bodyId\"\n      >\n        <div v-if=\"hasTitle\" :class=\"nh.be('header')\">\n          <slot name=\"header\" v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n              <div :id=\"titleId\" :class=\"nh.be('title')\">\n                <slot name=\"title\" v-bind=\"slotParams\">\n                  <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                    {{ props.title }}\n                  </Renderer>\n                </slot>\n              </div>\n              <button\n                v-if=\"props.closable\"\n                type=\"button\"\n                :class=\"nh.be('close')\"\n                @click=\"handleClose()\"\n              >\n                <slot name=\"close\" v-bind=\"slotParams\">\n                  <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                    <Icon\n                      v-bind=\"icons.close\"\n                      :scale=\"+(icons.close.scale || 1) * 1.2\"\n                      label=\"close\"\n                    ></Icon>\n                  </Renderer>\n                </slot>\n              </button>\n            </Renderer>\n          </slot>\n        </div>\n        <div :id=\"bodyId\" :class=\"nh.be('content')\">\n          <slot v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\n          </slot>\n        </div>\n        <div v-if=\"props.footer || slots.footer || props.slots.footer\" :class=\"nh.be('footer')\">\n          <slot name=\"footer\" v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n              <Button\n                :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n                inherit\n                text\n                :type=\"props.cancelType\"\n                :size=\"props.actionSize\"\n                v-bind=\"props.cancelProps\"\n                @click=\"handleCancel\"\n              >\n                {{ props.cancelText || locale.cancel }}\n              </Button>\n              <Button\n                :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n                inherit\n                :type=\"props.confirmType\"\n                :size=\"props.actionSize\"\n                :loading=\"props.loading\"\n                v-bind=\"props.confirmProps\"\n                @click=\"handleConfirm\"\n              >\n                {{ props.confirmText || locale.confirm }}\n              </Button>\n            </Renderer>\n          </slot>\n        </div>\n        <div\n          v-if=\"props.resizable\"\n          ref=\"resizer\"\n          :class=\"[\n            nh.be('handler'),\n            nh.bem('handler', props.placement),\n            {\n              [nh.bem('handler', 'resizing')]: resizing\n            }\n          ]\"\n        >\n          <slot name=\"handler\" v-bind=\"slotParams\">\n            <Renderer :renderer=\"props.slots.handler\" :data=\"slotParams\"></Renderer>\n          </slot>\n        </div>\n      </section>\n    </template>\n  </Masker>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, classProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TooltipShift, TooltipTheme } from '@/components/tooltip'\nimport type { EllipsisSlots } from './symbol'\n\nexport const ellipsisProps = buildProps({\n  placement: String as PropType<Placement>,\n  transfer: booleanStringProp,\n  noHover: booleanProp,\n  transitionName: String,\n  tooltipTheme: String as PropType<TooltipTheme>,\n  tipClass: classProp,\n  maxLines: Number,\n  tipMaxWidth: [Number, String],\n  tipDisabled: booleanProp,\n  tipShift: {\n    type: [Boolean, String] as PropType<boolean | TooltipShift>,\n    default: null,\n  },\n  slots: Object as PropType<EllipsisSlots>,\n})\n\nexport type EllipsisProps = ExtractPropTypes<typeof ellipsisProps>\nexport type EllipsisCProps = ConfigurableProps<EllipsisProps>\n","<script setup lang=\"ts\">\nimport { Tooltip } from '@/components/tooltip'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, ref } from 'vue'\n\nimport { useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\nimport { placementWhileList, useSetTimeout } from '@vexip-ui/hooks'\nimport { getRangeWidth } from '@vexip-ui/utils'\nimport { ellipsisProps } from './props'\n\nimport type { EllipsisSlots } from './symbol'\n\ndefineOptions({ name: 'Ellipsis' })\n\nconst nh = useNameHelper('ellipsis')\n\nconst _props = defineProps(ellipsisProps)\nconst props = useProps('ellipsis', _props, {\n  placement: {\n    default: 'top',\n    validator: value => placementWhileList.includes(value),\n  },\n  transfer: 'body',\n  noHover: false,\n  transitionName: () => nh.ns('fade'),\n  tooltipTheme: {\n    default: 'dark',\n    validator: value => ['light', 'dark'].includes(value),\n  },\n  tipClass: null,\n  maxLines: null,\n  tipMaxWidth: 500,\n  tipDisabled: false,\n  tipShift: false,\n  slots: () => ({}),\n})\n\ndefineSlots<EllipsisSlots>()\n\nconst hoverDelay = useHoverDelay()\nconst visible = ref(false)\nconst content = ref('')\n\nconst { timer } = useSetTimeout()\n\nconst wrapper = ref<HTMLElement>()\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('multiple')]: props.maxLines,\n  }\n})\nconst ellipsisStyle = computed(() => {\n  return props.maxLines > 0 ? { '-webkit-line-clamp': props.maxLines } : ''\n})\nconst tipStyle = computed(() => {\n  return {\n    maxWidth:\n      typeof props.tipMaxWidth === 'string'\n        ? parseFloat(props.tipMaxWidth) || props.tipMaxWidth\n        : `${props.tipMaxWidth}px`,\n  }\n})\n\ndefineExpose({\n  visible,\n  wrapper,\n})\n\nfunction handleTriggerEnter() {\n  clearTimeout(timer.hover)\n\n  if (props.tipDisabled) return\n\n  timer.hover = setTimeout(() => {\n    if (!wrapper.value || !wrapper.value.childNodes.length) {\n      visible.value = false\n      return\n    }\n\n    // In the case of multiple lines, use visual height and\n    // real content height to control whether to display\n    if (props.maxLines > 0) {\n      const scrollHeight = wrapper.value.scrollHeight\n      const clientHeight = wrapper.value.clientHeight\n\n      visible.value = scrollHeight > clientHeight\n    } else {\n      visible.value = getRangeWidth(wrapper.value) > wrapper.value.getBoundingClientRect().width\n    }\n\n    content.value = visible.value ? (wrapper.value.textContent ?? '') : ''\n  }, hoverDelay.value)\n}\n\nfunction handleTriggerLeave() {\n  clearTimeout(timer.hover)\n\n  if (props.tipDisabled) return\n\n  timer.hover = setTimeout(() => {\n    visible.value = false\n  }, hoverDelay.value)\n}\n</script>\n\n<template>\n  <Tooltip\n    :visible=\"visible\"\n    trigger=\"custom\"\n    :disabled=\"props.tipDisabled\"\n    :transfer=\"props.transfer\"\n    :placement=\"props.placement\"\n    :no-hover=\"props.noHover\"\n    :transition-name=\"props.transitionName\"\n    :tip-class=\"props.tipClass\"\n    :tip-style=\"tipStyle\"\n    :reverse=\"props.tooltipTheme === 'dark'\"\n    :shift=\"props.tipShift\"\n    @tip-enter=\"handleTriggerEnter\"\n    @tip-leave=\"handleTriggerLeave\"\n  >\n    <template #trigger>\n      <div\n        ref=\"wrapper\"\n        v-bind=\"$attrs\"\n        :class=\"className\"\n        :style=\"ellipsisStyle\"\n        @mouseenter=\"handleTriggerEnter\"\n        @mouseleave=\"handleTriggerLeave\"\n      >\n        <slot>\n          <Renderer :renderer=\"props.slots.default\"></Renderer>\n        </slot>\n      </div>\n    </template>\n    <slot name=\"content\" :content=\"content\">\n      <Renderer :renderer=\"props.slots.content\" :data=\"{ content }\">\n        {{ content }}\n      </Renderer>\n    </slot>\n  </Tooltip>\n</template>\n","<script setup lang=\"ts\">\nimport { Column } from '@/components/column'\nimport { Icon } from '@/components/icon'\nimport { Tooltip } from '@/components/tooltip'\n\nimport {\n  computed,\n  inject,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  shallowReadonly,\n  toRef,\n  watch,\n} from 'vue'\n\nimport {\n  makeSentence,\n  useIcons,\n  useId,\n  useLocale,\n  useNameHelper,\n  useProps,\n  useWordSpace,\n} from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { createEventEmitter, isFunction, isNull, isObject } from '@vexip-ui/utils'\nimport { formItemProps } from './props'\nimport { validate as asyncValidate } from './validator'\nimport { getValueByPath, setValueByPath } from './helper'\nimport { FIELD_OPTIONS, FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, type FormItemSlots } from './symbol'\n\nimport type { ComponentState } from '@vexip-ui/config'\nimport type { Rule } from './validator'\n\ndefineOptions({ name: 'FormItem', inheritAttrs: true })\n\nconst nh = useNameHelper('form')\nconst _props = defineProps(formItemProps)\nconst props = useProps('formItem', _props, {\n  locale: null,\n  label: {\n    default: '',\n    static: true,\n  },\n  prop: {\n    default: '',\n    static: true,\n  },\n  name: {\n    default: '',\n    static: true,\n  },\n  rules: () => [],\n  labelWidth: null,\n  required: false,\n  htmlFor: {\n    default: null,\n    static: true,\n  },\n  errorTransition: () => nh.ns('fade'),\n  defaultValue: {\n    default: null,\n    static: true,\n  },\n  hideErrorTip: false,\n  validateAll: null,\n  hideAsterisk: null,\n  hideLabel: null,\n  action: false,\n  help: '',\n  pure: false,\n  manual: false,\n  span: 24,\n  offset: null,\n  push: null,\n  pull: null,\n  order: null,\n  xs: null,\n  sm: null,\n  md: null,\n  lg: null,\n  xl: null,\n  xxl: null,\n  flex: null,\n})\n\nconst slots = defineSlots<FormItemSlots>()\n\nconst formProps = inject(FORM_PROPS, {})\nconst formActions = inject(FORM_ACTIONS, null)\nconst formFields = inject(FORM_FIELDS, null)\nconst emitter = createEventEmitter()\n\nconst locale = useLocale('form', toRef(props, 'locale'))\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst initValue = ref(props.defaultValue)\nconst isError = ref(false)\nconst errorTip = ref('')\nconst validating = ref(false)\nconst disabledValidate = ref(false)\nconst labelWidth = ref(0)\n\nconst defaultSlotParams = shallowReadonly(\n  reactive({\n    isError,\n  }),\n)\n\nconst placeholder = useDisplay(() => {\n  if (placeholder.value) {\n    labelWidth.value = placeholder.value.offsetWidth\n  }\n})\n\nconst labelId = useId()\nconst isRequired = computed(() => formProps.allRequired || props.required)\nconst requiredTip = computed(() => {\n  return makeSentence(`${props.label || props.prop} ${locale.value.notNullable}`, wordSpace.value)\n})\nconst allRules = computed(() => {\n  if (!props.prop) return []\n\n  const requiredRule: Rule[] = isRequired.value\n    ? [{ required: isRequired.value, message: requiredTip.value }]\n    : []\n  const selfRules = Array.isArray(props.rules) ? props.rules : [props.rules]\n\n  let formRules: Rule[] = []\n\n  if (formProps.rules) {\n    formRules = (getValueByPath(formProps.rules, props.prop) as Rule[]) ?? []\n  }\n\n  formRules = Array.isArray(formRules) ? formRules : [formRules]\n\n  return requiredRule.concat(formRules, selfRules)\n})\nconst currentValue = computed(getValue)\nconst isValidateAll = computed(() => {\n  return isNull(props.validateAll) ? (formProps.validateAll ?? false) : props.validateAll\n})\nconst useAsterisk = computed(() => {\n  if (props.hideAsterisk === true || formProps.hideAsterisk) {\n    return false\n  }\n\n  for (const rule of allRules.value) {\n    if (rule.required) return true\n  }\n\n  return isRequired.value\n})\nconst hideLabel = computed(() => props.action || props.hideLabel === true || formProps.hideLabel)\nconst hasLabel = computed(() => !(hideLabel.value || !(props.label || slots.label)))\nconst labelAlign = computed(() => formProps.labelAlign)\nconst computedLabelWidth = computed(() => {\n  if (labelAlign.value) {\n    return getLabelWidth(\n      labelAlign.value === 'top'\n        ? 0\n        : hideLabel.value\n          ? 0\n          : props.labelWidth || formProps.labelWidth || 80,\n    )\n  }\n\n  return getLabelWidth(hideLabel.value ? 0 : props.labelWidth || 80)\n})\nconst className = computed(() => {\n  return {\n    [nh.be('item')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bem('item', 'inherit')]: formFields || props.inherit,\n    [nh.bem('item', 'required')]: !formProps.hideAsterisk && useAsterisk.value,\n    [nh.bem('item', 'error')]: isError.value,\n    [nh.bem('item', 'action')]: props.action,\n    [nh.bem('item', 'padding')]: formProps.inline && labelAlign.value === 'top' && !hasLabel.value,\n  }\n})\nconst controlStyle = computed(() => {\n  return {\n    width: labelAlign.value === 'top' ? undefined : `calc(100% - ${computedLabelWidth.value}px)`,\n    marginLeft:\n      hasLabel.value || labelAlign.value === 'top' ? undefined : `${computedLabelWidth.value}px`,\n  }\n})\nconst inputValue = computed(() => {\n  const value = currentValue.value\n\n  if (Array.isArray(value) || isObject(value)) {\n    return JSON.stringify(value)\n  }\n\n  return value\n})\nconst columnFlex = computed(() => {\n  return { justify: props.action ? 'center' : 'start', align: 'middle' } as const\n})\nconst labelWidthDefined = computed(\n  () => !!(formProps.labelWidth && formProps.labelWidth !== 'auto') || props.labelWidth > 0,\n)\n\nconst instances = new Set<any>()\n\nconst fieldObject = Object.freeze({\n  prop: computed(() => props.prop),\n  idFor: computed(() => props.prop),\n  labelId,\n  state: computed<ComponentState>(() => (isError.value ? 'error' : 'default')),\n  disabled: computed(() => !!formProps.disabled),\n  loading: computed(() => !!formProps.loading),\n  size: computed(() => formProps.size || 'default'),\n  emitter,\n  labelWidth,\n  validate,\n  clearError,\n  reset,\n  getValue,\n  setValue,\n  sync: (instance: any) => {\n    if (instances.size) {\n      console.warn('[vexip-ui:Form]: must only be one control component under FormItem.')\n    }\n\n    instances.add(instance)\n  },\n  unSync: (instance: any) => {\n    instances.delete(instance)\n  },\n})\n\nprovide(FIELD_OPTIONS, props.manual ? null : fieldObject)\n\nwatch(\n  () => props.defaultValue,\n  value => {\n    initValue.value = value\n  },\n)\n\nonMounted(() => {\n  const value = currentValue.value\n\n  if (isNull(initValue.value)) {\n    initValue.value = Array.isArray(value) ? Array.from(value) : value\n  }\n\n  if (formFields) {\n    formFields.add(fieldObject)\n  }\n})\n\nonBeforeUnmount(() => {\n  if (formFields) {\n    formFields.delete(fieldObject)\n  }\n})\n\ndefineExpose({ isError, inputValue, computedLabelWidth })\n\nfunction getLabelWidth(width: number | 'auto') {\n  return width === 'auto' ? formActions?.getLabelWidth() || 80 : width\n}\n\nlet initialized = false\n\nfunction getValue(defaultValue: unknown = initValue.value) {\n  if (!formProps.model || !props.prop) return defaultValue\n\n  try {\n    const value = getValueByPath(formProps.model, props.prop, true)\n    initialized = true\n\n    return value\n  } catch (e) {\n    if (!initialized) {\n      setValueByPath(formProps.model, props.prop, defaultValue, false)\n      initialized = true\n    }\n\n    return defaultValue\n  }\n}\n\nfunction setValue(value: unknown, strict = false) {\n  if (!formProps.model || !props.prop) return\n\n  try {\n    return setValueByPath(formProps.model, props.prop, value, strict)\n  } catch (e) {}\n}\n\nfunction validate() {\n  return handleValidate()\n}\n\nfunction clearError() {\n  isError.value = false\n  errorTip.value = ''\n}\n\nfunction reset() {\n  clearError()\n\n  if (!formProps.model || !props.prop) return false\n\n  const value = currentValue.value\n\n  let resetValue\n\n  if (Array.isArray(value)) {\n    resetValue = Array.isArray(initValue.value) ? Array.from(initValue.value) : []\n  } else {\n    resetValue = isFunction(initValue.value) ? initValue.value() : initValue.value\n  }\n\n  return setValueByPath(formProps.model, props.prop, resetValue, true)\n}\n\nasync function handleValidate() {\n  if (disabledValidate.value) {\n    disabledValidate.value = false\n\n    return handleValidateEnd(null)\n  }\n\n  if (!props.prop || !formProps.model || validating.value) {\n    return handleValidateEnd(null)\n  }\n\n  validating.value = true\n\n  const value = currentValue.value\n  const useRules = allRules.value\n  const model = formProps.model\n\n  let errors: string[] | null = await asyncValidate(\n    useRules,\n    value,\n    model,\n    isValidateAll.value,\n    locale.value.validateFail,\n  )\n\n  errors = errors.length ? errors : null\n\n  return handleValidateEnd(errors)\n}\n\nfunction handleValidateEnd(errors: string[] | null) {\n  validating.value = false\n\n  if (!errors) {\n    clearError()\n  } else {\n    isError.value = true\n    errorTip.value = Array.isArray(errors) ? errors[0] : errors\n  }\n\n  return errors\n}\n\nfunction handleLabelClick() {\n  emitter.emit('focus')\n}\n\nconst isNative = computed(() => !!(formProps.action && formProps.method))\n</script>\n\n<template>\n  <slot v-if=\"props.pure\" v-bind=\"defaultSlotParams\"></slot>\n  <Column\n    v-else\n    v-bind=\"$attrs\"\n    :class=\"className\"\n    :inherit=\"props.inherit\"\n    role=\"group\"\n    tag=\"div\"\n    :span=\"props.span\"\n    :offset=\"props.offset\"\n    :push=\"props.push\"\n    :pull=\"props.pull\"\n    :order=\"props.order\"\n    :xs=\"props.xs\"\n    :sm=\"props.sm\"\n    :md=\"props.md\"\n    :lg=\"props.lg\"\n    :xl=\"props.xl\"\n    :xxl=\"props.xxl\"\n    :flex=\"props.flex\"\n    :use-flex=\"columnFlex\"\n  >\n    <input\n      v-if=\"isNative\"\n      type=\"hidden\"\n      :name=\"props.name || props.prop\"\n      :value=\"inputValue\"\n      style=\"display: none\"\n    />\n    <span\n      v-if=\"hasLabel && labelAlign !== 'top' && !labelWidthDefined\"\n      ref=\"placeholder\"\n      :class=\"nh.be('placeholder')\"\n      role=\"none\"\n    >\n      <Icon v-if=\"props.help || slots.help\" v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\n      <slot name=\"label\">\n        {{ props.label + (formProps.labelSuffix || '') }}\n      </slot>\n    </span>\n    <label\n      v-if=\"hasLabel\"\n      :id=\"labelId\"\n      :class=\"nh.be('label')\"\n      :style=\"{ width: labelAlign !== 'top' ? `${computedLabelWidth}px` : undefined }\"\n      :for=\"props.htmlFor || props.prop\"\n      @click=\"handleLabelClick\"\n    >\n      <Tooltip v-if=\"props.help || slots.help\" transfer>\n        <template #trigger>\n          <Icon v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\n        </template>\n        <slot name=\"help\">\n          <div :class=\"nh.be('help-tip')\">\n            {{ props.help }}\n          </div>\n        </slot>\n      </Tooltip>\n      <slot name=\"label\">\n        {{ props.label + (formProps.labelSuffix || '') }}\n      </slot>\n    </label>\n    <div\n      :class=\"{\n        [nh.be('control')]: true,\n        [nh.bem('control', 'no-label')]: !hasLabel,\n        [nh.bem('control', 'action')]: props.action\n      }\"\n      role=\"alert\"\n      aria-relevant=\"all\"\n      :style=\"controlStyle\"\n    >\n      <slot v-bind=\"defaultSlotParams\"></slot>\n      <Transition :name=\"props.errorTransition\">\n        <div v-if=\"!props.hideErrorTip && isError\" :class=\"nh.be('error-tip')\">\n          <slot name=\"error\" :tip=\"errorTip\">\n            {{ errorTip }}\n          </slot>\n        </div>\n      </Transition>\n    </div>\n  </Column>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\n\nimport { computed, inject, toRef } from 'vue'\n\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isPromise } from '@vexip-ui/utils'\nimport { formResetProps } from './props'\nimport { FORM_ACTIONS } from './symbol'\n\ndefineOptions({ name: 'FormReset' })\n\nconst _props = defineProps(formResetProps)\nconst props = useProps('formReset', _props, {\n  size: null,\n  locale: null,\n  type: 'default',\n  label: null,\n  dashed: null,\n  text: null,\n  simple: null,\n  ghost: null,\n  disabled: null,\n  loading: null,\n  circle: null,\n  loadingIcon: createIconProp(),\n  loadingEffect: null,\n  icon: createIconProp(),\n  color: null,\n  buttonType: null,\n  block: null,\n  onBeforeReset: {\n    default: null,\n    isFunc: true,\n  },\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  icon?: () => any,\n  loading?: () => any,\n}>()\n\nconst actions = inject(FORM_ACTIONS, null)\n\nconst nh = useNameHelper('form')\nconst locale = useLocale('form', toRef(props, 'locale'))\n\nconst isInherit = computed(() => !!actions || props.inherit)\n\nasync function handleReset() {\n  if (props.disabled) return\n\n  let result: unknown = true\n\n  if (typeof props.onBeforeReset === 'function') {\n    result = props.onBeforeReset()\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    actions?.reset()\n    emitEvent(props.onReset)\n  }\n}\n</script>\n\n<template>\n  <Button\n    v-bind=\"$attrs\"\n    :inherit=\"isInherit\"\n    :class=\"nh.be('reset')\"\n    :size=\"props.size\"\n    :type=\"props.type\"\n    :simple=\"props.simple\"\n    :ghost=\"props.ghost\"\n    :dashed=\"props.dashed\"\n    :text=\"props.text\"\n    :disabled=\"props.disabled\"\n    :loading=\"props.loading\"\n    :circle=\"props.circle\"\n    :loading-icon=\"props.loadingIcon\"\n    :loading-effect=\"props.loadingEffect\"\n    :icon=\"props.icon\"\n    :color=\"props.color\"\n    :button-type=\"props.buttonType\"\n    :block=\"props.block\"\n    :tag=\"props.tag\"\n    @click=\"handleReset\"\n  >\n    <slot>\n      {{ props.label || locale.reset }}\n    </slot>\n    <template v-if=\"slots.icon\" #icon>\n      <slot name=\"icon\"></slot>\n    </template>\n    <template v-if=\"slots.loading\" #loading>\n      <slot name=\"loading\"></slot>\n    </template>\n  </Button>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\n\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useSetTimeout } from '@vexip-ui/hooks'\nimport { isPromise } from '@vexip-ui/utils'\nimport { formSubmitProps } from './props'\nimport { FORM_ACTIONS, FORM_PROPS } from './symbol'\n\ndefineOptions({ name: 'FormSubmit' })\n\nconst _props = defineProps(formSubmitProps)\nconst props = useProps('form-submit', _props, {\n  size: null,\n  locale: null,\n  type: 'primary',\n  label: null,\n  dashed: null,\n  text: null,\n  simple: null,\n  ghost: null,\n  disabled: null,\n  circle: null,\n  loadingIcon: createIconProp(),\n  loadingEffect: null,\n  icon: createIconProp(),\n  color: null,\n  buttonType: null,\n  block: null,\n  onBeforeSubmit: {\n    default: null,\n    isFunc: true,\n  },\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  icon?: () => any,\n  loading?: () => any,\n}>()\n\nconst fieldActions = inject(FIELD_OPTIONS, null)\n\nconst formProps = inject(FORM_PROPS, {})\nconst actions = inject(FORM_ACTIONS, null)\n\nconst nh = useNameHelper('form')\nconst locale = useLocale('form', toRef(props, 'locale'))\n\nconst { timer } = useSetTimeout()\n\nconst loading = ref(false)\n\nconst submit = ref<HTMLElement>()\n\nconst isNative = computed(() => formProps.method && formProps.action)\nconst isInherit = computed(() => !!actions || props.inherit)\nconst isLoading = computed(() => {\n  return loading.value || (fieldActions ? fieldActions.loading.value : false)\n})\n\ndefineExpose({ submit, isNative, isLoading })\n\nasync function handleSubmit() {\n  if (props.disabled || loading.value || !actions) return\n\n  loading.value = true\n\n  const errors = await actions.validate()\n\n  if (errors.length) {\n    emitEvent(props.onError, errors)\n  } else {\n    let result: unknown = true\n\n    if (typeof props.onBeforeSubmit === 'function') {\n      result = props.onBeforeSubmit()\n\n      if (isPromise(result)) {\n        result = await result\n      }\n    }\n\n    if (result !== false) {\n      emitEvent(props.onSubmit)\n\n      if (isNative.value) {\n        submit.value?.click()\n      }\n    }\n  }\n\n  timer.loading = setTimeout(() => {\n    loading.value = false\n  }, 300)\n}\n</script>\n\n<template>\n  <Button\n    v-bind=\"$attrs\"\n    :inherit=\"isInherit\"\n    :class=\"nh.be('submit')\"\n    :size=\"props.size\"\n    :type=\"props.type\"\n    :simple=\"props.simple\"\n    :ghost=\"props.ghost\"\n    :dashed=\"props.dashed\"\n    :text=\"props.text\"\n    :disabled=\"props.disabled\"\n    :loading=\"isLoading\"\n    :circle=\"props.circle\"\n    :loading-icon=\"props.loadingIcon\"\n    :loading-effect=\"props.loadingEffect\"\n    :icon=\"props.icon\"\n    :color=\"props.color\"\n    :button-type=\"props.buttonType\"\n    :block=\"props.block\"\n    :tag=\"props.tag\"\n    @click=\"handleSubmit\"\n  >\n    <slot>\n      {{ props.label || locale.submit }}\n    </slot>\n    <template v-if=\"slots.icon\" #icon>\n      <slot name=\"icon\"></slot>\n    </template>\n    <template v-if=\"slots.loading\" #loading>\n      <slot name=\"loading\"></slot>\n    </template>\n    <button\n      v-if=\"isNative\"\n      ref=\"submit\"\n      type=\"submit\"\n      style=\"display: none\"\n      @click.stop\n    ></button>\n  </Button>\n</template>\n","import { buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { FullScreenType } from './symbol'\n\nexport const fullScreenProps = buildProps({\n  tag: String,\n  onToggle: eventProp<(full: false | FullScreenType) => void>(),\n})\n\nexport type FullScreenProps = ExtractPropTypes<typeof fullScreenProps>\nexport type FullScreenCProps = ConfigurableProps<FullScreenProps, 'model'>\n","<script setup lang=\"ts\">\nimport { Portal } from '@/components/portal'\n\nimport { computed, ref, watch } from 'vue'\n\nimport { emitEvent, useId, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useFullScreen } from '@vexip-ui/hooks'\nimport { fullScreenProps } from './props'\n// import { getIndexId } from './symbol'\n\nimport type { FullScreenSlotParams, FullScreenType } from './symbol'\n\ndefineOptions({ name: 'FullScreen' })\n\nconst _props = defineProps(fullScreenProps)\nconst props = useProps('fullScreen', _props, {\n  tag: 'div',\n})\n\ndefineSlots<{ default: (params: FullScreenSlotParams) => any }>()\n\nconst nh = useNameHelper('full-screen')\n\nconst placeId = useId()\n\nconst isEntered = ref(false)\nconst zIndex = ref<number>()\nconst fullType = ref<FullScreenType>()\n\nconst full = computed(() => isEntered.value && fullType.value!)\nconst className = computed(() => [nh.b(), nh.bs('vars'), { [nh.bm('full')]: full.value }])\nconst transferTo = computed(() => (fullType.value === 'window' ? 'body' : ''))\n\nconst {\n  enter: browserEnter,\n  exit: browserExit,\n  target: wrapper,\n  full: browserFull,\n} = useFullScreen()\n\nwatch(browserFull, value => {\n  if (!value) {\n    isEntered.value = false\n    fullType.value = undefined\n  }\n})\nwatch(full, value => {\n  emitEvent(props.onToggle, value)\n})\n\nasync function enter(type: FullScreenType = 'window', customZIndex?: number) {\n  if (isEntered.value) {\n    await exit()\n  }\n\n  if (type !== 'window') {\n    await browserEnter()\n  }\n\n  isEntered.value = true\n  zIndex.value = customZIndex\n  fullType.value = type !== 'window' ? 'browser' : 'window'\n}\n\nasync function exit() {\n  await browserExit()\n\n  zIndex.value = undefined\n  isEntered.value = false\n  fullType.value = undefined\n}\n\nasync function toggle(type: FullScreenType = 'window', zIndex?: number) {\n  if (isEntered.value) {\n    if (fullType.value !== type) {\n      await enter(type, zIndex)\n    } else {\n      await exit()\n    }\n  } else {\n    await enter(type, zIndex)\n  }\n}\n\ndefineExpose({\n  full,\n  placeId,\n  wrapper,\n  enter,\n  exit,\n  toggle,\n})\n</script>\n\n<template>\n  <Portal :to=\"transferTo\">\n    <component\n      :is=\"props.tag || 'div'\"\n      v-bind=\"$attrs\"\n      ref=\"wrapper\"\n      :class=\"className\"\n      :style=\"{ [nh.cv('z-index')]: zIndex }\"\n    >\n      <slot\n        :full=\"full\"\n        :place-id=\"placeId\"\n        :enter=\"enter\"\n        :exit=\"exit\"\n        :toggle=\"toggle\"\n      ></slot>\n      <div :id=\"placeId\" :class=\"nh.be('place')\" role=\"none\"></div>\n    </component>\n  </Portal>\n</template>\n","import { computed, defineComponent, h, provide, reactive, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { gridProps } from './props'\nimport { GRID_STATE } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { GridAlign, GridJustify, LayoutProp } from './symbol'\n\nconst numberRE = /^\\d+$/\n\nconst justifyList = Object.freeze<GridJustify[]>([\n  'start',\n  'end',\n  'center',\n  'space-around',\n  'space-between',\n  'space-evenly',\n])\nconst alignList = Object.freeze<GridAlign[]>(['top', 'middle', 'bottom', 'stretch'])\n\nexport default defineComponent({\n  name: 'Grid',\n  props: gridProps,\n  setup(_props, { slots }) {\n    const props = useProps('grid', _props, {\n      tag: 'div',\n      gap: 0,\n      rows: 'none',\n      columns: 24,\n      autoRows: 'auto',\n      autoColumns: 'auto',\n      dense: false,\n      justify: {\n        default: 'start',\n        validator: value => justifyList.includes(value),\n      },\n      align: {\n        default: 'stretch',\n        validator: value => alignList.includes(value),\n      },\n      cellFlex: false,\n    })\n\n    const nh = useNameHelper('grid')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bm(props.justify)]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.align)]: props.align !== 'stretch',\n        [nh.bm('dense')]: props.dense,\n      }\n    })\n    const style = computed(() => {\n      const style: CSSProperties = {}\n\n      if (props.gap) {\n        style.gap = Array.isArray(props.gap)\n          ? `${props.gap[0]}px ${props.gap[1]}px`\n          : `${props.gap}px`\n      }\n\n      style.gridTemplateColumns = parseSizeLayout(props.columns)\n\n      if (props.rows !== 'none') {\n        style.gridTemplateRows = parseSizeLayout(props.rows)\n      }\n\n      if (props.autoRows !== 'auto') {\n        style.gridAutoRows = parseAutoLayout(props.autoRows)\n      }\n\n      if (props.autoColumns !== 'auto') {\n        style.gridAutoColumns = parseAutoLayout(props.autoColumns)\n      }\n\n      return style\n    })\n    const cellFlex = computed(() => {\n      if (props.cellFlex === true) {\n        return {\n          justify: 'start',\n          align: 'top',\n        } as const\n      } else if (props.cellFlex) {\n        return {\n          justify: 'start',\n          align: 'top',\n          ...props.cellFlex,\n        } as const\n      }\n\n      return false\n    })\n\n    provide(GRID_STATE, reactive({ cellFlex, columns: toRef(props, 'columns') }))\n\n    function parseSizeLayout(value: LayoutProp) {\n      if (typeof value === 'number') {\n        return `repeat(${value}, 1fr)`\n      }\n\n      if (typeof value === 'string') {\n        return numberRE.test(value.trim()) ? `repeat(${value}, 1fr)` : value\n      }\n\n      if (Array.isArray(value)) {\n        return value\n          .map(item => {\n            if (typeof item === 'number') {\n              return `${item}fr`\n            }\n\n            if (typeof item === 'string') {\n              return numberRE.test(item.trim()) ? `${item}fr` : item\n            }\n\n            return item\n          })\n          .join(' ')\n      }\n\n      return value\n    }\n\n    function parseAutoLayout(value: LayoutProp) {\n      if (typeof value === 'number') {\n        return `${value}fr`\n      }\n\n      if (typeof value === 'string') {\n        return numberRE.test(value.trim()) ? `repeat(${value}, 1fr)` : value\n      }\n\n      if (Array.isArray(value)) {\n        return value\n          .map(item => {\n            if (typeof item === 'number') {\n              return `${item}fr`\n            }\n\n            if (typeof item === 'string') {\n              return numberRE.test(item.trim()) ? `${item}fr` : item\n            }\n\n            return item\n          })\n          .join(' ')\n      }\n\n      return value\n    }\n\n    return () =>\n      h(\n        props.tag || 'div',\n        {\n          class: className.value,\n          style: style.value,\n        },\n        {\n          default: () => slots.default?.(),\n        },\n      )\n  },\n})\n","import { booleanProp, buildProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const highlightProps = buildProps({\n  content: String,\n  keyWords: Array as PropType<string[]>,\n  ignoreCase: booleanProp,\n})\n\nexport type HighlightProps = ExtractPropTypes<typeof highlightProps>\nexport type HighlightCProps = ConfigurableProps<HighlightProps, 'content' | 'keyWords'>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { highlightProps } from './props'\n\ndefineOptions({ name: 'Highlight' })\n\nconst _props = defineProps(highlightProps)\nconst props = useProps('highlight', _props, {\n  content: {\n    default: '',\n    static: true,\n  },\n  keyWords: {\n    default: () => [],\n    static: true,\n  },\n  ignoreCase: false,\n})\n\nconst nh = useNameHelper('highlight')\n\nconst splitRE = computed(() => {\n  const keyWords = props.keyWords?.filter(Boolean)\n\n  if (!keyWords?.length) {\n    return null\n  }\n\n  return new RegExp(\n    `(${keyWords.sort((p, n) => n.length - p.length).join('|')})`,\n    `${props.ignoreCase ? 'i' : ''}g`,\n  )\n})\nconst renderTexts = computed(() => {\n  if (!splitRE.value || !props.content) {\n    return [{ isKey: false, text: props.content }]\n  }\n\n  return props.content.split(splitRE.value).map(text => {\n    return { isKey: splitRE.value!.test(text), text }\n  })\n})\n</script>\n\n<template>\n  <div :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\">\n    <template v-for=\"(item, index) in renderTexts\" :key=\"index\">\n      <span v-if=\"item.isKey\" :class=\"nh.be('key-word')\">\n        <slot name=\"light\" :text=\"item.text\">\n          {{ item.text }}\n        </slot>\n      </span>\n      <span v-else>\n        <slot :text=\"item.text\">\n          {{ item.text }}\n        </slot>\n      </span>\n    </template>\n  </div>\n</template>\n","import { booleanNumberProp, booleanProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  ViewerActionLayout,\n  ViewerState,\n  ViewerToolbarAction,\n  ViewerToolbarPlacement,\n} from './symbol'\n\nexport const viewerProps = buildProps({\n  locale: localeProp('viewer'),\n  width: [String, Number],\n  height: [String, Number],\n  moveDisabled: booleanProp,\n  zoomDisabled: booleanProp,\n  zoomDelta: Number,\n  zoomMin: Number,\n  zoomMax: Number,\n  flipDisabled: booleanProp,\n  rotateDisabled: booleanProp,\n  rotateDelta: Number,\n  fullDisabled: booleanProp,\n  toolbarPlacement: String as PropType<ViewerToolbarPlacement>,\n  actions: Array as PropType<ViewerToolbarAction[]>,\n  toolbarFade: booleanNumberProp,\n  noTransition: booleanProp,\n  centerScale: booleanProp,\n  actionLayout: Array as PropType<ViewerActionLayout>,\n  onMoveStart: eventProp<(state: ViewerState) => void>(),\n  onMove: eventProp<(state: ViewerState) => void>(),\n  onMoveEnd: eventProp<(state: ViewerState) => void>(),\n  onWheel: eventProp<(sign: 1 | -1, state: ViewerState) => void>(),\n  onRotate: eventProp<(deg: number, state: ViewerState) => void>(),\n  onFlipX: eventProp<(flip: boolean, state: ViewerState) => void>(),\n  onFlipY: eventProp<(flip: boolean, state: ViewerState) => void>(),\n  onZoom: eventProp<(zoom: number, state: ViewerState) => void>(),\n  onFull: eventProp<(full: boolean, state: ViewerState) => void>(),\n  onReset: eventProp<(state: ViewerState) => void>(),\n})\n\nexport type ViewerProps = ExtractPropTypes<typeof viewerProps>\nexport type ViewerCProps = ConfigurableProps<ViewerProps>\n","import type { ClassType, StyleType } from '@vexip-ui/config'\n\nexport type ViewerToolbarPlacement =\n  | 'top'\n  | 'top-start'\n  | 'top-end'\n  | 'bottom'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'left'\n  | 'left-start'\n  | 'left-end'\n  | 'right'\n  | 'right-start'\n  | 'right-end'\nexport type ViewerPresetAction =\n  | 'rotate-right'\n  | 'rotate-left'\n  | 'flip-x'\n  | 'flip-y'\n  | 'zoom-in'\n  | 'zoom-out'\n  | 'full-screen'\n  | 'full-screen-exit'\n  | 'reset'\nexport type ViewerActionName = ViewerPresetAction | (string & {})\nexport type ViewerActionLayout = ViewerActionName[][]\n\nexport interface ViewerState {\n  x: number,\n  y: number,\n  zoom: number,\n  rotate: number,\n  flipX: boolean,\n  flipY: boolean,\n  full: boolean,\n  moving: boolean,\n  [custom: string]: unknown,\n}\n\nexport interface ViewerToolbarAction {\n  name: string,\n  process: (state: ViewerState) => void,\n  icon?: Record<string, any> | (() => any),\n  iconRenderer?: (data: { state: ViewerState }) => any,\n  class?: ClassType | ((state: ViewerState) => string),\n  title?: string | ((state: ViewerState) => string),\n  iconScale?: number | ((state: ViewerState) => number),\n  iconStyle?: StyleType | ((state: ViewerState) => StyleType),\n  /** @deprecated */\n  divided?: boolean | ((state: ViewerState) => boolean),\n  hidden?: boolean | ((state: ViewerState) => boolean),\n  disabled?: boolean | ((state: ViewerState) => boolean),\n}\n\nexport const enum InternalActionName {\n  RotateRight = 'rotate-right',\n  RotateLeft = 'rotate-left',\n  FlipX = 'flip-x',\n  FlipY = 'flip-y',\n  ZoomIn = 'zoom-in',\n  ZoomOut = 'zoom-out',\n  FullScreen = 'full-screen',\n  Reset = 'reset',\n}\n\nconst defaultActionLayout: ViewerActionLayout = [\n  ['rotate-right', 'rotate-left'],\n  ['flip-x', 'flip-y'],\n  ['zoom-in', 'zoom-out'],\n  ['full-screen'],\n  ['reset'],\n]\n\nfor (let i = 0, len = defaultActionLayout.length; i < len; ++i) {\n  defaultActionLayout[i] = Object.freeze(defaultActionLayout[i]) as any\n}\n\nexport const viewerDefaultActionLayout = Object.freeze(defaultActionLayout) as ViewerActionLayout\n","<script setup lang=\"ts\">\nimport { Divider } from '@/components/divider'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, h, nextTick, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useFullScreen, useModifier, useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { boundRange, callIfFunc, toCssSize, toFixed } from '@vexip-ui/utils'\nimport { viewerProps } from './props'\nimport { InternalActionName, viewerDefaultActionLayout } from './symbol'\n\nimport type { ViewerActionLayout, ViewerState, ViewerToolbarAction } from './symbol'\n\ndefineOptions({ name: 'Viewer' })\n\nconst _props = defineProps(viewerProps)\nconst props = useProps('viewer', _props, {\n  locale: null,\n  width: '100%',\n  height: '100%',\n  moveDisabled: false,\n  zoomDisabled: false,\n  zoomDelta: 0.15,\n  zoomMin: 0.1,\n  zoomMax: Infinity,\n  rotateDisabled: false,\n  rotateDelta: 90,\n  flipDisabled: false,\n  fullDisabled: false,\n  toolbarPlacement: 'bottom',\n  actions: () => [],\n  toolbarFade: false,\n  noTransition: false,\n  centerScale: false,\n  actionLayout: () => [],\n})\n\ndefineSlots<{\n  default: (params: { state: ViewerState }) => any,\n  [action: `action-${string}`]: (params: { state: ViewerState }) => any,\n}>()\n\nconst nh = useNameHelper('viewer')\nconst locale = useLocale('viewer', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst { timer } = useSetTimeout()\nconst toolbarActive = ref(false)\n\nconst zoom = ref(1)\nconst rotate = ref(0)\nconst flipX = ref(false)\nconst flipY = ref(false)\n\nconst viewer = ref<HTMLElement>()\nconst transition = ref<HTMLElement>()\n\nconst { supported: fullSupported, full, enter: enterFull, exit: exitFull } = useFullScreen(viewer)\nconst {\n  target: container,\n  x: currentLeft,\n  y: currentTop,\n  moving,\n} = useMoving({\n  onStart: (_, event) => {\n    if (props.moveDisabled || event.button > 0) {\n      return false\n    }\n\n    emitEvent(props.onMoveStart, getState())\n  },\n  onMove: () => {\n    emitEvent(props.onMoveStart, getState())\n  },\n  onEnd: () => {\n    emitEvent(props.onMoveStart, getState())\n  },\n})\n\nconst state = reactive({\n  zoom,\n  rotate,\n  flipX,\n  flipY,\n  full,\n  moving,\n  x: currentLeft,\n  y: currentTop,\n}) as ViewerState\n\nconst zoomOrigin = {\n  x: 0,\n  y: 0,\n}\n\nuseModifier({\n  target: viewer,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (moving.value) return\n\n    if (modifier.up || modifier.down || modifier.left || modifier.right) {\n      event.preventDefault()\n\n      const current = modifier.up || modifier.down ? currentTop : currentLeft\n      const step = modifier.up || modifier.left ? -10 : 10\n\n      current.value += event.ctrlKey ? 5 * step : step\n\n      modifier.resetAll()\n    }\n  },\n})\n\nfunction getState() {\n  return state\n}\n\nfunction getActionProp<\n  K extends Exclude<keyof ViewerToolbarAction, 'name' | 'icon' | 'iconRenderer' | 'process'>,\n>(action: ViewerToolbarAction, prop: K) {\n  return callIfFunc(action[prop] as any, state) as Exclude<\n    ViewerToolbarAction[K],\n    (...args: any) => any\n  >\n}\n\nfunction getActionClass(name: string) {\n  return nh.be(name)\n}\n\nconst internalActions: ViewerToolbarAction[] = [\n  {\n    name: InternalActionName.RotateRight,\n    process: () => handleRotate(props.rotateDelta),\n    iconRenderer: () => h(Icon, icons.value.rotateRight),\n    class: getActionClass(InternalActionName.RotateRight),\n    title: () => locale.value.rotateRight,\n    hidden: () => props.rotateDisabled,\n  },\n  {\n    name: InternalActionName.RotateLeft,\n    process: () => handleRotate(-1 * props.rotateDelta),\n    iconRenderer: () => h(Icon, icons.value.rotateLeft),\n    class: getActionClass(InternalActionName.RotateLeft),\n    title: () => locale.value.rotateLeft,\n    hidden: () => props.rotateDisabled,\n  },\n  {\n    name: InternalActionName.FlipX,\n    process: () => toggleFlipX(),\n    iconRenderer: () => h(Icon, icons.value.flipX),\n    class: getActionClass(InternalActionName.FlipX),\n    title: () => locale.value.flipHorizontal,\n    hidden: () => props.flipDisabled,\n  },\n  {\n    name: InternalActionName.FlipY,\n    process: () => toggleFlipY(),\n    iconRenderer: () => h(Icon, icons.value.flipY),\n    class: getActionClass(InternalActionName.FlipY),\n    title: () => locale.value.flipVertical,\n    hidden: () => props.flipDisabled,\n  },\n  {\n    name: InternalActionName.ZoomIn,\n    process: () => handleZoom(props.zoomDelta),\n    iconRenderer: () => h(Icon, icons.value.zoomIn),\n    class: getActionClass(InternalActionName.ZoomIn),\n    title: () => locale.value.zoomIn,\n    hidden: () => props.zoomDisabled,\n  },\n  {\n    name: InternalActionName.ZoomOut,\n    process: () => handleZoom(-1 * props.zoomDelta),\n    iconRenderer: () => h(Icon, icons.value.zoonOut),\n    class: getActionClass(InternalActionName.ZoomOut),\n    title: () => locale.value.zoomOut,\n    hidden: () => props.zoomDisabled,\n  },\n  {\n    name: InternalActionName.FullScreen,\n    process: () => toggleFull(!full.value),\n    iconRenderer: () => h(Icon, full.value ? icons.value.resetScreen : icons.value.fullScreen),\n    class: getActionClass(InternalActionName.FullScreen),\n    title: () => (full.value ? locale.value.fullScreenExit : locale.value.fullScreen),\n    hidden: () => props.fullDisabled,\n  },\n  {\n    name: InternalActionName.Reset,\n    process: () => handleReset(),\n    iconRenderer: () => h(Icon, icons.value.refresh),\n    class: getActionClass(InternalActionName.Reset),\n    title: () => locale.value.reset,\n  },\n]\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('draggable')]: !props.moveDisabled,\n    [nh.bm('resizable')]: !props.zoomDisabled,\n    [nh.bm('full')]: full.value,\n    [nh.bm('moving')]: moving.value,\n    [nh.bm('static')]: props.noTransition,\n  }\n})\nconst style = computed(() => {\n  return {\n    width: toCssSize(props.width),\n    height: toCssSize(props.height),\n  }\n})\nconst toolbarVertical = computed(() => {\n  const [layout] = props.toolbarPlacement.split('-')\n\n  return layout === 'left' || layout === 'right'\n})\nconst toolbarFade = computed(() => {\n  return typeof props.toolbarFade === 'number' ? props.toolbarFade : props.toolbarFade ? 1500 : 0\n})\nconst toolbarClass = computed(() => {\n  return {\n    [nh.be('toolbar')]: true,\n    [nh.bem('toolbar', 'active')]: toolbarFade.value < 300 || toolbarActive.value,\n    [nh.bem('toolbar', props.toolbarPlacement)]: true,\n    [nh.bem('toolbar', 'vertical')]: toolbarVertical.value,\n  }\n})\nconst contentStyle = computed(() => {\n  return {\n    transform: `translate3d(${currentLeft.value}px, ${currentTop.value}px, 0) scale(${zoom.value})`,\n  }\n})\nconst transitionStyle = computed(() => {\n  return {\n    transform: `scaleX(${flipX.value ? -1 : 1}) scaleY(${flipY.value ? -1 : 1}) rotate(${\n      rotate.value\n    }deg)`,\n  }\n})\nconst allActions = computed(() => {\n  const map = new Map<string, ViewerToolbarAction>()\n  const actions: ViewerToolbarAction[][] = []\n\n  internalActions.concat(props.actions).forEach(action => {\n    if (action.name) {\n      map.set(action.name, action)\n    }\n  })\n\n  let layout: ViewerActionLayout\n\n  if (!props.actionLayout?.length) {\n    layout = [...viewerDefaultActionLayout]\n\n    if (props.actions.length) {\n      layout.push(props.actions.map(action => action.name))\n    }\n  } else {\n    layout = props.actionLayout\n  }\n\n  for (const names of layout) {\n    const group = names.map(name => map.get(name)!).filter(Boolean)\n\n    group.length && actions.push(group)\n  }\n\n  return actions\n})\n\ndefineExpose({\n  moving,\n  fullSupported,\n  state,\n  viewer,\n  container,\n  transition,\n  handleRotate,\n  toggleFlipHorizontal: toggleFlipX,\n  toggleFlipVertical: toggleFlipY,\n  handleZoom,\n  toggleFull,\n  handleReset,\n})\n\nonMounted(() => {\n  if (container.value) {\n    const rect = container.value.getBoundingClientRect()\n\n    zoomOrigin.x = rect.left + rect.width * 0.5\n    zoomOrigin.y = rect.top + rect.height * 0.5\n  }\n})\n\nfunction handleWheel(event: WheelEvent) {\n  event.stopPropagation()\n  event.preventDefault()\n\n  const sign = event.deltaY > 0 ? -1 : 1\n\n  zoomOrigin.x = event.clientX\n  zoomOrigin.y = event.clientY\n\n  emitEvent(props.onWheel, sign, state)\n  handleZoom(sign * props.zoomDelta)\n}\n\nfunction handleRotate(deg: number, emit = true) {\n  if (props.rotateDisabled) return\n\n  rotate.value += deg\n\n  if (props.noTransition && rotate.value % 360 === 0) {\n    rotate.value = 0\n  }\n\n  emit && emitEvent(props.onRotate, deg, state)\n\n  if (props.noTransition) {\n    nextTick(normalizeProps)\n  }\n}\n\nfunction toggleFlipX(target = !flipX.value, emit = true) {\n  if (props.flipDisabled) return\n\n  flipX.value = target\n  emit && emitEvent(props.onFlipX, target, state)\n}\n\nfunction toggleFlipY(target = !flipY.value, emit = true) {\n  if (props.flipDisabled) return\n\n  flipY.value = target\n  emit && emitEvent(props.onFlipY, target, state)\n}\n\nfunction handleZoom(ratio: number, emit = true) {\n  if (props.zoomDisabled || !container.value || moving.value) return\n\n  const containerRect = container.value.getBoundingClientRect()\n  const { x, y } = zoomOrigin\n  const { offsetWidth, offsetHeight } = container.value\n  const prevZoom = zoom.value\n\n  zoom.value = toFixed(boundRange(zoom.value + ratio, props.zoomMin, props.zoomMax), 5)\n\n  const delta = zoom.value / prevZoom - 1\n  const originX = delta * offsetWidth * 0.5\n  const originY = delta * offsetHeight * 0.5\n\n  if (!props.centerScale) {\n    currentLeft.value -= delta * (x - containerRect.left - currentLeft.value) - originX\n    currentTop.value -= delta * (y - containerRect.top - currentTop.value) - originY\n  }\n\n  emit && emitEvent(props.onZoom, zoom.value, state)\n}\n\nasync function toggleFull(isFull = !full.value, emit = true) {\n  isFull ? await enterFull() : await exitFull()\n\n  emit && emitEvent(props.onFull, isFull, state)\n}\n\nfunction handleReset(emit = true) {\n  currentTop.value = 0\n  currentLeft.value = 0\n  rotate.value = 0\n  flipX.value = false\n  flipY.value = false\n  zoom.value = 1\n\n  emit && emitEvent(props.onReset, state)\n}\n\nfunction normalizeProps() {\n  if (props.noTransition) {\n    if (rotate.value % 360 === 0) {\n      rotate.value = 0\n    }\n\n    return\n  }\n\n  const queue: Array<() => void> = []\n\n  if (rotate.value % 360 === 0) {\n    queue.push(\n      () => {\n        if (transition.value) {\n          transition.value.style.transitionDuration = '0ms'\n        }\n      },\n      () => {\n        rotate.value = 0\n      },\n      () => {\n        if (transition.value) {\n          transition.value.style.transitionDuration = ''\n        }\n      },\n    )\n  }\n\n  const run = () => {\n    queue.shift()?.()\n    queue.length && requestAnimationFrame(run)\n  }\n\n  run()\n}\n\nfunction handleEnterToolbar() {\n  clearTimeout(timer.toolbarFade)\n  toolbarActive.value = true\n}\n\nfunction handleLeaveToolbar() {\n  clearTimeout(timer.toolbarFade)\n\n  if (toolbarFade.value >= 300) {\n    timer.toolbarFade = setTimeout(() => {\n      toolbarActive.value = false\n    }, toolbarFade.value)\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"viewer\"\n    :class=\"className\"\n    tabindex=\"0\"\n    :style=\"style\"\n  >\n    <div ref=\"container\" :class=\"nh.be('container')\" @wheel=\"handleWheel\">\n      <div :class=\"nh.be('content')\" :style=\"contentStyle\">\n        <div\n          ref=\"transition\"\n          :class=\"nh.be('transition')\"\n          :style=\"transitionStyle\"\n          @transitionend=\"normalizeProps\"\n        >\n          <slot :state=\"state\"></slot>\n        </div>\n      </div>\n    </div>\n    <div\n      :class=\"toolbarClass\"\n      role=\"toolbar\"\n      @mouseenter=\"handleEnterToolbar\"\n      @mouseleave=\"handleLeaveToolbar\"\n    >\n      <template v-for=\"(group, index) in allActions\" :key=\"index\">\n        <template v-for=\"action in group\" :key=\"action.name\">\n          <template v-if=\"!getActionProp(action, 'hidden')\">\n            <button\n              type=\"button\"\n              :class=\"[\n                {\n                  [nh.be('action')]: true,\n                  [nh.bem('action', 'disabled')]: getActionProp(action, 'disabled'),\n                },\n                getActionProp(action, 'class'),\n              ]\"\n              :title=\"getActionProp(action, 'title')\"\n              @click.stop=\"action.process(state)\"\n            >\n              <slot :name=\"`action-${action.name}`\" :state=\"state\">\n                <Renderer\n                  v-if=\"action.iconRenderer\"\n                  :renderer=\"action.iconRenderer\"\n                  :data=\"state\"\n                ></Renderer>\n                <Icon\n                  v-else-if=\"action.icon\"\n                  :icon=\"action.icon\"\n                  :style=\"getActionProp(action, 'iconStyle')\"\n                  :scale=\"getActionProp(action, 'iconScale') || 1\"\n                ></Icon>\n                <template v-else>\n                  {{ action.name }}\n                </template>\n              </slot>\n            </button>\n          </template>\n        </template>\n        <Divider\n          v-if=\"index !== allActions.length - 1\"\n          inherit\n          :vertical=\"!toolbarVertical\"\n        ></Divider>\n      </template>\n    </div>\n  </div>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ViewerProps } from '@/components/viewer'\nimport type {\n  ImageGroupSlots,\n  ImageObjectFit,\n  ImageSkeletonProps,\n  ImageSlots,\n  ImageViewerSlots,\n} from './symbol'\n\nexport const imageProps = buildProps({\n  src: String,\n  fallbackSrc: String,\n  alt: String,\n  fit: String as PropType<ImageObjectFit>,\n  width: [String, Number],\n  height: [String, Number],\n  imgAttrs: Object as PropType<Record<string, any>>,\n  lazy: booleanProp,\n  root: [String, Object, Function] as PropType<unknown>,\n  rootMargin: String,\n  preview: booleanProp,\n  skeleton: {\n    type: [Boolean, Object] as PropType<boolean | ImageSkeletonProps>,\n    default: null,\n  },\n  placeholder: String,\n  errorTip: String,\n  radius: Number,\n  border: booleanStringProp,\n  previewSrc: String,\n  viewerTransfer: booleanStringProp,\n  viewerProps: Object as PropType<ViewerProps>,\n  slots: Object as PropType<ImageSlots>,\n  onLoad: eventProp<(event: Event) => void>(),\n  onError: eventProp<(event: Event) => void>(),\n  onPreview: eventProp<(src: string) => void>(),\n})\n\nexport type ImageProps = ExtractPropTypes<typeof imageProps>\nexport type ImageCProps = ConfigurableProps<ExtractPropTypes<typeof imageProps>, 'src'>\n\nexport const imageGroupProps = buildProps({\n  showAll: booleanProp,\n  preview: booleanProp,\n  viewerTransfer: booleanStringProp,\n  slots: Object as PropType<ImageGroupSlots>,\n  onPreview: eventProp<(src: string, srcList: string[]) => void>(),\n})\n\nexport type ImageGroupProps = ExtractPropTypes<typeof imageGroupProps>\nexport type ImageGroupCProps = ConfigurableProps<ExtractPropTypes<typeof imageGroupProps>>\n\nexport const imageViewerProps = buildProps({\n  active: booleanProp,\n  index: Number,\n  srcList: [String, Array] as PropType<string | string[]>,\n  transfer: booleanStringProp,\n  viewerProps: Object as PropType<ViewerProps>,\n  slots: Object as PropType<ImageViewerSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onChange: eventProp<(index: number, src: string) => void>(),\n  onPrev: eventProp<(index: number, src: string) => void>(),\n  onNext: eventProp<(index: number, src: string) => void>(),\n  onClose: eventProp(),\n  onShow: eventProp(),\n  onHide: eventProp(),\n})\n\nexport type ImageViewerProps = ExtractPropTypes<typeof imageViewerProps>\nexport type ImageViewerCProps = ConfigurableProps<ExtractPropTypes<typeof imageViewerProps>, 'srcs'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\nimport { Viewer } from '@/components/viewer'\n\nimport { computed, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { boundRange, ensureArray, isDefined } from '@vexip-ui/utils'\nimport { imageViewerProps } from './props'\n\nimport type { ImageViewerSlots } from './symbol'\n\ndefineOptions({ name: 'ImageViewer' })\n\nconst _props = defineProps(imageViewerProps)\nconst props = useProps('imageViewer', _props, {\n  active: false,\n  index: 0,\n  srcList: {\n    default: '',\n    static: true,\n  },\n  transfer: false,\n  viewerProps: () => ({}),\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active', 'update:index'])\n\ndefineSlots<ImageViewerSlots>()\n\nconst nh = useNameHelper('image-viewer')\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(props.index)\n\nconst viewer = ref<InstanceType<typeof Viewer>>()\n\nconst className = computed(() => {\n  return [nh.b(), nh.ns('image-vars'), props.inherit && nh.bm('inherit')]\n})\nconst srcArray = computed(() => ensureArray(isDefined(props.srcList) ? props.srcList : ''))\nconst prevDisabled = computed(() => currentIndex.value <= 0)\nconst nextDisabled = computed(() => currentIndex.value >= srcArray.value.length - 1)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  },\n)\nwatch(\n  () => props.index,\n  value => {\n    currentIndex.value = value\n  },\n)\nwatch(() => srcArray.value.length, verifyIndex)\n\ndefineExpose({\n  currentActive,\n  currentIndex,\n  prevDisabled,\n  nextDisabled,\n  viewer,\n})\n\nfunction setActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nfunction verifyIndex() {\n  currentIndex.value = boundRange(currentIndex.value, 0, srcArray.value.length - 1)\n}\n\nfunction handleChange() {\n  const value = currentIndex.value\n\n  viewer.value?.handleReset()\n  emit('update:index', value)\n  emitEvent(props.onChange, value, srcArray.value[value])\n}\n\nfunction handlePrev() {\n  if (prevDisabled.value) return\n\n  const prev = currentIndex.value\n\n  currentIndex.value--\n  verifyIndex()\n  currentIndex.value !== prev && handleChange()\n  emitEvent(props.onPrev, currentIndex.value, srcArray.value[currentIndex.value])\n}\n\nfunction handleNext() {\n  if (nextDisabled.value) return\n\n  const prev = currentIndex.value\n\n  currentIndex.value++\n  verifyIndex()\n  currentIndex.value !== prev && handleChange()\n  emitEvent(props.onNext, currentIndex.value, srcArray.value[currentIndex.value])\n}\n\nfunction handleClose() {\n  setActive(false)\n  emitEvent(props.onClose)\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n</script>\n\n<template>\n  <Masker\n    v-slot=\"{ show }\"\n    :active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    closable\n    auto-remove\n    :transfer=\"props.transfer\"\n    @show=\"handleShow\"\n    @hide=\"handleHide\"\n    @toggle=\"setActive\"\n  >\n    <div v-show=\"show\" :class=\"nh.be('wrapper')\">\n      <Viewer v-bind=\"props.viewerProps\" ref=\"viewer\">\n        <slot :src=\"srcArray[currentIndex]\">\n          <Renderer :renderer=\"props.slots.default\" :data=\"{ src: srcArray[currentIndex] }\">\n            <img :src=\"srcArray[currentIndex]\" />\n          </Renderer>\n        </slot>\n      </Viewer>\n      <template v-if=\"srcArray.length > 1\">\n        <button\n          type=\"button\"\n          :class=\"[nh.be('prev'), prevDisabled && nh.bem('prev', 'disabled')]\"\n          @click.stop=\"handlePrev\"\n        >\n          <slot name=\"prev\" :disabled=\"prevDisabled\">\n            <Renderer :renderer=\"props.slots.prev\" :data=\"{ disabled: prevDisabled }\">\n              <div :class=\"nh.be('prev-handler')\">\n                <Icon\n                  v-bind=\"icons.angleLeft\"\n                  :scale=\"+(icons.angleLeft.scale || 1) * 1.4\"\n                  label=\"prev\"\n                ></Icon>\n              </div>\n            </Renderer>\n          </slot>\n        </button>\n        <button\n          type=\"button\"\n          :class=\"[nh.be('next'), nextDisabled && nh.bem('next', 'disabled')]\"\n          @click.stop=\"handleNext\"\n        >\n          <slot name=\"next\" :disabled=\"nextDisabled\">\n            <Renderer :renderer=\"props.slots.next\" :data=\"{ disabled: nextDisabled }\">\n              <div :class=\"nh.be('next-handler')\">\n                <Icon\n                  v-bind=\"icons.angleRight\"\n                  :scale=\"+(icons.angleRight.scale || 1) * 1.4\"\n                  label=\"next\"\n                ></Icon>\n              </div>\n            </Renderer>\n          </slot>\n        </button>\n      </template>\n      <button type=\"button\" :class=\"nh.be('close')\" @click.stop=\"handleClose\">\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.close\">\n            <div :class=\"nh.be('close-handler')\">\n              <Icon\n                v-bind=\"icons.close\"\n                :scale=\"+(icons.close.scale || 1) * 1.4\"\n                label=\"close\"\n              ></Icon>\n            </div>\n          </Renderer>\n        </slot>\n      </button>\n    </div>\n  </Masker>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, iconProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const skeletonProps = buildProps({\n  size: sizeProp,\n  width: [Number, String],\n  height: [Number, String],\n  repeat: Number,\n  tag: String,\n  activated: booleanProp,\n  image: booleanProp,\n  imageIcon: iconProp,\n  iconScale: Number,\n  round: booleanProp,\n  circle: booleanProp,\n  block: booleanProp,\n  spread: Number,\n  loading: booleanProp,\n})\n\nexport type SkeletonProps = ExtractPropTypes<typeof skeletonProps>\nexport type SkeletonCProps = ConfigurableProps<SkeletonProps>\n\nexport const skeletonGroupProps = buildProps({\n  size: sizeProp,\n  tag: booleanStringProp,\n  itemTag: String,\n  activated: booleanProp,\n  round: booleanProp,\n  circle: booleanProp,\n  block: booleanProp,\n  loading: booleanProp,\n})\n\nexport type SkeletonGroupProps = ExtractPropTypes<typeof skeletonGroupProps>\nexport type SkeletonGroupCProps = ConfigurableProps<SkeletonGroupProps>\n","import type { InjectionKey } from 'vue'\nimport type { ComponentSize } from '@vexip-ui/config'\n\nexport interface GroupState {\n  size: ComponentSize,\n  itemTag: string,\n  activated: boolean,\n  round: boolean,\n  circle: boolean,\n  block: boolean,\n  loading: boolean,\n}\n\nexport const GROUP_STATE = '__VXP_SKELETON_GROUP_STATE' as unknown as InjectionKey<GroupState>\n","import { Icon } from '@/components/icon'\n\nimport { computed, defineComponent, inject, renderSlot } from 'vue'\n\nimport { createIconProp, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { skeletonProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nexport default defineComponent({\n  name: 'Skeleton',\n  inheritAttrs: false,\n  props: skeletonProps,\n  setup(_props, { attrs, slots }) {\n    const props = useProps('skeleton', _props, {\n      size: null,\n      width: null,\n      height: null,\n      repeat: {\n        default: 1,\n        validator: (value: number) => value > 0,\n      },\n      tag: 'div',\n      activated: null,\n      image: false,\n      imageIcon: createIconProp(),\n      iconScale: 4,\n      round: null,\n      circle: null,\n      block: null,\n      spread: 0,\n      loading: null,\n    })\n\n    const groupState = inject(GROUP_STATE, {} as any)\n\n    const nh = useNameHelper('skeleton')\n    const icons = useIcons()\n\n    const activated = computed(() => {\n      return props.activated ?? groupState.activated ?? false\n    })\n    const round = computed(() => {\n      return props.round ?? groupState.round ?? false\n    })\n    const circle = computed(() => {\n      return props.circle ?? groupState.circle ?? false\n    })\n    const block = computed(() => {\n      return props.block ?? groupState.block ?? false\n    })\n    const loading = computed(() => {\n      return props.loading ?? groupState.loading ?? true\n    })\n    const tag = computed(() => {\n      return props.tag || groupState.itemTag || 'div'\n    })\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: Object.keys(groupState).length || props.inherit,\n        [nh.bm(props.size)]: props.size ?? groupState?.size,\n        [nh.bm('block')]: block.value,\n        [nh.bm('image')]: props.image,\n        [nh.bm('round')]: round.value && !circle.value,\n        [nh.bm('circle')]: circle.value,\n        [nh.bm('activated')]: activated.value,\n      }\n    })\n    const style = computed(() => {\n      const style: Record<string, string> = {}\n\n      if (props.width !== null) {\n        style[nh.cv('width')] = parseSize(props.width)\n      }\n\n      if (props.height !== null) {\n        style[nh.cv('height')] = parseSize(props.height)\n      }\n\n      if (props.spread) {\n        style[nh.cv('spread')] = parseSize(props.spread)\n      }\n\n      return style\n    })\n\n    function parseSize(value: string | number) {\n      if (typeof value === 'number') {\n        return `${value}px`\n      }\n\n      value = value.trim()\n\n      if (/\\d$/.test(value)) {\n        return `${value}px`\n      }\n\n      return value\n    }\n\n    function renderSkeleton() {\n      const Wrapper = tag.value || 'div'\n\n      return (\n        <Wrapper\n          {...attrs}\n          class={[className.value, attrs.class]}\n          style={[style.value, attrs.style]}\n        >\n          {props.image ? (\n            <Icon\n              {...icons.value.image}\n              icon={props.imageIcon || icons.value.image.icon}\n              scale={props.iconScale}\n            ></Icon>\n          ) : null}\n        </Wrapper>\n      )\n    }\n\n    return () => {\n      if (!loading.value) {\n        return renderSlot(slots, 'default')\n      }\n\n      if (props.repeat > 1) {\n        return Array.from({ length: props.repeat }, () => renderSkeleton())\n      }\n\n      return renderSkeleton()\n    }\n  },\n})\n","import type { InjectionKey } from 'vue'\nimport type { ClassType, StyleType } from '@vexip-ui/config'\nimport type { SkeletonProps } from '@/components/skeleton'\n\nexport type ImageObjectFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'\nexport type ImageSkeletonProps = Pick<\n  SkeletonProps,\n  'tag' | 'activated' | 'iconScale' | 'imageIcon'\n> & {\n  class?: ClassType,\n  StyleType?: StyleType,\n}\n\nexport interface ImageState {\n  src: string,\n  index: number,\n  total: number,\n}\n\nexport interface GroupState {\n  showAll: boolean,\n  preview: boolean,\n  increaseItem: (item: ImageState) => void,\n  decreaseItem: (item: ImageState) => void,\n  handlePreview: (item: ImageState) => void,\n}\n\nexport interface ImageSlots {\n  placeholder?: () => any,\n  error?: () => any,\n  preview?: (params: { src: string }) => any,\n}\n\nexport interface ImageGroupSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  preview?: (params: { src: string }) => any,\n}\n\nexport interface ImageViewerSlots {\n  default?: (params: { src: string }) => any,\n  prev?: (params: { disabled: boolean }) => any,\n  next?: (params: { disabled: boolean }) => any,\n  close?: () => any,\n}\n\nexport const GROUP_STATE = '__VXP_IMAGE_GROUP_STATE' as unknown as InjectionKey<GroupState>\n\nexport const objectFitValues = Object.freeze<ImageObjectFit[]>([\n  'fill',\n  'contain',\n  'cover',\n  'none',\n  'scale-down',\n])\n","<script setup lang=\"ts\">\nimport { ImageViewer } from '@/components/image-viewer'\nimport { Renderer } from '@/components/renderer'\nimport { Skeleton } from '@/components/skeleton'\n\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch, watchEffect } from 'vue'\n\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useIntersection } from '@vexip-ui/hooks'\nimport { isClient, supportImgLoading, toCssSize } from '@vexip-ui/utils'\nimport { imageProps } from './props'\nimport { GROUP_STATE, objectFitValues } from './symbol'\n\nimport type { ImageSlots, ImageState } from './symbol'\n\nconst useImgLoading = supportImgLoading()\n\ndefineOptions({ name: 'Image' })\n\nconst _props = defineProps(imageProps)\nconst props = useProps('image', _props, {\n  src: {\n    default: '',\n    static: true,\n  },\n  fallbackSrc: '',\n  alt: '',\n  fit: {\n    default: 'cover',\n    validator: value => objectFitValues.includes(value),\n  },\n  width: '',\n  height: '',\n  imgAttrs: () => ({}),\n  lazy: false,\n  root: {\n    default: null,\n    static: true,\n  },\n  rootMargin: '',\n  preview: false,\n  skeleton: false,\n  placeholder: '',\n  errorTip: '',\n  radius: 0,\n  border: false,\n  previewSrc: '',\n  viewerTransfer: null,\n  viewerProps: () => ({}),\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<ImageSlots>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('image')\nconst locale = useLocale('image')\n\nconst showImg = ref(useImgLoading)\nconst loading = ref(showImg.value)\nconst currentSrc = ref('')\nconst loadFail = ref(false)\nconst fallbackFail = ref(false)\nconst viewerActive = ref(false)\nconst hidden = ref(false)\n\nconst wrapper = ref<HTMLElement>()\n\nconst showError = computed(() => {\n  return loadFail.value && (!props.fallbackSrc || fallbackFail.value)\n})\nconst hasPreview = computed(() => !groupState && props.preview)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('border')]: props.border,\n      [nh.bm('loading')]: loading.value,\n      [nh.bm('error')]: showError.value,\n      [nh.bm('preview')]: groupState?.preview || hasPreview.value,\n    },\n  ]\n})\nconst style = computed(() => {\n  const style: Record<string, string> = {\n    width: toCssSize(props.width),\n    height: toCssSize(props.height),\n    [nh.cv('fit')]: props.fit,\n    [nh.cv('radius')]: props.radius ? `${props.radius}px` : '',\n  }\n\n  if (props.border && typeof props.border === 'string') {\n    style[nh.cv('b-color')] = props.border\n  }\n\n  return style\n})\nconst imageSrc = computed(() => props.src || (props.imgAttrs?.src as string))\nconst imgLoading = computed(() => {\n  return hidden.value || (useImgLoading && props.lazy) ? 'lazy' : undefined\n})\nconst skeletonProps = computed(() => {\n  return typeof props.skeleton === 'object'\n    ? Object.assign({ activated: true }, props.skeleton)\n    : { activated: true }\n})\n\nwatch(imageSrc, value => {\n  loading.value = showImg.value\n  currentSrc.value = value\n  loadFail.value = false\n  fallbackFail.value = false\n})\nwatch(\n  () => props.fallbackSrc,\n  value => {\n    fallbackFail.value = false\n\n    if (loadFail.value) {\n      loading.value = showImg.value\n      currentSrc.value = value\n    }\n  },\n)\n\ncurrentSrc.value = imageSrc.value\n\nconst state: ImageState = reactive({\n  src: computed(() => props.previewSrc || currentSrc.value),\n  index: 0,\n  total: 0,\n})\n\nif (groupState) {\n  groupState.increaseItem(state)\n\n  const stopWatch = watchEffect(() => {\n    hidden.value = !groupState.showAll && state.index > 0\n  })\n\n  onBeforeUnmount(() => {\n    stopWatch()\n    groupState.decreaseItem(state)\n  })\n}\n\nif (!useImgLoading) {\n  let disconnect: (() => void) | undefined\n\n  const stopWatch = watchEffect(() => {\n    disconnect?.()\n    disconnect = undefined\n\n    if (!isClient) return\n\n    const root =\n      typeof props.root === 'string' ? document.querySelector(props.root) : (props.root as Element)\n\n    if (props.lazy) {\n      disconnect = useIntersection({\n        root: typeof root === 'object' ? root : document.documentElement,\n        rootMargin: props.rootMargin,\n        target: wrapper,\n        handler: () => {\n          disconnect?.()\n          disconnect = undefined\n          showImg.value = true\n          loading.value = true\n        },\n      }).disconnect\n    }\n  })\n\n  onBeforeUnmount(() => {\n    stopWatch()\n    disconnect?.()\n  })\n}\n\ndefineExpose({\n  loading,\n  fallbackFail,\n  viewerActive,\n  hidden,\n  wrapper,\n})\n\nfunction handleLoad(event: Event) {\n  loading.value = false\n\n  if (!props.fallbackSrc || currentSrc.value !== props.fallbackSrc) {\n    emitEvent(props.onLoad, event)\n  }\n}\n\nfunction handleError(event: Event) {\n  if (props.fallbackSrc) {\n    if (currentSrc.value === props.fallbackSrc) {\n      loading.value = false\n      fallbackFail.value = true\n\n      return\n    }\n\n    currentSrc.value = props.fallbackSrc\n  } else {\n    loading.value = false\n  }\n\n  loadFail.value = true\n  emitEvent(props.onError, event)\n}\n\nfunction handlePreview() {\n  if (!groupState) {\n    if (props.preview) {\n      viewerActive.value = true\n    }\n\n    emitEvent(props.onPreview, props.previewSrc || currentSrc.value)\n    return\n  }\n\n  groupState.handlePreview(state)\n}\n</script>\n\n<template>\n  <div\n    v-show=\"!hidden\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"none\"\n    :style=\"style\"\n  >\n    <slot v-if=\"loading\" name=\"placeholder\">\n      <Renderer :renderer=\"props.slots.placeholder\">\n        <Skeleton\n          v-if=\"props.skeleton\"\n          v-bind=\"skeletonProps\"\n          :class=\"nh.be('skeleton')\"\n          image\n        ></Skeleton>\n        <template v-else>\n          <span :class=\"nh.be('placeholder')\">\n            {{ props.placeholder || locale.placeholder }}\n          </span>\n        </template>\n      </Renderer>\n    </slot>\n    <slot v-else-if=\"showError\" name=\"error\">\n      <Renderer :renderer=\"props.slots.error\">\n        <span :class=\"nh.be('error')\">\n          {{ props.errorTip || props.alt || locale.error }}\n        </span>\n      </Renderer>\n    </slot>\n    <img\n      v-if=\"showImg && !showError\"\n      v-bind=\"props.imgAttrs\"\n      :class=\"nh.be('img')\"\n      :src=\"currentSrc\"\n      :alt=\"props.alt\"\n      :width=\"props.width || undefined\"\n      :height=\"props.height || undefined\"\n      :loading=\"imgLoading\"\n      :aria-label=\"props.alt\"\n      @load=\"handleLoad\"\n      @error=\"handleError\"\n      @click=\"handlePreview\"\n    />\n    <ImageViewer\n      v-if=\"hasPreview\"\n      v-bind=\"viewerProps\"\n      v-model:active=\"viewerActive\"\n      :src-list=\"props.previewSrc || currentSrc\"\n      :transfer=\"props.viewerTransfer\"\n    >\n      <template v-if=\"slots.preview || props.slots.preview\" #default=\"{ src }\">\n        <slot name=\"preview\" :src=\"src\">\n          <Renderer :renderer=\"props.slots.preview\" :data=\"{ src }\"></Renderer>\n        </slot>\n      </template>\n    </ImageViewer>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ImageViewer } from '@/components/image-viewer'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, ref, toRef } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { imageGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nimport type { ImageGroupSlots, ImageState } from './symbol'\n\ndefineOptions({ name: 'ImageGroup' })\n\nconst _props = defineProps(imageGroupProps)\nconst props = useProps('imageGroup', _props, {\n  showAll: false,\n  preview: false,\n  viewerTransfer: null,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<ImageGroupSlots>()\n\nconst nh = useNameHelper('image-group')\n\nconst currentActive = ref(false)\nconst currentIndex = ref(0)\nconst imageStates = reactive(new Set<ImageState>())\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('image-vars'),\n    {\n      [nh.bm('preview')]: props.preview,\n    },\n  ]\n})\nconst srcList = computed(() => Array.from(imageStates).map(state => state.src))\n\nconst refreshIndex = debounceMinor(() => {\n  const total = imageStates.size\n\n  Array.from(imageStates).forEach((item, index) => {\n    item.index = index\n    item.total = total\n  })\n})\n\nprovide(\n  GROUP_STATE,\n  reactive({\n    showAll: toRef(props, 'showAll'),\n    preview: toRef(props, 'preview'),\n    increaseItem,\n    decreaseItem,\n    handlePreview,\n  }),\n)\n\ndefineExpose({ currentActive, currentIndex })\n\nfunction increaseItem(item: ImageState) {\n  imageStates.add(item)\n  refreshIndex()\n}\n\nfunction decreaseItem(item: ImageState) {\n  imageStates.delete(item)\n  refreshIndex()\n}\n\nfunction handlePreview(item: ImageState) {\n  currentIndex.value = item.index\n  currentActive.value = true\n\n  emitEvent(props.onPreview, item.src, Array.from(srcList.value))\n}\n</script>\n\n<template>\n  <div :class=\"className\">\n    <slot></slot>\n    <ImageViewer\n      v-if=\"props.preview\"\n      v-model:active=\"currentActive\"\n      v-model:index=\"currentIndex\"\n      :src-list=\"srcList\"\n      :transfer=\"props.viewerTransfer\"\n    >\n      <template v-if=\"slots.preview || props.slots.preview\" #default=\"{ src }\">\n        <slot name=\"preview\" :src=\"src\">\n          <Renderer :renderer=\"props.slots.preview\" :data=\"{ src }\"></Renderer>\n        </slot>\n      </template>\n    </ImageViewer>\n  </div>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { BreakPoint } from '@/components/grid'\nimport type { MenuOptions } from '@/components/menu'\nimport type {\n  LayoutConfig,\n  LayoutFooterLink,\n  LayoutHeaderAction,\n  LayoutInnerClass,\n  LayoutMediaJudger,\n  LayoutMenuProps,\n  LayoutSignType,\n  LayoutUser,\n} from './symbol'\n\nconst breakpointProp = {\n  type: [String, Boolean, Function] as PropType<\n    boolean | BreakPoint | LayoutMediaJudger | (string & {})\n  >,\n  default: null,\n}\n\nexport const layoutProps = buildProps({\n  locale: localeProp('layout'),\n  noAside: booleanProp,\n  footer: booleanProp,\n  tag: String,\n  menus: Object as PropType<MenuOptions[]>,\n  menuProps: Object as PropType<LayoutMenuProps>,\n  logo: String,\n  signName: String,\n  config: Array as PropType<LayoutConfig[]>,\n  user: Object as PropType<LayoutUser>,\n  actions: Array as PropType<LayoutHeaderAction[]>,\n  expanded: booleanProp,\n  reduced: booleanProp,\n  avatarCircle: booleanProp,\n  signType: String as PropType<LayoutSignType>,\n  headerFixed: breakpointProp,\n  asideFixed: breakpointProp,\n  copyright: String,\n  links: Array as PropType<LayoutFooterLink[]>,\n  colors: Array as PropType<string[]>,\n  color: String,\n  miniHeaderSign: breakpointProp,\n  verticalLinks: breakpointProp,\n  darkMode: booleanProp,\n  fixedMain: booleanProp,\n  fitWindow: booleanProp,\n  innerClasses: Object as PropType<LayoutInnerClass>,\n  noHeader: booleanProp,\n  noMasker: booleanProp,\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\n  onUserAction: eventProp<(label: string, meta: any) => void>(),\n  onNavChange: eventProp<(type: LayoutSignType) => void>(),\n  onColorChange: eventProp<(color: string) => void>(),\n  onToggleTheme: eventProp<(isDark: boolean) => void>(),\n  onContentResize: eventProp<() => void>(),\n})\n\nexport type LayoutProps = ExtractPropTypes<typeof layoutProps>\nexport type LayoutCProps = ConfigurableProps<LayoutProps, 'menus'>\n\nexport const layoutAsideProps = buildProps({\n  tag: String,\n  expanded: booleanProp,\n  reduced: booleanProp,\n  menus: Array as PropType<MenuOptions[]>,\n  menuProps: Object as PropType<LayoutMenuProps>,\n  logo: String,\n  signName: String,\n  fixed: booleanStringProp,\n  signType: String as PropType<LayoutSignType>,\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\n})\n\nexport type LayoutAsideProps = ExtractPropTypes<typeof layoutAsideProps>\nexport type LayoutAsideCProps = ConfigurableProps<LayoutAsideProps, 'menus'>\n\nexport const layoutHeaderProps = buildProps({\n  locale: localeProp('layout'),\n  tag: String,\n  logo: String,\n  signName: String,\n  user: Object as PropType<LayoutUser>,\n  userDropped: booleanProp,\n  avatarCircle: booleanProp,\n  config: Array as PropType<LayoutConfig[]>,\n  actions: Array as PropType<LayoutHeaderAction[]>,\n  signType: String as PropType<LayoutSignType>,\n  colors: Array as PropType<string[]>,\n  color: String,\n  menus: Object as PropType<MenuOptions[]>,\n  menuProps: Object as PropType<LayoutMenuProps>,\n  darkMode: booleanProp,\n  onNavChange: eventProp<(type: LayoutSignType) => void>(),\n  onColorChange: eventProp<(color: string) => void>(),\n  onUserAction: eventProp<(label: string, meta: any) => void>(),\n  onSignClick: eventProp<(event: MouseEvent) => void>(),\n  onDroppedChange: eventProp<(target: boolean) => void>(),\n  onExpandedChange: eventProp<(expanded: boolean) => void>(),\n  onReducedChange: eventProp<(reduced: boolean) => void>(),\n  onMenuSelect: eventProp<(label: string, meta: any) => void>(),\n  onToggleTheme: eventProp<(isDark: boolean) => void>(),\n})\n\nexport type LayoutHeaderProps = ExtractPropTypes<typeof layoutHeaderProps>\nexport type LayoutHeaderCProps = ConfigurableProps<LayoutHeaderProps, 'user' | 'menus'>\n\nexport const layoutMainProps = buildProps({\n  tag: String,\n  fixed: booleanProp,\n})\n\nexport type LayoutMainProps = ExtractPropTypes<typeof layoutMainProps>\nexport type LayoutMainCProps = ConfigurableProps<LayoutMainProps>\n\nexport const layoutFooterProps = buildProps({\n  tag: String,\n  copyright: String,\n  links: Array as PropType<LayoutFooterLink[]>,\n  verticalLinks: booleanStringProp,\n})\n\nexport type LayoutFooterProps = ExtractPropTypes<typeof layoutFooterProps>\nexport type LayoutFooterCProps = ConfigurableProps<LayoutFooterProps>\n","import type { ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { MenuExposed, MenuGroupType, MenuMarkerType } from '@/components/menu'\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type { ClassType } from '@vexip-ui/config'\nimport type { BreakPoint } from '@/components/grid'\n\nexport type LayoutSignType = 'aside' | 'header'\nexport type LayoutConfig = 'nav' | 'color' | 'theme'\nexport type LayoutSection =\n  | 'wrapper'\n  | 'section'\n  | 'header'\n  | 'headerLeft'\n  | 'headerMain'\n  | 'headerRight'\n  | 'headerUser'\n  | 'sidebar'\n  | 'aside'\n  | 'asideTop'\n  | 'asideMain'\n  | 'asideBottom'\n  | 'expandHandler'\n  | 'main'\n  | 'footer'\n  | 'footerLinks'\n  | 'copyright'\n  | 'scrollbar'\n\nexport type LayoutInnerClass = Partial<Record<LayoutSection, ClassType>>\nexport type LayoutMediaJudger = (breakpoint: BreakPoint) => boolean\n\nexport interface LayoutMenuProps {\n  active?: string,\n  accordion?: boolean,\n  markerType?: MenuMarkerType,\n  groupType?: MenuGroupType,\n  tooltipReverse?: boolean,\n  router?: Router,\n  manualRoute?: boolean,\n  onExpand?: (label: string, meta: Record<string, any>) => void,\n  onReduce?: (label: string, meta: Record<string, any>) => void,\n}\n\nexport interface LayoutHeaderAction {\n  label: string,\n  icon?: Record<string, any>,\n  iconProps?: IconMinorProps,\n  name?: string,\n  disabled?: boolean,\n  divided?: boolean,\n  hidden?: boolean,\n  meta?: Record<string, any>,\n}\n\nexport interface LayoutUser {\n  name: string,\n  email?: string,\n  avatar?: string | Record<string, any>,\n}\n\nexport interface LayoutFooterLink {\n  name: string,\n  subname?: string,\n  icon?: Record<string, any>,\n  iconProps?: IconMinorProps,\n  to?: string,\n  target?: string,\n  children?: Array<Omit<LayoutFooterLink, 'children'>>,\n}\n\nexport interface LayoutState {\n  isLayout: boolean,\n  locked: boolean,\n  affixed: boolean,\n  scrollY: number,\n  affixMatched: boolean,\n  expandMatched: boolean,\n  useExpand: boolean,\n  expanded: boolean,\n  reduced: boolean,\n  navConfig: boolean,\n  classes: LayoutInnerClass,\n  changeInLock: (doChange: () => void) => void,\n}\n\nexport interface LayoutSlotParams {\n  expanded: boolean,\n  reduced: boolean,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced: boolean) => void,\n}\n\nexport interface LayoutHeaderSlotParams extends LayoutSlotParams {\n  handleColorChange: (color: string) => void,\n  toggleUserDropped: (dropped?: boolean) => void,\n}\n\nexport interface LayoutExposed extends ComponentPublicInstance {\n  scroll?: NativeScrollExposed,\n  menu?: MenuExposed,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced?: boolean) => void,\n  expandMenuByLabel: (label: string) => void,\n}\n\nexport interface LayoutHeaderExposed extends ComponentPublicInstance {\n  menu?: MenuExposed,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced?: boolean) => void,\n  expandMenuByLabel: (label: string) => void,\n  toggleUserDropped: (dropped: boolean) => void,\n}\n\nexport interface LayoutMainExposed extends ComponentPublicInstance {}\n\nexport interface LayoutAsideExposed extends ComponentPublicInstance {\n  menu?: MenuExposed,\n  toggleExpanded: (expanded?: boolean) => void,\n  toggleReduced: (reduced?: boolean) => void,\n  expandMenuByLabel: (label: string) => void,\n}\n\nexport const LAYOUT_STATE = '___VXP_LAYOUT_STATE' as unknown as InjectionKey<LayoutState>\n","import { currentBreakPoint } from '@/components/grid'\n\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, reactive, ref, watch } from 'vue'\n\nimport { adjustAlpha, isClient, mixColor, noop, parseColorToRgba, toFixed } from '@vexip-ui/utils'\nimport { LAYOUT_STATE } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { Color } from '@vexip-ui/utils'\nimport type { BreakPoint } from '@/components/grid'\nimport type { LayoutMediaJudger, LayoutState } from './symbol'\n\nconst rootEl = isClient ? document.documentElement : undefined\nconst rootStyle = rootEl && getComputedStyle(rootEl)\n\nexport function computeSeriesColors(value: Color) {\n  if (!rootEl || !rootStyle) return\n\n  const colors: Record<string, string[]> = {\n    light: [],\n    opacity: [],\n    dark: [],\n  }\n  const black = parseColorToRgba(\n    rootStyle.getPropertyValue('--vxp-color-black') || { r: 0, g: 0, b: 0, a: 1 },\n  )\n  const white = parseColorToRgba(\n    rootStyle.getPropertyValue('--vxp-color-white') || { r: 255, g: 255, b: 255, a: 1 },\n  )\n  const style = rootEl.style\n\n  for (let i = 1; i < 10; ++i) {\n    const light = mixColor(white, value, i * 0.1).toString()\n    const opacity = adjustAlpha(value, toFixed(1 - i * 0.1, 1)).toString()\n\n    style.setProperty(`--vxp-color-primary-light-${i}`, light)\n    style.setProperty(`--vxp-color-primary-opacity-${i}`, opacity)\n\n    colors.light.push(light)\n    colors.opacity.push(opacity)\n  }\n\n  for (let i = 1; i < 3; ++i) {\n    const dark = mixColor(black, value, i * 0.1).toString()\n\n    style.setProperty(`--vxp-color-primary-dark-${i}`, dark)\n    colors.dark.push(dark)\n  }\n\n  style.setProperty('--vxp-color-primary-base', `${value}`)\n\n  return colors\n}\n\nexport function useLayoutState() {\n  return inject(\n    LAYOUT_STATE,\n    reactive({\n      isLayout: false,\n      locked: false,\n      affixed: false,\n      scrollY: 0,\n      affixMatched: false,\n      expandMatched: false,\n      useExpand: false,\n      expanded: false,\n      reduced: false,\n      navConfig: false,\n      classes: Object.freeze({}),\n      changeInLock: noop,\n    }) as LayoutState,\n  )\n}\n\nconst breakPoints = Object.freeze<BreakPoint[]>(['xs', 'sm', 'md', 'lg', 'xl', 'xxl'])\n\nexport function useMediaQuery(query: Ref<boolean | string | LayoutMediaJudger>) {\n  const matched = ref(false)\n  const updateTrigger = ref(0)\n\n  const computedStyle = isClient && getComputedStyle(document.documentElement)\n  const computedQuery = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    updateTrigger.value\n\n    if (typeof query.value !== 'function' && breakPoints.includes(query.value as any)) {\n      const usedQuery = query.value === 'xs' ? 'sm' : query.value\n\n      if (usedQuery === currentBreakPoint.value) return true\n\n      const media =\n        computedStyle && computedStyle.getPropertyValue(`--vxp-break-point-${usedQuery}`).trim()\n\n      return media && `only screen and ${media}`\n    }\n\n    return query.value\n  })\n\n  let isMounted = false\n  let mediaQuery: MediaQueryList | undefined\n\n  const update = () => {\n    if (typeof computedQuery.value === 'boolean') {\n      matched.value = computedQuery.value\n      return\n    }\n\n    if (!computedQuery.value || computedQuery.value === 'min') {\n      matched.value = false\n      return\n    }\n\n    if (computedQuery.value === 'max') {\n      matched.value = true\n      return\n    }\n\n    if (typeof computedQuery.value === 'function') {\n      matched.value = computedQuery.value(currentBreakPoint.value)\n      return\n    }\n\n    if (isMounted) {\n      mediaQuery = matchMedia(computedQuery.value)\n      mediaQuery?.addEventListener('change', update)\n    }\n\n    matched.value = mediaQuery!.matches\n  }\n\n  watch(computedQuery, () => {\n    update()\n  })\n\n  onMounted(() => {\n    ++updateTrigger.value\n    isMounted = true\n    update()\n  })\n\n  onBeforeUnmount(() => {\n    isMounted = false\n    mediaQuery?.removeEventListener('change', update)\n    mediaQuery = undefined\n  })\n\n  return matched\n}\n\nexport function useUpdateCounter() {\n  const counter = ref(0)\n\n  onMounted(() => {\n    counter.value++\n  })\n  onUpdated(() => {\n    counter.value++\n  })\n\n  return counter\n}\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { layoutMainProps } from './props'\nimport { useLayoutState } from './helper'\n\nexport default defineComponent({\n  name: 'LayoutMain',\n  props: layoutMainProps,\n  setup(_props, { slots }) {\n    const props = useProps('layoutMain', _props, {\n      tag: 'main',\n      fixed: false,\n    })\n\n    const nh = useNameHelper('layout')\n    const state = useLayoutState()\n\n    const className = computed(() => {\n      return [nh.be('main'), props.fixed && nh.bem('main', 'fixed'), state.classes.main]\n    })\n\n    return () => {\n      const CustomTag = (props.tag || 'main') as any\n\n      return <CustomTag class={className.value}>{slots.default?.()}</CustomTag>\n    }\n  },\n})\n","import { booleanProp, booleanStringProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { RouteLocationRaw, Router } from 'vue-router'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { MenuGroupType, MenuItemSlots, MenuMarkerType, MenuOptions, MenuSlots } from './symbol'\n\nexport const menuProps = buildProps({\n  active: String,\n  accordion: booleanProp,\n  markerType: String as PropType<MenuMarkerType>,\n  reduced: booleanProp,\n  horizontal: booleanProp,\n  transfer: booleanStringProp,\n  trigger: String as PropType<'hover' | 'click'>,\n  groupType: String as PropType<MenuGroupType>,\n  tooltipReverse: booleanProp,\n  options: Array as PropType<MenuOptions[]>,\n  router: Object as PropType<Router>,\n  manualRoute: booleanProp,\n  indent: [String, Number],\n  arrow: iconProp,\n  slots: Object as PropType<MenuSlots>,\n  onSelect: eventProp<(label: string, meta: any) => void>(),\n  onExpand: eventProp<(label: string, meta: any) => void>(),\n  onReduce: eventProp<(label: string, meta: any) => void>(),\n})\n\nexport type MenuProps = ExtractPropTypes<typeof menuProps>\nexport type MenuCProps = ConfigurableProps<MenuProps>\n\nexport const menuItemProps = buildProps({\n  label: String,\n  icon: iconProp,\n  iconProps: Object as PropType<IconMinorProps>,\n  disabled: booleanProp,\n  transfer: booleanStringProp,\n  trigger: String as PropType<'hover' | 'click'>,\n  transitionName: String,\n  meta: Object,\n  children: Array as PropType<MenuOptions[]>,\n  route: [String, Object] as PropType<RouteLocationRaw>,\n  arrow: iconProp,\n  slots: Object as PropType<MenuItemSlots>,\n  onSelect: eventProp(),\n})\n\nexport type MenuItemProps = ExtractPropTypes<typeof menuItemProps>\nexport type MenuItemCProps = ConfigurableProps<MenuItemProps, 'children'>\n\nexport const menuGroupProps = buildProps({\n  label: String,\n  children: Array as PropType<MenuOptions[]>,\n})\n\nexport type MenuGroupProps = ExtractPropTypes<typeof menuGroupProps>\n","import type { ComponentPublicInstance, InjectionKey, VNode } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport type { IconMinorProps } from '@/components/icon'\n\nexport type MenuMarkerType = 'top' | 'right' | 'bottom' | 'left' | 'none'\nexport type MenuGroupType = 'collapse' | 'dropdown'\n\nexport interface MenuOptions {\n  label: string,\n  icon?: Record<string, any> | (() => any),\n  iconProps?: IconMinorProps,\n  name?: string | (() => string),\n  disabled?: boolean,\n  group?: boolean,\n  meta?: Record<string, any>,\n  route?: RouteLocationRaw,\n  children?: MenuOptions[],\n}\n\nexport interface MenuItemState {\n  el: Readonly<HTMLElement | null | undefined>,\n  label: Readonly<string>,\n  indent: Readonly<number>,\n  groupExpanded: boolean,\n  showGroup: Readonly<boolean>,\n  isUsePopper: Readonly<boolean>,\n  parentState: MenuItemState | null,\n  transfer: Readonly<boolean | string>,\n  cachedExpanded: boolean,\n  updateSonSelected(selected: boolean, upstream?: boolean): void,\n  toggleGroupExpanded(expanded: boolean, upward?: boolean): void,\n  handleMouseEnter(): void,\n  handleMouseLeave(): void,\n}\n\nexport interface MenuGroupState {\n  indent: number,\n}\n\nexport interface MenuState {\n  horizontal: boolean,\n  accordion: boolean,\n  groupType: MenuGroupType,\n  tooltipReverse: boolean,\n  currentActive: string,\n  isReduced: boolean,\n  transfer: boolean | string,\n  trigger: 'hover' | 'click',\n  markerType: MenuMarkerType,\n  arrow: Record<string, any> | (() => any),\n  handleSelect(label: string, meta: Record<string, any>, route?: RouteLocationRaw): void,\n  handleExpand(label: string, expanded: boolean, meta: Record<string, any>): void,\n  increaseItem(state: MenuItemState): void,\n  decreaseItem(state: MenuItemState): void,\n  doForEachItem(cb: (item: MenuItemState) => void): void,\n  renderItemArrow: (params: MenuArrowSlotParams, renderDefault: () => VNode) => void,\n}\n\nexport interface MenuArrowSlotParams {\n  groupExpanded: boolean,\n  sonSelected: boolean,\n}\n\nexport interface MenuSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  arrow?: (params: MenuArrowSlotParams) => any,\n}\n\nexport interface MenuItemSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  /**\n   * @internal\n   */\n  icon?: () => any,\n  /**\n   * @internal\n   */\n  group?: () => any,\n  arrow?: (params: MenuArrowSlotParams) => any,\n}\n\nexport interface MenuExposed extends ComponentPublicInstance {\n  expandItemByLabel: (label: string) => void,\n}\n\nexport interface MenuItemExposed extends ComponentPublicInstance {\n  groupExpanded: boolean,\n  isGroup: boolean,\n  showGroup: boolean,\n  isUsePopper: boolean,\n  handleSelect: () => void,\n  handleMouseEnter: () => void,\n  handleMouseLeave: () => void,\n}\n\nexport const MENU_ITEM_STATE = '__VXP_MENU_ITEM_STATE' as unknown as InjectionKey<MenuItemState>\nexport const MENU_GROUP_STATE = '__VXP_MENU_GROUP_STATE' as unknown as InjectionKey<MenuGroupState>\nexport const MENU_STATE = '__VXP_MENU_STATE' as unknown as InjectionKey<MenuState>\n","import { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { Tooltip } from '@/components/tooltip'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  computed,\n  defineAsyncComponent,\n  defineComponent,\n  inject,\n  nextTick,\n  onBeforeUnmount,\n  // onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n} from 'vue'\n\nimport {\n  createIconProp,\n  emitEvent,\n  useHoverDelay,\n  useIcons,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { useClickOutside, usePopper, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { menuItemProps } from './props'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\n// For types build\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { RouteLocationRaw } from 'vue-router'\nimport type { PopperExposed } from '@/components/popper'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineAsyncComponent(() => import('./menu-group'))\n\nconst MenuItem = defineComponent({\n  name: 'MenuItem',\n  props: menuItemProps,\n  emits: [],\n  setup(_props, { slots, expose }) {\n    const props = useProps('menuItem', _props, {\n      label: {\n        default: null,\n        static: true,\n      },\n      icon: createIconProp(),\n      iconProps: null,\n      disabled: false,\n      transfer: null,\n      trigger: null,\n      transitionName: null,\n      meta: null,\n      children: {\n        default: () => [],\n        static: true,\n      },\n      route: null,\n      arrow: null,\n      slots: () => ({}),\n    })\n\n    const menuState = inject(MENU_STATE, null)\n    const parentItemState = inject(MENU_ITEM_STATE, null)\n    const groupState = inject(MENU_GROUP_STATE, null)\n\n    const nh = useNameHelper('menu')\n    const icons = useIcons()\n    const hoverDelay = useHoverDelay()\n\n    const { isRtl } = useRtl()\n\n    const baseClass = nh.be('item')\n    const placement = ref<Placement>(isRtl.value ? 'left-start' : 'right-start')\n    const groupExpanded = ref(false)\n    const selected = ref(false)\n    const sonSelected = ref(false)\n    const popperShow = ref(false)\n\n    const indent = computed(() => (parentItemState?.indent ?? 0) + 1)\n    const propTransfer = computed(() => props.transfer ?? menuState?.transfer ?? false)\n    const inTransfer = computed(() => (parentItemState ? parentItemState.transfer : false))\n    const transfer = computed(() => !inTransfer.value && propTransfer.value)\n    const markerType = computed(() => menuState?.markerType || 'right')\n\n    const wrapper = useClickOutside(handleClickOutside)\n    const popper = ref<PopperExposed>()\n    const { reference, transferTo, updatePopper } = usePopper({\n      placement,\n      transfer,\n      wrapper,\n      popper: computed(() => popper.value?.wrapper),\n      shift: { crossAxis: true },\n    })\n\n    const isGroup = computed(() => !!(slots.group || props.children?.length))\n    const showGroup = computed(() => isGroup.value && groupExpanded.value)\n    const className = computed(() => {\n      return {\n        [baseClass]: true,\n        [`${baseClass}--disabled`]: props.disabled,\n        [`${baseClass}--group-visible`]: showGroup.value,\n        [`${baseClass}--selected`]: selected.value,\n        [`${baseClass}--no-icon`]: !props.icon,\n        [`${baseClass}--son-selected`]: sonSelected.value,\n      }\n    })\n    const labelStyle = computed(() => {\n      if (menuState?.horizontal || parentItemState?.isUsePopper) {\n        return {}\n      }\n\n      const indentWidth = nh.gcv('indent-width')\n      const multiplier =\n        indent.value + (menuState?.isReduced ? 0 : (groupState?.indent ?? 0)) * 0.25\n\n      return {\n        paddingInlineStart:\n          parentItemState && parentItemState.isUsePopper\n            ? undefined\n            : `calc(${indentWidth} * ${multiplier})`,\n      }\n    })\n    const isUsePopper = computed(() => {\n      return (\n        (menuState && (menuState.horizontal || menuState.groupType === 'dropdown')) ||\n        (isGroup.value && menuState?.isReduced && !parentItemState) ||\n        !!parentItemState?.isUsePopper\n      )\n    })\n    const tooltipDisabled = computed(() => {\n      return (\n        isGroup.value || !!(parentItemState?.isUsePopper || (menuState && !menuState.isReduced))\n      )\n    })\n    const tooltipReverse = computed(() => !!menuState?.tooltipReverse)\n    const isHorizontal = computed(() => menuState?.horizontal && !parentItemState)\n    const transition = computed(() => {\n      return (props.transitionName ?? isHorizontal.value) ? nh.ns('drop') : nh.ns('zoom')\n    })\n    const dropTrigger = computed(() => props.trigger || menuState?.trigger || 'hover')\n\n    const itemState = reactive({\n      el: wrapper,\n      label: toRef(props, 'label'),\n      indent,\n      groupExpanded,\n      showGroup,\n      isUsePopper,\n      parentState: parentItemState,\n      transfer: computed(() => inTransfer.value || propTransfer.value),\n      cachedExpanded: groupExpanded.value,\n      updateSonSelected,\n      toggleGroupExpanded,\n      handleMouseEnter,\n      handleMouseLeave,\n    })\n\n    provide(MENU_ITEM_STATE, itemState)\n\n    watch(\n      showGroup,\n      value => {\n        if (value && isUsePopper.value) {\n          popperShow.value = true\n          updatePopper()\n        }\n      },\n      { immediate: true },\n    )\n    watch(selected, value => {\n      if (value) {\n        emitEvent(props.onSelect)\n      }\n\n      menuState?.doForEachItem(item => item.updateSonSelected(false, false))\n      value &&\n        nextTick(() => {\n          parentItemState?.updateSonSelected(value)\n        })\n    })\n    watch(groupExpanded, expanded => {\n      if (typeof menuState?.handleExpand === 'function') {\n        menuState.handleExpand(props.label, expanded, props.meta || {})\n      }\n    })\n    watch(\n      isHorizontal,\n      value => {\n        placement.value = value ? 'bottom' : isRtl.value ? 'left-start' : 'right-start'\n      },\n      { immediate: true },\n    )\n\n    if (menuState) {\n      watch(\n        [() => props.label, () => menuState.currentActive],\n        () => {\n          selected.value = props.label === menuState.currentActive\n        },\n        { immediate: true },\n      )\n\n      if (typeof menuState.increaseItem === 'function') {\n        menuState.increaseItem(itemState)\n      }\n    }\n\n    onBeforeUnmount(() => {\n      if (typeof menuState?.decreaseItem === 'function') {\n        menuState.decreaseItem(itemState)\n      }\n    })\n\n    expose({\n      groupExpanded,\n      isGroup,\n      showGroup,\n      isUsePopper,\n      handleSelect,\n      handleMouseEnter,\n      handleMouseLeave,\n    })\n\n    function updateSonSelected(selected: boolean, upstream = true) {\n      sonSelected.value = selected\n      upstream && parentItemState?.updateSonSelected(selected)\n    }\n\n    const { timer } = useSetTimeout()\n\n    function handleSelect() {\n      clearTimeout(timer.hover)\n\n      if (props.disabled) return\n\n      if (isGroup.value) {\n        if (isUsePopper.value && dropTrigger.value !== 'click') return\n\n        menuState?.doForEachItem(item => {\n          if (menuState.accordion) {\n            item.groupExpanded = false\n          }\n        })\n        groupExpanded.value = !groupExpanded.value\n      } else {\n        if (isUsePopper.value) {\n          toggleGroupExpanded(false, true)\n        }\n\n        if (menuState) {\n          menuState.handleSelect(props.label, props.meta || {}, props.route)\n        }\n\n        selected.value = true\n      }\n    }\n\n    function toggleGroupExpanded(expanded: boolean, upward = false) {\n      clearTimeout(timer.hover)\n\n      menuState?.doForEachItem(item => {\n        if (menuState.accordion) {\n          item.groupExpanded = false\n        }\n      })\n      groupExpanded.value = expanded\n\n      if (upward && typeof parentItemState?.toggleGroupExpanded === 'function') {\n        parentItemState.toggleGroupExpanded(expanded, upward)\n      }\n    }\n\n    let mouseInList = false\n    let reproduce = false\n\n    function handleMouseEnter() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !isUsePopper.value || dropTrigger.value !== 'hover') return\n\n      if (!groupExpanded.value && popperShow.value) {\n        reproduce = true\n        return\n      }\n\n      if (typeof parentItemState?.handleMouseEnter === 'function') {\n        parentItemState.handleMouseEnter()\n      }\n\n      if (props.disabled || !isGroup.value) return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = true\n      }, hoverDelay.value)\n    }\n\n    function handleMouseLeave() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !popperShow.value || !isUsePopper.value || dropTrigger.value !== 'hover') {\n        return\n      }\n\n      if (typeof parentItemState?.handleMouseLeave === 'function') {\n        parentItemState.handleMouseLeave()\n      }\n\n      if (props.disabled || !isGroup.value) return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = false\n      }, hoverDelay.value)\n    }\n\n    function handleClickOutside() {\n      if (isUsePopper.value && dropTrigger.value === 'click') {\n        nextTick(() => {\n          groupExpanded.value = false\n        })\n      }\n    }\n\n    function handlePopperHide() {\n      popperShow.value = false\n      groupExpanded.value = false\n\n      if (reproduce) {\n        reproduce = false\n\n        if (typeof parentItemState?.handleMouseEnter === 'function') {\n          parentItemState.handleMouseEnter()\n        }\n\n        if (props.disabled || !isGroup.value) return\n\n        groupExpanded.value = true\n      }\n    }\n\n    function handleKeySelect(event: KeyboardEvent) {\n      const key = event.code || event.key\n\n      if (key === 'Enter' || key === 'NumpadEnter') {\n        event.stopPropagation()\n        handleSelect()\n      } else if (key === 'Space') {\n        event.stopPropagation()\n        event.preventDefault()\n        handleSelect()\n      }\n    }\n\n    function renderChildren() {\n      if (!props.children?.length) {\n        return null\n      }\n\n      const renderItem = (item: MenuOptions) => (\n        <MenuItem\n          label={item.label}\n          icon={item.icon}\n          icon-props={item.iconProps}\n          disabled={item.disabled}\n          children={item.children}\n          route={item.route}\n          meta={item.meta}\n        >\n          {item.name ? callIfFunc(item.name) : item.label}\n        </MenuItem>\n      )\n\n      return props.children.map(child => {\n        if (child.group) {\n          return (\n            <MenuGroup key={child.label} label={child.name ? callIfFunc(child.name) : child.label}>\n              {child.children?.map(renderItem)}\n            </MenuGroup>\n          )\n        }\n\n        return renderItem(child)\n      })\n    }\n\n    function renderArrow() {\n      const params = { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value }\n      const icon = props.arrow || menuState?.arrow || icons.value.angleDown.icon\n      const renderDefault = () => (\n        <Renderer renderer={props.slots.arrow} data={params}>\n          <Icon\n            {...icons.value.angleDown}\n            icon={icon}\n            class={{\n              [nh.be('arrow')]: true,\n              [nh.bem('arrow', 'visible')]: groupExpanded.value,\n              [nh.bem('arrow', 'son-selected')]: sonSelected.value,\n            }}\n          ></Icon>\n        </Renderer>\n      )\n\n      return menuState ? menuState.renderItemArrow(params, renderDefault) : renderDefault()\n    }\n\n    function renderLabel() {\n      return (\n        <Tooltip\n          placement={isRtl.value ? 'left' : 'right'}\n          reverse={tooltipReverse.value}\n          shift\n          transfer\n          disabled={tooltipDisabled.value}\n        >\n          {{\n            trigger: () => (\n              <div\n                ref={reference}\n                class={{\n                  [nh.be('label')]: true,\n                  [nh.bem('label', `marker-${markerType.value}`)]: true,\n                  [nh.bem('label', 'in-popper')]: parentItemState?.isUsePopper,\n                }}\n                role={'menuitem'}\n                tabindex={0}\n                aria-disabled={props.disabled ? 'true' : undefined}\n                style={labelStyle.value}\n                onClick={handleSelect}\n                onKeydown={handleKeySelect}\n                onMouseenter={handleMouseEnter}\n                onMouseleave={handleMouseLeave}\n              >\n                {(slots.icon || props.icon) && (\n                  <div class={nh.be('icon')}>\n                    {slots.icon ? (\n                      renderSlot(slots, 'icon')\n                    ) : (\n                      <Icon {...props.iconProps} icon={props.icon}></Icon>\n                    )}\n                  </div>\n                )}\n                <span\n                  class={{\n                    [nh.be('title')]: true,\n                    [nh.bem('title', 'in-group')]: !isHorizontal.value && isGroup.value,\n                  }}\n                >\n                  {slots.default ? renderSlot(slots, 'default') : props.label}\n                </span>\n                {isGroup.value &&\n                  renderSlot(\n                    slots,\n                    'arrow',\n                    { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value },\n                    () => [renderArrow()],\n                  )}\n              </div>\n            ),\n            default: () => (\n              <span class={nh.be('tooltip-title')}>\n                {slots.default ? renderSlot(slots, 'default') : props.label}\n              </span>\n            ),\n          }}\n        </Tooltip>\n      )\n    }\n\n    return () => {\n      return (\n        <li ref={wrapper} class={className.value} role={'none'}>\n          {renderLabel()}\n          <CollapseTransition appear>\n            {isGroup.value && !isUsePopper.value && (\n              <ul v-show={showGroup.value} class={nh.be('list')}>\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n              </ul>\n            )}\n          </CollapseTransition>\n          {isGroup.value && isUsePopper.value && (\n            <Popper\n              ref={popper}\n              class={[\n                nh.be('popper'),\n                nh.bs('vars'),\n                isHorizontal.value && nh.bem('popper', 'drop'),\n              ]}\n              visible={popperShow.value && showGroup.value}\n              alive={!transferTo.value || popperShow.value}\n              to={transferTo.value}\n              transition={transition.value}\n              onAfterLeave={handlePopperHide}\n              onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\n              onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\n            >\n              <ul class={nh.be('list')}>\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n              </ul>\n            </Popper>\n          )}\n        </li>\n      )\n    }\n  },\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuItem\n","import { MenuItem } from '@/components/menu-item'\n\nimport { computed, defineComponent, inject, provide, reactive, ref, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineComponent({\n  name: 'MenuGroup',\n  props: {\n    label: String,\n    children: Array as PropType<MenuOptions[]>,\n  },\n  setup(_props, { slots }) {\n    const props = useProps('menuGroup', _props, {\n      label: {\n        default: '',\n        static: true,\n      },\n      children: {\n        default: () => [],\n        static: true,\n      },\n    })\n\n    const menuState = inject(MENU_STATE, null)\n    const parentItemState = inject(MENU_ITEM_STATE, null)\n\n    const nh = useNameHelper('menu-group')\n    const menuNh = useNameHelper('menu')\n    const indent = ref(1)\n\n    if (parentItemState) {\n      indent.value = parentItemState.indent + 1\n    }\n\n    const titleStyle = computed(() => {\n      return {\n        paddingLeft: parentItemState?.isUsePopper\n          ? undefined\n          : `calc(${menuNh.gcv('indent-width')} * ${indent.value})`,\n      }\n    })\n    const onlyShowSlot = computed(() => {\n      return menuState?.horizontal && !parentItemState\n    })\n\n    provide(MENU_GROUP_STATE, reactive({ indent }))\n\n    function renderChildren() {\n      return renderSlot(slots, 'default', {}, () => {\n        if (!props.children?.length) {\n          return []\n        }\n\n        const renderItem = (item: MenuOptions) => (\n          <MenuItem\n            label={item.label}\n            icon={item.icon}\n            icon-props={item.iconProps}\n            disabled={item.disabled}\n            children={item.children}\n            route={item.route}\n            meta={item.meta}\n          >\n            {item.name ? callIfFunc(item.name) : item.label}\n          </MenuItem>\n        )\n\n        return props.children.map(child => {\n          if (child.group) {\n            return (\n              <MenuGroup\n                key={child.label}\n                label={child.name ? callIfFunc(child.name) : child.label}\n              >\n                {child.children?.map(renderItem)}\n              </MenuGroup>\n            )\n          }\n\n          return renderItem(child)\n        })\n      })\n    }\n\n    return () => {\n      if (onlyShowSlot.value) {\n        return slots.default?.()\n      }\n\n      return (\n        <li class={nh.b()}>\n          <div class={nh.be('label')}>\n            <span class={nh.be('title')} style={titleStyle.value}>\n              {slots.label ? slots.label() : props.label}\n            </span>\n          </div>\n          <ul class={nh.be('list')}>{renderChildren()}</ul>\n        </li>\n      )\n    }\n  },\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuGroup\n","import { Icon } from '@/components/icon'\nimport { MenuItem } from '@/components/menu-item'\nimport { Popper } from '@/components/popper'\n\nimport { computed, defineComponent, inject, nextTick, provide, reactive, ref, watch } from 'vue'\n\nimport { useHoverDelay, useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useClickOutside, usePopper, useSetTimeout } from '@vexip-ui/hooks'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { PopperExposed } from '@/components/popper'\nimport type { MenuOptions } from './symbol'\n\nexport default defineComponent({\n  name: 'MenuRest',\n  props: {\n    menus: {\n      type: Array as PropType<MenuOptions[]>,\n      default: () => [],\n    },\n  },\n  setup(props) {\n    const menuState = inject(MENU_STATE, null)\n\n    const nh = useNameHelper('menu')\n    const icons = useIcons()\n    const hoverDelay = useHoverDelay()\n\n    const groupExpanded = ref(false)\n    const sonSelected = ref(false)\n    const popperShow = ref(false)\n\n    const transfer = computed(() => menuState?.transfer ?? false)\n    const dropTrigger = computed(() => menuState?.trigger || 'hover')\n\n    const wrapper = useClickOutside(handleClickOutside)\n    const popper = ref<PopperExposed>()\n    const { reference, transferTo, updatePopper } = usePopper({\n      placement: ref('bottom'),\n      transfer,\n      wrapper,\n      popper: computed(() => popper.value?.wrapper),\n    })\n\n    const itemState = reactive({\n      el: wrapper,\n      label: '',\n      indent: 1,\n      groupExpanded,\n      showGroup: groupExpanded,\n      isUsePopper: true,\n      parentState: null,\n      transfer,\n      cachedExpanded: false,\n      updateSonSelected,\n      toggleGroupExpanded,\n      handleMouseEnter,\n      handleMouseLeave,\n    })\n\n    provide(MENU_ITEM_STATE, itemState)\n\n    watch(groupExpanded, value => {\n      if (value) {\n        popperShow.value = true\n        updatePopper()\n      }\n    })\n\n    function updateSonSelected(selected: boolean) {\n      sonSelected.value = selected\n    }\n\n    function toggleGroupExpanded(expanded: boolean) {\n      groupExpanded.value = expanded\n    }\n\n    const { timer } = useSetTimeout()\n\n    let mouseInList = false\n    let reproduce = false\n\n    function handleMouseEnter() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || dropTrigger.value !== 'hover') return\n\n      if (!groupExpanded.value && popperShow.value) {\n        reproduce = true\n        return\n      }\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = true\n      }, hoverDelay.value)\n    }\n\n    function handleMouseLeave() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !popperShow.value || dropTrigger.value !== 'hover') return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = false\n      }, hoverDelay.value)\n    }\n\n    function handleClick() {\n      if (dropTrigger.value === 'click') {\n        groupExpanded.value = true\n      }\n    }\n\n    function handleClickOutside() {\n      if (dropTrigger.value === 'click') {\n        nextTick(() => {\n          groupExpanded.value = false\n        })\n      }\n    }\n\n    function handlePopperHide() {\n      popperShow.value = false\n      groupExpanded.value = false\n\n      if (reproduce) {\n        reproduce = false\n        groupExpanded.value = true\n      }\n    }\n\n    function renderMenuItems() {\n      if (!props.menus?.length) {\n        return null\n      }\n\n      return props.menus.map(item => (\n        <MenuItem\n          key={item.label}\n          label={item.label}\n          icon={item.icon}\n          icon-props={item.iconProps}\n          disabled={item.disabled}\n          children={item.children}\n          route={item.route}\n          meta={item.meta}\n        >\n          {item.name ? callIfFunc(item.name) : item.label}\n        </MenuItem>\n      ))\n    }\n\n    return () => {\n      return (\n        <div\n          ref={wrapper}\n          class={nh.be('rest')}\n          onMouseenter={handleMouseEnter}\n          onMouseleave={handleMouseLeave}\n        >\n          <div\n            ref={reference}\n            class={[nh.be('rest-handler'), sonSelected.value && nh.bem('rest-handler', 'selected')]}\n            onClick={handleClick}\n          >\n            <Icon {...icons.value.ellipsis}></Icon>\n          </div>\n          <Popper\n            ref={popper}\n            class={[nh.be('popper'), nh.bs('vars'), nh.bem('popper', 'drop')]}\n            visible={popperShow.value && groupExpanded.value}\n            alive={!transferTo.value || popperShow.value}\n            to={transferTo.value}\n            transition={nh.ns('drop')}\n            onAfterLeave={handlePopperHide}\n            onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\n            onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\n          >\n            <ul class={[nh.be('list'), nh.bem('list', 'theme')]}>{renderMenuItems()}</ul>\n          </Popper>\n        </div>\n      )\n    }\n  },\n})\n","import { MenuItem } from '@/components/menu-item'\nimport { MenuGroup } from '@/components/menu-group'\nimport { Overflow } from '@/components/overflow'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc, isDefined } from '@vexip-ui/utils'\nimport MenuRest from './menu-rest'\nimport { menuProps } from './props'\nimport { MENU_STATE } from './symbol'\n\nimport type { VNode } from 'vue'\nimport type { RouteLocationRaw, RouteRecordRaw } from 'vue-router'\nimport type {\n  MenuArrowSlotParams,\n  MenuItemState,\n  MenuMarkerType,\n  MenuOptions,\n  MenuState,\n} from './symbol'\n\nconst menuMarkerTypes = Object.freeze<MenuMarkerType[]>(['top', 'right', 'bottom', 'left', 'none'])\n\nexport default defineComponent({\n  name: 'Menu',\n  props: menuProps,\n  emits: ['update:active'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('menu', _props, {\n      active: {\n        default: null,\n        static: true,\n      },\n      accordion: false,\n      markerType: {\n        default: 'right',\n        validator: value => menuMarkerTypes.includes(value),\n      },\n      reduced: false,\n      horizontal: false,\n      transfer: false,\n      trigger: 'hover',\n      groupType: {\n        default: 'collapse',\n        validator: value => ['collapse', 'dropdown'].includes(value),\n      },\n      tooltipReverse: null,\n      options: {\n        default: () => [],\n        static: true,\n      },\n      router: null,\n      manualRoute: false,\n      indent: null,\n      arrow: null,\n      slots: () => ({}),\n    })\n\n    const nh = useNameHelper('menu')\n    const menuItemSet = new Set<MenuItemState>()\n    const currentActive = ref(props.active)\n    const isReduced = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const rest = ref<InstanceType<typeof MenuRest>>()\n\n    const markerType = computed(() => {\n      if (props.horizontal && (props.markerType === 'left' || props.markerType === 'right')) {\n        return 'bottom'\n      } else if (\n        !props.horizontal &&\n        (props.markerType === 'top' || props.markerType === 'bottom')\n      ) {\n        return 'right'\n      } else {\n        return props.markerType ?? (props.horizontal ? 'bottom' : 'right')\n      }\n    })\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(`marker-${markerType.value}`),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('reduced')]: isReduced.value,\n          [nh.bm('dropdown')]: props.groupType === 'dropdown',\n          [nh.bm('horizontal')]: props.horizontal,\n        },\n      ]\n    })\n    const style = computed(() => {\n      const style: Record<string, string> = {}\n\n      if (isDefined(props.indent)) {\n        style[nh.cv('indent-width')] =\n          typeof props.indent === 'number' ? `${props.indent}px` : props.indent\n      }\n\n      return style\n    })\n    const menus = computed(() => {\n      if (props.options?.length) {\n        return props.options\n      }\n\n      const routes = props.router?.options.routes\n\n      if (!routes?.length) {\n        return []\n      }\n\n      return parseRoutesToMenus(routes)\n    })\n    const currentRoute = computed(() => props.router?.currentRoute.value)\n\n    provide<MenuState>(\n      MENU_STATE,\n      reactive({\n        currentActive,\n        isReduced,\n        horizontal: toRef(props, 'horizontal'),\n        accordion: toRef(props, 'accordion'),\n        groupType: toRef(props, 'groupType'),\n        tooltipReverse: toRef(props, 'tooltipReverse'),\n        transfer: toRef(props, 'transfer'),\n        trigger: toRef(props, 'trigger'),\n        markerType,\n        arrow: toRef(props, 'arrow'),\n        handleSelect,\n        handleExpand,\n        increaseItem,\n        decreaseItem,\n        doForEachItem,\n        renderItemArrow,\n      }),\n    )\n\n    watch(\n      () => props.active,\n      value => {\n        if (value !== currentActive.value) {\n          currentActive.value = value\n        }\n      },\n    )\n    watch(\n      () => props.reduced,\n      value => {\n        if (props.horizontal) return\n\n        if (value) {\n          handleMenuReduce()\n        } else {\n          handleMenuExpand()\n        }\n      },\n    )\n    watch(currentRoute, value => {\n      if (!props.manualRoute && value) {\n        currentActive.value = (value.meta?.label as string) ?? value.path\n      }\n    })\n\n    onMounted(() => {\n      nextTick(() => {\n        if (!props.horizontal && props.reduced) handleMenuReduce()\n      })\n\n      if (props.router && !props.manualRoute && !currentActive.value) {\n        const route = currentRoute.value\n\n        if (route) {\n          currentActive.value = (route.meta?.label as string) ?? currentRoute.value.path\n        }\n      }\n    })\n\n    expose({ expandItemByLabel })\n\n    function parseRoutesToMenus(routes: Readonly<RouteRecordRaw[]>) {\n      const root: MenuOptions = { label: '', children: [] }\n      const loop = Array.from(routes).map(route => ({ parent: root, route }))\n\n      while (loop.length) {\n        const { parent, route } = loop.shift()!\n        const routeMeta = (route.meta || {}) as any\n\n        if (routeMeta.menu === false) {\n          continue\n        }\n\n        const options = {\n          ...routeMeta,\n          route,\n          label: routeMeta.label || route.path,\n          name: routeMeta.name || route.name,\n        } as MenuOptions\n\n        if (!parent.children) {\n          parent.children = []\n        }\n\n        parent.children.push(options)\n\n        if (route.children) {\n          loop.push(...route.children.map(route => ({ parent: options, route })))\n        }\n      }\n\n      return root.children!\n    }\n\n    function increaseItem(state: MenuItemState) {\n      menuItemSet.add(state)\n    }\n\n    function decreaseItem(state: MenuItemState) {\n      menuItemSet.delete(state)\n    }\n\n    function doForEachItem(cb: (item: MenuItemState) => void) {\n      for (const item of menuItemSet) {\n        cb(item)\n      }\n    }\n\n    function handleSelect(label: string, meta: Record<string, any>, route?: RouteLocationRaw) {\n      if (currentActive.value !== label) {\n        currentActive.value = label\n\n        emit('update:active', label)\n        emitEvent(props.onSelect, label, meta)\n\n        if (!props.manualRoute && props.router && route) {\n          props.router.push(route)\n        }\n      }\n    }\n\n    function handleExpand(label: string, expanded: boolean, meta: Record<string, any>) {\n      if (expanded) {\n        emitEvent(props.onExpand, label, meta)\n      } else {\n        emitEvent(props.onReduce, label, meta)\n      }\n    }\n\n    function handleMenuReduce() {\n      if (props.horizontal) return\n\n      let firstExpandedItem: MenuItemState | null = null\n\n      for (const item of menuItemSet) {\n        item.cachedExpanded = item.showGroup\n\n        if (!firstExpandedItem && item.showGroup) {\n          firstExpandedItem = item\n        }\n\n        item.toggleGroupExpanded(false)\n      }\n\n      isReduced.value = true\n    }\n\n    function handleMenuExpand() {\n      if (props.horizontal) return\n\n      isReduced.value = false\n\n      if (wrapper.value) {\n        const el = wrapper.value\n        const callback = () => {\n          requestAnimationFrame(() => {\n            el.removeEventListener('transitionend', callback)\n\n            const selectedItem = Array.from(menuItemSet).find(\n              item => item.label === currentActive.value,\n            )\n\n            requestAnimationFrame(() => {\n              requestAnimationFrame(() => {\n                for (const item of menuItemSet) {\n                  item.groupExpanded = item.cachedExpanded\n                }\n\n                if (selectedItem) {\n                  let parent = selectedItem.parentState\n\n                  while (parent) {\n                    parent.groupExpanded = true\n                    parent = parent.parentState\n                  }\n                }\n              })\n            })\n          })\n        }\n\n        el.addEventListener('transitionend', callback)\n      }\n    }\n\n    function expandItemByLabel(label: string) {\n      for (const item of menuItemSet) {\n        if (item.label === label) {\n          item.toggleGroupExpanded(true, true)\n        }\n      }\n    }\n\n    function renderItemArrow(params: MenuArrowSlotParams, renderDefault: () => VNode) {\n      return renderSlot(slots, 'arrow', { ...params }, () => [\n        <Renderer renderer={props.slots.arrow} data={params}>\n          {renderDefault()}\n        </Renderer>,\n      ])\n    }\n\n    function renderMenuItem(item: MenuOptions) {\n      return (\n        <MenuItem\n          label={item.label}\n          icon={item.icon}\n          icon-props={item.iconProps}\n          disabled={item.disabled}\n          children={item.children}\n          route={item.route}\n          meta={item.meta}\n        >\n          {item.name ? callIfFunc(item.name) : item.label}\n        </MenuItem>\n      )\n    }\n\n    function renderMenus() {\n      return menus.value.map(menu =>\n        menu.group ? (\n          <MenuGroup key={menu.label} label={menu.name ? callIfFunc(menu.name) : menu.label}>\n            {menu.children?.length ? menu.children.map(renderMenuItem) : null}\n          </MenuGroup>\n        ) : (\n          renderMenuItem(menu)\n        ),\n      )\n    }\n\n    return () => {\n      return (\n        <ul ref={wrapper} class={className.value} role={'menu'} tabindex={-1} style={style.value}>\n          {renderSlot(slots, 'default', {}, () => {\n            return props.horizontal\n              ? [\n                <Overflow class={nh.be('overflow')} inherit key={0}>\n                  {{\n                    default: renderMenus,\n                    counter: ({ count }: { count: number }) => (\n                      <MenuRest ref={rest} menus={menus.value.slice(-count)}></MenuRest>\n                    ),\n                  }}\n                </Overflow>,\n              ]\n              : renderMenus()\n          })}\n        </ul>\n      )\n    }\n  },\n})\n","import { booleanProp, buildProps, eventProp, iconProp, sizeProp, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { SwitchSlots } from './symbol'\n\nexport const switchProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  value: booleanProp,\n  disabled: booleanProp,\n  openColor: String,\n  closeColor: String,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  openIcon: iconProp,\n  closeIcon: iconProp,\n  openText: String,\n  closeText: String,\n  onBeforeChange: Function as PropType<(checked: boolean) => unknown>,\n  rectangle: booleanProp,\n  name: String,\n  slots: Object as PropType<SwitchSlots>,\n  onChange: eventProp<(value: boolean) => void>(),\n})\n\nexport type SwitchProps = ExtractPropTypes<typeof switchProps>\nexport type SwitchCProps = ConfigurableProps<SwitchProps, never, 'onBeforeChange'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, ref, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { isPromise } from '@vexip-ui/utils'\nimport { switchProps } from './props'\n\nimport type { SwitchSlots } from './symbol'\n\ndefineOptions({ name: 'Switch' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<boolean>(() => input.value?.focus())\n\nconst _props = defineProps(switchProps)\nconst props = useProps('switch', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  disabled: () => disabled.value,\n  openColor: '',\n  closeColor: '',\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingEffect: null,\n  openIcon: createIconProp(),\n  closeIcon: createIconProp(),\n  openText: '',\n  closeText: '',\n  onBeforeChange: {\n    default: null,\n    isFunc: true,\n  },\n  rectangle: false,\n  name: {\n    default: '',\n    static: true,\n  },\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<SwitchSlots>()\n\nconst nh = useNameHelper('switch')\nconst icons = useIcons()\nconst currentValue = ref(props.value)\n\nconst input = ref<HTMLInputElement>()\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('open')]: currentValue.value,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm('rectangle')]: props.rectangle,\n    },\n  ]\n})\nconst style = computed(() => {\n  return {\n    backgroundColor: currentValue.value ? props.openColor : props.closeColor,\n  }\n})\nconst signalStyle = computed(() => {\n  return {\n    color: currentValue.value ? props.openColor : props.closeColor,\n  }\n})\nconst isDisabled = computed(() => {\n  return props.disabled || props.loading\n})\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n  },\n)\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentValue,\n  input,\n  focus: (options?: FocusOptions) => input.value?.focus(options),\n  blur: () => input.value?.blur(),\n})\n\nasync function handleChange(checked = !currentValue.value) {\n  if (checked === currentValue.value) return\n\n  let result: unknown = true\n\n  if (typeof props.onBeforeChange === 'function') {\n    result = props.onBeforeChange(checked)\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    currentValue.value = checked\n\n    emit('update:value', checked)\n    setFieldValue(checked)\n    emitEvent(props.onChange, checked)\n    validateField()\n  }\n}\n</script>\n\n<template>\n  <label\n    :id=\"idFor\"\n    :class=\"className\"\n    role=\"switch\"\n    :aria-checked=\"currentValue\"\n    :aria-disabled=\"isDisabled\"\n    :aria-labelledby=\"labelId\"\n    :style=\"style\"\n  >\n    <input\n      ref=\"input\"\n      type=\"checkbox\"\n      :class=\"nh.be('input')\"\n      :checked=\"currentValue\"\n      :disabled=\"isDisabled\"\n      :name=\"props.name\"\n      @submit.prevent\n      @change=\"handleChange()\"\n      @click.stop\n    />\n    <span :class=\"nh.be('placeholder')\" aria-hidden>\n      <span :class=\"nh.be('open-text')\">\n        <slot name=\"open\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\n        </slot>\n      </span>\n      <span :class=\"nh.be('close-text')\">\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\n        </slot>\n      </span>\n    </span>\n    <span :class=\"nh.be('signal')\" :style=\"signalStyle\">\n      <slot v-if=\"props.loading\" name=\"loading\">\n        <Renderer :renderer=\"props.slots.loading\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </Renderer>\n      </slot>\n      <slot v-else name=\"icon\" :value=\"currentValue\">\n        <Renderer :renderer=\"props.slots.icon\" :data=\"{ value: currentValue }\">\n          <Icon v-if=\"currentValue && props.openIcon\" :icon=\"props.openIcon\"></Icon>\n          <Icon v-else-if=\"!currentValue && props.closeIcon\" :icon=\"props.closeIcon\"></Icon>\n        </Renderer>\n      </slot>\n    </span>\n    <span :class=\"nh.be('label')\">\n      <span v-if=\"currentValue\" :class=\"nh.be('open-text')\">\n        <slot name=\"open\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\n        </slot>\n      </span>\n      <span v-else :class=\"nh.be('close-text')\">\n        <slot name=\"close\">\n          <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\n        </slot>\n      </span>\n    </span>\n  </label>\n</template>\n","import { Avatar } from '@/components/avatar'\nimport { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { DropdownItem } from '@/components/dropdown-item'\nimport { Icon } from '@/components/icon'\nimport { Menu } from '@/components/menu'\nimport { Switch } from '@/components/switch'\n\nimport {\n  computed,\n  defineComponent,\n  onBeforeMount,\n  onMounted,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMounted, useRtl } from '@vexip-ui/hooks'\nimport { isClient } from '@vexip-ui/utils'\nimport { layoutHeaderProps } from './props'\nimport { computeSeriesColors, useLayoutState } from './helper'\n\nimport type { MenuExposed } from '@/components/menu'\nimport type { LayoutConfig, LayoutHeaderAction, LayoutSignType } from './symbol'\n\nexport default defineComponent({\n  name: 'LayoutHeader',\n  props: layoutHeaderProps,\n  emits: ['update:sign-type', 'update:color', 'update:user-dropped', 'update:dark-mode'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('layoutHeader', _props, {\n      locale: null,\n      tag: 'header',\n      logo: '',\n      signName: '',\n      user: {\n        default: () => ({ name: '' }),\n        static: true,\n      },\n      userDropped: false,\n      avatarCircle: false,\n      config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\n      actions: () => [],\n      signType: 'aside',\n      colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\n      color: '',\n      menus: {\n        default: () => [],\n        static: true,\n      },\n      menuProps: null,\n      darkMode: null,\n    })\n\n    const nh = useNameHelper('layout')\n    const icons = useIcons()\n    const locale = useLocale('layout', toRef(props, 'locale'))\n    const layoutState = useLayoutState()\n    const currentSignType = ref<LayoutSignType>(props.signType)\n    const currentUserDropped = ref(props.userDropped)\n\n    const menu = ref<MenuExposed>()\n\n    const { isRtl } = useRtl()\n    const { isMounted } = useMounted()\n\n    const rootEl = computed(() => {\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n      isMounted.value\n      return isClient ? document.documentElement : null\n    })\n    const currentColor = ref(props.color || getBaseColor() || props.colors?.[0])\n    const isDark = ref(false)\n\n    const className = computed(() => {\n      return [\n        nh.be('header'),\n        {\n          [nh.bs('vars')]: !layoutState.isLayout,\n          [nh.bem('header', 'inherit')]: layoutState.isLayout || props.inherit,\n          [nh.bem('header', 'away')]: !layoutState.affixMatched,\n          [nh.bem('header', 'affixed')]: layoutState.affixed,\n        },\n        layoutState.classes.header,\n      ]\n    })\n    const userActions = computed(() => {\n      if (!props.actions?.length) {\n        return [\n          {\n            label: 'signOut',\n            name: locale.value.signOut,\n            icon: icons.value.signOut.icon,\n            iconProps: icons.value.signOut,\n          },\n        ] as LayoutHeaderAction[]\n      }\n\n      return props.actions.filter(action => !action.hidden)\n    })\n    const hasLeft = computed(() => {\n      return !!(props.logo || props.signName || slots.left)\n    })\n    const hasMenu = computed(() => {\n      return !!(props.menus?.length || props.menuProps?.router)\n    })\n\n    const slotParams = shallowReadonly(\n      reactive({\n        expanded: toRef(layoutState, 'expanded'),\n        reduced: toRef(layoutState, 'reduced'),\n        toggleExpanded,\n        toggleReduced,\n        handleColorChange,\n        toggleUserDropped,\n      }),\n    )\n\n    expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel, toggleUserDropped })\n\n    watch(\n      () => props.signType,\n      value => {\n        currentSignType.value = value\n      },\n    )\n    watch(\n      () => props.userDropped,\n      value => {\n        currentUserDropped.value = value\n      },\n    )\n    watch(currentColor, computeSeriesColors)\n    watch(\n      () => props.darkMode,\n      value => {\n        isDark.value = value ?? rootEl.value?.classList.contains('dark') ?? false\n      },\n      { immediate: true },\n    )\n\n    onMounted(() => {\n      toggleTheme(isDark.value)\n    })\n\n    onBeforeMount(() => {\n      watch(\n        () => props.color,\n        value => {\n          currentColor.value = value || getBaseColor() || props.colors?.[0]\n        },\n        { immediate: true },\n      )\n\n      computeSeriesColors(currentColor.value)\n    })\n\n    function getBaseColor() {\n      if (rootEl.value) {\n        return getComputedStyle(rootEl.value).getPropertyValue('--vxp-color-primary-base')\n      }\n\n      return '#339af0'\n    }\n\n    function handleUserActionSelect(label: string, meta: Record<string, any>) {\n      emitEvent(props.onUserAction, label, meta)\n    }\n\n    function handleSignTypeChange(type: LayoutSignType) {\n      layoutState.changeInLock(() => {\n        currentSignType.value = type\n\n        emit('update:sign-type', type)\n        emitEvent(props.onNavChange, type)\n      })\n    }\n\n    function toggleExpanded(expanded = !layoutState.expanded) {\n      layoutState.expanded = expanded\n\n      emitEvent(props.onExpandedChange, expanded)\n    }\n\n    function toggleReduced(reduced = !layoutState.reduced) {\n      layoutState.reduced = reduced\n\n      emitEvent(props.onReducedChange, reduced)\n    }\n\n    function handleColorChange(color: string) {\n      currentColor.value = color\n\n      emit('update:color', color)\n      emitEvent(props.onColorChange, color)\n    }\n\n    function handleSignClick(event: MouseEvent) {\n      emitEvent(props.onSignClick, event)\n    }\n\n    function toggleUserDropped(dropped = !currentUserDropped.value) {\n      currentUserDropped.value = dropped\n\n      emit('update:user-dropped', dropped)\n      emitEvent(props.onDroppedChange, dropped)\n    }\n\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\n      toggleUserDropped(false)\n      emitEvent(props.onMenuSelect, label, meta)\n    }\n\n    function expandMenuByLabel(label: string) {\n      menu.value?.expandItemByLabel(label)\n    }\n\n    function toggleTheme(darkMode: boolean) {\n      isDark.value = darkMode\n\n      emit('update:dark-mode', darkMode)\n      emitEvent(props.onToggleTheme, darkMode)\n\n      if (!isClient) return\n\n      requestAnimationFrame(() => {\n        if (rootEl.value) {\n          if (darkMode) {\n            rootEl.value.classList.add('dark')\n          } else {\n            rootEl.value.classList.remove('dark')\n          }\n        }\n      })\n    }\n\n    function renderCheck() {\n      return <Icon {...icons.value.check}></Icon>\n    }\n\n    function renderLayoutConfig() {\n      return (\n        <div class={nh.be('config-unit')}>\n          <div\n            class={[nh.be('brief-block'), nh.bem('brief-block', 'aside')]}\n            onClick={() => handleSignTypeChange('aside')}\n          >\n            {currentSignType.value === 'aside' && renderCheck()}\n          </div>\n          <div class={nh.be('brief-block')} onClick={() => handleSignTypeChange('header')}>\n            {currentSignType.value === 'header' && renderCheck()}\n          </div>\n        </div>\n      )\n    }\n\n    function renderThemeConfig() {\n      return (\n        <div class={nh.be('config-unit')}>\n          <Switch\n            value={isDark.value}\n            class={[nh.be('theme-mode'), isDark.value && nh.bem('theme-mode', 'dark')]}\n            aria-label={'theme'}\n            onChange={toggleTheme}\n          >\n            {{\n              icon: () =>\n                isDark.value ? (\n                  <Icon {...icons.value.dark}></Icon>\n                ) : (\n                  <Icon {...icons.value.light}></Icon>\n                ),\n            }}\n          </Switch>\n        </div>\n      )\n    }\n\n    function renderColorConfig() {\n      if (!props.colors?.length) {\n        return null\n      }\n\n      return (\n        <div class={nh.be('config-unit')}>\n          {props.colors.map(color => (\n            <div\n              key={color}\n              class={nh.be('major-color')}\n              style={{\n                backgroundColor: color,\n              }}\n              onClick={() => handleColorChange(color)}\n            >\n              {currentColor.value === color && renderCheck()}\n            </div>\n          ))}\n        </div>\n      )\n    }\n\n    function renderUserAvatar() {\n      if (slots.avatar) {\n        return renderSlot(slots, 'avatar', slotParams)\n      }\n\n      if (typeof props.user?.avatar === 'string') {\n        return (\n          <Avatar\n            src={props.user.avatar}\n            circle={props.avatarCircle}\n            onClick={() => toggleUserDropped()}\n          >\n            {{\n              icon: () => <Icon {...icons.value.user}></Icon>,\n            }}\n          </Avatar>\n        )\n      }\n\n      return (\n        <Avatar circle={props.avatarCircle} onClick={() => toggleUserDropped()}>\n          {{\n            icon: () => (\n              <Icon {...icons.value.user} icon={props.user.avatar || icons.value.user.icon}></Icon>\n            ),\n          }}\n        </Avatar>\n      )\n    }\n\n    function renderUserDrop() {\n      return (\n        <DropdownList>\n          {props.user?.name && (\n            <li class={nh.be('user-profile')}>\n              <span class={nh.be('user-name')}>{props.user.name}</span>\n              {props.user.email && <span class={nh.be('user-email')}>{props.user.email}</span>}\n            </li>\n          )}\n          {props.config?.length ? renderConfigs() : null}\n          {userActions.value.map(action => (\n            <DropdownItem\n              key={action.label}\n              class={nh.be('user-action')}\n              label={action.label}\n              disabled={action.disabled}\n              divided={action.divided}\n              onSelect={() => handleUserActionSelect(action.label, action.meta || {})}\n            >\n              {action.icon && (\n                <Icon\n                  {...action.iconProps}\n                  icon={action.icon}\n                  style={{ marginRight: '6px' }}\n                ></Icon>\n              )}\n              {action.name || action.label}\n            </DropdownItem>\n          ))}\n        </DropdownList>\n      )\n    }\n\n    function renderConfigs() {\n      return (\n        <li class={nh.be('config')}>\n          {props.config.includes('nav') &&\n            layoutState.navConfig && [\n            <div key={1} class={nh.be('config-label')}>\n              {locale.value.signType}\n            </div>,\n            renderLayoutConfig(),\n          ]}\n          {props.config.includes('theme') && [\n            <div key={2} class={nh.be('config-label')}>\n              {locale.value.themeMode}\n            </div>,\n            renderThemeConfig(),\n          ]}\n          {props.config.includes('color') && [\n            <div key={3} class={nh.be('config-label')}>\n              {locale.value.majorColor}\n            </div>,\n            renderColorConfig(),\n          ]}\n        </li>\n      )\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'header') as any\n\n      return (\n        <CustomTag class={className.value}>\n          {hasLeft.value && (\n            <div class={[nh.be('header-left'), layoutState.classes.headerLeft]}>\n              {slots.left ? (\n                renderSlot(slots, 'left', slotParams)\n              ) : props.signType === 'header' ? (\n                <div class={nh.be('sign')} onClick={handleSignClick}>\n                  {props.logo && (\n                    <div class={nh.be('logo')}>\n                      <img src={props.logo} alt={'Logo'} />\n                    </div>\n                  )}\n                  {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\n                </div>\n              ) : null}\n            </div>\n          )}\n          <div class={[nh.be('header-main'), layoutState.classes.headerMain]}>\n            {slots.default ? (\n              renderSlot(slots, 'default', slotParams)\n            ) : hasMenu.value ? (\n              <Menu\n                ref={menu}\n                {...(props.menuProps || {})}\n                horizontal\n                transfer\n                options={props.menus}\n                onSelect={handleMenuSelect}\n              ></Menu>\n            ) : null}\n          </div>\n          {slots.right && (\n            <div class={[nh.be('header-right'), layoutState.classes.headerRight]}>\n              {renderSlot(slots, 'right', slotParams)}\n            </div>\n          )}\n          {slots.user ? (\n            renderSlot(slots, 'user', slotParams)\n          ) : (\n            <Dropdown\n              class={[nh.be('user'), layoutState.classes.headerUser]}\n              transfer\n              placement={isRtl.value ? 'bottom-start' : 'bottom-end'}\n              visible={currentUserDropped.value}\n              trigger={'custom'}\n              onClickOutside={() => toggleUserDropped(false)}\n            >\n              {{\n                default: renderUserAvatar,\n                drop: renderUserDrop,\n              }}\n            </Dropdown>\n          )}\n        </CustomTag>\n      )\n    }\n  },\n})\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { LinkerType } from './symbol'\n\nexport const linkerProps = buildProps({\n  to: String,\n  type: String as PropType<LinkerType>,\n  icon: iconProp,\n  underline: booleanProp,\n  disabled: booleanProp,\n  target: String,\n  onClick: eventProp<(event: MouseEvent) => void>(),\n})\n\nexport type LinkerProps = ExtractPropTypes<typeof linkerProps>\nexport type LinkerCProps = ConfigurableProps<LinkerProps, 'to'>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\n\nimport { computed } from 'vue'\n\nimport { createIconProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { linkerProps } from './props'\n\nimport type { LinkerType } from './symbol'\n\nconst linkerTypes = Object.freeze<LinkerType[]>([\n  'default',\n  'primary',\n  'success',\n  'error',\n  'warning',\n  'info',\n])\n\ndefineOptions({ name: 'Linker' })\n\nconst _props = defineProps(linkerProps)\nconst props = useProps('linker', _props, {\n  to: {\n    default: null,\n    static: true,\n  },\n  type: {\n    default: 'default' as LinkerType,\n    validator: (value: LinkerType) => linkerTypes.includes(value),\n  },\n  icon: createIconProp(),\n  underline: false,\n  disabled: false,\n  target: '_blank',\n})\n\nconst nh = useNameHelper('linker')\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.type)]: props.type !== 'default',\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('underline')]: props.underline,\n  }\n})\n\nfunction handleClick(event: MouseEvent) {\n  if (props.disabled) {\n    event.preventDefault()\n  }\n\n  emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n  <a\n    :class=\"className\"\n    :href=\"props.to\"\n    tabindex=\"0\"\n    :target=\"props.target\"\n    @click=\"handleClick\"\n  >\n    <slot name=\"icon\">\n      <Icon v-if=\"props.icon\" :class=\"nh.be('icon')\" :icon=\"props.icon\"></Icon>\n    </slot>\n    <slot></slot>\n  </a>\n</template>\n","import { Icon } from '@/components/icon'\nimport { Linker } from '@/components/linker'\n\nimport { computed, defineComponent, renderSlot, toRef } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { layoutFooterProps } from './props'\nimport { useLayoutState, useMediaQuery } from './helper'\n\nexport default defineComponent({\n  name: 'LayoutFooter',\n  props: layoutFooterProps,\n  setup(_props, { slots }) {\n    const props = useProps('layoutFooter', _props, {\n      tag: 'footer',\n      copyright: '',\n      links: () => [],\n      verticalLinks: 'md',\n    })\n\n    const nh = useNameHelper('layout')\n    const layoutState = useLayoutState()\n    const horizontalMatched = useMediaQuery(toRef(props, 'verticalLinks'))\n\n    const className = computed(() => {\n      return [\n        nh.be('footer'),\n        {\n          [nh.bs('vars')]: !layoutState.isLayout,\n          [nh.bem('footer', 'inherit')]: layoutState.isLayout || props.inherit,\n        },\n        layoutState.classes.footer,\n      ]\n    })\n\n    function renderLinks() {\n      if (!props.links?.length) {\n        return <div role={'none'} aria-hidden style={'display: none'}></div>\n      }\n\n      return (\n        <div\n          class={[\n            nh.be('links'),\n            !horizontalMatched.value && nh.bem('links', 'vertical'),\n            layoutState.classes.footerLinks,\n          ]}\n        >\n          <div class={nh.be('links-row')}>\n            {props.links.map((group, index) => (\n              <div\n                key={index}\n                class={[\n                  nh.be('link-group'),\n                  !horizontalMatched.value && nh.bem('link-group', 'vertical'),\n                ]}\n              >\n                <div class={[nh.be('link-name'), nh.bem('link-name', 'group')]}>\n                  {group.to ? (\n                    <Linker icon={group.icon} to={group.to} target={group.target}>\n                      {group.name}\n                    </Linker>\n                  ) : (\n                    [group.icon && <Icon icon={group.icon}></Icon>, group.name]\n                  )}\n                  {group.subname && <div class={nh.be('link-subname')}>{`- ${group.subname}`}</div>}\n                </div>\n                {group.children?.length\n                  ? group.children.map((link, index) => (\n                    <div key={index} class={nh.be('link')}>\n                      <Linker icon={link.icon} to={link.to} target={link.target}>\n                        {link.name}\n                      </Linker>\n                      {link.subname && (\n                        <div class={nh.be('link-subname')}>{`- ${link.subname}`}</div>\n                      )}\n                    </div>\n                  ))\n                  : null}\n              </div>\n            ))}\n          </div>\n        </div>\n      )\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'footer') as any\n\n      return (\n        <CustomTag class={className.value}>\n          {slots.links ? renderSlot(slots, 'links') : renderLinks()}\n          <div class={[nh.be('copyright'), layoutState.classes.copyright]}>\n            {slots.copyright ? slots.copyright() : props.copyright}\n          </div>\n        </CustomTag>\n      )\n    }\n  },\n})\n","import { Icon } from '@/components/icon'\nimport { Menu } from '@/components/menu'\nimport { NativeScroll } from '@/components/native-scroll'\n\nimport {\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { layoutAsideProps } from './props'\nimport { useLayoutState, useMediaQuery, useUpdateCounter } from './helper'\n\nimport type { MenuExposed } from '@/components/menu'\n\nexport default defineComponent({\n  name: 'LayoutAside',\n  props: layoutAsideProps,\n  emits: ['update:reduced', 'update:expanded'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('layoutAside', _props, {\n      tag: 'aside',\n      expanded: false,\n      reduced: false,\n      menus: {\n        default: () => [],\n        static: true,\n      },\n      menuProps: null,\n      logo: '',\n      signName: '',\n      fixed: 'lg',\n      signType: 'aside',\n    })\n\n    const nh = useNameHelper('layout')\n    const icons = useIcons()\n\n    const layoutState = useLayoutState()\n    const currentReduced = ref(props.reduced)\n    const currentExpanded = ref(props.expanded)\n    const scrollHeight = ref('100%')\n\n    const matched = useMediaQuery(toRef(props, 'fixed'))\n    const counter = useUpdateCounter()\n\n    const top = ref<HTMLElement>()\n    const bottom = ref<HTMLElement>()\n    const menu = ref<MenuExposed>()\n\n    const className = computed(() => {\n      return [\n        nh.be('aside'),\n        {\n          [nh.bs('vars')]: !layoutState.isLayout,\n          [nh.bem('aside', 'inherit')]: layoutState.isLayout || props.inherit,\n          [nh.bem('aside', 'fixed')]: matched.value,\n          [nh.bem('aside', 'expanded')]: currentExpanded.value,\n          [nh.bem('aside', 'reduced')]: currentReduced.value,\n          [nh.bem('aside', 'no-sign')]: props.signType !== 'aside',\n        },\n        layoutState.classes.aside,\n      ]\n    })\n    const hasTop = computed(() => {\n      return !!(props.logo || props.signName || slots.top)\n    })\n    const hasMenu = computed(() => {\n      return !!(props.menus?.length || props.menuProps?.router)\n    })\n\n    const slotParams = shallowReadonly(\n      reactive({\n        expanded: currentExpanded,\n        reduced: currentReduced,\n        toggleExpanded,\n        toggleReduced,\n      }),\n    )\n\n    expose({ menu, toggleExpanded, toggleReduced, expandMenuByLabel })\n\n    watch(\n      () => props.reduced,\n      value => {\n        currentReduced.value = value\n      },\n    )\n    watch(\n      () => props.expanded,\n      value => {\n        currentExpanded.value = value\n      },\n    )\n    watch(\n      matched,\n      value => {\n        layoutState.useExpand = !value\n        value && toggleExpanded(false)\n      },\n      { immediate: true },\n    )\n    watch(counter, () => computeScrollHeight)\n\n    function computeScrollHeight() {\n      let topHeight = 0\n      let bottomHeight = 0\n\n      if (top.value) {\n        topHeight = top.value.offsetHeight\n      }\n\n      if (bottom.value) {\n        bottomHeight = bottom.value.offsetHeight\n      }\n\n      if (topHeight || bottomHeight) {\n        scrollHeight.value = `calc(100% - ${topHeight + bottomHeight}px)`\n      } else {\n        scrollHeight.value = '100%'\n      }\n    }\n\n    function toggleExpanded(expanded = !currentExpanded.value) {\n      currentExpanded.value = expanded\n\n      emit('update:expanded', expanded)\n      emitEvent(props.onExpandedChange, expanded)\n    }\n\n    function toggleReduced(reduced = !currentReduced.value) {\n      currentReduced.value = reduced\n\n      emit('update:reduced', reduced)\n      emitEvent(props.onReducedChange, reduced)\n    }\n\n    function handleSignClick(event: MouseEvent) {\n      emitEvent(props.onSignClick, event)\n    }\n\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\n      emitEvent(props.onMenuSelect, label, meta)\n    }\n\n    function expandMenuByLabel(label: string) {\n      menu.value?.expandItemByLabel(label)\n    }\n\n    return () => {\n      const CustomTag = (props.tag || 'aside') as any\n\n      return (\n        <CustomTag class={className.value}>\n          {hasTop.value && (\n            <div ref={top} class={[nh.be('aside-top'), layoutState.classes.asideTop]}>\n              {slots.top ? (\n                renderSlot(slots, 'top', slotParams)\n              ) : (\n                <div class={nh.be('sign')} onClick={handleSignClick}>\n                  {props.logo && (\n                    <div class={nh.be('logo')}>\n                      <img src={props.logo} alt={'Logo'} />\n                    </div>\n                  )}\n                  {props.signName && <span class={nh.be('sign-name')}>{props.signName}</span>}\n                </div>\n              )}\n            </div>\n          )}\n          <NativeScroll\n            class={[nh.be('aside-main'), layoutState.classes.main]}\n            use-y-bar\n            observe-deep\n            height={scrollHeight.value}\n          >\n            {slots.default ? (\n              renderSlot(slots, 'default', slotParams)\n            ) : hasMenu.value ? (\n              <Menu\n                ref={menu}\n                {...(props.menuProps || {})}\n                transfer\n                options={props.menus}\n                reduced={currentReduced.value}\n                onSelect={handleMenuSelect}\n              ></Menu>\n            ) : null}\n          </NativeScroll>\n          <div ref={bottom} class={[nh.be('aside-bottom'), layoutState.classes.asideBottom]}>\n            {slots.bottom ? (\n              renderSlot(slots, 'bottom', slotParams)\n            ) : (\n              <div class={nh.be('reduce-handler')} onClick={() => toggleReduced()}>\n                {currentReduced.value ? (\n                  <Icon {...icons.value.indent}></Icon>\n                ) : (\n                  <Icon {...icons.value.outdent}></Icon>\n                )}\n              </div>\n            )}\n          </div>\n          <div\n            class={[nh.be('expand-handler'), layoutState.classes.expandHandler]}\n            onClick={() => toggleExpanded()}\n          >\n            {slots.expand ? (\n              renderSlot(slots, 'expand', slotParams)\n            ) : (\n              <Icon {...icons.value.angleRight}></Icon>\n            )}\n          </div>\n        </CustomTag>\n      )\n    }\n  },\n})\n","import { Masker } from '@/components/masker'\nimport { NativeScroll } from '@/components/native-scroll'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  defineComponent,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { createSlotRender, useMounted } from '@vexip-ui/hooks'\nimport { getYBorder, isClient, runQueueFrame } from '@vexip-ui/utils'\nimport LayoutMain from './layout-main'\nimport LayoutHeader from './layout-header'\nimport LayoutFooter from './layout-footer'\nimport LayoutAside from './layout-aside'\nimport { layoutProps } from './props'\nimport { useMediaQuery } from './helper'\nimport { LAYOUT_STATE } from './symbol'\n\nimport type { NativeScrollExposed } from '@/components/native-scroll'\nimport type {\n  LayoutAsideExposed,\n  LayoutConfig,\n  LayoutHeaderExposed,\n  LayoutSignType,\n} from './symbol'\n\nexport default defineComponent({\n  name: 'Layout',\n  props: layoutProps,\n  emits: [\n    'update:expanded',\n    'update:reduced',\n    'update:sign-type',\n    'update:color',\n    'update:dark-mode',\n  ],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('layout', _props, {\n      locale: null,\n      noAside: false,\n      footer: false,\n      tag: 'section',\n      menus: {\n        default: () => [],\n        static: true,\n      },\n      menuProps: null,\n      logo: '',\n      signName: '',\n      config: () => ['nav', 'theme', 'color'] as LayoutConfig[],\n      user: null,\n      actions: () => [],\n      expanded: false,\n      reduced: false,\n      avatarCircle: false,\n      signType: 'aside',\n      headerFixed: 'lg',\n      asideFixed: 'lg',\n      copyright: '',\n      links: () => [],\n      colors: () => ['#339af0', '#f03e3e', '#be4bdb', '#7950f2', '#1b9e44', '#f76707'],\n      color: '',\n      miniHeaderSign: 'lg',\n      verticalLinks: 'md',\n      darkMode: null,\n      fixedMain: false,\n      fitWindow: false,\n      innerClasses: () => ({}),\n      noHeader: false,\n      noMasker: false,\n    })\n\n    const nh = useNameHelper('layout')\n    const locked = ref(false)\n    // const asideActive = ref(!props.noAside)\n    const asideExpanded = ref(props.expanded)\n    const asideReduced = ref(props.reduced)\n    const currentSignType = ref<LayoutSignType>(props.signType)\n    const userDropped = ref(false)\n    const currentColor = ref(props.color)\n\n    const { isMounted } = useMounted('frame')\n\n    const section = ref<HTMLElement>()\n    const scroll = ref<NativeScrollExposed>()\n    const header = ref<LayoutHeaderExposed>()\n    const aside = ref<LayoutAsideExposed>()\n\n    const affixMatched = useMediaQuery(toRef(props, 'headerFixed'))\n    const expandMatched = useMediaQuery(toRef(props, 'asideFixed'))\n    const signNameMatched = useMediaQuery(toRef(props, 'miniHeaderSign'))\n\n    const state = reactive({\n      isLayout: true,\n      locked: computed(() => locked.value),\n      affixed: false,\n      scrollY: 0,\n      affixMatched,\n      expandMatched,\n      useExpand: false,\n      expanded: asideExpanded,\n      reduced: asideReduced,\n      navConfig: computed(() => !props.noAside),\n      classes: toRef(props, 'innerClasses'),\n      changeInLock,\n    })\n\n    const isHeaderMain = computed(() => !props.noHeader && currentSignType.value === 'header')\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('no-aside')]: props.noAside,\n          [nh.bm('no-header')]: props.noHeader,\n          [nh.bm('header-main')]: isHeaderMain.value,\n          [nh.bm('locked')]: !isMounted.value || locked.value,\n          [nh.bm('fit-window')]: props.fitWindow,\n        },\n      ]\n    })\n    const rootEl = computed(() => {\n      return isClient && isMounted.value ? document.documentElement : null\n    })\n    const signInHeader = computed(() => {\n      return props.noAside || isHeaderMain.value || state.useExpand\n    })\n    const menu = computed(() => aside.value?.menu || header.value?.menu)\n    const isDark = ref(props.darkMode)\n    const viewHeight = ref('100%')\n\n    const style = computed(() => {\n      return {\n        [nh.cv('view-height')]: props.fitWindow ? '100vh' : viewHeight.value,\n      }\n    })\n\n    const getIndex = useZIndex()\n    const zIndex = ref(asideExpanded.value ? getIndex() : 0)\n\n    const slotParams = shallowReadonly(\n      reactive({\n        expanded: asideExpanded,\n        reduced: asideReduced,\n        toggleExpanded,\n        toggleReduced,\n      }),\n    )\n\n    provide(LAYOUT_STATE, state)\n\n    expose({ scroll, menu, toggleExpanded, toggleReduced, expandMenuByLabel })\n\n    watch(affixMatched, value => {\n      state.affixed = !value && state.scrollY >= 50\n    })\n    watch(\n      () => props.expanded,\n      value => {\n        asideExpanded.value = value\n      },\n    )\n    watch(asideExpanded, value => {\n      if (state.useExpand && value) {\n        zIndex.value = getIndex()\n      }\n    })\n    watch(\n      () => props.reduced,\n      value => {\n        asideReduced.value = value\n      },\n    )\n    // watch(\n    //   () => props.noAside,\n    //   value => {\n    //     changeInLock(() => (asideActive.value = value))\n    //   }\n    // )\n    watch(currentSignType, value => {\n      emit('update:sign-type', value)\n      emitEvent(props.onNavChange, value)\n    })\n    watch(\n      () => props.color,\n      value => {\n        currentColor.value = value || props.colors?.[0] || getBaseColor()\n      },\n    )\n    watch(currentColor, value => {\n      emit('update:color', value)\n      emitEvent(props.onColorChange, value)\n    })\n    watch(\n      () => props.darkMode,\n      value => {\n        isDark.value = value\n      },\n    )\n\n    function getBaseColor() {\n      if (rootEl.value) {\n        return getComputedStyle(rootEl.value).getPropertyValue('--vxp-color-primary-base')\n      }\n\n      return '#339af0'\n    }\n\n    function toggleExpanded(expanded = !asideReduced.value) {\n      asideExpanded.value = expanded\n\n      emit('update:expanded', expanded)\n      emitEvent(props.onExpandedChange, expanded)\n    }\n\n    function toggleReduced(reduced = !asideReduced.value) {\n      asideReduced.value = reduced\n\n      emit('update:reduced', reduced)\n      emitEvent(props.onReducedChange, reduced)\n    }\n\n    function handleSignClick(event: MouseEvent) {\n      emitEvent(props.onSignClick, event)\n    }\n\n    function handleMenuSelect(label: string, meta: Record<string, any>) {\n      emitEvent(props.onMenuSelect, label, meta)\n    }\n\n    function handleToggleTheme(isDark: boolean) {\n      emit('update:dark-mode', isDark)\n      emitEvent(props.onToggleTheme, isDark)\n    }\n\n    function handleUserAction(label: string, meta: Record<string, any>) {\n      emitEvent(props.onUserAction, label, meta)\n    }\n\n    function expandMenuByLabel(label: string) {\n      menu.value?.expandItemByLabel(label)\n    }\n\n    function handleResize() {\n      if (scroll.value?.$el) {\n        viewHeight.value = `${scroll.value.$el.offsetHeight - getYBorder(scroll.value.$el)}px`\n      }\n\n      emitEvent(props.onContentResize)\n    }\n\n    let cancelChange: (() => void) | undefined\n\n    function changeInLock(doChange: () => void) {\n      cancelChange?.()\n      cancelChange = runQueueFrame([\n        () => (locked.value = true),\n        doChange,\n        () => (locked.value = false),\n      ])\n    }\n\n    function stopAndPrevent(event: Event) {\n      event.stopPropagation()\n      event.preventDefault()\n    }\n\n    function renderSign() {\n      if (!props.logo && !props.signName && !slots.sign) {\n        return null\n      }\n\n      if (slots.sign) {\n        return renderSlot(slots, 'sign', slotParams)\n      }\n\n      const showSignName = props.signName && !(signInHeader.value && !signNameMatched.value)\n\n      return (\n        <div\n          class={[nh.be('sign'), !showSignName && nh.bem('sign', 'logo-only')]}\n          onClick={handleSignClick}\n        >\n          {[\n            props.logo && (\n              <div class={nh.be('logo')}>\n                <img src={props.logo} alt={'Logo'} />\n              </div>\n            ),\n            showSignName && <span class={nh.be('sign-name')}>{props.signName}</span>,\n          ]}\n        </div>\n      )\n    }\n\n    function renderHeader() {\n      if (props.noHeader) {\n        return <header role={'none'} aria-hidden style={'display: none'}></header>\n      }\n\n      if (slots.header) {\n        return renderSlot(slots, 'header', slotParams)\n      }\n\n      return (\n        <LayoutHeader\n          ref={header}\n          v-model:sign-type={currentSignType.value}\n          v-model:user-dropped={userDropped.value}\n          v-model:color={currentColor.value}\n          v-model:dark-mode={isDark.value}\n          inherit\n          locale={props.locale}\n          user={props.user}\n          actions={props.actions}\n          config={props.config}\n          avatar-circle={props.avatarCircle}\n          menus={props.noAside ? props.menus : []}\n          menu-props={props.noAside ? props.menuProps : null}\n          colors={props.colors}\n          onUserAction={handleUserAction}\n          onExpandedChange={toggleExpanded}\n          onReducedChange={toggleReduced}\n          onMenuSelect={handleMenuSelect}\n          onToggleTheme={handleToggleTheme}\n          {...{\n            onWheel: stopAndPrevent,\n            onMousemove: stopAndPrevent,\n          }}\n        >\n          {{\n            left: createSlotRender(slots, ['header-left', 'headerLeft'], () =>\n              signInHeader.value ? renderSign() : null,\n            ),\n            default: createSlotRender(slots, ['header-main', 'headerMain']),\n            right: createSlotRender(slots, ['header-right', 'headerRight']),\n            user: createSlotRender(slots, ['header-user', 'headerUser']),\n            avatar: createSlotRender(slots, ['header-avatar', 'headerAvatar']),\n          }}\n        </LayoutHeader>\n      )\n    }\n\n    function renderAside() {\n      if (props.noAside) {\n        return <div role={'none'} aria-hidden style={'display: none'}></div>\n      }\n\n      return (\n        <div\n          class={[\n            nh.be('sidebar'),\n            !expandMatched.value && nh.bem('sidebar', 'away'),\n            props.innerClasses.sidebar,\n          ]}\n          style={{ zIndex: state.useExpand ? zIndex.value + 1 : undefined }}\n          onWheel={stopAndPrevent}\n          onMousemove={stopAndPrevent}\n        >\n          {slots.aside ? (\n            renderSlot(slots, 'aside', slotParams)\n          ) : (\n            <LayoutAside\n              ref={aside}\n              v-model:expanded={asideExpanded.value}\n              v-model:reduced={asideReduced.value}\n              inherit\n              sign-type={isHeaderMain.value ? 'header' : 'aside'}\n              menus={props.menus}\n              menu-props={props.menuProps}\n              fixed={props.asideFixed}\n              onExpandedChange={toggleExpanded}\n              onReducedChange={toggleReduced}\n              onMenuSelect={handleMenuSelect}\n            >\n              {{\n                top: createSlotRender(slots, ['aside-top', 'asideTop'], () =>\n                  !signInHeader.value ? renderSign() : null,\n                ),\n                default: createSlotRender(slots, ['aside-main', 'asideMain']),\n                bottom: createSlotRender(slots, ['aside-bottom', 'asideBottom']),\n                expand: createSlotRender(slots, ['aside-expand', 'asideExpand']),\n              }}\n            </LayoutAside>\n          )}\n        </div>\n      )\n    }\n\n    function renderMain() {\n      if (slots.default) {\n        return renderSlot(slots, 'default', slotParams)\n      }\n\n      return (\n        <LayoutMain fixed={props.fixedMain}>\n          {{\n            default: createSlotRender(slots, ['main']),\n          }}\n        </LayoutMain>\n      )\n    }\n\n    function renderFooter() {\n      if (slots.footer) {\n        return renderSlot(slots, 'footer', slotParams)\n      }\n\n      return (\n        <LayoutFooter\n          inherit\n          copyright={props.copyright}\n          links={props.links}\n          vertical-links={props.verticalLinks}\n        >\n          {{\n            links: createSlotRender(slots, ['footer-links', 'footerLinks']),\n            copyright: createSlotRender(slots, ['footer-copyright', 'footerCopyright']),\n          }}\n        </LayoutFooter>\n      )\n    }\n\n    function renderMasker() {\n      if (props.noMasker || !state.useExpand) return null\n\n      if (slots.masker) {\n        return renderSlot(slots, 'masker', slotParams)\n      }\n\n      return (\n        <Masker\n          v-model:active={asideExpanded.value}\n          class={nh.be('masker')}\n          inner\n          closable\n          auto-remove\n          transfer={false}\n          style={{ zIndex: zIndex.value }}\n          onToggle={toggleExpanded}\n        ></Masker>\n      )\n    }\n\n    function renderWrapper() {\n      const CustomTag = (props.tag || 'section') as any\n\n      return (\n        <CustomTag\n          class={[\n            nh.be('wrapper'),\n            props.fixedMain && nh.bem('wrapper', 'fixed'),\n            props.innerClasses.wrapper,\n          ]}\n        >\n          {isHeaderMain.value && renderHeader()}\n          {renderAside()}\n          <section\n            ref={section}\n            class={[\n              nh.be('section'),\n              {\n                [nh.bem('section', 'away')]: expandMatched.value,\n                [nh.bem('section', 'reduced')]: asideReduced.value,\n                [nh.bem('section', 'locked')]: locked.value,\n                [nh.bem('section', 'fixed')]: props.fixedMain,\n              },\n              props.innerClasses.section,\n            ]}\n          >\n            {!isHeaderMain.value && renderHeader()}\n            {renderMain()}\n            {props.footer && renderFooter()}\n          </section>\n          {renderMasker()}\n        </CustomTag>\n      )\n    }\n\n    return () => {\n      if (props.fitWindow) {\n        return (\n          <section class={className.value} style={style.value}>\n            <ResizeObserver throttle onResize={handleResize}>\n              {renderWrapper()}\n            </ResizeObserver>\n          </section>\n        )\n      }\n\n      return (\n        <NativeScroll\n          ref={scroll}\n          class={className.value}\n          inherit={props.inherit}\n          use-y-bar\n          observe-deep\n          bar-class={[nh.be('scrollbar'), props.innerClasses.scrollbar]}\n          style={style.value}\n          onResize={handleResize}\n        >\n          {renderWrapper()}\n        </NativeScroll>\n      )\n    }\n  },\n})\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { boundRange } from '@vexip-ui/utils'\n\nimport type { LoadingOptions, LoadingPosition, LoadingState } from './symbol'\n\ndefineOptions({ name: 'Loading' })\n\nconst nh = useNameHelper('loading')\nconst { isRtl } = useRtl()\nconst visible = ref(false)\nconst strokeWidth = ref(2)\nconst state = ref<LoadingState>('default')\nconst position = ref<LoadingPosition>('top')\nconst percent = ref(0)\n\nlet maxPercent = 95\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm(state.value)]: state.value !== 'default',\n  }\n})\n\nconst style = computed(() => {\n  return {\n    [position.value]: '0',\n    height: `${strokeWidth.value}px`,\n  }\n})\n\nconst fillerStyle = computed(() => {\n  return {\n    transform: `translateX(${((isRtl.value ? -1 : 1) * (percent.value - 100)) / 2}%) scaleX(${\n      percent.value / 100\n    })`,\n  }\n})\n\nlet timer: ReturnType<typeof setTimeout>\nlet interval: ReturnType<typeof setInterval>\nlet rafId: ReturnType<typeof requestAnimationFrame>\n\ndefineExpose({ visible, percent, startLoading })\n\nonBeforeUnmount(() => {\n  clearTimeout(timer)\n  clearInterval(interval)\n  cancelAnimationFrame(rafId)\n})\n\nfunction startLoading(options: LoadingOptions) {\n  if (percent.value === 100) {\n    clearTimeout(timer)\n\n    visible.value = false\n    percent.value = 0\n    state.value = 'default'\n    strokeWidth.value = 2\n    position.value = 'top'\n  }\n\n  clearInterval(interval)\n\n  const setLoading = () => {\n    percent.value = boundRange(options.percent, 0, 100)\n    state.value = options.state ?? state.value\n    strokeWidth.value = boundRange(options.strokeWidth ?? 2, 1, 10)\n    position.value = options.position ?? position.value\n    maxPercent = boundRange(options.maxPercent ?? 95, percent.value, 95)\n\n    if (percent.value === 100) {\n      timer = setTimeout(() => {\n        visible.value = false\n      }, 500)\n    } else {\n      interval = setInterval(() => {\n        percent.value += Math.floor(Math.random() * 3 + 1)\n\n        if (percent.value >= maxPercent) {\n          percent.value = maxPercent\n          clearInterval(interval)\n        }\n      }, 500)\n    }\n  }\n\n  maxPercent = 95\n\n  rafId = requestAnimationFrame(() => {\n    if (visible.value) {\n      setLoading()\n    } else {\n      visible.value = true\n      rafId = requestAnimationFrame(setLoading)\n    }\n  })\n}\n</script>\n\n<template>\n  <Transition :name=\"nh.ns('fade')\" appear>\n    <div\n      v-show=\"visible\"\n      :class=\"className\"\n      role=\"progressbar\"\n      :style=\"style\"\n      :aria-valuenow=\"percent\"\n      aria-valuemin=\"0\"\n      aria-valuemax=\"100\"\n    >\n      <div :class=\"nh.be('filler')\" :style=\"fillerStyle\"></div>\n    </div>\n  </Transition>\n</template>\n","import { createApp, createVNode, render } from 'vue'\n\nimport Component from './loading.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { LoadingInstance, LoadingOptions, LoadingState } from './symbol'\n\nexport type { LoadingState, LoadingOptions }\n\ntype InitLoadingOptions = Omit<LoadingOptions, 'percent'>\n\nexport class LoadingManager {\n  name: string\n  defaults: InitLoadingOptions\n\n  private _mountedApp: App<unknown> | null\n  private _instance: LoadingInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: InitLoadingOptions = {}) {\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Loading'\n    this.defaults = {}\n\n    this.config(options)\n  }\n\n  open(percent: number): void\n  open(options: LoadingOptions): void\n  open(options: number | LoadingOptions) {\n    if (!isClient) return\n\n    if (typeof options === 'number') {\n      options = { percent: options }\n    }\n\n    this._getInstance()!.startLoading({ ...this.defaults, ...options })\n  }\n\n  close() {\n    this.open(100)\n  }\n\n  config(options: InitLoadingOptions) {\n    this.defaults = { ...this.defaults, ...options }\n  }\n\n  clone() {\n    const manager = new LoadingManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: InitLoadingOptions & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$loading) {\n      app.config.globalProperties[property || '$loading'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Loading]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as LoadingInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<LoadingInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n}\n\nexport const Loading = new LoadingManager()\n","import type { InjectionKey } from 'vue'\n\nexport type Key = string | number\nexport type PopupPlacement =\n  | 'top-right'\n  | 'top-center'\n  | 'top-left'\n  | 'bottom-right'\n  | 'bottom-center'\n  | 'bottom-left'\n\nexport interface PopupItemState extends Record<string, unknown> {\n  key: Key,\n  content: string,\n  closable: boolean,\n  height: number,\n  visible: boolean,\n  verticalPosition: number,\n  type?: string,\n  className?: any,\n  style?: any,\n  icon?: Record<string, any> | (() => any),\n  iconColor?: string,\n  onOpen: (key: Key) => void,\n  onClose: (result: boolean) => void,\n  onEnter: () => void,\n  onLeave: () => void,\n}\n\nexport const DELETE_HANDLER = '__VXP_POPUP_DELETE_HANDLER' as unknown as InjectionKey<\n  (key: Key) => void\n>\n\nexport const popupPlacements = Object.freeze<PopupPlacement[]>([\n  'top-right',\n  'top-center',\n  'top-left',\n  'bottom-right',\n  'bottom-center',\n  'bottom-left',\n])\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, nextTick, onMounted, ref } from 'vue'\n\nimport { classProp, useNameHelper, useZIndex } from '@vexip-ui/config'\nimport { noop } from '@vexip-ui/utils'\nimport { DELETE_HANDLER } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { PopupItemState } from './symbol'\n\ndefineOptions({ name: 'PopupItem' })\n\nconst props = defineProps({\n  state: {\n    type: Object as PropType<PopupItemState>,\n    default: () => ({}),\n  },\n  transitionName: {\n    type: String,\n    default: null,\n  },\n  innerClass: {\n    type: classProp,\n    default: null,\n  },\n})\n\nconst emit = defineEmits(['enter', 'leave'])\n\nconst handleDelete = inject(DELETE_HANDLER, noop)\nconst nh = useNameHelper('popup')\nconst getIndex = useZIndex()\n\nconst wrapper = ref<HTMLElement>()\n\nconst transition = computed(() => props.transitionName || nh.ns('popup-top'))\n\nonMounted(() => {\n  nextTick(() => {\n    const state = props.state\n\n    if (state && wrapper.value) {\n      state.height = wrapper.value.offsetHeight\n    }\n  })\n})\n</script>\n\n<template>\n  <Transition appear :name=\"transition\" @after-leave=\"handleDelete(state.key)\">\n    <div\n      v-show=\"state.visible\"\n      ref=\"wrapper\"\n      :class=\"nh.be('item')\"\n      :style=\"{ zIndex: getIndex() }\"\n      :vxp-index=\"state.key\"\n      @pointerenter=\"emit('enter')\"\n      @pointerleave=\"emit('leave')\"\n    >\n      <div :class=\"[nh.be('item-inner'), innerClass]\">\n        <slot :item=\"state\">\n          <Renderer\n            v-if=\"typeof state.renderer === 'function'\"\n            :renderer=\"state.renderer\"\n          ></Renderer>\n          <template v-else>\n            {{ state.content }}\n          </template>\n        </slot>\n      </div>\n    </div>\n  </Transition>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive, ref, watch } from 'vue'\n\nimport PopupItem from './popup-item.vue'\nimport { classProp, useNameHelper } from '@vexip-ui/config'\nimport { getGlobalCount, isFunction, noop } from '@vexip-ui/utils'\nimport { DELETE_HANDLER, popupPlacements } from './symbol'\n\nimport type { CSSProperties } from 'vue'\nimport type { Key, PopupItemState, PopupPlacement } from './symbol'\n\ntype QueueState =\n  | {\n    type: 'add',\n    param: Record<string, unknown>,\n  }\n  | {\n    type: 'clear',\n    param: Key,\n  }\n\ndefineOptions({ name: 'Popup' })\n\nconst props = defineProps({\n  transitionName: {\n    type: String,\n    default: null,\n  },\n  innerClass: {\n    type: classProp,\n    default: null,\n  },\n  placement: {\n    default: 'top-right' as PopupPlacement,\n    validator: (value: PopupPlacement) => popupPlacements.includes(value),\n  },\n  startOffset: {\n    type: Number,\n    default: 30,\n  },\n  itemGap: {\n    type: Number,\n    default: 16,\n  },\n})\n\ndefineSlots<{ item: (item: any) => any }>()\n\nconst nh = useNameHelper('popup')\nconst items = ref<PopupItemState[]>([])\nconst queue: QueueState[] = []\n\nconst wrapper = ref<HTMLElement>()\n\nlet pending = false\n\nconst placementArray = computed(() => {\n  return props.placement.split('-') as ['top' | 'bottom', 'right' | 'center' | 'left']\n})\nconst transition = computed(() => props.transitionName || nh.ns('popup-top'))\n\nwatch(\n  () => props.startOffset,\n  (value, prevValue) => {\n    items.value.forEach(item => {\n      item.verticalPosition += value - prevValue\n    })\n  },\n)\n\nprovide(DELETE_HANDLER, deleteItem)\n\ndefineExpose({\n  items,\n  wrapper,\n  add,\n  remove,\n  has,\n  find,\n  clear,\n})\n\nfunction getItemStyle(item: PopupItemState) {\n  const verticalStyle = placementArray.value[0]\n  const style: CSSProperties = { [verticalStyle]: `${item.verticalPosition}px` }\n  const zIndex = parseInt(item.zIndex as string)\n\n  if (!Number.isNaN(zIndex)) {\n    style.zIndex = zIndex\n  }\n\n  return style\n}\n\nfunction add(options: Record<string, any>) {\n  return new Promise<Key>(resolve => {\n    const onOpen = isFunction(options.onOpen) ? options.onOpen : noop\n\n    options.onOpen = (key: Key) => {\n      resolve(key)\n      onOpen()\n    }\n\n    queue.push({\n      type: 'add',\n      param: options,\n    })\n\n    if (!pending) {\n      pending = true\n      queueOut()\n    }\n  })\n}\n\nfunction remove(key: Key) {\n  return new Promise<boolean>(resolve => {\n    const item = find(key)\n\n    if (!item) return resolve(false)\n\n    const onClose = isFunction(item.onClose) ? item.onClose : noop\n\n    item.onClose = (result: boolean) => {\n      resolve(result)\n      onClose(result)\n    }\n\n    queue.push({\n      type: 'clear',\n      param: key,\n    })\n\n    if (!pending) {\n      pending = true\n      queueOut()\n    }\n  })\n}\n\nfunction queueOut() {\n  if (queue.length) {\n    const state = queue.shift()!\n\n    if (state.type === 'add') {\n      renderItem(state.param)\n    } else {\n      removeItem(state.param)\n    }\n\n    requestAnimationFrame(queueOut)\n  } else {\n    pending = false\n  }\n}\n\nfunction renderItem(options: Record<string, any>) {\n  let item = options.key ? find(options.key as Key) : null\n\n  if (!item?.visible) {\n    const index = getGlobalCount()\n    const key = (options.key as Key) ?? nh.bs(`${index}`)\n\n    let currentVertical = props.startOffset\n\n    items.value.forEach(existingItem => {\n      if (existingItem.visible) {\n        currentVertical += existingItem.height + props.itemGap\n      }\n    })\n\n    item = reactive(\n      Object.assign(\n        {\n          key,\n          content: '',\n          closable: false,\n          onOpen: noop,\n          onClose: noop,\n          onEnter: noop,\n          onLeave: noop,\n        },\n        options,\n        {\n          height: 0,\n          visible: true,\n          verticalPosition: currentVertical,\n        },\n      ),\n    )\n\n    items.value.push(item)\n  }\n\n  // 使用 options 上的回调以防止重复 key 时指向不正确\n  isFunction(options.onOpen) && options.onOpen(item.key)\n}\n\nfunction removeItem(key: Key) {\n  const index = items.value.findIndex(item => item.key === key)\n\n  if (~index) {\n    const item = items.value[index]\n    const removeHeight = item.height\n\n    item.visible = false\n\n    for (let i = index + 1, len = items.value.length; i < len; ++i) {\n      items.value[i].verticalPosition -= removeHeight + props.itemGap\n    }\n\n    // 关闭回调\n    isFunction(item.onClose) && item.onClose(true)\n  }\n}\n\nfunction deleteItem(key: Key) {\n  const index = items.value.findIndex(item => item.key === key)\n\n  if (~index) {\n    items.value.splice(index, 1)\n  }\n}\n\nfunction has(key: Key) {\n  return !~items.value.findIndex(item => item.key === key)\n}\n\nfunction find(key: Key) {\n  return items.value.find(item => item.key === key)\n}\n\nfunction clear() {\n  queue.length = 0\n  items.value = []\n}\n\nfunction enterItem(item: PopupItemState) {\n  isFunction(item.onEnter) && item.onEnter()\n}\n\nfunction leaveItem(item: PopupItemState) {\n  isFunction(item.onLeave) && item.onLeave()\n}\n</script>\n\n<template>\n  <div :class=\"[nh.b(), nh.bm(placement)]\">\n    <PopupItem\n      v-for=\"item in items\"\n      :key=\"item.key\"\n      :state=\"item\"\n      :transition-name=\"transition\"\n      :inner-class=\"innerClass\"\n      :style=\"getItemStyle(item)\"\n      @enter=\"enterItem(item)\"\n      @leave=\"leaveItem(item)\"\n    >\n      <template #default=\"{ item: itemData }\">\n        <slot name=\"item\" :item=\"itemData\"></slot>\n      </template>\n    </PopupItem>\n  </div>\n</template>\n","import type { ComponentPublicInstance } from 'vue'\n\nexport type Key = string | number\nexport type MessageType = 'primary' | 'info' | 'success' | 'warning' | 'error'\nexport type MessagePlacement = 'top' | 'bottom'\n\nexport interface MessageOptions extends Record<string, any> {\n  content?: string,\n  key?: Key,\n  icon?: Record<string, any> | (() => any),\n  iconColor?: string,\n  type?: MessageType | null,\n  duration?: number,\n  className?: string | Record<string, any>,\n  style?: string | Record<string, any>,\n  zIndex?: number,\n  background?: boolean | string,\n  color?: boolean | string,\n  closable?: boolean,\n  parseHtml?: boolean,\n  liveOnEnter?: boolean,\n  renderer?: () => any,\n}\n\nexport interface MessageConfig {\n  placement?: MessagePlacement,\n  startOffset?: number,\n  itemGap?: number,\n}\n\nexport interface MessageInstance extends ComponentPublicInstance {\n  add: (options: MessageOptions) => void,\n  remove: (key: string | number) => void,\n  clear: () => void,\n  config: (config: MessageConfig) => void,\n}\n\nexport const effectiveTypes = Object.freeze(['primary', 'info', 'success', 'warning', 'error'])\n// For a11n\nexport const assertiveTypes = Object.freeze(['success', 'warning', 'error'])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { Popup } from '@/components/popup'\n\nimport { computed, reactive, ref } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { assertiveTypes, effectiveTypes } from './symbol'\n\nimport type { Key, MessageConfig, MessagePlacement } from './symbol'\n\ndefineOptions({ name: 'Message' })\n\nconst nh = useNameHelper('message')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error,\n}))\n\nconst placement = ref<MessagePlacement>('top')\nconst startOffset = ref(30)\nconst itemGap = ref(16)\nconst popup = ref<InstanceType<typeof Popup>>()\n\nconst placementCenter = computed(() => `${placement.value}-center` as const)\n\nasync function add(options: Record<string, any>) {\n  if (popup.value) {\n    await popup.value.add(options)\n  }\n}\n\nasync function remove(key: Key) {\n  return !!popup.value && (await popup.value.remove(key))\n}\n\nfunction config(config: MessageConfig) {\n  placement.value = config.placement || placement.value\n  startOffset.value = config.startOffset || startOffset.value\n  itemGap.value = config.itemGap || itemGap.value\n}\n\nfunction clear() {\n  popup.value && popup.value.clear()\n}\n\ndefineExpose(\n  reactive({\n    popup,\n    add,\n    remove,\n    clear,\n    config,\n  }),\n)\n</script>\n\n<template>\n  <!-- eslint-disable vue/no-v-html -->\n  <Popup\n    ref=\"popup\"\n    :class=\"nh.b()\"\n    :transition-name=\"nh.ns(`popup-${placement}`)\"\n    :placement=\"placementCenter\"\n    :start-offset=\"startOffset\"\n    :item-gap=\"itemGap\"\n  >\n    <template #item=\"{ item }: { item: import('./symbol').MessageOptions }\">\n      <div\n        :class=\"[\n          {\n            [nh.be('item')]: true,\n            [nh.bs('vars')]: true,\n            [nh.bem('item', item.type!)]: item.type && effectiveTypes.includes(item.type),\n            [nh.bem('item', 'background')]: item.background,\n            [nh.bem('item', 'color')]: item.background && item.color,\n            [nh.bem('item', 'color-only')]: !item.background && item.color,\n            [nh.bem('item', 'has-icon')]: item.icon,\n            [nh.bem('item', 'closable')]: item.closable\n          },\n          item.className\n        ]\"\n        role=\"alert\"\n        :style=\"[\n          {\n            color: typeof item.color === 'string' ? item.color : undefined,\n            backgroundColor: typeof item.background === 'string' ? item.background : undefined\n          },\n          item.style || {}\n        ]\"\n        aria-atomic=\"true\"\n        :aria-live=\"item.type && assertiveTypes.includes(item.type) ? 'assertive' : 'polite'\"\n      >\n        <div :class=\"nh.be('wrapper')\">\n          <div\n            v-if=\"item.icon || (item.type && effectiveTypes.includes(item.type))\"\n            :class=\"nh.be('icon')\"\n            :style=\"{ color: item.iconColor }\"\n          >\n            <Icon\n              v-if=\"item.icon\"\n              :icon=\"item.icon\"\n              :style=\"[{ color: item.iconColor }, (item.icon as any).style]\"\n            ></Icon>\n            <Icon\n              v-else\n              v-bind=\"predefinedIcons[item.type!]\"\n              :style=\"{ color: item.iconColor }\"\n            ></Icon>\n          </div>\n          <Renderer\n            v-if=\"typeof item.renderer === 'function'\"\n            :renderer=\"item.renderer\"\n            :data=\"item\"\n          ></Renderer>\n          <template v-else>\n            <div v-if=\"item.parseHtml\" :class=\"nh.be('content')\" v-html=\"item.content\"></div>\n            <div v-else :class=\"nh.be('content')\">\n              {{ item.content || '' }}\n            </div>\n          </template>\n        </div>\n        <button\n          v-if=\"item.closable\"\n          type=\"button\"\n          :class=\"nh.be('close')\"\n          @click=\"remove(item.key!)\"\n        >\n          <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n        </button>\n      </div>\n    </template>\n  </Popup>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './message.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient, isNull, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type {\n  Key,\n  MessageConfig,\n  MessageInstance,\n  MessageOptions,\n  MessagePlacement,\n  MessageType,\n} from './symbol'\n\nexport type { MessageConfig, MessageType, MessagePlacement, MessageOptions }\n\ntype FuzzyOptions = string | MessageOptions\ntype ManagerOptions = { duration?: number } & MessageConfig & Record<string, unknown>\n\ninterface AipMethod {\n  (options: MessageOptions): () => void,\n  (content: string, duration?: number): () => void,\n  /** @internal */\n  (options: FuzzyOptions, duration?: number): () => void,\n}\n\nconst placementWhiteList: MessagePlacement[] = ['top', 'bottom']\n\nlet count = 1\n\nfunction getKey() {\n  return `message-${count++}`\n}\n\nexport class MessageManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  open: AipMethod\n  primary: AipMethod\n  info: AipMethod\n  success: AipMethod\n  warning: AipMethod\n  error: AipMethod\n\n  private _mountedApp: App<unknown> | null\n  private _instance: MessageInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n  private _installed: boolean\n  private _configRecord: MessageConfig | null\n\n  constructor(options: ManagerOptions = {}) {\n    options = {\n      ...options,\n      duration: options.duration ? toNumber(options.duration) : 3000,\n    }\n\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this._installed = false\n    this._configRecord = null\n    this.name = 'Message'\n    this.defaults = {}\n\n    this.config(options)\n\n    this.open = (content: FuzzyOptions, duration?: number) => {\n      return this._open(null, content, duration)\n    }\n\n    this.primary = (content: FuzzyOptions, duration?: number) => {\n      return this._open('primary', content, duration)\n    }\n\n    this.info = (content: FuzzyOptions, duration?: number) => {\n      return this._open('info', content, duration)\n    }\n\n    this.success = (content: FuzzyOptions, duration?: number) => {\n      return this._open('success', content, duration)\n    }\n\n    this.warning = (content: FuzzyOptions, duration?: number) => {\n      return this._open('warning', content, duration)\n    }\n\n    this.error = (content: FuzzyOptions, duration?: number) => {\n      return this._open('error', content, duration)\n    }\n  }\n\n  judge(state: boolean, success: string, error: string, duration?: number): void\n  judge(state: boolean, success: MessageOptions, error: string, duration?: number): void\n  judge(state: boolean, success: string, error: MessageOptions, duration?: number): void\n  judge(state: boolean, success: MessageOptions, error: MessageOptions): void\n  judge(\n    state: boolean,\n    success: string | MessageOptions,\n    error: string | MessageOptions,\n    duration?: number,\n  ) {\n    if (state) {\n      this.success(success, duration)\n    } else {\n      this.error(error, duration)\n    }\n  }\n\n  close(key: Key) {\n    if (isNull(key)) {\n      this.clear()\n    } else {\n      this._getInstance()?.remove(key)\n    }\n  }\n\n  config({ placement, startOffset, itemGap, ...others }: MessageConfig & MessageOptions) {\n    this._configRecord = { placement, startOffset, itemGap }\n    this.defaults = { ...this.defaults, ...others }\n\n    if (this._installed) {\n      const instance = this._getInstance()\n\n      if (instance) {\n        if (placement) {\n          instance.config({\n            placement: placementWhiteList.includes(placement) ? placement : placementWhiteList[0],\n          })\n        }\n\n        instance.config({ startOffset, itemGap })\n      }\n    }\n  }\n\n  clone() {\n    const manager = new MessageManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n    manager._configRecord = this._configRecord\n    manager._installed = this._installed\n\n    return manager\n  }\n\n  clear() {\n    this._getInstance()?.clear()\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: ManagerOptions & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this._mountedApp = app\n    this._installed = true\n    this.config(others)\n\n    if (property || !app.config.globalProperties.$message) {\n      app.config.globalProperties[property || '$message'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Message]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as MessageInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<MessageInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n\n  private _open(type: null | MessageType, content: FuzzyOptions, _duration?: number) {\n    if (!isClient) {\n      return noop\n    }\n\n    const options = typeof content === 'string' ? { content, duration: _duration } : content\n\n    const key = options.key ?? getKey()\n    const message = this._getInstance()!\n\n    let timer: ReturnType<typeof setTimeout>\n\n    const userCloseFn = options.onClose\n    const onClose = () => {\n      clearTimeout(timer)\n\n      if (typeof userCloseFn === 'function') {\n        return userCloseFn()\n      }\n    }\n\n    const userEnterFn = options.onEnter\n    const onEnter = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n      }\n\n      if (typeof userEnterFn === 'function') {\n        return userEnterFn()\n      }\n    }\n\n    const userLeaveFn = options.onLeave\n    const onLeave = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n        setDelayClose()\n      }\n\n      if (typeof userLeaveFn === 'function') {\n        return userLeaveFn()\n      }\n    }\n\n    const item: MessageOptions = {\n      ...this.defaults,\n      ...options,\n      key,\n      type: type ?? options.type,\n      onClose,\n      onEnter,\n      onLeave,\n    }\n\n    if (item.icon && typeof item.icon !== 'function') {\n      item.icon = markRaw(item.icon)\n    }\n\n    message.add(item)\n    setDelayClose()\n\n    function setDelayClose() {\n      const duration = typeof item.duration === 'number' ? item.duration : 3000\n\n      if (duration >= 500) {\n        timer = setTimeout(() => {\n          message.remove(key)\n        }, duration)\n      }\n    }\n\n    return () => {\n      clearTimeout(timer)\n      message.remove(key)\n    }\n  }\n}\n\nexport const Message = new MessageManager()\n","import type { ComponentPublicInstance } from 'vue'\n\nexport type Key = string | number\nexport type NoticeType = 'primary' | 'info' | 'success' | 'warning' | 'error'\nexport type NoticePlacement = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\n\nexport interface NoticeOptions extends Record<string, any> {\n  title?: string,\n  content?: string,\n  key?: Key,\n  icon?: Record<string, any> | (() => any),\n  iconColor?: string,\n  type?: NoticeType | null,\n  duration?: number,\n  className?: string | Record<string, any>,\n  style?: string | Record<string, any>,\n  zIndex?: number,\n  background?: boolean | string,\n  color?: boolean | string,\n  closable?: boolean,\n  parseHtml?: boolean,\n  liveOnEnter?: boolean,\n  renderer?: () => any,\n}\n\nexport interface NoticeConfig {\n  placement?: NoticePlacement,\n  startOffset?: number,\n  itemGap?: number,\n}\n\nexport interface NoticeInstance extends ComponentPublicInstance {\n  add: (options: NoticeOptions) => void,\n  remove: (key: string | number) => void,\n  clear: () => void,\n  config: (config: NoticeConfig) => void,\n}\n\nexport const effectiveTypes = Object.freeze(['primary', 'info', 'success', 'warning', 'error'])\n// For a11n\nexport const assertiveTypes = Object.freeze(['success', 'warning', 'error'])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { Popup } from '@/components/popup'\n\nimport { computed, reactive, ref } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { assertiveTypes, effectiveTypes } from './symbol'\n\nimport type { Key, NoticeConfig, NoticePlacement } from './symbol'\n\ndefineOptions({ name: 'Notice' })\n\nconst nh = useNameHelper('notice')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error,\n}))\n\nconst placement = ref<NoticePlacement>('top-right')\nconst startOffset = ref(30)\nconst itemGap = ref(16)\nconst popup = ref<InstanceType<typeof Popup>>()\n\nasync function add(options: Record<string, any>) {\n  if (popup.value) {\n    await popup.value.add(options)\n  }\n}\n\nasync function remove(key: Key) {\n  return !!popup.value && (await popup.value.remove(key))\n}\n\nfunction clear() {\n  popup.value && popup.value.clear()\n}\n\nfunction config(config: NoticeConfig) {\n  placement.value = config.placement || placement.value\n  startOffset.value = config.startOffset || startOffset.value\n  itemGap.value = config.itemGap || itemGap.value\n}\n\ndefineExpose(\n  reactive({\n    popup,\n    add,\n    remove,\n    clear,\n    config,\n  }),\n)\n</script>\n\n<template>\n  <!-- eslint-disable vue/no-v-html -->\n  <Popup\n    ref=\"popup\"\n    :class=\"nh.b()\"\n    :transition-name=\"nh.ns(`popup-${placement.split('-')[1]}`)\"\n    :placement=\"placement\"\n    :start-offset=\"startOffset\"\n    :item-gap=\"itemGap\"\n  >\n    <template #item=\"{ item }: { item: import('./symbol').NoticeOptions }\">\n      <div\n        :class=\"[\n          {\n            [nh.be('item')]: true,\n            [nh.bs('vars')]: true,\n            [nh.bem('item', 'title-only')]: !item.content && typeof item.renderer !== 'function',\n            [nh.bem('item', 'has-icon')]: item.icon,\n            [nh.bem('item', 'content-only')]: !item.title,\n            [nh.bem('item', item.type!)]: item.type && effectiveTypes.includes(item.type),\n            [nh.bem('item', 'background')]: item.background,\n            [nh.bem('item', 'color')]: item.background && item.color,\n            [nh.bem('item', 'color-only')]: !item.background && item.color,\n            [nh.bem('item', 'marker')]: item.marker\n          },\n          item.className\n        ]\"\n        role=\"alert\"\n        :style=\"[\n          {\n            color: typeof item.color === 'string' ? item.color : undefined,\n            backgroundColor: typeof item.background === 'string' ? item.background : undefined\n          },\n          item.style || {}\n        ]\"\n        aria-atomic=\"true\"\n        :aria-live=\"item.type && assertiveTypes.includes(item.type) ? 'assertive' : 'polite'\"\n      >\n        <div\n          v-if=\"item.icon || (item.type && effectiveTypes.includes(item.type))\"\n          :class=\"nh.be('icon')\"\n          :style=\"{ color: item.iconColor }\"\n        >\n          <Icon\n            v-if=\"item.icon\"\n            :icon=\"item.icon\"\n            :scale=\"!item.content && typeof item.renderer !== 'function' ? 1 : 2\"\n            :style=\"[{ color: item.iconColor }, (item.icon as any).style]\"\n          ></Icon>\n          <Icon\n            v-else\n            v-bind=\"predefinedIcons[item.type!]\"\n            :scale=\"!item.content && typeof item.renderer !== 'function' ? 1 : 2\"\n            :style=\"{ color: item.iconColor }\"\n          ></Icon>\n        </div>\n        <div :class=\"nh.be('wrapper')\">\n          <Renderer\n            v-if=\"typeof item.renderer === 'function'\"\n            :renderer=\"item.renderer\"\n            :data=\"item\"\n          ></Renderer>\n          <template v-else>\n            <template v-if=\"item.title\">\n              <div\n                v-if=\"item.parseHtml\"\n                :class=\"nh.be('title')\"\n                :style=\"{\n                  color: typeof item.titleColor === 'string' ? item.titleColor : undefined\n                }\"\n                v-html=\"item.title\"\n              ></div>\n              <div\n                v-else\n                :class=\"nh.be('title')\"\n                :style=\"{\n                  color: typeof item.titleColor === 'string' ? item.titleColor : undefined\n                }\"\n              >\n                {{ item.title || '' }}\n              </div>\n            </template>\n            <template v-if=\"item.content\">\n              <div v-if=\"item.parseHtml\" :class=\"nh.be('content')\" v-html=\"item.content\"></div>\n              <div v-else :class=\"nh.be('content')\">\n                {{ item.content || '' }}\n              </div>\n            </template>\n          </template>\n        </div>\n        <button\n          v-if=\"item.closable\"\n          type=\"button\"\n          :class=\"nh.be('close')\"\n          @click=\"remove(item.key!)\"\n        >\n          <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n        </button>\n      </div>\n    </template>\n  </Popup>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './notice.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient, isNull, isObject, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type {\n  Key,\n  NoticeConfig,\n  NoticeInstance,\n  NoticeOptions,\n  NoticePlacement,\n  NoticeType,\n} from './symbol'\n\nexport type { NoticeConfig, NoticeType, NoticePlacement, NoticeOptions }\n\ntype FuzzyOptions = string | NoticeOptions\ntype ManagerOptions = { marker?: boolean, duration?: number } & NoticeConfig &\n  Record<string, unknown>\n\ninterface AipMethod {\n  (options: NoticeOptions): () => void,\n  (title: string, duration?: number): () => void,\n  (title: string, content: string, duration?: number): () => void,\n  /** @internal */\n  (options: FuzzyOptions, duration?: number): () => void,\n}\n\nconst placementWhiteList: NoticePlacement[] = [\n  'top-right',\n  'top-left',\n  'bottom-right',\n  'bottom-left',\n]\n\nlet count = 1\n\nfunction getKey() {\n  return `notice-${count++}`\n}\n\nexport class NoticeManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  open: AipMethod\n  primary: AipMethod\n  info: AipMethod\n  success: AipMethod\n  warning: AipMethod\n  error: AipMethod\n\n  private _mountedApp: App<unknown> | null\n  private _instance: NoticeInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n  private _installed: boolean\n  private _configRecord: NoticeConfig | null\n\n  constructor(options: ManagerOptions = {}) {\n    options = {\n      ...options,\n      marker: !!options.marker,\n      duration: options.duration ? toNumber(options.duration) : 4000,\n    }\n\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._wrapper = null\n    this._mountedEl = null\n    this._installed = false\n    this._configRecord = null\n    this.name = 'Notice'\n    this.defaults = {}\n\n    this.config(options)\n\n    this.open = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open(null, title, content, duration)\n    }\n\n    this.primary = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('primary', title, content, duration)\n    }\n\n    this.info = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('info', title, content, duration)\n    }\n\n    this.success = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('success', title, content, duration)\n    }\n\n    this.warning = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('warning', title, content, duration)\n    }\n\n    this.error = (title: FuzzyOptions, content?: string | number, duration?: number) => {\n      return this._open('error', title, content, duration)\n    }\n  }\n\n  judge(state: boolean, success: string, error: string, duration?: number): void\n  judge(state: boolean, success: NoticeOptions, error: string, duration?: number): void\n  judge(state: boolean, success: string, error: NoticeOptions, duration?: number): void\n  judge(state: boolean, success: NoticeOptions, error: NoticeOptions): void\n  judge(\n    state: boolean,\n    success: string | NoticeOptions,\n    error: string | NoticeOptions,\n    duration?: number,\n  ) {\n    if (state) {\n      this.success(success, duration)\n    } else {\n      this.error(error, duration)\n    }\n  }\n\n  close(key: Key) {\n    if (isNull(key)) {\n      this.clear()\n    } else {\n      this._getInstance()?.remove(key)\n    }\n  }\n\n  config({ placement, startOffset, itemGap, ...others }: NoticeConfig & NoticeOptions) {\n    this._configRecord = { placement, startOffset, itemGap }\n    this.defaults = { ...this.defaults, ...others }\n\n    if (this._installed) {\n      const instance = this._getInstance()\n\n      if (instance) {\n        if (placement) {\n          instance.config({\n            placement: placementWhiteList.includes(placement) ? placement : placementWhiteList[0],\n          })\n        }\n\n        instance.config({ startOffset, itemGap })\n      }\n    }\n  }\n\n  clone() {\n    const manager = new NoticeManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n    manager._configRecord = this._configRecord\n    manager._installed = this._installed\n\n    return manager\n  }\n\n  clear() {\n    this._getInstance()?.clear()\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: ManagerOptions & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this._mountedApp = app\n    this._installed = true\n    this.config({ ...this._configRecord, ...others })\n\n    if (property || !app.config.globalProperties.$notice) {\n      app.config.globalProperties[property || '$notice'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Notice]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as NoticeInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<NoticeInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n\n  private _open(\n    type: null | NoticeType,\n    title: FuzzyOptions,\n    content?: string | number,\n    _duration?: number,\n  ) {\n    if (!isClient) {\n      return noop\n    }\n\n    let options: NoticeOptions\n\n    if (isObject(title)) {\n      options = title\n    } else {\n      if (typeof content === 'number') {\n        options = { title, duration: content }\n      } else if (!content) {\n        options = { title, duration: _duration }\n      } else {\n        options = { title, content, duration: _duration }\n      }\n    }\n\n    const key = options.key ?? getKey()\n    const notice = this._getInstance()!\n\n    let timer: ReturnType<typeof setTimeout>\n\n    const userCloseFn = options.onClose\n    const onClose = () => {\n      clearTimeout(timer)\n\n      if (typeof userCloseFn === 'function') {\n        return userCloseFn()\n      }\n    }\n\n    const userEnterFn = options.onEnter\n    const onEnter = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n      }\n\n      if (typeof userEnterFn === 'function') {\n        return userEnterFn()\n      }\n    }\n\n    const userLeaveFn = options.onLeave\n    const onLeave = () => {\n      if (options.liveOnEnter) {\n        clearTimeout(timer)\n        setDelayClose()\n      }\n\n      if (typeof userLeaveFn === 'function') {\n        return userLeaveFn()\n      }\n    }\n\n    const item: NoticeOptions = {\n      ...this.defaults,\n      ...options,\n      key,\n      type: type ?? options.type,\n      onClose,\n      onEnter,\n      onLeave,\n    }\n\n    if (item.icon && typeof item.icon !== 'function') {\n      item.icon = markRaw(item.icon)\n    }\n\n    notice.add(item)\n    setDelayClose()\n\n    function setDelayClose() {\n      const duration = typeof item.duration === 'number' ? item.duration : 4000\n\n      if (duration >= 500) {\n        timer = setTimeout(() => {\n          notice.remove(key)\n        }, duration)\n      }\n    }\n\n    return () => {\n      clearTimeout(timer)\n      notice.remove(key)\n    }\n  }\n}\n\nexport const Notice = new NoticeManager()\n","<script setup lang=\"ts\">\nimport { useNameHelper } from '@vexip-ui/config'\nimport { optionGroupProps } from './props'\n\ndefineOptions({ name: 'OptionGroup' })\n\ndefineProps(optionGroupProps)\n\nconst nh = useNameHelper('option-group')\n</script>\n\n<template>\n  <li\n    :class=\"{\n      [nh.b()]: true,\n      [nh.ns('option-vars')]: true,\n      [nh.bm('divided')]: divided\n    }\"\n  >\n    <div :class=\"nh.be('label')\">\n      <slot name=\"label\">\n        {{ label }}\n      </slot>\n    </div>\n    <ul :class=\"nh.be('list')\">\n      <slot></slot>\n    </ul>\n  </li>\n</template>\n","import { booleanProp, buildProps, eventProp, localeProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { PaginationPlugin, PaginationSlots } from './symbol'\n\nexport const paginationProps = buildProps({\n  size: sizeProp,\n  locale: localeProp('pagination'),\n  total: Number,\n  noBorder: booleanProp,\n  background: booleanProp,\n  pageSize: Number,\n  sizeOptions: Array as PropType<number[]>,\n  itemCount: Number,\n  active: Number,\n  disabled: booleanProp,\n  disableItem: Function as PropType<(page: number) => boolean>,\n  turnPageCount: Number,\n  itemUnit: String,\n  plugins: Array as PropType<(PaginationPlugin | undefined | null)[]>,\n  noTitle: booleanProp,\n  itemTag: String,\n  listTag: String,\n  slots: Object as PropType<PaginationSlots>,\n  onChange: eventProp<(page: number) => void>(),\n  onPageSizeChange: eventProp<(size: number) => void>(),\n})\n\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>\nexport type PaginationCProps = ConfigurableProps<PaginationProps, 'total'>\n","import { Icon } from '@/components/icon'\nimport { NumberInput } from '@/components/number-input'\nimport { Renderer } from '@/components/renderer'\nimport { Select } from '@/components/select'\n\nimport {\n  Transition,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  onUpdated,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n} from 'vue'\n\nimport {\n  createSizeProp,\n  emitEvent,\n  getCountWord,\n  getCountWordOnly,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { createSlotRender, useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide, isClient, isNull, range } from '@vexip-ui/utils'\nimport { paginationProps } from './props'\n\nconst enum PaginationMode {\n  LEFT = 'left',\n  CENTER = 'center',\n  RIGHT = 'right',\n}\n\nexport default defineComponent({\n  name: 'Pagination',\n  props: paginationProps,\n  emits: ['update:active', 'update:page-size'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('pagination', _props, {\n      size: createSizeProp(),\n      locale: null,\n      total: {\n        default: 0,\n        validator: value => value >= 0,\n        static: true,\n      },\n      noBorder: false,\n      background: false,\n      pageSize: {\n        default: 10,\n        validator: value => value > 0,\n      },\n      sizeOptions: () => [10, 20, 50, 100],\n      itemCount: {\n        default: 7,\n        validator: value => Number.isInteger(value) && value > 6,\n      },\n      active: {\n        default: 1,\n        validator: value => value > 0,\n        static: true,\n      },\n      disabled: false,\n      disableItem: {\n        default: () => false,\n        isFunc: true,\n      },\n      turnPageCount: 5,\n      itemUnit: null,\n      plugins: {\n        default: () => [],\n        validator: value => Array.isArray(value),\n      },\n      noTitle: false,\n      itemTag: 'li',\n      listTag: null,\n      slots: () => ({}),\n    })\n\n    const { isRtl } = useRtl()\n    const nh = useNameHelper('pagination')\n    const icons = useIcons()\n    const midPagers = ref<number[]>([])\n    const currentActive = ref(props.active)\n    const currentPageSize = ref(props.pageSize)\n    const mode = ref(PaginationMode.LEFT)\n    const inPrevEllipsis = ref(false)\n    const inNextEllipsis = ref(false)\n    const jumpValue = ref(props.active)\n    const itemElList = reactive<HTMLElement[]>([])\n\n    const locale = useLocale('pagination', toRef(props, 'locale'))\n\n    const { target: wrapper } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (props.disabled) return\n\n        decide(\n          [\n            [\n              () => modifier.up || modifier.down || modifier.left || modifier.right,\n              () => {\n                const sign = modifier.up || modifier.left ? -1 : 1\n\n                if (isClient && document.activeElement) {\n                  const index = itemElList.findIndex(el => el === document.activeElement)\n\n                  if (!~index) return\n\n                  const target = itemElList[boundRange(index + sign, 0, itemElList.length - 1)]\n\n                  target.focus()\n                }\n              },\n            ],\n            [\n              () => modifier.enter || modifier.space,\n              () => {\n                if (document && document.activeElement) {\n                  const index = itemElList.findIndex(el => el === document.activeElement)\n\n                  if (!~index) {\n                    const activeClass = nh.bem('item', 'active')\n                    const activeEl = itemElList.find(el => el.classList.contains(activeClass))\n\n                    activeEl?.focus()\n                  }\n                }\n              },\n            ],\n          ],\n          {\n            beforeMatchAny: () => event.preventDefault(),\n            afterMatchAny: modifier.resetAll,\n          },\n        )\n      },\n    })\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.size)]: props.size !== 'default',\n        [nh.bm('background')]: props.background,\n        [nh.bm('no-border')]: props.noBorder,\n        [nh.bm('disabled')]: props.disabled,\n      }\n    })\n    const pagerCount = computed(() => {\n      return Math.ceil(props.total / (currentPageSize.value || 1)) || 1\n    })\n    const useEllipsis = computed(() => pagerCount.value > props.itemCount)\n    const disabledPrev = computed(() => {\n      const count = queryEnabledActive(1, 1)\n\n      return count >= pagerCount.value || currentActive.value === count\n    })\n    const disabledNext = computed(() => {\n      const count = queryEnabledActive(pagerCount.value, -1)\n\n      return count <= 1 || currentActive.value === count\n    })\n    const prevTurnPageTitle = computed(() => {\n      return `${locale.value.prev} ${getCountWord(locale.value.page, props.turnPageCount)}`\n    })\n    const nextTurnPageTitle = computed(() => {\n      return `${locale.value.next} ${getCountWord(locale.value.page, props.turnPageCount)}`\n    })\n    const prevEllipsisTarget = computed(() => {\n      if (!useEllipsis.value) return 0\n\n      let active = queryEnabledActive(currentActive.value - props.turnPageCount, -1)\n\n      if (active < 1) {\n        active = queryEnabledActive(1, 1)\n\n        if (active >= currentActive.value) return 0\n      }\n\n      return active\n    })\n    const nextEllipsisTarget = computed(() => {\n      if (!useEllipsis.value) return 0\n\n      let active = queryEnabledActive(currentActive.value + props.turnPageCount, 1)\n\n      if (active > pagerCount.value) {\n        active = queryEnabledActive(pagerCount.value, -1)\n\n        if (active <= currentActive.value) return 0\n      }\n\n      return active\n    })\n    const sizeObjectOptions = computed(() => {\n      return props.sizeOptions.map(size => {\n        return {\n          value: size,\n          label: `${size} ${locale.value.perPage}`,\n        }\n      })\n    })\n    const pluginOrders = computed(() => {\n      const plugins = props.plugins\n      const pagerPosition = plugins.findIndex(isNull)\n\n      return {\n        total: plugins.findIndex(p => p === 'total') - pagerPosition,\n        size: plugins.findIndex(p => p === 'size') - pagerPosition,\n        jump: plugins.findIndex(p => p === 'jump') - pagerPosition,\n      }\n    })\n    const jumpInputWidth = computed(() => {\n      if (!props.plugins.includes('jump')) return 0\n\n      let pageCount = 0\n\n      if (props.plugins.includes('size')) {\n        pageCount = Math.ceil(props.total / (Math.min(...props.sizeOptions) || 10))\n      } else {\n        pageCount = Math.ceil(props.total / (props.pageSize || 10))\n      }\n\n      return pageCount.toString().length * 10 + 30\n    })\n\n    watch(\n      () => props.active,\n      value => {\n        changeActive(value, false)\n      },\n    )\n    watch(() => props.itemCount, computePagers)\n    watch(pagerCount, computePagers)\n    watch(\n      () => props.pageSize,\n      value => {\n        currentPageSize.value = value\n      },\n    )\n    watch(currentPageSize, (value, prevValue) => {\n      emit('update:page-size', value)\n      emitEvent(props.onPageSizeChange, value)\n\n      // 按当前页的第一条数据计算新的页码\n      const anchor = Math.ceil((prevValue * (currentActive.value - 1) + 1) / value)\n\n      let active = queryEnabledActive(anchor, 1)\n\n      if (active > pagerCount.value) {\n        active = queryEnabledActive(anchor - 1, -1)\n\n        if (active < 1) active = 0\n      }\n\n      currentActive.value = active\n      computePagers()\n    })\n\n    expose({ changeActive, handlePrev, handleNext })\n\n    onMounted(() => {\n      nextTick(computePagers)\n    })\n\n    onUpdated(() => {\n      if (!wrapper.value) return\n\n      itemElList.length = 0\n      itemElList.push(\n        ...Array.from(\n          wrapper.value.querySelectorAll<HTMLElement>(\n            `${nh.cbe('item')}:not(${nh.cbem('item', 'disabled')})`,\n          ),\n        ),\n      )\n    })\n\n    function queryEnabledActive(active: number, step: number) {\n      step = step / Math.abs(step)\n\n      while (props.disableItem(active)) {\n        active += step\n\n        if (active < 1 || active > pagerCount.value) break\n      }\n\n      return active\n    }\n\n    function handleChange(value: number) {\n      if (currentActive.value === value) return\n\n      currentActive.value = value\n      jumpValue.value = value\n\n      computePagers()\n      emit('update:active', value)\n      emitEvent(props.onChange, value)\n    }\n\n    function changeActive(active: number, focus = true) {\n      active = parseInt(active.toString())\n\n      if (props.disabled || active < 1 || active > pagerCount.value || props.disableItem(active)) {\n        return\n      }\n\n      handleChange(active)\n\n      if (isClient && focus) {\n        const activeEl = itemElList.find(el => el === document.activeElement)\n\n        activeEl?.blur()\n        nextTick(() => {\n          itemElList.find(el => el.tabIndex >= 0)?.focus()\n        })\n      }\n    }\n\n    function handlePrev() {\n      if (!disabledPrev.value && !props.disabled) {\n        const active = queryEnabledActive(currentActive.value - 1, -1)\n\n        if (active >= 1) changeActive(active)\n      }\n    }\n\n    function handleNext() {\n      if (!disabledNext.value && !props.disabled) {\n        const active = queryEnabledActive(currentActive.value + 1, 1)\n\n        if (active <= pagerCount.value) changeActive(active)\n      }\n    }\n\n    function computePagers() {\n      let pagers: number[]\n\n      if (pagerCount.value <= props.itemCount) {\n        // 未超过最大值，显示所有页号\n        pagers = range(pagerCount.value)\n      } else {\n        const numberCount = props.itemCount - 2 // 显示为数字的页号\n        const criticalCount = Math.ceil(props.itemCount / 2) // 切换模式的关键计数\n\n        if (currentActive.value < criticalCount) {\n          // 出现后侧一个省略号，前侧连续\n          pagers = range(numberCount)\n          pagers.push(pagerCount.value)\n\n          mode.value = PaginationMode.LEFT\n        } else if (currentActive.value <= pagerCount.value - criticalCount) {\n          // 出现两个省略号，中间连续\n          let count = numberCount - 2\n\n          // 保持中间数字的页号数目为单数\n          if (count % 2 === 0) {\n            count -= 1\n          }\n\n          pagers = range(count, currentActive.value - (count - 1) / 2) // 同 Math.floor(count / 2)\n          pagers.unshift(1)\n          pagers.push(pagerCount.value)\n\n          mode.value = PaginationMode.CENTER\n        } else {\n          // 出现前侧一个省略号，后侧连续\n          pagers = range(numberCount, pagerCount.value - numberCount + 1)\n          pagers.unshift(1)\n\n          mode.value = PaginationMode.RIGHT\n        }\n      }\n\n      if (pagers.length === 1) {\n        midPagers.value = []\n      }\n\n      midPagers.value = pagers.slice(1, -1)\n    }\n\n    function enterPrevEllipsis() {\n      inPrevEllipsis.value = true\n    }\n\n    function leavePrevEllipsis() {\n      inPrevEllipsis.value = false\n    }\n\n    function clickPrevEllipsis() {\n      if (!props.disabled && prevEllipsisTarget.value) {\n        changeActive(prevEllipsisTarget.value)\n      }\n    }\n\n    function enterNextEllipsis() {\n      inNextEllipsis.value = true\n    }\n\n    function leaveNextEllipsis() {\n      inNextEllipsis.value = false\n    }\n\n    function clickNextEllipsis() {\n      if (!props.disabled && nextEllipsisTarget.value) {\n        changeActive(nextEllipsisTarget.value)\n      }\n    }\n\n    function handleJumpPage(active: number) {\n      active = Math.max(Math.min(parseInt(active.toString()), pagerCount.value), 1)\n\n      const originActive = active\n\n      if (active !== currentActive.value) {\n        const step = active > currentActive.value ? 1 : -1\n\n        active = queryEnabledActive(originActive, step)\n\n        if (step > 0 ? active > pagerCount.value : active < 1) {\n          active = queryEnabledActive(originActive, -step)\n\n          if (step > 0 ? active < 1 : active > pagerCount.value) {\n            active = 0\n          }\n        }\n\n        handleChange(active)\n      }\n\n      nextTick(() => {\n        jumpValue.value = currentActive.value\n      })\n    }\n\n    function renderPrev(Tag: any) {\n      const disabled = props.disabled || disabledPrev.value\n      const arrow = isRtl.value ? icons.value.angleRight : icons.value.angleLeft\n\n      return (\n        <Tag\n          ref={el => el && !disabledPrev.value && itemElList.push(el as any)}\n          class={[\n            nh.be('item'),\n            nh.bem('item', 'prev'),\n            disabled ? nh.bem('item', 'disabled') : '',\n          ]}\n          title={props.noTitle ? undefined : locale.value.prevPage}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={locale.value.prevPage}\n          aria-hidden={disabled ? 'true' : undefined}\n          onClick={handlePrev}\n          onKeydownEnter={handlePrev}\n          onKeydownSpace={handlePrev}\n        >\n          {renderSlot(slots, 'prev', { disabled }, () => [\n            <Renderer renderer={props.slots.prev} data={{ disabled }}>\n              <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n            </Renderer>,\n          ])}\n        </Tag>\n      )\n    }\n\n    function renderNext(Tag: any) {\n      const disabled = props.disabled || disabledNext.value\n      const arrow = isRtl.value ? icons.value.angleLeft : icons.value.angleRight\n\n      return (\n        <Tag\n          ref={el => el && !disabledNext.value && itemElList.push(el as any)}\n          class={[\n            nh.be('item'),\n            nh.bem('item', 'next'),\n            disabled ? nh.bem('item', 'disabled') : '',\n          ]}\n          title={props.noTitle ? undefined : locale.value.nextPage}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={locale.value.nextPage}\n          aria-hidden={disabled ? 'true' : undefined}\n          onClick={handleNext}\n          onKeydownEnter={handleNext}\n          onKeydownSpace={handleNext}\n        >\n          {renderSlot(slots, 'next', { disabled }, () => [\n            <Renderer renderer={props.slots.next} data={{ disabled }}>\n              <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n            </Renderer>,\n          ])}\n        </Tag>\n      )\n    }\n\n    function renderPrevEllipsis(Tag: any) {\n      if (!useEllipsis.value || mode.value === PaginationMode.LEFT) return null\n\n      const disabled = props.disabled || !prevEllipsisTarget.value\n\n      return (\n        <Tag\n          ref={el => el && prevEllipsisTarget.value && itemElList.push(el as any)}\n          class={{\n            [nh.be('item')]: true,\n            [nh.bem('item', 'more')]: true,\n            [nh.bem('item', 'disabled')]: disabled,\n          }}\n          title={props.noTitle ? undefined : prevTurnPageTitle.value}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={prevTurnPageTitle.value}\n          onClick={clickPrevEllipsis}\n          onKeydownEnter={clickPrevEllipsis}\n          onKeydownSpace={clickPrevEllipsis}\n          onMouseenter={enterPrevEllipsis}\n          onMouseleave={leavePrevEllipsis}\n        >\n          {createSlotRender(slots, ['prev-jump', 'prevJump'], () => {\n            const arrow = isRtl.value ? icons.value.anglesRight : icons.value.anglesLeft\n\n            return (\n              <Transition name={nh.ns('fade')}>\n                {!disabled && inPrevEllipsis.value ? (\n                  <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n                ) : (\n                  <Icon\n                    {...icons.value.ellipsis}\n                    scale={+(icons.value.ellipsis.scale || 1)}\n                    style={'position: absolute'}\n                  ></Icon>\n                )}\n              </Transition>\n            )\n          })({ disabled, entered: inPrevEllipsis.value })}\n        </Tag>\n      )\n    }\n\n    function renderNextEllipsis(Tag: any) {\n      if (!useEllipsis.value || mode.value === PaginationMode.RIGHT) return null\n\n      const disabled = props.disabled || !nextEllipsisTarget.value\n\n      return (\n        <Tag\n          ref={el => el && nextEllipsisTarget.value && itemElList.push(el as any)}\n          class={{\n            [nh.be('item')]: true,\n            [nh.bem('item', 'more')]: true,\n            [nh.bem('item', 'disabled')]: disabled,\n          }}\n          title={props.noTitle ? undefined : nextTurnPageTitle.value}\n          role={'menuitem'}\n          tabindex={'-1'}\n          aria-label={nextTurnPageTitle.value}\n          onClick={clickNextEllipsis}\n          onKeydownEnter={clickNextEllipsis}\n          onKeydownSpace={clickNextEllipsis}\n          onMouseenter={enterNextEllipsis}\n          onMouseleave={leaveNextEllipsis}\n        >\n          {createSlotRender(slots, ['next-jump', 'nextJump'], () => {\n            const arrow = isRtl.value ? icons.value.anglesLeft : icons.value.anglesRight\n\n            return (\n              <Transition name={nh.ns('fade')}>\n                {!disabled && inNextEllipsis.value ? (\n                  <Icon {...arrow} scale={+(arrow.scale || 1)}></Icon>\n                ) : (\n                  <Icon\n                    {...icons.value.ellipsis}\n                    scale={+(icons.value.ellipsis.scale || 1)}\n                    style={'position: absolute'}\n                  ></Icon>\n                )}\n              </Transition>\n            )\n          })({ disabled: !nextEllipsisTarget.value, entered: inNextEllipsis.value })}\n        </Tag>\n      )\n    }\n\n    function renderItem(Tag: any, page: number) {\n      const disabled = props.disabled || props.disableItem(page)\n      const active = currentActive.value === page\n\n      return (\n        <Tag\n          ref={el => el && itemElList.push(el as any)}\n          class={{\n            [nh.be('item')]: true,\n            [nh.bem('item', 'disabled')]: disabled,\n            [nh.bem('item', 'active')]: active,\n          }}\n          title={props.noTitle ? undefined : page}\n          role={'menuitemradio'}\n          tabindex={active ? '0' : '-1'}\n          aria-posinset={page}\n          aria-setsize={pagerCount.value}\n          aria-disabled={disabled ? 'true' : undefined}\n          onClick={() => changeActive(page)}\n          onKeydownEnter={() => changeActive(page)}\n          onKeydownSpace={() => changeActive(page)}\n        >\n          {renderSlot(slots, 'item', { page, disabled, active }, () => [\n            <Renderer renderer={props.slots.item} data={{ page, disabled, active }}>\n              {page}\n            </Renderer>,\n          ])}\n        </Tag>\n      )\n    }\n\n    function renderTotalPlugin() {\n      if (!props.plugins.includes('total')) return null\n\n      return (\n        <div\n          class={[nh.be('total'), pluginOrders.value.total < 0 && nh.bem('total', 'prefix')]}\n          style={{ order: pluginOrders.value.total }}\n        >\n          {`${locale.value.total} ${getCountWord(\n            props.itemUnit ?? locale.value.itemUnit,\n            props.total,\n          )}`}\n        </div>\n      )\n    }\n\n    function renderSizePlugin() {\n      if (!props.plugins.includes('size')) return null\n\n      return (\n        <div\n          class={[nh.be('size'), pluginOrders.value.size < 0 && nh.bem('size', 'prefix')]}\n          style={{ order: pluginOrders.value.size }}\n        >\n          <Select\n            v-model:value={currentPageSize.value}\n            inherit\n            class={nh.be('size-select')}\n            options={sizeObjectOptions.value}\n            filter={false}\n            multiple={false}\n            clearable={false}\n          ></Select>\n        </div>\n      )\n    }\n\n    function renderJumpPlugin() {\n      if (!props.plugins.includes('jump')) return null\n\n      return (\n        <div\n          class={[nh.be('jump'), pluginOrders.value.jump < 0 && nh.bem('jump', 'prefix')]}\n          style={{ order: pluginOrders.value.jump }}\n        >\n          {locale.value.jumpTo}\n          <NumberInput\n            v-model:value={jumpValue.value}\n            inherit\n            class={nh.be('jump-input')}\n            clearable={false}\n            sync={false}\n            style={{ width: `${jumpInputWidth.value}px` }}\n            onChange={handleJumpPage}\n          ></NumberInput>\n          {getCountWordOnly(locale.value.page, 1)}\n        </div>\n      )\n    }\n\n    return () => {\n      const ItemTag = props.itemTag || 'li'\n      const ListTag = (props.listTag as any) || (ItemTag === 'li' ? 'ul' : 'div')\n\n      return (\n        <div class={className.value}>\n          <ListTag\n            ref={wrapper}\n            class={nh.be('list')}\n            role={'menubar'}\n            aria-label={'Pagination'}\n            aria-disabled={props.disabled ? 'true' : undefined}\n          >\n            {renderPrev(ItemTag)}\n            {renderItem(ItemTag, 1)}\n            {renderPrevEllipsis(ItemTag)}\n            {midPagers.value.map(page => renderItem(ItemTag, page))}\n            {renderNextEllipsis(ItemTag)}\n            {pagerCount.value > 1 && renderItem(ItemTag, pagerCount.value)}\n            {renderNext(ItemTag)}\n          </ListTag>\n          {renderTotalPlugin()}\n          {renderSizePlugin()}\n          {renderJumpPlugin()}\n        </div>\n      )\n    }\n  },\n})\n","import { booleanProp, buildProps, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ProgressInfoType, ProgressSlots, ProgressStrokeColor } from './symbol'\n\nexport const progressProps = buildProps({\n  percentage: Number,\n  state: stateProp,\n  strokeWidth: Number,\n  infoType: String as PropType<ProgressInfoType>,\n  precision: Number,\n  activated: booleanProp,\n  strokeColor: [String, Array, Function] as PropType<ProgressStrokeColor>,\n  slots: Object as PropType<ProgressSlots>,\n})\n\nexport type ProgressProps = ExtractPropTypes<typeof progressProps>\nexport type ProgressCProps = ConfigurableProps<ProgressProps, 'percentage'>\n","export type ProgressInfoType =\n  | 'outside'\n  | 'inside'\n  | 'bubble'\n  | 'bubble-top'\n  | 'bubble-bottom'\n  | 'none'\n\nexport type ProgressStrokeColor =\n  | string\n  | [string, string]\n  | ((percentage: number) => string | [string, string])\n\nexport interface ProgressSlots {\n  default?: () => any,\n}\n\nexport const infoTypes = Object.freeze<ProgressInfoType[]>([\n  'outside',\n  'inside',\n  'bubble',\n  'bubble-top',\n  'bubble-bottom',\n  'none',\n])\n","<script setup lang=\"ts\">\nimport { Bubble } from '@/components/bubble'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { createStateProp, useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc, toFixed } from '@vexip-ui/utils'\nimport { progressProps } from './props'\nimport { infoTypes } from './symbol'\n\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({ name: 'Progress' })\n\nconst _props = defineProps(progressProps)\nconst props = useProps('progress', _props, {\n  percentage: {\n    default: 0,\n    validator: value => value >= 0 && value <= 100,\n    static: true,\n  },\n  state: createStateProp(),\n  strokeWidth: 8,\n  infoType: {\n    default: 'outside',\n    validator: value => infoTypes.includes(value),\n  },\n  precision: 2,\n  activated: false,\n  strokeColor: {\n    default: null,\n    validator: value => !(Array.isArray(value) && (!value[0] || !value[1])),\n  },\n  slots: () => ({}),\n})\n\nconst nh = useNameHelper('progress')\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`info-${props.infoType}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('activated')]: props.activated,\n    },\n  ]\n})\nconst style = computed(() => {\n  return { [nh.cv('percentage')]: props.percentage }\n})\nconst trackStyle = computed(() => {\n  return {\n    height: `${props.strokeWidth}px`,\n    borderRadius: `${props.strokeWidth}px`,\n  }\n})\nconst fillerStyle = computed(() => {\n  const style: CSSProperties = {\n    borderRadius: `${props.strokeWidth}px`,\n  }\n\n  const strokeColor = callIfFunc(props.strokeColor, props.percentage)\n\n  if (typeof strokeColor === 'string') {\n    style.backgroundColor = strokeColor\n  } else if (Array.isArray(strokeColor)) {\n    style.backgroundImage = `linear-gradient(to right, ${strokeColor[0]} 0%, ${strokeColor[1]} 100%)`\n  }\n\n  return style\n})\nconst useBubble = computed(() => {\n  return props.infoType.includes('bubble')\n})\nconst bubbleType = computed(() => {\n  if (useBubble.value) {\n    return props.infoType.split('-').pop() === 'bottom' ? 'bottom' : 'top'\n  }\n\n  return 'top'\n})\nconst bubbleStyle = computed(() => {\n  if (!useBubble.value) return {}\n\n  const type = bubbleType.value === 'top' ? 'bottom' : 'top'\n\n  return {\n    [type]: `${props.strokeWidth}px`,\n  }\n})\nconst percentValue = computed(() => toFixed(props.percentage, props.precision))\n\ndefineExpose({ percentValue })\n</script>\n\n<template>\n  <div\n    :class=\"className\"\n    :style=\"style\"\n    role=\"progressbar\"\n    :aria-valuenow=\"percentValue\"\n    :aria-valuetext=\"`${percentValue}%`\"\n    aria-valuemin=\"0\"\n    aria-valuemax=\"100\"\n  >\n    <div :class=\"nh.be('track')\" :style=\"trackStyle\">\n      <div :class=\"nh.be('filler')\" :style=\"fillerStyle\"></div>\n      <div v-if=\"props.infoType === 'inside'\" :class=\"nh.be('info')\">\n        <slot>\n          <Renderer :renderer=\"props.slots.default\">\n            <span :class=\"nh.be('percentage')\">\n              {{ `${percentValue}%` }}\n            </span>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n    <div v-if=\"useBubble\" :class=\"nh.be('reference')\">\n      <Bubble\n        inherit\n        :class=\"nh.be('bubble')\"\n        :style=\"bubbleStyle\"\n        :placement=\"bubbleType\"\n        :content-class=\"nh.be('info')\"\n      >\n        <slot>\n          <Renderer :renderer=\"props.slots.default\">\n            <span :class=\"nh.be('percentage')\">\n              {{ `${percentValue}%` }}\n            </span>\n          </Renderer>\n        </slot>\n      </Bubble>\n    </div>\n    <div v-else-if=\"props.infoType === 'outside'\" :class=\"nh.be('info')\">\n      <slot>\n        <Renderer :renderer=\"props.slots.default\">\n          <span :class=\"nh.be('percentage')\">\n            {{ `${percentValue}%` }}\n          </span>\n        </Renderer>\n      </slot>\n    </div>\n  </div>\n</template>\n","import {\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  sizeProp,\n  stateProp,\n  valueProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type { ChangeEvent, RadioGroupShape, RadioRawOption, RadioShape } from './symbol'\n\nexport const radioProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  value: valueProp,\n  label: valueProp,\n  labelClass: classProp,\n  disabled: booleanProp,\n  tabIndex: [String, Number],\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  name: String,\n  shape: String as PropType<RadioShape>,\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n})\n\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\nexport type RadioCProps = ConfigurableProps<RadioProps>\n\nexport const radioGroupProps = buildProps({\n  size: sizeProp,\n  state: stateProp,\n  value: valueProp,\n  vertical: booleanProp,\n  disabled: booleanProp,\n  options: Array as PropType<RadioRawOption[]>,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  shape: String as PropType<RadioGroupShape>,\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n})\n\nexport type RadioGroupProps = ExtractPropTypes<typeof radioGroupProps>\nexport type RadioGroupCProps = ConfigurableProps<RadioGroupProps>\n","import type { InjectionKey, Ref } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ComponentSize, ComponentState } from '@vexip-ui/config'\n\nexport type RadioShape = 'default' | 'border' | 'button'\nexport type RadioGroupShape = RadioShape | 'button-group'\n\nexport type RadioRawOption =\n  | string\n  | {\n    label: string | number | boolean,\n    content?: string,\n    disabled?: boolean,\n  }\n\nexport interface GroupState {\n  currentValue: string | number | boolean,\n  size: ComponentSize,\n  state: ComponentState,\n  disabled: boolean,\n  loading: boolean,\n  loadingIcon: Record<string, any>,\n  loadingLock: boolean,\n  loadingEffect: IconEffect,\n  shape: RadioGroupShape,\n  updateValue(value: string | number | boolean): void,\n  registerInput(input: Ref<HTMLElement | null | undefined>): void,\n  unregisterInput(input: Ref<HTMLElement | null | undefined>): void,\n}\n\nexport type ChangeEvent = (value: string | number | boolean) => void\n\nexport const GROUP_STATE = '__VXP_RADIO_GROUP_STATE' as unknown as InjectionKey<GroupState>\n\nexport const radioShapes = Object.freeze<RadioShape[]>(['default', 'border', 'button'])\nexport const radioGroupShapes = Object.freeze<RadioGroupShape[]>([...radioShapes, 'button-group'])\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\n\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { radioProps } from './props'\nimport { GROUP_STATE, radioShapes } from './symbol'\n\nimport type { ChangeEvent } from './symbol'\n\ndefineOptions({ name: 'Radio' })\n\nconst _props = defineProps(radioProps)\nconst props = useProps('radio', _props, {\n  size: createSizeProp(),\n  state: createStateProp(),\n  value: {\n    default: null,\n    static: true,\n  },\n  label: {\n    default: null,\n    static: true,\n    required: true,\n  },\n  labelClass: null,\n  disabled: false,\n  tabIndex: 0,\n  loading: false,\n  loadingLock: false,\n  name: {\n    default: '',\n    static: true,\n  },\n  shape: {\n    default: 'default',\n    validator: value => radioShapes.includes(value),\n  },\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<{ default: () => any, extra: () => any }>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('radio')\nconst icons = useIcons()\nconst currentValue = ref(props.value)\n\nconst input = ref<HTMLInputElement>()\n\nconst size = computed(() => groupState?.size || props.size)\nconst state = computed(() => groupState?.state || props.state)\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\nconst isLoading = computed(() => groupState?.loading || props.loading)\nconst loadingIcon = computed(() => groupState?.loadingIcon)\nconst isLoadingLock = computed(() => groupState?.loadingLock || false)\nconst loadingEffect = computed(() => groupState?.loadingEffect || '')\nconst shape = computed(() => groupState?.shape || props.shape)\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('checked')]: currentValue.value === props.label,\n      [nh.bm('disabled')]: isDisabled.value,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: isLoading.value,\n      [nh.bm(size.value)]: size.value !== 'default',\n      [nh.bm(state.value)]: state.value !== 'default',\n      [nh.bm(shape.value)]: shape.value !== 'default' && shape.value !== 'button-group',\n    },\n  ]\n})\nconst isButton = computed(() => shape.value === 'button' || shape.value === 'button-group')\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n  },\n)\n\nif (groupState) {\n  currentValue.value = groupState.currentValue\n\n  watch(() => groupState.currentValue, emitChange)\n\n  onMounted(() => {\n    groupState.registerInput(input)\n  })\n\n  onBeforeUnmount(() => {\n    groupState.unregisterInput(input)\n  })\n}\n\ndefineExpose({ currentValue, input })\n\nfunction emitChange(value: string | number | boolean) {\n  if (currentValue.value === value) return\n\n  currentValue.value = value\n\n  emit('update:value', value)\n  emitEvent(props.onChange as ChangeEvent, value)\n}\n\nfunction handleChange() {\n  if (isDisabled.value || readonly.value) {\n    return\n  }\n\n  emitChange(props.label)\n\n  if (groupState && currentValue.value === props.label) {\n    groupState.updateValue(currentValue.value)\n  }\n}\n</script>\n\n<template>\n  <label :class=\"className\">\n    <input\n      ref=\"input\"\n      type=\"radio\"\n      :class=\"nh.be('input')\"\n      :checked=\"currentValue === props.label\"\n      :disabled=\"isDisabled || readonly\"\n      :tabindex=\"props.tabIndex\"\n      :name=\"props.name\"\n      @submit.prevent\n      @change=\"handleChange\"\n      @click.stop\n    />\n    <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\n    <span :class=\"[nh.be('label'), props.labelClass]\">\n      <CollapseTransition\n        v-if=\"isButton\"\n        appear\n        horizontal\n        fade-effect\n      >\n        <div v-if=\"isLoading\" :class=\"nh.be('loading')\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"loadingEffect || icons.loading.effect\"\n            :icon=\"loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </CollapseTransition>\n      <slot>{{ props.label }}</slot>\n      <span :class=\"nh.be('extra')\" @click.capture.prevent>\n        <slot name=\"extra\"></slot>\n      </span>\n    </span>\n  </label>\n</template>\n","<script setup lang=\"ts\">\nimport { Radio } from '@/components/radio'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { debounceMinor, isClient, isObject } from '@vexip-ui/utils'\nimport { radioGroupProps } from './props'\nimport { GROUP_STATE, radioGroupShapes } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { ChangeEvent } from './symbol'\n\ndefineOptions({ name: 'RadioGroup' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<string | number | boolean>(focus)\n\nconst _props = defineProps(radioGroupProps)\nconst props = useProps('radioGroup', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  vertical: false,\n  disabled: () => disabled.value,\n  options: {\n    default: () => [],\n    static: true,\n  },\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  shape: {\n    default: 'default',\n    validator: value => radioGroupShapes.includes(value),\n  },\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst nh = useNameHelper('radio-group')\nconst currentValue = ref(props.value)\nconst inputSet = new Set<Ref<HTMLElement | null | undefined>>()\n\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('radio-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('vertical')]: props.vertical,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm(props.shape)]: props.shape !== 'default',\n    },\n  ]\n})\n\nconst groupState = reactive({\n  currentValue,\n  size: toRef(props, 'size'),\n  state: toRef(props, 'state'),\n  disabled: toRef(props, 'disabled'),\n  loading: toRef(props, 'loading'),\n  loadingIcon: toRef(props, 'loadingIcon'),\n  loadingLock: toRef(props, 'loadingLock'),\n  loadingEffect: toRef(props, 'loadingEffect'),\n  shape: toRef(props, 'shape'),\n  updateValue: debounceMinor(updateValue),\n  registerInput,\n  unregisterInput,\n})\n\n// 此处直接定义 reactive 会出现类型推断错误，存疑？\nprovide(GROUP_STATE, groupState)\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n  },\n)\n\ndefineExpose({\n  idFor,\n  focus,\n  blur: () => {\n    for (const input of inputSet) {\n      input.value?.blur()\n    }\n  },\n})\n\nfunction updateValue(value: string | number | boolean) {\n  if (currentValue.value !== value) {\n    currentValue.value = value\n\n    emit('update:value', value)\n    setFieldValue(value)\n    emitEvent(props.onChange as ChangeEvent, value)\n    validateField()\n  }\n}\n\nfunction registerInput(input: Ref<HTMLElement | null | undefined>) {\n  inputSet.add(input)\n}\n\nfunction unregisterInput(input: Ref<HTMLElement | null | undefined>) {\n  inputSet.delete(input)\n}\n\nfunction focus(options?: FocusOptions) {\n  const input = Array.from(inputSet)[0]?.value\n\n  if (isClient && input && document.activeElement !== input) {\n    input.focus(options)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    :class=\"className\"\n    role=\"radiogroup\"\n    :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n    :aria-labelledby=\"labelId\"\n  >\n    <slot>\n      <template v-for=\"item in props.options\" :key=\"item\">\n        <Radio\n          v-if=\"isObject(item)\"\n          inherit\n          :label=\"item.label\"\n          :disabled=\"item.disabled\"\n        >\n          {{ item.content || item.label }}\n        </Radio>\n        <Radio v-else inherit :label=\"item\">\n          {{ item }}\n        </Radio>\n      </template>\n    </slot>\n  </div>\n</template>\n","import { buildProps, iconProp, sizeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { ResultSlots, ResultType } from './symbol'\n\nexport const resultProps = buildProps({\n  title: String,\n  size: sizeProp,\n  type: String as PropType<ResultType>,\n  icon: iconProp,\n  iconColor: String,\n  description: String,\n  slots: Object as PropType<ResultSlots>,\n})\n\nexport type ResultProps = ExtractPropTypes<typeof resultProps>\nexport type ResultCProps = ConfigurableProps<ExtractPropTypes<typeof resultProps>>\n","export type ResultType = 'primary' | 'info' | 'success' | 'warning' | 'error'\n\nexport interface ResultSlots {\n  icon?: () => any,\n  title?: () => any,\n  description?: () => any,\n  extra?: () => any,\n}\n\nexport const resultTypes = Object.freeze<ResultType[]>([\n  'primary',\n  'info',\n  'success',\n  'warning',\n  'error',\n])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed } from 'vue'\n\nimport { createIconProp, createSizeProp, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { resultProps } from './props'\nimport { resultTypes } from './symbol'\n\nimport type { ResultSlots } from './symbol'\n\ndefineOptions({ name: 'Result' })\n\nconst _props = defineProps(resultProps)\nconst props = useProps('result', _props, {\n  title: '',\n  size: createSizeProp(),\n  type: {\n    default: 'primary',\n    validator: value => resultTypes.includes(value),\n  },\n  icon: createIconProp(),\n  iconColor: '',\n  description: '',\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<ResultSlots>()\n\nconst nh = useNameHelper('result')\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  primary: icons.value.info,\n  info: icons.value.info,\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error,\n}))\n\nconst iconComp = computed(() => {\n  return props.icon ? { icon: props.icon } : predefinedIcons.value[props.type]\n})\nconst hasTitle = computed(() => !!(slots.title || props.title || props.slots.title))\nconst hasIcon = computed(() => !!(slots.icon || props.type || props.icon || props.slots.icon))\nconst hasDescription = computed(\n  () => !!(slots.description || props.description || props.slots.description),\n)\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.type)]: props.type,\n    [nh.bm(props.size)]: props.size !== 'default',\n  }\n})\nconst style = computed(() => {\n  if (props.iconColor) {\n    return nh.cvm({\n      'icon-color': props.iconColor,\n    })\n  }\n\n  return {}\n})\n</script>\n\n<template>\n  <div :class=\"className\" :style=\"style\">\n    <div v-if=\"hasIcon\" :class=\"nh.be('icon')\">\n      <slot name=\"icon\">\n        <Renderer :renderer=\"props.slots.icon\">\n          <Icon v-bind=\"iconComp\" :class=\"nh.be('icon')\" :style=\"{ color: props.iconColor }\"></Icon>\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"hasTitle\" :class=\"nh.be('title')\">\n      <slot name=\"title\">\n        <Renderer :renderer=\"props.slots.title\">\n          {{ props.title }}\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"hasDescription\" :class=\"nh.be('description')\">\n      <slot name=\"description\">\n        <Renderer :renderer=\"props.slots.description\">\n          {{ props.description }}\n        </Renderer>\n      </slot>\n    </div>\n    <div v-if=\"slots.extra || props.slots.extra\" :class=\"nh.be('extra')\">\n      <slot name=\"extra\">\n        <Renderer :renderer=\"props.slots.extra\"></Renderer>\n      </slot>\n    </div>\n  </div>\n</template>\n","import { defineComponent, h, provide, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { skeletonGroupProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\nexport default defineComponent({\n  name: 'SkeletonGroup',\n  props: skeletonGroupProps,\n  setup(_props, { slots }) {\n    const props = useProps('skeletonGroup', _props, {\n      size: null,\n      tag: false,\n      itemTag: null,\n      activated: false,\n      round: false,\n      circle: false,\n      block: false,\n      loading: true,\n    })\n\n    const nh = useNameHelper('skeletonGroup')\n\n    provide(GROUP_STATE, props)\n\n    return () => {\n      if (props.tag) {\n        return h(\n          typeof props.tag === 'string' ? props.tag : 'div',\n          {\n            class: [nh.b(), props.inherit && nh.bm('inherit')],\n            role: 'group',\n          },\n          {\n            default: () => slots.default?.(),\n          },\n        )\n      }\n\n      return renderSlot(slots, 'default')\n    }\n  },\n})\n","<script setup lang=\"ts\">\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, ref } from 'vue'\n\nimport { useHoverDelay, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useSetTimeout } from '@vexip-ui/hooks'\n\nimport type { PropType } from 'vue'\nimport type { TooltipExposed } from '@/components/tooltip'\nimport type { SliderTipProps } from './symbol'\n\ndefineOptions({ name: 'SliderTrigger' })\n\nconst props = defineProps({\n  value: {\n    type: Number,\n    default: 0,\n  },\n  tipTransfer: {\n    type: [Boolean, String],\n    default: false,\n  },\n  hideTip: {\n    type: Boolean,\n    default: false,\n  },\n  vertical: {\n    type: Boolean,\n    default: false,\n  },\n  min: {\n    type: Number,\n    default: 0,\n  },\n  max: {\n    type: Number,\n    default: 100,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n  loading: {\n    type: Boolean,\n    default: false,\n  },\n  reverse: {\n    type: Boolean,\n    default: false,\n  },\n  sliding: {\n    type: Boolean,\n    default: false,\n  },\n  tipHover: {\n    type: Boolean,\n    default: false,\n  },\n  tipProps: {\n    type: Object as PropType<SliderTipProps>,\n    default: () => ({}),\n  },\n})\n\nconst emit = defineEmits(['key-minus', 'key-plus'])\n\ndefineSlots<{ default: () => any, tip: () => any }>()\n\nconst nh = useNameHelper('slider')\nconst hoverDelay = useHoverDelay()\n\nconst isTipShow = ref(false)\n\nconst tooltip = ref<(InstanceType<typeof Tooltip> & TooltipExposed) | null>(null)\nconst handler = ref<HTMLElement>()\n\nconst { timer } = useSetTimeout()\nconst { target: wrapper } = useModifier({\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (modifier.up || modifier.down || modifier.left || modifier.right) {\n      disableEvent(event)\n\n      const extraType = event.ctrlKey\n        ? 'ctrl'\n        : event.shiftKey\n          ? 'shift'\n          : event.altKey\n            ? 'alt'\n            : undefined\n\n      if (modifier.up || modifier.left) {\n        emit('key-minus', extraType)\n      } else {\n        emit('key-plus', extraType)\n      }\n    }\n  },\n})\n\nconst tipClass = computed(() => [nh.be('tip'), props.tipProps?.tipClass])\n\ndefineExpose({ updateTooltip, focus, blur })\n\nfunction showTooltip() {\n  clearTimeout(timer.hover)\n\n  if (!props.disabled) {\n    timer.hover = setTimeout(() => {\n      isTipShow.value = true\n    }, hoverDelay.value)\n  }\n}\n\nfunction hideTooltip() {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    isTipShow.value = false\n  }, hoverDelay.value)\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nfunction updateTooltip() {\n  if (tooltip.value) {\n    tooltip.value.updatePopper()\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  handler.value?.focus(options)\n}\n\nfunction blur() {\n  handler.value?.blur()\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"nh.be('trigger')\"\n    tabindex=\"-1\"\n    @touchstart=\"disableEvent\"\n  >\n    <Tooltip\n      ref=\"tooltip\"\n      :placement=\"vertical ? 'right' : 'top'\"\n      v-bind=\"tipProps\"\n      trigger=\"custom\"\n      :transfer=\"tipTransfer\"\n      :visible=\"isTipShow || sliding\"\n      :tip-class=\"tipClass\"\n      :disabled=\"hideTip\"\n      :no-hover=\"!tipHover\"\n      @tip-enter=\"showTooltip\"\n      @tip-leave=\"hideTooltip\"\n    >\n      <template #trigger>\n        <div\n          ref=\"handler\"\n          :class=\"{\n            [nh.be('button')]: true,\n            [nh.bem('button', 'loading')]: loading,\n            [nh.bem('button', 'sliding')]: sliding\n          }\"\n          role=\"slider\"\n          tabindex=\"0\"\n          :aria-valuenow=\"value\"\n          :aria-valuemin=\"min\"\n          :aria-valuemax=\"max\"\n          :aria-disabled=\"disabled\"\n          @mouseenter=\"showTooltip\"\n          @mouseleave=\"hideTooltip\"\n        >\n          <slot>\n            <div :class=\"nh.be('handler')\"></div>\n          </slot>\n        </div>\n      </template>\n      <slot name=\"tip\">\n        {{ value }}\n      </slot>\n    </Tooltip>\n  </div>\n</template>\n","import { booleanProp, booleanStringProp, buildProps, eventProp, stateProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { SliderRawMarkers, SliderSlots, SliderTipProps } from './symbol'\n\nexport const sliderProps = buildProps({\n  state: stateProp,\n  value: [Number, Array] as PropType<number | number[]>,\n  min: Number,\n  max: Number,\n  step: Number,\n  vertical: booleanProp,\n  hideTip: booleanProp,\n  tipTransfer: booleanStringProp,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingLock: booleanProp,\n  reverse: booleanProp,\n  range: booleanProp,\n  markers: [Object, Array] as PropType<SliderRawMarkers>,\n  markerOnly: booleanProp,\n  tipHover: booleanProp,\n  flipMarker: booleanProp,\n  triggerFade: booleanProp,\n  tipProps: Object as PropType<SliderTipProps>,\n  sync: booleanProp,\n  rangeDraggable: booleanProp,\n  slots: Object as PropType<SliderSlots>,\n  onChange: eventProp<(value: number | number[]) => void>(),\n  onInput: eventProp<(value: number | number[]) => void>(),\n})\n\nexport type SliderProps = ExtractPropTypes<typeof sliderProps>\nexport type SliderCProps = ConfigurableProps<SliderProps>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport SliderTrigger from './slider-trigger.vue'\nimport {\n  createStateProp,\n  emitEvent,\n  useHoverDelay,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { decimalLength, throttle, toFixed } from '@vexip-ui/utils'\nimport { sliderProps } from './props'\n\nimport type { SliderMarker, SliderSlots } from './symbol'\n\nconst enum TriggerType {\n  START = 0,\n  END = 1,\n}\n\ndefineOptions({ name: 'Slider' })\n\nconst { idFor, state, labelId, disabled, loading, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<number | number[]>(focus)\n\nconst _props = defineProps(sliderProps)\nconst props = useProps('slider', _props, {\n  state: createStateProp(state),\n  value: {\n    default: () => getFieldValue() ?? 0,\n    static: true,\n  },\n  min: 0,\n  max: 100,\n  step: {\n    default: 1,\n    validator: value => value > 0,\n  },\n  vertical: false,\n  hideTip: false,\n  tipTransfer: null,\n  disabled: () => disabled.value,\n  loading: () => loading.value,\n  loadingLock: false,\n  reverse: false,\n  range: false,\n  markers: null,\n  markerOnly: false,\n  tipHover: false,\n  flipMarker: false,\n  triggerFade: false,\n  tipProps: () => ({}),\n  sync: false,\n  rangeDraggable: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<SliderSlots>()\n\nconst nh = useNameHelper('slider')\nconst hoverDelay = useHoverDelay()\n\nconst { timer } = useSetTimeout()\n\nconst stepOneValue = ref([0, 0]) // 按每 step 为 1 的 value\nconst sliding = ref([false, false])\nconst triggerType = ref(TriggerType.END)\nconst hovered = ref(false)\nconst triggerShow = ref(false)\n\nconst track = ref<HTMLElement>()\nconst startTrigger = ref<InstanceType<typeof SliderTrigger>>()\nconst endTrigger = ref<InstanceType<typeof SliderTrigger>>()\n\nconst markerList = computed(() => {\n  const markers = props.markers\n  const list: { value: number, marker: SliderMarker }[] = []\n\n  if (!markers) return list\n\n  if (Array.isArray(markers)) {\n    for (const raw of markers) {\n      const { value, ...marker } = typeof raw === 'number' ? { value: raw } : raw\n\n      if (!Number.isNaN(value)) {\n        list.push({ value, marker })\n      }\n    }\n  } else {\n    for (const value of Object.keys(markers)) {\n      const number = parseFloat(value)\n      const marker = markers[value]\n\n      if (!Number.isNaN(number)) {\n        list.push({\n          value: number,\n          marker: typeof marker === 'string' ? { label: marker } : marker,\n        })\n      }\n    }\n  }\n\n  return list.sort((prev, next) => prev.value - next.value)\n})\nconst hasMarkerLabel = computed(() => !!markerList.value.find(({ marker }) => marker.label))\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst canDragRange = computed(() => props.range && props.rangeDraggable)\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(props.state)]: props.state !== 'default',\n    [nh.bm('vertical')]: props.vertical,\n    [nh.bm('sliding')]: sliding.value[1] || sliding.value[0],\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('readonly')]: readonly.value,\n    [nh.bm('loading')]: props.loading,\n    [nh.bm('reverse')]: props.reverse,\n    [nh.bm('with-marker')]: hasMarkerLabel.value,\n    [nh.bm('flip-marker')]: props.flipMarker,\n    [nh.bm('hide-trigger')]: props.triggerFade && !triggerShow.value,\n    [nh.bm('range-draggable')]: canDragRange.value,\n  }\n})\nconst stepDigit = computed(() => decimalLength(props.step))\n// 按每 step 为 1 算的最小值\nconst stepOneMin = computed(() => Math.ceil(Math.min(props.min, props.max) / props.step))\n// 按每 step 为 1 算的最大值\nconst stepOneMax = computed(() => Math.floor(Math.max(props.min, props.max) / props.step))\nconst truthValue = computed(() => {\n  return [\n    toFixed(stepOneValue.value[0] * props.step, stepDigit.value),\n    toFixed(stepOneValue.value[1] * props.step, stepDigit.value),\n  ]\n})\nconst stepOneTotal = computed(() => stepOneMax.value - stepOneMin.value || 1)\nconst triggerPercent = computed(() => {\n  return [toPercent(stepOneValue.value[0]), toPercent(stepOneValue.value[1])]\n})\nconst fillerStyle = computed(() => {\n  const { vertical, reverse } = props\n\n  return {\n    [vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']:\n      `${Math.min(triggerPercent.value[0], triggerPercent.value[1])}%`,\n    [vertical ? 'height' : 'width']:\n      `${Math.abs(triggerPercent.value[0] - triggerPercent.value[1])}%`,\n  }\n})\nconst startTriggerStyle = computed(() => {\n  const { vertical, reverse } = props\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[0]}%` : '50%',\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[0]}%`,\n    zIndex: triggerType.value === TriggerType.START ? 1 : undefined,\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`,\n  }\n})\nconst endTriggerStyle = computed(() => {\n  const { vertical, reverse } = props\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[1]}%` : '50%',\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[1]}%`,\n    zIndex: triggerType.value === TriggerType.END ? 1 : undefined,\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`,\n  }\n})\nconst isDisabled = computed(() => props.disabled || readonly.value)\n\nconst commonSlotParams = shallowReadonly(\n  reactive({\n    values: truthValue,\n    sliding: sliding,\n    percent: triggerPercent,\n    disabled: toRef(props, 'disabled'),\n    loading: toRef(props, 'loading'),\n  }),\n)\n\nconst { target: filler } = useMoving({\n  disabled: computed(() => !canDragRange.value || isDisabled.value),\n  onStart: (state, event) => {\n    if (!track.value || event.button > 0) {\n      return false\n    }\n\n    clearTimeout(timer.sliding)\n    event.stopPropagation()\n    event.preventDefault()\n\n    trackRect = track.value.getBoundingClientRect()\n    state.startValue = stepOneValue.value[TriggerType.START]\n    state.endValue = stepOneValue.value[TriggerType.END]\n    state.valueDiff = (state.endValue as number) - (state.startValue as number)\n  },\n  onMove: (state, event) => {\n    if (!trackRect) {\n      return\n    }\n\n    event.preventDefault()\n\n    const vertical = props.vertical\n    const reverse = props.reverse\n    const delta = vertical ? state.deltaY : state.deltaX\n\n    for (let i = 0; i < 2; ++i) {\n      const type = i ? TriggerType.END : TriggerType.START\n      stepOneValue.value[type] =\n        (reverse ? -1 : 1) *\n          (delta / trackRect[vertical ? 'height' : 'width']) *\n          stepOneTotal.value +\n        Number(state[i ? 'endValue' : 'startValue'])\n    }\n\n    verifyValue()\n\n    if (stepOneValue.value[TriggerType.START] === stepOneMin.value) {\n      stepOneValue.value[TriggerType.END] =\n        stepOneValue.value[TriggerType.START] + (state.valueDiff as number)\n    } else if (stepOneValue.value[TriggerType.END] === stepOneMax.value) {\n      stepOneValue.value[TriggerType.START] =\n        stepOneValue.value[TriggerType.END] - (state.valueDiff as number)\n    }\n\n    emitChange('input')\n  },\n  onEnd: () => emitChange(),\n})\n\nparseValue(props.value)\nverifyValue()\n\nlet lastValue: number | number[] = props.range\n  ? truthValue.value[0] > truthValue.value[1]\n    ? [truthValue.value[1], truthValue.value[0]]\n    : [truthValue.value[0], truthValue.value[1]]\n  : truthValue.value[1]\nlet lastInputValue: number | number[] = Array.isArray(lastValue) ? [...lastValue] : lastValue\n\nwatch(\n  () => props.value,\n  value => {\n    if (isEqualValue(lastValue, value)) {\n      return\n    }\n\n    parseValue(value)\n    verifyValue()\n  },\n)\nwatch(\n  () => props.step,\n  () => {\n    parseValue(props.value)\n    verifyValue()\n  },\n)\n\ndefineExpose({\n  idFor,\n  sliding,\n  track,\n  startTrigger,\n  endTrigger,\n  isValueInRange,\n  focus,\n  blur,\n})\n\nfunction toPercent(value: string | number) {\n  return ((parseFloat(value as string) - stepOneMin.value) / stepOneTotal.value) * 100\n}\n\nfunction parseValue(value: number | number[]) {\n  if (props.range) {\n    const values = Array.isArray(value) ? value : [value, 100]\n\n    stepOneValue.value = [values[0] / props.step, values[1] / props.step]\n  } else {\n    stepOneValue.value = [stepOneMin.value, (Array.isArray(value) ? value[0] : value) / props.step]\n  }\n}\n\nfunction verifyValue() {\n  stepOneValue.value = stepOneValue.value.map(value => {\n    let computedValue = Math.max(stepOneMin.value, Math.min(stepOneMax.value, Math.round(value)))\n\n    if (props.markerOnly && markerList.value.length) {\n      let nearest = Infinity\n      let nearestMarker = 0\n\n      for (const { value } of markerList.value) {\n        const delta = Math.abs(computedValue * props.step - value)\n\n        if (nearest > delta) {\n          nearest = delta\n          nearestMarker = value\n        }\n      }\n\n      computedValue = nearestMarker / props.step\n    }\n\n    return computedValue\n  })\n}\n\nfunction setTriggerFade() {\n  if (hovered.value || sliding.value[0] || sliding.value[1]) return\n\n  triggerShow.value = false\n}\n\nfunction handlePointerEnter() {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = true\n    triggerShow.value = true\n  }, hoverDelay.value)\n}\n\nfunction handlePointerLeave() {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = false\n    setTriggerFade()\n  }, hoverDelay.value)\n}\n\nfunction emitChange(type: 'change' | 'input' = 'change', sync = props.sync) {\n  const [start, end] = truthValue.value\n  const value = props.range ? (start > end ? [end, start] : [start, end]) : end\n\n  if (type === 'change') {\n    if (isEqualValue(lastValue, value)) return\n\n    lastValue = value\n\n    if (!sync) {\n      lastInputValue = value\n\n      emit('update:value', value)\n      setFieldValue(value)\n    }\n\n    emitEvent(props.onChange, value)\n\n    if (!sync) {\n      validateField()\n    }\n  } else {\n    if (isEqualValue(lastInputValue, value)) return\n\n    lastInputValue = value\n\n    if (sync) {\n      emit('update:value', value)\n      setFieldValue(value)\n    }\n\n    emitEvent(props.onInput, value)\n\n    if (sync) {\n      validateField()\n    }\n  }\n}\n\nlet trackRect: DOMRect | null = null\n\nfunction computePointedValue(event: PointerEvent) {\n  if (!trackRect) return\n\n  const vertical = props.vertical\n  const reverse = props.reverse\n  const client = vertical ? event.clientY : event.clientX\n\n  stepOneValue.value[triggerType.value] =\n    (reverse ? -1 : 1) *\n      ((client - trackRect[vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']) /\n        trackRect[vertical ? 'height' : 'width']) *\n      stepOneTotal.value +\n    stepOneMin.value\n}\n\nfunction isEqualValue(prev: number | number[], current: number | number[]) {\n  if (Array.isArray(prev) && Array.isArray(current)) {\n    return prev[0] === current[0] && prev[1] === current[1]\n  }\n\n  return prev === current\n}\n\nconst throttleMove = throttle((event: PointerEvent) => {\n  if (!trackRect || props.disabled) return\n\n  event.preventDefault()\n\n  computePointedValue(event)\n  verifyValue()\n\n  if (startTrigger.value) {\n    startTrigger.value.updateTooltip()\n  }\n\n  if (endTrigger.value) {\n    endTrigger.value.updateTooltip()\n  }\n\n  // const [start, end] = truthValue.value\n  // const value = props.range ? (start > end ? [end, start] : [start, end]) : end\n\n  // if (!isEqualValue(lastValue, value)) {\n  //   lastValue = value\n  //   emitEvent(props.onInput, value)\n  // }\n  emitChange('input')\n})\n\nfunction handleTrackDown(event: PointerEvent) {\n  if (!track.value || isDisabled.value) return\n\n  clearTimeout(timer.sliding)\n  event.stopPropagation()\n  event.preventDefault()\n\n  trackRect = track.value.getBoundingClientRect()\n\n  if (props.range) {\n    const { vertical, reverse } = props\n    const client = vertical ? event.clientY : event.clientX\n    const downPercent =\n      ((reverse\n        ? trackRect[vertical ? 'bottom' : 'right'] - client\n        : client - trackRect[vertical ? 'top' : 'left']) /\n        trackRect[vertical ? 'height' : 'width']) *\n      100\n\n    triggerType.value =\n      Math.abs(downPercent - triggerPercent.value[0]) <\n      Math.abs(downPercent - triggerPercent.value[1])\n        ? TriggerType.START\n        : TriggerType.END\n  } else {\n    triggerType.value = TriggerType.END\n  }\n\n  sliding.value[triggerType.value] = true\n  triggerShow.value = true\n\n  computePointedValue(event)\n  verifyValue()\n  emitChange('input')\n\n  document.addEventListener('pointermove', handleMove)\n  document.addEventListener('pointerup', handleMoveEnd)\n}\n\nfunction handleMove(event: PointerEvent) {\n  throttleMove(event)\n}\n\nfunction handleMoveEnd() {\n  trackRect = null\n\n  document.removeEventListener('pointermove', handleMove)\n  document.removeEventListener('pointerup', handleMoveEnd)\n\n  emitChange()\n\n  timer.sliding = setTimeout(() => {\n    sliding.value[triggerType.value] = false\n    setTriggerFade()\n  }, 250)\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nfunction getPointStyle(value: number | string) {\n  const { vertical, reverse } = props\n  value = toPercent(value)\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : '50%',\n    [reverse ? 'right' : 'left']: vertical ? '50%' : `${value}%`,\n    transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`,\n  }\n}\n\nfunction getMarkerStyle(value: number | string) {\n  const { vertical, reverse } = props\n  value = toPercent(value)\n\n  return {\n    [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : undefined,\n    [reverse ? 'right' : 'left']: vertical ? undefined : `${value}%`,\n    transform: `translate${vertical ? 'Y' : 'X'}(${reverse ? '' : '-'}50%)`,\n  }\n}\n\nfunction isValueInRange(value: number | string) {\n  const number = parseFloat(value as string)\n\n  if (Number.isNaN(number)) return false\n\n  if (props.range) {\n    const min = Math.min(truthValue.value[0], truthValue.value[1])\n    const max = Math.max(truthValue.value[0], truthValue.value[1])\n\n    return number >= min && number <= max\n  } else {\n    return number <= truthValue.value[1]\n  }\n}\n\nfunction adjustValue(type: TriggerType, delta: number, emitEvent = false) {\n  stepOneValue.value[type] += delta\n\n  verifyValue()\n  emitEvent && emitChange()\n}\n\nfunction handlePlus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\n  if (isDisabled.value) return\n\n  if (props.markerOnly || extra === 'alt') {\n    if (!markerList.value.length) return\n\n    const value = truthValue.value[type]\n\n    for (const { value: markerValue } of markerList.value) {\n      if (markerValue > value) {\n        stepOneValue.value[type] = markerValue\n        break\n      }\n    }\n\n    emitChange()\n  } else {\n    adjustValue(type, extra === 'shift' ? 5 : extra === 'ctrl' ? 20 : 1, true)\n  }\n}\n\nfunction handleMinus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\n  if (isDisabled.value) return\n\n  if (props.markerOnly || extra === 'alt') {\n    if (!markerList.value.length) return\n\n    const value = truthValue.value[type]\n\n    for (let i = markerList.value.length - 1; i >= 0; --i) {\n      const { value: markerValue } = markerList.value[i]\n\n      if (markerValue < value) {\n        stepOneValue.value[type] = markerValue\n        break\n      }\n    }\n\n    emitChange()\n  } else {\n    adjustValue(type, extra === 'shift' ? -5 : extra === 'ctrl' ? -20 : -1)\n  }\n}\n\nfunction focus(options?: FocusOptions) {\n  ;(startTrigger.value || endTrigger.value)?.focus(options)\n}\n\nfunction blur() {\n  ;(startTrigger.value || endTrigger.value)?.blur()\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    :class=\"className\"\n    tabindex=\"-1\"\n    role=\"group\"\n    :aria-labelledby=\"labelId\"\n    @pointerdown=\"handleTrackDown\"\n    @pointerenter=\"handlePointerEnter\"\n    @pointerleave=\"handlePointerLeave\"\n    @touchstart=\"disableEvent\"\n  >\n    <div :class=\"nh.be('container')\">\n      <div ref=\"track\" :class=\"nh.be('track')\"></div>\n      <slot name=\"filler\" v-bind=\"commonSlotParams\">\n        <Renderer :renderer=\"props.slots.filler\" :data=\"commonSlotParams\">\n          <div ref=\"filler\" :class=\"nh.be('filler')\" :style=\"fillerStyle\">\n            <div :class=\"nh.be('filler-inner')\"></div>\n          </div>\n        </Renderer>\n      </slot>\n      <template v-if=\"markerList.length\">\n        <div :class=\"nh.be('points')\">\n          <div\n            v-for=\"{ value, marker } in markerList\"\n            :key=\"value\"\n            :class=\"[nh.be('point'), isValueInRange(value) && nh.bem('point', 'in-range')]\"\n            :style=\"getPointStyle(value)\"\n          >\n            <slot\n              name=\"point\"\n              v-bind=\"commonSlotParams\"\n              :marker=\"marker\"\n              :marker-value=\"value\"\n              :in-range=\"isValueInRange(value)\"\n            >\n              <Renderer\n                :renderer=\"props.slots.point\"\n                :data=\"{\n                  ...commonSlotParams,\n                  marker,\n                  markerValue: value,\n                  inRange: isValueInRange(value)\n                }\"\n              >\n                <span :class=\"nh.be('dot')\"></span>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n        <div :class=\"nh.be('markers')\">\n          <template v-for=\"{ value, marker } in markerList\" :key=\"value\">\n            <div\n              v-bind=\"marker.attrs\"\n              :class=\"[nh.be('marker'), marker.class]\"\n              :style=\"[getMarkerStyle(value), marker.style as any]\"\n            >\n              <slot\n                name=\"marker\"\n                v-bind=\"commonSlotParams\"\n                :marker=\"marker\"\n                :marker-value=\"value\"\n                :in-range=\"isValueInRange(value)\"\n              >\n                <Renderer\n                  :renderer=\"props.slots.marker\"\n                  :data=\"{\n                    ...commonSlotParams,\n                    marker,\n                    markerValue: value,\n                    inRange: isValueInRange(value)\n                  }\"\n                >\n                  {{ marker.label }}\n                </Renderer>\n              </slot>\n            </div>\n          </template>\n        </div>\n      </template>\n      <SliderTrigger\n        v-if=\"props.range\"\n        ref=\"startTrigger\"\n        :value=\"truthValue[0]\"\n        :tip-transfer=\"props.tipTransfer\"\n        :hide-tip=\"props.hideTip\"\n        :vertical=\"props.vertical\"\n        :min=\"props.min\"\n        :max=\"props.max\"\n        :disabled=\"props.disabled\"\n        :loading=\"props.loading\"\n        :reverse=\"props.reverse\"\n        :sliding=\"sliding[0]\"\n        :tip-hover=\"props.tipHover\"\n        :style=\"startTriggerStyle\"\n        :tip-props=\"props.tipProps\"\n        @key-plus=\"handlePlus(0, $event)\"\n        @key-minus=\"handleMinus(0, $event)\"\n      >\n        <slot\n          v-if=\"slots.trigger || props.slots.trigger\"\n          name=\"trigger\"\n          type=\"start\"\n          :value=\"truthValue[0]\"\n          :sliding=\"sliding[0]\"\n          :percent=\"triggerPercent[0]\"\n          :disabled=\"props.disabled\"\n          :loading=\"props.loading\"\n        >\n          <Renderer\n            :renderer=\"props.slots.trigger\"\n            :data=\"{\n              type: 'start',\n              value: truthValue[0],\n              sliding: sliding[0],\n              percent: triggerPercent[0],\n              disabled: props.disabled,\n              loading: props.loading\n            }\"\n          ></Renderer>\n        </slot>\n        <template v-if=\"slots.tip || props.slots.tip\" #tip>\n          <slot\n            name=\"tip\"\n            type=\"start\"\n            :value=\"truthValue[0]\"\n            :sliding=\"sliding[0]\"\n            :percent=\"triggerPercent[0]\"\n            :disabled=\"props.disabled\"\n            :loading=\"props.loading\"\n          >\n            <Renderer\n              :renderer=\"props.slots.tip\"\n              :data=\"{\n                type: 'start',\n                value: truthValue[0],\n                sliding: sliding[0],\n                percent: triggerPercent[0],\n                disabled: props.disabled,\n                loading: props.loading\n              }\"\n            >\n              {{ truthValue[0] }}\n            </Renderer>\n          </slot>\n        </template>\n      </SliderTrigger>\n      <SliderTrigger\n        ref=\"endTrigger\"\n        :value=\"truthValue[1]\"\n        :tip-transfer=\"props.tipTransfer\"\n        :hide-tip=\"props.hideTip\"\n        :vertical=\"props.vertical\"\n        :min=\"props.min\"\n        :max=\"props.max\"\n        :disabled=\"props.disabled\"\n        :loading=\"props.loading\"\n        :reverse=\"props.reverse\"\n        :sliding=\"sliding[1]\"\n        :tip-hover=\"props.tipHover\"\n        :style=\"endTriggerStyle\"\n        :tip-props=\"props.tipProps\"\n        @key-plus=\"handlePlus(1, $event)\"\n        @key-minus=\"handleMinus(1, $event)\"\n      >\n        <slot\n          v-if=\"slots.trigger || props.slots.trigger\"\n          name=\"trigger\"\n          type=\"end\"\n          :value=\"truthValue[1]\"\n          :sliding=\"sliding[1]\"\n          :percent=\"triggerPercent[1]\"\n          :disabled=\"props.disabled\"\n          :loading=\"props.loading\"\n        >\n          <Renderer\n            :renderer=\"props.slots.trigger\"\n            :data=\"{\n              type: 'end',\n              value: truthValue[1],\n              sliding: sliding[1],\n              percent: triggerPercent[1],\n              disabled: props.disabled,\n              loading: props.loading\n            }\"\n          ></Renderer>\n        </slot>\n        <template v-if=\"slots.tip || props.slots.tip\" #tip>\n          <slot\n            name=\"tip\"\n            type=\"end\"\n            :value=\"truthValue[1]\"\n            :sliding=\"sliding[1]\"\n            :percent=\"triggerPercent[1]\"\n            :disabled=\"props.disabled\"\n            :loading=\"props.loading\"\n          >\n            <Renderer\n              :renderer=\"props.slots.tip\"\n              :data=\"{\n                type: 'end',\n                value: truthValue[1],\n                sliding: sliding[1],\n                percent: triggerPercent[1],\n                disabled: props.disabled,\n                loading: props.loading\n              }\"\n            >\n              {{ truthValue[1] }}\n            </Renderer>\n          </slot>\n        </template>\n      </SliderTrigger>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ComponentSize, ConfigurableProps } from '@vexip-ui/config'\nimport type { SpaceAlign, SpaceJustify } from './symbol'\n\nexport const spaceProps = buildProps({\n  vertical: booleanProp,\n  inline: booleanProp,\n  tag: String,\n  align: String as PropType<SpaceAlign>,\n  justify: String as PropType<SpaceJustify>,\n  noWrap: booleanProp,\n  size: [String, Number, Array] as PropType<ComponentSize | number | [number, number]>,\n  itemStyle: styleProp,\n  gapDisabled: booleanProp,\n})\n\nexport type SpaceProps = ExtractPropTypes<typeof spaceProps>\nexport type SpaceCProps = ConfigurableProps<SpaceProps>\n","import { computed, defineComponent, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { flatVNodes } from '@vexip-ui/hooks'\nimport { supportFlexGap } from '@vexip-ui/utils'\nimport { spaceProps } from './props'\n\nimport type { ClassType } from '@vexip-ui/config'\nimport type { SpaceAlign, SpaceJustify } from './symbol'\n\nconst justifyList = Object.freeze<SpaceJustify[]>([\n  'start',\n  'end',\n  'center',\n  'space-around',\n  'space-between',\n  'space-evenly',\n])\nconst alignList = Object.freeze<SpaceAlign[]>(['start', 'end', 'center', 'baseline', 'stretch'])\n\nconst useFlexGap = supportFlexGap()\n\nfunction parseFlexStyle(value: string) {\n  return value === 'start' || value === 'end' ? `flex-${value}` : value\n}\n\nexport default defineComponent({\n  name: 'Space',\n  props: spaceProps,\n  setup(_props, { slots }) {\n    const props = useProps('space', _props, {\n      vertical: false,\n      inline: false,\n      tag: 'div',\n      align: {\n        default: 'stretch',\n        validator: value => alignList.includes(value),\n      },\n      justify: {\n        default: 'start',\n        validator: value => justifyList.includes(value),\n      },\n      noWrap: false,\n      size: 'default',\n      itemStyle: null,\n      gapDisabled: !useFlexGap,\n    })\n\n    const nh = useNameHelper('space')\n    const varMap: Record<string, any> = {\n      h: `var(${nh.cv('h-gap')})`,\n      hh: `calc(var(${nh.cv('h-gap')}) * 0.5)`,\n      mhh: `calc(var(${nh.cv('h-gap')}) * -0.5)`,\n      v: `var(${nh.cv('v-gap')})`,\n      hv: `calc(var(${nh.cv('v-gap')}) * 0.5)`,\n      mhv: `calc(var(${nh.cv('v-gap')}) * -0.5)`,\n    }\n\n    const className = computed(() => {\n      const className: ClassType = {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm('inline')]: props.inline,\n        [nh.bm('vertical')]: props.vertical,\n        [nh.bm('no-wrap')]: props.vertical || props.noWrap,\n        [nh.bm('no-gap')]: props.gapDisabled,\n      }\n\n      if (typeof props.size === 'string' && props.size !== 'default') {\n        className[nh.bm(props.size)] = true\n      }\n\n      return className\n    })\n    const style = computed(() => {\n      const { justify, align, size } = props\n\n      const style: Record<string, string> = {\n        alignItems: parseFlexStyle(align),\n        justifyContent: parseFlexStyle(justify),\n      }\n\n      if (typeof size !== 'string') {\n        const normalizedSize = Array.isArray(size) ? size : [size, size]\n\n        style[nh.cv('h-gap')] = `${normalizedSize[0]}px`\n        style[nh.cv('v-gap')] = `${normalizedSize[1]}px`\n      }\n\n      if (props.gapDisabled && !props.vertical) {\n        style.marginTop = varMap.mhv\n        style.marginBottom = varMap.mhv\n      }\n\n      return style\n    })\n\n    return () => {\n      const CustomTag = props.tag || ('div' as any)\n      const children = renderSlot(slots, 'default').children\n\n      if (!children?.length) {\n        return <CustomTag class={className.value} style={style.value}></CustomTag>\n      }\n\n      const vnodes = flatVNodes(children)\n      const lastIndex = vnodes.length - 1\n      const justify = props.justify\n      const justifySpace = justify.startsWith('space')\n      const notBetween = justify !== 'space-between'\n\n      return (\n        <CustomTag class={className.value} style={style.value}>\n          {vnodes.map((vnode, index) => (\n            <div\n              key={index}\n              class={nh.be('item')}\n              role={'none'}\n              style={[\n                props.itemStyle,\n                !props.gapDisabled\n                  ? ''\n                  : props.vertical\n                    ? {\n                      marginBottom: index !== lastIndex ? varMap.v : undefined,\n                    }\n                    : {\n                      paddingTop: varMap.hv,\n                      paddingBottom: varMap.hv,\n                      marginRight: justifySpace\n                        ? notBetween || index !== lastIndex\n                          ? varMap.hh\n                          : undefined\n                        : index !== lastIndex\n                          ? varMap.h\n                          : undefined,\n                      marginLeft: justifySpace\n                        ? notBetween || index !== 0\n                          ? varMap.hh\n                          : undefined\n                        : undefined,\n                    },\n              ]}\n            >\n              {vnode}\n            </div>\n          ))}\n        </CustomTag>\n      )\n    }\n  },\n})\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const splitProps = buildProps({\n  value: Number,\n  min: Number,\n  max: Number,\n  vertical: booleanProp,\n  noTransition: booleanProp,\n  lazy: booleanProp,\n  canFull: booleanProp,\n  onChange: eventProp<(value: number) => void>(),\n  onFull: eventProp<(type: 'top' | 'right' | 'bottom' | 'left') => void>(),\n  onReset: eventProp(),\n  onMoveStart: eventProp<(value: number) => void>(),\n  onMove: eventProp<(value: number) => void>(),\n  onMoveEnd: eventProp<(value: number) => void>(),\n})\n\nexport type SplitProps = ExtractPropTypes<typeof splitProps>\nexport type SplitCProps = ConfigurableProps<SplitProps>\n","<template>\n  <div ref=\"wrapper\" :class=\"className\" @transitionend=\"removeTransition\">\n    <div\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'top' : 'left')]\"\n      :style=\"leftPaneStyle\"\n    >\n      <slot name=\"left\"></slot>\n    </div>\n    <div\n      :class=\"[nh.be('panel'), nh.bem('panel', props.vertical ? 'bottom' : 'right')]\"\n      :style=\"rightPaneStyle\"\n    >\n      <slot name=\"right\"></slot>\n    </div>\n    <div :class=\"nh.be('trigger')\" :style=\"triggerStyle\">\n      <div ref=\"handler\" :class=\"nh.be('handler')\">\n        <template v-if=\"props.canFull\">\n          <button\n            type=\"button\"\n            :class=\"[nh.be('button'), nh.bem('button', `${props.vertical ? 'top' : 'left'}-full`)]\"\n            @pointerdown.stop\n            @click.left=\"handleFull(-1)\"\n          >\n            <Icon v-bind=\"fullIcons[0]\" :scale=\"+(fullIcons[0].scale || 1) * 0.6\"></Icon>\n          </button>\n          <button\n            type=\"button\"\n            :class=\"[\n              nh.be('button'),\n              nh.bem('button', `${props.vertical ? 'bottom' : 'right'}-full`)\n            ]\"\n            @pointerdown.stop\n            @click.left=\"handleFull(1)\"\n          >\n            <Icon v-bind=\"fullIcons[1]\" :scale=\"+(fullIcons[1].scale || 1) * 0.6\"></Icon>\n          </button>\n        </template>\n        <template v-else>\n          <slot name=\"handler\">\n            <span v-for=\"n in 6\" :key=\"n\" :class=\"nh.be('pointer')\"></span>\n          </slot>\n        </template>\n      </div>\n    </div>\n    <div ref=\"guide\" :class=\"nh.be('guide')\"></div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Icon } from '@/components/icon'\n\nimport { computed, defineComponent, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { splitProps } from './props'\n\nexport default defineComponent({\n  name: 'Split',\n  components: {\n    Icon,\n  },\n  props: splitProps,\n  emits: ['update:value'],\n  setup(_props, { emit }) {\n    const props = useProps('split', _props, {\n      value: {\n        default: 0.5,\n        validator: (value: number) => value > 0 && value < 1,\n        static: true,\n      },\n      min: 0.1,\n      max: 0.9,\n      vertical: false,\n      noTransition: false,\n      lazy: false,\n      canFull: false,\n    })\n\n    const nh = useNameHelper('split')\n    const icons = useIcons()\n    const currentValue = ref(props.value)\n    const currentFull = ref<0 | 1 | -1>(0)\n    const transition = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const guide = ref<HTMLElement>()\n\n    const offset = computed(() => {\n      return props.vertical ? 'offsetHeight' : 'offsetWidth'\n    })\n    const position = computed<['top', 'bottom'] | ['left', 'right']>(() => {\n      return props.vertical ? ['top', 'bottom'] : ['left', 'right']\n    })\n\n    const { target: handler, moving } = useMoving({\n      lazy: true,\n      capture: false,\n      onStart: (state, event) => {\n        if (currentFull.value || !wrapper.value || event.button > 0) {\n          return false\n        }\n\n        const { min, max, vertical, lazy } = props\n        const outer = wrapper.value[offset.value]\n        const computedMin = min <= 1 ? min : min / outer\n        const computedMax = max <= 1 ? max : max / outer\n\n        state.outer = outer\n        state.min = computedMin\n        state.max = computedMax\n        state.vertical = vertical\n        state.splitLazy = lazy\n        state.start = currentValue.value * outer\n        state.target = currentValue.value\n\n        if (lazy && guide.value) {\n          guide.value.style[position.value[0]] = `${currentValue.value * 100}`\n          guide.value.style.display = 'block'\n        }\n\n        emitEvent(props.onMoveStart, currentValue.value)\n      },\n      onMove: state => {\n        const outer = state.outer as number\n        const min = state.min as number\n        const max = state.max as number\n        const delta = state.vertical ? state.deltaY : state.deltaX\n        const start = state.start as number\n        const value = Math.min(Math.max(min, (start + delta) / outer), max)\n\n        if (state.splitLazy) {\n          if (guide.value) {\n            guide.value.style[position.value[0]] = `${value * 100}%`\n          }\n\n          state.target = value\n        } else {\n          handleChange(value)\n        }\n\n        emitEvent(props.onMove, value)\n      },\n      onEnd: state => {\n        if (guide.value) {\n          guide.value.style.display = ''\n        }\n\n        if (state.splitLazy) {\n          const target = state.target as number\n\n          if (Math.abs(target - currentValue.value) > 0.01) {\n            setTransition()\n          }\n\n          handleChange(target)\n        }\n\n        emitEvent(props.onMoveEnd, currentValue.value)\n      },\n    })\n\n    const className = computed(() => {\n      let fullType = ''\n\n      if (currentFull.value) {\n        if (props.vertical) {\n          fullType = currentFull.value < 0 ? 'top' : 'bottom'\n        } else {\n          fullType = currentFull.value < 0 ? 'left' : 'right'\n        }\n      }\n\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.vertical ? 'vertical' : 'horizontal')]: true,\n        [nh.bm('moving')]: moving.value,\n        [nh.bm(`${fullType}-full`)]: !!fullType,\n        [nh.bm('transition')]: transition.value,\n      }\n    })\n    const leftPaneStyle = computed(() => {\n      return {\n        [position.value[1]]:\n          currentFull.value < 0\n            ? '0'\n            : currentFull.value > 0\n              ? '100%'\n              : `${(1 - currentValue.value) * 100}%`,\n      }\n    })\n    const rightPaneStyle = computed(() => {\n      return {\n        [position.value[0]]:\n          currentFull.value < 0\n            ? '100%'\n            : currentFull.value > 0\n              ? '0'\n              : `${currentValue.value * 100}%`,\n      }\n    })\n    const triggerStyle = computed(() => {\n      return {\n        [position.value[0]]:\n          currentFull.value < 0\n            ? '100%'\n            : currentFull.value > 0\n              ? '0'\n              : `calc(${currentValue.value * 100}% - var(${nh.cv('handler-size')}) * 0.5)`,\n      }\n    })\n    const fullIcons = computed(() => {\n      return props.vertical\n        ? [icons.value.angleDown, icons.value.angleUp]\n        : [icons.value.angleRight, icons.value.angleLeft]\n    })\n\n    watch(\n      () => props.value,\n      value => {\n        if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\n          currentValue.value = value\n          setTransition()\n        }\n      },\n    )\n    watch(currentValue, value => {\n      if (guide.value) {\n        guide.value.style[position.value[0]] = `${value * 100}%`\n      }\n    })\n    watch(currentFull, value => {\n      setTransition()\n\n      if (value) {\n        let type: 'top' | 'right' | 'bottom' | 'left'\n\n        if (props.vertical) {\n          type = value < 0 ? 'top' : 'bottom'\n        } else {\n          type = value < 0 ? 'left' : 'right'\n        }\n\n        emitEvent(props.onFull, type)\n      } else {\n        emitEvent(props.onReset)\n      }\n    })\n\n    function setTransition() {\n      transition.value = !props.noTransition && !moving.value\n    }\n\n    function removeTransition() {\n      transition.value = false\n    }\n\n    function handleFull(type: 1 | -1) {\n      if (!props.canFull) {\n        return\n      }\n\n      if (currentFull.value) {\n        currentFull.value = 0\n      } else {\n        currentFull.value = type\n      }\n    }\n\n    function handleChange(value: number) {\n      if (value.toFixed(5) !== currentValue.value.toFixed(5)) {\n        currentValue.value = value\n\n        emitEvent(props.onChange, value)\n        emit('update:value', value)\n      }\n    }\n\n    return {\n      props,\n      nh,\n\n      className,\n      position,\n      leftPaneStyle,\n      rightPaneStyle,\n      triggerStyle,\n      fullIcons,\n\n      wrapper,\n      guide,\n      handler,\n\n      removeTransition,\n      handleFull,\n    }\n  },\n})\n</script>\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps, EventListener } from '@vexip-ui/config'\nimport type {\n  ChangeEvent,\n  TabNavAlign,\n  TabNavOptions,\n  TabNavPlacement,\n  TabNavSlots,\n} from './symbol'\n\nexport const tabNavProps = buildProps({\n  active: [String, Number],\n  card: booleanProp,\n  options: Array as PropType<TabNavOptions[]>,\n  align: String as PropType<TabNavAlign>,\n  placement: String as PropType<TabNavPlacement>,\n  closable: booleanProp,\n  showAdd: booleanProp,\n  slots: Object as PropType<TabNavSlots>,\n  onChange: eventProp<EventListener<ChangeEvent>>(),\n  onAdd: eventProp(),\n  onClose: eventProp<EventListener<ChangeEvent>>(),\n})\n\nexport type TabNavProps = ExtractPropTypes<typeof tabNavProps>\nexport type TabNavCProps = ConfigurableProps<TabNavProps>\n\nexport const tabNavItemProps = buildProps({\n  label: [String, Number],\n  disabled: booleanProp,\n  icon: iconProp,\n  closable: booleanProp,\n  onToggle: eventProp<(active: boolean) => void>(),\n})\n\nexport type TabNavItemProps = ExtractPropTypes<typeof tabNavItemProps>\n","import type { InjectionKey } from 'vue'\n\nexport type TabNavAlign = 'left' | 'center' | 'right'\nexport type TabNavPlacement = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface TabNavItemOptions {\n  label: string | number,\n  content?: string,\n  icon?: Record<string, any>,\n  disabled?: boolean,\n  closable?: boolean,\n  onToggle?: (active: boolean) => void,\n}\n\nexport type TabNavOptions = TabNavItemOptions | string | number\n\nexport interface ItemState {\n  el?: HTMLElement | null,\n  label: string | number,\n  index: number,\n  total: number,\n}\n\nexport interface TabNavState {\n  currentActive: string | number,\n  closable: boolean,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  handleActive: (label: string | number) => void,\n  handleClose: (label: string | number) => void,\n  refreshLabels: () => void,\n}\n\nexport type ChangeEvent = (label: string | number) => void\n\nexport interface TabNavSlots {\n  prefix?: () => any,\n  suffix?: () => any,\n  add?: () => any,\n  marker?: () => any,\n  /**\n   * @internal\n   */\n  default?: () => any,\n}\n\nexport const TAB_NAV_STATE = '__VXP_TAB_NAV_STATE' as unknown as InjectionKey<TabNavState>\n\nexport const trackStyleMap = Object.freeze({\n  top: ['left', 'width'],\n  right: ['top', 'height'],\n  bottom: ['left', 'width'],\n  left: ['top', 'height'],\n} as const)\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\n\nimport { computed, inject, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { createIconProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isDefined } from '@vexip-ui/utils'\nimport { tabNavItemProps } from './props'\nimport { TAB_NAV_STATE } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'TabNavItem' })\n\nconst _props = defineProps(tabNavItemProps)\nconst props = useProps('tabNavItem', _props, {\n  label: {\n    static: true,\n    default: null,\n  },\n  disabled: false,\n  icon: createIconProp(),\n  closable: null,\n})\n\nconst tabNavState = inject(TAB_NAV_STATE, null)\n\nconst nh = useNameHelper('tab-nav')\nconst icons = useIcons()\nconst active = ref(false)\nconst currentLabel = ref(props.label)\nconst index = ref(0)\nconst total = ref(0)\n\nconst wrapper = ref<HTMLElement>()\n\nconst contentClass = computed(() => {\n  const baseClass = nh.be('content')\n\n  return {\n    [baseClass]: true,\n    [`${baseClass}--disabled`]: props.disabled,\n    [`${baseClass}--active`]: !props.disabled && active.value,\n  }\n})\nconst isClosable = computed(() => {\n  if (isDefined(props.closable)) {\n    return props.closable\n  }\n\n  return tabNavState?.closable ?? false\n})\n\nwatch(\n  () => props.label,\n  value => {\n    currentLabel.value = value\n    tabNavState?.refreshLabels()\n  },\n)\nwatch(active, value => {\n  emitEvent(props.onToggle!, value)\n})\n\nif (tabNavState) {\n  const state: ItemState = reactive({\n    el: wrapper,\n    label: currentLabel,\n    index,\n    total,\n  })\n\n  watch(currentLabel, () => {\n    active.value = currentLabel.value === tabNavState.currentActive\n  })\n  watch(\n    () => tabNavState.currentActive,\n    value => {\n      active.value = currentLabel.value === value\n    },\n    { immediate: true },\n  )\n\n  tabNavState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    tabNavState.decreaseItem(state)\n  })\n}\n\nfunction handleSelect() {\n  if (props.disabled) {\n    return\n  }\n\n  tabNavState?.handleActive(currentLabel.value)\n}\n\nfunction handleClose() {\n  if (props.disabled) {\n    return\n  }\n\n  tabNavState?.handleClose(currentLabel.value)\n}\n</script>\n\n<template>\n  <li ref=\"wrapper\" :class=\"nh.be('item')\" role=\"none\">\n    <div :class=\"nh.be('pad')\"></div>\n    <div\n      :class=\"contentClass\"\n      role=\"tab\"\n      tabindex=\"0\"\n      :aria-disabled=\"props.disabled\"\n      :aria-setsize=\"total || undefined\"\n      :aria-posinset=\"index || undefined\"\n      @click=\"handleSelect\"\n      @keydown.enter.stop=\"handleSelect\"\n    >\n      <Icon v-if=\"props.icon\" :class=\"nh.be('icon')\" :icon=\"props.icon\"></Icon>\n      <slot>\n        {{ props.label }}\n      </slot>\n      <button\n        v-if=\"isClosable\"\n        type=\"button\"\n        :class=\"nh.be('close')\"\n        @click.stop=\"handleClose\"\n      >\n        <Icon v-bind=\"icons.close\" label=\"close\"></Icon>\n      </button>\n    </div>\n  </li>\n</template>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Scroll } from '@/components/scroll'\nimport { TabNavItem } from '@/components/tab-nav-item'\n\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { debounceMinor, isNull } from '@vexip-ui/utils'\nimport { tabNavProps } from './props'\nimport { TAB_NAV_STATE, trackStyleMap } from './symbol'\n\nimport type { ChangeEvent, ItemState, TabNavSlots } from './symbol'\n\ndefineOptions({ name: 'TabNav' })\n\nconst _props = defineProps(tabNavProps)\nconst props = useProps('tabNav', _props, {\n  active: {\n    default: null,\n    static: true,\n  },\n  card: false,\n  options: {\n    default: () => [],\n    static: true,\n  },\n  align: 'left',\n  placement: 'top',\n  closable: false,\n  showAdd: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<TabNavSlots>()\n\nconst nh = useNameHelper('tab-nav')\nconst icons = useIcons()\nconst currentActive = ref(props.active)\nconst markerPosition = ref(0)\nconst markerSize = ref(0)\nconst itemStates = new Set<ItemState>()\n\nconst wrapper = useDisplay(updateMarkerPosition)\nconst scroll = ref<InstanceType<typeof Scroll>>()\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm(`align-${props.align}`)]: true,\n    [nh.bm(props.placement)]: true,\n    [nh.bm('card')]: props.card,\n  }\n})\nconst markerStyle = computed(() => {\n  const [position, length] = trackStyleMap[props.placement]\n\n  return {\n    [position]: `${markerPosition.value}px`,\n    [length]: `${markerSize.value}px`,\n  }\n})\nconst items = computed(() => {\n  return props.options.map(item => {\n    if (typeof item === 'string' || typeof item === 'number') {\n      return { label: item }\n    }\n\n    return item\n  })\n})\nconst scrollMode = computed(() => {\n  return props.placement === 'top' || props.placement === 'bottom' ? 'horizontal-exact' : 'vertical'\n})\n\nconst refreshLabels = debounceMinor(() => {\n  const total = itemStates.size\n\n  Array.from(itemStates).forEach((item, index) => {\n    item.index = index + 1\n    item.total = total\n\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n\n  if (itemStates.size >= 1 && isActiveEmpty()) {\n    currentActive.value = Array.from(itemStates)[0].label\n  }\n})\n\nprovide(\n  TAB_NAV_STATE,\n  reactive({\n    currentActive,\n    closable: toRef(props, 'closable'),\n    increaseItem,\n    decreaseItem,\n    handleActive,\n    handleClose,\n    refreshLabels,\n  }),\n)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n    updateMarkerPosition()\n  },\n)\nwatch(\n  () => props.placement,\n  () => {\n    requestAnimationFrame(updateMarkerPosition)\n  },\n)\n\nonMounted(updateMarkerPosition)\n\ndefineExpose({\n  items,\n  wrapper,\n  scroll,\n  updateMarkerPosition,\n  handleAdd,\n})\n\nfunction isActiveEmpty() {\n  return isNull(currentActive.value) || currentActive.value === ''\n}\n\nfunction increaseItem(item: ItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleActive(label: string | number) {\n  currentActive.value = label\n\n  updateMarkerPosition()\n  emit('update:active', label)\n  emitEvent(props.onChange as ChangeEvent, label)\n}\n\nfunction handleAdd() {\n  emitEvent(props.onAdd)\n}\n\nfunction handleClose(label: string | number) {\n  emitEvent(props.onClose as ChangeEvent, label)\n\n  requestAnimationFrame(updateMarkerPosition)\n}\n\nfunction updateMarkerPosition() {\n  const activeItem = Array.from(itemStates).find(item => item.label === currentActive.value)\n\n  if (activeItem?.el) {\n    if (props.placement === 'top' || props.placement === 'bottom') {\n      markerPosition.value = activeItem.el.offsetLeft\n      markerSize.value = activeItem.el.offsetWidth\n    } else {\n      markerPosition.value = activeItem.el.offsetTop\n      markerSize.value = activeItem.el.offsetHeight\n    }\n  } else {\n    markerPosition.value = 0\n    markerSize.value = 0\n  }\n}\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"className\" tabindex=\"-1\">\n    <ResizeObserver :on-resize=\"updateMarkerPosition\">\n      <div :class=\"[nh.be('extra'), nh.bem('extra', 'prefix')]\">\n        <div v-if=\"slots.prefix || props.slots.prefix\" :class=\"nh.be('prefix')\">\n          <slot name=\"prefix\">\n            <Renderer :renderer=\"props.slots.prefix\"></Renderer>\n          </slot>\n        </div>\n      </div>\n    </ResizeObserver>\n    <Scroll\n      ref=\"scroll\"\n      :class=\"nh.be('scroll')\"\n      :mode=\"scrollMode\"\n      :delta-x=\"40\"\n      :delta-y=\"40\"\n      scroll-tag=\"ul\"\n      :scroll-class=\"nh.be('list')\"\n      :scroll-attrs=\"{ role: 'tablist' }\"\n    >\n      <slot>\n        <TabNavItem\n          v-for=\"item in items\"\n          :key=\"item.label\"\n          :label=\"item.label\"\n          :icon=\"item.icon\"\n          :disabled=\"item.disabled\"\n          :closable=\"item.closable\"\n          @toggle=\"item.onToggle\"\n        >\n          {{ item.content || item.label }}\n        </TabNavItem>\n      </slot>\n      <li v-if=\"props.showAdd || slots.add || props.slots.add\" :class=\"nh.be('item')\" role=\"none\">\n        <div :class=\"nh.be('pad')\"></div>\n        <button type=\"button\" :class=\"nh.be('add')\" @click=\"handleAdd\">\n          <slot name=\"add\">\n            <Renderer :renderer=\"props.slots.add\">\n              <Icon v-bind=\"icons.plus\" :scale=\"+(icons.plus.scale || 1) * 1.2\"></Icon>\n            </Renderer>\n          </slot>\n        </button>\n      </li>\n      <div\n        v-if=\"!props.card\"\n        :class=\"nh.be('track')\"\n        role=\"none\"\n        :style=\"markerStyle\"\n      >\n        <slot name=\"marker\">\n          <Renderer :renderer=\"props.slots.marker\">\n            <div :class=\"nh.be('marker')\"></div>\n          </Renderer>\n        </slot>\n      </div>\n    </Scroll>\n    <ResizeObserver :on-resize=\"updateMarkerPosition\">\n      <div :class=\"[nh.be('extra'), nh.bem('extra', 'suffix')]\">\n        <div v-if=\"slots.suffix || props.slots.suffix\" :class=\"nh.be('suffix')\">\n          <slot name=\"suffix\">\n            <Renderer :renderer=\"props.slots.suffix\"></Renderer>\n          </slot>\n        </div>\n      </div>\n    </ResizeObserver>\n  </div>\n</template>\n","import { tabNavItemProps, tabNavProps } from '@/components/tab-nav/props'\n\nimport { booleanProp, omitProps, wrapProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TabsSlots } from './symbol'\n\nexport const tabsProps = wrapProps({\n  ...omitProps(tabNavProps, ['options']),\n  lazy: booleanProp,\n  lazyLoad: booleanProp,\n  slots: Object as PropType<TabsSlots>,\n})\n\nexport type TabsProps = ExtractPropTypes<typeof tabsProps>\nexport type TabsCProps = ConfigurableProps<TabsProps>\n\nexport const tabPanelProps = wrapProps({\n  ...tabNavItemProps,\n  lazy: booleanProp,\n  lazyLoad: booleanProp,\n  name: {\n    type: String,\n    default: '',\n  },\n})\n\nexport type TabPanelProps = ExtractPropTypes<typeof tabPanelProps>\n","import type { InjectionKey } from 'vue'\nimport type { TabNavSlots } from '@/components/tab-nav'\n\nexport interface ItemState {\n  label: string | number,\n  name: string,\n  icon: Record<string, any>,\n  disabled: boolean,\n  closable?: boolean,\n  labelRenderer: null | ((data: { label: string | number }) => any),\n}\n\nexport interface TabsState {\n  currentActive: string | number,\n  lazy: boolean,\n  lazyLoad: boolean,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  handleActive: (label: string | number) => void,\n  refreshLabels: () => void,\n}\n\nexport interface TabsSlots extends TabNavSlots {}\n\nexport const TABS_STATE = '__VXP_TABS_STATE' as unknown as InjectionKey<TabsState>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { tabPanelProps } from './props'\nimport { TABS_STATE } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'TabPanel' })\n\nconst _props = defineProps(tabPanelProps)\nconst props = useProps('tabPanel', _props, {\n  lazy: null,\n  lazyLoad: null,\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  label?: (params: { label: string | number }) => any,\n}>()\n\nconst tabsState = inject(TABS_STATE, null)\n\nconst nh = useNameHelper('tabs')\nconst active = ref(false)\nconst currentLabel = ref(props.label)\nconst loaded = ref(false)\n\nconst lazy = computed(() => props.lazy ?? tabsState?.lazy ?? false)\nconst lazyLoad = computed(() => props.lazyLoad ?? tabsState?.lazyLoad ?? false)\nconst className = computed(() => {\n  const baseClass = nh.be('panel')\n\n  return {\n    [baseClass]: true,\n    [`${baseClass}--disabled`]: props.disabled,\n    [`${baseClass}--lazy`]: lazy.value,\n    [`${baseClass}--active`]: !props.disabled && active.value,\n  }\n})\n\nwatch(\n  () => props.label,\n  value => {\n    currentLabel.value = value\n    tabsState?.refreshLabels()\n  },\n)\nwatch(active, value => {\n  emitEvent(props.onToggle!, value)\n})\n\nif (tabsState) {\n  const state = reactive({\n    label: currentLabel,\n    name: toRef(props, 'name'),\n    icon: toRef(props, 'icon'),\n    disabled: toRef(props, 'disabled'),\n    closable: toRef(props, 'closable'),\n    labelRenderer: null,\n  }) as ItemState\n\n  watch(\n    () => slots.label,\n    value => {\n      state.labelRenderer = value ? data => value(data) : null\n    },\n    { immediate: true },\n  )\n  watch(currentLabel, () => {\n    active.value = currentLabel.value === tabsState.currentActive\n  })\n  watch(\n    () => tabsState.currentActive,\n    value => {\n      active.value = currentLabel.value === value\n\n      if (!loaded.value && active.value) {\n        loaded.value = true\n      }\n    },\n    { immediate: true },\n  )\n\n  tabsState.increaseItem(state)\n\n  onBeforeUnmount(() => {\n    tabsState.decreaseItem(state)\n  })\n}\n</script>\n\n<template>\n  <div\n    v-if=\"!(lazy || (lazyLoad && !loaded)) || active\"\n    :class=\"className\"\n    role=\"tabpanel\"\n    :aria-hidden=\"!active\"\n  >\n    <slot></slot>\n  </div>\n</template>\n","import {\n  booleanProp,\n  buildProps,\n  classProp,\n  eventProp,\n  localeProp,\n  sizeProp,\n  styleProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ClassType, ConfigurableProps, StyleType } from '@vexip-ui/config'\nimport type { TooltipTheme } from '@/components/tooltip'\nimport type {\n  Accessor,\n  ColumnCellSpanFn,\n  ColumnRenderFn,\n  ColumnSummaryRenderFn,\n  Data,\n  DropType,\n  ExpandRenderFn,\n  FilterRenderFn,\n  HeadRenderFn,\n  SummaryCellSpanFn,\n  SummaryRenderFn,\n  TableCellPayload,\n  TableCellPropFn,\n  TableCellSpanFn,\n  TableColResizeType,\n  TableColumnRawOptions,\n  TableColumnType,\n  TableFilterOptions,\n  TableFilterProfile,\n  TableFootPayload,\n  TableFootPropFn,\n  TableHeadPayload,\n  TableHeadPropFn,\n  TableIcons,\n  TableKeyConfig,\n  TableRowPayload,\n  TableRowPropFn,\n  TableSlots,\n  TableSorterOptions,\n  TableSorterProfile,\n  TableSummaryOptions,\n  TableTextAlign,\n} from './symbol'\n\nexport const tableProps = buildProps({\n  locale: localeProp('table'),\n  columns: Array as PropType<TableColumnRawOptions[]>,\n  summaries: Array as PropType<TableSummaryOptions<any, any>[]>,\n  data: Array as PropType<Data[]>,\n  width: [Number, String],\n  height: Number,\n  minHeight: Number,\n  rowClass: [String, Object, Array, Function] as PropType<ClassType | TableRowPropFn<ClassType>>,\n  rowStyle: [String, Object, Array, Function] as PropType<StyleType | TableRowPropFn<StyleType>>,\n  rowAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableRowPropFn<Record<string, any>>\n  >,\n  stripe: booleanProp,\n  border: booleanProp,\n  highlight: booleanProp,\n  useXBar: booleanProp,\n  useYBar: booleanProp,\n  barFade: Number,\n  rowDraggable: booleanProp,\n  rowHeight: Number,\n  rowMinHeight: Number,\n  virtual: booleanProp,\n  bufferCount: Number,\n  scrollClass: Object as PropType<{\n    horizontal?: ClassType,\n    major?: ClassType,\n    left?: ClassType,\n    right?: ClassType,\n  }>,\n  expandRenderer: Function as PropType<ExpandRenderFn>,\n  currentPage: Number,\n  pageSize: Number,\n  transparent: booleanProp,\n  tooltipTheme: String as PropType<TooltipTheme>,\n  tooltipWidth: [Number, String],\n  singleSorter: booleanProp,\n  singleFilter: booleanProp,\n  cellClass: [String, Object, Array, Function] as PropType<\n    ClassType | TableCellPropFn<any, ClassType>\n  >,\n  cellStyle: [String, Object, Array, Function] as PropType<\n    StyleType | TableCellPropFn<any, StyleType>\n  >,\n  cellAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableCellPropFn<any, Record<string, any>>\n  >,\n  headClass: [String, Object, Array, Function] as PropType<ClassType | TableHeadPropFn<ClassType>>,\n  headStyle: [String, Object, Array, Function] as PropType<StyleType | TableHeadPropFn<StyleType>>,\n  headAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableHeadPropFn<Record<string, any>>\n  >,\n  footClass: [String, Object, Array, Function] as PropType<ClassType | TableFootPropFn<ClassType>>,\n  footStyle: [String, Object, Array, Function] as PropType<StyleType | TableFootPropFn<StyleType>>,\n  footAttrs: [Object, Function] as PropType<\n    Record<string, any> | TableFootPropFn<Record<string, any>>\n  >,\n  customSorter: booleanProp,\n  customFilter: booleanProp,\n  keyConfig: Object as PropType<TableKeyConfig>,\n  disabledTree: booleanProp,\n  rowIndent: [String, Number],\n  noCascaded: booleanProp,\n  colResizable: {\n    type: [Boolean, String] as PropType<boolean | TableColResizeType>,\n    default: null,\n  },\n  cellSpan: Function as PropType<TableCellSpanFn>,\n  sidePadding: [Number, Array] as PropType<number | number[]>,\n  icons: Object as PropType<TableIcons>,\n  borderWidth: Number,\n  dataFilter: Function as PropType<(data: Data) => boolean>,\n  noTransition: booleanProp,\n  ellipsis: booleanProp,\n  slots: Object as PropType<TableSlots>,\n  onScroll:\n    eventProp<\n      (payload: { type: 'horizontal' | 'vertical', client: number, percent: number }) => void\n    >(),\n  onRowEnter: eventProp<(payload: TableRowPayload) => void>(),\n  onRowLeave: eventProp<(payload: TableRowPayload) => void>(),\n  onRowClick: eventProp<(payload: TableRowPayload) => void>(),\n  onRowDblclick: eventProp<(payload: TableRowPayload) => void>(),\n  onRowContextmenu: eventProp<(payload: TableRowPayload) => void>(),\n  onRowCheck: eventProp<(payload: TableRowPayload) => void>(),\n  onRowCheckAll: eventProp<(checked: boolean, partial: boolean) => void>(),\n  onRowExpand: eventProp<(payload: TableRowPayload) => void>(),\n  onRowTreeExpand: eventProp<(payload: TableRowPayload) => void>(),\n  onRowDragStart: eventProp<(row: Data, event: DragEvent) => void>(),\n  onRowDragOver: eventProp<(row: Data, event: DragEvent) => void>(),\n  onRowDrop: eventProp<(row: Data, type: DropType, event: DragEvent) => void>(),\n  onRowDragEnd: eventProp<(row: Data, allRows: Data[], event: DragEvent) => void>(),\n  onRowFilter: eventProp<(profiles: TableFilterProfile[], filteredRow: Data[]) => void>(),\n  onRowSort: eventProp<(profiles: TableSorterProfile[], sortedRow: Data[]) => void>(),\n  onCellEnter: eventProp<(payload: TableCellPayload) => void>(),\n  onCellLeave: eventProp<(payload: TableCellPayload) => void>(),\n  onCellClick: eventProp<(payload: TableCellPayload) => void>(),\n  onCellDblclick: eventProp<(payload: TableCellPayload) => void>(),\n  onCellContextmenu: eventProp<(payload: TableCellPayload) => void>(),\n  onHeadEnter: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadLeave: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadClick: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadDblclick: eventProp<(payload: TableHeadPayload) => void>(),\n  onHeadContextmenu: eventProp<(payload: TableHeadPayload) => void>(),\n  onColResizeStart: eventProp<(payload: TableHeadPayload) => void>(),\n  onColResizeMove: eventProp<(payload: TableHeadPayload) => void>(),\n  onColResizeEnd: eventProp<(payload: TableHeadPayload) => void>(),\n  onFootEnter: eventProp<(payload: TableFootPayload) => void>(),\n  onFootLeave: eventProp<(payload: TableFootPayload) => void>(),\n  onFootClick: eventProp<(payload: TableFootPayload) => void>(),\n  onFootDblclick: eventProp<(payload: TableFootPayload) => void>(),\n  onFootContextmenu: eventProp<(payload: TableFootPayload) => void>(),\n})\n\nexport type TableProps = ExtractPropTypes<typeof tableProps>\nexport type TableCProps = ConfigurableProps<\n  TableProps,\n  'columns' | 'data' | 'currentPage' | 'summaries'\n>\n\nexport const tableColumnProps = buildProps({\n  idKey: [Number, String],\n  name: String,\n  accessor: Function as PropType<Accessor>,\n  fixed: {\n    type: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n    default: null,\n  },\n  class: classProp,\n  style: styleProp,\n  attrs: Object,\n  type: String as PropType<TableColumnType>,\n  width: [Number, String] as PropType<number | `${number}%`>,\n  minWidth: Number,\n  maxWidth: Number,\n  filter: Object as PropType<TableFilterOptions<any, any>>,\n  sorter: {\n    type: [Boolean, Object] as PropType<boolean | TableSorterOptions<any>>,\n    default: null,\n  },\n  renderer: Function as PropType<ColumnRenderFn>,\n  headRenderer: Function as PropType<HeadRenderFn>,\n  filterRenderer: Function as PropType<FilterRenderFn>,\n  order: Number,\n  ellipsis: booleanProp,\n  checkboxSize: sizeProp,\n  selectionSize: sizeProp,\n  disableRow: Function as PropType<(data: Data) => boolean>,\n  truthIndex: booleanProp,\n  orderLabel: Function as PropType<(index: number) => string | number>,\n  meta: Object as PropType<any>,\n  textAlign: String as PropType<TableTextAlign>,\n  headSpan: Number,\n  cellSpan: Function as PropType<ColumnCellSpanFn>,\n  noSummary: booleanProp,\n  summaryRenderer: Function as PropType<ColumnSummaryRenderFn>,\n  indented: booleanProp,\n  formatter: Function as PropType<(value: any) => unknown>,\n  singleSelect: booleanProp,\n})\n\nexport type TableColumnProps = ExtractPropTypes<typeof tableColumnProps>\nexport type TableColumnCProps = ConfigurableProps<\n  TableColumnProps,\n  | 'idKey'\n  | 'name'\n  | 'accessor'\n  | 'fixed'\n  | 'type'\n  | 'renderer'\n  | 'headRenderer'\n  | 'order'\n  | 'headSpan'\n  | 'summaryRenderer'\n>\n\nexport const tableColumnGroupProps = buildProps({\n  name: String,\n  fixed: {\n    type: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n    default: null,\n  },\n  order: Number,\n  ellipsis: booleanProp,\n  textAlign: String as PropType<TableTextAlign>,\n  renderer: Function as PropType<() => any>,\n  children: Array as PropType<TableColumnRawOptions[]>,\n})\n\nexport type TableColumnGroupProps = ExtractPropTypes<typeof tableColumnGroupProps>\nexport type TableColumnGroupCProps = ConfigurableProps<TableColumnProps, 'name' | 'fixed' | 'order'>\n\nexport const tableSummaryProps = buildProps({\n  idKey: [Number, String],\n  name: String,\n  class: classProp,\n  style: styleProp,\n  attrs: Object,\n  cellSpan: Function as PropType<SummaryCellSpanFn>,\n  order: Number,\n  above: booleanProp,\n  meta: Object as PropType<any>,\n  renderer: Function as PropType<SummaryRenderFn>,\n})\n\nexport type TableSummaryProps = ExtractPropTypes<typeof tableSummaryProps>\nexport type TableSummaryCProps = ConfigurableProps<\n  TableSummaryProps,\n  'idKey' | 'name' | 'renderer' | 'colSpan' | 'order' | 'above'\n>\n","import type { InjectionKey, Slots } from 'vue'\nimport type { ClassType, ComponentSize, LocaleConfig, StyleType } from '@vexip-ui/config'\nimport type { BITree } from '@vexip-ui/utils'\nimport type { TooltipTheme } from '@/components/tooltip'\nimport type { TableStore } from './store'\n\nexport type Key = string | number | symbol\nexport type Data = any\n\nexport type MouseEventType = 'Enter' | 'Leave' | 'Click' | 'Dblclick' | 'Contextmenu'\nexport type MoveEventType = 'Start' | 'Move' | 'End'\n\nexport type TableIconName = 'filter' | 'asc' | 'desc' | 'dragger' | 'expand' | 'plus' | 'minus'\nexport type TableRowPropFn<P = any> = (data: Data, index: number) => P\nexport type TableRowDropType = 'before' | 'after' | 'inner'\nexport type TableTextAlign = 'left' | 'center' | 'right'\nexport type TableColumnType = 'order' | 'selection' | 'expand' | 'drag'\nexport type TableColResizeType = 'lazy' | 'responsive'\n\nexport type TableIcons = Partial<Record<TableIconName, Record<string, any> | (() => any)>>\n\nexport const enum DropType {\n  BEFORE = 'before',\n  INNER = 'inner',\n  AFTER = 'after',\n}\n\nexport interface CellSpanResult {\n  colSpan?: number,\n  rowSpan?: number,\n}\n\nexport interface TableKeyConfig {\n  id?: string,\n  children?: string,\n  checked?: string,\n  height?: string,\n  expanded?: string,\n  treeExpanded?: string,\n}\n\nexport interface TableSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  empty?: () => any,\n}\n\nexport type Accessor<D = Data, Val extends string | number = string | number> = (\n  data: D,\n  index: number,\n) => Val\nexport type ExpandRenderFn<D = Data> = (data: {\n  /** @deprecated */\n  leftFixed: number,\n  /** @deprecated */\n  rightFixed: number,\n  row: D,\n  rowIndex: number,\n}) => any\nexport type ColumnCellSpanFn<D = Data> = (data: {\n  row: D,\n  index: number,\n  fixed?: 'left' | 'right',\n}) => CellSpanResult | void\nexport type SummaryCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  fixed?: 'left' | 'right',\n}) => CellSpanResult | void\n\nexport type TableFilterOptions<D = Data, Val extends string | number = string | number> =\n  | {\n    able?: boolean,\n    custom?: false,\n    options?: (string | { value: Val, label?: string, active?: boolean })[],\n    multiple?: false,\n    active?: null | Val,\n    method?: null | ((active: Val, data: D) => boolean),\n    meta?: any,\n  }\n  | {\n    able?: boolean,\n    custom?: false,\n    options?: (string | { value: Val, label?: string, active?: boolean })[],\n    multiple: true,\n    active?: null | Val[],\n    method?: null | ((active: Val[], data: D) => boolean),\n    meta?: any,\n  }\n  | {\n    able?: boolean,\n    custom: true,\n    options?: never,\n    multiple?: false,\n    active?: null | Val | Val[],\n    method?: null | ((active: any, data: D) => boolean),\n    meta?: any,\n  }\n\nexport interface ParsedFilterOptions extends Omit<Required<TableFilterOptions>, 'options'> {\n  options: { value: string | number, label: string, active: boolean }[],\n}\n\nexport interface TableSorterOptions<D = Data> {\n  able?: boolean,\n  type?: null | 'asc' | 'desc',\n  order?: number, // 优先级\n  method?: null | ((prev: D, next: D) => number),\n}\n\nexport type ParsedTableSorterOptions = Required<TableSorterOptions>\n\nexport interface TableSummaryData {\n  sum: number,\n  min: number,\n  max: number,\n}\n\nexport type SummaryRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  rows: D[],\n  meta: TableSummaryData,\n}) => any\n\nexport type ColumnSummaryRenderFn<\n  D = Data,\n  Val extends string | number = string | number,\n> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  rows: D[],\n  meta: TableSummaryData,\n  summary: TableSummaryOptions<D, Val>,\n}) => any\n\nexport interface TableBaseColumn<D = Data, Val extends string | number = string | number> {\n  key: keyof D,\n  name?: string,\n  type?: never,\n  meta?: any,\n  fixed?: boolean | 'left' | 'right',\n  class?: ClassType,\n  style?: StyleType,\n  attrs?: Record<string, any>,\n  width?: number | `${number}%`,\n  minWidth?: number,\n  maxWidth?: number,\n  filter?: TableFilterOptions<D, Val>,\n  sorter?: boolean | TableSorterOptions<D>,\n  order?: number,\n  ellipsis?: boolean | null,\n  textAlign?: TableTextAlign,\n  headSpan?: number,\n  noSummary?: boolean,\n  indented?: boolean,\n  accessor?: Accessor<D, Val>,\n  formatter?: (value: Val) => unknown,\n  cellSpan?: ColumnCellSpanFn<D>,\n  renderer?: ColumnRenderFn<D, Val>,\n  headRenderer?: HeadRenderFn,\n  filterRenderer?: FilterRenderFn,\n  summaryRenderer?: ColumnSummaryRenderFn<D, Val>,\n}\n\nexport interface TableOrderColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\n  key?: keyof D,\n  type: 'order',\n  truthIndex?: boolean,\n  orderLabel?: (index: number) => string | number,\n}\n\nexport interface TableSelectionColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer' | 'headRenderer'> {\n  key?: keyof D,\n  type: 'selection',\n  /**\n   * @deprecated Use `selectionSize` instead.\n   */\n  checkboxSize?: ComponentSize,\n  selectionSize?: ComponentSize,\n  singleSelect?: boolean,\n  disableRow?: (data: Data) => boolean,\n}\n\nexport interface TableExpandColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\n  key?: keyof D,\n  type: 'expand',\n  disableRow?: (data: Data) => boolean,\n  renderer?: ExpandRenderFn<D>,\n}\n\nexport interface TableDragColumn<D = Data, Val extends string | number = string | number>\n  extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\n  key?: keyof D,\n  type: 'drag',\n  disableRow?: (data: Data) => boolean,\n}\n\nexport type TableTypeColumn<D = Data, Val extends string | number = string | number> =\n  | TableOrderColumn<D, Val>\n  | TableSelectionColumn<D, Val>\n  | TableExpandColumn<D, Val>\n  | TableDragColumn<D, Val>\nexport type TableColumnOptions<D = Data, Val extends string | number = string | number> =\n  | TableBaseColumn<D, Val>\n  | TableTypeColumn<D, Val>\n\nexport type ColumnWithKey<\n  D = Data,\n  Val extends string | number = string | number,\n> = TableColumnOptions<D, Val> & {\n  key: Key,\n  rowSpan: number,\n  /** @internal */\n  index: number,\n  /** @internal */\n  colIndex: number,\n  /** @internal */\n  first?: boolean,\n  /** @internal */\n  last?: boolean,\n}\n\nexport interface TableColumnGroupOptions {\n  name?: string,\n  fixed?: boolean | 'left' | 'right',\n  order?: number,\n  ellipsis?: boolean,\n  textAlign?: TableTextAlign,\n  renderer?: () => any,\n  children: TableColumnOptions<any, any>[],\n}\nexport interface ColumnGroupWithKey extends TableColumnGroupOptions {\n  key: Key,\n  headSpan: number,\n  rowSpan: number,\n  /** @internal */\n  colIndex: number,\n  /** @internal */\n  last?: boolean,\n}\n\nexport type ColumnRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  row: D,\n  rowIndex: number,\n  column: TableBaseColumn<D, Val>,\n  columnIndex: number,\n}) => any\nexport type HeadRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n}) => any\nexport type FilterRenderFn<D = Data, Val extends string | number = string | number> = (data: {\n  column: TableColumnOptions<D, Val>,\n  index: number,\n  filter: Required<TableFilterOptions<D, Val>>,\n  handleFilter: (active: any) => void,\n}) => any\n\nexport type TableCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\n  row: D,\n  rowIndex: number,\n  column: TableColumnOptions<D, Val>,\n  columnIndex: number,\n  fixed?: 'left' | 'right',\n}) => CellSpanResult | undefined\n\nexport type TableCellPropFn<D = Data, P = any> = (data: {\n  row: D,\n  rowIndex: number,\n  column: ColumnWithKey,\n  columnIndex: number,\n}) => P\nexport type TableHeadPropFn<P = any> = (data: {\n  column: ColumnWithKey,\n  index: number,\n  rowIndex: number,\n}) => P\nexport type TableFootPropFn<P = any> = (data: {\n  column: ColumnWithKey,\n  columnIndex: number,\n  summary: SummaryWithKey,\n  summaryIndex: number,\n}) => P\n\nexport type ColumnProfile<D = Data, Val extends string | number = string | number> = Pick<\n  ColumnWithKey<D, Val>,\n  'name' | 'key' | 'meta'\n>\nexport type TableFilterProfile<\n  D = Data,\n  Val extends string | number = string | number,\n> = ColumnProfile<D, Val> & {\n  active: Val | Val[],\n}\nexport type TableSorterProfile<\n  D = Data,\n  Val extends string | number = string | number,\n> = ColumnProfile<D, Val> & {\n  type: 'asc' | 'desc',\n  order: number,\n}\n\nexport interface TableSummaryOptions<D = Data, Val extends string | number = string | number> {\n  name: string,\n  key: keyof D,\n  class?: ClassType,\n  style?: StyleType,\n  attrs?: Record<string, any>,\n  order?: number,\n  above?: boolean,\n  meta?: Record<any, any>,\n  cellSpan?: SummaryCellSpanFn<D, Val>,\n  renderer?: SummaryRenderFn<D, Val>,\n}\n\nexport type SummaryWithKey<\n  D = Data,\n  Val extends string | number = string | number,\n> = TableSummaryOptions<D, Val> & { key: Key }\n\n/** @internal */\nexport interface TableRowState {\n  key: Key,\n  index: number,\n  hidden: boolean,\n  hover: boolean,\n  checked: boolean,\n  height: number,\n  // borderHeight: number,\n  expanded: boolean,\n  expandHeight: number,\n  parent?: Key,\n  children: TableRowState[],\n  depth: number,\n  treeExpanded: boolean,\n  partial: boolean,\n  dragging: boolean,\n  listIndex: number,\n  cellHeights: Record<Key, number>,\n  last: boolean,\n  expandAnimate: boolean,\n  data: Data,\n}\n\nexport interface StoreOptions {\n  columns: TableColumnRawOptions[],\n  summaries: TableSummaryOptions[],\n  data: Data[],\n  dataKey: string,\n  rowClass: ClassType | TableRowPropFn<ClassType>,\n  rowStyle: StyleType | TableRowPropFn<StyleType>,\n  rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>,\n  cellClass: ClassType | TableCellPropFn<ClassType>,\n  cellStyle: StyleType | TableCellPropFn<StyleType>,\n  cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>,\n  headClass: ClassType | TableHeadPropFn<ClassType>,\n  headStyle: StyleType | TableHeadPropFn<StyleType>,\n  headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>,\n  footClass: ClassType | TableFootPropFn<ClassType>,\n  footStyle: StyleType | TableFootPropFn<StyleType>,\n  footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>,\n  border: boolean,\n  stripe: boolean,\n  highlight: boolean,\n  currentPage: number,\n  pageSize: number,\n  rowHeight: number,\n  rowMinHeight: number,\n  virtual: boolean,\n  rowDraggable: boolean,\n  locale: LocaleConfig['table'],\n  tooltipTheme: TooltipTheme,\n  tooltipWidth: number | string,\n  singleSorter: boolean,\n  singleFilter: boolean,\n  customSorter: boolean,\n  customFilter: boolean,\n  keyConfig: Required<TableKeyConfig>,\n  disabledTree: boolean,\n  noCascaded: boolean,\n  colResizable: false | TableColResizeType,\n  expandRenderer: ExpandRenderFn | null,\n  cellSpan: TableCellSpanFn | null,\n  sidePadding: number[],\n  borderWidth: number,\n  dataFilter: (data: Data) => boolean,\n  ellipsis: boolean,\n}\n\nexport type TableColumnRawOptions = TableColumnOptions<any, any> | TableColumnGroupOptions\nexport type ColumnRawWithKey = ColumnGroupWithKey | ColumnWithKey\n\nexport interface StoreState extends StoreOptions {\n  columns: ColumnWithKey[],\n  normalColumns: ColumnWithKey[],\n  allColumns: ColumnRawWithKey[][],\n  summaries: SummaryWithKey[],\n  rowData: TableRowState[],\n  treeRowData: TableRowState[],\n  width: number,\n  rightFixedColumns: ColumnWithKey[],\n  leftFixedColumns: ColumnWithKey[],\n  aboveSummaries: SummaryWithKey[],\n  belowSummaries: SummaryWithKey[],\n  columnMap: Map<Key, ColumnRawWithKey>,\n  rowMap: Map<Key, TableRowState>,\n  summaryMap: Map<Key, SummaryWithKey>,\n  idMaps: WeakMap<Data, Key>,\n  checkedAll: boolean,\n  partial: boolean,\n  widths: Map<Key, number>,\n  sorters: Map<Key, ParsedTableSorterOptions>,\n  filters: Map<Key, ParsedFilterOptions>,\n  resized: Set<Key>,\n  bodyYScroll: number,\n  bodyXScroll: number,\n  padTop: number,\n  startRow: number,\n  endRow: number,\n  dragging: boolean,\n  heightBITree: BITree,\n  virtualData: TableRowState[],\n  totalHeight: number,\n  colResizing: boolean,\n  resizeLeft: number,\n  cellSpanMap: Map<'left' | 'default' | 'right', Map<string, Required<CellSpanResult>>>,\n  collapseMap: Map<'left' | 'default' | 'right', Map<string, Set<string>>>,\n  locked: boolean,\n  barScrolling: boolean,\n  heightTrigger: number,\n  hoveredRowKey: Key | null,\n}\n\nexport interface TableRowInstance {\n  el?: HTMLElement | null,\n  row: TableRowState,\n}\n\nexport interface TableRowPayload {\n  row: Data,\n  key: Key,\n  index: number,\n  event: Event,\n  checked?: boolean,\n  expanded?: boolean,\n}\n\nexport interface TableCellPayload {\n  row: Data,\n  key: Key,\n  rowIndex: number,\n  column: TableColumnOptions,\n  columnIndex: number,\n  event: Event,\n}\n\nexport interface TableHeadPayload {\n  column: TableColumnOptions,\n  index: number,\n  event: Event,\n}\n\nexport interface TableColResizePayload extends TableHeadPayload {\n  width: number,\n}\n\nexport interface TableFootPayload {\n  column: TableColumnOptions,\n  columnIndex: number,\n  summary: TableSummaryOptions,\n  summaryIndex: number,\n  event: Event,\n}\n\nexport interface TableActions {\n  increaseColumn(column: TableColumnRawOptions): void,\n  decreaseColumn(column: TableColumnRawOptions): void,\n  increaseSummary(column: TableSummaryOptions): void,\n  decreaseSummary(column: TableSummaryOptions): void,\n  getTableElement(): HTMLElement | undefined,\n  refreshXScroll(): void,\n  emitRowCheck(payload: TableRowPayload & { checked: boolean }): void,\n  emitAllRowCheck(checked: boolean, partial: boolean): void,\n  emitRowExpand(payload: TableRowPayload & { expanded: boolean }): void,\n  emitRowTreeExpand(payload: TableRowPayload & { expanded: boolean }): void,\n  emitRowFilter(): void,\n  emitRowSort(): void,\n  handleRowDragStart(rowInstance: TableRowInstance, event: DragEvent): void,\n  handleRowDragOver(rowInstance: TableRowInstance, event: DragEvent): void,\n  handleRowDrop(rowInstance: TableRowInstance, event: DragEvent): void,\n  handleRowDragEnd(event: DragEvent): void,\n  emitRowEvent(type: MouseEventType, payload: TableRowPayload): void,\n  emitCellEvent(type: MouseEventType, payload: TableCellPayload): void,\n  emitHeadEvent(type: MouseEventType, payload: TableHeadPayload): void,\n  emitFootEvent(type: MouseEventType, payload: TableFootPayload): void,\n  emitColResize(type: MoveEventType, payload: TableColResizePayload): void,\n  hasIcon(name: TableIconName): boolean,\n  getIcon(name: TableIconName): TableIcons[TableIconName],\n  renderTableSlot(payload: { name: string }): any,\n  runInLocked(handler?: (...args: any[]) => any, delay?: number): Promise<void>,\n  updateColumns(): void,\n  setColumnProp(key: Key, prop: string, value: any): void,\n  updateSummaries(): void,\n  setSummaryProp(key: Key, prop: string, value: any): void,\n}\n\nexport interface ColumnGroupActions {\n  increaseColumn(column: TableColumnRawOptions): void,\n  decreaseColumn(column: TableColumnRawOptions): void,\n}\n\nexport const DEFAULT_KEY_FIELD = 'id'\n/**\n * 表格状态管理\n */\nexport const TABLE_STORE = '__VXP_TABLE_STORE' as unknown as InjectionKey<TableStore>\n/**\n * 表格组件的顶层 Api\n */\nexport const TABLE_ACTIONS = '__VXP_TABLE_ACTIONS' as unknown as InjectionKey<TableActions>\nexport const TABLE_SLOTS = '__VXP_TABLE_SLOTS' as unknown as InjectionKey<Slots>\nexport const TABLE_HEAD_PREFIX = '__vxp-table-head-'\nexport const TABLE_FOOT_PREFIX = '__vxp-table-foot-'\n\nexport const COLUMN_GROUP_ACTIONS =\n  '__VXP_TABLE_COLUMN_GROUP_ACTIONS' as unknown as InjectionKey<ColumnGroupActions>\n\nexport const columnTypes: TableColumnType[] = ['order', 'selection', 'expand', 'drag']\n\nexport const noopFormatter = (v: any) => v\n","import {\n  computed,\n  defineComponent,\n  inject,\n  onBeforeUnmount,\n  reactive,\n  renderSlot,\n  watch,\n} from 'vue'\n\nimport { createSizeProp, useProps } from '@vexip-ui/config'\nimport { isNull, warnOnce } from '@vexip-ui/utils'\nimport { tableColumnProps } from './props'\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS, columnTypes, noopFormatter } from './symbol'\n\nimport type { ColumnWithKey, Data, TableRowState, TableTextAlign } from './symbol'\n\ntype ColumnPropKey = keyof typeof tableColumnProps\n\nconst propKeys = Object.keys(tableColumnProps) as ColumnPropKey[]\nconst aliases: Partial<Record<ColumnPropKey, string>> = {\n  idKey: 'key',\n}\nconst ignoredProps: ColumnPropKey[] = [\n  'renderer',\n  'headRenderer',\n  'filterRenderer',\n  'summaryRenderer',\n]\nconst triggerProps: ColumnPropKey[] = [\n  'idKey',\n  'fixed',\n  'type',\n  'width',\n  'minWidth',\n  'maxWidth',\n  'sorter',\n  'order',\n  'orderLabel',\n  'disableRow',\n  'headSpan',\n  'cellSpan',\n]\nconst aligns: TableTextAlign[] = ['left', 'center', 'right']\n\nconst funcProp = {\n  default: null,\n  isFunc: true,\n  static: true,\n}\n\nexport default defineComponent({\n  name: 'TableColumn',\n  inheritAttrs: false,\n  props: tableColumnProps,\n  setup(_props, { slots }) {\n    const props = useProps('tableColumn', _props, {\n      idKey: {\n        default: null,\n        validator: value => !isNull(value),\n        static: true,\n      },\n      name: {\n        default: '',\n        static: true,\n      },\n      accessor: {\n        default: null,\n        isFunc: true,\n        static: true,\n      },\n      fixed: {\n        default: false,\n        static: true,\n      },\n      class: null,\n      style: null,\n      attrs: null,\n      type: {\n        default: null,\n        validator: value => columnTypes.includes(value),\n        static: true,\n      },\n      width: null,\n      minWidth: 10,\n      maxWidth: null,\n      filter: null,\n      sorter: false,\n      renderer: funcProp,\n      headRenderer: funcProp,\n      filterRenderer: funcProp,\n      order: {\n        default: 0,\n        static: true,\n      },\n      ellipsis: null,\n      checkboxSize: {\n        ...createSizeProp(),\n        default: null,\n      },\n      selectionSize: {\n        ...createSizeProp(),\n        default: null,\n      },\n      disableRow: {\n        default: null,\n        isFunc: true,\n      },\n      truthIndex: false,\n      orderLabel: {\n        default: null,\n        isFunc: true,\n      },\n      meta: null,\n      textAlign: {\n        default: 'left',\n        validator: value => aligns.includes(value),\n      },\n      headSpan: {\n        default: 1,\n        static: true,\n      },\n      cellSpan: funcProp,\n      noSummary: false,\n      summaryRenderer: funcProp,\n      indented: false,\n      formatter: {\n        default: null,\n        isFunc: true,\n      },\n      singleSelect: false,\n    })\n\n    const selectionSize = computed(() => {\n      if (props.checkboxSize) {\n        warnOnce(\"'checkboxSize' has been deprecated, please use 'selectionSize' instead.\")\n      }\n\n      return props.selectionSize ?? props.checkboxSize ?? 'default'\n    })\n\n    const tableAction = inject(TABLE_ACTIONS, null)\n    const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\n    const options = reactive({}) as ColumnWithKey\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n\n      if (key === 'selectionSize' || key === 'checkboxSize') {\n        ;(options as any).selectionSize = selectionSize.value\n\n        watch(selectionSize, value => {\n          ;(options as any).selectionSize = value\n          tableAction?.setColumnProp(options.key, 'selectionSize', value)\n        })\n\n        continue\n      }\n\n      const aliasKey = (aliases[key] || key) as keyof ColumnWithKey\n\n      ;(options[aliasKey] as any) = props[key]\n\n      if (key === 'idKey') {\n        const update = (value: string | number) => {\n          if (isNull(value) && props.type) {\n            ;(options[aliasKey] as any) = value = `__vxp_${props.type}`\n          } else {\n            ;(options[aliasKey] as any) = value\n          }\n        }\n\n        update(props.idKey)\n        watch(\n          () => props.idKey,\n          value => {\n            update(value)\n            tableAction?.updateColumns()\n          },\n        )\n      } else if (key === 'filter') {\n        const filterWithoutMeta = computed(() => {\n          if (props.filter) {\n            const { meta, ...filter } = props.filter\n            return filter\n          }\n\n          return props.filter\n        })\n\n        watch(\n          filterWithoutMeta,\n          () => {\n            options.filter = props.filter\n            tableAction?.updateColumns()\n          },\n          { deep: true },\n        )\n      } else {\n        const trigger = triggerProps.includes(key)\n\n        watch(\n          () => props[key],\n          value => {\n            ;(options[aliasKey] as any) = value\n            trigger\n              ? tableAction?.updateColumns()\n              : tableAction?.setColumnProp(options.key, key, value)\n          },\n        )\n      }\n    }\n\n    watch(() => props.renderer, setRenderer)\n    watch(() => props.headRenderer, setHeadRenderer)\n    watch(() => props.filterRenderer, setFilterRenderer)\n    watch(() => props.summaryRenderer, setSummaryRenderer)\n\n    setRenderer()\n    setHeadRenderer()\n    setFilterRenderer()\n    setSummaryRenderer()\n\n    if (parentActions) {\n      parentActions.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        parentActions.decreaseColumn(options)\n      })\n    } else {\n      tableAction?.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        tableAction?.decreaseColumn(options)\n      })\n    }\n\n    // TODO: 在动态列时会触发无限 watch，初步估计是重置单元格合并状态导致的\n    // onBeforeUpdate(() => {\n    //   setRenderer()\n    //   setHeadRenderer()\n    //   setFilterRenderer()\n    // }\n\n    function setRenderer() {\n      if (options.type && options.type !== 'expand') {\n        ;(options as any).renderer = undefined\n        return\n      }\n\n      options.renderer = (data: any) => {\n        if (typeof slots.default === 'function') {\n          return renderSlot(slots, 'default', data)\n        }\n\n        if (typeof props.renderer === 'function') {\n          return props.renderer(data)\n        }\n\n        if (options.type === 'expand') {\n          return ''\n        }\n\n        const row = data.row\n        const rowIndex = data.rowIndex as number\n        const formatter =\n          typeof options.formatter === 'function' ? options.formatter : noopFormatter\n\n        const result = formatter(\n          typeof props.accessor === 'function'\n            ? props.accessor(row as Data, rowIndex)\n            : (row as TableRowState)[options.key as unknown as keyof TableRowState],\n        )\n\n        return isNull(result) ? '' : String(result)\n      }\n    }\n\n    function setHeadRenderer() {\n      if (options.type === 'selection') {\n        ;(options as any).renderer = undefined\n        return\n      }\n\n      options.headRenderer = data => {\n        if (typeof slots.head === 'function') {\n          return renderSlot(slots, 'head', data)\n        }\n\n        if (typeof props.headRenderer === 'function') {\n          return props.headRenderer(data)\n        }\n\n        return props.name\n      }\n    }\n\n    function setFilterRenderer() {\n      if (typeof slots.filter === 'function' || typeof props.filterRenderer === 'function') {\n        options.filterRenderer = data => {\n          if (typeof slots.filter === 'function') {\n            return renderSlot(slots, 'filter', data)\n          }\n\n          return props.filterRenderer(data)\n        }\n      } else {\n        options.filterRenderer = undefined\n      }\n    }\n\n    function setSummaryRenderer() {\n      if (typeof slots.summary === 'function' || typeof props.summaryRenderer === 'function') {\n        options.summaryRenderer = data => {\n          if (typeof slots.summary === 'function') {\n            return renderSlot(slots, 'summary', data)\n          }\n\n          if (typeof props.summaryRenderer === 'function') {\n            return props.summaryRenderer(data)\n          }\n\n          return ''\n        }\n      } else {\n        options.summaryRenderer = undefined\n      }\n    }\n\n    return () => null\n  },\n})\n","import {\n  computed,\n  defineComponent,\n  inject,\n  onBeforeUnmount,\n  provide,\n  reactive,\n  renderSlot,\n  watch,\n} from 'vue'\n\nimport TableColumn from './table-column'\nimport { useProps } from '@vexip-ui/config'\nimport { tableColumnGroupProps } from './props'\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS } from './symbol'\n\nimport type { ColumnGroupWithKey, TableColumnOptions } from './symbol'\n\ntype GroupPropKey = keyof typeof tableColumnGroupProps\n\nconst propKeys = Object.keys(tableColumnGroupProps) as GroupPropKey[]\nconst ignoredProps: GroupPropKey[] = ['renderer', 'children']\nconst triggerProps: GroupPropKey[] = ['fixed', 'order']\n\nconst TableColumnGroup = defineComponent({\n  name: 'TableColumnGroup',\n  inheritAttrs: false,\n  props: tableColumnGroupProps,\n  setup(_props, { slots }) {\n    const props = useProps('tableColumn', _props, {\n      name: {\n        default: '',\n        static: true,\n      },\n      fixed: {\n        default: false,\n        static: true,\n      },\n      order: {\n        default: 0,\n        static: true,\n      },\n      ellipsis: null,\n      textAlign: 'center',\n      renderer: {\n        default: null,\n        isFunc: true,\n        static: true,\n      },\n      children: {\n        default: () => [],\n        static: true,\n      },\n    })\n    const tableAction = inject(TABLE_ACTIONS, null)\n    const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\n\n    const columns = reactive(new Set<TableColumnOptions>())\n    const children = computed(() => [...columns])\n    const options = reactive({ children }) as ColumnGroupWithKey\n\n    options.key = Symbol('TableColumnGroup')\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n      ;(options[key as keyof ColumnGroupWithKey] as any) = props[key]\n\n      const trigger = triggerProps.includes(key)\n\n      watch(\n        () => props[key],\n        value => {\n          ;(options[key as keyof ColumnGroupWithKey] as any) = value\n          trigger\n            ? tableAction?.updateColumns()\n            : tableAction?.setColumnProp(options.key, key, value)\n        },\n      )\n    }\n\n    watch(() => props.renderer, setRenderer, { immediate: true })\n\n    provide(COLUMN_GROUP_ACTIONS, {\n      increaseColumn,\n      decreaseColumn,\n    })\n\n    if (parentActions) {\n      parentActions.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        parentActions.decreaseColumn(options)\n      })\n    } else {\n      tableAction?.increaseColumn(options)\n\n      onBeforeUnmount(() => {\n        tableAction?.decreaseColumn(options)\n      })\n    }\n\n    function increaseColumn(column: TableColumnOptions) {\n      columns.add(column)\n    }\n\n    function decreaseColumn(column: TableColumnOptions) {\n      columns.delete(column)\n    }\n\n    function setRenderer() {\n      options.renderer = () => {\n        if (typeof slots.head === 'function') {\n          return renderSlot(slots, 'head')\n        }\n\n        if (typeof props.renderer === 'function') {\n          return props.renderer()\n        }\n\n        return props.name\n      }\n    }\n\n    function renderChildren() {\n      return props.children.map(child => {\n        if ('children' in child) {\n          return <TableColumnGroup {...child}></TableColumnGroup>\n        }\n\n        const { key, ...others } = child\n\n        return <TableColumn {...others} id-key={key}></TableColumn>\n      })\n    }\n\n    return () => [renderSlot(slots, 'default'), ...renderChildren()]\n  },\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default TableColumnGroup\n","import { defineComponent, inject, onBeforeUnmount, reactive, renderSlot, watch } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport { isNull } from '@vexip-ui/utils'\nimport { tableSummaryProps } from './props'\nimport { TABLE_ACTIONS } from './symbol'\n\nimport type { SummaryWithKey } from './symbol'\n\ntype SummaryPropKey = keyof typeof tableSummaryProps\n\nconst propKeys = Object.keys(tableSummaryProps) as SummaryPropKey[]\nconst aliases: Partial<Record<SummaryPropKey, string>> = {\n  idKey: 'key',\n}\nconst ignoredProps: SummaryPropKey[] = ['renderer']\nconst triggerProps: SummaryPropKey[] = ['idKey', 'cellSpan', 'order', 'above']\n\nconst funcProp = {\n  default: null,\n  isFunc: true,\n  static: true,\n}\n\nexport default defineComponent({\n  name: 'TableSummary',\n  props: tableSummaryProps,\n  setup(_props, { slots }) {\n    const props = useProps('tableSummary', _props, {\n      idKey: {\n        default: null,\n        validator: value => !isNull(value),\n        static: true,\n      },\n      class: null,\n      style: null,\n      attrs: null,\n      cellSpan: funcProp,\n      order: {\n        default: 0,\n        static: true,\n      },\n      above: {\n        default: false,\n        static: true,\n      },\n      meta: null,\n      renderer: funcProp,\n    })\n\n    const tableAction = inject(TABLE_ACTIONS, null)\n    const options = reactive({}) as SummaryWithKey\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n\n      const aliasKey = (aliases[key] || key) as keyof SummaryWithKey\n      const trigger = triggerProps.includes(key)\n\n      ;(options[aliasKey] as any) = props[key]\n\n      watch(\n        () => props[key],\n        value => {\n          ;(options[aliasKey] as any) = value\n          trigger\n            ? tableAction?.updateSummaries()\n            : tableAction?.setSummaryProp(options.key, key, value)\n        },\n      )\n    }\n\n    watch(() => props.renderer, setRenderer)\n\n    setRenderer()\n    tableAction?.increaseSummary(options)\n\n    onBeforeUnmount(() => {\n      tableAction?.decreaseSummary(options)\n    })\n\n    function setRenderer() {\n      options.renderer = data => {\n        if (typeof data.column.summaryRenderer === 'function') {\n          return data.column.summaryRenderer({\n            ...data,\n            summary: options,\n          })\n        }\n\n        if (typeof slots.default === 'function') {\n          return renderSlot(slots, 'default', data)\n        }\n\n        if (typeof props.renderer === 'function') {\n          return props.renderer(data)\n        }\n\n        return ''\n      }\n    }\n\n    return () => null\n  },\n})\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject } from 'vue'\n\nimport { isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_SLOTS } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { TableIconName } from './symbol'\n\ndefineOptions({ name: 'TableIcon' })\n\nconst props = defineProps({\n  name: {\n    type: String as PropType<TableIconName>,\n    required: true,\n  },\n  origin: {\n    type: Object,\n    default: null,\n  },\n})\n\nconst tableActions = inject(TABLE_ACTIONS)!\nconst tableSlots = inject(TABLE_SLOTS)!\n\nconst customIcon = computed(() => tableActions.getIcon(props.name))\n</script>\n\n<template>\n  <Renderer\n    v-if=\"isFunction(tableSlots[`icon-${name}`])\"\n    :renderer=\"tableActions.renderTableSlot\"\n    :data=\"{ name: `icon-${name}` }\"\n  ></Renderer>\n  <Icon v-else-if=\"tableActions.hasIcon(name)\" :icon=\"customIcon\"></Icon>\n  <Icon v-else v-bind=\"origin\"></Icon>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Checkbox } from '@/components/checkbox'\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport TableIcon from './table-icon.vue'\nimport { useMoving, useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction, nextFrameOnce } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_HEAD_PREFIX, TABLE_STORE, columnTypes } from './symbol'\n\nimport type { PropType, StyleValue } from 'vue'\nimport type { MovingState } from '@vexip-ui/hooks'\nimport type {\n  ColumnWithKey,\n  ParsedFilterOptions,\n  ParsedTableSorterOptions,\n  TableRowState,\n  TableSelectionColumn,\n  TableTypeColumn,\n} from './symbol'\n\ndefineOptions({ name: 'TableHeadCell' })\n\nconst props = defineProps({\n  column: {\n    type: Object as PropType<ColumnWithKey>,\n    default: () => ({}),\n  },\n  index: {\n    type: Number,\n    default: -1,\n  },\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({}),\n  },\n  rowIndex: {\n    type: Number,\n    default: 0,\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null,\n  },\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst locale = toRef(state, 'locale')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst filterVisible = ref(false)\nconst resizable = toRef(state, 'colResizable')\nconst resizing = computed(() => state.colResizing)\n\nconst wrapper = ref<HTMLElement>()\n\nconst isGroup = computed(() => mutations.isGroupColumn(props.column))\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst cellSpan = computed(() => {\n  return (\n    state.cellSpanMap.get(props.fixed || 'default')!.get(`h${props.rowIndex},${props.index}`) || {\n      colSpan: 1,\n      rowSpan: 1,\n    }\n  )\n})\nconst inLast = computed(() => {\n  return isGroup.value\n    ? props.column.last\n    : props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\n\nconst minWidth = 10\n\nlet currentWidth = 0\n\nfunction processColResize(payload: MovingState, lazy = false) {\n  const width = Math.max(currentWidth + (payload.isRtl ? -1 : 1) * payload.deltaX, minWidth)\n\n  !lazy &&\n    mutations.handleColumnResize(\n      state.columns\n        .slice(props.column.index, props.column.index + cellSpan.value.colSpan)\n        .map(column => column.key),\n      width,\n    )\n\n  return width\n}\n\nconst { target: resizer } = useMoving({\n  capture: false,\n  onStart: (payload, event) => {\n    if (!resizable.value || resizing.value || isGroup.value) return false\n\n    const table = tableActions.getTableElement()\n\n    if (!table || !wrapper.value) return false\n\n    payload.xStart = payload.clientX - table.getBoundingClientRect().left\n    payload.isRtl = isRtl.value\n    currentWidth = wrapper.value.getBoundingClientRect().width\n\n    mutations.setColumnResizing(true)\n    mutations.setResizeLeft(payload.xStart)\n    tableActions.emitColResize('Start', {\n      ...buildEventPayload(event),\n      width: currentWidth,\n    })\n  },\n  onMove: (payload, event) => {\n    payload.xEnd = Math.max(payload.xStart - currentWidth + minWidth, payload.xEnd)\n\n    mutations.setResizeLeft(payload.xEnd)\n    tableActions.emitColResize('Move', {\n      ...buildEventPayload(event),\n      width: processColResize(payload, state.colResizable !== 'responsive'),\n    })\n  },\n  onEnd: (payload, event) => {\n    mutations.setColumnResizing(false)\n    tableActions.emitColResize('End', {\n      ...buildEventPayload(event),\n      width: processColResize(payload),\n    })\n  },\n})\n\nconst typed = computed(() => columnTypes.includes((props.column as TableTypeColumn).type))\nconst className = computed(() => {\n  let customClass = null\n\n  if (typeof state.headClass === 'function') {\n    customClass = state.headClass({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex,\n    })\n  } else {\n    customClass = state.headClass\n  }\n\n  return [\n    nh.be('head-cell'),\n    {\n      [nh.bem('head-cell', 'group')]: isGroup.value,\n      [nh.bem('head-cell', 'typed')]: typed.value,\n      [nh.bem('head-cell', 'center')]: typed.value || props.column.textAlign === 'center',\n      [nh.bem('head-cell', 'right')]: props.column.textAlign === 'right',\n      [nh.bem('head-cell', 'last')]: inLast.value,\n    },\n    props.column.class,\n    customClass,\n  ]\n})\nconst customStyle = computed(() => {\n  if (typeof state.headStyle === 'function') {\n    return state.headStyle({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex,\n    })\n  }\n\n  return state.headStyle\n})\nconst style = computed(() => {\n  const totalWidths =\n    props.fixed === 'left'\n      ? getters.leftFixedWidths\n      : props.fixed === 'right'\n        ? getters.rightFixedWidths\n        : getters.normalWidths\n  const { colSpan, rowSpan } = cellSpan.value\n  const noFixed = !getters.hasFixedColumn\n  const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight =\n    noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const width = totalWidths[props.index + colSpan] - totalWidths[props.index]\n\n  let height: number | undefined\n\n  if (rowSpan > 1) {\n    height = 0\n\n    for (let i = 0; i < rowSpan; ++i) {\n      height += state.rowMap.get(`${TABLE_HEAD_PREFIX}${props.rowIndex + i}`)?.height ?? 0\n    }\n  }\n\n  return [\n    props.column.style || '',\n    customStyle.value,\n    {\n      display: !colSpan ? 'none' : undefined,\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\n      height: height ? `${height}px` : undefined,\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\n      borderRightWidth:\n        !state.border && colSpan > 1 && props.index + colSpan >= totalWidths.length - 1\n          ? 0\n          : undefined,\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\n        (props.column.index ? padLeft : 0) + totalWidths[props.index]\n      }px, 0, 0)`,\n    },\n  ] as StyleValue\n})\nconst attrs = computed(() => {\n  let customAttrs: Record<string, any>\n\n  if (typeof state.headAttrs === 'function') {\n    customAttrs = state.headAttrs({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex,\n    })\n  } else {\n    customAttrs = state.headAttrs\n  }\n\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst sorter = computed(() => {\n  return state.sorters.get(props.column.key) || ({} as ParsedTableSorterOptions)\n})\nconst filter = computed(() => {\n  return state.filters.get(props.column.key) || ({} as ParsedFilterOptions)\n})\nconst hasFilterActive = computed(() => {\n  const options = filter.value.options ?? []\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    if (options[i].active) {\n      return true\n    }\n  }\n\n  return false\n})\nconst checkboxDisabled = computed(() => {\n  if (!isSelection(props.column)) {\n    return false\n  }\n\n  const records = Object.values(getters.disableCheckRows)\n\n  return (\n    getters.processedData.length === records.length &&\n    !Object.values(getters.disableCheckRows).includes(false)\n  )\n})\n\nconst refreshXScroll = () => nextFrameOnce(tableActions.refreshXScroll)\n\nfunction isSelection(column: unknown): column is TableSelectionColumn {\n  return !isGroup.value && (column as TableTypeColumn).type === 'selection'\n}\n\nfunction buildEventPayload(event: Event) {\n  return {\n    column: props.column,\n    index: props.column.colIndex,\n    event,\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleSortAsc() {\n  const key = props.column.key\n  const type = sorter.value.type === 'asc' ? null : 'asc'\n\n  mutations.handleSort(key, type)\n  tableActions.emitRowSort()\n}\n\nfunction handleSortDesc() {\n  const key = props.column.key\n  const type = sorter.value.type === 'desc' ? null : 'desc'\n\n  mutations.handleSort(key, type)\n  tableActions.emitRowSort()\n}\n\nfunction handleFilter(value: ParsedFilterOptions['active']) {\n  mutations.handleFilter(props.column.key, value)\n}\n\nfunction handleFilterItemSelect(value: string | number, active: boolean) {\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value,\n    active,\n    disableOthers: true,\n  })\n  handleFilter(value)\n  filterVisible.value = false\n  tableActions.emitRowFilter()\n}\n\nfunction handleFilterCheck(value: string | number, checked: boolean) {\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value,\n    active: checked,\n  })\n}\n\nfunction handleFilterMultiple() {\n  const options = filter.value.options ?? []\n  const activeValues = []\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    const option = options[i]\n\n    if (option.active) {\n      activeValues.push(option.value)\n    }\n  }\n\n  handleFilter(activeValues)\n  filterVisible.value = false\n  tableActions.emitRowFilter()\n}\n\nfunction handleResetFilter() {\n  filterVisible.value = false\n  handleFilter(null)\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value: null,\n    disableOthers: true,\n  })\n  tableActions.emitRowFilter()\n}\n\nfunction handleCheckAllRow() {\n  mutations.handleCheckAll()\n  tableActions.emitAllRowCheck(state.checkedAll, state.partial)\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n  mutations.setCellHeight(\n    props.row.key,\n    props.column.key,\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth,\n  )\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"columnheader\"\n    scope=\"col\"\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n    :style=\"style\"\n    :aria-sort=\"\n      !isGroup && sorter.able\n        ? sorter.type\n          ? sorter.type === 'asc'\n            ? 'ascending'\n            : 'descending'\n          : 'none'\n        : undefined\n    \"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n    @transitionend=\"refreshXScroll\"\n  >\n    <div\n      v-if=\"column.index === 0\"\n      :class=\"nh.be('side-pad')\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n    <template v-if=\"isSelection(column)\">\n      <div v-if=\"!column.singleSelect\" :class=\"nh.be('content')\">\n        <Checkbox\n          inherit\n          control\n          :class=\"nh.be('selection')\"\n          :checked=\"state.checkedAll\"\n          :partial=\"state.partial\"\n          :disabled=\"checkboxDisabled\"\n          :size=\"column.selectionSize || 'default'\"\n          @click.prevent=\"handleCheckAllRow\"\n        ></Checkbox>\n      </div>\n    </template>\n    <ResizeObserver\n      v-else\n      :disabled=\"column.ellipsis ?? state.ellipsis\"\n      :on-resize=\"handleCellResize\"\n    >\n      <span\n        :class=\"{\n          [nh.be('content')]: true,\n          [nh.bem('content', 'ellipsis')]: column.ellipsis ?? state.ellipsis,\n        }\"\n      >\n        <Ellipsis\n          v-if=\"column.ellipsis ?? state.ellipsis\"\n          inherit\n          :class=\"nh.be('ellipsis')\"\n          :tooltip-theme=\"state.tooltipTheme\"\n          :tip-max-width=\"state.tooltipWidth\"\n        >\n          <Renderer\n            v-if=\"isGroup && isFunction((column as any).renderer)\"\n            :renderer=\"(column as any).renderer\"\n          ></Renderer>\n          <Renderer\n            v-else-if=\"isFunction(column.headRenderer)\"\n            :renderer=\"column.headRenderer\"\n            :data=\"{ column, index }\"\n          ></Renderer>\n          <template v-else>\n            {{ column.name }}\n          </template>\n        </Ellipsis>\n        <template v-else>\n          <Renderer\n            v-if=\"isGroup && isFunction((column as any).renderer)\"\n            :renderer=\"(column as any).renderer\"\n          ></Renderer>\n          <Renderer\n            v-else-if=\"isFunction(column.headRenderer)\"\n            :renderer=\"column.headRenderer\"\n            :data=\"{ column, index }\"\n          ></Renderer>\n          <template v-else>\n            {{ column.name }}\n          </template>\n        </template>\n        <template v-if=\"!isGroup\">\n          <div v-if=\"sorter.able\" :class=\"nh.be('sorter')\">\n            <span\n              :class=\"{\n                [nh.bem('sorter', 'asc')]: true,\n                [nh.bem('sorter', 'active')]: sorter.type === 'asc',\n              }\"\n              @click=\"handleSortAsc()\"\n            >\n              <TableIcon name=\"asc\" :origin=\"icons.angleUp\"></TableIcon>\n            </span>\n            <span\n              :class=\"{\n                [nh.bem('sorter', 'desc')]: true,\n                [nh.bem('sorter', 'active')]: sorter.type === 'desc',\n              }\"\n              @click=\"handleSortDesc()\"\n            >\n              <TableIcon name=\"desc\" :origin=\"icons.angleDown\"></TableIcon>\n            </span>\n          </div>\n          <template v-if=\"filter.able\">\n            <Renderer\n              v-if=\"isFunction(column.filterRenderer)\"\n              :renderer=\"column.filterRenderer\"\n              :data=\"{ column, index, filter, handleFilter }\"\n            ></Renderer>\n            <Tooltip\n              v-else\n              v-model:visible=\"filterVisible\"\n              transfer\n              placement=\"bottom\"\n              trigger=\"click\"\n              :class=\"{\n                [nh.be('filter')]: true,\n                [nh.bem('filter', 'visible')]: filterVisible,\n                [nh.bem('filter', 'active')]: filter.active,\n              }\"\n              :tip-class=\"{\n                [nh.be('filter-wrapper')]: true,\n                [nh.bs('vars')]: true,\n                [nh.bem('filter-wrapper', 'multiple')]: filter.multiple,\n              }\"\n            >\n              <template #trigger>\n                <div :class=\"nh.be('filter-trigger')\">\n                  <TableIcon name=\"filter\" :origin=\"icons.filter\"></TableIcon>\n                </div>\n              </template>\n              <template v-if=\"filter.multiple\" #default>\n                <div vertical :class=\"nh.be('filter-group')\">\n                  <Checkbox\n                    v-for=\"item in filter.options\"\n                    :key=\"item.value\"\n                    inherit\n                    :checked=\"item.active\"\n                    :label=\"item.label\"\n                    :value=\"item.value\"\n                    @change=\"handleFilterCheck(item.value, $event)\"\n                  ></Checkbox>\n                </div>\n                <div :class=\"nh.be('filter-actions')\">\n                  <Button\n                    inherit\n                    text\n                    size=\"small\"\n                    :disabled=\"!hasFilterActive\"\n                    @click=\"handleFilterMultiple()\"\n                  >\n                    {{ locale.filterConfirm }}\n                  </Button>\n                  <Button\n                    inherit\n                    text\n                    size=\"small\"\n                    @click=\"handleResetFilter\"\n                  >\n                    {{ locale.filterReset }}\n                  </Button>\n                </div>\n              </template>\n              <template v-else #default>\n                <div\n                  :class=\"{\n                    [nh.be('filter-item')]: true,\n                    [nh.bem('filter-item', 'active')]: !filter.active,\n                  }\"\n                  @click=\"handleResetFilter\"\n                >\n                  {{ locale.filterAll }}\n                </div>\n                <div\n                  v-for=\"item in filter.options\"\n                  :key=\"item.value\"\n                  :class=\"{\n                    [nh.be('filter-item')]: true,\n                    [nh.bem('filter-item', 'active')]: item.active,\n                  }\"\n                  @click=\"handleFilterItemSelect(item.value, !item.active)\"\n                >\n                  {{ item.label }}\n                </div>\n              </template>\n            </Tooltip>\n          </template>\n        </template>\n      </span>\n    </ResizeObserver>\n    <div\n      v-if=\"!isGroup && resizable && !typed && !column.last\"\n      ref=\"resizer\"\n      :class=\"nh.be('resizer')\"\n    ></div>\n    <div\n      v-if=\"inLast\"\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, nextTick, onMounted, reactive, ref, toRef, watchEffect } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useSetTimeout } from '@vexip-ui/hooks'\nimport { isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { TableRowState } from './symbol'\n\ndefineOptions({ name: 'TableRow' })\n\nconst props = defineProps({\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({}),\n  },\n  index: {\n    type: Number,\n    default: null,\n  },\n  isHead: {\n    type: Boolean,\n    default: false,\n  },\n  isFoot: {\n    type: Boolean,\n    default: false,\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null,\n  },\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableAction = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\n\nconst { timer } = useSetTimeout()\nconst dragging = ref(false)\nconst isDragOver = ref(false)\n\nconst wrapper = ref<HTMLElement>()\nconst rowEl = ref<HTMLElement>()\nconst expandEl = ref<HTMLElement>()\n\nconst instance = reactive({\n  el: wrapper,\n  row: toRef(props, 'row'),\n})\n\nconst rowKey = computed(() => props.row.key)\nconst rowType = computed(() => (props.isHead ? 'head' : props.isFoot ? 'foot' : undefined))\nconst className = computed(() => {\n  let customClass = null\n\n  if (!rowType.value) {\n    if (typeof state.rowClass === 'function') {\n      customClass = state.rowClass(props.row.data, props.index)\n    } else {\n      customClass = state.rowClass\n    }\n  }\n\n  return [\n    nh.be('row'),\n    {\n      [nh.bem('row', 'fixed')]: state.rowHeight && state.rowHeight > 0,\n      [nh.bem('row', 'hover')]:\n        !rowType.value && state.highlight && rowKey.value === state.hoveredRowKey,\n      [nh.bem('row', 'stripe')]: state.stripe && props.index % 2 === 1,\n      [nh.bem('row', 'checked')]: props.row.checked,\n      [nh.bem('row', 'dragging')]: dragging.value,\n      [nh.bem('row', 'drag-over')]: isDragOver.value,\n    },\n    customClass,\n  ]\n})\nconst maxHeight = computed(() =>\n  Math.max(...Object.values(props.row.cellHeights || {}), state.rowMinHeight),\n)\nconst style = computed(() => {\n  let customStyle: any = ''\n\n  if (!rowType.value) {\n    if (typeof state.rowStyle === 'function') {\n      customStyle = state.rowStyle(props.row.data, props.index)\n    } else {\n      customStyle = state.rowStyle\n    }\n  }\n\n  return [\n    customStyle,\n    {\n      height: !state.rowHeight ? `${maxHeight.value}px` : `${state.rowHeight}px`,\n      minHeight: state.rowHeight ? undefined : `${state.rowMinHeight}px`,\n      border: '0',\n    },\n  ]\n})\nconst attrs = computed(() => {\n  if (!rowType.value) {\n    if (typeof state.rowAttrs === 'function') {\n      return state.rowAttrs(props.row.data, props.index)\n    } else {\n      return state.rowAttrs\n    }\n  }\n\n  return null\n})\nconst groupStyle = computed(() => {\n  if (props.isHead || props.isFoot) return undefined\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n  state.heightTrigger\n\n  const offset =\n    state.heightBITree && !rowType.value && props.index ? state.heightBITree.sum(props.index) : 0\n\n  return {\n    transform: offset ? `translate3d(0, ${offset}px, 0)` : undefined,\n  }\n})\nconst cellDraggable = computed(() => {\n  return getters.hasDragColumn && !getters.disableDragRows.has(rowKey.value)\n})\nconst rowDraggable = computed(() => !rowType.value && state.rowDraggable)\nconst draggable = computed(() => !rowType.value && (state.rowDraggable || cellDraggable.value))\nconst expandRenderer = computed(() => state.expandRenderer)\nconst hasExpand = computed(() => {\n  if (props.isHead || props.isFoot || !getters.expandColumn) return false\n  if (state.rightFixedColumns.length) return props.fixed === 'right'\n  if (state.leftFixedColumns.length) return props.fixed === 'left'\n\n  return !!state.normalColumns.length && !props.fixed\n})\n\nfunction setExpandHeight() {\n  let targetHeight: number\n\n  if (props.row.expanded && expandEl.value) {\n    targetHeight = expandEl.value.scrollHeight\n  } else {\n    targetHeight = 0\n  }\n\n  if (targetHeight !== props.row.expandHeight) {\n    mutations.setRowProp(rowKey.value, 'expandHeight', targetHeight)\n    updateTotalHeight(true)\n  }\n}\n\nfunction updateTotalHeight(force = false) {\n  if (state.heightBITree && getters.visibleKeys.has(rowKey.value) && (force || !props.fixed)) {\n    const height = props.row.height + props.row.expandHeight\n    const tree = state.heightBITree\n    const prev = tree.get(props.index)\n\n    if (height !== prev) {\n      tree.add(props.index, height - prev)\n      mutations.updateTotalHeight()\n      mutations.triggerHeightChange()\n    }\n  }\n}\n\nfunction handleResize(entry: ResizeObserverEntry) {\n  const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\n  mutations.setRowProp(rowKey.value, 'height', height)\n  !rowType.value && updateTotalHeight()\n}\n\nwatchEffect(() => {\n  if (props.isHead || props.isFoot) return\n\n  mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\n  !rowType.value && updateTotalHeight()\n  nextTick(() => {\n    hasExpand.value && setExpandHeight()\n  })\n})\n\nonMounted(() => {\n  nextTick(() => {\n    mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\n    nextTick(() => {\n      hasExpand.value && setExpandHeight()\n    })\n  })\n})\n\nfunction buildEventPayload(event: Event) {\n  return {\n    row: props.row.data,\n    key: props.row.key,\n    index: props.index,\n    event,\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  mutations.setHoveredRowKey(rowKey.value)\n\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Enter', buildEventPayload(event))\n  }\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  mutations.setHoveredRowKey(null)\n\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Leave', buildEventPayload(event))\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Click', buildEventPayload(event))\n  }\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Dblclick', buildEventPayload(event))\n  }\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  if (!rowType.value && tableAction) {\n    tableAction.emitRowEvent('Contextmenu', buildEventPayload(event))\n  }\n}\n\nfunction shouldProcessDrag() {\n  return draggable.value && state.dragging\n}\n\nfunction handleDragStart(event: DragEvent) {\n  if (!draggable.value && !cellDraggable.value) return\n\n  dragging.value = true\n  tableAction.handleRowDragStart(instance, event)\n}\n\nfunction handleDragOver(event: DragEvent) {\n  if (!shouldProcessDrag() || (cellDraggable.value && !getters.rowDragging)) return\n\n  clearTimeout(timer.drag)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = true\n\n  tableAction.handleRowDragOver(instance, event)\n}\n\nfunction handleDrop(event: DragEvent) {\n  if (!shouldProcessDrag()) return\n\n  clearTimeout(timer.drag)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = false\n\n  tableAction.handleRowDrop(instance, event)\n  nextTick(() => mutations.handleDrag(rowKey.value, false))\n}\n\nfunction handleDragEnd(event: DragEvent) {\n  if (!shouldProcessDrag()) return\n\n  event.stopPropagation()\n  dragging.value = true\n\n  tableAction.handleRowDragEnd(event)\n  nextTick(() => mutations.handleDrag(rowKey.value, false))\n}\n\nfunction handleDragLeave(event: DragEvent) {\n  if (!shouldProcessDrag()) return\n\n  clearTimeout(timer.drag)\n  event.preventDefault()\n\n  timer.drag = setTimeout(() => {\n    isDragOver.value = false\n  }, 100)\n}\n\nfunction afterExpand() {\n  mutations.setRowProp(rowKey.value, 'expandAnimate', false)\n}\n</script>\n\n<template>\n  <div\n    v-if=\"!row.hidden\"\n    ref=\"wrapper\"\n    :class=\"{\n      [nh.be('group')]: true,\n      [nh.bem('group', 'checked')]: row.checked,\n      [nh.bem('group', 'last')]: row.last,\n    }\"\n    role=\"row\"\n    :draggable=\"rowDraggable || row.dragging\"\n    :style=\"groupStyle\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n    @dragstart.stop=\"handleDragStart\"\n    @dragover=\"handleDragOver\"\n    @drop=\"handleDrop\"\n    @dragend=\"handleDragEnd\"\n    @dragleave=\"handleDragLeave\"\n  >\n    <ResizeObserver :on-resize=\"handleResize\">\n      <div\n        v-bind=\"attrs\"\n        ref=\"rowEl\"\n        :class=\"className\"\n        :style=\"style\"\n      >\n        <slot></slot>\n      </div>\n    </ResizeObserver>\n    <CollapseTransition\n      v-if=\"hasExpand\"\n      :disabled=\"!row.expandAnimate\"\n      @enter=\"setExpandHeight\"\n      @leave=\"setExpandHeight\"\n      @after-enter=\"afterExpand\"\n      @after-leave=\"afterExpand\"\n    >\n      <div\n        v-if=\"row.expanded\"\n        ref=\"expandEl\"\n        :class=\"[nh.be('expanded'), fixed === 'right' && nh.bem('expanded', 'right')]\"\n      >\n        <ResizeObserver :disabled=\"row.expandAnimate\" :on-resize=\"setExpandHeight\">\n          <div :class=\"nh.be('expanded-wrapper')\">\n            <Renderer\n              v-if=\"isFunction(getters.expandColumn!.renderer)\"\n              :renderer=\"getters.expandColumn!.renderer\"\n              :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\n            ></Renderer>\n            <Renderer\n              v-else-if=\"isFunction(expandRenderer)\"\n              :renderer=\"expandRenderer\"\n              :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\n            ></Renderer>\n          </div>\n        </ResizeObserver>\n      </div>\n    </CollapseTransition>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport TableHeadCell from './table-head-cell.vue'\nimport TableRow from './table-row.vue'\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getLast } from '@vexip-ui/utils'\nimport { TABLE_HEAD_PREFIX, TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'TableHead' })\n\nconst props = defineProps({\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null,\n  },\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\n\nconst nh = useNameHelper('table')\nconst allColumns = computed(() => {\n  const left = state.leftFixedColumns.length\n  const right = state.allColumns[0].length - state.rightFixedColumns.length\n\n  if (props.fixed === 'left') {\n    return state.allColumns.map(columns => columns.slice(0, left))\n  } else if (props.fixed === 'right') {\n    return state.allColumns.map(columns => columns.slice(right, state.allColumns[0].length))\n  }\n\n  return state.allColumns.map(columns => columns.slice(left, right))\n})\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst style = computed(() => {\n  const width =\n    props.fixed === 'left'\n      ? getLast(getters.leftFixedWidths)\n      : props.fixed === 'right'\n        ? getLast(getters.rightFixedWidths)\n        : getLast(getters.normalWidths)\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n\n  return {\n    minWidth: width && `${width + padLeft + padRight}px`,\n  }\n})\n\nfunction getRow(index: number) {\n  const key = `${TABLE_HEAD_PREFIX}${index}`\n\n  return state.rowMap.get(key) || mutations.createMinRowState(key)\n}\n</script>\n\n<template>\n  <div :class=\"nh.be('head')\" role=\"rowgroup\" :style=\"style\">\n    <TableRow\n      v-for=\"(rowColumns, rowIndex) in allColumns\"\n      :key=\"rowIndex\"\n      :index=\"rowIndex\"\n      is-head\n      :fixed=\"fixed\"\n      :row=\"getRow(rowIndex)\"\n      :aria-rowindex=\"rowIndex\"\n    >\n      <template v-for=\"(column, index) in rowColumns as any\" :key=\"index\">\n        <TableHeadCell\n          v-if=\"column\"\n          :column=\"column\"\n          :index=\"index\"\n          :row=\"getRow(rowIndex)\"\n          :row-index=\"rowIndex\"\n          :fixed=\"fixed\"\n          :aria-colindex=\"index\"\n        ></TableHeadCell>\n      </template>\n    </TableRow>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Radio } from '@/components/radio'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, nextTick, ref, watchEffect } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport TableIcon from './table-icon.vue'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes, noopFormatter } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type {\n  ColumnWithKey,\n  TableDragColumn,\n  TableExpandColumn,\n  TableOrderColumn,\n  TableRowState,\n  TableSelectionColumn,\n  TableTypeColumn,\n} from './symbol'\n\ndefineOptions({ name: 'TableCell' })\n\nconst props = defineProps({\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({}),\n  },\n  rowIndex: {\n    type: Number,\n    default: -1,\n  },\n  column: {\n    type: Object as PropType<ColumnWithKey>,\n    default: () => ({}),\n  },\n  colIndex: {\n    type: Number,\n    default: -1,\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null,\n  },\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst contentHeight = ref(0)\n\nconst wrapper = ref<HTMLElement>()\n\nconst inLast = computed(() => {\n  return props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\nconst className = computed(() => {\n  let customClass = null\n\n  if (typeof state.cellClass === 'function') {\n    customClass = state.cellClass({\n      row: props.row.data,\n      rowIndex: props.rowIndex,\n      column: props.column,\n      columnIndex: props.column.index,\n    })\n  } else {\n    customClass = state.cellClass\n  }\n\n  const typed = columnTypes.includes((props.column as TableTypeColumn).type)\n\n  return [\n    nh.be('cell'),\n    {\n      [nh.bem('cell', 'typed')]: typed,\n      [nh.bem('cell', 'center')]: typed || props.column.textAlign === 'center',\n      [nh.bem('cell', 'right')]: props.column.textAlign === 'right',\n      [nh.bem('cell', 'last')]: inLast.value,\n    },\n    props.column.class,\n    customClass,\n  ]\n})\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst cellSpan = computed(() => {\n  return (\n    state.cellSpanMap\n      .get(props.fixed || 'default')!\n      .get(`${props.row.index},${props.column.index}`) || { colSpan: 1, rowSpan: 1 }\n  )\n})\nconst customStyle = computed(() => {\n  if (typeof state.cellStyle === 'function') {\n    return state.cellStyle({\n      row: props.row.data,\n      rowIndex: props.rowIndex,\n      column: props.column,\n      columnIndex: props.column.index,\n    })\n  }\n\n  return state.cellStyle\n})\nconst style = computed(() => {\n  const totalWidths =\n    props.fixed === 'left'\n      ? getters.leftFixedWidths\n      : props.fixed === 'right'\n        ? getters.rightFixedWidths\n        : getters.normalWidths\n  const { colSpan, rowSpan } = cellSpan.value\n  const noFixed = !getters.hasFixedColumn\n  const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight =\n    noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const width = totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\n\n  let height: number | undefined\n\n  if (rowSpan > 1 && state.heightBITree) {\n    height =\n      state.heightBITree.sum(props.row.listIndex + rowSpan) -\n      state.heightBITree.sum(props.row.listIndex)\n  }\n\n  return [\n    props.column.style || '',\n    customStyle.value,\n    {\n      display: !colSpan || !rowSpan ? 'none' : undefined,\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\n      height: height ? `${height}px` : undefined,\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\n      borderRightWidth:\n        !state.border && colSpan > 1 && props.colIndex + colSpan >= totalWidths.length - 1\n          ? 0\n          : undefined,\n      borderBottomWidth:\n        rowSpan > 1 && props.rowIndex + rowSpan >= getters.processedData.length ? 0 : undefined,\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\n        (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\n      }px, 0, 0)`,\n    },\n  ]\n})\nconst attrs = computed(() => {\n  let customAttrs: Record<string, any>\n\n  if (typeof state.cellAttrs === 'function') {\n    customAttrs = state.cellAttrs({\n      row: props.row.data,\n      rowIndex: props.rowIndex,\n      column: props.column,\n      columnIndex: props.colIndex,\n    })\n  } else {\n    customAttrs = state.cellAttrs\n  }\n\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst formatter = computed(() => {\n  return isFunction(props.column.formatter) ? props.column.formatter : noopFormatter\n})\nconst isTreeColumn = computed(() => {\n  return (\n    getters.usingTree &&\n    (getters.indentedColumn ? props.column.key === getters.indentedColumn.key : props.column.first)\n  )\n})\n\nwatchEffect(() => {\n  if (isTypeColumn(props.column)) return\n\n  mutations.setCellHeight(props.row.key, props.column.key, contentHeight.value)\n})\n\nfunction isSelectionColumn(column: unknown): column is TableSelectionColumn {\n  return (column as TableTypeColumn).type === 'selection'\n}\n\nfunction isOrderColumn(column: unknown): column is TableOrderColumn {\n  return (column as TableTypeColumn).type === 'order'\n}\n\nfunction isExpandColumn(column: unknown): column is TableExpandColumn {\n  return (column as TableTypeColumn).type === 'expand'\n}\n\nfunction isDragColumn(column: unknown): column is TableDragColumn {\n  return (column as TableTypeColumn).type === 'drag'\n}\n\nfunction isTypeColumn(column: unknown): column is TableTypeColumn {\n  return (\n    isSelectionColumn(column) ||\n    isOrderColumn(column) ||\n    isExpandColumn(column) ||\n    isDragColumn(column)\n  )\n}\n\nfunction buildEventPayload(event: Event) {\n  return {\n    row: props.row.data,\n    key: props.row.key,\n    rowIndex: props.rowIndex,\n    column: props.column,\n    columnIndex: props.colIndex,\n    event,\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  tableActions?.emitCellEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  tableActions?.emitCellEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n  tableActions?.emitCellEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  tableActions?.emitCellEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  tableActions?.emitCellEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleCheckRow(row: TableRowState, event: MouseEvent, single = false) {\n  if (!getters.disableCheckRows.has(row.key)) {\n    const checked = !row.checked\n    const { data, key, index } = row\n\n    mutations.handleCheck(key, checked, single)\n    tableActions.emitRowCheck({ row: data, key, index, event, checked })\n  }\n}\n\nfunction handleExpandRow(row: TableRowState, event: MouseEvent) {\n  if (!getters.disableExpandRows.has(row.key)) {\n    const expanded = !row.expanded\n    const { data, key, index } = row\n\n    mutations.setRowProp(key, 'expandAnimate', true)\n    nextTick(() => {\n      mutations.handleExpand(key, expanded)\n      tableActions.emitRowExpand({ row: data, key, index, event, expanded })\n    })\n  }\n}\n\nfunction handleDragRow(row: TableRowState) {\n  if (!getters.disableDragRows.has(row.key)) {\n    mutations.handleDrag(row.key, true)\n  }\n}\n\nfunction handleExpandTree(row: TableRowState, event: MouseEvent) {\n  if (!row.children?.length) return\n\n  const expanded = !row.treeExpanded\n  const { data, key, index } = row\n\n  tableActions.runInLocked()\n  mutations.setTreeExpanded(row.key, expanded)\n  tableActions.emitRowExpand({ row: data, key, index, event, expanded })\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n  contentHeight.value =\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"cell\"\n    :scope=\"column.first ? 'row' : undefined\"\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n    :style=\"style\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n  >\n    <div\n      v-if=\"column.index === 0\"\n      :class=\"nh.be('side-pad')\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n    <div v-if=\"isTypeColumn(column)\" :class=\"nh.be('content')\">\n      <template v-if=\"isSelectionColumn(column)\">\n        <Radio\n          v-if=\"column.singleSelect\"\n          inherit\n          :label=\"row.key\"\n          :value=\"row.checked ? row.key : null\"\n          :class=\"nh.be('selection')\"\n          :size=\"column.selectionSize || 'default'\"\n          :disabled=\"getters.disableCheckRows.has(row.key)\"\n          @click.prevent.stop=\"handleCheckRow(row, $event, true)\"\n        ></Radio>\n        <Checkbox\n          v-else\n          inherit\n          :class=\"nh.be('selection')\"\n          :checked=\"row.checked\"\n          :size=\"column.selectionSize || 'default'\"\n          :disabled=\"getters.disableCheckRows.has(row.key)\"\n          :partial=\"row.partial\"\n          :control=\"!!row.children?.length\"\n          @click.prevent.stop=\"handleCheckRow(row, $event)\"\n        ></Checkbox>\n      </template>\n      <span v-else-if=\"isOrderColumn(column)\" :class=\"nh.be('order')\">\n        {{ column.orderLabel && column.orderLabel(column.truthIndex ? row.index : rowIndex) }}\n      </span>\n      <template v-else-if=\"isExpandColumn(column)\">\n        <button\n          v-if=\"!getters.disableExpandRows.has(row.key)\"\n          type=\"button\"\n          :class=\"{\n            [nh.be('expand')]: true,\n            [nh.bem('expand', 'active')]: row.expanded,\n          }\"\n          @click.stop=\"handleExpandRow(row, $event)\"\n        >\n          <TableIcon name=\"expand\" :origin=\"icons.angleRight\"></TableIcon>\n        </button>\n      </template>\n      <template v-else-if=\"isDragColumn(column)\">\n        <button\n          v-if=\"!getters.disableDragRows.has(row.key)\"\n          type=\"button\"\n          :class=\"nh.be('dragger')\"\n          @mousedown=\"handleDragRow(row)\"\n        >\n          <TableIcon name=\"dragger\" :origin=\"icons.dragger\"></TableIcon>\n        </button>\n      </template>\n    </div>\n    <ResizeObserver v-else :on-resize=\"handleCellResize\">\n      <span\n        :class=\"{\n          [nh.be('content')]: true,\n          [nh.bem('content', 'ellipsis')]: column.ellipsis ?? state.ellipsis,\n        }\"\n      >\n        <div v-if=\"isTreeColumn\" :class=\"nh.be('tree-append')\">\n          <span\n            :class=\"nh.be('pad')\"\n            :style=\"{\n              [nh.cv('row-depth')]: row.depth,\n            }\"\n          ></span>\n          <button\n            type=\"button\"\n            :class=\"[\n              nh.be('tree-expand'),\n              !row.children?.length && nh.bem('tree-expand', 'hidden'),\n            ]\"\n            @click=\"handleExpandTree(row, $event)\"\n          >\n            <TableIcon v-if=\"row.treeExpanded\" name=\"minus\" :origin=\"icons.minusSquare\"></TableIcon>\n            <TableIcon v-else name=\"plus\" :origin=\"icons.plusSquare\"></TableIcon>\n          </button>\n        </div>\n        <Ellipsis\n          v-if=\"column.ellipsis ?? state.ellipsis\"\n          inherit\n          :class=\"nh.be('ellipsis')\"\n          :tip-disabled=\"state.barScrolling\"\n          :tooltip-theme=\"state.tooltipTheme\"\n          :tip-max-width=\"state.tooltipWidth\"\n        >\n          <Renderer\n            v-if=\"isFunction(column.renderer)\"\n            :renderer=\"column.renderer\"\n            :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\n          ></Renderer>\n          <template v-else-if=\"isFunction(column.accessor)\">\n            {{ formatter(column.accessor(row.data, rowIndex)) }}\n          </template>\n          <template v-else>\n            {{ formatter(row.data[column.key]) }}\n          </template>\n        </Ellipsis>\n        <template v-else>\n          <Renderer\n            v-if=\"isFunction(column.renderer)\"\n            :renderer=\"column.renderer\"\n            :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\n          ></Renderer>\n          <template v-else-if=\"isFunction(column.accessor)\">\n            {{ formatter(column.accessor(row.data, rowIndex)) }}\n          </template>\n          <template v-else>\n            {{ formatter(row.data[column.key]) }}\n          </template>\n        </template>\n      </span>\n    </ResizeObserver>\n    <div\n      v-if=\"inLast\"\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, toRef } from 'vue'\n\nimport TableCell from './table-cell.vue'\nimport TableRow from './table-row.vue'\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getLast } from '@vexip-ui/utils'\nimport { TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'TableBody' })\n\nconst props = defineProps({\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null,\n  },\n})\n\nconst { state, getters } = inject(TABLE_STORE)!\n\nconst nh = useNameHelper('table')\nconst locale = toRef(state, 'locale')\n\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst data = computed(() => (state.virtual ? state.virtualData : getters.processedData))\nconst hasEmpty = computed(() => {\n  if (state.rightFixedColumns.length) return props.fixed === 'right'\n  if (state.leftFixedColumns.length) return props.fixed === 'left'\n  return true\n})\nconst style = computed(() => {\n  const width =\n    props.fixed === 'left'\n      ? getLast(getters.leftFixedWidths)\n      : props.fixed === 'right'\n        ? getLast(getters.rightFixedWidths)\n        : getLast(getters.normalWidths)\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const showEmpty = hasEmpty.value && data.value.length === 0\n\n  return {\n    [nh.cv('right-fixed-width')]:\n      props.fixed === 'right' && width ? `${width + padLeft + padRight}px` : '0px',\n    [showEmpty ? 'width' : 'minWidth']: width && `${width + padLeft + padRight}px`,\n    minHeight: `${state.totalHeight}px`,\n  }\n})\nconst emptyStyle = computed(() => {\n  const { rowHeight, rowMinHeight } = state\n\n  return {\n    minHeight: `${rowHeight || rowMinHeight}px`,\n  }\n})\n</script>\n\n<template>\n  <div :class=\"nh.be('body')\" role=\"rowgroup\" :style=\"style\">\n    <template v-if=\"data.length\">\n      <TableRow\n        v-for=\"(row, index) in data\"\n        :key=\"index\"\n        :row=\"row\"\n        :index=\"row.listIndex\"\n        :fixed=\"fixed\"\n        :aria-rowindex=\"row.index\"\n      >\n        <TableCell\n          v-for=\"(column, colIndex) in columns\"\n          :key=\"colIndex\"\n          :row=\"row\"\n          :row-index=\"row.listIndex\"\n          :column=\"column\"\n          :col-index=\"colIndex\"\n          :fixed=\"fixed\"\n          :aria-colindex=\"colIndex\"\n        ></TableCell>\n      </TableRow>\n    </template>\n    <div\n      v-else-if=\"hasEmpty\"\n      :class=\"[nh.be('empty'), fixed === 'right' && nh.bem('empty', 'right')]\"\n      :style=\"emptyStyle\"\n    >\n      <slot name=\"empty\">\n        {{ locale.empty }}\n      </slot>\n    </div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes } from './symbol'\n\nimport type { PropType, StyleValue } from 'vue'\nimport type { ColumnWithKey, SummaryWithKey, TableRowState, TableTypeColumn } from './symbol'\n\ndefineOptions({ name: 'TableFootCell' })\n\nconst props = defineProps({\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({}),\n  },\n  column: {\n    type: Object as PropType<ColumnWithKey>,\n    default: () => ({}),\n  },\n  colIndex: {\n    type: Number,\n    default: -1,\n  },\n  summary: {\n    type: Object as PropType<SummaryWithKey>,\n    default: () => ({}),\n  },\n  summaryIndex: {\n    type: Number,\n    default: -1,\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null,\n  },\n  above: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst { isRtl } = useRtl()\n\nconst wrapper = ref<HTMLElement>()\n\nconst inLast = computed(() => {\n  return props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\n// We use 'a' and 'b' to distinguish above and below\nconst prefix = computed(() => (props.above ? 'af' : 'bf'))\nconst summaries = computed(() => (props.above ? state.aboveSummaries : state.belowSummaries))\nconst heights = computed(() => (props.above ? getters.topFixedHeights : getters.bottomFixedHeights))\nconst className = computed(() => {\n  let customClass = null\n\n  if (typeof state.footClass === 'function') {\n    customClass = state.footClass({\n      column: props.column,\n      columnIndex: props.column.index,\n      summary: props.summary,\n      summaryIndex: props.summaryIndex,\n    })\n  } else {\n    customClass = state.footClass\n  }\n\n  const typed = columnTypes.includes((props.column as TableTypeColumn).type)\n\n  return [\n    nh.be('foot-cell'),\n    {\n      [nh.bem('foot-cell', 'typed')]: typed,\n      [nh.bem('foot-cell', 'center')]: typed || props.column.textAlign === 'center',\n      [nh.bem('foot-cell', 'right')]: props.column.textAlign === 'right',\n      [nh.bem('foot-cell', 'last')]: inLast.value,\n    },\n    props.column.class,\n    customClass,\n  ]\n})\nconst cellSpan = computed(() => {\n  return (\n    state.cellSpanMap\n      .get(props.fixed || 'default')!\n      .get(`${prefix.value}${props.summaryIndex},${props.column.index}`) || {\n      colSpan: 1,\n      rowSpan: 1,\n    }\n  )\n})\nconst customStyle = computed(() => {\n  if (typeof state.footStyle === 'function') {\n    return state.footStyle({\n      column: props.column,\n      columnIndex: props.column.index,\n      summary: props.summary,\n      summaryIndex: props.summaryIndex,\n    })\n  }\n\n  return state.cellStyle\n})\nconst style = computed(() => {\n  const totalWidths =\n    props.fixed === 'left'\n      ? getters.leftFixedWidths\n      : props.fixed === 'right'\n        ? getters.rightFixedWidths\n        : getters.normalWidths\n  const { colSpan, rowSpan } = cellSpan.value\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const width = totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\n\n  let height: number | undefined\n\n  if (rowSpan > 1) {\n    height = heights.value[props.summaryIndex + rowSpan] - heights.value[props.summaryIndex]\n  }\n\n  return [\n    props.column.style || '',\n    customStyle.value,\n    {\n      display: !colSpan || !rowSpan ? 'none' : undefined,\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\n      height: height ? `${height}px` : undefined,\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\n      borderRightWidth:\n        !state.border && colSpan > 1 && props.colIndex + colSpan >= totalWidths.length - 1\n          ? 0\n          : undefined,\n      borderBottomWidth:\n        rowSpan > 1 && props.summaryIndex + rowSpan >= summaries.value.length ? 0 : undefined,\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\n        (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\n      }px, 0, 0)`,\n    },\n  ] as StyleValue\n})\nconst attrs = computed(() => {\n  let customAttrs: Record<string, any>\n\n  if (typeof state.footAttrs === 'function') {\n    customAttrs = state.footAttrs({\n      column: props.column,\n      columnIndex: props.column.index,\n      summary: props.summary,\n      summaryIndex: props.summaryIndex,\n    })\n  } else {\n    customAttrs = state.footAttrs\n  }\n\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst summaryData = computed(() => getters.summaryData.get(props.column.key))\n\nfunction buildEventPayload(event: Event) {\n  return {\n    column: props.column,\n    columnIndex: props.column.index,\n    summary: props.summary,\n    summaryIndex: props.summaryIndex,\n    event,\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  tableActions?.emitFootEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  tableActions?.emitFootEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n  tableActions?.emitFootEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  tableActions?.emitFootEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  tableActions?.emitFootEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n  mutations.setCellHeight(\n    props.row.key,\n    props.column.key,\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth,\n  )\n}\n</script>\n\n<template>\n  <div\n    v-bind=\"attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"cell\"\n    :scope=\"column.first ? 'row' : undefined\"\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n    :style=\"style\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n  >\n    <div\n      v-if=\"column.index === 0\"\n      :class=\"nh.be('side-pad')\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n    <ResizeObserver\n      v-if=\"isFunction(summary.renderer)\"\n      :disabled=\"column.ellipsis ?? state.ellipsis\"\n      :on-resize=\"handleCellResize\"\n    >\n      <span\n        :class=\"{\n          [nh.be('content')]: true,\n          [nh.bem('content', 'ellipsis')]: column.ellipsis ?? state.ellipsis,\n        }\"\n      >\n        <Ellipsis\n          v-if=\"column.ellipsis ?? state.ellipsis\"\n          inherit\n          :class=\"nh.be('ellipsis')\"\n          :tooltip-theme=\"state.tooltipTheme\"\n          :tip-max-width=\"state.tooltipWidth\"\n        >\n          <Renderer\n            :renderer=\"summary.renderer\"\n            :data=\"{\n              column,\n              index: column.index,\n              rows: state.data,\n              meta: summaryData,\n            }\"\n          ></Renderer>\n        </Ellipsis>\n        <Renderer\n          v-else\n          :renderer=\"summary.renderer\"\n          :data=\"{\n            column,\n            index: column.index,\n            rows: state.data,\n            meta: summaryData,\n          }\"\n        ></Renderer>\n      </span>\n    </ResizeObserver>\n    <div\n      v-if=\"inLast\"\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport TableFootCell from './table-foot-cell.vue'\nimport TableRow from './table-row.vue'\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getLast } from '@vexip-ui/utils'\nimport { TABLE_STORE } from './symbol'\n\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'TableFoot' })\n\nconst props = defineProps({\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null,\n  },\n  above: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\n\nconst nh = useNameHelper('table')\n\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst summaries = computed(() => (props.above ? state.aboveSummaries : state.belowSummaries))\nconst summaryData = computed(() => {\n  return summaries.value.map(summary => {\n    const key = mutations.buildSummaryKey(summary.key)\n    const row = state.rowMap.get(key) || mutations.createMinRowState(key)\n\n    return { summary, row }\n  })\n})\nconst className = computed(() => {\n  return [nh.be('foot'), nh.bem('foot', props.above ? 'above' : 'below')]\n})\nconst style = computed(() => {\n  const width =\n    props.fixed === 'left'\n      ? getLast(getters.leftFixedWidths)\n      : props.fixed === 'right'\n        ? getLast(getters.rightFixedWidths)\n        : getLast(getters.normalWidths)\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n\n  return {\n    minWidth: width && `${width + padLeft + padRight}px`,\n  }\n})\n</script>\n\n<template>\n  <div :class=\"className\" role=\"rowgroup\" :style=\"style\">\n    <TableRow\n      v-for=\"({ row, summary }, index) in summaryData\"\n      :key=\"row.key\"\n      is-foot\n      :fixed=\"fixed\"\n      :row=\"row\"\n      :aria-rowindex=\"index\"\n    >\n      <TableFootCell\n        v-for=\"(column, colIndex) in columns\"\n        :key=\"colIndex\"\n        :row=\"row\"\n        :column=\"column\"\n        :col-index=\"colIndex\"\n        :summary=\"summary\"\n        :summary-index=\"index\"\n        :fixed=\"fixed\"\n        :above=\"above\"\n        :aria-colindex=\"colIndex\"\n      ></TableFootCell>\n    </TableRow>\n  </div>\n</template>\n","import { isNull, toFalse } from '@vexip-ui/utils'\n\nexport interface CascadedNode {\n  checked: boolean,\n  partial: boolean,\n  parent?: string | number | symbol,\n  children: CascadedNode[],\n}\n\nexport function useCascadedChecked<T extends CascadedNode>(options: {\n  getNode: (key: string | number | symbol) => T | null | undefined | void,\n  disableNode?: (node: T) => boolean,\n}) {\n  function updateCheckedUpward(key: string | number | symbol) {\n    let node = options.getNode(key)\n\n    if (!node) return\n\n    while (!isNull(node.parent)) {\n      const parentId = node.parent\n      const parent = options.getNode(parentId)\n\n      if (!parent) break\n\n      if (node.checked === parent.checked && node.partial === parent.partial) {\n        break\n      }\n\n      if (node.checked) {\n        parent.checked = parent.children.every(item => item.checked)\n        parent.partial = !parent.checked\n      } else {\n        parent.checked = false\n        parent.partial = parent.children.some(item => item.checked || item.partial)\n      }\n\n      node = parent\n    }\n  }\n\n  function updateCheckedDown(key: string | number | symbol) {\n    const originNode = options.getNode(key)\n\n    if (!originNode) return\n\n    const disable = typeof options.disableNode === 'function' ? options.disableNode : toFalse\n    const checked = originNode.checked\n    const partial = originNode.partial\n\n    const loop = [...(originNode.children as T[])]\n\n    let node: T\n\n    while (loop.length) {\n      node = loop.shift()!\n\n      if (disable(node)) continue\n\n      node.checked = checked\n      node.partial = partial\n\n      if (node.children.length) {\n        loop.push(...(node.children as T[]))\n      }\n    }\n  }\n\n  return {\n    updateCheckedUpward,\n    updateCheckedDown,\n  }\n}\n","import { useCascadedChecked } from '@/components/tree/hooks'\n\nimport { computed, reactive, watchEffect } from 'vue'\n\nimport {\n  boundRange,\n  createBITree,\n  debounceMinor,\n  deepClone,\n  getLast,\n  isNull,\n  mapTree,\n  sortByProps,\n  toFalse,\n  toFixed,\n  toNumber,\n  walkTree,\n} from '@vexip-ui/utils'\nimport { DEFAULT_KEY_FIELD, TABLE_FOOT_PREFIX, TABLE_HEAD_PREFIX, columnTypes } from './symbol'\n\nimport type { ClassType, LocaleConfig, StyleType } from '@vexip-ui/config'\nimport type { TooltipTheme } from '@/components/tooltip'\nimport type {\n  CellSpanResult,\n  ColumnCellSpanFn,\n  ColumnGroupWithKey,\n  ColumnRawWithKey,\n  ColumnWithKey,\n  Data,\n  ExpandRenderFn,\n  Key,\n  ParsedFilterOptions,\n  ParsedTableSorterOptions,\n  StoreOptions,\n  StoreState,\n  SummaryCellSpanFn,\n  SummaryWithKey,\n  TableCellPropFn,\n  TableCellSpanFn,\n  TableColResizeType,\n  TableColumnOptions,\n  TableColumnRawOptions,\n  TableColumnType,\n  TableDragColumn,\n  TableExpandColumn,\n  TableFilterOptions,\n  TableFootPropFn,\n  TableHeadPropFn,\n  TableKeyConfig,\n  TableRowPropFn,\n  TableRowState,\n  TableSelectionColumn,\n  TableSorterOptions,\n  TableSummaryData,\n  TableSummaryOptions,\n} from './symbol'\n\nconst defaultSummaryData = Object.freeze<TableSummaryData>({\n  sum: NaN,\n  min: NaN,\n  max: NaN,\n})\n\nlet indexId = 1\n\nfunction getIndexId() {\n  return `__vxp-table-key-${indexId++}`\n}\n\nfunction defaultIndexLabel(index: number) {\n  return index + 1\n}\n\nconst COLUMN_DEFAULT_WIDTH = 100\nconst COLUMN_DEFAULT_MIN_WIDTH = 10\n\nexport function useStore(options: StoreOptions) {\n  const state = reactive({\n    ...options,\n    columns: [],\n    normalColumns: [],\n    allColumns: [],\n    summaries: [],\n    data: [],\n    dataKey: options.dataKey ?? DEFAULT_KEY_FIELD,\n    rowData: [],\n    treeRowData: [],\n    width: 0,\n    rightFixedColumns: [],\n    leftFixedColumns: [],\n    aboveSummaries: [],\n    belowSummaries: [],\n    rowMinHeight: options.rowMinHeight || 36,\n    rowDraggable: !!options.rowDraggable,\n    columnMap: new Map(),\n    rowMap: new Map(),\n    summaryMap: new Map(),\n    idMaps: new WeakMap(),\n    checkedAll: false,\n    partial: false,\n    widths: new Map(),\n    sorters: new Map(),\n    filters: new Map(),\n    resized: new Set(),\n    bodyYScroll: 0,\n    bodyXScroll: 0,\n    padTop: 0,\n    startRow: 0,\n    endRow: 0,\n    dragging: false,\n    heightBITree: null!,\n    virtualData: [],\n    totalHeight: options.rowMinHeight * options.data.length,\n    colResizing: false,\n    resizeLeft: 0,\n    cellSpanMap: new Map(),\n    collapseMap: new Map(),\n    sidePadding: options.sidePadding || [0, 0],\n    locked: false,\n    barScrolling: false,\n    heightTrigger: 0,\n    hoveredRowKey: null as Key | null,\n  }) as StoreState\n\n  setColumns(options.columns)\n  setSummaries(options.summaries)\n  setData(options.data)\n\n  const userData = computed(() => {\n    return typeof state.dataFilter === 'function'\n      ? state.rowData.filter(row => state.dataFilter(row.data))\n      : state.rowData\n  })\n  const filteredData = computed(() => {\n    return state.customFilter\n      ? userData.value\n      : filterData(state.filters, userData.value, state.singleFilter)\n  })\n  const sortedData = computed(() => {\n    const data = state.customSorter\n      ? filteredData.value\n      : sortData(state.sorters, filteredData.value, state.columns, state.singleSorter)\n\n    return data\n  })\n  const processedData = computed(() => {\n    const data = pageData(state.currentPage, state.pageSize, sortedData.value)\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      data[i].listIndex = i\n      data[i].last = i === len - 1\n    }\n\n    return data\n  })\n  const visibleKeys = computed(() => new Set(processedData.value.map(row => row.key)))\n  const disableCheckRows = computed(() => {\n    const rowData = processedData.value\n    const selectionColumn = state.columns.find(\n      item => (item as TableSelectionColumn).type === 'selection',\n    ) as TableSelectionColumn | undefined\n    const disableCheckRows = new Set<Key>()\n\n    if (selectionColumn && typeof selectionColumn.disableRow === 'function') {\n      const isDisabled = selectionColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableCheckRows.add(row.key)\n        }\n      }\n    }\n\n    return disableCheckRows\n  })\n  const disableExpandRows = computed(() => {\n    const rowData = processedData.value\n    const expandColumn = state.columns.find(\n      item => (item as TableExpandColumn).type === 'expand',\n    ) as TableExpandColumn | undefined\n    const disableExpandRows = new Set<Key>()\n\n    if (expandColumn && typeof expandColumn.disableRow === 'function') {\n      const isDisabled = expandColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableExpandRows.add(row.key)\n        }\n      }\n    }\n\n    return disableExpandRows\n  })\n  const disableDragRows = computed(() => {\n    const rowData = processedData.value\n    const dragColumn = state.columns.find(item => (item as TableDragColumn).type === 'drag') as\n      | TableDragColumn\n      | undefined\n    const disableDragRows = new Set<Key>()\n\n    if (dragColumn && typeof dragColumn.disableRow === 'function') {\n      const isDisabled = dragColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableDragRows.add(row.key)\n        }\n      }\n    }\n\n    return disableDragRows\n  })\n  const usingTree = computed(() => {\n    return !state.disabledTree && state.rowData.some(row => row.children?.length)\n  })\n  const hasDragColumn = computed(() => {\n    return !!state.columns.find(column => 'type' in column && column.type === 'drag')\n  })\n  const rowDragging = computed(() => !!processedData.value.find(row => row.dragging))\n  const totalWidths = computed(() => getColumnsWidths())\n  const normalWidths = computed(() => getColumnsWidths(state.normalColumns))\n  const leftFixedWidths = computed(() => getColumnsWidths(state.leftFixedColumns))\n  const rightFixedWidths = computed(() => getColumnsWidths(state.rightFixedColumns))\n  const expandColumn = computed(() => {\n    return state.columns.find(column => (column as TableExpandColumn).type === 'expand') as\n      | TableExpandColumn\n      | undefined\n  })\n  const summaryData = computed(() => {\n    const { columns, summaries, data } = state\n    const map = new Map<Key, TableSummaryData>()\n\n    if (!summaries.length) return map\n\n    for (const column of columns) {\n      const key = column.key\n\n      if (column.type || column.noSummary) {\n        map.set(key, defaultSummaryData)\n        continue\n      }\n\n      const accessor =\n        typeof column.accessor === 'function' ? column.accessor : (data: Data) => data[key]\n\n      let sum = 0\n      let min = Infinity\n      let max = -Infinity\n      let valid = false\n\n      for (let i = 0, len = data.length; i < len; ++i) {\n        const value = accessor(data[i], i)\n        const number = parseFloat(value as string)\n\n        if (Number.isNaN(number)) continue\n\n        sum += number\n        min = Math.min(min, number)\n        max = Math.max(max, number)\n        valid = true\n      }\n\n      valid ? map.set(key, { sum, min, max }) : map.set(key, defaultSummaryData)\n    }\n\n    return map\n  })\n  const topFixedHeights = computed(() => getSummariesHeights(state.aboveSummaries))\n  const bottomFixedHeights = computed(() => getSummariesHeights())\n  const indentedColumn = computed(() => {\n    return state.columns.find(column => !column.type && column.indented)\n  })\n  const hasFixedColumn = computed(() => {\n    return !!(state.leftFixedColumns.length || state.rightFixedColumns.length)\n  })\n\n  const getters = reactive({\n    filteredData,\n    sortedData,\n    processedData,\n    visibleKeys,\n    disableCheckRows,\n    disableExpandRows,\n    disableDragRows,\n    usingTree,\n    hasDragColumn,\n    rowDragging,\n    totalWidths,\n    normalWidths,\n    leftFixedWidths,\n    rightFixedWidths,\n    expandColumn,\n    summaryData,\n    topFixedHeights,\n    bottomFixedHeights,\n    indentedColumn,\n    hasFixedColumn,\n  })\n\n  const mutations = {\n    // 这几个个方法被 deep watch 回调\n    // 需要防止在一个微任务内被多次调用\n    setColumns: debounceMinor(setColumns),\n    // setColumns,\n    setSummaries: debounceMinor(setSummaries),\n    setData: debounceMinor(setData),\n\n    // 这个方法被大量的 watch 回调，需要防抖\n    updateTotalHeight: debounceMinor(updateTotalHeight),\n\n    isGroupColumn,\n    buildSummaryKey,\n    setColumnProp,\n    setSummaryProp,\n    setDataKey,\n    setCurrentPage,\n    setPageSize,\n    setRowClass,\n    setRowStyle,\n    setRowAttrs,\n    setCellClass,\n    setCellStyle,\n    setCellAttrs,\n    setHeadClass,\n    setHeadStyle,\n    setHeadAttrs,\n    setFootClass,\n    setFootStyle,\n    setFootAttrs,\n    setTableWidth,\n    setRowHeight,\n    setRowMinHeight,\n    setCellHeight,\n    setVirtual,\n    setRowDraggable,\n    setBodyYScroll,\n    setBodyXScroll,\n    setBorder,\n    setStripe,\n    setHighlight,\n    setRowProp,\n    setLocale,\n    setTooltipTheme,\n    setTooltipWidth,\n    setSingleSorter,\n    setSingleFilter,\n    setDragging,\n    setKeyConfig,\n    setDisabledTree,\n    setNoCascaded,\n    setColResizable,\n    setCustomSorter,\n    setCustomFilter,\n    setColumnResizing,\n    setResizeLeft,\n    setExpandRenderer,\n    setCellSpan,\n    setSidePadding,\n    setBorderWidth,\n    setDataFilter,\n    setEllipsis,\n    setLocked,\n    setBarScrolling,\n    setHoveredRowKey,\n\n    handleSort,\n    clearSort,\n    handleFilter,\n    clearFilter,\n    toggleFilterItemActive,\n    refreshRowIndex,\n    handleCheck,\n    handleCheckAll,\n    clearCheckAll,\n    setRenderRows,\n    handleExpand,\n    handleDrag,\n    collectUnderRows,\n    setTreeExpanded,\n    getParentRow,\n    handleColumnResize,\n    getCurrentData,\n    createMinRowState,\n    flatTreeRows,\n    refreshRowDepth,\n    triggerHeightChange,\n    queryRow,\n  }\n\n  watchEffect(() => {\n    state.heightBITree = createBITree(\n      processedData.value.length,\n      state.rowHeight || state.rowMinHeight,\n    )\n\n    state.totalHeight = -1\n    updateTotalHeight()\n  })\n  watchEffect(computeCellSpan)\n\n  function triggerHeightChange() {\n    ++state.heightTrigger\n\n    if (state.heightTrigger >= Number.MAX_SAFE_INTEGER) {\n      state.heightTrigger = 0\n    }\n  }\n\n  function getColumnsWidths(columns = state.columns) {\n    const widths = state.widths\n    const combinedWidths: number[] = [0]\n\n    let width = 0\n\n    for (let i = 0, len = columns.length; i < len; ++i) {\n      const column = columns[i]\n      const key = column.key\n      const columnWidth = widths.get(key) || 0\n\n      width += columnWidth\n      combinedWidths.push(width)\n    }\n\n    return combinedWidths\n  }\n\n  function getSummariesHeights(summaries = state.belowSummaries) {\n    const rowMap = state.rowMap\n    const heights: number[] = [0]\n\n    let height = 0\n\n    for (let i = 0, len = summaries.length; i < len; ++i) {\n      const summary = summaries[i]\n      const key = buildSummaryKey(summary.key)\n      const row = rowMap.get(key)\n\n      if (row) {\n        height += row.height || 0\n      }\n\n      heights.push(height)\n    }\n\n    return heights\n  }\n\n  function createMinRowState(key: Key) {\n    return { key, cellHeights: {}, height: state.rowHeight ?? state.rowMinHeight } as TableRowState\n  }\n\n  function isGroupColumn(column: any): column is ColumnGroupWithKey {\n    return !!column.children?.length\n  }\n\n  function buildColumns(columns: TableColumnRawOptions[]) {\n    const allColumns: ColumnRawWithKey[][] = []\n    const baseColumns: ColumnWithKey[] = []\n    const columnMap = new Map<Key, ColumnRawWithKey>()\n    const existedTypes = new Set<TableColumnType>()\n\n    const getFixedOrder = (fixed?: boolean | 'left' | 'right') => {\n      return fixed === true || fixed === 'left' ? -1 : fixed === 'right' ? 1 : 0\n    }\n    const build = (\n      _columns: TableColumnRawOptions[],\n      fixed?: boolean | 'left' | 'right',\n      row = 0,\n      result: ColumnRawWithKey[][] = [],\n    ) => {\n      _columns = _columns\n        .filter(column => !('children' in column) || isGroupColumn(column))\n        .sort((prev, next) => (prev.order || 0) - (next.order || 0))\n        .sort((prev, next) => getFixedOrder(prev.fixed) - getFixedOrder(next.fixed))\n      fixed = fixed === true ? 'left' : fixed\n\n      const columns = _columns as ColumnRawWithKey[]\n      const rowColumns = result[row] ?? (result[row] = [])\n\n      let index = row > 0 ? result[row - 1].length - 1 : 0\n\n      for (const { ...column } of columns) {\n        if (!isNull(fixed)) {\n          column.fixed = fixed\n        }\n\n        rowColumns[index] = column\n\n        if (isGroupColumn(column)) {\n          const endIndex = build(column.children, column.fixed, row + 1, result)\n\n          column.key = Symbol('TableColumnGroup')\n          column.headSpan = endIndex - index\n          index = endIndex\n        } else {\n          const validType = column.type && columnTypes.includes(column.type)\n\n          if (validType) {\n            if (existedTypes.has(column.type)) {\n              console.warn(`[vexip-ui:Table] Table has duplicate column with type '${column.type}'`)\n            }\n\n            existedTypes.add(column.type)\n          }\n\n          let key = column.key\n\n          if (isNull(key)) {\n            if (validType) {\n              key = `__vxp_${column.type}`\n            } else {\n              console.warn('[vexip-ui:Table] Table column requires key prop, but missing')\n\n              key = getIndexId()\n            }\n          }\n\n          column.key = key\n          baseColumns.push(column)\n          index += 1\n        }\n\n        columnMap.set(column.key, column)\n      }\n\n      return index\n    }\n\n    build(columns, undefined, 0, allColumns)\n\n    let length = 0\n\n    for (const rowColumns of allColumns) {\n      length = Math.max(rowColumns.length, length)\n    }\n\n    for (const rowColumns of allColumns) {\n      if (rowColumns.length) {\n        getLast(rowColumns)!.last = true\n      }\n\n      rowColumns.length = length\n    }\n\n    for (let i = 0, rowCount = allColumns.length; i < length; ++i) {\n      let span = 1\n\n      for (let j = rowCount - 1; j >= 0; --j) {\n        const column = allColumns[j][i]\n\n        if (column) {\n          column.colIndex = i\n          column.rowSpan = span\n          span = 1\n        } else {\n          ++span\n        }\n      }\n    }\n\n    return { allColumns, baseColumns, columnMap }\n  }\n\n  function setColumns(columns: TableColumnRawOptions[]) {\n    const { widths, sorters, filters } = state\n    const { allColumns, baseColumns, columnMap } = buildColumns(columns)\n\n    const normalColumns: ColumnWithKey[] = []\n    const rightFixedColumns: ColumnWithKey[] = []\n    const leftFixedColumns: ColumnWithKey[] = []\n\n    for (let i = 0, len = baseColumns.length; i < len; ++i) {\n      const column = baseColumns[i]\n\n      column.first = false\n      column.last = false\n      column.index = i\n\n      if (column.type && columnTypes.includes(column.type)) {\n        switch (column.type) {\n          case 'order': {\n            column.truthIndex = !!column.truthIndex\n\n            if (typeof column.orderLabel !== 'function') {\n              column.orderLabel = defaultIndexLabel\n            }\n\n            if (isNull(column.width)) {\n              column.width = 60\n              column.minWidth = 60\n            }\n\n            break\n          }\n          case 'selection': {\n            column.selectionSize = column.selectionSize || 'default'\n\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) {\n              column.width = 40\n              column.minWidth = 40\n            }\n\n            break\n          }\n          case 'expand': {\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) {\n              column.width = 40\n              column.minWidth = 40\n            }\n\n            break\n          }\n          case 'drag': {\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) {\n              column.width = 40\n              column.minWidth = 40\n            }\n\n            break\n          }\n        }\n\n        if (!column.key) {\n          column.key = `__vxp_${column.type}-${i}`\n        }\n      } else {\n        column.type = undefined\n      }\n\n      // 独立属性解析时注意隔断同对象引用\n      widths.set(\n        column.key,\n        typeof column.width === 'string'\n          ? COLUMN_DEFAULT_MIN_WIDTH\n          : Math.round(\n            boundRange(\n              column.width || COLUMN_DEFAULT_WIDTH,\n              column.minWidth || COLUMN_DEFAULT_MIN_WIDTH,\n              column.maxWidth || Infinity,\n            ),\n          ),\n      )\n      sorters.set(column.key, parseSorter(column.sorter))\n      filters.set(column.key, parseFilter(column.filter))\n\n      const fixed = column.fixed\n\n      if (fixed === true || fixed === 'left') {\n        leftFixedColumns.push(column)\n      } else if (fixed === 'right') {\n        rightFixedColumns.push(column)\n      } else {\n        normalColumns.push(column)\n      }\n    }\n\n    if (state.allColumns.length > allColumns.length) {\n      for (let i = allColumns.length - 1, len = state.allColumns.length; i < len; ++i) {\n        state.rowMap.delete(`${TABLE_HEAD_PREFIX}${i}`)\n      }\n    }\n\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\n      const rowKey = `${TABLE_HEAD_PREFIX}${i}`\n\n      state.rowMap.set(rowKey, createMinRowState(rowKey))\n    }\n\n    state.columnMap = columnMap\n    state.columns = Array.from(leftFixedColumns).concat(normalColumns, rightFixedColumns)\n    state.normalColumns = normalColumns\n    state.allColumns = allColumns\n\n    if (state.columns.length) {\n      for (const column of state.columns) {\n        if (!column.type) {\n          column.first = true\n          break\n        }\n      }\n\n      getLast(state.columns)!.last = true\n    }\n\n    if (leftFixedColumns.length) {\n      state.leftFixedColumns = leftFixedColumns\n    }\n\n    if (rightFixedColumns.length) {\n      state.rightFixedColumns = rightFixedColumns\n    }\n  }\n\n  function setColumnProp(key: Key, prop: string, value: any) {\n    if (state.columnMap.has(key)) {\n      ;(state.columnMap.get(key) as any)[prop] = value\n    }\n  }\n\n  function buildSummaryKey(key: Key) {\n    return typeof key === 'symbol' ? key : `${TABLE_FOOT_PREFIX}${key}`\n  }\n\n  function setSummaries(summaries: TableSummaryOptions[]) {\n    summaries = Array.from(summaries).sort((prev, next) => {\n      return (prev.order || 0) - (next.order || 0)\n    })\n\n    const prevKeys = new Set(state.summaries.map(summary => summary.key))\n    const aboveSummaries: SummaryWithKey[] = []\n    const belowSummaries: SummaryWithKey[] = []\n    const summaryMap = new Map<Key, SummaryWithKey>()\n\n    for (let i = 0, len = summaries.length; i < len; ++i) {\n      const summary = { ...summaries[i] } as SummaryWithKey\n\n      let key = summary.key\n\n      if (isNull(key)) {\n        console.error('[vexip-ui:Table] Table summary requires key prop, but missing')\n\n        key = getIndexId()\n      }\n\n      summary.key = key\n      ;(summary.above ? aboveSummaries : belowSummaries).push(summary)\n\n      if (!prevKeys.has(summary.key)) {\n        const rowKey = buildSummaryKey(summary.key)\n\n        state.rowMap.set(rowKey, createMinRowState(rowKey))\n      }\n\n      prevKeys.delete(summary.key)\n      summaryMap.set(summary.key, summary)\n    }\n\n    state.summaries = Array.from(aboveSummaries).concat(belowSummaries)\n    state.summaryMap = summaryMap\n\n    if (aboveSummaries.length) {\n      state.aboveSummaries = aboveSummaries\n    }\n\n    if (belowSummaries.length) {\n      state.belowSummaries = belowSummaries\n    }\n\n    if (prevKeys.size) {\n      for (const key of prevKeys) {\n        state.rowMap.delete(buildSummaryKey(key))\n      }\n    }\n  }\n\n  function setSummaryProp(key: Key, prop: string, value: any) {\n    if (state.summaryMap.has(key)) {\n      ;(state.summaryMap.get(key) as any)[prop] = value\n    }\n  }\n\n  function setDataKey(field: string) {\n    const oldDataKey = state.dataKey\n\n    if (!isNull(field) && oldDataKey !== field) {\n      const { rowData, idMaps } = state\n\n      state.dataKey = field\n\n      rowData.forEach(row => {\n        let key = row.data[field] as Key\n\n        if (isNull(key)) {\n          key = getIndexId()\n        }\n\n        row.key = key\n        idMaps.set(row.data, key)\n      })\n    }\n  }\n\n  function collectUnderRows(row: TableRowState, result: TableRowState[] = []) {\n    if (row.treeExpanded && row.children?.length) {\n      for (const childRow of row.children) {\n        result.push(childRow)\n        collectUnderRows(childRow, result)\n      }\n    }\n\n    return result\n  }\n\n  function setData(data: Data[]) {\n    const clonedData: TableRowState[] = []\n    const rowMap = new Map<Key, TableRowState>()\n    const { allColumns, dataKey, keyConfig, idMaps, disabledTree } = state\n    const oldDataMap = state.rowMap\n    const hidden = !!state.virtual\n\n    const {\n      children: childrenKey,\n      checked: checkedKey,\n      height: heightKey,\n      expanded: expandedKey,\n      treeExpanded: treeExpandedKey,\n    } = keyConfig\n\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\n      const key = `${TABLE_HEAD_PREFIX}${i}`\n\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\n    }\n\n    for (const summary of state.summaries) {\n      const key = buildSummaryKey(summary.key)\n\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\n    }\n\n    const parseRow = (origin: Data[], result: TableRowState[], parent?: TableRowState) => {\n      for (let i = 0, len = origin.length; i < len; ++i) {\n        const item = origin[i]\n\n        let key = item[dataKey] as Key\n\n        if (isNull(key)) {\n          key = idMaps.get(item)!\n\n          if (isNull(key)) {\n            key = getIndexId()\n          }\n        }\n\n        let row: TableRowState\n\n        if (oldDataMap.has(key)) {\n          row = oldDataMap.get(key)!\n\n          const {\n            [checkedKey]: checked,\n            [heightKey]: height,\n            [expandedKey]: expanded,\n            [treeExpandedKey]: treeExpanded,\n          } = row.data !== item ? Object.assign(row.data, item) : row.data\n\n          row.checked = !isNull(checked) ? !!checked : row.checked\n          row.height = !isNull(height) ? toNumber(height) : row.height\n          row.expanded = !isNull(expanded) ? !!expanded : row.expanded\n          row.treeExpanded = !isNull(treeExpanded) ? !!treeExpanded : row.treeExpanded\n        } else {\n          const {\n            [checkedKey]: checked,\n            [heightKey]: height,\n            [expandedKey]: expanded,\n            [treeExpandedKey]: treeExpanded,\n          } = item\n\n          row = {\n            key,\n            hidden,\n            checked: !!checked,\n            height: toNumber(height),\n            expanded: !!expanded,\n            hover: false,\n            expandHeight: 0,\n            index: -1,\n            children: [],\n            depth: 0,\n            treeExpanded: !!treeExpanded,\n            partial: false,\n            dragging: false,\n            listIndex: 0,\n            cellHeights: reactive({}),\n            last: false,\n            expandAnimate: false,\n            data: item,\n          }\n\n          idMaps.set(item, key)\n        }\n\n        if (parent) {\n          row.parent = parent.key\n          row.depth = parent.depth + 1\n        }\n\n        row.children = []\n\n        const children = row.data[childrenKey]\n        children?.length && parseRow(children, row.children, row)\n\n        result.push(row)\n        rowMap.set(key, row)\n      }\n    }\n\n    parseRow(data, clonedData)\n\n    state.rowMap = rowMap\n    state.treeRowData = clonedData\n\n    if (!disabledTree) {\n      flatTreeRows()\n    } else {\n      state.rowData = clonedData\n    }\n\n    state.data = data\n\n    refreshRowIndex()\n    computePartial()\n  }\n\n  function flatTreeRows() {\n    if (state.disabledTree) return\n\n    const rowData: TableRowState[] = []\n\n    for (const row of state.treeRowData) {\n      rowData.push(row)\n      collectUnderRows(row, rowData)\n    }\n\n    state.rowData = rowData\n  }\n\n  function refreshRowDepth() {\n    walkTree(state.treeRowData, (row, depth) => {\n      row.depth = depth\n    })\n  }\n\n  function setCurrentPage(currentPage: number) {\n    state.currentPage = currentPage ?? 1\n  }\n\n  function setPageSize(pageSize: number) {\n    state.pageSize = pageSize || 0\n  }\n\n  function setRowClass(rowClass: ClassType | TableRowPropFn<ClassType>) {\n    state.rowClass = rowClass ?? ''\n  }\n\n  function setRowStyle(rowStyle: StyleType | TableRowPropFn<StyleType>) {\n    state.rowStyle = rowStyle ?? ''\n  }\n\n  function setRowAttrs(rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>) {\n    state.rowAttrs = rowAttrs ?? null!\n  }\n\n  function setCellClass(cellClass: ClassType | TableCellPropFn<ClassType>) {\n    state.cellClass = cellClass ?? ''\n  }\n\n  function setCellStyle(cellStyle: StyleType | TableCellPropFn<StyleType>) {\n    state.cellStyle = cellStyle ?? ''\n  }\n\n  function setCellAttrs(cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>) {\n    state.cellAttrs = cellAttrs ?? null!\n  }\n\n  function setHeadClass(headClass: ClassType | TableHeadPropFn<ClassType>) {\n    state.headClass = headClass ?? ''\n  }\n\n  function setHeadStyle(headStyle: StyleType | TableHeadPropFn<StyleType>) {\n    state.headStyle = headStyle ?? ''\n  }\n\n  function setHeadAttrs(headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>) {\n    state.headAttrs = headAttrs ?? null!\n  }\n\n  function setFootClass(footClass: ClassType | TableFootPropFn<ClassType>) {\n    state.footClass = footClass ?? ''\n  }\n\n  function setFootStyle(footStyle: StyleType | TableFootPropFn<StyleType>) {\n    state.footStyle = footStyle ?? ''\n  }\n\n  function setFootAttrs(footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>) {\n    state.footAttrs = footAttrs ?? null!\n  }\n\n  function setTableWidth(width: number) {\n    width = toNumber(width)\n\n    const { columns, widths, resized } = state\n\n    const hasWidthColumns: ColumnWithKey[] = []\n    const flexColumns: ColumnWithKey[] = []\n\n    let flexWidth = width\n\n    for (let i = 0, len = columns.length; i < len; ++i) {\n      const column = columns[i]\n      const { minWidth, maxWidth } = column\n\n      if (resized.has(column.key)) {\n        flexWidth -= widths.get(column.key)!\n        hasWidthColumns.push(column)\n      } else if (column.width) {\n        if (typeof column.width === 'string') {\n          const percent = boundRange(toNumber(column.width), 0, 100)\n\n          if (percent) {\n            const fixedWidth = Math.round(\n              boundRange(\n                (width * percent) / 100,\n                minWidth || COLUMN_DEFAULT_MIN_WIDTH,\n                maxWidth || Infinity,\n              ),\n            )\n\n            flexWidth -= fixedWidth\n            widths.set(column.key, fixedWidth)\n            hasWidthColumns.push(column)\n          } else {\n            flexColumns.push(column)\n          }\n        } else {\n          const width = Math.round(\n            boundRange(\n              column.width || COLUMN_DEFAULT_WIDTH,\n              minWidth || COLUMN_DEFAULT_MIN_WIDTH,\n              maxWidth || Infinity,\n            ),\n          )\n\n          flexWidth -= width\n          widths.set(column.key, width)\n          hasWidthColumns.push(column)\n        }\n      } else {\n        flexColumns.push(column)\n      }\n    }\n\n    const flexColumnCount = flexColumns.length\n    const flexWidths = distributeWidths(flexColumns, flexWidth)\n\n    let usedWidth = 0\n\n    for (let i = 0; i < flexColumnCount; ++i) {\n      const column = flexColumns[i]\n      const width = Math[i % 2 ? 'ceil' : 'floor'](flexWidths[i])\n\n      if (i < flexColumnCount - 1) {\n        usedWidth += width\n      }\n\n      widths.set(column.key, width)\n    }\n\n    if (flexColumnCount && flexWidth >= usedWidth + getLast(flexWidths)!) {\n      widths.set(getLast(flexColumns)!.key, flexWidth - usedWidth)\n    }\n\n    state.width = width\n  }\n\n  function distributeWidths(columns: ColumnWithKey[], totalWidth: number): number[] {\n    const count = columns.length\n    const baseWidth = Math.max(totalWidth / count, COLUMN_DEFAULT_WIDTH)\n\n    const widths = columns.map(col => {\n      let w = baseWidth\n      if (col.minWidth != null) w = Math.max(w, col.minWidth)\n      if (col.maxWidth != null) w = Math.min(w, col.maxWidth)\n      return w\n    })\n\n    const currentTotal = widths.reduce((a, b) => a + b, 0)\n    let delta = totalWidth - currentTotal\n\n    const canGrow = (i: number) => columns[i].maxWidth == null || widths[i] < columns[i].maxWidth!\n    const canShrink = (i: number) => columns[i].minWidth == null || widths[i] > columns[i].minWidth!\n\n    const epsilon = 0.1\n    let adjusted = false\n\n    while (Math.abs(delta) > epsilon) {\n      const adjustableIndices = widths\n        .map((_, i) => {\n          if (delta > 0 && canGrow(i)) return i\n          if (delta < 0 && canShrink(i)) return i\n          return -1\n        })\n        .filter(i => i !== -1)\n\n      if (adjustableIndices.length === 0) {\n        adjusted = false\n        break\n      }\n\n      const adjustment = delta / adjustableIndices.length\n      for (const i of adjustableIndices) {\n        const old = widths[i]\n        let next = old + adjustment\n\n        if (columns[i].minWidth != undefined) next = Math.max(next, columns[i].minWidth!)\n        if (columns[i].maxWidth != undefined) next = Math.min(next, columns[i].maxWidth!)\n\n        delta -= next - old\n        widths[i] = next\n      }\n\n      adjusted = true\n    }\n\n    // delta > 0 且无法再调整时，强行补给最后一列\n    if (!adjusted && delta > epsilon) {\n      widths[count - 1] += delta\n    }\n\n    return widths\n  }\n\n  function setRowHeight(height: number) {\n    state.rowHeight = height\n  }\n\n  function setRowMinHeight(height: number) {\n    state.rowMinHeight = height\n  }\n\n  function setCellHeight(rowKey: Key, columnKey: Key, height: number) {\n    if (!isNull(height) && state.rowMap.has(rowKey)) {\n      state.rowMap.get(rowKey)!.cellHeights[columnKey] = height\n    }\n  }\n\n  function setRowDraggable(draggable: boolean) {\n    state.rowDraggable = !!draggable\n  }\n\n  function setBodyYScroll(scroll: number) {\n    state.bodyYScroll = scroll\n  }\n\n  function setBodyXScroll(scroll: number) {\n    state.bodyXScroll = scroll\n  }\n\n  function setBorder(able: boolean) {\n    state.border = !!able\n  }\n\n  function setStripe(able: boolean) {\n    state.stripe = !!able\n  }\n\n  function setHighlight(able: boolean) {\n    state.highlight = !!able\n  }\n\n  function setVirtual(virtual: boolean) {\n    state.virtual = !!virtual\n  }\n\n  function setRowProp(key: Key, prop: Exclude<keyof TableRowState, 'key'>, value: any) {\n    const row = state.rowMap.get(key)\n\n    if (row && row[prop] !== value) {\n      ;(row as any)[prop] = value\n    }\n  }\n\n  function setLocale(locale: LocaleConfig['table']) {\n    state.locale = locale\n  }\n\n  function setTooltipTheme(theme: TooltipTheme) {\n    state.tooltipTheme = theme\n  }\n\n  function setTooltipWidth(theme: number | string) {\n    state.tooltipWidth = theme\n  }\n\n  function setSingleSorter(able: boolean) {\n    state.singleSorter = !!able\n  }\n\n  function setSingleFilter(able: boolean) {\n    state.singleFilter = !!able\n  }\n\n  function setDragging(dragging: boolean) {\n    state.dragging = !!dragging\n  }\n\n  function setKeyConfig(keyConfig: Required<TableKeyConfig>) {\n    state.keyConfig = keyConfig\n  }\n\n  function setDisabledTree(disabled: boolean) {\n    state.disabledTree = !!disabled\n  }\n\n  function setNoCascaded(noCascaded: boolean) {\n    state.noCascaded = !!noCascaded\n  }\n\n  function setColResizable(resizable: boolean | TableColResizeType) {\n    state.colResizable = resizable === true ? 'lazy' : resizable\n  }\n\n  function setCustomSorter(able: boolean) {\n    state.customSorter = !!able\n  }\n\n  function setCustomFilter(able: boolean) {\n    state.customFilter = !!able\n  }\n\n  function setColumnResizing(resizing: boolean) {\n    state.colResizing = !!resizing\n  }\n\n  function setResizeLeft(left: number) {\n    state.resizeLeft = left\n  }\n\n  function setExpandRenderer(renderer: ExpandRenderFn | null) {\n    state.expandRenderer = renderer\n  }\n\n  function setCellSpan(spanFn: TableCellSpanFn | null) {\n    state.cellSpan = spanFn\n  }\n\n  function setSidePadding(padding: number | number[]) {\n    state.sidePadding = Array.isArray(padding) ? padding : [padding, padding]\n  }\n\n  function setBorderWidth(width: number) {\n    state.borderWidth = Math.max(width, 0)\n  }\n\n  function setDataFilter(filter: (data: Data) => boolean) {\n    state.dataFilter = filter\n  }\n\n  function setEllipsis(ellipsis: boolean) {\n    state.ellipsis = ellipsis\n  }\n\n  function setLocked(locked: boolean) {\n    state.locked = locked\n  }\n\n  function setBarScrolling(scrolling: boolean) {\n    state.barScrolling = scrolling\n  }\n\n  function setHoveredRowKey(key: Key | null) {\n    if (state.hoveredRowKey !== key) {\n      const prevHoveredRow = state.hoveredRowKey && state.rowMap.get(state.hoveredRowKey)\n      const newHoveredRow = key && state.rowMap.get(key)\n\n      if (prevHoveredRow) {\n        prevHoveredRow.hover = false\n      }\n\n      if (newHoveredRow) {\n        newHoveredRow.hover = true\n      }\n    }\n\n    state.hoveredRowKey = key\n  }\n\n  function handleSort(key: Key, type: ParsedTableSorterOptions['type']) {\n    if (state.sorters.has(key)) {\n      if (state.singleSorter && type) {\n        clearSort()\n      }\n\n      state.sorters.get(key)!.type = type\n    }\n  }\n\n  function clearSort() {\n    const sorters = state.sorters\n\n    for (const sorter of sorters.values()) {\n      sorter.type = null\n    }\n  }\n\n  function handleFilter(key: Key, active: ParsedFilterOptions['active']) {\n    if (state.filters.has(key)) {\n      if (state.singleFilter && (Array.isArray(active) ? active.length : active)) {\n        clearFilter()\n      }\n\n      state.filters.get(key)!.active = Array.isArray(active) ? Array.from(active) : active\n    }\n  }\n\n  function clearFilter() {\n    const filters = state.filters\n\n    for (const filter of filters.values()) {\n      filter.active = null\n\n      for (const option of filter.options) {\n        option.active = false\n      }\n    }\n  }\n\n  const { updateCheckedUpward, updateCheckedDown } = useCascadedChecked({\n    getNode: key => state.rowMap.get(key),\n    disableNode: row => disableCheckRows.value.has(row.key),\n  })\n\n  function computeChecked(key: Key) {\n    const { rowMap, rowData } = state\n    const { disableCheckRows } = getters\n\n    if (!rowMap.has(key)) return\n\n    const rowList = [rowMap.get(key)!].concat(\n      // 需要包含被禁用且被勾选的节点\n      rowData.filter(row => disableCheckRows.has(row.key) && row.checked),\n    )\n\n    for (let i = 0, len = rowList.length; i < len; ++i) {\n      updateCheckedUpward(rowList[i].key)\n      updateCheckedDown(rowList[i].key)\n    }\n  }\n\n  function handleCheck(key: Key, checked: boolean, single = false) {\n    const { rowMap, noCascaded } = state\n    const { disableCheckRows } = getters\n    const row = rowMap.get(key)\n\n    if (!row) return\n\n    if (single) {\n      clearCheckAll(true)\n      row.checked = !!checked\n    }\n\n    if (!disableCheckRows.has(key)) {\n      row.checked = !!checked\n      row.partial = false\n    }\n\n    !noCascaded && computeChecked(key)\n    computePartial()\n  }\n\n  function handleCheckAll() {\n    const { rowData, checkedAll } = state\n    const { disableCheckRows } = getters\n\n    let checked = !checkedAll\n\n    // 阻断 disabled 元素对全选的影响\n    if (disableCheckRows.size) {\n      // 由于被禁用的元素不可被操作，如果存在被禁用的元素且该状态为未被选中，则全选时仍然是 partial 状态\n      // 假设除了禁用的元素，其余元素均为选中状态（此时对于用户来说属于已经全选，点击的期望是取消全选）\n      let partialCheckedAll = true\n\n      for (const row of rowData) {\n        // 检查是否存在非禁用的且未被选中的元素（如有则证明现在不是全选，用户点击的期望是进行全选）\n        if (!disableCheckRows.has(row.key) && !row.checked) {\n          partialCheckedAll = false\n\n          break\n        }\n      }\n\n      checked = !partialCheckedAll\n    }\n\n    for (const row of rowData) {\n      if (!disableCheckRows.has(row.key)) {\n        row.checked = checked\n      }\n    }\n\n    state.checkedAll = checked\n    state.partial = false\n\n    computePartial()\n  }\n\n  function clearCheckAll(includeDisabled = false) {\n    const { rowData } = state\n    const { disableCheckRows } = getters\n\n    for (const row of rowData) {\n      if (includeDisabled || !disableCheckRows.has(row.key)) {\n        row.checked = false\n      }\n\n      if (includeDisabled) {\n        row.partial = false\n      }\n    }\n\n    state.checkedAll = false\n    state.partial = false\n\n    !includeDisabled && computePartial()\n  }\n\n  function computePartial() {\n    const data = state.rowData\n\n    let hasChecked = false\n    let hasNotChecked = false\n    let partial = false\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const row = data[i]\n\n      if (row.checked) {\n        hasChecked = true\n      } else {\n        hasNotChecked = true\n      }\n\n      if (hasChecked && hasNotChecked) {\n        partial = true\n\n        break\n      }\n    }\n\n    if (hasChecked && !partial) {\n      state.checkedAll = true\n    } else {\n      state.checkedAll = false\n    }\n\n    state.partial = partial\n  }\n\n  function setRenderRows(start: number, end: number, force = false) {\n    const { startRow, endRow, heightBITree, virtualData } = state\n\n    if (!force && start === startRow && end === endRow) return\n\n    const { processedData } = getters\n\n    if (!processedData.length) {\n      virtualData.length = 0\n      return\n    }\n\n    const prevData = new Set([...virtualData])\n    const added: TableRowState[] = []\n    const removed: TableRowState[] = []\n\n    for (let i = 0, len = processedData.length; i < len; ++i) {\n      const data = processedData[i]\n\n      data.hidden = !(i >= start && i < end)\n\n      if (data.hidden) {\n        data.hover = false\n\n        if (prevData.has(data)) {\n          removed.push(data)\n        }\n      } else if (!prevData.has(data)) {\n        added.push(data)\n      }\n\n      prevData.delete(data)\n    }\n\n    removed.push(...prevData)\n\n    const length = Math.min(added.length, removed.length)\n\n    for (let i = 0; i < length; ++i) {\n      virtualData[virtualData.indexOf(removed[i])] = added[i]\n    }\n\n    if (added.length > removed.length) {\n      virtualData.push(...added.slice(length))\n    } else if (added.length < removed.length) {\n      state.virtualData = virtualData.filter(data => !removed.includes(data))\n    }\n\n    state.padTop = heightBITree?.sum(start) ?? 0\n    state.startRow = start\n    state.endRow = end\n  }\n\n  function handleExpand(key: Key, expanded: boolean) {\n    const { rowMap } = state\n    const { disableExpandRows } = getters\n\n    if (rowMap.has(key) && !disableExpandRows.has(key)) {\n      rowMap.get(key)!.expanded = !!expanded\n    }\n  }\n\n  function handleDrag(key: Key, dragging: boolean) {\n    const { rowMap } = state\n    const { disableDragRows } = getters\n\n    if (rowMap.has(key) && !disableDragRows.has(key)) {\n      rowMap.get(key)!.dragging = !!dragging\n    }\n  }\n\n  function setTreeExpanded(key: Key, expanded: boolean) {\n    if (!usingTree.value) return\n\n    const { rowMap, rowData, virtual } = state\n    const row = rowMap.get(key)\n\n    if (!row?.children?.length) return\n\n    const underRows = collectUnderRows({ ...row, treeExpanded: true })\n\n    if (expanded) {\n      rowData.splice(row.index + 1, 0, ...underRows)\n    } else {\n      rowData.splice(row.index + 1, underRows.length)\n    }\n\n    row.treeExpanded = !!expanded\n\n    refreshRowIndex()\n    virtual && setRenderRows(state.startRow, state.endRow, true)\n  }\n\n  function toggleFilterItemActive(options: {\n    key: Key,\n    value: number | string | null,\n    active?: boolean,\n    disableOthers?: boolean,\n  }) {\n    const { key, value, active = false, disableOthers = false } = options\n\n    if (state.filters.has(key)) {\n      const filterOptions = state.filters.get(key)!.options\n\n      if (disableOthers) {\n        for (let i = 0, len = filterOptions.length; i < len; ++i) {\n          filterOptions[i].active = false\n        }\n      }\n\n      const item = filterOptions.find(item => item.value === value)\n\n      if (item) {\n        item.active = active\n      }\n    }\n  }\n\n  function refreshRowIndex() {\n    const data = state.rowData\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      data[i].index = i\n    }\n  }\n\n  function updateTotalHeight() {\n    const { heightBITree } = state\n\n    if (heightBITree) {\n      state.totalHeight = heightBITree.sum() ?? 0\n    } else {\n      state.totalHeight = 0\n    }\n  }\n\n  function parseSorter(sorter: boolean | TableSorterOptions = false): ParsedTableSorterOptions {\n    const raw = typeof sorter === 'boolean' ? { able: sorter } : sorter\n    const { able = true, type = null, order = 0, method = null } = raw\n\n    return { able, type, order, method }\n  }\n\n  function parseFilter(filter?: TableFilterOptions | null): ParsedFilterOptions {\n    filter = filter || { able: false, options: [] }\n\n    const {\n      able = true,\n      custom = false,\n      multiple = false,\n      active = null,\n      method = null,\n      meta,\n    } = filter\n    // 防止内部变化触发 deep watch\n    const options = deepClone(filter.options ?? [])\n    const formattedOptions = []\n\n    for (let i = 0, len = options.length; i < len; ++i) {\n      const item = options[i]\n      const option = typeof item === 'string' ? { value: item } : { ...item }\n\n      option.label = option.label ?? option.value.toString()\n\n      let isActive = false\n\n      if (multiple && Array.isArray(active)) {\n        isActive = active.includes(option.value)\n      } else if (!isNull(active)) {\n        isActive = Object.is(option.value, active)\n      }\n\n      option.active = isActive\n\n      formattedOptions.push(option as { value: string | number, label: string, active: boolean })\n    }\n\n    return { able, custom, meta, options: formattedOptions, multiple, active, method }\n  }\n\n  function filterData(\n    filters: Map<Key, ParsedFilterOptions>,\n    data: TableRowState[],\n    isSingle: boolean,\n  ) {\n    const usedFilter: ParsedFilterOptions[] = []\n    const usedData: TableRowState[] = []\n\n    for (const filter of filters.values()) {\n      const { able, active, method } = filter\n\n      if (able && active && typeof method === 'function') {\n        usedFilter.push(filter)\n\n        if (isSingle) break\n      }\n    }\n\n    const usedFilterCount = usedFilter.length\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const row = data[i]\n\n      let isFilter = true\n\n      for (let j = 0; j < usedFilterCount; j++) {\n        const { active, method } = usedFilter[j]\n\n        isFilter = method!(active! as any, row.data)\n\n        if (!isFilter) {\n          break\n        }\n      }\n\n      if (isFilter) {\n        usedData.push(row)\n      }\n    }\n\n    return usedData\n  }\n\n  function sortData(\n    sorters: Map<Key, ParsedTableSorterOptions>,\n    data: TableRowState[],\n    columns: TableColumnOptions[],\n    isSingle: boolean,\n  ) {\n    const usedSorter = []\n\n    for (const [_key, sorter] of sorters) {\n      const key = _key as keyof TableRowState\n      const { able, type, order, method } = sorter\n\n      if (able && type) {\n        const column = columns.find(item => item.key === key)\n        const accessor = column?.accessor\n\n        usedSorter.push({\n          able,\n          key,\n          order,\n          type,\n          method: method ?? undefined,\n          accessor(row: TableRowState) {\n            if (typeof accessor === 'function') {\n              return accessor(row.data, row.index)\n            }\n\n            return row.data[key]\n          },\n        })\n\n        if (isSingle) break\n      }\n    }\n\n    // 多列排序优先级\n    usedSorter.sort((prev, next) => prev.order - next.order)\n\n    return sortByProps(data, usedSorter)\n  }\n\n  function pageData(currentPage: number, pageSize: number, data: TableRowState[]) {\n    return pageSize > 0 ? data.slice((currentPage - 1) * pageSize, currentPage * pageSize) : data\n  }\n\n  function getParentRow(key: Key) {\n    const { rowMap } = state\n    const row = rowMap.get(key)\n\n    if (!isNull(row?.parent)) {\n      return rowMap.get(row!.parent) ?? null\n    }\n\n    return null\n  }\n\n  let lastColumnWidth: number | undefined\n\n  function handleColumnResize(keys: Key[], newWidth: number) {\n    const { resized, widths, columns, columnMap, width: tableWidth } = state\n    const length = keys.length\n\n    if (!columns.length || !length) return\n\n    const deltaWidth = newWidth / length\n    const lastKey = getLast(columns)!.key\n\n    for (let i = 0; i < length; ++i) {\n      const key = keys[i]\n      const column = columnMap.get(key) as ColumnWithKey\n\n      if (!column) continue\n\n      const width =\n        length === 1 ? Math.round(deltaWidth) : Math[i % 2 ? 'ceil' : 'floor'](deltaWidth)\n      const { minWidth, maxWidth } = column\n\n      resized.add(key)\n      widths.set(key, boundRange(width, minWidth || COLUMN_DEFAULT_MIN_WIDTH, maxWidth || Infinity))\n    }\n\n    let totalWidth = 0\n\n    for (const width of widths.values()) {\n      totalWidth += width\n    }\n\n    totalWidth = toFixed(totalWidth, 1)\n\n    if (\n      totalWidth - widths.get(lastKey)! <\n      tableWidth - (lastColumnWidth ?? widths.get(lastKey)!)\n    ) {\n      if (!lastColumnWidth) {\n        lastColumnWidth = widths.get(lastKey)\n      }\n\n      widths.set(lastKey, widths.get(lastKey)! + tableWidth - totalWidth)\n    } else if (lastColumnWidth) {\n      widths.set(lastKey, lastColumnWidth!)\n      lastColumnWidth = undefined\n    }\n  }\n\n  function computeCellSpan() {\n    const {\n      normalColumns,\n      leftFixedColumns,\n      rightFixedColumns,\n      aboveSummaries,\n      belowSummaries,\n      rowData,\n      cellSpanMap,\n      collapseMap,\n    } = state\n    const { processedData } = getters\n\n    for (const type of ['left', 'default', 'right'] as const) {\n      cellSpanMap.set(type, new Map())\n      collapseMap.set(type, new Map())\n    }\n\n    function setCellSpan(\n      rowIndex: number,\n      columnIndex: number,\n      fixed: 'left' | 'default' | 'right',\n      getSpan: () => Required<CellSpanResult>,\n      prefix = '',\n    ) {\n      const masterKey = `${prefix}${rowIndex},${columnIndex}`\n      const collapsed = collapseMap.get(fixed)!\n\n      if (collapsed.has(masterKey)) {\n        cellSpanMap.get(fixed)!.set(masterKey, { colSpan: 0, rowSpan: 0 })\n        return\n      }\n\n      const span = getSpan()\n      const { colSpan, rowSpan } = span\n\n      for (let i = 0; i < colSpan; ++i) {\n        for (let j = 0; j < rowSpan; ++j) {\n          if (!i && !j) continue\n\n          const key = `${prefix}${rowIndex + j},${columnIndex + i}`\n\n          let masterSet = collapsed.get(key)\n\n          if (!masterSet) {\n            masterSet = new Set()\n            collapsed.set(key, masterSet)\n          }\n\n          masterSet.add(masterKey)\n        }\n      }\n\n      cellSpanMap.get(fixed)!.set(masterKey, span)\n    }\n\n    for (const columns of [normalColumns, leftFixedColumns, rightFixedColumns]) {\n      if (!columns.length) continue\n\n      const fixed = columns[0].fixed === true ? 'left' : columns[0].fixed || 'default'\n      const columnFixed = columns[0].fixed === true ? 'left' : columns[0].fixed || undefined\n\n      const left = state.leftFixedColumns.length\n      const right = state.allColumns[0].length - state.rightFixedColumns.length\n\n      let allColumns: ColumnRawWithKey[][]\n\n      if (fixed === 'left') {\n        allColumns = state.allColumns.map(columns => columns.slice(0, left))\n      } else if (fixed === 'right') {\n        allColumns = state.allColumns.map(columns =>\n          columns.slice(right, state.allColumns[0].length),\n        )\n      } else {\n        allColumns = state.allColumns.map(columns => columns.slice(left, right))\n      }\n\n      for (let i = 0, len1 = allColumns.length; i < len1; ++i) {\n        const rowColumns = allColumns[i]\n\n        for (let j = 0, len2 = rowColumns.length; j < len2; ++j) {\n          const column = rowColumns[j]\n\n          if (!column) continue\n\n          const fixed = column.fixed === true ? 'left' : column.fixed || 'default'\n\n          setCellSpan(\n            i,\n            j,\n            fixed,\n            () => {\n              const columns =\n                fixed === 'left'\n                  ? leftFixedColumns\n                  : fixed === 'right'\n                    ? rightFixedColumns\n                    : normalColumns\n              const colSpan = boundRange(column.headSpan ?? 1, 0, columns.length - j)\n              const span = { colSpan, rowSpan: column.rowSpan }\n\n              return span\n            },\n            'h',\n          )\n        }\n      }\n\n      for (let colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {\n        const column = columns[colIndex]\n\n        for (const row of rowData) {\n          setCellSpan(row.index, column.index, fixed, () => {\n            let result: ReturnType<ColumnCellSpanFn>\n\n            if (typeof column.cellSpan === 'function') {\n              result = column.cellSpan({\n                row: row.data,\n                index: row.index,\n                fixed: columnFixed,\n              })\n            } else if (typeof state.cellSpan === 'function') {\n              result = state.cellSpan({\n                row: row.data,\n                rowIndex: row.index,\n                column,\n                columnIndex: column.index,\n                fixed: columnFixed,\n              })\n            }\n\n            result = result! || { colSpan: 1, rowSpan: 1 }\n\n            const span = { colSpan: result.colSpan ?? 1, rowSpan: result.rowSpan ?? 1 }\n\n            span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\n            span.rowSpan = boundRange(span.rowSpan, 0, processedData.length - row.listIndex)\n\n            return span\n          })\n        }\n\n        for (const { prefix, summaries } of [\n          { prefix: 'af', summaries: aboveSummaries },\n          { prefix: 'bf', summaries: belowSummaries },\n        ]) {\n          for (let i = 0, len = summaries.length; i < len; ++i) {\n            const summary = summaries[i]\n\n            setCellSpan(\n              i,\n              column.index,\n              fixed,\n              () => {\n                let result: ReturnType<SummaryCellSpanFn>\n\n                if (typeof summary.cellSpan === 'function') {\n                  result = summary.cellSpan({\n                    column,\n                    index: column.index,\n                    fixed: columnFixed,\n                  })\n                }\n\n                const { colSpan, rowSpan } = result! || { colSpan: 1, rowSpan: 1 }\n                const span = { colSpan: colSpan ?? 1, rowSpan: rowSpan ?? 1 }\n\n                span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\n                span.rowSpan = boundRange(span.rowSpan, 0, summaries.length - i)\n\n                return span\n              },\n              prefix,\n            )\n          }\n        }\n      }\n    }\n  }\n\n  function getCurrentData() {\n    const { treeRowData, disabledTree, keyConfig } = state\n\n    if (disabledTree) {\n      return treeRowData.map(row => ({ ...row.data }))\n    }\n\n    return mapTree(treeRowData, row => ({ ...row.data }), {\n      childField: keyConfig.children as 'children',\n    })\n  }\n\n  function queryRow(keyOrData: Key | Record<any, any>) {\n    const { dataKey, rowMap, idMaps } = state\n\n    let key: Key\n\n    if (typeof keyOrData === 'object') {\n      key = idMaps.get(keyOrData) ?? keyOrData[dataKey]\n    } else {\n      key = keyOrData\n    }\n\n    return isNull(key) ? undefined : rowMap.get(key)\n  }\n\n  type Store = Readonly<{\n    state: Readonly<typeof state>,\n    getters: Readonly<typeof getters>,\n    mutations: Readonly<typeof mutations>,\n  }>\n\n  return { state, getters, mutations } as Store\n}\n\nexport type TableStore = ReturnType<typeof useStore>\n","<script setup lang=\"ts\">\nimport { NativeScroll } from '@/components/native-scroll'\nimport { Renderer } from '@/components/renderer'\nimport { Scrollbar } from '@/components/scrollbar'\n\nimport {\n  computed,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n} from 'vue'\n\nimport TableColumn from './table-column'\nimport TableColumnGroup from './table-column-group'\nimport TableSummary from './table-summary'\nimport TableHead from './table-head.vue'\nimport TableBody from './table-body.vue'\nimport TableFoot from './table-foot.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport {\n  debounce,\n  debounceMinor,\n  getLast,\n  isDefined,\n  isValidNumber,\n  listToMap,\n  nextFrameOnce,\n  noop,\n  removeArrayItem,\n  toNumber,\n} from '@vexip-ui/utils'\nimport { useSetTimeout } from '@vexip-ui/hooks'\nimport { tableProps } from './props'\nimport { useStore } from './store'\nimport { DropType, TABLE_ACTIONS, TABLE_SLOTS, TABLE_STORE } from './symbol'\n\nimport type { Slots } from 'vue'\nimport type { StyleType } from '@vexip-ui/config'\nimport type { NativeScrollExposed, NativeScrollPayload } from '@/components/native-scroll'\nimport type { ScrollbarExposed } from '@/components/scrollbar'\nimport type {\n  Key,\n  MouseEventType,\n  MoveEventType,\n  StoreOptions,\n  TableCellPayload,\n  TableColResizePayload,\n  TableColumnGroupOptions,\n  TableColumnOptions,\n  TableFootPayload,\n  TableHeadPayload,\n  TableKeyConfig,\n  TableRowInstance,\n  TableRowPayload,\n  TableRowState,\n  TableSlots,\n  TableSummaryOptions,\n} from './symbol'\n\nconst defaultKeyConfig: Required<TableKeyConfig> = {\n  id: 'id',\n  children: 'children',\n  checked: 'checked',\n  height: 'height',\n  expanded: 'expanded',\n  treeExpanded: 'treeExpanded',\n}\n\ndefineOptions({ name: 'Table' })\n\nconst _props = defineProps(tableProps)\nconst props = useProps('table', _props, {\n  locale: null,\n  columns: {\n    default: () => [],\n    static: true,\n  },\n  summaries: {\n    default: () => [],\n    static: true,\n  },\n  data: {\n    default: () => [],\n    static: true,\n  },\n  width: null,\n  height: null,\n  minHeight: null,\n  rowClass: null,\n  rowStyle: null,\n  rowAttrs: null,\n  stripe: false,\n  border: false,\n  highlight: false,\n  useXBar: false,\n  useYBar: false,\n  barFade: 1500,\n  rowDraggable: false,\n  rowHeight: {\n    default: null,\n    validator: value => value > 0,\n  },\n  rowMinHeight: {\n    default: 36,\n    validator: value => value > 0,\n  },\n  virtual: false,\n  bufferCount: {\n    default: 5,\n    validator: value => value >= 0,\n  },\n  scrollClass: () => ({}),\n  expandRenderer: {\n    default: null,\n    isFunc: true,\n  },\n  currentPage: {\n    default: 1,\n    validator: value => value > 0,\n    static: true,\n  },\n  pageSize: 0,\n  transparent: false,\n  tooltipTheme: {\n    default: 'dark',\n    validator: value => ['light', 'dark'].includes(value),\n  },\n  tooltipWidth: 500,\n  singleSorter: false,\n  singleFilter: false,\n  cellClass: null,\n  cellStyle: null,\n  cellAttrs: null,\n  headClass: null,\n  headStyle: null,\n  headAttrs: null,\n  footClass: null,\n  footStyle: null,\n  footAttrs: null,\n  customSorter: false,\n  customFilter: false,\n  keyConfig: () => ({}),\n  disabledTree: false,\n  rowIndent: '16px',\n  noCascaded: false,\n  colResizable: false,\n  cellSpan: {\n    default: null,\n    isFunc: true,\n  },\n  sidePadding: 0,\n  icons: () => ({}),\n  borderWidth: 1,\n  dataFilter: {\n    default: null,\n    isFunc: true,\n  },\n  noTransition: false,\n  ellipsis: false,\n  slots: () => ({}),\n})\n\n// only for dnd end payload\nconst emit = defineEmits(['update:data'])\n\nconst slots = defineSlots<TableSlots>()\n\nconst nh = useNameHelper('table')\nconst { timer } = useSetTimeout()\n\nconst bodyHeight = ref<number | undefined>(props.height)\nconst bodyMinHeight = ref(props.height || 0)\nconst xScrollEnabled = ref(false)\nconst yScrollEnabled = ref(false)\nconst xScrollPercent = ref(0)\nconst yScrollPercent = ref(0)\nconst headHeight = ref(0)\nconst footHeight = ref(0)\nconst indicatorShow = ref(false)\nconst indicatorType = ref(DropType.BEFORE)\nconst tempColumns = reactive(new Set<TableColumnGroupOptions | TableColumnOptions>())\nconst tempSummaries = reactive(new Set<TableSummaryOptions>())\nconst tableWidth = ref<number | string>()\nconst hasDragColumn = ref(false)\nconst bodyWidth = ref(0)\n\nconst wrapper = ref<HTMLElement>()\nconst mainScroll = ref<NativeScrollExposed>()\nconst xHeadScroll = ref<NativeScrollExposed>()\nconst xAboveScroll = ref<NativeScrollExposed>()\nconst xBelowScroll = ref<NativeScrollExposed>()\nconst thead = ref<HTMLElement>()\nconst aboveTfoot = ref<HTMLElement>()\nconst belowTfoot = ref<HTMLElement>()\nconst indicator = ref<HTMLElement>()\nconst xScrollbar = ref<ScrollbarExposed>()\nconst yScrollbar = ref<ScrollbarExposed>()\n\nlet isMounted = false\n\nconst locale = useLocale('table', toRef(props, 'locale'))\nconst keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\nconst allColumns = computed(() => Array.from(tempColumns))\nconst allSummaries = computed(() => Array.from(tempSummaries))\n\nconst syncToStoreProps = [\n  'rowClass',\n  'rowStyle',\n  'rowAttrs',\n  'cellClass',\n  'cellStyle',\n  'cellAttrs',\n  'headClass',\n  'headStyle',\n  'headAttrs',\n  'footClass',\n  'footStyle',\n  'footAttrs',\n  'border',\n  'stripe',\n  'highlight',\n  'currentPage',\n  'pageSize',\n  'rowHeight',\n  'rowMinHeight',\n  'rowDraggable',\n  'tooltipTheme',\n  'tooltipWidth',\n  'singleSorter',\n  'singleFilter',\n  'customSorter',\n  'customFilter',\n  'noCascaded',\n  'colResizable',\n  'expandRenderer',\n  'cellSpan',\n  'sidePadding',\n  'borderWidth',\n  'dataFilter',\n  'ellipsis',\n] as const\n\nconst store = useStore({\n  ...(syncToStoreProps.reduce(\n    (prev, current) => ((prev[current] = props[current]), prev),\n    {} as any,\n  ) as StoreOptions),\n  columns: allColumns.value,\n  summaries: allSummaries.value,\n  data: props.data,\n  dataKey: keyConfig.value.id,\n  virtual: props.virtual,\n  locale: locale.value,\n  keyConfig: keyConfig.value,\n  disabledTree: props.disabledTree,\n  colResizable: props.colResizable === true ? 'lazy' : props.colResizable,\n  sidePadding: Array.isArray(props.sidePadding)\n    ? props.sidePadding\n    : [props.sidePadding, props.sidePadding],\n})\n\nprovide(TABLE_STORE, store)\nprovide(TABLE_ACTIONS, {\n  increaseColumn,\n  decreaseColumn,\n  increaseSummary,\n  decreaseSummary,\n  getTableElement,\n  refreshXScroll,\n  emitRowCheck,\n  emitAllRowCheck,\n  emitRowExpand,\n  emitRowTreeExpand,\n  emitRowFilter,\n  emitRowSort,\n  handleRowDragStart,\n  handleRowDragOver,\n  handleRowDrop,\n  handleRowDragEnd,\n  emitRowEvent,\n  emitCellEvent,\n  emitHeadEvent,\n  emitColResize,\n  emitFootEvent,\n  hasIcon: name => !!props.icons[name],\n  getIcon: name => props.icons[name],\n  renderTableSlot,\n  runInLocked,\n  updateColumns: () => debounceMinor(updateColumns),\n  setColumnProp,\n  updateSummaries: () => debounceMinor(updateSummaries),\n  setSummaryProp,\n})\nprovide(TABLE_SLOTS, slots as Slots)\n\nconst { state, getters, mutations } = store\n\nconst mergedLocked = computed(() => props.noTransition || state.locked || state.barScrolling)\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('stripe')]: props.stripe,\n    [nh.bm('border')]: props.border,\n    [nh.bm('highlight')]: props.highlight,\n    [nh.bm('use-y-bar')]: props.useYBar,\n    [nh.bm('transparent')]: props.transparent,\n    [nh.bm('virtual')]: props.virtual,\n    [nh.bm('col-resizable')]: props.colResizable,\n    [nh.bm('col-resizing')]: state.colResizing,\n    [nh.bm('locked')]: mergedLocked.value,\n    [nh.bm('above-foot')]: state.aboveSummaries.length,\n    [nh.bm('below-foot')]: state.belowSummaries.length,\n    [nh.bm('using-bar')]: state.barScrolling,\n  }\n})\nconst style = computed(() => {\n  const width = tableWidth.value ?? props.width\n  const [padLeft, padRight] = state.sidePadding\n\n  const style: StyleType = {\n    [nh.cv('row-indent-width')]:\n      typeof props.rowIndent === 'number' ? `${props.rowIndent}px` : props.rowIndent,\n    [nh.cv('b-width')]: `${props.borderWidth}px`,\n    [nh.cv('viewport-width')]: `${bodyWidth.value}px`,\n  }\n\n  if (padLeft) {\n    style[nh.cv('side-pad-left')] = `${padLeft}px`\n  }\n\n  if (padRight) {\n    style[nh.cv('side-pad-right')] = `${padRight}px`\n  }\n\n  if (isDefined(width)) {\n    if (typeof width === 'number' || isValidNumber(width, true)) {\n      style.width = `${width}px`\n      style.minWidth = `${width}px`\n    } else {\n      style.width = width\n    }\n  }\n\n  return style\n})\nconst useXScroll = computed(() => {\n  return !!(\n    isDefined(props.width) ||\n    state.leftFixedColumns.length ||\n    state.rightFixedColumns.length\n  )\n})\nconst bodyScrollHeight = computed(() => {\n  const { totalHeight } = state\n\n  return bodyHeight.value ? Math.min(bodyHeight.value, totalHeight) : undefined\n})\nconst xBarLength = computed(() => mainScroll.value?.xBarLength || 35)\nconst yBarLength = computed(() => {\n  const { totalHeight } = state\n\n  if (bodyScrollHeight.value && totalHeight) {\n    return Math.max(Math.min((bodyScrollHeight.value / totalHeight) * 100, 99), 5) || 35\n  }\n\n  return 35\n})\nconst totalWidths = computed(() => {\n  return (\n    (getLast(getters.totalWidths) || 0) + (state.sidePadding[0] || 0) + (state.sidePadding[1] || 0)\n  )\n})\nconst leftFixedActive = computed(() => xScrollEnabled.value && xScrollPercent.value > 0)\nconst rightFixedActive = computed(() => xScrollEnabled.value && xScrollPercent.value < 100)\n\nconst {\n  setColumns,\n  setSummaries,\n  setData,\n  setDataKey,\n  setTableWidth,\n  setBodyYScroll,\n  setBodyXScroll,\n  setRenderRows,\n  setVirtual,\n  setLocale,\n  setDragging,\n  setKeyConfig,\n  setDisabledTree,\n  setLocked,\n  setBarScrolling,\n  clearSort,\n  clearFilter,\n  refreshRowIndex,\n  clearCheckAll,\n  getParentRow,\n  getCurrentData,\n  flatTreeRows,\n  refreshRowDepth,\n  queryRow,\n  handleCheck,\n  setTreeExpanded,\n} = mutations\n\nwatch(allColumns, updateColumns)\nwatch(allSummaries, updateSummaries)\nwatch(() => keyConfig.value.id, setDataKey)\nwatch(() => props.data, forceRefreshData, { deep: true })\nwatch(() => props.width, computeTableWidth)\nwatch([() => props.height, () => props.borderWidth], () => {\n  nextTick(computeBodyHeight)\n})\nwatch(locale, setLocale, { deep: true })\nwatch(\n  () => props.virtual,\n  value => {\n    setVirtual(value)\n    setData(props.data)\n    refreshPercentScroll()\n  },\n)\nwatch(\n  keyConfig,\n  config => {\n    setKeyConfig(config)\n    setData(props.data)\n  },\n  { deep: true },\n)\nwatch(\n  () => props.disabledTree,\n  value => {\n    setDisabledTree(value)\n    setData(props.data)\n  },\n)\nwatch([() => props.rowHeight, () => props.rowMinHeight], () => {\n  refresh()\n})\n\nfor (const prop of syncToStoreProps) {\n  const watchCallback =\n    mutations[\n      `set${prop.charAt(0).toLocaleUpperCase()}${prop.slice(1)}` as `set${Capitalize<typeof prop>}`\n    ]\n\n  watch(() => props[prop], watchCallback as any)\n}\n\nfunction syncBarScroll() {\n  xScrollbar.value?.handleScroll(xScrollPercent.value)\n  yScrollbar.value?.handleScroll(yScrollPercent.value)\n}\n\nconst handlerResize = debounce(refresh)\n\nonMounted(() => {\n  isMounted = true\n\n  watch(bodyScrollHeight, refreshPercentScroll)\n  refresh()\n  window.addEventListener('resize', handlerResize)\n  nextTick(() => {\n    hasDragColumn.value = getters.hasDragColumn\n  })\n\n  if (mainScroll.value) {\n    xScrollEnabled.value = mainScroll.value.enableXScroll\n    yScrollEnabled.value = mainScroll.value.enableYScroll\n  }\n})\n\nonBeforeUnmount(() => {\n  isMounted = false\n\n  window.removeEventListener('resize', handlerResize)\n})\n\ndefineExpose({\n  bodyHeight,\n  xScrollEnabled,\n  yScrollEnabled,\n  xScrollPercent,\n  yScrollPercent,\n  headHeight,\n  footHeight,\n  indicatorShow,\n  bodyScrollHeight,\n  totalWidths,\n  totalHeight: computed(() => state.totalHeight),\n  locked: mergedLocked,\n\n  store,\n\n  wrapper,\n  mainScroll,\n  xHeadScroll,\n  xAboveScroll,\n  xBelowScroll,\n  thead,\n  aboveTfoot,\n  belowTfoot,\n  indicator,\n  xScrollbar,\n  yScrollbar,\n\n  clearSort,\n  clearFilter,\n  clearSelected: clearCheckAll,\n  refresh,\n  refreshData: forceRefreshData,\n  getSelected,\n  getData: getCurrentData,\n  selectRow: setRowChecked,\n  treeExpandRow: setRowTreeExpanded,\n})\n\nfunction forceRefreshData(data = props.data) {\n  return runInLocked(() => {\n    setData(data)\n    nextTick(() => computeRenderRows(true))\n    refreshPercentScroll()\n  })\n}\n\nfunction computeTableWidth() {\n  const width = props.width\n\n  if (isDefined(width)) {\n    if (typeof width === 'string' && parseFloat(width).toString() !== width) {\n      tableWidth.value = width\n    } else {\n      tableWidth.value = `${toNumber(width)}px`\n    }\n  }\n\n  nextTick(() => {\n    mainScroll.value?.content && setTableWidth(mainScroll.value.content.offsetWidth)\n    refreshXScroll()\n  })\n}\n\nfunction computeBodyHeight() {\n  const height = props.height\n  const minHeight = props.minHeight\n  const borderWidth = props.borderWidth\n\n  let fixedHeight = 0\n\n  if (thead.value || aboveTfoot.value || belowTfoot.value) {\n    if (thead.value) {\n      fixedHeight = thead.value.offsetHeight\n    }\n\n    if (aboveTfoot.value) {\n      fixedHeight += aboveTfoot.value.offsetHeight\n    }\n\n    if (belowTfoot.value) {\n      fixedHeight = belowTfoot.value.offsetHeight\n    }\n  } else {\n    // one row as head placeholder\n    fixedHeight = props.rowHeight || props.rowMinHeight\n  }\n\n  fixedHeight += 2 * borderWidth\n\n  if (isDefined(height)) {\n    bodyHeight.value = height - fixedHeight\n  } else {\n    bodyHeight.value = undefined\n  }\n\n  if (isDefined(minHeight)) {\n    bodyMinHeight.value = Math.min(minHeight, height ?? Infinity) - fixedHeight\n  } else {\n    bodyMinHeight.value = 0\n  }\n}\n\nfunction handleMainScroll(payload: NativeScrollPayload) {\n  if (state.barScrolling) return\n\n  if (payload.type !== 'vertical') {\n    handleXScroll(payload)\n  }\n\n  if (payload.type !== 'horizontal') {\n    handleYScroll(payload)\n  }\n}\n\nfunction handleXScroll({ clientX, percentX }: { clientX: number, percentX: number }) {\n  if (state.barScrolling) return\n\n  xScrollPercent.value = percentX\n  setBodyXScroll(clientX)\n  syncBarScroll()\n  emitEvent(props.onScroll, {\n    type: 'horizontal',\n    client: clientX,\n    percent: percentX,\n  })\n}\n\nfunction handleYScroll({ clientY, percentY }: { clientY: number, percentY: number }) {\n  if (state.barScrolling) return\n\n  yScrollPercent.value = percentY\n  setBodyYScroll(clientY)\n  syncBarScroll()\n  emitYScroll(clientY, percentY)\n}\n\nfunction handleXBarScroll(percent: number) {\n  if (!mainScroll.value) return\n\n  const client = (mainScroll.value.xScrollLimit * percent) / 100\n\n  xScrollPercent.value = percent\n  setBodyXScroll(client)\n  emitEvent(props.onScroll, { type: 'horizontal', client, percent })\n}\n\nfunction handleYBarScroll(percent: number) {\n  const { totalHeight } = state\n  const client = (percent * (totalHeight - (bodyScrollHeight.value ?? 0))) / 100\n\n  yScrollPercent.value = percent\n  setBodyYScroll(client)\n  emitYScroll(client, percent)\n}\n\nfunction emitYScroll(client: number, percent: number) {\n  runInLocked()\n  nextFrameOnce(computeRenderRows)\n  emitEvent(props.onScroll, { type: 'vertical', client, percent })\n}\n\nfunction handleResize() {\n  if (mainScroll.value?.content) {\n    bodyWidth.value = mainScroll.value.content.offsetWidth\n  }\n\n  isMounted && refresh()\n}\n\nfunction increaseColumn(column: TableColumnOptions) {\n  tempColumns.add(column)\n}\n\nfunction decreaseColumn(column: TableColumnOptions) {\n  tempColumns.delete(column)\n}\n\nfunction increaseSummary(summary: TableSummaryOptions) {\n  tempSummaries.add(summary)\n}\n\nfunction decreaseSummary(summary: TableSummaryOptions) {\n  tempSummaries.delete(summary)\n}\n\nfunction updateColumns() {\n  runInLocked(() => {\n    setColumns(allColumns.value)\n    isMounted && computeTableWidth()\n    nextTick(() => {\n      hasDragColumn.value = getters.hasDragColumn\n    })\n  })\n}\n\nfunction setColumnProp(key: Key, prop: string, value: any) {\n  mutations.setColumnProp(key, prop, value)\n}\n\nfunction updateSummaries() {\n  runInLocked(() => {\n    setSummaries(allSummaries.value)\n  })\n}\n\nfunction setSummaryProp(key: Key, prop: string, value: any) {\n  mutations.setSummaryProp(key, prop, value)\n}\n\nfunction getTableElement() {\n  return wrapper.value\n}\n\nfunction refreshXScroll() {\n  mainScroll.value?.refresh()\n  xHeadScroll.value?.refresh()\n  xAboveScroll.value?.refresh()\n  xBelowScroll.value?.refresh()\n}\n\nfunction emitRowCheck(payload: TableRowPayload & { checked: boolean }) {\n  emitEvent(props.onRowCheck, payload)\n}\n\nfunction emitAllRowCheck(checked: boolean, partial: boolean) {\n  emitEvent(props.onRowCheckAll, checked, partial)\n}\n\nfunction emitRowExpand(payload: TableRowPayload & { expanded: boolean }) {\n  emitEvent(props.onRowExpand, payload)\n}\n\nfunction emitRowTreeExpand(payload: TableRowPayload & { expanded: boolean }) {\n  emitEvent(props.onRowTreeExpand, payload)\n}\n\nfunction emitRowFilter() {\n  const { columns, filters } = state\n  const columnMap = listToMap(columns, 'key')\n  const profiles = Array.from(filters.keys())\n    .filter(key => filters.get(key)!.active)\n    .map(key => {\n      const column = columnMap[key as string]\n\n      return {\n        name: column.name,\n        key: column.key,\n        meta: column.meta!,\n        active: filters.get(key)!.active!,\n      }\n    })\n\n  computeRenderRows(true)\n  emitEvent(\n    props.onRowFilter,\n    profiles,\n    getters.filteredData.map(row => row.data),\n  )\n}\n\nfunction emitRowSort() {\n  const { columns, sorters } = state\n  const columnMap = listToMap(columns, 'key')\n  const profiles = Array.from(sorters.keys())\n    .filter(key => sorters.get(key)!.type)\n    .map(key => {\n      const column = columnMap[key as string]\n      const sorter = sorters.get(key)!\n\n      return {\n        name: column.name,\n        key: column.key,\n        meta: column.meta!,\n        type: sorter.type!,\n        order: sorter.order,\n      }\n    })\n\n  computeRenderRows(true)\n  emitEvent(\n    props.onRowSort,\n    profiles,\n    getters.sortedData.map(row => row.data),\n  )\n}\n\nlet dragState: {\n  draggingRow: TableRowState,\n  tableRect: DOMRect,\n  willDropRow: TableRowState | null,\n  dropType: DropType,\n  dropped: boolean,\n} | null\n\nfunction handleRowDragStart(rowInstance: TableRowInstance, event: DragEvent) {\n  dragState = {\n    draggingRow: rowInstance.row,\n    tableRect: wrapper.value!.getBoundingClientRect(),\n    willDropRow: null,\n    dropType: DropType.BEFORE,\n    dropped: false,\n  }\n\n  setDragging(true)\n  emitEvent(props.onRowDragStart, rowInstance.row.data, event)\n}\n\nfunction handleRowDragOver(rowInstance: TableRowInstance, event: DragEvent) {\n  if (!dragState || !rowInstance.el) return\n\n  const dropRowRect = rowInstance.el.getBoundingClientRect()\n  const tableRect = dragState.tableRect\n  const prevPercent = state.disabledTree ? 0.5 : 0.25\n  const nextPercent = state.disabledTree ? 0.5 : 0.75\n  const distance = event.clientY - dropRowRect.top\n  const dropRowHeight = dropRowRect.height\n\n  let dropType: DropType\n  let indicatorTop = -9999\n  let isIndicatorShow = true\n\n  if (distance < dropRowHeight * prevPercent) {\n    dropType = DropType.BEFORE\n    indicatorTop = dropRowRect.top - tableRect.top\n  } else if (distance >= dropRowHeight * nextPercent) {\n    dropType = DropType.AFTER\n    indicatorTop = dropRowRect.bottom - tableRect.top\n  } else {\n    dropType = DropType.INNER\n    isIndicatorShow = false\n  }\n\n  if (indicator.value) {\n    indicator.value.style.top = `${indicatorTop - 2}px`\n  }\n\n  dragState.willDropRow = rowInstance.row\n  dragState.dropType = dropType\n\n  indicatorShow.value = isIndicatorShow\n  indicatorType.value = dropType\n\n  emitEvent(props.onRowDragOver, rowInstance.row.data, event)\n}\n\nfunction isLeftInsideRight(left: TableRowState, right: TableRowState) {\n  if (!left || !right) return true\n\n  while (left) {\n    if (left === right || left.key === right.key) {\n      return true\n    }\n\n    left = getParentRow(left.key)!\n  }\n\n  return false\n}\n\nfunction handleRowDrop(rowInstance: TableRowInstance, event: DragEvent) {\n  if (!dragState) return\n\n  const { draggingRow, willDropRow, dropType } = dragState\n\n  if (!willDropRow || isLeftInsideRight(willDropRow, draggingRow)) return\n\n  let currentKey: Key\n  let parent: TableRowState | null\n\n  if (draggingRow) {\n    parent = getParentRow(draggingRow.key)\n\n    if (!parent) {\n      parent = {\n        children: state.treeRowData,\n      } as TableRowState\n    }\n\n    currentKey = draggingRow.key\n    removeArrayItem(parent.children, item => item.key === currentKey)\n\n    if (!parent.children?.length) {\n      parent.treeExpanded = false\n    }\n  }\n\n  if (dropType === DropType.INNER) {\n    if (!Array.isArray(willDropRow.children)) {\n      willDropRow.children = []\n    }\n\n    const children = Array.from(willDropRow.children)\n\n    children.push(draggingRow)\n\n    willDropRow.children = children\n    willDropRow.treeExpanded = true\n    draggingRow.parent = willDropRow.key\n  } else {\n    currentKey = willDropRow.key\n    parent = getParentRow(willDropRow.key)\n\n    if (!parent) {\n      parent = {\n        children: state.treeRowData,\n      } as TableRowState\n    }\n\n    const index = parent.children.findIndex(row => row.key === currentKey)\n\n    if (~index) {\n      parent.children.splice(+(dropType === DropType.AFTER) + index, 0, draggingRow)\n\n      draggingRow.parent = parent.key\n    }\n  }\n\n  dragState.dropped = true\n\n  refreshRowDepth()\n  flatTreeRows()\n  refreshRowIndex()\n  emitEvent(props.onRowDrop, rowInstance.row.data, dropType!, event)\n}\n\nfunction handleRowDragEnd(event: DragEvent) {\n  if (!dragState) return\n\n  const { draggingRow, dropped } = dragState\n\n  dragState = null\n  indicatorShow.value = false\n\n  nextTick(() => {\n    const allDataPayload = dropped ? getCurrentData() : state.data\n\n    setDragging(false)\n    dropped && emit('update:data', allDataPayload)\n    emitEvent(props.onRowDragEnd, draggingRow.data, allDataPayload, event)\n  })\n}\n\nfunction emitRowEvent(type: MouseEventType, payload: TableRowPayload) {\n  emitEvent(props[`onRow${type}`], payload)\n}\n\nfunction emitCellEvent(type: MouseEventType, payload: TableCellPayload) {\n  emitEvent(props[`onCell${type}`], payload)\n}\n\nfunction emitHeadEvent(type: MouseEventType, payload: TableHeadPayload) {\n  emitEvent(props[`onHead${type}`], payload)\n}\n\nfunction emitColResize(type: MoveEventType, payload: TableColResizePayload) {\n  emitEvent(props[`onColResize${type}`], payload)\n}\n\nfunction emitFootEvent(type: MouseEventType, payload: TableFootPayload) {\n  emitEvent(props[`onFoot${type}`], payload)\n}\n\nfunction computeRenderRows(force = false) {\n  const { totalHeight, bodyYScroll, heightBITree } = state\n  const { processedData } = getters\n  const rowCount = processedData.length\n\n  if (!props.virtual) {\n    setRenderRows(0, rowCount, force)\n\n    return\n  }\n\n  const viewHeight = Math.max(\n    Math.min(bodyHeight.value || 0, bodyScrollHeight.value || 0),\n    bodyMinHeight.value,\n  )\n\n  if (!viewHeight) {\n    setRenderRows(0, 0, force)\n  }\n\n  let viewStart = bodyYScroll\n  let viewEnd = bodyYScroll + viewHeight\n\n  if (viewEnd > totalHeight) {\n    viewEnd = totalHeight\n    viewStart = viewEnd - viewHeight\n  }\n\n  const start = heightBITree.boundIndex(viewStart)\n  const end = heightBITree.boundIndex(viewEnd)\n  const renderStart = Math.max(start - props.bufferCount, 0)\n  const renderEnd = Math.min(end + props.bufferCount + 1, rowCount)\n\n  setRenderRows(renderStart, renderEnd, force)\n}\n\nfunction refresh() {\n  return runInLocked(() => {\n    nextTick(computeTableWidth)\n    setTimeout(() => {\n      computeBodyHeight()\n      refreshPercentScroll()\n      nextFrameOnce(computeRenderRows)\n    }, 0)\n  })\n}\n\nasync function runInLocked(handler = noop, delay = 250) {\n  clearTimeout(timer.locked)\n\n  setLocked(true)\n  await handler()\n\n  return new Promise<void>(resolve => {\n    timer.locked = setTimeout(() => {\n      setLocked(false)\n      resolve()\n    }, delay)\n  })\n}\n\nfunction refreshPercentScroll() {\n  clearTimeout(timer.scroll)\n\n  timer.scroll = setTimeout(() => {\n    const { totalHeight, bodyYScroll } = state\n\n    yScrollPercent.value = Math.max(\n      Math.min((bodyYScroll / (totalHeight - (bodyScrollHeight.value ?? 0) || 1)) * 100, 100),\n      0,\n    )\n    syncBarScroll()\n    nextTick(() => {\n      computeBodyHeight()\n    })\n    runInLocked()\n    nextFrameOnce(computeRenderRows)\n  }, 10)\n}\n\nfunction getSelected() {\n  const data = state.rowData\n  const selectedData = []\n\n  for (let i = 0, len = data.length; i < len; ++i) {\n    const row = data[i]\n\n    if (row.checked) {\n      selectedData.push(row.data)\n    }\n  }\n\n  return selectedData\n}\n\nfunction setRowChecked(keyOrData: Key | Record<any, any>, checked?: boolean) {\n  const row = queryRow(keyOrData)\n\n  if (!row || getters.disableCheckRows.has(row.key)) return\n\n  handleCheck(row.key, checked ?? !row.checked)\n}\n\nfunction setRowTreeExpanded(keyOrData: Key | Record<any, any>, expanded?: boolean) {\n  const row = queryRow(keyOrData)\n\n  if (!row) return\n\n  runInLocked()\n  setTreeExpanded(row.key, expanded ?? !row.treeExpanded)\n}\n\nfunction renderTableSlot({ name }: { name: string }) {\n  return renderSlot(slots as Slots, name)\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"table\"\n    :style=\"style\"\n    :aria-rowcount=\"props.data.length\"\n  >\n    <div v-show=\"false\" role=\"none\" aria-hidden>\n      <slot></slot>\n      <template\n        v-for=\"(column, index) in props.columns\"\n        :key=\"(column as TableColumnOptions).key ?? `__inner-column-${index}`\"\n      >\n        <TableColumnGroup v-if=\"'children' in column\" v-bind=\"column\"></TableColumnGroup>\n        <TableColumn v-else v-bind=\"column\" :id-key=\"column.key\"></TableColumn>\n      </template>\n      <TableSummary\n        v-for=\"({ key, ...others }, index) in props.summaries\"\n        v-bind=\"others\"\n        :key=\"`__inner-summary-${index}`\"\n        :id-key=\"key\"\n      ></TableSummary>\n    </div>\n    <div ref=\"thead\" :class=\"nh.be('head-wrapper')\">\n      <NativeScroll\n        ref=\"xHeadScroll\"\n        inherit\n        mode=\"horizontal\"\n        scroll-only\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\n        :scroll-x=\"state.bodyXScroll\"\n        @scroll=\"handleXScroll\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive,\n          }\"\n        >\n          <TableHead fixed=\"left\"></TableHead>\n        </div>\n        <TableHead></TableHead>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive,\n          }\"\n        >\n          <TableHead fixed=\"right\"></TableHead>\n        </div>\n      </NativeScroll>\n    </div>\n    <div\n      v-if=\"state.aboveSummaries.length\"\n      ref=\"aboveTfoot\"\n      :class=\"[nh.be('foot-wrapper'), nh.bem('foot-wrapper', 'above')]\"\n    >\n      <NativeScroll\n        ref=\"xAboveScroll\"\n        inherit\n        mode=\"horizontal\"\n        scroll-only\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\n        :scroll-x=\"state.bodyXScroll\"\n        @scroll=\"handleXScroll\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive,\n          }\"\n        >\n          <TableFoot fixed=\"left\" above></TableFoot>\n        </div>\n        <TableFoot above></TableFoot>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive,\n          }\"\n        >\n          <TableFoot fixed=\"right\" above></TableFoot>\n        </div>\n      </NativeScroll>\n    </div>\n    <div\n      :class=\"[\n        nh.be('body-wrapper'),\n        state.totalHeight >= bodyMinHeight && nh.bem('body-wrapper', 'scrolled'),\n      ]\"\n      :style=\"{\n        ...(!bodyScrollHeight && state.totalHeight\n          ? {\n            height: `${state.totalHeight}px`,\n            transition:\n              props.noTransition || state.locked\n                ? undefined\n                : `height ${nh.gnv('transition-base')}`,\n          }\n          : undefined),\n        minHeight: `${bodyMinHeight}px`,\n      }\"\n    >\n      <NativeScroll\n        ref=\"mainScroll\"\n        inherit\n        mode=\"both\"\n        scroll-only\n        observe-deep\n        :class=\"[nh.be('wrapper'), props.scrollClass.major]\"\n        :bar-class=\"nh.bem('bar', 'horizontal')\"\n        :height=\"bodyScrollHeight\"\n        :scroll-x=\"state.bodyXScroll\"\n        :scroll-y=\"state.bodyYScroll\"\n        @scroll=\"handleMainScroll\"\n        @x-enabled-change=\"xScrollEnabled = $event\"\n        @y-enabled-change=\"yScrollEnabled = $event\"\n        @resize=\"handleResize\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive,\n          }\"\n          :style=\"{ minHeight: `${state.totalHeight}px` }\"\n        >\n          <TableBody fixed=\"left\">\n            <template v-if=\"slots.empty || props.slots.empty\" #empty>\n              <slot name=\"empty\">\n                <Renderer :renderer=\"props.slots.empty\"></Renderer>\n              </slot>\n            </template>\n          </TableBody>\n        </div>\n        <TableBody>\n          <template v-if=\"slots.empty || props.slots.empty\" #empty>\n            <slot name=\"empty\">\n              <Renderer :renderer=\"props.slots.empty\"></Renderer>\n            </slot>\n          </template>\n        </TableBody>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive,\n          }\"\n          :style=\"{ minHeight: `${state.totalHeight}px` }\"\n        >\n          <TableBody fixed=\"right\">\n            <template v-if=\"slots.empty || props.slots.empty\" #empty>\n              <slot name=\"empty\">\n                <Renderer :renderer=\"props.slots.empty\"></Renderer>\n              </slot>\n            </template>\n          </TableBody>\n        </div>\n      </NativeScroll>\n    </div>\n    <div\n      v-if=\"state.belowSummaries.length\"\n      ref=\"belowTfoot\"\n      :class=\"[nh.be('foot-wrapper'), nh.bem('foot-wrapper', 'below')]\"\n    >\n      <NativeScroll\n        ref=\"xBelowScroll\"\n        inherit\n        mode=\"horizontal\"\n        scroll-only\n        :class=\"[nh.be('wrapper'), props.scrollClass.horizontal]\"\n        :bar-class=\"nh.bem('bar', 'horizontal')\"\n        :bar-fade=\"props.barFade\"\n        :scroll-x=\"state.bodyXScroll\"\n        @scroll=\"handleXScroll\"\n      >\n        <div\n          v-if=\"state.leftFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'left')]: true,\n            [nh.bem('fixed', 'active')]: leftFixedActive,\n          }\"\n        >\n          <TableFoot fixed=\"left\"></TableFoot>\n        </div>\n        <TableFoot></TableFoot>\n        <div\n          v-if=\"state.rightFixedColumns.length\"\n          :class=\"{\n            [nh.bem('fixed', 'right')]: true,\n            [nh.bem('fixed', 'active')]: rightFixedActive,\n          }\"\n        >\n          <TableFoot fixed=\"right\"></TableFoot>\n        </div>\n      </NativeScroll>\n    </div>\n    <Scrollbar\n      v-if=\"props.useXBar && useXScroll\"\n      ref=\"xScrollbar\"\n      inherit\n      placement=\"bottom\"\n      :class=\"nh.bem('bar', 'horizontal')\"\n      :fade=\"props.barFade\"\n      :disabled=\"!xScrollEnabled\"\n      :bar-length=\"xBarLength\"\n      :style=\"{ bottom: `${footHeight}px` }\"\n      @scroll-start=\"setBarScrolling(true)\"\n      @scroll=\"handleXBarScroll\"\n      @scroll-end=\"setBarScrolling(false)\"\n    ></Scrollbar>\n    <Scrollbar\n      v-if=\"props.useYBar && bodyScrollHeight\"\n      ref=\"yScrollbar\"\n      inherit\n      placement=\"right\"\n      :class=\"nh.bem('bar', 'vertical')\"\n      :fade=\"props.barFade\"\n      :disabled=\"!yScrollEnabled\"\n      :bar-length=\"yBarLength\"\n      :style=\"{\n        top: headHeight ? `${headHeight}px` : undefined,\n        bottom: footHeight ? `${footHeight}px` : undefined,\n      }\"\n      @scroll-start=\"setBarScrolling(true)\"\n      @scroll=\"handleYBarScroll\"\n      @scroll-end=\"setBarScrolling(false)\"\n    ></Scrollbar>\n    <div\n      v-if=\"props.rowDraggable || hasDragColumn\"\n      v-show=\"indicatorShow\"\n      ref=\"indicator\"\n      :class=\"[\n        nh.be('indicator'),\n        indicatorType === 'before' && nh.bem('indicator', 'before'),\n        indicatorType === 'after' && nh.bem('indicator', 'after'),\n      ]\"\n    ></div>\n    <div\n      v-if=\"state.colResizable === 'lazy'\"\n      v-show=\"state.colResizing\"\n      :class=\"nh.be('resize-indicator')\"\n      :style=\"{ left: `${state.resizeLeft}px` }\"\n    ></div>\n  </div>\n</template>\n","import type {\n  Data,\n  TableColumnOptions,\n  TableFilterOptions,\n  TableSorterOptions,\n  TableSummaryOptions,\n} from './symbol'\n\nexport function defineTableFilter<D = Data, Val extends string | number = string | number>(\n  filter: TableFilterOptions<D, Val>,\n) {\n  return filter as TableFilterOptions<any, any>\n}\n\nexport function defineTableSorter<D = Data>(sorter: TableSorterOptions<D>) {\n  return sorter as TableSorterOptions<any>\n}\n\nexport function defineTableColumn<D = Data, Val extends string | number = string | number>(\n  column: TableColumnOptions<D, Val>,\n) {\n  return column\n}\n\nexport function defineTableColumns<D = Data, Val extends string | number = string | number>(\n  columns: TableColumnOptions<D, Val>[],\n) {\n  return columns\n}\n\nexport function defineTableSummary<D = Data, Val extends string | number = string | number>(\n  summary: TableSummaryOptions<D, Val>,\n) {\n  return summary\n}\n\nexport function defineTableSummaries<D = Data, Val extends string | number = string | number>(\n  summaries: TableSummaryOptions<D, Val>[],\n) {\n  return summaries\n}\n\nexport {\n  /** @deprecated Please use `defineTableFilter` to replace it */\n  defineTableFilter as defineFilter,\n  /** @deprecated Please use `defineTableSorter` to replace it */\n  defineTableSorter as defineSorter,\n  /** @deprecated Please use `defineTableColumn` to replace it */\n  defineTableColumn as defineColumn,\n  /** @deprecated Please use `defineTableColumns` to replace it */\n  defineTableColumns as defineColumns,\n  /** @deprecated Please use `defineTableSummary` to replace it */\n  defineTableSummary as defineSummary,\n  /** @deprecated Please use `defineTableSummaries` to replace it */\n  defineTableSummaries as defineSummaries,\n}\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\nimport { TabNav } from '@/components/tab-nav'\nimport { TabNavItem } from '@/components/tab-nav-item'\n\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor, isFunction, isNull } from '@vexip-ui/utils'\nimport { tabsProps } from './props'\nimport { TABS_STATE } from './symbol'\n\nimport type { ItemState, TabsSlots } from './symbol'\n\ntype ChangeEvent = (label: string | number) => void\n\ndefineOptions({ name: 'Tabs' })\n\nconst _props = defineProps(tabsProps)\nconst props = useProps('tabs', _props, {\n  active: {\n    default: null,\n    static: true,\n  },\n  card: false,\n  align: 'left',\n  placement: 'top',\n  closable: false,\n  showAdd: false,\n  lazy: false,\n  lazyLoad: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<TabsSlots>()\n\nconst nh = useNameHelper('tabs')\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(0)\nconst itemStates = reactive(new Set<ItemState>())\nconst inTransition = ref(false)\n\nconst itemList = computed(() => Array.from(itemStates))\n\nconst refreshLabels = debounceMinor(() => {\n  itemList.value.forEach((item, index) => {\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n\n  if (itemList.value.length >= 1 && isActiveEmpty()) {\n    currentActive.value = itemList.value[0].label\n  }\n})\nconst computeIndex = debounceMinor(() => {\n  const index = itemList.value.findIndex(item => item.label === currentActive.value)\n\n  if (~index) {\n    currentIndex.value = index\n  }\n})\n\nprovide(\n  TABS_STATE,\n  reactive({\n    currentActive,\n    lazy: toRef(props, 'lazy'),\n    lazyLoad: toRef(props, 'lazyLoad'),\n    handleActive,\n    increaseItem,\n    decreaseItem,\n    refreshLabels,\n  }),\n)\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  },\n)\n\nonMounted(computeIndex)\n\ndefineExpose({\n  currentActive,\n  inTransition,\n  itemList,\n  handleActive,\n  handleAdd,\n  handleClose,\n})\n\nfunction isActiveEmpty() {\n  return isNull(currentActive.value) || currentActive.value === ''\n}\n\nfunction increaseItem(item: ItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleActive(label: string | number) {\n  currentActive.value = label\n\n  computeIndex()\n  emit('update:active', label)\n  emitEvent(props.onChange as ChangeEvent, label)\n}\n\nfunction handleAdd() {\n  emitEvent(props.onAdd)\n}\n\nfunction handleClose(label: string | number) {\n  emitEvent(props.onClose as ChangeEvent, label)\n}\n</script>\n\n<template>\n  <div :class=\"[nh.b(), nh.bm(props.placement), props.inherit && nh.bm('inherit')]\">\n    <div :class=\"nh.be('header')\">\n      <TabNav\n        inherit\n        :active=\"currentActive\"\n        :card=\"props.card\"\n        :align=\"props.align\"\n        :placement=\"props.placement\"\n        :closable=\"props.closable\"\n        :show-add=\"props.showAdd\"\n        @change=\"handleActive\"\n        @add=\"handleAdd\"\n        @close=\"handleClose\"\n      >\n        <template v-if=\"slots.prefix || props.slots.prefix\" #prefix>\n          <slot name=\"prefix\">\n            <Renderer :renderer=\"props.slots.prefix\"></Renderer>\n          </slot>\n        </template>\n        <TabNavItem\n          v-for=\"(item, index) in itemList\"\n          :key=\"index\"\n          :label=\"item.label\"\n          :icon=\"item.icon\"\n          :disabled=\"item.disabled\"\n          :closable=\"item.closable\"\n        >\n          <template v-if=\"isFunction(item.labelRenderer)\">\n            <Renderer\n              :renderer=\"item.labelRenderer\"\n              :data=\"{ label: item.label, disabled: item.disabled }\"\n            ></Renderer>\n          </template>\n          <template v-else>\n            {{ item.name || item.label }}\n          </template>\n        </TabNavItem>\n        <template v-if=\"slots.suffix || props.slots.suffix\" #suffix>\n          <slot name=\"suffix\">\n            <Renderer :renderer=\"props.slots.suffix\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.add || props.slots.add\">\n          <slot name=\"add\">\n            <Renderer :renderer=\"props.slots.add\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.marker || props.slots.marker\">\n          <slot name=\"marker\">\n            <Renderer :renderer=\"props.slots.marker\"></Renderer>\n          </slot>\n        </template>\n      </TabNav>\n    </div>\n    <div\n      :class=\"{\n        [nh.be('main')]: true,\n        [nh.bem('main', 'transition')]: inTransition\n      }\"\n      @transitionend=\"inTransition = false\"\n    >\n      <slot></slot>\n    </div>\n  </div>\n</template>\n","import {\n  booleanProp,\n  booleanStringProp,\n  buildProps,\n  classProp,\n  eventProp,\n  iconProp,\n  localeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\n\nexport const textareaProps = buildProps({\n  state: stateProp,\n  locale: localeProp('input'),\n  value: String,\n  placeholder: String,\n  rows: Number,\n  noResize: booleanProp,\n  autofocus: booleanProp,\n  spellcheck: booleanProp,\n  autocomplete: booleanStringProp,\n  readonly: booleanProp,\n  disabled: booleanProp,\n  debounce: booleanProp,\n  delay: Number,\n  maxLength: Number,\n  hideCount: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  sync: booleanProp,\n  controlClass: classProp,\n  controlAttrs: Object as PropType<Record<string, any>>,\n  name: String,\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onInput: eventProp<(value: string) => void>(),\n  onChange: eventProp<(value: string) => void>(),\n  onEnter: eventProp(),\n  onKeyDown: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyPress: eventProp<(event: KeyboardEvent) => void>(),\n  onKeyUp: eventProp<(event: KeyboardEvent) => void>(),\n  onCompositionStart: eventProp<(event: CompositionEvent) => void>(),\n  onCompositionEnd: eventProp<(event: CompositionEvent) => void>(),\n})\n\nexport type TextareaProps = ExtractPropTypes<typeof textareaProps>\nexport type TextareaCProps = ConfigurableProps<TextareaProps>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, ref, toRef, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { debounce, isNull, throttle, toNumber } from '@vexip-ui/utils'\nimport { textareaProps } from './props'\n\ndefineOptions({ name: 'Textarea' })\n\nconst { idFor, state, labelId, disabled, loading, validateField, getFieldValue, setFieldValue } =\n  useFieldStore<string>(() => textarea.value?.focus())\n\nconst _props = defineProps(textareaProps)\nconst props = useProps('textarea', _props, {\n  state: createStateProp(state),\n  locale: null,\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  placeholder: null,\n  rows: 2,\n  noResize: false,\n  autofocus: false,\n  spellcheck: false,\n  autocomplete: false,\n  readonly: false,\n  disabled: () => disabled.value,\n  debounce: false,\n  delay: null,\n  maxLength: 0,\n  hideCount: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  sync: false,\n  controlClass: null,\n  controlAttrs: null,\n  name: {\n    default: '',\n    static: true,\n  },\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst nh = useNameHelper('textarea')\nconst locale = useLocale('input', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst focused = ref(false)\nconst currentValue = ref(props.value)\nconst currentLength = ref(props.value ? props.value.length : 0)\nconst composing = ref(false)\n\nconst textarea = ref<HTMLTextAreaElement>()\n\nlet lastValue = props.value\n\nconst isReadonly = computed(() => {\n  return (props.loading && props.loadingLock) || props.readonly\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.ns('input-vars')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('focused')]: focused.value,\n    [nh.bm('disabled')]: props.disabled,\n    [nh.bm('readonly')]: isReadonly.value,\n    [nh.bm('loading')]: props.loading,\n    [nh.bm('no-resize')]: props.noResize,\n    [nh.bm(props.state)]: props.state !== 'default',\n  }\n})\nconst autoComplete = computed(() => {\n  return typeof props.autocomplete === 'boolean'\n    ? props.autocomplete\n      ? 'on'\n      : 'off'\n    : props.autocomplete\n})\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n    lastValue = value\n    limitValueLength()\n  },\n)\n\ndefineExpose({\n  idFor,\n  currentValue,\n  currentLength,\n  composing,\n  isReadonly,\n  textarea,\n  copyValue,\n  focus: (options?: FocusOptions) => textarea.value?.focus(options),\n  blur: () => textarea.value?.blur(),\n})\n\nfunction handleFocus(event: FocusEvent) {\n  focused.value = true\n  emitEvent(props.onFocus, event)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  focused.value = false\n  emitEvent(props.onBlur, event)\n}\n\nfunction handleChange(event: Event) {\n  const type = event.type as 'change' | 'input'\n\n  if (composing.value) {\n    if (type === 'input') return\n\n    composing.value = false\n  }\n\n  currentValue.value = (event.target as HTMLTextAreaElement).value\n  limitValueLength()\n\n  if (type === 'change') {\n    if (lastValue === currentValue.value) return\n\n    lastValue = currentValue.value\n\n    if (!props.sync) {\n      emit('update:value', currentValue.value)\n      setFieldValue(currentValue.value)\n    }\n\n    emitEvent(props.onChange, currentValue.value)\n\n    if (!props.sync) {\n      validateField()\n    }\n  } else {\n    if (props.sync) {\n      emit('update:value', currentValue.value)\n      setFieldValue(currentValue.value)\n    }\n\n    emitEvent(props.onInput, currentValue.value)\n\n    if (props.sync) {\n      validateField()\n    }\n  }\n}\n\nfunction handleEnter() {\n  emitEvent(props.onEnter)\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  emitEvent(props.onKeyDown, event)\n}\n\nfunction handleKeyPress(event: KeyboardEvent) {\n  emitEvent(props.onKeyPress, event)\n}\n\nfunction handleKeyUp(event: KeyboardEvent) {\n  emitEvent(props.onKeyUp, event)\n}\n\nfunction limitValueLength() {\n  let value = currentValue.value\n\n  if (isNull(value)) {\n    currentLength.value = 0\n\n    return\n  }\n\n  const maxLength = props.maxLength\n\n  if (maxLength && value.length > maxLength) {\n    value = value.slice(0, maxLength)\n  }\n\n  currentLength.value = value.length\n  currentValue.value = value\n}\n\nfunction copyValue() {\n  const textarea = document.createElement('textarea')\n\n  textarea.style.height = '0'\n  textarea.setAttribute('readonly', 'readonly')\n  textarea.value = currentValue.value\n  document.body.appendChild(textarea)\n  textarea.select()\n\n  const isSuccess = document.execCommand('copy')\n\n  document.body.removeChild(textarea)\n\n  return isSuccess\n}\n\nconst delay = toNumber(props.delay)\nconst handleInput = props.debounce\n  ? debounce(handleChange, delay || 100)\n  : throttle(handleChange, delay || 16)\n\nfunction handleCompositionStart(event: CompositionEvent) {\n  composing.value = true\n  emitEvent(props.onCompositionStart, event)\n}\n\nfunction handleCompositionEnd(event: CompositionEvent) {\n  if (composing.value) {\n    composing.value = false\n\n    if (textarea.value) {\n      textarea.value.dispatchEvent(new Event('input'))\n    }\n  }\n\n  emitEvent(props.onCompositionStart, event)\n}\n</script>\n\n<template>\n  <div :id=\"idFor\" :class=\"className\" @click=\"textarea?.focus()\">\n    <textarea\n      v-bind=\"props.controlAttrs\"\n      ref=\"textarea\"\n      :class=\"[nh.be('control'), props.controlAttrs?.class, props.controlClass]\"\n      :value=\"currentValue\"\n      :rows=\"props.rows\"\n      :autofocus=\"props.autofocus\"\n      :autocomplete=\"autoComplete\"\n      :spellcheck=\"props.spellcheck\"\n      :disabled=\"props.disabled\"\n      :readonly=\"isReadonly\"\n      :placeholder=\"props.placeholder ?? locale.placeholder\"\n      :maxlength=\"props.maxLength > 0 ? props.maxLength : undefined\"\n      :name=\"props.name || props.controlAttrs?.name\"\n      :aria-labelledby=\"labelId\"\n      @blur=\"handleBlur\"\n      @focus=\"handleFocus\"\n      @keyup.enter=\"handleEnter\"\n      @keyup=\"handleKeyUp\"\n      @keypress=\"handleKeyPress\"\n      @keydown=\"handleKeyDown\"\n      @input=\"handleInput\"\n      @change=\"handleChange\"\n      @compositionstart=\"handleCompositionStart\"\n      @compositionend=\"handleCompositionEnd\"\n    ></textarea>\n    <div :class=\"nh.be('extra')\">\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <div v-if=\"props.loading\" :class=\"nh.be('loading')\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n            label=\"loading\"\n          ></Icon>\n        </div>\n      </Transition>\n      <div v-if=\"props.maxLength > 0 && !props.hideCount\" :class=\"nh.be('count')\">\n        <slot name=\"count\" :value=\"currentValue\">\n          {{ props.maxLength === Infinity ? currentLength : `${currentLength}/${props.maxLength}` }}\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n","import { getCountWord, makeSentence } from '@vexip-ui/config'\nimport {\n  DAY_ON_MILLISECONDS,\n  HOUR_ON_MILLISECONDS,\n  MINUTE_ON_MILLISECONDS,\n  SECOND_ON_MILLISECONDS,\n} from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport interface TimeAgoRecord {\n  datetime: Date,\n  timeAgo: Ref<string>,\n  locale: Ref<Record<string, string>>,\n  wordSpace: Ref<boolean>,\n  interval: false | number,\n  updated: number,\n}\n\nlet id = 1\n\nexport function getId() {\n  return id++\n}\n\nconst recordMap = new Map<number, TimeAgoRecord>()\n\nlet timer: ReturnType<typeof setInterval>\nlet isRunning: boolean\n\nexport function subscribe(id: number, record: TimeAgoRecord) {\n  recordMap.set(id, record)\n\n  if (recordMap.size && !isRunning) {\n    clearInterval(timer)\n\n    timer = setInterval(() => {\n      isRunning = true\n\n      const current = Date.now()\n\n      recordMap.forEach(record => {\n        if (!record.interval) return\n\n        if (current - record.updated > record.interval) {\n          record.timeAgo.value = computeTimeAgo(\n            record.datetime,\n            current,\n            record.locale.value,\n            record.wordSpace.value,\n          )\n          record.updated = current\n        }\n      })\n    }, 5000)\n  }\n}\n\nexport function unsubscribe(id: number) {\n  recordMap.delete(id)\n\n  if (!recordMap.size) {\n    clearInterval(timer)\n    isRunning = false\n  }\n}\n\nexport function computeTimeAgo(\n  date: Date,\n  current: number,\n  locale: Record<string, string>,\n  wordSpace: boolean,\n) {\n  const diff = Math.abs(current - date.getTime())\n  const type = current > date.getTime() ? locale.ago : locale.late\n\n  let label: string\n  let usedDiff: number\n  let noFormat = false\n\n  if (diff < 10 * SECOND_ON_MILLISECONDS) {\n    label = locale.justNow\n    noFormat = true\n  } else if (diff < MINUTE_ON_MILLISECONDS) {\n    label = locale.second\n    usedDiff = Math.floor(diff / SECOND_ON_MILLISECONDS)\n  } else if (diff < HOUR_ON_MILLISECONDS) {\n    label = locale.minute\n    usedDiff = Math.floor(diff / MINUTE_ON_MILLISECONDS)\n  } else if (diff < DAY_ON_MILLISECONDS) {\n    label = locale.hour\n    usedDiff = Math.floor(diff / HOUR_ON_MILLISECONDS)\n  } else if (diff < 30 * DAY_ON_MILLISECONDS) {\n    usedDiff = Math.floor(diff / DAY_ON_MILLISECONDS)\n\n    if (usedDiff === 1) {\n      label = locale.yesterday\n      noFormat = true\n    } else {\n      label = locale.days\n    }\n  } else if (diff < 365 * DAY_ON_MILLISECONDS) {\n    usedDiff = Math.floor(diff / (30 * DAY_ON_MILLISECONDS))\n\n    if (usedDiff === 1) {\n      label = locale.lastMonth\n      noFormat = true\n    } else {\n      label = locale.months\n    }\n  } else {\n    usedDiff = Math.floor(diff / 365 / DAY_ON_MILLISECONDS)\n\n    if (usedDiff === 1) {\n      label = locale.lastYear\n      noFormat = true\n    } else {\n      label = locale.years\n    }\n  }\n\n  if (noFormat) {\n    return label\n  }\n\n  return makeSentence(`${getCountWord(label, usedDiff!)} ${type}`, wordSpace)\n}\n","import { booleanNumberProp, booleanStringProp, buildProps, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Dateable } from '@vexip-ui/utils'\n\nexport const timeAgoProps = buildProps({\n  locale: localeProp('timeAgo'),\n  datetime: [String, Number, Date] as PropType<Dateable>,\n  interval: booleanNumberProp,\n  title: booleanStringProp,\n  titleFormat: String,\n})\n\nexport type TimeAgoProps = ExtractPropTypes<typeof timeAgoProps>\nexport type TimeAgoCProps = ConfigurableProps<TimeAgoProps, 'datetime'>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, toRef, watch } from 'vue'\n\nimport { useLocale, useNameHelper, useProps, useWordSpace } from '@vexip-ui/config'\nimport { format, toDate } from '@vexip-ui/utils'\nimport { computeTimeAgo, getId, subscribe, unsubscribe } from './helper'\nimport { timeAgoProps } from './props'\n\nimport type { Dateable } from '@vexip-ui/utils'\n\ndefineOptions({ name: 'TimeAgo' })\n\nconst _props = defineProps(timeAgoProps)\nconst props = useProps('timeAgo', _props, {\n  locale: null,\n  datetime: {\n    default: () => Date.now(),\n    static: true,\n  },\n  interval: {\n    default: false,\n    validator: value => typeof value === 'boolean' || value >= 1,\n  },\n  title: false,\n  titleFormat: 'yyyy-MM-dd HH:mm:ss',\n})\n\nconst nh = useNameHelper('time-ago')\nconst datetime = toDateValue(props.datetime)\nconst locale = useLocale('timeAgo', toRef(props, 'locale'))\nconst wordSpace = useWordSpace()\nconst timeAgo = ref(computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value))\n\nconst id = getId()\nconst record = {\n  datetime,\n  timeAgo,\n  locale,\n  wordSpace,\n  interval: parseInterval(props.interval),\n  updated: Date.now(),\n}\n\nconst currentTitle = computed(() => {\n  if (!props.title) return undefined\n\n  if (typeof props.title === 'string') return props.title\n\n  return format(props.datetime, props.titleFormat)\n})\n\nsubscribe(id, record)\n\nwatch(\n  () => props.datetime,\n  value => {\n    record.datetime = toDateValue(value)\n    timeAgo.value = computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value)\n  },\n)\nwatch(\n  () => props.interval,\n  value => {\n    record.interval = parseInterval(value)\n  },\n)\n\nonBeforeUnmount(() => {\n  unsubscribe(id)\n})\n\nfunction parseInterval(interval: boolean | number) {\n  return interval && (interval === true ? 1e4 : interval * 1000)\n}\n\nfunction toDateValue(value: Dateable) {\n  if (typeof value === 'string') {\n    value = value.replace(/-/g, '/')\n  }\n\n  return toDate(value)\n}\n\ndefineExpose({ timeAgo })\n</script>\n\n<template>\n  <span :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\" :title=\"currentTitle\">\n    {{ timeAgo }}\n  </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { doubleDigits } from '@vexip-ui/utils'\nimport { handleKeyEnter } from './helper'\n\nimport type { PropType } from 'vue'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { TimeType } from './symbol'\n\ndefineOptions({ name: 'TimeControl' })\n\nconst props = defineProps({\n  unitType: {\n    type: String as PropType<TimeType | ''>,\n    default: '',\n  },\n  enabled: {\n    type: Object as PropType<Record<TimeType, boolean>>,\n    default: () => ({}),\n  },\n  activated: {\n    type: Object as PropType<Record<TimeType, boolean>>,\n    default: () => ({}),\n  },\n  timeValue: {\n    type: Object as PropType<Record<TimeType, number>>,\n    default: () => ({}),\n  },\n  separator: {\n    type: String,\n    default: ':',\n  },\n  visible: {\n    type: Boolean,\n    default: false,\n  },\n  focused: {\n    type: Boolean,\n    default: false,\n  },\n  filler: {\n    type: String,\n    default: '-',\n    validator: (value: string) => value.length === 1,\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1],\n  },\n  ctrlSteps: {\n    type: Array as PropType<number[]>,\n    default: () => [5, 5, 5],\n  },\n  labels: {\n    type: Object as PropType<Partial<Record<TimeType, string>>>,\n    default: () => ({}),\n  },\n  hasError: {\n    type: Boolean,\n    default: false,\n  },\n  placeholder: {\n    type: String,\n    default: '',\n  },\n  readonly: {\n    type: Boolean,\n    default: false,\n  },\n  labeledBy: {\n    type: String,\n    default: undefined,\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['timePicker']>,\n    default: () => ({}),\n  },\n})\n\nconst emit = defineEmits([\n  'input',\n  'plus',\n  'minus',\n  'enter',\n  'cancel',\n  'unit-focus',\n  'unit-blur',\n  'prev-unit',\n  'next-unit',\n  'blur',\n])\n\nconst nh = useNameHelper('time-picker')\n\nconst wrapper = ref<HTMLElement>()\n\nconst label = computed(() => props.locale.ariaLabel ?? {})\nconst isActivated = computed(() => {\n  return (Object.keys(props.enabled) as TimeType[]).every(type => {\n    return !props.enabled[type] || props.activated[type]\n  })\n})\nconst formattedHour = computed(() => {\n  return formatValue('hour')\n})\nconst formattedMinute = computed(() => {\n  return formatValue('minute')\n})\nconst formattedSecond = computed(() => {\n  return formatValue('second')\n})\n\ndefineExpose({\n  isActivated,\n  wrapper,\n  focus: () => {\n    wrapper.value?.focus()\n  },\n  blur: () => {\n    wrapper.value?.blur()\n  },\n})\n\nfunction formatValue(type: TimeType) {\n  return props.activated[type]\n    ? doubleDigits(props.timeValue[type])\n    : `${props.filler}${props.filler}`\n}\n\nfunction getUnitFocusClass(type: TimeType) {\n  return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\n}\n\nfunction handleInputFocus(type: TimeType) {\n  if (props.readonly) return\n\n  emit('unit-focus', type)\n}\n\nfunction handleInput(event: KeyboardEvent) {\n  if (!props.visible) return\n\n  const type = handleKeyEnter(event)\n\n  if (props.readonly) {\n    switch (type) {\n      case 'ok': {\n        emit('enter')\n        break\n      }\n      case 'esc': {\n        emit('cancel')\n        break\n      }\n    }\n\n    return\n  }\n\n  switch (type) {\n    case 'next': {\n      emit('next-unit')\n      break\n    }\n    case 'prev': {\n      emit('prev-unit')\n      break\n    }\n    case 'up': {\n      emit('minus', event.ctrlKey)\n      break\n    }\n    case 'down': {\n      emit('plus', event.ctrlKey)\n      break\n    }\n    case 'ok': {\n      handleEnter()\n      break\n    }\n    case 'esc': {\n      handleCancel()\n      break\n    }\n    default: {\n      if (typeof type === 'number') {\n        emit('input', type)\n      }\n    }\n  }\n}\n\nfunction handleEnter() {\n  emit('enter')\n}\n\nfunction handleCancel() {\n  emit('cancel')\n}\n\nfunction handleBlur() {\n  emit('blur')\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"[nh.be('input'), hasError && nh.bem('input', 'error')]\"\n    role=\"none\"\n    tabindex=\"-1\"\n    @keydown=\"handleInput\"\n    @blur=\"handleBlur\"\n  >\n    <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\n      {{ placeholder }}\n    </div>\n    <template v-else>\n      <div\n        v-if=\"enabled.hour\"\n        :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\n        role=\"spinbutton\"\n        :aria-label=\"label.hour\"\n        :aria-valuenow=\"props.timeValue.hour\"\n        :aria-valuetext=\"formattedHour\"\n        :aria-valuemin=\"0\"\n        :aria-valuemax=\"23\"\n        :aria-labelledby=\"labeledBy\"\n        @click=\"handleInputFocus('hour')\"\n      >\n        {{ formattedHour }}\n      </div>\n      <div\n        v-if=\"labels.hour\"\n        :class=\"nh.be('label')\"\n        aria-hidden\n        @click=\"handleInputFocus('hour')\"\n      >\n        {{ labels.hour }}\n      </div>\n      <template v-if=\"enabled.minute\">\n        <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n          {{ separator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.minute\"\n          :aria-valuenow=\"props.timeValue.minute\"\n          :aria-valuetext=\"formattedMinute\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"59\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('minute')\"\n        >\n          {{ formattedMinute }}\n        </div>\n        <div\n          v-if=\"labels.minute\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('minute')\"\n        >\n          {{ labels.minute }}\n        </div>\n      </template>\n      <template v-if=\"enabled.second\">\n        <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n          {{ separator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.second\"\n          :aria-valuenow=\"props.timeValue.second\"\n          :aria-valuetext=\"formattedSecond\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"59\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('second')\"\n        >\n          {{ formattedSecond }}\n        </div>\n        <div\n          v-if=\"labels.second\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('second')\"\n        >\n          {{ labels.second }}\n        </div>\n      </template>\n    </template>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue'\n\nimport TimeWheel from './time-wheel.vue'\nimport TimeControl from './time-control.vue'\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  makeSentence,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n  useWordSpace,\n} from '@vexip-ui/config'\nimport {\n  placementWhileList,\n  useClickOutside,\n  useHover,\n  usePopper,\n  useSetTimeout,\n} from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, callIfFunc, doubleDigits, toAttrValue } from '@vexip-ui/utils'\nimport { timePickerProps } from './props'\nimport { useColumn, useTimeBound } from './helper'\nimport { TIME_REG } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { TimePickerChangeEvent, TimePickerSlots, TimeType } from './symbol'\n\ndefineOptions({ name: 'TimePicker' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  clearField,\n  getFieldValue,\n  setFieldValue,\n} = useFieldStore<string | string[]>(() => reference.value?.focus())\n\nconst nh = useNameHelper('time-picker')\n\nconst _props = defineProps(timePickerProps)\nconst props = useProps('timePicker', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  locale: null,\n  visible: false,\n  placement: {\n    default: 'bottom-start',\n    validator: value => placementWhileList.includes(value),\n  },\n  transfer: false,\n  format: 'HH:mm:ss',\n  separator: ':',\n  value: {\n    default: () => getFieldValue(),\n    static: true,\n  },\n  filler: {\n    default: '-',\n    validator: value => value.length === 1,\n  },\n  clearable: false,\n  noAction: false,\n  noArrow: false,\n  pointer: USE_TOUCH,\n  candidate: {\n    default: 3,\n    validator: value => [0, 1, 2, 3].includes(value),\n  },\n  steps: () => [1, 1, 1],\n  labels: () => ({}),\n  shortcuts: () => [],\n  range: null,\n  disabled: () => disabled.value,\n  transitionName: () => nh.ns('drop'),\n  confirmText: null,\n  cancelText: null,\n  ctrlSteps: () => [5, 5, 5],\n  prefix: createIconProp(),\n  prefixColor: '',\n  suffix: createIconProp(),\n  suffixColor: '',\n  noSuffix: false,\n  exchange: false,\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  min: null,\n  max: null,\n  outsideClose: true,\n  outsideCancel: false,\n  placeholder: null,\n  unitReadonly: false,\n  popperAlive: null,\n  shortcutsPlacement: 'left',\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value', 'update:visible'])\n\nconst slots = defineSlots<TimePickerSlots>()\n\nconst locale = useLocale('timePicker', toRef(props, 'locale'))\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst currentVisible = ref(props.visible)\nconst focused = ref(false)\nconst lastValue = ref('')\nconst startState = createTimeState()\nconst endState = createTimeState()\nconst currentState = ref<'start' | 'end'>('start')\nconst staticWheel = ref(false)\n\nconst { timer } = useSetTimeout()\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n})\nconst { isHover } = useHover(reference)\nconst { isTimeDisabled } = useTimeBound(toRef(props, 'min'), toRef(props, 'max'))\n\nconst startInput = ref<InstanceType<typeof TimeControl>>()\nconst endInput = ref<InstanceType<typeof TimeControl>>()\n\nconst startPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder\n  }\n\n  const { select, start, time } = locale.value.placeholder\n\n  return makeSentence(props.range ? `${start} ${time}` : `${select} ${time}`, wordSpace.value)\n})\nconst endPlaceholder = computed(() => {\n  if (props.placeholder) {\n    return Array.isArray(props.placeholder)\n      ? props.placeholder[1] || props.placeholder[0]\n      : props.placeholder\n  }\n\n  const { end, time } = locale.value.placeholder\n\n  return makeSentence(`${end} ${time}`, wordSpace.value)\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('input-vars'),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('no-hour')]: !startState.enabled.hour,\n      [nh.bm('no-minute')]: !startState.enabled.minute,\n      [nh.bm('no-second')]: !startState.enabled.second,\n      [nh.bm('visible')]: currentVisible.value,\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm('is-range')]: props.range,\n    },\n  ]\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n  const baseCls = nh.be('selector')\n\n  return {\n    [baseCls]: true,\n    [`${baseCls}--disabled`]: props.disabled,\n    [`${baseCls}--readonly`]: readonly.value,\n    [`${baseCls}--loading`]: props.loading,\n    [`${baseCls}--${props.size}`]: props.size !== 'default',\n    [`${baseCls}--focused`]: focused.value,\n    [`${baseCls}--${props.state}`]: props.state !== 'default',\n  }\n})\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst currentValue = computed(() => {\n  const values = [startState, endState].map(state => {\n    return Object.values(state.timeValue).map(doubleDigits).join(':')\n  })\n\n  return props.range ? values : values[0]\n})\nconst showClear = computed(() => {\n  return !props.disabled && !readonly.value && props.clearable && isHover.value && !!lastValue.value\n})\nconst startError = computed(() => {\n  const { hour, minute, second } = startState.timeValue\n\n  return (\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\nconst endError = computed(() => {\n  if (!props.range) return false\n\n  const { hour, minute, second } = endState.timeValue\n\n  return (\n    isTimeDisabled.hour(hour) ||\n    isTimeDisabled.minute(hour, minute) ||\n    isTimeDisabled.second(hour, minute, second)\n  )\n})\n\nwatch(\n  () => props.value,\n  value => {\n    parseValue(value)\n    lastValue.value = (Array.isArray(value) ? value[0] || value[1] : value) ? getStringValue() : ''\n  },\n  { immediate: true },\n)\nwatch(() => props.format, parseFormat, { immediate: true })\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  },\n)\nwatch(currentVisible, value => {\n  if (value) {\n    updatePopper()\n  }\n})\nwatch(focused, value => {\n  if (value) {\n    emitEvent(props.onFocus)\n  } else {\n    emitEvent(props.onBlur)\n  }\n})\nwatch(currentState, value => {\n  if (!props.unitReadonly && currentVisible.value) {\n    emitEvent(props.onChangeCol, getCurrentState().column, value)\n  }\n})\nwatch(\n  () => startState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'start') {\n      emitEvent(props.onChangeCol, value, 'start')\n    }\n  },\n)\nwatch(\n  () => endState.column,\n  value => {\n    if (!props.unitReadonly && currentVisible.value && currentState.value === 'end') {\n      emitEvent(props.onChangeCol, value, 'end')\n    }\n  },\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      setVisible(false)\n      handleBlur()\n    }\n  },\n)\nwatch(readonly, value => {\n  if (value) {\n    setVisible(false)\n  }\n})\n\ndefineExpose({\n  idFor,\n  isHover,\n  currentVisible,\n  focused,\n  startState,\n  endState,\n  currentState,\n  currentValue,\n  startError,\n  endError,\n  wrapper,\n  reference,\n  popper,\n  start: startInput,\n  end: endInput,\n  updatePopper,\n  focus: (options?: FocusOptions) => reference.value?.focus(options),\n  blur: () => reference.value?.blur(),\n})\n\nfunction createTimeState() {\n  const { currentColumn, enabled, resetColumn, enterColumn } = useColumn([\n    'hour',\n    'minute',\n    'second',\n  ] as TimeType[])\n\n  const timeValue = reactive({\n    hour: 0,\n    minute: 0,\n    second: 0,\n  })\n  const activated = reactive({\n    hour: false,\n    minute: false,\n    second: false,\n  })\n\n  return reactive({\n    column: currentColumn,\n    enabled,\n    activated,\n    timeValue,\n    resetColumn,\n    enterColumn,\n  })\n}\n\nfunction getCurrentState() {\n  return currentState.value === 'start' ? startState : endState\n}\n\nfunction parseValue<T extends string | null>(value: T | T[]) {\n  if (!Array.isArray(value)) {\n    value = [value, value]\n  }\n\n  const defaultDate = new Date()\n\n  for (let i = 0; i < 2; ++i) {\n    const match = TIME_REG.exec(value[i] || '')\n    const state = i === 0 ? startState : endState\n    const { timeValue } = state\n\n    if (match) {\n      toggleActivated(true, i === 0 ? 'start' : 'end')\n\n      const hour = parseInt(match[1])\n      const minute = match[2] ? parseInt(match[2].slice(1)) : 0\n      const second = match[3] ? parseInt(match[3].slice(1)) : 0\n\n      const date = new Date(2000, 1, 1, hour, minute, second)\n\n      timeValue.hour = date.getHours()\n      timeValue.minute = date.getMinutes()\n      timeValue.second = date.getSeconds()\n    } else {\n      timeValue.hour = defaultDate.getHours()\n      timeValue.minute = defaultDate.getMinutes()\n      timeValue.second = defaultDate.getSeconds()\n\n      toggleActivated(false, i === 0 ? 'start' : 'end')\n    }\n\n    if (!props.range) break\n  }\n}\n\nfunction parseFormat() {\n  ;[startState, endState].forEach(state => {\n    state.enabled.hour = props.format.includes('H')\n    state.enabled.minute = props.format.includes('m')\n    state.enabled.second = props.format.includes('s')\n  })\n}\n\nfunction toggleActivated(value: boolean, valueType?: 'start' | 'end') {\n  const states = valueType\n    ? valueType === 'start'\n      ? [startState]\n      : [endState]\n    : [startState, endState]\n\n  states.forEach(state => {\n    ;(Object.keys(state.activated) as TimeType[]).forEach(type => {\n      state.activated[type] = value\n    })\n  })\n}\n\nfunction getStringValue() {\n  return Array.isArray(currentValue.value) ? currentValue.value.join('|') : currentValue.value\n}\n\nfunction verifyTime() {\n  if (startError.value || (props.range && endError.value)) {\n    parseValue(props.value)\n  }\n}\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction emitChange() {\n  verifyTime()\n\n  if (lastValue.value !== getStringValue()) {\n    lastValue.value = getStringValue()\n\n    toggleActivated(true)\n    emit('update:value', currentValue.value)\n    setFieldValue(currentValue.value)\n    emitEvent(props.onChange as TimePickerChangeEvent, currentValue.value)\n    validateField()\n  }\n}\n\nfunction handleFocused() {\n  if (props.disabled) return\n\n  focused.value = true\n\n  timer.focus = setTimeout(() => {\n    if (focused.value) {\n      if (currentState.value === 'start') {\n        startInput.value?.focus()\n      } else {\n        endInput.value?.focus()\n      }\n    }\n  }, 120)\n}\n\nfunction handleBlur() {\n  clearTimeout(timer.focus)\n\n  focused.value = false\n  startInput.value?.blur()\n  endInput.value?.blur()\n}\n\nfunction showPanel(event: Event) {\n  if (props.disabled || readonly.value) return\n\n  const target = event.target as Node\n\n  setVisible(true)\n  handleFocused()\n\n  if (wrapper.value && target) {\n    const units = Array.from(wrapper.value.querySelectorAll(`.${nh.be('unit')}`))\n\n    if (!units.some(unit => unit === target || unit.contains(target))) {\n      startState.column = null\n      endState.column = null\n    }\n  }\n}\n\nfunction finishInput(shouldChange = true) {\n  setVisible(false)\n\n  shouldChange && emitChange()\n  startState.resetColumn()\n  endState.resetColumn()\n}\n\nfunction handleClear(finish = true) {\n  if (props.disabled || readonly.value) return\n\n  if (props.clearable) {\n    nextTick(() => {\n      const emitValue = props.range ? ([] as string[]) : ''\n\n      parseValue(null)\n      finish && finishInput(false)\n      emit('update:value', emitValue)\n      emitEvent(props.onChange as TimePickerChangeEvent, emitValue)\n      emitEvent(props.onClear)\n      clearField(emitValue)\n      finish && handleBlur()\n\n      lastValue.value = ''\n\n      nextTick(() => {\n        toggleActivated(false)\n      })\n    })\n  }\n}\n\nfunction handleWheelChange(type: TimeType) {\n  if (currentVisible.value) {\n    getCurrentState().activated[type] = true\n  }\n}\n\nfunction handleInputFocus(type: TimeType) {\n  getCurrentState().column = type\n}\n\nfunction handleInput(value: number) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  handleInputNumber(type, value)\n\n  if (state.column !== 'second' && state.timeValue[type] >= 10) {\n    state.enterColumn('next', false)\n  }\n}\n\nfunction handleInputNumber(type: TimeType, number: number) {\n  const state = getCurrentState()\n  const prev = state.timeValue[type]\n\n  if (state.activated[type] && prev > 0 && prev < 10) {\n    state.timeValue[type] = prev * 10 + number\n  } else {\n    state.timeValue[type] = number\n  }\n\n  verifyValue(type)\n\n  state.activated[type] = true\n  emitEvent(props.onInput, type, state.timeValue[type])\n}\n\nfunction verifyValue(type: TimeType) {\n  const timeValue = getCurrentState().timeValue\n\n  timeValue[type] = boundRange(timeValue[type], 0, type === 'hour' ? 23 : 59)\n  timeValue[type] = Math.round(timeValue[type] / getStep(type)) * getStep(type)\n}\n\nfunction handlePlus(ctrlKey: boolean) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  if (state.enabled[type]) {\n    state.timeValue[type] += ctrlKey ? getCtrlStep(type) : getStep(type)\n\n    verifyValue(type)\n    emitEvent(props.onPlus, type, state.timeValue[type])\n  }\n}\n\nfunction handleMinus(ctrlKey: boolean) {\n  const state = getCurrentState()\n  const type = state.column\n\n  if (!type) return\n\n  if (state.enabled[type]) {\n    state.timeValue[type] -= ctrlKey ? getCtrlStep(type) : getStep(type)\n\n    verifyValue(type)\n    emitEvent(props.onMinus, type, state.timeValue[type])\n  }\n}\n\nfunction getStep(type: TimeType) {\n  return props.steps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction getCtrlStep(type: TimeType) {\n  return props.ctrlSteps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction fallbackFocus() {\n  requestAnimationFrame(() => {\n    handleBlur()\n    reference.value?.focus()\n  })\n}\n\nfunction handleEnter() {\n  fallbackFocus()\n  finishInput()\n  emitEvent(props.onEnter)\n}\n\nfunction handleCancel() {\n  fallbackFocus()\n  parseValue(props.value)\n  finishInput(false)\n  emitEvent(props.onCancel)\n}\n\nfunction handleShortcut(index: number) {\n  const { value, name } = props.shortcuts[index]\n  const parsedValue = callIfFunc(value)\n\n  fallbackFocus()\n  parseValue(parsedValue)\n  emitEvent(props.onShortcut as (name: string, value: string | string[]) => void, name, parsedValue)\n  finishInput()\n}\n\nfunction toggleCurrentState(type: 'start' | 'end') {\n  currentState.value = type\n}\n\nfunction enterColumn(type: 'prev' | 'next') {\n  if (props.range) {\n    if (type === 'prev' && currentState.value === 'start' && !startState.column) {\n      toggleCurrentState('end')\n    }\n\n    const state = getCurrentState()\n    const currentColumn = state.column\n\n    state.enterColumn(type, !currentColumn)\n\n    if (currentColumn === state.column) {\n      const isStart = currentState.value === 'start'\n      const otherState = isStart ? endState : startState\n\n      otherState.resetColumn(type === 'prev' ? 'second' : 'hour', type === 'prev')\n      toggleCurrentState(isStart ? 'end' : 'start')\n    }\n  } else {\n    startState.enterColumn(type)\n  }\n}\n\nfunction handleStartInput(type: TimeType) {\n  toggleCurrentState('start')\n  handleInputFocus(type)\n}\n\nfunction handleEndInput(type: TimeType) {\n  toggleCurrentState('end')\n  handleInputFocus(type)\n}\n\nfunction exchangeValue() {\n  ;(Object.keys(startState.timeValue) as TimeType[]).forEach(type => {\n    const temp = endState.timeValue[type]\n    endState.timeValue[type] = startState.timeValue[type]\n    startState.timeValue[type] = temp\n  })\n}\n\nfunction handleExchangeClick(event: MouseEvent) {\n  if (props.exchange) {\n    !currentVisible.value && event.stopPropagation()\n    exchangeValue()\n  }\n}\n\nfunction handleClickOutside() {\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && currentVisible.value) {\n    finishInput(!props.outsideCancel)\n    handleBlur()\n    emitEvent(props.onOutsideClose)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"group\"\n    :aria-disabled=\"toAttrValue(props.disabled)\"\n    :aria-expanded=\"toAttrValue(currentVisible)\"\n    aria-haspopup=\"dialog\"\n    :aria-labelledby=\"labelId\"\n    @click=\"showPanel\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"selectorClass\"\n      tabindex=\"0\"\n      @keydown.space.prevent=\"showPanel\"\n      @keydown.backspace.prevent=\"handleClear(false)\"\n    >\n      <div\n        v-if=\"hasPrefix\"\n        :class=\"[nh.be('icon'), nh.be('prefix')]\"\n        :style=\"{ color: props.prefixColor }\"\n      >\n        <slot name=\"prefix\">\n          <Renderer :renderer=\"props.slots.prefix\">\n            <Icon :icon=\"props.prefix\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div :class=\"nh.be('control')\">\n        <TimeControl\n          ref=\"startInput\"\n          :unit-type=\"currentState === 'start' ? startState.column! : ''\"\n          :enabled=\"startState.enabled\"\n          :activated=\"startState.activated\"\n          :time-value=\"startState.timeValue\"\n          :steps=\"props.steps\"\n          :ctrl-steps=\"props.ctrlSteps\"\n          :focused=\"focused\"\n          :visible=\"currentVisible\"\n          :separator=\"props.separator\"\n          :filler=\"props.filler\"\n          :labels=\"props.labels\"\n          :has-error=\"startError\"\n          :placeholder=\"startPlaceholder\"\n          :readonly=\"props.unitReadonly\"\n          :labeled-by=\"labelId\"\n          :locale=\"locale\"\n          @input=\"handleInput\"\n          @plus=\"handlePlus\"\n          @minus=\"handleMinus\"\n          @enter=\"handleEnter\"\n          @cancel=\"handleCancel\"\n          @unit-focus=\"handleStartInput\"\n          @prev-unit=\"enterColumn('prev')\"\n          @next-unit=\"enterColumn('next')\"\n          @blur=\"startState.column = null\"\n        ></TimeControl>\n        <template v-if=\"props.range\">\n          <div\n            :class=\"[nh.be('exchange'), props.exchange ? nh.bem('exchange', 'enabled') : '']\"\n            @click=\"handleExchangeClick\"\n          >\n            <slot name=\"exchange\">\n              <Renderer :renderer=\"props.slots.exchange\">\n                <Icon v-bind=\"icons.exchange\" style=\"padding-top: 1px\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n          <TimeControl\n            ref=\"endInput\"\n            :unit-type=\"currentState === 'end' ? endState.column! : ''\"\n            :enabled=\"endState.enabled\"\n            :activated=\"endState.activated\"\n            :time-value=\"endState.timeValue\"\n            :steps=\"props.steps\"\n            :ctrl-steps=\"props.ctrlSteps\"\n            :focused=\"focused\"\n            :visible=\"currentVisible\"\n            :separator=\"props.separator\"\n            :filler=\"props.filler\"\n            :labels=\"props.labels\"\n            :has-error=\"endError\"\n            :placeholder=\"endPlaceholder\"\n            :readonly=\"props.unitReadonly\"\n            :labeled-by=\"labelId\"\n            :locale=\"locale\"\n            @input=\"handleInput\"\n            @plus=\"handlePlus\"\n            @minus=\"handleMinus\"\n            @enter=\"handleEnter\"\n            @cancel=\"handleCancel\"\n            @unit-focus=\"handleEndInput\"\n            @prev-unit=\"enterColumn('prev')\"\n            @next-unit=\"enterColumn('next')\"\n            @blur=\"endState.column = null\"\n          ></TimeControl>\n        </template>\n      </div>\n      <div\n        v-if=\"!props.noSuffix\"\n        :class=\"[nh.be('icon'), nh.be('suffix')]\"\n        :style=\"{\n          color: props.suffixColor,\n          opacity: showClear || props.loading ? '0%' : ''\n        }\"\n      >\n        <slot name=\"suffix\">\n          <Renderer :renderer=\"props.slots.suffix\">\n            <Icon v-bind=\"icons.clock\" :icon=\"props.suffix || icons.clock.icon\"></Icon>\n          </Renderer>\n        </slot>\n      </div>\n      <div\n        v-else-if=\"props.clearable || props.loading\"\n        :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n      ></div>\n      <Transition :name=\"nh.ns('fade')\" appear>\n        <button\n          v-if=\"showClear\"\n          :class=\"[nh.be('icon'), nh.be('clear')]\"\n          type=\"button\"\n          tabindex=\"-1\"\n          :aria-label=\"locale.ariaLabel.clear\"\n          @click.stop=\"handleClear()\"\n        >\n          <Icon v-bind=\"icons.clear\"></Icon>\n        </button>\n        <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n          <Icon\n            v-bind=\"icons.loading\"\n            :effect=\"props.loadingEffect || icons.loading.effect\"\n            :icon=\"props.loadingIcon || icons.loading.icon\"\n          ></Icon>\n        </div>\n      </Transition>\n    </div>\n    <Popper\n      ref=\"popper\"\n      :class=\"[nh.be('popper'), nh.bs('vars')]\"\n      :visible=\"currentVisible\"\n      :to=\"transferTo\"\n      :transition=\"props.transitionName\"\n      :alive=\"props.popperAlive ?? !transferTo\"\n      @click.stop=\"handleFocused\"\n      @before-enter=\"staticWheel = true\"\n      @before-leave=\"staticWheel = true\"\n      @after-enter=\"staticWheel = false\"\n      @after-leave=\"staticWheel = false\"\n    >\n      <div\n        :class=\"{\n          [nh.be('panel')]: true,\n          [nh.bem('panel', 'vertical')]:\n            props.shortcuts.length &&\n            (props.shortcutsPlacement === 'top' || props.shortcutsPlacement === 'bottom')\n        }\"\n        :aria-labelledby=\"labelId\"\n      >\n        <div\n          v-if=\"props.shortcuts.length\"\n          :class=\"[\n            nh.be('list'),\n            nh.bem('list', 'sub'),\n            nh.be('shortcuts'),\n            nh.bem('shortcuts', props.shortcutsPlacement)\n          ]\"\n        >\n          <div\n            v-for=\"(item, index) in props.shortcuts\"\n            :key=\"index\"\n            :class=\"nh.be('shortcut')\"\n            :title=\"item.name\"\n            @click=\"handleShortcut(index)\"\n          >\n            {{ item.name }}\n          </div>\n        </div>\n        <div :class=\"nh.be('list')\">\n          <div :class=\"nh.be('wheels')\">\n            <TimeWheel\n              v-model:hour=\"startState.timeValue.hour\"\n              v-model:minute=\"startState.timeValue.minute\"\n              v-model:second=\"startState.timeValue.second\"\n              :no-arrow=\"props.noArrow\"\n              :candidate=\"props.candidate\"\n              :steps=\"props.steps\"\n              :pointer=\"props.pointer\"\n              :disabled-time=\"isTimeDisabled\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleWheelChange\"\n              @toggle-col=\"toggleCurrentState('start')\"\n            ></TimeWheel>\n            <TimeWheel\n              v-if=\"props.range\"\n              v-model:hour=\"endState.timeValue.hour\"\n              v-model:minute=\"endState.timeValue.minute\"\n              v-model:second=\"endState.timeValue.second\"\n              :no-arrow=\"props.noArrow\"\n              :candidate=\"props.candidate\"\n              :steps=\"props.steps\"\n              :pointer=\"props.pointer\"\n              :disabled-time=\"isTimeDisabled\"\n              :no-transition=\"staticWheel\"\n              @change=\"handleWheelChange\"\n              @toggle-col=\"toggleCurrentState('end')\"\n            ></TimeWheel>\n          </div>\n          <div v-if=\"!props.noAction\" :class=\"nh.be('action')\">\n            <Button\n              inherit\n              text\n              size=\"small\"\n              @click.stop=\"handleCancel\"\n            >\n              {{ props.cancelText || locale.cancel }}\n            </Button>\n            <Button\n              inherit\n              type=\"primary\"\n              size=\"small\"\n              :disabled=\"startError || endError\"\n              @click.stop=\"handleEnter\"\n            >\n              {{ props.confirmText || locale.confirm }}\n            </Button>\n          </div>\n        </div>\n      </div>\n    </Popper>\n  </div>\n</template>\n","import { booleanProp, buildProps, eventProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TimelineItemType } from './symbol'\n\nexport const timelineProps = buildProps({\n  pending: booleanProp,\n  dashed: booleanProp,\n  lineColor: String,\n  spacing: [Number, String],\n  flip: booleanProp,\n  horizontal: booleanProp,\n  alternate: booleanProp,\n  onSignalClick: eventProp<(label: string | number) => void>(),\n})\n\nexport type TimelineProps = ExtractPropTypes<typeof timelineProps>\nexport type TimelineCProps = ConfigurableProps<TimelineProps>\n\nexport const timelineItemProps = buildProps({\n  type: String as PropType<TimelineItemType>,\n  color: String,\n  label: [Number, String],\n  dashed: booleanProp,\n  lineColor: String,\n  spacing: [Number, String],\n  onSignalClick: eventProp<(label: string | number) => void>(),\n})\n\nexport type TimelineItemProps = ExtractPropTypes<typeof timelineItemProps>\nexport type TimelineItemCProps = ConfigurableProps<TimelineItemProps>\n","import type { InjectionKey } from 'vue'\n\nexport type TimelineItemType = 'primary' | 'info' | 'success' | 'error' | 'warning' | 'disabled'\n\nexport interface ItemState {\n  label: string | number,\n  index: number,\n  total: number,\n  height: number,\n}\n\nexport interface TimelineState {\n  dashed: boolean,\n  lineColor: string,\n  spacing: number | string,\n  alternate: boolean,\n  horizontal: boolean,\n  increaseItem: (item: ItemState) => void,\n  decreaseItem: (item: ItemState) => void,\n  handleSignalClick: (label: string | number) => void,\n}\n\nexport const TIMELINE_STATE = '__VXP_TIMELINE_STATE' as unknown as InjectionKey<TimelineState>\n\nexport const timelineItemTypes = Object.freeze<TimelineItemType[]>([\n  'primary',\n  'info',\n  'success',\n  'error',\n  'warning',\n  'disabled',\n])\n","<script setup lang=\"ts\">\nimport { computed, provide, reactive, toRef } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { debounceMinor, isNull } from '@vexip-ui/utils'\nimport { timelineProps } from './props'\nimport { TIMELINE_STATE } from './symbol'\n\nimport type { ItemState, TimelineState } from './symbol'\n\ndefineOptions({ name: 'Timeline' })\n\nconst _props = defineProps(timelineProps)\nconst props = useProps('timeline', _props, {\n  pending: false,\n  dashed: false,\n  lineColor: null,\n  spacing: null,\n  flip: false,\n  horizontal: false,\n  alternate: false,\n})\n\nconst nh = useNameHelper('timeline')\nconst itemStates = reactive(new Set<ItemState>())\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('pending')]: props.pending,\n    [nh.bm('alternate')]: props.alternate,\n    [nh.bm('flip')]: props.flip,\n    [nh.bm('horizontal')]: props.horizontal,\n  }\n})\nconst height = computed(() => {\n  return Math.max(...Array.from(itemStates).map(state => state.height)) * 2\n})\n\ndefineExpose({ itemStates })\n\nconst refreshLabels = debounceMinor(() => {\n  const total = itemStates.size\n\n  Array.from(itemStates).forEach((item, index) => {\n    item.index = index + 1\n    item.total = total\n\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n})\n\nconst state: TimelineState = reactive({\n  dashed: toRef(props, 'dashed'),\n  lineColor: toRef(props, 'lineColor'),\n  spacing: toRef(props, 'spacing'),\n  alternate: toRef(props, 'alternate'),\n  horizontal: toRef(props, 'horizontal'),\n  increaseItem,\n  decreaseItem,\n  handleSignalClick,\n})\n\nprovide(TIMELINE_STATE, state)\n\nfunction increaseItem(item: ItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleSignalClick(label: string | number) {\n  emitEvent(props.onSignalClick, label)\n}\n</script>\n\n<template>\n  <div\n    :class=\"className\"\n    :style=\"{ height: props.horizontal && props.alternate ? `${height}px` : undefined }\"\n  >\n    <slot></slot>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, reactive, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { timelineItemProps } from './props'\nimport { TIMELINE_STATE, timelineItemTypes } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'TimelineItem' })\n\nconst _props = defineProps(timelineItemProps)\nconst props = useProps('timelineItem', _props, {\n  type: {\n    default: 'primary',\n    validator: value => timelineItemTypes.includes(value),\n  },\n  color: '',\n  label: {\n    default: null,\n    static: true,\n  },\n  dashed: null,\n  lineColor: null,\n  spacing: null,\n})\n\ndefineSlots<{\n  default: () => any,\n  signal: () => any,\n  line: () => any,\n}>()\n\nconst timelineState = inject(TIMELINE_STATE, null)\n\nconst nh = useNameHelper('timeline')\nconst currentLabel = ref(props.label)\nconst content = ref<HTMLElement>()\n\nconst className = computed(() => {\n  return {\n    [nh.be('item')]: true,\n    [nh.bem('item', props.type)]: timelineItemTypes.includes(props.type),\n  }\n})\nconst itemStyle = computed(() => {\n  const spacing = props.spacing || props.spacing === 0 ? props.spacing : timelineState?.spacing\n  const style: Record<string, any> = {\n    [nh.cv('item-span')]: typeof spacing === 'number' ? `${spacing}px` : spacing,\n  }\n\n  if (props.color) {\n    style[nh.cv('pointer-color')] = props.color\n    style[nh.cv('pointer-b-color')] = props.color\n  }\n\n  return style\n})\nconst lineStyle = computed(() => {\n  const isDashed = props.dashed ?? timelineState?.dashed ?? false\n  const color = props.lineColor ?? timelineState?.lineColor\n\n  return {\n    borderInlineStartStyle: isDashed ? ('dashed' as const) : undefined,\n    borderInlineStartColor: color,\n  }\n})\n\ndefineExpose({ currentLabel, content })\n\nif (timelineState) {\n  const state: ItemState = reactive({\n    label: currentLabel,\n    index: 0,\n    total: 0,\n    height: 0,\n  })\n\n  timelineState.increaseItem(state)\n\n  watch(() => timelineState.alternate, updateHeight)\n  watch(() => timelineState.horizontal, updateHeight)\n\n  onMounted(updateHeight)\n  onUpdated(updateHeight)\n\n  onBeforeUnmount(() => {\n    timelineState.decreaseItem(state)\n  })\n\n  function updateHeight() {\n    requestAnimationFrame(() => {\n      if (timelineState?.horizontal && content.value) {\n        state.height = content.value.scrollHeight\n      }\n    })\n  }\n}\n\nfunction handleSignalClick() {\n  emitEvent(props.onSignalClick, currentLabel.value)\n  timelineState?.handleSignalClick(currentLabel.value)\n}\n</script>\n\n<template>\n  <div :class=\"className\" :style=\"itemStyle\">\n    <div :class=\"nh.be('signal')\" @click=\"handleSignalClick\">\n      <slot name=\"signal\">\n        <div :class=\"nh.be('pointer')\"></div>\n      </slot>\n    </div>\n    <div :class=\"nh.be('line')\" :style=\"lineStyle\">\n      <slot name=\"line\"></slot>\n    </div>\n    <div ref=\"content\" :class=\"nh.be('content')\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n","import { booleanProp, buildProps, classProp, iconProp, styleProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\nimport type { ToastOptions, ToastPosition } from './symbol'\n\nexport const toastProps = buildProps({\n  bodyWidth: Number,\n  icon: iconProp,\n  iconProps: Object as PropType<IconMinorProps>,\n  position: String as PropType<ToastPosition>,\n  transitionName: String,\n  closable: booleanProp,\n  maskClose: booleanProp,\n  showMask: booleanProp,\n  maskClass: classProp,\n  maskStyle: styleProp,\n  parseHtml: booleanProp,\n  renderer: Function as PropType<(options: ToastOptions) => any>,\n})\n\nexport type ToastProps = ExtractPropTypes<typeof toastProps>\nexport type ToastCProps = ConfigurableProps<ToastProps, 'renderer'>\n","import type { ComponentPublicInstance } from 'vue'\nimport type { ClassType, StyleType } from '@vexip-ui/config'\nimport type { IconMinorProps } from '@/components/icon'\n\nexport type ToastType = 'success' | 'warning' | 'error' | 'loading'\nexport type ToastPosition = 'top' | 'center' | 'bottom'\n\nexport interface ToastOptions extends Record<string, any> {\n  type?: ToastType | null,\n  content?: string,\n  icon?: Record<string, any> | (() => any) | null,\n  iconProps?: IconMinorProps,\n  position?: ToastPosition,\n  transitionName?: string,\n  closable?: boolean,\n  maskClose?: boolean,\n  showMask?: boolean,\n  maskClass?: ClassType,\n  maskStyle?: StyleType,\n  parseHtml?: boolean,\n  onClose?: () => void,\n}\n\nexport interface ToastInstance extends ComponentPublicInstance {\n  openToast: (options: ToastOptions) => Promise<void>,\n  closeToast: () => void,\n}\n\nexport const effectiveTypes = Object.freeze(['success', 'warning', 'error', 'loading'])\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, onMounted, reactive } from 'vue'\n\nimport { createIconProp, useIcons, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\nimport { isFunction } from '@vexip-ui/utils'\nimport { toastProps } from './props'\nimport { effectiveTypes } from './symbol'\n\nimport type { ToastOptions, ToastType } from './symbol'\n\ndefineOptions({ name: 'Toast' })\n\nconst nh = useNameHelper('toast')\n\nconst _props = defineProps(toastProps)\nconst props = useProps('toast', _props, {\n  bodyWidth: 100,\n  icon: createIconProp(),\n  iconProps: () => ({}),\n  position: 'center',\n  transitionName: () => nh.ns('ease'),\n  closable: false,\n  maskClose: false,\n  showMask: false,\n  maskClass: null,\n  maskStyle: null,\n  renderer: {\n    default: null,\n    isFunc: true,\n    static: true,\n  },\n  parseHtml: false,\n})\n\nconst getIndex = useZIndex()\nconst icons = useIcons()\n\nconst predefinedIcons = computed(() => ({\n  success: icons.value.success,\n  warning: icons.value.warning,\n  error: icons.value.error,\n  loading: icons.value.loading,\n}))\n\nconst state = reactive({\n  visible: false,\n  zIndex: 0,\n  type: null as ToastType | null,\n  content: '',\n  icon: props.icon,\n  iconProps: props.iconProps as any,\n  position: props.position,\n  transition: props.transitionName,\n  closable: props.closable,\n  maskClose: props.maskClose,\n  showMask: props.showMask,\n  maskClass: props.maskClass as any,\n  maskStyle: props.maskStyle as any,\n  parseHtml: props.parseHtml,\n  textOnly: false,\n  renderer: props.renderer,\n  onClose: null as (() => void) | null,\n})\n\nconst mountedPromise = new Promise<void>(resolve => {\n  onMounted(() => {\n    nextTick(resolve)\n  })\n})\n\ndefineExpose({ state, openToast, closeToast, handleReset })\n\nasync function openToast(options: ToastOptions) {\n  await mountedPromise\n\n  state.zIndex = getIndex()\n  state.type = options.type ?? null\n  state.content = options.content ?? ''\n  state.icon = options.icon ?? props.icon\n  state.iconProps = options.iconProps ?? props.iconProps\n  state.position = options.position ?? props.position\n  state.transition = options.transitionName ?? props.transitionName\n  state.closable = options.closable ?? props.closable\n  state.maskClose = options.maskClose ?? props.maskClose\n  state.showMask = options.showMask ?? props.showMask\n  state.maskClass = options.maskClass ?? props.maskClass\n  state.maskStyle = options.maskStyle ?? props.maskStyle\n  state.parseHtml = options.parseHtml ?? props.parseHtml\n  state.renderer = isFunction(options.renderer) ? options.renderer : props.renderer\n  state.onClose = options.onClose || null\n\n  state.textOnly = !state.icon && !(state.type && effectiveTypes.includes(state.type))\n\n  if (isFunction(state.renderer)) {\n    const render = state.renderer\n\n    state.renderer = () => render(options)\n    state.textOnly = false\n  }\n\n  state.visible = true\n}\n\nfunction closeToast() {\n  state.visible = false\n\n  if (isFunction(state.onClose)) {\n    state.onClose()\n  }\n}\n\nfunction handleReset() {\n  if (state.visible) return\n\n  state.type = null\n  state.content = ''\n  state.icon = props.icon\n  state.iconProps = props.iconProps\n  state.position = props.position\n  state.transition = props.transitionName\n  state.closable = props.closable\n  state.maskClose = props.maskClose\n  state.showMask = props.showMask\n  state.maskClass = props.maskClass\n  state.maskStyle = props.maskStyle\n  state.parseHtml = props.parseHtml\n  state.textOnly = false\n  state.renderer = props.renderer\n  state.onClose = null\n}\n\nfunction handleWrapperClick() {\n  if (state.visible && state.closable) {\n    closeToast()\n  }\n}\n\nfunction handleMaskClick() {\n  if (state.visible && state.maskClose) {\n    closeToast()\n  }\n}\n</script>\n\n<template>\n  <div\n    :class=\"{\n      [nh.b()]: true,\n      [nh.bs('vars')]: true,\n      [nh.bm('text-only')]: state.textOnly\n    }\"\n    role=\"alert\"\n    :style=\"{\n      zIndex: state.zIndex\n    }\"\n    aria-atomic=\"true\"\n    aria-live=\"assertive\"\n  >\n    <Transition :name=\"nh.ns('fade')\">\n      <div\n        v-if=\"state.showMask && state.visible\"\n        :class=\"[nh.be('mask'), state.maskClass]\"\n        :style=\"state.maskStyle\"\n        @click=\"handleMaskClick\"\n        @wheel.stop.prevent\n      ></div>\n    </Transition>\n    <Transition :name=\"state.transition\">\n      <div\n        v-if=\"state.visible\"\n        :class=\"{\n          [nh.be('wrapper')]: true,\n          [nh.bem('wrapper', state.position)]: state.position !== 'center',\n          [nh.bem('wrapper', 'closable')]: state.closable\n        }\"\n        @click=\"handleWrapperClick\"\n        @wheel.stop.prevent\n      >\n        <Renderer v-if=\"isFunction(state.renderer)\" :renderer=\"state.renderer\"></Renderer>\n        <template v-else>\n          <div\n            v-if=\"state.icon || (state.type && effectiveTypes.includes(state.type))\"\n            :class=\"nh.be('icon')\"\n          >\n            <Icon\n              v-if=\"state.icon\"\n              :icon=\"state.icon\"\n              :scale=\"1.8\"\n              v-bind=\"state.iconProps\"\n            ></Icon>\n            <Icon\n              v-else\n              v-bind=\"{ ...predefinedIcons[state.type!], scale: 1.8, ...state.iconProps }\"\n            ></Icon>\n          </div>\n          <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\n          <div v-else :class=\"nh.be('content')\">\n            {{ state.content }}\n          </div>\n        </template>\n      </div>\n    </Transition>\n  </div>\n</template>\n","import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './toast.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type { ToastInstance, ToastOptions, ToastType } from './symbol'\n\nexport { toastProps } from './props'\n\nexport type { ToastProps, ToastCProps } from './props'\nexport type { ToastType, ToastOptions }\n\ntype FuzzyOptions = string | ToastOptions\n\ninterface AipMethod {\n  (options: ToastOptions): () => void,\n  (content: string, duration?: number): () => void,\n  /** @internal */\n  (options: FuzzyOptions, duration?: number): () => void,\n}\n\nconst conveniences: Record<ToastType, Record<string, any>> = {\n  success: {},\n  warning: {},\n  error: {},\n  loading: {\n    showMask: true,\n  },\n}\n\nexport class ToastManager {\n  name: string\n  defaults: Record<string, unknown>\n\n  open: AipMethod\n  success: AipMethod\n  warning: AipMethod\n  error: AipMethod\n  loading: AipMethod\n\n  private _mountedApp: App<unknown> | null\n  private _instance: ToastInstance | null\n  private _innerApp: App<unknown> | null\n  private _container: HTMLElement | null\n  private _timer: ReturnType<typeof setTimeout> | null\n  private _wrapper: HTMLElement | SVGElement | null\n  private _mountedEl: HTMLElement | null\n\n  constructor(options: Partial<ToastOptions> = {}) {\n    options = {\n      ...options,\n      duration: options.duration ? toNumber(options.duration) : 2000,\n    }\n\n    this._mountedApp = null\n    this._instance = null\n    this._innerApp = null\n    this._container = null\n    this._timer = null\n    this._wrapper = null\n    this._mountedEl = null\n    this.name = 'Toast'\n    this.defaults = {}\n\n    this.config(options)\n\n    this.open = (content: FuzzyOptions, duration?: number) => {\n      return this._open(null, content, duration)\n    }\n\n    this.success = (content: FuzzyOptions, duration?: number) => {\n      return this._open('success', content, duration)\n    }\n\n    this.warning = (content: FuzzyOptions, duration?: number) => {\n      return this._open('warning', content, duration)\n    }\n\n    this.error = (content: FuzzyOptions, duration?: number) => {\n      return this._open('error', content, duration)\n    }\n\n    this.loading = (content: FuzzyOptions, duration?: number) => {\n      return this._open('loading', content, duration)\n    }\n  }\n\n  close() {\n    this._timer && clearTimeout(this._timer)\n    this._getInstance()?.closeToast()\n  }\n\n  config(options: Record<string, unknown>) {\n    this.defaults = { ...this.defaults, ...options }\n  }\n\n  clone() {\n    const manager = new ToastManager(this.defaults)\n\n    manager._mountedApp = this._mountedApp\n\n    return manager\n  }\n\n  destroy() {\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n    this._innerApp?.unmount()\n    this._container && render(null, this._container)\n    destroyObject(this)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  install(app: App, options: Partial<ToastOptions> & { property?: string } = {}) {\n    const { property, ...others } = options\n\n    this.config(others)\n    this._mountedApp = app\n\n    if (property || !app.config.globalProperties.$toast) {\n      app.config.globalProperties[property || '$toast'] = this\n    }\n  }\n\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\n    if (!isClient) return\n\n    const el = unrefElement(target)\n\n    if (el) {\n      this._wrapper = el\n\n      if (this._instance) {\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n      } else {\n        this._getInstance()\n      }\n    }\n  }\n\n  private _getInstance() {\n    if (!this._instance && isClient) {\n      if (!this._mountedApp) {\n        console.warn('[vexip-ui:Toast]: App missing, the plugin maybe not installed.')\n\n        this._container = document.createElement('div')\n        this._innerApp = createApp(Component)\n        this._instance = this._innerApp.mount(this._container) as ToastInstance\n      } else {\n        const vnode = createVNode(Component, null, null)\n\n        this._container = document.createElement('div')\n        vnode.appContext = this._mountedApp._context\n\n        render(vnode, this._container)\n\n        this._instance = proxyExposed<ToastInstance>(vnode)\n      }\n\n      this._mountedEl = this._container.firstElementChild as HTMLElement\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\n    }\n\n    return this._instance\n  }\n\n  private _open(type: null | ToastType, content: FuzzyOptions, _duration?: number) {\n    if (!isClient) {\n      return noop\n    }\n\n    this._timer && clearTimeout(this._timer)\n\n    const options = typeof content === 'string' ? { content, duration: _duration } : content\n    const convenienceOptions = type ? (conveniences[type] ?? {}) : {}\n\n    const userCloseFn = options.onClose\n    const onClose = () => {\n      this._timer && clearTimeout(this._timer)\n\n      if (typeof userCloseFn === 'function') {\n        return userCloseFn()\n      }\n    }\n\n    const toast = this._getInstance()!\n    const item: ToastOptions = {\n      ...this.defaults,\n      ...convenienceOptions,\n      ...options,\n      type: type ?? options.type,\n      onClose,\n    }\n\n    if (item.icon && typeof item.icon !== 'function') {\n      item.icon = markRaw(item.icon)\n    }\n\n    toast.openToast(item)\n\n    const duration = typeof item.duration === 'number' ? item.duration : 2000\n\n    if (duration >= 500) {\n      this._timer = setTimeout(() => {\n        toast.closeToast()\n      }, duration)\n    }\n\n    return () => {\n      this._timer && clearTimeout(this._timer)\n      toast.closeToast()\n    }\n  }\n}\n\nexport const Toast = new ToastManager()\n","import { booleanProp, booleanStringProp, buildProps, eventProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { TourSignType, TourSlots, TourStepOptions, TourStepRenderFn, TourType } from './symbol'\n\nexport const tourProps = buildProps({\n  locale: localeProp('tour'),\n  active: booleanProp,\n  index: Number,\n  steps: Array as PropType<TourStepOptions[]>,\n  type: String as PropType<TourType>,\n  hideMask: booleanProp,\n  signType: String as PropType<TourSignType>,\n  padding: [Number, Array] as PropType<number | number[]>,\n  closable: booleanProp,\n  permeable: booleanProp,\n  transfer: booleanStringProp,\n  slots: Object as PropType<TourSlots>,\n  onToggle: eventProp<(active: boolean) => void>(),\n  onChange: eventProp<(index: number, step: TourStepOptions) => void>(),\n  onClose: eventProp(),\n  onMaskClick: eventProp<(event: MouseEvent) => void>(),\n})\n\nexport type TourProps = ExtractPropTypes<typeof tourProps>\nexport type TourCProps = ConfigurableProps<ExtractPropTypes<typeof tourProps>>\n\nexport const tourStepProps = buildProps({\n  target: [String, Object, Function] as PropType<string | object | (() => any)>,\n  placement: String as PropType<Placement>,\n  title: String,\n  content: String,\n  order: Number,\n  type: String as PropType<TourType>,\n  renderer: Function as PropType<TourStepRenderFn>,\n  onPrev: eventProp(),\n  onNext: eventProp(),\n})\n\nexport type TourStepProps = ExtractPropTypes<typeof tourStepProps>\nexport type TourStepCProps = ConfigurableProps<ExtractPropTypes<typeof tourStepProps>>\n","import type { InjectionKey, MaybeRef } from 'vue'\nimport type { MaybeElement, MaybeInstance, Placement } from '@vexip-ui/hooks'\nimport type { BubbleType } from '@/components/bubble'\n\nexport type TourType = BubbleType\nexport type TourSignType = 'dot' | 'bar' | 'count'\n\nexport interface TourVirtual {\n  getBoundingClientRect(): { top: number, left: number, width: number, height: number },\n}\n\nexport type TourTarget =\n  | MaybeRef<string | MaybeInstance | TourVirtual>\n  | (() => string | MaybeElement | TourVirtual)\n\nexport interface TourPayload {\n  start(): void,\n  prev(): void,\n  next(autoClose?: boolean): void,\n  close(): void,\n}\n\nexport type TourStepRenderFn = (payload: TourPayload) => any\n\nexport interface TourStepOptions {\n  target?: TourTarget,\n  placement?: Placement,\n  title?: string,\n  content?: string,\n  order?: number,\n  type?: TourType,\n  renderer?: TourStepRenderFn,\n}\n\nexport type TourSlotParams = TourPayload & { step: TourStepOptions, index: number }\nexport type TourCommonSLot = (params: TourSlotParams) => any\n\nexport interface TourState {\n  increaseStep(step: TourStepOptions): void,\n  decreaseStep(step: TourStepOptions): void,\n}\n\nexport interface TourSlots {\n  /**\n   * @internal\n   */\n  default?: () => any,\n  header?: TourCommonSLot,\n  title?: TourCommonSLot,\n  close?: TourCommonSLot,\n  body?: TourCommonSLot,\n  footer?: TourCommonSLot,\n  sign?: TourCommonSLot,\n  actions?: TourCommonSLot,\n}\n\nexport const TOUR_STATE = '___VXP_TOUR_STATE' as unknown as InjectionKey<TourState>\n","<script setup lang=\"ts\">\nimport { Bubble } from '@/components/bubble'\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  emitEvent,\n  getStepByWord,\n  useIcons,\n  useId,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { unrefElement, useModifier, usePopper } from '@vexip-ui/hooks'\nimport { callIfFunc, decide, isClient, isFunction } from '@vexip-ui/utils'\nimport { tourProps } from './props'\nimport { TOUR_STATE } from './symbol'\n\nimport type { BubbleExposed } from '@/components/bubble'\nimport type { MaskerExposed } from '@/components/masker'\nimport type { TourSlots, TourStepOptions } from './symbol'\n\ndefineOptions({\n  name: 'Tour',\n  inheritAttrs: false,\n})\n\nconst _props = defineProps(tourProps)\nconst props = useProps('tour', _props, {\n  locale: null,\n  active: false,\n  index: {\n    static: true,\n    default: 0,\n    validator: value => value >= 0,\n  },\n  steps: {\n    static: true,\n    default: () => [],\n  },\n  type: 'default',\n  hideMask: false,\n  signType: 'dot',\n  padding: 10,\n  closable: true,\n  permeable: false,\n  transfer: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active', 'update:index'])\n\ndefineSlots<TourSlots>()\n\nconst nh = useNameHelper('tour')\nconst locale = useLocale('tour', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(props.index)\nconst tempSteps: Set<TourStepOptions> = reactive(new Set<any>())\nconst currentRect = ref<number[]>()\nconst sideRects = ref<(number | string)[][]>()\n\nconst masker = ref<MaskerExposed>()\nconst bubble = ref<BubbleExposed>()\nconst wrapper = computed(() => masker.value?.wrapper)\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (!currentActive.value) return\n\n    decide(\n      [\n        [() => modifier.left || modifier.up, prev],\n        [() => modifier.right || modifier.down, next],\n        [() => modifier.escape, handleClose],\n      ],\n      {\n        beforeMatchAny: () => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n        afterMatchAny: modifier.resetAll,\n      },\n    )\n  },\n})\n\nconst allSteps = computed(() => {\n  return Array.from(tempSteps)\n    .concat(props.steps)\n    .sort((prev, next) => (prev.order || 0) - (next.order || 0))\n})\nconst currentStep = computed(() => allSteps.value[currentIndex.value])\nconst type = computed(() => {\n  const type = currentStep.value?.type || props.type\n\n  return type === 'default' ? undefined : type\n})\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('hide-mask')]: props.hideMask,\n      [nh.bm('permeable')]: props.permeable,\n    },\n  ]\n})\nconst padding = computed(() => {\n  if (Array.isArray(props.padding)) {\n    return props.padding.length === 2\n      ? [props.padding[0], props.padding[1], props.padding[0], props.padding[1]]\n      : props.padding\n  } else {\n    return new Array<number>(4).fill(props.padding)\n  }\n})\nconst maskId = useId()\n\nconst { reference, placement, updatePopper } = usePopper({\n  wrapper,\n  placement: computed(() => currentStep.value?.placement || 'bottom'),\n  popper: computed(() => bubble.value?.$el),\n  arrow: computed(() => bubble.value?.arrow),\n  shift: { crossAxis: true },\n  autoUpdate: false,\n})\n\nwatch(\n  () => props.active,\n  value => {\n    if (value) {\n      start()\n    } else {\n      currentActive.value = value\n    }\n  },\n)\nwatch(\n  () => props.index,\n  value => {\n    currentIndex.value = Math.max(0, value)\n  },\n)\nwatch(\n  [currentActive, currentStep],\n  () => {\n    sideRects.value = undefined\n\n    if (!isClient || !currentActive.value || !currentStep.value) return\n\n    const target = unrefElement(callIfFunc(currentStep.value.target) as HTMLElement)\n\n    if (!target) {\n      currentRect.value = undefined\n      return\n    }\n\n    const { top, left, width, height } = target.getBoundingClientRect()\n\n    currentRect.value = [\n      left - padding.value[3],\n      top - padding.value[0],\n      width + padding.value[1] + padding.value[3],\n      height + padding.value[0] + padding.value[2],\n    ]\n\n    if (props.permeable) {\n      const [x, y, w, h] = currentRect.value\n\n      sideRects.value = [\n        [0, 0, '100%', y],\n        [x + w, 0, `calc(100% - ${x + w}px)`, '100%'],\n        [0, y + h, '100%', `calc(100% - ${y + h}px)`],\n        [0, 0, x, '100%'],\n      ]\n    }\n\n    updatePopper()\n  },\n  { immediate: true, flush: 'post' },\n)\n\nprovide(TOUR_STATE, {\n  increaseStep,\n  decreaseStep,\n})\n\ndefineExpose({\n  wrapper,\n  currentActive,\n  currentIndex,\n  currentStep,\n  allSteps,\n  start,\n  prev,\n  next,\n  close,\n})\n\nconst actions = { start, prev, next, close }\nconst slotParams = shallowReadonly(\n  reactive({\n    ...actions,\n    step: currentStep,\n    index: currentIndex,\n  }),\n)\n\nfunction increaseStep(step: TourStepOptions) {\n  tempSteps.add(step)\n}\n\nfunction decreaseStep(step: TourStepOptions) {\n  tempSteps.delete(step)\n}\n\nfunction start() {\n  if (currentActive.value) return\n\n  currentActive.value = true\n  emit('update:active', true)\n  emitEvent(props.onToggle, true)\n\n  if (currentIndex.value) {\n    currentIndex.value = 0\n    emit('update:index', 0)\n  }\n}\n\nfunction prev() {\n  if (!currentActive.value || currentIndex.value <= 0) return\n\n  --currentIndex.value\n  emit('update:index', currentIndex.value)\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\n}\n\nfunction next(autoClose = true) {\n  if (!currentActive.value) return\n\n  if (currentIndex.value >= allSteps.value.length - 1) {\n    if (autoClose) {\n      close()\n    }\n\n    return\n  }\n\n  ++currentIndex.value\n  emit('update:index', currentIndex.value)\n  emitEvent(props.onChange, currentIndex.value, currentStep.value)\n}\n\nfunction close() {\n  if (!currentActive.value) return\n\n  currentActive.value = false\n  emit('update:active', false)\n  emitEvent(props.onToggle, false)\n}\n\nfunction handleClose() {\n  if (!currentActive.value) return\n\n  close()\n  emitEvent(props.onClose)\n}\n</script>\n\n<template>\n  <div v-show=\"false\" role=\"none\" aria-hidden=\"true\">\n    <slot></slot>\n  </div>\n  <Masker\n    v-bind=\"$attrs\"\n    ref=\"masker\"\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :transfer=\"transfer\"\n    auto-remove\n    transition-name=\"\"\n    :disabled=\"props.hideMask\"\n    @show=\"updatePopper\"\n    @hide=\"currentRect = undefined\"\n    @mask-click=\"emitEvent(props.onMaskClick, $event)\"\n  >\n    <template #default=\"{ show }\">\n      <div\n        v-if=\"currentRect\"\n        ref=\"reference\"\n        :class=\"nh.be('reference')\"\n        role=\"none\"\n        aria-hidden=\"true\"\n        :style=\"{\n          top: `${currentRect[1]}px`,\n          left: `${currentRect[0]}px`,\n          width: `${currentRect[2]}px`,\n          height: `${currentRect[3]}px`\n        }\"\n      ></div>\n      <Transition appear :name=\"nh.ns('fade')\">\n        <Bubble\n          v-if=\"show && currentStep\"\n          ref=\"bubble\"\n          inherit\n          :class=\"[\n            nh.be('bubble'),\n            !currentRect && nh.bem('bubble', 'center'),\n            type && nh.bem('bubble', 'typed'),\n            type && nh.bem('bubble', type)\n          ]\"\n          :content-class=\"nh.be('step')\"\n          :placement=\"placement\"\n          :type=\"currentStep.type || props.type\"\n        >\n          <Renderer\n            v-if=\"isFunction(currentStep.renderer)\"\n            :renderer=\"currentStep.renderer\"\n            :data=\"actions\"\n          ></Renderer>\n          <template v-else>\n            <div :class=\"nh.be('header')\">\n              <slot name=\"header\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n                  <div :class=\"nh.be('title')\">\n                    <slot name=\"title\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                        {{ currentStep.title ?? getStepByWord(locale.stepCount, currentIndex) }}\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <button\n                    v-if=\"props.closable\"\n                    type=\"button\"\n                    :class=\"nh.be('close')\"\n                    @click=\"handleClose\"\n                  >\n                    <slot name=\"close\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                        <Icon\n                          v-bind=\"icons.close\"\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\n                          label=\"close\"\n                        ></Icon>\n                      </Renderer>\n                    </slot>\n                  </button>\n                </Renderer>\n              </slot>\n            </div>\n            <div :class=\"nh.be('content')\">\n              <slot name=\"body\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.body\" :data=\"slotParams\">\n                  {{ currentStep.content }}\n                </Renderer>\n              </slot>\n            </div>\n            <div :class=\"nh.be('footer')\">\n              <slot name=\"footer\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n                  <div :class=\"[nh.be('sign'), nh.bem('sign', props.signType)]\">\n                    <slot name=\"sign\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.sign\" :data=\"slotParams\">\n                        <template v-if=\"props.signType === 'count'\">\n                          <span>{{ currentIndex + 1 }}</span>\n                          <span :class=\"nh.be('count-sep')\">/</span>\n                          <span>{{ allSteps.length }}</span>\n                        </template>\n                        <template v-else>\n                          <span\n                            v-for=\"n in allSteps.length\"\n                            :key=\"n\"\n                            :class=\"[\n                              nh.be(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`),\n                              n - 1 === currentIndex &&\n                                nh.bem(`sign-${props.signType === 'dot' ? 'dot' : 'bar'}`, 'active')\n                            ]\"\n                          ></span>\n                        </template>\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <span style=\"flex: auto\" role=\"none\"></span>\n                  <slot name=\"actions\" v-bind=\"slotParams\">\n                    <Renderer :renderer=\"props.slots.actions\" :data=\"slotParams\">\n                      <Button\n                        v-if=\"currentIndex > 0\"\n                        inherit\n                        :class=\"[nh.be('action'), nh.bem('action', 'prev')]\"\n                        size=\"small\"\n                        :text=\"!!type\"\n                        @click=\"prev\"\n                      >\n                        {{ locale.prev }}\n                      </Button>\n                      <Button\n                        v-if=\"currentIndex <= allSteps.length - 1\"\n                        inherit\n                        :class=\"[nh.be('action'), nh.bem('action', 'next')]\"\n                        :type=\"type ? 'default' : 'primary'\"\n                        size=\"small\"\n                        @click=\"next()\"\n                      >\n                        {{ currentIndex === allSteps.length - 1 ? locale.done : locale.next }}\n                      </Button>\n                    </Renderer>\n                  </slot>\n                </Renderer>\n              </slot>\n            </div>\n          </template>\n        </Bubble>\n      </Transition>\n    </template>\n    <template #mask>\n      <svg style=\"width: 100%; height: 100%\">\n        <defs>\n          <mask :id=\"maskId\">\n            <rect\n              x=\"0\"\n              y=\"0\"\n              width=\"100%\"\n              height=\"100%\"\n              fill=\"white\"\n            />\n            <rect\n              v-if=\"currentRect\"\n              :class=\"[nh.be('hollow'), nh.bem('hollow', 'active')]\"\n              :x=\"currentRect[0]\"\n              :y=\"currentRect[1]\"\n              :width=\"currentRect[2]\"\n              :height=\"currentRect[3]\"\n              fill=\"black\"\n            />\n          </mask>\n        </defs>\n        <rect\n          x=\"0\"\n          y=\"0\"\n          width=\"100%\"\n          height=\"100%\"\n          fill=\"rgba(0, 0, 0, 45%)\"\n          :mask=\"`url(#${maskId})`\"\n        />\n        <g v-if=\"sideRects?.length\" fill=\"transparent\" style=\"pointer-events: auto\">\n          <rect\n            v-for=\"(rect, index) in sideRects\"\n            :key=\"index\"\n            :x=\"rect[0]\"\n            :y=\"rect[1]\"\n            :width=\"rect[2]\"\n            :height=\"rect[3]\"\n          />\n        </g>\n      </svg>\n    </template>\n  </Masker>\n</template>\n","import { defineComponent, inject, onBeforeUnmount, reactive, renderSlot, watch } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport { tourStepProps } from './props'\nimport { TOUR_STATE } from './symbol'\n\nimport type { TourPayload, TourStepOptions } from './symbol'\n\ntype StepPropKey = keyof typeof tourStepProps\n\nconst propKeys = Object.keys(tourStepProps) as StepPropKey[]\nconst deepProps: StepPropKey[] = []\nconst ignoredProps: StepPropKey[] = ['renderer']\n\nconst funcProp = {\n  default: null,\n  isFunc: true,\n  static: true,\n}\n\nexport default defineComponent({\n  name: 'TourStep',\n  props: tourStepProps,\n  setup(_props, { slots }) {\n    const props = useProps('tourStep', _props, {\n      target: {\n        default: null,\n        static: true,\n      },\n      placement: 'bottom',\n      title: '',\n      content: '',\n      order: {\n        default: 0,\n        static: true,\n      },\n      type: 'default',\n      renderer: funcProp,\n    })\n\n    const tourState = inject(TOUR_STATE, null)\n    const options = reactive({}) as TourStepOptions\n\n    for (const key of propKeys) {\n      if (ignoredProps.includes(key)) continue\n\n      watch(\n        () => props[key],\n        value => {\n          ;(options[key as keyof TourStepOptions] as any) = value\n        },\n        { immediate: true, deep: deepProps.includes(key) },\n      )\n    }\n\n    watch(() => props.renderer, setRenderer)\n\n    setRenderer()\n\n    tourState?.increaseStep(options)\n\n    onBeforeUnmount(() => {\n      tourState?.decreaseStep(options)\n    })\n\n    function setRenderer() {\n      if (typeof slots.default === 'function') {\n        options.renderer = (payload: TourPayload) => renderSlot(slots, 'default', payload as any)\n      } else if (typeof props.renderer === 'function') {\n        options.renderer = props.renderer\n      } else {\n        options.renderer = undefined\n      }\n    }\n\n    return () => null\n  },\n})\n","import { Checkbox } from '@/components/checkbox'\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { NumberInput } from '@/components/number-input'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { VirtualList } from '@/components/virtual-list'\n\nimport {\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport { stateProp, useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { TransferOptionState } from './symbol'\n\nexport default defineComponent({\n  name: 'TransferPanel',\n  props: {\n    type: {\n      type: String as PropType<'source' | 'target'>,\n      default: null,\n    },\n    state: {\n      type: stateProp,\n      default: 'default',\n    },\n    selected: {\n      type: Set as PropType<Set<string | number>>,\n      default: () => new Set(),\n    },\n    paged: {\n      type: Boolean,\n      default: false,\n    },\n    filter: {\n      type: Function as PropType<(value: string, options: TransferOptionState) => boolean>,\n      default: null,\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    title: {\n      type: String,\n      default: '',\n    },\n    options: {\n      type: Array as PropType<TransferOptionState[]>,\n      default: () => [],\n    },\n    emptyText: {\n      type: String,\n      default: '暂无数据',\n    },\n    optionHeight: {\n      type: Number,\n      default: 32,\n    },\n    deepState: {\n      type: Boolean,\n      default: false,\n    },\n    loading: {\n      type: Boolean,\n      default: false,\n    },\n    loadingIcon: {\n      type: [Object, Function],\n      default: null,\n    },\n    loadingLock: {\n      type: Boolean,\n      default: false,\n    },\n    loadingEffect: {\n      type: String,\n      default: null,\n    },\n    locale: {\n      type: Object as PropType<LocaleConfig['transfer']>,\n      default: () => ({}),\n    },\n  },\n  emits: ['update:selected', 'select', 'enter', 'switch'],\n  setup(props, { slots, emit }) {\n    const nh = useNameHelper('transfer')\n    const icons = useIcons()\n\n    const { isRtl } = useRtl()\n\n    const currentSelected = ref(new Set(props.selected))\n    const pageSize = ref(10)\n    const currentPage = ref(1)\n    const currentMark = ref<string | number | null>(null)\n    const currentHitting = ref(-1)\n    const currentFilter = ref('')\n    const searching = ref(false)\n\n    const header = ref<HTMLElement>()\n    const body = ref<HTMLElement>()\n    const footer = ref<HTMLElement>()\n    const search = ref<HTMLElement>()\n    const input = ref<InstanceType<typeof Input>>()\n    const list = ref<VirtualListExposed>()\n\n    let bodyRealHeight = 0\n    let lastSelected: string | number | null = null\n    let keyUsed = false\n\n    const { target: wrapper, modifier } = useModifier({\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        decide(\n          [\n            [\n              () => modifier.up || modifier.down,\n              () => {\n                if (!keyUsed && currentHitting.value < 0) {\n                  keyUsed = true\n\n                  if (lastSelected) {\n                    currentHitting.value = props.options.findIndex(\n                      option => option.value === lastSelected,\n                    )\n                  } else if (list.value) {\n                    currentHitting.value = Math.round(list.value.scrollOffset / props.optionHeight)\n                  }\n\n                  currentHitting.value = currentHitting.value === -1 ? 0 : currentHitting.value\n                } else {\n                  currentHitting.value = boundRange(\n                    findEnabledIndex(\n                      currentHitting.value + (modifier.up ? -1 : 1),\n                      modifier.up ? -1 : 1,\n                    ),\n                    0,\n                    currentOptions.value.length - 1,\n                  )\n                }\n\n                if (!props.paged) {\n                  ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\n                }\n              },\n            ],\n            [\n              () => props.paged && (modifier.left || modifier.right) && event.ctrlKey,\n              () => {\n                handlePageChange(currentPage.value + (modifier.left ? -1 : 1))\n                currentHitting.value = 0\n              },\n            ],\n            [\n              () =>\n                (props.type === 'source' && modifier.right) ||\n                (props.type === 'target' && modifier.left),\n              () => {\n                keyUsed = false\n                currentHitting.value = -1\n                lastSelected = null\n                emit('switch')\n              },\n            ],\n            [\n              () => modifier.space,\n              () => {\n                const option = currentOptions.value[currentHitting.value]\n\n                if (option) {\n                  currentSelected.value[currentSelected.value.has(option.value) ? 'delete' : 'add'](\n                    option.value,\n                  )\n                  emitSelectedChange()\n                }\n              },\n            ],\n            [() => modifier.enter, () => emit('enter')],\n            [\n              () => typeof props.filter === 'function' && !!input.value && modifier['ctrl+f'],\n              () => {\n                event.stopPropagation()\n                input.value!.focus()\n              },\n            ],\n          ],\n          {\n            beforeMatchAny: () => event.preventDefault(),\n            afterMatchAny: modifier.resetAll,\n          },\n        )\n      },\n    })\n\n    const className = computed(() => {\n      return {\n        [nh.be('panel')]: true,\n        [nh.bem('panel', props.state)]: props.state !== 'default',\n        [nh.bem('panel', 'disabled')]: props.disabled,\n      }\n    })\n    const visibleOptions = computed(() => {\n      const filter = props.filter\n      const filterValue = currentFilter.value\n\n      if (filter && filterValue) {\n        return props.options.filter(option => filter(filterValue, option))\n      }\n\n      return props.options\n    })\n    const optionSize = computed(() => visibleOptions.value.length)\n    const pagedOptions = computed(() => {\n      return visibleOptions.value.slice(\n        (currentPage.value - 1) * pageSize.value,\n        currentPage.value * pageSize.value,\n      )\n    })\n    const currentOptions = computed(() => (props.paged ? pagedOptions.value : visibleOptions.value))\n    const totalPages = computed(() => Math.ceil(optionSize.value / (pageSize.value || 1)))\n\n    watch(\n      () => props.selected,\n      value => {\n        currentSelected.value = value\n      },\n    )\n    watch(optionSize, () => {\n      keyUsed = false\n      currentHitting.value = -1\n      lastSelected = null\n    })\n\n    const partial = ref(false)\n    const allSelected = ref(false)\n\n    watchEffect(() => {\n      const options = visibleOptions.value\n      const selected = currentSelected.value\n\n      let hasSelected = false\n      let hasUnselected = false\n\n      for (let i = 0, len = optionSize.value; i < len; ++i) {\n        const option = options[i]\n\n        if (!option.disabled) {\n          if (selected.has(option.value)) {\n            hasSelected = true\n          } else {\n            hasUnselected = true\n          }\n        }\n\n        if (hasSelected && hasUnselected) {\n          break\n        }\n      }\n\n      allSelected.value = hasSelected && !hasUnselected\n      partial.value = !allSelected.value && selected.size > 0\n    })\n\n    function computePageSize() {\n      requestAnimationFrame(() => {\n        const bodyEl = body.value || list.value?.wrapper\n\n        if (bodyEl) {\n          const style = getComputedStyle(bodyEl)\n          const paddingTop = parseInt(style.paddingTop)\n          const paddingBottom = parseInt(style.paddingBottom)\n          const innerHeight = bodyEl.offsetHeight - paddingTop - paddingBottom\n\n          bodyRealHeight = innerHeight\n          pageSize.value = Math.floor(innerHeight / (props.optionHeight || 1))\n        }\n      })\n    }\n\n    function toggleSelect(option: TransferOptionState) {\n      if (props.disabled || option.disabled) return\n\n      if (currentMark.value && modifier.shift) {\n        handleRangeSelect(currentMark.value, option.value)\n        return\n      }\n\n      if (currentSelected.value.has(option.value)) {\n        currentSelected.value.delete(option.value)\n      } else {\n        currentSelected.value.add(option.value)\n      }\n\n      keyUsed = false\n      currentHitting.value = -1\n      lastSelected = option.value\n      currentMark.value = option.value\n      emitSelectedChange()\n    }\n\n    function handleRangeSelect(start: string | number, end: string | number) {\n      const options = visibleOptions.value\n\n      let startIndex = -1\n      let endIndex = -1\n\n      for (let i = 0, len = options.length; i < len; ++i) {\n        const option = options[i]\n\n        if (option.value === start) {\n          startIndex = i\n        } else if (option.value === end) {\n          endIndex = i\n        }\n\n        if (startIndex > 0 && endIndex > 0) break\n      }\n\n      const method = currentSelected.value.has(options[startIndex]?.value) ? 'add' : 'delete'\n\n      if (startIndex > endIndex) {\n        ;[startIndex, endIndex] = [endIndex, startIndex]\n      }\n\n      for (let i = startIndex; i <= endIndex; ++i) {\n        const option = options[i]\n\n        if (!option.disabled) {\n          currentSelected.value[method](option.value)\n        }\n      }\n\n      emitSelectedChange()\n    }\n\n    function toggleSelectAll(event?: Event) {\n      event?.preventDefault()\n\n      if (props.disabled) return\n\n      if (allSelected.value) {\n        for (const option of visibleOptions.value) {\n          !option.disabled && currentSelected.value.delete(option.value)\n        }\n      } else {\n        for (const option of visibleOptions.value) {\n          !option.disabled && currentSelected.value.add(option.value)\n        }\n      }\n\n      currentMark.value = null\n      emitSelectedChange()\n    }\n\n    function handleReverse() {\n      if (props.disabled) return\n\n      if (partial.value) {\n        const prevSelected = new Set(currentSelected.value)\n\n        for (const option of visibleOptions.value) {\n          if (!option.disabled) {\n            if (prevSelected.has(option.value)) {\n              currentSelected.value.delete(option.value)\n            } else {\n              currentSelected.value.add(option.value)\n            }\n          }\n        }\n\n        currentMark.value = null\n        emitSelectedChange()\n      } else {\n        toggleSelectAll()\n      }\n    }\n\n    function handleBlur() {\n      currentMark.value = null\n      modifier.resetAll()\n    }\n\n    function emitSelectedChange() {\n      emit('update:selected', currentSelected.value)\n      emit('select')\n    }\n\n    function handlePageChange(page: number) {\n      currentPage.value = boundRange(page, 1, totalPages.value)\n    }\n\n    function queryEnabledIndex(index: number, step: number) {\n      const options = currentOptions.value\n      step = step / Math.abs(step)\n\n      while (options[index]?.disabled) {\n        index += step\n\n        if (index < 0 || index >= options.length) break\n      }\n\n      return index\n    }\n\n    function findEnabledIndex(index: number, sign: 1 | -1 = 1) {\n      const options = currentOptions.value\n\n      if (options[index]?.disabled) {\n        index = queryEnabledIndex(index, sign)\n\n        if (sign > 0 ? index >= options.length : index < 0) {\n          index = queryEnabledIndex(index, -sign)\n\n          // 全禁用\n          if (sign > 0 ? index < 0 : index >= options.length) index = -1\n        }\n      }\n\n      return index\n    }\n\n    function ensureOptionInView(index: number, direction: 'top' | 'bottom') {\n      const option = props.options[index]\n\n      if (props.paged || !option || !list.value) return\n\n      if (direction === 'bottom') {\n        const target = (index + 1) * props.optionHeight\n\n        if (list.value.scrollOffset + bodyRealHeight < target) {\n          list.value.scrollTo((index - pageSize.value + 1) * props.optionHeight)\n        }\n      } else {\n        const target = index * props.optionHeight\n\n        if (list.value.scrollOffset > target) {\n          list.value.scrollTo(target)\n        }\n      }\n    }\n\n    const slotParams = reactive({\n      type: toRef(props, 'type'),\n      currentPage,\n      pageSize,\n      totalPages,\n      allSelected,\n      partial,\n      selected: computed(() => Array.from(currentSelected.value)),\n      options: computed(() => visibleOptions.value),\n      toggleSelectAll,\n      handleReverse,\n    })\n\n    function renderOption({ option, index }: { option: TransferOptionState, index: number }) {\n      const disabled = props.disabled || option.disabled\n      const handleCheck = (event: MouseEvent) => {\n        event.preventDefault()\n        event.stopPropagation()\n        toggleSelect(option)\n      }\n\n      return (\n        <li\n          class={{\n            [nh.be('option')]: true,\n            [nh.bem('option', 'disabled')]: disabled,\n            [nh.bem('option', 'hitting')]: currentHitting.value === index,\n          }}\n          role={'option'}\n          aria-disabled={disabled ? 'true' : undefined}\n          onClick={() => toggleSelect(option)}\n        >\n          {renderSlot(slots, 'option', { type: props.type, option, index }, () => [\n            <Checkbox\n              key={1}\n              class={nh.be('checkbox')}\n              state={props.deepState ? props.state : undefined}\n              checked={currentSelected.value.has(option.value)}\n              disabled={disabled}\n              tab-index={-1}\n              onClick={handleCheck}\n            ></Checkbox>,\n            <span key={2} class={nh.be('label')}>\n              {renderSlot(slots, 'label', { type: props.type, option, index }, () => [\n                option.label,\n              ])}\n            </span>,\n          ])}\n        </li>\n      )\n    }\n\n    function renderHeader() {\n      return (\n        <div ref={header} class={nh.be('header')}>\n          {renderSlot(slots, 'header', slotParams, () => [\n            <>\n              <Checkbox\n                inherit\n                control\n                class={nh.be('checkbox')}\n                state={props.deepState ? props.state : undefined}\n                checked={allSelected.value}\n                partial={partial.value}\n                disabled={props.disabled}\n                tab-index={-1}\n                onClick={toggleSelectAll}\n              ></Checkbox>\n              <div\n                class={[nh.be('reverse'), props.disabled && nh.bem('reverse', 'disabled')]}\n                title={props.locale.reverse}\n                onClick={handleReverse}\n              >\n                <Icon\n                  {...icons.value.retweet}\n                  scale={+(icons.value.retweet.scale || 1) * 1.2}\n                ></Icon>\n              </div>\n              <div class={nh.be('counter')}>\n                {`${currentSelected.value.size}/${visibleOptions.value.length}`}\n              </div>\n              {(props.title || slots.title) && (\n                <span class={nh.be('title')}>\n                  {renderSlot(slots, 'title', slotParams, () => [props.title])}\n                </span>\n              )}\n              <CollapseTransition appear horizontal fade-effect>\n                {props.loading && (\n                  <div class={nh.be('loading')}>\n                    <Icon\n                      {...icons.value.loading}\n                      effect={props.loadingEffect || icons.value.loading.effect}\n                      icon={props.loadingIcon || icons.value.loading.icon}\n                      label={'loading'}\n                    ></Icon>\n                  </div>\n                )}\n              </CollapseTransition>\n            </>,\n          ])}\n        </div>\n      )\n    }\n\n    function renderFilter() {\n      if (typeof props.filter !== 'function') return null\n\n      const stop = (e: Event) => e.stopPropagation()\n      // const setFilter = (value: string) => (currentFilter.value = value)\n\n      return (\n        <div ref={search} class={nh.be('filter')}>\n          <Input\n            ref={input}\n            v-model:value={currentFilter.value}\n            inherit\n            clearable\n            sync\n            disabled={props.disabled}\n            placeholder={searching.value ? undefined : props.locale.search}\n            onKeydown={stop}\n            onFocus={() => (searching.value = true)}\n            onBlur={() => (searching.value = false)}\n          >\n            {{\n              suffix: () => <Icon {...icons.value.search}></Icon>,\n            }}\n          </Input>\n        </div>\n      )\n    }\n\n    function renderBody() {\n      if (props.paged || slots.body) {\n        return (\n          <ResizeObserver throttle onResize={computePageSize}>\n            <ul ref={body} class={nh.be('body')} role={'listbox'}>\n              {renderSlot(slots, 'body', slotParams, () => [\n                pagedOptions.value.length ? (\n                  pagedOptions.value.map((option, index) => renderOption({ option, index }))\n                ) : (\n                  <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>\n                ),\n              ])}\n            </ul>\n          </ResizeObserver>\n        )\n      }\n\n      return (\n        <VirtualList\n          ref={list}\n          inherit\n          class={nh.be('body')}\n          items={visibleOptions.value}\n          item-size={props.optionHeight}\n          item-fixed\n          use-y-bar\n          id-key={'value'}\n          items-attrs={{ role: 'listbox', ariaLabel: props.type }}\n          onResize={computePageSize}\n        >\n          {{\n            default: ({ item, index }: { item: TransferOptionState, index: number }) =>\n              renderOption({ option: item, index }),\n            empty: () => <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>,\n          }}\n        </VirtualList>\n      )\n    }\n\n    function renderFooter() {\n      if (!props.paged && !slots.footer) return null\n\n      return (\n        <div ref={footer} class={nh.be('footer')}>\n          {renderSlot(slots, 'footer', slotParams, () => [\n            <div class={nh.be('pagination')}>\n              <Icon\n                {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\n                class={[\n                  nh.be('page-plus'),\n                  currentPage.value <= 1 && nh.bem('page-plus', 'disabled'),\n                ]}\n                onClick={() => handlePageChange(currentPage.value - 1)}\n              ></Icon>\n              <NumberInput\n                inherit\n                value={currentPage.value}\n                class={nh.be('page-input')}\n                size={'small'}\n                min={1}\n                max={totalPages.value}\n                onChange={handlePageChange}\n              ></NumberInput>\n              <span style={'margin: 0 4px'}>{'/'}</span>\n              <span>{totalPages.value}</span>\n              <Icon\n                {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\n                class={[\n                  nh.be('page-minus'),\n                  currentPage.value >= totalPages.value && nh.bem('page-minus', 'disabled'),\n                ]}\n                onClick={() => handlePageChange(currentPage.value + 1)}\n              ></Icon>\n            </div>,\n          ])}\n        </div>\n      )\n    }\n\n    return () => (\n      <div ref={wrapper} class={className.value} tabindex={0} onBlur={handleBlur}>\n        {renderHeader()}\n        {renderFilter()}\n        {renderBody()}\n        {renderFooter()}\n      </div>\n    )\n  },\n})\n","import {\n  booleanProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  stateProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TransferFilter, TransferKeyConfig, TransferSlots } from './symbol'\n\nexport type RawOption = string | Record<string, any>\nexport type Values = (string | number)[]\n\nexport type SelectHandler = (\n  type: 'source' | 'target',\n  selected: { source: Values, target: Values },\n  data: { source: RawOption[], target: RawOption[] }\n) => void\n\nexport const transferProps = buildProps({\n  state: stateProp,\n  locale: localeProp('transfer'),\n  options: Array as PropType<RawOption[]>,\n  value: Array as PropType<Values>,\n  disabled: booleanProp,\n  paged: booleanProp,\n  filter: {\n    type: [Boolean, Function] as PropType<boolean | TransferFilter>,\n    default: null,\n  },\n  emptyText: String,\n  keyConfig: Object as PropType<TransferKeyConfig>,\n  optionHeight: Number,\n  ignoreCase: booleanProp,\n  sourceTitle: String,\n  targetTitle: String,\n  deepState: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  slots: Object as PropType<TransferSlots>,\n  onChange: eventProp<(values: Values) => void>(),\n  onSelect: eventProp<SelectHandler>(),\n})\n\nexport type TransferProps = ExtractPropTypes<typeof transferProps>\nexport type TransferCProps = ConfigurableProps<TransferProps>\n","import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport {\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport {\n  createIconProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { isNull } from '@vexip-ui/utils'\nimport { createSlotRender, useRtl } from '@vexip-ui/hooks'\nimport TransferPanel from './transfer-panel'\nimport { transferProps } from './props'\n\nimport type { TransferKeyConfig, TransferOptionState, TransferSlots } from './symbol'\n\nconst defaultKeyConfig: Required<TransferKeyConfig> = {\n  value: 'value',\n  label: 'label',\n  disabled: 'disabled',\n}\n\nexport default defineComponent({\n  name: 'Transfer',\n  props: transferProps,\n  emits: ['update:value'],\n  setup(_props, { slots, emit, expose }) {\n    const {\n      idFor,\n      labelId,\n      state,\n      disabled,\n      loading,\n      validateField,\n      getFieldValue,\n      setFieldValue,\n    } = useFieldStore<(string | number)[]>(() => source.value?.$el?.focus())\n\n    const props = useProps('transfer', _props, {\n      state: createStateProp(state),\n      locale: null,\n      options: {\n        default: () => [],\n        static: true,\n      },\n      value: {\n        default: () => getFieldValue(),\n        static: true,\n      },\n      disabled: () => disabled.value,\n      paged: false,\n      filter: false,\n      emptyText: null,\n      keyConfig: () => ({}),\n      optionHeight: {\n        default: 32,\n        validator: value => value > 0,\n      },\n      ignoreCase: false,\n      sourceTitle: null,\n      targetTitle: null,\n      deepState: false,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingLock: false,\n      loadingEffect: null,\n      slots: () => ({}),\n    })\n\n    const { isRtl } = useRtl()\n\n    const nh = useNameHelper('transfer')\n    const locale = useLocale('transfer', toRef(props, 'locale'))\n    const icons = useIcons()\n\n    const currentValue = ref<Set<string | number>>(null!)\n    const sourceSelected = ref(new Set<string | number>())\n    const targetSelected = ref(new Set<string | number>())\n    const sourceOptions = ref<TransferOptionState[]>([])\n    const targetOptions = ref<TransferOptionState[]>([])\n    const optionStates = ref<TransferOptionState[]>([])\n\n    const source = ref<InstanceType<typeof TransferPanel>>()\n    const target = ref<InstanceType<typeof TransferPanel>>()\n\n    const keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\n\n    let optionValueMap = new Map<string | number, TransferOptionState>()\n    let emittedValue = props.value\n\n    const updateTrigger = ref(0)\n\n    watchEffect(() => {\n      /* eslint-disable @typescript-eslint/no-unused-expressions */\n      props.keyConfig.value\n      props.keyConfig.label\n      props.keyConfig.disabled\n\n      for (let i = 0, len = props.options.length; i < len; ++i) {\n        props.options[i]\n      }\n      /* eslint-enable */\n\n      updateTrigger.value++\n    })\n\n    watch(updateTrigger, initOptions, { immediate: true })\n\n    watchEffect(() => {\n      if (!currentValue.value.size) {\n        sourceOptions.value = Array.from(optionStates.value)\n        targetOptions.value = []\n        return\n      }\n\n      const selectedValues = new Set(currentValue.value)\n      const target: TransferOptionState[] = []\n      const source: TransferOptionState[] = []\n\n      for (const option of optionStates.value) {\n        if (selectedValues.has(option.value)) {\n          target.push(option)\n        } else {\n          source.push(option)\n        }\n      }\n\n      targetOptions.value = target\n      sourceOptions.value = source\n    })\n\n    function initOptions() {\n      const { value: valueKey, label: labelKey, disabled: disabledKey } = keyConfig.value\n      const oldMap = optionValueMap\n      const map = new Map<string | number, TransferOptionState>()\n\n      props.options.forEach(option => {\n        const rawOption = typeof option === 'string' ? { [valueKey]: option } : option\n        const value = rawOption[valueKey]\n\n        if (isNull(value)) return\n\n        const label = rawOption[labelKey] || String(value)\n        const { [disabledKey]: disabled = false } = rawOption\n        const oldState = oldMap.get(rawOption.value)\n        const optionState = reactive({\n          disabled,\n          value,\n          label,\n          hidden: oldState?.hidden ?? false,\n          hitting: oldState?.hitting ?? false,\n          data: option,\n        })\n\n        map.set(value, optionState)\n      })\n\n      optionValueMap = map\n      optionStates.value = Array.from(map.values())\n      currentValue.value = new Set(emittedValue)\n    }\n\n    const readonly = computed(() => props.loading && props.loadingLock)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm(props.state)]: props.state !== 'default',\n          [nh.bm('readonly')]: readonly.value,\n          [nh.bm('loading')]: props.loading,\n        },\n      ]\n    })\n    const actionType = computed(() => {\n      return props.deepState && props.state !== 'default' ? props.state : 'primary'\n    })\n    const toTargetEnabled = computed(() => !!sourceSelected.value.size)\n    const toSourceEnabled = computed(() => !!targetSelected.value.size)\n    const defaultFilter = computed(() => {\n      return props.ignoreCase\n        ? (value: string, option: TransferOptionState) =>\n          option.label.toLocaleLowerCase().includes(value)\n        : (value: string, option: TransferOptionState) => option.label.includes(value)\n    })\n    const sourceFilter = computed(() => getFilterMethod('source'))\n    const targetFilter = computed(() => getFilterMethod('target'))\n\n    watch(\n      () => props.value,\n      value => {\n        emittedValue = value\n        currentValue.value = new Set(emittedValue)\n      },\n    )\n\n    expose({\n      handleToTarget,\n      handleToSource,\n      handlePanelFocus,\n      handlePanelBlur,\n      focus: (options?: FocusOptions) => source.value?.$el?.focus(options),\n      blur: () => {\n        source.value?.$el?.blur()\n        target.value?.$el?.blur()\n      },\n    })\n\n    function getFilterMethod(type: 'source' | 'target') {\n      const filter = props.filter\n\n      if (!filter) return undefined\n\n      if (typeof filter === 'function') {\n        return (value: string, option: TransferOptionState) => filter(value, option, type)\n      }\n\n      return defaultFilter.value\n    }\n\n    function handleChange() {\n      emittedValue = Array.from(currentValue.value)\n\n      emit('update:value', emittedValue)\n      setFieldValue(emittedValue)\n      emitEvent(props.onChange, emittedValue)\n      validateField()\n    }\n\n    function handleToTarget() {\n      for (const value of sourceSelected.value) {\n        currentValue.value.add(value)\n      }\n\n      sourceSelected.value.clear()\n      handleChange()\n    }\n\n    function handleToSource() {\n      for (const value of targetSelected.value) {\n        currentValue.value.delete(value)\n      }\n\n      targetSelected.value.clear()\n      handleChange()\n    }\n\n    function handleSelect(type: 'source' | 'target') {\n      const selected = {\n        source: Array.from(sourceSelected.value),\n        target: Array.from(targetSelected.value),\n      }\n      const data = {\n        source: selected.source.map(value => optionValueMap.get(value)?.data ?? ''),\n        target: selected.target.map(value => optionValueMap.get(value)?.data ?? ''),\n      }\n\n      emitEvent(props.onSelect, type, selected, data)\n    }\n\n    function handlePanelFocus(type: 'source' | 'target') {\n      if (type === 'source') {\n        source.value?.$el.focus()\n      } else {\n        target.value?.$el.focus()\n      }\n    }\n\n    function handlePanelBlur() {\n      source.value?.$el.blur()\n      target.value?.$el.blur()\n    }\n\n    function getSlotRender(names: string[]) {\n      let renderer: unknown = createSlotRender(slots, names)\n\n      if (!renderer) {\n        for (const name of names) {\n          renderer = props.slots[name as keyof TransferSlots]\n          if (typeof renderer === 'function') {\n            break\n          }\n        }\n\n        return typeof renderer === 'function'\n          ? (params: any) => <Renderer renderer={renderer as any} data={params}></Renderer>\n          : null\n      }\n\n      return null\n    }\n\n    return () => {\n      return (\n        <div\n          id={idFor.value}\n          class={className.value}\n          role={'application'}\n          aria-labelledby={labelId.value}\n        >\n          <TransferPanel\n            ref={source}\n            v-model:selected={sourceSelected.value}\n            type={'source'}\n            class={nh.bem('panel', 'source')}\n            state={props.state}\n            paged={props.paged}\n            filter={sourceFilter.value}\n            disabled={props.disabled}\n            title={props.sourceTitle || locale.value.source}\n            options={sourceOptions.value}\n            empty-text={props.emptyText || locale.value.empty}\n            option-height={props.optionHeight}\n            ignore-case={props.ignoreCase}\n            deep-state={props.deepState}\n            loading={props.loading}\n            loading-icon={props.loadingIcon}\n            loading-lock={props.loadingLock}\n            loading-effect={props.loadingEffect}\n            locale={locale.value}\n            onSelect={() => handleSelect('source')}\n            onEnter={handleToTarget}\n            onSwitch={() => handlePanelFocus('target')}\n          >\n            {{\n              header: getSlotRender(['source-header', 'sourceHeader', 'header']),\n              title: getSlotRender(['source-title', 'sourceTitle', 'title']),\n              body: getSlotRender(['source-body', 'sourceBody', 'body']),\n              footer: getSlotRender(['source-footer', 'sourceFooter', 'footer']),\n              option: getSlotRender(['source-option', 'sourceOption', 'option']),\n              label: getSlotRender(['source-label', 'sourceLabel', 'label']),\n            }}\n          </TransferPanel>\n          <div class={nh.be('actions')}>\n            {renderSlot(slots, 'actions', { handleToTarget, handleToSource }, () => [\n              <Renderer renderer={props.slots.actions} data={{ handleToTarget, handleToSource }}>\n                <Button\n                  key={1}\n                  inherit\n                  class={nh.be('action')}\n                  type={actionType.value}\n                  size={'small'}\n                  disabled={props.disabled || !toTargetEnabled.value}\n                  loading={readonly.value}\n                  loading-icon={props.loadingIcon}\n                  loading-effect={props.loadingEffect}\n                  style={{ marginBottom: '6px' }}\n                  onClick={handleToTarget}\n                >\n                  {{\n                    icon: () => (\n                      <Icon\n                        {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\n                        label={isRtl.value ? 'to left' : 'to right'}\n                      ></Icon>\n                    ),\n                  }}\n                </Button>\n                <Button\n                  key={2}\n                  inherit\n                  class={nh.be('action')}\n                  type={actionType.value}\n                  size={'small'}\n                  disabled={props.disabled || !toSourceEnabled.value}\n                  loading={readonly.value}\n                  loading-icon={props.loadingIcon}\n                  loading-effect={props.loadingEffect}\n                  style={{ margin: '0' }}\n                  onClick={handleToSource}\n                >\n                  {{\n                    icon: () => (\n                      <Icon\n                        {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\n                        label={isRtl.value ? 'to right' : 'to left'}\n                      ></Icon>\n                    ),\n                  }}\n                </Button>\n              </Renderer>,\n            ])}\n          </div>\n          <TransferPanel\n            ref={target}\n            v-model:selected={targetSelected.value}\n            type={'target'}\n            class={nh.bem('panel', 'target')}\n            state={props.state}\n            paged={props.paged}\n            filter={targetFilter.value}\n            disabled={props.disabled}\n            title={props.targetTitle || locale.value.target}\n            options={targetOptions.value}\n            empty-text={props.emptyText || locale.value.empty}\n            option-height={props.optionHeight}\n            ignore-case={props.ignoreCase}\n            deep-state={props.deepState}\n            loading={props.loading}\n            loading-icon={props.loadingIcon}\n            loading-lock={props.loadingLock}\n            loading-effect={props.loadingEffect}\n            locale={locale.value}\n            onSelect={() => handleSelect('target')}\n            onEnter={handleToSource}\n            onSwitch={() => handlePanelFocus('source')}\n          >\n            {{\n              header: getSlotRender(['target-header', 'targetHeader', 'header']),\n              title: getSlotRender(['target-title', 'targetTitle', 'title']),\n              body: getSlotRender(['target-body', 'targetBody', 'body']),\n              footer: getSlotRender(['target-footer', 'targetFooter', 'footer']),\n              option: getSlotRender(['target-option', 'targetOption', 'option']),\n              label: getSlotRender(['target-label', 'targetLabel', 'label']),\n            }}\n          </TransferPanel>\n        </div>\n      )\n    }\n  },\n})\n","import type { InjectionKey } from 'vue'\n// import type { BITree } from '@vexip-ui/utils'\n\nexport type Key = string | number | symbol\nexport type Data = any\nexport type TreeNodeDropType = 'before' | 'inner' | 'after'\nexport type TreeLinkLine = 'dashed' | 'solid' | 'dotted' | 'none'\n\nexport interface TreeNodeKeyConfig {\n  id?: string,\n  parent?: string,\n  label?: string,\n  children?: string,\n  visible?: string,\n  selected?: string,\n  expanded?: string,\n  disabled?: string,\n  checked?: string,\n  loading?: string,\n  loaded?: string,\n  loadFail?: string,\n  readonly?: string,\n  arrow?: string,\n  checkbox?: string,\n  selectDisabled?: string,\n  expandDisabled?: string,\n  checkDisabled?: string,\n  isLeaf?: string,\n}\n\nexport const enum DropType {\n  BEFORE = 'before',\n  INNER = 'inner',\n  AFTER = 'after',\n}\n\nexport type TreeNodeProps<D = Data> = {\n  id: Key,\n  parent?: Key,\n  children: TreeNodeProps[],\n  visible: boolean,\n  selected: boolean,\n  expanded: boolean,\n  disabled: boolean,\n  checked: boolean,\n  loading: boolean,\n  loaded: boolean,\n  loadFail: boolean,\n  readonly: boolean,\n  arrow: boolean | 'auto',\n  checkbox: boolean,\n  selectDisabled: boolean,\n  expandDisabled: boolean,\n  checkDisabled: boolean,\n  isLeaf: boolean | 'auto',\n  data: D,\n  /** @internal */\n  partial: boolean,\n  /** @internal */\n  matched: boolean,\n  /** @internal */\n  childMatched: boolean,\n  /** @internal */\n  upperMatched: boolean,\n  /** @internal */\n  depth: number,\n  /** @internal */\n  last: boolean,\n  /** @internal */\n  upstreamLast: boolean[],\n  /** @internal */\n  lineIndexes: number[],\n}\n\nexport type TreeNodePostCreate<D = Data> = (node: TreeNodeProps<D>) => void\nexport type TreeNodeRenderFn<D = Data> = (params: { data: D, node: TreeNodeProps<D> }) => any\nexport type AsyncLoadFn<D = Data> = (\n  data: D,\n  node: Readonly<TreeNodeProps<D>>,\n) => void | boolean | Promise<any>\nexport type FilterFn<D = Data> = (data: D, node: TreeNodeProps<D>) => boolean\nexport type NodePropsFn<D = Data> = (data: D, node: TreeNodeProps<D>) => Data\n\nexport interface TreeCommonSlotParams {\n  data: Data,\n  node: TreeNodeProps,\n  depth: number,\n  focused: boolean,\n}\n\nexport interface TreeNodeSlotParams extends TreeCommonSlotParams {\n  /** @deprecated */\n  lineCount: number,\n  lineIndexes: number[],\n  toggleCheck: (checked?: boolean) => void,\n  toggleExpand: (expanded?: boolean) => Promise<void>,\n  toggleSelect: (able?: boolean) => Promise<void>,\n}\n\nexport interface TreeNodeInstance {\n  el?: HTMLElement | null,\n  arrow?: HTMLElement | null,\n  node: TreeNodeProps,\n}\n\nexport interface TreeNodeState {\n  el?: HTMLElement | null,\n  depth: number,\n  disabled: boolean,\n  readonly: boolean,\n}\n\nexport interface TreeCollapseProps {\n  id: symbol,\n  placeholder: true,\n  type: 'expand' | 'reduce',\n  height: number,\n  nodes: TreeNodeProps[],\n}\n\nexport interface TreeState {\n  arrow: boolean | 'auto',\n  checkbox: boolean,\n  suffixCheckbox: boolean,\n  noCascaded: boolean,\n  linkLine: false | TreeLinkLine,\n  virtual: boolean,\n  labelKey: string,\n  draggable: boolean,\n  floorSelect: boolean,\n  renderer: TreeNodeRenderFn,\n  prefixRenderer: TreeNodeRenderFn,\n  suffixRenderer: TreeNodeRenderFn,\n  arrowIcon: Record<string, any>,\n  blockEffect: boolean,\n  dragging: boolean,\n  boundAsyncLoad: boolean,\n  nodeStates: Map<Key, TreeNodeState>,\n  expanding: boolean,\n  keepSelected: boolean,\n  multiple: boolean,\n  getParentNode(node: TreeNodeProps): TreeNodeProps | null,\n  updateVisibleNodeEls(): void,\n  computeCheckedState(originNode: TreeNodeProps, able: boolean): void,\n  handleNodeClick(node: TreeNodeProps): void,\n  handleNodeSelect(node: TreeNodeProps): void,\n  handleNodeCancel(node: TreeNodeProps): void,\n  handleNodeExpand(node: TreeNodeProps): void,\n  handleNodeReduce(node: TreeNodeProps): void,\n  handleNodeContextmenu(event: MouseEvent, node: TreeNodeProps): void,\n  handleAsyncLoad(node: TreeNodeProps): Promise<boolean>,\n  handleNodeDragStart(nodeInstance: TreeNodeInstance): void,\n  handleNodeDragOver(nodeInstance: TreeNodeInstance, event: DragEvent): void,\n  handleNodeDrop(nodeInstance: TreeNodeInstance): void,\n  handleNodeDragEnd(nodeInstance: TreeNodeInstance): void,\n  handleHittingChange(type: 'up' | 'down'): void,\n  handleNodeHitting(nodeEl?: HTMLElement | null): void,\n  handleLabelClick(node: TreeNodeProps): void,\n}\n\nexport interface TreeSlots {\n  node?: (params: TreeNodeSlotParams) => any,\n  arrow?: (params: TreeCommonSlotParams) => any,\n  label?: (params: TreeCommonSlotParams) => any,\n  prefix?: (params: TreeCommonSlotParams) => any,\n  suffix?: (params: TreeCommonSlotParams) => any,\n  empty?: () => any,\n}\n\nexport const TREE_STATE = '__VXP_TREE_STATE' as unknown as InjectionKey<TreeState>\nexport const TREE_NODE_STATE = '__VXP_TREE_NODE_STATE' as unknown as InjectionKey<TreeNodeState>\n\nexport const defaultKeyConfig: Required<TreeNodeKeyConfig> = {\n  id: 'id',\n  parent: 'parent',\n  label: 'label',\n  children: 'children',\n  visible: 'visible',\n  selected: 'selected',\n  expanded: 'expanded',\n  disabled: 'disabled',\n  checked: 'checked',\n  loading: 'loading',\n  loaded: 'loaded',\n  loadFail: 'loadFail',\n  readonly: 'readonly',\n  arrow: 'arrow',\n  checkbox: 'checkbox',\n  selectDisabled: 'selectDisabled',\n  expandDisabled: 'expandDisabled',\n  checkDisabled: 'checkDisabled',\n  isLeaf: 'isLeaf',\n}\n","<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, nextTick, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { decide, isNull } from '@vexip-ui/utils'\nimport { TREE_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { TreeNodeProps } from './symbol'\n\ndefineOptions({ name: 'TreeNode', inheritAttrs: false })\n\nconst props = defineProps({\n  node: {\n    type: Object as PropType<TreeNodeProps>,\n    default: () => ({}),\n  },\n})\n\nconst treeState = inject(TREE_STATE)!\n\nconst nh = useNameHelper('tree')\nconst icons = useIcons()\n\nconst { isRtl } = useRtl()\n\nconst wrapper = ref<HTMLElement>()\nconst arrowEl = ref<HTMLElement>()\n\nconst parentState = computed(() => {\n  return props.node.parent ? treeState.nodeStates.get(props.node.parent) : undefined\n})\n\nuseModifier({\n  target: wrapper,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (treeState.expanding) return\n\n    decide(\n      [\n        [\n          () => modifier.up || modifier.down,\n          () => treeState.handleHittingChange(modifier.up ? 'up' : 'down'),\n        ],\n        [\n          () => modifier.left || modifier.right,\n          () => {\n            const hasChild = props.node.children?.length > 0\n\n            if (modifier.right && props.node.expanded && hasChild) {\n              treeState.handleHittingChange('down')\n            } else if (modifier.left && (!props.node.expanded || !hasChild)) {\n              treeState.handleNodeHitting(parentState.value?.el)\n            } else {\n              toggleExpanded(modifier.right)\n            }\n          },\n        ],\n        [() => hasCheckbox.value && modifier.space, handleToggleCheck],\n        [() => modifier.enter, handleToggleSelect],\n      ],\n      {\n        beforeMatchAny: () => {\n          event.preventDefault()\n          event.stopPropagation()\n        },\n        afterMatchAny: modifier.resetAll,\n      },\n    )\n  },\n})\n\nconst loaded = ref(!treeState.boundAsyncLoad || props.node.loaded)\nconst loadFail = ref(treeState.boundAsyncLoad && props.node.loadFail)\nconst dragging = ref(false)\nconst isDragOver = ref(false)\nconst focused = ref(false)\n\nconst isDisabled = computed(() => {\n  return (!treeState.noCascaded && parentState.value?.disabled) || props.node.disabled\n})\nconst isReadonly = computed(() => {\n  return (!treeState.noCascaded && parentState.value?.readonly) || props.node.readonly\n})\n// const depth = computed(() => parentState.depth + 1)\nconst secondary = computed(\n  () => !props.node.matched && (props.node.childMatched || props.node.upperMatched),\n)\nconst hasLinkLine = computed(() => !!treeState.linkLine && props.node.depth > 0)\nconst className = computed(() => {\n  return {\n    [nh.be('node')]: true,\n    [nh.bem('node', 'last')]: props.node.last,\n    [nh.bem('node', 'focused')]: focused.value,\n    [nh.bem('node', 'selected')]: props.node.selected,\n    [nh.bem('node', 'expanded')]: props.node.expanded,\n    [nh.bem('node', 'disabled')]: isDisabled.value,\n    [nh.bem('node', 'readonly')]: isReadonly.value,\n    [nh.bem('node', 'secondary')]: secondary.value,\n    [nh.bem('node', 'dragging')]: dragging.value,\n    [nh.bem('node', 'drag-over')]: isDragOver.value,\n    [nh.bem('node', 'link-line')]: hasLinkLine.value,\n    [nh.bem('node', 'no-arrow')]: !hasArrow.value,\n    [nh.bem('node', 'is-floor')]: treeState.floorSelect && props.node.children?.length,\n    [nh.bem('node', 'loaded')]: loaded.value,\n    [nh.bem('node', 'load-fail')]: loadFail.value,\n  }\n})\nconst isLeaf = computed(() => {\n  const isLeaf = props.node.isLeaf\n\n  let leafSign: boolean | 'auto' = 'auto'\n  let asyncLoad = false\n\n  if (isNull(isLeaf) || isLeaf === 'auto') {\n    leafSign = 'auto'\n    asyncLoad = treeState.boundAsyncLoad\n  } else {\n    leafSign = isLeaf\n  }\n\n  return leafSign === 'auto'\n    ? !(props.node.children?.length || (asyncLoad && !loaded.value))\n    : !!leafSign\n})\nconst hasArrow = computed(() => {\n  return isNull(props.node.arrow) || props.node.arrow === 'auto'\n    ? treeState.arrow === 'auto'\n      ? !isLeaf.value\n      : treeState.arrow\n    : props.node.arrow\n})\nconst hasCheckbox = computed(() => {\n  const checkbox = props.node.checkbox\n\n  return isNull(checkbox) ? treeState.checkbox : checkbox\n})\n// const renderer = computed(() => treeState.renderer)\nconst suffixCheckbox = computed(() => treeState.suffixCheckbox)\nconst nodeState = reactive({\n  el: wrapper,\n  depth: computed(() => props.node.depth),\n  disabled: isDisabled,\n  readonly: isReadonly,\n})\n\nwatch([() => treeState.boundAsyncLoad, () => props.node.loaded], values => {\n  loaded.value = !values[0] || values[1]\n})\nwatch([() => treeState.boundAsyncLoad, () => props.node.loadFail], values => {\n  loadFail.value = !values[0] || values[1]\n})\nwatch(\n  () => props.node.id,\n  (value, prev) => {\n    treeState.nodeStates.delete(prev)\n    treeState.nodeStates.set(value, nodeState)\n  },\n)\n\ntreeState.nodeStates.set(props.node.id, nodeState)\n\nlet dragTimer: ReturnType<typeof setTimeout>\n\nonBeforeUnmount(() => {\n  clearTimeout(dragTimer)\n  treeState.nodeStates.set(props.node.id, nodeState)\n})\n\n// function updateVisible() {\n//   treeState.updateVisibleNodeEls()\n// }\n\nfunction setValue<T = unknown>(key: keyof TreeNodeProps, value: T) {\n  ;(props.node as any)[key] = value\n}\n\nfunction handleClick() {\n  treeState.handleNodeClick(props.node)\n\n  if (treeState.blockEffect) {\n    handleLabelClick()\n  }\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  treeState.handleNodeContextmenu(event, props.node)\n}\n\nfunction handleToggleCheck(able = !props.node.checked) {\n  if (isDisabled.value || props.node.checkDisabled) return\n\n  setValue('checked', able)\n  setValue('partial', false)\n\n  nextTick(() => {\n    treeState.computeCheckedState(props.node, able)\n  })\n}\n\nasync function toggleExpanded(able = !props.node.expanded) {\n  if (\n    treeState.expanding ||\n    props.node.loading ||\n    isDisabled.value ||\n    props.node.expandDisabled ||\n    isLeaf.value\n  ) {\n    return\n  }\n\n  if (able && treeState.boundAsyncLoad && !loaded.value) {\n    setValue('loading', true)\n\n    const result = await treeState.handleAsyncLoad(props.node)\n\n    asyncLoadCallback(result)\n  } else {\n    setValue('expanded', able)\n\n    if (able) {\n      treeState.handleNodeExpand(props.node)\n    } else {\n      treeState.handleNodeReduce(props.node)\n    }\n  }\n}\n\nasync function handleToggleSelect(able = !props.node.selected) {\n  if (isDisabled.value || props.node.selectDisabled) return\n\n  if (treeState.floorSelect) {\n    await toggleExpanded()\n    return\n  }\n\n  const selected = !isReadonly.value && able\n\n  if (selected || !treeState.keepSelected) {\n    setValue('selected', selected)\n  }\n\n  // 只读时也派发 select 事件\n  if (isReadonly.value || able) {\n    treeState.handleNodeSelect(props.node)\n  } else if (treeState.multiple || !treeState.keepSelected) {\n    treeState.handleNodeCancel(props.node)\n  }\n}\n\nfunction handleLabelClick() {\n  treeState.handleLabelClick(props.node)\n  handleToggleSelect()\n}\n\nfunction asyncLoadCallback(success = true) {\n  setValue('loading', false)\n  setValue('expanded', success !== false)\n\n  if (success !== false) {\n    setValue('loaded', true)\n    setValue('loadFail', false)\n\n    if (props.node.children?.length) {\n      treeState.handleNodeExpand(props.node)\n    } else {\n      setValue('arrow', false)\n    }\n  } else {\n    setValue('loadFail', true)\n  }\n}\n\nfunction getNodeState() {\n  return {\n    el: wrapper.value,\n    arrow: arrowEl.value,\n    node: props.node,\n  }\n}\n\nfunction handleDragStart() {\n  if (!treeState.draggable) return\n\n  dragging.value = true\n  treeState.handleNodeDragStart(getNodeState())\n}\n\nfunction handleDragOver(event: DragEvent) {\n  if (!treeState.draggable || !treeState.dragging) return\n\n  clearTimeout(dragTimer)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = true\n\n  treeState.handleNodeDragOver(getNodeState(), event)\n}\n\nfunction handleDragLeave(event: DragEvent) {\n  if (!treeState.draggable) return\n\n  clearTimeout(dragTimer)\n  event.preventDefault()\n\n  dragTimer = setTimeout(() => {\n    isDragOver.value = false\n  }, 100)\n}\n\nfunction handleDrop(event: DragEvent) {\n  if (!treeState.draggable || !treeState.dragging) return\n\n  clearTimeout(dragTimer)\n  event.stopPropagation()\n  event.preventDefault()\n\n  isDragOver.value = false\n\n  treeState.handleNodeDrop(getNodeState())\n}\n\nfunction handleDragEnd(event: DragEvent) {\n  if (!treeState.draggable || !treeState.dragging) return\n\n  event.stopPropagation()\n  dragging.value = false\n  treeState.handleNodeDragEnd(getNodeState())\n}\n</script>\n\n<template>\n  <li\n    v-bind=\"$attrs\"\n    ref=\"wrapper\"\n    :class=\"className\"\n    :draggable=\"treeState.draggable\"\n    tabindex=\"-1\"\n    :aria-disabled=\"isDisabled\"\n    :aria-grabbed=\"treeState.draggable && dragging ? 'true' : undefined\"\n    :style=\"{ [nh.cv('depth')]: node.depth }\"\n    @click.left=\"handleClick\"\n    @contextmenu=\"handleContextmenu\"\n    @focus=\"focused = true\"\n    @blur=\"focused = false\"\n    @dragstart.stop=\"handleDragStart\"\n    @dragover=\"handleDragOver\"\n    @dragleave=\"handleDragLeave\"\n    @dragend=\"handleDragEnd\"\n    @drop=\"handleDrop\"\n  >\n    <slot\n      :data=\"node.data\"\n      :node=\"node\"\n      :depth=\"node.depth\"\n      :focused=\"focused\"\n      :line-count=\"0\"\n      :line-indexes=\"node.lineIndexes\"\n      :toggle-check=\"handleToggleCheck\"\n      :toggle-expand=\"toggleExpanded\"\n      :toggle-select=\"handleToggleSelect\"\n    >\n      <template v-if=\"hasLinkLine\">\n        <div\n          v-for=\"(lineIndex, index) in node.lineIndexes\"\n          :key=\"index\"\n          :class=\"[\n            nh.be('link-line'),\n            nh.bem('link-line', 'vertical'),\n            !index && nh.bem('link-line', 'first')\n          ]\"\n          :style=\"{ [nh.cv('link-line-index')]: lineIndex }\"\n          aria-hidden=\"true\"\n        ></div>\n\n        <div\n          :class=\"[nh.be('link-line'), nh.bem('link-line', 'horizontal')]\"\n          aria-hidden=\"true\"\n        ></div>\n      </template>\n      <div\n        :class=\"{\n          [nh.be('content')]: true,\n          [nh.bem('content', 'effect')]: treeState.blockEffect,\n          [nh.bem('content', 'disabled')]:\n            treeState.blockEffect && (isDisabled || node.selectDisabled)\n        }\"\n      >\n        <span\n          ref=\"arrowEl\"\n          :class=\"{\n            [nh.be('arrow')]: true,\n            [nh.bem('arrow', 'transparent')]: !node.loading && !hasArrow,\n            [nh.bem('arrow', 'expanded')]: node.expanded,\n            [nh.bem('arrow', 'disabled')]: isDisabled || node.expandDisabled\n          }\"\n          :aria-hidden=\"!node.loading && !hasArrow\"\n          @click.stop=\"toggleExpanded()\"\n        >\n          <Icon v-if=\"node.loading\" v-bind=\"icons.loading\" label=\"loading\"></Icon>\n          <slot\n            v-else\n            name=\"arrow\"\n            :data=\"node.data\"\n            :node=\"node\"\n            :depth=\"node.depth\"\n            :focused=\"focused\"\n          >\n            <Icon v-if=\"treeState.arrowIcon\" :icon=\"treeState.arrowIcon\"></Icon>\n            <Icon v-else v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\n          </slot>\n        </span>\n        <Checkbox\n          v-if=\"hasCheckbox && !suffixCheckbox\"\n          inherit\n          :class=\"nh.be('checkbox')\"\n          :tab-index=\"-1\"\n          :control=\"hasArrow\"\n          :checked=\"node.checked\"\n          :disabled=\"isDisabled || node.checkDisabled\"\n          :partial=\"node.partial\"\n          @click.prevent.stop=\"handleToggleCheck()\"\n        ></Checkbox>\n        <div\n          :class=\"{\n            [nh.be('label')]: true,\n            [nh.bem('label', 'effect')]: !treeState.blockEffect,\n            [nh.bem('label', 'disabled')]:\n              !treeState.blockEffect && (isDisabled || node.selectDisabled)\n          }\"\n          @click=\"!treeState.blockEffect && handleLabelClick()\"\n        >\n          <div v-if=\"treeState.prefixRenderer || $slots.prefix\" :class=\"nh.be('prefix')\">\n            <Renderer\n              v-if=\"treeState.prefixRenderer\"\n              :renderer=\"treeState.prefixRenderer\"\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n            ></Renderer>\n            <slot\n              v-else\n              name=\"prefix\"\n              :data=\"node.data\"\n              :node=\"node\"\n              :depth=\"node.depth\"\n              :focused=\"focused\"\n            ></slot>\n          </div>\n          <div :class=\"nh.be('text')\">\n            <Renderer\n              v-if=\"treeState.renderer\"\n              :renderer=\"treeState.renderer\"\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n            ></Renderer>\n            <slot\n              v-else\n              name=\"label\"\n              :data=\"node.data\"\n              :node=\"node\"\n              :depth=\"node.depth\"\n              :focused=\"focused\"\n            >\n              {{ node.data[treeState.labelKey] }}\n            </slot>\n          </div>\n          <div v-if=\"treeState.suffixRenderer || $slots.suffix\" :class=\"nh.be('suffix')\">\n            <Renderer\n              v-if=\"treeState.suffixRenderer\"\n              :renderer=\"treeState.suffixRenderer\"\n              :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n            ></Renderer>\n            <slot\n              v-else\n              name=\"suffix\"\n              :data=\"node.data\"\n              :node=\"node\"\n              :depth=\"node.depth\"\n              :focused=\"focused\"\n            ></slot>\n          </div>\n        </div>\n        <Checkbox\n          v-if=\"hasCheckbox && suffixCheckbox\"\n          inherit\n          :class=\"[nh.be('checkbox'), nh.bem('checkbox', 'suffix')]\"\n          :tab-index=\"-1\"\n          :control=\"hasArrow\"\n          :checked=\"node.checked\"\n          :disabled=\"isDisabled || node.checkDisabled\"\n          :partial=\"node.partial\"\n          @click.prevent.stop=\"handleToggleCheck()\"\n        ></Checkbox>\n      </div>\n    </slot>\n  </li>\n</template>\n","import { booleanProp, buildProps, eventProp, iconProp, localeProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  AsyncLoadFn,\n  Data,\n  FilterFn,\n  NodePropsFn,\n  TreeLinkLine,\n  TreeNodeDropType,\n  TreeNodeKeyConfig,\n  TreeNodePostCreate,\n  TreeNodeProps,\n  TreeNodeRenderFn,\n  TreeSlots,\n} from './symbol'\n\nexport const treeProps = buildProps({\n  locale: localeProp('tree'),\n  arrow: {\n    type: [Boolean, String] as PropType<boolean | 'auto'>,\n    default: null,\n  },\n  data: Array as PropType<Data[]>,\n  noBuildTree: booleanProp,\n  emptyText: String,\n  disabled: booleanProp,\n  readonly: booleanProp,\n  checkbox: booleanProp,\n  suffixCheckbox: booleanProp,\n  renderer: Function as PropType<TreeNodeRenderFn>,\n  prefixRenderer: Function as PropType<TreeNodeRenderFn>,\n  suffixRenderer: Function as PropType<TreeNodeRenderFn>,\n  multiple: booleanProp,\n  indent: [String, Number],\n  accordion: booleanProp,\n  draggable: booleanProp,\n  appear: booleanProp,\n  floorSelect: booleanProp,\n  onAsyncLoad: Function as PropType<AsyncLoadFn>,\n  cacheNode: booleanProp,\n  rootId: [String, Number],\n  keyConfig: Object as PropType<TreeNodeKeyConfig>,\n  noCascaded: booleanProp,\n  filter: [String, Function] as PropType<string | FilterFn>,\n  ignoreCase: booleanProp,\n  nodeProps: [Object, Function] as PropType<Data | NodePropsFn>,\n  linkLine: {\n    type: [Boolean, String] as PropType<boolean | TreeLinkLine>,\n    default: null,\n  },\n  postCreate: Function as PropType<TreeNodePostCreate>,\n  virtual: booleanProp,\n  nodeMinHeight: Number,\n  useYBar: booleanProp,\n  noTransition: booleanProp,\n  arrowIcon: iconProp,\n  blockEffect: booleanProp,\n  filterLeaf: booleanProp,\n  keepSelected: booleanProp,\n  slots: Object as PropType<TreeSlots>,\n  onNodeChange: eventProp<(data: Data, node: TreeNodeProps, checked: boolean) => void>(),\n  onNodeClick: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onNodeSelect: eventProp<(data: Data | Data[], node: TreeNodeProps | TreeNodeProps[]) => void>(),\n  onNodeCancel: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onNodeExpand: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onNodeReduce: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onNodeContextmenu: eventProp<(event: MouseEvent, data: Data, node: TreeNodeProps) => void>(),\n  onDragStart: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onDragOver: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onDrop: eventProp<(data: Data, node: TreeNodeProps, type: TreeNodeDropType) => void>(),\n  onDragEnd: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n  onLabelClick: eventProp<(data: Data, node: TreeNodeProps) => void>(),\n})\n\nexport type TreeProps = ExtractPropTypes<typeof treeProps>\nexport type TreeCProps = ConfigurableProps<TreeProps, 'data', 'onAsyncLoad'>\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Renderer } from '@/components/renderer'\nimport { VirtualList } from '@/components/virtual-list'\n\nimport {\n  computed,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport TreeNode from './tree-node.vue'\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useMounted, useSetTimeout } from '@vexip-ui/hooks'\nimport {\n  debounce,\n  filterTree,\n  flatTree,\n  getGlobalCount,\n  getLast,\n  isNull,\n  isPromise,\n  mapTree,\n  queryAll,\n  removeArrayItem,\n  transformTree,\n  walkTree,\n} from '@vexip-ui/utils'\nimport { treeProps } from './props'\nimport { useCascadedChecked } from './hooks'\nimport { DropType, TREE_NODE_STATE, TREE_STATE, defaultKeyConfig } from './symbol'\n\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type {\n  Data,\n  FilterFn,\n  Key,\n  TreeCollapseProps,\n  TreeNodeInstance,\n  TreeNodeProps,\n  TreeNodeState,\n  TreeSlots,\n} from './symbol'\n\ndefineOptions({ name: 'Tree' })\n\nconst _props = defineProps(treeProps)\nconst props = useProps('tree', _props, {\n  arrow: {\n    default: 'auto',\n    validator: value => typeof value === 'boolean' || value === 'auto',\n  },\n  data: {\n    default: () => [],\n    static: true,\n  },\n  noBuildTree: false,\n  emptyText: null,\n  disabled: false,\n  readonly: false,\n  checkbox: false,\n  suffixCheckbox: false,\n  renderer: {\n    default: null,\n    isFunc: true,\n  },\n  prefixRenderer: {\n    default: null,\n    isFunc: true,\n  },\n  suffixRenderer: {\n    default: null,\n    isFunc: true,\n  },\n  multiple: false,\n  indent: '16px',\n  accordion: false,\n  draggable: false,\n  appear: false,\n  floorSelect: false,\n  onAsyncLoad: {\n    default: null,\n    isFunc: true,\n  },\n  cacheNode: false,\n  rootId: null,\n  keyConfig: () => ({}),\n  noCascaded: false,\n  filter: '',\n  ignoreCase: false,\n  nodeProps: null,\n  linkLine: false,\n  postCreate: {\n    default: null,\n    isFunc: true,\n  },\n  virtual: false,\n  nodeMinHeight: {\n    default: 26,\n    validator: value => value > 0,\n  },\n  useYBar: false,\n  noTransition: false,\n  arrowIcon: createIconProp(),\n  blockEffect: false,\n  filterLeaf: false,\n  keepSelected: false,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<TreeSlots>()\n\nconst nh = useNameHelper('tree')\nconst locale = useLocale('tree', toRef(props, 'locale'))\n\nconst nodeMap = new Map<Key, TreeNodeProps>()\nconst nodeDataMap = new Map<Data, TreeNodeProps>()\nconst treeNodes = ref<TreeNodeProps[]>([])\nconst flattedNodes = ref<TreeNodeProps[]>([])\nconst dragging = ref(false)\nconst indicatorShow = ref(false)\nconst keyConfig = reactive({ ...defaultKeyConfig })\nconst nodeStates = reactive(new Map<Key, TreeNodeState>())\nconst expanding = ref(false)\nconst expandingNodes = ref<TreeNodeProps[]>([])\nconst expandedNodeIds = ref(new Set<Key>())\n\nconst { timer } = useSetTimeout()\nconst { isMounted } = useMounted()\n\nconst virtualList = ref<VirtualListExposed>()\nconst trap = ref<HTMLElement>()\nconst indicator = ref<HTMLElement>()\n\nconst wrapper = computed(() => virtualList.value?.wrapper)\n\nlet visibleNodeEls: HTMLElement[] = []\n\nconst defaultNodeProperties = {\n  visible: true,\n  selected: false,\n  expanded: false,\n  disabled: false,\n  checked: false,\n  loading: false,\n  loaded: false,\n  loadFail: false,\n  readonly: false,\n  arrow: 'auto' as boolean | 'auto',\n  // will follow checkbox prop of tree when not set (be null)\n  checkbox: null! as boolean,\n  selectDisabled: false,\n  expandDisabled: false,\n  checkDisabled: false,\n  isLeaf: 'auto' as boolean | 'auto',\n}\n\nconst boundAsyncLoad = computed(() => typeof props.onAsyncLoad === 'function')\nconst linkLine = computed(() => {\n  return props.linkLine === true ? 'dashed' : props.linkLine === 'none' ? false : props.linkLine\n})\nconst style = computed(() => {\n  return {\n    [nh.cv('indent-width')]: typeof props.indent === 'number' ? `${props.indent}px` : props.indent,\n    [nh.cv('link-line-type')]: linkLine.value || undefined,\n  }\n})\nconst visibleNodes = computed(() => flatNodes(treeNodes.value))\nconst renderedNodes = computed(() => {\n  return expanding.value ? expandingNodes.value : visibleNodes.value\n})\nconst toNodeProps = computed(() => {\n  return typeof props.nodeProps === 'function' ? props.nodeProps : () => props.nodeProps\n})\n\nfunction createDefaultFilter(value: string) {\n  const pattern = props.ignoreCase ? String(value).toLocaleLowerCase() : value\n  const defaultFilter: FilterFn = data => {\n    const label = data[keyConfig.label]\n\n    return props.ignoreCase\n      ? String(label).toLocaleLowerCase().includes(pattern)\n      : String(label).includes(pattern)\n  }\n\n  return defaultFilter\n}\n\nconst updateVisibleNodeEls = debounce(() => {\n  if (wrapper.value) {\n    visibleNodeEls = queryAll(`.${nh.be('node')}`, wrapper.value)\n  }\n}, 300)\n\nlet disableExpand = false\n\nfunction disableExpandTick() {\n  disableExpand = true\n\n  nextTick(() => {\n    disableExpand = false\n  })\n}\nwatchEffect(() => {\n  const nodes = flattedNodes.value\n\n  disableExpandTick()\n\n  if (!props.filter) {\n    for (let i = 0, len = nodes.length; i < len; ++i) {\n      const node = nodes[i]\n\n      node.matched = true\n      node.childMatched = false\n      node.upperMatched = false\n    }\n  } else {\n    const filter =\n      typeof props.filter === 'function' ? props.filter : createDefaultFilter(props.filter)\n    const leafOnly = props.filterLeaf\n\n    for (let i = 0, len = nodes.length; i < len; ++i) {\n      const node = nodes[i]\n\n      if (leafOnly && !isLeafNode(node)) {\n        node.matched = false\n        node.childMatched = false\n        node.upperMatched = false\n\n        continue\n      }\n\n      const parent = node.parent ? nodeMap.get(node.parent) : undefined\n\n      node.matched = filter(node.data, node)\n      node.childMatched = false\n      node.upperMatched = !!parent && (parent.matched || parent.upperMatched)\n\n      if (node.matched) {\n        let upper = parent\n\n        while (upper && !upper.childMatched) {\n          upper.childMatched = true\n          upper.expanded = true\n          upper = upper.parent ? nodeMap.get(upper.parent) : undefined\n        }\n      }\n    }\n  }\n\n  resetExpanded()\n})\nwatchEffect(() => Object.assign(keyConfig, props.keyConfig))\nwatchEffect(() => {\n  const oldIds = expandedNodeIds.value\n  const ids = new Set<Key>()\n\n  let changed = false\n\n  for (const node of flattedNodes.value) {\n    if (node.expanded) {\n      ids.add(node.id)\n\n      if (!changed && !oldIds.has(node.id)) {\n        changed = true\n      }\n    }\n  }\n\n  if (changed || ids.size !== oldIds.size) {\n    expandedNodeIds.value = ids\n  }\n})\nwatch(\n  [\n    () => props.data,\n    () => props.data.length,\n    () => keyConfig.id,\n    () => keyConfig.children,\n    () => keyConfig.parent,\n    () => props.rootId,\n  ],\n  parseAndTransformData,\n  { immediate: true },\n)\nwatch(\n  [treeNodes, () => props.rootId],\n  () => {\n    flattedNodes.value = flatTree(treeNodes.value, {\n      keyField: 'id',\n      parentField: 'parent',\n      childField: 'children',\n      rootId: props.rootId,\n      injectId: false,\n      depthFirst: true,\n    })\n  },\n  { immediate: true },\n)\nwatch(expandedNodeIds, (value, prev) => {\n  if (props.noTransition) {\n    updateVisibleNodeEls()\n  }\n\n  if (props.noTransition || disableExpand || !wrapper.value) return\n\n  let addedId: Key | undefined\n  let removedId: Key | undefined\n\n  for (const id of value) {\n    if (!prev.has(id)) {\n      if (addedId != null) return\n\n      addedId = id\n    }\n  }\n\n  for (const id of prev) {\n    if (!value.has(id)) {\n      if (removedId != null) return\n\n      removedId = id\n    }\n  }\n\n  if (addedId == null && removedId == null) return\n  if (\n    (addedId && !nodeMap.get(addedId)?.children?.length) ||\n    (removedId && !nodeMap.get(removedId)?.children?.length)\n  )\n    return\n\n  clearTimeout(timer.expand)\n\n  transferring.value = false\n  expanding.value = true\n\n  let baseExpandedIds: Set<Key> | undefined\n\n  if (addedId != null) {\n    baseExpandedIds = prev\n  }\n\n  if (removedId != null) {\n    if (!baseExpandedIds) {\n      baseExpandedIds = value\n    } else {\n      baseExpandedIds = new Set(baseExpandedIds)\n      baseExpandedIds.delete(removedId)\n    }\n  }\n\n  const baseNodes = flatNodes(treeNodes.value, baseExpandedIds!)\n\n  const virtual = props.virtual\n  const viewHeight = wrapper.value.offsetHeight\n  const nodeHeight = props.nodeMinHeight || 1\n  const viewCount = Math.ceil(viewHeight / nodeHeight) + 1\n\n  const loop = [\n    addedId != null && { id: addedId, type: 'expand' },\n    removedId != null && { id: removedId, type: 'reduce' },\n  ]\n\n  for (const meta of loop) {\n    if (!meta) continue\n\n    const { id, type } = meta\n    const index = baseNodes.findIndex(node => node.id === id)\n\n    if (~index) {\n      const children = baseNodes[index].children\n\n      if (children?.length) {\n        const addedNodes = flatNodes(children, value)\n\n        baseNodes.splice(index + 1, 0, {\n          id: Symbol('TreeNodePlaceholder'),\n          collapse: true,\n          type,\n          height: virtual ? addedNodes.length * nodeHeight : undefined,\n          nodes: virtual ? addedNodes.slice(0, viewCount) : addedNodes,\n        } as any)\n      }\n    }\n  }\n\n  expandingNodes.value = baseNodes\n})\n\nprovide(\n  TREE_STATE,\n  reactive({\n    arrow: toRef(props, 'arrow'),\n    checkbox: toRef(props, 'checkbox'),\n    suffixCheckbox: toRef(props, 'suffixCheckbox'),\n    noCascaded: toRef(props, 'noCascaded'),\n    linkLine,\n    virtual: toRef(props, 'virtual'),\n    labelKey: toRef(keyConfig, 'label'),\n    draggable: toRef(props, 'draggable'),\n    floorSelect: toRef(props, 'floorSelect'),\n    renderer: toRef(props, 'renderer'),\n    prefixRenderer: toRef(props, 'prefixRenderer'),\n    suffixRenderer: toRef(props, 'suffixRenderer'),\n    arrowIcon: toRef(props, 'arrowIcon'),\n    blockEffect: toRef(props, 'blockEffect'),\n    dragging,\n    boundAsyncLoad,\n    nodeStates,\n    expanding,\n    keepSelected: toRef(props, 'keepSelected'),\n    multiple: toRef(props, 'multiple'),\n    getParentNode,\n    updateVisibleNodeEls,\n    computeCheckedState,\n    handleNodeClick,\n    handleNodeSelect,\n    handleNodeCancel,\n    handleNodeExpand,\n    handleNodeReduce,\n    handleNodeContextmenu,\n    handleAsyncLoad,\n    handleNodeDragStart,\n    handleNodeDragOver,\n    handleNodeDrop,\n    handleNodeDragEnd,\n    handleHittingChange,\n    handleNodeHitting,\n    handleLabelClick,\n  }),\n)\nprovide(\n  TREE_NODE_STATE,\n  reactive({\n    depth: -1,\n    disabled: toRef(props, 'disabled'),\n    readonly: toRef(props, 'readonly'),\n  }),\n)\n\ndefineExpose({\n  treeNodes,\n  flattedNodes,\n  dragging,\n  expanding,\n\n  virtualList,\n  trap,\n  indicator,\n\n  refreshScroll,\n  isLeafNode,\n  parseAndTransformData,\n  forceUpdateData,\n  syncNodeStateIntoData,\n  getCheckedNodes,\n  getCheckedNodeData,\n  getSelectedNodes,\n  getSelectedNodeData,\n  getExpandedNodes,\n  getDisabledNodes,\n  getParentNode,\n  getNodeChildren,\n  getSiblingNodes,\n  getPrevSiblingNode,\n  getNextSiblingNode,\n  getNodeByData,\n  expandNodeByData,\n  selectNodeByData,\n  checkNodeByData,\n  toggleNodeLoadingByData,\n  toggleAllExpanded,\n  getTreeData,\n  getFlattedData,\n  updateVisibleNodeEls,\n})\n\nonMounted(updateVisibleNodeEls)\n\nconst { updateCheckedUpward, updateCheckedDown } = useCascadedChecked({\n  getNode: key => nodeMap.get(key),\n  disableNode: node => node.disabled,\n})\n\nfunction getIndexId() {\n  return `__vxp-tree-key-${getGlobalCount()}`\n}\n\nfunction isLeafNode(node: TreeNodeProps) {\n  const isLeaf = node.isLeaf\n\n  let leafSign: boolean | 'auto' = 'auto'\n  let asyncLoad = false\n\n  if (isNull(isLeaf) || isLeaf === 'auto') {\n    leafSign = 'auto'\n    asyncLoad = boundAsyncLoad.value\n  } else {\n    leafSign = isLeaf\n  }\n\n  return leafSign === 'auto' ? !(node.children?.length || (asyncLoad && !node.loaded)) : !!leafSign\n}\n\nfunction flatNodes(nodes: TreeNodeProps[], expandedIds?: Set<Key>) {\n  const rootNodes = new Set(nodes)\n\n  return flatTree(nodes, {\n    keyField: 'id',\n    parentField: 'parent',\n    childField: 'children',\n    injectId: false,\n    depthFirst: true,\n    cascaded: true,\n    filter: node => {\n      if (rootNodes.has(node)) {\n        return node.matched || node.childMatched || node.upperMatched\n      }\n\n      const parentNode = getParentNode(node)\n\n      return (\n        node.visible &&\n        (node.matched || node.childMatched || node.upperMatched) &&\n        (!parentNode || (expandedIds ? expandedIds.has(parentNode.id) : parentNode.expanded))\n      )\n    },\n  })\n}\n\nfunction isCollapse(node: any): node is TreeCollapseProps {\n  return node.collapse\n}\n\nfunction refreshNodesDepth() {\n  walkTree(treeNodes.value, (node, depth) => {\n    node.depth = depth\n    node.lineIndexes = [0]\n\n    if (node.parent && nodeMap.has(node.parent)) {\n      const parent = nodeMap.get(node.parent)!\n\n      node.last = getLast(parent.children) === node\n      node.upstreamLast = [parent.last, ...parent.upstreamLast]\n    } else {\n      node.last = getLast(treeNodes.value) === node\n      node.upstreamLast = []\n    }\n\n    for (let i = 1; i < depth; ++i) {\n      if (!node.upstreamLast[i - 1]) {\n        node.lineIndexes.push(i)\n      }\n    }\n  })\n}\n\nfunction buildTreeNodes(nodes: TreeNodeProps[]) {\n  treeNodes.value = transformTree(nodes, {\n    keyField: 'id',\n    parentField: 'parent',\n    childField: 'children',\n    rootId: props.rootId,\n  })\n\n  refreshNodesDepth()\n}\n\nfunction parseAndTransformData() {\n  const idKey = keyConfig.id\n  const oldDataMap = new Map<Data, TreeNodeProps>()\n  const oldIdMap = new Map<any, TreeNodeProps>()\n\n  for (const node of nodeMap.values()) {\n    oldDataMap.set(node.data, node)\n    oldIdMap.set(node.data[idKey], node)\n  }\n\n  nodeMap.clear()\n  nodeDataMap.clear()\n\n  const nodes: TreeNodeProps[] = []\n\n  if (props.noBuildTree) {\n    walkTree(\n      props.data,\n      (item, _, parent) => {\n        const oldNode = oldDataMap.get(item)\n        const id = oldNode?.id ?? getIndexId()\n        const node = props.cacheNode\n          ? (oldNode ?? createNodeItem(item))\n          : createNodeItem(item, oldNode)\n\n        node.id = id\n        node.parent = parent ? nodeDataMap.get(parent)?.id : undefined\n\n        nodeMap.set(node.id, node)\n        nodes.push(node)\n        nodeDataMap.set(item, node)\n      },\n      { childField: keyConfig.children, depthFirst: true },\n    )\n  } else {\n    const data = props.data\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const item = data[i]\n      const oldNode = oldDataMap.get(item) ?? oldIdMap.get(item[idKey])\n      const node = props.cacheNode\n        ? (oldNode ?? createNodeItem(item))\n        : createNodeItem(item, oldNode)\n\n      nodeMap.set(node.id, node)\n      nodes.push(node)\n      nodeDataMap.set(item, node)\n    }\n  }\n\n  buildTreeNodes(nodes)\n\n  if (!props.noCascaded) {\n    const checkedNodes = flattedNodes.value.filter(item => item.checked)\n\n    for (let i = 0, len = checkedNodes.length; i < len; ++i) {\n      const item = checkedNodes[i]\n      const parentKey = item.parent\n\n      updateCheckedDown(item.id)\n\n      if (parentKey && nodeMap.has(parentKey)) {\n        const parent = nodeMap.get(parentKey)!\n\n        if (!parent.checked) {\n          updateCheckedUpward(item.id)\n        }\n      }\n    }\n  }\n\n  resetExpanded()\n}\n\nfunction forceUpdateData() {\n  const nodes: TreeNodeProps[] = []\n\n  const {\n    id: idKey,\n    visible: visibleKey,\n    selected: selectedKey,\n    expanded: expandedKey,\n    disabled: disabledKey,\n    checked: checkedKey,\n    loading: loadingKey,\n    loaded: loadedKey,\n    loadFail: loadFailKey,\n    readonly: readonlyKey,\n    arrow: arrowKey,\n    checkbox: checkboxKey,\n    selectDisabled: selectDisabledKey,\n    expandDisabled: expandDisabledKey,\n    checkDisabled: checkDisabledKey,\n    isLeaf: isLeafKey,\n  } = keyConfig\n\n  const refresh = (node: TreeNodeProps, item: Data) => {\n    const {\n      [visibleKey]: visible = node.visible,\n      [selectedKey]: selected = node.selected,\n      [expandedKey]: expanded = node.expanded,\n      [disabledKey]: disabled = node.disabled,\n      [checkedKey]: checked = node.checked,\n      [loadingKey]: loading = node.loading,\n      [loadedKey]: loaded = node.loaded,\n      [loadFailKey]: loadFail = node.loadFail,\n      [readonlyKey]: readonly = node.readonly,\n      [arrowKey]: arrow = node.arrow,\n      [checkboxKey]: checkbox = node.checkbox,\n      [selectDisabledKey]: selectDisabled = node.selectDisabled,\n      [expandDisabledKey]: expandDisabled = node.expandDisabled,\n      [checkDisabledKey]: checkDisabled = node.checkDisabled,\n      [isLeafKey]: isLeaf = node.isLeaf,\n    } = item\n\n    node.visible = visible\n    node.selected = selected\n    node.expanded = expanded\n    node.disabled = disabled\n    node.checked = checked\n    node.loading = loading\n    node.loaded = loaded\n    node.loadFail = loadFail\n    node.readonly = readonly\n    node.arrow = arrow\n    node.checkbox = checkbox\n    node.selectDisabled = selectDisabled\n    node.expandDisabled = expandDisabled\n    node.checkDisabled = checkDisabled\n    node.isLeaf = isLeaf\n  }\n\n  if (props.noBuildTree) {\n    walkTree(\n      props.data,\n      (item, _, parent) => {\n        let node = nodeDataMap.get(item)\n\n        if (node) {\n          refresh(node, item)\n        } else {\n          node = createNodeItem(item)\n          node.id = getIndexId()\n          node.parent = parent ? nodeDataMap.get(parent)?.id : undefined\n\n          nodeMap.set(node.id, node)\n          nodeDataMap.set(item, node)\n        }\n\n        nodes.push(node)\n      },\n      { childField: keyConfig.children, depthFirst: true },\n    )\n  } else {\n    const data = props.data\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const item = data[i]\n      const id = item[idKey] as Key\n\n      let node = nodeMap.get(id)\n\n      if (node) {\n        refresh(node, item)\n      } else {\n        node = createNodeItem(item)\n        nodeMap.set(id, node)\n      }\n\n      nodes.push(node)\n    }\n  }\n\n  buildTreeNodes(nodes)\n  resetExpanded()\n}\n\nfunction syncNodeStateIntoData() {\n  flattedNodes.value.forEach(node => {\n    if (!node.data) return\n\n    const { data, visible, selected, expanded, disabled, checked, loading, readonly } = node\n\n    data.visible = visible\n    data.selected = selected\n    data.expanded = expanded\n    data.disabled = disabled\n    data.checked = checked\n    data.loading = loading\n    data.readonly = readonly\n  })\n\n  resetExpanded()\n}\n\nfunction createNodeItem(data: Data, defaults = defaultNodeProperties): TreeNodeProps {\n  const {\n    id: idKey,\n    parent: parentKey,\n    visible: visibleKey,\n    selected: selectedKey,\n    expanded: expandedKey,\n    disabled: disabledKey,\n    checked: checkedKey,\n    loading: loadingKey,\n    loaded: loadedKey,\n    loadFail: loadFailKey,\n    readonly: readonlyKey,\n    arrow: arrowKey,\n    checkbox: checkboxKey,\n    selectDisabled: selectDisabledKey,\n    expandDisabled: expandDisabledKey,\n    checkDisabled: checkDisabledKey,\n    isLeaf: isLeafKey,\n  } = keyConfig\n\n  const {\n    [visibleKey]: visible = defaults.visible,\n    [selectedKey]: selected = defaults.selected,\n    [expandedKey]: expanded = defaults.expanded,\n    [disabledKey]: disabled = defaults.disabled,\n    [checkedKey]: checked = defaults.checked,\n    [loadingKey]: loading = defaults.loading,\n    [loadedKey]: loaded = defaults.loaded,\n    [loadFailKey]: loadFail = defaults.loadFail,\n    [readonlyKey]: readonly = defaults.readonly,\n    [arrowKey]: arrow = defaults.arrow,\n    [checkboxKey]: checkbox = defaults.checkbox,\n    [selectDisabledKey]: selectDisabled = defaults.selectDisabled,\n    [expandDisabledKey]: expandDisabled = defaults.expandDisabled,\n    [checkDisabledKey]: checkDisabled = defaults.checkDisabled,\n    [isLeafKey]: isLeaf = defaults.isLeaf,\n  } = data\n  const id = props.noBuildTree ? null : data[idKey]\n  const parent = props.noBuildTree ? null : data[parentKey]\n\n  const node = {\n    id,\n    parent,\n    data,\n    visible,\n    selected,\n    expanded,\n    disabled,\n    checked,\n    loading,\n    loaded,\n    loadFail,\n    readonly,\n    arrow,\n    checkbox,\n    selectDisabled,\n    expandDisabled,\n    checkDisabled,\n    isLeaf,\n  }\n\n  if (typeof props.postCreate === 'function') {\n    props.postCreate(node as TreeNodeProps)\n  }\n\n  return reactive({\n    ...node,\n    id,\n    parent,\n    children: [],\n    partial: false,\n    matched: false,\n    childMatched: false,\n    upperMatched: false,\n    depth: -1,\n    last: false,\n    // inLastCount: 0,\n    upstreamLast: [],\n    lineIndexes: [],\n  })\n}\n\nfunction computeCheckedState(originNode: TreeNodeProps, able: boolean) {\n  if (!props.noCascaded) {\n    const nodeList = [originNode].concat(\n      // 需要包含被禁用且被勾选的节点\n      flattedNodes.value.filter(item => (item.disabled || item.checkDisabled) && item.checked),\n    )\n\n    for (let i = 0, len = nodeList.length; i < len; ++i) {\n      const item = nodeList[i]\n\n      updateCheckedUpward(item.id)\n      updateCheckedDown(item.id)\n    }\n  }\n\n  emitEvent(props.onNodeChange, originNode.data, originNode, able)\n}\n\nfunction handleNodeClick(node: TreeNodeProps) {\n  emitEvent(props.onNodeClick, node.data, node)\n}\n\nfunction handleLabelClick(node: TreeNodeProps) {\n  emitEvent(props.onLabelClick, node.data, node)\n}\n\nfunction handleNodeSelect(node: TreeNodeProps) {\n  const selectedNodes = flattedNodes.value.filter(item => item.selected)\n\n  if (props.multiple) {\n    emitEvent(\n      props.onNodeSelect,\n      selectedNodes.map(item => item.data),\n      selectedNodes,\n    )\n  } else {\n    const currentId = node.id\n\n    for (let i = 0, len = selectedNodes.length; i < len; ++i) {\n      const item = selectedNodes[i]\n\n      item.selected = item.id === currentId\n    }\n\n    emitEvent(props.onNodeSelect, node.data, node)\n  }\n}\n\nfunction handleNodeCancel(node: TreeNodeProps) {\n  emitEvent(props.onNodeCancel, node.data, node)\n}\n\nfunction handleNodeExpand(node: TreeNodeProps) {\n  if (props.accordion) {\n    const siblingNodes = getSiblingNodes(node)\n\n    for (let i = 0, len = siblingNodes.length; i < len; ++i) {\n      siblingNodes[i].expanded = false\n    }\n  }\n\n  emitEvent(props.onNodeExpand, node.data, node)\n}\n\nfunction handleNodeReduce(node: TreeNodeProps) {\n  emitEvent(props.onNodeReduce, node.data, node)\n}\n\nfunction handleNodeContextmenu(event: MouseEvent, node: TreeNodeProps) {\n  emitEvent(props.onNodeContextmenu, event, node.data, node)\n}\n\nasync function handleAsyncLoad(node: TreeNodeProps) {\n  if (!boundAsyncLoad.value) return false\n\n  let result = props.onAsyncLoad(node.data, node)\n\n  if (isPromise(result)) {\n    result = await result\n  }\n\n  return result !== false\n}\n\nlet dragState: {\n  draggingNode: TreeNodeProps,\n  treeRect: DOMRect,\n  willDropNode: TreeNodeProps | null,\n  dropType: DropType,\n} | null = null\n\nfunction handleNodeDragStart(nodeInstance: TreeNodeInstance) {\n  if (!wrapper.value) return\n\n  dragState = {\n    draggingNode: nodeInstance.node,\n    treeRect: wrapper.value.getBoundingClientRect(),\n    willDropNode: null,\n    dropType: DropType.BEFORE,\n  }\n\n  dragging.value = true\n  emitEvent(props.onDragStart, nodeInstance.node.data, nodeInstance.node)\n}\n\nfunction handleNodeDragOver(nodeInstance: TreeNodeInstance, event: DragEvent) {\n  if (!dragState || !nodeInstance.el || !nodeInstance.arrow) return\n\n  const dropNodeRect = nodeInstance.el.getBoundingClientRect()\n  const treeRect = dragState.treeRect\n  const dropArrowRect = nodeInstance.arrow.getBoundingClientRect()\n  const prevPercent = 0.25\n  const nextPercent = 0.75\n  const distance = event.clientY - dropNodeRect.top\n  const dropNodeHeight = dropArrowRect.height\n\n  let dropType: DropType\n  let indicatorTop = -9999\n  let isIndicatorShow = true\n\n  if (distance < dropNodeHeight * prevPercent) {\n    dropType = DropType.BEFORE\n    indicatorTop = dropArrowRect.top - treeRect.top\n  } else if (distance > dropNodeHeight * nextPercent) {\n    dropType = DropType.AFTER\n    indicatorTop = dropArrowRect.bottom - treeRect.top\n  } else {\n    dropType = DropType.INNER\n    isIndicatorShow = false\n  }\n\n  if (indicator.value) {\n    indicator.value.style.top = `${indicatorTop}px`\n    indicator.value.style.insetInlineStart = `${dropArrowRect.right - treeRect.left}px`\n  }\n\n  dragState.willDropNode = nodeInstance.node\n  dragState.dropType = dropType\n\n  indicatorShow.value = isIndicatorShow\n  emitEvent(props.onDragOver, nodeInstance.node.data, nodeInstance.node)\n}\n\nfunction isLeftInsideRight(left: TreeNodeProps, right: TreeNodeProps) {\n  if (!left || !right) return true\n\n  while (left) {\n    if (left === right || left.id === right.id) {\n      return true\n    }\n\n    left = getParentNode(left)!\n  }\n\n  return false\n}\n\nfunction handleNodeDrop(nodeInstance: TreeNodeInstance) {\n  if (!dragState) return\n\n  const { draggingNode, willDropNode, dropType } = dragState\n\n  if (!willDropNode || isLeftInsideRight(willDropNode, draggingNode)) return\n\n  let currentId: Key\n  let parent: TreeNodeProps | null\n\n  if (draggingNode) {\n    parent = getParentNode(draggingNode)\n\n    if (!parent) {\n      parent = {\n        children: treeNodes.value,\n      } as TreeNodeProps\n    }\n\n    currentId = draggingNode.id as Key\n    removeArrayItem(parent.children, item => item.id === currentId)\n  }\n\n  if (dropType === DropType.INNER) {\n    if (!Array.isArray(willDropNode.children)) {\n      willDropNode.children = []\n    }\n\n    const children = Array.from(willDropNode.children as TreeNodeProps[])\n\n    children.push(draggingNode)\n\n    willDropNode.children = children\n    draggingNode.parent = willDropNode.id\n  } else {\n    parent = getParentNode(willDropNode)\n\n    if (!parent) {\n      parent = {\n        parent: undefined! as Key,\n        children: treeNodes.value,\n      } as TreeNodeProps\n    }\n\n    currentId = willDropNode.id\n    const index = parent.children.findIndex(item => item.id === currentId)\n\n    if (~index) {\n      parent.children.splice(+(dropType === DropType.AFTER) + index, 0, draggingNode)\n\n      draggingNode.parent = parent.id\n    }\n  }\n\n  refreshNodesDepth()\n  emitEvent(props.onDrop, nodeInstance.node.data, nodeInstance.node, dropType)\n}\n\nfunction handleNodeDragEnd(nodeInstance: TreeNodeInstance) {\n  dragging.value = true\n  indicatorShow.value = false\n  dragState = null\n  emitEvent(props.onDragEnd, nodeInstance.node.data, nodeInstance.node)\n}\n\nfunction handleHittingChange(type: 'up' | 'down') {\n  const activeEl = document.activeElement\n\n  if (!visibleNodeEls.length || !activeEl) return\n\n  const index = visibleNodeEls.findIndex(nodeEl => nodeEl === activeEl)\n\n  if (~index) {\n    visibleNodeEls[\n      (index + (type === 'up' ? -1 : 1) + visibleNodeEls.length) % visibleNodeEls.length\n    ]?.focus()\n  }\n}\n\nfunction handleNodeHitting(nodeEl?: HTMLElement | null) {\n  if (!nodeEl || !visibleNodeEls.length) return\n\n  if (visibleNodeEls.includes(nodeEl)) {\n    nodeEl.focus()\n  }\n}\n\nfunction handleScroll() {\n  // onScroll()\n  updateVisibleNodeEls()\n}\n\nfunction handleTreeFocus(event: FocusEvent) {\n  const target = event.target as HTMLElement\n\n  if (!visibleNodeEls.length || !target || !trap.value) {\n    return\n  }\n\n  if (target === trap.value) {\n    visibleNodeEls[0].focus()\n  }\n}\n\nfunction refreshScroll() {\n  virtualList.value?.refresh()\n}\n\nfunction resetExpanded() {\n  expanding.value = false\n  isMounted.value && updateVisibleNodeEls()\n}\n\nfunction afterExpand() {\n  if (props.virtual) {\n    resetExpanded()\n    return\n  }\n\n  transferring.value = true\n\n  requestAnimationFrame(() => {\n    resetExpanded()\n    timer.expand = setTimeout(() => {\n      transferring.value = false\n    }, 300)\n  })\n}\n\nfunction getCheckedNodes(includePartial = false): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.checked || (includePartial && item.partial))\n}\n\nfunction getCheckedNodeData(includePartial = false) {\n  return getCheckedNodes(includePartial).map(node => node.data)\n}\n\nfunction getSelectedNodes(): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.selected)\n}\n\nfunction getSelectedNodeData() {\n  return getSelectedNodes().map(node => node.data)\n}\n\nfunction getExpandedNodes(): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.expanded)\n}\n\nfunction getDisabledNodes(): TreeNodeProps[] {\n  return flattedNodes.value.filter(item => item.disabled)\n}\n\nfunction getParentNode(node: TreeNodeProps): TreeNodeProps | null {\n  if (node.parent) {\n    return nodeMap.get(node.parent) ?? null\n  }\n\n  return null\n}\n\nfunction getNodeChildren(node: TreeNodeProps) {\n  return node.children\n}\n\nfunction getSiblingNodes(node: TreeNodeProps, includeSelf = false): TreeNodeProps[] {\n  const parent = getParentNode(node)\n\n  const currentId = node.id as Key\n  const parentId = parent ? (parent.id as Key) : null\n\n  return flattedNodes.value.filter(item => {\n    const isChild = parentId === null ? !item.parent : item.parent === parentId\n\n    if (isChild && !includeSelf) {\n      return item.id !== currentId\n    }\n\n    return isChild\n  })\n}\n\nfunction getPrevSiblingNode(node: TreeNodeProps): TreeNodeProps | null {\n  const parent = getParentNode(node)\n\n  if (!parent) return null\n\n  const currentId = node.id\n  const parentId = parent.id\n  const children = flattedNodes.value.filter(item => item.parent === parentId)\n\n  if (children && children.length) {\n    const index = children.findIndex(item => item.id === currentId)\n\n    if (index > 0) {\n      return children[index - 1]\n    }\n  }\n\n  return null\n}\n\nfunction getNextSiblingNode(node: TreeNodeProps): TreeNodeProps | null {\n  const parent = getParentNode(node)\n\n  if (!parent) return null\n\n  const currentId = node.id\n  const parentId = parent.id\n  const children = flattedNodes.value.filter(item => item.parent === parentId)\n\n  if (children && children.length) {\n    const index = children.findIndex(item => item.id === currentId)\n\n    if (!~index && index < children.length - 1) {\n      return children[index + 1]\n    }\n  }\n\n  return null\n}\n\nfunction getNodeByData<T extends Data>(data: T): TreeNodeProps | null {\n  if (props.noBuildTree) {\n    return flattedNodes.value.find(item => item.data === data) ?? null\n  }\n\n  const idKey = keyConfig.id\n\n  return (\n    flattedNodes.value.find(\n      item => item.data === data || item.data[idKey] === data[idKey as keyof T],\n    ) ?? null\n  )\n}\n\nfunction expandNodeByData<T extends Data>(data: T, expanded?: boolean, upstream = false) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.expanded = isNull(expanded) ? !node.expanded : !!expanded\n\n    if (upstream) {\n      let parentNode = getParentNode(node)\n\n      while (parentNode) {\n        parentNode.expanded = node.expanded\n        parentNode = getParentNode(parentNode)\n      }\n    }\n  }\n}\n\nfunction selectNodeByData<T extends Data>(data: T, selected?: boolean) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.selected = isNull(selected) ? !node.selected : !!selected\n  }\n}\n\nfunction checkNodeByData<T extends Data>(data: T, checked?: boolean) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.checked = isNull(checked) ? !node.checked : !!checked\n\n    if (!props.noCascaded) {\n      const nodeList = [node].concat(\n        flattedNodes.value.filter(item => item.disabled && item.checked),\n      )\n\n      for (let i = 0, len = nodeList.length; i < len; ++i) {\n        const item = nodeList[i]\n\n        updateCheckedUpward(item.id)\n        updateCheckedDown(item.id)\n      }\n    }\n  }\n}\n\nfunction toggleNodeLoadingByData<T extends Data>(data: T, loading?: boolean) {\n  const node = getNodeByData(data)\n\n  if (node) {\n    node.checked = isNull(loading) ? !node.loading : !!loading\n  }\n}\n\nfunction toggleAllExpanded(expanded: boolean) {\n  for (const node of flattedNodes.value) {\n    if (!node.disabled && !node.expandDisabled && !node.loading && node.children?.length) {\n      node.expanded = expanded\n    }\n  }\n}\n\nfunction getTreeData(withFilter = false) {\n  return mapTree(\n    withFilter\n      ? filterTree(treeNodes.value, node => node.matched, {\n        childField: 'children',\n        leafOnly: props.filterLeaf,\n        isLeaf: isLeafNode,\n      })\n      : treeNodes.value,\n    node => ({ ...node.data }),\n  )\n}\n\nfunction getFlattedData(withFilter = false) {\n  return (\n    withFilter\n      ? flattedNodes.value.filter(node => node.matched || node.childMatched || node.upperMatched)\n      : flattedNodes.value\n  ).map(node => ({ ...node.data }))\n}\n\nconst transferring = ref(false)\n</script>\n\n<template>\n  <VirtualList\n    ref=\"virtualList\"\n    :class=\"[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]\"\n    :inherit=\"props.inherit\"\n    :items=\"renderedNodes\"\n    :item-size=\"props.nodeMinHeight\"\n    items-tag=\"ul\"\n    :items-attrs=\"{ class: nh.be('list') }\"\n    :hide-bar=\"!props.useYBar\"\n    :ignore-resize=\"transferring\"\n    :disabled=\"!props.virtual\"\n    role=\"tree\"\n    tabindex=\"-1\"\n    :aria-disabled=\"props.disabled\"\n    :aria-readonly=\"props.readonly\"\n    :style=\"style\"\n    @scroll=\"handleScroll\"\n  >\n    <template #prefix-trap>\n      <div\n        ref=\"trap\"\n        tabindex=\"0\"\n        role=\"none\"\n        style=\"width: 0; height: 0; overflow: hidden; outline: none\"\n        @focus=\"handleTreeFocus\"\n      ></div>\n    </template>\n    <template #default=\"{ item: node }: { item: TreeNodeProps }\">\n      <CollapseTransition\n        v-if=\"isCollapse(node)\"\n        appear\n        :reverse=\"node.type === 'reduce'\"\n        @after-enter=\"afterExpand\"\n      >\n        <div :class=\"nh.be('collapse')\" :style=\"{ height: `${node.height}px` }\">\n          <TreeNode\n            v-for=\"(innerNode, index) in node.nodes\"\n            :key=\"innerNode.id ?? index\"\n            v-bind=\"toNodeProps(innerNode.data, innerNode)\"\n            :node=\"innerNode\"\n          >\n            <template v-if=\"slots.node || props.slots.node\" #default=\"payload\">\n              <slot name=\"node\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.node\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.arrow || props.slots.arrow\" #arrow=\"payload\">\n              <slot name=\"arrow\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.arrow\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\n              <slot name=\"label\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.prefix || props.slots.prefix\" #prefix=\"payload\">\n              <slot name=\"prefix\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.prefix\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n            <template v-if=\"slots.suffix || props.slots.suffix\" #suffix=\"payload\">\n              <slot name=\"suffix\" v-bind=\"payload\">\n                <Renderer :renderer=\"props.slots.suffix\" :data=\"payload\"></Renderer>\n              </slot>\n            </template>\n          </TreeNode>\n        </div>\n      </CollapseTransition>\n      <TreeNode v-else v-bind=\"toNodeProps(node.data, node)\" :node=\"node\">\n        <template v-if=\"slots.node || props.slots.node\" #default=\"payload\">\n          <slot name=\"node\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.node\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.arrow || props.slots.arrow\" #arrow=\"payload\">\n          <slot name=\"arrow\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.arrow\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.label || props.slots.label\" #label=\"payload\">\n          <slot name=\"label\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.label\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.prefix || props.slots.prefix\" #prefix=\"payload\">\n          <slot name=\"prefix\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.prefix\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.suffix || props.slots.suffix\" #suffix=\"payload\">\n          <slot name=\"suffix\" v-bind=\"payload\">\n            <Renderer :renderer=\"props.slots.suffix\" :data=\"payload\"></Renderer>\n          </slot>\n        </template>\n      </TreeNode>\n    </template>\n    <template #empty>\n      <div :class=\"nh.be('empty-tip')\">\n        <slot name=\"empty\">\n          <Renderer :renderer=\"props.slots.empty\">\n            {{ props.emptyText ?? locale.empty }}\n          </Renderer>\n        </slot>\n      </div>\n    </template>\n    <template #suffix-trap>\n      <div\n        v-if=\"props.draggable\"\n        v-show=\"indicatorShow\"\n        ref=\"indicator\"\n        :class=\"nh.be('indicator')\"\n      ></div>\n    </template>\n  </VirtualList>\n</template>\n","import {\n  booleanProp,\n  buildProps,\n  eventProp,\n  iconProp,\n  localeProp,\n  stateProp,\n  styleProp,\n} from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { IconEffect } from '@/components/icon'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  BeforeSelect,\n  BeforeUpload,\n  RenderFn,\n  UploadFetchMethod,\n  UploadFileOptions,\n  UploadFileSlots,\n  UploadFileState,\n  UploadHttpError,\n  UploadListSlots,\n  UploadListType,\n  UploadSlots,\n} from './symbol'\n\nexport const uploadProps = buildProps({\n  state: stateProp,\n  locale: localeProp('upload'),\n  url: String,\n  fileList: Array as PropType<UploadFileOptions[]>,\n  multiple: booleanProp,\n  tip: String,\n  accept: [String, Array] as PropType<string | string[]>,\n  filter: [String, Array] as PropType<string | string[]>,\n  maxSize: Number,\n  field: String,\n  data: Object as PropType<Record<string, string | Blob>>,\n  headers: Object as PropType<Record<string, string>>,\n  withCredentials: booleanProp,\n  manual: booleanProp,\n  hiddenFiles: booleanProp,\n  countLimit: Number,\n  allowDrag: booleanProp,\n  onBeforeUpload: Function as PropType<BeforeUpload>,\n  onBeforeSelect: Function as PropType<BeforeSelect>,\n  iconRenderer: Function as PropType<RenderFn>,\n  selectToAdd: booleanProp,\n  listType: String as PropType<UploadListType>,\n  block: booleanProp,\n  loadingText: String,\n  directory: booleanProp,\n  pathField: String,\n  disabledClick: booleanProp,\n  buttonLabel: String,\n  disabled: booleanProp,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingLock: booleanProp,\n  loadingEffect: String as PropType<IconEffect>,\n  image: booleanProp,\n  defaultFiles: Array as PropType<UploadFileOptions[]>,\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\n  listStyle: styleProp,\n  name: String,\n  customFetch: Function as PropType<UploadFetchMethod>,\n  slots: Object as PropType<UploadSlots>,\n  onExceed: eventProp<(files: UploadFileState[]) => void>(),\n  onChange: eventProp<(files: UploadFileState[]) => void>(),\n  onFilterError: eventProp<(files: UploadFileState) => void>(),\n  onSizeError: eventProp<(files: UploadFileState) => void>(),\n  onDelete: eventProp<(file: UploadFileState) => void>(),\n  onPreview: eventProp<(file: UploadFileState) => void>(),\n  onProgress: eventProp<(file: UploadFileState, percent: number) => void>(),\n  onSuccess: eventProp<(file: UploadFileState, response: any) => void>(),\n  onError: eventProp<(file: UploadFileState, error: UploadHttpError) => void>(),\n})\n\nexport type UploadProps = ExtractPropTypes<typeof uploadProps>\nexport type UploadCProps = ConfigurableProps<\n  UploadProps,\n  'url' | 'fileList',\n  'onBeforeUpload' | 'onBeforeSelect'\n>\n\nexport const uploadListProps = buildProps({\n  files: Array as PropType<UploadFileState[]>,\n  selectToAdd: booleanProp,\n  iconRenderer: Function as PropType<RenderFn>,\n  type: String as PropType<UploadListType>,\n  loadingText: String,\n  style: styleProp,\n  precision: Number,\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\n  slots: Object as PropType<UploadListSlots>,\n  onDelete: eventProp<(file: UploadFileState) => void>(),\n  onPreview: eventProp<(file: UploadFileState) => void>(),\n})\n\nexport type UploadListProps = ExtractPropTypes<typeof uploadListProps>\nexport type UploadListCProps = ConfigurableProps<UploadListProps, 'files'>\n\nexport const uploadFileProps = buildProps({\n  locale: localeProp('upload'),\n  file: Object as PropType<UploadFileState>,\n  iconRenderer: Function as PropType<RenderFn>,\n  listType: String as PropType<UploadListType>,\n  loadingText: String,\n  selectToAdd: booleanProp,\n  precision: Number,\n  canPreview: Function as PropType<(file: UploadFileState) => boolean>,\n  slots: Object as PropType<UploadFileSlots>,\n  onDelete: eventProp<(file: UploadFileState) => void>(),\n  onPreview: eventProp<(file: UploadFileState) => void>(),\n})\n\nexport type UploadFileProps = ExtractPropTypes<typeof uploadFileProps>\nexport type UploadFileCProps = ConfigurableProps<UploadFileProps, 'file'>\n","import { computed } from 'vue'\n\nimport { useIcons } from '@vexip-ui/config'\n\nimport type { IconsConfig } from '@vexip-ui/config'\n\nconst iconConfig = new Map<keyof IconsConfig, string[]>()\n\n// iconConfig.set('fileWord', ['doc', 'docx'])\niconConfig.set('fileVideo', [\n  'mp4',\n  'flv',\n  'mkv',\n  'rm',\n  'rmvb',\n  'mov',\n  'mtv',\n  'wnv',\n  'avi',\n  '3gp',\n  'amv',\n  'dmv',\n])\n// iconConfig.set('filePdf', ['pdf'])\niconConfig.set('fileImage', [\n  'bmp',\n  'jpg',\n  'jpeg',\n  'png',\n  'tif',\n  'gif',\n  'pcx',\n  'tga',\n  'exif',\n  'fpx',\n  'svg',\n  'psd',\n  'cdr',\n  'pcd',\n  'dxf',\n  'ufo',\n  'eps',\n  'ai',\n  'raw',\n  'wmf',\n  'webp',\n])\n// iconConfig.set('fileExcel', ['xls', 'xlsx', 'xlsm', 'xlsb', 'xlam', 'csv'])\niconConfig.set(\n  'fileCode',\n  [\n    [\n      'json',\n      'xml',\n      'property',\n      'class',\n      'c',\n      'cpp',\n      'cc',\n      'cxx',\n      'h',\n      'hpp',\n      'hxx',\n      'cs',\n      'yml',\n      'yaml',\n      'ts',\n      'tsx',\n    ],\n    ['js', 'jsx', 'mjs', 'cjs', 'ts', 'tsx', 'mts', 'cts'],\n    ['css', 'styl', 'pcss'],\n    ['sass', 'scss'],\n    ['less'],\n    ['java', 'class', 'jsp'],\n    ['vue'],\n    ['html', 'htm'],\n    ['py', 'pyc', 'pyw', 'pyo', 'pyd'],\n  ].flat(),\n)\niconConfig.set('fileAudio', [\n  'cd',\n  'wave',\n  'aiff',\n  'mpeg',\n  'mp3',\n  'mpeg-4',\n  'midi',\n  'wma',\n  'ra',\n  'rm',\n  'rmx',\n  'vqf',\n  'amr',\n  'ape',\n  'flac',\n  'aac',\n])\niconConfig.set('fileZip', [\n  'rar',\n  'zip',\n  '7z',\n  'cab',\n  'arj',\n  'lzh',\n  'tar',\n  'gz',\n  'ace',\n  'uue',\n  'bz2',\n  'jar',\n  'iso',\n])\niconConfig.set(\n  'fileText',\n  [\n    ['doc', 'docx'],\n    ['xls', 'xlsx', 'xlsm', 'xlsb', 'xlam', 'csv'],\n    ['pdf', 'txt', 'md'],\n  ].flat(),\n)\niconConfig.set('file', ['default'])\n\nexport function useFileIcons(icons = useIcons()) {\n  return computed(() => {\n    const map: Record<string, Record<string, any>> = {}\n\n    for (const [iconName, types] of iconConfig.entries()) {\n      if (types?.length) {\n        for (const type of types) {\n          map[type] = icons.value[iconName]\n        }\n      }\n    }\n\n    return map\n  })\n}\n","import type { ComponentPublicInstance } from 'vue'\n\nexport type UploadListType = 'name' | 'detail' | 'thumbnail' | 'card'\nexport type UploadStatus = 'pending' | 'uploading' | 'fail' | 'success' | 'delete'\n\nexport type UploadSourceFile = File & { path?: string }\n\nexport type UploadHttpError = Error & {\n  response: any,\n  url: string,\n  status: number,\n  method: string,\n}\n\nexport const enum StatusType {\n  PENDING = 'pending',\n  UPLOADING = 'uploading',\n  FAIL = 'fail',\n  SUCCESS = 'success',\n  DELETE = 'delete',\n}\n\nexport interface UploadFileState {\n  id: string | number,\n  name: string,\n  size: number,\n  type: string,\n  base64: string | null,\n  status: UploadStatus,\n  percentage: number,\n  source: UploadSourceFile | null,\n  url: string | null,\n  path: string,\n  /**\n   * @deprecated\n   */\n  xhr: XMLHttpRequest | null,\n  response: any,\n  error: UploadHttpError | null,\n  abort: () => void,\n}\n\nexport type UploadFileOptions = Partial<Omit<UploadFileState, 'response' | 'error' | 'abort'>>\n\ntype MaybePromise<T> = T | Promise<T>\n\nexport type BeforeUpload = (\n  file: UploadFileState,\n  files: UploadFileState[],\n) => MaybePromise<boolean | Blob | UploadSourceFile | void>\nexport type BeforeSelect = (\n  file: UploadFileState,\n  files: UploadFileState[],\n) => MaybePromise<boolean | void>\nexport type RenderFn = (data: { file: UploadFileState }) => any\n\nexport interface UploadFetchOptions {\n  url: string,\n  file: UploadSourceFile,\n  headers?: Record<string, string>,\n  withCredentials?: boolean,\n  data?: Record<string, string | Blob>,\n  field?: string,\n  pathField?: string,\n  onProgress?: (percent: number) => void,\n  onSuccess?: (response: any) => void,\n  onError?: (error: UploadHttpError) => void,\n  onAbort?: () => void,\n}\n\n/**\n * Should return an abort method.\n */\nexport type UploadFetchMethod = (options: UploadFetchOptions) => () => void\n\nexport interface DirectoryEntity {\n  name: string,\n  fullPath: string,\n  isFile: boolean,\n  isDirectory: boolean,\n  file: (callback: (file: UploadSourceFile) => void) => void,\n\n  createReader: () => DirectoryReader,\n}\n\nexport interface DirectoryReader {\n  readEntries: (\n    onSuccess: (entities: DirectoryEntity[]) => void,\n    onError?: (errors: any) => void,\n  ) => void,\n}\n\nexport interface UploadExposed extends ComponentPublicInstance {\n  isDragOver: boolean,\n  execute: () => Promise<false | any[]>,\n  handleDelete: (file: UploadFileState) => void,\n  focus: (options?: FocusOptions) => void,\n  blur: () => void,\n}\n\nexport interface UploadListSlots {\n  item?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\n  icon?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\n  suffix?: () => any,\n}\n\nexport interface UploadFileSlots {\n  default?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\n  icon?: (params: { file: UploadFileState, status: UploadStatus, percentage: number }) => any,\n}\n\nexport interface UploadSlots extends Omit<UploadListSlots, 'suffix'> {\n  default?: (params: { isDragOver: boolean }) => any,\n  tip?: () => any,\n  cloud?: () => any,\n}\n\nexport const uploadListTypes = Object.freeze<UploadListType[]>([\n  'name',\n  'detail',\n  'thumbnail',\n  'card',\n])\n\n/**\n * @deprecated Use `UploadHttpError` to replace it\n */\nexport type HttpError = UploadHttpError\n/**\n * @deprecated Use `UploadSourceFile` to replace it\n */\nexport type SourceFile = UploadSourceFile\n/**\n * @deprecated Use `UploadFileState` to replace it\n */\nexport type FileState = UploadFileState\n/**\n * @deprecated Use `UploadFileOptions` to replace it\n */\nexport type FileOptions = UploadFileOptions\n","<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Progress } from '@/components/progress'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, reactive, shallowReadonly, toRef } from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { toFixed } from '@vexip-ui/utils'\nimport { uploadFileProps } from './props'\nimport { useFileIcons } from './file-icon'\nimport { StatusType, uploadListTypes } from './symbol'\n\nimport type { UploadFileSlots, UploadFileState } from './symbol'\n\ndefineOptions({ name: 'UploadFile' })\n\nconst imageExtRE = /\\.(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i\nconst imageBase64RE = /^data:image\\//\n\nfunction isImage(file: UploadFileState) {\n  if (file.type) {\n    return file.type.startsWith('image/')\n  }\n\n  const { name, url, base64 } = file\n\n  return !!(\n    imageExtRE.test(name) ||\n    (url && (imageExtRE.test(url) || imageBase64RE.test(url))) ||\n    (base64 && imageBase64RE.test(base64))\n  )\n}\n\nconst _props = defineProps(uploadFileProps)\nconst props = useProps('uploadFile', _props, {\n  locale: null,\n  file: {\n    default: () => ({}) as UploadFileState,\n    static: true,\n  },\n  iconRenderer: {\n    default: null,\n    isFunc: true,\n  },\n  listType: {\n    default: 'name',\n    validator: value => uploadListTypes.includes(value),\n  },\n  loadingText: null,\n  selectToAdd: false,\n  precision: 2,\n  canPreview: {\n    default: isImage,\n    isFunc: true,\n  },\n  slots: () => ({}),\n})\n\ndefineSlots<UploadFileSlots>()\n\nconst nh = useNameHelper('upload')\nconst locale = useLocale('upload', toRef(props, 'locale'))\nconst icons = useIcons()\nconst fileIcons = useFileIcons(icons)\n\nconst useIconRenderer = computed(() => typeof props.iconRenderer === 'function')\nconst fileName = computed(() => props.file.path || props.file.name)\nconst status = computed(() => props.file.status)\nconst percentage = computed(() => toFixed(props.file.percentage, props.precision))\nconst showThumb = computed(() => isImage(props.file) && (props.file.url || props.file.base64))\n\nconst slotParams = shallowReadonly(\n  reactive({\n    file: toRef(props, 'file'),\n    status,\n    percentage,\n  }),\n)\n\nfunction getFileExtension(file: UploadFileState) {\n  return file.name.split('.').pop()!.toLocaleLowerCase()\n}\n\nfunction getFileIcon(file: UploadFileState, scale = 1) {\n  const extension = getFileExtension(file)\n  const icon = extension\n    ? fileIcons.value[extension] || fileIcons.value.default\n    : fileIcons.value.default\n\n  return { ...icon, scale: +(icon.scale || 1) * scale }\n}\n\nfunction handleDelete(file: UploadFileState) {\n  emitEvent(props.onDelete, file)\n}\n\nfunction handlePreview(file: UploadFileState) {\n  emitEvent(props.onPreview, file)\n}\n\nfunction imageToBase64(file: UploadFileState) {\n  if (!file.source || !isImage(props.file)) return\n\n  const reader = new FileReader()\n\n  reader.readAsDataURL(file.source)\n  reader.onload = () => {\n    if (file.status !== StatusType.DELETE) {\n      file.base64 = reader.result?.toString() ?? null\n    }\n  }\n}\n</script>\n\n<template>\n  <li\n    :class=\"[\n      nh.be('file'),\n      nh.bem('file', props.listType),\n      nh.bem('file', status),\n      props.inherit && nh.bem('file', 'inherit')\n    ]\"\n    :title=\"fileName\"\n    tabindex=\"-1\"\n  >\n    <slot v-bind=\"slotParams\">\n      <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\">\n        <template v-if=\"props.listType === 'name'\">\n          <div :class=\"nh.be('label')\">\n            <div :class=\"[nh.be('icon'), nh.be('file-icon')]\">\n              <slot name=\"icon\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\n                  <Renderer\n                    v-if=\"useIconRenderer\"\n                    :renderer=\"props.iconRenderer\"\n                    :data=\"{ file: props.file }\"\n                  ></Renderer>\n                  <Icon v-else v-bind=\"getFileIcon(props.file)\"></Icon>\n                </Renderer>\n              </slot>\n            </div>\n            <span :class=\"nh.be('filename')\">\n              {{ fileName }}\n            </span>\n          </div>\n          <div :class=\"nh.be('actions')\">\n            <span\n              v-if=\"status === 'uploading'\"\n              style=\"margin-inline-end: 0.5em\"\n              :class=\"nh.be('percentage')\"\n            >\n              {{ `${percentage}%` }}\n            </span>\n            <div v-if=\"status === 'success'\" :class=\"[nh.be('icon'), nh.be('success')]\">\n              <Icon v-bind=\"icons.success\"></Icon>\n            </div>\n            <div v-else-if=\"status === 'fail'\" :class=\"[nh.be('icon'), nh.be('fail')]\">\n              <Icon v-bind=\"icons.warning\"></Icon>\n            </div>\n            <div v-else-if=\"status === 'uploading'\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n              <Icon v-bind=\"icons.loading\"></Icon>\n            </div>\n            <button\n              type=\"button\"\n              :class=\"[nh.be('icon'), nh.be('close')]\"\n              :aria-label=\"locale.ariaLabel.delete\"\n              @click=\"handleDelete(props.file)\"\n            >\n              <Icon v-bind=\"icons.delete\"></Icon>\n            </button>\n          </div>\n          <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\n            <Progress\n              inherit\n              info-type=\"none\"\n              :stroke-width=\"2\"\n              :percentage=\"props.file.percentage\"\n              :precision=\"props.precision\"\n            ></Progress>\n          </div>\n        </template>\n        <template v-else-if=\"props.listType === 'thumbnail' || props.listType === 'card'\">\n          <div :class=\"nh.be('card')\">\n            <div :class=\"nh.be('thumbnail')\">\n              <template v-if=\"status === 'uploading'\">\n                <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('progress')\">\n                  <span style=\"margin-bottom: 0.3em\">\n                    {{ props.loadingText ?? locale.uploading }}\n                  </span>\n                  <Progress\n                    inherit\n                    info-type=\"none\"\n                    :stroke-width=\"2\"\n                    :percentage=\"props.file.percentage\"\n                    :precision=\"props.precision\"\n                  ></Progress>\n                  <span style=\"margin-top: 3px\" :class=\"nh.be('percentage')\">\n                    {{ `${percentage}%` }}\n                  </span>\n                </div>\n                <Icon\n                  v-else\n                  v-bind=\"icons.loading\"\n                  :scale=\"+(icons.loading.scale || 1) * 1.8\"\n                  label=\"loading\"\n                ></Icon>\n              </template>\n              <img\n                v-else-if=\"showThumb\"\n                :class=\"nh.be('image')\"\n                :src=\"props.file.url || props.file.base64 || ''\"\n                :alt=\"fileName\"\n              />\n              <template v-else>\n                {{ imageToBase64(props.file) }}\n                <slot name=\"icon\" v-bind=\"slotParams\">\n                  <Renderer :renderer=\"props.slots.icon\" :data=\"slotParams\">\n                    <Renderer\n                      v-if=\"useIconRenderer\"\n                      :renderer=\"props.iconRenderer\"\n                      :data=\"{ file: props.file }\"\n                    ></Renderer>\n                    <Icon v-else v-bind=\"getFileIcon(props.file, 2.8)\"></Icon>\n                  </Renderer>\n                </slot>\n              </template>\n            </div>\n            <div v-if=\"props.listType === 'card'\" :class=\"nh.be('info')\">\n              <span :class=\"nh.be('filename')\">\n                {{ fileName }}\n              </span>\n              <CollapseTransition>\n                <div v-if=\"status === 'uploading'\" :class=\"nh.be('progress')\">\n                  <Progress\n                    inherit\n                    info-type=\"none\"\n                    :stroke-width=\"4\"\n                    :percentage=\"props.file.percentage\"\n                    :precision=\"props.precision\"\n                  ></Progress>\n                </div>\n              </CollapseTransition>\n            </div>\n            <div\n              v-if=\"props.listType === 'card' || status !== 'uploading'\"\n              :class=\"nh.be('actions')\"\n            >\n              <div v-if=\"props.listType === 'thumbnail'\" :class=\"nh.be('mask')\"></div>\n              <button\n                type=\"button\"\n                :class=\"[\n                  nh.be('icon'),\n                  nh.be('action'),\n                  {\n                    [nh.bem('action', 'disabled')]: !props.canPreview(props.file)\n                  }\n                ]\"\n                :disabled=\"!props.canPreview(props.file)\"\n                :aria-label=\"locale.ariaLabel.preview\"\n                @click=\"handlePreview(props.file)\"\n              >\n                <Icon v-bind=\"icons.preview\" :scale=\"+(icons.preview.scale || 1) * 1.4\"></Icon>\n              </button>\n              <button\n                type=\"button\"\n                :class=\"[nh.be('icon'), nh.be('action')]\"\n                :aria-label=\"locale.ariaLabel.delete\"\n                @click=\"handleDelete(props.file)\"\n              >\n                <Icon v-bind=\"icons.delete\" :scale=\"+(icons.delete.scale || 1) * 1.4\"></Icon>\n              </button>\n            </div>\n          </div>\n        </template>\n      </Renderer>\n    </slot>\n  </li>\n</template>\n","<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\nimport { UploadFile } from '@/components/upload-file'\n\nimport { computed } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { uploadListProps } from './props'\nimport { uploadListTypes } from './symbol'\n\nimport type { UploadFileState, UploadListSlots } from './symbol'\n\ndefineOptions({ name: 'UploadList' })\n\nconst _props = defineProps(uploadListProps)\nconst props = useProps('uploadList', _props, {\n  files: {\n    default: () => [],\n    static: true,\n  },\n  selectToAdd: false,\n  iconRenderer: {\n    default: null,\n    isFunc: true,\n  },\n  type: {\n    default: 'name',\n    validator: value => uploadListTypes.includes(value),\n  },\n  loadingText: null,\n  style: null,\n  precision: 2,\n  // 'canPreview' using UploadFile default\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<UploadListSlots>()\n\nconst nh = useNameHelper('upload')\nconst transitionName = computed(() => nh.ns('fade'))\n\nfunction handleDelete(file: UploadFileState) {\n  emitEvent(props.onDelete, file)\n}\n\nfunction handlePreview(file: UploadFileState) {\n  emitEvent(props.onPreview, file)\n}\n</script>\n\n<template>\n  <ul\n    :class=\"[nh.be('files'), nh.bs('vars'), props.inherit && nh.bem('files', 'inherit')]\"\n    :style=\"props.style\"\n  >\n    <Transition\n      v-for=\"item in props.files\"\n      :key=\"item.id\"\n      appear\n      :name=\"props.selectToAdd ? transitionName : undefined\"\n    >\n      <UploadFile\n        inherit\n        :file=\"item\"\n        :icon-renderer=\"props.iconRenderer\"\n        :list-type=\"props.type\"\n        :loading-text=\"props.loadingText\"\n        :select-to-add=\"props.selectToAdd\"\n        :precision=\"props.precision\"\n        :can-preview=\"props.canPreview\"\n        @delete=\"handleDelete\"\n        @preview=\"handlePreview\"\n      >\n        <template v-if=\"slots.item || props.slots.item\" #default=\"{ file, status, percentage }\">\n          <slot\n            name=\"item\"\n            :file=\"file\"\n            :status=\"status\"\n            :percentage=\"percentage\"\n          >\n            <Renderer\n              :renderer=\"props.slots.item\"\n              :data=\"{\n                file,\n                status,\n                percentage\n              }\"\n            ></Renderer>\n          </slot>\n        </template>\n        <template v-if=\"slots.icon || props.slots.icon\" #icon=\"{ file, status, percentage }\">\n          <slot\n            name=\"icon\"\n            :file=\"file\"\n            :status=\"status\"\n            :percentage=\"percentage\"\n          >\n            <Renderer :renderer=\"props.slots.icon\" :data=\"{ file, status, percentage }\"></Renderer>\n          </slot>\n        </template>\n      </UploadFile>\n    </Transition>\n    <slot name=\"suffix\">\n      <Renderer :renderer=\"props.slots.suffix\"></Renderer>\n    </slot>\n  </ul>\n</template>\n","import { has, isDefined, noop } from '@vexip-ui/utils'\n\nimport type { UploadFetchOptions, UploadHttpError } from './symbol'\n\nfunction getError(url: string, xhr: XMLHttpRequest) {\n  const message = `fail to post ${url} ${xhr.status}'`\n  const error = new Error(message) as UploadHttpError\n\n  error.response = getBody(xhr)\n  error.url = url\n  error.status = xhr.status\n  error.method = 'POST'\n\n  return error\n}\n\nfunction getBody(xhr: XMLHttpRequest) {\n  const text = xhr.responseText || xhr.response\n\n  if (!text) {\n    return text\n  }\n\n  try {\n    return JSON.parse(text)\n  } catch (e) {\n    return text\n  }\n}\n\nexport function upload(options: UploadFetchOptions) {\n  if (typeof XMLHttpRequest === 'undefined') {\n    return noop\n  }\n\n  const xhr = new XMLHttpRequest()\n  const url = options.url\n\n  if (xhr.upload && options.onProgress) {\n    xhr.upload.onprogress = event => {\n      let percent = 0\n\n      if (event.total > 0) {\n        percent = (event.loaded / event.total) * 100\n      }\n\n      options.onProgress!(percent)\n    }\n  }\n\n  const formData = new FormData()\n\n  if (options.data) {\n    const data = options.data\n\n    Object.keys(data).forEach(key => {\n      formData.append(key, data[key])\n    })\n  }\n\n  formData.append(options.field || 'file', options.file)\n  options.file.path && formData.append(options.pathField || 'path', options.file.path)\n\n  if (options.onError) {\n    xhr.onerror = () => {\n      options.onError!(getError(url, xhr))\n    }\n  }\n\n  xhr.onload = () => {\n    if (xhr.status < 200 || xhr.status >= 300) {\n      if (options.onError) {\n        options.onError(getError(url, xhr))\n      }\n\n      return\n    }\n\n    const body = getBody(xhr)\n\n    options.onSuccess?.(body)\n  }\n\n  if (options.onAbort) {\n    xhr.onabort = () => {\n      options.onAbort!()\n    }\n  }\n\n  xhr.open('POST', url, true)\n\n  if (options.withCredentials && 'withCredentials' in xhr) {\n    xhr.withCredentials = true\n  }\n\n  const headers = options.headers ?? {}\n\n  Object.keys(headers).forEach(header => {\n    if (has(headers, header) && isDefined(headers[header])) {\n      xhr.setRequestHeader(header, headers[header])\n    }\n  })\n\n  xhr.send(formData)\n\n  return () => xhr.abort()\n}\n","import { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { UploadList } from '@/components/upload-list'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, defineComponent, onBeforeUnmount, ref, renderSlot, toRef, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createStateProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n} from '@vexip-ui/config'\nimport { isClient, isDefined, isFalse, isPromise, noop, randomString } from '@vexip-ui/utils'\nimport { uploadProps } from './props'\nimport { upload } from './request'\nimport { StatusType, uploadListTypes } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type {\n  DirectoryEntity,\n  UploadFileOptions,\n  UploadFileState,\n  UploadHttpError,\n  UploadSourceFile,\n} from './symbol'\n\nfunction getDefaultFileState(): UploadFileState {\n  return {\n    id: randomString(),\n    name: '',\n    size: 0,\n    type: '',\n    base64: null,\n    status: StatusType.PENDING,\n    percentage: 0,\n    source: null,\n    url: null,\n    path: '',\n    xhr: null,\n    response: null,\n    error: null,\n    abort: noop,\n  }\n}\n\nexport default defineComponent({\n  name: 'Upload',\n  props: uploadProps,\n  emits: ['update:file-list'],\n  setup(_props, { slots, emit, expose }) {\n    const {\n      idFor,\n      labelId,\n      state,\n      disabled,\n      loading,\n      size,\n      validateField,\n      getFieldValue,\n      setFieldValue,\n    } = useFieldStore<UploadFileOptions[]>(focus)\n\n    const props = useProps('upload', _props, {\n      state: createStateProp(state),\n      locale: null,\n      url: {\n        default: '',\n        static: true,\n      },\n      fileList: {\n        default: () => getFieldValue(),\n        static: true,\n      },\n      multiple: false,\n      tip: '',\n      accept: null,\n      filter: '',\n      maxSize: {\n        default: null,\n        validator: value => value >= 0,\n      },\n      field: 'file',\n      data: () => ({}),\n      headers: () => ({}),\n      withCredentials: false,\n      manual: false,\n      hiddenFiles: false,\n      countLimit: {\n        default: 0,\n        validator: value => value >= 0,\n      },\n      allowDrag: false,\n      onBeforeUpload: {\n        default: null,\n        isFunc: true,\n      },\n      onBeforeSelect: {\n        default: null,\n        isFunc: true,\n      },\n      iconRenderer: {\n        default: null,\n        isFunc: true,\n      },\n      selectToAdd: false,\n      listType: {\n        default: 'name',\n        validator: value => uploadListTypes.includes(value),\n      },\n      block: false,\n      loadingText: null,\n      directory: false,\n      pathField: 'path',\n      disabledClick: false,\n      buttonLabel: null,\n      disabled: () => disabled.value,\n      loading: () => loading.value,\n      loadingIcon: createIconProp(),\n      loadingLock: false,\n      loadingEffect: null,\n      image: false,\n      defaultFiles: () => [],\n      // canPreview: don't set, using UploadFile default value\n      listStyle: null,\n      name: {\n        default: '',\n        static: true,\n      },\n      customFetch: {\n        default: null,\n        isFunc: true,\n      },\n      slots: () => ({}),\n    })\n\n    const nh = useNameHelper('upload')\n    const locale = useLocale('upload', toRef(props, 'locale'))\n    const icons = useIcons()\n    const fileStates = ref([]) as Ref<UploadFileState[]>\n    const isDragOver = ref(false)\n\n    const input = ref<HTMLInputElement>()\n    const button = ref<InstanceType<typeof Button>>()\n    const panel = ref<HTMLElement>()\n\n    const readonly = computed(() => props.loading && props.loadingLock)\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        nh.bm(`type-${props.listType}`),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm(props.state)]: props.state !== 'default',\n          [nh.bm('multiple')]: props.multiple,\n          [nh.bm('drag')]: props.allowDrag,\n          [nh.bm('to-add')]: props.selectToAdd,\n          [nh.bm('block')]: props.block,\n          [nh.bm('drag-only')]: props.disabledClick,\n          [nh.bm('image')]: props.image,\n          [nh.bm('has-file')]: !props.hiddenFiles && renderFiles.value.length,\n          [nh.bm('readonly')]: readonly.value,\n          [nh.bm('loading')]: props.loading,\n        },\n      ]\n    })\n    const controlClass = computed(() => {\n      if (props.image) {\n        return {\n          [nh.be('image-control')]: true,\n          [nh.bem('image-control', 'drag-over')]: isDragOver.value,\n          [nh.bem('image-control', 'disabled')]: props.disabled,\n        }\n      }\n\n      return {\n        [nh.be('control')]: true,\n        [nh.bem('control', 'drag-over')]: isDragOver.value,\n      }\n    })\n    const acceptString = computed(() => {\n      const accept = props.image ? (props.accept?.length ? props.accept : 'image/*') : props.accept\n\n      return accept && (typeof accept === 'string' ? accept : accept.join())\n    })\n    const defaultList = computed(() => props.defaultFiles.map(file => createFileState(file)))\n    const renderFiles = computed(() => {\n      return defaultList.value\n        .concat(fileStates.value)\n        .filter(item => item.status !== StatusType.DELETE)\n    })\n\n    watch(\n      () => props.fileList,\n      value => {\n        const idMap = new Map<string | number, UploadFileState>()\n        const fileMap = new Map<UploadSourceFile, UploadFileState>()\n\n        for (const state of fileStates.value) {\n          if (isDefined(state.id)) {\n            idMap.set(state.id, state)\n          }\n\n          if (state.source) {\n            fileMap.set(state.source, state)\n          }\n        }\n\n        fileStates.value = (value || []).map(file =>\n          createFileState(\n            file,\n            file.id ? idMap.get(file.id) : file.source ? fileMap.get(file.source) : undefined,\n          ),\n        )\n        syncInputFiles()\n      },\n      { immediate: true, deep: true },\n    )\n\n    expose({\n      isDragOver,\n      execute,\n      handleDelete,\n      focus,\n      blur: () => {\n        button.value?.$el.blur()\n        panel.value?.blur()\n      },\n    })\n\n    function focus(options?: FocusOptions) {\n      if (button.value?.$el) {\n        button.value.$el.focus(options)\n      } else {\n        panel.value?.focus(options)\n      }\n    }\n\n    function handleClick() {\n      if (props.disabled || readonly.value) return\n\n      !props.disabledClick && input.value?.click()\n    }\n\n    function handleKeyDown(event: KeyboardEvent) {\n      const key = event.code || event.key\n\n      if (key === 'Enter' || key === 'Space') {\n        handleClick()\n      }\n    }\n\n    function handleInputChange(event: Event) {\n      const target = event.target as HTMLInputElement\n\n      if (target?.files) {\n        handleFilesChange(target.files)\n      }\n    }\n\n    async function handleFilesChange(inputFiles: FileList | UploadSourceFile[]) {\n      const originFiles = Array.from(inputFiles || []) as UploadSourceFile[]\n      const shouldAdd = props.selectToAdd\n      const files = shouldAdd ? Array.from(fileStates.value) : []\n\n      for (const file of originFiles) {\n        if (!file.path) {\n          file.path = file.webkitRelativePath\n        }\n\n        let fileState = getFileStateBySource(file)\n\n        if (fileState) {\n          if (\n            fileState.status !== StatusType.SUCCESS &&\n            fileState.status !== StatusType.UPLOADING\n          ) {\n            fileState.status = StatusType.PENDING\n          }\n        } else {\n          fileState = createFileState({\n            name: file.name,\n            size: file.size,\n            type: file.type,\n            source: file,\n          })\n        }\n\n        if (typeof props.onBeforeSelect === 'function') {\n          let result = props.onBeforeSelect(fileState, files)\n\n          if (isPromise(result)) {\n            result = await result\n          }\n\n          if (isFalse(result)) continue\n        }\n\n        if (!files.includes(fileState)) {\n          files.push(fileState)\n        }\n      }\n\n      const countLimit = props.countLimit\n\n      if (countLimit > 0 && files.length > countLimit) {\n        const exceedFiles = files.slice(countLimit)\n\n        emitEvent(props.onExceed, exceedFiles)\n        fileStates.value = files.slice(0, countLimit)\n      } else {\n        fileStates.value = files\n      }\n\n      syncInputFiles()\n      emitChangeEvent()\n\n      if (!props.manual) {\n        execute()\n      }\n    }\n\n    function emitChangeEvent() {\n      emit('update:file-list', fileStates.value)\n      setFieldValue(fileStates.value)\n      emitEvent(props.onChange, fileStates.value)\n      validateField()\n    }\n\n    function getFileStateBySource(file: UploadSourceFile) {\n      const { name, size, type } = file\n      const path = file.path || file.webkitRelativePath\n\n      return fileStates.value.find(({ source }) => {\n        return (\n          source &&\n          (source.path || source.webkitRelativePath) === path &&\n          source.name === name &&\n          source.size === size &&\n          source.type === type\n        )\n      })\n    }\n\n    function createFileState(\n      file: UploadFileOptions,\n      defaults = getDefaultFileState(),\n    ): UploadFileState {\n      const { id, name, size, type, base64, status, percentage, source, url, path } = file\n\n      Object.assign(defaults, {\n        id: id ?? defaults.id ?? randomString(),\n        name: name || '',\n        size: size || 0,\n        type: type || '',\n        base64: base64 || null,\n        status: status ?? StatusType.PENDING,\n        percentage: percentage || 0,\n        source: source || null,\n        url: url || null,\n        path: path || '',\n        xhr: null,\n        response: null,\n        error: null,\n      })\n\n      return defaults\n    }\n\n    function getFileExtension(file: UploadFileState) {\n      return file.name.split('.').pop()!.toLocaleLowerCase()\n    }\n\n    async function execute() {\n      if (!props.url || !verifyFiles()) {\n        return false\n      }\n\n      const uploadFiles = fileStates.value.filter(\n        item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\n      )\n      const requests: Promise<any>[] = []\n\n      for (const file of uploadFiles) {\n        requests.push(uploadFile(file).catch(noop))\n      }\n\n      return await Promise.all(requests).then(responses => responses.filter(response => response))\n    }\n\n    async function uploadFile(file: UploadFileState) {\n      if (typeof props.onBeforeUpload === 'function') {\n        let result = props.onBeforeUpload(\n          file,\n          fileStates.value.filter(\n            item => item.status !== StatusType.SUCCESS && item.status !== StatusType.DELETE,\n          ),\n        )\n\n        if (isPromise(result)) {\n          try {\n            result = await result\n          } catch (e) {\n            return\n          }\n        }\n\n        if (isFalse(result)) return\n\n        if (result instanceof Blob) {\n          if (result instanceof File) {\n            file.source = result\n          } else {\n            file.source = new File([result], file.name, {\n              type: file.type,\n            })\n          }\n        }\n      }\n\n      if (!file.source) return\n\n      file.status = StatusType.UPLOADING\n\n      const { url, headers, withCredentials, data, field, pathField } = props\n\n      return await new Promise((resolve, reject) => {\n        file.abort = (props.customFetch || upload)({\n          url,\n          headers,\n          withCredentials,\n          data,\n          field,\n          pathField,\n          file: file.source!,\n          onProgress: percent => {\n            handleProgress(percent, file)\n          },\n          onSuccess: response => {\n            handleSuccess(response, file)\n            resolve(response)\n          },\n          onError: error => {\n            handleError(error, file)\n            reject(error)\n          },\n          onAbort: () => {\n            resolve(null)\n          },\n        })\n      })\n    }\n\n    function verifyFiles() {\n      const limitSize = props.maxSize ? props.maxSize * 1024 : Infinity\n      const filter =\n        typeof props.filter === 'string'\n          ? props.filter\n            ? [props.filter]\n            : []\n          : props.filter.filter(item => item)\n\n      for (let i = 0, len = fileStates.value.length; i < len; ++i) {\n        const file = fileStates.value[i]\n        const extension = getFileExtension(file)\n\n        if (filter.length && !filter.includes(extension)) {\n          emitEvent(props.onFilterError, file)\n\n          return false\n        }\n\n        if (file.size > limitSize) {\n          emitEvent(props.onSizeError, file)\n\n          return false\n        }\n      }\n\n      return true\n    }\n\n    function handleDelete(file: UploadFileState) {\n      file.status = StatusType.DELETE\n\n      file.abort?.()\n      syncInputFiles()\n      emitEvent(props.onDelete, file)\n      emitChangeEvent()\n    }\n\n    function handlePreview(file: UploadFileState) {\n      emitEvent(props.onPreview, file)\n    }\n\n    function syncInputFiles() {\n      if (!isClient) return\n\n      const dataTransfer = new DataTransfer()\n      fileStates.value = fileStates.value.filter(item => item.status !== StatusType.DELETE)\n\n      fileStates.value.forEach(item => {\n        item.source && dataTransfer.items.add(item.source)\n      })\n\n      if (input.value) {\n        input.value.files = dataTransfer.files\n      }\n    }\n\n    function handleProgress(percent: number, file: UploadFileState) {\n      if (file.status === StatusType.DELETE) return\n\n      file.percentage = percent\n\n      emitEvent(props.onProgress, file, percent)\n      emitChangeEvent()\n    }\n\n    function handleSuccess(response: any, file: UploadFileState) {\n      if (file.status === StatusType.DELETE) return\n\n      file.status = StatusType.SUCCESS\n      file.response = response\n      file.error = null\n\n      emitEvent(props.onSuccess, file, response)\n      emitChangeEvent()\n    }\n\n    function handleError(error: UploadHttpError, file: UploadFileState) {\n      if (file.status === StatusType.DELETE) return\n\n      file.status = StatusType.FAIL\n      file.error = error\n\n      emitEvent(props.onError, file, error)\n      emitChangeEvent()\n    }\n\n    let dragTimer: ReturnType<typeof setTimeout>\n\n    onBeforeUnmount(() => {\n      clearTimeout(dragTimer)\n    })\n\n    async function handleDrop(event: DragEvent) {\n      if (!props.allowDrag || props.disabled || readonly.value) return\n\n      clearTimeout(dragTimer)\n      event.preventDefault()\n\n      isDragOver.value = false\n\n      if (event.dataTransfer) {\n        const files = await collectDropFiles(event.dataTransfer)\n\n        files.length && handleFilesChange(files)\n      }\n    }\n\n    function handleDragEnter(event: DragEvent) {\n      if (!props.allowDrag || props.disabled || readonly.value) return\n\n      clearTimeout(dragTimer)\n      event.preventDefault()\n\n      isDragOver.value = true\n    }\n\n    function handleDragLeave(event: DragEvent) {\n      if (!props.allowDrag || props.disabled || readonly.value) return\n\n      event.preventDefault()\n\n      dragTimer = setTimeout(() => {\n        isDragOver.value = false\n      }, 100)\n    }\n\n    async function collectDropFiles(dataTransfer: DataTransfer) {\n      const { items, files } = dataTransfer\n\n      if (!items.length) return []\n\n      const collectedFiles: File[] = []\n      const dirLoop: Array<{ dir: DirectoryEntity, prefix: string }> = []\n      const processes: Promise<void>[] = []\n\n      for (let i = 0, len = items.length; i < len; ++i) {\n        const entity = items[i].webkitGetAsEntry?.()\n\n        // 内核不支持\n        if (!entity) return files\n\n        if (entity.isFile) {\n          collectedFiles.push(files[i])\n        } else {\n          dirLoop.push({ dir: entity as unknown as DirectoryEntity, prefix: '' })\n          // directories.push(entity as unknown as DirectoryEntity)\n        }\n      }\n\n      if (!props.directory || !dirLoop.length) return collectedFiles\n\n      const fileEntries: Array<{ entry: DirectoryEntity, prefix: string }> = []\n\n      let countLimit = props.countLimit - (props.selectToAdd ? fileStates.value.length : 0)\n      countLimit = Math.round(countLimit) > 0 ? countLimit : 100\n\n      const doProcess = () => {\n        while (dirLoop.length) {\n          const loop = dirLoop.shift()!\n          const dir = loop.dir\n          const prefix = loop.prefix ? `${loop.prefix}/${dir.name}` : dir.name\n          const reader = dir.createReader()\n\n          processes.push(\n            new Promise<void>(resolve => {\n              reader.readEntries(entries => {\n                entries.forEach(entry => {\n                  if (entry.isFile) {\n                    fileEntries.push({ entry, prefix })\n                  } else {\n                    dirLoop.push({ dir: entry, prefix })\n                  }\n                })\n\n                resolve()\n              })\n            }),\n          )\n        }\n      }\n\n      while (true) {\n        doProcess()\n        await Promise.all(processes)\n\n        if (!dirLoop.length || fileEntries.length >= countLimit) {\n          break\n        }\n      }\n\n      if (fileEntries.length > 0) {\n        return collectedFiles.concat(\n          await Promise.all(\n            fileEntries.map(\n              ({ entry, prefix }) =>\n                new Promise<File>(resolve =>\n                  entry.file(file => {\n                    file.path = `${prefix}/${file.name}`\n                    resolve(file)\n                  }),\n                ),\n            ),\n          ),\n        )\n      }\n\n      return collectedFiles\n    }\n\n    function preventDefault(event: Event) {\n      event.preventDefault()\n    }\n\n    function renderNormalAction() {\n      return !props.allowDrag && !props.disabledClick ? (\n        <>\n          <Button\n            ref={button}\n            inherit\n            size={size.value}\n            type={props.state}\n            disabled={props.disabled}\n            loading={props.loading}\n          >\n            {{\n              default: () => props.buttonLabel ?? locale.value.upload,\n              icon: () => <Icon {...icons.value.upload} />,\n              loading: () => (\n                <Icon\n                  {...icons.value.loading}\n                  class={nh.be('loading-icon')}\n                  effect={props.loadingEffect || icons.value.loading.effect}\n                  icon={props.loadingIcon || icons.value.loading.icon}\n                  label={'loading'}\n                />\n              ),\n            }}\n          </Button>\n          {renderSlot(slots, 'tip', undefined, () => [\n            <Renderer renderer={props.slots.tip}>\n              {props.tip && <p class={nh.be('tip')}>{props.tip}</p>}\n            </Renderer>,\n          ])}\n        </>\n      ) : (\n        <div\n          ref={panel}\n          class={[nh.be('drag-panel'), props.disabled && nh.bem('drag-panel', 'disabled')]}\n          tabindex={0}\n        >\n          {renderSlot(slots, 'cloud', undefined, () => [\n            <Renderer renderer={props.slots.cloud}>\n              <Icon\n                {...icons.value.uploadCloud}\n                class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n                scale={+(icons.value.uploadCloud.scale || 1) * 4}\n              />\n            </Renderer>,\n          ])}\n          {renderSlot(slots, 'tip', undefined, () => [\n            <Renderer renderer={props.slots.tip}>\n              <p class={nh.be('tip')}>{props.tip || locale.value.dragOrClick}</p>\n            </Renderer>,\n          ])}\n          <Icon\n            {...icons.value.loading}\n            class={nh.be('loading-icon')}\n            effect={props.loadingEffect || icons.value.loading.effect}\n            icon={props.loadingIcon || icons.value.loading.icon}\n            label={'loading'}\n            style={{ opacity: props.loading ? '100%' : '0%' }}\n          />\n        </div>\n      )\n    }\n\n    function renderImageAction() {\n      return (\n        <button\n          class={[nh.be('image-action'), props.disabled && nh.bem('image-action', 'disabled')]}\n          type={'button'}\n        >\n          {renderSlot(\n            slots,\n            'default',\n            {\n              isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n            },\n            () => [\n              <Renderer\n                renderer={props.slots.default}\n                data={{ isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value }}\n              >\n                {props.loading ? (\n                  <Icon\n                    {...icons.value.loading}\n                    class={nh.be('loading-icon')}\n                    effect={props.loadingEffect || icons.value.loading.effect}\n                    icon={props.loadingIcon || icons.value.loading.icon}\n                    label={'loading'}\n                    style={{ marginBottom: '6px' }}\n                  />\n                ) : (\n                  <Icon\n                    {...icons.value.plus}\n                    class={[nh.be('cloud'), props.disabled && nh.bem('cloud', 'disabled')]}\n                    scale={+(icons.value.plus.scale || 1) * 1.2}\n                    style={{ marginBottom: '6px' }}\n                  />\n                )}\n                <span>{props.buttonLabel ?? locale.value.upload}</span>\n              </Renderer>,\n            ],\n          )}\n        </button>\n      )\n    }\n\n    function renderControl() {\n      const HtmlTag = props.image ? 'li' : 'div'\n\n      return (\n        <HtmlTag\n          class={controlClass.value}\n          tabindex={-1}\n          onClick={handleClick}\n          onDrop={handleDrop}\n          onDragover={handleDragEnter}\n          onDragleave={handleDragLeave}\n          onKeydown={handleKeyDown}\n        >\n          {!props.disabledClick && (\n            <input\n              ref={input}\n              type={'file'}\n              class={nh.be('input')}\n              disabled={props.disabled}\n              multiple={props.multiple}\n              name={props.name}\n              accept={acceptString.value}\n              webkitdirectory={props.directory || undefined}\n              onChange={handleInputChange}\n              onSubmit={preventDefault}\n            />\n          )}\n          {props.image\n            ? renderImageAction()\n            : renderSlot(\n              slots,\n              'default',\n              {\n                isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n              },\n              () => [\n                <Renderer\n                  renderer={props.slots.default}\n                  data={{\n                    isDragOver: (props.allowDrag || props.disabledClick) && isDragOver.value,\n                  }}\n                >\n                  {renderNormalAction()}\n                </Renderer>,\n              ],\n            )}\n        </HtmlTag>\n      )\n    }\n\n    function renderFileList() {\n      return (\n        <UploadList\n          inherit\n          files={renderFiles.value}\n          select-to-add={props.selectToAdd}\n          type={props.image ? 'thumbnail' : props.listType}\n          icon-renderer={props.iconRenderer}\n          loading-text={props.loadingText}\n          can-preview={props.canPreview}\n          style={props.listStyle}\n          onDelete={handleDelete}\n          onPreview={handlePreview}\n        >\n          {{\n            item:\n              slots.item || props.slots.item\n                ? (params: any) =>\n                  renderSlot(slots, 'item', params, () => [\n                    <Renderer renderer={props.slots.item} data={params}></Renderer>,\n                  ])\n                : null,\n            icon:\n              slots.icon || props.slots.icon\n                ? (params: any) =>\n                  renderSlot(slots, 'icon', params, () => [\n                    <Renderer renderer={props.slots.icon} data={params}></Renderer>,\n                  ])\n                : null,\n            suffix: () =>\n              props.image && (!props.countLimit || renderFiles.value.length < props.countLimit)\n                ? renderControl()\n                : null,\n          }}\n        </UploadList>\n      )\n    }\n\n    return () => (\n      <div id={idFor.value} class={className.value} role={'group'} aria-labelledby={labelId.value}>\n        {!props.image && renderControl()}\n        {!props.hiddenFiles && renderFileList()}\n      </div>\n    )\n  },\n  methods: {\n    execute: noop as () => Promise<false | any[]>,\n    handleDelete: noop as (file: UploadFileState) => void,\n    focus: noop as (options?: FocusOptions) => void,\n    blur: noop as () => void,\n  },\n})\n","import { booleanProp, buildProps, eventProp, iconProp } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { FullScreenType } from '@/components/full-screen'\nimport type { IconEffect } from '@/components/icon'\nimport type { ClassType, ConfigurableProps } from '@vexip-ui/config'\nimport type {\n  VideoControlLayout,\n  VideoControlOption,\n  VideoControlType,\n  // VideoKernel,\n  VideoPlaybackRate,\n  VideoSegment,\n  VideoShortcutOptions,\n  VideoSlots,\n} from './symbol'\n\nexport const videoProps = buildProps({\n  src: String,\n  srcList: Array as PropType<string[]>,\n  noControls: booleanProp,\n  videoAttrs: Object,\n  time: Number,\n  volume: Number,\n  playbackRate: Number,\n  playbackRates: Array as PropType<(number | VideoPlaybackRate)[]>,\n  // kernel: Object as PropType<VideoKernel>,\n  controlLayout: Object as PropType<VideoControlLayout>,\n  poster: String,\n  video: Object as PropType<HTMLVideoElement>,\n  segments: Array as PropType<(number | VideoSegment)[]>,\n  loading: booleanProp,\n  loadingIcon: iconProp,\n  loadingEffect: String as PropType<IconEffect>,\n  shortcuts: Object as PropType<VideoShortcutOptions>,\n  slots: Object as PropType<VideoSlots>,\n  onPlay: eventProp(),\n  onPause: eventProp(),\n  onEnded: eventProp(),\n  onTimeChange: eventProp<(time: number) => void>(),\n  onVolumeChange: eventProp<(volume: number) => void>(),\n  onRateChange: eventProp<(rate: number) => void>(),\n  onToggleFlip: eventProp<(flip: boolean) => void>(),\n  onTogglePip: eventProp<(pip: boolean) => void>(),\n  onToggleFull: eventProp<(full: false | FullScreenType) => void>(),\n  onPrev: eventProp(),\n  onNext: eventProp(),\n  onRefresh: eventProp(),\n})\n\nexport type VideoProps = ExtractPropTypes<typeof videoProps>\nexport type VideoCProps = ConfigurableProps<ExtractPropTypes<typeof videoProps>>\n\nexport const videoControlProps = buildProps({\n  type: String as PropType<VideoControlType>,\n  label: String,\n  tipClass: [String, Array, Object] as PropType<ClassType>,\n  disabled: booleanProp,\n  shortcut: String,\n  focusable: booleanProp,\n  value: [Number, String],\n  options: Array as PropType<(string | VideoControlOption)[]>,\n  onClick: eventProp(),\n  onEnter: eventProp(),\n  onLeave: eventProp(),\n  onFocus: eventProp<(event: FocusEvent) => void>(),\n  onBlur: eventProp<(event: FocusEvent) => void>(),\n  onSelect: eventProp<(option: VideoControlOption) => void>(),\n})\n\nexport type VideoControlProps = ExtractPropTypes<typeof videoControlProps>\nexport type VideoControlCProps = ConfigurableProps<ExtractPropTypes<typeof videoControlProps>>\n","import type { InjectionKey } from 'vue'\n\nexport type VideoPresetControl =\n  | 'play'\n  | 'play-prev'\n  | 'play-next'\n  | 'refresh'\n  | 'timer'\n  | 'playback-rate'\n  | 'flip'\n  | 'volume'\n  | 'pip'\n  | 'full-window'\n  | 'full-browser'\nexport type VideoShortcutOptions = Partial<Record<VideoPresetControl, string>>\nexport type VideoControlName = VideoPresetControl | (string & {})\nexport type VideoControlConfig = VideoControlName | [VideoControlName, any]\n\nexport interface VideoControlLayout {\n  left?: VideoControlConfig[],\n  center?: VideoControlConfig[],\n  right?: VideoControlConfig[],\n}\n\nexport interface VideoPlaybackRate {\n  label?: string,\n  value: number,\n}\n\nexport type VideoControlType = 'button' | 'select' | 'panel'\n\nexport interface VideoControlOption {\n  value: string | number,\n  label?: string,\n  selectedLabel?: string,\n  disabled?: boolean,\n  divided?: boolean,\n  title?: string,\n}\n\nexport interface VideoSegment {\n  time: number,\n  title?: string,\n}\n\n// export interface VideoKernel {\n//   play: () => void,\n//   pause: () => void,\n//   mute: () => void,\n//   unmute: () => void,\n//   prev: () => void,\n//   next: () => void,\n//   refresh: () => void | boolean\n// }\n\nexport interface VideoState {\n  placeId?: string,\n  iconScale: number,\n  addShortcut: (key: string, cb: () => void) => () => void,\n}\n\nexport interface VideoSlots {\n  poster?: () => any,\n}\n\nconst defaultLayout: Required<VideoControlLayout> = {\n  left: ['play-prev', 'play', 'play-next', 'refresh', 'timer'],\n  center: [],\n  right: ['playback-rate', 'volume', 'flip', 'pip', 'full-window', 'full-browser'],\n}\n\nfor (const key of Object.keys(defaultLayout) as (keyof VideoControlLayout)[]) {\n  defaultLayout[key] = Object.freeze(defaultLayout[key]) as any\n}\n\nexport const videoDefaultControlLayout = Object.freeze(defaultLayout)\n\nexport const videoDefaultShortcuts = Object.freeze({\n  play: 'Space',\n  'play-prev': 'PageUp',\n  'play-next': 'PageDown',\n  refresh: 'R',\n  flip: 'C',\n  volume: 'M',\n  pip: 'P',\n  'full-window': 'G',\n  'full-browser': 'F',\n})\n\nexport const VIDEO_STATE = '__VXP_VIDEO_STATE' as unknown as InjectionKey<VideoState>\n","<script setup lang=\"ts\">\nimport { Option } from '@/components/option'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, onBeforeUnmount, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { listToMap } from '@vexip-ui/utils'\nimport { videoControlProps } from './props'\nimport { VIDEO_STATE } from './symbol'\n\nimport type { VideoControlOption } from './symbol'\n\ndefineOptions({ name: 'VideoControl' })\n\nconst _props = defineProps(videoControlProps)\nconst props = useProps('videoControl', _props, {\n  type: 'button',\n  label: {\n    static: true,\n    default: '',\n  },\n  tipClass: null,\n  disabled: false,\n  shortcut: {\n    static: true,\n    default: '',\n  },\n  focusable: false,\n  value: null,\n  options: () => [],\n})\n\ndefineSlots<{\n  selected: (params: { option: VideoControlOption }) => any,\n  default: () => any,\n  label: () => any,\n  panel: () => any,\n  option: (params: { option: VideoControlOption, index: number, selected: boolean }) => any,\n}>()\n\nconst nh = useNameHelper('video')\n\nconst videoState = inject(VIDEO_STATE)!\n\nconst currentValue = ref(props.value)\n\nconst className = computed(() => {\n  return {\n    [nh.be('control')]: true,\n    [nh.bem('control', props.type)]: props.type !== 'button',\n    [nh.bem('control', 'disabled')]: props.disabled,\n  }\n})\nconst tipClass = computed(() => {\n  return props.type === 'button' ? nh.be('control-tip') : nh.be('control-panel')\n})\nconst objectOptions = computed(() => {\n  return props.options.map(option => {\n    return typeof option === 'string' ? { value: option } : option\n  })\n})\nconst optionMap = computed(() => listToMap(objectOptions.value, 'value', undefined, true))\nconst currentOption = computed(() => optionMap.value.get(currentValue.value))\n\nlet removeShortcut: (() => void) | undefined\n\nwatch(\n  () => props.shortcut,\n  value => {\n    removeShortcut?.()\n\n    if (value) {\n      removeShortcut = videoState.addShortcut(value, handleClick)\n    }\n  },\n  { immediate: true },\n)\n\nonBeforeUnmount(() => removeShortcut?.())\n\nfunction handleClick() {\n  !props.disabled && emitEvent(props.onClick)\n}\n\nfunction handleSelect(option: VideoControlOption) {\n  if (props.disabled || option.disabled) return\n\n  currentValue.value = option.value\n  emitEvent(props.onSelect, option)\n}\n</script>\n\n<template>\n  <div :class=\"className\">\n    <Tooltip\n      :trigger=\"props.focusable ? 'hover-focus' : 'hover'\"\n      raw\n      shift\n      :transfer=\"videoState.placeId && `#${videoState.placeId}`\"\n      :tip-class=\"[tipClass, props.tipClass]\"\n      :no-hover=\"props.type === 'button'\"\n      :disabled=\"props.type === 'button' ? !props.label : props.disabled\"\n      @tip-enter=\"emitEvent(props.onEnter)\"\n      @tip-leave=\"emitEvent(props.onLeave)\"\n    >\n      <template #trigger>\n        <button\n          :class=\"nh.be('control-button')\"\n          type=\"button\"\n          @focus=\"emitEvent(props.onFocus, $event)\"\n          @blur=\"emitEvent(props.onBlur, $event)\"\n          @click=\"handleClick\"\n        >\n          <slot v-if=\"currentOption\" name=\"selected\" :option=\"currentOption\">\n            {{ currentOption.selectedLabel || currentOption.label || currentOption.value }}\n          </slot>\n          <slot v-else></slot>\n        </button>\n      </template>\n      <template v-if=\"props.type === 'button'\">\n        <span :class=\"nh.be('control-name')\">\n          <slot name=\"label\">\n            {{ props.label }}\n            <span v-if=\"props.shortcut\" :class=\"nh.be('control-shortcut')\">\n              {{ `(${props.shortcut})` }}\n            </span>\n          </slot>\n        </span>\n      </template>\n      <slot v-else name=\"panel\">\n        <ul v-if=\"props.type === 'select'\" :class=\"nh.be('control-options')\">\n          <Option\n            v-for=\"(option, index) in objectOptions\"\n            :key=\"option.value\"\n            :class=\"{\n              [nh.be('control-option')]: true,\n              [nh.bem('control-option', 'selected')]: option.value === currentValue,\n            }\"\n            :label=\"option.label\"\n            :value=\"option.value\"\n            :disabled=\"option.disabled\"\n            :divided=\"option.disabled\"\n            :title=\"option.title\"\n            no-hover\n            @select=\"handleSelect(option)\"\n          >\n            <slot\n              name=\"option\"\n              :option=\"option\"\n              :index=\"index\"\n              :selected=\"option.value === currentValue\"\n            >\n              {{ option.label || option.value }}\n            </slot>\n          </Option>\n        </ul>\n      </slot>\n    </Tooltip>\n  </div>\n</template>\n","import { doubleDigits, leaveNumber } from '@vexip-ui/utils'\n\nimport type { IconOptions, IconValue } from '@vexip-ui/config'\n\nexport function formatSeconds(seconds: number) {\n  if (seconds <= 0) return '00:00'\n\n  const remainders = leaveNumber(Math.ceil(seconds), 60, 2)\n\n  if (remainders.length < 2) {\n    remainders.unshift(0)\n  }\n\n  return remainders.length < 3\n    ? remainders.map(doubleDigits).join(':')\n    : remainders.map((r, i) => (i ? doubleDigits(r) : r)).join(':')\n}\n\nexport function mergeIconScale(scale: number, icon: IconOptions & { icon: IconValue }) {\n  return {\n    ...icon,\n    scale: +(icon.scale || 1) * scale,\n  }\n}\n","<script setup lang=\"ts\">\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Slider } from '@/components/slider'\n\nimport { computed, ref } from 'vue'\n\nimport { getStepByWord, useLocale, useNameHelper } from '@vexip-ui/config'\nimport { useListener, useSetTimeout } from '@vexip-ui/hooks'\nimport { boundRange, throttle } from '@vexip-ui/utils'\nimport { formatSeconds } from './helper'\n\nimport type { PropType } from 'vue'\nimport type { SliderExposed } from '@/components/slider'\nimport type { VideoSegment } from './symbol'\n\ninterface PointState {\n  start: number,\n  startPercent: number,\n  end: number,\n  endPercent: number,\n  duration: number,\n  durationPercent: number,\n  width: number,\n}\n\ndefineOptions({ name: 'VideoProgress' })\n\nconst props = defineProps({\n  time: {\n    type: Number,\n    default: 0,\n  },\n  duration: {\n    type: Number,\n    default: 0,\n  },\n  segments: {\n    type: Array as PropType<VideoSegment[]>,\n    default: () => [],\n  },\n  noPreview: {\n    type: Boolean,\n    default: false,\n  },\n  previewSrc: {\n    type: String,\n    default: '',\n  },\n})\n\nconst emit = defineEmits(['change'])\n\nconst nh = useNameHelper('video')\nconst locale = useLocale('video')\n\nconst { timer } = useSetTimeout()\n\nconst slidTime = ref(0)\nconst hovered = ref(false)\nconst hoveredTime = ref(0)\nconst indicatorLeft = ref(0)\nconst previewLeft = ref(0)\n\nlet paddingX = [0, 0]\nlet sliderWidth = 100\nlet previewWidth = 60\n\nconst wrapper = ref<HTMLElement>()\nconst slider = ref<SliderExposed>()\nconst sliderEl = computed(() => slider.value?.$el as HTMLElement | undefined)\nconst preview = ref<HTMLElement>()\n\nconst sliding = computed(() => !!slider.value?.sliding[1])\nconst percent = computed(() => {\n  return props.duration ? ((sliding.value ? slidTime.value : props.time) / props.duration) * 100 : 0\n})\nconst className = computed(() => {\n  return {\n    [nh.be('progress')]: true,\n    [nh.bem('progress', 'sliding')]: sliding.value,\n    [nh.bem('progress', 'disabled')]: props.duration <= 0,\n  }\n})\nconst points = computed<PointState[]>(() => {\n  const duration = Math.max(1, props.duration)\n\n  let times = props.segments.map(segment => segment.time)\n\n  if (!times.length) times = [0, duration]\n\n  times = times.at(-1) === duration ? times : [...times, duration]\n  times = times[0] === 0 ? times : [0, ...times]\n\n  const points: PointState[] = []\n\n  for (let i = 0, len = times.length - 1; i < len; ++i) {\n    const start = times[i]\n    const end = times[i + 1]\n    const pointDuration = end - start\n\n    points.push({\n      start,\n      startPercent: (start / duration) * 100,\n      end,\n      endPercent: (end / duration) * 100,\n      duration: pointDuration,\n      durationPercent: (pointDuration / duration) * 100,\n      width: ((end - start) / duration) * 100,\n    })\n  }\n\n  return points\n})\nconst segmentLabel = computed(() => {\n  const time = hoveredTime.value\n  const segments = props.segments\n\n  if (!segments.length) return ''\n\n  let index = -1\n\n  if (time <= 0) {\n    index = 0\n  } else {\n    for (let i = 1, len = segments.length; i < len; ++i) {\n      if (segments[i].time > time) {\n        index = i - 1\n        break\n      }\n    }\n  }\n\n  if (index < 0) {\n    index = segments.length - 1\n  }\n\n  const title = segments[index]?.title || getStepByWord(locale.value.chapterCount, index + 1)\n\n  return title && ` (${title})`\n})\n\nuseListener(sliderEl, 'pointerenter', () => {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = true\n  }, 100)\n})\nuseListener(sliderEl, 'pointerleave', () => {\n  clearTimeout(timer.hover)\n\n  timer.hover = setTimeout(() => {\n    hovered.value = false\n  }, 100)\n})\nuseListener(\n  sliderEl,\n  'pointermove',\n  throttle((event: PointerEvent) => {\n    if (!sliding.value) {\n      processMoveOnTrack(event)\n    }\n  }),\n)\n\nfunction processMoveOnTrack(event: PointerEvent) {\n  if (!sliderEl.value) return\n\n  const offsetX = boundRange(\n    event.clientX - sliderEl.value.getBoundingClientRect().left,\n    0,\n    sliderWidth,\n  )\n\n  hoveredTime.value = (offsetX / sliderWidth) * props.duration\n  indicatorLeft.value = offsetX + paddingX[0]\n  previewLeft.value = boundRange(\n    offsetX - previewWidth * 0.5 + paddingX[0],\n    0,\n    sliderWidth - previewWidth + paddingX[0] + paddingX[1],\n  )\n}\n\nfunction onSliderResize(entry: ResizeObserverEntry) {\n  if (!wrapper.value) return\n\n  const style = getComputedStyle(wrapper.value)\n\n  paddingX = [parseFloat(style.paddingLeft), parseFloat(style.paddingRight)]\n  sliderWidth = entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n}\n\nfunction onPreviewResize(entry: ResizeObserverEntry) {\n  previewWidth = entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n}\n\nfunction handleChange(permillage: number) {\n  emit('change', (permillage / 1000) * props.duration)\n}\n\nconst onSlideMove = throttle(processMoveOnTrack)\n\nfunction onSlideStart() {\n  slidTime.value = props.time\n\n  document.addEventListener('pointermove', onSlideMove)\n  document.addEventListener('pointerup', onSlideEnd)\n}\n\nfunction onSlideEnd() {\n  document.removeEventListener('pointermove', onSlideMove)\n  document.removeEventListener('pointerup', onSlideEnd)\n}\n</script>\n\n<template>\n  <div ref=\"wrapper\" :class=\"className\">\n    <ResizeObserver :on-resize=\"onSliderResize\">\n      <Slider\n        ref=\"slider\"\n        :class=\"nh.be('progress-slider')\"\n        :value=\"percent * 10\"\n        :max=\"1000\"\n        :vertical=\"false\"\n        :range=\"false\"\n        hide-tip\n        trigger-fade\n        flip-marker\n        :disabled=\"duration <= 0\"\n        @change=\"handleChange\"\n        @pointerdown=\"onSlideStart\"\n      >\n        <template #filler=\"state\">\n          <div\n            v-for=\"(point, index) in points\"\n            :key=\"index\"\n            :class=\"nh.be('progress-segment')\"\n            :style=\"{ width: `${point.width}%` }\"\n          >\n            <div :class=\"nh.be('progress-track')\">\n              <div\n                :class=\"nh.be('progress-filler')\"\n                :style=\"{\n                  visibility: state.percent[1] < point.startPercent ? 'hidden' : undefined,\n                  transform: `translateX(${Math.min(\n                    (Math.max(state.percent[1] - point.startPercent, 0) / point.durationPercent) *\n                      100 -\n                      100,\n                    0,\n                  )}%) translateZ(0)`,\n                }\"\n              ></div>\n            </div>\n          </div>\n        </template>\n        <template #trigger>\n          <slot name=\"trigger\">\n            <div :class=\"nh.be('progress-trigger')\"></div>\n          </slot>\n        </template>\n      </Slider>\n    </ResizeObserver>\n    <div\n      :class=\"{\n        [nh.be('progress-indicator')]: true,\n        [nh.bem('progress-indicator', 'active')]: hovered && !sliding,\n      }\"\n      :style=\"{ transform: `translateX(${indicatorLeft}px) translateZ(0)` }\"\n    ></div>\n    <ResizeObserver v-if=\"!noPreview\" :on-resize=\"onPreviewResize\">\n      <div\n        ref=\"preview\"\n        :class=\"{\n          [nh.be('preview')]: true,\n          [nh.bem('preview', 'has-image')]: previewSrc,\n          [nh.bem('preview', 'active')]: hovered || sliding,\n        }\"\n        :style=\"{ transform: `translateX(${previewLeft}px) translateZ(0)` }\"\n      >\n        <slot name=\"preview\">\n          <div v-if=\"previewSrc\" :class=\"nh.be('preview-image')\">\n            <img :src=\"previewSrc\" />\n          </div>\n          <div :class=\"nh.be('preview-time')\">\n            {{ formatSeconds(hoveredTime) + segmentLabel }}\n          </div>\n        </slot>\n      </div>\n    </ResizeObserver>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Input } from '@/components/input'\n\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { getRangeWidth, isValidNumber, toNumber } from '@vexip-ui/utils'\nimport { formatSeconds } from './helper'\n\ndefineOptions({ name: 'VideoTimer' })\n\nconst props = defineProps({\n  time: {\n    type: Number,\n    default: 0,\n  },\n  duration: {\n    type: Number,\n    default: 0,\n  },\n  disabled: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst emit = defineEmits(['change'])\n\nconst nh = useNameHelper('video')\n\nconst currentTime = ref(props.time)\nconst editing = ref(false)\nconst width = ref(84)\nconst inputTime = ref('')\n\nconst input = ref<HTMLInputElement>()\nconst durationEl = ref<HTMLElement>()\n\nconst formattedTime = computed(() => formatSeconds(currentTime.value))\n\nwatch(\n  () => props.time,\n  value => {\n    currentTime.value = value\n  },\n)\nwatch(\n  () => props.disabled,\n  value => {\n    if (value) {\n      editing.value = false\n    }\n  },\n)\n\nonMounted(() => {\n  watch(\n    () => props.duration,\n    () => {\n      nextTick(() => {\n        width.value = durationEl.value ? getRangeWidth(durationEl.value) * 2 + 20 : 84\n      })\n    },\n    { immediate: true },\n  )\n})\n\nfunction handleClick() {\n  if (!props.disabled && !editing.value) {\n    editing.value = true\n    inputTime.value = formattedTime.value\n    nextTick(() => {\n      input.value?.focus()\n    })\n  }\n}\n\nfunction finishInput(confirm: boolean) {\n  editing.value = false\n\n  if (confirm) {\n    const units = inputTime.value.trim().split(':')\n\n    if (units.every(unit => isValidNumber(unit))) {\n      currentTime.value = units\n        .map(toNumber)\n        .reverse()\n        .slice(0, 3)\n        .reduce((seconds, unit, i) => seconds + 60 ** i * unit, 0)\n      currentTime.value = Math.min(currentTime.value, props.duration)\n      emit('change', currentTime.value)\n    }\n  }\n}\n</script>\n\n<template>\n  <div\n    :class=\"[nh.be('control'), nh.be('timer'), props.disabled && nh.bem('control', 'disabled')]\"\n    :style=\"{ width: `${width}px` }\"\n    @click=\"handleClick\"\n  >\n    <Input\n      v-if=\"editing\"\n      ref=\"input\"\n      v-model:value=\"inputTime\"\n      :class=\"nh.be('timer-input')\"\n      size=\"small\"\n      transparent\n      @blur=\"finishInput(false)\"\n      @enter=\"finishInput(true)\"\n    ></Input>\n    <template v-else>\n      <span>\n        {{ formattedTime }}\n      </span>\n      <span :class=\"nh.be('timer-separator')\">/</span>\n      <span ref=\"durationEl\">\n        {{ formatSeconds(duration) }}\n      </span>\n    </template>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Slider } from '@/components/slider'\n\nimport { computed, inject, ref, watch } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport VideoControl from './video-control.vue'\nimport { mergeIconScale } from './helper'\nimport { VIDEO_STATE } from './symbol'\n\ndefineOptions({ name: 'VideoVolume' })\n\nconst props = defineProps({\n  volume: {\n    type: Number,\n    default: 1,\n  },\n})\n\nconst emit = defineEmits(['change'])\n\nconst nh = useNameHelper('video')\nconst icons = useIcons()\n\nconst videoState = inject(VIDEO_STATE)!\n\nconst currentVolume = ref(props.volume)\nconst muted = ref(false)\n// const visible = ref(true)\n\nconst volumeIcon = computed(() => {\n  return muted.value\n    ? icons.value.volumeMute\n    : currentVolume.value < 0.5\n      ? icons.value.volumeLow\n      : icons.value.volume\n})\n\nwatch(\n  () => props.volume,\n  value => {\n    currentVolume.value = value\n  },\n)\n\ndefineExpose({ toggleMute })\n\nlet prevVolume = currentVolume.value\n\nfunction toggleMute() {\n  if (muted.value) {\n    currentVolume.value = prevVolume <= 0 ? 0.5 : prevVolume\n  } else {\n    prevVolume = currentVolume.value\n    currentVolume.value = 0\n  }\n\n  muted.value = !muted.value\n\n  emit('change', currentVolume.value)\n}\n\nfunction handleSlide(value: number) {\n  value /= 100\n  prevVolume = value\n  currentVolume.value = value\n  muted.value = value <= 0\n\n  emit('change', currentVolume.value)\n}\n</script>\n\n<template>\n  <VideoControl\n    :class=\"nh.be('volume')\"\n    type=\"panel\"\n    :tip-class=\"nh.be('volume-panel')\"\n    @click=\"toggleMute\"\n  >\n    <Icon v-bind=\"mergeIconScale(videoState.iconScale, volumeIcon)\"></Icon>\n    <template #panel>\n      <div :class=\"nh.be('volume-text')\">\n        {{ (currentVolume * 100).toFixed() }}\n      </div>\n      <Slider\n        :value=\"currentVolume * 100\"\n        :class=\"nh.be('volume-slider')\"\n        :min=\"0\"\n        :max=\"100\"\n        vertical\n        hide-tip\n        reverse\n        :range=\"false\"\n        @input=\"handleSlide\"\n      ></Slider>\n    </template>\n  </VideoControl>\n</template>\n","import { FullScreen } from '@/components/full-screen'\nimport { Icon } from '@/components/icon'\nimport { Progress } from '@/components/progress'\nimport { Renderer } from '@/components/renderer'\n\nimport {\n  Transition,\n  computed,\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  watch,\n} from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport VideoControl from './video-control.vue'\nimport VideoProgress from './video-progress.vue'\nimport VideoTimer from './video-timer.vue'\nimport VideoVolume from './video-volume.vue'\nimport { createSlotRender, useListener, useModifier, useSetTimeout } from '@vexip-ui/hooks'\nimport { decide, decimalLength, isClient, noop, toCapitalCase, toNumber } from '@vexip-ui/utils'\nimport { videoProps } from './props'\nimport { VIDEO_STATE, videoDefaultControlLayout, videoDefaultShortcuts } from './symbol'\n\nimport type { FullScreenExposed, FullScreenType } from '@/components/full-screen'\nimport type { VideoControlConfig, VideoPlaybackRate } from './symbol'\n\nexport default defineComponent({\n  name: 'Video',\n  props: videoProps,\n  emits: ['update:src', 'update:time', 'update:volume', 'update:playback-rate'],\n  setup(_props, { slots, emit, expose }) {\n    const props = useProps('video', _props, {\n      src: {\n        static: true,\n        default: '',\n      },\n      srcList: {\n        static: true,\n        default: null,\n      },\n      noControls: false,\n      videoAttrs: null,\n      time: {\n        static: true,\n        default: 0,\n      },\n      volume: 1,\n      playbackRate: 1,\n      playbackRates: () => [0.5, 1, 1.25, 1.5, 2],\n      // kernel: null,\n      controlLayout: () => videoDefaultControlLayout,\n      poster: '',\n      video: {\n        static: true,\n        default: null,\n      },\n      segments: () => [],\n      loading: false,\n      loadingIcon: null,\n      loadingEffect: null,\n      shortcuts: () => ({}),\n      slots: () => ({}),\n    })\n\n    const nh = useNameHelper('video')\n    const locale = useLocale('video')\n    const icons = useIcons()\n\n    const { timer } = useSetTimeout()\n\n    const pipEnabled = isClient && document.pictureInPictureEnabled\n\n    const currentSrc = ref(\n      props.src || props.srcList?.[0] || (props.videoAttrs?.src as string) || '',\n    )\n    const playing = ref(false)\n    const currentTime = ref(props.time)\n    const canPlay = ref(false)\n    const duration = ref(0)\n    const currentVolume = ref(props.volume) // 0 ~ 1\n    const pip = ref(false)\n    const stateShow = ref(true)\n    // record the state is invisible (whether finish transition)\n    const stateHidden = ref(false)\n    const currentRate = ref(props.playbackRate)\n    // const loadedData = ref(false)\n    const interacting = ref(false)\n    const hasPlayed = ref(false)\n    const flipped = ref(false)\n    const iconScale = ref(1.3)\n\n    const screen = ref<FullScreenExposed>()\n    const wrapper = computed(() => screen.value?.wrapper as HTMLElement | undefined)\n    const video = ref<HTMLVideoElement>()\n    const volumeRef = ref<InstanceType<typeof VideoVolume>>()\n\n    const placeId = computed(() => screen.value?.placeId)\n    const full = computed<false | FullScreenType>(() => screen.value?.full ?? false)\n    const videoRef = computed<HTMLVideoElement | undefined>(() => video.value || props.video)\n\n    const shortcutRecord = reactive({} as Record<string, () => void>)\n    const shortcuts = computed(() => ({ ...videoDefaultShortcuts, ...props.shortcuts }))\n\n    function addShortcut(key: string, cb: () => void) {\n      if (shortcutRecord[key]) {\n        console.warn(`[vexip-ui:Video] duplicate shortcut key '${key}' and it will be ignored`)\n\n        return noop\n      }\n\n      shortcutRecord[key] = cb\n\n      return () => {\n        delete shortcutRecord[key]\n      }\n    }\n\n    useModifier({\n      target: wrapper,\n      passive: false,\n      onKeyDown: (event, modifier) => {\n        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) return\n\n        decide(\n          [\n            [\n              () => modifier.up,\n              () => {\n                currentVolume.value = Math.min(1, currentVolume.value + 0.05)\n              },\n            ],\n            [\n              () => modifier.down,\n              () => (currentVolume.value = Math.max(0, currentVolume.value - 0.05)),\n            ],\n            [\n              () => modifier.right,\n              () => (currentTime.value = Math.min(duration.value, currentTime.value + 5)),\n            ],\n            [() => modifier.left, () => (currentTime.value = Math.max(0, currentTime.value - 5))],\n            [() => modifier[shortcuts.value.volume || 'M'], () => volumeRef.value?.toggleMute()],\n            ...Object.keys(shortcutRecord).map(key => {\n              return [() => modifier[key], shortcutRecord[key]] as [() => boolean, () => void]\n            }),\n          ],\n          { afterMatchAny: modifier.resetAll },\n        )\n      },\n    })\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bs('vars'),\n        {\n          [nh.bm('loading')]: props.loading,\n        },\n      ]\n    })\n    const playIcon = computed(() => (playing.value ? icons.value.pause : icons.value.play))\n    const stateIcon = computed(() => {\n      return playing.value ? icons.value.pauseState : icons.value.playState\n    })\n    const rateOptions = computed(() => {\n      const rates = props.playbackRates\n        .map(raw => {\n          const rate = typeof raw === 'number' ? { value: raw } : raw\n\n          rate.value = toNumber(rate.value)\n          rate.label =\n            rate.label || `${decimalLength(rate.value) ? rate.value : rate.value.toFixed(1)}x`\n\n          return rate\n        })\n        .filter(rate => rate.value > 0)\n        .sort((prev, next) => next.value - prev.value)\n\n      if (!rates.find(rate => rate.value === 1)) {\n        const index = rates.findIndex(rate => rate.value < 1)\n\n        rates.splice((index + rates.length) % rates.length, 0, { value: 1, label: '1.0x' })\n      }\n\n      return rates\n    })\n    const segments = computed(() => {\n      return props.segments\n        .map(segment => (typeof segment === 'number' ? { time: segment } : segment))\n        .filter(segment => segment.time >= 0 && segment.time <= duration.value)\n        .sort((prev, next) => prev.time - next.time)\n    })\n    const percent = computed(() => {\n      return duration.value ? (currentTime.value / duration.value) * 100 : 0\n    })\n    const srcFullList = computed(() => {\n      const src = props.src || (props.videoAttrs?.src as string) || ''\n\n      if (src && props.srcList && !props.srcList.includes(src)) {\n        return [src].concat(props.srcList)\n      }\n\n      return props.srcList || [src]\n    })\n    const srcIndex = computed(() => {\n      return srcFullList.value ? srcFullList.value.indexOf(currentSrc.value) : -1\n    })\n\n    const slotParams = shallowReadonly(\n      reactive({\n        playing,\n        currentTime,\n        currentVolume,\n        currentRate,\n        interacting,\n        flipped,\n        canPlay,\n        duration,\n        pip,\n        hasPlayed,\n        togglePlaying,\n        togglePip,\n        changeRate,\n        changeTime,\n        changeVolume,\n        toggleFull,\n      }),\n    )\n\n    watch(\n      () => props.src,\n      value => {\n        resetMetaState()\n        currentSrc.value = value\n      },\n      { flush: 'pre' },\n    )\n    watch(\n      () => props.time,\n      value => {\n        changeTime(value, false)\n      },\n    )\n    watch(\n      () => props.volume,\n      value => {\n        changeVolume(value, false)\n      },\n    )\n    watch(\n      () => props.playbackRate,\n      value => {\n        changeRate(value, false)\n      },\n    )\n    watch(playing, value => {\n      if (value) {\n        requestAnimationFrame(() => {\n          stateShow.value = false\n        })\n      } else {\n        stateShow.value = true\n      }\n    })\n    watch(canPlay, value => {\n      if (!value) {\n        playing.value = false\n      }\n    })\n    watch(stateShow, value => {\n      if (value) {\n        stateHidden.value = false\n      }\n    })\n\n    onMounted(() => {\n      nextTick(() => {\n        if (isClient && !videoRef.value && screen.value?.wrapper) {\n          video.value = (screen.value.wrapper as HTMLElement).querySelector('video') ?? undefined\n        }\n\n        if (videoRef.value && currentTime.value > 0) {\n          videoRef.value.currentTime = currentTime.value\n        }\n      })\n    })\n\n    provide(VIDEO_STATE, reactive({ placeId, iconScale, addShortcut }))\n\n    useListener(videoRef, 'canplay', () => {\n      canPlay.value = true\n      duration.value = videoRef.value?.duration ?? 0\n    })\n    useListener(videoRef, 'timeupdate', () => {\n      currentTime.value = videoRef.value?.currentTime ?? 0\n\n      emit('update:time', currentTime.value)\n      emitEvent(props.onTimeChange, currentTime.value)\n    })\n    useListener(videoRef, 'ended', handleEnded)\n    // useListener(videoRef, 'loadeddata', () => {\n    //   loadedData.value = true\n    // })\n    useListener(videoRef, 'enterpictureinpicture', () => {\n      pip.value = true\n      emitEvent(props.onTogglePip, true)\n    })\n    useListener(videoRef, 'leavepictureinpicture', () => {\n      pip.value = false\n      emitEvent(props.onTogglePip, false)\n    })\n\n    expose({\n      currentSrc,\n      playing,\n      currentTime,\n      duration,\n      pip,\n      interacting,\n      stateHidden,\n      wrapper,\n      video,\n      resetMetaState,\n    })\n\n    function togglePlaying(value = !playing.value) {\n      if (!canPlay.value) {\n        playing.value = false\n\n        return\n      }\n\n      playing.value = value\n\n      if (playing.value) {\n        hasPlayed.value = true\n        videoRef.value?.play()\n      } else {\n        videoRef.value?.pause()\n      }\n\n      wrapper.value?.focus()\n      emitEvent(playing.value ? props.onPlay : props.onPause)\n    }\n\n    function handleEnded() {\n      playing.value = false\n\n      videoRef.value?.pause()\n      emitEvent(props.onEnded)\n    }\n\n    async function togglePip() {\n      if (!pipEnabled || !videoRef.value) return\n\n      if (pip.value) {\n        await document.exitPictureInPicture()\n      } else {\n        await videoRef.value.requestPictureInPicture()\n      }\n    }\n\n    function changeRate(rate: number, dispatch = true) {\n      currentRate.value = rate\n\n      if (videoRef.value) {\n        videoRef.value.playbackRate = rate\n      }\n\n      if (dispatch) {\n        emit('update:playback-rate', rate)\n        emitEvent(props.onRateChange, rate)\n      }\n    }\n\n    function changeTime(time: number, dispatch = true) {\n      currentTime.value = time\n\n      if (videoRef.value && time !== videoRef.value.currentTime) {\n        videoRef.value.currentTime = time\n        time = videoRef.value.currentTime\n      }\n\n      if (dispatch) {\n        emit('update:time', time)\n        emitEvent(props.onTimeChange, time)\n      }\n    }\n\n    function changeVolume(volume: number, dispatch = true) {\n      currentVolume.value = volume\n\n      if (videoRef.value) {\n        videoRef.value.volume = volume\n      }\n\n      if (dispatch) {\n        emit('update:volume', volume)\n        emitEvent(props.onVolumeChange, volume)\n      }\n    }\n\n    function toggleFlip(value = !flipped.value, dispatch = true) {\n      flipped.value = value\n\n      if (dispatch) {\n        emitEvent(props.onToggleFlip, flipped.value)\n      }\n    }\n\n    function onFullChange(full: false | FullScreenType) {\n      nextTick(() => {\n        wrapper.value?.focus()\n        emitEvent(props.onToggleFull, full)\n      })\n    }\n\n    function resetMetaState() {\n      playing.value = false\n      currentTime.value = 0\n      canPlay.value = false\n      duration.value = 0\n      // loadedData.value = false\n      pip.value = false\n      hasPlayed.value = false\n\n      videoRef.value?.pause()\n    }\n\n    function handleInteract() {\n      clearTimeout(timer.interact)\n\n      interacting.value = true\n      timer.interact = setTimeout(() => {\n        interacting.value = false\n      }, 3000)\n    }\n\n    function handlePointerLeave() {\n      clearTimeout(timer.interact)\n      timer.interact = setTimeout(() => {\n        interacting.value = false\n      }, 500)\n    }\n\n    function adjustSrc(amount: number) {\n      const list = srcFullList.value\n\n      if (props.srcList) {\n        currentSrc.value = list[(srcIndex.value + amount + list.length) % list.length]\n        emit('update:src', currentSrc.value)\n      }\n    }\n\n    function playPrev() {\n      adjustSrc(-1)\n      emitEvent(props.onPrev)\n    }\n\n    function playNext() {\n      adjustSrc(1)\n      emitEvent(props.onNext)\n    }\n\n    function toggleFull(type: FullScreenType) {\n      screen.value?.toggle(type)\n    }\n\n    function handleRefresh() {\n      emitEvent(props.onRefresh)\n    }\n\n    function renderPlayPrev() {\n      return (\n        <VideoControl\n          class={nh.be('play-prev')}\n          label={locale.value.playPrev}\n          shortcut={shortcuts.value['play-prev']}\n          disabled={!!props.srcList && !srcIndex.value}\n          onClick={playPrev}\n        >\n          <Icon\n            {...icons.value.playPrev}\n            scale={+(icons.value.playPrev.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPlay() {\n      return (\n        <VideoControl\n          class={nh.be('play')}\n          label={playing.value ? locale.value.pause : locale.value.play}\n          shortcut={shortcuts.value.play}\n          disabled={!canPlay.value}\n          onClick={togglePlaying}\n        >\n          <Icon\n            {...playIcon.value}\n            scale={+(playIcon.value.scale || 1) * iconScale.value * 1.16}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPlayNext() {\n      return (\n        <VideoControl\n          class={nh.be('play-next')}\n          label={locale.value.playNext}\n          shortcut={shortcuts.value['play-next']}\n          disabled={!!props.srcList && srcIndex.value === srcFullList.value.length - 1}\n          onClick={playNext}\n        >\n          <Icon\n            {...icons.value.playNext}\n            scale={+(icons.value.playNext.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderRefresh() {\n      return (\n        <VideoControl\n          class={nh.be('play-refresh')}\n          label={locale.value.refresh}\n          shortcut={shortcuts.value.refresh}\n          onClick={handleRefresh}\n        >\n          <Icon\n            {...icons.value.refresh}\n            scale={+(icons.value.refresh.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderTimer() {\n      return (\n        <VideoTimer\n          time={currentTime.value}\n          duration={duration.value}\n          disabled={!canPlay.value}\n          onChange={changeTime}\n        ></VideoTimer>\n      )\n    }\n\n    function renderPlaybackRate() {\n      return (\n        <VideoControl\n          class={nh.be('playback-rate')}\n          type={'select'}\n          value={currentRate.value}\n          options={rateOptions.value}\n          onSelect={(rate: VideoPlaybackRate) => changeRate(rate.value)}\n        ></VideoControl>\n      )\n    }\n\n    function renderVolume() {\n      return (\n        <VideoVolume\n          ref={volumeRef}\n          volume={currentVolume.value}\n          onChange={changeVolume}\n        ></VideoVolume>\n      )\n    }\n\n    function renderFlip() {\n      return (\n        <VideoControl\n          class={nh.be('flip')}\n          label={locale.value.flip}\n          shortcut={shortcuts.value.flip}\n          onClick={toggleFlip}\n        >\n          <Icon\n            {...icons.value.flipX}\n            scale={+(icons.value.flipX.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderPip() {\n      if (!pipEnabled || !video.value) return null\n\n      return (\n        <VideoControl\n          class={nh.be('pip')}\n          label={pip.value ? locale.value.exitPip : locale.value.requestPip}\n          shortcut={shortcuts.value.pip}\n          disabled={!canPlay.value}\n          onClick={togglePip}\n        >\n          <Icon {...icons.value.pip} scale={+(icons.value.pip.scale || 1) * iconScale.value}></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderFullWindow() {\n      return (\n        <VideoControl\n          class={nh.be('full-window')}\n          label={full.value === 'window' ? locale.value.fullWindowExit : locale.value.fullWindow}\n          shortcut={shortcuts.value['full-window']}\n          onClick={() => toggleFull('window')}\n        >\n          <Icon\n            {...icons.value.fullWindow}\n            scale={+(icons.value.fullWindow.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderFullBrowser() {\n      return (\n        <VideoControl\n          class={nh.be('full-browser')}\n          label={full.value === 'browser' ? locale.value.fullScreenExit : locale.value.fullScreen}\n          shortcut={shortcuts.value['full-browser']}\n          onClick={() => toggleFull('browser')}\n        >\n          <Icon\n            {...icons.value.fullScreen}\n            scale={+(icons.value.fullScreen.scale || 1) * iconScale.value}\n          ></Icon>\n        </VideoControl>\n      )\n    }\n\n    function renderControl(name: VideoControlConfig) {\n      switch (name) {\n        case 'play-prev':\n          return renderPlayPrev()\n        case 'play':\n          return renderPlay()\n        case 'play-next':\n          return renderPlayNext()\n        case 'refresh':\n          return renderRefresh()\n        case 'timer':\n          return renderTimer()\n        case 'playback-rate':\n          return renderPlaybackRate()\n        case 'volume':\n          return renderVolume()\n        case 'flip':\n          return renderFlip()\n        case 'pip':\n          return renderPip()\n        case 'full-window':\n          return renderFullWindow()\n        case 'full-browser':\n          return renderFullBrowser()\n        default:\n          return createSlotRender(slots, [\n            `control-${name}`,\n            `control${toCapitalCase(name as string)}`,\n          ])?.(slotParams)\n      }\n    }\n\n    function renderControls() {\n      if (props.noControls) {\n        return (\n          <Progress\n            class={nh.be('progress-line')}\n            percentage={percent.value}\n            stroke-width={1}\n            info-type={'none'}\n          ></Progress>\n        )\n      }\n\n      return (\n        <div\n          class={{\n            [nh.be('controls')]: true,\n            [nh.bem('controls', 'collapsed')]: hasPlayed.value && !interacting.value,\n          }}\n        >\n          <section class={nh.be('controls-top')}>\n            <VideoProgress\n              time={currentTime.value}\n              duration={duration.value}\n              segments={segments.value}\n              onChange={changeTime}\n            ></VideoProgress>\n          </section>\n          <section class={nh.be('controls-bottom')}>\n            <div class={nh.be('controls-left')}>\n              {(props.controlLayout.left ?? videoDefaultControlLayout.left).map(renderControl)}\n            </div>\n            <div class={nh.be('controls-center')}>\n              {(props.controlLayout.center ?? videoDefaultControlLayout.center).map(renderControl)}\n            </div>\n            <div class={nh.be('controls-right')}>\n              {(props.controlLayout.right ?? videoDefaultControlLayout.right).map(renderControl)}\n            </div>\n          </section>\n        </div>\n      )\n    }\n\n    function renderMain() {\n      return (\n        <div class={nh.be('main')}>\n          <div\n            class={[nh.be('player'), flipped.value && nh.bem('player', 'flipped')]}\n            onClick={() => togglePlaying()}\n          >\n            {renderSlot(slots, 'player', {}, () => [\n              <video\n                {...props.videoAttrs}\n                ref={video}\n                class={nh.be('video')}\n                src={currentSrc.value || props.videoAttrs?.src}\n              >\n                {renderSlot(slots, 'default')}\n              </video>,\n            ])}\n          </div>\n          {!hasPlayed.value && (props.poster || slots.poster || props.slots.poster) && (\n            <div class={nh.be('poster')}>\n              {renderSlot(slots, 'poster', undefined, () => [\n                <Renderer renderer={props.slots.poster}>\n                  <img src={props.poster} />\n                </Renderer>,\n              ])}\n            </div>\n          )}\n          <Transition name={nh.bs('state-effect')} onAfterLeave={() => (stateHidden.value = true)}>\n            {canPlay.value && stateShow.value && (\n              <div class={nh.be('state')}>\n                {renderSlot(slots, 'state', { active: stateShow.value }, () => [\n                  <Icon {...stateIcon.value} scale={+(stateIcon.value.scale || 1) * 5}></Icon>,\n                ])}\n              </div>\n            )}\n          </Transition>\n          <Transition name={nh.ns('fade')}>\n            {((!canPlay.value && !stateShow.value) || (props.loading && stateHidden.value)) && (\n              <div class={nh.be('loading')}>\n                {renderSlot(slots, 'loading', {}, () => [\n                  <Icon\n                    {...icons.value.loading}\n                    icon={props.loadingIcon || icons.value.loading.icon}\n                    label={'loading'}\n                    effect={props.loadingEffect || icons.value.loading.effect}\n                    scale={+(stateIcon.value.scale || 1) * 5}\n                  ></Icon>,\n                ])}\n              </div>\n            )}\n          </Transition>\n          {renderControls()}\n          {renderSlot(slots, 'extra')}\n        </div>\n      )\n    }\n\n    return () => {\n      return (\n        <FullScreen\n          ref={screen}\n          class={className.value}\n          tabindex={'-1'}\n          onToggle={onFullChange}\n          onPointermove={handleInteract}\n          onPointerleave={handlePointerLeave}\n        >\n          {{ default: renderMain }}\n        </FullScreen>\n      )\n    }\n  },\n})\n","import { booleanProp, buildProps, omitProps } from '@vexip-ui/config'\n\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ConfigurableProps } from '@vexip-ui/config'\nimport type { TitleLevel, TypographyType } from './symbol'\n\nexport const textProps = buildProps({\n  type: String as PropType<TypographyType>,\n  tag: String,\n  delete: booleanProp,\n  strong: booleanProp,\n  italic: booleanProp,\n  underline: booleanProp,\n  code: booleanProp,\n  mark: booleanProp,\n  disabled: booleanProp,\n  keyboard: booleanProp,\n  thin: booleanProp,\n  reversed: booleanProp,\n})\n\nexport type TextProps = ExtractPropTypes<typeof textProps>\nexport type TextCProps = ConfigurableProps<TextProps>\n\nexport const pProps = omitProps(textProps, ['tag', 'code'])\n\nexport type PProps = ExtractPropTypes<typeof pProps>\nexport type PCProps = ConfigurableProps<PProps>\n\nexport const strongProps = omitProps(textProps, ['tag', 'strong', 'code'])\n\nexport type StrongProps = ExtractPropTypes<typeof strongProps>\nexport type StrongCProps = ConfigurableProps<StrongProps>\n\nexport const titleProps = buildProps({\n  type: String as PropType<TypographyType>,\n  level: Number as PropType<TitleLevel>,\n  top: booleanProp,\n  marker: booleanProp,\n  aligned: booleanProp,\n  thin: booleanProp,\n  markerType: String,\n})\n\nexport type TitleProps = ExtractPropTypes<typeof titleProps>\nexport type TitleCProps = ConfigurableProps<TitleProps>\n\nexport const hProps = omitProps(titleProps, ['level'])\n\nexport const h1Props = hProps\nexport const h2Props = hProps\nexport const h3Props = hProps\nexport const h4Props = hProps\nexport const h5Props = hProps\nexport const h6Props = hProps\n\nexport type HProps = ExtractPropTypes<typeof hProps>\nexport type HCProps = ConfigurableProps<HProps>\n\nexport type H1Props = HProps\nexport type H2Props = HProps\nexport type H3Props = HProps\nexport type H4Props = HProps\nexport type H5Props = HProps\nexport type H6Props = HProps\n\nexport type H1CProps = HCProps\nexport type H2CProps = HCProps\nexport type H3CProps = HCProps\nexport type H4CProps = HCProps\nexport type H5CProps = HCProps\nexport type H6CProps = HCProps\n\nexport const blockquoteProps = buildProps({\n  type: String as PropType<TypographyType>,\n})\n\nexport type BlockquoteProps = ExtractPropTypes<typeof blockquoteProps>\nexport type BlockquoteCProps = ConfigurableProps<BlockquoteProps>\n\nexport const olProps = buildProps({\n  type: String as PropType<'a' | 'A' | 'i' | 'I' | '1'>,\n})\n\nexport type OLProps = ExtractPropTypes<typeof olProps>\nexport type OLCProps = ConfigurableProps<OLProps>\n\nexport const ulProps = buildProps({\n  listStyle: String,\n})\n\nexport type ULProps = ExtractPropTypes<typeof ulProps>\nexport type ULCProps = ConfigurableProps<ULProps>\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { boundRange, isColor } from '@vexip-ui/utils'\nimport { titleProps } from './props'\n\nexport default defineComponent({\n  name: 'Title',\n  props: titleProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('title', _props, {\n      type: 'default',\n      level: 5,\n      top: false,\n      marker: false,\n      aligned: false,\n      thin: false,\n      markerType: null,\n    })\n\n    const nh = useNameHelper('title')\n\n    const coloredMarker = computed(() => isColor(props.markerType))\n    const markerType = computed(() => props.markerType || props.type)\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.type)]: props.type !== 'default',\n        [nh.bm('top')]: props.top,\n        [nh.bm('marker')]: props.marker,\n        [nh.bm('aligned')]: props.aligned,\n        [nh.bm('thin')]: props.thin,\n        [nh.bm(`marker-${markerType.value}`)]:\n          !coloredMarker.value && markerType.value !== 'default',\n      }\n    })\n    const level = computed(() => boundRange(Math.round(props.level), 1, 6) || 5)\n    const style = computed(() => {\n      return coloredMarker.value\n        ? {\n          [nh.cv('marker-color')]: props.markerType,\n        }\n        : null\n    })\n\n    return () => {\n      const CustomTag = `h${level.value}` as any\n\n      return (\n        <CustomTag class={className.value} style={style.value}>\n          {slots.default?.()}\n        </CustomTag>\n      )\n    }\n  },\n})\n","import { computed, defineComponent, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { textProps } from './props'\n\nexport default defineComponent({\n  name: 'Text',\n  props: textProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('text', _props, {\n      type: 'default',\n      tag: 'span',\n      delete: false,\n      strong: false,\n      italic: false,\n      underline: false,\n      code: false,\n      mark: false,\n      disabled: false,\n      keyboard: false,\n      thin: false,\n      reversed: false,\n    })\n\n    const nh = useNameHelper('text')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.type)]: props.type !== 'default',\n        [nh.bm('delete')]: props.delete,\n        [nh.bm('strong')]: props.strong,\n        [nh.bm('italic')]: props.italic,\n        [nh.bm('underline')]: props.underline,\n        [nh.bm('code')]: props.code,\n        [nh.bm('mark')]: props.mark,\n        [nh.bm('disabled')]: props.disabled,\n        [nh.bm('keyboard')]: props.keyboard,\n        [nh.bm('thin')]: props.thin,\n        [nh.bm('reversed')]: props.reversed,\n      }\n    })\n\n    return () => {\n      const CustomTag = props.tag || ('span' as any)\n      const children = renderSlot(slots, 'default')\n\n      return props.code ? (\n        <code class={className.value}>{props.delete ? <del>{children}</del> : children}</code>\n      ) : props.keyboard ? (\n        <kbd class={className.value}>{props.delete ? <del>{children}</del> : children}</kbd>\n      ) : props.delete ? (\n        <del class={className.value}>{children}</del>\n      ) : (\n        <CustomTag class={className.value}>{children}</CustomTag>\n      )\n    }\n  },\n})\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { blockquoteProps } from './props'\n\nexport default defineComponent({\n  name: 'Blockquote',\n  props: blockquoteProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('blockquote', _props, {\n      type: 'default',\n    })\n\n    const nh = useNameHelper('blockquote')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bs('vars')]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm(props.type)]: props.type !== 'default',\n      }\n    })\n\n    return () => <blockquote class={className.value}>{slots.default?.()}</blockquote>\n  },\n})\n","import { defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { olProps } from './props'\n\nexport default defineComponent({\n  name: 'OL',\n  props: olProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('ol', _props, {\n      type: '1',\n    })\n\n    const nh = useNameHelper('ol')\n\n    return () => (\n      <ol class={[nh.b(), props.inherit && nh.bm('inherit')]} type={props.type}>\n        {slots.default?.()}\n      </ol>\n    )\n  },\n})\n","import { computed, defineComponent } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { ulProps } from './props'\n\nexport default defineComponent({\n  name: 'UL',\n  props: ulProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('ul', _props, {\n      listStyle: 'circle',\n    })\n\n    const nh = useNameHelper('ul')\n\n    const className = computed(() => {\n      return {\n        [nh.b()]: true,\n        [nh.bm('inherit')]: props.inherit,\n        [nh.bm('no-marker')]: props.listStyle === 'none',\n      }\n    })\n\n    return () => (\n      <ul class={className.value} style={{ listStyleType: props.listStyle }}>\n        {slots.default?.()}\n      </ul>\n    )\n  },\n})\n","import { defineComponent } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport Title from './title'\nimport { hProps } from './props'\n\nimport type { TitleLevel } from './symbol'\n\nfunction createHComponent(level: TitleLevel) {\n  return defineComponent({\n    name: `H${level}`,\n    props: hProps,\n    emits: [],\n    setup(_props, { slots }) {\n      const props = useProps(`h${level}`, _props, {\n        type: 'default',\n        top: false,\n        marker: false,\n        aligned: false,\n        thin: false,\n      })\n\n      return () => (\n        <Title {...props} level={level}>\n          {slots.default?.()}\n        </Title>\n      )\n    },\n  })\n}\n\nexport const H1 = createHComponent(1)\nexport const H2 = createHComponent(2)\nexport const H3 = createHComponent(3)\nexport const H4 = createHComponent(4)\nexport const H5 = createHComponent(5)\nexport const H6 = createHComponent(6)\n","import { defineComponent } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport Text from './text'\nimport { pProps } from './props'\n\nexport default defineComponent({\n  name: 'P',\n  props: pProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('p', _props, {\n      type: 'default',\n      delete: false,\n      strong: false,\n      italic: false,\n      underline: false,\n      mark: false,\n      disabled: false,\n      keyboard: false,\n      thin: false,\n      reversed: false,\n    })\n\n    return () => (\n      <Text {...props} tag={'p'}>\n        {slots.default?.()}\n      </Text>\n    )\n  },\n})\n","import { defineComponent } from 'vue'\n\nimport { useProps } from '@vexip-ui/config'\nimport Text from './text'\nimport { strongProps } from './props'\n\nexport default defineComponent({\n  name: 'Strong',\n  props: strongProps,\n  emits: [],\n  setup(_props, { slots }) {\n    const props = useProps('strong', _props, {\n      type: 'default',\n      delete: false,\n      italic: false,\n      underline: false,\n      mark: false,\n      disabled: false,\n      keyboard: false,\n      thin: false,\n      reversed: false,\n    })\n\n    return () => (\n      <Text {...props} tag={'strong'} strong>\n        {slots.default?.()}\n      </Text>\n    )\n  },\n})\n","import { computed, unref } from 'vue'\n\nimport {\n  configHoverDelay,\n  configIcons,\n  configLocale,\n  configNamespace,\n  configProps,\n  configZIndex,\n} from '@vexip-ui/config'\nimport { isEmpty, toCapitalCase } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { IconsOptions, LocaleConfig, LocaleOptions } from '@vexip-ui/config'\nimport type { PropsOptions } from './props'\n\nexport interface InstallOptions {\n  prefix?: string,\n  namespace?: MaybeRef<string>,\n  props?: MaybeRef<PropsOptions>,\n  locale?: MaybeRef<LocaleOptions>,\n  zIndex?: MaybeRef<number>,\n  icons?: MaybeRef<IconsOptions>,\n  hoverDelay?: MaybeRef<number>,\n}\n\nexport function buildInstall(components: any[] = [], defaultLocale?: LocaleConfig) {\n  return function install(app: App, options: InstallOptions = {}) {\n    const {\n      prefix = '',\n      namespace = '',\n      props = {},\n      locale = defaultLocale,\n      zIndex,\n      icons = {},\n      hoverDelay = 100,\n    } = options\n\n    const withDefaultLocale = computed(() => {\n      return { ...defaultLocale, ...unref(locale) }\n    })\n\n    configNamespace(namespace, app)\n    configProps(props, app)\n    configLocale(withDefaultLocale, app)\n    configIcons(icons, app)\n    configHoverDelay(hoverDelay, app)\n\n    if (typeof unref(zIndex) === 'number') {\n      configZIndex(zIndex!, app)\n    }\n\n    const normalizedPrefix = toCapitalCase(prefix || '')\n\n    components.forEach(component => {\n      if (typeof component === 'function' || typeof component.install === 'function') {\n        app.use(component)\n      } else {\n        app.component(`${normalizedPrefix}${component.name}`, component)\n      }\n    })\n  }\n}\n\n/**\n * Provide a props config for under components.\n *\n * @param props props config\n * @param app the app of Vue, will use app.provide if specify\n */\nfunction proxyConfigProps(props: MaybeRef<PropsOptions>, app?: App) {\n  !isEmpty(props) && configProps(props, app)\n}\n\n/**\n * Provide supported config for under components.\n *\n * @param config supported config\n * @param app the app of Vue, will use app.provide if specify\n */\nexport function provideConfig(\n  config: Omit<InstallOptions, 'prefix' | 'namespace'> = {},\n  app?: App,\n) {\n  const { props = {}, locale = {}, zIndex, icons = {} } = config\n\n  proxyConfigProps(props, app)\n  !isEmpty(locale) && configLocale(locale, app)\n  !isEmpty(icons) && configIcons(icons, app)\n\n  if (typeof unref(zIndex) === 'number') {\n    configZIndex(zIndex!, app)\n  }\n}\n\nexport { proxyConfigProps as configProps, configLocale, configZIndex, configIcons }\n","export const version = __VERSION__\n","import { installDirectives } from '@/directives'\n\nimport { Affix } from './affix'\nimport { Alert } from './alert'\nimport { Anchor } from './anchor'\nimport { AnchorLink } from './anchor-link'\nimport { AutoComplete } from './auto-complete'\nimport { Avatar } from './avatar'\nimport { AvatarGroup } from './avatar-group'\nimport { Badge } from './badge'\nimport { Breadcrumb } from './breadcrumb'\nimport { BreadcrumbItem } from './breadcrumb-item'\nimport { Bubble } from './bubble'\nimport { Button } from './button'\nimport { ButtonGroup } from './button-group'\nimport { Calendar } from './calendar'\nimport { CalendarPanel } from './calendar-panel'\nimport { Captcha } from './captcha'\nimport { CaptchaSlider } from './captcha-slider'\nimport { Card } from './card'\nimport { Carousel } from './carousel'\nimport { CarouselItem } from './carousel-item'\nimport { Cascader } from './cascader'\nimport { Cell } from './cell'\nimport { Checkbox } from './checkbox'\nimport { CheckboxGroup } from './checkbox-group'\nimport { Collapse } from './collapse'\nimport { CollapsePanel } from './collapse-panel'\nimport { CollapseTransition } from './collapse-transition'\nimport { ColorPicker } from './color-picker'\nimport { Column } from './column'\nimport { ConfigProvider } from './config-provider'\nimport { Confirm } from './confirm'\nimport { Contextmenu } from './contextmenu'\nimport { DatePicker } from './date-picker'\nimport { Divider } from './divider'\nimport { Drawer } from './drawer'\nimport { Dropdown } from './dropdown'\nimport { DropdownItem } from './dropdown-item'\nimport { DropdownList } from './dropdown-list'\nimport { Ellipsis } from './ellipsis'\nimport { Form } from './form'\nimport { FormItem } from './form-item'\nimport { FormReset } from './form-reset'\nimport { FormSubmit } from './form-submit'\nimport { FullScreen } from './full-screen'\nimport { Grid } from './grid'\nimport { Highlight } from './highlight'\nimport { Icon } from './icon'\nimport { Image } from './image'\nimport { ImageGroup } from './image-group'\nimport { ImageViewer } from './image-viewer'\nimport { Input } from './input'\nimport { Layout } from './layout'\nimport { LayoutAside } from './layout-aside'\nimport { LayoutFooter } from './layout-footer'\nimport { LayoutHeader } from './layout-header'\nimport { LayoutMain } from './layout-main'\nimport { Linker } from './linker'\nimport { Loading } from './loading'\nimport { Masker } from './masker'\nimport { Menu } from './menu'\nimport { MenuGroup } from './menu-group'\nimport { MenuItem } from './menu-item'\nimport { Message } from './message'\nimport { Modal } from './modal'\nimport { NativeScroll } from './native-scroll'\nimport { Notice } from './notice'\nimport { NumberInput } from './number-input'\nimport { Option } from './option'\nimport { OptionGroup } from './option-group'\nimport { Overflow } from './overflow'\nimport { Pagination } from './pagination'\nimport { Popper } from './popper'\nimport { Popup } from './popup'\nimport { Portal } from './portal'\nimport { Progress } from './progress'\nimport { Radio } from './radio'\nimport { RadioGroup } from './radio-group'\nimport { Renderer } from './renderer'\nimport { ResizeObserver } from './resize-observer'\nimport { Result } from './result'\nimport { Row } from './row'\nimport { Scroll } from './scroll'\nimport { Scrollbar } from './scrollbar'\nimport { Select } from './select'\nimport { Skeleton } from './skeleton'\nimport { SkeletonGroup } from './skeleton-group'\nimport { Slider } from './slider'\nimport { Space } from './space'\nimport { Spin } from './spin'\nimport { Split } from './split'\nimport { Switch } from './switch'\nimport { TabNav } from './tab-nav'\nimport { TabNavItem } from './tab-nav-item'\nimport { TabPanel } from './tab-panel'\nimport { Table } from './table'\nimport { TableColumn } from './table-column'\nimport { TableColumnGroup } from './table-column-group'\nimport { TableSummary } from './table-summary'\nimport { Tabs } from './tabs'\nimport { Tag } from './tag'\nimport { Textarea } from './textarea'\nimport { TimeAgo } from './time-ago'\nimport { TimePicker } from './time-picker'\nimport { Timeline } from './timeline'\nimport { TimelineItem } from './timeline-item'\nimport { Toast } from './toast'\nimport { Tooltip } from './tooltip'\nimport { Tour } from './tour'\nimport { TourStep } from './tour-step'\nimport { Transfer } from './transfer'\nimport { Tree } from './tree'\nimport { Upload } from './upload'\nimport { UploadFile } from './upload-file'\nimport { UploadList } from './upload-list'\nimport { Video } from './video'\nimport { Viewer } from './viewer'\nimport { VirtualList } from './virtual-list'\nimport { Wheel } from './wheel'\n\nimport { Blockquote, H1, H2, H3, H4, H5, H6, OL, P, Strong, Text, Title, UL } from './typography'\n\nimport { buildInstall } from './create'\n\nexport { version } from './version'\nexport * from './create'\n\nexport type { PropsOptions } from './props'\n\nconst components = [\n  Affix,\n  Alert,\n  Anchor,\n  AnchorLink,\n  AutoComplete,\n  Avatar,\n  AvatarGroup,\n  Badge,\n  Breadcrumb,\n  BreadcrumbItem,\n  Bubble,\n  Button,\n  ButtonGroup,\n  Calendar,\n  CalendarPanel,\n  Captcha,\n  CaptchaSlider,\n  Card,\n  Carousel,\n  CarouselItem,\n  Cascader,\n  Cell,\n  Checkbox,\n  CheckboxGroup,\n  Collapse,\n  CollapsePanel,\n  CollapseTransition,\n  ColorPicker,\n  Column,\n  ConfigProvider,\n  DatePicker,\n  Divider,\n  Drawer,\n  Dropdown,\n  DropdownItem,\n  DropdownList,\n  Ellipsis,\n  Form,\n  FormItem,\n  FormReset,\n  FormSubmit,\n  FullScreen,\n  Grid,\n  Highlight,\n  Icon,\n  Image,\n  ImageGroup,\n  ImageViewer,\n  Input,\n  Layout,\n  LayoutAside,\n  LayoutFooter,\n  LayoutHeader,\n  LayoutMain,\n  Linker,\n  Masker,\n  Menu,\n  MenuGroup,\n  MenuItem,\n  Modal,\n  NativeScroll,\n  NumberInput,\n  Option,\n  OptionGroup,\n  Overflow,\n  Pagination,\n  Popper,\n  Popup,\n  Portal,\n  Progress,\n  Radio,\n  RadioGroup,\n  Renderer,\n  ResizeObserver,\n  Result,\n  Row,\n  Scroll,\n  Scrollbar,\n  Select,\n  Skeleton,\n  SkeletonGroup,\n  Slider,\n  Space,\n  Spin,\n  Split,\n  Switch,\n  TabNav,\n  TabNavItem,\n  TabPanel,\n  Table,\n  TableColumn,\n  TableColumnGroup,\n  TableSummary,\n  Tabs,\n  Tag,\n  Textarea,\n  TimeAgo,\n  TimePicker,\n  Timeline,\n  TimelineItem,\n  Tooltip,\n  Tour,\n  TourStep,\n  Transfer,\n  Tree,\n  Upload,\n  UploadFile,\n  UploadList,\n  Video,\n  Viewer,\n  VirtualList,\n  Wheel,\n  // plugins\n  Confirm,\n  Contextmenu,\n  Loading,\n  Message,\n  Notice,\n  Toast,\n  // typography\n  Title,\n  Text,\n  Blockquote,\n  OL,\n  UL,\n  H1,\n  H2,\n  H3,\n  H4,\n  H5,\n  H6,\n  P,\n  Strong,\n  // directives\n  installDirectives,\n]\n\nexport const install = buildInstall(components)\n\nexport * from './affix'\nexport * from './alert'\nexport * from './anchor'\nexport * from './anchor-link'\nexport * from './auto-complete'\nexport * from './avatar'\nexport * from './avatar-group'\nexport * from './badge'\nexport * from './breadcrumb'\nexport * from './breadcrumb-item'\nexport * from './bubble'\nexport * from './button'\nexport * from './button-group'\nexport * from './calendar'\nexport * from './calendar-panel'\nexport * from './captcha'\nexport * from './captcha-slider'\nexport * from './card'\nexport * from './carousel'\nexport * from './carousel-item'\nexport * from './cascader'\nexport * from './cell'\nexport * from './checkbox'\nexport * from './checkbox-group'\nexport * from './collapse'\nexport * from './collapse-panel'\nexport * from './collapse-transition'\nexport * from './color-picker'\nexport * from './column'\nexport * from './config-provider'\nexport * from './confirm'\nexport * from './contextmenu'\nexport * from './date-picker'\nexport * from './divider'\nexport * from './drawer'\nexport * from './dropdown'\nexport * from './dropdown-item'\nexport * from './dropdown-list'\nexport * from './ellipsis'\nexport * from './form'\nexport * from './form-item'\nexport * from './form-reset'\nexport * from './form-submit'\nexport * from './full-screen'\nexport * from './grid'\nexport * from './highlight'\nexport * from './icon'\nexport * from './image'\nexport * from './image-group'\nexport * from './image-viewer'\nexport * from './input'\nexport * from './layout'\nexport * from './layout-aside'\nexport * from './layout-footer'\nexport * from './layout-header'\nexport * from './layout-main'\nexport * from './linker'\nexport * from './loading'\nexport * from './masker'\nexport * from './menu'\nexport * from './menu-group'\nexport * from './menu-item'\nexport * from './message'\nexport * from './modal'\nexport * from './native-scroll'\nexport * from './notice'\nexport * from './number-input'\nexport * from './option'\nexport * from './option-group'\nexport * from './overflow'\nexport * from './pagination'\nexport * from './popper'\nexport * from './popup'\nexport * from './portal'\nexport * from './progress'\nexport * from './radio'\nexport * from './radio-group'\nexport * from './renderer'\nexport * from './resize-observer'\nexport * from './result'\nexport * from './row'\nexport * from './scroll'\nexport * from './scrollbar'\nexport * from './select'\nexport * from './skeleton'\nexport * from './skeleton-group'\nexport * from './slider'\nexport * from './space'\nexport * from './spin'\nexport * from './split'\nexport * from './switch'\nexport * from './tab-nav'\nexport * from './tab-nav-item'\nexport * from './tab-panel'\nexport * from './table'\nexport * from './table-column'\nexport * from './table-column-group'\nexport * from './table-summary'\nexport * from './tabs'\nexport * from './tag'\nexport * from './textarea'\nexport * from './time-ago'\nexport * from './time-picker'\nexport * from './timeline'\nexport * from './timeline-item'\nexport * from './toast'\nexport * from './tooltip'\nexport * from './tour'\nexport * from './tour-step'\nexport * from './transfer'\nexport * from './tree'\nexport * from './typography'\nexport * from './upload'\nexport * from './upload-file'\nexport * from './upload-list'\nexport * from './video'\nexport * from './viewer'\nexport * from './virtual-list'\nexport * from './wheel'\n\nexport * from '@/directives'\n"],"names":["isClient","toString","hasOwnProperty","is","value","type","has","key","isDefined","isNull","isNaN","isTrue","isFalse","isObject","isPromise","isFunction","isEmpty","isElement","ssr","isIterable","noop","toTrue","toFalse","range","size","start","step","array","i","getType","randomString","length","chars","maxPos","string","decide","conditions","options","condition","callback","INTEGER_REG","NUMBER_REG","NUMBER_UNIT","COLOR_REG_3","COLOR_REG_4","RGB_REG","RGBA_REG","HSL_REG","HSLA_REG","HSV_REG","HSVA_REG","HEX_REG_3","HEX_REG_4","HEX_REG_6","HEX_REG_8","NAMED_COLORS","COLOR_NAMES","isColor","parseStringColor","color","toRgbString","named","match","r","g","b","normalizeRgb","normalizeAlpha","h","s","l","normalizeHsl","toHslString","v","normalizeHsv","toHsvString","convertHexToDecimal","parseColorToRgba","originColor","rgb","a","hslToRgb","hsvToRgb","boundRange","isPercentage","parsePercentage","q","p","hueToRgb","hslToHsv","hsvToHsl","f","t","mod","rgbToHsv","max","min","d","rgbToHex","allow3Char","hex","repairDigits","isRepetitive","rgbaToHex","allow4Char","convertDecimalToHex","mixColor","color1","color2","weight","rgba1","rgba2","originalWeight","normalizedWeight","alphaDistance","weight1","weight2","adjustAlpha","alpha","rgba","randomPreferColor","prefer","withAlpha","randomHardColor","str","number","percent","globalCount","getGlobalCount","lowBit","num","createBITree","tree","add","index","delta","sum","get","boundIndex","target","left","right","middle","total","numberRE","isValidNumber","strict","toNumber","padStartZeros","doubleDigits","decimalLength","eSplit","len","toFixed","decimal","snum","pointPos","nums","targetPos","multipleFixed","multiple","leaveNumber","divideBy","limit","remainders","count","random","toPrecision","precision","multipleInt","dLength","createOperation","operation","numbers","result","times","number1","number2","int1","int2","base","plus","minus","SECOND_ON_MILLISECONDS","MINUTE_ON_SECONDS","MINUTE_ON_MILLISECONDS","HOUR_ON_MINUTES","HOUR_ON_SECONDS","HOUR_ON_MILLISECONDS","DAY_ON_HOURS","DAY_ON_MINUTES","DAY_ON_SECONDS","DAY_ON_MILLS","DAY_ON_MILLISECONDS","WEEK_ON_DAYS","WEEK_ON_HOURS","WEEK_ON_MINUTES","WEEK_ON_SECONDS","WEEK_ON_MILLS","formatters","date","year","month","day","hour","minute","second","quarter","formatRegExp","quotationRegExp","toDate","any","format","pattern","matches","substring","firstCharacter","formatter","getTime","addDays","amount","rangeDate","dateRange","startOfDay","endOfDay","startOfWeek","startOn","difference","isLeapYear","getLastDayOfMonth","lastDay","startOfMonth","differenceDays","differenceWeeks","weekStartOn","deepClone","obj","cloneObject","temp","loopList","referenceMap","setProps","mapProps","parent","prop","data","cloned","item","entry","clonedEntry","defaultMessage","returnTrue","destroyObject","object","message","throwDestroyed","name","USE_TOUCH","getMaxTouchPoints","CLICK_TYPE","dispatchEvent","el","payload","Event","bubbles","cancelable","event","TABABLE_SELECTOR","ensureElement","queryAll","selector","root","contains","tel","isHidden","rect","isVisible","isDisabled","queryTabables","includeDisabled","isDis","getXPadding","computedStyle","getYBorder","getRangeWidth","rangeWidth","xPadding","toCssSize","toAttrValue","createEventEmitter","handlerMap","handler","handlers","logOnce","cache","logFn","warnCache","warnOnce","raf","cb","throttle","method","interval","invoke","args","debounceMinor","lastCall","timer","current","elapsed","debounce","delay","called","lastArgs","promise","frameCallbacks","frameArgsMap","flushFrameCallbacks","fn","nextFrameOnce","flexGapSupported","supportFlexGap","flex","imgLoadingSupported","supportImgLoading","ensureArray","callIfFunc","getLast","defaultAccessor","listToMap","list","accessor","useMap","normalizeAccessor","map","set","propAccessor","removeArrayItem","isFn","transformTree","keyField","childField","parentField","rootId","hasRootId","record","id","parentId","flatTree","depthFirst","injectId","buildId","filter","cascaded","forceInject","idCount","loop","childrenValue","children","filterResult","child","walkTree","depth","mapTree","clearChildren","newItem","filterTree","leafOnly","isLeaf","leaf","items","matched","defaultSortMethod","prev","next","sortByProps","props","sortedList","formattedProps","lastResult","params","desc","mergeObjects","sourceObj","targetObj","isNewObj","source","runQueueFrame","queue","cancelled","run","_a","toCapitalCase","_","char","PROVIDED_HOVER_DELAY","globalDelay","computed","getOrDefault","def","configHoverDelay","sourceDelay","app","unref","upstreamDelay","inject","provide","useHoverDelay","getCurrentInstance","zhCNLocale","PROVIDED_LOCALE","globalLocal","cached","getDefaultLocaleConfig","locale","configLocale","sourceLocale","upstreamLocale","useLocale","customLocale","useWordSpace","getCountWord","wordTemplate","words","getCountWordOnly","makeSentence","wordSpace","getStepByWord","toKebabCase","toCamelCase","p1","p2","toPascalCase","camelCase","mergeClasses","classes","className","defaultAttributes","Icon","strokeWidth","absoluteStrokeWidth","iconNode","slots","createLucideIcon","iconName","ArrowLeftRight","Calendar","Check","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","ChevronsLeft","ChevronsRight","CircleAlert","CircleCheck","CircleHelp","CircleX","Clock","CloudUpload","Ellipsis","EyeOff","Eye","FileArchive","FileCode","FileImage","FileMusic","FileText","FileVideo","File","FlipHorizontal","FlipVertical","Fullscreen","Funnel","GripVertical","Image","IndentDecrease","IndentIncrease","Info","LoaderCircle","LogOut","Maximize","MessageCircleQuestion","Minimize","Minus","Moon","Pause","PictureInPicture","Play","Plus","RefreshCw","Repeat2","RotateCcw","RotateCw","Search","Siren","SkipBack","SkipForward","SquareMinus","SquarePlus","Sun","Trash2","Upload","UserRound","Volume1","Volume2","VolumeX","X","ZoomIn","ZoomOut","PROVIDED_ICONS","iconMap","Loader2","XCircle","Filter","MoreHorizontal","UploadCloud","HelpCircle","CheckCircle2","AlertCircle","PlusSquare","MinusSquare","Indent","Outdent","iconNames","globalIcons","icons","icon","configIcons","upstreamIcons","getCurrentScope","normalizedIcons","unrefIcons","config","normalizedIcon","markRaw","useIcons","cv","gcv","scv","useBEM","block","namespace","e","m","n","isVar","PROVIDED_NAMESPACE","globalNamespace","configNamespace","sourceNamespace","upstreamNamespace","useNamespace","useNameHelper","PROVIDED_ID_CONTER","VxpIDCounter","__publicField","defaultCounter","useId","customId","counter","shallowRef","watchEffect","readonly","PROVIDED_PROPS","eventPropRE","configProps","upstreamProps","providedProps","useProps","sourceProps","commonProps","keys","defs","propOptions","validator","defaultValue","isFunc","getValue","getDefault","watch","toWarnPrefix","reactive","booleanProp","booleanStringProp","booleanNumberProp","wrapProps","buildProps","omitProps","extra","omittedKeys","sizeProp","validSizeValues","sizeValidator","createSizeProp","stateProp","validStateValues","stateValidator","createStateProp","classProp","styleProp","eventTypes","eventProp","emitEvent","localeProp","_name","valueProp","valuesProp","iconProp","createIconProp","PROVIDED_Z_INDEX","initZIndex","rootStyle","cssZIndex","globalZIndex","configZIndex","sourceZIndex","zIndex","upstreamZIndex","useZIndex","iconProps","internalEffects","Object","freeze","angleRE","defineComponent","setup","_props","attrs","default","static","scale","title","label","flip","includes","effect","rotate","renderer","nh","effectCls","bm","computedScale","style","fontSize","renderDefault","iAttrs","class","role","undefined","_createVNode","renderSlot","rendererProps","Renderer","spinProps","__props","_useSlots","currentActive","ref","hasTip","maskStyle","delayTime","__expose","handleShow","handleHide","handleMaskClick","_unref","_createBlock","_Transition","_createElementBlock","_normalizeClass","_renderSlot","_ctx","_createElementVNode","_mergeProps","_createTextVNode","_toDisplayString","createSpin","binding","vnode","spin","createVNode","Spin","position","render","vLoading","nextTick","component","useListener","listener","normalizedOptions","remove","stopWatch","disabled","opts","stop","onScopeDispose","CLICK_OUTSIDE","elements","path","useClickOutside","useDisplay","displayInit","element","observer","onMounted","hiddenParentNode","queryOutsideHiddenElement","onBeforeUnmount","parentElement","isHiddenElement","createSlotRender","names","fallback","vnodes","flatVNodes","isVNode","Comment","createTextVNode","Fragment","unrefElement","plain","proxyExposed","_b","_c","functionsMap","supported","notSupportedResult","states","subscriptions","ELEMENT","EVENT","state","full","useFullScreen","targetRef","isRef","REQUEST","EXIT","old","exit","enter","force","toggle","useHover","wrapper","isHover","enterWrapper","leaveWrapper","observerCache","spaceRE","unitRE","useIntersection","threshold","margin","normalizeMargin","thresholdCache","marginCache","handleIntersect","disconnect","parts","part","entries","useManualRef","updateSet","manualRef","customRef","track","trigger","origin","update","newValue","triggerUpdate","defaultAliasMap","separatorRE","splitRE","internalProps","useModifier","autoReset","capture","passive","strictTarget","onKeyDown","onKeyUp","aliasMap","activeKeys","metaDeps","modifier","resetAll","setModifier","updateModifier","modifierProxy","receiver","useMounted","wait","isMounted","mount","disableEvent","useMoving","x","y","lazy","stopMouse","stopTouch","moving","internalState","throttleMove","updateState","move","end","clientX","clientY","xStart","yStart","clientXStart","clientYStart","deltaX","deltaY","sides","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","side","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","direction","expandPaddingObject","padding","getPaddingObject","rectToClientRect","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","nextX","nextY","reset","detectOverflow","_await$platform$isEle","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","_overflowsData$","ignoreCrossAxisOverflow","hasInitialMainAxisOverflow","resetPlacement","_overflowsData$filter2","currentSideAxis","acc","getSideOffsets","isAnySideFullyClipped","hide","offsets","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","top","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","ignoreScrollbarX","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","timeoutId","cleanup","_io","refresh","skip","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","hide$1","arrow$1","mergedOptions","platformWithCache","computePosition$1","resizeObservers","hasActiveObservations","ro","hasSkippedObservations","msg","deliverResizeLoopError","ResizeObserverBoxOptions","ResizeObserverSize","inlineSize","blockSize","DOMRectReadOnly","bottom","rectangle","isSVG","scope","isReplacedElement","global","scrollRegexp","verticalRegexp","IE","parseDimension","pixel","switchSizes","zeroBoxes","calculateBoxSizes","forceRecalculation","cs","svg","removePadding","canScrollVertically","canScrollHorizontally","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTop","borderRight","borderBottom","borderLeft","horizontalPadding","verticalPadding","horizontalBorderArea","verticalBorderArea","horizontalScrollbarThickness","verticalScrollbarThickness","widthReduction","heightReduction","contentWidth","contentHeight","borderBoxWidth","borderBoxHeight","boxes","calculateBoxSize","observedBox","borderBoxSize","contentBoxSize","devicePixelContentBoxSize","ResizeObserverEntry","calculateDepthForNode","broadcastActiveObservations","shallowestDepth","callbacks","ot","targetDepth","_i","callbacks_1","gatherActiveObservationsAtDepth","process","notify","queueMicroTask","toggle_1","el_1","queueResizeObserver","watching","isWatching","CATCH_PERIOD","observerConfig","events","time","timeout","scheduled","Scheduler","_this","until","elementsHaveResized","scheduler","updateCount","skipNotifyOnElement","ResizeObservation","ResizeObserverDetail","observerMap","getObservationIndex","observationTargets","ResizeObserverController","detail","firstObservation","lastObservation","ResizeObserver","handleResize","observeResize","unobserveResize","useResize","unobserve","computedRtl","elId","useRtl","initObserver","content","placementWhileList","usePopper","initOptions","transfer","isDrop","popper","arrowRef","transferTo","isRtl","wrapperEl","popperEl","setTransferTo","updatePopper","updatePopperInternal","arrowEl","setPopperDropOrigin","offsetOptions","shiftOptions","activePlacement","resolve","styleId","elClass","activeThemes","themeWidths","prevStyle","rootClass","varsClass","useSetTimeout","useSetInterval","useRaf","useTimerRecord","useVirtual","itemSize","itemFixed","idKey","defaultKeyAt","bufferSize","indexMap","itemList","visibleHeight","heightDiffMap","heightTree","heightDiff","treeUpdateDep","scrollOffset","startIndex","visibleItems","unrefItems","endIndex","listStyle","fixed","itemsStyle","scrollToKey","syncScrollOffset","handleScroll","handleItemResize","prevHeight","diff","prevTop","scrollTo","behavior","scrollBy","scrollToIndex","ensureIndexInView","viewTop","viewHeight","viewBottom","ensureKeyInView","createObserver","useThrottle","throttleResize","vResize","getHandler","prevOptions","installDirectives","affixProps","lastScroller","handleLastScroller","targetAffix","clearLastScroller","instance","container","isRawViewer","scroller","affixHeight","affixWidth","scrollTop","clientHeight","transform","affixStyle","fixedStyle","_top","_bottom","_target","updateContainer","removeListener","wrapperRect","targetRect","handleContainerScroll","_container","refName","exposeProxy","exposed","proxy","_scroller","refTemp","collapseProps","collapsePanelProps","collapseTransitionProps","CollapseTransition","enterStage","leaveStage","duration","timing","marginTop","marginBottom","scrollHeight","transition","enterRecord","leaveRecord","Transition","$el","alertProps","alertTypes","predefinedIcons","closed","hidden","scrollDuration","scrollWidth","scrollEl","hasTitle","hasIcon","black","baseColor","iconComp","scrollStyle","startScroll","handleClose","handleAfterLeave","contentRect","handleScrollEnd","anchorProps","anchorLinkProps","baseIndentWidth","LINK_STATE","ANCHOR_STATE","anchorState","parentLinkState","indent","active","link","toRef","linkClass","linkStyle","handleSelect","to","$slots","_Fragment","_renderList","_component_AnchorLink","animateScrollTo","from","distance","emit","__emit","animating","markerTop","linkStates","prevScrollTop","increaseLink","decreaseLink","handleActive","computeMarkerPosition","viewer","_d","getContainerEl","computeCurrentLink","containerTop","offsetList","currentLink","elementTop","containerEl","linkRect","wrapperTop","_openBlock","AnchorLink","rowProps","mediaProp","columnProps","breakPoints","ROW_STATE","justifyList","alignList","Row","horizontal","vertical","columnFlex","formProps","formItemProps","formSubmitProps","formResetProps","FORM_PROPS","FORM_FIELDS","FORM_ACTIONS","FIELD_OPTIONS","submitMethods","labelAligns","fieldSet","labelWidth","field","getLabelWidth","validate","validateFields","resetFields","clearError","clearFieldsError","getPropMap","propMap","validateItems","fields","validations","errors","handleSubmit","getValueByPath","lastKey","setValueByPath","defaultId","defaultState","defaultFalse","defaultSize","getEmptyActions","useFieldStore","onFocus","fieldOptions","clearField","DEFAULT_MESSAGE","N_100_200","IPV4_FIRST","IPV4_UNIT","IPV4_REG","HOST_REG","PARAM_REG","URL_REG","EMAIL_REG","TYPE_LIST","rules","model","validateAll","defaultMsg","rule","error","errorMessage","validateRequirement","validateEnumeration","validateType","enumSet","validateString","validateNumber","validateBoolean","validateInt","validateFloat","validateDate","validateUrl","validateEmail","inputProps","_isSlot","prototype","call","_isVNode","inputTypes","toNotNullString","String","emits","expose","idFor","labelId","loading","validateField","getFieldValue","setFieldValue","inputControl","focus","prefix","prefixColor","suffix","suffixColor","placeholder","autofocus","spellcheck","autocomplete","controlClass","maxLength","hideCount","before","after","plainPassword","clearable","loadingIcon","loadingLock","loadingEffect","transparent","sync","controlAttrs","initValue","focused","currentValue","showPassword","currentLength","beforeHover","afterHover","composing","control","lastValue","hasBefore","beforeAction","hasAfter","afterAction","basisClass","bs","inherit","wrapperClass","hasPrefix","hasSuffix","inputType","formattedValue","passwordIcon","plainText","cipherText","hasValue","showClear","autoComplete","limitValueLength","immediate","flush","input","copyValue","blur","getLatestValue","parseFloat","handleFocus","handleBlur","setTimeout","onBlur","emitChangeEvent","handleChange","setValue","onChange","onInput","slice","toggleShowPassword","handleClear","stopPropagation","onClear","handleEnter","onEnter","handlePrefixClick","onPrefixClick","handleSuffixClick","onSuffixClick","handleKeyDown","handleKeyPress","onKeyPress","handleKeyUp","handleCompositionStart","onCompositionStart","handleCompositionEnd","onCompositionEnd","document","createElement","setAttribute","appendChild","select","isSuccess","execCommand","removeChild","preventDefault","handleInput","renderPrefix","be","renderCustomSuffix","opacity","bem","renderSuffixAction","ariaLabel","clear","renderSuffix","_slot","ns","renderCount","Infinity","renderPlainPassword","password","renderControl","onClick","renderAside","buttonSlot","onMouseenter","onMouseleave","methods","scrollbarProps","ScrollbarType","ScrollbarType2","scrollbarPlacements","useTrack","currentScroll","trackSpeed","bar","tracking","barLength","onDown","onUp","onScroll","startAt","cursorAt","targetScroll","forward","processing","animateMoveBar","speedRate","computeSpeedRate","changed","verifyScroll","handleMouseDown","handleMouseMove","handleMouseUp","barRect","span","scrolling","handleTrackMouseDown","setScrollbarFade","handleWrapperMouseMove","wrapperElement","_cache","resizeObserverProps","ResizeObserver$1","observed","observe","nativeScrollProps","xFrom","xTo","yFrom","yTo","xDistance","yDistance","xStep","yStep","currentX","currentY","useScrollWrapper","mode","appear","scrollX","scrollY","onResize","onBeforeRefresh","onAfterRefresh","contentEl","percentX","percentY","xScrollLimit","yScrollLimit","enableXScroll","enableYScroll","xBarLength","yBarLength","computeContentSize","setScrollX","setScrollY","syncScroll","computePercent","entity","scrollToElement","elRect","scrollModes","MOVE_EVENT","UP_EVENT","inheritAttrs","scrollClass","scrollAttrs","pointer","useXBar","useYBar","barFade","barClass","autoplay","playWaiting","barDuration","useBarTrack","scrollTag","observeDeep","scrollOnly","emitter","usingBar","xBar","yBar","initialized","syncBarScroll","startAutoplay","slotParams","shallowReadonly","getState","ensureInView","canPlay","canAutoplay","stopAutoplay","playTimer","startTimer","endTimer","waiting","setScroll","playSpeed","requestAnimationFrame","clearTimeout","Number","willMutate","handleMutate","createMutation","MutationObserver","childList","clearMutation","onXEnabledChange","onYEnabledChange","getXScrollLimit","getYScrollLimit","addScrollListener","removeScrollListener","getCommonPayload","button","handlePointerDown","xScrollStartAt","yScrollStartAt","cursorXPosition","cursorYPosition","prepareScroll","addEventListener","handlePointerMove","handlePointerUp","onScrollStart","emitScrollEvent","removeEventListener","onScrollEnd","handleWheel","isVerticalScroll","isHorizontalScroll","sign","onWheel","maxLimit","scrollLeft","handleBarScrollStart","onBarScrollStart","handleBarScrollEnd","onBarScrollEnd","handleXBarScroll","onBarScroll","handleYBarScroll","querySelector","Promise","on","off","renderContent","Content","shiftKey","_slot2","Scrollbar","optionProps","optionGroupProps","selected","overflowProps","tag","attrFlag","maxCount","restCount","hiddenFlag","toggleDisplay","show","removeAttribute","computeHorizontalMargin","marginLeft","marginRight","computeHorizontalPadding","elOrStyle","Element","computeOuterWidth","lastOverflow","lastRestCount","counterEl","childCount","suffixEl","postRefresh","wrapperWidth","gap","columnGap","counterMargin","childWidths","totalWidth","childWidth","j","maxWidth","onRestChange","onToggle","CustomTag","itemSlot","staticItem","counterVNode","_Teleport","popperProps","_sfc_main$1x","Portal","getIndex","emitHookEvent","_component_Portal","$event","_withDirectives","_hoisted_1","_createCommentVNode","tagProps","tagTypes","components","border","closable","simple","circle","prefixBg","suffixBg","white","getPropertyValue","nv","cvm","onClose","renderClose","close","backgroundColor","borderColor","tooltipProps","TEXT_VNODE","noArrow","transitionName","visible","outsideClose","noHover","tipClass","tipStyle","raw","tipAlive","reverse","virtual","tooltipId","hoverDelay","currentVisible","rendering","triggerWidth","hovered","useFocus","originalTrigger","triggerEl","Array","fill","Math","split","handleClickOutside","toggleVisible","handleTriggerEnter","handleTriggerLeave","handleTriggerClick","handleTriggerFocus","handleTriggerBlur","computeTriggerWidth","getActiveState","hover","onTipEnter","onTipLeave","onClickOutside","onOutsideClose","syncTriggerRef","nextElementSibling","syncRendering","Wrapper","triggers","triggerVNode","renderTrigger","mergeProps","Popper","virtualListProps","NativeScroll","listTag","itemsTag","itemsAttrs","hideBar","lockItems","ignoreResize","toRefs","onItemResize","renderList","keyIndexMap","itemsClass","itemsOtherStyle","ListTag","ItemsTag","bind","renderingItems","prefixTrap","suffixTrap","selectProps","defaultKeyConfig","isSameValue","oldValue","isNewArray","isOldArray","currentLabels","currentValues","currentIndex","baseOptions","currentFilter","anchorWidth","userOptions","restTagCount","restTipShow","dynamicOption","optionValues","hittingOption","optionStates","visibleOptions","keyConfig","nativeInput","filterInput","device","virtualList","restTip","cachedSelected","optionValueMap","emittedValue","updateTrigger","initOptionState","valueKey","labelKey","disabledKey","dividedKey","titleKey","groupKey","childrenKey","oldMap","option","rawOption","group","divided","oldState","optionState","initValueAndLabel","setVisible","updateHitting","totalOptions","showDynamic","selectorClass","baseCls","normalOptions","optionParentMap","previewOption","limited","showPlaceholder","getOptionFromMap","fitPopperWidth","initHittingIndex","syncInputValue","filterOptions","isSelected","normalizedValue","valueSet","selectedValues","selectedLabels","cachedValue","hitting","inputValue","ignoreCaseValue","parentMap","handleTagClose","handleRestTagClose","newOption","prevValue","handleFilterInput","hittingIndex","handleFilterKeyDown","toggleShowRestTip","_normalizeStyle","Overflow","_withCtx","Tag","Tooltip","Input","_normalizeProps","_guardReactiveProps","VirtualList","Option","autoCompleteProps","lastInput","isReadonly","filteredOptions","computeHitting","handleInputInternal","testOptionCanDrop","valid","beforeVisible","inClickProcess","beforeClick","handleClick","handleToggle","Select","onSelect","avatarProps","avatarGroupProps","GROUP_STATE","objectFitValues","groupState","loadFail","fallbackFail","text","scaleText","handleError","lastText","avatarEl","textEl","avatarWidth","avatarHeight","textWidth","textHeight","renderAvatars","restAvatars","Avatar","badgeProps","badgeTypes","hasSlot","showSub","handleBadgeClick","breadcrumbProps","breadcrumbItemProps","BREADCRUMB_STATE","breadcrumbState","currentLabel","separator","separatorRenderer","handleSeparatorClick","itemStates","route","meta","refreshLabels","increaseItem","decreaseItem","slotValue","propValue","BreadcrumbItem","bubbleProps","bubbleTypes","buttonProps","buttonGroupProps","buttonTypes","fieldActions","dashed","ghost","buttonType","noPulse","badge","pulsing","isLast","isIconOnly","colorMap","light2","dark1","opacity1","opacity3","opacity4","opacity7","opacity8","white8","white9","gnv","handleAnimationEnd","renderLoadingIcon","renderSingleIcon","renderCollapseIcon","renderBadge","badgeType","Badge","Button","refreshIndexes","colProps","Column","rowState","numberInputProps","isNullOrNaN","getEmptyValue","inputting","plusHolding","minusHolding","plusDisabled","minusDisabled","changeStep","controlId","outOfRange","fade","preciseNumber","parseValue","setInputValue","boundValueRange","handleHold","change","plusNumber","minusNumber","cancelStep","stringValue","floatValue","empty","boundValue","emitUpdate","_withModifiers","weekDay","_withKeys","calendarPanelProps","calendarProps","startValue","endValue","hoveredDate","reversed","updateDateRange","setDateRange","isHovered","isPrevMonth","isNextMonth","isToday","isInRange","getWeekLabel","isSameRow","dateYear","dateMonth","handleHover","startTime","endTime","hoveredTime","selectedTime","minTime","maxTime","week","row","cell","CalendarCell","isPrev","isNext","matchedToday","inRange","cellParams","calendarValue","calendarYear","calendarMonth","formatYearInput","formatMonthInput","handleYearChange","handleMonthChange","CalendarPanel","NumberInput","_hoisted_2","captchaProps","captchaSliderProps","currentLeft","testing","resetting","testLoading","widthLimit","dragging","verifyPosition","matchTarget","customResult","isLoading","fillerStyle","triggerStyle","afterReset","squarePath","ctx","halfSide","puzzlePath","radius","shieldPath","heartPath","slideTarget","isArray","tip","successTip","failTip","image","tolerance","canvasSize","refreshIcon","onBeforeTest","texts","find","failLimit","remotePoint","useTrigger","triggerSize","triggerText","hideDelay","hollowShape","currentTarget","parseTarget","pointers","success","failed","failedCount","canvas","subCanvas","slider","usedTarget","imageLoading","imagePromise","pointerTargets","fontRate","imageLoaded","memoryCanvas","failLocked","subCanvasStyle","actionLocked","loadImage","drawImageNextFrame","console","warn","hideTrigger","drawImage","loadFlag","Date","now","flag","src","trim","startsWith","onload","finally","drawImageWithTexts","canvasEl","getContext","textBaseline","textAlign","font","lineWidth","strokeStyle","drawText","radian","save","translate","PI","fillStyle","fillText","strokeText","restore","metrics","measureText","xLimit","yLimit","fontBoundingBoxAscent","fontBoundingBoxDescent","prevX","prevY","abs","push","getHollowProcess","subCanvasEl","subCtx","pathCtx","clearRect","canvasRect","trackRect","widthFix","targetX","targetY","hollowProcess","beginPath","clipX","clipY","clipWidth","clipHeight","stroke","clip","xLeftWidth","translateFix","globalCompositeOperation","newImage","handleDragStart","onDragStart","handleDrag","onDrag","handleDragEnd","onDragEnd","handleSlideSuccess","onSuccess","handleSlideFail","onFail","handleRefresh","onRefresh","verifyPointers","xTolerance","yTolerance","flat","handleImageClick","clientWidth","canvasWidth","canvasHeight","offsetX","offsetY","cancelPointer","pop","handleTrigger","renderImage","TransitionGroup","fail","renderSlider","CaptchaSlider","slide","renderTextList","pointInOrder","renderFooter","renderPanel","doCaptcha","completed","cardProps","hasExtra","hasHeader","carouselProps","CAROUSEL_STATE","isLocked","arrowActive","listRect","itemRect","trackStyle","disabledPrev","disabledNext","arrowIcons","handleMouseEnter","handleMouseLeave","setAutoplay","updateItemRect","updateListRect","isItemActive","inTransition","shouldReset","computeItemRect","handleAfterMove","prevFix","nextFix","handlePrev","handleNext","itemLength","itemCount","targetIndex","prevActive","anchorIndex","back","handlePrevClick","handleNextClick","isPointerDisabled","carouselState","checkboxProps","checkboxGroupProps","currentChecked","currentPartial","controlState","computedSize","computedState","isLoadingLock","stateColor","opacity6","hasLabel","setCurrentChecked","increased","emitCheckEvent","checked","currentHitting","findEnabledIndex","ensureOptionInView","hasChildren","handleToggleCheck","listHeight","hoverTimer","computeListHeight","isCheckboxDisabled","queryEnabledIndex","optionHeight","Checkbox","cascaderProps","ID_KEY","PARENT_KEY","mergedValues","mergedLabels","isPopperShow","optionTree","isAsyncLoad","usingMerged","templateValues","templateLabels","optionList","optionIdMap","outsideClosed","prevClosedId","flattedOptions","initOptionStates","isAsync","createOptionStates","initOptionFull","queryChildrenLoaded","openedIds","optionsList","panelElList","selectorWidth","usingHover","outsideChanged","brief","updateMergedProps","originalOptions","updateCheckedUpward","updateCheckedDown","emitMultipleChange","onBeforeUpdate","handlePanelOpen","handleOptionSelect","handleOptionCheck","handlePanelBack","rawOptions","hasChildKey","hasChild","baseValues","values","briefLabel","isFlatArray","isComplexArray","processMerged","selectedOptions","firstValue","ids","queryUpstreamOptions","handleSingleSelect","originalOption","partial","dataList","queryArrayMeta","fullValue","handleTipClose","handlePanelKeyOpen","panel","handlePanelsEnter","CascaderPanel","layoutProp","gridProps","cellProps","currentBreakPoint","handleBreakPointChange","point","query","queryEntries","queryMap","media","GRID_STATE","Cell","gridState","layoutState","layoutKeys","defaultWidth","matchSize","queryBreakPointOptions","cellFlex","topSet","isPositionSet","rightSet","bottomSet","leftSet","parsePosition","breakPoint","valueMap","inputSet","controlSet","controlLabel","updateValue","updateControl","valueLength","increaseControl","decreaseControl","handleControlChange","setItemChecked","replaceValue","checkedValues","allValues","COLLAPSE_STATE","getIndexId","panelStates","currentExpanded","tab","tabs","clearExpanded","expandPanel","registerPanel","unregisterPanel","rawExpanded","expanded","updateItemExpanded","isSameExpanded","prevSet","collapseState","loaded","tabId","bodyId","useCard","useGhost","useArrowType","alive","setExpanded","ifDirectiveValue","showDirectiveValue","_sfc_main$19","currentTop","prevLeft","heightLimit","topStartAt","leftStartAt","editing","_sfc_main$18","_sfc_main$17","rgbString","colorPickerProps","defaultShortcuts","getDefaultHsv","currentAlpha","shortcutHitting","shortcutsFocused","palette","hue","alphaEl","shortcutEl","cancel","confirm","unitList","shortcutList","formattedColor","getFormattedColor","labelColor","handleConfirm","handlePaletteChange","handleHueChange","handleAlphaChange","handleInputColor","handleShortcutClick","toggleEditing","able","handleTabDown","activeEl","elList","unit","maybeEl","handleShortcutsFocus","handleShortcutsKeydown","shortcutCount","handleSpaceDown","handleEscDown","showLabel","ColorPalette","ColorHue","ColorAlpha","configProviderProps","theme","maskerProps","wrapperShow","topTrap","bottomTrap","maskShow","contentShow","stable","prevFocusedEl","afterOpen","afterClose","disableWheel","toggleActive","afterMaskOpen","afterMaskClose","afterContentOpen","afterContentClose","handleFocusIn","tabables","handleEscape","$attrs","positionType","positionValidator","positionProp","modalProps","isSpecified","normalizeStyle","maskerRect","modalRect","transformed","masker","footer","uselessTop","uselessLeft","header","transferRect","resizer","resizing","minHeight","transforms","wrapperStyle","transformOrigin","titleId","computeTop","computeLeft","handleCancel","setActive","findPositionalParent","currentHeight","currentWidth","withSize","offsetTop","offsetLeft","isConfirm","handleMaskClose","handleModalResize","box","Masker","useModal","appContext","headerRenderer","titleRenderer","closeRenderer","footerRenderer","onHide","createModal","createApp","Component","destroy","Modal","confirmProps","confirmButtonTypes","rendererR","beforeConfirmR","onConfirm","onCancel","mountedPromise","openConfirm","handleReset","resolved","ConfirmManager","manager","property","others","Confirm","SELECT_HANDLER","DROPDOWN_STATE","DropdownDrop","dropdownState","dropdownProps","dropdownItemProps","useLabel","rawLabel","setLabel","parentState","isNested","popperAlive","isAlive","setPlacement","labels","metaList","xPlacement","parentSelectHandler","isReference","baseClass","renderItemIcon","iconColor","renderItemShortcut","shortcut","renderGroupItem","Dropdown","onContextmenu","DropdownItem","angleLeft","angleRight","drop","DropdownList","some","c","renderItem","configs","openContextmenu","afterContextmenu","ContextmenuManager","innerApp","unmount","Contextmenu","DisabledType","DisabledType2","datePickerTypes","invalidDate","TIME_REG","numberKeys","isNumberKey","handleKeyEnter","isMatch","inputtedNumber","useColumn","colTypes","currentColumn","columnTypes","columnCount","enabled","findEnabledColumn","types","resetColumn","column","enterColumn","canLoop","rawTypes","defaultMin","defaultMax","useTimeBound","originMin","originMax","minUnits","maxUnits","isTimeDisabled","isHourDisabled","isMinuteDisabled","isSecondDisabled","isActivated","showTimeUnits","formattedYear","formatValue","formattedMonth","formattedDate","formattedHour","formattedMinute","formattedSecond","maxDateCount","dateUnitOrder","one","two","three","isYear","filler","getUnitFocusClass","handleInputFocus","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","scrollProps","isReady","refreshWrapper","computeWrapperSize","sizeType","titleCaseSizeType","promises","transitionDuration","waitDelay","precessScroll","handleTouchStart","moved","lastDate","signX","signY","handleBuffer","computedDelta","ensureScrollOffset","waitTransition","setDuration","_resolveDynamicComponent","WHEEL_STATE","wheelState","wheelProps","wrapperHeight","targetWidth","targetHeight","isInit","borderStyle","prevDisabled","isItemDisabled","nextDisabled","prevIcon","nextIcon","updateActive","findEnabledActive","computeSize","candidate","showCount","refreshScroll","targetXScroll","targetYScroll","queryEnabledActive","beforeScroll","aboutActive","handleItemClick","Scroll","WheelItem","currentHour","currentMinute","currentSecond","hourRange","minuteRange","secondRange","hourWheel","minuteWheel","secondWheel","updateTimeRange","refreshWheel","hourStep","minuteStep","secondStep","handleToggleColumn","wheel","Wheel","today","monthRange","rangeNumbers","currentPanel","hoveredYear","hoveredMonth","yearRange","shortcutsRect","panelStyle","startActivated","activated","endActivated","isDatetime","getStringValue","weekDays","refreshCalendar","getMonthLabel","togglePanel","adjustCalendar","handleShortcut","handleSelectDate","emitChange","handleSelectYear","isDisabledYear","handleSelectMonth","isDisabledMonth","handleStartTimeChange","handleEndTimeChange","handleDoublePrevClick","handleDoubleNextClick","handleHoverDate","isSelectedYear","isSelectedMonth","monthYear","dayCount","handleYearHover","handleMonthHover","isYearInRange","startYear","endYear","selectedYear","minYear","maxYear","isMonthInRange","startMonthYear","endMonthYear","hoveredMonthYear","selectedMonthYear","minMonthYear","maxMonthYear","valueType","handleShortcutsResize","weekParams","itemParams","TimeWheel","datePickerProps","timePickerProps","calendarLocale","datePickerLocale","startState","createDateState","endState","currentState","firstSelected","staticWheel","startInput","endInput","datePanel","mergedLocale","startPlaceholder","endPlaceholder","hoveredLarge","firstTime","hoverTime","rawValueToDate","startMinTime","startMaxTime","endMinTime","endMaxTime","startReversed","startTimeBound","endTimeBound","startError","isDateDisabled","endError","noActionMode","parseFormat","hasMonth","hasDate","getCurrentState","dateValue","valueRecord","activatedRecord","withTime","toggleActivated","parseDateUnitOrder","orderSet","inQuotation","parseTimeUnitEnabled","verifyDate","emitValues","formattedValues","valueFormat","timestamp","emitValue","finishInput","shouldChange","verifyValue","getStep","handleFocused","showPanel","units","toggleCurrentState","handleInputNumber","setActivatedTrue","isTimeType","handleAdjust","adjustType","ctrlKey","isPlus","getCtrlStep","computeDate","updateDateActivated","handlePlus","handleMinus","fallbackFocus","finish","handleDateHover","hoverDate","hoverValues","handlePanelChange","secondTime","verifyRangeValue","handleTimeChange","startDate","endDate","handleStartInput","handleEndInput","DateControl","DatePanel","titleParams","yearParams","monthParams","dateParams","dividerProps","hasText","drawerProps","drawerPlacements","moveTransition","ellipsisProps","ellipsisStyle","formActions","formFields","isError","errorTip","validating","disabledValidate","defaultSlotParams","isRequired","requiredTip","allRules","requiredRule","selfRules","formRules","isValidateAll","useAsterisk","hideLabel","labelAlign","computedLabelWidth","controlStyle","labelWidthDefined","instances","fieldObject","handleValidate","resetValue","handleValidateEnd","useRules","asyncValidate","handleLabelClick","isNative","actions","isInherit","submit","fullScreenProps","placeId","isEntered","fullType","browserEnter","browserExit","browserFull","customZIndex","Grid","parseSizeLayout","parseAutoLayout","highlightProps","keyWords","renderTexts","viewerProps","InternalActionName","defaultActionLayout","viewerDefaultActionLayout","toolbarActive","zoom","flipX","flipY","fullSupported","enterFull","exitFull","zoomOrigin","getActionProp","action","getActionClass","internalActions","handleRotate","toggleFlipX","toggleFlipY","handleZoom","toggleFull","toolbarVertical","layout","toolbarFade","toolbarClass","contentStyle","transitionStyle","allActions","deg","normalizeProps","containerRect","prevZoom","originX","originY","isFull","handleEnterToolbar","handleLeaveToolbar","Divider","imageProps","imageGroupProps","imageViewerProps","srcArray","verifyIndex","Viewer","skeletonProps","skeletonGroupProps","repeat","imageIcon","iconScale","spread","itemTag","parseSize","test","renderSkeleton","useImgLoading","showImg","currentSrc","viewerActive","showError","hasPreview","imageSrc","imgLoading","handleLoad","handlePreview","Skeleton","ImageViewer","imageStates","srcList","refreshIndex","breakpointProp","layoutProps","layoutAsideProps","layoutHeaderProps","layoutMainProps","layoutFooterProps","LAYOUT_STATE","rootEl","computeSeriesColors","colors","light","dark","useLayoutState","useMediaQuery","computedQuery","usedQuery","mediaQuery","useUpdateCounter","onUpdated","main","menuProps","menuItemProps","menuGroupProps","MENU_ITEM_STATE","MENU_GROUP_STATE","MENU_STATE","MenuGroup","defineAsyncComponent","MenuItem","menuState","parentItemState","groupExpanded","sonSelected","popperShow","propTransfer","inTransfer","markerType","isGroup","showGroup","labelStyle","isUsePopper","indentWidth","multiplier","isReduced","paddingInlineStart","groupType","tooltipDisabled","tooltipReverse","isHorizontal","dropTrigger","itemState","cachedExpanded","updateSonSelected","toggleGroupExpanded","doForEachItem","handleExpand","upstream","accordion","upward","mouseInList","reproduce","handlePopperHide","handleKeySelect","code","renderChildren","renderArrow","angleDown","renderItemArrow","renderLabel","_vShow","menuNh","titleStyle","onlyShowSlot","menus","renderMenuItems","ellipsis","menuMarkerTypes","reduced","router","manualRoute","menuItemSet","Set","rest","routes","parseRoutesToMenus","currentRoute","handleMenuReduce","handleMenuExpand","expandItemByLabel","routeMeta","menu","delete","onExpand","onReduce","firstExpandedItem","selectedItem","renderMenuItem","renderMenus","MenuRest","switchProps","signalStyle","logo","signName","user","userDropped","avatarCircle","signType","darkMode","currentSignType","currentUserDropped","currentColor","getBaseColor","isDark","isLayout","affixMatched","affixed","userActions","signOut","hasLeft","hasMenu","toggleExpanded","toggleReduced","handleColorChange","toggleUserDropped","expandMenuByLabel","classList","toggleTheme","onBeforeMount","handleUserActionSelect","onUserAction","handleSignTypeChange","changeInLock","onNavChange","onExpandedChange","onReducedChange","onColorChange","handleSignClick","onSignClick","dropped","onDroppedChange","handleMenuSelect","onMenuSelect","onToggleTheme","renderCheck","check","renderLayoutConfig","renderThemeConfig","Switch","renderColorConfig","renderUserAvatar","avatar","renderUserDrop","email","renderConfigs","navConfig","themeMode","majorColor","headerLeft","headerMain","Menu","headerRight","headerUser","linkerProps","linkerTypes","copyright","links","verticalLinks","horizontalMatched","renderLinks","footerLinks","Linker","subname","currentReduced","aside","hasTop","useExpand","computeScrollHeight","topHeight","bottomHeight","asideTop","asideBottom","outdent","expandHandler","expand","noAside","headerFixed","asideFixed","miniHeaderSign","fixedMain","fitWindow","innerClasses","noHeader","noMasker","locked","asideExpanded","asideReduced","section","expandMatched","signNameMatched","isHeaderMain","signInHeader","handleToggleTheme","handleUserAction","onContentResize","cancelChange","doChange","stopAndPrevent","renderSign","showSignName","renderHeader","LayoutHeader","onMousemove","sidebar","LayoutAside","renderMain","LayoutMain","LayoutFooter","renderMasker","renderWrapper","scrollbar","maxPercent","rafId","startLoading","setLoading","LoadingManager","Loading","DELETE_HANDLER","popupPlacements","handleDelete","pending","placementArray","deleteItem","getItemStyle","onOpen","queueOut","removeItem","currentVertical","existingItem","removeHeight","enterItem","leaveItem","PopupItem","itemData","effectiveTypes","assertiveTypes","startOffset","itemGap","popup","placementCenter","Popup","placementWhiteList","getKey","MessageManager","_duration","userCloseFn","userEnterFn","userLeaveFn","onLeave","setDelayClose","Message","NoticeManager","notice","Notice","paginationProps","PaginationMode","noBorder","background","pageSize","sizeOptions","isInteger","disableItem","turnPageCount","itemUnit","plugins","noTitle","midPagers","currentPageSize","LEFT","inPrevEllipsis","inNextEllipsis","jumpValue","itemElList","up","down","activeElement","findIndex","space","activeClass","beforeMatchAny","afterMatchAny","pagerCount","ceil","useEllipsis","prevTurnPageTitle","page","nextTurnPageTitle","prevEllipsisTarget","nextEllipsisTarget","sizeObjectOptions","perPage","pluginOrders","pagerPosition","jump","jumpInputWidth","pageCount","changeActive","computePagers","onPageSizeChange","anchor","querySelectorAll","cbe","cbem","parseInt","tabIndex","pagers","numberCount","criticalCount","unshift","CENTER","RIGHT","enterPrevEllipsis","leavePrevEllipsis","clickPrevEllipsis","enterNextEllipsis","leaveNextEllipsis","clickNextEllipsis","handleJumpPage","originActive","renderPrev","prevPage","renderNext","nextPage","renderPrevEllipsis","_slot3","anglesRight","anglesLeft","entered","renderNextEllipsis","_slot4","_slot5","onKeydownEnter","onKeydownSpace","renderTotalPlugin","order","renderSizePlugin","renderJumpPlugin","jumpTo","ItemTag","progressProps","infoTypes","strokeColor","useBubble","bubbleType","bubbleStyle","percentValue","Bubble","radioProps","radioGroupProps","radioShapes","radioGroupShapes","shape","isButton","registerInput","unregisterInput","Radio","resultProps","resultTypes","hasDescription","SkeletonGroup","isTipShow","tooltip","extraType","updateTooltip","showTooltip","hideTooltip","sliderProps","stepOneValue","sliding","triggerType","triggerShow","startTrigger","endTrigger","markerList","markers","marker","hasMarkerLabel","canDragRange","stepDigit","stepOneMin","stepOneMax","truthValue","stepOneTotal","triggerPercent","toPercent","startTriggerStyle","endTriggerStyle","commonSlotParams","lastInputValue","isEqualValue","isValueInRange","computedValue","nearest","nearestMarker","setTriggerFade","handlePointerEnter","handlePointerLeave","computePointedValue","client","handleTrackDown","downPercent","handleMove","handleMoveEnd","getPointStyle","getMarkerStyle","adjustValue","markerValue","SliderTrigger","spaceProps","useFlexGap","parseFlexStyle","inline","align","justify","noWrap","itemStyle","gapDisabled","varMap","hh","mhh","hv","mhv","alignItems","justifyContent","normalizedSize","lastIndex","justifySpace","notBetween","splitProps","_sfc_main$t","currentFull","guide","outer","computedMin","computedMax","setTransition","leftPaneStyle","rightPaneStyle","fullIcons","removeTransition","handleFull","_component_Icon","tabNavProps","tabNavItemProps","TAB_NAV_STATE","trackStyleMap","tabNavState","contentClass","isClosable","markerPosition","markerSize","updateMarkerPosition","markerStyle","scrollMode","isActiveEmpty","handleAdd","activeItem","TabNavItem","tabsProps","tabPanelProps","TABS_STATE","tabsState","lazyLoad","tableProps","tableColumnProps","tableColumnGroupProps","tableSummaryProps","DropType","DEFAULT_KEY_FIELD","TABLE_STORE","TABLE_ACTIONS","TABLE_SLOTS","TABLE_HEAD_PREFIX","TABLE_FOOT_PREFIX","COLUMN_GROUP_ACTIONS","noopFormatter","propKeys","aliases","ignoredProps","triggerProps","aligns","funcProp","TableColumn","selectionSize","tableAction","parentActions","aliasKey","filterWithoutMeta","setRenderer","setHeadRenderer","setFilterRenderer","setSummaryRenderer","rowIndex","TableColumnGroup","columns","Symbol","updateColumns","setColumnProp","increaseColumn","decreaseColumn","head","TableSummary","tableActions","tableSlots","customIcon","minWidth","getters","mutations","filterVisible","resizable","cellSpan","inLast","processColResize","table","buildEventPayload","typed","customClass","customStyle","totalWidths","colSpan","rowSpan","noFixed","padLeft","padRight","customAttrs","sorter","hasFilterActive","checkboxDisabled","isSelection","records","refreshXScroll","handleDblclick","handleContextmenu","handleSortAsc","handleSortDesc","handleFilter","handleFilterItemSelect","handleFilterCheck","handleFilterMultiple","activeValues","handleResetFilter","handleCheckAllRow","handleCellResize","TableIcon","isDragOver","rowEl","expandEl","rowKey","rowType","maxHeight","groupStyle","cellDraggable","rowDraggable","draggable","expandRenderer","hasExpand","setExpandHeight","updateTotalHeight","shouldProcessDrag","handleDragOver","handleDrop","handleDragLeave","afterExpand","allColumns","getRow","rowColumns","TableRow","TableHeadCell","isTreeColumn","isTypeColumn","isSelectionColumn","isOrderColumn","isExpandColumn","isDragColumn","handleCheckRow","single","handleExpandRow","handleDragRow","handleExpandTree","hasEmpty","showEmpty","emptyStyle","rowHeight","rowMinHeight","colIndex","TableCell","summaries","heights","summaryData","summary","TableFootCell","useCascadedChecked","originNode","disable","defaultSummaryData","indexId","defaultIndexLabel","COLUMN_DEFAULT_WIDTH","COLUMN_DEFAULT_MIN_WIDTH","useStore","setColumns","setSummaries","setData","userData","filteredData","filterData","sortedData","sortData","processedData","pageData","visibleKeys","disableCheckRows","rowData","selectionColumn","disableExpandRows","expandColumn","disableDragRows","dragColumn","usingTree","hasDragColumn","rowDragging","getColumnsWidths","normalWidths","leftFixedWidths","rightFixedWidths","topFixedHeights","getSummariesHeights","bottomFixedHeights","indentedColumn","hasFixedColumn","isGroupColumn","buildSummaryKey","setSummaryProp","setDataKey","setCurrentPage","setPageSize","setRowClass","setRowStyle","setRowAttrs","setCellClass","setCellStyle","setCellAttrs","setHeadClass","setHeadStyle","setHeadAttrs","setFootClass","setFootStyle","setFootAttrs","setTableWidth","setRowHeight","setRowMinHeight","setCellHeight","setVirtual","setRowDraggable","setBodyYScroll","setBodyXScroll","setBorder","setStripe","setHighlight","setRowProp","setLocale","setTooltipTheme","setTooltipWidth","setSingleSorter","setSingleFilter","setDragging","setKeyConfig","setDisabledTree","setNoCascaded","setColResizable","setCustomSorter","setCustomFilter","setColumnResizing","setResizeLeft","setExpandRenderer","setCellSpan","setSidePadding","setBorderWidth","setDataFilter","setEllipsis","setLocked","setBarScrolling","setHoveredRowKey","handleSort","clearSort","clearFilter","toggleFilterItemActive","refreshRowIndex","handleCheck","handleCheckAll","clearCheckAll","setRenderRows","collectUnderRows","setTreeExpanded","getParentRow","handleColumnResize","getCurrentData","createMinRowState","flatTreeRows","refreshRowDepth","triggerHeightChange","queryRow","computeCellSpan","widths","combinedWidths","columnWidth","rowMap","buildColumns","baseColumns","columnMap","existedTypes","getFixedOrder","build","_columns","validType","rowCount","sorters","filters","normalColumns","rightFixedColumns","leftFixedColumns","parseSorter","parseFilter","prevKeys","aboveSummaries","belowSummaries","summaryMap","oldDataKey","idMaps","childRow","clonedData","dataKey","disabledTree","oldDataMap","checkedKey","heightKey","expandedKey","treeExpandedKey","parseRow","treeExpanded","computePartial","currentPage","rowClass","rowStyle","rowAttrs","cellClass","cellStyle","cellAttrs","headClass","headStyle","headAttrs","footClass","footStyle","footAttrs","resized","flexColumns","flexWidth","fixedWidth","flexColumnCount","flexWidths","distributeWidths","usedWidth","baseWidth","col","w","currentTotal","canGrow","canShrink","epsilon","adjusted","adjustableIndices","adjustment","columnKey","noCascaded","spanFn","prevHoveredRow","newHoveredRow","computeChecked","rowList","checkedAll","partialCheckedAll","hasChecked","hasNotChecked","startRow","endRow","heightBITree","virtualData","prevData","added","removed","underRows","disableOthers","custom","formattedOptions","isActive","isSingle","usedFilter","usedData","usedFilterCount","isFilter","usedSorter","_key","lastColumnWidth","newWidth","tableWidth","deltaWidth","cellSpanMap","collapseMap","columnIndex","getSpan","masterKey","collapsed","masterSet","columnFixed","len1","len2","treeRowData","keyOrData","bodyHeight","bodyMinHeight","xScrollEnabled","yScrollEnabled","xScrollPercent","yScrollPercent","headHeight","footHeight","indicatorShow","indicatorType","tempColumns","tempSummaries","bodyWidth","mainScroll","xHeadScroll","xAboveScroll","xBelowScroll","thead","aboveTfoot","belowTfoot","indicator","xScrollbar","yScrollbar","allSummaries","syncToStoreProps","store","increaseSummary","decreaseSummary","getTableElement","emitRowCheck","emitAllRowCheck","emitRowExpand","emitRowTreeExpand","emitRowFilter","emitRowSort","handleRowDragStart","handleRowDragOver","handleRowDrop","handleRowDragEnd","emitRowEvent","emitCellEvent","emitHeadEvent","emitColResize","emitFootEvent","renderTableSlot","runInLocked","updateSummaries","mergedLocked","useXScroll","bodyScrollHeight","totalHeight","leftFixedActive","rightFixedActive","forceRefreshData","computeTableWidth","computeBodyHeight","refreshPercentScroll","watchCallback","handlerResize","getSelected","setRowChecked","setRowTreeExpanded","computeRenderRows","borderWidth","fixedHeight","handleMainScroll","handleXScroll","handleYScroll","emitYScroll","profiles","dragState","rowInstance","dropRowRect","tableRect","prevPercent","nextPercent","dropRowHeight","dropType","indicatorTop","isIndicatorShow","isLeftInsideRight","draggingRow","willDropRow","currentKey","allDataPayload","bodyYScroll","viewStart","viewEnd","renderStart","renderEnd","selectedData","TableHead","TableFoot","TableBody","_createSlots","defineTableFilter","defineTableSorter","defineTableColumn","defineTableColumns","defineTableSummary","defineTableSummaries","computeIndex","TabNav","textareaProps","textarea","getId","recordMap","isRunning","subscribe","computeTimeAgo","unsubscribe","usedDiff","noFormat","timeAgoProps","datetime","toDateValue","timeAgo","parseInterval","currentTitle","createTimeState","timeValue","defaultDate","verifyTime","handleWheelChange","parsedValue","exchangeValue","handleExchangeClick","TimeControl","timelineProps","timelineItemProps","TIMELINE_STATE","timelineItemTypes","handleSignalClick","timelineState","spacing","lineStyle","isDashed","updateHeight","toastProps","openToast","closeToast","handleWrapperClick","conveniences","ToastManager","convenienceOptions","toast","Toast","tourProps","tourStepProps","TOUR_STATE","tempSteps","currentRect","sideRects","bubble","allSteps","currentStep","maskId","increaseStep","decreaseStep","autoClose","deepProps","TourStep","tourState","paged","Boolean","Function","emptyText","deepState","currentSelected","currentMark","searching","search","bodyRealHeight","lastSelected","keyUsed","currentOptions","handlePageChange","emitSelectedChange","filterValue","optionSize","pagedOptions","totalPages","allSelected","hasSelected","hasUnselected","computePageSize","bodyEl","innerHeight","toggleSelect","handleRangeSelect","toggleSelectAll","handleReverse","prevSelected","renderOption","retweet","renderFilter","renderBody","transferProps","ignoreCase","sourceTitle","targetTitle","sourceSelected","targetSelected","sourceOptions","targetOptions","Map","forEach","actionType","toTargetEnabled","toSourceEnabled","defaultFilter","toLocaleLowerCase","sourceFilter","getFilterMethod","targetFilter","handleToTarget","handleToSource","handlePanelFocus","handlePanelBlur","getSlotRender","TransferPanel","onSwitch","TREE_STATE","TREE_NODE_STATE","treeState","hasCheckbox","handleToggleSelect","secondary","hasLinkLine","hasArrow","leafSign","asyncLoad","checkbox","suffixCheckbox","nodeState","dragTimer","asyncLoadCallback","getNodeState","lineIndex","treeProps","nodeMap","nodeDataMap","treeNodes","flattedNodes","nodeStates","expanding","expandingNodes","expandedNodeIds","trap","visibleNodeEls","defaultNodeProperties","boundAsyncLoad","linkLine","visibleNodes","flatNodes","renderedNodes","toNodeProps","createDefaultFilter","updateVisibleNodeEls","disableExpand","disableExpandTick","nodes","isLeafNode","upper","resetExpanded","oldIds","parseAndTransformData","addedId","removedId","transferring","baseExpandedIds","baseNodes","nodeHeight","viewCount","addedNodes","computeCheckedState","handleNodeClick","handleNodeSelect","handleNodeCancel","handleNodeExpand","handleNodeReduce","handleNodeContextmenu","handleAsyncLoad","handleNodeDragStart","handleNodeDragOver","handleNodeDrop","handleNodeDragEnd","handleHittingChange","handleNodeHitting","forceUpdateData","syncNodeStateIntoData","getCheckedNodes","getCheckedNodeData","getSelectedNodes","getSelectedNodeData","getExpandedNodes","getDisabledNodes","getNodeChildren","getSiblingNodes","getPrevSiblingNode","getNextSiblingNode","getNodeByData","expandNodeByData","selectNodeByData","checkNodeByData","toggleNodeLoadingByData","toggleAllExpanded","getTreeData","getFlattedData","expandedIds","rootNodes","isCollapse","refreshNodesDepth","buildTreeNodes","oldIdMap","oldNode","createNodeItem","checkedNodes","parentKey","visibleKey","selectedKey","loadingKey","loadedKey","loadFailKey","readonlyKey","arrowKey","checkboxKey","selectDisabledKey","expandDisabledKey","checkDisabledKey","isLeafKey","selectDisabled","expandDisabled","checkDisabled","defaults","nodeList","selectedNodes","currentId","siblingNodes","nodeInstance","dropNodeRect","treeRect","dropArrowRect","dropNodeHeight","draggingNode","willDropNode","nodeEl","handleTreeFocus","includePartial","includeSelf","isChild","withFilter","innerNode","TreeNode","uploadProps","uploadListProps","uploadFileProps","iconConfig","useFileIcons","StatusType","uploadListTypes","imageExtRE","imageBase64RE","isImage","file","url","base64","fileIcons","useIconRenderer","fileName","status","percentage","showThumb","getFileExtension","getFileIcon","extension","imageToBase64","reader","Progress","UploadFile","getError","xhr","getBody","upload","formData","headers","getDefaultFileState","PENDING","response","abort","fileList","accept","maxSize","withCredentials","manual","hiddenFiles","countLimit","allowDrag","onBeforeUpload","onBeforeSelect","iconRenderer","selectToAdd","listType","loadingText","directory","pathField","disabledClick","buttonLabel","defaultFiles","customFetch","fileStates","renderFiles","acceptString","join","defaultList","createFileState","concat","DELETE","idMap","fileMap","syncInputFiles","deep","execute","click","handleInputChange","files","handleFilesChange","inputFiles","originFiles","webkitRelativePath","fileState","getFileStateBySource","SUCCESS","UPLOADING","exceedFiles","onExceed","assign","verifyFiles","uploadFiles","requests","uploadFile","catch","all","then","responses","Blob","reject","onProgress","handleProgress","handleSuccess","onError","onAbort","limitSize","onFilterError","onSizeError","onDelete","onPreview","dataTransfer","DataTransfer","FAIL","collectDropFiles","handleDragEnter","collectedFiles","dirLoop","processes","webkitGetAsEntry","isFile","dir","fileEntries","doProcess","createReader","readEntries","renderNormalAction","cloud","uploadCloud","dragOrClick","renderImageAction","HtmlTag","renderFileList","UploadList","canPreview","videoProps","videoControlProps","defaultLayout","videoDefaultControlLayout","videoDefaultShortcuts","VIDEO_STATE","videoState","objectOptions","optionMap","currentOption","removeShortcut","formatSeconds","seconds","mergeIconScale","slidTime","indicatorLeft","previewLeft","paddingX","sliderWidth","previewWidth","sliderEl","preview","points","segment","pointDuration","segmentLabel","segments","processMoveOnTrack","onSliderResize","onPreviewResize","permillage","onSlideMove","onSlideStart","onSlideEnd","Slider","currentTime","inputTime","durationEl","formattedTime","currentVolume","muted","volumeIcon","toggleMute","prevVolume","handleSlide","VideoControl","noControls","videoAttrs","volume","playbackRate","playbackRates","controlLayout","poster","video","shortcuts","pipEnabled","pictureInPictureEnabled","playing","pip","stateShow","stateHidden","currentRate","interacting","hasPlayed","flipped","screen","volumeRef","videoRef","shortcutRecord","addShortcut","altKey","metaKey","playIcon","pause","play","stateIcon","pauseState","playState","rateOptions","rates","rate","sort","splice","srcFullList","srcIndex","indexOf","togglePlaying","togglePip","changeRate","changeTime","changeVolume","resetMetaState","onTimeChange","handleEnded","onTogglePip","onPlay","onPause","onEnded","exitPictureInPicture","requestPictureInPicture","dispatch","onRateChange","onVolumeChange","toggleFlip","onToggleFlip","onFullChange","onToggleFull","handleInteract","interact","adjustSrc","playPrev","onPrev","playNext","onNext","renderPlayPrev","renderPlay","renderPlayNext","renderRefresh","renderTimer","VideoTimer","renderPlaybackRate","renderVolume","VideoVolume","renderFlip","renderPip","exitPip","requestPip","renderFullWindow","fullWindowExit","fullWindow","renderFullBrowser","fullScreenExit","fullScreen","renderControls","VideoProgress","onAfterLeave","FullScreen","textProps","pProps","strongProps","titleProps","hProps","h1Props","h2Props","h3Props","h4Props","h5Props","h6Props","blockquoteProps","olProps","ulProps","level","aligned","thin","coloredMarker","strong","italic","underline","mark","keyboard","listStyleType","createHComponent","Title","H1","H2","H3","H4","H5","H6","Text","buildInstall","defaultLocale","withDefaultLocale","normalizedPrefix","proxyConfigProps","provideConfig","version","Affix","Alert","Anchor","AutoComplete","AvatarGroup","Breadcrumb","ButtonGroup","Captcha","Card","Carousel","CarouselItem","Cascader","CheckboxGroup","Collapse","CollapsePanel","ColorPicker","ConfigProvider","DatePicker","Drawer","Form","FormItem","FormReset","FormSubmit","Highlight","ImageGroup","Layout","OptionGroup","Pagination","RadioGroup","Result","Space","Split","TabPanel","Table","Tabs","Textarea","TimeAgo","TimePicker","Timeline","TimelineItem","Tour","Transfer","Tree","Video","Blockquote","OL","UL","P","Strong","install"],"mappings":"gRACaA,GAAW,OAAO,OAAW,IAOpCC,GAAW,OAAO,UAAU,SAC5BC,GAAiB,OAAO,UAAU,eAUxB,SAAAC,GAAGC,EAAgBC,EAAc,CAC/C,OAAOJ,GAAS,KAAKG,CAAK,IAAM,WAAWC,CAAI,GACjD,CAUgB,SAAAC,GAAIF,EAA4BG,EAAiD,CACxF,OAAAL,GAAe,KAAKE,EAAOG,CAAG,CACvC,CASO,SAASC,GACdJ,EACuC,CAChC,OAAuBA,GAAU,IAC1C,CASO,SAASK,GAAOL,EAA2C,CACzD,OAAuBA,GAAU,IAC1C,CAoBO,SAASM,GAAMN,EAAiC,CAC9C,OAAA,OAAO,MAAMA,CAAK,CAC3B,CA+BO,SAASO,GAAOP,EAA+B,CACpD,OAAOA,IAAU,EACnB,CASO,SAASQ,GAAQR,EAAgC,CACtD,OAAOA,IAAU,EACnB,CA4CO,SAASS,GACdT,EACY,CACL,OAAAD,GAAGC,EAAO,QAAQ,CAC3B,CAWO,SAASU,GAAmBV,EAAqC,CAEpE,MAAA,CAAC,CAACA,GACF,OAAQA,EAAc,MAAS,YAC/B,OAAQA,EAAc,OAAU,UAEpC,CASO,SAASW,GAAWX,EAAiD,CAC1E,OAAO,OAAOA,GAAU,UAC1B,CA2DO,SAASY,GAAQZ,EAAgB,CACtC,OAAI,MAAM,QAAQA,CAAK,GAAK,OAAOA,GAAU,SACpCA,EAAM,SAAW,EAGtBA,aAAiB,KAAOA,aAAiB,IACpCA,EAAM,OAAS,EAGpBS,GAAST,CAAK,EACT,OAAO,KAAKA,CAAK,EAAE,SAAW,EAGnC,OAAOA,GAAU,SACZM,GAAMN,CAAK,EAGbK,GAAOL,CAAK,CACrB,CAUgB,SAAAa,GAAuCb,EAAgBc,EAAM,GAAmB,CAC9F,MAAI,CAACA,GAAO,CAAClB,GAAiB,GAEvB,CAAC,EAAEI,GAAS,aAAeA,EACpC,CASO,SAASe,GAAWf,EAAgB,CACzC,OAAOI,GAAUJ,CAAK,GAAK,OAAQA,EAAc,OAAO,QAAQ,GAAM,UACxE,CAMO,SAASgB,IAAO,CAAC,CAQjB,SAASC,IAAS,CAChB,MAAA,EACT,CAQO,SAASC,IAAU,CACjB,MAAA,EACT,CAWO,SAASC,GAAMC,EAAcC,EAAQ,EAAGC,EAAO,EAAG,CACvD,MAAMC,EAAkB,CAAC,EAEzB,QAASC,EAAI,EAAGA,EAAIJ,EAAM,EAAEI,EACpBD,EAAA,KAAKF,EAAQG,EAAIF,CAAI,EAGtB,OAAAC,CACT,CASO,SAASE,GAAQzB,EAAgB,CAC/B,OAAA,OAAO,UAAU,SAAS,KAAKA,CAAK,EAAE,MAAM,EAAG,EAAE,CAC1D,CASgB,SAAA0B,GAAaC,EAAS,GAAI,CACxC,MAAMC,EAAQ,iEACRC,EAASD,EAAM,OAErB,IAAIE,EAAS,GAEb,KAAOH,KACKG,GAAAF,EAAM,OAAO,KAAK,MAAM,KAAK,SAAWC,CAAM,CAAC,EAGpD,OAAAC,CACT,CAUA,eAAsBC,GACpBC,EACAC,EASI,GACJ,CACA,GAAID,EAAW,QACb,SAAW,CAACE,EAAWC,CAAQ,IAAKH,EAClC,GAAI,OAAOE,GAAc,WAAaA,EAAA,EAAcA,EAC9C,OAAA,OAAOD,EAAQ,gBAAmB,YACpC,MAAMA,EAAQ,eAAe,EAG/B,MAAME,EAAS,EAEX,OAAOF,EAAQ,eAAkB,YACnC,MAAMA,EAAQ,cAAc,EAGvB,GAKN,MAAA,EACT,CC9TA,MAAMG,GAAc,gBACdC,GAAa,uBAEbC,GAAc,MAAMD,EAAU,QAAQD,EAAW,IAEjDG,GAAc,cAAcD,EAAW,aAAaA,EAAW,aAAaA,EAAW,YACvFE,GAAc,cAAcF,EAAW,aAAaA,EAAW,aAAaA,EAAW,aAAaA,EAAW,YAMxGG,GAAU,IAAI,OAAO,MAAMF,EAAW,EAAE,EACxCG,GAAW,IAAI,OAAO,OAAOF,EAAW,EAAE,EAC1CG,GAAU,IAAI,OAAO,MAAMH,EAAW,EAAE,EACxCI,GAAW,IAAI,OAAO,OAAOJ,EAAW,EAAE,EAC1CK,GAAU,IAAI,OAAO,MAAML,EAAW,EAAE,EACxCM,GAAW,IAAI,OAAO,OAAON,EAAW,EAAE,EAE1CO,GAAY,uDACZC,GAAY,uEACZC,GAAY,uDACZC,GAAY,uEAEZC,GAAe,OAAO,OAAO,CACxC,UAAW,SACX,aAAc,SACd,KAAM,MACN,WAAY,SACZ,MAAO,SACP,MAAO,SACP,OAAQ,SACR,MAAO,MACP,eAAgB,SAChB,KAAM,MACN,WAAY,SACZ,MAAO,SACP,UAAW,SACX,YAAa,SACb,UAAW,SACX,WAAY,SACZ,UAAW,SACX,MAAO,SACP,eAAgB,SAChB,SAAU,SACV,QAAS,SACT,KAAM,MACN,SAAU,SACV,SAAU,SACV,cAAe,SACf,SAAU,SACV,UAAW,SACX,SAAU,SACV,UAAW,SACX,YAAa,SACb,eAAgB,SAChB,WAAY,SACZ,WAAY,SACZ,QAAS,SACT,WAAY,SACZ,aAAc,SACd,cAAe,SACf,cAAe,SACf,cAAe,SACf,cAAe,SACf,WAAY,SACZ,SAAU,SACV,YAAa,SACb,QAAS,SACT,QAAS,SACT,WAAY,SACZ,UAAW,SACX,YAAa,SACb,YAAa,SACb,QAAS,MACT,UAAW,SACX,WAAY,SACZ,KAAM,SACN,UAAW,SACX,KAAM,SACN,MAAO,SACP,YAAa,SACb,KAAM,SACN,SAAU,SACV,QAAS,SACT,UAAW,SACX,OAAQ,SACR,MAAO,SACP,MAAO,SACP,SAAU,SACV,cAAe,SACf,UAAW,SACX,aAAc,SACd,UAAW,SACX,WAAY,SACZ,UAAW,SACX,qBAAsB,SACtB,UAAW,SACX,WAAY,SACZ,UAAW,SACX,UAAW,SACX,YAAa,SACb,cAAe,SACf,aAAc,SACd,eAAgB,MAChB,eAAgB,MAChB,eAAgB,SAChB,YAAa,SACb,KAAM,MACN,UAAW,SACX,MAAO,SACP,QAAS,MACT,OAAQ,SACR,iBAAkB,SAClB,WAAY,SACZ,aAAc,SACd,aAAc,SACd,eAAgB,SAChB,gBAAiB,SACjB,kBAAmB,SACnB,gBAAiB,SACjB,gBAAiB,SACjB,aAAc,SACd,UAAW,SACX,UAAW,SACX,SAAU,SACV,YAAa,SACb,KAAM,SACN,QAAS,SACT,MAAO,SACP,UAAW,SACX,OAAQ,SACR,UAAW,SACX,OAAQ,SACR,cAAe,SACf,UAAW,SACX,cAAe,SACf,cAAe,SACf,WAAY,SACZ,UAAW,SACX,KAAM,SACN,KAAM,SACN,KAAM,SACN,WAAY,SACZ,OAAQ,SACR,cAAe,SACf,IAAK,MACL,UAAW,SACX,UAAW,SACX,YAAa,SACb,OAAQ,SACR,WAAY,SACZ,SAAU,SACV,SAAU,SACV,OAAQ,SACR,OAAQ,SACR,QAAS,SACT,UAAW,SACX,UAAW,SACX,UAAW,SACX,KAAM,SACN,YAAa,SACb,UAAW,SACX,IAAK,SACL,KAAM,SACN,QAAS,SACT,OAAQ,SACR,UAAW,SACX,OAAQ,SACR,MAAO,SACP,MAAO,MACP,WAAY,SACZ,OAAQ,MACR,YAAa,QACf,CAAC,EAIYC,GAAc,OAAO,OAAO,IAAI,IAAI,OAAO,KAAKD,EAAY,CAAC,CAAC,EAWpE,SAASE,GAAQrD,EAAwB,CAG9C,OAFAA,EAAQ,OAAOA,CAAK,EAAE,KAAA,EAAO,YAAY,EAEpCA,EAIDA,IAAU,eAAiBmD,GAAanD,CAAkB,EACrD,GAIPA,IAAU,eACVoD,GAAY,IAAIpD,CAAkB,GAClCyC,GAAQ,KAAKzC,CAAK,GAClB0C,GAAS,KAAK1C,CAAK,GACnB2C,GAAQ,KAAK3C,CAAK,GAClB4C,GAAS,KAAK5C,CAAK,GACnB6C,GAAQ,KAAK7C,CAAK,GAClB8C,GAAS,KAAK9C,CAAK,GACnB+C,GAAU,KAAK/C,CAAK,GACpBgD,GAAU,KAAKhD,CAAK,GACpBiD,GAAU,KAAKjD,CAAK,GACpBkD,GAAU,KAAKlD,CAAK,EAnBb,EAqBX,CASO,SAASsD,GAAiBC,EAAmC,CAGlE,GAFAA,EAAQA,EAAM,SAAW,EAAA,KAAA,EAAO,YAAY,EAExCA,IAAU,cACZ,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,OAAQ,OAAQ,SAAUC,EAAY,EAGzE,IAAIC,EAAQ,GAERN,GAAaI,CAAkB,IACjCA,EAAQJ,GAAaI,CAAkB,EAC/BE,EAAA,IAGN,IAAAC,EAEJ,GAAKA,EAAQjB,GAAQ,KAAKc,CAAK,EAAI,CACjC,KAAM,CAAE,EAAAI,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaJ,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAEtD,MAAA,CACL,EAAGC,EAAI,IACP,EAAGC,EAAI,IACP,EAAGC,EAAI,IACP,OAAQ,MACR,SAAUL,EACZ,CAAA,CAGF,GAAKE,EAAQhB,GAAS,KAAKa,CAAK,EAAI,CAClC,KAAM,CAAE,EAAAI,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaJ,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAEtD,MAAA,CACL,EAAGC,EAAI,IACP,EAAGC,EAAI,IACP,EAAGC,EAAI,IACP,EAAGE,GAAeL,EAAM,CAAC,CAAC,EAC1B,OAAQ,OACR,SAAUF,EACZ,CAAA,CAGF,GAAKE,EAAQf,GAAQ,KAAKY,CAAK,EAAI,CACjC,KAAM,CAAE,EAAAS,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaT,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAEtD,MAAA,CAAE,EAAGM,EAAI,IAAK,EAAAC,EAAG,EAAAC,EAAG,OAAQ,MAAO,SAAUE,EAAY,CAAA,CAGlE,GAAKV,EAAQd,GAAS,KAAKW,CAAK,EAAI,CAClC,KAAM,CAAE,EAAAS,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaT,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAEtD,MAAA,CACL,EAAGM,EAAI,IACP,EAAAC,EACA,EAAAC,EACA,EAAGH,GAAeL,EAAM,CAAC,CAAC,EAC1B,OAAQ,OACR,SAAUU,EACZ,CAAA,CAGF,GAAKV,EAAQb,GAAQ,KAAKU,CAAK,EAAI,CACjC,KAAM,CAAE,EAAAS,EAAG,EAAAC,EAAG,EAAAI,CAAA,EAAMC,GAAaZ,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAEtD,MAAA,CAAE,EAAGM,EAAI,IAAK,EAAAC,EAAG,EAAAI,EAAG,OAAQ,MAAO,SAAUE,EAAY,CAAA,CAGlE,GAAKb,EAAQZ,GAAS,KAAKS,CAAK,EAAI,CAClC,KAAM,CAAE,EAAAS,EAAG,EAAAC,EAAG,EAAAI,CAAA,EAAMC,GAAaZ,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAEtD,MAAA,CACL,EAAGM,EAAI,IACP,EAAAC,EACA,EAAAI,EACA,EAAGN,GAAeL,EAAM,CAAC,CAAC,EAC1B,OAAQ,OACR,SAAUa,EACZ,CAAA,CAGF,OAAKb,EAAQX,GAAU,KAAKQ,CAAK,GACxB,CACL,EAAG,SAAS,GAAGG,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAI,EAAE,EACxC,EAAG,SAAS,GAAGA,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAI,EAAE,EACxC,EAAG,SAAS,GAAGA,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAI,EAAE,EACxC,OAAQD,EAAQ,OAAS,OACzB,SAAUD,EACZ,GAGGE,EAAQV,GAAU,KAAKO,CAAK,GACxB,CACL,EAAG,SAAS,GAAGG,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAI,EAAE,EACxC,EAAG,SAAS,GAAGA,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAI,EAAE,EACxC,EAAG,SAAS,GAAGA,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAI,EAAE,EACxC,EAAGc,GAAoB,GAAGd,EAAM,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,EAAE,EAC/C,OAAQD,EAAQ,OAAS,OACzB,SAAUD,EACZ,GAGGE,EAAQT,GAAU,KAAKM,CAAK,GACxB,CACL,EAAG,SAASG,EAAM,CAAC,EAAG,EAAE,EACxB,EAAG,SAASA,EAAM,CAAC,EAAG,EAAE,EACxB,EAAG,SAASA,EAAM,CAAC,EAAG,EAAE,EACxB,OAAQD,EAAQ,OAAS,OACzB,SAAUD,EACZ,GAGGE,EAAQR,GAAU,KAAKK,CAAK,GACxB,CACL,EAAG,SAASG,EAAM,CAAC,EAAG,EAAE,EACxB,EAAG,SAASA,EAAM,CAAC,EAAG,EAAE,EACxB,EAAG,SAASA,EAAM,CAAC,EAAG,EAAE,EACxB,EAAGc,GAAoBd,EAAM,CAAC,CAAC,EAC/B,OAAQD,EAAQ,OAAS,OACzB,SAAUD,EACZ,EAGK,IACT,CA0CO,SAASiB,GAAiBC,EAA+B,CAC9D,IAAIC,EAAgB,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACnCC,EAAI,EACJrB,EAEA,OAAA,OAAOmB,GAAgB,SACzBnB,EAAQD,GAAiBoB,CAAW,EAE5BnB,EAAAmB,EAGNnB,IAAU,MAAQ,OAAOA,GAAU,WACjC,MAAOA,EACToB,EAAME,GAAStB,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,EAC/B,MAAOA,IAChBoB,EAAMG,GAASvB,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,GAGtC,MAAOA,IACLqB,EAAAb,GAAeR,EAAM,GAAK,CAAC,EAE3B,OAAO,MAAMqB,CAAC,IACZA,EAAA,IAIFD,EAAApB,GAGD,CAAE,GAAGoB,EAAK,EAAAC,EAAG,OAAQ,OAAQ,SAAUpB,EAAY,CAC5D,CAWgB,SAAAW,GAAaH,EAAoBC,EAAoBC,EAAoB,CAChF,MAAA,CACL,EAAGa,GAAWf,EAAG,EAAG,GAAG,EAAI,IAC3B,EAAGe,GAAWC,GAAaf,CAAC,EAAIgB,GAAgBhB,CAAC,EAAIA,EAAG,EAAG,CAAC,EAC5D,EAAGc,GAAWC,GAAad,CAAC,EAAIe,GAAgBf,CAAC,EAAIA,EAAG,EAAG,CAAC,CAC9D,CACF,CAWgB,SAAAJ,GAAaH,EAAoBC,EAAoBC,EAAoB,CAChF,MAAA,CACL,EAAGkB,GAAWpB,EAAG,EAAG,GAAG,EAAI,IAC3B,EAAGoB,GAAWnB,EAAG,EAAG,GAAG,EAAI,IAC3B,EAAGmB,GAAWlB,EAAG,EAAG,GAAG,EAAI,GAC7B,CACF,CAWgB,SAAAS,GAAaN,EAAoBC,EAAoBI,EAAoB,CAChF,MAAA,CACL,EAAGU,GAAWf,EAAG,EAAG,GAAG,EAAI,IAC3B,EAAGe,GAAWC,GAAaf,CAAC,EAAIgB,GAAgBhB,CAAC,EAAIA,EAAG,EAAG,CAAC,EAC5D,EAAGc,GAAWC,GAAaX,CAAC,EAAIY,GAAgBZ,CAAC,EAAIA,EAAG,EAAG,CAAC,CAC9D,CACF,CASO,SAASN,GAAea,EAAoB,CAC1C,OAAAG,GAAWC,GAAaJ,CAAC,EAAIK,GAAgBL,CAAC,EAAIA,EAAG,EAAG,CAAC,CAClE,CAWgB,SAAAC,GAASb,EAAoBC,EAAoBC,EAA8B,CAC7F,IAAIP,EAAGC,EAAGC,EAGV,GAFE,CAAE,EAAAG,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaH,EAAGC,EAAGC,CAAC,EAEhCD,IAAM,EACRN,EAAIC,EAAIC,EAAIK,MACP,CACC,MAAAgB,EAAIhB,EAAI,GAAM,GAAK,EAAID,GAAKC,EAAID,EAAIC,EAAID,EACxCkB,EAAI,EAAIjB,EAAIgB,EAElBvB,EAAIyB,GAASD,EAAGD,EAAGlB,EAAI,EAAI,CAAC,EACxBJ,EAAAwB,GAASD,EAAGD,EAAGlB,CAAC,EACpBH,EAAIuB,GAASD,EAAGD,EAAGlB,EAAI,EAAI,CAAC,CAAA,CAGzB,OAAAL,GAAA,IACAC,GAAA,IACAC,GAAA,IAEE,CAAE,EAAAF,EAAG,EAAAC,EAAG,EAAAC,EAAG,SAAUL,EAAY,CAC1C,CA4DgB,SAAA6B,GAASrB,EAAoBC,EAAoBC,EAA8B,EAC3F,CAAE,EAAAF,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaH,EAAGC,EAAGC,CAAC,GAE9B,MAAAG,EAAI,IAAO,EAAIH,EAAID,GAAK,EAAI,KAAK,IAAI,EAAIC,EAAI,CAAC,IAE/C,OAAAD,EAAA,GAAKI,EAAIH,GAAMG,EAEb,CAAE,EAAGL,EAAI,IAAK,EAAAC,EAAG,EAAAI,EAAG,SAAUE,EAAY,CACnD,CAWgB,SAAAe,GAAStB,EAAoBC,EAAoBI,EAA8B,EAC3F,CAAE,EAAAL,EAAG,EAAAC,EAAG,EAAAI,CAAA,EAAMC,GAAaN,EAAGC,EAAGI,CAAC,GAE9B,MAAA,EAAI,GAAMA,GAAK,EAAIJ,GAEzB,OAAAA,EAAKI,EAAIJ,GAAM,EAAI,KAAK,IAAI,EAAI,EAAI,CAAC,GAE9B,CAAE,EAAGD,EAAI,IAAK,EAAAC,EAAG,EAAG,SAAUG,EAAY,CACnD,CAWgB,SAAAU,GAASd,EAAoBC,EAAoBI,EAA8B,EAC3F,CAAE,EAAAL,EAAG,EAAAC,EAAG,EAAAI,CAAA,EAAMC,GAAaN,EAAGC,EAAGI,CAAC,GAE/BL,GAAA,EAEC,MAAAxC,EAAI,KAAK,MAAMwC,CAAC,EAChBuB,EAAIvB,EAAIxC,EACR2D,EAAId,GAAK,EAAIJ,GACbiB,EAAIb,GAAK,EAAIkB,EAAItB,GACjBuB,EAAInB,GAAK,GAAK,EAAIkB,GAAKtB,GACvBwB,EAAMjE,EAAI,EAEZ,IAAAmC,EAAI,CAACU,EAAGa,EAAGC,EAAGA,EAAGK,EAAGnB,CAAC,EAAEoB,CAAG,EAC1B7B,EAAI,CAAC4B,EAAGnB,EAAGA,EAAGa,EAAGC,EAAGA,CAAC,EAAEM,CAAG,EAC1B5B,EAAI,CAACsB,EAAGA,EAAGK,EAAGnB,EAAGA,EAAGa,CAAC,EAAEO,CAAG,EAEzB,OAAA9B,GAAA,IACAC,GAAA,IACAC,GAAA,IAEE,CAAE,EAAAF,EAAG,EAAAC,EAAG,EAAAC,EAAG,SAAUL,EAAY,CAC1C,CAWgB,SAAAkC,GAAS/B,EAAoBC,EAAoBC,EAA8B,EAC3F,CAAE,EAAAF,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaH,EAAGC,EAAGC,CAAC,GAEpC,MAAM8B,EAAM,KAAK,IAAIhC,EAAGC,EAAGC,CAAC,EACtB+B,EAAM,KAAK,IAAIjC,EAAGC,EAAGC,CAAC,EAExB,IAAAG,EAEJ,MAAMK,EAAIsB,EACJE,EAAIF,EAAMC,EACV3B,EAAI0B,IAAQ,EAAI,EAAIE,EAAIF,EAE9B,GAAIA,IAAQC,EACN5B,EAAA,MACC,CACL,OAAQ2B,EAAK,CACX,KAAKhC,EAAG,CACNK,GAAKJ,EAAIC,GAAKgC,GAAKjC,EAAIC,EAAI,EAAI,GAC/B,KAAA,CAEF,KAAKD,EAAG,CACDI,GAAAH,EAAIF,GAAKkC,EAAI,EAClB,KAAA,CAEF,KAAKhC,EAAG,CACDG,GAAAL,EAAIC,GAAKiC,EAAI,EAClB,KAAA,CAEF,QACM7B,EAAA,CACN,CAGGA,GAAA,EAAA,CAGP,MAAO,CAAE,EAAAA,EAAG,EAAAC,EAAG,EAAAI,EAAG,SAAUE,EAAY,CAC1C,CAYO,SAASuB,GACdnC,EACAC,EACAC,EACAkC,EAAa,GACb,EACE,CAAE,EAAApC,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaH,EAAGC,EAAGC,CAAC,GAEpC,MAAMmC,EAAM,CACVC,GAAa,KAAK,MAAMtC,EAAI,GAAG,EAAE,SAAS,EAAE,CAAC,EAC7CsC,GAAa,KAAK,MAAMrC,EAAI,GAAG,EAAE,SAAS,EAAE,CAAC,EAC7CqC,GAAa,KAAK,MAAMpC,EAAI,GAAG,EAAE,SAAS,EAAE,CAAC,CAC/C,EAEA,OAAIkC,GAAcG,GAAaF,EAAI,CAAC,CAAC,GAAKE,GAAaF,EAAI,CAAC,CAAC,GAAKE,GAAaF,EAAI,CAAC,CAAC,EAC5EA,EAAI,CAAC,EAAE,OAAO,CAAC,EAAIA,EAAI,CAAC,EAAE,OAAO,CAAC,EAAIA,EAAI,CAAC,EAAE,OAAO,CAAC,EAGvD,IAAMA,EAAI,KAAK,EAAE,CAC1B,CAaO,SAASG,GACdxC,EACAC,EACAC,EACAe,EACAwB,EAAa,GACb,EACE,CAAE,EAAAzC,EAAG,EAAAC,EAAG,EAAAC,CAAA,EAAMC,GAAaH,EAAGC,EAAGC,CAAC,GAEpC,MAAMmC,EAAM,CACVC,GAAa,KAAK,MAAMtC,EAAI,GAAG,EAAE,SAAS,EAAE,CAAC,EAC7CsC,GAAa,KAAK,MAAMrC,EAAI,GAAG,EAAE,SAAS,EAAE,CAAC,EAC7CqC,GAAa,KAAK,MAAMpC,EAAI,GAAG,EAAE,SAAS,EAAE,CAAC,EAC7CoC,GAAaI,GAAoBtC,GAAea,CAAC,CAAC,CAAC,CACrD,EAGE,OAAAwB,GACAF,GAAaF,EAAI,CAAC,CAAC,GACnBE,GAAaF,EAAI,CAAC,CAAC,GACnBE,GAAaF,EAAI,CAAC,CAAC,GACnBE,GAAaF,EAAI,CAAC,CAAC,EAEZA,EAAI,CAAC,EAAE,OAAO,CAAC,EAAIA,EAAI,CAAC,EAAE,OAAO,CAAC,EAAIA,EAAI,CAAC,EAAE,OAAO,CAAC,EAAIA,EAAI,CAAC,EAAE,OAAO,CAAC,EAG1E,IAAMA,EAAI,KAAK,EAAE,CAC1B,CAWO,SAASM,GAASC,EAAeC,EAAeC,EAAS,GAAgB,CAC9E,GAAI,CAACF,GAAU,CAACC,EAAe,MAAA,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACxD,GAAI,CAACD,EAAe,OAAA9B,GAAiB+B,CAAM,EAC3C,GAAI,CAACA,EAAe,OAAA/B,GAAiB8B,CAAM,EAErC,MAAAG,EAAQjC,GAAiB8B,CAAM,EAC/BI,EAAQlC,GAAiB+B,CAAM,EAE/BI,EAAiB7B,GAAW0B,EAAQ,EAAG,CAAC,EACxCI,EAAmBD,EAAiB,EAAI,EAExCE,EAAgBJ,EAAM,EAAIC,EAAM,EAKhCI,IAHJF,EAAmBC,IAAkB,GACjCD,GACCA,EAAmBC,IAAkB,EAAID,EAAmBC,IACtC,GAAK,EAC5BE,EAAU,EAAID,EAEb,MAAA,CACL,EAAG,KAAK,MAAML,EAAM,EAAIK,EAAUJ,EAAM,EAAIK,CAAO,EACnD,EAAG,KAAK,MAAMN,EAAM,EAAIK,EAAUJ,EAAM,EAAIK,CAAO,EACnD,EAAG,KAAK,MAAMN,EAAM,EAAIK,EAAUJ,EAAM,EAAIK,CAAO,EACnD,EAAG,KAAK,MAAMN,EAAM,EAAIE,EAAiBD,EAAM,GAAK,EAAIC,EAAe,EACvE,OAAQ,OACR,SAAUpD,EACZ,CACF,CAUgB,SAAAyD,GAAY1D,EAAc2D,EAAwB,CAC1D,MAAAC,EAAO1C,GAAiBlB,CAAK,EAE9B,OAAA4D,EAAA,EAAIpD,GAAemD,CAAK,EAEtBC,CACT,CA6CO,SAASC,GACdC,EACAC,EAAY,GACZrH,EAAkB,MAClB,CACA,MAAM+D,EAAI,KAAK,MAAM,KAAK,SAAW,GAAG,EAClCC,EAAI,KAAK,MAA0B,GAAK,KAAK,OAAO,EAAI,EAA4B,EAAI,IACxFC,EAAI,KAAK,MAA0B,GAAK,KAAK,OAAO,EAAI,EAA4B,EAAI,IAE9F,GAAIjE,IAAS,MACX,OAAOmE,GAAY,KAAK,CAAE,EAAAJ,EAAG,EAAAC,EAAG,EAAAC,CAAA,CAAG,EAAE,EAGnC,IAAAX,EAEA,GAAAtD,IAAS,OAASA,IAAS,OAG7B,GAFQsD,EAAAsB,GAASb,EAAGC,EAAGC,CAAC,EAEpBjE,IAAS,MAAO,CAClB,KAAM,CAAE,EAAA0D,EAAG,EAAAC,EAAG,EAAAC,CAAM,EAAAN,EAEpB,OAAO+D,EAAYnB,GAAUxC,EAAGC,EAAGC,EAAG,KAAK,OAAO,CAAC,EAAIiC,GAASnC,EAAGC,EAAGC,CAAC,CAAA,OAEhE5D,IAAS,QACVsD,EAAA8B,GAASrB,EAAGC,EAAGC,CAAC,GAG1B,OAAIoD,IACA/D,EAAoB,EAAI,KAAK,OAAO,GAGjCA,EAAM,SAAS,CACxB,CAUO,SAASgE,GAAgBD,EAAY,GAAOrH,EAAkB,MAAO,CACnE,OAAAmH,GAAkB,OAAQE,EAAWrH,CAAI,CAClD,CAyBA,SAASgG,GAAauB,EAAa,CACjC,OAAOA,EAAI,SAAW,EAAI,IAAIA,CAAG,GAAKA,EAAI,SAAS,CACrD,CAEA,SAAStB,GAAapE,EAAyB,CAC7C,OAAOA,EAAO,OAAO,CAAC,IAAMA,EAAO,OAAO,CAAC,CAC7C,CAMA,SAASuE,GAAoBoB,EAAiC,CACrD,OAAA,KAAK,MAAM,WAAWA,CAAgB,EAAI,GAAG,EAAE,SAAS,EAAE,CACnE,CAEA,SAASjD,GAAoBwB,EAAqB,CACzC,OAAA,SAASA,EAAK,EAAE,EAAI,GAC7B,CAEA,SAASjB,GAAW0C,EAAyB7B,EAAaD,EAAqB,CACtE,OAAA,KAAK,IAAIC,EAAK,KAAK,IAAID,EAAK,WAAW8B,CAAgB,CAAC,CAAC,CAClE,CAEA,SAASrC,GAASD,EAAWD,EAAWM,EAAmB,CAGzD,OAFIA,EAAI,IAAQA,GAAA,GACZA,EAAI,IAAQA,GAAA,GACZA,EAAI,EAAI,EAAUL,GAAKD,EAAIC,GAAK,EAAIK,EACpCA,EAAI,EAAI,EAAUN,EAClBM,EAAI,EAAI,EAAUL,GAAKD,EAAIC,IAAM,EAAI,EAAIK,GAAK,EAE3CL,CACT,CAEA,SAASH,GAAa0C,EAAmC,CACvD,OAAO,OAAOA,CAAO,EAAE,KAAK,EAAE,SAAS,GAAG,CAC5C,CAEA,SAASzC,GAAgByC,EAAkC,CACnD,MAAAD,EAAS,WAAWC,CAAiB,EAAI,IAE/C,OAAO,OAAO,MAAMD,CAAM,EAAI,EAAIA,CACpC,CAEA,SAASjE,IAAuB,CAC1B,OAAApD,GAAU,KAAK,CAAC,GAAK,KAAK,GAAK,GAAK,KAAK,EAAI,EACxC,QAAQ,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,IAGjD,OAAO,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,GAC5C,CAEA,SAASgE,IAAuB,CAC9B,MAAMH,EAAI,GAAG,KAAK,EAAI,GAAG,IACnBC,EAAI,GAAG,KAAK,EAAI,GAAG,IAErB,OAAA9D,GAAU,KAAK,CAAC,GAAK,KAAK,GAAK,GAAK,KAAK,EAAI,EACxC,QAAQ,KAAK,CAAC,KAAK6D,CAAC,KAAKC,CAAC,KAAK,KAAK,CAAC,IAGvC,OAAO,KAAK,CAAC,KAAKD,CAAC,KAAKC,CAAC,GAClC,CAEA,SAASK,IAAuB,CAC9B,MAAMN,EAAI,GAAG,KAAK,EAAI,GAAG,IACnBI,EAAI,GAAG,KAAK,EAAI,GAAG,IAErB,OAAAjE,GAAU,KAAK,CAAC,GAAK,KAAK,GAAK,GAAK,KAAK,EAAI,EACxC,QAAQ,KAAK,CAAC,KAAK6D,CAAC,KAAKI,CAAC,KAAK,KAAK,CAAC,IAGvC,OAAO,KAAK,CAAC,KAAKJ,CAAC,KAAKI,CAAC,GAClC,CCjkCA,IAAIsD,GAAc,EAEX,SAASC,IAAiB,CACxB,OAAAD,IACT,CC+BA,SAASE,GAAOC,EAAa,CAC3B,OAAOA,EAAM,CAACA,CAChB,CAYgB,SAAAC,GAAapG,EAAgBiE,EAAM,EAAW,CAC5D,MAAMoC,EAAiB,IAAI,MAAMrG,EAAS,CAAC,EAAE,KAAK,CAAC,EAE1C,SAAAsG,EAAIC,EAAeC,EAAe,CACrC,GAAA,GAACA,GAASD,GAASvG,GAIvB,IAFSuG,GAAA,EAEFA,GAASvG,GACdqG,EAAKE,CAAK,GAAKC,EACfD,GAASL,GAAOK,CAAK,CACvB,CAGO,SAAAE,EAAIF,EAAQvG,EAAQ,CACvB,GAAAuG,GAAS,EAAU,MAAA,GACnBA,EAAQvG,IAAgBuG,EAAAvG,GAE5B,IAAIyG,EAAMF,EAAQtC,EAElB,KAAOsC,EAAQ,GACbE,GAAOJ,EAAKE,CAAK,EACjBA,GAASL,GAAOK,CAAK,EAGhBE,OAAAA,CAAA,CAGT,SAASC,EAAIH,EAAe,CAC1B,OAAOE,EAAIF,EAAQ,CAAC,EAAIE,EAAIF,CAAK,CAAA,CAGnC,SAASI,EAAWC,EAAgB,CAClC,IAAIC,EAAO,EACPC,EAAQ9G,EAEZ,KAAO8G,EAAQD,GAAM,CACnB,MAAME,EAAS,KAAK,OAAOF,EAAOC,GAAS,CAAC,EACtCE,EAAQP,EAAIM,CAAM,EAExB,GAAIC,EAAQJ,EAAQ,CACVE,EAAAC,EACR,QAAA,SACSC,EAAQJ,EAAQ,CACzB,GAAIC,IAASE,EACX,OAAON,EAAII,EAAO,CAAC,GAAKD,EAASC,EAAO,EAAIA,EAGvCA,EAAAE,CAAA,KAEA,QAAAA,CACT,CAGK,OAAAF,CAAA,CAGT,MAAO,CAAE,KAAAR,EAAM,IAAAC,EAAK,IAAAG,EAAK,IAAAC,EAAK,WAAAC,CAAW,CAC3C,CCzGO,MAAMM,GAAW,0CAYR,SAAAC,GAAc7I,EAAgB8I,EAAS,GAAO,CACxD,OAAA,OAAO9I,GAAU,SACZ,CAAC,OAAO,MAAMA,CAAK,EAGxB8I,EACKF,GAAS,KAAK,OAAO5I,CAAK,CAAC,EAG7B,CAAC,OAAO,MAAM,WAAWA,CAAe,CAAC,GAAK,CAAC,OAAO,MAAM,OAAOA,CAAK,CAAC,CAClF,CASO,SAAS+I,GAAS/I,EAAgB,CACnC,IAAAyH,EAAS,WAAWzH,CAAe,EAEnC,OAAA,OAAO,MAAMyH,CAAM,IACrBA,EAAS,OAAOzH,CAAK,GAGhB,OAAO,MAAMyH,CAAM,EAAI,EAAIA,CACpC,CAUgB,SAAAuB,GAAcvB,EAAgB9F,EAAgB,CAK5D,MAAO,GAAG8F,EAAS,EAAI,IAAM,EAAE,GAAG,OAAO,KAAK,IAAI,KAAK,MAAMA,CAAM,CAAC,CAAC,EAAE,SAAS9F,EAAQ,GAAG,CAAC,EAC9F,CASO,SAASsH,GAAaxB,EAAgB,CACpC,OAAAuB,GAAcvB,EAAQ,CAAC,CAChC,CASO,SAASyB,GAAczB,EAAyB,CAErD,MAAM0B,EAAS1B,EAAO,SAAS,EAAE,MAAM,MAAM,EACvC2B,GAAOD,EAAO,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,GAAK,IAAI,OAAS,EAAEA,EAAO,CAAC,GAAK,GAE7D,OAAAC,EAAM,EAAIA,EAAM,CACzB,CAiDgB,SAAAC,GAAQ5B,EAAgB6B,EAAiB,CACvDA,EAAU,KAAK,IAAI,KAAK,MAAMA,CAAO,EAAG,CAAC,EAEzC,IAAIC,EAAO9B,EAAO,QAAQyB,GAAczB,CAAM,CAAC,EAEzC,MAAA+B,EAAWD,EAAK,QAAQ,GAAG,EAE7B,GAAAC,IAAa,GAAW,OAAA/B,EAE5B,MAAMgC,EAAOF,EAAK,QAAQ,IAAK,EAAE,EAAE,MAAM,EAAE,EACrCG,EAAYF,EAAWF,EAGzB,OAFUG,EAAKC,CAAS,GAIxBH,EAAK,OAAOG,EAAY,CAAC,IAAM,IACjCH,EAAOA,EAAK,UAAU,EAAGG,EAAY,CAAC,EAAI,IAE1CH,EAAOA,EAAK,UAAU,EAAGG,EAAY,CAAC,EAGjC,WAAW,OAAOH,CAAI,EAAE,QAAQD,CAAO,CAAC,GAR5B7B,CASrB,CAWgB,SAAAkC,GAAclC,EAAgBmC,EAAkBN,EAAiB,CACxE,OAAAD,GAAQ5B,EAASmC,EAAUN,CAAO,CAC3C,CAiCgB,SAAAvE,GAAW0C,EAAyB7B,EAAaD,EAAa,CACrE,OAAA,KAAK,IAAIC,EAAK,KAAK,IAAID,EAAK,WAAW8B,CAAgB,CAAC,CAAC,CAClE,CAWO,SAASoC,GAAYpC,EAAgBqC,EAAkBC,EAAQ,EAAG,CACvE,GAAItC,GAAU,GAAKqC,GAAY,EAAG,MAAO,CAACrC,CAAM,EAE5CsC,EAAQ,IACFA,EAAA,KAGV,MAAMC,EAAuB,CAAC,EAC9B,IAAIC,EAAQ,EAEL,KAAAxC,GAAUqC,GAAYG,EAAQF,GACxBC,EAAA,KAAKvC,EAASqC,CAAQ,EACxBrC,EAAA,KAAK,MAAMA,EAASqC,CAAQ,EACnC,EAAAG,EAGJ,OAAAD,EAAW,KAAKvC,CAAM,EAEfuC,EAAW,QAAQ,CAC5B,CAwHgB,SAAAE,GAAOvE,EAAaC,EAAM,EAAG,CACvC,OAAAA,IAAQD,EAAYC,GAEpBA,EAAMD,IACP,CAACC,EAAKD,CAAG,EAAI,CAACA,EAAKC,CAAG,GAGlB,KAAK,OAAA,GAAYD,EAAMC,GAAOA,EACvC,CAegB,SAAAuE,GAAY1C,EAAyB2C,EAAY,GAAI,CACnE,MAAO,CAAC,WAAW,OAAO3C,CAAM,EAAE,YAAY2C,CAAS,CAAC,CAC1D,CAEA,SAASC,GAAY5C,EAAyB,CACtC,MAAA8B,EAAO,OAAO9B,CAAM,EAE1B,GAAI,CAAC8B,EAAK,SAAS,GAAG,EACpB,OAAO,OAAOA,EAAK,QAAQ,IAAK,EAAE,CAAC,EAG/B,MAAAe,EAAUpB,GAAczB,CAAM,EAE7B,OAAA6C,EAAU,EAAIH,GAAY,OAAO1C,CAAM,EAAI,IAAM6C,CAAO,EAAI,OAAO7C,CAAM,CAClF,CAOA,SAAS8C,GAAgBC,EAAiE,CACxF,MAAO,IAAIC,IAAiC,CACtC,IAAAC,EAASD,EAAQ,CAAC,EAEb,QAAAjJ,EAAI,EAAG4H,EAAMqB,EAAQ,OAAQjJ,EAAI4H,EAAK,EAAE5H,EAC/CkJ,EAASF,EAAUE,EAAQD,EAAQjJ,CAAC,CAAC,EAGhC,OAAAkJ,CACT,CACF,CASO,MAAMC,GAAQJ,GAAgB,CAACK,EAASC,IAAY,CACnD,MAAAC,EAAOT,GAAYO,CAAO,EAC1BG,EAAOV,GAAYQ,CAAO,EAC1BG,EAAO9B,GAAc0B,CAAO,EAAI1B,GAAc2B,CAAO,EAG3D,OAFYC,EAAOC,EAEN,IAAMC,CACrB,CAAC,EASYC,GAAOV,GAAgB,CAACK,EAASC,IAAY,CAClD,MAAAG,EAAO,IAAM,KAAK,IAAI9B,GAAc0B,CAAO,EAAG1B,GAAc2B,CAAO,CAAC,EAE1E,OAAQF,GAAMC,EAASI,CAAI,EAAIL,GAAME,EAASG,CAAI,GAAKA,CACzD,CAAC,EASYE,GAAQX,GAAgB,CAACK,EAASC,IAAY,CACnD,MAAAG,EAAO,IAAM,KAAK,IAAI9B,GAAc0B,CAAO,EAAG1B,GAAc2B,CAAO,CAAC,EAE1E,OAAQF,GAAMC,EAASI,CAAI,EAAIL,GAAME,EAASG,CAAI,GAAKA,CACzD,CAAC,EC1bYG,GAAyB,IAEzBC,GAAoB,GAGpBC,GAAyBD,GAAoBD,GAE7CG,GAAkB,GAClBC,GAAkBD,GAAkBF,GAGpCI,GAAuBD,GAAkBJ,GAEzCM,GAAe,GACfC,GAAiBD,GAAeH,GAChCK,GAAiBD,GAAiBN,GAElCQ,GAAeD,GAAiBR,GAChCU,GAAsBF,GAAiBR,GAEvCW,GAAe,EACfC,GAAgBD,GAAeL,GAC/BO,GAAkBD,GAAgBT,GAClCW,GAAkBD,GAAkBZ,GAEpCc,GAAgBD,GAAkBd,GAczCgB,GAAyB,CAC7B,EAAEC,EAAM1I,EAAO,CACP,MAAA2I,EAAOD,EAAK,YAAY,EAE9B,OAAO1I,EAAM,SAAW,EAAI2I,EAAQA,EAAO,IAAQ,GACrD,EACA,EAAED,EAAM1I,EAAO,CACP,MAAA4I,EAAQF,EAAK,SAAA,EAAa,EAEhC,OAAO1I,EAAM,SAAW,EAAIuF,GAAaqD,CAAK,EAAIA,CACpD,EACA,EAAEF,EAAM1I,EAAO,CACP,MAAA6I,EAAMH,EAAK,QAAQ,EAEzB,OAAO1I,EAAM,SAAW,EAAIuF,GAAasD,CAAG,EAAIA,CAClD,EACA,EAAEH,EAAM1I,EAAO,CACP,MAAA8I,EAAOJ,EAAK,SAAS,EAE3B,OAAO1I,EAAM,SAAW,EAAIuF,GAAauD,CAAI,EAAIA,CACnD,EACA,EAAEJ,EAAM1I,EAAO,CACP,MAAA+I,EAASL,EAAK,WAAW,EAE/B,OAAO1I,EAAM,SAAW,EAAIuF,GAAawD,CAAM,EAAIA,CACrD,EACA,EAAEL,EAAM1I,EAAO,CACP,MAAAgJ,EAASN,EAAK,WAAW,EAE/B,OAAO1I,EAAM,SAAW,EAAIuF,GAAayD,CAAM,EAAIA,CACrD,EACA,EAAEN,EAAM1I,EAAO,CACb,MAAMiJ,EAAU,KAAK,MAAMP,EAAK,SAAS,EAAI,GAAK,CAAC,EAEnD,OAAO1I,EAAM,SAAW,EAAIuF,GAAa0D,CAAO,EAAIA,CAAA,CAExD,EAEMC,GAAe,oBACfC,GAAkB,WAUR,SAAAC,GAAOC,EAAejE,EAAS,GAAO,CAC9C,MAAAsD,EAAO,IAAI,KAAKW,CAAG,EAEzB,GAAIjE,GAAU,OAAO,MAAM,CAACsD,CAAI,EACxB,MAAA,IAAI,WAAW,oBAAoB,EAG3C,OAAI,OAAOW,GAAQ,UAAY,CAACA,EAAI,SAAS,GAAG,IAC9CX,EAAK,SAAS,CAAC,EACfA,EAAK,WAAW,CAAC,EACjBA,EAAK,WAAW,CAAC,GAGZA,CACT,CAoBgB,SAAAY,GAAOZ,EAAgBa,EAAU,sBAAuB,CACtEb,EAAOU,GAAOV,CAAI,EAEZ,MAAAc,EAAUD,EAAQ,MAAML,EAAY,EACpCjL,EAASuL,GAAA,YAAAA,EAAS,OAExB,GAAI,CAACvL,EACI,OAAAsL,EAGT,IAAIzL,EAAI,EACJkJ,EAAS,GAEb,KAAOlJ,EAAIG,GAAQ,CACX,MAAAwL,EAAaD,EAA6B1L,CAAC,EAC3C4L,EAAiBD,EAAU,CAAC,EAC5BE,EAAYlB,GAAWiB,CAAc,EAEvCC,EACQ3C,GAAA2C,EAAUjB,EAAMe,CAAS,EAEzBzC,GAAAyC,EAGV,EAAA3L,CAAA,CAGG,OAAAkJ,EAAO,QAAQmC,GAAiB,IAAI,CAC7C,CASO,SAASS,GAAQlB,EAAgB,CACtC,OAAAA,EAAOU,GAAOV,CAAI,EAEX,GAAGnD,GAAamD,EAAK,SAAA,CAAU,CAAC,IAAInD,GAAamD,EAAK,YAAY,CAAC,IAAInD,GAC5EmD,EAAK,WAAW,CAAA,CACjB,EACH,CA2GgB,SAAAmB,GAAQnB,EAAgBoB,EAAgB,CACtD,OAAApB,EAAOU,GAAOV,CAAI,EAClBoB,EAAS,CAAC,CAACA,EAEXpB,EAAK,QAAQA,EAAK,QAAQ,EAAIoB,CAAM,EAE7BpB,CACT,CAsEO,SAASqB,GAAUpM,EAAiBD,EAAO,GAAIE,EAAO,EAAG,CAC9DD,EAAQyL,GAAOzL,CAAK,EAEpB,MAAMqM,EAAoB,CAAC,EAE3B,QAASlM,EAAI,EAAGA,EAAIJ,EAAM,EAAEI,EAC1BkM,EAAU,KAAKH,GAAQlM,EAAOG,EAAIF,CAAI,CAAC,EAGlC,OAAAoM,CACT,CAqFO,SAASC,GAAWvB,EAAgB,CACzC,OAAAA,EAAOU,GAAOV,CAAI,EAClBA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EAEjBA,CACT,CASO,SAASwB,GAASxB,EAAgB,CACvC,OAAAA,EAAOU,GAAOV,CAAI,EAClBA,EAAK,SAAS,GAAI,GAAI,GAAI,GAAG,EAEtBA,CACT,CAUgB,SAAAyB,GAAYzB,EAAgB0B,EAAU,EAAG,CACvDA,EAAUA,EAAU,EAEhBA,EAAU,IACDA,GAAA,GAGb1B,EAAOU,GAAOV,CAAI,EAEZ,MAAAG,EAAMH,EAAK,OAAO,EAClB2B,GAAcxB,EAAMuB,EAAU,EAAI,GAAKvB,EAAMuB,EAEnD,OAAA1B,EAAK,QAAQA,EAAK,QAAQ,EAAI2B,CAAU,EACxC3B,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EAEjBA,CACT,CASO,SAAS4B,GAAW3B,EAAc,CACvC,OAAQA,EAAO,IAAM,GAAKA,EAAO,MAAQ,GAAMA,EAAO,MAAQ,CAChE,CAUgB,SAAA4B,GAAkB5B,EAAcC,EAAe,CACzD,IAAA4B,EAEJ,OAAI5B,EAAQ,EACNA,IAAU,EACZ4B,EAAU,GAAM5B,EAAQ,EAEpB0B,GAAW3B,CAAI,EACP6B,EAAA,GAEAA,EAAA,GAIdA,EAAU,GAAM5B,EAAQ,EAGnB4B,CACT,CAUgB,SAAAC,GAAa/B,EAAgB0B,EAAU,EAAG,CACxD1B,EAAOU,GAAOV,CAAI,EAEZ,MAAAC,EAAOD,EAAK,YAAY,EACxBE,EAAQF,EAAK,SAAA,EAAa,EAC1BG,EAAMH,EAAK,QAAQ,EAEnB8B,EAAUD,GAAkB5B,EAAMC,CAAK,EAE7C,OAAAwB,EAAUA,EAAUI,EAEhBJ,EAAU,IACDA,GAAAI,GAGT3B,EAAMuB,GACH1B,EAAA,SAASE,EAAQ,CAAC,EAGzBF,EAAK,QAAQ0B,CAAO,EACpB1B,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EAEjBA,CACT,CAiHgB,SAAAgC,GAAe5F,EAAgBC,EAAiB,CAC9D,OAAAD,EAAOmF,GAAWnF,CAAI,EACtBC,EAAQkF,GAAWlF,CAAK,GAEhBA,EAAM,QAAA,EAAYD,EAAK,QAAa,GAAAoD,EAC9C,CAWO,SAASyC,GAAgB7F,EAAgBC,EAAiB6F,EAAc,EAAG,CACzE,OAAA9F,EAAAqF,GAAYrF,EAAM8F,CAAW,EAC5B7F,EAAAoF,GAAYpF,EAAO6F,CAAW,GAE9B7F,EAAM,QAAA,EAAYD,EAAK,QAAa,GAAA0D,EAC9C,CCxqBO,SAASqC,GAAaC,EAAQvM,EAA4B,GAAO,CACtE,GAAIuM,GAAO,MAAQ,OAAOA,GAAQ,SACzB,OAAAA,EAGH,KAAA,CAAE,YAAAC,EAAczN,EAAA,EAASiB,EACzByM,EAAc,OAAA,OAAO,IAAI,EAGzBC,EAID,CACH,CACE,OAAQD,EACR,KAAM,OACN,KAAMF,CAAA,CAEV,EAEMI,MAAmB,QACnBC,EAA8C,CAAC,EAC/CC,EAA8C,CAAC,EAErD,KAAOH,EAAS,QAAQ,CAEtB,KAAM,CAAE,OAAAI,EAAQ,KAAAC,EAAM,KAAAC,CAAK,EAAIN,EAAS,IAAI,EAE5C,GAAI,CAACI,EAAQ,SAEP,MAAA9O,EAAOwB,GAAQwN,CAAI,EAEzB,GAAIhP,IAAS,OAAQ,CACnB8O,EAAOC,CAAI,EAAI,IAAI,KAAKC,CAAY,EACpC,QAAA,CAGF,GAAIhP,IAAS,QAAS,CACd,MAAAyK,EAAS+D,EAAYxO,EAAMgP,CAAI,EAErC,GAAIvE,GAAU,KAAM,CAClBqE,EAAOC,CAAI,EAAItE,EACf,QAAA,CACF,CAIF,MAAMwE,EAAeH,EAAOC,CAAI,EAC9B/O,IAAS,SAAWA,IAAS,OAASA,IAAS,MAAQ,CAAA,EAAK,OAAO,OAAO,IAAI,EAE5E,GAAAA,IAAS,OAASA,IAAS,MAAO,CACpC,IAAIuB,EAAI,EAER,GAAIvB,IAAS,MAAO,CAClB,UAAWkP,KAAQF,EACbL,EAAa,IAAIO,CAAI,EACvBD,EAAO1N,CAAC,EAAIoN,EAAa,IAAIO,CAAI,EACxBA,IAAS,MAAQ,OAAOA,GAAS,SAC1CR,EAAS,KAAK,CACZ,OAAQO,EACR,KAAM1N,EACN,KAAM2N,CAAA,CACP,EAEDD,EAAO1N,CAAC,EAAI2N,EAGZ,EAAA3N,EAGJqN,EAAS,KAAK,CAAE,OAAAE,EAAQ,KAAAC,CAAA,CAAM,CAAA,KACzB,CACL,UAAWI,KAASH,EAAM,CACxB,MAAMI,EAAc,CAAC,EACjB7N,EAAA,EAEJ,UAAW2N,KAAQC,EACbR,EAAa,IAAIO,CAAI,EACvBE,EAAY7N,CAAC,EAAIoN,EAAa,IAAIO,CAAI,EAC7BA,IAAS,MAAQ,OAAOA,GAAS,SAC1CR,EAAS,KAAK,CACZ,OAAQU,EACR,KAAM7N,EACN,KAAM2N,CAAA,CACP,EAEDE,EAAY7N,CAAC,EAAI2N,EAGjB,EAAA3N,EAGJ0N,EAAO,KAAKG,CAAW,CAAA,CAGzBP,EAAS,KAAK,CAAE,OAAAC,EAAQ,KAAAC,CAAA,CAAM,CAAA,CAChC,KAEA,WAAW7O,KAAO,OAAO,KAAK8O,CAAI,EAAG,CAC7B,MAAAE,EAAOF,EAAK9O,CAAG,EAGjByO,EAAa,IAAIO,CAAI,EACvBD,EAAO/O,CAAG,EAAIyO,EAAa,IAAIO,CAAI,EAC1BA,IAAS,MAAQ,OAAOA,GAAS,SAC1CR,EAAS,KAAK,CACZ,OAAQO,EACR,KAAM/O,EACN,KAAMgP,CAAA,CACP,EAEDD,EAAO/O,CAAG,EAAIgP,CAChB,CAISP,EAAA,IAAIK,EAAMC,CAAM,CAAA,CAG/B,SAAW,CAAE,OAAAH,EAAQ,KAAAC,CAAK,IAAKH,EAC7BE,EAAOC,CAAI,EAAI,IAAI,IAAID,EAAOC,CAAI,CAAC,EAGrC,SAAW,CAAE,OAAAD,EAAQ,KAAAC,CAAK,IAAKF,EAC7BC,EAAOC,CAAI,EAAI,IAAI,IAAID,EAAOC,CAAI,CAAC,EAGrC,OAAON,EAAK,IACd,CCtJA,MAAMY,GAAiB,oDACjBC,GAAa,IAAM,GAQT,SAAAC,GAAcC,EAAaC,EAAUJ,GAAgB,CACnE,MAAMK,EAAiB,IAAM,CACrB,MAAA,IAAI,MAAMD,CAAO,CACzB,EAEA,OAAO,KAAKD,CAAM,EAAE,QAAgBG,GAAA,CAC9B,OAAOH,EAAOG,CAAI,GAAM,WAC1BH,EAAOG,CAAI,EAAID,EAAe,KAAKF,CAAM,EAEzCA,EAAOG,CAAI,EAAI,IACjB,CACD,EAED,OAAO,oBAAoBH,EAAO,YAAY,SAAS,EAAE,QAAgBG,GAAA,CACnEA,IAAS,eAAiB,OAAOH,EAAOG,CAAI,GAAM,aACpDH,EAAOG,CAAI,EAAID,EAAe,KAAKF,CAAM,EAC3C,CACD,EAEDA,EAAO,YAAcF,EACvB,CCTO,MAAMM,GAAYjQ,KAAa,iBAAkB,QAAUkQ,KAAsB,GAI3EC,GAAaF,GAAY,cAAgB,QAEtD,SAASC,IAAoB,CAC3B,OAAO,OAAO,UAAc,MACxB,UAAU,gBAAoB,UAAkB,mBAA+B,CAErF,CAWO,SAASE,GAAcC,EAAaC,EAAuBC,EAAQ,OAAO,MAAO,CAChF,KAAA,CAAE,KAAAlQ,EAAM,QAAAmQ,EAAU,GAAO,WAAAC,EAAa,GAAO,GAAGpB,GAASiB,EAE/D,GAAI,CAAC9P,GAAUH,CAAI,GAAKA,IAAS,GAAW,MAAA,GAExC,IAAAqQ,EAEA,OAAAlQ,GAAU+P,CAAK,EACjBG,EAAQ,IAAIH,EAAMlQ,EAAM,CAAE,QAAAmQ,EAAS,WAAAC,EAAY,GAEvCC,EAAA,SAAS,YAAY,YAAY,EACnCA,EAAA,UAAUrQ,EAAMmQ,EAASC,CAAU,GAGpC,OAAA,OAAOC,EAAOrB,CAAI,EAElBgB,EAAG,cAAcK,CAAK,CAC/B,CCrDA,MAAMC,GAAmB,CACvB,SACA,wBACA,QACA,SACA,WACA,aACA,mBACF,EACG,IAAStM,GAAA,GAAGA,CAAC,iCAAiC,EAC9C,KAAK,IAAI,EAEZ,SAASpD,GAAUoP,EAAwC,CACzD,MAAO,CAAC,CAACA,GAAMA,EAAG,WAAa,CACjC,CAEA,SAASO,GAAcP,EAAqB,CAC1C,OAAOpP,GAAUoP,CAAE,EAAIA,EAAK,SAAS,IACvC,CAUgB,SAAAQ,GAASC,EAAkBC,EAAuB,CAChE,MAAI,CAAC/Q,IAAY,CAAC8Q,EAAiB,CAAC,EAE7B,MAAM,KAAKF,GAAcG,CAAI,EAAE,iBAAiBD,CAAQ,CAAC,CAClE,CA2BgB,SAAAE,GAASX,EAAqBlB,EAA6B,CACzE,GAAI,CAACkB,GAAM,CAAClB,EAAe,MAAA,GAE3B,MAAM8B,EAAO9B,EAAwB,kBAE9B,OAAAA,EAAO,SAASkB,CAAE,GAAM,CAAC,CAACY,IAAQA,IAAQZ,GAAMY,EAAI,SAASZ,CAAE,EACxE,CASO,SAASa,GAASb,EAAqB,CAKxC,GAJA,CAACrQ,IAAY,CAACiB,GAAUoP,CAAE,GAAK,CAACA,EAAG,YAAc,CAACW,GAASX,EAAI,SAAS,IAAI,GAI5EA,EAAG,MAAM,UAAY,OAChB,MAAA,GAGH,MAAAc,EAAOd,EAAG,sBAAsB,EAEtC,MAAO,EAAEc,GAAQA,EAAK,MAAQ,GAAKA,EAAK,OAAS,EACnD,CASO,SAASC,GAAUf,EAAqB,CACtC,MAAA,CAACa,GAASb,CAAE,CACrB,CASO,SAASgB,GAAWhB,EAAqB,CAC9C,MACE,CAACpP,GAAUoP,CAAE,GACZA,EAAG,aAAa,UAAU,GAAKA,EAAG,aAAa,UAAU,IAAM,SAC/DA,EAAwB,QAE7B,CAUgB,SAAAiB,GAAcP,EAAoBQ,EAAkB,GAAO,CACnE,MAAAC,EAAQD,EAAkB,IAAM,GAAQF,GAEvC,OAAAR,GAASF,GAAkBI,CAAI,EAAE,OACtCV,GAAMe,GAAUf,CAAE,GAAKA,EAAG,SAAW,IAAM,CAACmB,EAAMnB,CAAE,CACtD,CACF,CASO,SAASoB,GAAYpB,EAAwB,CAClD,GAAI,CAACrQ,IAAY,CAACqQ,EAAW,MAAA,GAEvB,MAAAqB,EAAgB,iBAAiBrB,CAAE,EAGzC,OAFgB,WAAWqB,EAAc,WAAW,EAAI,WAAWA,EAAc,YAAY,GAE3E,CACpB,CA0EO,SAASC,GAAWtB,EAAwB,CACjD,GAAI,CAACrQ,IAAY,CAACqQ,EAAW,MAAA,GAEvB,MAAAqB,EAAgB,iBAAiBrB,CAAE,EAIzC,OAFE,WAAWqB,EAAc,cAAc,EAAI,WAAWA,EAAc,iBAAiB,GAEvE,CAClB,CASO,SAASE,GAAcvB,EAAwB,CACpD,GAAI,CAACrQ,IAAY,CAACqQ,EAAW,MAAA,GAEvB,MAAA9O,EAAQ,SAAS,YAAY,EAE7BA,EAAA,SAAS8O,EAAI,CAAC,EACpB9O,EAAM,OAAO8O,EAAIA,EAAG,WAAW,MAAM,EAE/B,MAAAwB,EAAatQ,EAAM,sBAAA,EAAwB,MAC3CuQ,EAAWL,GAAYpB,CAAE,EAE/B,OAAOwB,EAAaC,CACtB,CASO,SAASC,GAAU3R,EAAwB,CAChD,OAAO6I,GAAc7I,EAAO,EAAI,EAAI,GAAG+I,GAAS/I,CAAK,CAAC,KAAO,OAAOA,CAAK,EAAE,KAAK,CAClF,CAWO,SAAS4R,GAAY5R,EAA0C,CACpE,OAAOI,GAAUJ,CAAK,GAAKA,IAAU,GAAQ,OAAOA,CAAK,EAAI,MAC/D,CCxOO,SAAS6R,IAAqB,CAC7B,MAAAC,MAAkC,IAEjC,MAAA,CACL,GAAG7R,EAAM8R,EAAS,CACV,MAAAC,EAAWF,EAAW,IAAI7R,CAAI,GACtB+R,GAAA,YAAAA,EAAU,IAAID,KAG1BD,EAAW,IAAI7R,EAAM,IAAI,IAAI,CAAC8R,CAAO,CAAC,CAAC,CAE3C,EACA,IAAI9R,EAAM8R,EAAS,CACX,MAAAC,EAAWF,EAAW,IAAI7R,CAAI,EAEhC+R,GACFA,EAAS,OAAOD,CAAO,CAE3B,EACA,MAAM9R,EAAM,CACJ,MAAA+R,EAAWF,EAAW,IAAI7R,CAAI,EAEhC+R,GACFA,EAAS,MAAM,CAEnB,EACA,UAAW,CACTF,EAAW,MAAM,CACnB,EACA,KAAK7R,KAASiQ,EAAS,CACf,MAAA8B,EAAWF,EAAW,IAAI7R,CAAI,EAEhC+R,GACFA,EAAS,QAAmBD,GAAA,CAC1BA,EAAQ,GAAG7B,CAAO,CAAA,CACnB,CACH,CAEJ,CACF,CCnFA,SAAS+B,GAAQvC,EAAiBwC,EAAoBC,EAAiC,CACrED,EAAM,IAAIxC,CAAO,IAC/ByC,EAAMzC,CAAO,EACbwC,EAAM,IAAIxC,CAAO,EAErB,CAcA,MAAM0C,OAAgB,IAQf,SAASC,GAAS3C,EAAiByC,EAAQ,QAAQ,KAAM,CACtDF,GAAAvC,EAAS0C,GAAWD,CAAK,CACnC,CC3BO,MAAMG,GAAM1S,GACf,sBACC2S,GAA6B,CAC9B,WAAWA,EAAI,EAAE,CACnB,EAUc,SAAAC,GACdC,EACAC,EAAW,GACuB,CAC9B,GAAA,OAAOD,GAAW,WACb,OAAAzR,GAGH,MAAA2R,EAAS,IAAIC,IAAwB,CACzCH,EAAO,GAAGG,CAAI,CAChB,EAEA,GAAIF,GAAY,EACd,OAAOG,GAAcF,CAAM,EAG7B,IAAIG,EAAW,EACXC,EAEJ,OAAO,YAAaH,EAAqB,CACjC,MAAAI,EAAU,KAAK,IAAI,EACnBC,EAAUD,EAAUF,EAE1B,aAAaC,CAAK,EAEdE,GAAWP,GACFI,EAAAE,EACXL,EAAO,GAAGC,CAAI,GAENG,EAAA,WACN,IAAM,CACJD,EAAW,KAAK,IAAI,EACpBH,EAAO,GAAGC,CAAI,CAChB,EACA,KAAK,IAAI,EAAGF,EAAWO,CAAO,CAChC,CAEJ,CACF,CAUgB,SAAAC,GACdT,EACAU,EAAQ,IAC0B,CAC9B,GAAA,OAAOV,GAAW,WACb,OAAAzR,GAGH,MAAA2R,EAAS,IAAIC,IAAwB,CACzCH,EAAO,GAAGG,CAAI,CAChB,EAEA,GAAIO,GAAS,EACX,OAAON,GAAcF,CAAM,EAGzB,IAAAI,EAEJ,OAAO,YAAaH,EAAqB,CACvC,aAAaG,CAAK,EAElBA,EAAQ,WAAW,IAAM,CACvBJ,EAAO,GAAGC,CAAI,GACbO,CAAK,CACV,CACF,CASO,SAASN,GAAiDJ,EAAW,CACtE,GAAA,OAAOA,GAAW,WACb,OAAAA,EAGT,IAAIW,EAAS,GACTC,EACAC,EAEJ,OAAO,YAAaV,EAAqB,CAC5B,OAAAS,EAAAT,EAENQ,IACMA,EAAA,GACTE,EAAU,QAAQ,QAAU,EAAA,KAAK,KACtBF,EAAA,GACCE,EAAA,OAEHb,EAAO,GAAGY,CAAQ,EAC1B,GAGIC,CACT,CACF,CAuEA,MAAMC,OAAqB,IACrBC,OAAmB,QAEzB,SAASC,IAAsB,CAC7BF,GAAe,QAAcG,GAAA,CAC3BA,EAAG,GAAGF,GAAa,IAAIE,CAAE,CAAE,CAAA,CAC5B,EACDH,GAAe,MAAM,CACvB,CAQgB,SAAAI,GAAiDlB,KAAcG,EAAa,CACtF,GAAA,OAAOH,GAAW,WACb,OAAAA,EAGIe,GAAA,IAAIf,EAAQG,CAAI,EAEzB,CAAAW,GAAe,IAAId,CAAM,IAI7Bc,GAAe,IAAId,CAAM,EAErBc,GAAe,OAAS,GAC1BjB,GAAImB,EAAmB,EAE3B,CC/NA,IAAIG,GAAmC,KAOhC,SAASC,IAAiB,CAC/B,GAAI,CAACjU,GACI,MAAA,GAGT,GAAIgU,KAAqB,KAAM,CACvB,MAAAE,EAAO,SAAS,cAAc,KAAK,EAEzCA,EAAK,MAAM,QAAU,OACrBA,EAAK,MAAM,cAAgB,SAC3BA,EAAK,MAAM,OAAS,MAEpBA,EAAK,YAAY,SAAS,cAAc,KAAK,CAAC,EAC9CA,EAAK,YAAY,SAAS,cAAc,KAAK,CAAC,EACrC,SAAA,KAAK,YAAYA,CAAI,EAE9BF,GAAmBE,EAAK,eAAiB,EAEhC,SAAA,KAAK,YAAYA,CAAI,CAAA,CAGzB,OAAAF,EACT,CAEA,IAAIG,GAAsC,KAOnC,SAASC,IAAoB,CAClC,OAAKpU,IAIDmU,KAAwB,OACJA,GAAA,YAAa,SAAS,cAAc,KAAK,GAG1DA,IAPE,EAQX,CCvCO,SAASE,GAAejU,EAAgB,CAC7C,OAAO,MAAM,QAAQA,CAAK,EAAIA,EAAQ,CAACA,CAAK,CAC9C,CAUgB,SAAAkU,GAAuClU,KAAmC4S,EAAS,CACjG,OAAOjS,GAAWX,CAAK,EAAIA,EAAM,GAAG4S,CAAI,EAAI5S,CAC9C,CA6BO,SAASmU,GAAQnU,EAAuB,CACtC,OAAAA,EAAMA,EAAM,OAAS,CAAC,CAC/B,CAIA,MAAMoU,GAAmB/P,GAAeA,EAwDjC,SAASgQ,GACdC,EACAtF,EACAuF,EACAC,EACA,CACI,IAAAC,EAEkCD,IAAW,SAC/CA,EAAS,IACWC,EAAAL,GAKtB,MAAMM,EAAOF,EAAa,IAAA,IAAqB,CAAC,EAEhD,GAAI,CAACpU,GAAU4O,CAAI,EAAU,OAAA0F,EAE7B,MAAMC,EAAMH,EACR,CAACrU,EAAUH,IAAa0U,EAAI,IAAIvU,EAAKH,CAAK,EAC1C,CAACG,EAAUH,IAAc0U,EAAIvU,CAAG,EAAIH,EAClC4U,EAAejU,GAAWqO,CAAI,EAAIA,EAAQG,GAAYA,EAAKH,CAAI,EAErE,OAAAsF,EAAK,QAAgBnF,GAAA,CACf,GAAA,CAAC/O,GAAU+O,CAAI,EAAG,OAEhB,MAAAhP,EAAMyU,EAAazF,CAAI,EAEzB/O,GAAUD,CAAG,GACXwU,EAAAxU,EAAKsU,EAAkBtF,CAAI,CAAC,CAClC,CACD,EAEMuF,CACT,CAgBO,SAASG,GACdtT,EACA4N,EACA2F,EAAO,GACG,CACV,IAAI5M,EAAQ,GAQZ,OANI4M,GAAQ,OAAO3F,GAAS,WAC1BjH,EAAQ3G,EAAM,UAAqByR,GAAAA,IAAY7D,CAAI,EAE3CjH,EAAA3G,EAAM,UAAU4N,CAA4B,EAGlD,CAACjH,EACI3G,EAAM,OAAO2G,EAAO,CAAC,EAAE,CAAC,EAG1B,IACT,CAkEO,SAAS6M,GAAuBT,EAAWrS,EAAgC,GAAI,CAC9E,KAAA,CACJ,SAAA+S,EAAW,KACX,WAAAC,EAAa,WACb,YAAAC,EAAc,SACd,OAAAC,EAAS,IAAA,EACPlT,EAEEmT,EAAYhV,GAAU+U,CAAM,GAAKA,IAAW,GAC5CnN,EAAY,CAAC,EACbqN,MAAa,IAEV,QAAA7T,EAAI,EAAG4H,EAAMkL,EAAK,OAAQ9S,EAAI4H,EAAK,EAAE5H,EAAG,CACzC,MAAA2N,EAAOmF,EAAK9S,CAAC,EACb8T,EAAKnG,EAAK6F,CAAQ,EAExB,GAAI,EAAAI,EAAYE,IAAOH,EAAS,CAAC/U,GAAUkV,CAAE,GAWzC,GAPAD,EAAO,IAAIC,CAAE,EACbnG,EAAa8F,CAAU,EAAII,EAAO,IAAIC,CAAE,GAExCnG,EAAa8F,CAAU,EAAI,CAAC,EAC9BI,EAAO,IAAIC,EAAKnG,EAAa8F,CAAU,CAAC,GAGtC9F,EAAK+F,CAAW,IAAM,CAACE,GAAajG,EAAK+F,CAAW,IAAMC,GAAS,CAC/D,MAAAI,EAAWpG,EAAK+F,CAAW,EAE5BG,EAAO,IAAIE,CAAQ,GACfF,EAAA,IAAIE,EAAU,EAAE,EAGzBF,EAAO,IAAIE,CAAQ,EAAG,KAAKpG,CAAI,CAAA,MAE/BnH,EAAK,KAAKmH,CAAI,CAChB,CAGK,OAAAnH,CACT,CAYO,SAASwN,GACdxN,EACA/F,EAiBI,GACJ,CACM,KAAA,CACJ,SAAA+S,EAAW,KACX,WAAAC,EAAa,WACb,YAAAC,EAAc,SACd,OAAAC,EAAS,KACT,WAAAM,EAAa,GACb,SAAAC,EAAW,GACX,QAAAC,EAAenU,GAAAA,EACf,OAAAoU,EAAS3U,GACT,SAAA4U,EAAW,GACX,YAAAC,EAAc,EAAA,EACZ7T,EAEJ,IAAI8T,EAAU,EAEd,MAAMX,EAAYhV,GAAU+U,CAAM,GAAKA,IAAW,GAC5Cb,EAAY,CAAC,EACb0B,EAAO,CAAC,GAAGhO,CAAI,EAErB,KAAOgO,EAAK,QAAQ,CACZ,MAAA7G,EAAO6G,EAAK,MAAM,EAElBC,EAAgB9G,EAAK8F,CAAU,EAC/BiB,EAAgB,MAAM,QAAQD,CAAa,GAAKA,EAAc,OAASA,EAAgB,CAAC,EAE1FP,IAAaI,GAAe,CAAC3G,EAAK6F,CAAQ,KACvC7F,EAAA6F,CAAQ,EAAIW,EAAQI,GAAS,GAG9B,MAAAT,EAAKnG,EAAK6F,CAAQ,EAGtBU,GACAR,IACCE,EAAYjG,EAAK+F,CAAW,IAAMC,EAAS,CAAChG,EAAK+F,CAAW,KAE3D/F,EAAa+F,CAAW,EAAIC,GAG1B,MAAAgB,EAAeP,EAAOzG,CAAI,EAI5B,GAFAgH,GAAmB7B,EAAA,KAAKnF,CAAI,EAE5BgH,GAAgB,CAACN,EAAU,CACpB,QAAArU,EAAI,EAAG4H,EAAM8M,EAAS,OAAQ1U,EAAI4H,EAAK,EAAE5H,EAAG,CAC7C,MAAA4U,EAAQF,EAAS1U,CAAC,EAEpBkU,GAAYR,IACdkB,EAAMlB,CAAW,EAAII,GAGtB,CAAAG,GAAcO,EAAK,KAAKI,CAAK,CAAA,CAG5BX,GACGO,EAAA,QAAQ,GAAGE,CAAQ,CAC1B,CACF,CAGK,OAAA5B,CACT,CASO,SAAS+B,GACdrO,EACAuK,EACAtQ,EAII,CAAA,EACJ,CACA,KAAM,CAAE,WAAAgT,EAAa,WAAuB,WAAAQ,EAAa,EAAU,EAAAxT,EAC7D+T,EAAO,CAAC,GAAGhO,EAAK,IAAImH,IAAS,CAAE,KAAAA,EAAM,MAAO,EAAG,OAAQ,IAAA,EAAmB,CAAC,EAEjF,KAAO6G,EAAK,QAAQ,CAClB,KAAM,CAAE,KAAA7G,EAAM,MAAAmH,EAAO,OAAAvH,CAAO,EAAIiH,EAAK,MAAM,EACrCE,EAAW/G,EAAK8F,CAAU,EAE7B1C,EAAApD,EAAMmH,EAAOvH,CAAM,EAElBhO,GAAWmV,CAAQ,GAChBF,EAAAP,EAAa,UAAY,MAAM,EAClC,GAAG,MAAM,KAAKS,CAAQ,EAAE,IAAIE,IAAU,CAAE,KAAMA,EAAO,MAAOE,EAAQ,EAAG,OAAQnH,GAAO,CACxF,CACF,CAEJ,CAWO,SAASoH,GACdvO,EACAuK,EACAtQ,EAMI,CAAA,EACJ,CACA,KAAM,CAAE,WAAAgT,EAAa,WAAuB,WAAAQ,EAAa,GAAO,cAAAe,EAAgB,IAASvU,EACnFyI,EAAc,CAAC,EACfsL,EAAO,CAAC,GAAGhO,EAAK,IAAamH,IAAA,CAAE,KAAAA,EAAM,MAAO,EAAG,OAAQ,KAAkB,OAAAzE,CAAA,EAAS,CAAC,EAEzF,KAAOsL,EAAK,QAAQ,CACZ,KAAA,CAAE,KAAA7G,EAAM,MAAAmH,EAAO,OAAAvH,EAAQ,OAAArE,CAAO,EAAIsL,EAAK,MAAM,EAC7CE,EAAW/G,EAAK8F,CAAU,EAC1BwB,EAAUlE,EAAGpD,EAAMmH,EAAOvH,CAAM,GAAM,CAAC,EAEzCyH,IACMC,EAAAxB,CAAU,EAAI,CAAC,GAGzBvK,EAAO,KAAK+L,CAAO,EAEf1V,GAAWmV,CAAQ,GACP,MAAM,KAAKA,CAAQ,EAEvB,SACAO,EAAAxB,CAAU,EAAI,CAAC,EAClBe,EAAAP,EAAa,UAAY,MAAM,EAClC,GAAG,MAAM,KAAKS,CAAQ,EAAE,IAAcE,IAAA,CACpC,KAAMA,EACN,MAAOE,EAAQ,EACf,OAAQnH,EACR,OAAQsH,EAAQxB,CAAU,CAAA,EAC1B,CACJ,EAEJ,CAGK,OAAAvK,CACT,CAWO,SAASgM,GACd1O,EACAuK,EACAtQ,EAMI,CAAA,EACJ,CACM,KAAA,CACJ,WAAAgT,EAAa,WACb,SAAA0B,EAAW,GACX,OAAAC,EAAiBzH,GAAA,CAACpO,GAAWoO,EAAK8F,CAAU,CAAC,CAAA,EAC3ChT,EAEE2T,EAAS,CAAC3G,EAAWqH,EAAevH,IACjCE,EACJ,IAAaE,IAAA,CAAE,GAAGA,CAAK,EAAE,EACzB,OAAeA,GAAA,CACR,MAAA+G,EAAW/G,EAAK8F,CAAU,EAC1B4B,EAAOD,EAAOzH,CAAI,EAClB2H,EAAQ/V,GAAWmV,CAAQ,GAAK,MAAM,KAAKA,CAAQ,EAErD,GAAAS,GAAY,CAACE,EAAM,CACjB,GAAAC,GAASA,EAAM,OAAQ,CACzB,MAAMC,EAAUnB,EAAOkB,EAAOR,EAAQ,EAAGnH,CAAI,EAC7C,OAAAA,EAAK8F,CAAU,EAAI8B,EAEZ,CAAC,CAACA,EAAQ,MAAA,CAGZ,MAAA,EAAA,CAGT,MAAMrM,EAAS6H,EAAGpD,EAAMmH,EAAOvH,CAAM,EAErC,GAAI8H,EAAa,OAAAnM,EACb,GAAA,CAACiM,GAAYjM,EAAe,MAAA,GAE5B,GAAAoM,GAASA,EAAM,OAAQ,CACzB,MAAMC,EAAUnB,EAAOkB,EAAOR,EAAQ,EAAGnH,CAAI,EAC7C,OAAAA,EAAK8F,CAAU,EAAI8B,EAEZ,CAAC,CAACA,EAAQ,MAAA,CAGZ,OAAArM,CAAA,CACR,EAGE,OAAAkL,EAAO5N,EAAM,EAAG,IAAI,CAC7B,CAeA,MAAMgP,GAAoB,CAACC,EAAWC,IAChC,OAAO,MAAM,OAAOD,CAAI,EAAI,OAAOC,CAAI,CAAC,EACnC,OAAOD,CAAI,EAAE,cAAcC,CAAI,EAGjCD,EAAOC,EAWA,SAAAC,GACd7C,EACA8C,EACA,CAEE,GAAA,CAAC9C,EAAK,MACL7T,GAAsB2W,CAAK,GAAK,CAACA,EAAM,KACxC,CAAEA,EAAiC,OAE5B,OAAA9C,EAGH,MAAA+C,EAAa,MAAM,KAAK/C,CAAI,EAE7B,MAAM,QAAQ8C,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAME,EAAiBF,EACpB,IACCpX,GACG,OAAOA,GAAU,SACd,CACA,IAAKA,EACL,OAAQgX,GACR,KAAM,KAAA,EAENhX,CAAA,EAEP,IAAaA,IACR,OAAOA,EAAM,UAAa,aAC5BA,EAAM,SAAYiP,GAAYA,EAAKjP,EAAM,GAAG,GAG1C,OAAOA,EAAM,QAAW,aAC1BA,EAAM,OAASgX,IAGXhX,EAAA,OAAS,MAAM,QAAQA,EAAM,MAAM,EAAIA,EAAM,OAAS,CAAC,EAEtDA,EACR,EAEQ,OAAAqX,EAAA,KAAK,CAACJ,EAAMC,IAAS,CAC9B,IAAIK,EAAa,EAEjB,UAAWvI,KAAQsI,EAAgB,CACjC,KAAM,CAAE,OAAA7E,EAAQ,KAAAxS,EAAM,SAAAsU,EAAU,OAAAiD,CAAW,EAAAxI,EACrCyI,EAAOxX,IAAS,OAChByK,EAAS+H,EAAO8B,EAAS0C,EAAM,GAAGO,CAAM,EAAGjD,EAAS2C,EAAM,GAAGM,CAAM,CAAC,EAI1E,GAFaD,EAAAE,EAAO,CAAC/M,EAASA,EAE1B6M,EAAY,KAAA,CAGX,OAAAA,CAAA,CACR,EAEMF,CACT,CAWO,SAASK,GACdC,EACAC,EACAC,EAAW,GACX,CACYF,EAAAE,EAAWtJ,GAAUoJ,CAAS,EAAIA,EAE9C,MAAM3B,EAGD,CACH,CACE,OAAQ2B,EACR,OAAQC,CAAA,CAEZ,EAEA,KAAO5B,EAAK,QAAQ,CAClB,KAAM,CAAE,OAAA8B,EAAQ,OAAAvP,GAAWyN,EAAK,IAAI,EAEpC,OAAO,KAAKzN,CAAM,EAAE,QAAepI,GAAA,CAC7BM,GAAS8H,EAAOpI,CAAG,CAAC,GACjBM,GAASqX,EAAO3X,CAAG,CAAC,IACvB2X,EAAO3X,CAAG,EAAW,OAAA,OAAO,IAAI,GAGlC6V,EAAK,KAAK,CACR,OAAQ8B,EAAO3X,CAAG,EAClB,OAAQoI,EAAOpI,CAAG,CAAA,CACnB,GACQ,MAAM,QAAQoI,EAAOpI,CAAG,CAAC,GAC7B,MAAM,QAAQ2X,EAAO3X,CAAG,CAAC,IACrB2X,EAAA3X,CAAG,EAAI,CAAC,GAGjB6V,EAAK,KAAK,CACR,OAAQ8B,EAAO3X,CAAG,EAClB,OAAQoI,EAAOpI,CAAG,CAAA,CACnB,GAEM2X,EAAA3X,CAAG,EAAIoI,EAAOpI,CAAG,CAC1B,CACD,CAAA,CAGI,OAAAwX,CACT,CASO,SAASI,GAAcC,EAA0B,CAC9CA,EAAA,MAAM,KAAKA,CAAK,EAExB,IAAIC,EAAY,GAEhB,MAAMC,EAAM,IAAM,OACZD,KAEJE,EAAAH,EAAM,UAAN,MAAAG,IACMH,EAAA,QAAU1F,GAAI4F,CAAG,EACzB,EAEI,OAAAA,EAAA,EAEG,IAAOD,EAAY,EAC5B,CC3oBO,SAASG,GAAgCpY,EAAU,CACxD,OAAAA,EAAQA,EAAM,KAAA,EAAO,QAAQ,OAAQ,GAAG,EAChCA,EAAAA,EAAM,QAAQ,UAAW,CAACqY,EAAGC,IAAUA,EAAOA,EAAK,YAAY,EAAI,EAAG,GAEtEtY,EAAM,OAAO,CAAC,EAAE,kBAAsB,EAAAA,EAAM,MAAM,CAAC,GAAG,QAC5D,SACA,EACF,CACF,CC7DO,MAAMuY,GAAuB,8BACvBC,GAAcC,EAAAA,SAAS,IAAM,GAAG,EAE7C,SAASC,GAAa5Q,EAAa6Q,EAAa,CACvC,OAAAvY,GAAU0H,CAAG,GAAK,CAAC,OAAO,MAAMA,CAAG,EAAIA,EAAM6Q,CACtD,CAQgB,SAAAC,GAAiBC,EAA+BC,EAAW,CACzE,GAAIA,EAAK,CACD,MAAA3F,EAAQsF,EAAAA,SAAS,IAAM,CACrBtF,MAAAA,EAAQ4F,QAAMF,CAAW,EAExB,OAAAH,GAAavF,EAAOqF,GAAY,KAAK,CAAA,CAC7C,EAEGM,EAAA,QAAQP,GAAsBpF,CAAK,CAAA,KAClC,CACC,MAAA6F,EAAgBC,EAAAA,OAAmCV,GAAsB,IAAI,EAC7EpF,EAAQsF,EAAAA,SAAS,IAAM,CACrBtF,MAAAA,EAAQ4F,QAAMF,CAAW,EAExB,OAAAH,GACLvF,EACA6F,EAAgBN,GAAaM,EAAc,MAAOR,GAAY,KAAK,EAAIA,GAAY,KACrF,CAAA,CACD,EAEDU,EAAA,QAAQX,GAAsBpF,CAAK,CAAA,CAEvC,CAEO,SAASgG,IAAgB,CAC9B,OAAOC,EAAmB,mBAAA,EACtBH,EAAAA,OAA4BV,GAAsBC,EAAW,EAC7DA,EACN,CCxCO,SAASa,IAAa,CAC3B,MAA0B,CACxB,OAAQ,QACR,UAAW,GAEX,SAAU,CACR,KAAM,IACN,MAAO,IACP,OAAQ,MACR,OAAQ,MACR,OAAQ,MACR,OAAQ,MACR,OAAQ,MACR,OAAQ,MACR,OAAQ,MACR,OAAQ,MACR,OAAQ,MACR,QAAS,MACT,QAAS,MACT,QAAS,MACT,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,MAAO,IAEP,UAAW,CACT,KAAM,IACN,MAAO,IACP,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,QAAS,KACT,QAAS,MACT,QAAS,MACT,MAAO,MACP,MAAO,MACP,MAAO,MACP,MAAO,MACP,MAAO,MACP,MAAO,MACP,MAAO,KAAA,CAEX,EAEA,QAAS,CACP,SAAU,SACV,MAAO,YACP,QAAS,OACT,KAAM,WACN,UAAW,WACX,aAAc,SACd,QAAS,SACT,UAAW,OACb,EAEA,SAAU,CACR,IAAK,IACP,EAEA,YAAa,CACX,QAAS,KACT,OAAQ,KAER,UAAW,CACT,MAAO,MAAA,CAEX,EAEA,QAAS,CACP,QAAS,KACT,OAAQ,IACV,EAEA,WAAY,CACV,QAAS,KACT,OAAQ,KACR,YAAa,CACX,KAAM,KACN,MAAO,KACP,KAAM,KACN,SAAU,OACV,MAAO,KACP,IAAK,KACL,OAAQ,KACV,EACA,UAAW,OACX,QAAS,OAET,UAAW,CACT,MAAO,OACP,QAAS,KACT,KAAM,IACN,KAAM,IACN,KAAM,IACN,OAAQ,IACR,OAAQ,GAAA,CAEZ,EAEA,OAAQ,CACN,QAAS,KACT,OAAQ,IACV,EAEA,KAAM,CACJ,OAAQ,KACR,MAAO,KACP,YAAa,OACb,aAAc,OAChB,EAEA,MAAO,CACL,YAAa,SACb,MAAO,MACT,EAEA,MAAO,CACL,YAAa,MAEb,UAAW,CACT,MAAO,MAAA,CAEX,EAEA,OAAQ,CACN,QAAS,KACT,SAAU,OACV,WAAY,OACZ,UAAW,MACb,EAEA,MAAO,CACL,QAAS,KACT,OAAQ,IACV,EAEA,YAAa,CACX,YAAa,QACb,WAAY,OAEZ,UAAW,CACT,MAAO,OACP,SAAU,KACV,SAAU,IAAA,CAEd,EAEA,WAAY,CACV,KAAM,IACN,QAAS,MACT,SAAU,MACV,SAAU,MACV,KAAM,KACN,KAAM,KACN,MAAO,IACP,OAAQ,KACR,SAAU,GACZ,EAEA,OAAQ,CACN,YAAa,MACb,MAAO,OACP,OAAQ,OAER,UAAW,CACT,MAAO,MAAA,CAEX,EAEA,MAAO,CACL,MAAO,OACP,cAAe,KACf,YAAa,KACb,UAAW,IACb,EAEA,QAAS,CACP,IAAK,IACL,KAAM,IACN,QAAS,KACT,OAAQ,IACR,OAAQ,KACR,KAAM,KACN,UAAW,KACX,KAAM,IACN,UAAW,MACX,OAAQ,KACR,SAAU,KACV,MAAO,GACT,EAEA,WAAY,CACV,QAAS,KACT,OAAQ,KACR,YAAa,CACX,KAAM,KACN,MAAO,KACP,IAAK,KACL,OAAQ,KACV,EAEA,UAAW,CACT,MAAO,OACP,KAAM,IACN,OAAQ,IACR,OAAQ,GAAA,CAEZ,EAEA,KAAM,CACJ,KAAM,MACN,KAAM,MACN,KAAM,KACN,UAAW,SACb,EAEA,SAAU,CACR,OAAQ,IACR,OAAQ,KACR,MAAO,OACP,QAAS,KACT,OAAQ,eACV,EAEA,KAAM,CACJ,MAAO,MACT,EAEA,OAAQ,CACN,OAAQ,OACR,UAAW,MACX,YAAa,iBAEb,UAAW,CACT,QAAS,OACT,OAAQ,MAAA,CAEZ,EAEA,MAAO,CACL,KAAM,KACN,MAAO,KACP,SAAU,MACV,SAAU,MACV,QAAS,KACT,KAAM,OACN,WAAY,QACZ,QAAS,QACT,WAAY,SACZ,eAAgB,SAChB,WAAY,OACZ,eAAgB,OAChB,aAAc,SAChB,EAEA,OAAQ,CACN,YAAa,OACb,WAAY,OACZ,eAAgB,OAChB,aAAc,OACd,OAAQ,KACR,QAAS,KACT,WAAY,OACZ,eAAgB,OAChB,MAAO,IAAA,CACT,CAEJ,CCvQO,MAAMC,GAAkB,wBAClBC,GAAcd,EAAAA,SAAS,IAAMY,IAAY,EAEhDG,OAAa,IAEZ,SAASC,GAAuBC,EAAiB,CACtD,OAAKA,GAIEF,GAAO,IAAIE,CAAM,GAAKH,GAAY,KAC3C,CAYgB,SAAAI,GAAaC,EAAuCd,EAAW,CAC7E,GAAIA,EAAK,CACD,MAAAY,EAASjB,EAAAA,SAAS,IAAM,CACtBiB,MAAAA,EAASX,QAAMa,CAAY,EAEjC,OAAOlC,GAAa+B,GAAuBC,EAAO,MAAM,EAAGA,CAAM,CAAA,CAClE,EAEGZ,EAAA,QAAQQ,GAAiBI,CAAM,CAAA,KAC9B,CACC,MAAAG,EAAiBZ,EAAAA,OAAyCK,GAAiB,IAAI,EAC/EI,EAASjB,EAAAA,SAAS,IAAM,CACtBiB,MAAAA,EAASX,QAAMa,CAAY,EAG7B,OAACC,GAAA,MAAAA,EAAgB,MAIdnC,GAAamC,EAAe,MAAcH,CAAM,EAH9ChC,GAAa+B,GAAuBC,EAAO,MAAM,EAAGA,CAAM,CAGZ,CACxD,EAEDR,EAAA,QAAQI,GAAiBI,CAAM,CAAA,CAEnC,CAQgB,SAAAI,GACdlK,EACAmK,EACA,CACM,MAAAL,EAAST,EAAAA,OAAkCK,GAAiBC,EAAW,EAE7E,OAAK3J,EAIDmK,EACKtB,WAAS,IAAO,OAAA,OAAE,KAAIN,EAAAuB,EAAO,QAAP,YAAAvB,EAAevI,KAAS,CAAC,EAAI,GAAImJ,EAAAA,MAAMgB,CAAY,GAAK,CAAA,CAAM,EAAA,EAGtFtB,EAAAA,SAAS,IAAA,OAAM,QAAAN,EAAAuB,EAAO,QAAP,YAAAvB,EAAevI,KAAS,CAAA,EAAE,EAPvC8J,CAQX,CAEO,SAASM,IAAe,CACvB,MAAAN,EAAST,EAAAA,OAAkCK,GAAiBC,EAAW,EAE7E,OAAOd,EAAS,SAAA,IAAMiB,EAAO,MAAM,WAAa,EAAK,CACvD,CAEgB,SAAAO,GAAaC,EAAsBjQ,EAAe,CAC1D,MAAAkQ,EAAQD,EAAa,MAAM,GAAG,EAEpC,OAAIC,EAAM,SAAW,EAAU,GAAGlQ,CAAK,IAAIiQ,CAAY,GAEhD,GAAGjQ,CAAK,IAAIA,EAAQ,EAAIkQ,EAAM,CAAC,EAAE,KAAS,EAAAA,EAAM,CAAC,EAAE,KAAM,CAAA,EAClE,CAEgB,SAAAC,GAAiBF,EAAsBjQ,EAAe,CAC9D,MAAAkQ,EAAQD,EAAa,MAAM,GAAG,EAEhC,OAAAC,EAAM,SAAW,EAAUD,EAExBjQ,EAAQ,EAAIkQ,EAAM,CAAC,EAAE,OAASA,EAAM,CAAC,EAAE,KAAK,CACrD,CAEO,SAASE,GAAaF,EAAeG,EAAYf,GAAY,MAAM,WAAa,GAAO,CAC5F,OAAQe,EAAwCH,EAA5BA,EAAM,QAAQ,OAAQ,EAAE,CAC9C,CAEgB,SAAAI,GAAcL,EAAsB5Y,EAAc,CAChE,OAAO4Y,EAAa,QAAQ,OAAQ,GAAG5Y,CAAI,EAAE,CAC/C,CCxHA;AAAA;AAAA;AAAA;AAAA;AAAA,GAOA,MAAMkZ,GAAe1Y,GAAWA,EAAO,QAAQ,qBAAsB,OAAO,EAAE,YAAa,EACrF2Y,GAAe3Y,GAAWA,EAAO,QACrC,wBACA,CAAC4B,EAAOgX,EAAIC,IAAOA,EAAKA,EAAG,YAAW,EAAKD,EAAG,YAAW,CAC3D,EACME,GAAgB9Y,GAAW,CAC/B,MAAM+Y,EAAYJ,GAAY3Y,CAAM,EACpC,OAAO+Y,EAAU,OAAO,CAAC,EAAE,YAAW,EAAKA,EAAU,MAAM,CAAC,CAC9D,EACMC,GAAe,IAAIC,IAAYA,EAAQ,OAAO,CAACC,EAAW9S,EAAO3G,IAC9D,EAAQyZ,GAAcA,EAAU,KAAI,IAAO,IAAMzZ,EAAM,QAAQyZ,CAAS,IAAM9S,CACtF,EAAE,KAAK,GAAG,EAAE,KAAM,EClBnB;AAAA;AAAA;AAAA;AAAA;AAAA,GAOA,IAAI+S,GAAoB,CACtB,MAAO,6BACP,MAAO,GACP,OAAQ,GACR,QAAS,YACT,KAAM,OACN,OAAQ,eACR,eAAgB,EAChB,iBAAkB,QAClB,kBAAmB,OACrB,ECjBA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWA,MAAMC,GAAO,CAAC,CAAE,KAAA9Z,EAAM,YAAA+Z,EAAc,EAAG,oBAAAC,EAAqB,MAAA7X,EAAO,SAAA8X,EAAU,KAAAzL,EAAM,MAAOmL,EAAS,GAAG3D,CAAO,EAAE,CAAE,MAAAkE,KACxGtX,EAAC,EACN,MACA,CACE,GAAGiX,GACH,MAAO7Z,GAAQ6Z,GAAkB,MACjC,OAAQ7Z,GAAQ6Z,GAAkB,OAClC,OAAQ1X,GAAS0X,GAAkB,OACnC,eAAgBG,EAAsB,OAAOD,CAAW,EAAI,GAAK,OAAO/Z,CAAI,EAAI+Z,EAChF,MAAOL,GACL,SACA,GAAGlL,EAAO,CAAC,UAAU4K,GAAYI,GAAahL,CAAI,CAAC,CAAC,QAAS,UAAU4K,GAAY5K,CAAI,CAAC,EAAE,EAAI,CAAC,aAAa,CAC7G,EACD,GAAGwH,CACJ,EACD,CAAC,GAAGiE,EAAS,IAAKjF,GAAUpS,EAAAA,EAAE,GAAGoS,CAAK,CAAC,EAAG,GAAGkF,EAAM,QAAU,CAACA,EAAM,QAAO,CAAE,EAAI,CAAE,CAAA,CACpF,EC3BH;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,MAAMC,GAAmB,CAACC,EAAUH,IAAa,CAACjE,EAAO,CAAE,MAAAkE,CAAK,IAAOtX,EAAC,EACtEkX,GACA,CACE,GAAG9D,EACH,SAAAiE,EACA,KAAMG,CACP,EACDF,CACF,EClBA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMG,GAAiBF,GAAiB,mBAAoB,CAC1D,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAQ,CAAE,EAC7C,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAU,CAAA,CAC3C,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMG,GAAWH,GAAiB,WAAY,CAC5C,CAAC,OAAQ,CAAE,EAAG,SAAU,IAAK,QAAQ,CAAE,EACvC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC9E,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAU,CAAA,CAC3C,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMI,GAAQJ,GAAiB,QAAS,CAAC,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,CAAC,CAAC,ECT3F;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMK,GAAcL,GAAiB,eAAgB,CACnD,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAU,CAAA,CAC/C,CAAC,ECXD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMM,GAAcN,GAAiB,eAAgB,CACnD,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAU,CAAA,CACjD,CAAC,ECXD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMO,GAAeP,GAAiB,gBAAiB,CACrD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAU,CAAA,CAChD,CAAC,ECXD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMQ,GAAYR,GAAiB,aAAc,CAC/C,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAU,CAAA,CACjD,CAAC,ECXD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMS,GAAeT,GAAiB,gBAAiB,CACrD,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAU,CAAA,CACjD,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMU,GAAgBV,GAAiB,iBAAkB,CACvD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,OAAO,CAAE,EAC7C,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAU,CAAA,CACjD,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMW,GAAcX,GAAiB,eAAgB,CACnD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,GAAI,KAAM,IAAK,QAAQ,CAAE,EACjE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,QAAS,GAAI,KAAM,GAAI,KAAM,IAAK,QAAU,CAAA,CACvE,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMY,GAAcZ,GAAiB,eAAgB,CACnD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAU,CAAA,CAChD,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMa,GAAab,GAAiB,cAAe,CACjD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,uCAAwC,IAAK,QAAQ,CAAE,EACrE,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAU,CAAA,CAC7C,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMc,GAAUd,GAAiB,WAAY,CAC3C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAU,CAAA,CAC3C,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMe,GAAQf,GAAiB,QAAS,CACtC,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,WAAY,CAAE,OAAQ,mBAAoB,IAAK,QAAU,CAAA,CAC5D,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMgB,GAAchB,GAAiB,eAAgB,CACnD,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,2DAA4D,IAAK,QAAQ,CAAE,EACzF,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAU,CAAA,CAChD,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMiB,GAAWjB,GAAiB,WAAY,CAC5C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,KAAM,EAAG,IAAK,IAAK,QAAU,CAAA,CACzD,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMkB,GAASlB,GAAiB,UAAW,CACzC,CACE,OACA,CACE,EAAG,iGACH,IAAK,QACX,CACG,EACD,CAAC,OAAQ,CAAE,EAAG,uCAAwC,IAAK,QAAQ,CAAE,EACrE,CACE,OACA,CACE,EAAG,+FACH,IAAK,QACX,CACG,EACD,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAU,CAAA,CAC7C,CAAC,EC1BD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMmB,GAAMnB,GAAiB,MAAO,CAClC,CACE,OACA,CACE,EAAG,wGACH,IAAK,QACX,CACG,EACD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAU,CAAA,CAC1D,CAAC,EClBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMoB,GAAcpB,GAAiB,eAAgB,CACnD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CACE,OACA,CAAE,EAAG,0EAA2E,IAAK,QAAQ,CAC9F,EACD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAU,CAAA,CAC1D,CAAC,ECnBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMqB,GAAWrB,GAAiB,YAAa,CAC7C,CAAC,OAAQ,CAAE,EAAG,sBAAuB,IAAK,QAAQ,CAAE,EACpD,CAAC,OAAQ,CAAE,EAAG,uBAAwB,IAAK,QAAQ,CAAE,EACrD,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,6DAA8D,IAAK,QAAU,CAAA,CAC7F,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMsB,GAAYtB,GAAiB,aAAc,CAC/C,CAAC,OAAQ,CAAE,EAAG,6DAA8D,IAAK,QAAQ,CAAE,EAC3F,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,OAAQ,CAAE,EAAG,kDAAmD,IAAK,QAAU,CAAA,CAClF,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMuB,GAAYvB,GAAiB,aAAc,CAC/C,CAAC,OAAQ,CAAE,EAAG,uDAAwD,IAAK,QAAQ,CAAE,EACrF,CAAC,OAAQ,CAAE,EAAG,oBAAqB,IAAK,QAAQ,CAAE,EAClD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,KAAM,EAAG,IAAK,IAAK,QAAU,CAAA,CACzD,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMwB,GAAWxB,GAAiB,YAAa,CAC7C,CAAC,OAAQ,CAAE,EAAG,6DAA8D,IAAK,QAAQ,CAAE,EAC3F,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAU,CAAA,CAC3C,CAAC,ECfD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMyB,GAAYzB,GAAiB,aAAc,CAC/C,CAAC,OAAQ,CAAE,EAAG,6DAA8D,IAAK,QAAQ,CAAE,EAC3F,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,qBAAsB,IAAK,QAAU,CAAA,CACrD,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM0B,GAAO1B,GAAiB,OAAQ,CACpC,CAAC,OAAQ,CAAE,EAAG,6DAA8D,IAAK,QAAQ,CAAE,EAC3F,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAU,CAAA,CAC1D,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM2B,GAAiB3B,GAAiB,kBAAmB,CACzD,CAAC,OAAQ,CAAE,EAAG,0CAA2C,IAAK,QAAQ,CAAE,EACxE,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAQ,CAAE,EAC1E,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAU,CAAA,CAC1C,CAAC,EChBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM4B,GAAe5B,GAAiB,gBAAiB,CACrD,CAAC,OAAQ,CAAE,EAAG,0CAA2C,IAAK,QAAQ,CAAE,EACxE,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAQ,CAAE,EAC1E,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAU,CAAA,CAC5C,CAAC,EChBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM6B,GAAa7B,GAAiB,aAAc,CAChD,CAAC,OAAQ,CAAE,EAAG,yBAA0B,IAAK,QAAQ,CAAE,EACvD,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,4BAA6B,IAAK,QAAQ,CAAE,EAC1D,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAQ,CAAE,EACzD,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,IAAK,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAU,CAAA,CAC/E,CAAC,ECfD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM8B,GAAS9B,GAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,qJACH,IAAK,QACX,CACA,CACA,CAAC,ECjBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM+B,GAAe/B,GAAiB,gBAAiB,CACrD,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACvD,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,IAAK,EAAG,IAAK,IAAK,SAAU,EACtD,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACvD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,IAAK,EAAG,IAAK,IAAK,SAAU,EACvD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAU,CAAA,CAC1D,CAAC,EChBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMgC,GAAQhC,GAAiB,QAAS,CACtC,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,SAAU,EACvF,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,IAAK,EAAG,IAAK,IAAK,SAAU,EACtD,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAU,CAAA,CAC5E,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMiC,GAAiBjC,GAAiB,kBAAmB,CACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAU,CAAA,CAC/C,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMkC,GAAiBlC,GAAiB,kBAAmB,CACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAU,CAAA,CAC/C,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMmC,GAAOnC,GAAiB,OAAQ,CACpC,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAU,CAAA,CAC5C,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMoC,GAAepC,GAAiB,gBAAiB,CACrD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAU,CAAA,CAC9D,CAAC,ECXD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMqC,GAASrC,GAAiB,UAAW,CACzC,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,0CAA2C,IAAK,QAAU,CAAA,CAC1E,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMsC,GAAWtC,GAAiB,WAAY,CAC5C,CAAC,OAAQ,CAAE,EAAG,yBAA0B,IAAK,QAAQ,CAAE,EACvD,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAQ,CAAE,EACzD,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,4BAA6B,IAAK,QAAU,CAAA,CAC5D,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMuC,GAAwBvC,GAAiB,0BAA2B,CACxE,CAAC,OAAQ,CAAE,EAAG,iCAAkC,IAAK,QAAQ,CAAE,EAC/D,CAAC,OAAQ,CAAE,EAAG,uCAAwC,IAAK,QAAQ,CAAE,EACrE,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAU,CAAA,CAC7C,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMwC,GAAWxC,GAAiB,WAAY,CAC5C,CAAC,OAAQ,CAAE,EAAG,yBAA0B,IAAK,QAAQ,CAAE,EACvD,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAQ,CAAE,EACzD,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,4BAA6B,IAAK,QAAU,CAAA,CAC5D,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMyC,GAAQzC,GAAiB,QAAS,CAAC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAAC,CAAC,ECTpF;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM0C,GAAO1C,GAAiB,OAAQ,CACpC,CAAC,OAAQ,CAAE,EAAG,qCAAsC,IAAK,QAAU,CAAA,CACrE,CAAC,ECXD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM2C,GAAQ3C,GAAiB,QAAS,CACtC,CAAC,OAAQ,CAAE,EAAG,KAAM,EAAG,IAAK,MAAO,IAAK,OAAQ,KAAM,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC9E,CAAC,OAAQ,CAAE,EAAG,IAAK,EAAG,IAAK,MAAO,IAAK,OAAQ,KAAM,GAAI,IAAK,IAAK,QAAU,CAAA,CAC/E,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM4C,GAAmB5C,GAAiB,qBAAsB,CAC9D,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,OAAO,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,4BAA6B,IAAK,QAAQ,CAAE,EAC1D,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,KAAM,EAAG,KAAM,MAAO,KAAM,OAAQ,IAAK,GAAI,IAAK,IAAK,QAAU,CAAA,CACjF,CAAC,ECfD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM6C,GAAO7C,GAAiB,OAAQ,CACpC,CAAC,UAAW,CAAE,OAAQ,qBAAsB,IAAK,QAAU,CAAA,CAC7D,CAAC,ECXD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM8C,GAAO9C,GAAiB,OAAQ,CACpC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAU,CAAA,CAC3C,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM+C,GAAY/C,GAAiB,aAAc,CAC/C,CAAC,OAAQ,CAAE,EAAG,qDAAsD,IAAK,QAAQ,CAAE,EACnF,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,sDAAuD,IAAK,QAAQ,CAAE,EACpF,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAU,CAAA,CAC5C,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMgD,GAAUhD,GAAiB,WAAY,CAC3C,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAQ,CAAE,EAC7C,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAQ,CAAE,EACzD,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAU,CAAA,CAC3D,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMiD,GAAYjD,GAAiB,aAAc,CAC/C,CAAC,OAAQ,CAAE,EAAG,oDAAqD,IAAK,QAAQ,CAAE,EAClF,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAU,CAAA,CAC3C,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMkD,GAAWlD,GAAiB,YAAa,CAC7C,CAAC,OAAQ,CAAE,EAAG,oDAAqD,IAAK,QAAQ,CAAE,EAClF,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAU,CAAA,CAC7C,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMmD,GAASnD,GAAiB,SAAU,CACxC,CAAC,OAAQ,CAAE,EAAG,mBAAoB,IAAK,QAAQ,CAAE,EACjD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAU,CAAA,CAC1D,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMoD,GAAQpD,GAAiB,QAAS,CACtC,CAAC,OAAQ,CAAE,EAAG,4BAA6B,IAAK,QAAQ,CAAE,EAC1D,CACE,OACA,CAAE,EAAG,yEAA0E,IAAK,QAAQ,CAC7F,EACD,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,uBAAwB,IAAK,QAAQ,CAAE,EACrD,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAU,CAAA,CAC3C,CAAC,ECrBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMqD,GAAWrD,GAAiB,YAAa,CAC7C,CAAC,UAAW,CAAE,OAAQ,wBAAyB,IAAK,OAAO,CAAE,EAC7D,CAAC,OAAQ,CAAE,GAAI,IAAK,GAAI,IAAK,GAAI,KAAM,GAAI,IAAK,IAAK,QAAU,CAAA,CACjE,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMsD,GAActD,GAAiB,eAAgB,CACnD,CAAC,UAAW,CAAE,OAAQ,qBAAsB,IAAK,QAAQ,CAAE,EAC3D,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,GAAI,KAAM,IAAK,QAAU,CAAA,CACnE,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMuD,GAAcvD,GAAiB,eAAgB,CACnD,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC9E,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAU,CAAA,CAC1C,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMwD,GAAaxD,GAAiB,cAAe,CACjD,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC9E,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAU,CAAA,CAC1C,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMyD,GAAMzD,GAAiB,MAAO,CAClC,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,uBAAwB,IAAK,QAAQ,CAAE,EACrD,CAAC,OAAQ,CAAE,EAAG,yBAA0B,IAAK,QAAQ,CAAE,EACvD,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,wBAAyB,IAAK,QAAQ,CAAE,EACtD,CAAC,OAAQ,CAAE,EAAG,wBAAyB,IAAK,QAAU,CAAA,CACxD,CAAC,ECnBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM0D,GAAS1D,GAAiB,UAAW,CACzC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,wCAAyC,IAAK,QAAQ,CAAE,EACtE,CAAC,OAAQ,CAAE,EAAG,qCAAsC,IAAK,QAAQ,CAAE,EACnE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAQ,CAAE,EAClE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,OAAS,CAAA,CACnE,CAAC,ECfD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM2D,GAAS3D,GAAiB,SAAU,CACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,EAC9C,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAU,CAAA,CAC5E,CAAC,ECbD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM4D,GAAY5D,GAAiB,aAAc,CAC/C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,IAAK,EAAG,IAAK,IAAK,SAAU,EACvD,CAAC,OAAQ,CAAE,EAAG,wBAAyB,IAAK,QAAU,CAAA,CACxD,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM6D,GAAU7D,GAAiB,WAAY,CAC3C,CACE,OACA,CACE,EAAG,2KACH,IAAK,QACX,CACG,EACD,CAAC,OAAQ,CAAE,EAAG,sBAAuB,IAAK,QAAU,CAAA,CACtD,CAAC,EClBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM8D,GAAU9D,GAAiB,WAAY,CAC3C,CACE,OACA,CACE,EAAG,2KACH,IAAK,QACX,CACG,EACD,CAAC,OAAQ,CAAE,EAAG,sBAAuB,IAAK,QAAQ,CAAE,EACpD,CAAC,OAAQ,CAAE,EAAG,oCAAqC,IAAK,QAAU,CAAA,CACpE,CAAC,ECnBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAM+D,GAAU/D,GAAiB,WAAY,CAC3C,CACE,OACA,CACE,EAAG,2KACH,IAAK,QACX,CACG,EACD,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,GAAI,KAAM,IAAK,QAAQ,CAAE,EACjE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,GAAI,KAAM,IAAK,QAAU,CAAA,CACnE,CAAC,ECnBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMgE,GAAIhE,GAAiB,IAAK,CAC9B,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAU,CAAA,CAC7C,CAAC,ECZD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMiE,GAASjE,GAAiB,UAAW,CACzC,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,QAAS,GAAI,KAAM,GAAI,QAAS,IAAK,QAAQ,CAAE,EACxE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,GAAI,KAAM,IAAK,QAAQ,CAAE,EACjE,CAAC,OAAQ,CAAE,GAAI,IAAK,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAU,CAAA,CACnE,CAAC,ECdD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMkE,GAAUlE,GAAiB,WAAY,CAC3C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,QAAS,GAAI,KAAM,GAAI,QAAS,IAAK,QAAQ,CAAE,EACxE,CAAC,OAAQ,CAAE,GAAI,IAAK,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAU,CAAA,CACnE,CAAC,EC6DYmE,GAAiB,uBAkGxBC,GAAuB,CAC3B,QAAS,CAACC,GAAS,CAAE,OAAQ,UAAW,EACxC,MAAOC,GACP,MAAON,GACP,SAAU7D,GACV,MAAOY,GACP,SAAUb,GACV,QAASM,GACT,WAAYD,GACZ,UAAWF,GACX,UAAWC,GACX,YAAaI,GACb,WAAYD,GACZ,QAASuC,GACT,QAASD,GACT,OAAQwB,GACR,SAAUC,GACV,OAAQb,GACR,YAAac,GACb,MAAOrE,GACP,KAAMsE,GACN,MAAOtB,GACP,SAAUb,GACV,KAAMJ,GACN,QAASwC,GACT,QAASC,GACT,MAAON,GACP,OAAQZ,GACR,QAASvC,GACT,MAAOa,GACP,KAAMc,GACN,MAAOL,GACP,WAAYoC,GACZ,YAAaC,GACb,WAAY5D,GACZ,UAAWC,GACX,KAAMyC,GACN,MAAOH,GACP,KAAMf,GACN,QAASL,GACT,OAAQ0C,GACR,QAASC,GACT,OAAQ7B,GACR,YAAaD,GACb,WAAYD,GACZ,MAAOtB,GACP,MAAOC,GACP,OAAQqC,GACR,QAASC,GACT,WAAY5B,GACZ,YAAaE,GACb,QAAST,GACT,KAAML,GACN,SAAUF,GACV,SAAUH,GACV,UAAWC,GACX,UAAWC,GACX,UAAWE,GACX,QAASL,GACT,OAAQ0C,GACR,UAAWD,GACX,WAAYE,GACZ,KAAMlB,GACN,MAAOF,GACP,WAAYd,GACZ,IAAKe,GACL,UAAWC,GACX,WAAYF,GACZ,SAAUU,GACV,SAAUC,EACZ,EAEa2B,GAAY,OAAO,OAAO,OAAO,KAAKb,EAAO,CAAe,EAE5Dc,GAAchI,WAAS,IAAM,CACxC,MAAMiI,EAAQ,CAAC,EAEf,UAAW9Q,KAAQ4Q,GAAW,CACtB,KAAA,CAACG,EAAM1e,EAAU,CAAA,CAAE,EAAIgS,GAAY0L,GAAQ/P,CAAI,CAAC,EAEtD8Q,EAAM9Q,CAAI,EAAI,CAAE,GAAG3N,EAAS,KAAA0e,CAAK,CAAA,CAG5B,OAAAD,CACT,CAAC,EAQe,SAAAE,GAAYF,EAA+B5H,EAAW,CAC9D,MAAA+H,EACJ/H,GAAO,CAACgI,EAAA,gBAAA,EACJL,GACAxH,EAAA,OAAwCyG,GAAgB,IAAI,EAC5DqB,EAAkBtI,EAAAA,SAAS,IAAM,CACrC,MAAMsI,EAAkB,CAAC,EACnBC,EAAajI,QAAM2H,CAAK,EAE9B,UAAW9Q,KAAQ4Q,GAAW,CACtB,MAAAS,EAASD,EAAWpR,CAAI,EAE9B,GAAI,CAACqR,EACHF,EAAgBnR,CAAI,GAAIiR,GAAA,YAAAA,EAAe,MAAMjR,KAAS6Q,GAAY,MAAM7Q,CAAI,MACvE,CACL,KAAM,CAAC+Q,EAAM1e,EAAU,CAAE,CAAA,EAAIgS,GAAYgN,CAAM,EACzCC,EAAiB,OAAOP,GAAS,WAAaA,EAAOQ,UAAQR,CAAI,EAEvEI,EAAgBnR,CAAI,EAAI,CAAE,GAAG3N,EAAS,KAAMif,CAAe,CAAA,CAC7D,CAGKH,OAAAA,CAAA,CACR,EAEGjI,EACEA,EAAA,QAAQ4G,GAAgBqB,CAAe,EAE3C7H,EAAA,QAAQwG,GAAgBqB,CAAe,CAE3C,CAEO,SAASK,IAAW,CAClB,OAAAnI,EAAA,OAA2CyG,GAAgBe,EAAW,CAC/E,CCjSO,MAAMY,GAAwBhd,GAAS,KAAKA,CAAC,GAMvCid,GAAyBjd,GAAS,SAASA,CAAC,IAO5Ckd,GAAM,CAAqCld,EAAMJ,IAAS,KAAKI,CAAC,KAAKJ,CAAC,IAQnE,SAAAud,GACdC,EACAC,EACA,CACA,GAAI,CAACA,EACY,MAAA,CACb,EAAG,IAAM,GAAGD,CAAK,GACjB,GAAIE,GAAK,GAAGF,CAAK,KAAKE,CAAC,GACvB,GAAIC,GAAK,GAAGH,CAAK,KAAKG,CAAC,GACvB,IAAK,CAACD,EAAGC,IAAM,GAAGH,CAAK,KAAKE,CAAC,KAAKC,CAAC,GACnC,GAAI3d,GAAK,GAAGwd,CAAK,IAAIxd,CAAC,GAEtB,GAAI,IAAM,IAAIwd,CAAK,GACnB,IAAKE,GAAK,IAAIF,CAAK,KAAKE,CAAC,GACzB,IAAKC,GAAK,IAAIH,CAAK,KAAKG,CAAC,GACzB,KAAM,CAACD,EAAGC,IAAM,IAAIH,CAAK,KAAKE,CAAC,KAAKC,CAAC,GACrC,IAAK3d,GAAK,IAAIwd,CAAK,IAAIxd,CAAC,GAExB,GAASI,GAAAgd,GAAG,GAAGI,CAAK,IAAIpd,CAAC,EAAE,EAC3B,IAAK,CAACud,EAAG3d,EAAI,KAAc,CACzB,UAAW9D,KAAO,OAAO,KAAKyhB,CAAC,EAC3B3d,EAAAod,GAAG,GAAGI,CAAK,IAAIthB,CAAG,EAAE,CAAC,EAAIyhB,EAAEzhB,CAAG,EAG3B,OAAA8D,CACT,EACA,IAAUI,GAAAid,GAAI,GAAGG,CAAK,IAAIpd,CAAC,EAAE,EAC7B,IAAK,CAACA,EAAGJ,IAAMsd,GAAI,GAAGE,CAAK,IAAIpd,CAAC,GAAIJ,CAAC,CACvC,EAGI,MAAA4d,EAAKC,GAAqB,OAAOJ,GAAc,WAAaA,EAAUI,CAAK,EAAIJ,EAElE,MAAA,CACjB,EAAG,IAAM,GAAGG,EAAG,CAAA,IAAIJ,CAAK,GACxB,MAAS,GAAGI,EAAA,CAAG,IAAIJ,CAAK,KAAKE,CAAC,GAC9B,MAAS,GAAGE,EAAA,CAAG,IAAIJ,CAAK,KAAKG,CAAC,GAC9B,IAAK,CAACD,EAAGC,IAAM,GAAGC,EAAG,CAAA,IAAIJ,CAAK,KAAKE,CAAC,KAAKC,CAAC,GAC1C,MAAS,GAAGC,EAAA,CAAG,IAAIJ,CAAK,IAAIxd,CAAC,GAC7B,GAASA,GAAA,GAAG4d,EAAE,CAAC,IAAI5d,CAAC,GAEpB,GAAI,IAAM,IAAI4d,EAAE,CAAC,IAAIJ,CAAK,GAC1B,OAAU,IAAII,GAAG,IAAIJ,CAAK,KAAKE,CAAC,GAChC,OAAU,IAAIE,GAAG,IAAIJ,CAAK,KAAKG,CAAC,GAChC,KAAM,CAACD,EAAGC,IAAM,IAAIC,EAAA,CAAG,IAAIJ,CAAK,KAAKE,CAAC,KAAKC,CAAC,GAC5C,OAAU,IAAIC,GAAG,IAAIJ,CAAK,IAAIxd,CAAC,GAC/B,IAAUA,GAAA,IAAI4d,GAAG,IAAI5d,CAAC,GAEtB,GAASI,GAAAgd,GAAG,GAAGQ,EAAE,EAAI,CAAC,IAAIJ,CAAK,IAAIpd,CAAC,EAAE,EACtC,IAAK,CAACud,EAAG3d,EAAI,KAAc,CACnByd,MAAAA,EAAYG,EAAE,EAAI,EAExB,UAAW1hB,KAAO,OAAO,KAAKyhB,CAAC,EAC3B3d,EAAAod,GAAG,GAAGK,CAAS,IAAID,CAAK,IAAIthB,CAAG,EAAE,CAAC,EAAIyhB,EAAEzhB,CAAG,EAGxC,OAAA8D,CACT,EACA,IAAUI,GAAAid,GAAI,GAAGO,EAAE,EAAI,CAAC,IAAIJ,CAAK,IAAIpd,CAAC,EAAE,EACxC,IAAK,CAACA,EAAGJ,IAAMsd,GAAI,GAAGM,EAAE,EAAI,CAAC,IAAIJ,CAAK,IAAIpd,CAAC,GAAIJ,CAAC,EAChD,MAASod,GAAG,GAAGQ,EAAE,EAAI,CAAC,IAAIxd,CAAC,EAAE,EAC7B,IAAK,CAACud,EAAG3d,EAAI,KAAc,CACnByd,MAAAA,EAAYG,EAAE,EAAI,EAExB,UAAW1hB,KAAO,OAAO,KAAKyhB,CAAC,EAC3B3d,EAAAod,GAAG,GAAGK,CAAS,IAAIvhB,CAAG,EAAE,CAAC,EAAIyhB,EAAEzhB,CAAG,EAG/B,OAAA8D,CACT,EACA,OAAUqd,GAAI,GAAGO,EAAE,EAAI,CAAC,IAAIxd,CAAC,EAAE,EAC/B,IAAK,CAACA,EAAGJ,IAAMsd,GAAI,GAAGM,EAAE,EAAI,CAAC,IAAIxd,CAAC,GAAIJ,CAAC,CACzC,CACF,CC/FO,MAAM8d,GAAqB,2BACrBC,GAAkBvJ,EAAAA,SAAS,IAAM,KAAkB,EAUhD,SAAAwJ,GACdC,EACApJ,EACA,CACA,GAAIA,EAAK,CACD,MAAA4I,EAAYjJ,EAAAA,SAAS,IACPM,QAAMmJ,CAAe,GAEnBF,GAAgB,KACrC,EAEGlJ,EAAA,QAAQiJ,GAAoBL,CAAS,CAAA,KACpC,CACC,MAAAS,EAAoBlJ,EAAAA,OAAmC8I,GAAoB,IAAI,EAC/EL,EAAYjJ,EAAAA,SAAS,IAClBM,EAAAA,MAAMmJ,CAAe,IAAKC,GAAA,YAAAA,EAAmB,QAASH,GAAgB,KAC9E,EAED9I,EAAA,QAAQ6I,GAAoBL,CAAS,CAAA,CAEzC,CAEO,SAASU,IAA6C,CACpD,OAAAnJ,EAAA,OAAO8I,GAAoBC,EAAe,CACnD,CAOO,SAASK,GACdZ,EACAC,EAAyBU,KACzB,CACA,OAAOZ,GAAOC,EAAOK,GAAUA,EAAQ,MAAQ/I,EAAAA,MAAM2I,CAAS,CAAE,CAClE,CCjDO,MAAMY,GAAqB,4BAMlC,MAAMC,EAAkC,CAGtC,YAAY,CAAE,QAAAvP,EAAU,CAAE,EAA0B,CAAA,EAAI,CAFhDwP,GAAA,gBAGN,KAAK,QAAUxP,CAAA,CAGjB,SAAU,CACR,OAAO,KAAK,SAAA,CAEhB,CAEA,MAAMyP,GAAiB,IAAIF,GAoBpB,SAASG,GAAMC,EAA6B,CACjD,MAAMjB,EAAYU,GAAa,EACzBQ,EAAUxJ,EAAAA,mBAAmB,EAC/BH,EAAkB,OAAAqJ,GAAoBG,EAAc,EACpDA,GAEEnN,EAAKuN,EAAAA,WAAW,EAEtBC,OAAAA,EAAA,YACE,IAAM,CACDxN,EAAA,MAAQyD,QAAM4J,CAAQ,GAAK,GAAGjB,EAAU,KAAK,OAAOkB,EAAQ,QAAS,CAAA,EAC1E,EACA,CAAE,MAAO,MAAO,CAClB,EAEOG,EAAAA,SAASzN,CAAE,CACpB,CCJO,MAAM0N,GAAiB,uBACxBC,GAAc,WAQJ,SAAAC,GAAe9L,EAAoB0B,EAAW,CAC5D,GAAIA,EACEA,EAAA,QACFkK,GACAvK,WAAS,IAAMM,EAAM,MAAA3B,CAAK,CAAC,CAC7B,MACK,CACC,MAAA+L,EAAgBlK,EAAAA,OAAgD+J,GAAgB,IAAI,EACpFI,EAAgB3K,EAAAA,SAAS,IACxB0K,GAAA,MAAAA,EAAe,MAIbzL,GAAayL,EAAc,MAAOpK,EAAA,MAAM3B,CAAK,CAAQ,EAHnD2B,EAAAA,MAAM3B,CAAK,CAIrB,EAED8B,EAAA,QAAQ8J,GAAgBI,CAAa,CAAA,CAEzC,CAEO,SAASC,GACdzT,EACA0T,EACArC,EAAgC,CAAA,EAChC,CACA,MAAMmC,EAAgBnK,EAAA,OACpB+J,GACA,IACF,EACMO,EAAc9K,EAAAA,SAAgC,IAAM,OACjD,QAAAN,EAAAiL,GAAA,YAAAA,EAAe,QAAf,YAAAjL,EAAsB,UAAW,CAAC,CAAA,CAC1C,EACK+K,EAAczK,EAAAA,SAAgC,IAAM,OACxD,QAAON,EAAAiL,GAAA,YAAAA,EAAe,QAAf,YAAAjL,EAAuBvI,KAAS,CAAC,CAAA,CACzC,EACK4T,EAAO,OAAO,KAAKF,CAAW,EAC9BlM,EAEF,CAAC,EAEL,OAAAoM,EAAK,QAAerjB,GAAA,CACZ,MAAAsjB,EAAOxC,EAAO9gB,CAAG,EACjBujB,EACJjjB,GAASgjB,CAAI,GAAKvjB,GAAIujB,EAAM,SAAS,EAAIA,EAAO,CAAE,QAASA,CAAK,EAE5DE,EAAYhjB,GAAW+iB,EAAY,SAAS,EAAIA,EAAY,UAAY,KACxEE,EAAeF,EAAY,QAC3BG,EAASxjB,GAAOqjB,EAAY,MAAM,EAAIT,GAAY,KAAK,OAAO9iB,CAAG,CAAC,EAAIujB,EAAY,OAClFI,EAAY9jB,GAChB,CAAC6jB,GAAUljB,GAAWX,CAAK,EAAIA,EAAA,EAAUA,EACrC+jB,EAAa,IAChB,CAACF,GAAUljB,GAAWijB,CAAY,EAAIA,IAAiBA,GAExDF,EAAY,UAAYC,IACxBK,EAAA,MACE,IAAMV,EAAYnjB,CAAG,EACZH,GAAA,CACH,GAAAK,GAAOL,CAAK,EAAG,CACb0jB,EAAY,UACd,QAAQ,KAAK,GAAGO,GAAarU,CAAI,CAAC,MAAMzP,CAAa,gCAAgC,EAGvF,MAAA,SACS,CAACwjB,EACV,OAGaA,EAAU3jB,CAAK,IAEf,IACL,QAAA,KACN,GAAGikB,GAAarU,CAAI,CAAC,iCAAiCzP,CAAa,QACrE,CAEJ,EACA,CAAE,UAAW,EAAK,CACpB,EAEEujB,EAAY,OACRtM,EAAAjX,CAAG,EAAIsY,EAAS,SAAA,IAAM6K,EAAYnjB,CAAG,GAAK4jB,GAAY,EAEtD3M,EAAAjX,CAAG,EAAIsY,EAAAA,SAAS,IAChBpY,GAAOijB,EAAYnjB,CAAG,CAAC,EACpBE,GAAO6iB,EAAY,MAAM/iB,CAAG,CAAC,EAG7BE,GAAOkjB,EAAY,MAAMpjB,CAAG,CAAC,EAI3B4jB,EAAW,EAHTD,EAASP,EAAY,MAAMpjB,CAAG,CAAC,EAH/B2jB,EAASZ,EAAY,MAAM/iB,CAAG,CAAC,EASnCmjB,EAAYnjB,CAAG,CACvB,CACH,CACD,EAEM+jB,EAAAA,SAAS9M,CAAK,CAGvB,CAiBA,SAAS6M,GAAarU,EAAc,CAC3B,MAAA,aAAaA,EAAK,OAAO,CAAC,EAAE,kBAAsB,EAAAA,EAAK,UAAU,CAAC,CAAC,GAC5E,CAEO,MAAMuU,EAAc,CACzB,KAAM,QACN,QAAS,IACX,EACaC,GAAoB,CAC/B,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACaC,GAAoB,CAC/B,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EA2CO,SAASC,GAAiDlN,EAAU,CAClE,OAAA,OAAO,OAAOA,CAAK,CAC5B,CAEO,SAASmN,GAAkDnN,EAAU,CAK1E,OAAO,OAAO,OAAO,CAAE,GAJR,CACb,QAAS+M,CACX,EAEkC,GAAG/M,EAAO,CAC9C,CAWgB,SAAAoN,GAIdpN,EAAUoM,EAAWiB,EAAW,CAC1B,MAAAC,EAAc,IAAI,IAAIlB,CAAI,EAEhC,OAAO,OAAO,OACZ,OAAO,OACJ,OAAO,KAAKpM,CAAK,EAAY,OAAO,CAACH,EAAMjE,KACrC0R,EAAY,IAAI1R,CAAO,IACrBiE,EAAAjE,CAAO,EAAIoE,EAAMpE,CAAO,GAGxBiE,GACN,EAAE,EACI,CAAA,CAAC,CAEd,CACF,CAIO,MAAM0N,GAAW,OAClBC,GAAmC,CAAC,QAAS,UAAW,OAAO,EAC/DC,GAAiB7kB,GAAyB4kB,GAAgB,SAAS5kB,CAAK,EAE9D,SAAA8kB,GAAelB,EAAwC,UAAW,CACzE,MAAA,CACL,QAAS,IAAM7K,EAAA,MAAM6K,CAAY,EACjC,UAAWiB,EACb,CACF,CAIO,MAAME,GAAY,OACnBC,GAAqC,CAAC,UAAW,UAAW,QAAS,SAAS,EAC9EC,GAAkBjlB,GAA0BglB,GAAiB,SAAShlB,CAAK,EAEjE,SAAAklB,GAAgBtB,EAAyC,UAAW,CAC3E,MAAA,CACL,QAAS,IAAM7K,EAAA,MAAM6K,CAAY,EACjC,UAAWqB,EACb,CACF,CAQO,MAAME,GAAY,CAAC,OAAQ,OAAQ,KAAK,EAClCC,GAAY,CAAC,OAAQ,OAAQ,KAAK,EAiDzCC,GAAa,CAAC,SAAU,KAAK,EAE5B,SAASC,GAAkD,CACzD,OAAAD,EACT,CAEgB,SAAAE,EACdvT,KACGY,EACH,CACI,GAAA,MAAM,QAAQZ,CAAQ,EACf,QAAAxQ,EAAI,EAAG4H,EAAM4I,EAAS,OAAQxQ,EAAI4H,EAAK,EAAE5H,EAAG,CAC7C,MAAAuQ,EAAUC,EAASxQ,CAAC,EAE1B,OAAOuQ,GAAY,YAAcA,EAAQ,GAAGa,CAAI,CAAA,MAGlD,OAAOZ,GAAa,YAAcA,EAAS,GAAGY,CAAI,CAEtD,CAEO,SAAS4S,GAAkCC,EAAU,CACnD,OAAA,MACT,CAEO,MAAMC,GAAY,CACvB,KAAM,CAAC,OAAQ,OAAQ,OAAO,EAC9B,QAAS,IACX,EACaC,GAAa,CACxB,KAAM,CAAC,OAAQ,OAAQ,QAAS,KAAK,EACrC,QAAS,IACX,EAEaC,GAAW,CAAC,OAAQ,QAAQ,EAEzB,SAAAC,GAAejC,EAAsD,KAAM,CAClF,MAAA,CACL,OAAQ,GACR,QAASA,CACX,CACF,CChZO,MAAMkC,GAAmB,0BAEhC,IAAIC,GAAa,IAEjB,GAAInmB,GAAU,CACN,MAAAomB,EAAY,iBAAiB,SAAS,eAAe,EACrDC,EAAY,WAAWD,EAAU,iBAAiB,qBAAqB,EAAE,MAAM,EAEhF,OAAO,MAAMC,CAAS,IACZF,GAAAE,EAEjB,CAEA,MAAMrD,GAAU,CACd,QAAS,CACX,EAEasD,GAAezN,EAAAA,SAAS,IAAMsN,EAAU,EAErD,SAASrN,GAAa5Q,EAAa6Q,EAAa,CACvC,OAAAvY,GAAU0H,CAAG,GAAK,CAAC,OAAO,MAAMA,CAAG,EAAIA,EAAM6Q,CACtD,CAQgB,SAAAwN,GAAaC,EAAgCtN,EAAW,CACtE,GAAIA,EAAK,CACD,MAAAuN,EAAS5N,EAAAA,SAAS,IAAM,CACtB4N,MAAAA,EAAStN,QAAMqN,CAAY,EAE1B,OAAA1N,GAAa2N,EAAQH,GAAa,KAAK,CAAA,CAC/C,EAEGpN,EAAA,QAAQgN,GAAkBO,CAAM,CAAA,KAC/B,CACC,MAAAC,EAAiBrN,EAAAA,OAAmC6M,GAAkB,IAAI,EAC1EO,EAAS5N,EAAAA,SAAS,IAAM,CACtB4N,MAAAA,EAAStN,QAAMqN,CAAY,EAE1B,OAAA1N,GACL2N,EACAC,EAAiB5N,GAAa4N,EAAe,MAAOJ,GAAa,KAAK,EAAIA,GAAa,KACzF,CAAA,CACD,EAEDhN,EAAA,QAAQ4M,GAAkBO,CAAM,CAAA,CAEpC,CAEO,SAASE,IAAY,CAC1B,MAAMF,EAASjN,EAAAA,mBAAmB,EAC9BH,EAA4B,OAAA6M,GAAkBI,EAAY,EAC1DA,GAGG,MAAA,IAAMG,EAAO,MAAQzD,GAAQ,SACtC,CC5DO,MAAM4D,GAAYjC,GAAW,CAClC,KAAMqB,GACN,MAAO,CAAC,OAAQ,MAAM,EACtB,MAAO,OACP,MAAO,OACP,KAAM,OACN,OAAQ,OACR,KAAM,OACN,MAAO,OACP,OAAQ,CAAC,OAAQ,MAAM,EACvB,SAAU,QACZ,CAAC,ECRKa,GAAkBC,OAAOC,OAA2B,CACxD,UACA,WACA,WACA,WAAW,CACZ,EAEKC,GAAU,kDAEDC,qBAAgB,CAC7BjX,KAAM,OACNwH,MAAOoP,GACPM,MAAMC,EAAQ,CAAEC,MAAAA,EAAO1L,MAAAA,CAAM,EAAG,CAC9B,MAAMlE,EAAQiM,GAAS,OAAQ0D,EAAQ,CACrCpG,KAAM,CACJkD,OAAQ,GACRoD,QAAS,KACTC,OAAQ,EACT,EACDC,MAAO,EACPC,MAAO,KACPC,MAAO,KACPC,KAAM,CACJL,QAAS,KACTtD,UAAW3jB,GAAS,CAAC,aAAc,WAAY,MAAM,EAAEunB,SAASvnB,CAAK,CACtE,EACDwnB,OAAQ,KACRpmB,KAAM,KACNmC,MAAO,KACPkkB,OAAQ,KACRC,SAAU,CACRT,QAAS,KACTpD,OAAQ,EACV,CACF,CAAC,EAEK8D,EAAKtF,GAAc,MAAM,EAEzBrH,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,IAAImP,EAAY,GAEhB,OAAIxQ,EAAMoQ,SACRI,EAAYnB,GAAgBc,SAASnQ,EAAMoQ,MAA0B,EACjEG,EAAGE,GAAGzQ,EAAMoQ,MAAM,EAClBpQ,EAAMoQ,QAGL,CACL,CAACG,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGE,GAAG,QAAQzQ,EAAMkQ,IAAI,EAAE,CAAC,EAAGlQ,EAAMkQ,KACrC,CAACM,CAAS,EAAGA,CACd,CACH,CAAC,EACKE,EAAgBrP,EAAAA,SAAS,IAAM1P,GAASqO,EAAM+P,KAAK,GAAK,CAAC,EACzDM,EAAShP,EAAAA,SAAS,IAAM,OAC5B,GAAI,OAAOrB,EAAMqQ,QAAW,SAC1B,MAAO,GAAIrQ,EAAMqQ,OAAS,EAAK,CAAC,OAGlC,MAAM1Q,GAAUK,EAAAA,EAAMqQ,SAANrQ,YAAAA,EAAc1T,MAAMkjB,IAEpC,GAAI,CAAC7P,EAAS,OAAO,KAErB,MAAMtP,EAASsB,GAASgO,EAAQ,CAAC,CAAC,EAElC,OAAKA,EAAQ,CAAC,EAIPtP,EAAS,GAAGA,CAAM,GAAGsP,EAAQ,CAAC,CAAC,GAAK,KAHlC,GAAItP,EAAS,EAAK,CAAC,MAI9B,CAAC,EACKsgB,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAuB,CAC3BxkB,MAAO6T,EAAM7T,KACd,EAED,OAAI6T,EAAMhW,KACR2mB,EAAMC,SAAW5Q,EAAMhW,KACd0mB,EAAc9nB,QAAU,IACjC+nB,EAAMC,SAAW,GAAGF,EAAc9nB,KAAK,MAGrCynB,EAAOznB,QACT+nB,EAAMJ,EAAGtG,GAAG,QAAQ,CAAC,EAAIoG,EAAOznB,OAG3B+nB,CACT,CAAC,EAED,SAASE,GAAgB,CACvB,MAAMC,EAAS,CACbC,MAAOnN,EAAUhb,MACjB+nB,MAAOA,EAAM/nB,MACbonB,MAAOhQ,EAAMgQ,MACbgB,KAAOpB,EAAMoB,OAAoBhR,EAAMiQ,OAASjQ,EAAMgQ,MAAQ,MAAQiB,QACtE,aAAcjR,EAAMiQ,MACpB,cAAe,EAAEjQ,EAAMiQ,OAASjQ,EAAMgQ,MACvC,EAED,OAAI9L,EAAM2L,QACRqB,EAAA,YACSJ,IAAAA,EAAMI,CAAAA,EAAA,YACPC,IAAAA,KAAAA,CAAAA,EAAU,WAACjN,EAAO,SAAS,CAAC,CAAA,CAAA,CAAA,EAKlClE,EAAMuJ,KACR2H,EAAA,YACSJ,IAAAA,EAAMI,CAAAA,EAAA,YACPtkB,IAAAA,KAAAA,CAAAA,EAAC,EAACoT,EAAMuJ,IAAI,CAAC,CAAA,CAAA,CAAA,EAKvB2H,kBAAcJ,EAAM,IAAA,CACtB,CAEA,MAAO,IACD,OAAO9Q,EAAMsQ,UAAa,WACrBtQ,EAAMsQ,SAAStQ,EAAc4P,EAAOiB,CAAa,EAGnDA,EAAe,CAE1B,CACF,CAAC,ECnIYO,GAAgBlE,GAAU,CACrC,SAAU,CACR,KAAM,SACN,QAAS,IACX,EACA,KAAM,CACJ,KAAM,OACN,QAAS,MAAA,CAEb,CAAC,ECTDmE,GAAe5B,kBAAgB,CAC7B,KAAM,WACN,MAAO2B,GACP,MAAMpR,EAAO,CAAE,MAAAkE,GAAS,CACtB,MAAO,IACD,OAAOlE,EAAM,UAAa,WACrBmR,EAAW,WAAAjN,EAAO,UAAWlE,EAAM,IAAI,EAGzCA,EAAM,SAASA,EAAM,IAAI,CAClC,CAEJ,CAAC,ECTYsR,GAAYnE,GAAW,CAClC,OAAQJ,EACR,KAAMyB,GACN,MAAOzB,EACP,MAAO,CACL,KAAM,CAAC,QAAS,OAAQ,KAAK,EAC7B,QAAS,IACX,EACA,IAAK,OACL,SAAUA,EACV,UAAW,OACX,UAAWgB,GACX,eAAgB,OAChB,WAAY,OACZ,MAAO,OACP,YAAaG,EAAuC,EACpD,OAAQA,EAAU,EAClB,OAAQA,EAAU,CACpB,CAAC,gGCXK,MAAAqC,EAAKtF,GAAc,MAAM,EAEzBjL,EAAQiM,GAAS,OADRsF,EACwB,CACrC,OAAQ,CACN,QAAS,GACT,OAAQ,EACV,EACA,KAAM9C,GAAe,EACrB,MAAO,GACP,MAAO,GACP,IAAK,GACL,SAAU,GACV,UAAW,GACX,UAAW,KACX,eAAgB,IAAM8B,EAAG,GAAG,MAAM,EAClC,WAAY,KACZ,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKrM,EAAQsN,EAAAA,SAAA,EAERlI,EAAQU,GAAS,EAEjByH,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAEhC2R,EAAStQ,WAAS,IAAM,CAAC,EAAErB,EAAM,KAAOkE,EAAM,IAAI,EAClD0N,EAAYvQ,EAAAA,SAAS,IAAM,CAC/B,MAAMsP,EAAQ,CAAC,EAEf,OAAI3Q,EAAM,YACR2Q,EAAMJ,EAAG,GAAG,eAAe,CAAC,EAAIvQ,EAAM,WAGjC2Q,CAAA,CACR,EACKkB,EAAYxQ,EAAAA,SAAS,IAAM,CAC/B,GAAIrB,EAAM,MAAO,CACX,GAAAA,EAAM,QAAU,GAClB,MAAO,CAAE,MAAO,IAAK,MAAO,GAAI,EAG9B,GAAA,OAAOA,EAAM,OAAU,SACzB,MAAO,CAAE,MAAOA,EAAM,MAAO,MAAOA,EAAM,KAAM,EAGlD,GAAI,MAAM,QAAQA,EAAM,KAAK,EAC3B,MAAO,CAAE,MAAOrO,GAASqO,EAAM,MAAM,CAAC,CAAC,EAAG,MAAOrO,GAASqO,EAAM,MAAM,CAAC,CAAC,CAAE,CAC5E,CAGF,MAAO,CAAE,MAAO,EAAG,MAAO,CAAE,CAAA,CAC7B,EAEG,IAAArE,EAEJiR,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP,aAAa+S,CAAK,EAElB,MAAMI,EAAQnT,EAAQipB,EAAU,MAAM,MAAQA,EAAU,MAAM,MAE1D9V,EACFJ,EAAQ,WAAW,IAAM,CACvB8V,EAAc,MAAQ7oB,GACrBmT,CAAK,EAER0V,EAAc,MAAQ7oB,CACxB,CAEJ,EAEakpB,EAAA,CACX,cAAAL,EACA,OAAAE,EACA,WAAAI,EACA,WAAAC,CAAA,CACD,EAED,SAASC,EAAgB/Y,EAAmB,CAChCiV,EAAAnO,EAAM,YAAa9G,CAAK,CAAA,CAGpC,SAAS6Y,GAAa,CACpB5D,EAAUnO,EAAM,MAAM,CAAA,CAGxB,SAASgS,GAAa,CACpB7D,EAAUnO,EAAM,MAAM,CAAA,cAMbkS,QAAAlS,CAAA,EAAM,qBA8CfmS,EAAAA,YAsCaC,EAAAA,WAAA,OApCX,OAAA,GACC,KAAMF,EAAAA,MAAKlS,CAAA,EAAC,eACZ,aAAa+R,EACb,aAAaC,CAAA,qBAEd,IA8BM,CA9BKP,EAAa,qBAAxBY,EAAAA,mBA8BM,MAAA,OA9BqB,MAAKC,iBAAA,CAAGJ,EAAA,MAAE3B,CAAA,EAAC,IAAK2B,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,EAAE,MAAA3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,CAAA,GAEpD2B,EAAAA,MAAAlS,CAAA,EAAM,oDADfqS,qBAKO,MAAA,OAHJ,wBAAQH,EAAA,MAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,EAAA,MAAAlS,CAAA,EAAM,SAAS,CAAA,EACtC,uBAAO4R,EAAS,KAAA,EAChB,QAAOK,YAEVM,EAAAA,WAsBOC,sBAtBP,IAsBO,CArBLtB,cAoBWgB,EAAAA,MAAAb,EAAA,EAAA,CApBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAWM,CAXNyS,EAAAA,mBAWM,MAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAChBgC,EAAAA,WASOC,mBATP,IASO,CARLtB,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CAPA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAC/B,IAKQ,CALRkR,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,KAAM4I,EAAAA,SAAM,MAAQA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,KAClC,OAAQ4I,EAAAA,SAAM,YAAcA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC3C,MAAM,oEAKHqI,EAAM,qBAAjBU,EAAAA,mBAMM,MAAA,OANc,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,CAAA,GAC9BgC,EAAAA,WAIOC,kBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,GAAA,qBAC/B,IAAe,CAAZ2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,GAAG,EAAA,CAAA,CAAA,wJA9E1BqS,qBA8CM,MAAA,OA5CH,MAAQC,EAAAA,eAAA,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAK2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,EAAA,SAAM,SAAWA,EAAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,EACrD,YAAWkB,EAAa,MAAA,OAAY,MAAA,GAErCc,EAAAA,WAEOC,sBAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,yBAEnCkR,EAAAA,YAqCakB,EAAAA,WAAA,CApCX,OAAA,GACC,KAAMF,EAAAA,MAAKlS,CAAA,EAAC,eACZ,aAAa+R,EACb,aAAaC,CAAA,qBAEd,IA8BM,CA9BKP,EAAa,qBAAxBY,EAAAA,mBA8BM,MAAA,OA9BqB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAE5B2B,EAAAA,MAAAlS,CAAA,EAAM,oDADfqS,qBAKO,MAAA,OAHJ,wBAAQH,EAAA,MAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,EAAA,MAAAlS,CAAA,EAAM,SAAS,CAAA,EACtC,uBAAO4R,EAAS,KAAA,EAChB,QAAOK,YAEVM,EAAAA,WAsBOC,sBAtBP,IAsBO,CArBLtB,cAoBWgB,EAAAA,MAAAb,EAAA,EAAA,CApBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAWM,CAXNyS,EAAAA,mBAWM,MAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAChBgC,EAAAA,WASOC,mBATP,IASO,CARLtB,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CAPA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAC/B,IAKQ,CALRkR,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,KAAM4I,EAAAA,SAAM,MAAQA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,KAClC,OAAQ4I,EAAAA,SAAM,YAAcA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC3C,MAAM,oEAKHqI,EAAM,qBAAjBU,EAAAA,mBAMM,MAAA,OANc,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,CAAA,GAC9BgC,EAAAA,WAIOC,kBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,GAAA,qBAC/B,IAAe,CAAZ2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,GAAG,EAAA,CAAA,CAAA,oJChI9B,SAAS6S,GACPha,EACAia,EACAC,EACA,OACA,MAAM/S,EAAmB3W,GAASypB,EAAQ,KAAK,EAC3C,CAAE,GAAGA,EAAQ,KAAM,EACnB,CAAE,OAAQA,EAAQ,KAAM,EAE5B9S,EAAM,MAAQ,GAER,MAAAgT,EAAOC,cAAYC,GAAMlT,EAAO,KAAM,EAAG,OAAO,KAAKA,CAAK,CAAC,EAC3DmT,EAAW,iBAAiBta,CAAE,EAAE,SAEtCma,EAAK,WAAaD,EAAM,cAAehS,EAAAgS,EAAc,MAAd,YAAAhS,EAAmB,YAE1DlI,EAAG,UAAY,CACb,KAAAma,EACA,MAAAhT,EACA,eAAgBmT,CAClB,EAEIA,IAAa,WACfta,EAAG,MAAM,SAAW,YAGtBua,EAAA,OAAOJ,EAAMna,CAAE,CACjB,CAEO,MAAMwa,GAAiE,CAC5E,QAAQxa,EAAIia,EAASC,EAAO,CAC1BO,EAAAA,SAAS,IAAMT,GAAWha,EAAIia,EAASC,CAAK,CAAC,CAC/C,EACA,QAAQla,EAAIia,EAASC,EAAO,CAC1BO,EAAAA,SAAS,IAAM,CACT,GAAA,CAACza,EAAG,UAAW,CACNga,GAAAha,EAAIia,EAASC,CAAK,EAC7B,MAAA,CAGI,MAAA/S,EAAmB3W,GAASypB,EAAQ,KAAK,EAAIA,EAAQ,MAAQ,CAAE,OAAQA,EAAQ,KAAM,EACrFS,EAAY1a,EAAG,UAAU,KAAK,UAEhC0a,IACF,OAAO,KAAKvT,CAAK,EAAE,QAAejX,GAAA,CAChCwqB,EAAU,MAAMxqB,CAAG,EAAIiX,EAAMjX,CAAsB,CAAA,CACpD,EAEDwqB,EAAU,MAAM,MAAQ,GAC1B,CACD,CACH,EACA,cAAc1a,EAAI,CACXA,EAAG,YAERua,EAAA,OAAO,KAAMva,CAAE,EACf,OAAOA,EAAG,UAAA,CAEd,EC9DO,SAAS2a,GACdriB,EACA+H,EACAua,EACA5oB,EACA,CACA,GAAI,CAACsG,EACI,OAAAvH,GAGH,MAAA8pB,EAAoBrS,EAAAA,SAAS,IAC7B,OAAOxW,GAAY,UACd,CAAE,QAASA,CAAQ,EAGrBA,GAAW,CAAC,CACpB,EAED,IAAI8oB,EAAS/pB,GAEb,MAAMgqB,EAAYhH,EAAA,MAChB,IAAMjL,EAAAA,MAAMxQ,CAAM,EACZ0H,GAAA,CAGJ,GAFO8a,EAAA,EAEH,CAAC9a,EACH,OAGF,KAAM,CAAE,SAAAgb,EAAU,GAAGC,GAASJ,EAAkB,MAC1C/Y,EAAWzB,GAAiB,CAC3ByI,EAAAA,MAAMkS,CAAQ,GACjBJ,EAASva,CAAU,CAEvB,EAEGL,EAAA,iBAAiBK,EAAOyB,EAASmZ,CAAI,EAExCH,EAAS,IAAM,CACV9a,EAAA,oBAAoBK,EAAOyB,EAASmZ,CAAI,EAClCH,EAAA/pB,EACX,CACF,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,EAEMmqB,EAAO,IAAM,CACPH,EAAA,EACHD,EAAA,CACT,EAEgBjK,OAAAA,kBAAA,GAAKsK,iBAAeD,CAAI,EAEjCA,CACT,CC3DO,MAAME,GAAgB,eAEvBC,OAAe,IAEjB1rB,IACO,SAAA,iBACPmQ,GACCO,GAAiB,CAChB,MAAM/H,EAAS+H,EAAM,OACfib,EAAOjb,EAAM,cAAgBA,EAAM,aAAa,EAEtDgb,GAAS,QAAcrb,GAAA,CAEnBA,IAAO1H,IACNgjB,EAAO,CAACA,EAAK,SAAStb,CAAE,EAAI,CAACA,EAAG,SAAS1H,CAAM,KAC/C,CAAC0H,EAAG,mBACFA,EAAG,oBAAsB1H,GAAU,CAAC0H,EAAG,kBAAkB,SAAS1H,CAAM,IAE3EyH,GAAcC,EAAI,CAAE,KAAMob,EAAA,CAAe,CAC3C,CACD,CACH,EACA,EACF,EASK,SAASG,GACdzZ,EACAxJ,EAA8CugB,EAAA,IAAI,IAAI,EACtD,CACA,IAAIiC,EAAS/pB,GAEb,MAAMgqB,EAAYhH,EAAA,MAChB,IAAMjL,EAAAA,MAAMxQ,CAAM,EACZ0H,GAAA,CACG8a,EAAA,EAEF9a,IAILqb,GAAS,IAAIrb,CAAE,EAEf8a,EAAS,IAAM,CACbO,GAAS,OAAOrb,CAAE,EACT8a,EAAA/pB,EACX,EACF,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,EAEMmqB,EAAO,IAAM,CACPH,EAAA,EACHD,EAAA,CACT,EAEgBjK,OAAAA,kBAAA,GAAKsK,iBAAeD,CAAI,EAC5BP,GAAAriB,EAAQ8iB,GAAetZ,CAAO,EAEnCxJ,CACT,CC9DO,SAASkjB,GACdC,EAAc1qB,GACd2qB,EAA+C7C,EAAA,IAAI,IAAI,EACvD,CACI,IAAA8C,EAEJC,OAAAA,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS,IAAM,CACP,MAAAoB,EAAmBC,GAA0BJ,EAAQ,KAAK,EAE5DG,GACSF,EAAA,IAAI,iBAAiB,IAAM,CAChCE,EAAiB,MAAM,UAAY,SACjC,OAAOJ,GAAgB,YACbA,EAAA,EAGdE,GAAA,MAAAA,EAAU,aACCA,EAAA,KACb,CACD,EAEDA,EAAS,QAAQE,EAAkB,CACjC,WAAY,GACZ,UAAW,GACX,cAAe,GACf,gBAAiB,CAAC,OAAO,CAAA,CAC1B,GAEM,OAAAJ,GAAgB,YAAcA,EAAY,CACnD,CACD,CAAA,CACF,EAEDM,EAAAA,gBAAgB,IAAM,CACpBJ,GAAA,MAAAA,EAAU,aACCA,EAAA,IAAA,CACZ,EAEMD,CACT,CAEO,SAASI,GAA0B9b,EAAqB,CAC7D,GAAIA,EAAI,CACN,IAAIgc,EAAgBhc,EAAG,cAEhB,KAAAgc,GAAiBA,IAAkB,SAAS,MAAM,CACnD,GAAAA,EAAc,MAAM,UAAY,OAC3B,OAAAA,EAGTA,EAAgBA,EAAc,aAAA,CAChC,CAGK,OAAA,IACT,CAEO,SAASC,GAAgBjc,EAAyB,CACnD,OAAAA,GAAA,YAAAA,EAAI,MAAM,WAAY,OACjB,CAAC,CAAC8b,GAA0B9b,CAAE,EAGhC,EACT,CCzCgB,SAAAkc,GACd7Q,EACA8Q,EACAC,EACA,CACA,UAAWzc,KAAQwc,EACb,GAAA9Q,EAAM1L,CAAI,EACZ,OAAQ4H,GACN+Q,EAAA,WAAWjN,EAAO1L,EAAM4H,EAAQ,IAAM,CAC9B,MAAA8U,EAASD,GAAA,YAAAA,EAAW7U,GAE1B,OAAO8U,EAASrY,GAAYqY,CAAM,EAAI,CAAC,CAAA,CACxC,EAIP,OAAOD,GAAY,IACrB,CAEO,SAASE,GAAWrW,EAAmC,CAC5D,MAAMxL,EAAkB,CAAC,EACnBsL,EAAO,MAAM,QAAQE,CAAQ,EAAI,CAAC,GAAGA,CAAQ,EAAI,CAAC,EAExD,KAAOF,EAAK,QAAQ,CACZ,MAAAmU,EAAQnU,EAAK,MAAM,EAErBmU,IAAU,OAEV,MAAM,QAAQA,CAAK,GAChBnU,EAAA,QAAQ,GAAGmU,CAAK,EAIrB,SAAOA,GAAU,UACjB,OAAOA,GAAU,WAChB,CAACqC,EAAA,QAAQrC,CAAK,GAAKA,EAAM,OAASsC,EACnC,YAIE,OAAOtC,GAAU,UAAY,OAAOA,GAAU,SAChDzf,EAAO,KAAKgiB,EAAAA,gBAAgB,OAAOvC,CAAK,CAAC,CAAC,EACjCA,EAAM,OAASwC,EAAA,UAAY,MAAM,QAAQxC,EAAM,QAAQ,EAC3DnU,EAAA,QAAQmU,EAAM,QAAQ,EAE3Bzf,EAAO,KAAKyf,CAAK,GACnB,CAGK,OAAAzf,CACT,CAEO,SAASkiB,GACd9D,EAC+D,CACzD,MAAA+D,EAAQ9T,QAAM+P,CAAG,EAEnB,OAAA,OAAO+D,GAAU,SACXjtB,GAAW,SAAS,cAAcitB,CAAK,EAAI,MAG7CA,GAAA,YAAAA,EAAmC,MAAOA,CACpD,CAEO,SAASC,GAAgB3C,EAAiB,CACxC,OAAA,IAAI,MAAM,GAAW,CAC1B,IAAI9R,EAAGlY,EAAK,WACN,GAACgqB,EAAM,UAEX,QACGhS,EAAAgS,EAAM,UAAU,QAAhB,YAAAhS,EAAgChY,OAChC4sB,EAAA5C,EAAM,UAAU,cAAhB,YAAA4C,EAAsC5sB,OACtC6sB,EAAA7C,EAAM,UAAU,UAAhB,YAAA6C,EAAkC7sB,GAAG,CAE1C,CACD,CACH,CCrFA,MAAM8sB,GAAe,CACnB,CACE,oBACA,iBACA,oBACA,oBACA,mBACA,iBACF,EAEA,CACE,0BACA,uBACA,0BACA,0BACA,yBACA,uBACF,EAEA,CACE,0BACA,yBACA,iCACA,yBACA,yBACA,uBACF,EACA,CACE,uBACA,sBACA,uBACA,uBACA,sBACA,oBACF,EACA,CACE,sBACA,mBACA,sBACA,sBACA,qBACA,mBAAA,CAEJ,EAEA,IAAIvY,GAEJ,GAAI9U,IACF,UAAWgiB,KAAKqL,GACV,GAAArL,EAAE,CAAC,IAAK,SAAU,CACdlN,GAAAkN,EACN,KAAA,EAKN,MAAMsL,GAAY,CAAC,CAACxY,GACdyY,GAAqB,CACzB,UAAAD,GACA,KAAMzU,EAAAA,SAAS,IAAM,EAAK,EAC1B,MAAOzX,GACP,KAAMA,GACN,OAAQA,EACV,EAEMosB,OAAa,IACbC,OAAoB,QAE1B,GAAIztB,IAAY8U,GAAK,CACb,MAAA4Y,EAAU5Y,GAAI,CAAC,EACf6Y,EAAQ7Y,GAAI,CAAC,EAEV,SAAA,iBACP6Y,EACA,IAAM,CAKA,GAJJH,GAAO,QAAiBI,GAAA,CACtBA,EAAM,MAAQ,EAAA,CACf,EAEG,SAASF,CAAO,EAAG,CACrB,MAAMG,EAAOJ,GAAc,IAAI,SAASC,CAAO,CAAC,EAE5CG,IACFA,EAAK,MAAQ,GACf,CAEJ,EACA,EACF,CACF,CAEO,SAASC,GAAcnlB,EAAkCugB,MAAI,IAAI,EAAwB,CAC9F,MAAM6E,EAAYlV,EAAAA,SAAS,CACzB,IAAK,IAAMmU,GAAarkB,CAAM,EAC9B,IAAW0H,GAAA,CACL2d,EAAAA,MAAMrlB,CAAM,IACdA,EAAO,MAAQ0H,EACjB,CACF,CACD,EAEG,GAAA,CAACrQ,IAAY,CAACstB,GAChB,MAAO,CAAE,GAAGC,GAAoB,OAAQQ,CAAU,EAGpD,KAAM,CAACE,EAASC,EAAMR,CAAO,EAAI5Y,GAC3B+Y,EAAO3E,MAAI,EAAK,EAEtB9E,EAAA,MACE,IAAM4I,GAAarkB,CAAM,EACzB,CAAC0H,EAAI8d,IAAQ,CACJA,GAAAV,GAAc,OAAOU,CAAG,EACzB9d,GAAAod,GAAc,IAAIpd,EAAIwd,CAAI,CAClC,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,EAEAL,GAAO,IAAIK,CAAI,EAEX3M,qBACFsK,EAAAA,eAAe4C,CAAI,EAGN,eAAAC,EAAMC,EAAQ,GAAO,CAClC,MAAMF,EAAK,EAEL,MAAA/d,EAAK2c,GAAarkB,CAAM,EAE9B,OAAI0H,IACEie,GAAS,CAAC,SAASZ,CAAO,IACtB,MAAArd,EAAG4d,CAAO,EAAE,EAClBJ,EAAK,MAAQ,GAEN,SAASH,CAAO,IAAMrd,GAI1B,EAAA,CAGM,eAAA+d,EAAKE,EAAQ,GAAO,CAC3B,MAAAje,EAAK2c,GAAarkB,CAAM,EAE9B,OAAI2lB,GAAU,SAASZ,CAAO,GAAK,SAASA,CAAO,IAAMrd,GACjD,MAAA,SAAS6d,CAAI,EAAE,EACrBL,EAAK,MAAQ,GAEN,SAASH,CAAO,IAAMrd,GAGxB,EAAA,CAGM,eAAAke,EAAOD,EAAQ,GAAO,CAC5B,OAAAT,EAAK,MAAQ,MAAMO,EAAKE,CAAK,EAAI,MAAMD,EAAMC,CAAK,CAAA,CAGpD,MAAA,CACL,UAAAhB,GACA,OAAQS,EACR,KAAMlV,EAAA,SAAS,IAAMgV,EAAK,KAAK,EAC/B,MAAAQ,EACA,KAAAD,EACA,OAAAG,CACF,CACF,CCzLO,SAASC,GAASC,EAA+CvF,MAAI,IAAI,EAAG,CAC3E,MAAAwF,EAAUxF,MAAI,EAAK,EAEb8B,GAAAyD,EAAS,aAAcE,CAAY,EACnC3D,GAAAyD,EAAS,aAAcG,CAAY,EAE/C,SAASD,GAAe,CACtBD,EAAQ,MAAQ,EAAA,CAGlB,SAASE,GAAe,CACtBF,EAAQ,MAAQ,EAAA,CAGX,MAAA,CAAE,QAAAD,EAAS,QAAAC,CAAQ,CAC5B,CCHA,MAAMG,OAAoB,QAWpBC,GAAU,OACVC,GAAS,UAER,SAASC,GAAgB3sB,EAAiC,CAC/D,MAAMsG,EAAStG,EAAQ,QAAU6mB,EAAAA,IAAI,IAAI,EAEzC,GAAI,CAAClpB,GACI,MAAA,CAAE,OAAA2I,EAAQ,WAAYvH,EAAK,EAG9B,KAAA,CAAE,QAAA+Q,GAAY9P,EAEhB,IAAA0O,EAAO1O,EAAQ,MAAQ,SAE3B,MAAM4sB,EAAY5a,GAAYhS,EAAQ,WAAa,CAAC,EAAE,QAAU,IAC1D6sB,EAASC,EAAgB9sB,EAAQ,UAAU,EAE5CwsB,GAAc,IAAI9d,CAAI,GACzB8d,GAAc,IAAI9d,EAAU,IAAA,GAAK,EAG7B,MAAAqe,EAAiBP,GAAc,IAAI9d,CAAI,EAExCqe,EAAe,IAAIH,CAAS,GAC/BG,EAAe,IAAIH,EAAe,IAAA,GAAK,EAGnC,MAAAI,EAAcD,EAAe,IAAIH,CAAS,EAE3CI,EAAY,IAAIH,CAAM,GACzBG,EAAY,IAAIH,EAAQ,CACtB,GAAI,IAAI,qBAAqBI,EAAiB,CAAE,GAAGjtB,EAAS,WAAY6sB,EAAQ,EAChF,MAAO,EACP,aAAc,OAAsC,CACrD,EAGC,IAAAtB,EAAQyB,EAAY,IAAIH,CAAM,EAC9B,CAAE,GAAIlD,EAAU,SAAA5Z,CAAa,EAAAwb,EAE7BzC,EAAS/pB,GAEb,MAAMgqB,EAAYhH,EAAA,MAChB,IAAMjL,EAAAA,MAAMxQ,CAAM,EACZ0H,GAAA,CACG8a,EAAA,EAEH,GAAC9a,GAAM,CAAC2b,KAIH5Z,EAAA,IAAI/B,EAAI8B,CAAO,EACxB6Z,EAAS,QAAQ3b,CAAE,EACnBud,GAASA,EAAM,QAEfzC,EAAS,IAAM,CACba,EAAS,UAAU3b,CAAE,EACrB+B,EAAS,OAAO/B,CAAE,EAClBud,GAASA,EAAM,QACNzC,EAAA/pB,EACX,EACF,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,EAEgB8f,kBAAA,GAAKsK,iBAAe+D,CAAU,EAE9C,SAASJ,EAAgBD,EAAiB,CACxC,GAAI,CAACA,GAAU,CAACA,EAAO,KAAA,EAAe,MAAA,IAEtC,MAAMM,EAAQN,EAAO,KAAO,EAAA,MAAMJ,GAAS,CAAC,EAC5CU,EAAM,OAAS,EAEf,QAAS5tB,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,CACpB,MAAA6tB,EAAOD,EAAM5tB,CAAC,EAEd4tB,EAAA5tB,CAAC,EAAImtB,GAAO,KAAKU,CAAI,EAAIA,EAAO,GAAGtmB,GAASsmB,CAAI,CAAC,IAAA,CAGlD,OAAAD,EAAM,KAAK,GAAG,CAAA,CAGvB,SAASF,EAAgBI,EAAsC,CACpD,QAAA9tB,EAAI,EAAG4H,EAAMkmB,EAAQ,OAAQ9tB,EAAI4H,EAAK,EAAE5H,EAAG,CAC5C,MAAA4N,EAAQkgB,EAAQ9tB,CAAC,EACjBuQ,EAAUC,EAAS,IAAI5C,EAAM,MAAM,EAErC,OAAO2C,GAAY,YACrBA,EAAQ3C,CAAK,CACf,CACF,CAGF,SAAS+f,GAAa,CACVnE,EAAA,EACHD,EAAA,EAEFyC,IAEDA,EAAM,OAAS,IACjByB,EAAY,OAAOH,CAAM,EAEpBG,EAAY,OACfD,EAAe,OAAOH,CAAS,EAE1BG,EAAe,MAClBP,GAAc,OAAO9d,CAAI,IAKvB6c,EAAA,OACG5B,EAAA,OACA5Z,EAAA,OACJrB,EAAA,OAAA,CAGF,MAAA,CAAE,OAAApI,EAAQ,WAAA4mB,CAAW,CAC9B,CCjJO,SAASI,IAAe,CACvB,MAAAC,MAAgB,IAEtB,SAASC,EAAazvB,EAAU,CACvB,OAAA0vB,EAAA,UAAa,CAACC,EAAOC,IAAY,CACtC,IAAIC,EAAS7vB,EAEb,MAAM8vB,EAAS,IAAM,CACf9vB,IAAU6vB,IACHA,EAAA7vB,EACD4vB,EAAA,EAEZ,EAEO,MAAA,CACL,IAAK,KAAOD,EAAS,EAAA3vB,GACrB,IAAiB+vB,GAAA,CACXA,IAAa/vB,IAETA,EAAA+vB,EACRP,EAAU,IAAIM,CAAM,EAAA,CAExB,CAAA,CACD,CAAA,CAGH,SAASE,GAAgB,CACvB,UAAWJ,KAAWJ,EACZI,EAAA,EAGVJ,EAAU,MAAM,CAAA,CAGX,MAAA,CAAE,UAAAA,EAAW,UAAAC,EAAW,cAAAO,CAAc,CAC/C,CCsBA,MAAMC,GAA0C,CAC9C,KAAM,UACN,QAAS,OACT,IAAK,OACL,OAAQ,MACR,GAAI,UACJ,KAAM,YACN,KAAM,YACN,MAAO,YACT,EAEMC,GAAc,QACdC,GAAU,SAEVC,GAAgB,CAAC,aAAc,UAAU,EAE/B,SAAAC,GAAYpuB,EAA8B,GAAI,CACtD,KAAA,CACJ,UAAAquB,EAAY,GACZ,QAAAC,EAAU,GACV,QAAAC,EAAU,GACV,aAAAC,EAAe,GACf,UAAAC,EAAY1vB,GACZ,QAAA2vB,EAAU3vB,EAAA,EACRiB,EAEEsG,EAAStG,EAAQ,QAAU6mB,EAAAA,IAAI,IAAI,EACnCmC,EAAW2C,EAAAA,MAAM3rB,EAAQ,QAAQ,EAAIA,EAAQ,SAAW6mB,EAAA,IAAI7mB,EAAQ,UAAY,EAAK,EACrF2uB,EAAW,CAAE,GAAGX,GAAiB,GAAIhuB,EAAQ,UAAY,EAAI,EAC7D4uB,EAAa3M,EAAAA,SAAa,IAAA,GAAa,EACvC4M,MAAe,IACfC,EAAgC7M,EAAA,SAAS,CAAE,WAAA2M,EAAY,SAAAG,EAAU,EAE9D,SAAAC,EAAY9wB,EAAaH,EAAgB,CAC5CG,KAAO4wB,IACTA,EAAS5wB,CAAG,EAAIH,EAClB,CAGO,SAAAkxB,EAAe5gB,EAAsBtQ,EAAgB,SACtD,MAAAG,GAAMgY,EAAA7H,EAAM,MAAN,YAAA6H,EAAW,oBAEjBqL,EAAO,EADAuJ,EAAAzc,EAAM,OAAN,YAAAyc,EAAY,oBACL5sB,CAAG,EAAE,OAAO,OAAO,EAEvC,UAAWA,KAAOqjB,EAChBqN,EAAW7wB,EAAQ,MAAQ,QAAQ,EAAEG,CAAG,EACxC8wB,EAAY9wB,EAAKH,CAAK,EAGpB,GAAA,CAACA,GAASG,IAAQ,OAAQ,CAC5B,UAAWA,KAAO2wB,EAChBD,EAAW,OAAO1wB,CAAG,EACrB8wB,EAAY9wB,EAAK,EAAK,EAGxB2wB,EAAS,MAAM,CAAA,SAEf9wB,GACA,OAAOsQ,EAAM,kBAAqB,YAClCA,EAAM,iBAAiB,MAAM,EAE7B,UAAWnQ,IAAO,CAAC,GAAG0wB,EAAY,GAAGrN,CAAI,EACvCsN,EAAS,IAAI3wB,CAAG,CAEpB,CAGF,SAAS6wB,GAAW,CAClB,OAAO,KAAKD,CAAQ,EAAE,QAAe5wB,GAAA,CACnC4wB,EAAS5wB,CAAG,EAAI,EAAA,CACjB,EAED4wB,EAAS,WAAaF,EACtBE,EAAS,SAAWC,CAAA,CAGhB,MAAAG,EAAgB,IAAI,MAAMJ,EAAU,CACxC,IAAIxoB,EAAQyG,EAAMoiB,EAAU,CAC1B,GAAI,OAAOpiB,GAAS,UAAYohB,GAAc,SAASphB,CAAI,EACzD,OAAO,QAAQ,IAAIzG,EAAQyG,EAAMoiB,CAAQ,EASvC,GANJpiB,EAAOA,EAAK,kBAAkB,EAE1BA,KAAQ4hB,IACV5hB,EAAO4hB,EAAS5hB,CAAI,GAGlB,EAAEA,KAAQ+hB,GACR,GAAAb,GAAY,KAAKlhB,CAAI,EAAG,CACpB,MAAAwU,EAAOxU,EAAK,MAAMmhB,EAAO,EAAE,IAAIhwB,GAAOA,EAAI,MAAM,EAEtD4wB,EAAS/hB,CAAI,EAAIyJ,EAAS,SAAA,IAAM+K,EAAK,MAAarjB,GAAA4Y,EAAAA,MAAMoY,EAAchxB,CAAG,CAAC,CAAC,CAAC,CAAA,MAE5E4wB,EAAS/hB,CAAI,EAAI8Z,EAAAA,IAAI+H,EAAW,IAAI7hB,CAAI,CAAC,EAI7C,OAAO+J,EAAAA,MAAM,QAAQ,IAAIxQ,EAAQyG,EAAMoiB,CAAQ,CAAC,CAAA,CAClD,CACD,EAED,OAAAxG,GACEriB,EACA,UACC+H,GAAyB,CACpBmgB,GAAgBngB,EAAM,SAAWyI,EAAA,MAAMxQ,CAAM,IAIjD2oB,EAAe5gB,EAAO,EAAI,EAC1BogB,EAAUpgB,EAAO6gB,CAAa,EAChC,EACA,CAAE,QAAAZ,EAAS,QAAAC,EAAS,SAAAvF,CAAS,CAC/B,EACAL,GACEriB,EACA,QACC+H,GAAyB,CACpBmgB,GAAgBngB,EAAM,SAAWyI,EAAA,MAAMxQ,CAAM,IAIjD2oB,EAAe5gB,EAAO,EAAK,EAC3BqgB,EAAQrgB,EAAO6gB,CAAa,EAC9B,EACA,CAAE,QAAAZ,EAAS,QAAAC,EAAS,SAAAvF,CAAS,CAC/B,EAEIqF,GACF1F,GAAYriB,EAAQ,OAAQyoB,EAAU,CAAE,QAAAT,EAAS,QAAAC,EAAS,SAAAvF,EAAU,EAG/D,CAAE,OAAA1iB,EAAQ,SAAU4oB,CAA+B,CAC5D,CC/LO,SAASE,GAAWC,EAAyB,CAC5C,MAAAC,EAAYzI,MAAI,EAAK,EAErB0I,EAAQ,IAAOD,EAAU,MAAQ,GAEvC1F,OAAAA,EAAAA,UAAU,IAAM,CACVyF,IAAS,OACX5G,EAAAA,SAAS8G,CAAK,EACLF,IAAS,QAClB,sBAAsBE,CAAK,EAErBA,EAAA,CACR,CACD,EAEDxF,EAAAA,gBAAgB,IAAM,CACpBuF,EAAU,MAAQ,EAAA,CACnB,EAEM,CAAE,UAAWxO,WAASwO,CAAS,CAAE,CAC1C,CCmDA,SAASE,GAA8BnhB,EAAU,CAC3CA,EAAM,aACRA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EAEzB,CAEO,SAASohB,GAAUzvB,EAA2B,CACnD,MAAMsG,EAAStG,EAAQ,QAAU6mB,EAAAA,IAAI,IAAI,EACnC6I,EAAI/D,QAAM3rB,EAAQ,CAAC,EAAIA,EAAQ,EAAI6mB,MAAI,CAAC,EACxC8I,EAAIhE,QAAM3rB,EAAQ,CAAC,EAAIA,EAAQ,EAAI6mB,MAAI,CAAC,EACxC+I,EAAOjE,EAAAA,MAAM3rB,EAAQ,IAAI,EAAIA,EAAQ,KAAO6mB,EAAA,IAAI7mB,EAAQ,MAAQ,EAAK,EACrEgpB,EAAW2C,EAAAA,MAAM3rB,EAAQ,QAAQ,EAAIA,EAAQ,SAAW6mB,EAAA,IAAI7mB,EAAQ,UAAY,EAAK,EAErF,CAAE,QAAAsuB,EAAU,GAAM,UAAAuB,EAAY,GAAM,UAAAC,EAAY,IAAS9vB,EAEzD+vB,EAASlJ,MAAI,EAAK,EAClBmJ,EAA6B,CACjC,OAAQ,EACR,OAAQ,EACR,KAAM,EACN,KAAM,EACN,QAAS,EACT,QAAS,EACT,OAAQ,EACR,OAAQ,EACR,KAAM,EACR,EAEA,IAAIjf,EAAU,EACVqC,EAAS,EAEP,MAAA6c,EAAe1f,GAAUlC,GAAwB,OACjD+E,EAASrC,IAEbmf,EAAY7hB,CAAK,EAEZ2hB,EAAc,OACjBN,EAAE,MAAQM,EAAc,KACxBL,EAAE,MAAQK,EAAc,OAGlB9Z,EAAAlW,EAAA,SAAA,MAAAkW,EAAA,KAAAlW,EAASgwB,EAAe3hB,GAAK,CACtC,EAED,SAASjP,EAAMiP,EAAqB,OAC9B2a,EAAS,QAEb,OAAO,OAAOgH,EAAe,CAC3B,OAAQN,EAAE,MACV,OAAQC,EAAE,MACV,KAAMD,EAAE,MACR,KAAMC,EAAE,MACR,QAASthB,EAAM,QACf,QAASA,EAAM,QACf,KAAMuhB,EAAK,KAAA,CACZ,IAEG1Z,EAAAlW,EAAQ,UAAR,YAAAkW,EAAA,KAAAlW,EAAkBgwB,EAAe3hB,MAAW,KAIhD,SAAS,iBAAiB,cAAe8hB,EAAM,CAAE,QAAA7B,EAAS,EAC1D,SAAS,iBAAiB,YAAa8B,EAAK,CAAE,QAAA9B,EAAS,EAE9Clb,EAAArC,EACTgf,EAAO,MAAQ,IAAA,CAGjB,SAASI,EAAK9hB,EAAqB,CAC7B2a,EAAS,QAEbwG,GAAanhB,CAAK,EAClB4hB,EAAa5hB,CAAK,EAAA,CAGpB,SAAS+hB,EAAI/hB,EAAqB,OAChC,SAAS,oBAAoB,cAAe8hB,EAAM,CAAE,QAAA7B,EAAS,EAC7D,SAAS,oBAAoB,YAAa8B,EAAK,CAAE,QAAA9B,EAAS,EAEtD,CAAAtF,EAAS,QAEbkH,EAAY7hB,CAAK,EAEb2hB,EAAc,OAChBN,EAAE,MAAQM,EAAc,KACxBL,EAAE,MAAQK,EAAc,MAG1BD,EAAO,MAAQ,GACb,EAAAhf,GAEMmF,EAAAlW,EAAA,QAAA,MAAAkW,EAAA,KAAAlW,EAAQgwB,EAAe3hB,GAAK,CAGtC,SAAS6hB,EAAY7hB,EAAqB,CAClC,KAAA,CAAE,QAAAgiB,EAAS,QAAAC,CAAA,EAAYjiB,EACvB,CAAE,OAAAkiB,EAAQ,OAAAC,EAAQ,QAASC,EAAc,QAASC,GAAiBV,EACnEW,EAASN,EAAUI,EACnBG,EAASN,EAAUI,EAEzBV,EAAc,OAASW,EACvBX,EAAc,OAASY,EACvBZ,EAAc,KAAOO,EAASI,EAC9BX,EAAc,KAAOQ,EAASI,CAAA,CAGhC,OAAAjI,GAAYriB,EAAQ,cAAelH,EAAO,CAAE,QAAAkvB,EAAS,EAErDuB,GAAalH,GAAYriB,EAAQ,YAAakpB,GAAc,CAAE,QAAAlB,EAAS,EACvEwB,GAAanH,GAAYriB,EAAQ,aAAckpB,GAAc,CAAE,QAAAlB,EAAS,EAEjE,CACL,OAAAhoB,EACA,OAAQkQ,EAAA,SAAS,IAAMuZ,EAAO,KAAK,EACnC,EAAAL,EACA,EAAAC,EACA,KAAAC,EACA,SAAA5G,CACF,CACF,CCpKA,MAAM5V,OAAa,IAEnBA,GAAO,IAAI,IAAK,CAAC,EACjBA,GAAO,IAAI,IAAK,CAAC,EC3BjB,MAAMyd,GAAQ,CAAC,MAAO,QAAS,SAAU,MAAM,EAGzCltB,GAAM,KAAK,IACXD,GAAM,KAAK,IACXotB,GAAQ,KAAK,MACbC,GAAQ,KAAK,MACbC,GAAe5uB,IAAM,CACzB,EAAGA,EACH,EAAGA,CACL,GACM6uB,GAAkB,CACtB,KAAM,QACN,MAAO,OACP,OAAQ,MACR,IAAK,QACP,EACMC,GAAuB,CAC3B,MAAO,MACP,IAAK,OACP,EACA,SAASC,GAAM/xB,EAAOrB,EAAOqyB,EAAK,CAChC,OAAO1sB,GAAItE,EAAOuE,GAAI5F,EAAOqyB,CAAG,CAAC,CACnC,CACA,SAASgB,GAASrzB,EAAOszB,EAAO,CAC9B,OAAO,OAAOtzB,GAAU,WAAaA,EAAMszB,CAAK,EAAItzB,CACtD,CACA,SAASuzB,GAAQC,EAAW,CAC1B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASC,GAAaD,EAAW,CAC/B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASE,GAAgBC,EAAM,CAC7B,OAAOA,IAAS,IAAM,IAAM,GAC9B,CACA,SAASC,GAAcD,EAAM,CAC3B,OAAOA,IAAS,IAAM,SAAW,OACnC,CACA,SAASE,GAAYL,EAAW,CAC9B,MAAO,CAAC,MAAO,QAAQ,EAAE,SAASD,GAAQC,CAAS,CAAC,EAAI,IAAM,GAChE,CACA,SAASM,GAAiBN,EAAW,CACnC,OAAOE,GAAgBG,GAAYL,CAAS,CAAC,CAC/C,CACA,SAASO,GAAkBP,EAAWQ,EAAOC,EAAK,CAC5CA,IAAQ,SACVA,EAAM,IAER,MAAMC,EAAYT,GAAaD,CAAS,EAClCW,EAAgBL,GAAiBN,CAAS,EAC1C7xB,EAASiyB,GAAcO,CAAa,EAC1C,IAAIC,EAAoBD,IAAkB,IAAMD,KAAeD,EAAM,MAAQ,SAAW,QAAU,OAASC,IAAc,QAAU,SAAW,MAC9I,OAAIF,EAAM,UAAUryB,CAAM,EAAIqyB,EAAM,SAASryB,CAAM,IACjDyyB,EAAoBC,GAAqBD,CAAiB,GAErD,CAACA,EAAmBC,GAAqBD,CAAiB,CAAC,CACpE,CACA,SAASE,GAAsBd,EAAW,CACxC,MAAMe,EAAoBF,GAAqBb,CAAS,EACxD,MAAO,CAACgB,GAA8BhB,CAAS,EAAGe,EAAmBC,GAA8BD,CAAiB,CAAC,CACvH,CACA,SAASC,GAA8BhB,EAAW,CAChD,OAAOA,EAAU,QAAQ,aAAcU,GAAaf,GAAqBe,CAAS,CAAC,CACrF,CACA,SAASO,GAAYC,EAAMC,EAASV,EAAK,CACvC,MAAMW,EAAK,CAAC,OAAQ,OAAO,EACrBC,EAAK,CAAC,QAAS,MAAM,EACrBC,EAAK,CAAC,MAAO,QAAQ,EACrBC,EAAK,CAAC,SAAU,KAAK,EAC3B,OAAQL,EAAI,CACV,IAAK,MACL,IAAK,SACH,OAAIT,EAAYU,EAAUE,EAAKD,EACxBD,EAAUC,EAAKC,EACxB,IAAK,OACL,IAAK,QACH,OAAOF,EAAUG,EAAKC,EACxB,QACE,MAAO,CAAE,CACf,CACA,CACA,SAASC,GAA0BxB,EAAWyB,EAAeC,EAAWjB,EAAK,CAC3E,MAAMC,EAAYT,GAAaD,CAAS,EACxC,IAAIlf,EAAOmgB,GAAYlB,GAAQC,CAAS,EAAG0B,IAAc,QAASjB,CAAG,EACrE,OAAIC,IACF5f,EAAOA,EAAK,IAAIogB,GAAQA,EAAO,IAAMR,CAAS,EAC1Ce,IACF3gB,EAAOA,EAAK,OAAOA,EAAK,IAAIkgB,EAA6B,CAAC,IAGvDlgB,CACT,CACA,SAAS+f,GAAqBb,EAAW,CACvC,OAAOA,EAAU,QAAQ,yBAA0BkB,GAAQxB,GAAgBwB,CAAI,CAAC,CAClF,CACA,SAASS,GAAoBC,EAAS,CACpC,MAAO,CACL,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,GAAGA,CACJ,CACH,CACA,SAASC,GAAiBD,EAAS,CACjC,OAAO,OAAOA,GAAY,SAAWD,GAAoBC,CAAO,EAAI,CAClE,IAAKA,EACL,MAAOA,EACP,OAAQA,EACR,KAAMA,CACP,CACH,CACA,SAASE,GAAiBvkB,EAAM,CAC9B,KAAM,CACJ,EAAA4gB,EACA,EAAAC,EACA,MAAA2D,EACA,OAAAC,CACJ,EAAMzkB,EACJ,MAAO,CACL,MAAAwkB,EACA,OAAAC,EACA,IAAK5D,EACL,KAAMD,EACN,MAAOA,EAAI4D,EACX,OAAQ3D,EAAI4D,EACZ,EAAA7D,EACA,EAAAC,CACD,CACH,CCpIA,SAAS6D,GAA2BC,EAAMlC,EAAWS,EAAK,CACxD,GAAI,CACF,UAAA0B,EACA,SAAAC,CACJ,EAAMF,EACJ,MAAMG,EAAWhC,GAAYL,CAAS,EAChCW,EAAgBL,GAAiBN,CAAS,EAC1CsC,EAAclC,GAAcO,CAAa,EACzCO,EAAOnB,GAAQC,CAAS,EACxBuC,EAAaF,IAAa,IAC1BG,EAAUL,EAAU,EAAIA,EAAU,MAAQ,EAAIC,EAAS,MAAQ,EAC/DK,EAAUN,EAAU,EAAIA,EAAU,OAAS,EAAIC,EAAS,OAAS,EACjEM,EAAcP,EAAUG,CAAW,EAAI,EAAIF,EAASE,CAAW,EAAI,EACzE,IAAIK,EACJ,OAAQzB,EAAI,CACV,IAAK,MACHyB,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIC,EAAS,MAC3B,EACD,MACF,IAAK,SACHO,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIA,EAAU,MAC5B,EACD,MACF,IAAK,QACHQ,EAAS,CACP,EAAGR,EAAU,EAAIA,EAAU,MAC3B,EAAGM,CACJ,EACD,MACF,IAAK,OACHE,EAAS,CACP,EAAGR,EAAU,EAAIC,EAAS,MAC1B,EAAGK,CACJ,EACD,MACF,QACEE,EAAS,CACP,EAAGR,EAAU,EACb,EAAGA,EAAU,CACd,CACP,CACE,OAAQlC,GAAaD,CAAS,EAAC,CAC7B,IAAK,QACH2C,EAAOhC,CAAa,GAAK+B,GAAejC,GAAO8B,EAAa,GAAK,GACjE,MACF,IAAK,MACHI,EAAOhC,CAAa,GAAK+B,GAAejC,GAAO8B,EAAa,GAAK,GACjE,KACN,CACE,OAAOI,CACT,CASA,MAAMC,GAAkB,MAAOT,EAAWC,EAAU3U,IAAW,CAC7D,KAAM,CACJ,UAAAuS,EAAY,SACZ,SAAA6C,EAAW,WACX,WAAAC,EAAa,CAAE,EACf,SAAAC,CACJ,EAAMtV,EACEuV,EAAkBF,EAAW,OAAO,OAAO,EAC3CrC,EAAM,MAAOsC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMX,CAAQ,GAC5E,IAAI5B,EAAQ,MAAMuC,EAAS,gBAAgB,CACzC,UAAAZ,EACA,SAAAC,EACA,SAAAS,CACJ,CAAG,EACG,CACF,EAAA1E,EACA,EAAAC,CACD,EAAG6D,GAA2BzB,EAAOR,EAAWS,CAAG,EAChDwC,EAAoBjD,EACpBkD,EAAiB,CAAE,EACnBC,EAAa,EACjB,QAASn1B,EAAI,EAAGA,EAAIg1B,EAAgB,OAAQh1B,IAAK,CAC/C,KAAM,CACJ,KAAAoO,EACA,GAAA8D,CACN,EAAQ8iB,EAAgBh1B,CAAC,EACf,CACJ,EAAGo1B,EACH,EAAGC,EACH,KAAA5nB,EACA,MAAA6nB,CACD,EAAG,MAAMpjB,EAAG,CACX,EAAAie,EACA,EAAAC,EACA,iBAAkB4B,EAClB,UAAWiD,EACX,SAAAJ,EACA,eAAAK,EACA,MAAA1C,EACA,SAAAuC,EACA,SAAU,CACR,UAAAZ,EACA,SAAAC,CACR,CACA,CAAK,EACDjE,EAAIiF,GAAwBjF,EAC5BC,EAAIiF,GAAwBjF,EAC5B8E,EAAiB,CACf,GAAGA,EACH,CAAC9mB,CAAI,EAAG,CACN,GAAG8mB,EAAe9mB,CAAI,EACtB,GAAGX,CACX,CACK,EACG6nB,GAASH,GAAc,KACzBA,IACI,OAAOG,GAAU,WACfA,EAAM,YACRL,EAAoBK,EAAM,WAExBA,EAAM,QACR9C,EAAQ8C,EAAM,QAAU,GAAO,MAAMP,EAAS,gBAAgB,CAC5D,UAAAZ,EACA,SAAAC,EACA,SAAAS,CACZ,CAAW,EAAIS,EAAM,OAEZ,CACC,EAAAnF,EACA,EAAAC,CACD,EAAG6D,GAA2BzB,EAAOyC,EAAmBxC,CAAG,GAE9DzyB,EAAI,GAEV,CACE,MAAO,CACL,EAAAmwB,EACA,EAAAC,EACA,UAAW6E,EACX,SAAAJ,EACA,eAAAK,CACD,CACH,EAUA,eAAeK,GAAevJ,EAAOvrB,EAAS,CAC5C,IAAI+0B,EACA/0B,IAAY,SACdA,EAAU,CAAE,GAEd,KAAM,CACJ,EAAA0vB,EACA,EAAAC,EACA,SAAA2E,EACA,MAAAvC,EACA,SAAA1I,EACA,SAAA+K,CACJ,EAAM7I,EACE,CACJ,SAAAyJ,EAAW,oBACX,aAAAC,EAAe,WACf,eAAAC,EAAiB,WACjB,YAAAC,EAAc,GACd,QAAAhC,EAAU,CACd,EAAM/B,GAASpxB,EAASurB,CAAK,EACrB6J,EAAgBhC,GAAiBD,CAAO,EAExCzJ,EAAUL,EAAS8L,EADND,IAAmB,WAAa,YAAc,WACbA,CAAc,EAC5DG,EAAqBhC,GAAiB,MAAMiB,EAAS,gBAAgB,CACzE,SAAWS,EAAwB,MAAOT,EAAS,WAAa,KAAO,OAASA,EAAS,UAAU5K,CAAO,KAAO,MAAOqL,EAAgCrL,EAAUA,EAAQ,gBAAmB,MAAO4K,EAAS,oBAAsB,KAAO,OAASA,EAAS,mBAAmBjL,EAAS,QAAQ,GAChS,SAAA2L,EACA,aAAAC,EACA,SAAAb,CACJ,CAAG,CAAC,EACItlB,EAAOomB,IAAmB,WAAa,CAC3C,EAAAxF,EACA,EAAAC,EACA,MAAOoC,EAAM,SAAS,MACtB,OAAQA,EAAM,SAAS,MACxB,EAAGA,EAAM,UACJuD,EAAe,MAAOhB,EAAS,iBAAmB,KAAO,OAASA,EAAS,gBAAgBjL,EAAS,QAAQ,GAC5GkM,EAAe,MAAOjB,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUgB,CAAY,GAAO,MAAOhB,EAAS,UAAY,KAAO,OAASA,EAAS,SAASgB,CAAY,IAAO,CACvL,EAAG,EACH,EAAG,CACP,EAAM,CACF,EAAG,EACH,EAAG,CACJ,EACKE,EAAoBnC,GAAiBiB,EAAS,sDAAwD,MAAMA,EAAS,sDAAsD,CAC/K,SAAAjL,EACA,KAAAva,EACA,aAAAwmB,EACA,SAAAlB,CACD,CAAA,EAAItlB,CAAI,EACT,MAAO,CACL,KAAMumB,EAAmB,IAAMG,EAAkB,IAAMJ,EAAc,KAAOG,EAAY,EACxF,QAASC,EAAkB,OAASH,EAAmB,OAASD,EAAc,QAAUG,EAAY,EACpG,MAAOF,EAAmB,KAAOG,EAAkB,KAAOJ,EAAc,MAAQG,EAAY,EAC5F,OAAQC,EAAkB,MAAQH,EAAmB,MAAQD,EAAc,OAASG,EAAY,CACjG,CACH,CAOA,MAAME,GAAQz1B,IAAY,CACxB,KAAM,QACN,QAAAA,EACA,MAAM,GAAGurB,EAAO,CACd,KAAM,CACJ,EAAAmE,EACA,EAAAC,EACA,UAAA4B,EACA,MAAAQ,EACA,SAAAuC,EACA,SAAAjL,EACA,eAAAoL,CACN,EAAQlJ,EAEE,CACJ,QAAA7B,EACA,QAAAyJ,EAAU,CACX,EAAG/B,GAASpxB,EAASurB,CAAK,GAAK,CAAE,EAClC,GAAI7B,GAAW,KACb,MAAO,CAAE,EAEX,MAAM0L,EAAgBhC,GAAiBD,CAAO,EACxCe,EAAS,CACb,EAAAxE,EACA,EAAAC,CACD,EACK+B,EAAOG,GAAiBN,CAAS,EACjC7xB,EAASiyB,GAAcD,CAAI,EAC3BgE,EAAkB,MAAMpB,EAAS,cAAc5K,CAAO,EACtDiM,EAAUjE,IAAS,IACnBkE,EAAUD,EAAU,MAAQ,OAC5BE,EAAUF,EAAU,SAAW,QAC/BG,EAAaH,EAAU,eAAiB,cACxCI,EAAUhE,EAAM,UAAUryB,CAAM,EAAIqyB,EAAM,UAAUL,CAAI,EAAIwC,EAAOxC,CAAI,EAAIK,EAAM,SAASryB,CAAM,EAChGs2B,EAAY9B,EAAOxC,CAAI,EAAIK,EAAM,UAAUL,CAAI,EAC/CuE,EAAoB,MAAO3B,EAAS,iBAAmB,KAAO,OAASA,EAAS,gBAAgB5K,CAAO,GAC7G,IAAIwM,EAAaD,EAAoBA,EAAkBH,CAAU,EAAI,GAGjE,CAACI,GAAc,CAAE,MAAO5B,EAAS,WAAa,KAAO,OAASA,EAAS,UAAU2B,CAAiB,MACpGC,EAAa7M,EAAS,SAASyM,CAAU,GAAK/D,EAAM,SAASryB,CAAM,GAErE,MAAMy2B,EAAoBJ,EAAU,EAAIC,EAAY,EAI9CI,EAAyBF,EAAa,EAAIR,EAAgBh2B,CAAM,EAAI,EAAI,EACxE22B,EAAa1yB,GAAIyxB,EAAcQ,CAAO,EAAGQ,CAAsB,EAC/DE,EAAa3yB,GAAIyxB,EAAcS,CAAO,EAAGO,CAAsB,EAI/DG,EAAQF,EACR3yB,EAAMwyB,EAAaR,EAAgBh2B,CAAM,EAAI42B,EAC7CE,EAASN,EAAa,EAAIR,EAAgBh2B,CAAM,EAAI,EAAIy2B,EACxDM,EAAStF,GAAMoF,EAAOC,EAAQ9yB,CAAG,EAMjCgzB,EAAkB,CAACjC,EAAe,OAASjD,GAAaD,CAAS,GAAK,MAAQiF,IAAWC,GAAU1E,EAAM,UAAUryB,CAAM,EAAI,GAAK82B,EAASD,EAAQF,EAAaC,GAAcZ,EAAgBh2B,CAAM,EAAI,EAAI,EAC5Mi3B,EAAkBD,EAAkBF,EAASD,EAAQC,EAASD,EAAQC,EAAS9yB,EAAM,EAC3F,MAAO,CACL,CAACguB,CAAI,EAAGwC,EAAOxC,CAAI,EAAIiF,EACvB,KAAM,CACJ,CAACjF,CAAI,EAAG+E,EACR,aAAcD,EAASC,EAASE,EAChC,GAAID,GAAmB,CACrB,gBAAAC,CACD,CACF,EACD,MAAOD,CACR,CACL,CACA,GA+GMrR,GAAO,SAAUrlB,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAE,GAEP,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAGurB,EAAO,CACd,IAAIqL,EAAuBC,EAC3B,KAAM,CACJ,UAAAtF,EACA,eAAAkD,EACA,MAAA1C,EACA,iBAAA+E,EACA,SAAAxC,EACA,SAAAjL,CACR,EAAUkC,EACE,CACJ,SAAUwL,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,mBAAoBC,EACpB,iBAAAC,EAAmB,UACnB,0BAAAC,EAA4B,OAC5B,cAAAnE,EAAgB,GAChB,GAAGoE,CACX,EAAUhG,GAASpxB,EAASurB,CAAK,EAM3B,IAAKqL,EAAwBnC,EAAe,QAAU,MAAQmC,EAAsB,gBAClF,MAAO,CAAE,EAEX,MAAMnE,EAAOnB,GAAQC,CAAS,EACxB8F,EAAkBzF,GAAYkF,CAAgB,EAC9CQ,EAAkBhG,GAAQwF,CAAgB,IAAMA,EAChD9E,EAAM,MAAOsC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMjL,EAAS,QAAQ,GAC/EkO,EAAqBN,IAAgCK,GAAmB,CAACtE,EAAgB,CAACZ,GAAqB0E,CAAgB,CAAC,EAAIzE,GAAsByE,CAAgB,GAC1KU,EAA+BL,IAA8B,OAC/D,CAACF,GAA+BO,GAClCD,EAAmB,KAAK,GAAGxE,GAA0B+D,EAAkB9D,EAAemE,EAA2BnF,CAAG,CAAC,EAEvH,MAAMyF,EAAa,CAACX,EAAkB,GAAGS,CAAkB,EACrDG,EAAW,MAAM5C,GAAevJ,EAAO6L,CAAqB,EAC5DO,EAAY,CAAE,EACpB,IAAIC,IAAkBf,EAAuBpC,EAAe,OAAS,KAAO,OAASoC,EAAqB,YAAc,CAAE,EAI1H,GAHIE,GACFY,EAAU,KAAKD,EAASjF,CAAI,CAAC,EAE3BuE,EAAgB,CAClB,MAAMnG,EAAQiB,GAAkBP,EAAWQ,EAAOC,CAAG,EACrD2F,EAAU,KAAKD,EAAS7G,EAAM,CAAC,CAAC,EAAG6G,EAAS7G,EAAM,CAAC,CAAC,CAAC,CAC7D,CAOM,GANA+G,EAAgB,CAAC,GAAGA,EAAe,CACjC,UAAArG,EACA,UAAAoG,CACR,CAAO,EAGG,CAACA,EAAU,MAAMlF,GAAQA,GAAQ,CAAC,EAAG,CACvC,IAAIoF,EAAuBC,EAC3B,MAAMC,KAAeF,EAAwBpD,EAAe,OAAS,KAAO,OAASoD,EAAsB,QAAU,GAAK,EACpHG,EAAgBP,EAAWM,CAAS,EAC1C,GAAIC,EAAe,CACjB,IAAIC,EACJ,MAAMC,EAA0BlB,IAAmB,YAAcK,IAAoBzF,GAAYoG,CAAa,EAAI,GAC5GG,IAA+BF,EAAkBL,EAAc,CAAC,IAAM,KAAO,OAASK,EAAgB,UAAU,CAAC,GAAK,EAC5H,GAAI,CAACC,GAA2BC,EAE9B,MAAO,CACL,KAAM,CACJ,MAAOJ,EACP,UAAWH,CACZ,EACD,MAAO,CACL,UAAWI,CAC3B,CACa,CAEb,CAIQ,IAAII,GAAkBN,EAAwBF,EAAc,OAAOh0B,GAAKA,EAAE,UAAU,CAAC,GAAK,CAAC,EAAE,KAAK,CAACjB,EAAGf,IAAMe,EAAE,UAAU,CAAC,EAAIf,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASk2B,EAAsB,UAG1L,GAAI,CAACM,EACH,OAAQlB,EAAgB,CACtB,IAAK,UACH,CACE,IAAImB,EACJ,MAAM9G,GAAa8G,EAAyBT,EAAc,OAAOh0B,GAAK,CACpE,GAAI4zB,EAA8B,CAChC,MAAMc,EAAkB1G,GAAYhuB,EAAE,SAAS,EAC/C,OAAO00B,IAAoBjB,GAG3BiB,IAAoB,GACxC,CACkB,MAAO,EACzB,CAAiB,EAAE,IAAI10B,GAAK,CAACA,EAAE,UAAWA,EAAE,UAAU,OAAO8zB,GAAYA,EAAW,CAAC,EAAE,OAAO,CAACa,EAAKb,KAAaa,EAAMb,GAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC/0B,EAAGf,IAAMe,EAAE,CAAC,EAAIf,EAAE,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASy2B,EAAuB,CAAC,EAC7L9G,IACF6G,EAAiB7G,GAEnB,KAChB,CACY,IAAK,mBACH6G,EAAiBtB,EACjB,KACd,CAEQ,GAAIvF,IAAc6G,EAChB,MAAO,CACL,MAAO,CACL,UAAWA,CACzB,CACW,CAEX,CACM,MAAO,CAAE,CACf,CACG,CACH,EAEA,SAASI,GAAed,EAAU5oB,EAAM,CACtC,MAAO,CACL,IAAK4oB,EAAS,IAAM5oB,EAAK,OACzB,MAAO4oB,EAAS,MAAQ5oB,EAAK,MAC7B,OAAQ4oB,EAAS,OAAS5oB,EAAK,OAC/B,KAAM4oB,EAAS,KAAO5oB,EAAK,KAC5B,CACH,CACA,SAAS2pB,GAAsBf,EAAU,CACvC,OAAO7G,GAAM,KAAK4B,GAAQiF,EAASjF,CAAI,GAAK,CAAC,CAC/C,CAMA,MAAMiG,GAAO,SAAU14B,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAE,GAEP,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAGurB,EAAO,CACd,KAAM,CACJ,MAAAwG,CACR,EAAUxG,EACE,CACJ,SAAA6I,EAAW,kBACX,GAAGgD,CACX,EAAUhG,GAASpxB,EAASurB,CAAK,EAC3B,OAAQ6I,EAAQ,CACd,IAAK,kBACH,CACE,MAAMsD,EAAW,MAAM5C,GAAevJ,EAAO,CAC3C,GAAG6L,EACH,eAAgB,WAC9B,CAAa,EACKuB,EAAUH,GAAed,EAAU3F,EAAM,SAAS,EACxD,MAAO,CACL,KAAM,CACJ,uBAAwB4G,EACxB,gBAAiBF,GAAsBE,CAAO,CAC9D,CACa,CACb,CACQ,IAAK,UACH,CACE,MAAMjB,EAAW,MAAM5C,GAAevJ,EAAO,CAC3C,GAAG6L,EACH,YAAa,EAC3B,CAAa,EACKuB,EAAUH,GAAed,EAAU3F,EAAM,QAAQ,EACvD,MAAO,CACL,KAAM,CACJ,eAAgB4G,EAChB,QAASF,GAAsBE,CAAO,CACtD,CACa,CACb,CACQ,QAEI,MAAO,CAAE,CAErB,CACA,CACG,CACH,EAwIA,eAAeC,GAAqBrN,EAAOvrB,EAAS,CAClD,KAAM,CACJ,UAAAuxB,EACA,SAAA+C,EACA,SAAAjL,CACJ,EAAMkC,EACEyG,EAAM,MAAOsC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMjL,EAAS,QAAQ,GAC/EoJ,EAAOnB,GAAQC,CAAS,EACxBU,EAAYT,GAAaD,CAAS,EAClCuC,EAAalC,GAAYL,CAAS,IAAM,IACxCsH,EAAgB,CAAC,OAAQ,KAAK,EAAE,SAASpG,CAAI,EAAI,GAAK,EACtDqG,EAAiB9G,GAAO8B,EAAa,GAAK,EAC1CiF,EAAW3H,GAASpxB,EAASurB,CAAK,EAGxC,GAAI,CACF,SAAAyN,EACA,UAAAC,EACA,cAAA/G,CACJ,EAAM,OAAO6G,GAAa,SAAW,CACjC,SAAUA,EACV,UAAW,EACX,cAAe,IACnB,EAAM,CACF,SAAUA,EAAS,UAAY,EAC/B,UAAWA,EAAS,WAAa,EACjC,cAAeA,EAAS,aACzB,EACD,OAAI9G,GAAa,OAAOC,GAAkB,WACxC+G,EAAYhH,IAAc,MAAQC,EAAgB,GAAKA,GAElD4B,EAAa,CAClB,EAAGmF,EAAYH,EACf,EAAGE,EAAWH,CAClB,EAAM,CACF,EAAGG,EAAWH,EACd,EAAGI,EAAYH,CAChB,CACH,CASA,MAAMrC,GAAS,SAAUz2B,EAAS,CAChC,OAAIA,IAAY,SACdA,EAAU,GAEL,CACL,KAAM,SACN,QAAAA,EACA,MAAM,GAAGurB,EAAO,CACd,IAAI2N,EAAuBtC,EAC3B,KAAM,CACJ,EAAAlH,EACA,EAAAC,EACA,UAAA4B,EACA,eAAAkD,CACR,EAAUlJ,EACE4N,EAAa,MAAMP,GAAqBrN,EAAOvrB,CAAO,EAI5D,OAAIuxB,MAAgB2H,EAAwBzE,EAAe,SAAW,KAAO,OAASyE,EAAsB,aAAetC,EAAwBnC,EAAe,QAAU,MAAQmC,EAAsB,gBACjM,CAAE,EAEJ,CACL,EAAGlH,EAAIyJ,EAAW,EAClB,EAAGxJ,EAAIwJ,EAAW,EAClB,KAAM,CACJ,GAAGA,EACH,UAAA5H,CACV,CACO,CACP,CACG,CACH,EAOM6H,GAAQ,SAAUp5B,EAAS,CAC/B,OAAIA,IAAY,SACdA,EAAU,CAAE,GAEP,CACL,KAAM,QACN,QAAAA,EACA,MAAM,GAAGurB,EAAO,CACd,KAAM,CACJ,EAAAmE,EACA,EAAAC,EACA,UAAA4B,CACR,EAAUhG,EACE,CACJ,SAAUwL,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,QAAAqC,EAAU,CACR,GAAI5F,GAAQ,CACV,GAAI,CACF,EAAA/D,EACA,CACd,EAAgB+D,EACJ,MAAO,CACL,EAAA/D,EACA,CACD,CACb,CACS,EACD,GAAG0H,CACX,EAAUhG,GAASpxB,EAASurB,CAAK,EACrB2I,EAAS,CACb,EAAAxE,EACA,EAAAC,CACD,EACK+H,EAAW,MAAM5C,GAAevJ,EAAO6L,CAAqB,EAC5D6B,EAAYrH,GAAYN,GAAQC,CAAS,CAAC,EAC1CyH,EAAWvH,GAAgBwH,CAAS,EAC1C,IAAIK,EAAgBpF,EAAO8E,CAAQ,EAC/BO,EAAiBrF,EAAO+E,CAAS,EACrC,GAAIlC,EAAe,CACjB,MAAMyC,EAAUR,IAAa,IAAM,MAAQ,OACrCS,EAAUT,IAAa,IAAM,SAAW,QACxCr1B,EAAM21B,EAAgB5B,EAAS8B,CAAO,EACtC91B,EAAM41B,EAAgB5B,EAAS+B,CAAO,EAC5CH,EAAgBnI,GAAMxtB,EAAK21B,EAAe51B,CAAG,CACrD,CACM,GAAIszB,EAAgB,CAClB,MAAMwC,EAAUP,IAAc,IAAM,MAAQ,OACtCQ,EAAUR,IAAc,IAAM,SAAW,QACzCt1B,EAAM41B,EAAiB7B,EAAS8B,CAAO,EACvC91B,EAAM61B,EAAiB7B,EAAS+B,CAAO,EAC7CF,EAAiBpI,GAAMxtB,EAAK41B,EAAgB71B,CAAG,CACvD,CACM,MAAMg2B,EAAgBL,EAAQ,GAAG,CAC/B,GAAG9N,EACH,CAACyN,CAAQ,EAAGM,EACZ,CAACL,CAAS,EAAGM,CACrB,CAAO,EACD,MAAO,CACL,GAAGG,EACH,KAAM,CACJ,EAAGA,EAAc,EAAIhK,EACrB,EAAGgK,EAAc,EAAI/J,EACrB,QAAS,CACP,CAACqJ,CAAQ,EAAGjC,EACZ,CAACkC,CAAS,EAAGjC,CACzB,CACA,CACO,CACP,CACG,CACH,EC33BA,SAAS2C,IAAY,CACnB,OAAO,OAAO,OAAW,GAC3B,CACA,SAASC,GAAYC,EAAM,CACzB,OAAIC,GAAOD,CAAI,GACLA,EAAK,UAAY,IAAI,YAAa,EAKrC,WACT,CACA,SAASE,GAAUF,EAAM,CACvB,IAAIG,EACJ,OAAQH,GAAQ,OAASG,EAAsBH,EAAK,gBAAkB,KAAO,OAASG,EAAoB,cAAgB,MAC5H,CACA,SAASC,GAAmBJ,EAAM,CAChC,IAAIpG,EACJ,OAAQA,GAAQqG,GAAOD,CAAI,EAAIA,EAAK,cAAgBA,EAAK,WAAa,OAAO,WAAa,KAAO,OAASpG,EAAK,eACjH,CACA,SAASqG,GAAO/7B,EAAO,CACrB,OAAK47B,GAAS,EAGP57B,aAAiB,MAAQA,aAAiBg8B,GAAUh8B,CAAK,EAAE,KAFzD,EAGX,CACA,SAASa,GAAUb,EAAO,CACxB,OAAK47B,GAAS,EAGP57B,aAAiB,SAAWA,aAAiBg8B,GAAUh8B,CAAK,EAAE,QAF5D,EAGX,CACA,SAASm8B,GAAcn8B,EAAO,CAC5B,OAAK47B,GAAS,EAGP57B,aAAiB,aAAeA,aAAiBg8B,GAAUh8B,CAAK,EAAE,YAFhE,EAGX,CACA,SAASo8B,GAAap8B,EAAO,CAC3B,MAAI,CAAC47B,GAAS,GAAM,OAAO,WAAe,IACjC,GAEF57B,aAAiB,YAAcA,aAAiBg8B,GAAUh8B,CAAK,EAAE,UAC1E,CACA,SAASq8B,GAAkB1Q,EAAS,CAClC,KAAM,CACJ,SAAAgO,EACA,UAAA2C,EACA,UAAAC,EACA,QAAAC,CACJ,EAAMC,GAAiB9Q,CAAO,EAC5B,MAAO,kCAAkC,KAAKgO,EAAW4C,EAAYD,CAAS,GAAK,CAAC,CAAC,SAAU,UAAU,EAAE,SAASE,CAAO,CAC7H,CACA,SAASE,GAAe/Q,EAAS,CAC/B,MAAO,CAAC,QAAS,KAAM,IAAI,EAAE,SAASkQ,GAAYlQ,CAAO,CAAC,CAC5D,CACA,SAASgR,GAAWhR,EAAS,CAC3B,MAAO,CAAC,gBAAiB,QAAQ,EAAE,KAAKjb,GAAY,CAClD,GAAI,CACF,OAAOib,EAAQ,QAAQjb,CAAQ,CAChC,MAAW,CACV,MAAO,EACb,CACA,CAAG,CACH,CACA,SAASksB,GAAkBC,EAAc,CACvC,MAAMC,EAASC,GAAU,EACnBC,EAAMn8B,GAAUg8B,CAAY,EAAIJ,GAAiBI,CAAY,EAAIA,EAIvE,MAAO,CAAC,YAAa,YAAa,QAAS,SAAU,aAAa,EAAE,KAAK78B,GAASg9B,EAAIh9B,CAAK,EAAIg9B,EAAIh9B,CAAK,IAAM,OAAS,EAAK,IAAMg9B,EAAI,cAAgBA,EAAI,gBAAkB,SAAW,KAAU,CAACF,IAAWE,EAAI,eAAiBA,EAAI,iBAAmB,OAAS,KAAU,CAACF,IAAWE,EAAI,OAASA,EAAI,SAAW,OAAS,KAAU,CAAC,YAAa,YAAa,QAAS,SAAU,cAAe,QAAQ,EAAE,KAAKh9B,IAAUg9B,EAAI,YAAc,IAAI,SAASh9B,CAAK,CAAC,GAAK,CAAC,QAAS,SAAU,SAAU,SAAS,EAAE,KAAKA,IAAUg9B,EAAI,SAAW,IAAI,SAASh9B,CAAK,CAAC,CACniB,CACA,SAASi9B,GAAmBtR,EAAS,CACnC,IAAIuR,EAAcC,GAAcxR,CAAO,EACvC,KAAOwQ,GAAce,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACxE,GAAIN,GAAkBM,CAAW,EAC/B,OAAOA,EACF,GAAIP,GAAWO,CAAW,EAC/B,OAAO,KAETA,EAAcC,GAAcD,CAAW,CAC3C,CACE,OAAO,IACT,CACA,SAASH,IAAW,CAClB,OAAI,OAAO,IAAQ,KAAe,CAAC,IAAI,SAAiB,GACjD,IAAI,SAAS,0BAA2B,MAAM,CACvD,CACA,SAASK,GAAsBtB,EAAM,CACnC,MAAO,CAAC,OAAQ,OAAQ,WAAW,EAAE,SAASD,GAAYC,CAAI,CAAC,CACjE,CACA,SAASW,GAAiB9Q,EAAS,CACjC,OAAOqQ,GAAUrQ,CAAO,EAAE,iBAAiBA,CAAO,CACpD,CACA,SAAS0R,GAAc1R,EAAS,CAC9B,OAAI9qB,GAAU8qB,CAAO,EACZ,CACL,WAAYA,EAAQ,WACpB,UAAWA,EAAQ,SACpB,EAEI,CACL,WAAYA,EAAQ,QACpB,UAAWA,EAAQ,OACpB,CACH,CACA,SAASwR,GAAcrB,EAAM,CAC3B,GAAID,GAAYC,CAAI,IAAM,OACxB,OAAOA,EAET,MAAMpxB,EAENoxB,EAAK,cAELA,EAAK,YAELM,GAAaN,CAAI,GAAKA,EAAK,MAE3BI,GAAmBJ,CAAI,EACvB,OAAOM,GAAa1xB,CAAM,EAAIA,EAAO,KAAOA,CAC9C,CACA,SAAS4yB,GAA2BxB,EAAM,CACxC,MAAMyB,EAAaJ,GAAcrB,CAAI,EACrC,OAAIsB,GAAsBG,CAAU,EAC3BzB,EAAK,cAAgBA,EAAK,cAAc,KAAOA,EAAK,KAEzDK,GAAcoB,CAAU,GAAKlB,GAAkBkB,CAAU,EACpDA,EAEFD,GAA2BC,CAAU,CAC9C,CACA,SAASC,GAAqB1B,EAAMxnB,EAAMmpB,EAAiB,CACzD,IAAIC,EACAppB,IAAS,SACXA,EAAO,CAAE,GAEPmpB,IAAoB,SACtBA,EAAkB,IAEpB,MAAME,EAAqBL,GAA2BxB,CAAI,EACpD8B,EAASD,MAAyBD,EAAuB5B,EAAK,gBAAkB,KAAO,OAAS4B,EAAqB,MACrHG,EAAM7B,GAAU2B,CAAkB,EACxC,GAAIC,EAAQ,CACV,MAAME,EAAeC,GAAgBF,CAAG,EACxC,OAAOvpB,EAAK,OAAOupB,EAAKA,EAAI,gBAAkB,CAAE,EAAExB,GAAkBsB,CAAkB,EAAIA,EAAqB,CAAE,EAAEG,GAAgBL,EAAkBD,GAAqBM,CAAY,EAAI,EAAE,CAChM,CACE,OAAOxpB,EAAK,OAAOqpB,EAAoBH,GAAqBG,EAAoB,CAAA,EAAIF,CAAe,CAAC,CACtG,CACA,SAASM,GAAgBF,EAAK,CAC5B,OAAOA,EAAI,QAAU,OAAO,eAAeA,EAAI,MAAM,EAAIA,EAAI,aAAe,IAC9E,CClJA,SAASG,GAAiBrS,EAAS,CACjC,MAAMqR,EAAMP,GAAiB9Q,CAAO,EAGpC,IAAI4J,EAAQ,WAAWyH,EAAI,KAAK,GAAK,EACjCxH,EAAS,WAAWwH,EAAI,MAAM,GAAK,EACvC,MAAMiB,EAAY9B,GAAcxQ,CAAO,EACjCuS,EAAcD,EAAYtS,EAAQ,YAAc4J,EAChD4I,EAAeF,EAAYtS,EAAQ,aAAe6J,EAClD4I,EAAiBrL,GAAMwC,CAAK,IAAM2I,GAAenL,GAAMyC,CAAM,IAAM2I,EACzE,OAAIC,IACF7I,EAAQ2I,EACR1I,EAAS2I,GAEJ,CACL,MAAA5I,EACA,OAAAC,EACA,EAAG4I,CACJ,CACH,CAEA,SAASC,GAAc1S,EAAS,CAC9B,OAAQ9qB,GAAU8qB,CAAO,EAA6BA,EAAzBA,EAAQ,cACvC,CAEA,SAAS2S,GAAS3S,EAAS,CACzB,MAAM4S,EAAaF,GAAc1S,CAAO,EACxC,GAAI,CAACwQ,GAAcoC,CAAU,EAC3B,OAAOtL,GAAa,CAAC,EAEvB,MAAMliB,EAAOwtB,EAAW,sBAAuB,EACzC,CACJ,MAAAhJ,EACA,OAAAC,EACA,EAAAgJ,CACJ,EAAMR,GAAiBO,CAAU,EAC/B,IAAI5M,GAAK6M,EAAIzL,GAAMhiB,EAAK,KAAK,EAAIA,EAAK,OAASwkB,EAC3C3D,GAAK4M,EAAIzL,GAAMhiB,EAAK,MAAM,EAAIA,EAAK,QAAUykB,EAIjD,OAAI,CAAC7D,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,IAEF,CAACC,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,GAEC,CACL,EAAAD,EACA,EAAAC,CACD,CACH,CAEA,MAAM6M,GAAyBxL,GAAa,CAAC,EAC7C,SAASyL,GAAiB/S,EAAS,CACjC,MAAMkS,EAAM7B,GAAUrQ,CAAO,EAC7B,MAAI,CAACoR,GAAQ,GAAM,CAACc,EAAI,eACfY,GAEF,CACL,EAAGZ,EAAI,eAAe,WACtB,EAAGA,EAAI,eAAe,SACvB,CACH,CACA,SAASc,GAAuBhT,EAASiT,EAASC,EAAsB,CAItE,OAHID,IAAY,SACdA,EAAU,IAER,CAACC,GAAwBD,GAAWC,IAAyB7C,GAAUrQ,CAAO,EACzE,GAEFiT,CACT,CAEA,SAASE,GAAsBnT,EAASoT,EAAcC,EAAiBzH,EAAc,CAC/EwH,IAAiB,SACnBA,EAAe,IAEbC,IAAoB,SACtBA,EAAkB,IAEpB,MAAMC,EAAatT,EAAQ,sBAAuB,EAC5C4S,EAAaF,GAAc1S,CAAO,EACxC,IAAIxE,EAAQ8L,GAAa,CAAC,EACtB8L,IACExH,EACE12B,GAAU02B,CAAY,IACxBpQ,EAAQmX,GAAS/G,CAAY,GAG/BpQ,EAAQmX,GAAS3S,CAAO,GAG5B,MAAMuT,EAAgBP,GAAuBJ,EAAYS,EAAiBzH,CAAY,EAAImH,GAAiBH,CAAU,EAAItL,GAAa,CAAC,EACvI,IAAItB,GAAKsN,EAAW,KAAOC,EAAc,GAAK/X,EAAM,EAChDyK,GAAKqN,EAAW,IAAMC,EAAc,GAAK/X,EAAM,EAC/CoO,EAAQ0J,EAAW,MAAQ9X,EAAM,EACjCqO,EAASyJ,EAAW,OAAS9X,EAAM,EACvC,GAAIoX,EAAY,CACd,MAAMV,EAAM7B,GAAUuC,CAAU,EAC1BY,EAAY5H,GAAgB12B,GAAU02B,CAAY,EAAIyE,GAAUzE,CAAY,EAAIA,EACtF,IAAI6H,EAAavB,EACbwB,EAAgBtB,GAAgBqB,CAAU,EAC9C,KAAOC,GAAiB9H,GAAgB4H,IAAcC,GAAY,CAChE,MAAME,EAAchB,GAASe,CAAa,EACpCE,EAAaF,EAAc,sBAAuB,EAClDrC,EAAMP,GAAiB4C,CAAa,EACpC72B,EAAO+2B,EAAW,MAAQF,EAAc,WAAa,WAAWrC,EAAI,WAAW,GAAKsC,EAAY,EAChGE,EAAMD,EAAW,KAAOF,EAAc,UAAY,WAAWrC,EAAI,UAAU,GAAKsC,EAAY,EAClG3N,GAAK2N,EAAY,EACjB1N,GAAK0N,EAAY,EACjB/J,GAAS+J,EAAY,EACrB9J,GAAU8J,EAAY,EACtB3N,GAAKnpB,EACLopB,GAAK4N,EACLJ,EAAapD,GAAUqD,CAAa,EACpCA,EAAgBtB,GAAgBqB,CAAU,CAChD,CACA,CACE,OAAO9J,GAAiB,CACtB,MAAAC,EACA,OAAAC,EACA,EAAA7D,EACA,EAAAC,CACJ,CAAG,CACH,CAIA,SAAS6N,GAAoB9T,EAAS5a,EAAM,CAC1C,MAAM2uB,EAAarC,GAAc1R,CAAO,EAAE,WAC1C,OAAK5a,EAGEA,EAAK,KAAO2uB,EAFVZ,GAAsB5C,GAAmBvQ,CAAO,CAAC,EAAE,KAAO+T,CAGrE,CAEA,SAASC,GAAcC,EAAiBC,EAAQC,EAAkB,CAC5DA,IAAqB,SACvBA,EAAmB,IAErB,MAAMC,EAAWH,EAAgB,sBAAuB,EAClDjO,EAAIoO,EAAS,KAAOF,EAAO,YAAcC,EAAmB,EAElEL,GAAoBG,EAAiBG,CAAQ,GACvCnO,EAAImO,EAAS,IAAMF,EAAO,UAChC,MAAO,CACL,EAAAlO,EACA,EAAAC,CACD,CACH,CAEA,SAASoO,GAAsDtK,EAAM,CACnE,GAAI,CACF,SAAApK,EACA,KAAAva,EACA,aAAAwmB,EACA,SAAAlB,CACJ,EAAMX,EACJ,MAAMkJ,EAAUvI,IAAa,QACvBuJ,EAAkB1D,GAAmB3E,CAAY,EACjD0I,EAAW3U,EAAWqR,GAAWrR,EAAS,QAAQ,EAAI,GAC5D,GAAIiM,IAAiBqI,GAAmBK,GAAYrB,EAClD,OAAO7tB,EAET,IAAI8uB,EAAS,CACX,WAAY,EACZ,UAAW,CACZ,EACG1Y,EAAQ8L,GAAa,CAAC,EAC1B,MAAM2H,EAAU3H,GAAa,CAAC,EACxBiN,EAA0B/D,GAAc5E,CAAY,EAC1D,IAAI2I,GAA2B,CAACA,GAA2B,CAACtB,MACtD/C,GAAYtE,CAAY,IAAM,QAAU8E,GAAkBuD,CAAe,KAC3EC,EAASxC,GAAc9F,CAAY,GAEjC4E,GAAc5E,CAAY,GAAG,CAC/B,MAAM4I,EAAarB,GAAsBvH,CAAY,EACrDpQ,EAAQmX,GAAS/G,CAAY,EAC7BqD,EAAQ,EAAIuF,EAAW,EAAI5I,EAAa,WACxCqD,EAAQ,EAAIuF,EAAW,EAAI5I,EAAa,SAC9C,CAEE,MAAM6I,EAAaR,GAAmB,CAACM,GAA2B,CAACtB,EAAUe,GAAcC,EAAiBC,EAAQ,EAAI,EAAI5M,GAAa,CAAC,EAC1I,MAAO,CACL,MAAOliB,EAAK,MAAQoW,EAAM,EAC1B,OAAQpW,EAAK,OAASoW,EAAM,EAC5B,EAAGpW,EAAK,EAAIoW,EAAM,EAAI0Y,EAAO,WAAa1Y,EAAM,EAAIyT,EAAQ,EAAIwF,EAAW,EAC3E,EAAGrvB,EAAK,EAAIoW,EAAM,EAAI0Y,EAAO,UAAY1Y,EAAM,EAAIyT,EAAQ,EAAIwF,EAAW,CAC3E,CACH,CAEA,SAASC,GAAe1U,EAAS,CAC/B,OAAO,MAAM,KAAKA,EAAQ,eAAc,CAAE,CAC5C,CAIA,SAAS2U,GAAgB3U,EAAS,CAChC,MAAM4U,EAAOrE,GAAmBvQ,CAAO,EACjCkU,EAASxC,GAAc1R,CAAO,EAC9B6U,EAAO7U,EAAQ,cAAc,KAC7B4J,EAAQ5vB,GAAI46B,EAAK,YAAaA,EAAK,YAAaC,EAAK,YAAaA,EAAK,WAAW,EAClFhL,EAAS7vB,GAAI46B,EAAK,aAAcA,EAAK,aAAcC,EAAK,aAAcA,EAAK,YAAY,EAC7F,IAAI7O,EAAI,CAACkO,EAAO,WAAaJ,GAAoB9T,CAAO,EACxD,MAAMiG,EAAI,CAACiO,EAAO,UAClB,OAAIpD,GAAiB+D,CAAI,EAAE,YAAc,QACvC7O,GAAKhsB,GAAI46B,EAAK,YAAaC,EAAK,WAAW,EAAIjL,GAE1C,CACL,MAAAA,EACA,OAAAC,EACA,EAAA7D,EACA,EAAAC,CACD,CACH,CAEA,SAAS6O,GAAgB9U,EAAS0K,EAAU,CAC1C,MAAMwH,EAAM7B,GAAUrQ,CAAO,EACvB4U,EAAOrE,GAAmBvQ,CAAO,EACjC+U,EAAiB7C,EAAI,eAC3B,IAAItI,EAAQgL,EAAK,YACb/K,EAAS+K,EAAK,aACd5O,EAAI,EACJC,EAAI,EACR,GAAI8O,EAAgB,CAClBnL,EAAQmL,EAAe,MACvBlL,EAASkL,EAAe,OACxB,MAAMC,EAAsB5D,GAAU,GAClC,CAAC4D,GAAuBA,GAAuBtK,IAAa,WAC9D1E,EAAI+O,EAAe,WACnB9O,EAAI8O,EAAe,UAEzB,CACE,MAAO,CACL,MAAAnL,EACA,OAAAC,EACA,EAAA7D,EACA,EAAAC,CACD,CACH,CAGA,SAASgP,GAA2BjV,EAAS0K,EAAU,CACrD,MAAM4I,EAAaH,GAAsBnT,EAAS,GAAM0K,IAAa,OAAO,EACtEmJ,EAAMP,EAAW,IAAMtT,EAAQ,UAC/BnjB,EAAOy2B,EAAW,KAAOtT,EAAQ,WACjCxE,EAAQgV,GAAcxQ,CAAO,EAAI2S,GAAS3S,CAAO,EAAIsH,GAAa,CAAC,EACnEsC,EAAQ5J,EAAQ,YAAcxE,EAAM,EACpCqO,EAAS7J,EAAQ,aAAexE,EAAM,EACtCwK,EAAInpB,EAAO2e,EAAM,EACjByK,EAAI4N,EAAMrY,EAAM,EACtB,MAAO,CACL,MAAAoO,EACA,OAAAC,EACA,EAAA7D,EACA,EAAAC,CACD,CACH,CACA,SAASiP,GAAkClV,EAASmV,EAAkBzK,EAAU,CAC9E,IAAItlB,EACJ,GAAI+vB,IAAqB,WACvB/vB,EAAO0vB,GAAgB9U,EAAS0K,CAAQ,UAC/ByK,IAAqB,WAC9B/vB,EAAOuvB,GAAgBpE,GAAmBvQ,CAAO,CAAC,UACzC9qB,GAAUigC,CAAgB,EACnC/vB,EAAO6vB,GAA2BE,EAAkBzK,CAAQ,MACvD,CACL,MAAM6I,EAAgBR,GAAiB/S,CAAO,EAC9C5a,EAAO,CACL,EAAG+vB,EAAiB,EAAI5B,EAAc,EACtC,EAAG4B,EAAiB,EAAI5B,EAAc,EACtC,MAAO4B,EAAiB,MACxB,OAAQA,EAAiB,MAC1B,CACL,CACE,OAAOxL,GAAiBvkB,CAAI,CAC9B,CACA,SAASgwB,GAAyBpV,EAASqV,EAAU,CACnD,MAAMzD,EAAaJ,GAAcxR,CAAO,EACxC,OAAI4R,IAAeyD,GAAY,CAACngC,GAAU08B,CAAU,GAAKH,GAAsBG,CAAU,EAChF,GAEFd,GAAiBc,CAAU,EAAE,WAAa,SAAWwD,GAAyBxD,EAAYyD,CAAQ,CAC3G,CAKA,SAASC,GAA4BtV,EAASzZ,EAAO,CACnD,MAAMgvB,EAAehvB,EAAM,IAAIyZ,CAAO,EACtC,GAAIuV,EACF,OAAOA,EAET,IAAIx2B,EAAS8yB,GAAqB7R,EAAS,CAAE,EAAE,EAAK,EAAE,OAAO1b,GAAMpP,GAAUoP,CAAE,GAAK4rB,GAAY5rB,CAAE,IAAM,MAAM,EAC1GkxB,EAAsC,KAC1C,MAAMC,EAAiB3E,GAAiB9Q,CAAO,EAAE,WAAa,QAC9D,IAAIuR,EAAckE,EAAiBjE,GAAcxR,CAAO,EAAIA,EAG5D,KAAO9qB,GAAUq8B,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACpE,MAAM5rB,EAAgBmrB,GAAiBS,CAAW,EAC5CmE,EAA0BzE,GAAkBM,CAAW,EACzD,CAACmE,GAA2B/vB,EAAc,WAAa,UACzD6vB,EAAsC,OAEVC,EAAiB,CAACC,GAA2B,CAACF,EAAsC,CAACE,GAA2B/vB,EAAc,WAAa,UAAY,CAAC,CAAC6vB,GAAuC,CAAC,WAAY,OAAO,EAAE,SAASA,EAAoC,QAAQ,GAAK9E,GAAkBa,CAAW,GAAK,CAACmE,GAA2BN,GAAyBpV,EAASuR,CAAW,GAGvZxyB,EAASA,EAAO,OAAO42B,GAAYA,IAAapE,CAAW,EAG3DiE,EAAsC7vB,EAExC4rB,EAAcC,GAAcD,CAAW,CAC3C,CACE,OAAAhrB,EAAM,IAAIyZ,EAASjhB,CAAM,EAClBA,CACT,CAIA,SAAS62B,GAAgB7L,EAAM,CAC7B,GAAI,CACF,QAAA/J,EACA,SAAAsL,EACA,aAAAC,EACA,SAAAb,CACJ,EAAMX,EAEJ,MAAM8L,EAAoB,CAAC,GADMvK,IAAa,oBAAsB0F,GAAWhR,CAAO,EAAI,CAAE,EAAGsV,GAA4BtV,EAAS,KAAK,EAAE,EAAI,CAAA,EAAG,OAAOsL,CAAQ,EACzGC,CAAY,EAC9DuK,EAAwBD,EAAkB,CAAC,EAC3CE,EAAeF,EAAkB,OAAO,CAACG,EAASb,IAAqB,CAC3E,MAAM/vB,EAAO8vB,GAAkClV,EAASmV,EAAkBzK,CAAQ,EAClF,OAAAsL,EAAQ,IAAMh8B,GAAIoL,EAAK,IAAK4wB,EAAQ,GAAG,EACvCA,EAAQ,MAAQ/7B,GAAImL,EAAK,MAAO4wB,EAAQ,KAAK,EAC7CA,EAAQ,OAAS/7B,GAAImL,EAAK,OAAQ4wB,EAAQ,MAAM,EAChDA,EAAQ,KAAOh8B,GAAIoL,EAAK,KAAM4wB,EAAQ,IAAI,EACnCA,CACR,EAAEd,GAAkClV,EAAS8V,EAAuBpL,CAAQ,CAAC,EAC9E,MAAO,CACL,MAAOqL,EAAa,MAAQA,EAAa,KACzC,OAAQA,EAAa,OAASA,EAAa,IAC3C,EAAGA,EAAa,KAChB,EAAGA,EAAa,GACjB,CACH,CAEA,SAASE,GAAcjW,EAAS,CAC9B,KAAM,CACJ,MAAA4J,EACA,OAAAC,CACJ,EAAMwI,GAAiBrS,CAAO,EAC5B,MAAO,CACL,MAAA4J,EACA,OAAAC,CACD,CACH,CAEA,SAASqM,GAA8BlW,EAAS4L,EAAclB,EAAU,CACtE,MAAM6J,EAA0B/D,GAAc5E,CAAY,EACpDqI,EAAkB1D,GAAmB3E,CAAY,EACjDqH,EAAUvI,IAAa,QACvBtlB,EAAO+tB,GAAsBnT,EAAS,GAAMiT,EAASrH,CAAY,EACvE,IAAIsI,EAAS,CACX,WAAY,EACZ,UAAW,CACZ,EACD,MAAMjF,EAAU3H,GAAa,CAAC,EAI9B,SAAS6O,GAA4B,CACnClH,EAAQ,EAAI6E,GAAoBG,CAAe,CACnD,CACE,GAAIM,GAA2B,CAACA,GAA2B,CAACtB,EAI1D,IAHI/C,GAAYtE,CAAY,IAAM,QAAU8E,GAAkBuD,CAAe,KAC3EC,EAASxC,GAAc9F,CAAY,GAEjC2I,EAAyB,CAC3B,MAAMC,EAAarB,GAAsBvH,EAAc,GAAMqH,EAASrH,CAAY,EAClFqD,EAAQ,EAAIuF,EAAW,EAAI5I,EAAa,WACxCqD,EAAQ,EAAIuF,EAAW,EAAI5I,EAAa,SACzC,MAAUqI,GACTkC,EAA2B,EAG3BlD,GAAW,CAACsB,GAA2BN,GACzCkC,EAA2B,EAE7B,MAAM1B,EAAaR,GAAmB,CAACM,GAA2B,CAACtB,EAAUe,GAAcC,EAAiBC,CAAM,EAAI5M,GAAa,CAAC,EAC9HtB,EAAI5gB,EAAK,KAAO8uB,EAAO,WAAajF,EAAQ,EAAIwF,EAAW,EAC3DxO,EAAI7gB,EAAK,IAAM8uB,EAAO,UAAYjF,EAAQ,EAAIwF,EAAW,EAC/D,MAAO,CACL,EAAAzO,EACA,EAAAC,EACA,MAAO7gB,EAAK,MACZ,OAAQA,EAAK,MACd,CACH,CAEA,SAASgxB,GAAmBpW,EAAS,CACnC,OAAO8Q,GAAiB9Q,CAAO,EAAE,WAAa,QAChD,CAEA,SAASqW,GAAoBrW,EAASsW,EAAU,CAC9C,GAAI,CAAC9F,GAAcxQ,CAAO,GAAK8Q,GAAiB9Q,CAAO,EAAE,WAAa,QACpE,OAAO,KAET,GAAIsW,EACF,OAAOA,EAAStW,CAAO,EAEzB,IAAIuW,EAAkBvW,EAAQ,aAM9B,OAAIuQ,GAAmBvQ,CAAO,IAAMuW,IAClCA,EAAkBA,EAAgB,cAAc,MAE3CA,CACT,CAIA,SAASC,GAAgBxW,EAASsW,EAAU,CAC1C,MAAMpE,EAAM7B,GAAUrQ,CAAO,EAC7B,GAAIgR,GAAWhR,CAAO,EACpB,OAAOkS,EAET,GAAI,CAAC1B,GAAcxQ,CAAO,EAAG,CAC3B,IAAIyW,EAAkBjF,GAAcxR,CAAO,EAC3C,KAAOyW,GAAmB,CAAChF,GAAsBgF,CAAe,GAAG,CACjE,GAAIvhC,GAAUuhC,CAAe,GAAK,CAACL,GAAmBK,CAAe,EACnE,OAAOA,EAETA,EAAkBjF,GAAciF,CAAe,CACrD,CACI,OAAOvE,CACX,CACE,IAAItG,EAAeyK,GAAoBrW,EAASsW,CAAQ,EACxD,KAAO1K,GAAgBmF,GAAenF,CAAY,GAAKwK,GAAmBxK,CAAY,GACpFA,EAAeyK,GAAoBzK,EAAc0K,CAAQ,EAE3D,OAAI1K,GAAgB6F,GAAsB7F,CAAY,GAAKwK,GAAmBxK,CAAY,GAAK,CAACqF,GAAkBrF,CAAY,EACrHsG,EAEFtG,GAAgB0F,GAAmBtR,CAAO,GAAKkS,CACxD,CAEA,MAAMwE,GAAkB,eAAgBpzB,EAAM,CAC5C,MAAMqzB,EAAoB,KAAK,iBAAmBH,GAC5CI,EAAkB,KAAK,cACvBC,EAAqB,MAAMD,EAAgBtzB,EAAK,QAAQ,EAC9D,MAAO,CACL,UAAW4yB,GAA8B5yB,EAAK,UAAW,MAAMqzB,EAAkBrzB,EAAK,QAAQ,EAAGA,EAAK,QAAQ,EAC9G,SAAU,CACR,EAAG,EACH,EAAG,EACH,MAAOuzB,EAAmB,MAC1B,OAAQA,EAAmB,MACjC,CACG,CACH,EAEA,SAASC,GAAM9W,EAAS,CACtB,OAAO8Q,GAAiB9Q,CAAO,EAAE,YAAc,KACjD,CAEA,MAAM4K,GAAW,CACf,sDAAAyJ,GACA,mBAAA9D,GACA,gBAAAqF,GACA,gBAAAY,GACA,gBAAAE,GACA,eAAAhC,GACA,cAAAuB,GACA,SAAAtD,GACF,UAAEz9B,GACA,MAAA4hC,EACF,EAEA,SAASC,GAAc99B,EAAGf,EAAG,CAC3B,OAAOe,EAAE,IAAMf,EAAE,GAAKe,EAAE,IAAMf,EAAE,GAAKe,EAAE,QAAUf,EAAE,OAASe,EAAE,SAAWf,EAAE,MAC7E,CAGA,SAAS8+B,GAAYhX,EAASiX,EAAQ,CACpC,IAAIC,EAAK,KACLC,EACJ,MAAMnyB,EAAOurB,GAAmBvQ,CAAO,EACvC,SAASoX,GAAU,CACjB,IAAIC,EACJ,aAAaF,CAAS,GACrBE,EAAMH,IAAO,MAAQG,EAAI,WAAY,EACtCH,EAAK,IACT,CACE,SAASI,EAAQC,EAAMrU,EAAW,CAC5BqU,IAAS,SACXA,EAAO,IAELrU,IAAc,SAChBA,EAAY,GAEdkU,EAAS,EACT,MAAMI,EAA2BxX,EAAQ,sBAAuB,EAC1D,CACJ,KAAAnjB,EACA,IAAAg3B,EACA,MAAAjK,EACA,OAAAC,CACN,EAAQ2N,EAIJ,GAHKD,GACHN,EAAQ,EAEN,CAACrN,GAAS,CAACC,EACb,OAEF,MAAM4N,EAAWpQ,GAAMwM,CAAG,EACpB6D,EAAarQ,GAAMriB,EAAK,aAAenI,EAAO+sB,EAAM,EACpD+N,EAActQ,GAAMriB,EAAK,cAAgB6uB,EAAMhK,EAAO,EACtD+N,EAAYvQ,GAAMxqB,CAAI,EAEtBvG,EAAU,CACd,WAFiB,CAACmhC,EAAW,MAAQ,CAACC,EAAa,MAAQ,CAACC,EAAc,MAAQ,CAACC,EAAY,KAG/F,UAAW59B,GAAI,EAAGC,GAAI,EAAGipB,CAAS,CAAC,GAAK,CACzC,EACD,IAAI2U,EAAgB,GACpB,SAASC,EAAcnU,EAAS,CAC9B,MAAMoU,EAAQpU,EAAQ,CAAC,EAAE,kBACzB,GAAIoU,IAAU7U,EAAW,CACvB,GAAI,CAAC2U,EACH,OAAOP,EAAS,EAEbS,EAOHT,EAAQ,GAAOS,CAAK,EAJpBZ,EAAY,WAAW,IAAM,CAC3BG,EAAQ,GAAO,IAAI,CACpB,EAAE,GAAI,CAIjB,CACUS,IAAU,GAAK,CAAChB,GAAcS,EAA0BxX,EAAQ,sBAAqB,CAAE,GAQzFsX,EAAS,EAEXO,EAAgB,EACtB,CAII,GAAI,CACFX,EAAK,IAAI,qBAAqBY,EAAe,CAC3C,GAAGxhC,EAEH,KAAM0O,EAAK,aACnB,CAAO,CACF,MAAY,CACXkyB,EAAK,IAAI,qBAAqBY,EAAexhC,CAAO,CAC1D,CACI4gC,EAAG,QAAQlX,CAAO,CACtB,CACE,OAAAsX,EAAQ,EAAI,EACLF,CACT,CAUA,SAASY,GAAWhO,EAAWC,EAAU9F,EAAQ7tB,EAAS,CACpDA,IAAY,SACdA,EAAU,CAAE,GAEd,KAAM,CACJ,eAAA2hC,EAAiB,GACjB,eAAAC,EAAiB,GACjB,cAAAC,EAAgB,OAAO,gBAAmB,WAC1C,YAAAC,EAAc,OAAO,sBAAyB,WAC9C,eAAAC,EAAiB,EACrB,EAAM/hC,EACEgiC,EAAc5F,GAAc1I,CAAS,EACrCuO,EAAYN,GAAkBC,EAAiB,CAAC,GAAII,EAAczG,GAAqByG,CAAW,EAAI,CAAE,EAAG,GAAGzG,GAAqB5H,CAAQ,CAAC,EAAI,CAAE,EACxJsO,EAAU,QAAQ5C,GAAY,CAC5BsC,GAAkBtC,EAAS,iBAAiB,SAAUxR,EAAQ,CAC5D,QAAS,EACf,CAAK,EACD+T,GAAkBvC,EAAS,iBAAiB,SAAUxR,CAAM,CAChE,CAAG,EACD,MAAMqU,EAAYF,GAAeF,EAAcpB,GAAYsB,EAAanU,CAAM,EAAI,KAClF,IAAIsU,EAAiB,GACjBC,EAAiB,KACjBP,IACFO,EAAiB,IAAI,eAAe3O,GAAQ,CAC1C,GAAI,CAAC4O,CAAU,EAAI5O,EACf4O,GAAcA,EAAW,SAAWL,GAAeI,IAGrDA,EAAe,UAAUzO,CAAQ,EACjC,qBAAqBwO,CAAc,EACnCA,EAAiB,sBAAsB,IAAM,CAC3C,IAAIG,GACHA,EAAkBF,IAAmB,MAAQE,EAAgB,QAAQ3O,CAAQ,CACxF,CAAS,GAEH9F,EAAQ,CACd,CAAK,EACGmU,GAAe,CAACD,GAClBK,EAAe,QAAQJ,CAAW,EAEpCI,EAAe,QAAQzO,CAAQ,GAEjC,IAAI4O,EACAC,EAAcT,EAAiBlF,GAAsBnJ,CAAS,EAAI,KAClEqO,GACFU,EAAW,EAEb,SAASA,GAAY,CACnB,MAAMC,EAAc7F,GAAsBnJ,CAAS,EAC/C8O,GAAe,CAAC/B,GAAc+B,EAAaE,CAAW,GACxD7U,EAAQ,EAEV2U,EAAcE,EACdH,EAAU,sBAAsBE,CAAS,CAC7C,CACE,OAAA5U,EAAQ,EACD,IAAM,CACX,IAAI8U,EACJV,EAAU,QAAQ5C,GAAY,CAC5BsC,GAAkBtC,EAAS,oBAAoB,SAAUxR,CAAM,EAC/D+T,GAAkBvC,EAAS,oBAAoB,SAAUxR,CAAM,CACrE,CAAK,EACDqU,GAAa,MAAQA,EAAW,GAC/BS,EAAmBP,IAAmB,MAAQO,EAAiB,WAAY,EAC5EP,EAAiB,KACbL,GACF,qBAAqBQ,CAAO,CAE/B,CACH,CAmBA,MAAM9L,GAASmM,GAeTxJ,GAAQyJ,GAQRxd,GAAOyd,GAePpK,GAAOqK,GAOPtN,GAAQuN,GAkBR7O,GAAkB,CAACT,EAAWC,EAAU3zB,IAAY,CAIxD,MAAMiQ,EAAQ,IAAI,IACZgzB,EAAgB,CACpB,SAAA3O,GACA,GAAGt0B,CACJ,EACKkjC,EAAoB,CACxB,GAAGD,EAAc,SACjB,GAAIhzB,CACL,EACD,OAAOkzB,GAAkBzP,EAAWC,EAAU,CAC5C,GAAGsP,EACH,SAAUC,CACd,CAAG,CACH,ECpvBA,IAAIE,GAAkB,CAAE,ECCpBC,GAAwB,UAAY,CACpC,OAAOD,GAAgB,KAAK,SAAUE,EAAI,CAAE,OAAOA,EAAG,cAAc,OAAS,EAAI,CACrF,ECFIC,GAAyB,UAAY,CACrC,OAAOH,GAAgB,KAAK,SAAUE,EAAI,CAAE,OAAOA,EAAG,eAAe,OAAS,EAAI,CACtF,ECHIE,GAAM,gEACNC,GAAyB,UAAY,CACrC,IAAIp1B,EACA,OAAO,YAAe,WACtBA,EAAQ,IAAI,WAAW,QAAS,CAC5B,QAASm1B,EACrB,CAAS,GAGDn1B,EAAQ,SAAS,YAAY,OAAO,EACpCA,EAAM,UAAU,QAAS,GAAO,EAAK,EACrCA,EAAM,QAAUm1B,IAEpB,OAAO,cAAcn1B,CAAK,CAC9B,ECdIq1B,IACH,SAAUA,EAA0B,CACjCA,EAAyB,WAAgB,aACzCA,EAAyB,YAAiB,cAC1CA,EAAyB,yBAA8B,0BAC3D,GAAGA,KAA6BA,GAA2B,CAAA,EAAG,ECLvD,IAAIhf,GAAS,SAAUnY,EAAK,CAAE,OAAO,OAAO,OAAOA,CAAG,CAAI,ECC7Do3B,GAAsB,UAAY,CAClC,SAASA,EAAmBC,EAAYC,EAAW,CAC/C,KAAK,WAAaD,EAClB,KAAK,UAAYC,EACjBnf,GAAO,IAAI,CACnB,CACI,OAAOif,CACX,ICPIG,GAAmB,UAAY,CAC/B,SAASA,EAAgBpU,EAAGC,EAAG2D,EAAOC,EAAQ,CAC1C,YAAK,EAAI7D,EACT,KAAK,EAAIC,EACT,KAAK,MAAQ2D,EACb,KAAK,OAASC,EACd,KAAK,IAAM,KAAK,EAChB,KAAK,KAAO,KAAK,EACjB,KAAK,OAAS,KAAK,IAAM,KAAK,OAC9B,KAAK,MAAQ,KAAK,KAAO,KAAK,MACvB7O,GAAO,IAAI,CAC1B,CACI,OAAAof,EAAgB,UAAU,OAAS,UAAY,CAC3C,IAAI5tB,EAAK,KAAMwZ,EAAIxZ,EAAG,EAAGyZ,EAAIzZ,EAAG,EAAGqnB,EAAMrnB,EAAG,IAAK1P,EAAQ0P,EAAG,MAAO6tB,EAAS7tB,EAAG,OAAQ3P,EAAO2P,EAAG,KAAMod,EAAQpd,EAAG,MAAOqd,EAASrd,EAAG,OACrI,MAAO,CAAE,EAAGwZ,EAAG,EAAGC,EAAG,IAAK4N,EAAK,MAAO/2B,EAAO,OAAQu9B,EAAQ,KAAMx9B,EAAM,MAAO+sB,EAAO,OAAQC,CAAQ,CAC1G,EACDuQ,EAAgB,SAAW,SAAUE,EAAW,CAC5C,OAAO,IAAIF,EAAgBE,EAAU,EAAGA,EAAU,EAAGA,EAAU,MAAOA,EAAU,MAAM,CACzF,EACMF,CACX,ICrBIG,GAAQ,SAAU39B,EAAQ,CAAE,OAAOA,aAAkB,YAAc,YAAaA,CAAS,EACzFuI,GAAW,SAAUvI,EAAQ,CAC7B,GAAI29B,GAAM39B,CAAM,EAAG,CACf,IAAI4P,EAAK5P,EAAO,UAAWgtB,EAAQpd,EAAG,MAAOqd,EAASrd,EAAG,OACzD,MAAO,CAACod,GAAS,CAACC,CAC1B,CACI,IAAIzI,EAAKxkB,EAAQ21B,EAAcnR,EAAG,YAAaoR,EAAepR,EAAG,aACjE,MAAO,EAAEmR,GAAeC,GAAgB51B,EAAO,eAAc,EAAG,OACpE,EACI1H,GAAY,SAAU2N,EAAK,CAC3B,IAAI2J,EACJ,GAAI3J,aAAe,QACf,MAAO,GAEX,IAAI23B,GAAShuB,EAAK3J,GAAQ,KAAyB,OAASA,EAAI,iBAAmB,MAAQ2J,IAAO,OAAS,OAASA,EAAG,YACvH,MAAO,CAAC,EAAEguB,GAAS33B,aAAe23B,EAAM,QAC5C,EACIC,GAAoB,SAAU79B,EAAQ,CACtC,OAAQA,EAAO,QAAO,CAClB,IAAK,QACD,GAAIA,EAAO,OAAS,QAChB,MAER,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,MACD,MAAO,EACnB,CACI,MAAO,EACX,ECjCW89B,GAAS,OAAO,OAAW,IAAc,OAAS,CAAE,ECM3Dn0B,GAAQ,IAAI,QACZo0B,GAAe,cACfC,GAAiB,eACjBC,GAAM,gBAAiB,KAAKH,GAAO,WAAaA,GAAO,UAAU,SAAS,EAC1EI,GAAiB,SAAUC,EAAO,CAAE,OAAO,WAAWA,GAAS,GAAG,CAAI,EACtEtlC,GAAO,SAAUykC,EAAYC,EAAWa,EAAa,CACrD,OAAId,IAAe,SAAUA,EAAa,GACtCC,IAAc,SAAUA,EAAY,GACpCa,IAAgB,SAAUA,EAAc,IACrC,IAAIf,IAAoBe,EAAcb,EAAYD,IAAe,GAAIc,EAAcd,EAAaC,IAAc,CAAC,CAC1H,EACIc,GAAYjgB,GAAO,CACnB,0BAA2BvlB,GAAM,EACjC,cAAeA,GAAM,EACrB,eAAgBA,GAAM,EACtB,YAAa,IAAI2kC,GAAgB,EAAG,EAAG,EAAG,CAAC,CAC/C,CAAC,EACGc,GAAoB,SAAUt+B,EAAQu+B,EAAoB,CAE1D,GADIA,IAAuB,SAAUA,EAAqB,IACtD50B,GAAM,IAAI3J,CAAM,GAAK,CAACu+B,EACtB,OAAO50B,GAAM,IAAI3J,CAAM,EAE3B,GAAIuI,GAASvI,CAAM,EACf,OAAA2J,GAAM,IAAI3J,EAAQq+B,EAAS,EACpBA,GAEX,IAAIG,EAAK,iBAAiBx+B,CAAM,EAC5By+B,EAAMd,GAAM39B,CAAM,GAAKA,EAAO,iBAAmBA,EAAO,QAAS,EACjE0+B,EAAgB,CAACT,IAAMO,EAAG,YAAc,aACxCJ,EAAcJ,GAAe,KAAKQ,EAAG,aAAe,EAAE,EACtDG,EAAsB,CAACF,GAAOV,GAAa,KAAKS,EAAG,WAAa,EAAE,EAClEI,EAAwB,CAACH,GAAOV,GAAa,KAAKS,EAAG,WAAa,EAAE,EACpEK,EAAaJ,EAAM,EAAIP,GAAeM,EAAG,UAAU,EACnDM,EAAeL,EAAM,EAAIP,GAAeM,EAAG,YAAY,EACvDO,EAAgBN,EAAM,EAAIP,GAAeM,EAAG,aAAa,EACzDQ,EAAcP,EAAM,EAAIP,GAAeM,EAAG,WAAW,EACrDS,EAAYR,EAAM,EAAIP,GAAeM,EAAG,cAAc,EACtDU,EAAcT,EAAM,EAAIP,GAAeM,EAAG,gBAAgB,EAC1DW,EAAeV,EAAM,EAAIP,GAAeM,EAAG,iBAAiB,EAC5DY,EAAaX,EAAM,EAAIP,GAAeM,EAAG,eAAe,EACxDa,EAAoBL,EAAcF,EAClCQ,EAAkBT,EAAaE,EAC/BQ,EAAuBH,EAAaF,EACpCM,EAAqBP,EAAYE,EACjCM,EAAgCb,EAA4B5+B,EAAO,aAAew/B,EAAqBx/B,EAAO,aAAtD,EACxD0/B,EAA8Bf,EAA0B3+B,EAAO,YAAcu/B,EAAuBv/B,EAAO,YAAvD,EACpD2/B,EAAiBjB,EAAgBW,EAAoBE,EAAuB,EAC5EK,EAAkBlB,EAAgBY,EAAkBE,EAAqB,EACzEK,EAAepB,EAAMA,EAAI,MAAQP,GAAeM,EAAG,KAAK,EAAImB,EAAiBD,EAC7EI,EAAgBrB,EAAMA,EAAI,OAASP,GAAeM,EAAG,MAAM,EAAIoB,EAAkBH,EACjFM,EAAiBF,EAAeR,EAAoBK,EAA6BH,EACjFS,EAAkBF,EAAgBR,EAAkBG,EAA+BD,EACnFS,EAAQ7hB,GAAO,CACf,0BAA2BvlB,GAAK,KAAK,MAAMgnC,EAAe,gBAAgB,EAAG,KAAK,MAAMC,EAAgB,gBAAgB,EAAG1B,CAAW,EACtI,cAAevlC,GAAKknC,EAAgBC,EAAiB5B,CAAW,EAChE,eAAgBvlC,GAAKgnC,EAAcC,EAAe1B,CAAW,EAC7D,YAAa,IAAIZ,GAAgBwB,EAAaH,EAAYgB,EAAcC,CAAa,CAC7F,CAAK,EACD,OAAAn2B,GAAM,IAAI3J,EAAQigC,CAAK,EAChBA,CACX,EACIC,GAAmB,SAAUlgC,EAAQmgC,EAAa5B,EAAoB,CACtE,IAAI3uB,EAAK0uB,GAAkBt+B,EAAQu+B,CAAkB,EAAG6B,EAAgBxwB,EAAG,cAAeywB,EAAiBzwB,EAAG,eAAgB0wB,EAA4B1wB,EAAG,0BAC7J,OAAQuwB,EAAW,CACf,KAAK/C,GAAyB,yBAC1B,OAAOkD,EACX,KAAKlD,GAAyB,WAC1B,OAAOgD,EACX,QACI,OAAOC,CACnB,CACA,EC3EIE,GAAuB,UAAY,CACnC,SAASA,EAAoBvgC,EAAQ,CACjC,IAAIigC,EAAQ3B,GAAkBt+B,CAAM,EACpC,KAAK,OAASA,EACd,KAAK,YAAcigC,EAAM,YACzB,KAAK,cAAgB7hB,GAAO,CAAC6hB,EAAM,aAAa,CAAC,EACjD,KAAK,eAAiB7hB,GAAO,CAAC6hB,EAAM,cAAc,CAAC,EACnD,KAAK,0BAA4B7hB,GAAO,CAAC6hB,EAAM,yBAAyB,CAAC,CACjF,CACI,OAAOM,CACX,ICXIC,GAAwB,SAAUjN,EAAM,CACxC,GAAIhrB,GAASgrB,CAAI,EACb,MAAO,KAIX,QAFIxlB,EAAQ,EACRvH,EAAS+sB,EAAK,WACX/sB,GACHuH,GAAS,EACTvH,EAASA,EAAO,WAEpB,OAAOuH,CACX,ECRI0yB,GAA8B,UAAY,CAC1C,IAAIC,EAAkB,IAClBC,EAAY,CAAE,EAClB7D,GAAgB,QAAQ,SAAyBE,EAAI,CACjD,GAAIA,EAAG,cAAc,SAAW,EAGhC,KAAIjW,EAAU,CAAE,EAChBiW,EAAG,cAAc,QAAQ,SAAuB4D,EAAI,CAChD,IAAI/5B,EAAQ,IAAI05B,GAAoBK,EAAG,MAAM,EACzCC,EAAcL,GAAsBI,EAAG,MAAM,EACjD7Z,EAAQ,KAAKlgB,CAAK,EAClB+5B,EAAG,iBAAmBV,GAAiBU,EAAG,OAAQA,EAAG,WAAW,EAC5DC,EAAcH,IACdA,EAAkBG,EAElC,CAAS,EACDF,EAAU,KAAK,UAAkC,CAC7C3D,EAAG,SAAS,KAAKA,EAAG,SAAUjW,EAASiW,EAAG,QAAQ,CAC9D,CAAS,EACDA,EAAG,cAAc,OAAO,EAAGA,EAAG,cAAc,MAAM,EAC1D,CAAK,EACD,QAAS8D,EAAK,EAAGC,EAAcJ,EAAWG,EAAKC,EAAY,OAAQD,IAAM,CACrE,IAAIlnC,EAAWmnC,EAAYD,CAAE,EAC7BlnC,EAAU,CAClB,CACI,OAAO8mC,CACX,EC7BIM,GAAkC,SAAUjzB,EAAO,CACnD+uB,GAAgB,QAAQ,SAAyBE,EAAI,CACjDA,EAAG,cAAc,OAAO,EAAGA,EAAG,cAAc,MAAM,EAClDA,EAAG,eAAe,OAAO,EAAGA,EAAG,eAAe,MAAM,EACpDA,EAAG,mBAAmB,QAAQ,SAAuB4D,EAAI,CACjDA,EAAG,aACCJ,GAAsBI,EAAG,MAAM,EAAI7yB,EACnCivB,EAAG,cAAc,KAAK4D,CAAE,EAGxB5D,EAAG,eAAe,KAAK4D,CAAE,EAG7C,CAAS,CACT,CAAK,CACL,ECZIK,GAAU,UAAY,CACtB,IAAIlzB,EAAQ,EAEZ,IADAizB,GAAgCjzB,CAAK,EAC9BgvB,GAAqB,GACxBhvB,EAAQ0yB,GAA6B,EACrCO,GAAgCjzB,CAAK,EAEzC,OAAIkvB,GAAsB,GACtBE,GAAwB,EAErBpvB,EAAQ,CACnB,EChBIsZ,GACAsZ,GAAY,CAAE,EACdO,GAAS,UAAY,CAAE,OAAOP,GAAU,OAAO,CAAC,EAAE,QAAQ,SAAU32B,EAAI,CAAE,OAAOA,EAAE,CAAG,CAAE,CAAI,EAC5Fm3B,GAAiB,SAAUvnC,EAAU,CACrC,GAAI,CAACytB,GAAS,CACV,IAAI+Z,EAAW,EACXC,EAAO,SAAS,eAAe,EAAE,EACjC3oB,EAAS,CAAE,cAAe,EAAM,EACpC,IAAI,iBAAiB,UAAY,CAAE,OAAOwoB,GAAM,CAAG,CAAE,EAAE,QAAQG,EAAM3oB,CAAM,EAC3E2O,GAAU,UAAY,CAAEga,EAAK,YAAc,GAAG,OAAOD,EAAWA,IAAaA,GAAU,CAAI,CACnG,CACIT,GAAU,KAAK/mC,CAAQ,EACvBytB,GAAS,CACb,ECZIia,GAAsB,SAAUt3B,EAAI,CACpCm3B,GAAe,UAA0B,CACrC,sBAAsBn3B,CAAE,CAChC,CAAK,CACL,ECFIu3B,GAAW,EACXC,GAAa,UAAY,CAAE,MAAO,CAAC,CAACD,EAAW,EAC/CE,GAAe,IACfC,GAAiB,CAAE,WAAY,GAAM,cAAe,GAAM,UAAW,GAAM,QAAS,EAAM,EAC1FC,GAAS,CACT,SACA,OACA,gBACA,eACA,iBACA,qBACA,QACA,UACA,UACA,YACA,YACA,WACA,OACA,OACJ,EACIC,GAAO,SAAUC,EAAS,CAC1B,OAAIA,IAAY,SAAUA,EAAU,GAC7B,KAAK,IAAG,EAAKA,CACxB,EACIC,GAAY,GACZC,GAAa,UAAY,CACzB,SAASA,GAAY,CACjB,IAAIC,EAAQ,KACZ,KAAK,QAAU,GACf,KAAK,SAAW,UAAY,CAAE,OAAOA,EAAM,SAAU,CAAG,CAChE,CACI,OAAAD,EAAU,UAAU,IAAM,SAAUF,EAAS,CACzC,IAAIG,EAAQ,KAEZ,GADIH,IAAY,SAAUA,EAAUJ,IAChC,CAAAK,GAGJ,CAAAA,GAAY,GACZ,IAAIG,EAAQL,GAAKC,CAAO,EACxBP,GAAoB,UAAY,CAC5B,IAAIY,EAAsB,GAC1B,GAAI,CACAA,EAAsBjB,GAAS,CAC/C,QACoB,CAGJ,GAFAa,GAAY,GACZD,EAAUI,EAAQL,GAAM,EACpB,CAACJ,GAAU,EACX,OAEAU,EACAF,EAAM,IAAI,GAAI,EAETH,EAAU,EACfG,EAAM,IAAIH,CAAO,EAGjBG,EAAM,MAAO,CAEjC,CACA,CAAS,EACJ,EACDD,EAAU,UAAU,SAAW,UAAY,CACvC,KAAK,KAAM,EACX,KAAK,IAAK,CACb,EACDA,EAAU,UAAU,QAAU,UAAY,CACtC,IAAIC,EAAQ,KACRh4B,EAAK,UAAY,CAAE,OAAOg4B,EAAM,UAAYA,EAAM,SAAS,QAAQ,SAAS,KAAMN,EAAc,CAAI,EACxG,SAAS,KAAO13B,EAAI,EAAG8zB,GAAO,iBAAiB,mBAAoB9zB,CAAE,CACxE,EACD+3B,EAAU,UAAU,MAAQ,UAAY,CACpC,IAAIC,EAAQ,KACR,KAAK,UACL,KAAK,QAAU,GACf,KAAK,SAAW,IAAI,iBAAiB,KAAK,QAAQ,EAClD,KAAK,QAAS,EACdL,GAAO,QAAQ,SAAUt6B,EAAM,CAAE,OAAOy2B,GAAO,iBAAiBz2B,EAAM26B,EAAM,SAAU,EAAI,CAAE,CAAE,EAErG,EACDD,EAAU,UAAU,KAAO,UAAY,CACnC,IAAIC,EAAQ,KACP,KAAK,UACN,KAAK,UAAY,KAAK,SAAS,WAAY,EAC3CL,GAAO,QAAQ,SAAUt6B,EAAM,CAAE,OAAOy2B,GAAO,oBAAoBz2B,EAAM26B,EAAM,SAAU,EAAI,CAAE,CAAE,EACjG,KAAK,QAAU,GAEtB,EACMD,CACX,IACII,GAAY,IAAIJ,GAChBK,GAAc,SAAU9oB,EAAG,CAC3B,CAACioB,IAAYjoB,EAAI,GAAK6oB,GAAU,MAAO,EACvCZ,IAAYjoB,EACZ,CAACioB,IAAYY,GAAU,KAAM,CACjC,EC/FIE,GAAsB,SAAUriC,EAAQ,CACxC,MAAO,CAAC29B,GAAM39B,CAAM,GACb,CAAC69B,GAAkB79B,CAAM,GACzB,iBAAiBA,CAAM,EAAE,UAAY,QAChD,EACIsiC,GAAqB,UAAY,CACjC,SAASA,EAAkBtiC,EAAQmgC,EAAa,CAC5C,KAAK,OAASngC,EACd,KAAK,YAAcmgC,GAAe/C,GAAyB,YAC3D,KAAK,iBAAmB,CACpB,WAAY,EACZ,UAAW,CACd,CACT,CACI,OAAAkF,EAAkB,UAAU,SAAW,UAAY,CAC/C,IAAIzpC,EAAOqnC,GAAiB,KAAK,OAAQ,KAAK,YAAa,EAAI,EAI/D,OAHImC,GAAoB,KAAK,MAAM,IAC/B,KAAK,iBAAmBxpC,GAExB,KAAK,iBAAiB,aAAeA,EAAK,YACvC,KAAK,iBAAiB,YAAcA,EAAK,SAInD,EACMypC,CACX,IC7BIC,GAAwB,UAAY,CACpC,SAASA,EAAqBzG,EAAgBliC,EAAU,CACpD,KAAK,cAAgB,CAAE,EACvB,KAAK,eAAiB,CAAE,EACxB,KAAK,mBAAqB,CAAE,EAC5B,KAAK,SAAWkiC,EAChB,KAAK,SAAWliC,CACxB,CACI,OAAO2oC,CACX,ICLIC,GAAc,IAAI,QAClBC,GAAsB,SAAUC,EAAoB1iC,EAAQ,CAC5D,QAAS/G,EAAI,EAAGA,EAAIypC,EAAmB,OAAQzpC,GAAK,EAChD,GAAIypC,EAAmBzpC,CAAC,EAAE,SAAW+G,EACjC,OAAO/G,EAGf,MAAO,EACX,EACI0pC,GAA4B,UAAY,CACxC,SAASA,GAA2B,CACxC,CACI,OAAAA,EAAyB,QAAU,SAAU7G,EAAgBliC,EAAU,CACnE,IAAIgpC,EAAS,IAAIL,GAAqBzG,EAAgBliC,CAAQ,EAC9D4oC,GAAY,IAAI1G,EAAgB8G,CAAM,CACzC,EACDD,EAAyB,QAAU,SAAU7G,EAAgB97B,EAAQtG,EAAS,CAC1E,IAAIkpC,EAASJ,GAAY,IAAI1G,CAAc,EACvC+G,EAAmBD,EAAO,mBAAmB,SAAW,EACxDH,GAAoBG,EAAO,mBAAoB5iC,CAAM,EAAI,IACzD6iC,GAAoB/F,GAAgB,KAAK8F,CAAM,EAC/CA,EAAO,mBAAmB,KAAK,IAAIN,GAAkBtiC,EAAQtG,GAAWA,EAAQ,GAAG,CAAC,EACpF0oC,GAAY,CAAC,EACbD,GAAU,SAAU,EAE3B,EACDQ,EAAyB,UAAY,SAAU7G,EAAgB97B,EAAQ,CACnE,IAAI4iC,EAASJ,GAAY,IAAI1G,CAAc,EACvCn8B,EAAQ8iC,GAAoBG,EAAO,mBAAoB5iC,CAAM,EAC7D8iC,EAAkBF,EAAO,mBAAmB,SAAW,EACvDjjC,GAAS,IACTmjC,GAAmBhG,GAAgB,OAAOA,GAAgB,QAAQ8F,CAAM,EAAG,CAAC,EAC5EA,EAAO,mBAAmB,OAAOjjC,EAAO,CAAC,EACzCyiC,GAAY,EAAE,EAErB,EACDO,EAAyB,WAAa,SAAU7G,EAAgB,CAC5D,IAAIkG,EAAQ,KACRY,EAASJ,GAAY,IAAI1G,CAAc,EAC3C8G,EAAO,mBAAmB,MAAO,EAAC,QAAQ,SAAUhC,EAAI,CAAE,OAAOoB,EAAM,UAAUlG,EAAgB8E,EAAG,MAAM,CAAE,CAAE,EAC9GgC,EAAO,cAAc,OAAO,EAAGA,EAAO,cAAc,MAAM,CAC7D,EACMD,CACX,IC7CII,GAAkB,UAAY,CAC9B,SAASA,EAAenpC,EAAU,CAC9B,GAAI,UAAU,SAAW,EACrB,MAAM,IAAI,UAAU,gFAAgF,EAExG,GAAI,OAAOA,GAAa,WACpB,MAAM,IAAI,UAAU,+FAA+F,EAEvH+oC,GAAyB,QAAQ,KAAM/oC,CAAQ,CACvD,CACI,OAAAmpC,EAAe,UAAU,QAAU,SAAU/iC,EAAQtG,EAAS,CAC1D,GAAI,UAAU,SAAW,EACrB,MAAM,IAAI,UAAU,2FAA2F,EAEnH,GAAI,CAACpB,GAAU0H,CAAM,EACjB,MAAM,IAAI,UAAU,sFAAsF,EAE9G2iC,GAAyB,QAAQ,KAAM3iC,EAAQtG,CAAO,CACzD,EACDqpC,EAAe,UAAU,UAAY,SAAU/iC,EAAQ,CACnD,GAAI,UAAU,SAAW,EACrB,MAAM,IAAI,UAAU,6FAA6F,EAErH,GAAI,CAAC1H,GAAU0H,CAAM,EACjB,MAAM,IAAI,UAAU,wFAAwF,EAEhH2iC,GAAyB,UAAU,KAAM3iC,CAAM,CAClD,EACD+iC,EAAe,UAAU,WAAa,UAAY,CAC9CJ,GAAyB,WAAW,IAAI,CAC3C,EACDI,EAAe,SAAW,UAAY,CAClC,MAAO,gDACV,EACMA,CACX,ICfA,MAAMx5B,OAAiB,QAEvB,SAASy5B,GAAajc,EAAgC,OAC3C,QAAA9tB,EAAI,EAAG4H,EAAMkmB,EAAQ,OAAQ9tB,EAAI4H,EAAK,EAAE5H,EAAG,CAC5C,MAAA4N,EAAQkgB,EAAQ9tB,CAAC,EACjBuQ,EAAUD,GAAW,IAAI1C,EAAM,MAAM,EAEvC,GAAA,OAAO2C,GAAY,WAAY,CAC3B,KAAA,CAAE,WAAA8zB,EAAY,UAAAC,CAAU,IAAI3tB,EAAA/I,EAAM,gBAAN,YAAA+I,EAAsB,KAAM,CAAC,EACzD,CAAE,YAAA+lB,EAAa,aAAAC,CAAa,EAAI/uB,EAAM,OAE5C2C,EACE,OAAO,OAAO3C,EAAO,CACnB,YAAA8uB,EACA,aAAAC,EACA,MAAO0H,GAAc3H,EACrB,OAAQ4H,GAAa3H,CACtB,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,MAAMkG,GAAiB,IAAKzkC,IAAW,OAAO,gBAAkB0rC,IAC9DC,EACF,EAEgB,SAAAC,GAAcv7B,EAAa8B,EAAwB,CACtDD,GAAA,IAAI7B,EAAI8B,CAAO,EAC1BsyB,GAAe,QAAQp0B,CAAE,CAC3B,CAEO,SAASw7B,GAAgBx7B,EAAa,CACvC6B,GAAW,IAAI7B,CAAE,IACnBo0B,GAAe,UAAUp0B,CAAE,EAC3B6B,GAAW,OAAO7B,CAAE,EAExB,CAEgB,SAAAy7B,GAAUzpC,EAA4B,GAAI,CACxD,IAAI8oB,EAAS/pB,GAEb,MAAMgqB,EAAYhH,EAAA,MAChB,IAAMjL,EAAM,MAAA9W,EAAQ,MAAM,EACpBgO,GAAA,CACG8a,EAAA,EAEH,GAAC9a,GAAM,OAAOhO,EAAQ,UAAa,cAIzBupC,GAAAv7B,EAAIhO,EAAQ,QAAQ,EAElC8oB,EAAS,IAAM,CACb0gB,GAAgBx7B,CAAE,EACT8a,EAAA/pB,EACX,EACF,EACA,CAAE,UAAW,EAAK,CACpB,EAEM2qC,EAAY,IAAM,CACZ3gB,EAAA,EACHD,EAAA,CACT,EAEgBjK,OAAAA,kBAAA,GAAKsK,iBAAeugB,CAAS,EAEtC,CAIL,cAAAH,GAIA,gBAAAC,GACA,UAAAE,CACF,CACF,CC9FA,MAAM1X,GAAMnL,MAAI,EAAK,EACf8iB,GAA4BnzB,EAAA,SAAS,IAAMwb,GAAI,KAAK,EAEpD4X,GAAO,mBAEN,SAASC,IAAS,CACvB,OAAIlsC,IAAY,CAAC,SAAS,cAAc,IAAIisC,EAAI,EAAE,GACnCE,GAAA,EAGR,CAAE,MAAOH,EAAY,CAC9B,CAEA,SAASG,IAAe,CACtB,GAAI,CAACnsC,GAAU,OAET,MAAAmoB,EAAQ,SAAS,cAAc,OAAO,EACtCikB,EAAU,IAAIH,EAAI,6BAA6BA,EAAI,sBAAsBA,EAAI,kBAEnF9jB,EAAM,YAAcikB,EACX,SAAA,KAAK,YAAYjkB,CAAK,EAEzB,MAAA6D,EAAW,SAAS,cAAc,KAAK,EAE7CA,EAAS,GAAKigB,GACdjgB,EAAS,KAAO,OAChBA,EAAS,MAAM,QACb,4EAEF4f,GAAc5f,EAAU,IAAM,CACvBhsB,KAEDq0B,GAAA,MACF,SAAS,gBAAgB,UAAU,SAAS,KAAK,GACjD,SAAS,gBAAgB,aAAa,KAAK,IAAM,MAAA,CACpD,EAEQ,SAAA,KAAK,YAAYrI,CAAQ,CACpC,CCkCa,MAAAqgB,GAAqB,OAAO,OAAoB,CAC3D,MACA,YACA,UACA,SACA,eACA,aACA,OACA,aACA,WACA,QACA,cACA,WACF,CAAC,EAEM,SAASC,GAAUC,EAA+B,CACvD,KAAM,CAAE,SAAAC,EAAU,QAAA/d,EAAS,OAAAge,EAAS,EAAU,EAAAF,EAExCxW,EACHwW,EAAY,WAAqBtpB,EAAAA,WAAW,IAAI,EAC7CypB,EAA8CH,EAAY,QAAUtpB,EAAAA,WAAW,IAAI,EACnF0pB,EAAgDJ,EAAY,OAAStpB,EAAAA,WAAW,IAAI,EAEpF2Q,EAAY1K,EAAA,IAAI/P,EAAM,MAAAozB,EAAY,SAAS,CAAC,EAC5CK,EAAa1jB,MAAI,EAAE,EACnB2jB,EAAQN,EAAY,OAASL,GAAS,EAAA,MAExCzd,GACFvL,EAAAA,YAAY,IAAM,CACV,MAAA4pB,EAAY3zB,QAAMsV,CAAO,EACzBse,EAAW5zB,QAAMuzB,CAAM,EAEzBI,IACAA,EAA2B,kBAAoBC,EACnD,CACD,EAGCP,GAAY,OACdpoB,EAAA,MACE,IAAMjL,EAAAA,MAAMqzB,CAAQ,EACXpsC,GAAA,CACP4sC,EAAc5sC,CAAK,EACN6sC,EAAA,CAAA,CAEjB,EAEcD,EAAA7zB,EAAAA,MAAMqzB,CAAQ,CAAC,GAG/BvgB,EAAAA,UAAU,IAAM,CACd,sBAAsB,IAAM,CAC1B/I,EAAAA,YAAYgqB,CAAoB,CAAA,CACjC,CAAA,CACF,EAEG,IAAA/J,EAEJ,eAAe+J,GAAuB,CACpC,GAAI,CAACltC,GAAU,OAELmjC,GAAA,MAAAA,IAEJ,MAAAkB,EAAclrB,QAAM4c,CAAS,EAC7BgX,EAAW5zB,QAAMuzB,CAAM,EAEzB,GAAA,CAACrI,GAAe,CAAC0I,EAAU,OAEzB,MAAAI,EAAUh0B,QAAMwzB,CAAQ,EAExBjW,EAA2B,CAAChP,IAAM,EAiBxC,GAfI+kB,GACF/V,EAAW,KAAK,CACd,KAAM,SACN,GAAG,CAAE,UAAA9C,EAAW,SAAAlI,GAAY,CACpB,MAAAuE,EAASmd,EAAoBxZ,CAAS,EAE5C,OAAI3D,IACOvE,EAAA,SAAS,MAAM,gBAAkBuE,GAGrC,CAAC,CAAA,CACV,CACD,EAGCsc,EAAY,OAAQ,CAClB,IAAAc,EAAgBl0B,EAAAA,MAAMozB,EAAY,MAAM,EAExC,MAAM,QAAQc,CAAa,IACbA,EAAA,CACd,SAAUA,EAAc,CAAC,EACzB,UAAWA,EAAc,CAAC,CAC5B,GAGS3W,EAAA,KAAKoC,GAAOuU,CAAa,CAAC,CAAA,CAGvC,GAAId,EAAY,MAAO,CACjB,IAAAe,EAAen0B,EAAAA,MAAMozB,EAAY,KAAK,EAEtC,OAAOe,GAAiB,YAC1BA,EAAe,CAAC,GAGP5W,EAAA,KAAK+E,GAAM6R,CAAY,CAAC,CAAA,CAGjCH,GACFzW,EAAW,KAAKoB,GAAM,CAAE,QAASqV,CAAS,CAAA,CAAC,EAG7CzW,EAAW,KAAKqE,GAAK,CAAE,SAAU,SAAW,CAAA,CAAC,EAEvC,MAAA1G,EAAMlb,EAAAA,MAAM0zB,CAAK,GAAK,GACtBxqC,EAAiC,CACrC,WAAAq0B,EACA,UAAWvd,EAAAA,MAAMozB,EAAY,SAAS,EACtC,SAAU,CACR,GAAG5V,GACH,MAAO,SAAYtC,CAAA,CAEvB,EAEMnE,EAAS,SAAY,CACnB,KAAA,CACJ,EAAA6B,EACA,EAAAC,EACA,UAAWub,EACX,SAAA9W,EACA,eAAAK,CACE,EAAA,MAAMN,GAAgB6N,EAAa0I,EAAU1qC,CAAO,EAEpD,GAAA8W,EAAA,MAAM4c,CAAS,IAAMsO,EAAa,CAChClrB,EAAA,MAAMuzB,CAAM,IAAMK,GACb,OAAA,OAAOA,EAAS,MAAO,CAC5B,SAAU,GACV,IAAK,GACL,KAAM,EAAA,CACP,EAGH,MAAA,CAGF,MAAM5kB,EAAsC,CAC1C,SAAUsO,EACV,IAAK,GAAGzE,CAAC,KACT,KAAM,GAAGD,CAAC,IACZ,EAQA,GAAIob,EACF,GAAIrW,EAAe,MAAO,CACxB,KAAM,CAAE,EAAA/E,EAAG,EAAAC,CAAAA,EAAM8E,EAAe,MAEzB,OAAA,OAAOqW,EAAQ,MAAO,CAC3B,IAAKnb,GAAK,KAAO,GAAGA,CAAC,KAAO,GAC5B,KAAMD,GAAK,KAAO,GAAGA,CAAC,KAAO,EAAA,CAC9B,CAAA,MAEM,OAAA,OAAOob,EAAQ,MAAO,CAAE,IAAK,GAAI,KAAM,GAAI,EAI/C,OAAA,OAAOJ,EAAS,MAAO5kB,CAAK,EACnC4kB,EAAS,QAAQ,gBAAkBQ,EACnC3Z,EAAU,MAAQ2Z,CACpB,EAEIhB,EAAY,aACJpJ,EAAAY,GAAWM,EAAa0I,EAAU7c,CAAM,GAGpD,MAAMA,EAAO,CAAA,CAGf,MAAM+c,EAAe,IACZ,IAAI,QAAyBO,GAAA,CAClC,sBAAsB,IAAM,CACLN,EAAA,EAAE,KAAKM,CAAO,CAAA,CACpC,CAAA,CACF,EAGH,SAASR,EAAc5sC,EAAyB,CAC9CwsC,EAAW,MAAQ,OAAOxsC,GAAU,UAAaA,EAAQ,OAAS,GAAMA,CAAA,CAmB1E,SAASgtC,EAAoBxZ,EAAsB,CAC7CA,GAAAA,IAAc,QAAUA,IAAc,QAAS,CACjD,KAAM,CAACnyB,EAAOgxB,CAAG,EAAImB,EAAU,MAAM,GAAG,EAExC,OAAOnyB,IAAU,UAAaA,IAAU,OAASgxB,IAAQ,QACrD,aACA,eAAA,CACN,CAGK,MAAA,CACL,QAAAhE,EACA,UAAAsH,EACA,OAAA2W,EACA,UAAA9Y,EACA,WAAAgZ,EACA,aAAAK,CACF,CACF,CCvSA,MAAMQ,GAAU,kBACVC,GAAU,qBAsBVC,GAAerpB,EAAAA,SAAa,IAAA,GAAuB,EACnDspB,OAAkB,IAExBxpB,EAAA,MAAMupB,GAAc,IAAM,CACxB,GAAI,CAAC3tC,GAAU,OAEf4tC,GAAY,MAAM,EAElB,MAAMC,EAAY,SAAS,KAAK,cAAc,IAAIJ,EAAO,EAAE,EAEvDI,GACO,SAAA,KAAK,YAAYA,CAAS,EAG/B,MAAA1lB,EAAQ,SAAS,cAAc,OAAO,EAExC,IAAAikB,EAAU,IAAIsB,EAAO,kBACrB/X,EAAQ,EAED,SAAA,CAAC3lB,EAAM,CAAC89B,EAAWC,CAAS,CAAC,IAAKJ,GAAa,UAC7CvB,GAAA,SAAS0B,CAAS,KAAKJ,EAAO,MAAMK,CAAS,KAAKL,EAAO,aAAa,EAAE/X,CAAK,OAC5EiY,GAAA,IAAIjY,EAAO3lB,CAAI,EAG7BmY,EAAM,YAAcikB,EACpBjkB,EAAM,GAAKslB,GACF,SAAA,KAAK,YAAYtlB,CAAK,CACjC,CAAC,EC3DM,SAAS6lB,IAAgB,CAC9B,MAAM76B,EAA6B,CAAC,EAEpCqY,OAAAA,EAAAA,eAAe,IAAM,CACnB,OAAO,KAAKrY,CAAK,EAAE,QAAe5S,GAAA,CACnB,aAAA4S,EAAM5S,CAAG,CAAC,CAAA,CACxB,CAAA,CACF,EAEM,CAAE,MAAA4S,CAAM,CACjB,CAKO,SAAS86B,IAAiB,CAC/B,MAAM96B,EAA6B,CAAC,EAEpCqY,OAAAA,EAAAA,eAAe,IAAM,CACnB,OAAO,KAAKrY,CAAK,EAAE,QAAe5S,GAAA,CAClB,cAAA4S,EAAM5S,CAAG,CAAC,CAAA,CACzB,CAAA,CACF,EAEM,CAAE,MAAA4S,CAAM,CACjB,CAKO,SAAS+6B,IAAS,CACvB,MAAM/6B,EAA6B,CAAC,EAEpCqY,OAAAA,EAAAA,eAAe,IAAM,CACnB,OAAO,KAAKrY,CAAK,EAAE,QAAe5S,GAAA,CACX,qBAAA4S,EAAM5S,CAAG,CAAC,CAAA,CAChC,CAAA,CACF,EAEM,CAAE,MAAA4S,CAAM,CACjB,CAOO,SAASg7B,IAAiB,CAC/B,KAAM,CAAE,MAAO3D,CAAQ,EAAIwD,GAAc,EACnC,CAAE,MAAOl7B,CAAS,EAAIm7B,GAAe,EACrC,CAAE,MAAOv7B,CAAI,EAAIw7B,GAAO,EAEvB,MAAA,CAAE,QAAA1D,EAAS,SAAA13B,EAAU,IAAAJ,CAAI,CAClC,CCTO,SAAS07B,GAAkC/rC,EAA4B,CACtE,KAAA,CACJ,MAAA6U,EACA,SAAAm3B,EACA,UAAAC,EACA,MAAAC,EACA,aAAAC,EACA,WAAAC,EAAavlB,MAAI,CAAC,EAClB,QAAAuF,EAAUvF,MAAI,IAAI,CAEpB,EAAI7mB,EAEEqsC,EAAW71B,EAAAA,SAAS,IAAM,CACxB,MAAA81B,EAAWx1B,QAAMjC,CAAK,EACtBnV,EAAS4sC,EAAS,OAClBv5B,EAAW+D,QAAMo1B,CAAK,EACtBz5B,MAAU,IAEhB,QAASlT,EAAI,EAAGA,EAAIG,EAAQ,EAAEH,EAC5BkT,EAAI,IAAI65B,EAAS/sC,CAAC,EAAEwT,CAAQ,EAAGxT,CAAC,EAG3B,OAAAkT,CAAA,CACR,EACK85B,EAAgB1lB,MAAI,CAAC,EACrB2lB,MAAoB,IACpBC,EAAaj2B,EAAAA,SAAS,IAAM,CAC1B,MAAA81B,EAAWx1B,QAAMjC,CAAK,EACtBnV,EAAS4sC,EAAS,OAClBv5B,EAAW+D,QAAMo1B,CAAK,EACtBnmC,EAAOD,GAAapG,EAAQoX,EAAA,MAAMk1B,CAAQ,CAAC,EAEjD,QAASzsC,EAAI,EAAGA,EAAIG,EAAQ,EAAEH,EAAG,CAC/B,MAAMrB,EAAMouC,EAAS/sC,CAAC,EAAEwT,CAAQ,EAC1B25B,EAAaF,EAAc,IAAItuC,CAAG,EAEpCwuC,GACG3mC,EAAA,IAAIxG,EAAGmtC,CAAU,CACxB,CAGK,OAAA3mC,CAAA,CACR,EACK4mC,EAAgB9lB,MAAI,CAAC,EACrB+lB,EAAe/lB,MAAI,CAAC,EACpBgmB,EAAar2B,EAAAA,SAAS,IACnB,KAAK,IACVi2B,EAAW,MAAM,WAAWG,EAAa,KAAK,EAAI,KAAK,IAAI91B,EAAAA,MAAMs1B,CAAU,EAAG,CAAC,EAC/E,CACF,CACD,EACKU,EAAet2B,EAAAA,SAAS,IAAM,CAClC,GAAI,CAAC+1B,EAAc,OAASA,EAAc,MAAQ,QAAU,CAAC,EAEvD,MAAAQ,EAAaj2B,QAAMjC,CAAK,EACxBm4B,EAAW,KAAK,IACpBP,EAAW,MAAM,WAAWG,EAAa,MAAQL,EAAc,KAAK,EAClE,EACA,KAAK,IAAIz1B,EAAM,MAAAs1B,CAAU,EAAG,CAAC,EAC/BW,EAAW,MACb,EAEA,OAAOA,EAAW,MAAMF,EAAW,MAAOG,CAAQ,CAAA,CACnD,EACKC,EAAYz2B,EAAAA,SAAS,IAAM,CAEjBm2B,EAAA,MAER,MAAApZ,EAASkZ,EAAW,MAAM,IAAI,EAC9BS,EAAQp2B,QAAMm1B,CAAS,EAEtB,MAAA,CACL,OAAQiB,EAAQ,GAAG3Z,CAAM,KAAO,OAChC,UAAW2Z,EAAQ,OAAY,GAAG3Z,CAAM,KACxC,UAAW,aACb,CAAA,CACD,EACK4Z,EAAa32B,EAAAA,SAAS,KAEZm2B,EAAA,MAEP,CACL,UAAW,kBAAkBF,EAAW,MAAM,IAAII,EAAW,KAAK,CAAC,QACrE,EACD,EAED9qB,EAAA,MACE,IAAMjL,EAAAA,MAAMsV,CAAO,EACbpe,GAAA,CACAA,GAAM7P,GAAUguC,CAAY,GAC9B,sBAAsB,IAAM,CAC1B,sBAAsB,IAAM,CAC1BiB,EAAYjB,CAAY,CAAA,CACzB,CAAA,CACF,CAEL,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,EAgCA,SAASkB,GAAmB,CACpB,MAAA5C,EAAY3zB,QAAMsV,CAAO,EAE3Bqe,IACFmC,EAAa,MAAQnC,EAAU,UACjC,CAGF,SAAS6C,GAAe,CACtB57B,GAAc27B,CAAgB,CAAA,CAGhC,SAAS/D,EAAan8B,EAA4B,CAE9C8c,GAAgB9c,EAAM,MAAqB,GAC3CA,EAAM,YAAY,SAAWo/B,EAAc,QAK/BA,EAAA,MAAQp/B,EAAM,YAAY,OAAA,CAGjC,SAAAogC,EAAiBrvC,EAAUiP,EAA4B,WAC1D,GAAA2J,EAAAA,MAAMm1B,CAAS,EAAG,OAEtB,MAAMhmC,EAAQomC,EAAS,MAAM,IAAInuC,CAAG,EAC9B6H,EAAO0mC,EAAW,MAClBe,EAAaznC,EAAK,IAAIE,CAAK,EAC3BstB,IAASzI,IAAA5U,GAAA/I,EAAM,gBAAN,YAAA+I,GAAsB,KAAtB,YAAA4U,GAA0B,YAAa3d,EAAM,YAAY,OAExE,GAAIomB,IAAWia,EAAY,OAEvB,GAAAvjB,GAAgB9c,EAAM,MAAqB,EAAG,CAC5CqgC,IACGznC,EAAA,IAAIE,EAAO,CAACunC,CAAU,EACbb,EAAA,SAGhB,MAAA,CAGI,MAAAc,EAAOla,EAASzc,EAAA,MAAMk1B,CAAQ,EAC9B9lC,EAAQqtB,EAASia,EAQvB,GANIC,EACYjB,EAAA,IAAItuC,EAAKuvC,CAAI,EAE3BjB,EAAc,OAAOtuC,CAAG,EAGtB,CAACgI,EAAO,OAEPH,EAAA,IAAIE,EAAOC,CAAK,EACPymC,EAAA,QAER,MAAAlC,EAAY3zB,QAAMsV,CAAO,EAE/B,GAAIqe,EAAW,CACP,MAAAiD,EAAU3nC,EAAK,IAAIE,CAAK,EAE1BwkC,EAAU,UAAYiD,GACdjD,EAAA,SAAS,EAAGvkC,CAAK,EAG7B0mC,EAAa,MAAQnC,EAAU,SAAA,CACjC,CAGO,SAAAkD,EAASpQ,EAAaqQ,EAAqB,CAC5C,MAAAnD,EAAY3zB,QAAMsV,CAAO,EAE3Bqe,GACFA,EAAU,SAAS,CACjB,SAAAmD,EACA,IAAArQ,EACA,KAAM,CAAA,CACP,CACH,CAGO,SAAAsQ,EAAS3nC,EAAe0nC,EAAqB,CAC9C,MAAAnD,EAAY3zB,QAAMsV,CAAO,EAE3Bqe,GACFA,EAAU,SAAS,CACjB,SAAAmD,EACA,IAAK1nC,EACL,KAAM,CAAA,CACP,CACH,CAGO,SAAAknC,EAAYlvC,EAAU0vC,EAAqB,CAClD,MAAM3nC,EAAQomC,EAAS,MAAM,IAAInuC,CAAG,EAEhC+H,GAAS,MACX6nC,EAAc7nC,EAAO2nC,CAAQ,CAC/B,CAGO,SAAAE,EAAc7nC,EAAe2nC,EAAqB,CACnD,MAAAnD,EAAY3zB,QAAMsV,CAAO,EAE3Bqe,GACFA,EAAU,SAAS,CACjB,SAAAmD,EACA,IAAKnB,EAAW,MAAM,IAAIxmC,CAAK,EAC/B,KAAM,CAAA,CACP,CACH,CAGO,SAAA8nC,EAAkB9nC,EAAe2nC,EAAqB,CACvD,MAAAnD,EAAY3zB,QAAMsV,CAAO,EAE/B,GAAI,CAACqe,EAAW,OAEhB,MAAM1kC,EAAO0mC,EAAW,MAClBuB,EAAUvD,EAAU,UAG1B,GAFY1kC,EAAK,IAAIE,CAAK,EAEhB+nC,EAAS,CACjBF,EAAc7nC,EAAO2nC,CAAQ,EAC7B,MAAA,CAGF,MAAMK,EAAaxD,EAAU,aACvByD,EAAaF,EAAUC,EACvBlK,EAASh+B,EAAK,IAAIE,EAAQ,CAAC,EAE7B89B,EAASmK,GACFP,EAAA5J,EAASkK,EAAYL,CAAQ,CACxC,CAGO,SAAAO,EAAgBjwC,EAAU0vC,EAAqB,CACtD,MAAM3nC,EAAQomC,EAAS,MAAM,IAAInuC,CAAG,EAEhC+H,GAAS,MACX8nC,EAAkB9nC,EAAO2nC,CAAQ,CACnC,CAGK,MAAA,CACL,QAAAxhB,EACA,SAAAigB,EACA,WAAAI,EACA,WAAAI,EACA,aAAAD,EACA,aAAAE,EACA,UAAAG,EACA,WAAAE,EACA,aAAAG,EACA,aAAAhE,EACA,iBAAAiE,EACA,SAAAI,EACA,SAAAE,EACA,YAAAT,EACA,cAAAU,EACA,kBAAAC,EACA,gBAAAI,CACF,CACF,CCrUA,SAASC,GACPpgC,EACAia,EACA,CACA,MAAMjoB,EACJ,OAAOioB,EAAQ,OAAU,WAAa,CAAE,QAASA,EAAQ,KAAM,EAAI,CAAE,GAAGA,EAAQ,KAAM,EAClFomB,EAAcruC,EAAQ,UAAYioB,EAAQ,UAAU,UAAY,GAOtE,GALAja,EAAG,SAAW,CACZ,YAAAqgC,EACA,SAAU,EACZ,EAEIruC,EAAQ,SAAU,CACpBwpC,GAAgBx7B,CAAE,EAClBA,EAAG,SAAS,SAAW,GACvB,MAAA,CAGI,MAAAsgC,EAAiBD,EACnB99B,GAASvQ,EAAQ,QAAS,OAAOquC,GAAgB,UAAY,GAAKA,CAAW,EAC7EruC,EAAQ,QAEZupC,GAAcv7B,EAAIsgC,CAAc,EAChCtgC,EAAG,SAAS,SAAW,EACzB,CAEO,MAAMugC,GAGT,CACF,QAAQvgC,EAAIia,EAAS,CACnBmmB,GAAepgC,EAAIia,CAAO,CAC5B,EACA,QAAQja,EAAIia,EAAS,CACf,GAAA,CAACja,EAAG,SAAU,CAChBogC,GAAepgC,EAAIia,CAAO,EAC1B,MAAA,CAGF,MAAMjoB,EACJ,OAAOioB,EAAQ,OAAU,WAAa,CAAE,QAASA,EAAQ,KAAM,EAAI,CAAE,GAAGA,EAAQ,KAAM,EAClFomB,EAAcruC,EAAQ,UAAYioB,EAAQ,UAAU,SAEpDumB,EAAa,IACjBH,EACI99B,GAASvQ,EAAQ,QAAS,OAAOquC,GAAgB,UAAY,GAAKA,CAAW,EAC7EruC,EAAQ,QAEd,GAAIA,EAAQ,SACNgO,EAAG,SAAS,WACdw7B,GAAgBx7B,CAAE,EAClBA,EAAG,SAAS,SAAW,YAEhB,CAACA,EAAG,SAAS,SACRu7B,GAAAv7B,EAAIwgC,GAAY,EAC9BxgC,EAAG,SAAS,SAAW,OAClB,CACL,MAAMygC,EACJ,OAAOxmB,EAAQ,UAAa,WACxB,CAAE,QAASA,EAAQ,QAAS,EAC5B,CAAE,GAAIA,EAAQ,UAAY,CAAE,QAASlpB,GAAQ,GAE/CsvC,IAAgBrgC,EAAG,SAAS,aAAehO,EAAQ,UAAYyuC,EAAY,WAC7EjF,GAAgBx7B,CAAE,EACJu7B,GAAAv7B,EAAIwgC,GAAY,EAChC,CAEJ,EACA,cAAcxgC,EAAI,QACZkI,EAAAlI,EAAG,WAAH,MAAAkI,EAAa,UACfszB,GAAgBx7B,CAAE,EAGpB,OAAOA,EAAG,QAAA,CAEd,ECxFO,SAAS0gC,GAAkB73B,EAAU,CACtCA,EAAA,UAAU,UAAW2R,EAAQ,EAC7B3R,EAAA,UAAU,SAAU03B,EAAO,CACjC,CCFO,MAAMI,GAAarsB,GAAW,CACnC,OAAQ,OACR,OAAQ,OACR,SAAU,OACV,OAAQ,CAAC,OAAQ,OAAQ,QAAQ,EAEjC,SAAUe,EAAU,EACpB,SAAUA,EAAU,CACtB,CAAC,ECVD,IAAIurB,GAAwD,KAErD,SAASC,GAAmBvoC,EAAkD,CAG/E,GAFJA,EAASwQ,QAAMxQ,CAAM,EAEjBsoC,KAAiB93B,QAAMxQ,CAAM,EAAG,CAClC,GAAIsoC,IAAgBA,KAAiB,QAAUA,KAAiB,SAAS,gBAAiB,CACxF,MAAME,EAAeF,GAA6B,cAChD,mBACF,EAEIE,GACUA,EAAA,UAAU,OAAO,kBAAkB,CACjD,CAGaF,GAAAtoC,CAAA,CAEnB,CAEO,SAASyoC,GAAkBzoC,EAAkD,CAC9EsoC,IAAgBA,KAAiB93B,EAAM,MAAAxQ,CAAM,IAChCsoC,GAAA,KAEnB,sFCDM,MAAAz5B,EAAQiM,GAAS,QADRsF,EACyB,CACtC,OAAQ,EACR,OAAQ,IACR,SAAU,MACV,OAAQ,IAAA,CACT,EAEKhB,EAAKtF,GAAc,OAAO,EAE1B4uB,EAAW73B,EAAAA,mBAAmB,EAE9BiV,EAAUxL,EAAAA,WAAwB,EAClCta,EAASsa,EAAAA,WAAwB,EACjCquB,EAAYruB,EAAAA,WAAiC,EAEnD,IAAIsuB,EAAc,GACdC,EAA8B,KAE5B,MAAAjC,EAAQrmB,MAAI,EAAK,EACjBuoB,EAAcvoB,MAAI,CAAC,EACnBwoB,EAAaxoB,MAAI,CAAC,EAClByoB,EAAYzoB,MAAI,CAAC,EACjB0oB,EAAe1oB,MAAI,CAAC,EACpB2oB,EAAY3oB,MAAI,CAAC,EAEjB4oB,EAAaj5B,EAAAA,SAAwB,KAClC,CACL,OAAQ02B,EAAM,MAAQ,GAAGkC,EAAY,KAAK,KAAO,GACjD,MAAOlC,EAAM,MAAQ,GAAGmC,EAAW,KAAK,KAAO,EACjD,EACD,EACKK,EAAal5B,EAAAA,SAAwB,IAAM,CAC/C,GAAI,CAAC02B,EAAM,MAAO,MAAO,CAAC,EAE1B,IAAIyC,EAAOx6B,EAAM,OACby6B,EAAUz6B,EAAM,OAEhB,OAAAvW,GAAUqwC,EAAU,KAAK,IACvB95B,EAAM,QAAUA,EAAM,WAAa,MACrCw6B,GAAQH,EAAU,MAElBI,GAAWJ,EAAU,OAIlB,CACL,OAAQ,GAAGJ,EAAY,KAAK,KAC5B,MAAO,GAAGC,EAAW,KAAK,KAC1B,IAAKl6B,EAAM,WAAa,MAAQ,GAAGw6B,CAAI,KAAO,GAC9C,OAAQx6B,EAAM,WAAa,SAAW,GAAGy6B,CAAO,KAAO,GACvD,OAAQz6B,EAAM,MAChB,CAAA,CACD,EAED0L,EAAAA,YAAYgN,CAAM,EACZ9L,QAAAmrB,EAAOA,GAAS,CACV5pB,EAAAnO,EAAM,SAAU+3B,CAAK,CAAA,CAChC,EAEYjmB,EAAA,CAAE,OAAA4G,EAAQ,EAEvBjE,EAAAA,UAAU,IAAM,CACd,GAAIzU,EAAM,OAAQ,CACV,MAAA06B,EAAmB59B,GAAWkD,EAAM,MAAM,EAE5C,GAAA,OAAO06B,GAAY,UAGjB,GAFJvpC,EAAO,MAAQ,SAAS,cAA2BupC,CAAO,GAAK,OAE3D,CAACvpC,EAAO,MACV,MAAM,IAAI,MAAM,uCAAuC6O,EAAM,MAAM,EAAE,OAGvE7O,EAAO,MAAQupC,CACjB,MAEAvpC,EAAO,MAAQ,SAAS,gBAGVwpC,EAAA,CAAA,CACjB,EAED/lB,EAAAA,gBAAgB,IAAM,CACLgmB,EAAA,CAAA,CAChB,EAED,SAASliB,GAAS,CACZ,GAAA,CAACzB,EAAQ,OAAS,CAAC9lB,EAAO,OAAS,CAAC2oC,EAAU,MAAO,OAEnD,MAAAe,EAAc5jB,EAAQ,MAAM,sBAAsB,EAClD6jB,EAAa3pC,EAAO,MAAM,sBAAsB,EAEtD8oC,EAAY,MAAQY,EAAY,OAChCX,EAAW,MAAQW,EAAY,MACrBV,EAAA,MACRL,EAAU,QAAU,OAChB,SAAS,gBAAgB,UACxBA,EAAU,MAAgC,SAAW,EAClDK,EAAA,MAAQ,SAAS,gBAAgB,UAC9BC,EAAA,MAAQ,SAAS,gBAAgB,aAE1Cp6B,EAAM,WAAa,MACjBA,EAAM,QACRq6B,EAAU,MAAQS,EAAW,IAC7B/C,EAAM,MAAQ8C,EAAY,IAAMC,EAAW,IAAM96B,EAAM,QAEjD+3B,EAAA,MAAQ/3B,EAAM,OAAS66B,EAAY,IAGvC76B,EAAM,QACEq6B,EAAA,MAAQD,EAAa,MAAQU,EAAW,OAClD/C,EAAM,MAAQ+C,EAAW,OAAS96B,EAAM,OAAS66B,EAAY,QAE7D9C,EAAM,MAAQqC,EAAa,MAAQp6B,EAAM,OAAS66B,EAAY,MAElE,CAGF,SAASE,GAAwB,CAC/BrB,GAAmBvoC,CAAM,EAClBunB,EAAA,EAEPvK,EAAUnO,EAAM,SAAU,CACxB,UAAWm6B,EAAU,MACrB,MAAOpC,EAAM,KAAA,CACd,CAAA,CAGH,SAAS4C,GAAkB,WAGzB,GAFeC,EAAA,EAEX,EAACpyC,GAEL,GAAIwX,EAAM,OACR85B,EAAU,MAAQ3oC,EAAO,MACf2oC,EAAA,MAAM,iBAAiB,SAAUiB,CAAqB,MAC3D,CACL,IAAIC,EAA+CnB,EAAS,OAC5D,MAAMoB,EAAU,SAEhB,KAAOD,GAAY,CACX,MAAAxiC,GAAOuI,EAAAi6B,EAAW,OAAX,YAAAj6B,EAAiB,KAE1B,GAAAvI,IAAS,UAAYA,IAAS,eAAgB,CAChD,KAAM,CAAE,YAAA0iC,EAAa,QAAAC,EAAS,MAAAC,CAAU,EAAAJ,EAClCK,EAAY,IAAI,MAAM,GAAW,CACrC,IAAIp6B,EAAGlY,EAAK,CACV,OAAQqyC,GAAA,YAAAA,EAAgBryC,MAASmyC,GAAA,YAAAA,EAAsBnyC,MAASoyC,GAAA,YAAAA,EAAkBpyC,GAAG,CACvF,CACD,EAGD,GAAI,GAAC4sB,GAFc0lB,GAAA,YAAAA,EAAW,KAEd,aAAa,OAAO,IAA/B,MAAA1lB,EAAkC,SAAS,kCAAkC,CACrEqkB,EAAAqB,EACX,KAAA,CACF,CAGI,MAAAC,GAAU1lB,EAAAolB,EAAW,OAAX,YAAAplB,EAAkBqlB,GAElC,GAAIK,EAAS,CACP7xC,GAAU6xC,CAAO,GACLvB,EAAA,GACdD,EAAU,MAAQwB,GAEPtB,EAAAsB,EAGb,KAAA,CAGFN,EAAaA,EAAW,MAAA,CAGtBhB,GACFA,EAAS,kBAAkBe,CAAqB,EAChDjB,EAAU,MAAQE,EAAS,KACjBF,EAAU,QACNC,EAAA,GACdD,EAAU,MAAQ,QAGhBC,GAAeD,EAAU,OACjBA,EAAA,MAAM,iBAAiB,SAAUiB,CAAqB,CAClE,CACF,CAGF,SAASH,GAAiB,CACpBZ,IACFA,EAAS,qBAAqBe,CAAqB,EACxCf,EAAA,MAGTF,EAAU,QACFA,EAAA,MAAM,oBAAoB,SAAUiB,CAAqB,EACnEjB,EAAU,MAAQ,QAGpBF,GAAkBzoC,CAAM,CAAA,6BAKxBkhB,EAAA,mBAIM,MAAA,SAJG,UAAJ,IAAI4E,EAAW,MAAK3E,EAAAA,eAAEJ,EAAAA,MAAE3B,CAAA,EAAC,GAAC,EAAK,uBAAO+pB,EAAU,KAAA,CAAA,GACnD7nB,EAAAA,mBAEM,MAAA,CAFA,MAAUH,EAAA,eAAA,CAAA,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,aAAcwnB,EAAK,MAAA,EAAK,uBAAOwC,EAAU,KAAA,CAAA,GAC1DhoB,aAAaC,EAAA,OAAA,SAAA,CAAA,aClON+oB,GAAgBpuB,GAAW,CACtC,SAAU,CAAC,OAAQ,OAAQ,KAAK,EAChC,KAAMJ,EACN,UAAWA,EACX,UAAW,OACX,MAAOA,EACP,MAAO,CACL,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,SAAUmB,EAAmD,CAC/D,CAAC,EAKYstB,GAAqBruB,GAAW,CAC3C,MAAO,CAAC,OAAQ,MAAM,EACtB,MAAO,OACP,SAAUJ,EACV,aAAciB,GACd,SAAUjB,EACV,KAAMA,EACN,UAAW,OACX,KAAMyB,GACN,MAAOzB,EACP,MAAO,CACL,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,MAAO,OACP,SAAUmB,EAAuC,CACnD,CAAC,EAOYutB,GAA0BtuB,GAAW,CAChD,OAAQJ,EACR,KAAM,OACN,WAAYA,EACZ,SAAU,OACV,OAAQ,OACR,WAAYA,EAMZ,QAASA,EACT,SAAUA,EACV,cAAemB,EAAiC,EAChD,QAASA,EAAiC,EAC1C,aAAcA,EAAiC,EAC/C,iBAAkBA,EAAiC,EACnD,cAAeA,EAAiC,EAChD,QAASA,EAAiC,EAC1C,aAAcA,EAAiC,EAC/C,iBAAkBA,EAAiC,CACrD,CAAC,EC9DDwtB,GAAejsB,kBAAgB,CAC7B,KAAM,qBACN,MAAOgsB,GACP,MAAO,CAAC,EACR,MAAM9rB,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,qBAAsB0D,EAAQ,CACnD,OAAQ,GACR,KAAM,CACJ,QAAS,UACT,aAAoB,CAAC,SAAU,SAAU,SAAS,EAAE,SAAS/mB,CAAK,CACpE,EACA,WAAY,GACZ,SAAU,CACR,QAAS,IACT,UAAYA,GAAkBA,GAAS,GACzC,EACA,OAAQ,KACR,WAAY,GACZ,QAAS,EAAA,CACV,EAED,IAAI+yC,EAAqC,KACrCC,EAAqC,KAEzC,MAAO,IAAM,CACX,GAAI57B,EAAM,SACD,OAAAmR,EAAA,WAAWjN,EAAO,SAAS,EAGpC,MAAM23B,EAAW77B,EAAM,SACjB87B,EAAS97B,EAAM,QAAU,cAE/B,IAAIoe,EAAmC,YACnC4R,EAA2C,aAC3CE,EAAkD,gBAClD6L,EAAwC,YACxCC,EAA+C,eAC/CC,EAA+C,eAC/CC,EAAa;AAAA,qBACFL,CAAQ,MAAMC,CAAM;AAAA,sBACnBD,CAAQ,MAAMC,CAAM;AAAA,yBACjBD,CAAQ,MAAMC,CAAM;AAAA,qBACxBD,CAAQ,MAAMC,CAAM;AAAA,wBACjBD,CAAQ,MAAMC,CAAM;AAAA,QAGlC97B,EAAM,aACCoe,EAAA,WACI4R,EAAA,cACGE,EAAA,eACJ6L,EAAA,aACGC,EAAA,cACAC,EAAA,cACFC,EAAA;AAAA,sBACCL,CAAQ,MAAMC,CAAM;AAAA,iCACTD,CAAQ,MAAMC,CAAM;AAAA,+BACtBD,CAAQ,MAAMC,CAAM;AAAA,gCACnBD,CAAQ,MAAMC,CAAM;AAAA,8BACtBD,CAAQ,MAAMC,CAAM;AAAA,WAIxC97B,EAAM,aACKk8B,EAAA;AAAA,YACTA,CAAU;AAAA,oBACFL,CAAQ;AAAA,WAItB,MAAMM,EAA4C,CAAC,EAC7CC,EAA4C,CAAC,EAE5C,OAAAxvC,EAAA,EACLyvC,EAAA,WACA,CACE,OAAQr8B,EAAM,OACd,KAAMA,EAAM,KACZ,cAAcs8B,EAAK,CACjB,GAAIX,EAAY,OAEHA,EAAA,SACb,MAAM9iC,EAAKyjC,EAECH,EAAA,WAAatjC,EAAG,MAAMm3B,CAAU,EAChCmM,EAAA,cAAgBtjC,EAAG,MAAMq3B,CAAa,EACtCiM,EAAA,UAAYtjC,EAAG,MAAMkjC,CAAS,EAC9BI,EAAA,aAAetjC,EAAG,MAAMmjC,CAAY,EACpCG,EAAA,WAAatjC,EAAG,MAAM,WACtBsjC,EAAA,UAAYtjC,EAAG,MAAM,UACrBsjC,EAAA,QAAUtjC,EAAG,MAAM,QAE/BA,EAAG,MAAM,WAAaqjC,EAEjBl8B,EAAM,UACNnH,EAAA,MAAMulB,CAAM,EAAI,IAChBvlB,EAAA,MAAMm3B,CAAU,EAAI,IACpBn3B,EAAA,MAAMq3B,CAAa,EAAI,IACvBr3B,EAAA,MAAMkjC,CAAS,EAAI,IACnBljC,EAAA,MAAMmjC,CAAY,EAAI,IACzBnjC,EAAG,MAAM,UAAY,cAEjBmH,EAAM,aACRnH,EAAG,MAAM,QAAU,MAIbsV,EAAAnO,EAAM,cAAes8B,CAAG,CACpC,EACA,QAAQA,EAAK,CACX,GAAIX,IAAe,KAAM,OAEZA,EAAA,KACb,MAAM9iC,EAAKyjC,EAECH,EAAA,SAAWtjC,EAAG,MAAM,SAChCA,EAAG,MAAM,SAAW,SAEhBA,EAAGojC,CAAY,IAAM,EACvBpjC,EAAG,MAAMulB,CAAM,EAAI,GAAGvlB,EAAGojC,CAAY,CAAC,KAEnCpjC,EAAA,MAAMulB,CAAM,EAAI,GAGlBvlB,EAAA,MAAMm3B,CAAU,EAAImM,EAAY,WAChCtjC,EAAA,MAAMq3B,CAAa,EAAIiM,EAAY,cACnCtjC,EAAA,MAAMkjC,CAAS,EAAII,EAAY,UAC/BtjC,EAAA,MAAMmjC,CAAY,EAAIG,EAAY,aAEhCn8B,EAAM,SAMTnH,EAAGojC,CAAY,EAEZpjC,EAAA,MAAMulB,CAAM,EAAI,IAChBvlB,EAAA,MAAMm3B,CAAU,EAAI,IACpBn3B,EAAA,MAAMq3B,CAAa,EAAI,IACvBr3B,EAAA,MAAMkjC,CAAS,EAAI,IACnBljC,EAAA,MAAMmjC,CAAY,EAAI,IACzBnjC,EAAG,MAAM,UAAY,cAEjBmH,EAAM,aACRnH,EAAG,MAAM,QAAU,MAfjBmH,EAAM,aACLnH,EAAA,MAAM,QAAUsjC,EAAY,SAkBzBhuB,EAAAnO,EAAM,QAASs8B,CAAG,CAC9B,EACA,aAAaA,EAAK,CAChB,MAAMzjC,EAAKyjC,EAERzjC,EAAA,MAAM,WAAasjC,EAAY,YAAc,GAE3Cn8B,EAAM,UACNnH,EAAA,MAAMulB,CAAM,EAAI,GAChBvlB,EAAA,MAAM,SAAWsjC,EAAY,SAC7BtjC,EAAA,MAAM,UAAYsjC,EAAY,WAGtBR,EAAA,KACHxtB,EAAAnO,EAAM,aAAcs8B,CAAG,CACnC,EACA,iBAAiBA,EAAK,CACpB,MAAMzjC,EAAKyjC,EAERzjC,EAAA,MAAM,WAAasjC,EAAY,YAAc,GAC7CtjC,EAAA,MAAMulB,CAAM,EAAI,GAChBvlB,EAAA,MAAM,SAAWsjC,EAAY,SAC7BtjC,EAAA,MAAM,UAAYsjC,EAAY,UAEpBR,EAAA,KACHxtB,EAAAnO,EAAM,iBAAkBs8B,CAAG,CACvC,EACA,cAAcA,EAAK,CACjB,GAAIV,EAAY,OAEHA,EAAA,SACb,MAAM/iC,EAAKyjC,EAECF,EAAA,WAAavjC,EAAG,MAAMm3B,CAAU,EAChCoM,EAAA,cAAgBvjC,EAAG,MAAMq3B,CAAa,EACtCkM,EAAA,UAAYvjC,EAAG,MAAMkjC,CAAS,EAC9BK,EAAA,aAAevjC,EAAG,MAAMmjC,CAAY,EACpCI,EAAA,SAAWvjC,EAAG,MAAM,SACpBujC,EAAA,UAAYvjC,EAAG,MAAM,UACrBujC,EAAA,QAAUvjC,EAAG,MAAM,QAE/BA,EAAG,MAAMulB,CAAM,EAAI,GAAGvlB,EAAGojC,CAAY,CAAC,KACtCpjC,EAAG,MAAM,SAAW,SAEVsV,EAAAnO,EAAM,cAAes8B,CAAG,CACpC,EACA,QAAQA,EAAK,CACX,GAAIV,IAAe,KAAM,OAEZA,EAAA,KACb,MAAM/iC,EAAKyjC,EAEPzjC,EAAGojC,CAAY,IAAM,IACXG,EAAA,WAAavjC,EAAG,MAAM,WAElCA,EAAG,MAAM,WAAaqjC,EAEnBrjC,EAAA,MAAMulB,CAAM,EAAI,IAChBvlB,EAAA,MAAMm3B,CAAU,EAAI,IACpBn3B,EAAA,MAAMq3B,CAAa,EAAI,IACvBr3B,EAAA,MAAMkjC,CAAS,EAAI,IACnBljC,EAAA,MAAMmjC,CAAY,EAAI,IAErBh8B,EAAM,aACRnH,EAAG,MAAM,QAAU,MAIbsV,EAAAnO,EAAM,QAASs8B,CAAG,CAC9B,EACA,aAAaA,EAAK,CAChB,MAAMzjC,EAAKyjC,EAERzjC,EAAA,MAAMulB,CAAM,EAAI,GAChBvlB,EAAA,MAAMm3B,CAAU,EAAIoM,EAAY,WAChCvjC,EAAA,MAAMq3B,CAAa,EAAIkM,EAAY,cACnCvjC,EAAA,MAAMkjC,CAAS,EAAIK,EAAY,UAC/BvjC,EAAA,MAAMmjC,CAAY,EAAII,EAAY,aAClCvjC,EAAA,MAAM,SAAWujC,EAAY,SAC7BvjC,EAAA,MAAM,WAAaujC,EAAY,YAAc,GAC7CvjC,EAAA,MAAM,UAAYujC,EAAY,UAC9BvjC,EAAA,MAAM,QAAUujC,EAAY,QAElBR,EAAA,KACHztB,EAAAnO,EAAM,aAAcs8B,CAAG,CACnC,EACA,iBAAiBA,EAAK,CACpB,MAAMzjC,EAAKyjC,EAERzjC,EAAA,MAAMulB,CAAM,EAAI,GAChBvlB,EAAA,MAAMm3B,CAAU,EAAIoM,EAAY,WAChCvjC,EAAA,MAAMq3B,CAAa,EAAIkM,EAAY,cACnCvjC,EAAA,MAAMkjC,CAAS,EAAIK,EAAY,UAC/BvjC,EAAA,MAAMmjC,CAAY,EAAII,EAAY,aAClCvjC,EAAA,MAAM,SAAWujC,EAAY,SAC7BvjC,EAAA,MAAM,WAAaujC,EAAY,YAAc,GAC7CvjC,EAAA,MAAM,UAAYujC,EAAY,UAC9BvjC,EAAA,MAAM,QAAUujC,EAAY,QAElBR,EAAA,KACHztB,EAAAnO,EAAM,iBAAkBs8B,CAAG,CAAA,CAEzC,EACAp4B,CACF,CACF,CAAA,CAEJ,CAAC,EC9PYq4B,GAAapvB,GAAW,CACnC,KAAM,OACN,MAAO,OACP,aAAcJ,EACd,KAAM,CACJ,KAAM,CAAC,QAAS,OAAQ,QAAQ,EAChC,QAAS,IACX,EACA,SAAUA,EACV,UAAW,OACX,SAAUA,EACV,OAAQA,EACR,OAAQA,EACR,OAAQA,EACR,YAAa,OACb,MAAO,OACP,MAAO,OACP,QAASmB,EAAU,EACnB,OAAQA,EAAU,EAClB,YAAaA,EAAU,CACzB,CAAC,ECjBYsuB,GAAa,OAAO,OAAoB,CACnD,UACA,UACA,OACA,UACA,UACA,OACF,CAAC,sECCK,MAAAx8B,EAAQiM,GAAS,QADRsF,EACyB,CACtC,KAAM,CACJ,QAAS,UACT,UAAW3oB,GAAS4zC,GAAW,SAAS5zC,CAAK,CAC/C,EACA,MAAO,GACP,aAAc,GACd,KAAM,CACJ,OAAQ,GACR,QAAS,EACX,EACA,SAAU,GACV,UAAW,GACX,SAAU,GACV,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,YAAa,EACb,MAAO,KACP,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsb,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,OAAO,EAC1B3B,EAAQU,GAAS,EAEjByyB,EAAkBp7B,EAAAA,SAAS,KAAO,CACtC,QAASiI,EAAM,MAAM,MACrB,QAASA,EAAM,MAAM,KACrB,KAAMA,EAAM,MAAM,KAClB,QAASA,EAAM,MAAM,QACrB,QAASA,EAAM,MAAM,QACrB,MAAOA,EAAM,MAAM,KAAA,EACnB,EAEIozB,EAAShrB,MAAI,EAAK,EAClBirB,EAASjrB,MAAI,EAAK,EAClBkrB,EAAiBlrB,MAAI,CAAC,EACtB+lB,EAAe/lB,MAAI,CAAC,EACpBmrB,EAAcnrB,MAAI,CAAC,EAEnBkjB,EAAUljB,EAAAA,IAAiB,EAC3BorB,EAAWprB,EAAAA,IAAiB,EAE5BqrB,EAAW17B,EAAAA,SAAS,IACjB,CAAC,EAAErB,EAAM,OAASkE,EAAM,MAChC,EACK84B,EAAU37B,EAAAA,SAAS,IAChB,CAAC,EAAErB,EAAM,MAAQkE,EAAM,KAC/B,EACKN,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,KAC3B,CAACuQ,EAAG,GAAG,eAAe,CAAC,EAAGvQ,EAAM,aAChC,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGwsB,EAAS,MAC/B,CAACxsB,EAAG,GAAG,UAAU,CAAC,EAAGysB,EAAQ,MAC7B,CAACzsB,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAG,CAACvQ,EAAM,QAAUA,EAAM,SAC7C,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,MAC3B,EACD,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,CACvB,GAAA,CAACrB,EAAM,MAAc,OAEzB,MAAM4O,EAAYpmB,GAAW,iBAAiB,SAAS,eAAe,EAAI,KACpEy0C,EAAQ5vC,IAAiBuhB,GAAA,YAAAA,EAAW,iBAAiB2B,EAAG,GAAG,aAAa,KAAM,MAAM,EACpF2sB,EAAY7vC,GAAiB2S,EAAM,KAAK,EAE9C,OAAOuQ,EAAG,IAAI,CACZ,WAAY1gB,GAAYqtC,EAAW,EAAG,EAAE,SAAS,EACjD,UAAWrtC,GAAYqtC,EAAW,EAAG,EAAE,SAAS,EAChD,aAAchuC,GAAS+tC,EAAOC,EAAW,EAAG,EAAE,SAAS,EACvD,GAAIl9B,EAAM,aACN,CACA,aAAc9Q,GAAS+tC,EAAOC,EAAW,EAAG,EAAE,SAAS,EACvD,cAAehuC,GAAS+tC,EAAOC,EAAW,EAAG,EAAE,SAAS,CAAA,EAExD,CAAA,CAAC,CACN,CAAA,CACF,EACKC,EAAW97B,EAAAA,SAAS,IACpB,OAAOrB,EAAM,MAAS,UACjBy8B,EAAgB,MAAMz8B,EAAM,IAAI,GAAK,CAAC,EAGxC,CAAE,KAAMA,EAAM,IAAK,CAC3B,EACKo9B,EAAc/7B,EAAAA,SAAS,KACpB,CACL,MAAO,GAAGw7B,EAAY,KAAK,KAC3B,mBAAoB,GAAGD,EAAe,KAAK,KAC3C,UAAW,cAAcnF,EAAa,KAAK,KAC7C,EACD,EAED7qB,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACPA,GAASy0C,EAAY,CAAA,CAEzB,EAEA5oB,EAAAA,UAAU,IAAM,CACdzU,EAAM,QAAUq9B,EAAY,CAAA,CAC7B,EAED,SAASC,GAAc,CAChBt9B,EAAM,SACT08B,EAAO,MAAQ,IAGjBvuB,EAAUnO,EAAM,OAAO,CAAA,CAGzB,SAASu9B,GAAmB,CAC1BpvB,EAAUnO,EAAM,MAAM,EACtB28B,EAAO,MAAQ,EAAA,CAGjB,SAASU,GAAc,CACjB,GAAAzI,EAAQ,OAASkI,EAAS,MAAO,CAC7B,MAAAU,EAAc5I,EAAQ,MAAM,sBAAsB,EAClDv6B,EAAaD,GAAc0iC,EAAS,KAAK,EACzCjB,GAAa2B,EAAY,MAAQnjC,GAAc,IAAO,KAAK,IAAI2F,EAAM,YAAa,CAAC,GAAK,GAE9F48B,EAAe,MAAQ,EACvBnF,EAAa,MAAQ+F,EAAY,MACjCX,EAAY,MAAQxiC,EAEpB,sBAAsB,IAAM,CAC1B,sBAAsB,IAAM,CAC1BuiC,EAAe,MAAQf,EACvBpE,EAAa,MAAQ,CAACp9B,CAAA,CACvB,CAAA,CACF,CAAA,CACH,CAGF,SAASojC,GAAkB,CACzBtvB,EAAUnO,EAAM,WAAW,EAC3B,sBAAsBq9B,CAAW,CAAA,cAKNV,EAAM,iDAAjCxqB,cAwDqBD,EAAAA,MAAAwpB,EAAA,EAAA,OAxDc,cAAA,GAAa,aAAa6B,CAAA,qBAC3D,IAsDM,CArDGb,EAAM,iDADfrqB,EAAAA,mBAsDM,MAAA,OApDH,uBAAOzO,EAAS,KAAA,EACjB,KAAK,QACJ,uBAAO+M,EAAK,KAAA,CAAA,GAEb8B,EAAAA,mBAwBM,MAAA,CAxBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GACLwsB,EAAQ,qBAAnB1qB,EAAAA,mBAMM,MAAA,OANgB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChCgC,EAAAA,WAIOC,oBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAAW,qCAARgQ,EAAK,KAAA,EAAA,CAAA,CAAA,2DAIdyC,EAAAA,mBAeM,MAAA,SAfG,UAAJ,IAAImiB,EAAW,MAAKtiB,iBAAA,CAAGJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,EAAa2B,EAAAA,MAAKlS,CAAA,EAAC,QAAUkS,QAAE3B,CAAA,EAAC,IAAG,UAAA,QAAA,CAAA,CAAA,CAAA,GAE1D2B,QAAAlS,CAAA,EAAM,sBADdqS,qBAUO,OAAA,eARD,WAAJ,IAAIyqB,EACH,MAAKxqB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EACZ,uBAAO6sB,EAAW,KAAA,EAClB,gBAAeK,CAAA,GAEhBlrB,EAAAA,WAEOC,sBAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,+BAGrCuS,EAEO,WAAAC,2BAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,iCAK/BkS,QAAAlS,CAAA,EAAM,wBADdqS,qBAWS,SAAA,OATP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,QAAO+sB,CAAA,GAER/qB,EAAAA,WAIOC,oBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAAgD,CAAhDkR,EAAAA,YAAgDgB,EAAAA,MAAApO,EAAA,EAAhD4O,EAAAA,WAAcR,EAAAA,MAAkC5I,CAAA,EAA5B,MAAK,CAAE,MAAM,OAAA,CAAO,EAAA,KAAA,EAAA,CAAA,2DAInC0zB,EAAO,qBAAlB3qB,EAAAA,mBAUM,MAAA,OAVe,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAC/BgC,EAAAA,WAQOC,mBARP,IAQO,CAPLtB,cAMWgB,EAAAA,MAAAb,EAAA,EAAA,CANA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAC/B,IAIQ,CAJRkR,cAIQgB,EAAA,MAAApO,EAAA,EAJR4O,EAAAA,WAIQyqB,EAHU,MAAA,CACf,MAAOJ,EAAQ,MAAA,EAAA,EACf,MAAK,CAAA,MAAW7qB,QAAKlS,CAAA,EAAC,SAAS,0GClNjC09B,GAAcvwB,GAAW,CACpC,OAAQ,OACR,OAAQ,CAAC,OAAQ,OAAQ,QAAQ,EACjC,OAAQ,OACR,OAAQJ,EACR,eAAgB,OAChB,iBAAkB,OAClB,QAAS,MACT,SAAUA,EACV,YAAaA,EACb,MAAO,OACP,SAAUmB,EAAmC,CAC/C,CAAC,EAKYyvB,GAAkBzwB,GAAU,CACvC,GAAI,CACF,KAAM,OACN,QAAS,EACX,EACA,MAAO,CACL,KAAM,OACN,QAAS,EACX,EACA,SAAU,CACR,KAAM,MACN,QAAS,IAAM,CAAA,CAAC,CAEpB,CAAC,ECRY0wB,GAAkB,GAClBC,GAAa,0BACbC,GAAe,wHCX5B,MAAM99B,EAAQuR,EAERwsB,EAAcl8B,EAAAA,OAAOi8B,GAAc,IAAI,EACvCE,EAAkBn8B,EAAAA,OAAOg8B,GAAY,IAAI,EAEzCttB,EAAKtF,GAAc,QAAQ,EAC3BgzB,EAASvsB,EAAI,IAAAssB,GAAA,MAAAA,EAAiB,QAASA,GAAA,YAAAA,EAAiB,QAAS,EAAI,CAAC,EACtEE,EAASxsB,MAAI,EAAK,EAElBysB,EAAOzsB,EAAAA,IAAiB,EAExB0E,EAAQtJ,EAAAA,SAAS,CACrB,GAAIqxB,EACJ,GAAIC,EAAAA,MAAMp+B,EAAO,IAAI,EACrB,OAAAk+B,EACA,OAAAD,CAAA,CACD,EAEKI,EAAYh9B,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,IAAI,OAAQ,QAAQ,CAAC,EAAG6F,EAAM,MACpC,EACD,EACKkoB,EAAYj9B,EAAAA,SAAS,KAClB,CACL,mBAAoB,GAAGu8B,GAAkBK,EAAO,KAAK,IACvD,EACD,EAEDn8B,EAAA,QAAQ+7B,GAAYznB,CAAK,EAErB2nB,IACFnxB,EAAA,MACE,IAAMmxB,EAAY,cACTn1C,GAAA,CACAs1C,EAAA,MAAQt1C,IAAUoX,EAAM,EAAA,CAEnC,EAEAyU,EAAAA,UAAU,IAAM,CACdspB,EAAY,aAAa3nB,CAAK,CAAA,CAC/B,EAEDxB,EAAAA,gBAAgB,IAAM,CACpBmpB,EAAY,aAAa3nB,CAAK,CAAA,CAC/B,GAGH,SAASmoB,GAAe,CACtB,OAAIR,GACUA,EAAA,aAAa/9B,EAAM,EAAE,EAG5B,EAAA,gFAKPqS,EAAA,mBA0BK,KAAA,CA1BA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACfkC,EAAAA,mBASI,IAAA,SARE,OAAJ,IAAI0rB,EACH,uBAAOE,EAAS,KAAA,EAChB,KAAMG,EAAE,GACR,uBAAOF,EAAS,KAAA,EAChB,MAAOtuB,EAAK,MACZ,wBAAeuuB,EAAY,CAAA,SAAA,CAAA,CAAA,GAE5BhsB,aAAaC,EAAA,OAAA,SAAA,CAAA,SAELisB,EAAAA,OAAO,OAAU3/B,YAAYA,EAAAA,SAAS,sBAAhDuT,EAAAA,mBAcK,KAAA,OAdqD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACpEgC,EAAAA,WAYOC,oBAZP,IAYO,CAXW1T,EAAQ,UAAIA,EAAQ,SAAC,wBACnCuT,EAAAA,mBAQaqsB,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAAC,aAPK7/B,EAAQ,SAAjBE,kBADTmT,EAAA,YAQaysB,EAAA,CANV,IAAK5/B,EAAM,GACX,GAAIA,EAAM,GACV,MAAOA,EAAM,MACb,SAAUA,EAAM,QAAA,qBAEjB,IAAiB,CAAd2T,EAAAA,gBAAAC,EAAA,gBAAA5T,EAAM,KAAK,EAAA,CAAA,CAAA,uHC9FnB,SAAS6/B,GACdhmC,EACAimC,EACAN,EACA3C,EACA9wC,EACM,CACN,MAAMg0C,EAAWP,EAAKM,EAChB50C,EAAO,KAAK,KAAM60C,EAAWlD,EAAY,EAAE,EAE3C5gB,EAAM,IAAM,CACT,OAAAlwB,GAAa,YAAcA,EAAS,CAC7C,EAEA,GAAI,CAACg0C,EAAU,CACT9jB,EAAA,EACJ,MAAA,CAGF,GAAI4gB,GAAY,EAAG,CACdhjC,EAAA,SAAS,EAAG2lC,CAAE,EACbvjB,EAAA,EACJ,MAAA,CAGF,IAAIrf,EAAUkjC,EAEd,MAAMrW,EAAS,IAAM,CACdsW,IAELnjC,EAAUA,EAAU1R,GAEfs0C,EAAK5iC,GAAWmjC,GAAY,IACrBnjC,EAAA4iC,GAGT3lC,EAAA,SAAS,EAAG+C,CAAO,EAElBA,IAAY4iC,EACVvjB,EAAA,EAEJ,sBAAsBwN,CAAM,EAEhC,EAEOA,EAAA,CACT,8GCnBM,MAAAlY,EAAKtF,GAAc,QAAQ,EAG3BjL,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,OAAQ,CACN,QAAS,GACT,OAAQ,EACV,EACA,OAAQ,CACN,QAAS,KACT,OAAQ,EACV,EACA,OAAQ,EACR,OAAQ,GACR,eAAgB,IAChB,iBAAkB,IAAMhB,EAAG,GAAG,MAAM,EACpC,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,SAAU,GACV,YAAa,GACb,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKyuB,EAAOC,EAIPxtB,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAChCk/B,EAAYxtB,MAAI,EAAK,EACrBytB,EAAYztB,MAAI,CAAC,EACjB0tB,MAAiB,IAEjBnoB,EAAUvF,EAAAA,IAAiB,EAE7B,IAAA/V,EAEAo+B,EAAc,GACdD,EAAyC,KACzCE,EAA8B,KAC9BqF,EAAgB,EAEhB72C,IAAY,CAACipB,EAAc,OAASzR,EAAM,WAC9ByR,EAAA,MAAQ,mBAAmB,SAAS,IAAI,GAGxD3P,EAAA,QACEg8B,GACAhxB,WAAS,CACP,cAAA2E,EACA,aAAA6tB,EACA,aAAAC,EACA,aAAAC,CACD,CAAA,CACH,EAEA5yB,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP6oB,EAAc,MAAQ7oB,CAAA,CAE1B,EACMgkB,EAAAA,MAAA,IAAM5M,EAAM,OAAQ26B,CAAe,EAEzClmB,EAAAA,UAAU,IAAM,CACEkmB,EAAA,EACM8E,EAAA,CAAA,CACvB,EAED7qB,EAAAA,gBAAgB,IAAM,CACLgmB,EAAA,EACf,aAAaj/B,CAAK,CAAA,CACnB,EAED,SAAS2jC,EAAalpB,EAAwB,CAC5CgpB,EAAW,IAAIhpB,CAAK,EACdA,EAAA,OAAS3E,EAAc,QAAU2E,EAAM,EAAA,CAG/C,SAASmpB,EAAanpB,EAAwB,CAC5CgpB,EAAW,OAAOhpB,CAAK,CAAA,CAGzB,MAAMyjB,EAAW73B,EAAAA,mBAAmB,EAEpC,SAAS24B,GAAkB,CACVC,EAAA,EACfpyC,IACE8qB,WAAS,IAAM,aACb,MAAMosB,EAAkB1/B,EAAM,OAEdq/B,EAAA,EAEhB,IAAIrE,EAA+D,KAC/DC,EAAU,SA4Bd,GA1BI,OAAOyE,GAAW,SAChBA,EAAO,WAAW,MAAM,GAChBzE,EAAAyE,EAAO,UAAU,CAAC,EAC5BzE,EAAUA,GAAW,UACZ,CAAC,SAAU,WAAY,MAAM,EAAE,SAASyE,CAAM,EAC1C1E,EAAA,OACJ0E,IAAW,OACpB1E,EAAa,SAAS,KACb0E,IAAW,OACpB1E,EAAanB,EAAS,KAETmB,EAAA,SAAS,cAAc0E,CAAM,EAEnC,OAAOA,GAAW,WAC3B1E,EAAa0E,EAAO,EACXj2C,GAAUi2C,CAAM,IACZ1E,EAAA0E,GAGX1E,IAAe,QAAUvxC,GAAUuxC,CAAU,EACjCjB,EAAA,GAEAA,EAAA,GAIXA,EA0CSD,EAAAkB,EACFlB,EAAA,iBAAiB,SAAUiB,CAAqB,MA3C1C,CAKhB,IAHaC,EAAAA,EACbA,EAAa5lB,EAAQ,QAAA4lB,GAAA,YAAAA,EAAY,KAAK,EAAIA,EAAanB,EAAS,OAEzDmB,GAAY,CACX,MAAAxiC,GAAOuI,EAAAi6B,EAAW,OAAX,YAAAj6B,EAAiB,KAE1B,GAAAvI,IAAS,UAAYA,IAAS,eAAgB,CAChDwhC,EAAWtkB,GAAa,CAAE,UAAWslB,CAAA,CAAmB,EAExD,KAAA,CAGI,MAAAM,GAAU3lB,EAAAqlB,EAAW,OAAX,YAAArlB,EAAkBslB,GAElC,GAAIK,EAAS,CACP7xC,GAAU6xC,CAAO,GACLvB,EAAA,GACFD,EAAAwB,GAEDtB,EAAAsB,EAGb,KAAA,CAGFN,EAAaA,EAAW,MAAA,CAGtBhB,GACFA,EAAS,kBAAkBe,CAAqB,EAChDjB,EAAYE,EAAS,KACXF,IACIC,EAAA,GACFD,GAAA6F,GAAA/pB,EAAAikB,EAAS,SAAT,YAAAjkB,EAAiB,QAAjB,YAAA+pB,EAAwB,KAGlC5F,GAAeD,GACPA,EAAA,iBAAiB,SAAUiB,CAAqB,CAC5D,CAIF,CACD,CAAA,CAGL,SAAS6E,GAAiB,CACpB,OAAC9F,EAEEA,IAAc,OAAS,SAAS,gBAAmBA,EAFnC,IAEmC,CAG5D,SAAS+F,EAAmB1F,EAAmB,CAC7C,GAAI,CAACiF,EAAW,MAAQ,CAACtF,EAAW,OAE9B,MAAAgG,EAAeF,IAAkB,UACjCG,EAAiD,CAAC,EAEpD,IAAAze,EAAS6Y,EAAYn6B,EAAM,OAE3B+5B,IACQzY,GAAAwe,GAGZV,EAAW,QAAiBhpB,GAAA,CAC1B,MAAMlY,EAAKkY,EAAM,GAEjB,GAAI,CAAClY,EAAG,WAAW,GAAG,EAAG,OAEnB,MAAAqW,EAAU,SAAS,cAAcrW,CAAE,EAErCqW,GACFwrB,EAAW,KAAK,CACd,KAAM7hC,EACN,OAAQqW,EAAQ,SAAA,CACjB,CACH,CACD,EAEDwrB,EAAW,KAAK,CAAClgC,EAAMC,IAASD,EAAK,OAASC,EAAK,MAAM,EACzDigC,EAAW,KAAK,CACd,KAAM,GACN,OAAQ,GAAA,CACT,EAED,IAAIC,EAAc,GAET,QAAA51C,EAAI,EAAG4H,EAAM+tC,EAAW,OAAS,EAAG31C,EAAI4H,EAAK,EAAE5H,EAAG,CACnD,MAAAwR,EAAUmkC,EAAW31C,CAAC,EACtB0V,EAAOigC,EAAW31C,EAAI,CAAC,EAE7B,GAAIwR,EAAQ,QAAU0lB,GAAUxhB,EAAK,OAASwhB,EAAQ,CACpD0e,EAAcpkC,EAAQ,KAEtB,KAAA,CACF,CAGcyjC,EAAAlF,EAEZ1oB,EAAc,QAAUuuB,IAC1BvuB,EAAc,MAAQuuB,EACtBhB,EAAK,gBAAiBgB,CAAW,EACvB7xB,EAAAnO,EAAM,SAAUggC,CAAW,EACvC,CAGF,SAASjF,EAAsB7hC,EAAc,CAC3C,GAAIgmC,EAAU,MAAO,OAErB,MAAM/E,EAAYJ,GAEb7gC,EAAM,SAAW,QAAUA,EAAM,SAAW,SACzC,SAAS,gBACTA,EAAM,QACV,UACCA,EAAqB,QAE1B2mC,EAAmB1F,CAAS,EACNsF,EAAA,CAAA,CAGxB,SAAS7E,GAAiB,CACpBZ,IACFA,EAAS,qBAAqBe,CAAqB,EACxCf,EAAA,MAGTF,GACQA,EAAA,oBAAoB,SAAUiB,CAAqB,CAC/D,CAGF,SAASyE,EAAarB,EAAc,CAClC,GACG,CAACn+B,EAAM,aAAem+B,IAAS1sB,EAAc,OAC9C,CAAC0sB,EAAK,WAAW,GAAG,GACpBA,EAAK,OAAS,EAEd,OAGI,MAAA5pB,EAAU,SAAS,cAAc4pB,CAAI,EAE3C,GAAI,CAAC5pB,EAAS,OAEd,aAAa5Y,CAAK,EAElBujC,EAAU,MAAQ,GAElB,MAAMe,EAAa1rB,EAAQ,UACrBsnB,EAAW,KAAK,IAAI77B,EAAM,eAAgB,CAAC,EAEjD,GAAI+5B,GAAeD,EAAW,CAC5B,MAAMoG,EAAcN,EAAe,EAE7BpB,EAAK,KAAK,IACdyB,EAAaC,EAAY,UAAYlgC,EAAM,OAC3CkgC,EAAY,aAAeA,EAAY,YACzC,EAEArB,GAAgBqB,EAAab,EAAeb,EAAI3C,EAAU,IAAM,CAC9DlgC,EAAQ,WAAW,IAAM,CACvBujC,EAAU,MAAQ,IACjB,EAAE,CAAA,CACN,EACDW,EAAmBrB,CAAE,EACCiB,EAAA,UACbzF,EAAU,CACnB,KAAM,CAACxrC,EAAKD,CAAG,EAAIyrC,EAAS,gBAAgB,EACtC7e,EAAU,KAAK,IAAI,KAAK,IAAI8kB,EAAajgC,EAAM,OAAQzR,CAAG,EAAGC,CAAG,EAEtEwrC,EAAS,SAAS,EAAG7e,EAAS0gB,CAAQ,EAAE,KAAK,IAAM,CACjDlgC,EAAQ,WAAW,IAAM,CACvBujC,EAAU,MAAQ,EAAA,EACjBrD,EAAW,EAAE,CAAA,CACjB,EAEDgE,EAAmB1kB,CAAO,EACJskB,EAAA,CAAA,MAEtBP,EAAU,MAAQ,GAGhB12C,IAAYwX,EAAM,UAAY,WAChC,SAAS,KAAO,mBAAmByR,EAAc,MAAM,QAAQ,KAAM,EAAE,CAAC,EAC1E,CAGF,SAASguB,GAAwB,OAC/B,MAAMO,EAAc,MAAM,KAAKZ,CAAU,EAAE,KAChChpB,GAAAA,EAAM,IAAMA,EAAM,KAAO3E,EAAc,KAClD,EAEA,GAAIuuB,GAAA,MAAAA,EAAa,GAAI,CACb,MAAAG,EAAWH,EAAY,GAAG,sBAAsB,EAChDI,IAAar/B,EAAAkW,EAAQ,QAAR,YAAAlW,EAAe,wBAAwB,MAAO,EAEjEo+B,EAAU,MAAQgB,EAAS,IAAMC,EAAaD,EAAS,OAAS,EAAI,EAAA,CACtE,6BAKA9tB,EAAA,mBAqCM,MAAA,SApCA,UAAJ,IAAI4E,EACH,MAAK3E,EAAAA,eAAA,CAAW,CAAAJ,QAAA3B,CAAA,EAAG,EAAC,CAAA,EAAA,GAAkB,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,GAAwB,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,GAAgB,SAAA,CAAA,EAAA2B,EAAA,MAAAlS,CAAA,EAAM,QAAgB,CAAAkS,EAAA,MAAA3B,CAAA,EAAG,GAAmB,WAAA,CAAA,EAAA,CAAA2B,EAAAA,MAAAlS,CAAA,EAAM,WAOzIyS,EAAAA,mBAcK,KAAA,CAdA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACfgC,EAAAA,WAYOC,sBAZP,IAYO,CAXLtB,cAUWgB,EAAAA,MAAAb,EAAA,EAAA,CAVA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAE7B,IAA6B,EAD/BqgC,EAAAA,UAAA,EAAA,EAAAhuB,EAAA,mBAQaqsB,EAPI,SAAA,KAAAC,aAAAzsB,EAAAA,MAAAlS,CAAA,EAAM,QAAdm+B,kBADThsB,EAAAA,YAQaD,EAAA,MAAAouB,EAAA,EAAA,CANV,IAAKnC,EAAK,GACV,GAAIA,EAAK,GACT,MAAOA,EAAK,MACZ,SAAUA,EAAK,QAAA,qBAEhB,IAAgB,CAAbxrB,EAAAA,gBAAAC,EAAA,gBAAAurB,EAAK,KAAK,EAAA,CAAA,CAAA,6EAKrBjtB,EAAAA,YAYakB,EAAAA,WAAA,CAZD,OAAA,GAAQ,KAAMF,EAAAA,MAAKlS,CAAA,EAAC,gBAAA,qBAC9B,IAUM,CATEkS,QAAKlS,CAAA,EAAC,QAAUyR,EAAa,qBADrCY,EAAA,mBAUM,MAAA,OARH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EACZ,+BAAiB4uB,EAAS,KAAA,IAAA,CAAA,CAAA,GAE3B5sB,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAqC,CAArCyS,EAAAA,mBAAqC,MAAA,CAA/B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,gGCnYjBgwB,GAAWpzB,GAAW,CACjC,IAAK,OACL,IAAK,CAAC,OAAQ,KAAK,EACnB,QAAS,OACT,MAAO,OACP,WAAY,CACV,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IAAA,CAEb,CAAC,EAKKqzB,GAAY,CAAC,OAAQ,MAAM,EAEpBC,GAActzB,GAAW,CACpC,IAAK,OACL,KAAM,OACN,OAAQ,OACR,KAAM,OACN,KAAM,OACN,MAAO,OACP,GAAIqzB,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,IAAKA,GACL,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,CACP,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IAAA,CAEb,CAAC,ECTYE,GAAc,OAAO,OAAqB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAK,CAAC,EAE/EC,GAAY,uBCzBnBC,GAAc,OAAO,OAAyB,CAClD,QACA,MACA,SACA,eACA,gBACA,cACF,CAAC,EACKC,GAAY,OAAO,OAAuB,CAAC,MAAO,SAAU,SAAU,SAAS,CAAC,EAEtFC,GAAerxB,kBAAgB,CAC7B,KAAM,MACN,MAAO8wB,GACP,MAAM5wB,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,MAAO0D,EAAQ,CACpC,IAAK,MACL,IAAK,EACL,QAAS,CACP,QAAS,QACT,UAAW/mB,GAASg4C,GAAY,SAASh4C,CAAK,CAChD,EACA,MAAO,CACL,QAAS,MACT,UAAWA,GAASi4C,GAAU,SAASj4C,CAAK,CAC9C,EACA,WAAY,EAAA,CACb,EAEK2nB,EAAKtF,GAAc,KAAK,EAExBrH,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAGvQ,EAAM,OAAO,EACnBuQ,EAAG,GAAGvQ,EAAM,KAAK,EACjB,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,OAAA,CAE9B,CACD,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,CACvB,GAAA,CAACrB,EAAM,IAAY,OAAA,KAEnB,GAAA,OAAOA,EAAM,KAAQ,SAChB,MAAA,CACL,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAG,GAAGvQ,EAAM,GAAG,IAChC,EAGF,GAAI,MAAM,QAAQA,EAAM,GAAG,EAAG,CAC5B,KAAM,CAAC+gC,EAAYC,CAAQ,EAAIhhC,EAAM,IAE9B,MAAA,CACL,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAG,GAAGwwB,CAAU,KAC/B,CAACxwB,EAAG,GAAG,OAAO,CAAC,EAAG,GAAGywB,CAAQ,IAC/B,CAAA,CAGK,OAAA,IAAA,CACR,EACKC,EAAa5/B,EAAAA,SAAS,IACtBrB,EAAM,aAAe,GAChB,CACL,QAAS,QACT,MAAO,KACT,EACSA,EAAM,WACR,CACL,QAAS,QACT,MAAO,MACP,GAAGA,EAAM,UACX,EAGK,EACR,EAED8B,OAAAA,EAAA,QACE6+B,GACA7zB,WAAS,CACP,WAAAm0B,EACA,IAAK7C,EAAAA,MAAMp+B,EAAO,KAAK,CACxB,CAAA,CACH,EAEO,IACLpT,EAAA,EACEoT,EAAM,KAAO,MACb,CACE,MAAO4D,EAAU,MACjB,MAAO+M,EAAM,KACf,EACA,CACE,QAAS,IAAMzM,EAAM,SAAWA,EAAM,QAAQ,CAAA,CAElD,CAAA,CAEN,CAAC,ECxFYg9B,GAAY/zB,GAAW,CAClC,OAAQ,OACR,OAAQ,OACR,MAAO,OACP,MAAO,OACP,WAAY,CAAC,OAAQ,MAAM,EAC3B,WAAY,OACZ,YAAaJ,EACb,YAAa,OACb,aAAcA,EACd,YAAaA,EACb,UAAWA,EACX,SAAUA,EACV,QAASA,EACT,KAAMQ,GACN,OAAQR,EACR,IAAK,CAAC,OAAQ,KAAK,EACnB,QAAS,OACT,MAAO,OACP,SAAUmB,EAAoC,CAChD,CAAC,EAKKsyB,GAAY,CAAC,OAAQ,MAAM,EAEpBW,GAAgBh0B,GAAW,CACtC,OAAQiB,GAAiB,EACzB,MAAO,OACP,KAAM,OACN,KAAM,OACN,MAAO,CAAC,OAAQ,KAAK,EACrB,WAAY,OACZ,SAAUrB,EACV,QAAS,OACT,gBAAiB,OACjB,aAAc,CACZ,KAAM,CAAC,OAAQ,OAAQ,QAAS,OAAQ,MAAO,QAAQ,EACvD,QAAS,IACX,EACA,aAAcA,EACd,YAAaA,EACb,aAAcA,EACd,UAAWA,EACX,OAAQA,EACR,KAAM,OACN,KAAMA,EACN,OAAQA,EACR,KAAM,OACN,OAAQ,OACR,KAAM,OACN,KAAM,OACN,MAAO,OACP,GAAIyzB,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,IAAKA,GACL,KAAM,CAAC,OAAQ,MAAM,CACvB,CAAC,EAKYY,GAAkBj0B,GAAW,CACxC,KAAMI,GACN,OAAQa,GAAiB,EACzB,KAAM,OACN,MAAO,OACP,OAAQrB,EACR,KAAMA,EACN,OAAQA,EACR,MAAOA,EACP,SAAUA,EACV,OAAQA,EACR,YAAayB,GACb,cAAe,OACf,KAAMA,GACN,MAAO,OACP,WAAY,OACZ,MAAOzB,EACP,IAAK,OACL,eAAgB,SAChB,SAAUmB,EAAU,EACpB,QAASA,EAAsC,CACjD,CAAC,EAKYmzB,GAAiBl0B,GAAW,CACvC,KAAMI,GACN,OAAQa,GAAiB,EACzB,KAAM,OACN,MAAO,OACP,OAAQrB,EACR,KAAMA,EACN,OAAQA,EACR,MAAOA,EACP,SAAUA,EACV,QAASA,EACT,OAAQA,EACR,YAAayB,GACb,cAAe,OACf,KAAMA,GACN,MAAO,OACP,WAAY,OACZ,MAAOzB,EACP,IAAK,OACL,cAAe,SACf,QAASmB,EAAU,CACrB,CAAC,ECtDYozB,GAAa,mBACbC,GAAc,oBACdC,GAAe,qBAGfC,GAAgB,sBAEhBC,GAAgB,OAAO,OAAuB,CAAC,MAAO,OAAQ,MAAO,QAAQ,CAAC,EAC9EC,GAAc,OAAO,OAAyB,CAAC,QAAS,MAAO,MAAM,CAAC,+FCvE7E,MAAA3hC,EAAQiM,GAAS,OADRsF,EACwB,CACrC,OAAQ,CACN,QAAS,OACT,UAAW3oB,GAAS84C,GAAc,SAAS94C,CAAK,CAClD,EACA,OAAQ,KACR,MAAO,CACL,QAAS,KAAO,CAAA,GAChB,OAAQ,EACV,EACA,MAAO,KAAO,CAAA,GACd,WAAY,OACZ,WAAY,CACV,QAAS,QACT,UAAWA,GAAS+4C,GAAY,SAAS/4C,CAAK,CAChD,EACA,YAAa,GACb,YAAa,GACb,aAAc,GACd,YAAa,GACb,UAAW,GACX,SAAU,GACV,QAAS,GACT,KAAM8kB,GAAe,EACrB,OAAQ,GACR,IAAK,CAAC,EAAG,CAAC,EACV,QAAS,QACT,MAAO,KAAA,CACR,EAEK6C,EAAKtF,GAAc,MAAM,EACzB22B,EAA8B90B,EAAAA,SAAa,IAAA,GAAU,EAErDlJ,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAG,SAASvQ,EAAM,UAAU,EAAE,EACjC,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,MAAA,CAE7B,CACD,EACK6hC,EAAaxgC,EAAAA,SAAS,IACnB,KAAK,IAAI,GAAG,MAAM,KAAKugC,CAAQ,EAAE,IAAaE,GAAAA,EAAM,WAAW,KAAK,CAAC,CAC7E,EAEDhgC,EAAA,QAAQw/B,GAAYthC,CAAK,EACzB8B,EAAA,QAAQy/B,GAAaK,CAAQ,EAC7B9/B,EAAAA,QAAQ0/B,GAAc,CACpB,cAAAO,EACA,SAAAC,EACA,eAAAC,EACA,MAAAviB,EACA,YAAAwiB,EACA,WAAAC,EACA,iBAAAC,CAAA,CACD,EAEYtwB,EAAA,CACX,SAAAkwB,EACA,eAAAC,EACA,MAAAviB,EACA,YAAAwiB,EACA,WAAAC,EACA,iBAAAC,CAAA,CACD,EAED,SAASL,GAAgB,CACnB,OAAA,OAAO/hC,EAAM,YAAe,SACvBA,EAAM,WAGR6hC,EAAW,KAAA,CAGpB,SAASQ,GAAa,CACpB,MAAMC,EAAwC,CAAC,EAE/C,UAAWR,KAASF,EACdE,EAAM,KAAK,QACLQ,EAAAR,EAAM,KAAK,KAAK,EAAIA,GAIzB,OAAAQ,CAAA,CAGT,SAASN,GAAW,CAClB,OAAOO,EAAcX,CAAQ,CAAA,CAG/B,SAASK,EAAejiC,EAA0B,CAC3C,MAAM,QAAQA,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAMsiC,EAAUD,EAAW,EACrBG,MAAa,IAEnBxiC,OAAAA,EAAM,QAAgBpI,GAAA,CAChB0qC,EAAQ1qC,CAAI,GACP4qC,EAAA,IAAIF,EAAQ1qC,CAAI,CAAC,CAC1B,CACD,EAEM2qC,EAAcC,CAAM,CAAA,CAG7B,SAASD,EAAc7iC,EAA0B,CAC/C,MAAM+iC,EAA0C,CAAC,EAEjD,OAAA/iC,EAAM,QAAgB3H,GAAA,CACR0qC,EAAA,KAAK1qC,EAAK,UAAU,CAAA,CACjC,EAEM,IAAI,QAA6Bi+B,GAAA,CACtC,QAAQ,IAAIyM,CAAW,EAAE,KAAeC,GAAA,CACtC1M,EAAQ0M,EAAO,KAAO,EAAA,OAAO,OAAO,CAAa,CAAA,CAClD,CAAA,CACF,CAAA,CAGH,SAAShjB,GAAQ,CACfkiB,EAAS,QAAiBE,GAAA,CACxBA,EAAM,MAAM,CAAA,CACb,CAAA,CAGH,SAASI,EAAYliC,EAA0B,CACxC,MAAM,QAAQA,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAMsiC,EAAUD,EAAW,EAE3BriC,EAAM,QAAgBpI,GAAA,CAChB0qC,EAAQ1qC,CAAI,GACN0qC,EAAA1qC,CAAI,EAAE,MAAM,CACtB,CACD,CAAA,CAGH,SAASuqC,GAAa,CACpBP,EAAS,QAAiBE,GAAA,CACxBA,EAAM,WAAW,CAAA,CAClB,CAAA,CAGH,SAASM,EAAiBpiC,EAA0B,CAC7C,MAAM,QAAQA,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAMsiC,EAAUD,EAAW,EAE3BriC,EAAM,QAAgBpI,GAAA,CAChB0qC,EAAQ1qC,CAAI,GACN0qC,EAAA1qC,CAAI,EAAE,WAAW,CAC3B,CACD,CAAA,CAGH,SAAS+qC,EAAazpC,EAAoB,CACxCA,EAAM,gBAAgB,EAEjB8G,EAAM,QACT9G,EAAM,eAAe,EAGbiV,EAAAnO,EAAM,SAAU9G,CAAK,CAAA,6BAK/BiZ,EAAAA,YAeMD,EAAA,MAAA4uB,EAAA,EAfNpuB,EAAA,WAeMF,EAdU,OAAA,CACb,MAAO5O,EAAS,MAChB,QAASsO,EAAAA,MAAKlS,CAAA,EAAC,QAChB,IAAI,OACH,OAAQkS,EAAK,MAAAlS,CAAA,EAAC,QAAUkS,EAAA,MAAAlS,CAAA,EAAM,OAC9B,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,cAAa,OACb,SAAQ2iC,EACR,oCAAD,IAAmB,CAAA,EAAA,CAAA,UAAA,MAAA,CAAA,EAAA,sBAEnB,IAAa,CAAbpwB,aAAaC,EAAA,OAAA,SAAA,CAAA,8EChMV,SAASowB,GACdxrC,EACA+c,EACAziB,EAAS,GACC,CACV,GAAI,CAAC0F,GAAO,CAAC+c,EAAa,OAAA,KAEtB,GAAA,OAAOA,GAAS,SAAU,CAC5B,GAAIA,KAAQ/c,EAAY,OAAAA,EAAI+c,CAAI,EAEzBA,EAAAA,EAAK,MAAM,GAAG,CAAA,CAGvB,GAAI,MAAM,QAAQA,CAAI,GAAKA,EAAK,OAAQ,CAChC,MAAA0uB,EAAU1uB,EAAK,IAAI,EAErB,GAAA,CAAC0uB,EAAgB,OAAA,KAEZ,QAAAz4C,EAAI,EAAG4H,EAAMmiB,EAAK,OAAQ/pB,EAAI4H,EAAK,EAAE5H,EAAG,CAC/C,MAAMrB,EAAM,OAAOorB,EAAK/pB,CAAC,CAAC,EAE1B,GAAI,CAACrB,EAAK,MAIN,GAFJqO,EAAMA,EAAIrO,CAAG,EAETE,GAAOmO,CAAG,EAAG,CACf,GAAI1F,EACI,MAAA,IAAI,MAAM,8CAA8C,EAGzD,OAAA0F,CAAA,CACT,CAGF,GAAI1F,GAAUzI,GAAOmO,EAAIyrC,CAAO,CAAC,EACzB,MAAA,IAAI,MAAM,8CAA8C,EAGhE,OAAOzrC,EAAIyrC,CAAO,CAAA,CAGb,OAAA,IACT,CAUO,SAASC,GACd1rC,EACA+c,EACAvrB,EACA8I,EAAS,GACA,CACT,GAAI,CAAC0F,GAAO,CAAC+c,EAAa,MAAA,GAEtB,GAAA,OAAOA,GAAS,SAAU,CAC5B,GAAIA,KAAQ/c,EACV,OAAAA,EAAI+c,CAAI,EAAIvrB,EAEL,GAGFurB,EAAAA,EAAK,MAAM,GAAG,CAAA,CAGvB,GAAI,MAAM,QAAQA,CAAI,GAAKA,EAAK,OAAQ,CAChC,MAAA0uB,EAAU1uB,EAAK,IAAI,EAErB,GAAA,CAAC0uB,EAAgB,MAAA,GAEZ,QAAAz4C,EAAI,EAAG4H,EAAMmiB,EAAK,OAAQ/pB,EAAI4H,EAAK,EAAE5H,EAAG,CAC/C,MAAMrB,EAAM,OAAOorB,EAAK/pB,CAAC,CAAC,EAE1B,GAAI,CAACrB,EACI,MAAA,GAGT,GAAI,OAAOqO,EAAIrO,CAAG,GAAM,SAAU,CAChC,GAAI2I,EACI,MAAA,IAAI,MAAM,8CAA8C,EAG5D0F,EAAArO,CAAG,EAAI,CAAC,CAAA,CAGdqO,EAAMA,EAAIrO,CAAG,CAAA,CAGX,GAAA2I,GAAU,OAAO0F,GAAQ,SACrB,MAAA,IAAI,MAAM,8CAA8C,EAGhE,OAAAA,EAAIyrC,CAAO,EAAIj6C,EAER,EAAA,CAGF,MAAA,EACT,CAiBA,MAAMm6C,GAAY1hC,EAAAA,SAAS,IAAA,EAAqC,EAC1D2hC,GAAe3hC,EAAAA,SAAS,IAAM,SAA2B,EACzD4hC,GAAe5hC,EAAAA,SAAS,IAAM,EAAK,EACnC6hC,GAAc7hC,EAAAA,SAAS,IAAM,SAA0B,EAE7D,SAAS8hC,IAAqB,CACrB,MAAA,CACL,QAAS,GACT,MAAOJ,GACP,QAASA,GACT,MAAOC,GACP,SAAUC,GACV,QAASA,GACT,KAAMC,GACN,cAAet5C,GACf,WAAYA,GACZ,WAAYE,GACZ,cAAoBmD,GAAAA,EACpB,cAAerD,EACjB,CACF,CAOO,SAASw5C,GAA2BC,EAAyC,CAClF,MAAMxJ,EAAW73B,EAAAA,mBAAmB,EAEhC,GAAA,CAAC63B,EAAU,OAAOsJ,GAAmB,EAEnC,MAAAG,EAAezhC,EAAAA,OAAO4/B,GAAe,IAAI,EAE/C,GAAI,CAAC6B,EACH,OAAOH,GAAmB,EAK5BrhC,EAAA,QAAQ2/B,GAAe,IAAI,EAC3B6B,EAAa,KAAKzJ,CAAQ,EAC1BwJ,GAAWC,EAAa,QAAQ,GAAG,QAASD,CAAO,EAEnDzuB,EAAAA,gBAAgB,IAAM,CACpB0uB,EAAa,OAAOzJ,CAAQ,EAC5BwJ,GAAWC,EAAa,QAAQ,IAAI,QAASD,CAAO,CAAA,CACrD,EAED,SAASE,EAAW/2B,EAAkB,CAC/B82B,IAELA,EAAa,SAAS92B,CAAY,EAClC82B,EAAa,WAAW,EAAA,CAGnB,MAAA,CACL,QAAS,GACT,MAAOA,EAAa,MACpB,QAASA,EAAa,QACtB,MAAOA,EAAa,MACpB,SAAUA,EAAa,SACvB,QAASA,EAAa,QACtB,KAAMA,EAAa,KACnB,cAAeA,EAAa,SAC5B,WAAAC,EACA,WAAYD,EAAa,MACzB,cAAeA,EAAa,SAC5B,cAAeA,EAAa,QAC9B,CACF,CC5KA,MAAME,GAAkB,kBAElBC,GAAY,6BACZC,GAAa,eAAeD,EAAS,GACrCE,GAAY,YAAYF,EAAS,GACjCG,GAAW,MAAMF,EAAU,UAAUC,EAAS,UAAUA,EAAS,UAAUA,EAAS,IAEpFE,GAAW,wEACXC,GACJ,4FACIC,GAAU,IAAI,OAClB,qCAAqCH,EAAQ,QAAQC,EAAQ,QAAQC,EAAS,KAChF,EAEME,GAAY,oEAEZC,OAAgB,IAAI,CACxB,SACA,SACA,UACA,MACA,QACA,QACA,SACA,OACA,MACA,QACA,OACF,CAAY,EAEZ,eAAsBjC,GACpBkC,EACAt7C,EACAu7C,EACAC,EAAc,GACdC,EAAab,GACb,CACK,MAAM,QAAQU,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAMxB,EAAmB,CAAC,EAE1B,UAAW4B,KAAQJ,EAAiB,CAClC,KAAM,CAAE,QAAA5rC,EAAU+rC,EAAY,UAAA93B,CAAc,EAAA+3B,EAExC,GAAA,OAAO/3B,GAAc,WAAY,CAC/B,IAAAjZ,EAEA,GAAA,CACOA,EAAAiZ,EAAU3jB,EAAOu7C,CAAK,EAE3B76C,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,SAEVixC,EAAO,CACLjxC,EAAAixC,aAAiB,MAAQA,EAAM,QAAUA,CAAA,CAGpD,GAAIjxC,IAAW,GAAM,CACnB,MAAMkxC,EAAe,OAAOlxC,GAAW,SAAWA,EAASgF,EAI3D,GAFAoqC,EAAO,KAAK8B,CAAY,EAEpB,CAACJ,EAAa,KAAA,CACpB,CASF,GANIE,EAAK,UAAY,CAACG,GAAoB77C,CAAK,IAC7C85C,EAAO,KAAKpqC,CAAO,EAEf,CAAC8rC,IAGHp7C,GAAUJ,CAAK,GAAKA,IAAU,KAC5B07C,EAAK,OAAS,CAACI,GAAoB97C,EAAO07C,EAAK,KAAK,IACtD5B,EAAO,KAAKpqC,CAAO,EAEf,CAAC8rC,IAGHE,EAAK,MAAQ,CAACK,GAAa/7C,EAAO07C,EAAK,KAAMA,CAAI,IACnD5B,EAAO,KAAKpqC,CAAO,EAEf,CAAC8rC,IAAa,KAEtB,CAGK,OAAA1B,CACT,CAEO,SAAS+B,GAAoB77C,EAAY,CACvC,MAAA,EACL,CAACI,GAAUJ,CAAK,GAChBA,EAAM,SAAS,EAAE,KAAK,IAAM,IAC3B,MAAM,QAAQA,CAAK,GAAK,CAACA,EAAM,QAC/BS,GAAST,CAAK,GAAK,CAAC,OAAO,KAAKA,CAAK,EAAE,OAE5C,CAEgB,SAAA87C,GAAuB97C,EAAgBiC,EAAc,CAC/D,GAAA,CAAC,MAAM,QAAQA,CAAO,GAAK,CAACA,EAAQ,OAAe,MAAA,GAEnD,GAAA,MAAM,QAAQjC,CAAK,EAAG,CAClB,MAAAg8C,EAAU,IAAI,IAAI/5C,CAAO,EAE/B,UAAWkN,KAAQnP,EACjB,GAAI,CAACg8C,EAAQ,IAAI7sC,CAAI,EACZ,MAAA,GAIJ,MAAA,EAAA,KAEA,QAAAlN,EAAQ,SAASjC,CAAK,CAEjC,CAEO,SAAS+7C,GAAa/7C,EAAgBC,EAAagC,EAAuB,CAAA,EAAI,CACnF,GAAI,CAACo5C,GAAU,IAAIp7C,CAAI,EAAU,MAAA,GAEjC,OAAQA,EAAM,CACZ,IAAK,SACH,OAAOg8C,GAAej8C,EAAOiC,EAAQ,OAAQA,EAAQ,KAAK,EAC5D,IAAK,SACH,OAAOi6C,GAAel8C,EAAOiC,EAAQ,OAAQA,EAAQ,OAAQA,EAAQ,KAAK,EAC5E,IAAK,UACI,OAAAk6C,GAAgBn8C,EAAOiC,EAAQ,MAAM,EAC9C,IAAK,MACH,OAAOm6C,GAAYp8C,EAAOiC,EAAQ,OAAQA,EAAQ,OAAQA,EAAQ,KAAK,EACzE,IAAK,QACH,OAAOo6C,GAAcr8C,EAAOiC,EAAQ,OAAQA,EAAQ,OAAQA,EAAQ,KAAK,EAC3E,IAAK,QACI,OAAA,MAAM,QAAQjC,CAAK,EAC5B,IAAK,SACH,OAAOS,GAAST,CAAK,EACvB,IAAK,OACI,OAAAs8C,GAAat8C,EAAOiC,EAAQ,MAAM,EAC3C,IAAK,MACH,OAAOs6C,GAAYv8C,CAAK,EAC1B,IAAK,QACH,OAAO,OAAOA,GAAU,UAAYqD,GAAQrD,CAAK,EACnD,IAAK,QACH,OAAOw8C,GAAcx8C,CAAK,CAAA,CAEhC,CAEgB,SAAAi8C,GAAej8C,EAAgB2B,EAAiBR,EAAe,CAG7E,GAFI,OAAOnB,GAAU,UAEjBI,GAAUuB,CAAM,GAAK3B,EAAM,SAAW2B,EACjC,MAAA,GAGL,GAAA,MAAM,QAAQR,CAAK,EAAG,CAClB,KAAA,CAACyE,EAAKD,CAAG,EAAIxE,EAInB,GAFIyE,GAAO5F,EAAM,OAAS4F,GAEtBD,GAAO3F,EAAM,OAAS2F,EAAY,MAAA,EAAA,CAGjC,MAAA,EACT,CAEO,SAASu2C,GAAel8C,EAAgB8I,EAAkBnH,EAAiBR,EAAe,CAC/F,GAAI2H,GACE,GAAA,OAAO9I,GAAU,SAAiB,MAAA,WAEtCA,EAAQ,OAAOA,CAAK,EAEhB,OAAO,MAAMA,CAAK,EAAU,MAAA,GAGlC,MAAMyH,EAASzH,EAEf,GAAII,GAAUuB,CAAM,GAAK8F,EAAO,SAAS,EAAE,SAAW9F,EAC7C,MAAA,GAGL,GAAA,MAAM,QAAQR,CAAK,EAAG,CAClB,KAAA,CAACyE,EAAKD,CAAG,EAAIxE,EAInB,GAFIf,GAAUwF,CAAG,GAAK6B,EAAS7B,GAE3BxF,GAAUuF,CAAG,GAAK8B,EAAS9B,EAAY,MAAA,EAAA,CAGtC,MAAA,EACT,CAEgB,SAAAw2C,GAAgBn8C,EAAgB8I,EAAkB,CAChE,GAAI,CAACA,EAAQ,CACP,GAAA,OAAO9I,GAAU,SACZ,OAAAA,IAAU,QAAUA,IAAU,QAGnC,GAAA,OAAOA,GAAU,SACZ,OAAAA,IAAU,GAAKA,IAAU,CAClC,CAGF,OAAO,OAAOA,GAAU,SAC1B,CAEO,SAASo8C,GAAYp8C,EAAgB8I,EAAkBnH,EAAiBR,EAAe,CAC5F,GAAI+6C,GAAel8C,EAAO8I,EAAQnH,EAAQR,CAAK,EAAG,CAC1C,MAAAsG,EAASsB,GAAS/I,CAAY,EAE7B,OAAA,KAAK,KAAKyH,CAAM,IAAMA,CAAA,CAGxB,MAAA,EACT,CAEO,SAAS40C,GAAcr8C,EAAgB8I,EAAkBnH,EAAiBR,EAAe,CAC9F,GAAI+6C,GAAel8C,EAAO8I,EAAQnH,EAAQR,CAAK,EAAG,CAC1C,MAAAsG,EAASsB,GAAS/I,CAAY,EAE7B,OAAA8I,EAAS,KAAK,KAAKrB,CAAM,IAAMA,EAASA,EAAO,SAAA,EAAW,SAAS,GAAG,CAAA,CAGxE,MAAA,EACT,CAEgB,SAAA60C,GAAat8C,EAAgB8I,EAAkB,CACzD,GAAAA,GAAU,EAAE9I,aAAiB,MACxB,MAAA,GAGL,GAAA,CACF8M,GAAO9M,CAAY,OACT,CACH,MAAA,EAAA,CAGF,MAAA,EACT,CAEO,SAASu8C,GAAYv8C,EAAgB,CAC1C,OAAO,OAAOA,GAAU,UAAYm7C,GAAQ,KAAKn7C,CAAK,CACxD,CAEO,SAASw8C,GAAcx8C,EAAgB,CAC5C,OAAO,OAAOA,GAAU,UAAYo7C,GAAU,KAAKp7C,CAAK,CAC1D,CCtQO,MAAMy8C,GAAal4B,GAAW,CACnC,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAkB,EAC1B,KAAM,OACN,OAAQI,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OACb,UAAW,SACX,MAAO,CAAC,OAAQ,MAAM,EACtB,YAAa,OACb,UAAWzB,EACX,WAAYA,EACZ,aAAcC,GACd,SAAUD,EACV,SAAUA,EACV,aAAcgB,GACd,SAAUhB,EACV,MAAO,OACP,UAAW,OACX,UAAWA,EACX,OAAQ,OACR,MAAO,OAIP,cAAeA,EACf,UAAWA,EACX,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,YAAaA,EACb,KAAMA,EACN,aAAc,OACd,KAAM,OACN,MAAO,OACP,QAASmB,EAAuC,EAChD,OAAQA,EAAuC,EAC/C,QAASA,EAAsC,EAC/C,SAAUA,EAAsC,EAChD,QAASA,EAAU,EACnB,QAASA,EAAU,EACnB,cAAeA,EAAuC,EACtD,cAAeA,EAAuC,EACtD,UAAWA,EAA0C,EACrD,WAAYA,EAA0C,EACtD,QAASA,EAA0C,EACnD,mBAAoBA,EAA6C,EACjE,iBAAkBA,EAA6C,CACjE,CAAC,EClDmC,SAAAo3B,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAMpC,MAAM64C,GAAap2B,OAAOC,OAAoB,CAAC,OAAQ,WAAY,OAAQ,WAAY,MAAM,CAAC,EAE9F,SAASo2B,GAAgB/8C,EAAY,CACnC,OAAOK,GAAOL,CAAK,EAAI,GAAKg9C,OAAOh9C,CAAK,CAC1C,CAEA,MAAe6mB,qBAAgB,CAC7BjX,KAAM,QACNwH,MAAOqlC,GACPQ,MAAO,CAAC,cAAc,EACtBn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CACrC,KAAM,CACJC,MAAAA,EACAC,QAAAA,EACA5vB,MAAAA,EACAvC,SAAAA,EACAoyB,QAAAA,EACAj8C,KAAAA,EACAk8C,cAAAA,EACA3C,WAAAA,EACA4C,cAAAA,EACAC,cAAAA,CACD,EAAGhD,GAA+B,IAAMiD,QAAAA,OAAAA,GAAAA,EAAaz9C,QAAby9C,YAAAA,GAAoBC,QAAO,EAE9DtmC,EAAQiM,GAAS,QAAS0D,EAAQ,CACtC3lB,KAAM0jB,GAAe1jB,CAAI,EACzBosB,MAAOtI,GAAgBsI,CAAK,EAC5B9T,OAAQ,KACRzZ,KAAM,CACJgnB,QAAS,OACTtD,UAAW3jB,IAAS88C,GAAWv1B,SAASvnB,EAAK,CAC9C,EACD29C,OAAQ93B,GAAgB,EACxB+3B,YAAa,GACbC,OAAQh4B,GAAgB,EACxBi4B,YAAa,GACbzwC,UAAW,CACT4Z,QAAS,KACTpD,OAAQ,EACT,EACD7jB,MAAO,CACLinB,QAASA,IAAMs2B,EAAe,EAC9Br2B,OAAQ,EACT,EACD62B,YAAa,KACbC,UAAW,GACXC,WAAY,GACZC,aAAc,GACdn7B,SAAU,GACVkI,SAAUA,IAAMA,EAASjrB,MACzBm+C,aAAc,KACdjrC,SAAU,GACVC,MAAO,KACPirC,UAAW,EACXC,UAAW,GACXC,OAAQ,GACRC,MAAO,GACPC,cAAe,GACfC,UAAW,GACXpB,QAASA,IAAMA,EAAQr9C,MACvB0+C,YAAa74B,GAAgB,EAC7B84B,YAAa,GACbC,cAAe,KACfC,YAAa,GACbC,KAAM,GACNC,aAAc,KACdnvC,KAAM,CACJqX,QAAS,GACTC,OAAQ,EACT,EACD5L,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEK0jC,EAAYjC,GAAgB3lC,EAAMpX,KAAK,EAEvC2nB,EAAKtF,GAAc,OAAO,EAC1B3B,EAAQU,GAAU,EAClB69B,EAAUn2B,EAAG,IAAC,EAAK,EACnBo2B,EAAep2B,EAAG,IAACk2B,CAAS,EAC5BG,EAAer2B,EAAG,IAAC,EAAK,EACxBs2B,EAAgBt2B,EAAAA,IAAIk2B,EAAUr9C,MAAM,EACpC09C,EAAcv2B,EAAG,IAAC,EAAK,EACvBw2B,EAAax2B,EAAG,IAAC,EAAK,EACtBy2B,EAAYz2B,EAAG,IAAC,EAAK,EAErB20B,EAAe30B,EAAAA,IAAuB,EAEtC,CAAEuF,QAASmxB,EAASlxB,QAAAA,CAAS,EAAGF,GAAU,EAC1C1U,EAASI,GAAU,QAAS07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAExD,IAAIqoC,EAAYroC,EAAMpX,MAEtB,MAAM0/C,EAAYjnC,EAAAA,SAAS,IAClB,CAAC,EACN6C,EAAMgjC,QACNhjC,EAAMqkC,cACNrkC,EAAM,eAAe,GACrBlE,EAAMknC,QACNlnC,EAAMkE,MAAMgjC,QACZlnC,EAAMkE,MAAMqkC,aAEf,EACKC,EAAWnnC,EAAAA,SAAS,IACjB,CAAC,EACN6C,EAAMijC,OACNjjC,EAAMukC,aACNvkC,EAAM,cAAc,GACpBlE,EAAMmnC,OACNnnC,EAAMkE,MAAMijC,OACZnnC,EAAMkE,MAAMukC,YAEf,EACKC,EAAarnC,EAAAA,SAAS,KACnB,CACL,CAACkP,EAAGo4B,GAAG,SAAS,CAAC,EAAG,GACpB,CAACp4B,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMhW,IAAI,CAAC,EAAGgW,EAAMhW,OAAS,SACrC,EACF,EACK2hB,EAAWtK,EAAQ,SAAC,IAAOrB,EAAMimC,SAAWjmC,EAAMunC,aAAgBvnC,EAAM2L,QAAQ,EAChF/H,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAC,EACJ8jB,EAAGE,GAAGzQ,EAAMnX,IAAI,EAChB,CAACy/C,EAAU1/C,OAAS,CAAC4/C,EAAS5/C,OAAS8/C,EAAW9/C,MAClD,CACE,CAAC2nB,EAAGE,GAAG,SAAS,CAAC,EAAGo3B,EAAQj/C,MAC5B,CAAC2nB,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM6T,SAC3B,CAACtD,EAAGE,GAAG,UAAU,CAAC,EAAG9E,EAAS/iB,MAC9B,CAAC2nB,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAMimC,QAC1B,CAAC11B,EAAGE,GAAGzQ,EAAMoW,KAAK,CAAC,EAAGpW,EAAMoW,QAAU,UACtC,CAAC7F,EAAGE,GAAG,QAAQ,CAAC,EAAGvM,EAAMqkC,cAAgBrkC,EAAM,eAAe,GAAKlE,EAAMkE,MAAMgjC,OAC/E,CAAC32B,EAAGE,GAAG,OAAO,CAAC,EAAGvM,EAAMukC,aAAevkC,EAAM,cAAc,GAAKlE,EAAMkE,MAAMijC,MAC5E,CAAC52B,EAAGE,GAAG,aAAa,CAAC,EAAGzQ,EAAMynC,YAC9B,CAACl3B,EAAGE,GAAG,gBAAgB,CAAC,EAAGzQ,EAAMonC,aACnC,CAAC,CAEJ,EACKyB,EAAexnC,EAAAA,SAAS,KACrB,CACL,GAAGqnC,EAAW9/C,MACd,CAAC2nB,EAAGE,GAAG,YAAYzQ,EAAMhW,IAAI,EAAE,CAAC,EAAGgW,EAAMhW,OAAS,UAClD,CAACumB,EAAGo4B,GAAG,sBAAsB,CAAC,EAAGL,EAAU1/C,OAAS,CAAC4/C,EAAS5/C,MAC9D,CAAC2nB,EAAGo4B,GAAG,qBAAqB,CAAC,EAAG,CAACL,EAAU1/C,OAAS4/C,EAAS5/C,MAC7D,CAAC2nB,EAAGE,GAAG,aAAa,CAAC,EAAGzQ,EAAMynC,WAC/B,EACF,EACKqB,EAAYznC,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAMqiC,QAAUvmC,EAAMumC,QAAUvmC,EAAMkE,MAAMqiC,OAAO,EACjFwC,GAAY1nC,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAMuiC,QAAUzmC,EAAMymC,QAAUzmC,EAAMkE,MAAMuiC,OAAO,EACjFuC,GAAY3nC,EAAAA,SAAS,IAAM,CAC/B,MAAMxY,GAAOmX,EAAMnX,KAEnB,OAAIA,KAAS,WACJk/C,EAAan/C,MAAQ,OAAS,WAGnCC,KAAS,WACJ,iBAGFA,EACT,CAAC,EACKogD,EAAiB5nC,EAAAA,SAAS,IACvB,OAAOrB,EAAM/J,WAAc,WAC9B0vC,GAAgB3lC,EAAM/J,UAAU6xC,EAAal/C,KAAK,CAAC,EACnDk/C,EAAal/C,KAClB,EACKsgD,GAAe7nC,EAAAA,SAAS,IAC5B0mC,EAAan/C,MAAQ0gB,EAAM1gB,MAAMugD,UAAY7/B,EAAM1gB,MAAMwgD,UAC3D,EACMC,GAAWhoC,EAAAA,SAAS,IACjB,EAAEpY,GAAO6+C,EAAal/C,KAAK,GAAKk/C,EAAal/C,QAAU,GAC/D,EACK0gD,GAAYjoC,EAAAA,SAAS,IAEvB,CAACrB,EAAM6T,UAAY,CAAClI,EAAS/iB,OAASoX,EAAMqnC,WAAagC,GAASzgD,OAASsuB,EAAQtuB,KAEtF,EACK2gD,GAAeloC,EAAAA,SAAS,IACrB,OAAOrB,EAAM8mC,cAAiB,UACjC9mC,EAAM8mC,aACJ,KACA,MACF9mC,EAAM8mC,YACX,EAEDl6B,EAAAA,MACE,IAAM5M,EAAMpX,MACZA,IAAS,CACPk/C,EAAal/C,MAAQ+8C,GAAgB/8C,EAAK,EAC1Cy/C,EAAYP,EAAal/C,MACzB4gD,EAAkB,CACpB,CACF,EACA58B,EAAAA,MACE,CAACq8B,EAAgB5C,CAAY,EAC7B,IAAM,CACAA,EAAaz9C,QACfy9C,EAAaz9C,MAAMA,MAAQqgD,EAAergD,MAE9C,EACA,CAAE6gD,UAAW,GAAMC,MAAO,MAAO,CACnC,EAIA5D,EAAO,CACLC,MAAAA,EACAC,QAAAA,EACA6B,QAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAG,UAAAA,EACAwB,MAAOtD,EACPuD,UAAAA,GACAtD,MAAQz7C,IAA2B,SACjCw7C,GAAAA,EAAaz9C,QAAby9C,MAAAA,GAAoBC,MAAMz7C,GAC3B,EACDg/C,KAAMA,IAAM,SACVxD,GAAAA,EAAaz9C,QAAby9C,MAAAA,GAAoBwD,MACtB,CACF,CAAC,EAED,SAASC,IAAiB,CACxB,OAAO,OAAO9pC,EAAMpX,OAAU,SAAWmhD,WAAWjC,EAAal/C,KAAK,EAAIk/C,EAAal/C,KACzF,CAEA,SAASohD,GAAY9wC,GAAmB,CACjC2uC,EAAQj/C,QACXi/C,EAAQj/C,MAAQ,GAChBulB,EAAUnO,EAAMqjC,QAASnqC,EAAK,EAElC,CAEA,SAAS+wC,GAAW/wC,GAAmB,CACjC2uC,EAAQj/C,QACVi/C,EAAQj/C,MAAQ,GAEhBshD,WAAW,IAAM,CACVrC,EAAQj/C,QACXulB,EAAUnO,EAAMmqC,OAAQjxC,EAAK,EAC7BmvC,IAAcyB,GAAc,GAAMM,EAAgB,QAAQ,EAE7D,EAAE,GAAG,EAEV,CAEA,SAASC,EAAanxC,GAAc,CAClC,MAAMrQ,GAAOqQ,GAAMrQ,KAEnB,GAAIs/C,EAAUv/C,MAAO,CACnB,GAAIC,KAAS,QAAS,OAEtBs/C,EAAUv/C,MAAQ,EACpB,CAEAk/C,EAAal/C,MAASsQ,GAAM/H,OAA4BvI,MACxD4gD,EAAkB,EAElB,MAAM5gD,GAAQk/C,EAAal/C,MAE3B0hD,EAAS1hD,GAAOC,EAAI,CACtB,CAEA,SAASyhD,EAAS1hD,GAAeC,GAAsB6+C,GAAO1nC,EAAM0nC,KAAM,CACxEI,EAAal/C,MAAQA,GACrBwhD,EAAgBvhD,GAAM6+C,EAAI,CAC5B,CAEA,SAAS0C,EAAgBvhD,GAAsB6+C,GAAO1nC,EAAM0nC,KAAM,CAChE7+C,GAAOA,KAAS,QAAU,QAAU,SAEpC,MAAMD,GAAQkhD,GAAgB,EAE1BjhD,KAAS,UACXw/C,EAAYz/C,GAEP8+C,KACH1I,EAAK,eAAgBp2C,EAAK,EAC1Bw9C,EAAcx9C,EAAK,GAGrBulB,EAAUnO,EAAMuqC,SAAyB3hD,EAAK,EAEzC8+C,IACHxB,EAAe,IAGbwB,KACF1I,EAAK,eAAgBp2C,EAAK,EAC1Bw9C,EAAcx9C,EAAK,GAGrBulB,EAAUnO,EAAMwqC,QAAwB5hD,EAAK,EAEzC8+C,IACFxB,EAAe,EAGrB,CAEA,SAASsD,GAAmB,CAC1B,IAAI5gD,GAAQk/C,EAAal/C,MAEzB,GAAIK,GAAOL,EAAK,EAAG,CACjBo/C,EAAcp/C,MAAQ,EAEtB,MACF,CAEA,MAAMo+C,GAAYhnC,EAAMgnC,UAEpBA,IAAap+C,GAAM2B,OAASy8C,KAC9Bp+C,GAAQA,GAAM6hD,MAAM,EAAGzD,EAAS,GAGlCgB,EAAcp/C,MAAQA,GAAM2B,OAC5Bu9C,EAAal/C,MAAQA,EACvB,CAEA,SAAS8hD,GAAqB,CACxB1qC,EAAM6T,WAIVk0B,EAAan/C,MAAQ,CAACm/C,EAAan/C,MACnC0qB,EAAAA,SAAS,IAAM,SACb+yB,GAAAA,EAAaz9C,QAAby9C,MAAAA,GAAoBC,OACtB,CAAC,EACH,CAEA,SAASqE,EAAYzxC,GAAmB,QAClC8G,EAAM6T,UAAYlI,EAAS/iB,QAE/BsQ,GAAM0xC,gBAAiB,EACvBN,EAAS,GAAI,SAAU,EAAK,EAC5Bn8B,EAAUnO,EAAM6qC,OAAO,EACvBv3B,WAAS,IAAMiwB,EAAW,EAAE,CAAC,EAC7ByE,EAAcp/C,MAAQ,GACtBy9C,GAAAA,EAAaz9C,QAAby9C,MAAAA,GAAoBC,QACtB,CAEA,SAASwE,GAAc,CACrB38B,EAAUnO,EAAM+qC,OAAO,CACzB,CAEA,SAASC,GAAkB9xC,GAAmB,CAC5CiV,EAAUnO,EAAMirC,cAAe/xC,EAAK,CACtC,CAEA,SAASgyC,EAAkBhyC,GAAmB,CAC5CiV,EAAUnO,EAAMmrC,cAAejyC,EAAK,CACtC,CAEA,SAASkyC,GAAclyC,GAAsB,CAC3CiV,EAAUnO,EAAMsZ,UAAWpgB,EAAK,CAClC,CAEA,SAASmyC,GAAenyC,GAAsB,CAC5CiV,EAAUnO,EAAMsrC,WAAYpyC,EAAK,CACnC,CAEA,SAASqyC,GAAYryC,GAAsB,CACrCA,GAAMnQ,MAAQ,SAChB+hD,EAAa,EAGf38B,EAAUnO,EAAMuZ,QAASrgB,EAAK,CAChC,CAEA,SAASsyC,GAAuBtyC,GAAyB,CACvDivC,EAAUv/C,MAAQ,GAClBulB,EAAUnO,EAAMyrC,mBAAoBvyC,EAAK,CAC3C,CAEA,SAASwyC,GAAqBxyC,GAAyB,CACjDivC,EAAUv/C,QACZu/C,EAAUv/C,MAAQ,GAEdy9C,EAAaz9C,OACfy9C,EAAaz9C,MAAMgQ,cAAc,IAAIG,MAAM,OAAO,CAAC,GAIvDoV,EAAUnO,EAAM2rC,iBAAkBzyC,EAAK,CACzC,CAEA,SAAS0wC,IAAY,CACnB,MAAMD,GAAQiC,SAASC,cAAc,OAAO,EAE5ClC,GAAMh5B,MAAMyN,OAAS,IACrBurB,GAAMmC,aAAa,WAAY,UAAU,EACzCnC,GAAM/gD,MAAQk/C,EAAal/C,MAC3BgjD,SAASxiB,KAAK2iB,YAAYpC,EAAK,EAC/BA,GAAMqC,OAAQ,EAEd,MAAMC,GAAYL,SAASM,YAAY,MAAM,EAE7CN,gBAASxiB,KAAK+iB,YAAYxC,EAAK,EAExBsC,EACT,CAEA,SAASG,GAAelzC,GAAc,CACpCA,GAAMkzC,eAAgB,CACxB,CAEA,MAAMrwC,GAAQpK,GAASqO,EAAMjE,KAAK,EAC5BswC,GAAcrsC,EAAMlE,SACtBA,GAASuuC,EAActuC,IAAS,GAAG,EACnCX,GAASivC,EAActuC,IAAS,EAAE,EAEtC,SAASuwC,IAAe,CACtB,OAAAp7B,EAAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,QAAQ,CAAC,EAAC,MAChC,CAAEpgD,MAAO6T,EAAMwmC,WAAa,EAAA,QAC1BwE,EAAiB,EAAA,CAEzB75B,EAAU,WAACjN,EAAO,SAAU+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACxBrR,EAAMkE,MAAMqiC,MAAM,EAAA,CAAA12B,QAAAA,IAAAqB,CAAAA,EAAA,YAAApN,GAAA,CAAA,KACxB9D,EAAMumC,MAAM,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAE3B,CAAC,CAAA,CAGR,CAEA,SAASiG,IAAqB,CAC5B,OAAIzD,GAAUngD,MACZsoB,EAAAA,YAAA,MAAA,CAAA,IAES,SAAQ,MACN,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,QAAQ,CAAC,EAAC,MAChC,CACLpgD,MAAO6T,EAAM0mC,YACb+F,QAASnD,GAAU1gD,OAASoX,EAAMimC,QAAU,KAAO,EACpD,EAAA,QACQiF,CAAiB,EAAA,CAEzB/5B,EAAU,WAACjN,EAAO,SAAU+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACxBrR,EAAMkE,MAAMuiC,MAAM,EAAA,CAAA52B,QAAAA,IAAAqB,CAAAA,EAAA,YAAApN,GAAA,CAAA,KACxB9D,EAAMymC,MAAM,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAE3B,CAAC,CAAA,EAKJzmC,EAAMqnC,WAAarnC,EAAMimC,QAC3B/0B,EAAAA,YAAA,MAAA,CAAA,IACY,cAAa,MAAS,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGm8B,IAAI,OAAQ,aAAa,CAAC,CAAC,EAAA,IAAA,EAI3E,IACT,CAEA,SAASC,IAAqB,CAC5B,OAAIrD,GAAU1gD,MACZsoB,EAAAA,YAAA,SAAA,CAAA,IAES,QAAO,MACL,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,OAAO,CAAC,EAAC,KAChC,SAAQ,SACJ,GAAE,aACAjqC,EAAO1Z,MAAMgkD,UAAUC,MAAK,QAC/BlC,GAAWz5B,CAAAA,EAAA,YAAApN,GAAA4O,EAAA,WAEVpJ,EAAM1gB,MAAMikD,MAAK,CAAA,MAAS,OAAO,CAAA,EAAA,IAAA,CAAA,CAAA,EAK7C7sC,EAAMimC,QACR/0B,EAAAA,YAAA,MAAA,CAAA,IACY,UAAS,MAAS,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,SAAS,CAAC,GAACr7B,CAAAA,EAAA,YAAApN,GAAA4O,EAAA,WAErDpJ,EAAM1gB,MAAMq9C,QAAO,CAAA,OACfjmC,EAAMwnC,eAAiBl+B,EAAM1gB,MAAMq9C,QAAQ71B,OAAM,KACnDpQ,EAAMsnC,aAAeh+B,EAAM1gB,MAAMq9C,QAAQ18B,KAAI,MAC5C,SAAS,CAAA,EAAA,IAAA,CAAA,CAAA,EAMjB,IACT,CAEA,SAASujC,IAAe,CAAA,IAAAC,GACtB,OAAA77B,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,gBAAgB,CAAC,EAAA,CAChCC,GAAkB,EAAEt7B,EAAA,YAAAmrB,aAAA,CAAA,KACH9rB,EAAGy8B,GAAG,MAAM,EAAC,OAAA,EAAA1H,EAAAA,GAAAyH,GAC5BJ,GAAoB,CAAA,EAAAI,GAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,EAAA,CAAA,CAAA,CAAA,CAAA,CAI7B,CAEA,SAASE,IAAc,CACrB,OAAA/7B,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,OAAO,CAAC,EAAA,CACvBp7B,EAAAA,WAAWjN,EAAO,QAAS,CAAEtb,MAAOk/C,EAAal/C,KAAM,EAAG,IAAM,CAAAsoB,EAAA,YAAAG,GAAA,CAAA,SAC3CrR,EAAMkE,MAAMrR,MAAK,KAAQ,CAAEjK,MAAOk/C,EAAal/C,KAAM,CAAC,EAAA,CAAAinB,QAAAA,IACvE7P,CAAAA,EAAMgnC,YAAckG,IACjBlF,EAAcp/C,MACd,GAAGo/C,EAAcp/C,KAAK,IAAIoX,EAAMgnC,SAAS,EAAE,CAAA,CAAA,CAAA,CAElD,CAAC,CAAA,CAGR,CAEA,SAASmG,IAAsB,CAC7B,OAAIntC,EAAMnX,OAAS,YAAcmX,EAAMonC,cACrCl2B,EAAAA,YAAA,MAAA,CAAA,IAES,WAAU,MACR,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,UAAU,CAAC,EAAC,MAClC,CACLpgD,MAAO6T,EAAM0mC,WACd,EAAA,QACQgE,CAAkB,EAAA,CAE1Bv5B,EAAAA,WAAWjN,EAAO,WAAY,CAAEuR,MAAOsyB,EAAan/C,KAAM,EAAG,IAAM,CAAAsoB,EAAA,YAAAG,GAAA,CAAA,SAC9CrR,EAAMkE,MAAMkpC,SAAQ,KAAQ,CAAE33B,MAAOsyB,EAAan/C,KAAM,CAAC,EAAA,CAAAinB,QAAAA,IAAAqB,CAAAA,EAAA,YAAApN,GACjEolC,GAAatgD,MAAK,IAAA,CAAA,CAAA,CAAA,CAAA,CAE/B,CAAC,CAAA,EAKD,IACT,CAEA,SAASykD,IAAgB,WACvB,OAAAn8B,EAAAA,YAAA,MAAA,CAAA,GAEQ60B,EAAMn9C,MAAK,IACVw/C,EAAO,MACLxkC,EAAUhb,MAAK,QACb0kD,IAAAA,QAAMjH,OAAAA,GAAAA,EAAaz9C,QAAby9C,YAAAA,GAAoBC,QAAO,EAAA,CAEzCwC,EAAUlgD,OAAS0jD,GAAc,EAAAp7B,EAAA,YAAAwB,QAAAA,EAAAA,WAE5B1S,EAAM2nC,aAAY,CAAA,IACjBtB,EAAY,MACV,CAAC91B,EAAGg8B,GAAG,SAAS,GAAGvsC,GAAAA,EAAM2nC,eAAN3nC,YAAAA,GAAoB+Q,MAAO/Q,EAAM+mC,YAAY,EAAC,KAClEiC,GAAUpgD,MAAK,UACVoX,EAAM4mC,UAAS,aACZ2C,GAAa3gD,MAAK,WACpBoX,EAAM6mC,WAAU,SAClB7mC,EAAM6T,SAAQ,SACdlI,EAAS/iB,OAASqoB,OAAS,YACxBjR,EAAM2mC,aAAerkC,EAAO1Z,MAAM+9C,YAAW,UAC/C3mC,EAAMgnC,UAAY,EAAIhnC,EAAMgnC,UAAY/1B,OAAS,KACtDjR,EAAMxH,QAAQwH,GAAAA,EAAM2nC,eAAN3nC,YAAAA,GAAoBxH,MAAI,kBAC3BwtC,EAAQp9C,MAAK,OACtBqhD,GAAU,QACTD,GAAW,QACXqC,GAAW,SACVhC,EAAY,WACVgB,GAAc,UACfD,GAAa,QACfG,GAAW,SACVa,GAAc,mBACJZ,GAAsB,iBACxBE,EAEnBoB,CAAAA,EAAAA,IAAAA,EAAAA,GAAY,EACZ9sC,EAAMgnC,UAAY,GAAK,CAAChnC,EAAMinC,UAAYgG,GAAW,EAAK,KAC1DE,GAAqB,CAAA,CAAA,CAG5B,CAEA,SAASI,GAAY1kD,GAA0B,CAC7C,MAAM2kD,GACJtpC,EAAM,GAAGrb,EAAI,QAAQ,GAAKqb,EAAM,GAAGrb,EAAI,SAAS,GAAKmX,EAAMkE,MAAM,GAAGrb,EAAI,QAAQ,EAElF,OAAI2kD,GACFt8B,EAAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG1jD,EAAI,EAAG0nB,EAAGm8B,IAAI7jD,GAAM,QAAQ,CAAC,EAAC,aAC9B4kD,KAAQ5kD,KAAS,SAAWo/C,EAAcC,GAAYt/C,MAAQ,GAAK,aACnE8kD,KAAQ7kD,KAAS,SAAWo/C,EAAcC,GAAYt/C,MAAQ,IAE3E4kD,CAAAA,GAAU,CAAE,CAAA,EAKnBt8B,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG1jD,EAAI,CAAC,EAAA,CACpBqb,EAAMrb,EAAI,EACTqb,EAAMrb,EAAI,EAAI,EAAAqoB,EAAA,YAAAG,GAAA,CAAA,SAEMrR,EAAMkE,MAAMrb,EAAI,CAAC,EAAA,CAAAgnB,QAAAA,IAAA,CAAG7P,EAAMnX,EAAI,CAAC,CACpD,CAAA,CAAA,CAAA,CAGP,CAEA,MAAO,IACDy/C,EAAU1/C,OAAS4/C,EAAS5/C,MAC9BsoB,EAAAA,YAAA,MAAA,CAAA,MACc23B,EAAajgD,KACtB0/C,EAAAA,CAAAA,EAAU1/C,OAAS2kD,GAAY,QAAQ,EACvCF,GAAe,EACf7E,EAAS5/C,OAAS2kD,GAAY,OAAO,CAAC,CAAA,EAKtCF,GAAe,CAEzB,EACDM,QAAS,CACPrH,MAAO18C,GACPigD,KAAMjgD,EACR,CACF,CAAC,ECpoBYgkD,GAAiBzgC,GAAW,CACvC,UAAW,OACX,OAAQ,OACR,UAAW,OACX,MAAO,OACP,OAAQJ,EACR,KAAM,OACN,SAAU,OACV,WAAY,OACZ,SAAUA,EACV,QAAS,CAAC,OAAQ,MAAM,EACxB,SAAU,OACV,SAAUA,EACV,WAAY,OACZ,cAAemB,EAAqC,EACpD,SAAUA,EAAqC,EAC/C,YAAaA,EAAqC,CACpD,CAAC,ECrBiB,IAAA2/B,IAAAA,IAChBA,EAAAC,EAAA,WAAA,CAAA,EAAA,aACAD,EAAAC,EAAA,SAAA,CAAA,EAAA,WAFgBD,IAAAA,IAAA,CAAA,CAAA,EAKL,MAAAE,GAAsB,OAAO,OAA6B,CACrE,MACA,QACA,SACA,MACF,CAAC,ECLM,SAASC,GAAS,CACvB,cAAAC,EAAgBv8B,MAAI,CAAC,EACrB,WAAAw8B,EAAax8B,MAAI,CAAC,EAClB,MAAA6G,EAAQ7G,MAAI,IAAI,EAChB,IAAAy8B,EAAMz8B,MAAI,IAAI,EACd,SAAA08B,EAAW18B,MAAI,EAAK,EACpB,KAAA7oB,EAAO6oB,EAAAA,IAAIm8B,GAAc,QAAQ,EACjC,UAAAQ,EAAY38B,MAAI,EAAE,EAClB,SAAAmC,EAAWnC,MAAI,EAAK,EACpB,OAAA48B,EAAS1kD,GACT,OAAA4hC,EAAS5hC,GACT,KAAA2kD,EAAO3kD,GACP,SAAA4kD,EAAW5kD,EACb,EAaG,CACG,IAAAW,EACAkkD,EACAC,EACAC,EACAC,EAAU,GACVC,EAAa,GAEjB,SAASC,GAAiB,CACpB,GAAA,CAACV,EAAS,MAAO,OAERS,EAAA,GAEb,MAAME,EAAYC,GAAiBL,EAAcV,EAAc,KAAK,EACpE,IAAIgB,EAAU,GAEVL,EACEX,EAAc,MAAQU,IACVV,EAAA,OAASc,EAAYb,EAAW,MACpCe,EAAA,IAEHhB,EAAc,MAAQU,IACjBV,EAAA,OAASc,EAAYb,EAAW,MACpCe,EAAA,IAGRA,IACWC,EAAA,EACbV,EAASP,EAAc,KAAK,IAI5BG,EAAS,OAASQ,EACdX,EAAc,MAAQU,EACtBV,EAAc,MAAQU,GAE1B,sBAAsBG,CAAc,EAEvBD,EAAA,EACf,CAGF,SAASM,EAAgBj2C,EAAqB,CAQ5C,GAPI2a,EAAS,OAAS3a,EAAM,OAAS,IAIrCA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EAEjB,CAACqf,EAAM,OAAS,CAAC41B,EAAI,OAAc,MAAA,GAE9B,SAAA,iBAAiB,cAAeiB,CAAe,EAC/C,SAAA,iBAAiB,YAAaC,CAAa,EAE9C,MAAA11C,EAAO4e,EAAM,MAAM,sBAAsB,EACzC+2B,EAAUnB,EAAI,MAAM,sBAAsB,EAE5C,IAAAh7B,EAEAtqB,EAAK,QAAUglD,GAAc,UAC/BtjD,EAASoP,EAAK,OACJ80C,EAAAa,EAAQ,IAAM31C,EAAK,IAC7B+0C,EAAWY,EAAQ,IACRn8B,EAAAs7B,EAAUv1C,EAAM,QAAUw1C,IAErCnkD,EAASoP,EAAK,MACJ80C,EAAAa,EAAQ,KAAO31C,EAAK,KAC9B+0C,EAAWY,EAAQ,KACRn8B,EAAAs7B,EAAUv1C,EAAM,QAAUw1C,GAGvCC,EAAe,KAAK,IAClB,EACA,KAAK,IAAKx7B,EAAW5oB,GAAU,IAAM8jD,EAAU,MAAQ,GAAM,IAAK,GAAG,CACvE,EACAO,EAAUD,GAAgBV,EAAc,MAExCG,EAAS,MAAQ,GAEjBE,EAAOL,EAAc,KAAK,EACXa,EAAA,CAAA,CAGjB,SAASM,EAAgBl2C,EAAqB,CAC5CA,EAAM,gBAAgB,EAEjBT,IACHS,EAAM,eAAe,EAGvBsyB,EAAOyiB,EAAc,KAAK,EAEtB,IAAA96B,EAEAtqB,EAAK,QAAUglD,GAAc,SACpB16B,EAAAs7B,EAAUv1C,EAAM,QAAUw1C,EAE1Bv7B,EAAAs7B,EAAUv1C,EAAM,QAAUw1C,EAGvCC,EAAe,KAAK,IAClB,EACA,KAAK,IAAKx7B,EAAW5oB,GAAU,IAAM8jD,EAAU,MAAQ,GAAM,IAAK,GAAG,CACvE,EAEA,CAACQ,GAAcC,EAAe,CAAA,CAGhC,SAASO,EAAcn2C,EAAqB,CAC1CA,EAAM,eAAe,EAEZ,SAAA,oBAAoB,cAAek2C,CAAe,EAClD,SAAA,oBAAoB,YAAaC,CAAa,EAEvDjB,EAAS,MAAQ,GAEjBG,EAAKN,EAAc,KAAK,CAAA,CAG1B,SAASiB,GAAe,CACRjB,EAAA,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAc,MAAO,GAAG,CAAC,CAAA,CAG/D,MAAA,CACL,cAAAA,EACA,WAAAC,EACA,MAAA31B,EACA,IAAA41B,EACA,SAAAC,EACA,KAAAvlD,EACA,UAAAwlD,EACA,SAAAx6B,EAEA,gBAAAs7B,CACF,CACF,CAEA,SAASH,GAAiB/kD,EAAegxB,EAAa,CACpD,MAAMs0B,EAAO,KAAK,IAAItlD,EAAQgxB,CAAG,EAEjC,QAAS7wB,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACnB,GAAAmlD,GAAQnlD,EAAI,GAAK,GACnB,MAAO,GAAI,IAAOA,EAIf,MAAA,EACT,8FC9JM,MAAA4V,EAAQiM,GAAS,YADRsF,EAC6B,CAC1C,UAAW,CACT,QAAS,QACT,UAAW3oB,GAASmlD,GAAoB,SAASnlD,CAAK,CACxD,EACA,OAAQ,CACN,QAAS,EACT,UAAWA,GAASA,GAAS,GAAKA,GAAS,IAC3C,OAAQ,EACV,EACA,UAAW,CACT,QAAS,GACT,UAAWA,GAASA,EAAQ,GAAKA,EAAQ,GAC3C,EACA,MAAO,KACP,OAAQ,GACR,KAAM,KACN,SAAU,KACV,WAAY,KACZ,SAAU,GACV,QAAS,KACT,SAAU,KACV,SAAU,GACV,WAAY,CACV,QAAS,EACT,UAAWA,GAASA,EAAQ,GAAKA,EAAQ,EAAA,CAC3C,CACD,EAEK2nB,EAAKtF,GAAc,WAAW,EAC9BizB,EAASxsB,MAAI,EAAK,EAClB89B,EAAY99B,MAAI,EAAK,EAErB,CAAE,UAAA2G,EAAW,cAAAO,CAAc,EAAIT,GAAa,EAE5C,CAAE,MAAAkd,CAAM,EAAIX,GAAO,EAEnBuZ,EAAgB51B,EAAUrY,EAAM,MAAM,EAEtC85B,EAAYpoB,EAAAA,IAAiB,EAC7By8B,EAAMz8B,EAAAA,IAAiB,EACvB6G,EAAQ7G,EAAAA,IAAiB,EAEzB,CAAE,MAAA/V,CAAM,EAAI66B,GAAc,EAE1B3tC,EAAOwY,EAAAA,SAAS,IACbrB,EAAM,YAAc,SAAWA,EAAM,YAAc,OACtD6tC,GAAc,SACdA,GAAc,UACnB,EAEK,CAAE,SAAAO,EAAU,gBAAiBqB,CAAA,EAAyBzB,GAAS,CACnE,cAAAC,EACA,MAAA11B,EACA,IAAA41B,EACA,KAAAtlD,EACA,WAAYu1C,EAAAA,MAAMp+B,EAAO,YAAY,EACrC,UAAWo+B,EAAAA,MAAMp+B,EAAO,WAAW,EACnC,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,OAAkByoB,GAAA,CAChB,aAAa9sB,EAAM,IAAI,EACbwS,EAAAnO,EAAM,cAAeyoB,CAAM,CACvC,EAEA,KAAgBA,GAAA,CACGinB,EAAA,EACH92B,EAAA,EACJzK,EAAAnO,EAAM,YAAayoB,CAAM,CACrC,EACA,SAAoBA,GAAA,CACJ7P,EAAA,EACJzK,EAAAnO,EAAM,SAAUyoB,CAAM,CAAA,CAClC,CACD,EAEK7kB,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAGvQ,EAAM,SAAS,EACrB,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,MAAM,CAAC,EAAGvQ,EAAM,KACvB,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGi/B,EAAU,MAChC,CAACj/B,EAAG,GAAG,UAAU,CAAC,EAAG69B,EAAS,MAC9B,CAAC79B,EAAG,GAAG,QAAQ,CAAC,EAAG2tB,EAAO,MAC1B,CAAC3tB,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,QAAA,CAE/B,CACD,EACK2Q,EAAQtP,EAAAA,SAAiC,KACtC,CACL,CAACkP,EAAG,GAAG,cAAc,CAAC,EAAGvQ,EAAM,SAC/B,CAACuQ,EAAG,GAAG,gBAAgB,CAAC,EAAGvQ,EAAM,WACjC,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAGvQ,EAAM,MAAQ,GAAGA,EAAM,KAAK,KAAO,IACvD,EACD,EAED4M,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACPqlD,EAAc,MAAQrlD,EACRgwB,EAAA,CAAA,CAElB,EACAlN,EAAAA,YAAY,IAAM,CACZ,GAAA,CAACyiC,EAAI,MAAO,OAEV,MAAAh7B,EAAW,IAAK,IAAMnT,EAAM,WAAaiuC,EAAc,MAASjuC,EAAM,SAAS,IAC/EzV,EAAS,GAAGyV,EAAM,SAAS,IAE7BnX,EAAK,QAAUglD,GAAc,UAC3BM,EAAA,MAAM,MAAM,OAAS5jD,EACzB4jD,EAAI,MAAM,MAAM,UAAY,kBAAkBh7B,CAAQ,SAElDg7B,EAAA,MAAM,MAAM,MAAQ5jD,EACpB4jD,EAAA,MAAM,MAAM,UAAY,eAAe9Y,EAAM,MAAQ,IAAM,EAAE,GAAGliB,CAAQ,UAC9E,CACD,EACDzH,EAAAA,YAAY,IAAM,CACXyiC,EAAI,QAETA,EAAI,MAAM,MAAM,mBACdnlD,GAAUgX,EAAM,QAAQ,GAAKA,EAAM,UAAY,EAAI,GAAGA,EAAM,QAAQ,KAAO,GAAA,CAC9E,EAEGA,EAAM,QACR4M,EAAA,MAAMqhC,EAAe,IAAM,CACzB,aAAatyC,EAAM,IAAI,EACvBuiC,EAAO,MAAQ,GAEX,CAACsR,EAAU,OAAS,CAACpB,EAAS,OACfsB,EAAA,CACnB,CACD,EAGG,MAAAC,EAAyBv0C,GAAS,IAAM,CAC5C,aAAaO,EAAM,IAAI,EAEnBqE,EAAM,SACRk+B,EAAO,MAAQ,IAEfA,EAAO,MAAQ,GAEX,CAACsR,EAAU,OAAS,CAACpB,EAAS,OACfsB,EAAA,EAErB,CACD,EAEG,IAAAE,EAEJn7B,EAAAA,UAAU,IAAM,CACd,IAAIolB,EAAW73B,EAAAA,mBAAmB,EAElCsR,EAAAA,SAAS,IAAM,WACT,OAAOtT,EAAM,SAAY,SACV4vC,EAAA,SAAS,cAAc5vC,EAAM,OAAO,EAErD4vC,EAAiB5vC,EAAM,QAGpB4vC,IACC/V,GAAA,MAAAA,EAAU,QACK+V,GAAA7uC,EAAA84B,EAAS,OAAO,QAAhB,YAAA94B,EAAuB,IAEnC6uC,IACcA,IAAAj6B,EAAAmkB,EAAU,QAAV,YAAAnkB,EAAiB,gBAAiB,OAGpCi6B,IAAAh6B,EAAAkkB,EAAU,QAAV,YAAAlkB,EAAiB,gBAAiB,MAInDg6B,GAAkB5vC,EAAM,MAAQ,KACnB4vC,EAAA,iBAAiB,YAAaD,CAAsB,EAG1D9V,EAAA,KAEN75B,EAAM,QACT4M,EAAA,MAAMqhC,EAAe,IAAM,CACzB,cAActyC,EAAM,IAAI,EACxBuiC,EAAO,MAAQ,GACEwR,EAAA,CAAA,CAClB,CACH,CACD,CAAA,CACF,EAED96B,EAAAA,gBAAgB,IAAM,CAChBg7B,GACaA,EAAA,oBAAoB,YAAaD,CAAsB,EAGvDC,EAAA,KACjB,aAAaj0C,EAAM,IAAI,CAAA,CACxB,EAEYmW,EAAA,CACX,cAAAm8B,EACA,UAAAnU,EACA,IAAAqU,EACA,MAAA51B,EACA,aAAA4f,CAAA,CACD,EAEG,IAAA5tC,EACAkkD,EACAC,EAEJ,SAASS,EAAgBj2C,EAAqB,CAQ5C,GAPIA,EAAM,SAAW,GAAK8G,EAAM,WAIhC9G,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EAEjB,CAACqf,EAAM,OAAS,CAAC41B,EAAI,OAAc,MAAA,GAE9B,SAAA,iBAAiB,cAAeiB,CAAe,EAC/C,SAAA,iBAAiB,YAAaC,CAAa,EAE9C,MAAA11C,EAAO4e,EAAM,MAAM,sBAAsB,EACzC+2B,EAAUnB,EAAI,MAAM,sBAAsB,EAE5CtlD,EAAK,QAAUglD,GAAc,UAC/BtjD,EAASoP,EAAK,OACJ80C,EAAAa,EAAQ,IAAM31C,EAAK,IAC7B+0C,EAAWx1C,EAAM,UAEjB3O,EAASoP,EAAK,MACJ80C,EAAApZ,EAAM,MAAQia,EAAQ,MAAQ31C,EAAK,MAAQ21C,EAAQ,KAAO31C,EAAK,KACzE+0C,EAAWx1C,EAAM,SAGnB,aAAayC,EAAM,IAAI,EAEvB6zC,EAAU,MAAQ,GACRrhC,EAAAnO,EAAM,cAAeiuC,EAAc,KAAK,CAAA,CAGpD,SAASmB,EAAgBl2C,EAAqB,CAC5CA,EAAM,gBAAgB,EAEjBT,IACHS,EAAM,eAAe,EAGnB,IAAAia,EAEAtqB,EAAK,QAAUglD,GAAc,SACpB16B,EAAAs7B,EAAUv1C,EAAM,QAAUw1C,EAE1Bv7B,EAAAkiB,EAAM,MACb,EAAEoZ,EAAUv1C,EAAM,QAAUw1C,GAC5BD,EAAUv1C,EAAM,QAAUw1C,EAIhCT,EAAc,MAAS96B,EAAW5oB,GAAU,IAAMyV,EAAM,WAAc,IAEzDkvC,EAAA,EACCt2B,EAAA,EACJzK,EAAAnO,EAAM,SAAUiuC,EAAc,KAAK,CAAA,CAG/C,SAASoB,EAAcn2C,EAAqB,CAC1CA,EAAM,eAAe,EAEZ,SAAA,oBAAoB,cAAek2C,CAAe,EAClD,SAAA,oBAAoB,YAAaC,CAAa,EAEtCK,EAAA,EAEjBF,EAAU,MAAQ,GACRrhC,EAAAnO,EAAM,YAAaiuC,EAAc,KAAK,CAAA,CAGlD,SAASiB,GAAe,CACRjB,EAAA,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAc,MAAO,GAAG,CAAC,CAAA,CAGtE,SAASyB,GAAmB,CACtB1vC,EAAM,MAAQ,MACVrE,EAAA,KAAO,WAAW,IAAM,CAC5BuiC,EAAO,MAAQ,EAAA,EACdl+B,EAAM,IAAI,EACf,CAGF,SAASm4B,EAAa1P,EAAgB,CAChC,KAAK,IAAIwlB,EAAc,MAAQxlB,CAAM,EAAI,OAE7CwlB,EAAc,MAAQtgD,GAAW86B,EAAQ,EAAG,GAAG,EACjC7P,EAAA,EAAA,CAGhB,SAASyB,EAA8BnhB,EAAU,CAC3CA,EAAM,aACRA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EACvB,6BAKAmZ,EAAA,mBAkBM,MAAA,SAjBA,YAAJ,IAAIynB,EACH,uBAAOl2B,EAAS,KAAA,EACjB,KAAK,YACJ,uBAAO+M,EAAK,KAAA,CAAA,GAEb8B,EAAAA,mBAKO,MAAA,SAJD,QAAJ,IAAI8F,EACH,MAAKjG,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,OAAA,EAAW2B,QAAKlS,CAAA,EAAC,SAAQ,KAAUkS,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,CAAA,CAAA,EACtD,aAAY8J,EACZ,cAAWw1B,EAAA,CAAA,IAAAA,EAAA,CAAA,UAAE39B,EAAAA,MAAoBu9B,CAAA,GAAAv9B,EAAAA,MAAAu9B,CAAA,EAAA,GAAAj0C,CAAA,EAAA,WAEpCiX,EAAAA,mBAKO,MAAA,SAJD,MAAJ,IAAI07B,EACH,MAAK77B,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,EACZ,aAAY8J,EACZ,cAAa80B,oBCvVPW,GAAsB3iC,GAAW,CAC5C,SAAUF,GACV,SAAUF,EACV,SAAUmB,EAAgD,CAC5D,CAAC,ECKD6hC,GAAetgC,kBAAgB,CAC7B,KAAM,iBACN,MAAOqgC,GACP,MAAMngC,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,iBAAkB0D,EAAQ,CAC/C,SAAU,CACR,QAAS,GACT,UAAW/mB,GAAS,OAAOA,GAAU,WAAaA,EAAQ,CAC5D,EACA,SAAU,EAAA,CACX,EAEK,CAAE,cAAAwrC,EAAe,gBAAAC,CAAgB,EAAIC,GAAU,EAErD,IAAI0b,EAAW,GAEf,SAAS7b,EAAan8B,EAA4B,CACtCmW,EAAAnO,EAAM,SAAUhI,CAAK,CAAA,CAGjC,MAAMmhC,EAAiBn5B,EAAM,SACzB5E,GAAS+4B,EAAc,OAAOn0B,EAAM,UAAa,UAAY,GAAKA,EAAM,QAAQ,EAChFm0B,EAEE0F,EAAW73B,EAAAA,mBAAmB,EAEpCyS,EAAAA,UAAU,IAAM,CACd7H,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACCA,EAAA2rC,IAAc0b,EAAQ,CAChC,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,CAAA,CACD,EAEDr7B,EAAAA,gBAAgB,IAAM,SACpB,GAAIo7B,EAAU,CACN,MAAAn3C,GAAKmJ,GAAAA,EAAAA,EAAAA,uBAAAA,YAAAA,EAAsB,QAAtBA,YAAAA,EAA6B,IAEpCnJ,GAAA,MAAAA,EAAI,oBACNw7B,EAAgBx7B,EAAG,kBAAkB,CACvC,CACF,CACD,EAED,SAASo3C,GAAU,OACjB,GAAID,EAAU,OAER,MAAAn3C,GAAKkI,EAAA84B,GAAA,YAAAA,EAAU,QAAV,YAAA94B,EAAiB,IAE5B,GAAIlI,GAAA,MAAAA,EAAI,mBAAoB,CACtB,GAAAA,EAAG,qBAAuBA,EAAG,aAAeA,EAAG,WAAa,GAAKA,EAAG,YAAc,GACpF,OAGYu7B,EAAAv7B,EAAG,mBAAoBsgC,CAAc,EACxC6W,EAAA,EAAA,CACb,CAGF,SAASzb,GAAY,OACnB,GAAIyb,EAAU,CACN,MAAAn3C,GAAKkI,EAAA84B,GAAA,YAAAA,EAAU,QAAV,YAAA94B,EAAiB,IAExBlI,GAAA,MAAAA,EAAI,oBACNw7B,EAAgBx7B,EAAG,kBAAkB,EAG5Bm3C,EAAA,EAAA,CACb,CAGK,MAAA,IAAM7+B,EAAAA,WAAWjN,EAAO,SAAS,CAAA,CAE5C,CAAC,EC3EYgsC,GAAoB/iC,GAAW,CAC1C,YAAaY,GACb,YAAaC,GACb,YAAa,OACb,KAAM,OACN,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,CAAC,OAAQ,MAAM,EACvB,SAAUjB,EACV,QAASA,EACT,QAAS,OACT,QAAS,OACT,QAASA,EACT,QAASA,EACT,QAAS,OACT,SAAUgB,GACV,SAAUd,GACV,YAAa,OACb,OAAQF,EACR,YAAa,OACb,YAAaA,EACb,UAAW,OACX,YAAaA,EACb,WAAYA,EACZ,SAAUmB,EAAgD,EAC1D,iBAAkBA,EAAsC,EACxD,iBAAkBA,EAAsC,EACxD,QAASA,EAAwE,EACjF,cAAeA,EAAgE,EAC/E,SAAUA,EAAkD,EAC5D,YAAaA,EAAgE,EAC7E,iBAAkBA,EAA+C,EACjE,YAAaA,EAA+C,EAC5D,eAAgBA,EAA+C,CACjE,CAAC,EC1CM,SAAS2wB,GAAgBh0C,EAQvB,CACP,KAAM,CAAE,GAAAgO,EAAI,MAAAs3C,EAAQ,EAAG,IAAAC,EAAM,EAAG,MAAAC,EAAQ,EAAG,IAAAC,EAAM,EAAG,SAAAzU,EAAW,IAAK,SAAA9wC,EAAW,MAASF,EAExF,GAAI,CAACgO,EAAI,OAET,MAAMoiB,EAAM,IAAM,CACT,OAAAlwB,GAAa,YAAcA,EAAS,CAC7C,EAEA,GAAI8wC,GAAY,EAAG,CACdhjC,EAAA,SAASu3C,EAAKE,CAAG,EAChBr1B,EAAA,EACJ,MAAA,CAGF,MAAMs1B,EAAYH,EAAMD,EAClBK,EAAYF,EAAMD,EAEpB,GAAA,CAACE,GAAa,CAACC,EAAW,CACxBv1B,EAAA,EACJ,MAAA,CAGF,MAAMw1B,EAAQ,KAAK,KAAMF,EAAY1U,EAAY,EAAE,EAC7C6U,EAAQ,KAAK,KAAMF,EAAY3U,EAAY,EAAE,EAEnD,IAAI8U,EAAWR,EACXS,EAAWP,EAEf,MAAM5nB,EAAS,IAAM,CACPkoB,GAAAF,EACAG,GAAAF,EAERH,IAAcH,EAAMO,GAAYJ,GAAa,IACpCI,EAAAP,GAGTI,IAAcF,EAAMM,GAAYJ,GAAa,IACpCI,EAAAN,GAGVz3C,EAAA,SAAS83C,EAAUC,CAAQ,GAEzB,CAACL,GAAaI,IAAaP,KAAS,CAACI,GAAaI,IAAaN,GAC9Dr1B,EAAA,EAEJ,sBAAsBwN,CAAM,CAEhC,EAEOA,EAAA,CACT,CCvDO,SAASooB,GAAiB,CAC/B,KAAAC,EACA,SAAAj9B,EACA,OAAAk9B,EACA,QAAAC,EACA,QAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,eAAAC,CACF,EAWG,CACD,KAAM,CAAE,UAAA/4B,EAAW,cAAAO,CAAc,EAAIT,GAAa,EAE5C,CAAE,MAAAkd,CAAM,EAAIX,GAAO,EAEnB2c,EAAY3/B,EAAAA,IAAiB,EAE7BkjB,EAAU9nB,EAAAA,SAAS,CACvB,GAAIukC,EACJ,YAAa,EACb,YAAa,EACb,aAAc,EACd,aAAc,CAAA,CACf,EAGK92B,EAAIlC,EAAU,CAAC,EACfmC,EAAInC,EAAU,CAAC,EAEfi5B,EAAWj5B,EAAU,CAAC,EACtBk5B,EAAWl5B,EAAU,CAAC,EAEtBm5B,EAAenwC,EAAAA,SAAS,IACrBuzB,EAAQ,GAAKA,EAAQ,YAAcA,EAAQ,YAAc,CACjE,EACK6c,EAAepwC,EAAAA,SAAS,IACrBuzB,EAAQ,GAAKA,EAAQ,aAAeA,EAAQ,aAAe,CACnE,EACK8c,EAAgBrwC,EAAAA,SAAS,IAE3B,CAACwS,EAAS,OACVi9B,EAAK,QAAU,YACf,CAAC,CAAClc,EAAQ,IACVA,EAAQ,YAAcA,EAAQ,WAEjC,EACK+c,EAAgBtwC,EAAAA,SAAS,IAE3B,CAACwS,EAAS,OACVi9B,EAAK,QAAU,cACf,CAAC,CAAClc,EAAQ,IACVA,EAAQ,aAAeA,EAAQ,YAElC,EACKgd,EAAavwC,EAAAA,SAAS,IACtBuzB,EAAQ,GACHjnC,GAAYinC,EAAQ,aAAeA,EAAQ,aAAe,GAAM,IAAK,EAAG,EAAE,EAG5E,EACR,EACKid,EAAaxwC,EAAAA,SAAS,IACtBuzB,EAAQ,GACHjnC,GAAYinC,EAAQ,cAAgBA,EAAQ,cAAgB,GAAM,IAAK,EAAG,EAAE,EAG9E,EACR,EAEDhoB,EAAA,MAAMykC,EAAW,IAAM,CACFS,EAAA,CAAA,CACpB,EACDllC,QAAMokC,EAAkBpoD,GAAA,CACtBmpD,EAAWnpD,CAAK,CAAA,CACjB,EACDgkB,QAAMqkC,EAAkBroD,GAAA,CACtBopD,EAAWppD,CAAK,CAAA,CACjB,EAED,SAASmpD,EAAWnpD,EAAe,CACjC2xB,EAAE,MAAQ5sB,GAAW/E,EAAO,EAAG4oD,EAAa,KAAK,EACtCS,EAAA,CAAA,CAGb,SAASD,EAAWppD,EAAe,CACjC4xB,EAAE,MAAQ7sB,GAAW/E,EAAO,EAAG6oD,EAAa,KAAK,EACtCQ,EAAA,CAAA,CAGb,SAASA,GAAa,CAChBrd,EAAQ,IACVA,EAAQ,GAAG,SAAS,CAClB,IAAKpa,EAAE,MACP,KAAM6a,EAAM,MAAQ,CAAC9a,EAAE,MAAQA,EAAE,MACjC,SAAU,SAAA,CACX,CACH,CAGI,KAAA,CAAE,UAAAJ,CAAU,EAAIF,GAAW,EAEjC,SAAS63B,GAAqB,CACxB,CAACld,EAAQ,IAAM9f,GAAgB8f,EAAQ,EAAE,IAErCA,EAAA,YAAcA,EAAQ,GAAG,YACzBA,EAAA,YAAcA,EAAQ,GAAG,YACzBA,EAAA,aAAeA,EAAQ,GAAG,aAC1BA,EAAA,aAAeA,EAAQ,GAAG,aAE9Bkc,EAAK,QAAU,YACNiB,EAAA,CAAC53B,EAAU,OAAS42B,EAAO,MAAQC,EAAQ,MAAQz2B,EAAE,OAAS,CAAC,EAGxEu2B,EAAK,QAAU,cACNkB,EAAA,CAAC73B,EAAU,OAAS42B,EAAO,MAAQE,EAAQ,MAAQz2B,EAAE,OAAS,CAAC,EAG7D03B,EAAA,EACDt5B,EAAA,EAAA,CAGhB,SAASs5B,GAAiB,CACpBtd,EAAQ,KACD0c,EAAA,MAAQjc,EAAM,MACnB,CAAC9iC,GAAcgoB,EAAE,OAASi3B,EAAa,OAAS,GAAI,IAAK,CAAC,EAC1Dj/C,GAAcgoB,EAAE,OAASi3B,EAAa,OAAS,GAAI,IAAK,CAAC,EACpDD,EAAA,MAAQh/C,GAAcioB,EAAE,OAASi3B,EAAa,OAAS,GAAI,IAAK,CAAC,EAC5E,CAGF,SAAStd,EAAage,EAA6B,CACzCtmB,EAAA,EACRqlB,GAAA,MAAAA,EAAWiB,EAAM,CAGnB19B,EAAAA,UAAU,IAAM,CACNoX,EAAA,EAEJklB,EAAO,OACAvY,EAAAwY,EAAQ,MAAOC,EAAQ,KAAK,CACvC,CACD,EAEK,MAAAplB,EAAUpwB,GAAc,IACrB,IAAI,QAAyBu6B,GAAA,CAC9B,OAAOmb,GAAoB,YACbA,EAAA,EAGCW,EAAA,EACnB,WAAW,IAAM,CACX,OAAOV,GAAmB,YACbA,EAAA,EAGTpb,EAAA,GACP,CAAC,CAAA,CACL,CACF,EAED,SAASwC,EAAStd,EAAiBC,EAAiB0gB,EAAW,IAAK,CAC3D,OAAA,IAAI,QAAyB7F,IAAA,CAC7BpB,EAAQ,MAET,CAAC8c,EAAc,OAAS,KAAK,IAAIn3B,EAAE,MAAQW,CAAO,EAAI,OACxDA,EAAUX,EAAE,QAGV,CAACo3B,EAAc,OAAS,KAAK,IAAIn3B,EAAE,MAAQW,CAAO,EAAI,OACxDA,EAAUX,EAAE,OAGEqkB,GAAA,CACd,SAAAhD,EACA,GAAIjH,EAAQ,GACZ,MAAOra,EAAE,MACT,IAAK5sB,GAAWutB,EAAS,EAAGs2B,EAAa,KAAK,EAC9C,MAAOh3B,EAAE,MACT,IAAK7sB,GAAWwtB,EAAS,EAAGs2B,EAAa,KAAK,EAC9C,SAAUzb,EAAA,CACX,EAAA,CACF,CAAA,CAGH,SAAS0C,EAASld,EAAgBC,EAAgBogB,EAAW,IAAK,CAChE,OAAOrD,EAASje,EAAE,MAAQiB,EAAQhB,EAAE,MAAQiB,EAAQogB,CAAQ,CAAA,CAG9D,SAASuW,EAAgBv5C,EAAsBgjC,EAAmBva,EAAS,EAAG,CAO5E,GANI,CAACsT,EAAQ,KAET,OAAO/7B,GAAO,WACXA,EAAA+7B,EAAQ,GAAG,cAAc/7B,CAAE,GAG9B,CAACpP,GAAUoP,CAAE,GAAG,OAAO,QAAQ,QAAQ,EAErC,MAAAgiC,GAAcjG,EAAQ,GAAG,sBAAsB,EAC/Cyd,GAASx5C,EAAG,sBAAsB,EAExC,IAAIqiB,EAAU,EACVC,GAAU,EAEV,OAAA21B,EAAK,QAAU,aACP51B,EAAAm3B,GAAO,KAAOxX,GAAY,KAAOvZ,GAGzCwvB,EAAK,QAAU,eACP31B,GAAAk3B,GAAO,IAAMxX,GAAY,IAAMvZ,GAGpCkX,EAAStd,EAASC,GAAS0gB,CAAQ,CAAA,CAGrC,MAAA,CACL,UAAAwV,EAEA,QAAAzc,EACA,EAAAra,EACA,EAAAC,EACA,SAAA82B,EACA,SAAAC,EACA,aAAAC,EACA,aAAAC,EACA,cAAAC,EACA,cAAAC,EACA,WAAAC,EACA,WAAAC,EAEA,aAAc/1C,GAASq4B,CAAY,EACnC,WAAA4d,EACA,WAAAC,EACA,eAAAE,EACA,QAAArmB,EACA,SAAA2M,EACA,SAAAE,EACA,gBAAA0Z,EACA,cAAAx5B,CACF,CACF,CC/O0C,SAAA0sB,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAK1C,MAAMylD,GAAchjC,OAAOC,OAA2B,CAAC,aAAc,WAAY,MAAM,CAAC,EAElFgjC,GAAa,YACbC,GAAW,UAEF/iC,qBAAgB,CAC7BjX,KAAM,eACNi6C,aAAc,GACdzyC,MAAOkwC,GACPrK,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEC,MAAAA,EAAO1L,MAAAA,EAAO4hC,OAAAA,CAAO,EAAG,CACtC,MAAM9lC,EAAQiM,GAAS,eAAgB0D,EAAQ,CAC7C+iC,YAAa,KACbtV,YAAa,KACbuV,YAAa,KACb7B,KAAM,CACJjhC,QAAS,WACTtD,UAAW3jB,IAAS0pD,GAAYniC,SAASvnB,EAAK,CAC/C,EACDu1B,MAAO,GACPC,OAAQ,GACRvK,SAAU,GACV++B,QAAS,GACT5B,QAAS,CACPnhC,QAAS,EACTC,OAAQ,EACT,EACDmhC,QAAS,CACPphC,QAAS,EACTC,OAAQ,EACT,EACD+iC,QAAS,GACTC,QAAS,GACTC,QAAS,KACTC,SAAU,KACVC,SAAU,GACVC,YAAa,IACbnC,OAAQ,GACRoC,YAAa,KACbC,YAAa,GACbC,UAAW,MACXC,YAAa,GACbC,WAAY,EACd,CAAC,EAEKC,EAAU/4C,GAAoB,EAE9B8V,EAAKtF,GAAc,eAAe,EAClC,CAAEoqB,MAAAA,CAAO,EAAGX,GAAQ,EACpB+e,EAAW/hC,EAAG,IAAC,EAAK,EACpB89B,EAAY99B,EAAG,IAAC,EAAK,EAErBuF,EAAUvF,EAAAA,IAAkB,EAC5BgiC,EAAOhiC,EAAAA,IAAqC,EAC5CiiC,EAAOjiC,EAAAA,IAAqC,EAElD,IAAIkiC,EAAc,GAElB,KAAM,CACJvC,UAAAA,EAEAzc,QAAAA,EACAra,EAAAA,EACAC,EAAAA,EACA82B,SAAAA,EACAC,SAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,WAAAA,EAEA1d,aAAAA,EACA4d,WAAAA,EACAC,WAAAA,EACAE,eAAAA,EACArmB,QAAAA,EACA2M,SAAAA,EACAE,SAAAA,EACA0Z,gBAAAA,EACAx5B,cAAAA,CACD,EAAGi4B,GAAiB,CACnBC,KAAM1S,EAAAA,MAAMp+B,EAAO,MAAM,EACzB6T,SAAUuqB,EAAAA,MAAMp+B,EAAO,UAAU,EACjC+wC,OAAQ3S,EAAAA,MAAMp+B,EAAO,QAAQ,EAG7BgxC,QAAS5S,EAAAA,MAAMp+B,EAAO,SAAS,EAC/BixC,QAAS7S,EAAAA,MAAMp+B,EAAO,SAAS,EAC/BkxC,SAAUl5C,IAAS,CACjBmW,EAAUnO,EAAMkxC,SAAUl5C,EAAK,CAChC,EAEDo5C,eAAgBA,IAAM,CACpByC,EAAe,EAEVD,IACHA,EAAc,GACdE,GAAe,EAEnB,CACF,CAAC,EAEKC,EAAaC,EAAAA,gBAAgB,CACjCC,SAAAA,GACApoB,QAAAA,EACA2M,SAAAA,EACAE,SAAAA,EACA0Z,gBAAAA,EACA8B,aAAAA,EACF,CAAC,EAGKC,EAAUziC,EAAG,IAAC,EAAK,EAEnB0iC,GAAc/yC,EAAAA,SAAS,IAEzBrB,EAAM8wC,OAAS,SACd3nD,GAAO6W,EAAMizC,QAAQ,GAAK,CAACjzC,EAAMizC,SAAW,OAC3CjzC,EAAM8wC,OAAS,cAAgBY,EAAc9oD,OAC5CoX,EAAM8wC,OAAS,YAAca,EAAc/oD,MAEjD,EAEDgkB,QAAM,CAAC,IAAM5M,EAAMizC,SAAU,IAAMjzC,EAAMkzC,YAAa7B,CAAS,EAAG,IAAM,CACtEgD,GAAc,EACd/gC,EAAAA,SAASwgC,EAAa,CACxB,CAAC,EAED,IAAIQ,GACAC,EACAC,GAEJ5/B,EAAAA,gBAAgBy/B,EAAY,EAE5B,SAASP,IAAgB,CAGvB,GAFAO,GAAc,EAEV,CAACD,GAAYxrD,OAAS,CAACyoD,EAAUzoD,MAAO,OAE5C,MAAMkoD,GAAO9wC,EAAM8wC,KACb/R,GAAW+R,KAAS,aAAe,cAAgB,eACnDn+C,GAAQm+C,KAAS,aAAeU,EAAeC,EAC/C75C,GAAOk5C,KAAS,aAAev2B,EAAIC,EACnCi6B,GAAUz0C,EAAMkzC,YAAc,GAAK,GAAKlzC,EAAMkzC,YAC9CwB,GAAY5D,KAAS,aAAeiB,EAAaC,EAEvD,IAAI2C,GAAY,GAEZ,OAAO30C,EAAMizC,UAAa,WAC5B0B,GAAatD,EAAUzoD,MAAMm2C,EAAQ,EAAI/+B,EAAMizC,SAAY,IAG7D,MAAMxqB,GAASA,IAAM,CACnBisB,GAAU98C,GAAKhP,MAAQ+rD,EAAS,EAE5B/8C,GAAKhP,OAAS+J,GAAM/J,OACtB8rD,GAAU/hD,GAAM/J,KAAK,EACrBurD,EAAQvrD,MAAQ,GAEhBspD,EAAgB,EAChBt5B,EAAe,EACfi7B,EAAe,EAEfW,GAAWtK,WAAW,IAAM,CAC1B1R,EAAS,EAAG,EAAG,GAAG,EAElB+b,EAAarK,WAAW,IAAM,CAC5BiK,EAAQvrD,MAAQ,GAChB6/B,GAAQ,CACV,EAAG,IAAMgsB,EAAO,CACjB,EAAEA,EAAO,IAEVvC,EAAgB,EAChBt5B,EAAe,EACfi7B,EAAe,EAEXM,EAAQvrD,OACVgsD,sBAAsBnsB,EAAM,EAGjC,EAED6rB,GAAYpK,WAAW,IAAM,CAC3BiK,EAAQvrD,MAAQ,GAChB6/B,GAAQ,CACT,EAAEgsB,EAAO,CACZ,CAEA,SAASJ,IAAe,CACtBF,EAAQvrD,MAAQ,GAEhBisD,aAAaP,EAAS,EACtBO,aAAaN,CAAU,EACvBM,aAAaL,EAAQ,CACvB,CAGA,MAAM5wC,GAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAG,EACN8jB,EAAGE,GAAGzQ,EAAM8wC,IAAI,EAChB,CACE,CAACvgC,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAG,WAAW,CAAC,EAAG++B,EAAU5mD,MAChC,CAAC2nB,EAAGE,GAAG,WAAW,CAAC,EAAGgjC,EAAS7qD,KACjC,CAAC,CAEJ,EACK+nB,GAAQtP,EAAAA,SAAS,IAAM,CAC3B,KAAM,CAAE8c,MAAAA,GAAOC,OAAAA,EAAO,EAAIpe,EAE1B,MAAO,CACLme,MAAOA,GACH,OAAOA,IAAU,SACf22B,OAAO5rD,MAAM4rD,OAAO32B,EAAK,CAAC,EACxBA,GACA,GAAG22B,OAAO32B,EAAK,CAAC,KAClB,GAAGA,EAAK,KACVlN,OACJmN,OAAQA,GACJ,OAAOA,IAAW,SAChB02B,OAAO5rD,MAAM4rD,OAAO12B,EAAM,CAAC,EACzBA,GACA,GAAG02B,OAAO12B,EAAM,CAAC,KACnB,GAAGA,EAAM,KACXnN,MACL,CACH,CAAC,EACK43B,GAAexnC,EAAAA,SAAS,IAAM,QAClC,MAAO,EAACrB,GAAAA,EAAM2yC,cAAN3yC,YAAAA,GAAmB+Q,MAAO/Q,EAAM0yC,YAAaniC,EAAGg8B,GAAG,SAAS,CAAC,CACvE,CAAC,EACKwG,GAAU1xC,EAAAA,SAAS,IAAO+yC,GAAYxrD,MAAQ,EAAIoX,EAAM+yC,OAAQ,EAEhEgC,EAAarjC,EAAG,IAAC,EAAK,EAE5B,SAASsjC,GAAe,CACtBD,EAAWnsD,MAAQ,GACnB0qB,EAAAA,SAASuY,CAAO,EAChB+oB,sBAAsB,IAAM,CAC1BG,EAAWnsD,MAAQ,EACrB,CAAC,CACH,CAEA,IAAI4rB,EAEJ,SAASygC,GAAiB,CACpB,CAACzsD,IAAY,CAAC6oD,EAAUzoD,QAE5B4rB,EAAW,IAAI0gC,iBAAiBF,CAAY,EAC5CxgC,EAASy7B,QAAQoB,EAAUzoD,MAAO,CAChCusD,UAAW,EACb,CAAC,EACH,CAEA,SAASC,GAAgB,CACvB5gC,GAAAA,MAAAA,EAAUuD,aACVvD,EAAWvD,MACb,CAEArE,EAAK,MACHykC,EACA,IAAM,CACJ+D,EAAe,EACfH,EAAgB,CAClB,EACA,CAAExL,UAAW,EAAK,CACpB,EACA78B,EAAK,MAAC8kC,EAAe9oD,IAAS,CAC5BulB,EAAUnO,EAAMq1C,iBAAkBzsD,EAAK,CACzC,CAAC,EACDgkB,EAAK,MAAC+kC,EAAe/oD,IAAS,CAC5BulB,EAAUnO,EAAMs1C,iBAAkB1sD,EAAK,CACzC,CAAC,EAEDk9C,EAAO,CACLvrB,EAAAA,EACAC,EAAAA,EACA82B,SAAAA,EACAC,SAAAA,EACAC,aAAAA,EACAC,aAAAA,EAEAG,WAAAA,EACAC,WAAAA,EACAH,cAAAA,EACAC,cAAAA,EAEA16B,QAAAA,EACA2d,QAASyc,EACTqC,KAAAA,EACAC,KAAAA,EAEA9nB,QAAAA,EACA2M,SAAAA,EACAE,SAAAA,EACA0Z,gBAAAA,EACA8B,aAAAA,GACAqB,gBAAAA,GACAC,gBAAAA,GACAC,kBAAAA,GACAC,qBAAAA,EACF,CAAC,EAED,SAASC,GAAmB,CAC1B,MAAO,CACLz6B,SAAUma,EAAMzsC,MAAQ,GAAK,GAAK2xB,EAAE3xB,MACpCuyB,QAASX,EAAE5xB,MACX0oD,SAAUA,EAAS1oD,MACnB2oD,SAAUA,EAAS3oD,KACpB,CACH,CAEA,SAASirD,GAAgB,YACvBH,GAAAA,EAAK9qD,QAAL8qD,MAAAA,GAAYvb,aAAamZ,EAAS1oD,QAClC+qD,GAAAA,EAAK/qD,QAAL+qD,MAAAA,GAAYxb,aAAaoZ,EAAS3oD,MACpC,CAEA,SAASumD,GAAgBj2C,GAAmB,CAC1C,GAAI,CAAC8G,EAAM4yC,SAAW15C,GAAM08C,SAAW,GAAKn9C,GAC1C,MAAO,GAGTo9C,GAAkB38C,EAAK,CACzB,CAGA,IAAI48C,EAAiB,EACjBC,GAAiB,EAGjBC,GAAkB,EAClBC,GAAkB,EAEtB,SAASJ,GAAkB38C,GAAmB,CAC5C,GAAI,CAACw4C,EAAc9oD,OAAS,CAAC+oD,EAAc/oD,MACzC,MAAO,GAGTstD,GAAe,EAEfJ,EAAiBv7B,EAAE3xB,MACnBmtD,GAAiBv7B,EAAE5xB,MACnBotD,GAAkB98C,GAAMgiB,QACxB+6B,GAAkB/8C,GAAMiiB,QAExBywB,SAASuK,iBAAiB5D,GAAY6D,EAAiB,EACvDxK,SAASuK,iBAAiB3D,GAAU6D,EAAe,EAEnDloC,EAAUnO,EAAMs2C,cAAeX,GAAkB,CACnD,CAEA,SAASS,GAAkBl9C,GAAmB,CAC5CA,GAAM0xC,gBAAiB,EACvB1xC,GAAMkzC,eAAgB,EAEtBoD,EAAU5mD,MAAQ,GAEd8oD,EAAc9oD,OAChBmpD,EAAW+D,GAAkB58C,GAAMgiB,QAAU86B,GAAgB,EAG3DrE,EAAc/oD,OAChBopD,EAAW+D,IAAkB78C,GAAMiiB,QAAU86B,GAAgB,EAG/D/D,EAAgB,EAChBt5B,EAAe,EACfi7B,EAAe,EACf0C,GAAgBv2C,EAAM8wC,IAAI,CAC5B,CAEA,SAASuF,IAAkB,CACzBzK,SAAS4K,oBAAoBjE,GAAY6D,EAAiB,EAC1DxK,SAAS4K,oBAAoBhE,GAAU6D,EAAe,EAEtDloC,EAAUnO,EAAMy2C,YAAad,GAAkB,EAC/C7B,GAAe,CACjB,CAEA,SAAS4C,GAAYx9C,GAAmBrQ,GAAiC,CACvE,MAAM8tD,GAAmBhF,EAAc/oD,OAASC,KAAS,WACnD+tD,GAAqBlF,EAAc9oD,OAASC,KAAS,aACrDguD,GAAO39C,GAAMuiB,OAAS,EAAI,EAAI,GAIpC,GAFAtN,EAAUnO,EAAM82C,QAAS59C,GAAOrQ,EAAI,EAEhC8tD,IAAoBC,GAAoB,CAC1C,MAAMG,GAAWJ,GAAmBlF,EAAa7oD,MAAQ4oD,EAAa5oD,MAChE6/B,GAASkuB,GAAmBn8B,EAAE5xB,MAAQ2xB,EAAE3xB,MAE9C,GAAIiuD,GAAO,EAAIpuB,GAASsuB,GAAWtuB,GAAS,EAC1CvvB,OAAAA,GAAM0xC,gBAAiB,EAEhB,EAEX,CACF,CAEA,SAASzS,GAAaj/B,GAAgB,QACpC,GAAI,CAACm4C,EAAUzoD,MAAO,OAEtBsQ,GAAM0xC,gBAAiB,EAEvB,MAAM/hD,KAAOwoD,GAAAA,EAAUzoD,QAAVyoD,YAAAA,GAAiB2F,cAAez8B,EAAE3xB,MAAQ,aAAe,WAEtE4xB,EAAE5xB,MAAQyoD,EAAUzoD,MAAMuxC,UAC1B5f,EAAE3xB,MAAQyoD,EAAUzoD,MAAMouD,WAE1B9E,EAAgB,EAChBt5B,EAAe,EACfi7B,EAAe,EACf0C,GAAgB1tD,EAAI,CACtB,CAEA,SAASqtD,IAAgB,CACvB7B,GAAc,CAChB,CAEA,SAAS4C,GAAqBpuD,GAAiC,CAC7D4qD,EAAS7qD,MAAQ,GACjBstD,GAAe,EACf/nC,EAAUnO,EAAMk3C,iBAAkB,CAChC,GAAGvB,EAAkB,EACrB9sD,KAAAA,EACF,CAAC,CACH,CAEA,SAASsuD,GAAmBtuD,GAAiC,CAC3D4qD,EAAS7qD,MAAQ,GACjBkrD,GAAe,EACf3lC,EAAUnO,EAAMo3C,eAAgB,CAC9B,GAAGzB,EAAkB,EACrB9sD,KAAAA,EACF,CAAC,CACH,CAEA,SAASwuD,GAAiB/mD,GAAiB,CACzCghD,EAAS1oD,MAAQ0H,GACjByhD,EAAYzhD,GAAUkhD,EAAa5oD,MAAS,GAAG,EAC/CgwB,EAAe,EACfzK,EAAUnO,EAAMs3C,YAAa,CAC3B,GAAG3B,EAAkB,EACrB9sD,KAAM,YACR,CAAC,EACD0tD,GAAgB,YAAY,CAC9B,CAEA,SAASgB,GAAiBjnD,GAAiB,CACzCihD,EAAS3oD,MAAQ0H,GACjB0hD,EAAY1hD,GAAUmhD,EAAa7oD,MAAS,GAAG,EAC/CgwB,EAAe,EACfzK,EAAUnO,EAAMs3C,YAAa,CAC3B,GAAG3B,EAAkB,EACrB9sD,KAAM,UACR,CAAC,EACD0tD,GAAgB,UAAU,CAC5B,CAEA,SAASA,GAAgB1tD,GAAwB,CAC/CslB,EAAUnO,EAAMwuC,SAAU,CACxB,GAAGmH,EAAkB,EACrB9sD,KAAAA,EACF,CAAC,EACD2qD,EAAQxU,KAAK,SAAU,CACrB,GAAG2W,EAAkB,EACrB9sD,KAAAA,EACF,CAAC,CACH,CAEA,SAASorD,IAAW,CAClB,KAAM,CAAE/4B,QAAS81B,GAAS71B,QAAS81B,GAASK,SAAAA,GAAUC,SAAAA,EAAU,EAAGoE,EAAkB,EAErF,MAAO,CACL3E,QAAAA,GACAC,QAAAA,GACAK,SAAAA,GACAC,SAAAA,GACAG,cAAeA,EAAc9oD,MAC7B+oD,cAAeA,EAAc/oD,KAC9B,CACH,CAEA,SAAS2sD,IAAkB,CACzB,MAAO,CAAC,EAAG/D,EAAa5oD,KAAK,CAC/B,CAEA,SAAS4sD,IAAkB,CACzB,MAAO,CAAC,EAAG/D,EAAa7oD,KAAK,CAC/B,CAEA,SAASsrD,GAAar7C,GAAsBgjC,GAAmBva,GAAS,EAAG,CAOzE,GANI,CAACrK,EAAQruB,QAET,OAAOiQ,IAAO,WAChBA,GAAKoe,EAAQruB,MAAM4uD,cAAc3+C,EAAE,GAGjC,CAACpP,GAAUoP,EAAE,GAAG,OAAO4+C,QAAQzhB,QAAS,EAE5C,MAAM6E,GAAc5jB,EAAQruB,MAAM8+B,sBAAuB,EACnD2qB,GAASx5C,GAAG6uB,sBAAuB,EAEzC,IAAIxM,GAAU,EACVC,GAAU,EAEd,OAAInb,EAAM8wC,OAAS,aACbuB,GAAOjhD,KAAOypC,GAAYzpC,KAAOkwB,GACnCpG,GAAUm3B,GAAOjhD,KAAOypC,GAAYzpC,KAAOkwB,GAClC+wB,GAAOhhD,MAAQwpC,GAAYxpC,MAAQiwB,KAC5CpG,GAAUm3B,GAAOhhD,MAAQwpC,GAAYxpC,MAAQiwB,KAI7CthB,EAAM8wC,OAAS,eACbuB,GAAOjqB,IAAMyS,GAAYzS,IAAM9G,GACjCnG,GAAUk3B,GAAOjqB,IAAMyS,GAAYzS,IAAM9G,GAChC+wB,GAAOzjB,OAASiM,GAAYjM,OAAStN,KAC9CnG,GAAUk3B,GAAOzjB,OAASiM,GAAYjM,OAAStN,KAI5CoX,EAASxd,GAASC,GAAS0gB,EAAQ,CAC5C,CAEA,SAAS4Z,GAAkBhiC,GAAwB,CACjD+/B,EAAQkE,GAAG,SAAUjkC,EAAQ,CAC/B,CAEA,SAASiiC,GAAqBjiC,GAAwB,CACpD+/B,EAAQmE,IAAI,SAAUlkC,EAAQ,CAChC,CAEA,SAASmkC,IAAgB,QACvB,MAAMC,GAAW73C,EAAMqzC,WAAa,MAC9Bv0C,GACJkB,EAAMszC,aAAepvC,EAAM2L,QAAUsB,aAAWjN,EAAO,UAAW6vC,CAAU,EAAEj1C,SAAW,CAAE,EAE7F,OAAAoS,EAAA,YAAA2mC,GAAAnlC,EAAAA,WAEQ1S,EAAM2yC,YACL3yC,EAAMuzC,WAAa3jC,EAAQ,GAAE,CAAA,IAC7ByhC,EAAS,MACPxI,GAAajgD,MAAK,MAClB,EAACoX,GAAAA,EAAM2yC,cAAN3yC,YAAAA,GAAmB2Q,MAAO3Q,EAAMo9B,YAAap9B,EAAMuzC,YAAc5iC,GAAM/nB,KAAK,EAAC,YACxEumD,GAAe,eACXj2C,IACfw9C,GAAYx9C,GAAOA,GAAM4+C,SAAW,aAAe,UAAU,EAAC,SACtD3f,EAAY,CAAA,EAAA,CAAAtoB,QAAAA,IAAA,CAErB3L,EAAMmJ,OAAK6D,EAAAA,YAAA,MAAA,CAAA,MAEDX,EAAGg8B,GAAG,OAAO,EAAC,MACd,CACLpuB,MAAO42B,EAAWnsD,MAAQqoB,OAAY,GAAG2jB,EAAQiI,WAAW,KAC5Dze,OAAQ22B,EAAWnsD,MAAQqoB,OAAY,GAAG2jB,EAAQqH,YAAY,IAChE,CAAC,EAAA,CAAA/qB,EAAA,YAAA,MAAA,CAAA,MAGQX,EAAGg8B,GAAG,aAAa,EAAC,MACpB,CACLpuB,MAAO,GAAGyW,EAAQ9N,WAAW,KAC7B1I,OAAQ,GAAGwW,EAAQ7N,YAAY,IACjC,CAAC,EAAA,CAEA5V,EAAU,WAACjN,EAAO,QAAS6vC,CAAU,CAAC,CAG5C,CAAA,CAAA,EACA7vC,EAAM2L,UACJ7P,EAAMszC,YACHn+B,GAAWrW,EAAQ,EAAExB,IAAI,CAACyV,GAAOjiB,KACjCogB,EAAAA,YAAAgjB,GAAA,CAAA,IACuBnhB,GAAMhqB,KAAO+H,GAAK,YAAaqjC,CAAY,EAAA,CAAAtkB,QAC7DA,IAAMkD,EAAK,CAAA,CAGjB,EACC5B,EAAAA,WAAWjN,EAAO,UAAW6vC,CAAU,EAAE,CAAA,CAAA,CAGrD,CAEA,MAAO,IAAM,WAAA,IAAAgE,GACX,GAAI/3C,EAAMuzC,WAAY,CAAA,IAAAxG,GACpB,OAAA77B,EAAAA,YAAAgjB,GAAA,CAAA,YAAkCC,CAAYmR,EAAAA,GAAAyH,GAAG6K,GAAe,CAAA,EAAA7K,GAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,EAAA,CAAA,CAAA,CAClE,CAEA,OAAA77B,cAAA,MAAAwB,EAAA,WAEQ9C,EAAK,CAAA,IACJqH,EAAO,MACL,CAACrT,GAAUhb,MAAOgnB,EAAMmB,KAAK,EAAC,MAC9B,CAACJ,GAAM/nB,MAAOgnB,EAAMe,KAAK,CAAQ,CAAA,EAAA,EAEvCoE,GAAAA,GAAiB7Q,EAAO,CAAC,cAAe,YAAY,CAAC,IAArD6Q,YAAAA,KAA0D7D,EAAA,YAAAgjB,GAAA,CAAA,YAChCC,CAAYmR,EAAAA,GAAAyS,GAAGH,GAAe,CAAA,EAAAG,GAAA,CAAAloC,QAAAA,IAAA,CAAAkoC,EAAA,CAAA,CAAA,EACxD/3C,EAAM6yC,SAAO3hC,EAAAA,YAAA8mC,GAAA,CAAA,IAELtE,EAAI,QAAA,GAAA,UAEE,SAAQ,MACZ,CAACnjC,EAAGm8B,IAAI,MAAO,YAAY,EAAG1sC,EAAMgzC,QAAQ,EAAC,KAC9CD,GAAQnqD,MAAK,aACPgpD,EAAWhpD,MAAK,SAClB,CAAC8oD,EAAc9oD,MAAK,OACtBoX,EAAM+wC,OAAM,SACV/wC,EAAMmzC,YAAW,YAChBnzC,EAAMozC,YAAW,cACbkD,IAAMW,GAAqB,YAAY,EAAC,SAC7CI,GAAgB,YACbZ,IAAMU,GAAmB,YAAY,CAAC,EAAA,IAAA,EAGtDn3C,EAAM8yC,SAAO5hC,EAAAA,YAAA8mC,GAAA,CAAA,IAELrE,EAAI,QAAA,GAAA,UAEE,QAAO,MACX,CAACpjC,EAAGm8B,IAAI,MAAO,UAAU,EAAG1sC,EAAMgzC,QAAQ,EAAC,KAC5CD,GAAQnqD,MAAK,aACPipD,EAAWjpD,MAAK,SAClB,CAAC+oD,EAAc/oD,MAAK,OACtBoX,EAAM+wC,OAAM,SACV/wC,EAAMmzC,YAAW,YAChBnzC,EAAMozC,YAAW,cACbkD,IAAMW,GAAqB,UAAU,EAAC,SAC3CM,GAAgB,YACbd,IAAMU,GAAmB,UAAU,CAAC,EAAA,IAAA,GAGpDpiC,GAAAA,GAAiB7Q,EAAO,CAAC,cAAe,YAAY,CAAC,IAArD6Q,YAAAA,IAA0D,CAAA,CAGhE,CACH,CACF,CAAC,ECjpBYkjC,GAAc/qC,GAAU,CACnC,MAAOoB,GACP,MAAO,CACL,KAAM,OACN,QAAS,EACX,EACA,SAAU,CACR,KAAM,QACN,QAAS,EACX,EACA,QAAS,CACP,KAAM,QACN,QAAS,EACX,EACA,MAAO,CACL,KAAM,OACN,QAAS,EACX,EACA,QAAS,CACP,KAAM,QACN,QAAS,EACX,EACA,QAAS,CACP,KAAM,QACN,QAAS,EACX,EACA,SAAU,CACR,KAAM,QACN,QAAS,EACX,EACA,SAAUJ,EAAU,CACtB,CAAC,EAIYgqC,GAAmBhrC,GAAU,CACxC,MAAO,CACL,KAAM,OACN,QAAS,EACX,EACA,QAAS,CACP,KAAM,QACN,QAAS,EAAA,CAEb,CAAC,qHCvCD,MAAMlN,EAAQuR,EAERhB,EAAKtF,GAAc,QAAQ,EAC3BrH,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAG,CAACvQ,EAAM,UAAYA,EAAM,SAC9C,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,OAC7B,EACD,EAED,SAASu+B,GAAe,CAClBv+B,EAAM,UAEVmO,EAAUnO,EAAM,QAAS,CAAA,6BAKzBqS,EAAA,mBAUK,KAAA,CATH,IAAI,UACH,uBAAOzO,EAAS,KAAA,EAChB,MAAOoM,EAAK,OAAI,OACjB,KAAK,SACJ,gBAAekC,EAAAA,MAAW1X,EAAA,EAACqZ,EAAQ,QAAA,EACnC,gBAAeskC,EAAQ,SACvB,QAAO5Z,CAAA,GAERhsB,EAAAA,WAAiCC,sBAAjC,IAAiC,CAAxBvC,kBAAAA,EAAAA,gBAAAA,EAAAA,OAASrnB,EAAK,KAAA,EAAA,CAAA,gBCpCdwvD,GAAgBjrC,GAAW,CACtC,MAAO,MACP,IAAK,OACL,SAAUH,GACV,OAAQD,EACR,SAAU,OACV,aAAcmB,EAAkC,EAChD,SAAUA,EAAuC,CACnD,CAAC,ECPsC,SAAAo3B,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAEvC,SAA+B4iB,kBAAA,CAC7BjX,KAAM,WACNi6C,aAAc,GACdzyC,MAAOo4C,GACPvS,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEC,MAAAA,EAAO1L,MAAAA,EAAO4hC,OAAAA,CAAAA,EAAU,CAChC9lC,MAAAA,EAAQiM,GAAS,WAAY0D,EAAQ,CACzCjQ,MAAO,CACLmQ,QAAS,KACTC,OAAQ,EACV,EACAuoC,IAAK,MACLC,SAAU,GACVxoC,OAAQ,GACRyoC,SAAU,CAAA,CACX,EAEKhoC,EAAKtF,GAAc,UAAU,EAC7ButC,EAAY9mC,MAAI,CAAC,EAEjBuF,EAAUvF,EAAAA,IAAiB,EAC3BlG,EAAUkG,EAAAA,IAAiB,EAC3B+0B,EAAS/0B,EAAAA,IAAiB,EAE1B9N,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAAA,EACH8jB,EAAGo4B,GAAG,MAAM,EACZ,CACE,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMu4C,SAAW,CAAA,CACrC,CAEJ,EACKE,EAAap3C,EAAAA,SAAS,IACnBrB,EAAMs4C,SAAYt4C,EAAMs4C,WAAa,GAAO,SAAWt4C,EAAMs4C,SAAY,EACjF,EAEK1rC,QAAA,CAAC,IAAM5M,OAAAA,OAAAA,EAAAA,EAAMN,QAANM,YAAAA,EAAazV,QAAQ,IAAMyV,EAAMu4C,QAAQ,EAAG,IAAM,CAC7DjlC,EAAAA,SAASuY,CAAO,CAAA,CACjB,EAEMia,EAAA,CAAEja,QAAAA,CAAAA,CAAS,EAElBpX,EAAAA,UAAUoX,CAAO,EAER6sB,SAAAA,EAAc7/C,EAAiB8/C,EAAe,CACjDF,EAAW7vD,MACNiQ,EAAAA,EAAG+/C,gBAAgBH,EAAW7vD,KAAK,EAAIiQ,EAAGizC,aAAa2M,EAAW7vD,MAAO,EAAE,EAE9E+vD,EACF9/C,EAAG8X,MAAMyU,QAAU,GAEnBvsB,EAAG8X,MAAMyU,QAAU,MAEvB,CAGF,SAASyzB,EAAwBhgD,EAAiB,CAC1C8X,MAAAA,EAAQ0U,iBAAiBxsB,CAAE,EAC3BigD,EAAa/O,WAAWp5B,EAAMmoC,UAAU,GAAK,EAC7CC,EAAchP,WAAWp5B,EAAMooC,WAAW,GAAK,EAErD,OAAOD,EAAaC,CAAAA,CAGtB,SAASC,EAAyBC,EAA8C,CAC9E,MAAMtoC,EAAQsoC,aAAqBC,QAAU7zB,iBAAiB4zB,CAAS,EAAIA,EACrE9oB,EAAc4Z,WAAWp5B,EAAMwf,WAAW,GAAK,EAC/CF,EAAe8Z,WAAWp5B,EAAMsf,YAAY,GAAK,EAEvD,OAAOE,EAAcF,CAAAA,CAGvB,SAASkpB,EAAkBtgD,EAAiB,CACnCA,OAAAA,EAAGiuB,YAAc+xB,EAAwBhgD,CAAE,CAAA,CAGpD,IAAIugD,EAAe,GACfC,EAAgBb,EAAU5vD,MAE9B,SAASijC,GAAU,CACjB,MAAMytB,EAAY9tC,EAAQ5iB,MAE1B,GAAI,CAACquB,EAAQruB,OAAS,CAAC0wD,EAAW,OAElCZ,EAAcY,EAAW,EAAI,EAEvBx6C,MAAAA,EAAWmY,EAAQruB,MAAMkW,SACzBy6C,EAAaz6C,EAASvU,OACtBivD,EAAW/S,EAAO79C,MAClB2B,EAASgvD,GAAcC,EAAW,EAAI,GAE5C,IAAIj3B,EAAW,GAEXviB,GAAAA,EAAMu4C,SAAW,EAAG,CACtB,QAASnuD,EAAI,EAAGA,EAAIG,EAAQ,EAAEH,EAAG,CACzB4U,MAAAA,EAAQF,EAAS1U,CAAC,EAExB4U,EAAM2R,MAAMyU,QAAUh7B,EAAI4V,EAAMu4C,SAAW,GAAK,MAAA,CAG9Cv4C,EAAMu4C,UAAYhuD,GACpBmuD,EAAcY,EAAW,EAAK,EAE9Bd,EAAU5vD,MAAQ,IAERA,EAAAA,MAAQ2B,EAASyV,EAAMu4C,SACjCh2B,EAAWi2B,EAAU5vD,MAAQ,GAG/B6wD,EAAYl3B,CAAQ,EACpB,MAAA,CAGI5R,MAAAA,EAAQ0U,iBAAiBpO,EAAQruB,KAAK,EACtC8wD,EAAeziC,EAAQruB,MAAMk+B,YAAckyB,EAAyBroC,CAAK,EACzEgpC,EAAM5P,WAAWp5B,EAAMipC,SAAS,GAAK,EACrCC,EAAgBhB,EAAwBS,CAAS,EACjDQ,EAAwB,CAAE,EAEhC,IAAIC,EAAaP,EAAWA,EAAS1yB,YAAc+xB,EAAwBW,CAAQ,EAAIG,EAAM,EAE7F,QAASvvD,EAAI,EAAGA,EAAIG,EAAQ,EAAEH,EAAG,CAC/B,GAAIA,EAAI,EAAG,SAEL4U,MAAAA,EAAQF,EAAS1U,CAAC,EAExB,GAAIm4B,EAAU,CACZm2B,EAAc15C,EAAO,EAAK,EAC1B,QAAA,MAEA05C,EAAc15C,EAAO,EAAI,EAGrBg7C,MAAAA,EAAab,EAAkBn6C,CAAK,EAAI26C,EAK9C,GAHcK,GAAAA,EACdF,EAAY1vD,CAAC,EAAI4vD,EAEbD,EAAaL,GACf,QAASO,EAAI7vD,EAAG6vD,GAAK,EAAG,EAAEA,EAIxB,GAHAzB,EAAU5vD,MAAQ2B,EAAS0vD,EAC3BF,GAAcD,EAAYG,CAAC,EAEvBF,EAAaT,EAAUxyB,YAAc+yB,GAAiBH,GAAgB,CAACO,EAAG,CACjE13B,EAAA,GACXn4B,EAAI6vD,EAAI,EAEJT,IACO7oC,EAAAA,MAAMupC,SACb9vD,IAAM,GAAK,GAAGsvD,EAAeJ,EAAUxyB,WAAW,KAAO,IAG7D,KAAA,EAGN,CAGF2yB,EAAYl3B,CAAQ,CAAA,CAGtB,SAASk3B,EAAYl3B,EAAmB,CAClC82B,IAAkBb,EAAU5vD,QAC9BywD,EAAgBb,EAAU5vD,MAChBoX,EAAAA,EAAMm6C,aAAc3B,EAAU5vD,KAAK,GAG/C4iB,EAAQ5iB,OAAS8vD,EAAcltC,EAAQ5iB,MAAO25B,CAAQ,EAElDA,IAAa62B,IACA72B,EAAAA,EACLviB,EAAAA,EAAMo6C,SAAU73B,CAAQ,EACpC,CAGF,MAAO,IAAM,OAAAwqB,IAAAA,EACLsN,MAAAA,EAAar6C,EAAMq4C,KAAO,MAC1BiC,EAAWp2C,EAAM2L,QACjB0qC,EAAav6C,EAAM8P,OACnB0qC,IAAet2C,EAAAA,EAAMsH,UAANtH,YAAAA,EAAAA,KAAAA,EAAgB,CAAErR,MAAO2lD,EAAU5vD,KAAAA,GAAS,KAAM,KAEjEwqB,EAASA,IAAAlC,EAAAA,YAAAmpC,EAAA3nC,EAAAA,WACE9C,EAAK,CAAA,IAAOqH,EAAO,MAASrT,EAAUhb,KAAAA,CAAK,EAAA,CAAAinB,QAAAA,IACvDyqC,CAAAA,GAAYtxD,GAAUgX,EAAMN,KAAK,EAC9BM,EAAMN,MAAMpC,IAAI,CAACvF,EAAMjH,IAAU,CACjC,MAAMiiB,EAAQunC,EAAS,CAAEviD,KAAAA,EAAMjH,MAAAA,CAAO,CAAA,EAAE,CAAC,EAEzC,OAAIypD,GACFxnC,EAAMhqB,IAAM+H,EAELiiB,GAGT7B,EAAAA,YAAAgjB,GAAA,CAAA,IACuBpjC,EAAK,SAAY+6B,CAAAA,EAAO,CAAAhc,QAC1CA,IAAMkD,CAAAA,CAAK,CAGjB,CAAA,EACCunC,GAAAA,YAAAA,IAAYppC,cAAA,OAAA,CAAA,IACJ1F,CAAAA,EAAUgvC,CAAAA,CAAY,GACjCt2C,EAAMuiC,OAAMv1B,cAAAgjB,GAAA,CAAA,SACerI,CAAAA,EAAO,CAAAhc,QAAAA,IAAA,CAAAqB,EAAAA,YAAA,MAAA,CAAA,IACrBu1B,EAAM,MAASl2B,EAAGg8B,GAAG,QAAQ,CAAA,EAAC,CACrCroC,EAAMuiC,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,EAGjB,IAAI,CAAA,CAEX,EAOD,OAAAv1B,EAAAA,YAAAgjB,GAAA,CAAA,SAAiCrI,GAAOyZ,GAAAyH,EAAG35B,EAAQ,CAAA,EAAA25B,EAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,CAAA,CAAA,CAAA,CACrD,CAAA,CAEJ,CAAC,+HCzNC56B,EAAA,YAEWsoC,WAAA,CAFA,GAAIlpC,EAAE,IAAA,OAAa,UAAWA,EAAE,EAAA,GACzCgB,aAAaC,EAAA,OAAA,SAAA,4BCRJkoC,GAAcvtC,GAAW,CACpC,QAASJ,EACT,MAAOA,EACP,GAAI,OACJ,WAAY,OACZ,OAAQA,EACR,KAAM,OACN,cAAemB,EAAiC,EAChD,QAASA,EAAiC,EAC1C,aAAcA,EAAiC,EAC/C,iBAAkBA,EAAiC,EACnD,cAAeA,EAAiC,EAChD,QAASA,EAAiC,EAC1C,aAAcA,EAAiC,EAC/C,iBAAkBA,EAAiC,CACrD,CAAC,ECiBDysC,GAAelrC,kBAAgB,CAC7B,KAAM,SACN,WAAY,CACVmrC,OAAAA,EACF,EACA,aAAc,GACd,MAAOF,GACP,MAAO,CAAC,EACR,MAAM/qC,EAAQ,CACN,MAAAY,EAAKtF,GAAc,QAAQ,EAC3BjL,EAAQiM,GAAS,SAAU0D,EAAQ,CACvC,QAAS,GACT,MAAO,GACP,GAAI,GACJ,WAAY,IAAMY,EAAG,GAAG,MAAM,EAC9B,OAAQ,GACR,KAAM,QAAA,CACP,EACKsqC,EAAW1rC,GAAU,EAErBF,EAASyC,MAAI,EAAE,EAEfuF,EAAUvF,EAAAA,IAAiB,EAEjC9E,EAAA,MACE,IAAM5M,EAAM,QACHpX,GAAA,CACHoX,EAAM,IAAMpX,IACdqmB,EAAO,MAAQ4rC,EAAS,EAE5B,EACA,CAAE,UAAW,EAAK,CACpB,EAES,SAAAC,EAActiD,EAA2DK,EAAa,CAC7F,OAAQL,EAAM,CACZ,IAAK,KACO2V,EAAAnO,EAAM,cAAenH,CAAE,EACjC,MACF,IAAK,IACOsV,EAAAnO,EAAM,QAASnH,CAAE,EAC3B,MACF,IAAK,KACOsV,EAAAnO,EAAM,aAAcnH,CAAE,EAChC,MACF,IAAK,KACOsV,EAAAnO,EAAM,iBAAkBnH,CAAE,EACpC,MACF,IAAK,KACOsV,EAAAnO,EAAM,cAAenH,CAAE,EACjC,MACF,IAAK,IACOsV,EAAAnO,EAAM,QAASnH,CAAE,EAC3B,MACF,IAAK,KACOsV,EAAAnO,EAAM,aAAcnH,CAAE,EAChC,MACF,IAAK,KACOsV,EAAAnO,EAAM,iBAAkBnH,CAAE,EACpC,KAAA,CACJ,CAGK,MAAA,CACL,GAAA0X,EACA,MAAAvQ,EACA,OAAAiP,EAEA,QAAAgI,EAEA,cAAA6jC,CACF,CAAA,CAEJ,CAAC,uKA7GC3oC,EAyBS,YAAA4oC,EAAA,CAzBA,GAAIvoC,EAAM,MAAA,EAAA,EAAA,mBACjB,IAuBa,CAvBbtB,EAAAA,YAuBakB,EAAAA,WAAA,CAtBV,KAAMI,EAAM,MAAA,WACZ,OAAQA,EAAM,MAAA,OACd,cAAYq9B,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,KAAOwoC,CAAM,GACxC,QAAKnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,IAAMwoC,CAAM,GAChC,aAAWnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,KAAOwoC,CAAM,GACvC,iBAAenL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,KAAOwoC,CAAM,GAC3C,cAAYnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,KAAOwoC,CAAM,GACxC,QAAKnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,IAAMwoC,CAAM,GAChC,aAAWnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,KAAOwoC,CAAM,GACvC,iBAAenL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAExoC,EAAa,cAAA,KAAOwoC,CAAM,EAAA,EAAA,mBAE5C,IAUM,CATExoC,QAAM,OAASA,EAAA,MAAM,QAD7ByoC,EAAA,gBAAA5a,YAAA,EAAAhuB,qBAUM,MAVNK,EAAAA,WAUM,CAAA,IAAA,EAPJ,IAAI,SAAA,EACIF,EAAM,OAAA,CACb,MAAK,CAAGA,EAAG,GAAA,EAAA,EAAKA,EAAM,MAAA,KAAE,QAAeA,EAAA,GAAG,GAAE,SAAA,CAAA,EAC5C,KAAMA,EAAM,MAAA,KACZ,MAAK,CAAY,OAAAA,EAAA,MAAM,IAAMA,EAAM,MAAA,QAAUA,SAAS,MAAS,CAAA,CAAA,EAAA,CAEhED,aAAaC,EAAA,OAAA,SAAA,CAAA,EAAA,GAAA0oC,EAAA,GAAA,WAPJ1oC,EAAM,MAAA,OAASA,QAAM,OAAO,CAAA,CAAA,EAAA2oC,EAAAA,mBAAA,GAAA,EAAA,+ECVhCC,GAAWjuC,GAAW,CACjC,KAAMI,GACN,KAAM,OACN,OAAQR,EACR,SAAUA,EACV,MAAO,OACP,OAAQA,EACR,OAAQA,EACR,OAAQ,CAAC,OAAQ,MAAM,EACvB,SAAU,OACV,YAAa,OACb,OAAQ,CAAC,OAAQ,MAAM,EACvB,SAAU,OACV,YAAa,OACb,SAAUA,EACV,MAAO,OACP,QAASmB,EAAU,CACrB,CAAC,ECZKmtC,GAAW/rC,OAAOC,OAAkB,CACxC,UACA,UACA,OACA,UACA,QACA,UACA,OACA,OACA,UACA,SACA,SACA,OACA,OACA,OACA,QAAQ,CACT,EAEcE,qBAAgB,CAC7BjX,KAAM,MACN8iD,WAAY,CACVx3C,KAAAA,EACD,EACD9D,MAAOo7C,GACPvV,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,MAAO0D,EAAQ,CACpC3lB,KAAM0jB,GAAgB,EACtB7kB,KAAM,CACJgnB,QAAS,UACTtD,UAAY3jB,GAAmByyD,GAASlrC,SAASvnB,CAAK,CACvD,EACD2yD,OAAQ,GACRC,SAAU,GACVrvD,MAAO,KACPsvD,OAAQ,GACRC,OAAQ,GACRnV,OAAQ,GACRoV,SAAU,GACVnV,YAAa,GACbC,OAAQ,GACRmV,SAAU,GACVlV,YAAa,GACb7yB,SAAU,GACV3P,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEKqM,EAAKtF,GAAc,KAAK,EACxB3B,EAAQU,GAAU,EAElBpG,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMhW,IAAI,CAAC,EAAGgW,EAAMhW,OAAS,UACpC,CAACumB,EAAGE,GAAGzQ,EAAMnX,IAAI,CAAC,EAAGmX,EAAMnX,OAAS,UACpC,CAAC0nB,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMu7C,OACzB,CAAChrC,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMy7C,OACzB,CAAClrC,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAM07C,OACzB,CAACnrC,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAMw7C,SAC3B,CAACjrC,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM6T,QAC5B,EACF,EACKlD,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,GAAI,CAACrB,EAAM7T,MAAO,OAElB,MAAMyiB,EAAYpmB,GAAW68B,iBAAiBumB,SAASpjB,eAAe,EAAI,KACpEqzB,EAAQxuD,IAAiBuhB,GAAAA,YAAAA,EAAWktC,iBAAiBvrC,EAAGwrC,GAAG,aAAa,KAAM,MAAM,EACpF7e,EAAY7vC,GAAiB2S,EAAM7T,KAAK,EACxCyH,EAAOspC,EAAUz0C,SAAU,EAEjC,OAAO8nB,EAAGyrC,IAAI,CACZ7vD,MAAO,yBACP,WAAYyH,EACZ,UAAWA,EACX,cAAe,yBACf,UAAW1E,GAAS2sD,EAAO3e,EAAW,EAAG,EAAEz0C,SAAU,EACrD,GAAIuX,EAAMy7C,QAAUz7C,EAAMu7C,OACtB,CACApvD,MAAOyH,EACP,cAAeA,CAChB,EACC,GACJ,GAAIoM,EAAMy7C,OACN,CACA,WAAY5rD,GAAYqtC,EAAW,EAAG,EAAEz0C,SAAQ,GAEhD,CAAE,CACR,CAAC,CACH,CAAC,EAED,SAAS60C,EAAYpkC,EAAmB,CACtC,GAAI,CAAC8G,EAAMw7C,UAAYx7C,EAAM6T,UAAY3a,EAAM08C,OAAS,EACtD,MAAO,GAGT18C,EAAM0xC,gBAAiB,EACvBz8B,EAAUnO,EAAMi8C,OAAO,CACzB,CAEA,SAASC,GAAc,CACrB,OAAKl8C,EAAMw7C,SAEXtqC,EAAAA,YAAA,SAAA,CAAA,KACgB,SAAQ,MAASX,EAAGg8B,GAAG,OAAO,EAAC,QAAWjP,GAAWpsB,CAAAA,EAAA,YAAApN,GAAA4O,EAAA,WACvDpJ,EAAM1gB,MAAMuzD,MAAK,CAAA,MAAS,OAAO,CAAA,EAAA,IAAA,CAAA,CAAA,EAJnB,IAO9B,CAEA,MAAO,IAAM,CACX,MAAMrT,EAAY,CAAC,EAAE9oC,EAAMumC,SAAW,GAAKvmC,EAAMumC,QAAUriC,EAAMqiC,QAAUvmC,EAAMkE,MAAMqiC,QACjFwC,EAAY,CAAC,EAAE/oC,EAAMymC,SAAW,GAAKzmC,EAAMymC,QAAUviC,EAAMuiC,QAAUzmC,EAAMkE,MAAMuiC,QAEvF,OAAAv1B,EAAAA,YAAA,MAAA,CAAA,MACctN,EAAUhb,MAAK,MAAS+nB,EAAM/nB,OACvCkgD,CAAAA,EAAS53B,EAAA,YAAA,OAAA,CAAA,MAEC,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,QAAQ,CAAC,EAAC,MAChC,CACLpgD,MAAO6T,EAAMwmC,YACb4V,gBAAiBp8C,EAAM27C,SACvBU,YAAar8C,EAAM27C,QACrB,CAAC,EAAA,CAEAxqC,EAAU,WAACjN,EAAO,SAAU+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACxBrR,EAAMkE,MAAMqiC,MAAM,EAAA,CAAA12B,QAAAA,IAAG7P,CAAAA,EAAMumC,MAAM,CAAA,CAAA,CAAA,CACtD,CAAC,CAAA,EAEF,KAAIr1B,EAAAA,YAAA,OAAA,CAAA,MACK,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,SAAS,CAAC,CAAC,EAAA,CAC3Cp7B,EAAU,WAACjN,EAAO,UAAW+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACzBrR,EAAMkE,MAAM2L,SACjC,IAAA,CAAA,CAAA,EACA,CAACk5B,GAAamT,EAAa,CAAA,CAAA,EAE7BnT,EAAS73B,EAAA,YAAA,OAAA,CAAA,MAEC,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,QAAQ,CAAC,EAAC,MAChC,CACLpgD,MAAO6T,EAAM0mC,YACb0V,gBAAiBp8C,EAAM47C,SACvBS,YAAar8C,EAAM47C,QACrB,CAAC,EAAA,CAEAzqC,EAAU,WAACjN,EAAO,SAAU+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACxBrR,EAAMkE,MAAMuiC,MAAM,EAAA,CAAA52B,QAAAA,IAAG7P,CAAAA,EAAMymC,MAAM,CAAA,CAAA,CAAA,CACtD,EACAyV,EAAa,CAAA,GAEd,IAAI,CAAA,CAGb,CACH,CACF,CAAC,ECzJYI,GAAenvC,GAAW,CACrC,QAAS,CAAC,OAAQ,KAAK,EACvB,QAASH,GACT,QAASD,EACT,eAAgB,OAChB,QAASA,EACT,UAAW,OACX,aAAcA,EACd,QAASA,EACT,SAAUgB,GACV,SAAUC,GACV,SAAUhB,GACV,SAAUD,EACV,IAAKA,EACL,MAAO,CAAC,OAAQ,KAAK,EACrB,SAAUA,EACV,QAASA,EACT,MAAO,CAAC,OAAQ,MAAM,EACtB,QAAS,OACT,MAAO,CACL,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,SAAUmB,EAAsC,EAChD,WAAYA,EAAU,EACtB,WAAYA,EAAU,EACtB,eAAgBA,EAAU,EAC1B,eAAgBA,EAAU,CAC5B,CAAC,EClBqC,SAAAo3B,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAKtC,MAAM0vD,GAAajnC,EAAAA,gBAAgB,EAAE,EAAEzsB,KAExB4mB,qBAAgB,CAC7BjX,KAAM,UACNi6C,aAAc,GACdzyC,MAAOs8C,GACPzW,MAAO,CAAC,eAAgB,gBAAgB,EACxCn2B,MAAMC,EAAQ,CAAEC,MAAAA,EAAO1L,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CAC5C,MAAMv1B,EAAKtF,GAAc,SAAS,EAC5BjL,EAAQiM,GAAS,UAAW0D,EAAQ,CACxC6I,QAAS,CACP3I,QAAS,QACTtD,UAAW3jB,IACF,CAAC,QAAS,QAAS,QAAS,cAAe,QAAQ,EAAEunB,SAASvnB,EAAK,CAE7E,EACDquB,QAAS,GACTulC,QAAS,GACTC,eAAgBA,IAAMlsC,EAAGy8B,GAAG,MAAM,EAClC0P,QAAS,GACTtgC,UAAW,CACTvM,QAAS,MACTtD,UAAW3jB,IAASisC,GAAmB1kB,SAASvnB,EAAK,CACtD,EACD+zD,aAAc,GACdC,QAAS,GACTC,SAAU,KACVC,SAAU,KACV9nB,SAAU,GACVnhB,SAAU,GACVkpC,IAAK,GACLhhD,MAAO,IACPihD,SAAU,GACVC,QAAS,GACT9+B,MAAO,OACP++B,QAAS,KACTj5B,MAAO,EACT,CAAC,EAEKk5B,EAAY7xC,GAAO,EAEnB8xC,EAAar7C,GAAe,EAC5B,CAAEpG,MAAAA,CAAO,EAAG66B,GAAe,EAE3Bpa,EAAYgiB,EAAAA,MAAMp+B,EAAO,WAAW,EACpCq9C,EAAiB3rC,EAAAA,IAAI1R,EAAM08C,OAAO,EAClCY,EAAY5rC,EAAAA,IAAI1R,EAAM08C,OAAO,EAC7B1nB,EAAWoJ,EAAAA,MAAMp+B,EAAO,UAAU,EAClCu9C,EAAe7rC,EAAG,IAAC,GAAG,EAE5B,IAAI8rC,EAAU,GACV3V,EAAU,GAEd,MAAM7wB,EAAW3V,EAAQ,SAAC,IAAMrB,EAAMwY,UAAY,SAAWxY,EAAMwY,UAAY,aAAa,EACtFilC,EAAWp8C,EAAQ,SAAC,IAAMrB,EAAMwY,UAAY,SAAWxY,EAAMwY,UAAY,aAAa,EAEtFklC,EAAkBhsC,EAAAA,IAAkB,EAEpC6M,EAAYld,EAAAA,SAAS,IAAM,QAC/B,MAAM67C,KAAWl9C,GAAAA,EAAMk9C,UAANl9C,YAAAA,GAAuBs8B,MAAOt8B,EAAMk9C,QAErD,GAAIA,GAAS,CACX,GAAI,0BAA2BA,GAC7B,OAAOA,GAGT,GAAI,MAAOA,IAAW,MAAOA,GAC3B,MAAO,CACLx1B,sBAAuBA,KAAO,CAC5BnN,EAAG2iC,GAAQ3iC,EACXC,EAAG0iC,GAAQ1iC,EACXppB,KAAM8rD,GAAQ3iC,EACd6N,IAAK80B,GAAQ1iC,EACb2D,MAAO,EACPC,OAAQ,CACT,EACF,CAEL,CAEA,OAAOs/B,EAAgB90D,KACzB,CAAC,EACK+0D,EAAYt8C,WAAS,IAAO5X,GAAU80B,EAAU31B,KAAK,EAAI21B,EAAU31B,MAAQ,IAAK,EAChFmT,EAAQsF,EAAAA,SAAS,IACd,OAAOrB,EAAMjE,OAAU,SAC1B,IAAI6hD,MAAc,CAAC,EAAEC,KAAKC,KAAKvvD,IAAIyR,EAAMjE,MAAO,CAAC,CAAC,EAClDiE,EAAMjE,MAAMuB,IAAIvB,IAAS+hD,KAAKvvD,IAAIwN,GAAO,CAAC,CAAC,CAChD,EAEKm5B,EAASxjB,EAAAA,IAAoB,EAC7B6jB,EAAWl0B,EAAQ,SAAC,IAAM6zB,QAAAA,OAAAA,GAAAA,EAAOtsC,QAAPssC,YAAAA,GAAcje,QAAO,EAC/CqJ,EAAQ5O,EAAAA,IAAkB,EAC1BuS,EAAQ5iB,EAAAA,SAAoD,IAAM,CACtE,GAAI,CAACrB,EAAMikB,MACT,MAAO,CAAEJ,SAAU,GAAOC,UAAW,EAAO,EAG9C,GAAI9jB,EAAMikB,QAAU,IAAQjkB,EAAMikB,QAAU,OAC1C,MAAO,CAAEJ,SAAU,GAAMC,UAAW,EAAM,EAG5C,MAAMxG,GAAOlB,EAAUxzB,MAAMm1D,MAAM,GAAG,EAAE,CAAC,EAEzC,OAAO/9C,EAAMikB,SAAW3G,KAAS,OAASA,KAAS,SAAW,WAAa,cACvE,CAAEuG,SAAU,GAAOC,UAAW,EAAK,EACnC,CACAD,SAAU,GACVC,UAAW,EACZ,CACL,CAAC,EACK,CAAEsR,WAAAA,EAAYK,aAAAA,CAAc,EAAGX,GAAU,CAC7C1Y,UAAAA,EACA4Y,SAAAA,EACA1U,MAAAA,EACA/B,UAAAA,EACA0F,MAAAA,EACAhN,QAASymC,EACTxoB,OAAQK,CACV,CAAC,EAEDnhB,GAAgB4pC,EAAoBN,CAAe,EACnDtpC,GAAgB,IAAM,CAChBipC,EAAez0D,OAAS,CAAC80D,EAAgB90D,OAC3Co1D,EAAoB,CAEvB,EAAEzoB,CAAQ,EAEX,MAAMunB,EAAWz7C,EAAAA,SAAS,IACpBrB,EAAMme,QAAU,OACXne,EAAM88C,SAGX98C,EAAMme,QAAU,UACX,CAAC,CAAEA,MAAO,GAAGo/B,EAAa30D,KAAK,IAAK,EAAGoX,EAAM88C,QAAQ,EAGvD,CAAC,CAAE3+B,MAAO,GAAGne,EAAMme,KAAK,IAAK,EAAGne,EAAM88C,QAAQ,CACtD,EAEK/I,EAAaC,EAAAA,gBAAgB,CAAEiK,cAAAA,EAAexoB,aAAAA,CAAa,CAAC,EAElEjiB,GAAYmqC,EAAW,aAAcO,CAAkB,EACvD1qC,GAAYmqC,EAAW,aAAcQ,CAAkB,EACvD3qC,GAAYmqC,EAAW,QAASS,CAAkB,EAClD5qC,GAAYmqC,EAAW,QAASU,EAAkB,EAClD7qC,GAAYmqC,EAAW,OAAQW,EAAiB,EAChD9qC,GAAY+hB,EAAU,aAAc2oB,CAAkB,EACtD1qC,GAAY+hB,EAAU,aAAc4oB,CAAkB,EAEtDvxC,EAAAA,MACE,IAAM5M,EAAM08C,QACZ9zD,IAAS,CACPy0D,EAAez0D,MAAQA,GAEnBA,KACF00D,EAAU10D,MAAQ,GAClB6sC,EAAc,EAElB,CACF,EACA7oB,EAAAA,MACE,IAAM5M,EAAM6T,SACZjrB,IAAS,CACHA,IACFq1D,EAAc,EAAK,CAEvB,CACF,EAEAnY,EAAO,CAAEwX,UAAAA,EAAW9kC,QAASmlC,EAAWM,cAAAA,EAAexoB,aAAAA,CAAa,CAAC,EAErE,SAASwoB,EAAcvB,GAAU,CAACW,EAAez0D,MAAO,CAClDy0D,EAAez0D,QAAU8zD,KAE7BW,EAAez0D,MAAQ8zD,GAEnBA,KACF6B,EAAqB,EACrBjB,EAAU10D,MAAQ,GAClB6sC,EAAc,GAGhBuJ,EAAK,iBAAkB0d,EAAO,EAC9BvuC,EAAUnO,EAAMo6C,SAAUsC,EAAO,EACnC,CAEA,SAAS6B,GAAsB,CACxBZ,EAAU/0D,QAEf20D,EAAa30D,MAAQ+0D,EAAU/0D,MAAMk+B,YACvC,CAEA,SAAS03B,GAAiB,CACxB,OAAQxnC,EAASpuB,OAAS40D,GAAaC,EAAS70D,OAASi/C,CAC3D,CAEA,SAASqW,GAAqB,CACxBl+C,EAAM6T,WAENmD,EAASpuB,QACXisD,aAAal5C,EAAM8iD,KAAK,EAExB9iD,EAAM8iD,MAAQvU,WAAW,IAAM,CAC7BsT,EAAU,GACVS,EAAcO,EAAc,CAAE,CAC/B,EAAEziD,EAAMnT,MAAM,CAAC,GAAKw0D,EAAWx0D,KAAK,GAGvCulB,EAAUnO,EAAM0+C,UAAU,EAC5B,CAEA,SAASP,GAAqB,CACxBn+C,EAAM6T,WAENmD,EAASpuB,QACXisD,aAAal5C,EAAM8iD,KAAK,EAExB9iD,EAAM8iD,MAAQvU,WAAW,IAAM,CAC7BsT,EAAU,GACVS,EAAcO,EAAc,CAAE,CAC/B,EAAEziD,EAAMnT,MAAM,CAAC,GAAKw0D,EAAWx0D,KAAK,GAGvCulB,EAAUnO,EAAM2+C,UAAU,EAC5B,CAEA,SAASP,GAAqB,CACxBp+C,EAAM6T,UAEN7T,EAAMwY,UAAY,SACpBylC,EAAe,CAEnB,CAEA,SAASI,IAAqB,CACxBr+C,EAAM6T,UAEN4pC,EAAS70D,QACXi/C,EAAU,GACVoW,EAAcO,EAAc,CAAE,EAElC,CAEA,SAASF,IAAoB,CACvBt+C,EAAM6T,UAEN4pC,EAAS70D,QACXi/C,EAAU,GACVoW,EAAcO,EAAc,CAAE,EAElC,CAEA,SAASR,GAAqB,CACxBh+C,EAAM6T,WAEV1F,EAAUnO,EAAM4+C,cAAc,EAE1B5+C,EAAM28C,cAAgB38C,EAAMwY,UAAY,UAAY6kC,EAAez0D,QACrEq1D,EAAc,EAAK,EACnB9vC,EAAUnO,EAAM6+C,cAAc,GAElC,CAEA,SAASC,GAAejmD,GAAyB,CAC3CA,GACF6kD,EAAgB90D,MAAQiQ,GAAGkmD,mBAE3BrB,EAAgB90D,MAAQqoB,MAE5B,CAEA,SAAS+tC,IAAgB,CACvB1B,EAAU10D,MAAQy0D,EAAez0D,KACnC,CAEA,SAASgiD,GAAgB1xC,GAAmB,CAC1CA,GAAM0xC,gBAAiB,CACzB,CAEA,MAAO,IAAM,OACX,MAAMqU,GAAUj/C,EAAMiX,QAChBjX,EAAMiX,UAAY,GAAO,OAASjX,EAAMiX,QAC1C,KACEioC,IAAWh7C,EAAAA,EAAMsU,UAANtU,YAAAA,EAAAA,KAAAA,EAAgB6vC,GAC3BoL,GAAeD,GAAWA,GAAS,CAAC,EAAI,KAExCE,GAAgBA,IACfD,GAEDA,GAAat2D,OAAS0zD,IAAc4C,GAAat2D,OAAS0sB,EAAAA,SACrD0pC,GAAO/tC,EAAAA,YAAUiuC,OAAAA,KAAAA,CAAAA,EAAY,CAAAjuC,EAAAA,EAAA,YAAqBtB,OAAAA,EAAQuvC,CAAAA,EAAY,CAAQ,GAGlFF,KACHE,GAAan/C,MAAQq/C,EAAU,WAACF,GAAan/C,OAAS,CAAE,EAAE4P,EAAO,CAC/D,mBAAoButC,EAAUv0D,KAChC,CAAC,GAGIu2D,IAZmB,KAe5B,MAAO,CACLA,KACGF,GAAO/tC,EAAA,YAAA+tC,GAAAvsC,EAAA,WAEA9C,EAAK,CAAA,IACJ8tC,EAAe,MACb,CAACntC,EAAG9jB,EAAG,EAAE8jB,EAAGo4B,GAAG,MAAM,EAAG3oC,EAAM4oC,SAAWr4B,EAAGE,GAAG,SAAS,CAAC,EAAC,mBAC/C0sC,EAAUv0D,KAAK,CAAA,EAAA08C,GAEhC4Z,EAAQ,EAARA,GAAQ,CAAArvC,QAAAA,IAAA,CAARqvC,EAAQ,EAAAhuC,EAAAA,EAAA,YAAAwtB,WAAA,CAAA,IAGIogB,EAAwBM,EAAAA,CAAAA,GAAe,CAAA,CAAA,GAE1D,CAACp/C,EAAM6T,WAAa7T,EAAMg9C,UAAYM,EAAU10D,QAAMsoB,EAAAA,YAAAouC,GAAA,CAAA,IAE7CpqB,EAAM,GACPioB,EAAUv0D,MAAK,MACZ,CACL,CAAC2nB,EAAGg8B,GAAG,QAAQ,CAAC,EAAG,GACnB,CAACh8B,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGm8B,IAAI,SAAU1sC,EAAMi9C,QAAU,OAAS,OAAO,CAAC,EAAG,GACtD,CAAC1sC,EAAGm8B,IAAI,SAAU,UAAU,CAAC,EAAG1sC,EAAM48C,QACtC,CAACrsC,EAAGm8B,IAAI,SAAU,UAAU,CAAC,EAAG1sC,EAAMw8C,OACvC,EAAA,OAAA,GAAA,QAEQa,EAAez0D,MAAK,MACtBoX,EAAMg9C,SAAQ,GACjB5nB,EAAWxsC,MAAK,WACRoX,EAAMy8C,eAAc,KAC1B,UAAS,SACL,GAAE,QACH7R,GAAe,eACRoU,GAAa,gBACZA,EAAa,EAAA,CAAAnvC,QAAAA,IAAA,CAAAqB,EAAA,YAAA,MAAA,CAAA,MAElB,CAAC,CAAClR,EAAM+8C,KAAOxsC,EAAGg8B,GAAG,KAAK,EAAGvsC,EAAM68C,QAAQ,EAAC,MAASC,EAASl0D,KAAK,EAAA,CAC5EuoB,EAAAA,WAAWjN,EAAO,UAAW6vC,CAAU,CAAC,CAAA,EAE1C,CAAC/zC,EAAM+8C,KAAO,CAAC/8C,EAAMw8C,SAAOtrC,EAAAA,YAAA,MAAA,CAAA,IAAcoP,EAAK,MAAS/P,EAAGg8B,GAAG,OAAO,CAAS,EAAA,IAAA,CAAA,CAAA,CAAA,CAElF,CAEJ,CACH,CACF,CAAC,EClXYgT,GAAmBpyC,GAAW,CACzC,MAAO,MACP,SAAU,OACV,UAAWJ,EACX,MAAO,OACP,aAAc,CAAC,OAAQ,OAAQ,MAAM,EACrC,WAAY,OACZ,QAAS,OACT,SAAU,OACV,QAASA,EACT,UAAWA,EACX,WAAY,OACZ,SAAUA,EACV,aAAcA,EACd,SAAUA,EACV,SAAUmB,EAA4C,EACtD,SAAUA,EAAgD,CAC5D,CAAC,KCX8BuB,kBAAA,CAC7BjX,KAAM,cACN8iD,WAAY,CACVkE,aAAAA,GACAtrB,eAAAA,EACF,EACAue,aAAc,GACdzyC,MAAOu/C,GACP1Z,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO0L,MAAAA,EAAOk2B,OAAAA,CAAAA,EAAU,CAChC9lC,MAAAA,EAAQiM,GAAS,cAAe0D,EAAQ,CAC5CjQ,MAAO,CACLmQ,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACV,EACA+mB,SAAU,GACVC,UAAW,GACXC,MAAO,KACPC,aAAc,KACdC,WAAY,EACZwoB,QAAS,MACTC,SAAU,KACVC,WAAY,KACZC,QAAS,GACTC,UAAW,GACX5M,SAAU,GACV6M,aAAc,GACdjsC,SAAU,EAAA,CACX,EAEKtD,EAAKtF,GAAc,cAAc,EAEjC,CAAEvL,MAAAA,EAAOm3B,SAAAA,EAAUC,UAAAA,EAAWC,MAAAA,EAAOE,WAAAA,CAAAA,EAAe8oB,EAAAA,OAAO//C,CAAK,EAEhEyoB,EAAS/W,EAAAA,IAAyB,EAClCxU,EAAOwU,EAAAA,IAAiB,EACxBuF,EAAU5V,EAAAA,SAAS,IAAMonB,OAAAA,OAAAA,EAAAA,EAAO7/B,QAAP6/B,YAAAA,EAAcmM,QAAO,EAE9C,CACJsC,SAAAA,EACAI,WAAAA,EACAG,aAAAA,EACAE,aAAAA,EACAG,UAAAA,EACAE,WAAAA,EACAG,aAAAA,EACAhE,aAAAA,EACAiE,iBAAAA,EACAI,SAAAA,EACAE,SAAAA,EACAT,YAAAA,EACAU,cAAAA,EACAC,kBAAAA,EACAI,gBAAAA,GACEpC,GAAW,CACbl3B,MAAAA,EACAm3B,SAAAA,EACAC,UAAAA,EACAC,MAAAA,EACAE,WAAAA,EACAhgB,QAAAA,EACA+f,aAAch3B,EAAMg3B,YAEtB,CAAC,EAEM8O,EAAA,CACLrd,OAAAA,EACAxR,QAAAA,EACA/Z,KAAAA,EACAg6B,SAAAA,EACAI,WAAAA,EACAG,aAAAA,EACAe,SAAAA,EACAE,SAAAA,EACAT,YAAAA,EACAU,cAAAA,EACAC,kBAAAA,EACAI,gBAAAA,EACAnN,QAAAA,CAAAA,CACD,EAEDjf,EAAAA,MACE,IAAM5M,EAAMN,MAAMnV,OAClB,IAAM,CACJ+oB,EAAAA,SAASuY,CAAO,CAAA,CAEpB,EAEMjoB,MAAAA,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EACHuT,EAAAA,EAAM4oC,SAAWr4B,EAAGE,GAAG,SAAS,EAChCzQ,EAAM6T,UAAYtD,EAAGE,GAAG,UAAU,EAClCb,EAAMmB,KAAK,CAEd,EAED,SAASy9B,EAAS11C,EAAwB,CAC3Bq/B,EAAA,EACHn4B,EAAAA,EAAMwuC,SAAU11C,CAAO,CAAA,CAGnC,SAASo4C,EAASl5C,EAA4B,CACxCgI,EAAM8/C,eAEV3rB,EAAan8B,CAAK,EACRgI,EAAAA,EAAMkxC,SAAUl5C,CAAK,EAAA,CAGxBgoD,SAAAA,EAAaj3D,EAA+BiP,EAA4B,CAC3E,CAACgI,EAAM6/C,WAAa,CAAC7/C,EAAM8/C,cAC7B1nB,EAAiBrvC,EAAKiP,CAAK,CAC7B,CAGF,eAAe6zB,GAAU,OACjBpD,OAAAA,EAAAA,EAAO7/B,QAAP6/B,YAAAA,EAAcoD,WACPsM,EAAA,CAAA,CAGf,SAAS8nB,EAAWvgD,EAA8B,CAChD,MAAM9B,EAAWoC,EAAM+2B,MACjBD,GAAY92B,EAAM82B,UAClBopB,GAAchpB,EAAStuC,MACvB,CAAEmoB,MAAOovC,EAAYxvC,MAAOyvC,GAAiB,GAAGT,EAAAA,EAAe3/C,EAAM2/C,YAAc,CAAC,EAEpFU,GAAWrgD,EAAMy/C,SAAW,MAC5Ba,GAAYtgD,EAAM0/C,UAAY,KAEpC,OAAAxuC,EAAAA,YAAAgjB,GAAA,CAAA,SAC4BrI,CAAAA,EAAO,CAAAhc,QAAAA,IAAAqB,CAAAA,EAAAA,YAAAmvC,GAAA,CAAA,IACjBnjD,EAAI,MAASqT,EAAGg8B,GAAG,MAAM,EAAC,MAASzU,EAAUlvC,KAAAA,EAAK,CAAAinB,QAAAA,IAAAqB,CAAAA,EAAAA,YAAAovC,GAAA5tC,EAAAA,WAExDitC,GAAU,CAAA,MACP,CAACpvC,EAAGg8B,GAAG,OAAO,EAAG4T,CAAU,EAAC,MAC5B,CAACnoB,EAAWpvC,MAAOw3D,EAAe,CAAA,CAAC,EAAA,CAAAvwC,QAAAA,IAAA,CAEzC3L,EAAM2L,SAAW7P,EAAMN,MAAMnV,OAC1BmV,EAAMpC,IAAYvF,IAAA,CACZhP,MAAAA,GAAMgP,GAAK6F,CAAQ,EACnB9M,GAAQovD,GAAYjvD,IAAIlI,EAAG,EAC3BgqB,EAAQ5B,EAAAA,WAAWjN,EAAO,UAAW,CAAEnM,KAAAA,GAAMjH,MAAAA,EAAAA,CAAO,EAE1D,GAAIgmC,GACF/jB,OAAAA,EAAMhqB,IAAMA,GAELgqB,EAGT,MAAMm+B,EAAW8O,EAAaO,KAAK,KAAMx3D,EAAG,EAE5C,OAAAmoB,EAAAA,YAAAgjB,GAAA,CAAA,IACuBnrC,GAAG,SAAYmoD,CAAAA,EAAQ,CAAArhC,QACzCA,IAAMkD,CAAAA,CAAK,CAAA,CAGjB,EACC5B,EAAAA,WAAWjN,EAAO,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAOxC,MAAO,IAAM,CACX,IAAIs8C,EAAiB7oB,EAAa/uC,MAOlCsoB,OAAAA,cAAAsuC,GAAA9sC,EAAAA,WAEQ9C,EAAK,CAAA,IACJ6Y,EAAM,MACJ7kB,EAAUhb,MAAK,QACboX,EAAM4oC,QAAO,YACX,CAAC5oC,EAAM4/C,QAAO,WACfnoB,EAAa7uC,MAAK,SAClBoX,EAAMizC,SAAQ,SACdzE,EAAQ,SACR0C,CAAAA,CAAQ,EAAA,CAGhBrhC,QAASA,IACH7P,EAAM6T,SACD3P,EAAM2L,SAAW7P,EAAMN,MAAMnV,OAChCyV,EAAMN,MAAMpC,IAAI,CAACvF,EAAMjH,KAAU,CAC3B/H,MAAAA,GAAMgP,EAAKiI,EAAM+2B,KAAK,EACtBhkB,EAAQ5B,EAAAA,WAAWjN,EAAO,UAAW,CAAEnM,KAAAA,EAAMjH,MAAAA,EAAAA,CAAO,EAE1DiiB,OAAAA,EAAMhqB,IAAMA,GAELgqB,CAAAA,CACR,EACC5B,EAAAA,WAAWjN,EAAO,OAAO,EAGxB+7C,EAAWO,CAAc,EAElCC,WAAY1rC,GAAiB7Q,EAAO,CAAC,cAAe,YAAY,CAAC,EACjEw8C,WAAY3rC,GAAiB7Q,EAAO,CAAC,cAAe,YAAY,CAAC,CAAA,CAAC,CAI1E,CAAA,CAEJ,CAAC,ECnLYy8C,GAAcxzC,GAAW,CACpC,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAmB,EAC3B,QAASrB,EACT,QAAS,MACT,SAAUA,EACV,eAAgB,OAChB,aAAcA,EACd,YAAa,OACb,OAAQyB,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OACb,SAAUzB,EACV,MAAOwB,GACP,SAAUxB,EACV,UAAWA,EACX,cAAe,OACf,UAAWgB,GACX,UAAW,OACX,SAAUf,GACV,YAAaD,EACb,UAAW,OACX,aAAcA,EACd,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,UAAW,OACX,OAAQ,CACN,KAAM,CAAC,QAAS,QAAQ,EACxB,QAAS,IACX,EACA,WAAYA,EACZ,UAAWA,EACX,YAAaA,EACb,YAAa,OACb,UAAWA,EACX,QAAS,OACT,UAAWA,EACX,OAAQA,EACR,UAAWE,GACX,KAAM,OACN,YAAaF,EACb,WAAY,OACZ,eAAgB,OAChB,MAAO,OACP,MAAOA,EACP,QAASmB,EAAuC,EAChD,OAAQA,EAAuC,EAC/C,SAAUA,EAAsC,EAChD,SAAUA,EAAsC,EAChD,SAAUA,EAAsC,EAChD,SAAUA,EAA6B,EACvC,eAAgBA,EAAU,EAC1B,eAAgBA,EAAU,EAC1B,QAASA,EAAU,EACnB,cAAeA,EAAmC,CACpD,CAAC,EC3CY0yC,GAA8C,OAAO,OAAO,CACvE,MAAO,QACP,MAAO,QACP,SAAU,WACV,QAAS,UACT,MAAO,QACP,MAAO,QACP,SAAU,UACZ,CAAC,0RCRQ,SAAAC,EAAYloC,EAAuBmoC,GAAuB,CAC3D,MAAAC,GAAa,MAAM,QAAQpoC,CAAQ,EACnCqoC,GAAa,MAAM,QAAQF,EAAQ,EAErC,GAAAC,KAAeC,GAAmB,MAAA,GAEtC,GAAID,IAAcC,GAAY,CAC5B,GAAIroC,EAAS,SAAWmoC,GAAS,OAAe,MAAA,GAEvC,QAAA12D,GAAI,EAAG4H,GAAM2mB,EAAS,OAAQvuB,GAAI4H,GAAK,EAAE5H,GAChD,GAAIuuB,EAASvuB,EAAC,IAAM02D,GAAS12D,EAAC,EAAU,MAAA,GAGnC,MAAA,EAAA,CAGT,OAAInB,GAAO0vB,CAAQ,EAAU1vB,GAAO63D,EAAQ,EAErCnoC,IAAamoC,EAAA,CAKhB,KAAA,CACJ,MAAA/a,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,WAAA3C,EACA,cAAA4C,EACA,cAAAC,CAAA,EACEhD,GAA2BkD,EAAK,EAE9B/1B,EAAKtF,GAAc,QAAQ,EAG3BjL,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,QAAS,CACP,QAAS,GACT,OAAQ,EACV,EACA,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,SAAU,IAAMvC,EAAS,MACzB,eAAgB,IAAMtD,EAAG,GAAG,MAAM,EAClC,aAAc,GACd,YAAa,KACb,OAAQ9B,GAAe,EACvB,YAAa,GACb,OAAQA,GAAe,EACvB,YAAa,GACb,SAAU,GACV,MAAO,CACL,QAAS,IAAM03B,EAAc,EAC7B,OAAQ,EACV,EACA,SAAU,GACV,UAAW,GACX,cAAe,IACf,UAAW,KACX,UAAW,CACT,QAAS,SACT,UAAWv9C,GAASisC,GAAmB,SAASjsC,CAAK,CACvD,EACA,SAAU,GACV,YAAa,GACb,UAAW,KACX,aAAc,GACd,QAAS,IAAMq9C,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,UAAW,KAAO,CAAA,GAClB,OAAQ,GACR,WAAY,GACZ,UAAW,GACX,YAAa,GACb,YAAa,EACb,UAAW,GACX,QAAS,KACT,UAAW,GACX,OAAQ,GACR,UAAW,GACX,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,YAAa,KACb,WAAY,EACZ,eAAgB,aAChB,MAAO,KAAO,CAAA,GACd,MAAO,EAAA,CACR,EAEKuwB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERlP,EAASI,GAAU,SAAU07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACnDsJ,EAAQU,GAAS,EAEjBqzC,EAAiB3rC,EAAAA,IAAI1R,EAAM,OAAO,EAClCihD,EAAgBvvC,EAAc,IAAA,EAAE,EAChCwvC,EAAgBxvC,EAAuB,IAAA,EAAE,EACzCyvC,EAAezvC,MAAI,EAAE,EACrB0K,EAAYgiB,EAAAA,MAAMp+B,EAAO,WAAW,EACpCg1B,EAAWoJ,EAAAA,MAAMp+B,EAAO,UAAU,EAElCohD,EAAc1vC,EAAyB,IAAA,EAAE,EACzC2vC,EAAgB3vC,MAAI,EAAE,EACtB4vC,EAAc5vC,MAAI,CAAC,EACnB6vC,EAAc7vC,EAAyB,IAAA,EAAE,EACzC8vC,EAAe9vC,MAAI,CAAC,EACpB+vC,EAAc/vC,MAAI,EAAK,EACvBy2B,EAAYz2B,MAAI,EAAK,EAErB,CAAE,UAAAyI,CAAU,EAAIF,GAAW,EAE3BynC,EAAgB50C,EAAAA,SAA4B,CAChD,SAAU,GACV,QAAS,GACT,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,EACP,OAAQ,KACR,OAAQ,GACR,QAAS,GACT,KAAM,EAAA,CACP,EAEK60C,EAAe70C,EAAAA,SAAa,IAAA,GAAsB,EAClD80C,GAAgBlwC,EAAAA,IAAuB,EACvCmwC,GAAexgD,WAAS,IAAMkgD,EAAY,MAAM,OAAOH,EAAY,KAAK,CAAC,EACzEU,EAAiBzgD,EAAAA,SAAS,IAAMwgD,GAAa,MAAM,OAAOzrC,GAAS,CAACA,EAAM,MAAM,CAAC,EAEjF2rC,GAAY1gD,WAAS,KAAO,CAAE,GAAGu/C,GAAkB,GAAG5gD,EAAM,SAAA,EAAY,EAExEiX,GAAU7C,GAAgB4pC,EAAkB,EAC5CgE,GAActwC,EAAAA,IAAsB,EACpCuwC,GAAcvwC,EAAAA,IAAkB,EAChCwwC,GAASxwC,EAAAA,IAAiB,EAC1BywC,GAAczwC,EAAAA,IAAwB,EACtCwjB,GAASxjB,EAAAA,IAAmB,EAC5B0wC,EAAU1wC,EAAAA,IAAoB,EAE9Bi4B,EAAQtoC,EAAAA,SAAS,IAAM,OAAA,QAAAN,EAAAkhD,GAAY,QAAZ,YAAAlhD,EAAmB,QAASihD,GAAY,MAAK,EAEpE,CAAE,UAAAzjC,EAAW,WAAA6W,EAAY,aAAAK,CAAA,EAAiBX,GAAU,CACxD,UAAA1Y,EACA,SAAA4Y,EACA,QAAA/d,GACA,OAAQ5V,EAAAA,SAAS,IAAA,OAAM,OAAAN,EAAAm0B,GAAO,QAAP,YAAAn0B,EAAc,QAAO,EAC5C,OAAQ,GACR,MAAOq9B,EAAAA,MAAMp+B,EAAO,OAAO,CAAA,CAC5B,EACK,CAAE,QAAAkX,CAAA,EAAYF,GAASuH,CAAS,EAEhC8jC,EAAiBv1C,EAAAA,SAAa,IAAA,GAAyC,EACvEw1C,GAAiB5wC,EAAAA,IAAQ,IAAA,GAAyC,EAExE,IAAI6wC,EAA0CviD,EAAM,MAE9C,MAAAwiD,GAAgB9wC,MAAI,CAAC,EAE3BhG,EAAAA,YAAY,IAAM,CAEhB1L,EAAM,UAAU,MAChBA,EAAM,UAAU,MAChBA,EAAM,UAAU,SAChBA,EAAM,UAAU,QAChBA,EAAM,UAAU,MAChBA,EAAM,UAAU,MAChBA,EAAM,UAAU,SAIP,QAAA5V,EAAI,EAAG4H,GAAMgO,EAAM,QAAQ,OAAQ5V,EAAI4H,GAAK,EAAE5H,EACrD4V,EAAM,QAAQ5V,CAAC,EAIHo4D,GAAA,OAAA,CACf,EAED51C,EAAAA,MAAM41C,GAAeC,GAAiB,CAAE,UAAW,GAAM,EAEzD,SAASA,IAAkB,CACnB,KAAA,CACJ,MAAOC,EACP,MAAOC,GACP,SAAUC,GACV,QAASC,GACT,MAAOC,GACP,MAAOC,GACP,SAAUC,IACRjB,GAAU,MACRkB,GAASX,GAAe,MACxBhlD,OAAU,IACV0Y,GAA8B,CAAC,EAC/BpX,GAAOoB,EAAM,QAChB,IAAekjD,KAAA,CAAE,OAAAA,GAAQ,MAAO,EAAG,OAAQ,IAAiC,EAAE,EAC9E,QAAQ,EAEXvB,EAAa,MAAM,EAER,UAAAuB,MAAU3B,EAAY,MAC3BjkD,GAAA,IAAI4lD,GAAO,MAAOA,EAAM,EACfvB,EAAA,IAAIuB,GAAO,KAAK,EAG/B,KAAOtkD,GAAK,QAAQ,CAClB,KAAM,CAAE,OAAAskD,GAAQ,MAAAhkD,GAAO,OAAAvH,EAAO,EAAIiH,GAAK,IAAI,EACrCukD,GAAY,OAAOD,IAAW,SAAW,CAAE,CAACR,CAAQ,EAAGQ,EAAA,EAAWA,GAClEE,GAAQ,CAAC,CAACD,GAAUJ,EAAQ,EAC5Bn6D,GAAQu6D,GAAUT,CAAQ,EAEhC,GAAI,CAACU,IAASn6D,GAAOL,EAAK,EAAG,SAE7B,MAAMqnB,EAAQkzC,GAAUR,EAAQ,GAAK,OAAO/5D,EAAK,EAC3C,CACJ,CAACg6D,EAAW,EAAG/uC,GAAW,GAC1B,CAACgvC,EAAU,EAAGQ,GAAU,GACxB,CAACP,EAAQ,EAAG9yC,GAAQ,GACpB,CAACgzC,EAAW,EAAGlkD,GAAW,IAAA,EACxBqkD,GACEG,GAAWL,GAAO,IAAIE,GAAU,KAAK,EACrCI,GAAcz2C,EAAAA,SAAS,CAC3B,SAAA+G,GACA,QAAAwvC,GACA,MAAArzC,GACA,MAAApnB,GACA,MAAAqnB,EACA,MAAAmzC,GACA,MAAAlkD,GACA,OAAAvH,GACA,QAAQ2rD,IAAA,YAAAA,GAAU,SAAU,GAC5B,SAASA,IAAA,YAAAA,GAAU,UAAW,GAC9B,KAAMJ,EAAA,CACP,EAEDltC,GAAO,KAAKutC,EAAW,EAElBH,KACC9lD,GAAA,IAAI1U,GAAO26D,EAAW,EACb5B,EAAA,IAAI,OAAO/4D,EAAK,CAAC,GAG5B,MAAM,QAAQkW,EAAQ,GAAKA,GAAS,QACjCF,GAAA,KACH,GAAGE,GACA,IAAaE,KACL,CAAE,OAAQA,GAAO,MAAOE,GAAQ,EAAG,OAAQqkD,EAAY,EAC/D,EACA,QAAQ,CACb,CACF,CAGFjB,GAAe,MAAQhlD,GACvB8jD,EAAY,MAAQprC,GAEpBwtC,GAAkBjB,CAAY,CAAA,CAGpBtpC,GAAA,CACV,OAAQhC,GACR,QAAS,GACT,UAAW,CAAC/d,EAAOygB,KAAa,CAC9B,GAAIwuB,EAAU,MAAO,CACnBjvC,EAAM,gBAAgB,EACtB,MAAA,CAGE,GAAA,CAACmkD,EAAe,MAAO,EACrB1jC,GAAS,OAASA,GAAS,SAC7BzgB,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACR+kD,GAAA,GAGhB,MAAA,CAGE,GAAAtkC,GAAS,KAAOA,GAAS,OAAQ,CACnC8pC,GAAW,EAAK,EAChB9pC,GAAS,SAAS,EAElB,MAAA,CAGFhvB,GACE,CACE,CACE,IAAMgvB,GAAS,IAAMA,GAAS,KAC9B,IAAM,CACJ,MAAM9uB,GAAUi3D,EAAe,MACzBv3D,GAASM,GAAQ,OAEvB,GAAI,CAACN,GAAQ,OAEP,MAAAL,GAAOyvB,GAAS,KAAO,EAAI,GAE7B,IAAA7oB,IAAS,KAAK,IAAI,GAAIqwD,EAAa,MAAQj3D,EAAI,EAAIK,IAAUA,GAC7D24D,GAASr4D,GAAQiG,EAAK,EAEjB,QAAA1G,GAAI,GAAI84D,GAAO,UAAYA,GAAO,QAAU94D,GAAIG,GAAQ,EAAEH,GACxD0G,IAAA5G,GACT4G,IAASA,GAAQvG,IAAUA,GAC3B24D,GAASr4D,GAAQiG,EAAK,EAGxB4yD,GAAc5yD,EAAK,CAAA,CAEvB,EACA,CACE,IAAM6oB,GAAS,OAAU,CAAC3Z,EAAM,QAAU2Z,GAAS,MACnD,IAAM,CACAwnC,EAAa,OAAS,EACxB5iB,GAAaolB,GAAa,MAAMxC,EAAa,KAAK,CAAC,EAC1CyC,GAAY,MACrBrlB,GAAamjB,CAAa,EAE1B+B,GAAW,EAAK,CAClB,CACF,CAEJ,EACA,CACE,eAAgB,IAAM,CACpBvqD,EAAM,eAAe,EACrBA,EAAM,gBAAgB,CACxB,EACA,cAAeygB,GAAS,QAAA,CAE5B,CAAA,CACF,CACD,EAEK,MAAA/V,GAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,YAAY,CAAC,EAAG,GACvB,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAG,YAAY,CAAC,EAAGvQ,EAAM,UAAYA,EAAM,aAAe,EAC9D,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,QAC7B,EACD,EACK2L,GAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D6jD,GAAgBxiD,EAAAA,SAAS,IAAM,CAC7B,MAAAyiD,EAAUvzC,EAAG,GAAG,UAAU,EAEzB,MAAA,CACL,CAACuzC,CAAO,EAAG,GACX,CAAC,GAAGA,CAAO,WAAW,EAAG,CAAC9jD,EAAM,UAAYq9C,EAAe,MAC3D,CAAC,GAAGyG,CAAO,YAAY,EAAG9jD,EAAM,SAChC,CAAC,GAAG8jD,CAAO,YAAY,EAAGn4C,GAAS,MACnC,CAAC,GAAGm4C,CAAO,WAAW,EAAG9jD,EAAM,QAC/B,CAAC,GAAG8jD,CAAO,KAAK9jD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,UAC9C,CAAC,GAAG8jD,CAAO,KAAK9jD,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,UAChD,CAAC,GAAG8jD,CAAO,cAAc,EAAGhb,GAAU,MACtC,CAAC,GAAGgb,CAAO,cAAc,EAAG,CAAC9jD,EAAM,SACnC,CAAC,GAAG8jD,CAAO,eAAe,EAAG9jD,EAAM,WACrC,CAAA,CACD,EACKqpC,GAAWhoC,EAAA,SACf,IAAM,CAACpY,GAAOi4D,EAAc,MAAM,CAAC,CAAC,IAAMlhD,EAAM,UAAYkhD,EAAc,MAAM,CAAC,IAAM,GACzF,EACMpY,GAAYznC,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,QAAUA,EAAM,MAAM,OAAO,EACjF4jD,GAAcviD,EAAAA,SAAS,IACpB,CAAC,EACNrB,EAAM,QACNA,EAAM,WACN0hD,EAAc,OACd,CAACC,EAAa,IAAID,EAAc,KAAK,EAExC,EACKiC,GAAetiD,EAAAA,SAAS,IACrBuiD,GAAY,MAAQ,CAAClC,CAAa,EAAE,OAAOI,EAAe,KAAK,EAAIA,EAAe,KAC1F,EACKiC,GAAgB1iD,EAAAA,SAAS,IAAMwgD,GAAa,MAAM,OAAiBqB,GAAA,CAACA,EAAO,KAAK,CAAC,EACjFc,GAAkB3iD,EAAAA,SAAS,IAAM,CACrC,MAAMxW,EAAUk5D,GAAc,MACxBzmD,OAAU,IAEP,QAAAlT,GAAI,EAAG4H,GAAMnH,EAAQ,OAAQT,GAAI4H,GAAK,EAAE5H,GAAG,CAC5C,MAAA84D,GAASr4D,EAAQT,EAAC,EAEpB84D,GAAO,QACT5lD,GAAI,IAAI4lD,GAAO,MAAOA,GAAO,MAAM,CACrC,CAGK,OAAA5lD,EAAA,CACR,EACKgsC,GAAYjoC,EAAAA,SAAS,IAClB,CAACrB,EAAM,UAAY,CAAC2L,GAAS,OAAS3L,EAAM,WAAakX,EAAQ,OAASmyB,GAAS,KAC3F,EACK4a,GAAgB5iD,EAAAA,SAAS,IACtB,CAACrB,EAAM,WAAaq9C,EAAe,MAAQuE,GAAc,MAAQ,MACzE,EACKsC,GAAU7iD,EAAAA,SAAS,IAChBrB,EAAM,UAAYA,EAAM,WAAa,GAAKkhD,EAAc,MAAM,QAAUlhD,EAAM,UACtF,EACKmkD,GAAkB9iD,EAAAA,SAAS,IAC3BrB,EAAM,iBAAmB,aAEzB,CAACqpC,GAAS,OAAS,CAAC4a,GAAc,OAAS,CAAC,EAAEjkD,EAAM,aAAesC,EAAO,MAAM,aAUlF,CAAC6lC,EAAU,OACX,EAAEkB,GAAS,QAAUrpC,EAAM,WAAaA,EAAM,UAAY,CAACq9C,EAAe,SAC1E,EAAE,CAAC4G,GAAc,OAAS,EAAEjkD,EAAM,aAAesC,EAAO,MAAM,eAC9D,EAAE+6C,EAAe,OAASgE,EAAc,MAE3C,EAED,SAAS+C,GAAiBx7D,EAAgC,CACpD,OAAAK,GAAOL,CAAK,EAAU,KAEnB05D,GAAe,MAAM,IAAI15D,CAAK,GAAKy5D,EAAe,IAAIz5D,CAAK,GAAK,IAAA,CAGzE,SAASy7D,IAAiB,CACxB,sBAAsB,IAAM,OACb5uB,EAAA,EAETxe,GAAQ,SAASlW,EAAAm0B,GAAO,QAAP,MAAAn0B,EAAc,WAC7B,OAAOf,EAAM,WAAc,SAC7Bk1B,GAAO,MAAM,QAAQ,MAAM,MAAQ,GAAGl1B,EAAM,SAAS,KAC5CA,EAAM,UACfk1B,GAAO,MAAM,QAAQ,MAAM,MAAQ,GAAGje,GAAQ,MAAM,WAAW,KAE/Die,GAAO,MAAM,QAAQ,MAAM,SAAW,GAAGje,GAAQ,MAAM,WAAW,KAEtE,CACD,CAAA,CAGHrK,EAAA,MACE,IAAM5M,EAAM,QACHpX,GAAA,CACPy0D,EAAe,MAAQz0D,CAAA,CAE3B,EACAgkB,QAAMywC,EAAyBz0D,GAAA,CACzBA,IACF64D,EAAY,MAAQ,GACH6C,GAAA,EACFD,GAAA,GAGbrkD,EAAM,iBAAmB,aAC3B,sBAAsBukD,EAAc,EAErBA,GAAA,CACjB,CACD,EACD33C,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,EACH,CAAC25D,GAAgB,CAAC1B,EAAYj4D,EAAO25D,CAAY,KACpCA,EAAA35D,EACf46D,GAAkB56D,CAAK,EACR27D,GAAA,EACjB,CAEJ,EACA33C,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACHA,GACF66D,GAAW,EAAK,CAClB,CAEJ,EACA72C,QAAMjB,GAAmB/iB,GAAA,CACnBA,GACF66D,GAAW,EAAK,CAClB,CACD,EACD72C,QAAMy0C,EAAwBz4D,GAAA,CAC5B84D,EAAc,MAAQ94D,EACtB84D,EAAc,MAAQ94D,EACtB84D,EAAc,KAAO94D,EAErB47D,GAAc57D,CAAK,CAAA,CACpB,EAEYkpB,EAAA,CACX,MAAAi0B,EACA,QAAAC,EACA,eAAAqX,EACA,cAAA6D,EACA,cAAAD,EACA,aAAAY,GACA,QAAA3qC,EACA,cAAAmqC,EACA,UAAAlZ,EACA,eAAA2Z,EACA,aAAA6B,GAEA,QAAA1sC,GACA,UAAAsH,EACA,OAAA2W,GACA,MAAAyU,EACA,OAAAuY,GACA,YAAAC,GACA,QAAAC,EAEA,aAAA3sB,EACA,WAAAgvB,GACA,iBAAAL,GACA,cAAAV,GACA,YAAA/Y,GACA,MAAArE,GACA,KAAM,IAAM,WACVvlC,EAAA4oC,EAAM,QAAN,MAAA5oC,EAAa,QACb4U,GAAA4I,EAAU,QAAV,MAAA5I,GAAiB,MAAK,CACxB,CACD,EAEDlB,EAAAA,UAAU,IAAM,CACC8vC,GAAA,EAEXvkD,EAAM,UACRyhD,EAAY,MAAQ,GACH6C,GAAA,EACFD,GAAA,EACjB,CACD,EAED,SAASb,GAAkB56D,EAA2B,CAChD,GAAAK,GAAOL,CAAK,EAAG,CACjBs4D,EAAc,MAAQ,CAAC,EACvBD,EAAc,MAAQ,CAAC,EACvB,MAAA,CAGI,MAAAyD,GAAmB,MAAM,QAAQ97D,CAAK,EAAcA,EAAV,CAACA,CAAK,EAEhD+7D,GAAW,IAAI,IAAID,EAAe,EAClCE,GAAoC,CAAC,EACrCC,GAA2B,CAAC,EAEzBF,GAAA,QAAQ/7D,IAAS,CACpB,IAAAs6D,GAASkB,GAAiBx7D,EAAK,EAE/Bs6D,IACa0B,GAAA,KAAK1B,GAAO,KAAK,EACjB2B,GAAA,KAAK3B,GAAO,KAAK,EAE3Bb,EAAe,IAAIa,GAAO,KAAK,GACnBb,EAAA,IAAIa,GAAO,MAAOA,EAAM,GAEhCljD,EAAM,SACfkjD,GAASp2C,EAAAA,SAAS,CAChB,MAAAlkB,GACA,SAAU,GACV,QAAS,GACT,MAAO,GACP,MAAO,OAAOA,EAAK,EACnB,MAAO,GACP,MAAO,GACP,OAAQ,KACR,OAAQ,GACR,QAAS,GACT,KAAMA,EAAA,CACP,EAEcy5D,EAAA,IAAIz5D,GAAOs6D,EAAM,EAChC0B,GAAe,KAAKh8D,EAAK,EACVi8D,GAAA,KAAK3B,GAAO,KAAK,EAClC,CACD,EAED,UAAW4B,MAAe,MAAM,KAAKzC,EAAe,KAAA,CAAM,EACnDsC,GAAS,IAAIG,EAAW,GAC3BzC,EAAe,OAAOyC,EAAW,EAIrC5D,EAAc,MAAQ0D,GACtB3D,EAAc,MAAQ4D,GAELP,GAAA,EACjBE,GAAcnD,EAAc,KAAK,CAAA,CAGnC,SAASiD,IAAmB,CACpB,MAAA17D,EAAQs4D,EAAc,MAAM,CAAC,EAE/B,GAAAj4D,GAAOL,CAAK,EACd86D,GAAc,EAAE,MACX,CACD,GAAA,CAACvpC,EAAU,MAAO,OAEtBupC,GAAc5B,EAAe,MAAM,cAAoBoB,GAAO,QAAUt6D,CAAK,CAAC,CAAA,CAChF,CAGF,SAAS66D,GAAW/G,EAAkB,CAChCW,EAAe,QAAUX,IAE7BW,EAAe,MAAQX,EAEvB1d,EAAK,iBAAkB0d,CAAO,EACpBvuC,EAAAnO,EAAM,SAAU08C,CAAO,EAAA,CAG1B,SAAAgH,GAAcqB,EAAiB7Q,GAAe,GAAM,CAC3DiN,EAAa,MAAQ4D,EACrBnD,GAAc,MAAQ,OAEtB,IAAI9wD,GAAQ,GAEC+wD,GAAA,MAAM,QAAkBqB,IAAA,CAC9BA,GAAO,OAQVA,GAAO,QAAU,IAPRpyD,IAAA,EACToyD,GAAO,QAAU6B,IAAYj0D,GAEzBoyD,GAAO,UACTtB,GAAc,MAAQsB,IAI1B,CACD,EAEGhP,IAAgBmJ,EAAe,OAAS8E,GAAY,OAC1CA,GAAA,MAAM,kBAAkB4C,CAAO,CAC7C,CAGF,SAASN,GAAWvB,EAA2B,CAC7C,OAAIljD,EAAM,SACDkhD,EAAc,MAAM,SAASgC,EAAO,KAAK,EAG3ChC,EAAc,MAAM,CAAC,IAAMgC,EAAO,KAAA,CAG3C,SAASsB,GAAcQ,EAAoB,CACzC,MAAMxmD,GAASwB,EAAM,OAEjB,GAAA,GAACxB,IAAUwB,EAAM,QAErB,IAAI,CAACglD,EACUnD,GAAA,MAAM,QAAQzrC,IAAS,CAClCA,GAAM,OAAS,EAAA,CAChB,MACI,CAKD,GAJSyrC,GAAA,MAAM,QAAQzrC,IAAS,CAClCA,GAAM,OAAS,EAAA,CAChB,EAEG,OAAO5X,IAAW,WACNulD,GAAA,MAAM,QAAQ3tC,IAAS,CACnCA,GAAM,OAAS,CAAC5X,GAAOwmD,EAAY5uC,EAAK,CAAA,CACzC,UAEGpW,EAAM,WAAY,CACpB,MAAMilD,GAAkBD,EAAW,SAAS,EAAE,kBAAkB,EAElDjB,GAAA,MAAM,QAAQ3tC,IAAS,QACnCA,GAAM,OAAS,GAACA,GAAAA,GAAM,QAANA,MAAAA,GAAa,WAAW,oBAAoB,SAAS6uC,IAAe,CACrF,CAAA,MAEalB,GAAA,MAAM,QAAQ3tC,IAAS,QACnCA,GAAM,OAAS,GAACA,GAAAA,GAAM,QAANA,MAAAA,GAAa,WAAW,SAAS4uC,GAAA,YAAAA,EAAY,YAAU,CACxE,EAIL,MAAME,GAAYlB,GAAgB,MAEpBD,GAAA,MAAM,QAAkBb,IAAA,CACpC,GAAI,CAACA,GAAO,QAAUA,GAAO,OAAQ,CACnC,IAAIvrD,GAASutD,GAAU,IAAIhC,GAAO,KAAK,GAAK,KAErC,KAAAvrD,IAAUA,GAAO,QACtBA,GAAO,OAAS,GAChBA,GAASA,GAAO,MAClB,CACF,CACD,CAAA,CAGH+rD,GAAcvC,EAAa,KAAK,EAAA,CAGlC,SAASgE,GAAev8D,EAAgC,CAClDoX,EAAM,UAAY2L,GAAS,OAE/B,CAAC1iB,GAAOL,CAAK,GAAK21C,GAAa6lB,GAAiBx7D,CAAK,CAAC,CAAA,CAGxD,SAASw8D,GAAmBx8D,EAAgC,QAC1Du8D,GAAev8D,CAAK,EAEhB64D,EAAY,SACd1gD,GAAAqhD,EAAQ,QAAR,MAAArhD,GAAe,eACjB,CAGF,SAASw9B,GAAa2kB,EAAmC,CACvD,GAAI,CAACA,EAAQ,OAEP,MAAA/K,GAAWsM,GAAWvB,CAAM,EAC5Bt6D,GAAQs6D,EAAO,MAErB,GAAI/K,GACEoJ,EAAY,MAAM,SAAaxpD,GAAK,QAAUnP,EAAK,IACrD6U,GAAgB8jD,EAAY,MAAexpD,IAAAA,GAAK,QAAUnP,EAAK,EAChD05D,GAAA,MAAM,OAAO15D,EAAK,GAGnCy5D,EAAe,OAAOz5D,EAAK,MACtB,CAKL,GAJKoX,EAAM,WACTuhD,EAAY,MAAM,OAAS,GAGzB2C,GAAQ,MAAO,OAEnB,GAAIxC,EAAc,OAAS94D,KAAU84D,EAAc,MAAO,CAClD,MAAA2D,GAAY,CAAE,GAAG3D,CAAc,EAEzBH,EAAA,MAAM,KAAK8D,EAAS,EACjB/C,GAAA,MAAM,IAAI15D,GAAOy8D,EAAS,CAAA,CAG5BhD,EAAA,IAAIa,EAAO,MAAOA,CAAM,CAAA,CAGzC/0C,EACEnO,EAAMA,EAAM,UAAYm4C,GAAW,WAAa,UAAU,EAC1DvvD,GACAs6D,EAAO,IACT,EACA7Y,GAAa6Y,CAAM,EAEfljD,EAAM,UACJA,EAAM,iBAAmB,eAC3BqhD,EAAc,MAAQ,GACPkD,GAAA,GAGjB,sBAAsB9uB,CAAY,GAElCguB,GAAW,EAAK,EAGlBnC,EAAY,MAAQ,CAAA,CAGtB,SAASjX,GAAa6Y,EAA2B,CAC/C,GAAIljD,EAAM,SAAU,CACd,GAAAykD,GAAWvB,CAAM,EAAG,CACtB,MAAMpyD,GAAQowD,EAAc,MAAM,UAAej0D,IAAAA,KAAMi2D,EAAO,KAAK,EAE/D,CAACpyD,KACWowD,EAAA,MAAM,OAAOpwD,GAAO,CAAC,EACrBmwD,EAAA,MAAM,OAAOnwD,GAAO,CAAC,EACrC,MAEcowD,EAAA,MAAM,KAAKgC,EAAO,KAAK,EACvBjC,EAAA,MAAM,KAAKiC,EAAO,KAAK,EAGxBX,EAAA,MAAM,KAAKrB,EAAc,KAAK,EAE7CliB,EAAK,eAAgBujB,CAAY,EAC5BvjB,EAAA,eAAgBiiB,EAAc,KAAK,EACxC7a,EAAcmc,CAAY,EAC1Bp0C,EACEnO,EAAM,SACNuiD,EACAA,EAAa,IAAI35D,IAAA,QAAS,QAAAmY,GAAAqjD,GAAiBx7D,EAAK,IAAtB,YAAAmY,GAAyB,OAAQnY,GAAK,CAClE,EACcs9C,EAAA,CAAA,KACT,CACC,MAAAof,GAAYpE,EAAc,MAAM,CAAC,EAEvCA,EAAc,MAAM,OAAS,EAC7BD,EAAc,MAAM,OAAS,EACfC,EAAA,MAAM,KAAKgC,EAAO,KAAK,EACvBjC,EAAA,MAAM,KAAKiC,EAAO,KAAK,EAEjCoC,KAAcpC,EAAO,QACvBX,EAAeW,EAAO,MAEtBlkB,EAAK,eAAgBujB,CAAY,EACjCvjB,EAAK,eAAgBiiB,EAAc,MAAM,CAAC,CAAC,EAC3C7a,EAAcmc,CAAY,EAC1Bp0C,EAAUnO,EAAM,SAAyBuiD,EAAcW,EAAO,IAAI,EACpDhd,EAAA,EAChB,CACF,CAGF,SAAS+X,IAAgB,CACnBj+C,EAAM,UAAY2L,GAAS,OAEpB83C,GAAA,CAACpG,EAAe,KAAK,CAAA,CAGlC,SAASW,IAAqB,CAC5ByD,EAAY,MAAQ,GACpBtzC,EAAUnO,EAAM,cAAc,EAE1BA,EAAM,cAAgBq9C,EAAe,QACvCoG,GAAW,EAAK,EAChBt1C,EAAUnO,EAAM,cAAc,EAChC,CAGF,SAAS2qC,IAAc,CACjB,GAAA,EAAA3qC,EAAM,UAAY2L,GAAS,QAE3B3L,EAAM,UAAW,CACR,UAAAkjD,KAAU3B,EAAY,MAChBe,GAAA,MAAM,OAAOY,EAAO,KAAK,EAG1Cb,EAAe,MAAM,EAErBd,EAAY,MAAM,OAAS,EAC3BL,EAAc,MAAM,OAAS,EAC7BD,EAAc,MAAM,OAAS,EAC7BQ,EAAY,MAAQ,GAELc,EAAAviD,EAAM,SAAW,CAAA,EAAK,GAEtBukD,GAAA,EACfvlB,EAAK,eAAgBujB,CAAY,EACjCp0C,EAAUnO,EAAM,SAAyBuiD,EAAcviD,EAAM,SAAW,GAAK,EAAE,EAC/EmO,EAAUnO,EAAM,OAAO,EACvBujC,EAAWgf,CAAa,EACX9sB,EAAA,CAAA,CACf,CAGF,IAAIoS,GAAU,GAEd,SAASmC,GAAY9wC,EAAmB,CACjC2uC,KACOA,GAAA,GACA15B,EAAAnO,EAAM,QAAS9G,CAAK,EAChC,CAGF,SAAS+wC,GAAW/wC,EAAmB,CACjC2uC,KACQA,GAAA,GAEV,WAAW,IAAM,CACVA,IACO15B,EAAAnO,EAAM,OAAQ9G,CAAK,GAE9B,GAAG,EACR,CAGF,SAASqrD,IAAiB,CACpB,GAAA,CAAC5a,EAAM,MAAO,OAElB,MAAM+S,EAAUW,EAAe,MAE3Br9C,EAAM,SACR2pC,EAAM,MAAM,MAAQ,GAEpBA,EAAM,MAAM,MAAQ+S,EAAU,GAAKuE,EAAc,MAAM,CAAC,GAAK,GAG/DvE,EAAU/S,EAAM,MAAM,MAAU,EAAAA,EAAM,MAAM,KAAK,CAAA,CAGnD,SAAS4b,IAAoB,CAC3B,GAAI,CAAC5b,EAAM,OAASxB,EAAU,MAAO,OAEjC,IAAAqd,EAEUnE,EAAA,MAAQ1X,EAAM,MAAM,MAE7B0X,EAAc,MAERuC,GAAY,OAASzC,EAAa,QAAU,GACtCqE,EAAA,GAEfA,EAAe1D,EAAe,MAAM,UACxBoB,IAAA,OAAOA,GAAO,KAAK,IAAM7B,EAAc,KACnD,EACemE,EAAAA,IAAiB,GAAK,EAAIA,GAP1BA,EAAA,GAUjB,sBAAsB,IAAM,CACrBA,IACHA,EAAe1D,EAAe,MAAM,cACxB,CAACZ,EAAc,MAAM,SAASgC,GAAO,KAAK,CACtD,GAGEsC,IAAiBrE,EAAa,OAChCuC,GAAc8B,CAAY,EAGxBxlD,EAAM,UAAYkiD,GAAO,QACfZ,EAAA,MAAQlnD,GAAc8nD,GAAO,KAAK,GAGnCzsB,EAAA,CAAA,CACd,EAEStnB,EAAAnO,EAAM,cAAeqhD,EAAc,KAAK,CAAA,CAGpD,SAAS3V,GAAuB,CACzBvD,EAAU,QAEfA,EAAU,MAAQ,GAEdwB,EAAM,OACRA,EAAM,MAAM,cAAc,IAAI,MAAM,OAAO,CAAC,EAC9C,CAGF,SAAS8b,GAAoBvsD,EAAsB,CAC5CywC,EAAM,OAGT3pC,EAAM,iBAAmB,WACzB9G,EAAM,MAAQ,aACd,CAACywC,EAAM,MAAM,OACb,CAAC1gD,GAAO8T,GAAQmkD,EAAc,KAAK,CAAC,IAEpChoD,EAAM,gBAAgB,EACPisD,GAAApoD,GAAQmkD,EAAc,KAAK,CAAC,EAC7C,CAGF,SAASwE,IAAoB,CACtBrI,EAAe,OASJY,GAAA,EACdwD,EAAY,MAAQ,KATRA,EAAA,MAAQ,CAACA,EAAY,MAE7BA,EAAY,OACdnuC,EAAAA,SAAS,IAAM,QACbvS,EAAAqhD,EAAQ,QAAR,MAAArhD,EAAe,cAAa,CAC7B,EAKL,CAGF,SAASulC,GAAMz7C,EAAwB,WACjCwyD,EAAe,OACft8C,GAAA4oC,EAAM,OAASprB,EAAU,QAAzB,MAAAxd,GAAiC,MAAMlW,IAE/B8qB,GAAA4I,EAAA,QAAA,MAAA5I,GAAO,MAAM9qB,EACzB,8BAKAwnB,EAAA,mBAgdM,MAAA,CA/cH,GAAIH,QAAK6zB,CAAA,UACN,UAAJ,IAAI9uB,GACH,uBAAOrT,GAAS,KAAA,EACjB,KAAK,QACJ,gBAAesO,EAAA,MAAA1X,EAAA,EAAY0X,EAAAA,MAAAlS,CAAA,EAAM,QAAQ,EACzC,gBAAekS,EAAAA,MAAW1X,EAAA,EAAC6iD,EAAc,KAAA,EAC1C,gBAAc,UACb,kBAAiBnrC,QAAO8zB,CAAA,EACxB,QAAOiY,EAAA,GAERxrC,EAAAA,mBAsTM,MAAA,SArTA,YAAJ,IAAI8L,EACH,uBAAOslC,GAAa,KAAA,EACrB,SAAS,IACR,QAAO7Z,GACP,OAAI6F,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAA,EAAA,CAAK9oC,EAAAA,SAAM,SAAWmrC,EAAc,QAAKpT,GAAW+Q,EAAM,CAAA,EAAA,GAGvDlS,GAAS,qBADjBz2B,EAAAA,mBAUM,MAAA,OARH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,iBAAA,CAAA,MAAWzzC,EAAAA,MAAKlS,CAAA,EAAC,WAAW,CAAA,CAAA,GAElCuS,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,6EAIzByS,EAAAA,mBAsPM,MAAA,CAtPA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAChBgC,EAAAA,WAoPOC,sBApPP,IAoPO,CAnPLtB,cAkPWgB,EAAAA,MAAAb,EAAA,EAAA,CAlPA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAwKW,CAxKKkS,QAAAlS,CAAA,EAAM,wBAAtBqS,EAAA,mBAwKWqsB,WAAA,CAAA,IAAA,GAAA,CAvKTxtB,cAqIWgB,EAAAA,MAAA0zC,EAAA,EAAA,CApIT,QAAA,GACC,MAAKtzC,iBAAA,CAAGJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,EACb,MAAO2wC,EAAa,MACpB,YAAWhvC,EAAAA,MAAKlS,CAAA,EAAC,YACjB,MAAK2lD,EAAAA,eAAA,UAAgCzzC,EAAAA,MAAKlS,CAAA,EAAC,aAAW,GAAA,eAAwBshD,EAAW,KAAA,KAAA,GAGzF,aAAWzR,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEwG,EAAY,MAAGxG,IAC5B,wBAAYiD,GAAa,CAAA,MAAA,CAAA,CAAA,GAEf,QACT4H,EAAA,QAAA,CAkCO,CAnCmB,KAAAj9D,GAAO,MAAAkI,MAAK,CACtCyhB,aAkCOC,EAAA,OAAA,MAAA,CAhCJ,MAAA5pB,GACA,OAAQw7D,GAAiBx7D,EAAK,EAC9B,YAAcu8D,GAAe,UAAWv8D,EAAK,CAAA,EAJhD,IAkCO,CA5BLsoB,cA2BWgB,EAAAA,MAAAb,EAAA,EAAA,CA1BR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IACtB,KAAI,CAA4B,MAAApX,GAAuC,OAAAw7D,GAAiBx7D,EAAK,cAAwCu8D,GAAe,KAAI,KAAOv8D,EAAK,CAAA,sBAMrK,IAkBM,CAlBNsoB,cAkBMgB,EAAAA,MAAA4zC,EAAA,EAAA,CAjBJ,QAAA,GACC,MAAKxzC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,EACZ,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACb,SAAA,GACC,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAAKg7C,IAAEmK,GAAev8D,EAAK,CAAA,qBAE5B,IASO,CATP6pB,EAAAA,mBASO,OAAA,CATA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACjBgC,aAOOC,EAAA,OAAA,WAAA,CAPgB,MAAA5pB,GAAe,OAAQw7D,GAAiBx7D,EAAK,CAAA,EAApE,IAOO,CANLsoB,cAKWgB,EAAAA,MAAAb,EAAA,EAAA,CAJR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,SACtB,KAAQ,CAAA,MAAApX,GAAe,OAAAw7D,GAAiBx7D,EAAK,CAAA,CAAA,qBAE9C,IAA0B,CAAvB+pB,kBAAAC,EAAA,gBAAAquC,EAAA,MAAcnwD,EAAK,CAAA,EAAA,CAAA,CAAA,gIAQzB,QAAO+0D,EAAA,QAChB,CAWO,CAZa,MAAAhzD,MAAK,CACbqf,QAAAlS,CAAA,EAAM,UAAlBuS,EAWO,WAAAC,EAAA,OAAA,UAAA,OAXsC,UAAY3f,EAAA,EAAzD,IAWO,CAVLqe,cASWgB,EAAAA,MAAAb,EAAA,EAAA,CATA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,gBAAmBnN,EAAK,CAAA,qBACjE,IAOM,CAPNqe,cAOMgB,EAAAA,MAAA4zC,EAAA,EAAA,CANJ,QAAA,GACC,wBAAQ5zC,QAAE3B,CAAA,EAAC,GAAW,KAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,EAC3B,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAAA,qBAEjB,IAAiB,yCAAVnN,EAAK,EAAA,EAAA,CAAA,CAAA,4FAKhBsf,EAoEU,YAAAD,EAAA,MAAA6zC,EAAA,EAAA,eAnEJ,UAAJ,IAAI3D,EACJ,QAAA,GACC,SAAU,GACV,QAASX,EAAW,MACrB,QAAQ,SACR,UAAU,MACT,YAAWvvC,EAAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,EAChB,wBAAYm1C,GAAiB,CAAA,MAAA,CAAA,CAAA,GAEnB,kBACT,IAWO,CAXPnzC,EAAA,WAWOC,EAXe,OAAA,UAAA,CAAA,UAAY3f,EAAA,EAAlC,IAWO,CAVLqe,cASWgB,EAAAA,MAAAb,EAAA,EAAA,CATA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,gBAAmBnN,EAAK,CAAA,qBACjE,IAOM,CAPNqe,cAOMgB,EAAAA,MAAA4zC,EAAA,EAAA,CANJ,QAAA,GACC,wBAAQ5zC,QAAE3B,CAAA,EAAC,GAAW,KAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,EAC3B,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAAA,qBAEjB,IAAiB,yCAAVnN,EAAK,EAAA,EAAA,CAAA,CAAA,iGAKpB,IA2Ce,CA3Cfqe,cA2CegB,EAAAA,MAAAstC,EAAA,EAAA,CA3CD,QAAA,GAAQ,YAAA,EAAA,qBACV,IAAuC,EAAjDnf,EAAAA,UAAA,EAAA,EAAAhuB,EAyCW,mBAAAqsB,WAzCwB,KAAAC,EAAA,WAAAuiB,EAAA,MAAjB,CAAAt4D,GAAOkI,yDAA+BA,IAAK,CAEnDA,IAASowD,EAAA,MAAc,OAASM,EAAY,MADpDjvC,aAuCOC,EAAA,OAAA,MAAA,OApCJ,MAAA5pB,GACA,OAAQw7D,GAAiBx7D,EAAK,EAC9B,YAAcw8D,GAAmB,UAAWx8D,EAAK,CAAA,EALpD,IAuCO,CAhCLsoB,cA+BWgB,EAAAA,MAAAb,EAAA,EAAA,CA9BR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IACtB,KAAI,CAAoC,MAAApX,GAA+C,OAAAw7D,GAAiBx7D,EAAK,cAAgDw8D,GAAmB,KAAI,KAAOx8D,EAAK,CAAA,sBAMjM,IAsBM,CAtBNsoB,cAsBMgB,EAAAA,MAAA4zC,EAAA,EAAA,CArBJ,QAAA,GACC,MAAKxzC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,EACb,SAAA,GACC,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAAKg7C,IAAEoK,GAAmBx8D,EAAK,CAAA,qBAEhC,IAaO,CAbP6pB,EAAAA,mBAaO,OAAA,CAbA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACjBgC,aAWOC,EAAA,OAAA,WAAA,CATJ,MAAA5pB,GACA,OAAQw7D,GAAiBx7D,EAAK,CAAA,EAHjC,IAWO,CANLsoB,cAKWgB,EAAAA,MAAAb,EAAA,EAAA,CAJR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,SACtB,KAAQ,CAAA,MAAApX,GAAe,OAAAw7D,GAAiBx7D,EAAK,CAAA,CAAA,qBAE9C,IAA0B,CAAvB+pB,kBAAAC,EAAA,gBAAAquC,EAAA,MAAcnwD,EAAK,CAAA,EAAA,CAAA,CAAA,qQActCohB,EAAAA,MAAAlS,CAAA,EAAM,QAAUkS,EAAA,MAAAlS,CAAA,EAAM,iBAAc,4BAD5CqS,EAAAA,mBAgCM,MAAA,OA9BH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,UAAgCrE,EAAW,KAAA,SAIjD7uC,EAAAA,mBAqBE,QAAA,SApBI,cAAJ,IAAIuvC,GACH,MAAK1vC,EAAAA,eAAA,CAAwBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,EAA+B2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,UAAA,EAA2C8sC,EAAc,OAAInrC,EAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,SAAA,CAAA,GAK1I,SAAU2B,EAAAA,MAAKlS,CAAA,EAAC,SACjB,aAAa,MACb,SAAS,KACT,KAAK,WACL,oBAAkB,OACjB,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,uCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GACd,QAAOulD,GACP,UAASE,GACT,QAAK5V,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEhR,GAAYgR,EAAM,GACzB,OAAInL,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE/Q,GAAW+Q,EAAM,GACvB,qCAAkB7S,EAAS,MAAA,IAC3B,iBAAgBuD,EAChB,SAAQA,CAAA,cAEXj5B,EAAAA,mBAEO,OAAA,SAFG,SAAJ,IAAIyvC,GAAU,MAAK5vC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAY,cAAY,0BACnD8wC,EAAa,KAAA,EAAA,CAAA,wDAItBhvC,EAAAA,mBAoDWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CAlDDxsB,EAAAA,MAAAlS,CAAA,EAAM,QAAUkS,EAAA,MAAAlS,CAAA,EAAM,iBAAc,4BAD5CqS,EAAAA,mBAoBE,QAAA,eAlBI,cAAJ,IAAI2vC,GACH,MAAK1vC,EAAA,eAAA,CAAGJ,EAAAA,SAAG,YAAamrC,EAAc,OAAInrC,QAAE3B,CAAA,EAAC,IAAG,QAAA,SAAA,CAAA,CAAA,EAChD,SAAU2B,EAAAA,MAAKlS,CAAA,EAAC,SACjB,aAAa,MACb,SAAS,KACT,KAAK,WACL,oBAAkB,OACjB,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,MAAK2lD,EAAAA,eAAA,CAA+B,QAAAtI,EAAA,MAAiB,OAAS,IAAA,GAG9D,uCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GACd,QAAOkI,GACP,QAAK1V,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEhR,GAAYgR,EAAM,GACzB,OAAInL,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE/Q,GAAW+Q,EAAM,GACvB,qCAAkB7S,EAAS,MAAA,IAC3B,iBAAgBuD,EAChB,SAAQA,CAAA,4CAGiBx5B,EAAA,MAAKlS,CAAA,EAAC,WAAS,CAAKq9C,EAAc,QAAyBhU,GAAQ,QAAyBn3B,EAAA,MAAKlS,CAAA,EAAC,iBAAc,cAAA,CAAsBqhD,EAAa,sBAD/KhvC,qBA6BO,OAAA,OArBJ,MAAKC,EAAAA,eAAA,CAAuB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,UAAA,CAAA,EAAA,IAAwC2B,EAAA,MAAE3B,CAAA,EAAC,IAAiC,WAAA,aAAA,CAAA,EAAA2B,QAAAlS,CAAA,EAAM,QAAUq9C,EAAc,OAAIhU,GAAQ,UAMhJ+a,GAAiBlD,EAAa,MAAA,CAAA,CAAA,EADtC3uC,aAYOC,EAAA,OAAA,WAAA,OATJ,MAAO0uC,EAAa,MAAA,CAAA,EACpB,OAAQkD,GAAiBlD,EAAa,MAAA,CAAA,CAAA,CAAA,EAJzC,IAYO,CANLhwC,cAKWgB,EAAAA,MAAAb,EAAA,EAAA,CAJR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,SACtB,KAAe,CAAA,MAAAkhD,EAAA,MAA0B,CAAA,EAAA,OAAAkD,GAAiBlD,EAAa,MAAA,CAAA,CAAA,CAAA,CAAA,qBAExE,IAAsB,qBAAnB,gBAAAD,EAAa,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,gDAGpB5uC,qBAEWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,qBADN,gBAAAuiB,EAAa,MAAA,CAAA,CAAA,EAAA,CAAA,+CAIVkD,GAAe,qBAA3B9xC,EAAAA,mBAkBO,OAAA,OAlBuB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAAA,GAEhC0zC,GAAa,MADrB1xC,EAAAA,WAaOC,EAAA,OAAA,WAAA,OAVJ,QAAS,GACT,MAAOyxC,GAAa,MAAC,MACrB,OAAQA,GAAa,KAAA,EALxB,IAaO,CANL/yC,cAKWgB,EAAAA,MAAAb,EAAA,EAAA,CAJR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,SACtB,KAAe,CAAA,MAAAikD,GAAA,MAAc,wBAA8BA,GAAa,KAAA,CAAA,qBAEzE,IAAyB,CAAtBtxC,EAAAA,gBAAAC,EAAAA,gBAAAqxC,GAAA,MAAc,KAAK,EAAA,CAAA,CAAA,gDAG1B5xC,qBAEWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAAA,MAAA5P,CAAA,EAAO,WAAW,EAAA,CAAA,sEAO3C4P,EAAAA,MAAAlS,CAAA,EAAM,SAqBFkS,EAAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAAlS,CAAA,EAAM,uBADtCqS,EAAAA,mBAGO,MAAA,OADJ,MAAKC,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,QAAE3B,CAAA,EAAC,IAAG,OAAA,aAAA,EAAyB2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,uDAvB9D8B,qBAoBM,MAAA,OAlBH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,EAAAA,eAAA,CAAqB,MAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,oBAAgCspC,GAAS,OAAIp3B,EAAAA,MAAKlS,CAAA,EAAC,QAAO,KAAA,OAK3FuS,EAAAA,WAWOC,qBAXP,IAWO,CAVLtB,cASWgB,EAAAA,MAAAb,EAAA,EAAA,CATA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAMQ,CALAkS,QAAAlS,CAAA,EAAM,oBADd,EAAAmS,cAMQD,EAAAA,MAAApO,EAAA,EAAA,OAJL,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,OACZ,MAAKsS,EAAAA,eAAA,CAAqB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAe,OAAA,CAAA,EAAA,CAAA2B,EAAAA,MAAAlS,CAAA,EAAM,2CAIrDqgC,EAAAA,UAAA,EAAAluB,cAAqED,EAAAA,MAArEpO,EAAA,EAAA4O,EAAAA,WAAqE,CAAhD,IAAA,CAAA,EAAAR,QAAA5I,CAAA,EAAM,UAAS,CAAG,MAAO4I,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,sDAQzDW,EAAAA,YAmBakB,EAAAA,WAAA,CAnBA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IASS,CARD+4B,GAAS,qBADjBj3B,EAAAA,mBASS,SAAA,OAPN,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EAC7B,KAAK,SACL,SAAS,KACR,aAAY2B,EAAA,MAAA5P,CAAA,EAAO,UAAU,MAC7B,wBAAYqoC,GAAW,CAAA,MAAA,CAAA,CAAA,GAExBz5B,EAAAA,YAAgDgB,EAAAA,MAAApO,EAAA,EAAhD4O,EAAAA,WAAcR,EAAAA,MAAkC5I,CAAA,EAA5B,MAAK,CAAE,MAAM,OAAA,CAAO,EAAA,KAAA,EAAA,CAAA,UAE1B4I,QAAAlS,CAAA,EAAM,uBAAtBqS,EAAA,mBAOM,MAAA,OAP0B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAC1DW,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,EAAAA,SAAM,aAAeA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,KAC1C,MAAM,gGAKd4H,cA6ISgB,EAAAA,MAAAotC,EAAA,EAAA,SA5IH,SAAJ,IAAIpqB,GACH,wBAAQhjB,QAAE3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,EAC9B,QAAS8sC,EAAc,MACvB,GAAInrC,QAAUkjB,CAAA,EACd,WAAYljB,EAAAA,MAAKlS,CAAA,EAAC,eAClB,MAAOkS,EAAA,MAAAlS,CAAA,EAAM,cAAgBkS,QAAUkjB,CAAA,EACvC,wBAAYkR,GAAK,CAAA,MAAA,CAAA,EACjB,iCAAa+a,EAAa,MAAA,GAAA,qBAE3B,IAkIO,CAlIP9uC,aAkIOC,EAAA,OAAA,OAAA,CAhIJ,QAASmxC,GAAY,MACrB,WAAAc,GACA,aAAAlmB,EAAA,EAJH,IAkIO,CA5HLrtB,cA2HWgB,EAAAA,MAAAb,EAAA,EAAA,CA1HR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAiB,CAAA,QAAA2jD,GAAA,MAAc,WAAAc,kBAAwB,CAAA,qBAExD,IAsHM,CAtHNhyC,EAAAA,mBAsHM,MAAA,CArHH,MAAKH,EAAAA,eAAA,CAAkBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,GAAyBrM,EAAM,SAAWA,EAAM,SAAWgO,QAAE3B,CAAA,EAAC,IAAG,OAAA,YAAA,EAAsC2B,EAAA,MAAAlS,CAAA,EAAM,cAM/HkS,EAAAA,MAAAlS,CAAA,EAAM,QAAUkS,EAAA,MAAAlS,CAAA,EAAM,iBAAc,yBAA/CqS,EAAAA,mBAuBM,MAAA,OAvB0D,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAC1EW,cAqBQgB,EAAAA,MAAA8zC,EAAA,EAAA,SApBF,cAAJ,IAAI/D,GACH,MAAK3vC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,EACb,YAAA,GACC,SAAU2B,EAAAA,MAAKlS,CAAA,EAAC,SAChB,YAAakS,EAAAA,MAAM5P,CAAA,EAAC,OACpB,aAAc,GACd,SAAU,GACX,KAAK,WACL,oBAAkB,OACjB,QAAOijD,GACP,UAASE,GACT,QAAOzb,GACP,OAAMC,GACN,uCAAkB9B,EAAS,MAAA,IAC3B,iBAAgBuD,EAChB,SAAQA,CAAA,GAEE,iBACT,IAAmC,CAAnCx6B,EAAAA,YAAmCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAArBh0C,QAAK5I,CAAA,EAAC,MAAM,CAAA,EAAA,KAAA,EAAA,CAAA,+EAIpBpF,EAAM,SAAWgO,EAAAA,SAAM,MAAM,QAAzCK,EAEO,WAAAC,2BAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qDAEnCkR,cAgFcgB,EAAAA,MAAAi0C,EAAA,EAAA,SA/ER,cAAJ,IAAIhE,GACJ,QAAA,GACC,MAAKwD,EAAAA,eAAA,QAA4B,OAAyC,UAAA,GAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,aAAa,IAAA,GAI7F,MAAO2jD,GAAY,MACnB,YAAW,GACZ,YAAA,GACC,OAAQ,OACT,SAAO,QACN,cAAW,QAA4BzxC,EAAAA,MAAE3B,CAAA,EAAC,GAAe,SAAA,EAAA2B,QAAAlS,CAAA,EAAM,YAAckS,QAAE3B,CAAA,EAAC,IAAG,UAAA,WAAA,EAAA,EAAA,qCAA4I,oBAAA2B,EAAAA,MAAAlS,CAAA,EAAM,QAAA,IAO3N,QACT6lD,EAAA,QAAA,CAeK,CAhBqB,KAAA3C,GAAQ,MAAApyD,MAAK,CAE/BoyD,GAAO,qBADf7wC,EAAAA,mBAeK,KAAA,OAbF,wBAAQH,QAAE3B,CAAA,EAAC,GAAmB,aAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EACnC,MAAO2yC,GAAO,KAAA,GAEf3wC,aASOC,EAAA,OAAA,QAAA,CATa,OAAA0wC,GAAiB,MAAApyD,EAAA,EAArC,IASO,CARLogB,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CAPA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAI,CAAI,OAAAkjD,GAAQ,MAAApyD,EAAK,CAAA,qBAC5D,IAKM,CALN2hB,EAAAA,mBAKM,MAAA,CAJH,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,OAAA,CAAA,CAAA,EAC9B,MAAKo1C,EAAAA,eAAA,CAAA,mBAAA,GAA2BzC,GAAO,MAAK,CAAA,IAAA,CAAA,CAE1C,EAAAtwC,kBAAAswC,GAAO,KAAK,EAAA,CAAA,CAAA,0DAKvB,EAAA/wC,cAiCSD,EAAAA,MAAAk0C,EAAA,EAAA,OA/BN,MAAOlD,GAAO,MACd,MAAOA,GAAO,MACd,SAAUA,GAAO,UAAagB,GAAO,OAAA,CAAKO,GAAWvB,EAAM,EAC3D,QAASA,GAAO,QAChB,WAAUA,GAAO,MACjB,QAASA,GAAO,QAChB,SAAUuB,GAAWvB,EAAM,EAC5B,WAAA,GACC,SAAMlI,IAAEzc,GAAa2kB,EAAM,EAC3B,YAASlI,IAAE0I,GAAc5yD,GAAK,EAAA,CAAA,qBAE/B,IAmBO,CAnBPyhB,aAmBOC,EAAA,OAAA,UAAA,CAnBA,OAAA0wC,GAAiB,MAAApyD,GAAe,SAAU2zD,GAAWvB,EAAM,CAAA,EAAlE,IAmBO,CAlBLhyC,cAiBWgB,EAAAA,MAAAb,EAAA,EAAA,CAhBR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QACtB,MAAQ,OAAAkjD,GAAQ,MAAApyD,GAAiB,SAAA2zD,GAAWvB,EAAM,CAAA,CAAA,qBAEnD,IAKO,CALPzwC,EAAAA,mBAKO,OAAA,CAJJ,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAA,mBAAA,GAA2BzC,GAAO,MAAK,CAAA,IAAA,CAAA,CAE1C,EAAAtwC,kBAAAswC,GAAO,KAAK,EAAA,CAAA,EAEChxC,QAAAlS,CAAA,EAAM,2BAAxBmS,cAMaC,aAAA,OANyB,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBACzD,IAIQ,CAHAk0C,GAAWvB,EAAM,GADzB7iB,EAAAA,UAAA,EAAAluB,cAIQD,EAJR,MAAApO,EAAA,EAAA4O,EAAAA,WAIQ,CAFE,IAAA,CAAA,EAAAR,EAAAA,MAAA5I,CAAA,EAAM,MAAK,CAClB,MAAO4I,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,yPAOd,gBACT,IAMM,CANNkC,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBgC,EAAAA,WAIOC,oBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAAqC,CAAlC2S,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAA5P,CAAA,EAAO,KAAK,EAAA,CAAA,CAAA,wEAMhC4B,EAAM,QAAUgO,EAAAA,SAAM,MAAM,OAAxCK,EAEO,WAAAC,0BAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,6JCp8ClCqmD,GAAoBl5C,GAAW,CAC1C,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAkB,EAC1B,SAAUpB,GACV,MAAO,CAAC,OAAQ,MAAM,EACtB,QAAS,MACT,OAAQ,CACN,KAAM,CAAC,QAAS,QAAQ,EACxB,QAAS,IACX,EACA,OAAQwB,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OACb,YAAa,OACb,SAAUzB,EACV,eAAgB,OAChB,aAAcA,EACd,UAAW,OACX,UAAWA,EACX,WAAYA,EACZ,UAAWA,EACX,WAAYA,EACZ,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,YAAaA,EACb,SAAUA,EACV,MAAO,OACP,UAAW,OACX,UAAWA,EACX,KAAM,OACN,YAAaA,EACb,MAAO,OACP,MAAOA,EACP,QAASmB,EAAuC,EAChD,OAAQA,EAAuC,EAC/C,SAAUA,EAAsC,EAChD,QAASA,EAAmC,EAC5C,SAAUA,EAAsC,EAChD,SAAUA,EAAsC,EAChD,QAASA,EAAqC,EAC9C,QAASA,EAAU,CACrB,CAAC,uMCrCD,MAAM89B,EAASt6B,EAAAA,IAAmB,EAC5B02B,EAAU12B,EAAAA,IAAsB,EAEhC,CACJ,MAAAq0B,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,WAAA3C,EACA,cAAA4C,EACA,cAAAC,GACEhD,GAA+B,IAAM,OAAA,OAAAriC,EAAAqnC,EAAQ,QAAR,YAAArnC,EAAe,QAAO,EAEzDwP,EAAKtF,GAAc,eAAe,EAGlCjL,EAAQiM,GAAS,eADRsF,EACgC,CAC7C,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,SAAU,GACV,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,OAAQ,GACR,OAAQ13B,GAAe,EACvB,YAAa,GACb,OAAQA,GAAe,EACvB,YAAa,GACb,YAAa,KACb,SAAU,IAAMoF,EAAS,MACzB,eAAgB,IAAMtD,EAAG,GAAG,MAAM,EAClC,aAAc,GACd,UAAW,CACT,QAAS,SACT,UAAW3nB,GAASisC,GAAmB,SAASjsC,CAAK,CACvD,EACA,UAAW,GACX,WAAY,GACZ,UAAW,GACX,WAAY,GACZ,UAAW,KAAO,CAAA,GAClB,QAAS,IAAMq9C,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,YAAa,GACb,SAAU,GACV,MAAO,KACP,UAAW,GACX,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,YAAa,KACb,MAAO,KAAO,CAAA,GACd,MAAO,EAAA,CACR,EAEKuwB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERlP,EAASI,GAAU,QAAS07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAElD,CAAE,MAAArE,CAAM,EAAI66B,GAAc,EAE1BsR,EAAep2B,EAAAA,IAAI1R,EAAM,KAAK,EAC9BmhD,EAAezvC,MAAI,EAAE,EACrB2rC,EAAiB3rC,MAAI,EAAK,EAC1By2B,EAAYz2B,MAAI,EAAK,EAE3B,IAAIu9B,EAAU,GACV5G,EAAYroC,EAAM,MAClBsmD,EAAY,OAAOje,CAAS,EAEhC,MAAMke,EAAallD,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC9D6hD,EAAexgD,EAAAA,SAAS,IAAA,OAAM,QAAAN,EAAAirC,EAAO,QAAP,YAAAjrC,EAAc,eAAgB,GAAE,EAC9DylD,EAAkBnlD,EAAAA,SAAS,IAAA,OAAM,QAAAN,EAAAirC,EAAO,QAAP,YAAAjrC,EAAc,iBAAkB,GAAE,EACnE+nC,EAAYznC,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,QAAUA,EAAM,MAAM,OAAO,EACjF+oC,EAAY1nC,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,QAAUA,EAAM,MAAM,OAAO,EAEvF4M,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPk/C,EAAa,MAAQl/C,EACTy/C,EAAAz/C,EACZ09D,EAAY,OAAO19D,CAAK,EAEpBw/C,EAAQ,QACFA,EAAA,MAAM,MAAQ,OAAOx/C,CAAK,EACpC,CAEJ,EACAgkB,EAAA,MAAMu0C,EAAcsF,CAAc,EAClC75C,QAAMywC,EAAyBz0D,GAAA,QACxBA,GAGHmY,GAAAqnC,EAAQ,QAAR,MAAArnC,GAAe,QAFfogD,EAAa,MAAQ,EAGvB,CACD,EACDv0C,QAAMk7B,EAAuBl/C,GAAA,CACvBoX,EAAM,QAAUgsC,EAAO,QAClBA,EAAA,MAAM,cAAgB,GAAGpjD,CAAK,GACvC,CACD,EACD8iB,EAAAA,YAAY,IAAM,CACZ,CAAC1L,EAAM,QAAU,CAACq9C,EAAe,OAAS,CAACrR,EAAO,QAEtDA,EAAO,MAAM,cAAgB,OAAOlE,EAAa,KAAK,EAAA,CACvD,EAEYh2B,EAAA,CACX,MAAAi0B,EACA,UAAAoC,EACA,OAAA6D,EACA,QAAA5D,EACA,MAAQv9C,GAA2B,QAAA,OAAAkW,GAAAqnC,EAAQ,QAAR,YAAArnC,GAAe,MAAMlW,IACxD,KAAM,IAAA,OAAM,OAAAkW,EAAAqnC,EAAQ,QAAR,YAAArnC,EAAe,OAAK,CACjC,EAED0T,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS,IAAM,CACT80B,EAAQ,OAAS,CAACn/C,GAAO6+C,EAAa,KAAK,IAC7CM,EAAQ,MAAM,MAAQ,OAAON,EAAa,KAAK,EACjD,CACD,CAAA,CACF,EAED,SAAS2e,GAAiB,CACxB,MAAM1B,EAAU5D,EAAa,MAC7B,IAAIrwD,GAAQ,GAEC+wD,EAAA,MAAM,QAAQzrC,GAAS,CAC7BA,EAAM,OAUTA,EAAM,QAAU,IATPtlB,IAAA,EACTslB,EAAM,QAAU2uC,IAAYj0D,GAExBslB,EAAM,SACJgyB,EAAQ,QACVA,EAAQ,MAAM,MAAQ,OAAOhyB,EAAM,KAAK,GAK9C,CACD,EAEGgyB,EAAQ,OAAS2c,EAAU,IAC7B3c,EAAQ,MAAM,MAAQke,EACxB,CAGF,IAAIze,EAAU,GAEd,SAASmC,EAAY9wC,EAAmB,CACjC2uC,IACOA,EAAA,GACA15B,EAAAnO,EAAM,QAAS9G,CAAK,EAChC,CAGF,SAAS+wC,GAAW/wC,EAAmB,CACjC2uC,IACQA,EAAA,GAEJlsC,EAAA,MAAQ,WAAW,IAAM,CACxBksC,IACO15B,EAAAnO,EAAM,OAAQ9G,CAAK,EAChBmxC,GAAA,IAEd,GAAG,EACR,CAGO,SAAA9L,GAAa31C,EAAwBiP,GAA6B,CACzE,GAAIswC,EAAU,OAASl/C,GAAOL,CAAK,EACjC,OAGF,MAAM08D,EAAYxd,EAAa,MAC/BA,EAAa,MAAQl/C,EAEXulB,EAAAnO,EAAM,SAAyBpX,EAAOiP,EAAI,EAEhDjP,IAAU08D,GACFrW,EAAA,GACG5E,GAAA,GAEbgT,EAAe,MAAQ,EACzB,CAGF,SAASqJ,EAAoBxtD,EAAuB,OAClD,MAAMtQ,GAAQ,OAAOsQ,GAAU,SAAWA,EAASA,EAAM,OAA4B,MAErF4uC,EAAa,MAAQl/C,GACXqmD,EAAA,GACEqX,EAAA19D,GAERu4D,EAAa,QAAU,KACzBA,EAAa,MAAQ,GAGnBnhD,EAAM,YACOq9C,EAAA,MAAQ,CAACr9C,EAAM,aAE1BgsC,EAAO,QACFA,EAAA,MAAM,eAAiBqR,EAAe,QAIvClvC,EAAAnO,EAAM,QAASpX,EAAK,EAC9B0qB,EAAAA,SAASqzC,CAAiB,GAC1B5lD,EAAAirC,EAAO,QAAP,MAAAjrC,EAAc,cAAa,CAGvB,MAAAhF,GAAQpK,GAASqO,EAAM,KAAK,EAC5BqsC,GAAcrsC,EAAM,SACtBlE,GAAS4qD,EAAqB3qD,IAAS,GAAG,EAC1CX,GAASsrD,EAAqB3qD,IAAS,EAAE,EAEpC,SAAAsuC,GAAauc,EAAQ,GAAM,CAClC,GAAI,CAAC3X,GAAWnH,EAAa,QAAUO,EAAW,OAExC4G,EAAA,GACV5G,EAAYP,EAAa,MACzBwe,EAAY,OAAOje,CAAS,EAEtB,MAAA6a,GAASrB,EAAa,MAAM,KAAKqB,GAAUA,EAAO,QAAU7a,CAAS,EAEvE2D,EAAO,QACFA,EAAA,MAAM,cAAc,OAAS,GAClClE,EAAa,OAASA,EAAa,QAAU,IAC7CkE,EAAO,MAAM,cAAc,KAAKlE,EAAa,KAAK,GAGjD9I,EAAA,eAAgB8I,EAAa,KAAK,EACvC1B,EAAc0B,EAAa,KAAK,EAChC35B,EAAUnO,EAAM,SAAyB8nC,EAAa,OAAOob,IAAA,YAAAA,GAAQ,OAAQ,IAAK,EAClF0D,GAAS1gB,EAAc,EAEvBmX,EAAe,MAAQ,GAEnBjV,EAAQ,QACFA,EAAA,MAAM,MAAQ,OAAOC,CAAS,EACxC,CAGF,IAAIwe,GAAgB,GAChBC,GAAiB,GAErB,SAASC,IAAc,CACjB/mD,EAAM,UAAYumD,EAAW,QAEjCM,GAAgBxJ,EAAe,MACdyJ,GAAA,GAEb9a,EAAO,QACTA,EAAO,MAAM,cAAgB,OAAOlE,EAAa,KAAK,GACxD,CAGF,SAASkf,IAAc,CACjBhnD,EAAM,UAAYumD,EAAW,QAEhBO,GAAA,GAEZ9a,EAAO,QAEZqR,EAAe,MAAQ,GAElBwJ,GAKH7a,EAAO,MAAM,eAAiB,IAJZ2a,EAAA,EAClBE,GAAgBxJ,EAAe,MACdwJ,IAAA14C,EAAUnO,EAAM,SAAU6mD,EAAa,IAG1D,CAGF,SAASI,EAAavK,EAAkB,CAClC18C,EAAM,UAAYumD,EAAW,OAASO,KAE1CzJ,EAAe,MAAQX,EAEvBA,GAAWiK,EAAkB,EAC7BE,GAAgBxJ,EAAe,MAE3BA,EAAe,QAAUX,GACjBvuC,EAAAnO,EAAM,SAAUq9C,EAAe,KAAK,EAG3CA,EAAe,QAClB8D,EAAa,MAAQ,IACvB,CAGF,SAASwF,GAAoB,CACZtJ,EAAA,MAAQ,EACrBr9C,EAAM,cACL,CAACA,EAAM,WAAa,CAACwmD,EAAgB,MAAM,QAG1Cxa,EAAO,QACFA,EAAA,MAAM,eAAiBqR,EAAe,MAC/C,CAGF,SAASjS,EAAclyC,EAAsB,CAC3C,GAAIivC,EAAU,MAAO,CACnBjvC,EAAM,gBAAgB,EACtB,MAAA,CAGI,MAAAnQ,GAAMmQ,EAAM,MAAQA,EAAM,IAE5B,GAAAnQ,KAAQ,SAAWA,KAAQ,cAC7B+hD,EAAY5xC,CAAK,UACRnQ,KAAQ,aAAeA,KAAQ,UAAW,CACnDmQ,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAEtB,MAAMrO,EAAU27D,EAAgB,MAC1Bj8D,GAASM,EAAQ,OAEvB,GAAI,CAACN,GAAQ,OAEP,MAAAL,GAAOnB,KAAQ,YAAc,EAAI,GAGnC,IAAA+H,IAAS,KAAK,IAAIqwD,EAAa,MAAQj3D,GAAM,EAAE,EAAIK,IAAUA,GAC7D24D,GAASr4D,EAAQiG,EAAK,EAEjB,QAAA1G,GAAI,GAAI84D,GAAO,UAAYA,GAAO,QAAU94D,GAAIG,GAAQ,EAAEH,GACxD0G,IAAA5G,GACT4G,IAASA,GAAQvG,IAAUA,GAC3B24D,GAASr4D,EAAQiG,EAAK,EAGxBqwD,EAAa,MAAQrwD,EAAA,KAEjB,CAAC,QAAS,GAAG,EAAE,SAAS/H,EAAG,GAC7BmQ,EAAM,gBAAgB,EAGnB,CAAC,QAAS,YAAa,YAAY,EAAE,SAASnQ,EAAG,IAEpDo4D,EAAa,MAAQ,GAEzB,CAGF,SAASrW,EAAY5xC,EAAsB,CAGzC,GAFAA,EAAM,gBAAgB,EAElB,CAAAivC,EAAU,MAEd,IAAIgZ,EAAa,OAAS,GAAKqF,EAAgB,MAAM,OAAQ,CACrD,MAAAtD,GAASsD,EAAgB,MAAMrF,EAAa,QAAU,GAAK,EAAIA,EAAa,KAAK,EAE1E5iB,GAAA2kB,GAAO,MAAOA,GAAO,IAAI,CAAA,MAEzB7Y,GAAA,EAGLl8B,EAAAnO,EAAM,QAAuB8nC,EAAa,KAAK,EACzDuV,EAAe,MAAQ,GAAA,CAGzB,SAAS1S,GAAc,OACrB,GAAI3qC,EAAM,UAAW,CACnB,MAAMslD,GAAYxd,EAAa,MAE/BA,EAAa,MAAQ,GACrBuV,EAAe,MAAQ,GAEnB,CAACp0D,GAAOq8D,EAAS,GAAKA,KAAcxd,EAAa,QACzCmH,EAAA,IAGZ5E,GAAa,EAAK,EAClBl8B,EAAUnO,EAAM,OAAO,EACvBsT,EAAAA,SAASiwB,CAAU,GACnBxiC,EAAAqnC,EAAQ,QAAR,MAAArnC,EAAe,OAAM,CACvB,CAGF,SAAS2qC,GAAuB,CAC1BvD,EAAU,QACZA,EAAU,MAAQ,GAEdC,EAAQ,OACVA,EAAQ,MAAM,cAAc,IAAI,MAAM,OAAO,CAAC,EAElD,8BAKAj2B,EAAAA,YAyISD,EAAA,MAAAg1C,EAAA,EAAA,CAxIN,GAAIh1C,QAAK6zB,CAAA,UACN,SAAJ,IAAIiG,EACI,QAASqR,EAAc,0CAAdA,EAAc,MAAArC,GAC9B,MAAK1oC,EAAA,eAAA,CAAGJ,EAAAA,MAAE3B,CAAA,EAAC,IAAK2B,EAAA,MAAKlS,CAAA,EAAC,SAAWkS,EAAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,EACtC,QAAS2B,EAAAA,MAAKlS,CAAA,EAAC,QACf,WAAUkS,QAAO8zB,CAAA,EACjB,aAAY9zB,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EACjB,MAAOu3B,EAAY,MACnB,KAAM51B,EAAAA,MAAKlS,CAAA,EAAC,KACZ,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,kBAAiBkS,EAAAA,MAAKlS,CAAA,EAAC,eACvB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,aAAY+oC,EAAS,MACrB,YAAa72B,EAAAA,MAAKlS,CAAA,EAAC,YACnB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,aAAYkS,EAAAA,MAAKlS,CAAA,EAAC,UAClB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,iBAAgBkS,EAAAA,MAAKlS,CAAA,EAAC,cACtB,YAAaynC,EAAW,YACxB,OAAQv1B,EAAAA,MAAKlS,CAAA,EAAC,OACd,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,SAAQinD,EACR,SAAQ1oB,GACR,QAAOoM,EACP,QAAKkF,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,GAAE,QAAA,OAAAj6C,GAAAqnC,EAAO,QAAP,YAAArnC,GAAS,UAChB,eAAespC,GACf,QAAO2c,kBACQD,mBASL,kBACT,IAyCO,CAzCPx0C,aAyCOC,EAAA,OAAA,UAAA,CAvCJ,MAAOs1B,EAAY,MACnB,QAAU51B,QAAWm6B,EAAA,EACrB,SAAWhC,GACX,QAAUS,EACV,QAAUH,CAAA,EANb,IAyCO,CAjCLz5B,cAgCWgB,EAAAA,MAAAb,EAAA,EAAA,CA/BR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QACtB,KAAI,OAAuB8nC,EAAY,cAAuB51B,QAAWm6B,EAAA,WAAwBhC,WAAmCS,UAAkCH,CAAA,sBAQvK,IAqBE,CArBFl4B,EAAAA,mBAqBE,QAAA,SApBI,UAAJ,IAAI21B,EACH,MAAK91B,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,UAAW2B,EAAAA,MAAKlS,CAAA,EAAC,UACjB,WAAYkS,EAAAA,MAAKlS,CAAA,EAAC,WAClB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,YAAakS,EAAK,MAAAlS,CAAA,EAAC,aAAekS,EAAA,MAAA5P,CAAA,EAAO,YACzC,SAAUikD,EAAU,MACpB,KAAMr0C,EAAAA,MAAKlS,CAAA,EAAC,KACb,aAAa,MACb,SAAS,KACT,KAAK,WACL,oBAAkB,OACjB,uCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GACd,QAAK6vC,GAAA,CAAA,IAAAA,GAAA,CAAA,UAAE39B,EAAAA,MAAWm6B,EAAA,GAAAn6B,EAAAA,MAAAm6B,EAAA,EAAA,GAAA7wC,CAAA,GAClB,UAAS4vC,EACT,QAAKyE,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,GAAEhR,EAAYgR,CAAM,GACzB,OAAInL,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,GAAE/Q,GAAW+Q,CAAM,GACvB,oCAAkB7S,EAAS,MAAA,IAC3B,iBAAgBuD,EAChB,SAAQA,CAAA,sDA9CD5C,EAAS,YAAG,sBAC1B,IAIO,CAJPv2B,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,8DAgDT+oC,EAAS,YAAG,sBAC1B,IAIO,CAJPx2B,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,8DAITy+B,EAAAA,OAAO,SAAWvsB,EAAAA,SAAM,MAAM,cAAU,UACtD,GAAA2zC,EAAA,QAAA,CAEO,CAH0D,OAAA3C,EAAQ,MAAApyD,GAAO,SAAAqnD,MAAQ,CACxF5lC,aAEOC,EAAA,OAAA,UAAA,CAFA,OAAA0wC,EAAiB,MAAApyD,GAAe,SAAAqnD,EAAA,EAAvC,IAEO,CADLjnC,cAAyFgB,EAAAA,MAAAb,EAAA,EAAA,CAA9E,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAQ,CAAA,OAAAkjD,EAAQ,MAAApyD,GAAO,SAAAqnD,EAAQ,mDAG9D1Z,EAAAA,OAAO,OAASvsB,EAAAA,SAAM,MAAM,YAAQ,qBAClD,CAEO,CAHoD,OAAAgxC,EAAQ,MAAApyD,MAAK,CACxEyhB,aAEOC,EAAA,OAAA,QAAA,CAFa,OAAA0wC,EAAiB,MAAApyD,EAAA,EAArC,IAEO,CADLogB,cAA6EgB,EAAAA,MAAAb,EAAA,EAAA,CAAlE,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAI,CAAI,OAAAkjD,EAAQ,MAAApyD,EAAK,mDAGlD2tC,EAAAA,OAAO,SAAWvsB,EAAAA,SAAM,MAAM,cAAU,uBACtD,IAEO,CAFPK,EAAAA,WAEOC,sBAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,2CAGrBy+B,EAAAA,OAAO,QAAUvsB,EAAAA,SAAM,MAAM,aAAS,sBACpD,IAEO,CAFPK,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,2CAI7By+B,EAAAA,OAAO,MAAQvsB,EAAAA,SAAM,MAAM,WAChC,OAED,GAAA2zC,UAAA,CAcO,CAhBE,QAAAh7D,EAAS,WAAA45D,gBAA0B0C,MAAQ,CAEpD50C,aAcOC,EAAA,OAAA,OAAA,CAZJ,QAAA3nB,EACA,WAAA45D,GACA,aAAe0C,EAAA,EAJlB,IAcO,CARLj2C,cAOYgB,EAAAA,MAAAb,EAAA,EAAA,CANT,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAI,CAAgB,QAAAnV,EAAqB,WAAA45D,gBAAsC0C,EAAA,qZCpjB7EC,GAAcj6C,GAAW,CACpC,KAAM,CAAC,OAAQ,MAAM,EACrB,IAAK,OACL,KAAMqB,GACN,OAAQzB,EACR,IAAK,OACL,IAAK,OACL,OAAQ,OACR,IAAK,OACL,UAAW,OACX,YAAa,OACb,MAAO,OACP,WAAY,OACZ,MAAO,OACP,QAASmB,EAAkC,EAC3C,QAASA,EAAuC,CAClD,CAAC,EAKYm5C,GAAmBl6C,GAAW,CACzC,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,OACT,OAAQJ,EACR,IAAK,OACL,QAASA,EACT,WAAY,OACZ,SAAUA,EACV,OAAQ,OACR,UAAW,OACX,eAAgB,OAChB,MAAO,MACT,CAAC,ECjBYu6C,GAAc,2BAEdC,GAAkB,OAAO,OAA0B,CAC9D,OACA,UACA,QACA,OACA,YACF,CAAC,8HCbK,MAAAvnD,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,KAAM,UACN,IAAK,CACH,QAAS,GACT,OAAQ,EACV,EACA,KAAM9C,GAAe,EACrB,OAAQ,GACR,IAAK,GACL,IAAK,CACH,QAAS,QACT,UAAW7lB,GAAS2+D,GAAgB,SAAS3+D,CAAK,CACpD,EACA,OAAQ,GACR,IAAK,EACL,UAAW,IACX,YAAa,GACb,MAAO,KACP,WAAY,KACZ,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsb,EAAQsN,EAAAA,SAAA,EAKRg2C,EAAa3lD,EAAAA,OAAOylD,GAAa,IAAI,EAErC/2C,EAAKtF,GAAc,QAAQ,EAE3Bw8C,EAAW/1C,MAAI,EAAK,EACpBg2C,EAAeh2C,MAAI,EAAK,EAExBuF,EAAUvF,EAAAA,IAAiB,EAC3Bi2C,EAAOtzC,GAAW,IAAMuzC,EAAU,EAAI,CAAC,EAEvC59D,EAAOqX,EAAAA,SAAS,KACbmmD,GAAA,YAAAA,EAAY,OAAQxnD,EAAM,IAClC,EACK4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvmB,EAAK,KAAsB,CAAC,EACjC,OAAOA,EAAK,OAAU,UAAYA,EAAK,QAAU,UACnD,CAACumB,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,MAC3B,EACD,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAmB,CACvB,CAACJ,EAAG,GAAG,OAAO,CAAC,EAAGvQ,EAAM,MACxB,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,WAC3B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,GAC9B,EAEI,OAAA,OAAOhW,EAAK,OAAU,WACxB2mB,EAAMJ,EAAG,GAAG,MAAM,CAAC,EAAI,GAAGvmB,EAAK,KAAK,MAG/B2mB,CAAA,CACR,EAED/D,EAAA,MACE,IAAM5M,EAAM,IACZ,IAAM,CACJynD,EAAS,MAAQ,GACjBC,EAAa,MAAQ,GACXE,EAAA,CAAA,CAEd,EACAh7C,EAAA,MACE,IAAM5M,EAAM,YACZ,IAAM,CACJ0nD,EAAa,MAAQ,GACXE,EAAA,CAAA,CAEd,EACAh7C,EAAA,MACE,IAAM5M,EAAM,IACZ,IAAM4nD,EAAU,CAClB,EAEa91C,EAAA,CAAE,SAAA21C,EAAU,aAAAC,EAAc,EAEvC,SAASG,EAAY3uD,EAAc,CACjCuuD,EAAS,MAAQ,GACPt5C,EAAAnO,EAAM,QAAS9G,CAAK,CAAA,CAGhC,IAAI4uD,EAA0B,KAErB,SAAAF,EAAU9wC,EAAQ,GAAO,CAChC,MAAMixC,EAAW9wC,EAAQ,MACnB+wC,EAASL,EAAK,MAEpB,GAAII,GAAYC,IAAWlxC,GAASgxC,IAAa,MAAQA,IAAaE,EAAO,aAAc,CACzFF,EAAWE,EAAO,YAElB,KAAM,CAAE,YAAaC,EAAa,aAAcC,CAAiB,EAAAH,EAC3D,CAAE,YAAaI,EAAW,aAAcC,CAAe,EAAAJ,EACvDhqC,EAAUhe,EAAM,IAAM,EAEtBssB,EAAQ,KAAK,KAChB27B,EAAcjqC,IAAYmqC,GAAa,IACvCD,EAAelqC,IAAYoqC,GAAc,GAC1C,CACF,EAEOJ,EAAA,MAAM,UAAY,SAAS17B,CAAK,GAAA,CACzC,CAGF,SAAS06B,EAAY9tD,EAAmB,CAC5BiV,EAAAnO,EAAM,QAAS9G,CAAK,CAAA,6BAK9BmZ,EAAA,mBAmCM,MAAA,SAlCA,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EAChB,uBAAO+M,EAAK,KAAA,EACZ,QAAOq2C,CAAA,IAGC90C,EAAA,MAAAlS,CAAA,EAAM,KAAOkS,EAAAA,SAAM,UAAYu1C,EAAQ,qBADhDp1C,EAAAA,mBAOE,MAAA,OALC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,IAAK2B,EAAAA,MAAKlS,CAAA,EAAC,IACX,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,QAAO6nD,CAAA,eAGGJ,EAAA,OAAYv1C,QAAAlS,CAAA,EAAM,cAAgB0nD,EAAY,qBAD3Dr1C,qBAME,MAAA,OAJC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,IAAK2B,EAAAA,MAAKlS,CAAA,EAAC,YACX,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,uBAAO0nD,EAAY,MAAA,GAAA,eAEDn+C,EAAI,MAAIrF,EAAM,KACjCqO,EAAAA,WAIOC,wBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAC/B,IAA0E,CAA1EkR,cAA0EgB,EAAAA,MAAApO,EAAA,EAAA,CAAnE,MAAKwO,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,KAAMhH,EAAI,KAAG,MAAO2I,EAAAA,MAAKlS,CAAA,EAAC,oFAI9DmS,EAMiB,YAAAD,EAAA,MAAAgiB,EAAA,EAAA,OANO,YAAW0zB,CAAA,qBACjC,IAIO,CAJPn1C,EAAAA,mBAIO,OAAA,SAJG,OAAJ,IAAIk1C,EAAQ,MAAKr1C,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAC5BgC,EAAAA,WAEOC,sBAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,+HCvJrC,MAAAA,EAAQiM,GAAS,cADRsF,EAC+B,CAC5C,KAAM,UACN,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,OAAQ,GACR,IAAK,KACL,QAAS,GACT,WAAY,QACZ,SAAU,GACV,OAAQ,KACR,UAAW,KACX,eAAgB,KAChB,MAAO,KAAO,CAAC,EAAA,CAChB,EAIKhB,EAAKtF,GAAc,cAAc,EAEjCo9C,EAAgB32C,EAAoB,IAAA,EAAE,EACtC42C,EAAc52C,EAAoB,IAAA,EAAE,EAE1ChG,EAAAA,YAAY,IAAM,CACV,MAAA1hB,EAAOgW,EAAM,QAAQ,OAEvBA,EAAM,IAAM,GAAKhW,EAAOgW,EAAM,KAChCqoD,EAAc,MAAQroD,EAAM,QAAQ,MAAM,EAAGA,EAAM,IAAM,CAAC,EAC1DsoD,EAAY,MAAQtoD,EAAM,QAAQ,MAAMA,EAAM,IAAM,CAAC,IAErDqoD,EAAc,MAAQ,MAAM,KAAKroD,EAAM,OAAO,EAC9CsoD,EAAY,MAAQ,CAAC,EACvB,CACD,EAEDxmD,EAAA,QAAQwlD,GAAatnD,CAAK,EAEpB,MAAA4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,aAAa,CAAC,EAAG,GACxB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAqB,CAAC,EACjC,OAAOA,EAAM,MAAS,UAAYA,EAAM,OAAS,UACnD,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,QAC7B,EACD,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAgC,CAAC,EAEnC,OAAA,OAAO3Q,EAAM,QAAW,WAC1B2Q,EAAMJ,EAAG,GAAG,QAAQ,CAAC,EAAI,GAAGvQ,EAAM,MAAM,MAGnC2Q,CAAA,CACR,8BAIC0B,EAAA,mBA8EM,MAAA,CA9EA,uBAAOzO,EAAS,KAAA,EAAE,KAAK,QAAS,uBAAO+M,EAAK,KAAA,CAAA,IAChD0vB,EAAAA,UAAA,EAAA,EAAAhuB,EAkBM,mBAAAqsB,WAlByB,KAAAC,EAAA,WAAA0pB,EAAA,MAAlB,CAAAnF,EAAQpyD,mBAArBuhB,EAAA,mBAkBM,MAAA,CAlByC,IAAKvhB,EAAQ,MAAKwhB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACtEgC,aAgBOC,EAAA,OAAA,UAAA,CAhBA,OAAA0wC,EAAiB,MAAApyD,CAAA,EAAxB,IAgBO,CAfLogB,cAcWgB,EAAAA,MAAAb,EAAA,EAAA,CAdA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAI,CAAI,OAAAkjD,EAAQ,MAAApyD,CAAK,CAAA,qBAC9D,IAYS,CAZTogB,cAYSgB,EAAAA,MAAAq2C,EAAA,EAAA,CAXP,QAAA,GACC,IAAKrF,EAAO,IACZ,KAAMA,EAAO,KACb,IAAKA,EAAO,IACZ,IAAKA,EAAO,IACZ,UAASA,EAAO,OAChB,IAAKA,EAAO,IACZ,aAAYA,EAAO,UACnB,eAAcA,EAAO,WAAA,qBAEtB,IAAiB,CAAdvwC,EAAAA,gBAAAC,EAAA,gBAAAswC,EAAO,IAAI,EAAA,CAAA,CAAA,oIAKXoF,EAAA,MAAY,sBAAvBj2C,EAAAA,mBAyDM,MAAA,OAzD0B,wBAAQH,EAAE,MAAA3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,MAAA,CAAA,CAAA,CAAA,GAEnD2B,QAAAlS,CAAA,EAAM,qBADd,EAAAmS,cAwCUD,EAAAA,MAAA6zC,EAAA,EAAA,OAtCR,QAAA,GACC,QAAS7zC,EAAAA,MAAKlS,CAAA,EAAC,WACf,YAAWkS,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,GAEN,kBACT,IASO,CATPgC,aASOC,EAAA,OAAA,OAAA,CATY,QAAS81C,EAAW,MAAG,MAAOA,EAAW,MAAC,MAAA,EAA7D,IASO,CARLp3C,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CANR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAiB,CAAA,QAAAsoD,EAAA,MAAoB,MAAAA,EAAA,MAAY,MAAM,CAAA,qBAExD,IAES,CAFTp3C,cAESgB,EAAAA,MAAAq2C,EAAA,EAAA,CAFD,QAAA,GAAS,MAAOr2C,EAAAA,MAAKlS,CAAA,EAAC,UAAY,WAAYkS,EAAAA,MAAKlS,CAAA,EAAC,cAAA,qBAC1D,IAA8B,CAAvB2S,kBAAAC,EAAAA,gBAAA,IAAA01C,EAAA,MAAY,MAAM,EAAA,EAAA,CAAA,CAAA,8FAElB,IACb,yBAEF,IAqBO,CArBP/1C,aAqBOC,EAAA,OAAA,MAAA,CArBW,QAAS81C,EAAW,MAAG,MAAOA,EAAW,MAAC,MAAA,EAA5D,IAqBO,CApBLp3C,cAmBWgB,EAAAA,MAAAb,EAAA,EAAA,CAlBR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IACtB,KAAiB,CAAA,QAAAsoD,EAAA,MAAoB,MAAAA,EAAA,MAAY,MAAM,CAAA,qBAGtD,IAAsC,EADxCjoB,EAAAA,UAAA,EAAA,EAAAhuB,EAcS,mBAAAqsB,WAbmB,KAAAC,EAAA,WAAA2pB,EAAA,MAAlB,CAAApF,EAAQpyD,mBADlBqhB,EAAAA,YAcSD,EAAA,MAAAq2C,EAAA,EAAA,CAZN,IAAKz3D,EACN,QAAA,GACC,IAAKoyD,EAAO,IACZ,KAAMA,EAAO,KACb,IAAKA,EAAO,IACZ,IAAKA,EAAO,IACZ,UAASA,EAAO,OAChB,IAAKA,EAAO,IACZ,aAAYA,EAAO,UACnB,eAAcA,EAAO,WAAA,qBAEtB,IAAiB,CAAdvwC,EAAAA,gBAAAC,EAAA,gBAAAswC,EAAO,IAAI,EAAA,CAAA,CAAA,gKAKtB3wC,aAcOC,EAAA,OAAA,OAAA,OAXJ,QAAS81C,EAAW,MACpB,MAAOA,EAAW,MAAC,MAAA,EAJtB,IAcO,CARLp3C,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CANR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAiB,CAAA,QAAAsoD,EAAA,MAAoB,MAAAA,EAAA,MAAY,MAAM,CAAA,qBAExD,IAES,CAFTp3C,cAESgB,EAAAA,MAAAq2C,EAAA,EAAA,CAFD,QAAA,GAAS,MAAOr2C,EAAAA,MAAKlS,CAAA,EAAC,UAAY,WAAYkS,EAAAA,MAAKlS,CAAA,EAAC,cAAA,qBAC1D,IAA8B,CAAvB2S,kBAAAC,EAAAA,gBAAA,IAAA01C,EAAA,MAAY,MAAM,EAAA,EAAA,CAAA,CAAA,2GCjJxBE,GAAar7C,GAAW,CACnC,QAAS,CAAC,OAAQ,MAAM,EACxB,IAAK,OACL,SAAUJ,EACV,MAAOA,EACP,KAAM,OACN,MAAO,OACP,MAAO,OACP,aAAcmB,EAAuC,CACvD,CAAC,ECRYu6C,GAAa,OAAO,OAAoB,CACnD,QACA,UACA,UACA,UACA,OACA,UACF,CAAC,mFCAK,MAAAzoD,EAAQiM,GAAS,QADRsF,EACyB,CACtC,QAAS,CACP,QAAS,KACT,OAAQ,EACV,EACA,IAAK,EACL,SAAU,GACV,MAAO,GACP,KAAM,CACJ,QAAS,QACT,UAAW3oB,GAAS6/D,GAAW,SAAS7/D,CAAK,CAC/C,EACA,MAAO,KACP,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsb,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,OAAO,EAE1By9C,EAAUrnD,EAAAA,SAAS,IAChB,CAAC,CAAC6C,EAAM,OAChB,EACKN,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,aAAa,CAAC,EAAG,CAACm4C,EAAQ,MACjC,CAACn4C,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,KAC3B,EACD,EACK43C,EAAgBv2C,EAAAA,SAAS,IACzBrB,EAAM,MAAc,GAEpB,OAAOA,EAAM,SAAY,UAAYA,EAAM,IAAM,GAC5CA,EAAM,QAAUA,EAAM,IAAM,GAAGA,EAAM,GAAG,IAG1CA,EAAM,OACd,EACKy8C,EAAiBp7C,EAAAA,SAAS,IACvBqnD,EAAQ,MAAQn4C,EAAG,GAAG,YAAY,EAAIA,EAAG,GAAG,MAAM,CAC1D,EACKP,EAAQ3O,EAAAA,SAAS,IACdrB,EAAM,SAAWA,EAAM,UAAY,EAAIA,EAAM,QAAQ,WAAa,MAC1E,EACK2oD,EAAUtnD,EAAAA,SAAS,IAChB,CAACrB,EAAM,WAAaA,EAAM,SAAWA,EAAM,UAAY,GAAKA,EAAM,MAC1E,EAED,SAAS4oD,EAAiB1vD,EAAmB,CACjCiV,EAAAnO,EAAM,aAAc9G,CAAK,CAAA,6BAKnCmZ,EAAA,mBAuBM,MAAA,CAvBA,uBAAOzO,EAAS,KAAA,CAAA,GACpB2O,EAAAA,WAEOC,sBAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,yBAEnCkR,EAAAA,YAkBakB,EAAAA,WAAA,CAlBA,KAAMqqC,EAAc,OAAA,mBAC/B,IAgBM,kBAhBNhqC,qBAgBM,MAAA,CAdH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA+B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,OAAA,CAAA,EAAuBm4C,EAAO,OAAax2C,EAAA,MAAE3B,CAAA,EAAC,IAAe,UAAA2B,EAAA,MAAAlS,CAAA,EAAM,IAAI,CAAA,EAAIkS,EAAAA,MAAKlS,CAAA,EAAC,OAAI,OAAA,GAKnJ,MAAK2lD,iBAAA,CAAA,gBAAqBzzC,QAAKlS,CAAA,EAAC,MAAK,EACrC,MAAOgQ,EAAK,MACZ,QAAO44C,CAAA,GAERr2C,aAIOC,EAJe,OAAA,UAAA,CAAA,QAASolC,EAAA,OAA/B,IAIO,CAHL1mC,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,cAAiB43C,EAAa,KAAA,CAAA,qBACvE,IAAmB,qCAAhBA,EAAa,KAAA,EAAA,CAAA,CAAA,mDAZZ+Q,EAAO,KAAA,+BCtEVE,GAAkB17C,GAAW,CACxC,UAAW,OACX,OAAQJ,EACR,QAAS,MACT,OAAQ,OACR,MAAO,OACP,SAAUmB,EAAsC,EAChD,iBAAkBA,EAAsC,CAC1D,CAAC,EAKY46C,GAAsB57C,GAAU,CAC3C,MAAO,CACL,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,IACX,EACA,SAAUgB,EAAsC,EAChD,iBAAkBA,EAAsC,CAC1D,CAAC,ECIY66C,GAAmB,gHCjBhC,MAAM/oD,EAAQuR,EAORhB,EAAKtF,GAAc,YAAY,EAE/B+9C,EAAkBnnD,EAAAA,OAAOknD,GAAkB,IAAI,EAE/CE,EAAev3C,EAAAA,IAAI1R,EAAM,KAAK,EAC9BkpD,EAAYx3C,MAAI,GAAG,EACnBy3C,EAAoBz3C,MAA8B,IAAI,EAU5D,GARA9E,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPqgE,EAAa,MAAQrgE,EACrBogE,GAAA,MAAAA,EAAiB,eAAc,CAEnC,EAEIA,EAAiB,CACnB,MAAM5yC,EAA6BtJ,EAAAA,SAAS,CAC1C,MAAOm8C,CAAA,CACR,EAEDr8C,EAAA,MACE,IAAMo8C,EAAgB,UACbpgE,GAAA,CACPsgE,EAAU,MAAQtgE,CACpB,EACA,CAAE,UAAW,EAAK,CACpB,EACAgkB,EAAA,MACE,IAAMo8C,EAAgB,kBACbpgE,GAAA,CACPugE,EAAkB,MAAQvgE,CAC5B,EACA,CAAE,UAAW,EAAK,CACpB,EAEAogE,EAAgB,aAAa5yC,CAAK,EAElCxB,EAAAA,gBAAgB,IAAM,CACpBo0C,EAAgB,aAAa5yC,CAAK,CAAA,CACnC,CAAA,CAGH,SAAS4wC,GAAc,CACX74C,EAAAnO,EAAM,SAA0BipD,EAAa,KAAK,EAC3CD,GAAA,MAAAA,EAAA,aAAaC,EAAa,MAAK,CAGlD,SAASG,GAAuB,CACpBj7C,EAAAnO,EAAM,iBAAkCipD,EAAa,KAAK,EACnDD,GAAA,MAAAA,EAAA,qBAAqBC,EAAa,MAAK,6BAKxD52C,EAAA,mBAqBK,KAAA,CArBA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACfkC,EAAAA,mBAOI,IAAA,CAND,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,SAAS,IACR,QAAOy2C,EACP,qBAAeA,EAAW,CAAA,OAAA,CAAA,CAAA,GAE3Bz0C,EAAAA,WAAwBC,sBAAxB,IAAwB,qCAAfvC,EAAK,KAAA,EAAA,CAAA,SAEhBwC,EAAAA,mBAWO,OAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EAAe,KAAK,YAAa,QAAO64C,CAAA,GACzD72C,EAAAA,WASOC,wBATP,IASO,CAPGN,QAAA3oB,EAAA,EAAW4/D,EAAiB,KAAA,iBADpCh3C,EAAA,YAIYD,QAAAb,EAAA,EAAA,OAFT,SAAU83C,EAAiB,MAC3B,YAAeF,EAAY,KAAA,+CAE9B52C,EAEW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,qCADNwqB,EAAS,KAAA,EAAA,CAAA,oGCvEhB,MAAAlpD,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,UAAW,IACX,OAAQ,GACR,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,OAAQ,KACR,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKrN,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,YAAY,EAC/Bo+C,MAAiB,IAEjBzlD,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,MAC3B,EACD,EACK0T,EAAoBrS,EAAAA,SAAS,IAAM,OACvC,GAAIrB,EAAM,QAAU,GAACe,EAAAf,EAAM,UAAN,MAAAe,EAAe,QAAQ,CAC1C,MAAMpB,EAAUK,EAAM,OAAO,aAAa,MAAM,QAC1CnV,EAA+B,CAAC,EAEtC,UAAWy+D,KAAS3pD,EAAS,CACrB,MAAA4pD,EAAQD,EAAM,MAAQ,CAAC,EAEzBC,EAAK,OAAS,IAIlB1+D,EAAQ,KAAK,CACX,MAAO0+D,EAAK,OAASD,EAAM,KAC3B,KAAMC,EAAK,MAAQD,EAAM,IAAA,CAC1B,CAAA,CAGI,OAAAz+D,CAAA,CAGF,OAAAmV,EAAM,QAAQ,IAAckjD,GAC7B,OAAOA,GAAW,SACb,CAAE,MAAOA,CAAO,EAGlBA,CACR,CAAA,CACF,EAEKsG,EAAgB/tD,GAAc,IAAM,CACxC,MAAM,KAAK4tD,CAAU,EAAE,QAAQ,CAACtxD,EAAMjH,IAAU,CAC1C7H,GAAO8O,EAAK,KAAK,IACnBA,EAAK,MAAQjH,EAAQ,EACvB,CACD,CAAA,CACF,EAEKslB,EAAyBtJ,EAAAA,SAAS,CACtC,UAAWsxB,EAAAA,MAAMp+B,EAAO,WAAW,EACnC,kBAAmB,KACnB,aAAAypD,EACA,aAAAC,EACA,aAAAnrB,EACA,cAAAirB,EACA,qBAAAJ,CAAA,CACD,EAEDtnD,EAAA,QAAQinD,GAAkB3yC,CAAK,EAE/BxJ,EAAA,MACE,CAAC,IAAM1I,EAAM,UAAW,IAAMlE,EAAM,MAAM,SAAS,EACnD,CAAC,CAAC2pD,EAAWC,CAAS,IAAM,CACpBxzC,EAAA,kBAAoBuzC,EACtB9xD,GAAQ8xD,EAAU9xD,CAAI,EACtB+xD,EACE/xD,GAAQ+xD,EAAU/xD,CAAI,EACtB,IACR,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,SAAS4xD,EAAa1xD,EAA2B,CAC/CsxD,EAAW,IAAItxD,CAAI,EACLyxD,EAAA,CAAA,CAGhB,SAASE,EAAa3xD,EAA2B,CAC/CsxD,EAAW,OAAOtxD,CAAI,EACRyxD,EAAA,CAAA,CAGhB,SAASjrB,EAAatuB,EAAwB,CAClC9B,EAAAnO,EAAM,SAAyBiQ,CAAK,CAAA,CAGhD,SAASm5C,EAAqBn5C,EAAwB,CAC1C9B,EAAAnO,EAAM,iBAAiCiQ,CAAK,CAAA,6BAKtDoC,EAAA,mBAgBK,KAAA,CAhBA,uBAAOzO,EAAS,KAAA,CAAA,GACnB2O,EAAAA,WAcOC,sBAdP,IAcO,CAbLtB,cAYWgB,EAAAA,MAAAb,EAAA,EAAA,CAZA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAE7B,IAA4C,EAD9CqgC,EAAAA,UAAA,EAAA,EAAAhuB,EAUiB,mBAAAqsB,WATW,KAAAC,EAAA,WAAAjrB,EAAA,MAAlB,CAAAwvC,EAAQpyD,mBADlBqhB,EAAAA,YAUiBD,EAAA,MAAA23C,EAAA,EAAA,CARd,IAAK3G,EAAO,MACZ,MAAOA,EAAO,KAAA,qBAEf,IAIO,CAJP3wC,aAIOC,EAAA,OAAA,OAAA,CAJY,OAAA0wC,EAAiB,MAAApyD,CAAA,EAApC,IAIO,CAHLogB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAI,CAAI,OAAAkjD,EAAQ,MAAApyD,CAAK,CAAA,qBAC3D,IAA0D,qCAAvDoyD,EAAO,KAAOhxC,EAAAA,MAAUpV,EAAA,EAAComD,EAAO,IAAI,EAAIA,EAAO,KAAK,EAAA,CAAA,CAAA,oGCnIxD4G,GAAc38C,GAAW,CACpC,UAAW,OACX,KAAM,OACN,WAAY,OACZ,OAAQH,GACR,aAAce,EAChB,CAAC,ECXYg8C,GAAc,OAAO,OAAqB,CACrD,UACA,UACA,OACA,UACA,UACA,OACF,CAAC,mFCEK,MAAA/pD,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,UAAW,CACT,QAAS,QACT,UAAW3oB,GAASisC,GAAmB,SAASjsC,CAAK,CACvD,EACA,KAAM,CACJ,QAAS,KACT,UAAWA,GAASmhE,GAAY,SAASnhE,CAAK,CAChD,EACA,WAAY,GACZ,OAAQ,GACR,aAAc,IAAA,CACf,EAEK2nB,EAAKtF,GAAc,QAAQ,EAE3BgM,EAAUvF,EAAAA,IAAiB,EAC3B4O,EAAQ5O,EAAAA,IAAiB,EAEzB9N,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAGvQ,EAAM,SAAS,EACrB,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,YAAY,CAAC,EAAGvQ,EAAM,WAC7B,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,SAAA,CAExC,CACD,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,GAAIrB,EAAM,WACD,MAAA,CACL,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAGA,EAAG,IAAI,aAAa,EACtC,CAACA,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,UAC7B,CAGK,CACR,EAEY,OAAA8R,EAAA,CAAE,QAAAmF,EAAS,MAAAqJ,EAAO,wBAI7BjO,EAAA,mBAUM,MAAA,SAVG,UAAJ,IAAI4E,EAAW,uBAAOrT,EAAS,KAAA,EAAG,uBAAO+M,EAAK,KAAA,CAAA,GACjD8B,EAAAA,mBAOM,MAAA,CANH,wBAAQP,EAAA,MAAE3B,CAAA,EAAC,GAAe,SAAA,EAAA2B,EAAA,MAAAlS,CAAA,EAAM,YAAY,CAAA,EAC5C,MAAK2lD,EAAAA,eAAA,CAAuB,UAAAzzC,EAAA,MAAAlS,CAAA,EAAM,OAAM,WAAckS,EAAAA,SAAM,MAAM,GAAK,WAIxEK,aAAaC,EAAA,OAAA,SAAA,MAEfC,EAAAA,mBAA+C,MAAA,SAAtC,QAAJ,IAAI6N,EAAS,MAAKhO,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,mBC5DrBy5C,GAAc78C,GAAW,CACpC,KAAMI,GACN,KAAM,OACN,OAAQR,EACR,KAAMA,EACN,OAAQA,EACR,MAAOA,EACP,SAAUA,EACV,QAASA,EACT,OAAQA,EACR,YAAayB,GACb,cAAe,OACf,KAAMA,GACN,MAAO,OACP,WAAY,OACZ,MAAOzB,EACP,IAAK,OACL,QAASA,EACT,MAAO,CAAC,OAAQ,MAAM,EACtB,MAAO,OACP,QAASmB,EAAuC,CAClD,CAAC,EAKY+7C,GAAmB98C,GAAW,CACzC,KAAMI,GACN,KAAM,OACN,OAAQR,CACV,CAAC,ECZYu6C,GAAc,2BAEd4C,GAAc,OAAO,OAAqB,CACrD,UACA,UACA,OACA,UACA,UACA,OACF,CAAC,ECdcz6C,qBAAgB,CAC7BjX,KAAM,SACNwH,MAAOgqD,GACPnkB,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMimD,EAAetoD,EAAAA,OAAO4/B,GAAe,IAAI,EAEzCzhC,EAAQiM,GAAS,SAAU0D,EAAQ,CACvC3lB,KAAM0jB,GAAey8C,EAAeA,EAAangE,KAAOinB,MAAS,EACjEpoB,KAAM,CACJgnB,QAAS,KACTtD,UAAW3jB,GAASshE,GAAY/5C,SAASvnB,CAAK,CAC/C,EACDwhE,OAAQ,GACRzC,KAAM,GACNlM,OAAQ,GACR4O,MAAO,GACPx2C,SAAUA,IAAOs2C,EAAeA,EAAat2C,SAASjrB,MAAQ,GAC9Dq9C,QAASA,IAAOkkB,EAAeA,EAAalkB,QAAQr9C,MAAQ,GAC5D8yD,OAAQ,GACRpU,YAAa74B,GAAgB,EAC7B+4B,cAAe,KACfj+B,KAAMkF,GAAgB,EACtBtiB,MAAO,KACPm+D,WAAY,CACVz6C,QAAS,SACTtD,UAAW3jB,GAAS,CAAC,SAAU,SAAU,OAAO,EAAEunB,SAASvnB,CAAK,CACjE,EACDyhB,MAAO,GACPguC,IAAK,SACLkS,QAAS,GACTC,MAAO,KACPtmD,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEKsjD,EAAa3lD,EAAAA,OAAOylD,GAAa,IAAI,EAErC/2C,EAAKtF,GAAc,QAAQ,EAC3B3B,EAAQU,GAAU,EAClBygD,EAAU/4C,EAAG,IAAC,EAAK,EACnB5gB,EAAQ4gB,EAAG,IAAC,CAAC,EACbg5C,EAASh5C,EAAG,IAAC,EAAK,EAElBi5C,EAAatpD,EAAAA,SAAS,IACnB,CAAC6C,EAAM2L,SAAW,CAAC7P,EAAMkE,MAAM2L,OACvC,EACKhnB,EAAOwY,EAAAA,SAAS,IACbrB,EAAMnX,OAAQ2+D,GAAAA,YAAAA,EAAY3+D,OAAQ,SAC1C,EACKmB,EAAOqX,EAAAA,SAAS,KACbmmD,GAAAA,YAAAA,EAAYx9D,OAAQgW,EAAMhW,IAClC,EACK4Z,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAG5nB,EAAKD,KAAK,CAAC,EAAGC,EAAKD,QAAU,UACpC,CAAC2nB,EAAGE,GAAG,QAAQ,CAAC,EAAG,CAACzQ,EAAMqqD,OAASrqD,EAAMy7C,OACzC,CAAClrC,EAAGE,GAAG,OAAO,CAAC,EAAGzQ,EAAMqqD,MACxB,CAAC95C,EAAGE,GAAG,MAAM,CAAC,EAAGzQ,EAAM2nD,KACvB,CAACp3C,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMoqD,OACzB,CAAC75C,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM6T,SAC3B,CAACtD,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAMimC,QAC1B,CAAC11B,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAM07C,OACzB,CAACnrC,EAAGE,GAAG,WAAW,CAAC,EAAGk6C,EAAW/hE,MACjC,CAAC2nB,EAAGE,GAAGzmB,EAAKpB,KAAK,CAAC,EAAGoB,EAAKpB,QAAU,UACpC,CAAC2nB,EAAGE,GAAG,SAAS,CAAC,EAAGg6C,EAAQ7hE,MAC5B,CAAC2nB,EAAGE,GAAG,OAAO,CAAC,EAAG3f,EAAMlI,QAAU,EAClC,CAAC2nB,EAAGE,GAAG,MAAM,CAAC,EAAGi6C,EAAO9hE,MACxB,CAAC2nB,EAAGE,GAAG,OAAO,CAAC,EAAGzQ,EAAMqK,KACzB,EACF,EACKugD,EAAWvpD,EAAAA,SAAS,IAAM,CAC9B,GAAI,CAACrB,EAAM7T,MAAO,OAAO,KAEzB,MAAMyiB,EAAYpmB,GAAW68B,iBAAiBumB,SAASpjB,eAAe,EAAI,KACpEyU,EAAQ5vC,IAAiBuhB,GAAAA,YAAAA,EAAWktC,iBAAiBvrC,EAAGwrC,GAAG,aAAa,KAAM,MAAM,EACpFF,EAAQxuD,IAAiBuhB,GAAAA,YAAAA,EAAWktC,iBAAiBvrC,EAAGwrC,GAAG,aAAa,KAAM,MAAM,EACpF7e,EAAY7vC,GAAiB2S,EAAM7T,KAAK,EAE9C,MAAO,CACLyH,KAAMspC,EAAUz0C,SAAU,EAC1BoiE,OAAQ37D,GAAS2sD,EAAO3e,EAAW,EAAG,EAAEz0C,SAAU,EAClDqiE,MAAO57D,GAAS+tC,EAAOC,EAAW,EAAG,EAAEz0C,SAAU,EACjDsiE,SAAUl7D,GAAYqtC,EAAW,EAAG,EAAEz0C,SAAU,EAChDuiE,SAAUn7D,GAAYqtC,EAAW,EAAG,EAAEz0C,SAAU,EAChDwiE,SAAUp7D,GAAYqtC,EAAW,EAAG,EAAEz0C,SAAU,EAChDyiE,SAAUr7D,GAAYqtC,EAAW,EAAG,EAAEz0C,SAAU,EAChD0iE,SAAUt7D,GAAYqtC,EAAW,EAAG,EAAEz0C,SAAU,EAChD2iE,OAAQv7D,GAAYgsD,EAAO,EAAG,EAAEpzD,SAAU,EAC1C4iE,OAAQx7D,GAAYgsD,EAAO,EAAG,EAAEpzD,SAAQ,CACzC,CACH,CAAC,EACKkoB,EAAQtP,EAAAA,SAAiC,IAAM,CACnD,GAAI,CAACupD,EAAShiE,MAAO,MAAO,CAAE,EAE9B,KAAM,CACJgL,KAAAA,EACAi3D,OAAAA,EACAC,MAAAA,EACAC,SAAAA,EACAC,SAAAA,EACAC,SAAAA,EACAC,SAAAA,EACAC,SAAAA,EACAC,OAAAA,EACAC,OAAAA,CACD,EAAGT,EAAShiE,MACP,CAAEozD,IAAAA,EAAKsP,IAAAA,CAAI,EAAI/6C,EAErB,OAAIvQ,EAAMqqD,MACDrO,EAAI,CACT7vD,MAAOyH,EACP,cAAeA,EACf,cAAeA,EACf,eAAgBA,EAChB,iBAAkBA,EAClB,WAAY,cACZ,iBAAkBy3D,EAClB,iBAAkBA,EAClB,kBAAmBD,EACnB,oBAAqB,cACrB,UAAWx3D,EACX,gBAAiBi3D,EACjB,gBAAiBA,EACjB,iBAAkBC,EAClB,mBAAoBQ,EAAI,wBAAwB,EAChD,gBAAiBR,CACnB,CAAC,EAGC9qD,EAAMy7C,OACDO,EAAI,CACT7vD,MAAOyH,EACP,cAAeA,EACf,cAAe03D,EAAI,aAAa,EAChC,eAAgBA,EAAI,aAAa,EACjC,iBAAkBA,EAAI,wBAAwB,EAC9C,WAAYH,EACZ,iBAAkBD,EAClB,iBAAkBH,EAClB,kBAAmBA,EACnB,oBAAqBO,EAAI,uBAAuB,EAChD,UAAWL,EACX,gBAAiBA,EACjB,gBAAiBD,EACjB,iBAAkBA,EAClB,mBAAoBM,EAAI,sBAAsB,EAC9C,gBAAiBR,CACnB,CAAC,EAGC9qD,EAAM2nD,MAAQ3nD,EAAMoqD,OACfpO,EAAI,CACT,GAAIh8C,EAAMoqD,OACN,CACA,UAAWx2D,EACX,gBAAiBi3D,EACjB,gBAAiBA,EACjB,iBAAkBC,EAClB,gBAAiBA,CAClB,EACC,GACJ3+D,MAAOyH,EACP,cAAei3D,EACf,cAAeA,EACf,eAAgBC,EAChB,iBAAkBG,CACpB,CAAC,EAGIjP,EAAI,CACT7vD,MAAOm/D,EAAI,aAAa,EACxB,cAAeA,EAAI,aAAa,EAChC,cAAeA,EAAI,aAAa,EAChC,eAAgBA,EAAI,aAAa,EACjC,iBAAkBA,EAAI,wBAAwB,EAC9C,WAAY13D,EACZ,iBAAkBi3D,EAClB,iBAAkBA,EAClB,kBAAmBC,EACnB,oBAAqBQ,EAAI,uBAAuB,EAChD,UAAW13D,EACX,gBAAiBi3D,EACjB,gBAAiBA,EACjB,iBAAkBC,EAClB,mBAAoBQ,EAAI,sBAAsB,EAC9C,gBAAiBR,CACnB,CAAC,CACH,CAAC,EAED,GAAItD,EAAY,CACd,MAAMpxC,EAAQtJ,EAAAA,SAAS,CAAEhc,MAAAA,EAAO45D,OAAAA,CAAO,CAAC,EAExClD,EAAWiC,aAAarzC,CAAK,EAE7BxB,EAAAA,gBAAgB,IAAM,CACpB4yC,EAAWkC,aAAatzC,CAAK,CAC/B,CAAC,CACH,CAEA,SAAS4wC,EAAY9tD,EAAmB,CAClC8G,EAAM6T,UAAY7T,EAAMimC,SAAW/sC,EAAM08C,SAExC51C,EAAMuqD,UACTE,EAAQ7hE,MAAQ,GAChBgsD,sBAAsB,IAAM,CAC1B6V,EAAQ7hE,MAAQ,EAClB,CAAC,GAGHulB,EAAUnO,EAAMstC,QAASp0C,CAAK,EAChC,CAEA,SAASqyD,GAAqB,CAC5Bd,EAAQ7hE,MAAQ,EAClB,CAEA,SAAS4iE,GAAoB,CAC3B,OAAAt6C,EAAAA,YAAA,MAAA,CAAA,MACc,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGm8B,IAAI,OAAQ,SAAS,CAAC,CAAC,EAAA,CACnDv7B,EAAU,WAACjN,EAAO,UAAW+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACzBrR,EAAMkE,MAAM+hC,OAAO,EAAA,CAAAp2B,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAE/BpJ,EAAM1gB,MAAMq9C,QAAO,CAAA,OACfjmC,EAAMwnC,eAAiBl+B,EAAM1gB,MAAMq9C,QAAQ71B,OAAM,KACnDpQ,EAAMsnC,aAAeh+B,EAAM1gB,MAAMq9C,QAAQ18B,KAAI,MAC5C,SAAS,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAGrB,CAAC,CAAA,CAGR,CAEA,SAASkiD,GAAmB,CAC1B,OAAOzrD,EAAMimC,QACXulB,EAAiB,EAAEt6C,EAAAA,YAAA,MAAA,CAAA,MAEPX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CACtBp7B,EAAU,WAACjN,EAAO,OAAQ+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACtBrR,EAAMkE,MAAMqF,IAAI,EAAA,CAAAsG,QAAAA,IACjC7P,CAAAA,EAAMuJ,KAAI2H,EAAAA,YAAApN,GAAA,CAAA,KAAe9D,EAAMuJ,IAAI,EAAA,IAAA,EAAY,IAAI,CAAA,CAAA,CAAA,CAEvD,CAAC,CAEL,CACH,CAEA,SAASmiD,GAAqB,CAC5B,OAAI1rD,EAAMuJ,MAAQrF,EAAMqF,MAAQvJ,EAAMkE,MAAMqF,KACnCvJ,EAAMimC,QACXulB,EAAiB,EAAEt6C,EAAAA,YAAA,MAAA,CAAA,MAEPX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CACtBp7B,EAAU,WAACjN,EAAO,OAAQ+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACtBrR,EAAMkE,MAAMqF,IAAI,EAAA,CAAAsG,QAAAA,IAAAqB,CAAAA,EAAA,YAAApN,GAAA,CAAA,KACtB9D,EAAMuJ,IAAI,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAEzB,CAAC,CAEL,EAGH2H,EAAAA,YAAAwqB,GAAA,CAAA,OAAA,GAAA,WAAA,GAAA,cAAA,EAAA,EAAA,CAAA7rB,QAAAA,IAEK7P,CAAAA,EAAMimC,SAAWulB,EAAmB,CAAA,CAAA,CAAA,CAG3C,CAEA,SAASG,GAAc,CACrB,MAAMC,EAAY5rD,EAAM6T,SACpB,WACA7T,EAAMnX,OAAS,UACb,QACAmX,EAAMnX,KAEZ,OAAAqoB,EAAAA,YAAA26C,GAAA,CAAA,QAAA,GAAA,MAGW,CAACt7C,EAAGg8B,GAAG,OAAO,EAAGh8B,EAAGm8B,IAAI,QAASkf,CAAS,CAAC,EAAC,QAC1C5rD,EAAMwqD,MAAK,KACdoB,CAAS,EAAA,IAAA,CAGrB,CAEA,MAAO,IAAM,CACX,MAAME,EAAU9rD,EAAMq4C,KAAO,SAE7B,OAAAnnC,EAAAA,YAAA46C,EAAA,CAAA,KAEU9rD,EAAMsqD,WAAU,MACf1mD,EAAUhb,MAAK,KAChB,SAAQ,MACP+nB,EAAM/nB,MAAK,SACRoX,EAAM6T,SAAQ,QACfmzC,EAAW,eACJuE,CAAkB,EAAA,CAAA17C,QAAAA,IAEjC86C,CAAAA,EAAW/hE,MAAQ6iE,EAAkB,EAAGC,EAAkB,EAC1D,CAACf,EAAW/hE,OACXuoB,EAAAA,WAAWjN,EAAO,UAAW+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACxBrR,EAAMkE,MAAM2L,OACjC,EAAA,IAAA,CAAA,CAAA,EACF,CAAC86C,EAAW/hE,QAAUoX,EAAMwqD,OAASxqD,EAAMwqD,QAAU,GAAKmB,EAAa,EAAG,IAAI,CAAA,CAAA,CAGpF,CACH,CACF,CAAC,mFC/TK,MAAA3rD,EAAQiM,GAAS,cADRsF,EAC+B,CAC5C,KAAM,KACN,KAAM,CACJ,QAAS,UACT,UAAY3oB,GAAsBshE,GAAY,SAASthE,CAAK,CAC9D,EACA,OAAQ,EAAA,CACT,EAIK2nB,EAAKtF,GAAc,cAAc,EAEjCo+C,EAAav8C,EAAAA,SAAa,IAAA,GAAkB,EAC5C9iB,EAAOo0C,EAAAA,MAAMp+B,EAAO,MAAM,EAC1BnX,EAAOu1C,EAAAA,MAAMp+B,EAAO,MAAM,EAE1B4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,MAC3B,EACD,EACKm3B,EAAW91B,EAAAA,SAAS,IAAM,MAAM,KAAKgoD,CAAU,CAAC,EAEhD0C,EAAiBtwD,GAAc,IAAM,CAChC,QAAArR,EAAI,EAAG4H,EAAMmlC,EAAS,MAAM,OAAQ/sC,EAAI4H,EAAK,EAAE5H,EAAG,CACnD,MAAA2N,EAAOo/B,EAAS,MAAM/sC,CAAC,EAE7B2N,EAAK,MAAQ3N,EAAI,EACZ2N,EAAA,OAAS3N,IAAM4H,EAAM,CAAA,CAC5B,CACD,EAED8P,EAAA,QACEwlD,GACAx6C,WAAS,CACP,KAAA9iB,EACA,KAAAnB,EACA,aAAA4gE,EACA,aAAAC,EACA,eAAAqC,CACD,CAAA,CACH,EAEA,SAAStC,EAAa1xD,EAAmB,CACvCsxD,EAAW,IAAItxD,CAAI,EACJg0D,EAAA,CAAA,CAGjB,SAASrC,EAAa3xD,EAAmB,CACvCsxD,EAAW,OAAOtxD,CAAI,EACPg0D,EAAA,CAAA,6BAKf15C,EAAA,mBAEM,MAAA,CAFA,uBAAOzO,EAAS,KAAA,EAAE,KAAK,OAAA,GAC3B2O,aAAaC,EAAA,OAAA,SAAA,UC7DXw5C,GAAwB,CAAC,OAAQ,SAAU,OAAQ,OAAQ,OAAO,EAExEC,GAAex8C,kBAAgB,CAC7B,KAAM,SACN,MAAOgxB,GACP,MAAM9wB,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,SAAU0D,EAAQ,CACvC,IAAK,MACL,KAAM,GACN,OAAQ,KACR,KAAM,KACN,KAAM,KACN,MAAO,KACP,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,IAAK,KACL,KAAM,KACN,QAAS,IAAA,CACV,EAEKu8C,EAAWrqD,EAAAA,OAAO8+B,GAAW,IAAI,EACjCpwB,EAAKtF,GAAc,QAAQ,EAEjCnJ,EAAA,QAAQ6+B,GAAW,IAAK,EAElB,MAAA/8B,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,MAAM4/B,GAAcjhC,EAAM,UAAWksD,GAAA,YAAAA,EAAU,cAAe,CAC5D,IAAIA,GAAA,YAAAA,EAAU,aAAc,CAAC,EAC7B,GAAIlsD,EAAM,QACNA,EAAM,UAAY,GAChB,CAAE,QAAS,QAAS,MAAO,OAC3BA,EAAM,QACR,CAAA,CACN,EACM4D,EAAuB,CAC3B2M,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG0wB,EACjB,CAAC1wB,EAAG,GAAG,SAAS,CAAC,EAAG27C,GAAYlsD,EAAM,OAAA,CAE1C,EAEA,OAAIihC,IACFA,EAAW,SAAWr9B,EAAU,KAAK2M,EAAG,GAAG0wB,EAAW,OAAO,CAAC,EAC9DA,EAAW,OAASr9B,EAAU,KAAK2M,EAAG,GAAG0wB,EAAW,KAAK,CAAC,GAG5D+qB,GAAS,QAAgBp0D,GAAA,CACnB,OAAOoI,EAAMpI,CAAI,GAAM,UACzBgM,EAAU,KACRhM,IAAS,OAAS2Y,EAAG,GAAG,GAAGvQ,EAAMpI,CAAI,CAAC,EAAE,EAAI2Y,EAAG,GAAG,GAAG3Y,CAAI,IAAIoI,EAAMpI,CAAI,CAAC,EAAE,CAC5E,CACF,CACD,EAED8oC,GAAY,QAAgB12C,GAAA,CACpB,MAAAujB,EAAWvN,EAAMhW,CAAI,EAEvB,CAACujB,GAAYA,IAAa,IAE1B,OAAOA,GAAa,SACtB3J,EAAU,KAAK2M,EAAG,GAAG,GAAGvmB,CAAI,IAAIujB,CAAQ,EAAE,CAAC,EAClC,OAAOA,GAAa,UAC7By+C,GAAS,QAAgBp0D,GAAA,CACjB,MAAAhP,EAAQ2kB,EAAS3V,CAAI,EAEvB,CAAChP,GAASA,IAAU,GAExBgb,EAAU,KAAKhM,IAAS,OAAS2Y,EAAG,GAAG,GAAG3nB,CAAK,EAAE,EAAI2nB,EAAG,GAAG,GAAG3Y,CAAI,IAAIhP,CAAK,EAAE,CAAC,CAAA,CAC/E,EACH,CACD,EAEMgb,CAAA,CACR,EACK+M,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAM3E,EAAOsD,EAAM,KACb2Q,EAAuB,CAAC,EAE9B,OAAIu7C,IACE,OAAOA,EAAS,KAAQ,SAC1Bv7C,EAAM,mBAAqBA,EAAM,iBAAmB,GAAGu7C,EAAS,IAAM,CAAC,KAC9D,MAAM,QAAQA,EAAS,GAAG,IACnCv7C,EAAM,mBAAqBA,EAAM,iBAAmB,GAAGu7C,EAAS,IAAI,CAAC,EAAI,CAAC,OAI1ExvD,IACE,OAAOA,GAAS,SAClBiU,EAAM,KAAO,GAAGjU,CAAI,IAAIA,CAAI,QACnB,OAAOA,GAAS,WACrB,wBAAwB,KAAKA,CAAI,EACnCiU,EAAM,KAAOjU,EAEbiU,EAAM,KAAOjU,IAAS,OAAS,WAAa,OAAOA,CAAI,KAKtDiU,CAAA,CACR,EAED,MAAO,IACL/jB,EAAA,EACEoT,EAAM,KAAO,MACb,CACE,MAAO4D,EAAU,MACjB,MAAO+M,EAAM,KACf,EACA,CACE,QAAS,IAAMzM,EAAM,SAAWA,EAAM,QAAQ,CAAA,CAElD,CAAA,CAEN,CAAC,EChHYioD,GAAmBh/C,GAAW,CACzC,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAwB,EAChC,OAAQI,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OAIb,UAAW,SACX,MAAO,OACP,IAAK,OACL,IAAK,OACL,YAAa,OACb,UAAWzB,EACX,WAAYA,EACZ,aAAcC,GACd,UAAW,OACX,SAAUD,EACV,KAAM,OACN,SAAU,OACV,UAAW,OACX,QAAS,OACT,SAAUA,EACV,aAAcgB,GACd,SAAUhB,EACV,MAAO,OACP,UAAWA,EACX,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,KAAMA,EACN,SAAUA,EACV,YAAa,OACb,UAAW,OACX,aAAc,OACd,KAAM,OACN,MAAO,OACP,QAASmB,EAAuC,EAChD,OAAQA,EAAuC,EAC/C,QAASA,EAAmC,EAC5C,SAAUA,EAAmC,EAC7C,QAASA,EAAU,EACnB,QAASA,EAAU,EACnB,cAAeA,EAAuC,EACtD,cAAeA,EAAuC,EACtD,UAAWA,EAA0C,EACrD,WAAYA,EAA0C,EACtD,QAASA,EAA0C,CACrD,CAAC,uaCjCD,MAAM1kB,EAAWZ,IAAmB,CAACA,IAASA,KAAU,EAClDwjE,EAAexjE,IAAmBK,GAAOL,EAAK,GAAK,OAAO,MAAMA,EAAK,EAIrE,CACJ,MAAAm9C,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,WAAA3C,EACA,cAAA4C,EACA,cAAAC,CAAA,EACEhD,GAAsBkD,CAAK,EAGzBtmC,EAAQiM,GAAS,cADRsF,EAC+B,CAC5C,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,OAAQ3H,GAAe,EACvB,YAAa,GACb,OAAQA,GAAe,EACvB,YAAa,GAEb,UAAW,CACT,QAAS,KACT,OAAQ,EACV,EACA,MAAO,CACL,QAAS,IAAM03B,EAAc,EAC7B,OAAQ,EACV,EACA,IAAK,KACL,IAAK,IACL,YAAa,KACb,UAAW,GACX,WAAY,GACZ,aAAc,GACd,UAAW,GACX,SAAU,GACV,KAAM,EACN,SAAU,IACV,UAAW,GACX,QAAS,GACT,SAAU,IAAMtyB,EAAS,MACzB,aAAc,KACd,SAAU,GACV,MAAO,KACP,UAAW,GACX,QAAS,IAAMoyB,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,KAAM,GACN,SAAU,GACV,YAAa,QACb,UAAW,MACX,aAAc,KACd,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKuwB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,cAAc,EACjC3I,EAASI,GAAU,cAAe07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACxDsJ,EAAQU,GAAS,EAEjB,CAAE,QAAAgpB,EAAS,SAAA13B,CAAS,EAAIq7B,GAAe,EAEvCkR,EAAUn2B,MAAI,EAAK,EACnBo2B,EAAep2B,MAAqBloB,EAAQwW,EAAM,KAAK,EAAIqsD,GAAA,EAAkBrsD,EAAM,KAAK,EACxFssD,EAAY56C,MAAI,EAAK,EACrB66C,EAAc76C,MAAI,EAAK,EACvB86C,EAAe96C,MAAI,EAAK,EAExB02B,EAAU12B,EAAAA,IAAsB,EAChC,CAAE,QAAAuF,EAAS,QAAAC,CAAQ,EAAIF,GAAS,EAE1BiC,GAAA,CACV,OAAQmvB,EACR,QAAS,GACT,UAAW,CAAClvC,GAAOygB,KAAa,CAG1B,GAFMxL,EAAAnO,EAAM,UAAW9G,EAAK,EAE5BygB,GAAS,IAAMA,GAAS,KAAM,CAIhC,GAHAzgB,GAAM,eAAe,EACrBA,GAAM,gBAAgB,EAEjBygB,GAAS,IAAM8yC,EAAa,OAAW9yC,GAAS,MAAQ+yC,GAAc,MACzE,OAGFC,GACEhzC,GAAS,GAAK,OAAS,QACvBzgB,GAAM,QAAU,OAASA,GAAM,SAAW,QAAUA,GAAM,OAAS,MAAQ,MAC7E,EACAygB,GAAS,SAAS,CAAA,MACTA,GAAS,QAClBzgB,GAAM,eAAe,EACrBA,GAAM,gBAAgB,EACtBkxC,GAAgB,QAAQ,EACxBzwB,GAAS,SAAS,EAEtB,EACA,QAAkBzgB,IAAA,CACNiV,EAAAnO,EAAM,QAAS9G,EAAK,EAE1BA,GAAM,MAAQ,SACJ4xC,GAAA,CACd,CACF,CACD,EAEG,IAAAzC,EAEJ,MAAMukB,EAAYthD,GAAM,EAClBuhD,EAAaxrD,EAAAA,SAAS,IAExB,CAAC+qD,EAAYtkB,EAAa,KAAK,IAC9Bn2C,GAASm2C,EAAa,KAAK,EAAI9nC,EAAM,KAAOrO,GAASm2C,EAAa,KAAK,EAAI9nC,EAAM,IAErF,EACKumD,EAAallD,WAAS,IAAOrB,EAAM,SAAWA,EAAM,aAAgBA,EAAM,QAAQ,EAClFysD,EAAeprD,EAAAA,SAAS,IAE1BrB,EAAM,UACNumD,EAAW,OACV,CAAC6F,EAAYtkB,EAAa,KAAK,GAAKn2C,GAASm2C,EAAa,KAAK,GAAK9nC,EAAM,GAE9E,EACK0sD,GAAgBrrD,EAAAA,SAAS,IAE3BrB,EAAM,UACNumD,EAAW,OACV,CAAC6F,EAAYtkB,EAAa,KAAK,GAAKn2C,GAASm2C,EAAa,KAAK,GAAK9nC,EAAM,GAE9E,EACK4D,GAAYvC,EAAAA,SAAS,IAAM,CACzB,KAAA,CAAC+jB,GAAS0nC,EAAI,GAAK9sD,EAAM,aAAe,SAAS,MAAM,GAAG,EAEzD,MAAA,CACLuQ,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAG,YAAY,EAClB,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG+7C,EAAU,MAC9B,CAAC/7C,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGg2C,EAAW,MAChC,CAACh2C,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,WAAW6U,EAAO,EAAE,CAAC,EAAGA,KAAY,QAC3C,CAAC7U,EAAG,GAAG,cAAc,CAAC,EAAGu8C,GACzB,CAACv8C,EAAG,GAAG,cAAc,CAAC,EAAGs8C,EAAW,KAAA,CAExC,CAAA,CACD,EACK/jB,EAAYznC,EAAAA,SAAS,IAClB,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,QAAUA,EAAM,MAAM,OACvD,EACK+oC,GAAY1nC,EAAAA,SAAS,IAClB,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,QAAUA,EAAM,MAAM,OACvD,EACK+sD,GAAgB1rD,EAAAA,SAAS,IACtB,CAACirD,EAAU,OAChB,OAAOxkB,EAAa,OAAU,UAC9B,CAAC,OAAO,MAAMA,EAAa,KAAK,GAChC9nC,EAAM,WAAa,EACjB/N,GAAQ61C,EAAa,MAAO9nC,EAAM,SAAS,EAC3C8nC,EAAa,KAClB,EACKmB,GAAiB5nC,EAAAA,SAAS,IAC1B+qD,EAAYW,GAAc,KAAK,GAAK,OAAOA,GAAc,OAAU,SAC9DA,GAAc,OAAS,GAEzB,CAACT,EAAU,OAAS,OAAOtsD,EAAM,WAAc,WAClDA,EAAM,UAAU+sD,GAAc,KAAe,EAC7CA,GAAc,MAAM,SAAS,CAClC,EACK1jB,GAAWhoC,WAAS,IAAM,CAAC,EAAEymC,EAAa,OAASA,EAAa,QAAU,EAAE,EAC5EwB,GAAYjoC,EAAAA,SAAS,IAClB,CAACrB,EAAM,UAAY,CAACumD,EAAW,OAASvmD,EAAM,WAAakX,EAAQ,OAASmyB,GAAS,KAC7F,EACKE,GAAeloC,EAAAA,SAAS,IACrB,OAAOrB,EAAM,cAAiB,UACjCA,EAAM,aACJ,KACA,MACFA,EAAM,YACX,EAEKjE,GAAQpK,GAASqO,EAAM,KAAK,EAC5BqsC,EAAcrsC,EAAM,SACtBlE,GAASuuC,GAActuC,IAAS,GAAG,EACnCX,GAASivC,GAActuC,IAAS,EAAE,EAEtC6Q,EAAA,MACE,IAAM5M,EAAM,MACHpX,IAAA,CACHA,KAAUy/C,GACD2kB,EAAA,CAEf,EACA,CAAE,UAAW,EAAK,CACpB,EACApgD,QAAM0/C,EAAoB1jE,IAAA,CACnBA,IACHqkE,EAAcX,EAAU,MAAQxkB,EAAa,MAAQmB,GAAe,KAAK,CAC3E,CACD,EAEDx0B,EAAAA,UAAU,IAAM,CACdw4C,EAAcX,EAAU,MAAQxkB,EAAa,MAAQmB,GAAe,KAAK,CAAA,CAC1E,EAEYn3B,EAAA,CACX,MAAAi0B,EACA,QAAA8B,EACA,QAAA3wB,EACA,WAAA21C,EACA,cAAAE,GACA,eAAA9jB,GACA,WAAAsd,EACA,QAAAtvC,EACA,MAAOmxB,EACP,MAAA9B,EACA,KAAM,IAAA,QAAM,OAAAvlC,GAAAqnC,EAAQ,QAAR,YAAArnC,GAAe,OAAK,CACjC,EAED,SAASksD,EAAcrkE,GAAgC,CACjDw/C,EAAQ,QACVA,EAAQ,MAAM,MAAQgkB,EAAYxjE,EAAK,EAAI,GAAKA,GAAO,SAAS,EAClE,CAGF,SAASskE,EAAgBtkE,GAAe,CACtC,OAAO+E,GAAW/E,GAAOoX,EAAM,IAAKA,EAAM,GAAG,CAAA,CAG/C,SAASgtD,GAAa,CACpB,IAAIpkE,GAAQoX,EAAM,MACVpX,GAAA0jE,EAAU,MAAQ1jE,GAAQ6I,GAAc7I,GAAO,EAAI,EAAI+I,GAAS/I,EAAK,EAAIyjE,GAAc,EAE3FrsD,EAAM,WAAa,GAAK,CAACosD,EAAYxjE,EAAK,IAC5CA,GAAQqJ,GAAQi7D,EAAgBtkE,EAAK,EAAGoX,EAAM,SAAS,GAGzD8nC,EAAa,MAAQl/C,GACTy/C,EAAAz/C,GAEZqkE,EAAcX,EAAU,MAAQ1jE,GAAQqgD,GAAe,KAAK,CAAA,CAG9D,SAAS3C,EAAMz7C,GAAwB,SAC7BkW,GAAAqnC,EAAA,QAAA,MAAArnC,GAAO,MAAMlW,GAAO,CAG9B,SAASm/C,EAAY9wC,GAAmB,CACtC2uC,EAAQ,MAAQ,GAChBykB,EAAU,MAAQ,GACRn+C,EAAAnO,EAAM,QAAS9G,EAAK,CAAA,CAGhC,SAAS+wC,EAAW/wC,GAAmB,CACrC2uC,EAAQ,MAAQ,GAEhB,WAAW,IAAM,CACVA,EAAQ,QACXykB,EAAU,MAAQ,GACRn+C,EAAAnO,EAAM,OAAQ9G,EAAK,EAC7BkxC,GAAgB,QAAQ,IAEzB,GAAG,CAAA,CAGC,SAAA+iB,GAAWtkE,GAAwBqQ,GAAqB,CACzD2a,MAAAA,GAAWhrB,KAAS,OAAS4jE,EAAeC,GAC5CU,GAASvkE,KAAS,OAASwkE,GAAaC,GAE1Cp0D,GAAM,SAAW,GAAK2a,GAAS,QAEnCu5C,GAAOl0D,EAAK,EACH,SAAA,iBAAiB,YAAaq0D,CAAU,EACxC,SAAA,iBAAiB,WAAYA,CAAU,EAChD,aAAav6B,EAAQ,IAAI,EACzB,cAAc13B,EAAS,IAAI,GACzBzS,KAAS,OAAS0jE,EAAcC,GAAc,MAAQ,GAEhDx5B,EAAA,KAAO,WAAW,IAAM,CACrB13B,EAAA,KAAO,YAAY,IAAM,CAChCuY,GAAS,MAAQ05C,IAAeH,GAAOl0D,EAAK,GAC3C,EAAE,GACJ,GAAG,EAAA,CAGR,SAASq0D,GAAa,CACX,SAAA,oBAAoB,YAAaA,CAAU,EAC3C,SAAA,oBAAoB,WAAYA,CAAU,EACnD,aAAav6B,EAAQ,IAAI,EACzB,cAAc13B,EAAS,IAAI,EAE3BixD,EAAY,MAAQ,GACpBC,EAAa,MAAQ,EAAA,CAGvB,SAASa,GAAWn0D,GAAqB,CACtC,CAAA2uC,EAAQ,OAASvB,EAAM,EACxBqmB,GACE,OACAzzD,GAAM,QAAU,OAASA,GAAM,SAAW,QAAUA,GAAM,OAAS,MAAQ,MAC7E,CAAA,CAGF,SAASo0D,GAAYp0D,GAAqB,CACvC,CAAA2uC,EAAQ,OAASvB,EAAM,EACxBqmB,GACE,QACAzzD,GAAM,QAAU,OAASA,GAAM,SAAW,QAAUA,GAAM,OAAS,MAAQ,MAC7E,CAAA,CAGO,SAAAyzD,GAAW9jE,GAAwB8wB,GAAqC,CAC3E,GAAA3Z,EAAM,UAAYumD,EAAW,MAAO,OAEpC,IAAA39D,GAAQk/C,EAAa,OAAS,EAC9B59C,GAEJ,OAAQyvB,GAAU,CAChB,IAAK,OACHzvB,GAAO8V,EAAM,SACb,MACF,IAAK,QACH9V,GAAO8V,EAAM,UACb,MACF,IAAK,MACH9V,GAAO8V,EAAM,QACb,MACF,QACE9V,GAAO8V,EAAM,IAAA,CAGjB,MAAMwtD,GAAc5kE,GAAM,SAAS,EAAE,KAAK,EAEtC4kE,GAAY,SAAS,GAAG,IAC1B5kE,GAAQ+I,GAAS67D,GAAY,MAAM,EAAG,EAAE,CAAC,GAGvC3kE,KAAS,OACHD,GAAAiL,GAAKjL,GAAOsB,EAAI,EAEhBtB,GAAAkL,GAAMlL,GAAOsB,EAAI,EAG3BogD,GAAS1hD,GAAOoX,EAAM,UAAY,CAACA,EAAM,KAAO,SAAW,OAAO,CAAA,CAGpE,SAASqqC,GAAanxC,GAAc,CAClC,MAAMrQ,GAAOqQ,GAAM,KACbs0D,GAAet0D,GAAM,OAA4B,MAEnD,IAAAtQ,GAAQ4kE,GAAY,KAAK,EAG7B,GAAI3kE,KAAS,UAAY2kE,IAAe,CAAC/7D,GAAc+7D,GAAa,EAAI,EAAG,CACnE,MAAAC,GAAa,WAAWD,EAAW,EAErC,OAAO,MAAMC,EAAU,EACjB7kE,GAAA,GAERA,GAAQ6kE,GAAW,SAAS,CAC9B,CAGFnB,EAAU,MAAQzjE,KAAS,QAE3ByhD,GAAS1hD,GAAOC,EAAI,CAAA,CAGtB,SAASyhD,GAAS1hD,GAAwBC,GAAsB6+C,GAAO1nC,EAAM,KAAM,CAC7EnX,KAAS,QACXi/C,EAAa,MAAQt+C,EAAQZ,EAAK,EAAIyjE,GAAc,EAAI16D,GAAS/I,EAAK,EAEtEk/C,EAAa,MAAQl/C,GAGvBqkE,EAAcnlB,EAAa,KAAK,EAChCsC,GAAgBvhD,GAAM6+C,EAAI,CAAA,CAG5B,SAAS2kB,IAAgB,CACvB,OAAQrsD,EAAM,UAAW,CACvB,IAAK,YACI,OACT,IAAK,OACI,OAAA,KACT,QACS,MAAA,IAAA,CACX,CAGF,SAASoqC,GAAgBvhD,GAAsB6+C,GAAO1nC,EAAM,KAAM,CAGhE,GAFOnX,GAAAA,KAAS,QAAU,QAAU,SAEhCA,KAAS,SAAU,CACf,MAAA6kE,GAAQlkE,EAAQs+C,EAAa,KAAK,EAClCl/C,GAAQ8kE,GAAQrB,GAAkB,EAAA16D,GAASm2C,EAAa,KAAK,EAEnE,IAAI6lB,GAAaD,GAAQ9kE,GAAQskE,EAAgBv7D,GAAS/I,EAAK,CAAC,EAE5D,CAAC8kE,IAAS1tD,EAAM,WAAa,IAClB2tD,GAAA17D,GAAQ07D,GAAY3tD,EAAM,SAAS,GAGlD,MAAMivC,GAAU,CAAC,OAAO,GAAG0e,GAAY/kE,EAAK,EAM5C,GAJK8kE,KACH5lB,EAAa,MAAQ6lB,IAGnB,CAACjmB,IAAQ,OAAO,GAAGW,EAAWslB,EAAU,EAAG,CAC5C,CAAA,OAAO,GAAG3tD,EAAM,MAAOpX,EAAK,GAAKo2C,EAAK,eAAgB2uB,EAAU,EACjE,MAAA,CAGUtlB,EAAAslB,IAER,CAACjmB,IAAQuH,MACXjQ,EAAK,eAAgB2uB,EAAU,EAC/BvnB,EAAcunB,EAAU,GAGhBx/C,EAAAnO,EAAM,SAAU2tD,EAAU,GAEhC,CAACjmB,IAAQuH,KACG/I,EAAA,CAChB,KACK,CACC,MAAAt9C,GAAQ,WAAWk/C,EAAa,KAAe,EAC/C4lB,GAAQ,OAAO,MAAM9kE,EAAK,EAEhC,IAAI+kE,GAAaD,GAAQrB,GAAA,EAAkBa,EAAgBv7D,GAAS/I,EAAK,CAAC,EAEtE,CAAC8kE,IAAS1tD,EAAM,WAAa,IAClB2tD,GAAA17D,GAAQ07D,GAAY3tD,EAAM,SAAS,GAGlD,MAAM4tD,GAAalmB,IAAQ,CAAC,OAAO,GAAGW,EAAWslB,EAAU,EAEvDC,KACUvlB,EAAAslB,GAEZ3uB,EAAK,eAAgB2uB,EAAU,EAC/BvnB,EAAcunB,EAAU,GAGhBx/C,EAAAnO,EAAM,QAASpX,EAAK,EAE1BglE,IACY1nB,EAAA,CAChB,CACF,CAGF,SAASyE,IAAc,CACjB3qC,EAAM,UAAYumD,EAAW,QAExBjc,GAAA,IAAK,SAAU,EAAK,EAC7Bn8B,EAAUnO,EAAM,OAAO,EACvBujC,EAAW,GAAG,EACR+C,EAAA,EAAA,CAGR,SAASwE,IAAc,CACrB38B,EAAUnO,EAAM,OAAO,CAAA,CAGzB,SAASgrC,GAAkB9xC,GAAmB,CAClCiV,EAAAnO,EAAM,cAAe9G,EAAK,CAAA,CAGtC,SAASgyC,GAAkBhyC,GAAmB,CAClCiV,EAAAnO,EAAM,cAAe9G,EAAK,CAAA,CAGtC,SAASmyC,GAAenyC,GAAsB,CAClCiV,EAAAnO,EAAM,WAAY9G,EAAK,CAAA,gDAKjCmZ,EAAA,mBAqHM,MAAA,CApHH,GAAIH,QAAK6zB,CAAA,UACN,UAAJ,IAAI9uB,EACH,uBAAOrT,GAAS,KAAA,EACjB,KAAK,QACJ,QAAKisC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE,QAAA,OAAAj6C,GAAAqnC,EAAO,QAAP,YAAArnC,GAAS,SAAK,GAGd+nC,EAAS,qBADjBz2B,EAAAA,mBAWM,MAAA,OATH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,iBAAA,CAAA,MAAWzzC,QAAKlS,CAAA,EAAC,YAAW,EACjC,QAAOgrC,EAAA,GAERz4B,EAAAA,WAIOC,sBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,6EAIzByS,qBAyBE,QAzBFC,EAAA,WACUR,EAwBR,MAAAlS,CAAA,EAxBc,aAAY,CACzB,GAAIkS,QAAS06C,CAAA,UACV,UAAJ,IAAIxkB,EACH,MAAQ,CAAAl2B,EAAAA,MAAA3B,CAAA,EAAG,GAAe,SAAA,GAAA2B,GAAAA,EAAAA,MAAAlS,CAAA,EAAM,eAANkS,YAAAA,GAAoB,MAAOA,EAAA,MAAAlS,CAAA,EAAM,YAAY,EACxE,KAAK,OACJ,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,aAAcupC,GAAY,MAC1B,WAAYr3B,EAAAA,MAAKlS,CAAA,EAAC,WAClB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,SAAUumD,EAAU,MACpB,YAAar0C,EAAK,MAAAlS,CAAA,EAAC,aAAekS,EAAA,MAAA5P,CAAA,EAAO,YACzC,KAAM4P,EAAAA,SAAM,QAAQA,GAAAA,EAAAA,MAAKlS,CAAA,EAAC,eAANkS,YAAAA,GAAoB,MACzC,KAAK,aACJ,MAAO26C,EAAU,MAAG36C,WAAO,WAAa,OACxC,gBAAe66C,GAAa,MAC5B,gBAAe76C,EAAAA,MAAKlS,CAAA,EAAC,MAAG,KAAiBkS,QAAKlS,CAAA,EAAC,IAAM,OACrD,gBAAekS,EAAAA,MAAKlS,CAAA,EAAC,MAAQ,IAAWkS,QAAKlS,CAAA,EAAC,IAAM,OACpD,kBAAiBkS,QAAO8zB,CAAA,EACxB,uCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GACd,OAAMiE,EACN,QAAOD,EACP,WAAUqB,GACV,QAAKwE,GAAA,CAAA,IAAAA,GAAA,CAAA,WAAE39B,EAAAA,MAAWm6B,CAAA,GAAAn6B,EAAAA,MAAAm6B,CAAA,EAAA,GAAA7wC,EAAA,GAClB,SAAQ6uC,EAAA,eAGHtB,GAAS,qBADjB12B,EAAAA,mBAcM,MAAA,OAZH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,EAAAA,eAAA,CAAmB,MAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,oBAA8BspC,GAAS,OAAIp3B,EAAAA,MAAKlS,CAAA,EAAC,QAAO,KAAA,EAAA,GAItF,QAAOkrC,EAAA,GAER34B,EAAAA,WAIOC,sBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,iDAKZkS,EAAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAAlS,CAAA,EAAM,uBADtCqS,EAAAA,mBAGO,MAAA,OADJ,MAAKC,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,QAAE3B,CAAA,EAAC,IAAG,OAAA,aAAA,EAAyB2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,wCAE9DW,EAAAA,YAmBakB,EAAAA,WAAA,CAnBA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IASS,CARD+4B,GAAS,qBADjBj3B,EAAAA,mBASS,SAAA,OAPN,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EAC7B,KAAK,SACL,SAAS,KACR,aAAY2B,EAAA,MAAA5P,CAAA,EAAO,UAAU,MAC7B,wBAAYqoC,GAAW,CAAA,MAAA,CAAA,CAAA,GAExBz5B,EAAAA,YAAgDgB,EAAAA,MAAApO,EAAA,EAAhD4O,EAAAA,WAAcR,EAAAA,MAAkC5I,CAAA,EAA5B,MAAK,CAAE,MAAM,OAAA,CAAO,EAAA,KAAA,EAAA,CAAA,UAE1B4I,QAAAlS,CAAA,EAAM,uBAAtBqS,EAAA,mBAOM,MAAA,OAP0B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAC1DW,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,EAAAA,SAAM,aAAeA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,KAC1C,MAAM,2FAII4I,EAAAA,MAAAlS,CAAA,EAAM,cAAW,sBAAjCqS,EAAAA,mBAgCWqsB,EAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CA/BTjsB,EAAAA,mBAeM,MAAA,CAdH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,IAA4B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,UAAA,CAAA,EAAuBk8C,EAAY,OAAav6C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,SAAA,CAAA,EAAsBg8C,EAAW,KAAA,GAKnJ,KAAK,SACJ,aAAYr6C,EAAA,MAAA5P,CAAA,EAAO,UAAU,SAC7B,kBAAiB4P,QAAO8zB,CAAA,EACxB,gBAAe9zB,QAAS06C,CAAA,EACxB,cAAW/c,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAge,EAAA,cAAA7S,IAAUmS,GAAU,OAASnS,EAAM,EAAA,CAAA,SAAA,CAAA,GAC9C,0CAAD,IAAkB,CAAA,EAAA,CAAA,SAAA,CAAA,GACjB,2CAAD,IAAmB,CAAA,EAAA,CAAA,SAAA,CAAA,EAAA,GAEnB9pC,EAAA,YAA+EgB,QAA/EpO,EAAA,EAAA4O,aAAcR,QAAiE5I,CAAA,EAA3D,QAAO,CAAG,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,QAAQ,OAAK,GAAA,gCAE5DmJ,EAAAA,mBAcM,MAAA,CAbH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,EAAA,IAA6B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,CAAA,EAAwBm8C,GAAa,OAAax6C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,SAAA,CAAA,EAAuBi8C,EAAY,KAAA,GAKvJ,aAAYt6C,EAAA,MAAA5P,CAAA,EAAO,UAAU,SAC7B,kBAAiB4P,QAAO8zB,CAAA,EACxB,gBAAe9zB,QAAS06C,CAAA,EACxB,cAAW/c,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAge,EAAA,cAAA7S,IAAUmS,GAAU,QAAUnS,EAAM,EAAA,CAAA,SAAA,CAAA,GAC/C,0CAAD,IAAkB,CAAA,EAAA,CAAA,SAAA,CAAA,GACjB,2CAAD,IAAmB,CAAA,EAAA,CAAA,SAAA,CAAA,EAAA,GAEnB9pC,EAAA,YAAmFgB,QAAnFpO,EAAA,EAAA4O,aAAcR,QAAqE5I,CAAA,EAA/D,UAAS,CAAG,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,UAAU,OAAK,GAAA,iiBCjoBtE,MAAMtJ,EAAQuR,EAuCRytB,EAAOC,EA2BP1uB,EAAKtF,GAAc,UAAU,EAE7BgF,EAAQ5O,EAAAA,SAAS,IAAM,CACrB4O,MAAAA,EAAQjQ,EAAM,OAAO,UACrB/K,EAAO+K,EAAM,KAAK,YAAY,EAC9B9K,EAAS8K,EAAM,KAAK,SAAa,EAAA,EACjC7K,EAAM6K,EAAM,KAAK,QAAQ,EACzB8tD,EAAW9tD,EAAM,KAAK,OAAY,GAAA,EAExC,MAAO,GAAGiQ,EAAM,OAAO69C,CAAO,EAAE,CAAC,KAAK79C,EAAM,QAAQ/a,CAAK,EAAE,CAAC,IAAIC,CAAG,KAAKF,CAAI,EAAA,CAC7E,8BAICod,EAAA,mBAuDM,MAAA,CAtDH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EACb,KAAK,WACJ,gBAAe2B,EAAAA,MAAW1X,EAAA,EAAC+W,EAAQ,QAAA,EACnC,gBAAeW,EAAAA,MAAW1X,EAAA,EAAC+W,EAAQ,QAAA,EACnC,aAAUs+B,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAEhc,EAAI,QAAUztB,EAAI,IAAA,EAAA,GAE/BgB,aA+COC,EAAA,OAAA,OAAA,CA7CJ,KAAMjB,EAAI,KACV,MAAOtB,EAAK,MACZ,SAAUsB,EAAQ,SAClB,QAASA,EAAO,QAChB,OAASA,EAAM,OACf,OAASA,EAAM,OACf,QAAUA,EAAO,QACjB,SAAUA,EAAQ,SAClB,QAAUA,EAAO,OAAA,EAVpB,IA+CO,CAnCLkB,EAAAA,mBAkCM,MAAA,CAjCH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,EAAA,IAA6B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,CAAA,EAAwBgB,EAAQ,UAAaW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,SAAA,CAAA,EAAuBgB,EAAO,SAAaW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,MAAA,CAAA,EAAoBgB,EAAM,QAAaW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,MAAA,CAAA,EAAoBgB,EAAM,QAAaW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,OAAA,CAAA,EAAqBgB,EAAO,SAAaW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,CAAA,EAAwBgB,EAAQ,UAAaW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,CAAA,EAAwBgB,EAAO,OAAA,GAU5X,SAAS,IACT,KAAK,SACJ,aAAYtB,EAAK,MACjB,gBAAeiC,EAAAA,MAAW1X,EAAA,EAAC+W,EAAQ,QAAA,EACnC,QAAKs+B,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAEhc,EAAI,SAAWztB,EAAI,IAAA,GAC1B,UAAO,CAAgBs+B,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAke,EAAA,SAAAF,gBAAA7S,GAAAhc,WAAeztB,EAAI,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,GACnBs+B,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAke,EAAA,SAAAF,gBAAA7S,GAAAhc,WAAeztB,EAAI,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,IAE3CgB,aAcOC,EAAA,OAAA,UAAA,CAbJ,KAAMjB,EAAI,KACV,MAAOtB,EAAK,MACZ,SAAUsB,EAAQ,SAClB,QAASA,EAAO,QAChB,OAASA,EAAM,OACf,OAASA,EAAM,OACf,QAAUA,EAAO,QACjB,SAAUA,EAAQ,SAClB,QAAUA,EAAO,OAAA,EATpB,IAcO,CAHLkB,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,GACbqC,EAAA,gBAAArB,EAAA,KAAK,QAAO,CAAA,EAAA,CAAA,0BCrIdy8C,GAAqB7gD,GAAW,CAC3C,OAAQiB,GAAqB,EAI7B,MAAO,CAAC,OAAQ,OAAQ,KAAM,KAAK,EAInC,KAAM,OAIN,MAAO,OAIP,SAAU,MACV,UAAW,OACX,MAAO,CAAC,OAAQ,OAAQ,IAAI,EAC5B,aAAc,SACd,UAAW,OACX,IAAK,CAAC,OAAQ,OAAQ,IAAI,EAC1B,IAAK,CAAC,OAAQ,OAAQ,IAAI,EAC1B,MAAOrB,EACP,UAAWA,EACX,MAAO,OACP,SAAUmB,EAAgC,EAC1C,QAASA,EAAuC,CAClD,CAAC,EAKY+/C,GAAgB9gD,GAAW,CACtC,OAAQiB,GAAqB,EAC7B,MAAO,CAAC,OAAQ,OAAQ,IAAI,EAC5B,KAAM,OAIN,MAAO,OAIP,SAAU,MACV,UAAW,OACX,MAAO,CAAC,OAAQ,OAAQ,IAAI,EAC5B,aAAc,SACd,MAAO,OACP,SAAUF,EAAgC,EAC1C,aAAcA,EAAiD,EAC/D,cAAeA,EAAiD,CAClE,CAAC,gIClCK,MAAAlO,EAAQiM,GAAS,eADRsF,EACgC,CAC7C,OAAQ,KACR,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,KAAM,IAAU,IAAA,KAAA,EAAO,YAAY,EACnC,MAAO,CACL,QAAS,IAAM,IAAI,KAAK,EAAE,SAAa,EAAA,EACvC,UAAW3oB,GAASA,EAAQ,GAAKA,GAAS,EAC5C,EACA,SAAU,CACR,QAAS,KACT,aAAoB,CAACA,GAASA,EAAM,SAAW,GAAKA,EAAM,SAAW,CACvE,EACA,UAAW,CACT,QAAS,EACT,UAAWA,GAASA,GAAS,GAAKA,EAAQ,CAC5C,EACA,MAAO,CACL,QAAS,IAAM,IAAI,KACnB,aAAoB,CAAC,OAAO,MAAM,CAAC,IAAI,KAAKA,CAAK,CAAC,CACpD,EACA,aAAc,CACZ,QAASkB,GACT,OAAQ,EACV,EACA,UAAW,CACT,QAAS,QACT,UAAWlB,GAASA,IAAU,SAAWA,IAAU,KACrD,EACA,IAAK,KACL,IAAK,KACL,MAAO,KACP,UAAW,GACX,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKo2C,EAAOC,EAIP1uB,EAAKtF,GAAc,UAAU,EAE7BijD,EAAax8C,MAAiB,IAAI,EAClCy8C,EAAWz8C,MAAiB,IAAI,EAChCpb,EAAYob,EAAY,IAAA,EAAE,EAC1B08C,EAAc18C,MAAiB,IAAI,EAEnC,CAAE,QAAS0X,EAAM,QAAAlS,CAAA,EAAYF,GAAS,EACtC1U,EAASI,GAAU,WAAY07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAErDxR,EAAM6S,EAAAA,SAAS,IAAOrB,EAAM,IAAM,CAACzJ,GAAWyJ,EAAM,GAAG,EAAI,IAAU,EACrEzR,EAAM8S,WAAS,IAAOrB,EAAM,IAAM,CAACxJ,GAASwJ,EAAM,GAAG,EAAI,GAAS,EAClEquD,EAAWhtD,EAAAA,SAAS,IACpB,OAAO,MAAM7S,EAAI,KAAK,GAAK,OAAO,MAAMD,EAAI,KAAK,EAC5C,GAGFC,EAAI,MAAQD,EAAI,KACxB,EAEK+/D,EAAkB7yD,GAAc8yD,CAAY,EAElDvB,EAAWhtD,EAAM,KAAK,EACTuuD,EAAA,EAEP3hD,EAAAA,MAAA,IAAM5M,EAAM,MAAOgtD,CAAU,EAC7BpgD,EAAAA,MAAA,CAAC,IAAM5M,EAAM,KAAM,IAAMA,EAAM,MAAO,IAAMA,EAAM,SAAS,EAAGsuD,CAAe,EACnF1hD,QAAMsK,EAAkBtuB,GAAA,CACjBA,IACHwlE,EAAY,MAAQ,KACtB,CACD,EACDxhD,QAAMwhD,EAAsBxlE,GAAA,CAChBulB,EAAAnO,EAAM,QAASpX,CAAK,CAAA,CAC/B,EAEYkpB,EAAA,CACX,WAAAo8C,EACA,SAAAC,EACA,KAAA/kC,EACA,WAAAq7B,EACA,UAAA+J,EACA,YAAAC,EACA,YAAAC,EACA,WAAA70D,EACA,QAAA80D,EACA,UAAAC,CAAA,CACD,EAED,SAASC,EAAa/9D,EAAe,OAC5B,QAAAiQ,EAAAf,EAAM,WAAN,YAAAe,EAAiBjQ,KAAUwR,EAAO,MAAM,OAAQxR,GAAS,CAAe,EAAE,CAAA,CAGnF,SAASy9D,GAAe,CACtBj4D,EAAU,MAAQD,GAChBI,GAAY,IAAI,KAAKuJ,EAAM,KAAMA,EAAM,MAAQ,EAAG,CAAC,EAAGA,EAAM,SAAS,EACrE,EACF,CAAA,CAGF,SAASgtD,EAAWpkE,EAA8B,CAC3C,MAAM,QAAQA,CAAK,IACdA,EAAA,CAACA,EAAOA,CAAK,GAGvB,QAASwB,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,CAC1B,MAAM4K,EAAO,IAAI,KAAKpM,EAAMwB,CAAC,GAAK,EAAE,EAQhC,GANAA,IAAM,EACR8jE,EAAW,MAAQ,OAAO,MAAM,CAACl5D,CAAI,EAAI,KAAOA,EAEhDm5D,EAAS,MAAQ,OAAO,MAAM,CAACn5D,CAAI,EAAI,KAAOA,EAG5C,CAACgL,EAAM,MAAO,KAAA,CACpB,CAGO,SAAA8uD,EAAUlzD,EAAezK,EAAc,CAC9C,OAAO6O,EAAM,WAAa/I,GAAgB2E,EAASzK,CAAM,IAAM,CAAA,CAGjE,SAASszD,EAAWzvD,EAAY,CAC9B,MAAI,CAACA,GAAS,CAACk5D,EAAW,OAAS,CAACC,EAAS,MACpC,GAGF,CAAC,EACLD,EAAW,QACT,CAACl3D,GAAehC,EAAMk5D,EAAW,KAAK,GAAKY,EAAU95D,EAAMk5D,EAAW,KAAK,IAC7EC,EAAS,QAAU,CAACn3D,GAAehC,EAAMm5D,EAAS,KAAK,GAAKW,EAAU95D,EAAMm5D,EAAS,KAAK,GAAA,CAI/F,SAASt0D,EAAW7E,EAAY,CAC1B,GAAA,OAAOgL,EAAM,cAAiB,YAC5BA,EAAM,aAAahL,CAAI,EAClB,MAAA,GAIL,MAAA+9B,EAAO/9B,EAAK,QAAQ,EAE1B,GAAIq5D,EAAS,OACX,GAAIt7B,EAAOxkC,EAAI,OAASwkC,EAAOvkC,EAAI,MAC1B,MAAA,WAGLukC,EAAOvkC,EAAI,OAASukC,EAAOxkC,EAAI,MAC1B,MAAA,GAIJ,MAAA,EAAA,CAGT,SAASigE,EAAUx5D,EAAY,CAC7B,MAAI,CAACA,GAAQ,CAACo5D,EAAY,MACjB,GAGF,CAACp3D,GAAehC,EAAMo5D,EAAY,KAAK,GAAKU,EAAU95D,EAAMo5D,EAAY,KAAK,CAAA,CAGtF,SAASK,EAAYz5D,EAAY,CACzB,KAAA,CAAE,KAAAC,EAAM,MAAAC,CAAA,EAAU8K,EAClB+uD,EAAW/5D,EAAK,YAAY,EAC5Bg6D,EAAYh6D,EAAK,SAAS,EAEhC,OAAO+5D,EAAW95D,GAAS85D,IAAa95D,GAAQ+5D,EAAY95D,EAAQ,CAAA,CAGtE,SAASw5D,EAAY15D,EAAY,CACzB,KAAA,CAAE,KAAAC,EAAM,MAAAC,CAAA,EAAU8K,EAClB+uD,EAAW/5D,EAAK,YAAY,EAC5Bg6D,EAAYh6D,EAAK,SAAS,EAEhC,OAAO+5D,EAAW95D,GAAS85D,IAAa95D,GAAQ+5D,EAAY95D,EAAQ,CAAA,CAGtE,SAASy5D,EAAQ35D,EAAY,CAC3B,OAAOgC,GAAehC,EAAMgL,EAAM,KAAK,IAAM,CAAA,CAG/C,SAASu+B,EAAavpC,EAAY,CAC5B6E,EAAW7E,CAAI,IAIfgL,EAAM,YAAc,QACtBkuD,EAAW,MAAQl5D,EAEnBm5D,EAAS,MAAQn5D,EAGTmZ,EAAAnO,EAAM,SAAUhL,CAAI,EAC9BgqC,EAAK,eAAgBhqC,CAAI,EAAA,CAG3B,SAASi6D,EAAYj6D,EAAY,CAC/Bo5D,EAAY,MAAQv0D,EAAW7E,CAAI,EAAI,KAAOA,CAAA,CAGhD,SAAS45D,EAAU55D,EAAY,CACzB,GAAA,CAACo5D,EAAY,OAAS,CAACF,EAAW,OAAS,CAACC,EAAS,MAChD,MAAA,GAGL3/D,IAAAA,EACAD,EAEA,GAAA2/D,EAAW,OAASC,EAAS,MAAO,CAChC,MAAAe,EAAYhB,EAAW,MAAM,QAAQ,EACrCiB,EAAUhB,EAAS,MAAM,QAAQ,EAEvC3/D,EAAM,KAAK,IAAI0gE,EAAWC,CAAO,EACjC5gE,EAAM,KAAK,IAAI2gE,EAAWC,CAAO,CAAA,SACxBf,EAAY,MAAO,CAC5B,GAAI,CAACF,EAAW,OAAS,CAACC,EAAS,MAAc,MAAA,GAE3C,MAAAiB,EAAchB,EAAY,MAAM,QAAQ,EAE9C,GAAI,CAACF,EAAW,OAAS,CAACC,EAAS,MAAO,CACxC,MAAMkB,GAAgBnB,EAAW,OAASC,EAAS,OAAQ,QAAQ,EAEnE3/D,EAAM,KAAK,IAAI4gE,EAAaC,CAAY,EACxC9gE,EAAM,KAAK,IAAI6gE,EAAaC,CAAY,CAAA,KACnC,CACC,MAAAH,EAAYhB,EAAW,MAAM,QAAQ,EACrCiB,EAAUhB,EAAS,MAAM,QAAQ,EACjCmB,GAAU,KAAK,IAAIJ,EAAWC,CAAO,EACrCI,GAAU,KAAK,IAAIL,EAAWC,CAAO,EAE3C3gE,EAAM,KAAK,IAAI4gE,EAAaE,EAAO,EACnC/gE,EAAM,KAAK,IAAI6gE,EAAaG,EAAO,CAAA,CACrC,KAEO,OAAA,GAGT,OAAOv6D,EAAK,QAAQ,GAAKxG,GAAOwG,EAAK,WAAazG,CAAA,6BAKlD8jB,EAAA,mBAyGM,MAAA,CAxGH,MAAKC,EAAAA,eAAA,CAAUJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,EAAiB2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAgB2B,QAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,YAAA,EAA+B2B,QAAAlS,CAAA,EAAM,SAAWkS,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,SAAA,CAAA,GAM1I,KAAK,MAAA,GAELgC,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,yBAEnCyS,EAAAA,mBAsBM,MAAA,CAtBA,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAW,KAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,MAAA,MAAA,CAAA,CAAA,EAAkB,cAAA,EAAA,kBAClD8B,EAAAA,mBAoBMqsB,EAAA,SAAA,KAAAC,aApBc,EAAR6wB,GAAZ/8C,EAAAA,mBAoBM,MAAA,CApBkB,IAAK+8C,EAAO,wBAAQt9C,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,WAAA,CAAA,CAAA,CAAA,GAC9DgC,aAkBOC,EAAA,OAAA,OAAA,CAhBJ,MAAOq8C,GAAcW,EAAW,EAAAt9C,EAAAA,MAAAlS,CAAA,EAAM,WAAS,CAAA,EAC/C,MAAOwvD,EAAI,EACX,MAAOA,EAAW,EAAAt9C,EAAAA,MAAAlS,CAAA,EAAM,WAAS,CAAA,EAJpC,IAkBO,CAZLkR,cAWWgB,EAAAA,MAAAb,EAAA,EAAA,CAVR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAI,CAAyB,MAAA6uD,GAAcW,EAAW,EAAAt9C,EAAAA,MAAAlS,CAAA,EAAM,WAAS,CAAA,QAA6BwvD,EAAI,QAA2BA,EAAI,EAAOt9C,EAAAA,MAAKlS,CAAA,EAAC,WAAS,CAAA,sBAM5J,IAEM,CAFNyS,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CACb,EAAAqC,kBAAAi8C,GAAcW,EAAW,EAAAt9C,QAAAlS,CAAA,EAAM,WAAS,CAAA,CAAA,EAAA,CAAA,CAAA,kDAMrDyS,EAAAA,mBAkEM,MAAA,SAlEG,OAAJ,IAAI2W,EAAQ,MAAK9W,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,kBAC3B8B,EAAAA,mBAgEMqsB,EAAA,SAAA,KAAAC,aAhEa,EAAP8wB,GAAZh9C,EAAAA,mBAgEM,MAAA,CAhEiB,IAAKg9C,EAAM,MAAKn9C,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,CAAA,kBAC5C8B,EAAAA,mBA8DeqsB,EAAA,SAAA,KAAAC,aA7DE,EAAR+wB,GADTx+C,EAAAA,YA8Dey+C,GAAA,CA5DZ,KAAMF,EAAG,GAAA,EAAYC,EACrB,KAAMp5D,EAAA,OAAWm5D,OAAeC,EAAI,CAAA,EACpC,OAAQx9C,QAAM5P,CAAA,EACd,SAAUmiD,EAAWnuD,SAAWm5D,OAAeC,EAAI,CAAA,CAAA,EACnD,QAASlB,EAAUl4D,SAAWm5D,OAAeC,EAAI,CAAA,CAAA,EACjD,UAASjB,EAAYn4D,SAAWm5D,OAAeC,EAAI,CAAA,CAAA,EACnD,UAAShB,EAAYp4D,SAAWm5D,OAAeC,EAAI,CAAA,CAAA,EACnD,WAAUf,EAAQr4D,SAAWm5D,OAAeC,EAAI,CAAA,CAAA,EAChD,SAAU71D,EAAWvD,SAAWm5D,OAAeC,EAAI,CAAA,CAAA,EACnD,WAAUx9C,EAAAA,MAAKlS,CAAA,EAAC,OAAS4uD,EAAUt4D,EAAS,OAAEm5D,EAAG,GAAA,EAAYC,EAAI,CAAA,CAAA,EACjE,QAAOT,EACP,SAAQ1wB,wBAGDE,EAAAA,OAAO,MAAQvsB,EAAAA,SAAM,MAAM,WAChC,oBAYD,CA0BO,CAtCgB,KAAAld,EAAoB,MAAAib,EAAqB,SAAAkoC,GAAwB,QAAAqF,GAAuB,OAAAoS,EAAsB,OAAAC,WAA+BC,GAA4B,SAAAj8C,GAAwB,QAAAk8C,EAAA,KAYxNx9C,aA0BOC,EAAA,OAAA,OAAA,CAxBJ,KAAAxd,EACA,MAAAib,EACA,SAAAkoC,GACA,QAAAqF,GACA,OAAAoS,EACA,OAAAC,GACA,QAAUC,GACV,SAAAj8C,GACA,QAAAk8C,EAAA,EAVH,IA0BO,CAdL7+C,cAaYgB,EAAAA,MAAAb,EAAA,EAAA,CAZT,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAI,CAAsB,KAAAhL,EAAwB,MAAAib,EAAyB,SAAAkoC,GAA4B,QAAAqF,GAA2B,OAAAoS,EAA0B,OAAAC,WAAmCC,GAAgC,SAAAj8C,GAA4B,QAAAk8C,EAAA,mDAclPtxB,EAAAA,OAAO,aAAevsB,EAAAA,SAAM,MAAM,kBAAc,UAC9D,GAAA2zC,EAAAA,QADuEmK,GAAU,CACjFz9C,aAEOC,EAFP,OAAA,cAAAE,EAAAA,WAEO,CAF0B,QAAA,EAAA,EAAAs9C,CAAU,EAA3C,IAEO,CADL9+C,cAA4EgB,EAAAA,MAAAb,EAAA,EAAA,CAAjE,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,YAAc,KAAMgwD,2KAM/Dz9C,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,8NCvWjC,MAAAA,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,OAAQ,KACR,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,KAAM,IAAU,IAAA,KAAA,EAAO,YAAY,EACnC,MAAO,CACL,QAAS,IAAM,IAAI,KAAK,EAAE,SAAa,EAAA,EACvC,UAAW3oB,GAASA,EAAQ,GAAKA,GAAS,EAC5C,EACA,SAAU,CACR,QAAS,KACT,aAAoB,CAACA,GAASA,EAAM,SAAW,GAAKA,EAAM,SAAW,CACvE,EACA,UAAW,CACT,QAAS,EACT,UAAWA,GAASA,GAAS,GAAKA,EAAQ,CAC5C,EACA,MAAO,CACL,QAAS,IAAM,IAAI,KACnB,aAAoB,CAAC,OAAO,MAAM,CAAC,IAAI,KAAKA,CAAK,CAAC,CACpD,EACA,aAAc,CACZ,QAAS,IAAM,GACf,OAAQ,EACV,EACA,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKo2C,EAAOC,EAIP1uB,EAAKtF,GAAc,UAAU,EAC7B3I,EAASI,GAAU,WAAY07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAErDiwD,EAAgBv+C,EAAAA,IAAI1R,EAAM,KAAK,EAC/BkwD,EAAex+C,EAAAA,IAAI1R,EAAM,IAAI,EAC7BmwD,EAAgBz+C,EAAAA,IAAI1R,EAAM,KAAK,EAErC4M,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPqnE,EAAc,MAAQrnE,CAAA,CAE1B,EACAgkB,EAAA,MACE,IAAM5M,EAAM,KACHpX,GAAA,CACPsnE,EAAa,MAAQtnE,CAAA,CAEzB,EACAgkB,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPunE,EAAc,MAAQvnE,CAAA,CAE1B,EAEAkpB,EAAa,CAAE,cAAAm+C,EAAe,aAAAC,EAAc,cAAAC,CAAA,CAAe,EAE3D,SAASC,EAAgBxnE,EAAe,CACtC,MAAO,GAAGA,CAAK,GAAG0Z,EAAO,MAAM,IAAI,EAAA,CAGrC,SAAS+tD,EAAiBznE,EAAe,CACvC,MAAO,GAAGA,CAAK,GAAG0Z,EAAO,MAAM,KAAK,EAAA,CAGtC,SAASzI,EAAW7E,EAAY,CAC1B,OAAA,OAAOgL,EAAM,cAAiB,WACzB,GAGFA,EAAM,aAAahL,CAAI,CAAA,CAGhC,SAASgyD,EAAYhyD,EAAY,CAC1B6E,EAAW7E,CAAI,IAClBi7D,EAAc,MAAQj7D,GAGdmZ,EAAAnO,EAAM,SAAUhL,CAAI,EAC9BgqC,EAAK,eAAgBhqC,CAAI,CAAA,CAG3B,SAASs7D,EAAiB1nE,EAAe,CACvCsnE,EAAa,MAAQtnE,EAErBulB,EAAUnO,EAAM,aAAcpX,EAAOunE,EAAc,KAAK,EACxDnxB,EAAK,cAAep2C,CAAK,CAAA,CAG3B,SAAS2nE,EAAkB3nE,EAAe,CACxCunE,EAAc,MAAQvnE,EAEtBulB,EAAUnO,EAAM,cAAekwD,EAAa,MAAOtnE,CAAK,EACxDo2C,EAAK,eAAgBp2C,CAAK,CAAA,6BAK1BupB,EAAA,YAkHgBq+C,GAAA,CAjHN,MAAOP,EAAa,sCAAbA,EAAa,MAAAjV,GAC3B,QAAS9oC,EAAAA,MAAKlS,CAAA,EAAC,QACf,MAAKsS,iBAAA,CAAGJ,EAAAA,MAAE3B,CAAA,EAAC,EAAA,CAAC,CAAA,EACZ,KAAM2/C,EAAY,MAClB,MAAOC,EAAa,MACpB,aAAYj+C,EAAAA,MAAKlS,CAAA,EAAC,UAClB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,gBAAekS,EAAAA,MAAKlS,CAAA,EAAC,YAAA,GAEX,iBACT,IA8BO,CA9BPuS,EAAAA,WA8BOC,qBA9BP,IA8BO,CA7BLtB,cA4BWgB,EAAAA,MAAAb,EAAA,EAAA,CA5BA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IA0BM,CA1BNkR,cA0BMgB,EAAAA,MAAA4uB,EAAA,EAAA,CA1BD,QAAA,GAAS,MAAKxuB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAY,MAAM,QAAA,qBAC1C,IAIS,CAJTW,cAISgB,EAAA,MAAA+5C,EAAA,EAAA,CAJD,KAAK,QAAM,mBACjB,IAEO,CAFP15C,EAAAA,WAEOC,oBAFP,IAEO,CADLtB,cAAmDgB,EAAAA,MAAAb,EAAA,EAAA,CAAxC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,iCAGrCkR,cAmBSgB,EAAAA,MAAA+5C,EAAA,EAAA,CAnBA,MAAK35C,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAa,KAAK,GAAA,qBACrC,IAQe,CARfW,cAQegB,EAAAA,MAAAu+C,EAAA,EAAA,CAPZ,MAAOP,EAAY,MACpB,QAAA,GACC,MAAK59C,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,EACZ,IAAK,KACL,IAAK,KACL,UAAW6/C,EACX,SAAQE,6BAEXp/C,cAQegB,EAAAA,MAAAu+C,EAAA,EAAA,CAPZ,MAAON,EAAa,MACrB,QAAA,GACC,MAAK79C,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,EACZ,IAAK,EACL,IAAK,GACL,UAAW8/C,EACX,SAAQE,gGAOV,OACT,QAAA,CAaM,CAdW,MAAAtgD,EAAO,MAAAnf,EAAO,KAAA0+D,KAAI,CACnC/8C,EAAAA,mBAaM,MAAA,CAbA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAChBgC,aAWOC,EAAA,OAAA,OAAA,CATJ,MAAAvC,EACA,MAAAnf,EACA,KAAA0+D,CAAA,EAJH,IAWO,CALLt+C,cAIWgB,EAAAA,MAAAb,EAAA,EAAA,CAJA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAQ,CAAA,MAAAiQ,EAAO,MAAAnf,EAAO,KAAA0+D,CAAI,CAAA,qBAChE,IAEM,CAFN/8C,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,oBACbN,CAAK,EAAA,CAAA,CAAA,0CAMP,eACT,CAoDM,CArDW,KAAAjb,EAAM,MAAAib,EAAO,SAAAkoC,EAAU,QAAAqF,EAAS,OAAAoS,EAAQ,OAAAC,EAAQ,QAAAlB,EAAS,SAAA96C,CAAA,IAAQ,CAClFpB,EAAAA,mBAoDM,MAAA,CAnDH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,IAA4B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,UAAA,CAAA,EAAuB4nC,GAAqBjmC,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,MAAA,CAAA,EAAmBq/C,GAAmB19C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,MAAA,CAAA,EAAmBs/C,GAAmB39C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,OAAA,CAAA,EAAoBo+C,GAAoBz8C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,UAAA,CAAA,EAAuBsD,CAAA,GAQ3Q,SAAS,IACR,QAAKmnC,GAAEgM,EAAYhyD,CAAI,EACvB,UAAO,CAAgB+4D,EAAAA,SAAAF,EAAA,cAAA7S,GAAAgM,EAAYhyD,CAAI,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAChB+4D,WAAAF,EAAAA,cAAA7S,GAAAgM,EAAYhyD,CAAI,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAExCyd,EAAAA,mBAoBM,MAAA,CApBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAAA,GAChBgC,aAkBOC,EAAA,OAAA,OAAA,CAhBJ,SAAA2lC,EACA,QAAAqF,EACA,KAAAxoD,EACA,OAAA46D,EACA,OAAAC,EACA,QAAAlB,EACA,SAAA96C,CAAA,EARH,IAkBO,CARL3C,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CANR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAQ,CAAA,SAAAm4C,EAAU,QAAAqF,EAAS,KAAAxoD,EAAM,OAAA46D,EAAQ,OAAAC,EAAQ,QAAAlB,EAAS,SAAA96C,CAAQ,CAAA,qBAEnE,IAEM,CAFNpB,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,EAAiB,aAAYN,GAC1C2C,EAAA,gBAAA5d,EAAK,SAAO,EAAA,GAAA07D,EAAA,CAAA,wCAKvBj+C,EAAAA,mBAgBM,MAAA,CAhBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,CAAA,GAChBgC,aAcOC,EAAA,OAAA,UAAA,CAZJ,SAAA2lC,EACA,QAAAqF,EACA,KAAAxoD,EACA,OAAA46D,EACA,OAAAC,EACA,QAAAlB,EACA,SAAA96C,CAAA,EARH,IAcO,CAJL3C,cAGYgB,EAAAA,MAAAb,EAAA,EAAA,CAFT,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QACtB,KAAQ,CAAA,SAAAm4C,EAAU,QAAAqF,EAAS,KAAAxoD,EAAM,OAAA46D,EAAQ,OAAAC,EAAQ,QAAAlB,EAAS,SAAA96C,CAAQ,2IC/MpE88C,GAAexjD,GAAW,CACrC,KAAM,OACN,YAAa,CAAC,OAAQ,KAAK,EAC3B,MAAO,OACP,IAAK,OACL,WAAY,OACZ,QAAS,OACT,MAAO,CAAC,OAAQ,QAAQ,EACxB,UAAW,OACX,WAAY,MACZ,YAAaqB,GACb,SAAUzB,EACV,QAASA,EACT,YAAayB,GACb,cAAe,OACf,aAAc,SACd,MAAO,MACP,UAAW,OACX,YAAazB,EACb,WAAYA,EACZ,YAAaQ,GACb,YAAa,OACb,SAAUP,GACV,UAAW,OACX,YAAa,CAAC,OAAQ,QAAQ,EAC9B,MAAO,OACP,UAAWkB,EAAuC,EAClD,OAAQA,EAAU,EAClB,YAAaA,EAAqC,EAClD,OAAQA,EAAqC,EAC7C,UAAWA,EAAqC,EAChD,UAAWA,EAAU,CACvB,CAAC,EAKY0iD,GAAqBzjD,GAAW,CAC3C,KAAMI,GACN,OAAQ,OACR,IAAK,OACL,WAAY,OACZ,UAAW,OACX,SAAUR,EACV,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,aAAc,SACd,MAAO,OACP,UAAWmB,EAAqC,EAChD,OAAQA,EAAU,EAClB,YAAaA,EAAqC,EAClD,OAAQA,EAAqC,EAC7C,UAAWA,EAAqC,CAClD,CAAC,8HCpDK,KAAA,CAAE,MAAA63B,EAAO,QAAAC,EAAS,SAAAnyB,EAAU,QAAAoyB,EAAS,KAAAj8C,EAAM,cAAAk8C,EAAe,cAAAC,EAAe,cAAAC,GAC7EhD,GAAuBkD,CAAK,EAGxBtmC,EAAQiM,GAAS,UADRsF,EAC2B,CACxC,KAAM7D,GAAe1jB,CAAI,EACzB,OAAQ,CACN,QAAS,IACT,UAAWpB,GAASA,GAAS,GAAKA,GAAS,GAC7C,EACA,IAAK,KACL,WAAY,KACZ,UAAW,CACT,QAAS,EACT,aAAoBA,GAAS,CAC/B,EACA,SAAU,IAAMirB,EAAS,MACzB,QAAS,IAAMoyB,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,aAAc,CACZ,QAAS,KACT,OAAQ,EACV,EACA,MAAO,KAAO,CAAC,EAAA,CAChB,EAIK8B,EAAKtF,GAAc,SAAS,EAC5B3I,EAASI,GAAU,SAAS,EAC5B4G,EAAQU,GAAS,EAEjB,CAAE,MAAArO,CAAM,EAAI66B,GAAc,EAE1Bq6B,EAAcn/C,MAAI,CAAC,EACnBo/C,EAAUp/C,MAAI,EAAK,EACnBq/C,EAAYr/C,MAAI,EAAK,EACrBu6B,EAAYv6B,MAAI,EAAK,EACrBs/C,EAAct/C,MAAI,EAAK,EAEvB6G,EAAQ7G,EAAAA,IAAiB,EAEzB/F,EAAWtK,WAAS,IAAMrB,EAAM,UAAaA,EAAM,SAAWA,EAAM,WAAY,EAElF,IAAAixD,EAEJ,KAAM,CAAE,OAAQz4C,EAAS,OAAQ04C,CAAA,EAAa52C,GAAU,CACtD,QAAS,CAACrZ,EAAG/H,KAAU,CACrB,GACE43D,EAAQ,OACRnlD,EAAS,OACT,CAAC4M,EAAM,OACP,CAACC,EAAQ,OACTyzB,EAAU,OACV8kB,EAAU,OACV73D,GAAM,OAAS,EAER,MAAA,GAGI+3D,EAAA14C,EAAM,MAAM,sBAAwB,EAAA,MACjDs4C,EAAY,MAAQ,EACLM,EAAA,EACf34C,EAAQ,MAAM,MAAM,EACVrK,EAAAnO,EAAM,YAAa6wD,EAAY,KAAK,CAChD,EACA,OAAiBz6C,GAAA,CACf,GAAI06C,EAAQ,OAASnlD,EAAS,OAASsgC,EAAU,OAAS8kB,EAAU,MAC3D,MAAA,GAGGF,EAAA,MAASz6C,EAAM,OAAS66C,EAAc,IACnCE,EAAA,EACLhjD,EAAAnO,EAAM,OAAQ6wD,EAAY,KAAK,CAC3C,EACA,MAAO,SAAY,QACb,GAAAC,EAAQ,OAASnlD,EAAS,MAAO,OAErCmlD,EAAQ,MAAQ,GAEV,MAAAnxD,EAAUyxD,EAAYP,EAAY,KAAK,EACzC,IAAAQ,GAEA,OAAOrxD,EAAM,cAAiB,aAChCsT,EAAAA,SAAS,IAAM,CACb09C,EAAY,MAAQ,EAAA,CACrB,EACDK,GAAe,MAAMrxD,EAAM,aAAa6wD,EAAY,MAAOlxD,CAAO,EAClE2T,EAAAA,SAAS,IAAM,CACb09C,EAAY,MAAQ,EAAA,CACrB,GAGCH,EAAY,QAAUQ,KAAiB,IAAU,CAAC1xD,GAAW0xD,KAAiB,KAChFN,EAAU,MAAQ,GAClBF,EAAY,MAAQ,EACpB5kB,EAAU,MAAQ,GAElB7F,EAAc,EAAK,EACnBj4B,EAAUnO,EAAM,MAAM,IACbL,GAAW0xD,KAAiB,MACrCplB,EAAU,MAAQ,GAEdolB,IAAgB,CAAC1xD,IACnBoxD,EAAU,MAAQ,GAClBF,EAAY,MAAQ7wD,EAAM,QAG5BomC,EAAc,EAAI,EACRj4B,EAAAnO,EAAM,UAAW6wD,EAAY,KAAK,GAGhC3qB,EAAA,GACdnlC,GAAAyX,EAAQ,QAAR,MAAAzX,GAAe,OACLoN,EAAAnO,EAAM,UAAW6wD,EAAY,KAAK,EAE5C,aAAal1D,EAAM,OAAO,EAC1Bm1D,EAAQ,MAAQ,EAAA,CAClB,CACD,EAEKQ,EAAYjwD,EAAAA,SAAS,IAAMrB,EAAM,SAAWgxD,EAAY,KAAK,EAC7DptD,EAAYvC,EAAAA,SAAS,IAAM,CACzB,MAAAyiD,EAAUvzC,EAAG,GAAG,QAAQ,EAEvB,MAAA,CACL,CAACuzC,CAAO,EAAG,GACX,CAACvzC,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAAC,GAAGuzC,CAAO,WAAW,EAAG7X,EAAU,MACnC,CAAC,GAAG6X,CAAO,YAAY,EAAG9jD,EAAM,SAChC,CAAC,GAAG8jD,CAAO,WAAW,EAAGwN,EAAU,MACnC,CAAC,GAAGxN,CAAO,KAAK9jD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,SAChD,CAAA,CACD,EACKuxD,EAAclwD,EAAAA,SAAS,KACpB,CACL,CAACkP,EAAG,GAAG,mBAAmB,CAAC,EAAGwgD,EAAU,MAAQ,uBAAyB,OACzE,UAAW,UAAUF,EAAY,MAAQ,GAAG,GAC9C,EACD,EACK/T,EAAWz7C,EAAAA,SAAS,KACjB,CACL,CAACkP,EAAG,GAAG,gBAAgB,CAAC,EAAGwgD,EAAU,MAAQ,iCAAmC,OAChF,mBAAoB,IAAIF,EAAY,KAAK,GAC3C,EACD,EACKW,EAAenwD,EAAAA,SAAS,KACrB,CACL,KAAM,GAAGwvD,EAAY,KAAK,IAC1B,CAACtgD,EAAG,GAAG,oBAAoB,CAAC,EAAGwgD,EAAU,MAAQ,kBAAoB,MACvE,EACD,EAEDnkD,EAAA,MACE,IAAMu5B,EAAc,EACXv9C,GAAA,CACFA,GAGEwoE,EAAYP,EAAY,KAAK,IAChCE,EAAU,MAAQ,GAClBF,EAAY,MAAQ7wD,EAAM,QAG5BisC,EAAU,MAAQ,IAPZvsB,EAAA,CAQR,CAEJ,EACA9S,EAAAA,MAAMjB,EAAU/iB,GAASA,GAAS82B,EAAA,CAAO,EAE5B5N,EAAA,CACX,MAAAi0B,EACA,YAAA8qB,EACA,UAAAE,EACA,UAAA9kB,EACA,SAAAilB,EACA,UAAAI,EACA,MAAA/4C,EACA,QAAAC,EACA,MAAA8tB,EACA,MAAA5mB,CAAA,CACD,EAED,SAASyxC,GAAiB,CACZN,EAAA,MAAQ5+D,GAAQtE,GAAWkjE,EAAY,MAAO,EAAG,GAAG,EAAG,CAAC,CAAA,CAGtE,SAASnxC,GAAQ,CACfqxC,EAAU,MAAQ,GAClBF,EAAY,MAAQ,EACpB5kB,EAAU,MAAQ,EAAA,CAGpB,SAASwlB,GAAa,CACpBV,EAAU,MAAQ,EAAA,CAGpB,SAASK,EAAYxoE,EAAe,CAClC,OAAO,KAAK,IAAIoX,EAAM,OAASpX,CAAK,GAAKoX,EAAM,SAAA,CAGjD,SAASsmC,EAAMz7C,EAAwB,SAC7BkW,GAAAyX,EAAA,QAAA,MAAAzX,GAAO,MAAMlW,EAAO,8BAK5BwnB,EAAA,mBA0DM,MAAA,CAzDH,GAAIH,QAAK6zB,CAAA,EACV,IAAI,UACH,uBAAOniC,EAAS,KAAA,EACjB,SAAS,KACT,KAAK,QACJ,kBAAiBsO,QAAO8zB,CAAA,CAAA,GAEzBvzB,EAAAA,mBAOO,MAAA,CANJ,MAAKH,EAAAA,eAAA,CAAa,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,EAAA,IAA4B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,SAAA,SAAA,CAAA,EAAwB+gD,EAAS,OAAWp/C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,SAAA,SAAA,CAAA,EAAwB07B,EAAS,KAAA,GAK5I,uBAAOslB,EAAW,KAAA,CAAA,UAErB9+C,EAAAA,mBAcM,MAAA,CAbH,MAAKH,EAAAA,eAAA,CAAa,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,KAAA,CAAA,EAAA,IAAyB2B,EAAE,MAAA3B,CAAA,EAAC,IAAG,MAAA,SAAA,CAAA,EAAqB2B,EAAA,MAAQg/C,CAAA,GAAWh/C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,MAAA,SAAA,CAAA,EAAqB+gD,EAAS,OAAWp/C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,MAAA,SAAA,CAAA,EAAqB07B,EAAS,KAAA,GAMjL,uBAAO6Q,EAAQ,KAAA,CAAA,GAEhBvqC,aAIOC,EAJW,OAAA,MAAA,CAAA,QAASy5B,EAAA,OAA3B,IAIO,CAHL/6B,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAM,cAAiBisC,EAAS,KAAA,CAAA,qBAC/D,IAAuF,CAApFt5B,kBAAAC,EAAAA,gBAAAq5B,EAAA,MAAa/5B,QAAAlS,CAAA,EAAM,YAAckS,QAAM5P,CAAA,EAAC,QAAY4P,EAAAA,SAAM,KAAOA,EAAAA,MAAA5P,CAAA,EAAO,QAAQ,EAAA,CAAA,CAAA,qCAIzFmQ,EAAAA,mBA0BM,MAAA,SA1BG,QAAJ,IAAI8F,EAAS,MAAKjG,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAC5BkC,EAAAA,mBAwBM,MAAA,SAvBA,UAAJ,IAAI+F,EACH,MAAKlG,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA+B2B,EAAE,MAAA3B,CAAA,EAAC,IAAG,UAAA,SAAA,CAAA,EAAyB2B,EAAA,MAAQg/C,CAAA,GAAah/C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,SAAA,CAAA,EAAyB+gD,EAAS,OAAap/C,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,SAAA,CAAA,EAAyB07B,EAAS,KAAA,GAM1M,SAAS,IACR,uBAAOulB,EAAY,KAAA,EACnB,gBAAeC,CAAA,GAEhBl/C,aAWOC,EAXe,OAAA,UAAA,CAAA,QAASy5B,EAAA,OAA/B,IAWO,CAVL/6B,cASWgB,EAAAA,MAAAb,EAAA,EAAA,CATA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,cAAiBisC,EAAS,KAAA,CAAA,qBACnE,IAAmD,CAAvCA,EAAS,qBAArB95B,EAAAA,YAAmDD,EAAAA,MAAApO,EAAA,EAAAmiD,EAAAA,eAAAvzC,EAAAA,WAAA,CAAA,IAAA,GAApBR,EAAK,MAAA5I,CAAA,EAAC,KAAK,CAAA,EAAA,KAAA,EAAA,GAE7BgoD,EAAS,OADtBjxB,EAAAA,UAAA,EAAAluB,cAKQD,QALRpO,EAAA,EAAA4O,EAAA,WAKQ,CAHE,IAAA,CAAA,EAAAR,EAAAA,MAAA5I,CAAA,EAAM,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,WAAM,aAAeA,QAAK5I,CAAA,EAAC,QAAQ,gDAE5C,EAAA6I,cAA+CD,EAAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAvzC,aAAA,CAAA,IAAA,GAA1BR,EAAAA,MAAK5I,CAAA,EAAC,WAAW,CAAA,EAAA,KAAA,EAAA,EAAA,sDClQrCooD,GAAmC,CAAC,CAAE,IAAAC,EAAK,EAAAp3C,EAAG,EAAAC,EAAG,MAAA2D,EAAO,OAAAC,KAAa,CAChF,MAAMd,EAAO,KAAK,IAAIa,EAAOC,CAAM,EAAI,IACjCwzC,EAAWt0C,EAAO,GAExB,OAAAq0C,EAAI,OAAOp3C,EAAIq3C,EAAUp3C,EAAIo3C,CAAQ,EACrCD,EAAI,OAAOp3C,EAAIq3C,EAAUp3C,EAAIo3C,CAAQ,EACrCD,EAAI,OAAOp3C,EAAIq3C,EAAUp3C,EAAIo3C,CAAQ,EACrCD,EAAI,OAAOp3C,EAAIq3C,EAAUp3C,EAAIo3C,CAAQ,EACrCD,EAAI,UAAU,EAEP,CAACp3C,EAAIq3C,EAAW,EAAGp3C,EAAIo3C,EAAW,EAAGt0C,EAAO,EAAGA,EAAO,CAAC,CAChE,EAEau0C,GAAmC,CAAC,CAAE,IAAAF,EAAK,EAAAp3C,EAAG,EAAAC,EAAG,MAAA2D,EAAO,OAAAC,KAAa,CAChF,MAAMd,EAAO,KAAK,IAAIa,EAAOC,CAAM,EAAI,GACjCwzC,EAAWt0C,EAAO,GAClBlsB,EAAOmpB,EAAIq3C,EACXxpC,EAAM5N,EAAIo3C,EACVE,EAASx0C,EAAO,GAElB,OAAAq0C,EAAA,OAAOvgE,EAAMg3B,CAAG,EACpBupC,EAAI,IAAIvgE,EAAOwgE,EAAUxpC,EAAM0pC,EAAS,EAAGA,EAAQ,IAAO,KAAK,GAAI,KAAO,KAAK,EAAE,EAC7EH,EAAA,OAAOvgE,EAAOksB,EAAM8K,CAAG,EAC3BupC,EAAI,IAAIvgE,EAAOksB,EAAOw0C,EAAS,EAAG1pC,EAAMwpC,EAAUE,EAAQ,KAAO,KAAK,GAAI,KAAO,KAAK,EAAE,EACxFH,EAAI,OAAOvgE,EAAOksB,EAAM8K,EAAM9K,CAAI,EAC9Bq0C,EAAA,OAAOvgE,EAAMg3B,EAAM9K,CAAI,EAC3Bq0C,EAAI,IAAIvgE,EAAO0gE,EAAS,EAAG1pC,EAAMwpC,EAAUE,EAAS,GAAK,KAAO,KAAK,GAAI,KAAO,KAAK,GAAI,EAAI,EACzFH,EAAA,OAAOvgE,EAAMg3B,CAAG,EAEb,CAAC7N,EAAIq3C,EAAW,EAAGp3C,EAAI8C,EAAO,GAAM,EAAGA,EAAO,IAAM,EAAGA,EAAO,IAAM,CAAC,CAC9E,EAEay0C,GAAmC,CAAC,CAAE,IAAAJ,EAAK,EAAAp3C,EAAG,EAAAC,EAAG,MAAA2D,EAAO,OAAAC,KAAa,CAChF,MAAMd,EAAO,KAAK,IAAIa,EAAOC,CAAM,EAAI,IACjCwzC,EAAWt0C,EAAO,GAEpB,OAAAq0C,EAAA,OAAOp3C,EAAGC,EAAIo3C,CAAQ,EACtBD,EAAA,cACFp3C,EACAC,EAAIo3C,EAAWt0C,EAAO,IACtB/C,EAAIq3C,EAAWt0C,EAAO,GACtB9C,EAAIo3C,EAAW,GAAMt0C,EAAO,GAC5B/C,EAAIq3C,EACJp3C,EAAIo3C,EAAW,EACjB,EACAD,EAAI,cAAcp3C,EAAIq3C,EAAUp3C,EAAI8C,EAAO,GAAK/C,EAAI+C,EAAO,GAAK9C,EAAIo3C,EAAUr3C,EAAGC,EAAIo3C,CAAQ,EACzFD,EAAA,cACFp3C,EAAI+C,EAAO,GACX9C,EAAIo3C,EACJr3C,EAAIq3C,EACJp3C,EAAI8C,EAAO,GACX/C,EAAIq3C,EACJp3C,EAAIo3C,EAAW,EACjB,EACID,EAAA,cACFp3C,EAAIq3C,EAAWt0C,EAAO,GACtB9C,EAAIo3C,EAAW,GAAMt0C,EAAO,GAC5B/C,EACAC,EAAIo3C,EAAWt0C,EAAO,IACtB/C,EACAC,EAAIo3C,CACN,EAEO,CAACr3C,EAAIq3C,EAAW,EAAGp3C,EAAIo3C,EAAW,EAAGt0C,EAAO,EAAGA,EAAO,CAAC,CAChE,EAEa00C,GAAkC,CAAC,CAAE,IAAAL,EAAK,EAAAp3C,EAAG,EAAAC,EAAG,MAAA2D,EAAO,OAAAC,KAAa,CAC/E,MAAMd,EAAO,KAAK,IAAIa,EAAOC,CAAM,EAAI,IACjCwzC,EAAWt0C,EAAO,GAExB,OAAAq0C,EAAI,OAAOp3C,EAAGC,EAAI8C,EAAO,GAAI,EACzBq0C,EAAA,cACFp3C,EACAC,EAAI8C,EAAO,GACX/C,EAAI+C,EAAO,GACX9C,EAAIo3C,EACJr3C,EAAIq3C,EAAW,GACfp3C,EAAIo3C,CACN,EACID,EAAA,cACFp3C,EAAIq3C,EAAW,GAAMt0C,EAAO,GAC5B9C,EAAIo3C,EACJr3C,EAAIq3C,EACJp3C,EAAI8C,EAAO,GACX/C,EAAIq3C,EACJp3C,EAAI8C,EAAO,EACb,EACIq0C,EAAA,cACFp3C,EAAIq3C,EACJp3C,EAAI8C,EAAO,GACX/C,EAAI+C,EAAO,IACX9C,EAAIo3C,EAAW,GACfr3C,EACAC,EAAIo3C,EAAW,EACjB,EACID,EAAA,cACFp3C,EAAI+C,EAAO,IACX9C,EAAIo3C,EAAW,GACfr3C,EAAIq3C,EACJp3C,EAAI8C,EAAO,GACX/C,EAAIq3C,EACJp3C,EAAI8C,EAAO,EACb,EACIq0C,EAAA,cACFp3C,EAAIq3C,EACJp3C,EAAI8C,EAAO,GACX/C,EAAIq3C,EAAW,GAAMt0C,EAAO,GAC5B9C,EAAIo3C,EACJr3C,EAAIq3C,EAAW,GACfp3C,EAAIo3C,CACN,EACAD,EAAI,cAAcp3C,EAAI+C,EAAO,GAAK9C,EAAIo3C,EAAUr3C,EAAGC,EAAI8C,EAAO,GAAK/C,EAAGC,EAAI8C,EAAO,GAAI,EAE9E,CAAC/C,EAAIq3C,EAAW,EAAGp3C,EAAIo3C,EAAW,EAAGt0C,EAAO,EAAGA,EAAO,GAAM,CAAC,CACtE,ECpG8E,SAAAgoB,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAK9E,MAAe4iB,qBAAgB,CAC7BjX,KAAM,UACNwH,MAAO2wD,GACP9qB,MAAO,CAAC,gBAAgB,EACxBn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO4hC,OAAAA,CAAO,EAAG,CAC/B,KAAM,CAAEC,MAAAA,EAAOC,QAAAA,EAASnyB,SAAAA,EAAUoyB,QAAAA,EAASC,cAAAA,EAAeE,cAAAA,CAAc,EAAIhD,GAE1EkD,CAAK,EAEDtmC,EAAQiM,GAAS,UAAW0D,EAAQ,CACxC9mB,KAAM,QACNopE,YAAa,CACXpiD,QAAS,KACTtD,UAAW3jB,IACLK,GAAOL,EAAK,EAAU,GAEtBg1D,MAAMsU,QAAQtpE,EAAK,EACdA,GAAM,CAAC,GAAK,GAAKA,GAAM,CAAC,GAAK,KAAOA,GAAM,CAAC,GAAK,GAAKA,GAAM,CAAC,GAAK,IAEjEA,IAAS,GAAKA,IAAS,GAGnC,EACDonB,MAAO,KACPmiD,IAAK,KACLC,WAAY,KACZC,QAAS,KACTC,MAAO,KACPC,UAAW,CACT1iD,QAAS,EACTtD,UAAW3jB,IAASA,IAAS,CAC9B,EACD4pE,WAAYA,IAAM,CAAC,IAAM,GAAG,EAC5BC,YAAahkD,GAAgB,EAC7BoF,SAAUA,IAAMA,EAASjrB,MACzBq9C,QAASA,IAAMA,EAAQr9C,MACvB0+C,YAAa74B,GAAgB,EAC7B+4B,cAAe,KACfkrB,aAAc,CACZ7iD,QAAS,KACTpD,OAAQ,EACT,EACDkmD,MAAO,CACL9iD,QAASA,IAAM,CAAE,EACjBtD,UAAW3jB,IAAS,CAACA,GAAMgqE,KAAKjL,IAAQA,GAAKp9D,OAAS,CAAC,CACxD,EACDsoE,UAAW,EACXC,YAAa,GACbC,WAAY,GACZC,YAAatlD,GAAgB,EAC7BulD,YAAa,KACbj+B,SAAU,GACVk+B,UAAW,CACTrjD,QAAS,IACTtD,UAAW3jB,IAASA,IAAS,CAC9B,EACDuqE,YAAa,CACXtjD,QAAS6hD,GACTjlD,OAAQ,EACT,EACDvI,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEKqM,EAAKtF,GAAc,SAAS,EAC5B3I,EAASI,GAAU,SAAS,EAC5B4G,EAAQU,GAAU,EAElB,CAAErO,MAAAA,CAAO,EAAG66B,GAAe,EAE3B48B,EAAgB1hD,EAAG,IAAC2hD,EAAYrzD,EAAMiyD,WAAW,CAAC,EAClDf,EAAWx/C,EAAG,IAAC,EAAK,EACpB4hD,EAAWxmD,EAAQ,SAAa,EAAE,EAClCkkD,EAAct/C,EAAG,IAAC,EAAK,EACvB6hD,EAAU7hD,EAAG,IAAC,EAAK,EACnB8hD,EAAS9hD,EAAG,IAAC,EAAK,EAClB+hD,EAAc/hD,EAAG,IAAC,CAAC,EACnBgrC,EAAUhrC,EAAG,IAAC,EAAK,EAEnBuF,EAAUvF,EAAAA,IAAkB,EAC5BgiD,EAAShiD,EAAAA,IAAwB,EACjCiiD,EAAYjiD,EAAAA,IAAwB,EACpCkiD,EAASliD,EAAAA,IAA2B,EAEpC6G,EAAQlX,EAAQ,SAAC,IAAMuyD,QAAAA,OAAAA,GAAAA,EAAOhrE,QAAPgrE,YAAAA,GAAcr7C,MAAK,EAE1C0zB,EAAY5qC,EAAQ,SAAC,YAAM,OAAC,GAACuyD,GAAAA,EAAOhrE,QAAPgrE,MAAAA,GAAc3nB,YAAasnB,EAAQ3qE,MAAK,EACrEioE,EAAcxvD,EAAAA,SAAS,IAAA,QAAMuyD,QAAAA,GAAAA,EAAOhrE,QAAPgrE,YAAAA,GAAc/C,cAAe,EAAC,EAC3DE,EAAY1vD,EAAQ,SAAC,IAAMuyD,QAAAA,OAAAA,GAAAA,EAAOhrE,QAAPgrE,YAAAA,GAAc7C,UAAS,EAElD8C,EAAaxyD,EAAAA,SAAS,IAAM+xD,EAAcxqE,MAAM,CAAC,CAAC,EAElDkrE,EAAepiD,EAAG,IAAC,EAAK,EACxBqiD,EAAetoD,EAAAA,WAAWgsC,QAAQzhB,QAAO,CAAE,EAE3Cg+B,EAA6B,CAAE,EAE/BC,EAAW,KAEjB,IAAIC,EAAc,GACd5B,EACA6B,GAEJ,MAAM7C,GAAYjwD,EAAQ,SAAC,IAAMrB,EAAMimC,SAAW6tB,EAAalrE,OAASooE,EAAYpoE,KAAK,EACnFwrE,EAAa/yD,WAAS,IAAMrB,EAAM6yD,UAAY,GAAKY,EAAY7qE,OAASoX,EAAM6yD,SAAS,EACvFjvD,GAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAG,EACN8jB,EAAGo4B,GAAG,MAAM,EACZp4B,EAAGE,GAAGzQ,EAAMnX,IAAI,EAChB,CACE,CAAC0nB,EAAGE,GAAG,SAAS,CAAC,EAAGw7B,EAAUrjD,MAC9B,CAAC2nB,EAAGE,GAAG,MAAM,CAAC,EAAG,CAACw7B,EAAUrjD,OAAS4qE,EAAO5qE,MAC5C,CAAC2nB,EAAGE,GAAG,UAAU,CAAC,EAAGygD,EAAStoE,MAC9B,CAAC2nB,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM6T,SAC3B,CAACtD,EAAGE,GAAG,SAAS,CAAC,EAAG6gD,GAAU1oE,MAC9B,CAAC2nB,EAAGE,GAAG,aAAa,CAAC,EAAG2jD,EAAWxrE,KACrC,CAAC,CAEJ,EACKyrE,GAAiBhzD,EAAAA,SAAS,KACvB,CACLjQ,KAAM,GAAGy/D,EAAYjoE,KAAK,IAC1B,CAAC2nB,EAAGtG,GAAG,oBAAoB,CAAC,EAAG8mD,EAAUnoE,MAAQ,kBAAoBqoB,MACtE,EACF,EACKuhD,GAAanxD,EAAAA,SAAS,IACnB,CAACrB,EAAMwyD,WAAW,CAAC,GAAK,IAAMxyD,EAAMwyD,WAAW,CAAC,GAAK,GAAG,CAChE,EACK8B,GAAejzD,EAAQ,SAAC,IAAMrB,EAAM6T,UAAYo4B,EAAUrjD,OAAS0oE,GAAU1oE,KAAK,EAExFgkB,EAAAA,MACE,IAAM5M,EAAMiyD,YACZrpE,IAAS,CACPwqE,EAAcxqE,MAAQyqE,EAAYzqE,EAAK,CACzC,CACF,EACAgkB,EAAAA,MAAM,CAAC,IAAM5M,EAAMsyD,MAAOr7C,CAAO,EAAG,SAAY,CAC9Cq7C,EAAQrhD,OACR,MAAO8iD,EAAanrE,MAAQ2rE,MAC5BC,EAAoB,CACtB,CAAC,EACD5nD,EAAK,MACH,CACEwmD,EACA,IAAMpzD,EAAMwyD,WAAW,CAAC,EACxB,IAAMxyD,EAAMwyD,WAAW,CAAC,EACxB,IAAMxyD,EAAMmzD,WAAW,EAEzBqB,CACF,EACA5nD,EAAK,MACH,CAAC,IAAM5M,EAAMnX,KAAM,IAAMmX,EAAM8yD,WAAW,EAC1C,IAAM,CAEF9yD,EAAMnX,OAAS,SACfmX,EAAM8yD,aACN,OAAO9yD,EAAM0yD,cAAiB,YAE9B+B,QAAQC,KACN,8HAEF,CAEJ,EACA,CAAEjrB,UAAW,EAAK,CACpB,EACA78B,EAAAA,MACE,CAAC,IAAM5M,EAAMnX,KAAM,IAAMmX,EAAM2yD,MAAO,IAAM3yD,EAAM2yD,MAAMpoE,OAAQ,IAAMyV,EAAM8yD,WAAW,EACvF,IAAM,CACA9yD,EAAMnX,OAAS,SAAWmX,EAAM2yD,MAAMpoE,QAAU,CAACyV,EAAM8yD,aAAeR,GACxEkC,EAAoB,CAExB,CACF,EACA5nD,QAAM8vC,EAAS,MAAM9zD,IAAS,CACxBA,KACF,MAAOmrE,EAAanrE,MAAQ2rE,MAC5BC,EAAoB,EAExB,CAAC,EACD5nD,EAAK,MAACq/B,EAAWrjD,IAAS,CACpBA,IAASoX,EAAM+yD,YAAcrW,EAAQ9zD,QACvCisD,aAAal5C,EAAMg5D,WAAW,EAE9Bh5D,EAAMg5D,YAAczqB,WAAW,IAAM,CACnCwS,EAAQ9zD,MAAQ,EAClB,EAAGoX,EAAMkzD,SAAS,EAEtB,CAAC,EAEDz+C,EAAAA,UAAU,SAAY,CACpB,MAAOs/C,EAAanrE,MAAQ2rE,MAC5BK,EAAW,CACb,CAAC,EAED9uB,EAAO,CACLorB,SAAAA,EACAH,UAAAA,EACA9kB,UAAAA,EACA6nB,aAAAA,EACAC,aAAAA,EACA98C,QAAAA,EACAy8C,OAAAA,EACAC,UAAAA,EACAC,OAAAA,EACAl0C,MAAAA,CACF,CAAC,EAGD,IAAIm1C,GAEJ,eAAeN,IAAY,CACzB,GAAIjC,EAAO,OAEXwB,EAAalrE,MAAQ,GACrBisE,GAAW,GAAGC,KAAKC,IAAK,CAAA,GAAGjX,KAAKniC,MAAMmiC,KAAKhrD,SAAW,GAAI,CAAC,GAE3D,MAAMkiE,GAAOH,GACPI,GAAM,OAAOj1D,EAAMsyD,OAAU,WAAa,MAAMtyD,EAAMsyD,QAAUtyD,EAAMsyD,MAE5E,MAAM,IAAI7a,QAAczhB,IAAW,CACjC,GAAI,CAACxtC,IAAYwsE,KAASH,IAAY,CAACI,GAAK,CAC1Cj/B,GAAS,EACT,MACF,CAEAs8B,EAAQ,IAAInsD,MACZ+tD,EAAc,GACd5B,EAAM2C,IAAMA,GAERA,GAAIC,KAAI,EAAGC,WAAW,YAAY,GACpCjB,EAAc,GACdl+B,GAAS,GAETs8B,EAAM8C,OAAS,IAAM,CACnBlB,EAAc,GACdl+B,GAAS,CACV,CAEL,CAAC,EAAEq/B,QAAQ,IAAM,CACfvB,EAAalrE,MAAQ,EACvB,CAAC,CACH,CAEA,SAAS0sE,IAAqB,QAC5B,MAAMC,GAAW7B,EAAO9qE,MAClB+oE,IAAM4D,GAAAA,IAAAA,YAAAA,GAAUC,aAAVD,YAAAA,GAAAA,KAAAA,GAAuB,MAEnC,GAAI,CAACjD,GAAS,CAACiD,IAAY,CAAC5D,GAAK,OAEjC,KAAM,CAAExzC,MAAAA,GAAOC,OAAAA,EAAO,EAAIm3C,GAI1B,GAFA5D,GAAIiD,UAAUtC,EAAO,EAAG,EAAGn0C,GAAOC,EAAM,EAEpC,CAACpe,EAAM2yD,MAAMpoE,QAAUyV,EAAM8yD,YAAa,OAE9CkB,EAAezpE,OAAS,EAExB,MAAMqmB,GAAWktC,KAAKvvD,IAAI4vB,GAAOC,EAAM,EAAI61C,EAE3CtC,GAAI8D,aAAe,SACnB9D,GAAI+D,UAAY,SAChB/D,GAAIgE,KAAO,QAAQ/kD,EAAQ,gBAC3B+gD,GAAIiE,UAAY,EAChBjE,GAAIkE,YAAc,OAElB,MAAMC,GAAWA,CACfnO,GACAptC,GACAC,GACAu7C,GAAS,EACT5pE,GAAQgE,OACL,CACHwhE,GAAIqE,KAAM,EACVrE,GAAIsE,UAAU17C,GAAGC,EAAC,EAClBu7C,IAAUpE,GAAIthD,OAAO0lD,GAASjY,KAAKoY,EAAE,EACrCvE,GAAIwE,UAAYhqE,GAChBwlE,GAAIyE,SAASzO,GAAM,EAAG,CAAC,EACvBgK,GAAI0E,WAAW1O,GAAM,EAAG,CAAC,EACzBgK,GAAI2E,QAAS,CACd,EAEKC,GAAU5E,GAAI6E,YAAYx2D,EAAM2yD,MAAM,CAAC,CAAC,EACxC8D,GAAS3Y,KAAKvvD,IAAIqiB,GAAU2lD,GAAQp4C,KAAK,EAAI,IAC7Cu4C,GACJ5Y,KAAKvvD,IAAIqiB,GAAU2lD,GAAQI,sBAAwBJ,GAAQK,sBAAsB,EAAI,IAEvF,IAAIC,GAAQ,GAAKjmD,GACbkmD,GAAQ,GAAKlmD,GAEjB,UAAW+2C,MAAQ3nD,EAAM2yD,MAAO,CAC9B,IAAIp4C,GAAIs8C,GACJr8C,GAAIs8C,GAER,KAAOhZ,KAAKiZ,IAAIx8C,GAAIs8C,EAAK,EAAIJ,IAAU3Y,KAAKiZ,IAAIv8C,GAAIs8C,EAAK,EAAIJ,IAC3Dn8C,GAAI4D,GAAQ,GAAM2/B,KAAKhrD,OAAM,EAAKqrB,GAAQ,GAC1C3D,GAAI4D,GAAS,GAAM0/B,KAAKhrD,OAAM,EAAKsrB,GAAS,GAG9Cy4C,GAAQt8C,GACRu8C,GAAQt8C,GAERw5C,EAAegD,KAAK,CAAEz8C,GAAI4D,GAAS,IAAM3D,GAAI4D,GAAU,GAAG,CAAC,EAC3D03C,GAASnO,GAAMptC,GAAGC,GAAGsjC,KAAKhrD,OAAQ,EAAG,CAAC,CACxC,CACF,CAEA,SAASmkE,GAAmB,CAC1B,GAAI,OAAOj3D,EAAMmzD,aAAgB,WAAY,OAAOnzD,EAAMmzD,YAE1D,OAAQnzD,EAAMmzD,YAAW,CACvB,IAAK,SACH,OAAOtB,GACT,IAAK,SACH,OAAOE,GACT,IAAK,QACH,OAAOC,GACT,QACE,OAAON,EACX,CACF,CAEA,SAASkD,GAAY,WACnB,MAAMW,GAAW7B,EAAO9qE,MAClB+oE,IAAM4D,GAAAA,IAAAA,YAAAA,GAAUC,aAAVD,YAAAA,GAAAA,KAAAA,GAAuB,MAC7B2B,GAAcvD,EAAU/qE,MACxBuuE,IAASD,GAAAA,IAAAA,YAAAA,GAAa1B,aAAb0B,YAAAA,GAAAA,KAAAA,GAA0B,MAEzC,GAAI,CAAC5E,GAAS,CAAC4B,GAAe,CAACqB,IAAY,CAAC5D,IAAO,CAAC3xD,EAAMsyD,MAAO,OAEjE,GAAItyD,EAAMnX,OAAS,QAAS,CAC1BysE,GAAoB,EACpB,MACF,CAEA,GAAI,CAAC4B,IAAe,CAACC,IAAU,CAAC5+C,EAAM3vB,MAAO,OAE7C,GAAI,CAACurE,GAAc,CACjB,GAAI,CAAC3rE,GAAU,OAEf2rE,GAAevoB,SAASC,cAAc,QAAQ,CAChD,CAEAsoB,GAAah2C,MAAQo3C,GAASp3C,MAC9Bg2C,GAAa/1C,OAASm3C,GAASn3C,OAE/B,MAAMg5C,GAAUjD,GAAaqB,WAAW,IAAI,EAE5C,GAAI,CAAC4B,GAAS,OAEdzF,GAAI0F,UAAU,EAAG,EAAG9B,GAASp3C,MAAOo3C,GAASn3C,MAAM,EACnD+4C,GAAOE,UAAU,EAAG,EAAGH,GAAY/4C,MAAO+4C,GAAY94C,MAAM,EAC5Dg5C,GAAQC,UAAU,EAAG,EAAGlD,GAAah2C,MAAOg2C,GAAa/1C,MAAM,EAE/D,MAAMk5C,GAAa/B,GAAS7tC,sBAAuB,EAC7C6vC,GAAYh/C,EAAM3vB,MAAM8+B,sBAAuB,EAE/C8vC,IAAaF,GAAWn5C,MAAQo5C,GAAUp5C,OAASm5C,GAAWn5C,MAASo3C,GAASp3C,MAEhFs5C,GAAUD,GAAW,EAAIpE,EAAcxqE,MAAM,CAAC,GAAK2sE,GAASp3C,MAAQq5C,IAAY,IAChFE,GAAUtE,EAAcxqE,MAAM,CAAC,EAAI2sE,GAASn3C,OAAS,IAErDu5C,GAAgBV,EAAkB,EAExCG,GAAQQ,UAAW,EACnBR,GAAQvB,YAAc,2BACtBuB,GAAQxB,UAAY,EAEpB,KAAM,CAACiC,GAAOC,GAAOC,GAAWC,EAAU,EAAIL,GAAc,CAC1DhG,IAAKyF,GACL78C,EAAGk9C,GACHj9C,EAAGk9C,GACHv5C,MAAOne,EAAMwyD,WAAW,CAAC,EACzBp0C,OAAQpe,EAAMwyD,WAAW,CAAC,CAC5B,CAAC,EAED4E,GAAQa,OAAQ,EAChBb,GAAQc,KAAM,EACdd,GAAQxC,UAAUtC,EAAO,EAAG,EAAGiD,GAASp3C,MAAOo3C,GAASn3C,MAAM,EAG9D,MAAM+5C,GAAaV,GAAUI,GACvBO,IAAiBL,GAAY,GAAMI,IAAcJ,GAAa,IAEpEb,GAAYvmD,MAAM0pB,UAAY,eAAe+9B,GAAe,EAAE,WAC9DlB,GAAY/4C,MAAQ45C,GAEpBZ,GAAOvC,UACLT,GACA0D,GACAC,GACAC,GACAC,GACA,EACAF,GACAC,GACAC,EACF,EAEArG,GAAIqE,KAAM,EACVrE,GAAIiG,UAAW,EACfjG,GAAIwE,UAAY,4BAChBxE,GAAIkE,YAAc,2BAClBlE,GAAIiE,UAAY,GAEhB+B,GAAc,CACZhG,IAAAA,GACAp3C,EAAGk9C,GACHj9C,EAAGk9C,GACHv5C,MAAOne,EAAMwyD,WAAW,CAAC,EACzBp0C,OAAQpe,EAAMwyD,WAAW,CAAC,CAC5B,CAAC,EAEDb,GAAIsG,OAAQ,EACZtG,GAAI9T,KAAM,EACV8T,GAAI2E,QAAS,EACb3E,GAAI0G,yBAA2B,mBAC/B1G,GAAIiD,UAAUtC,EAAO,EAAG,EAAGiD,GAASp3C,MAAOo3C,GAASn3C,MAAM,CAC5D,CAEA,SAASo2C,GAAqB,CAC5Bj4D,GAAcq4D,CAAS,CACzB,CAEA,eAAel1C,EAAM44C,GAA6C,QAC5DA,KACFhG,EAAQrhD,OACR,MAAO8iD,EAAanrE,MAAQ2rE,MAC5BK,EAAW,GAGbrB,EAAQ3qE,MAAQ,GAChB4qE,EAAO5qE,MAAQ,GACf6qE,EAAY7qE,MAAQ,EACpBwqE,EAAcxqE,MAAQyqE,EAAa,EACnCC,EAAS/oE,OAAS,GAElBqpE,GAAAA,EAAOhrE,QAAPgrE,MAAAA,GAAcl0C,QACd1f,EAAMnX,OAAS,SAAWysE,GAAoB,CAChD,CAEA,SAASjC,EAAYliE,GAAS6O,EAAMiyD,YAAa,CAC/C,GAAIhpE,GAAOkI,EAAM,EAAG,MAAO,CAAC2B,GAAO,GAAI,EAAE,EAAGA,GAAO,GAAI,EAAE,CAAC,EAE1D,KAAM,CAAC2kE,GAAU3kE,GAAO,GAAI,EAAE,EAAG4kE,GAAU5kE,GAAO,GAAI,EAAE,CAAC,EAAI+J,GAAY1L,EAAM,EAE/E,MAAO,CAACsmE,GAASC,EAAO,CAC1B,CAEA,SAASpxB,EAAMz7C,GAAwB,SACrC+oE,GAAAA,EAAOhrE,QAAPgrE,MAAAA,GAActtB,MAAMz7C,GACtB,CAEA,SAAS0tE,EAAgBjoE,GAAiB,CACxC4gE,EAAStoE,MAAQ,GACjBulB,EAAUnO,EAAMw4D,YAAaloE,EAAO,CACtC,CAEA,SAASmoE,GAAWnoE,GAAiB,CACnC6d,EAAUnO,EAAM04D,OAAQpoE,EAAO,CACjC,CAEA,SAASqoE,EAAcroE,GAAiB,CACtC4gE,EAAStoE,MAAQ,GACjBulB,EAAUnO,EAAM44D,UAAWtoE,EAAO,CACpC,CAEA,SAASuoE,GAAmBvoE,GAAiB,CAC3CijE,EAAQ3qE,MAAQ,GAChB4qE,EAAO5qE,MAAQ,GAEfulB,EAAUnO,EAAM84D,UAA2BxoE,EAAO,EAClD81C,EAAc91C,EAAO,EACrB41C,EAAe,CACjB,CAEA,SAAS6yB,IAAkB,CACzBvF,EAAO5qE,MAAQ,GACf,EAAE6qE,EAAY7qE,MAEdulB,EAAUnO,EAAMg5D,MAAM,CACxB,CAEA,SAASC,IAAgB,CACvB,CAAC3E,GAAa1rE,OAASulB,EAAUnO,EAAMk5D,SAAS,CAClD,CAEA,SAAStuB,GAAgB1xC,GAAc,CACrCA,GAAM0xC,gBAAiB,CACzB,CAEA,eAAeuuB,IAAiB,CAC9B,GAAI7H,GAAU1oE,MAAO,OAErB0qE,EAAS/oE,OAASyV,EAAM2yD,MAAMpoE,OAE9B,IAAI+I,GAAS0M,EAAM8yD,YACfzB,GAEJ,GAAI,CAACrxD,EAAM8yD,aAAeY,EAAO9qE,MAAO,CACtC,KAAM,CAAEu1B,MAAAA,GAAOC,OAAAA,EAAQ,EAAGs1C,EAAO9qE,MAC3BgoB,GAAWktC,KAAKvvD,IAAI4vB,GAAOC,EAAM,EAAI61C,EACrCmF,GAAcxoD,GAAWuN,GAAS,GAAKne,EAAMuyD,UAC7C8G,GAAczoD,GAAWwN,GAAU,GAAKpe,EAAMuyD,UAEpDj/D,GAAS,GAET,QAASlJ,GAAI,EAAG4H,GAAMshE,EAAS/oE,OAAQH,GAAI4H,GAAK,EAAE5H,GAAG,CACnD,KAAM,CAACmwB,GAAGC,EAAC,EAAI84C,EAASlpE,EAAC,EACnB,CAACqtE,GAASC,EAAO,EAAI1D,EAAe5pE,EAAC,EAE3C,GAAI0zD,KAAKiZ,IAAIx8C,GAAIk9C,EAAO,EAAI2B,IAActb,KAAKiZ,IAAIv8C,GAAIk9C,EAAO,EAAI2B,GAAY,CAC5E/lE,GAAS,GACT,KACF,CACF,CACF,CAEI,OAAO0M,EAAM0yD,cAAiB,aAChCp/C,EAAAA,SAAS,IAAM,CACb09C,EAAYpoE,MAAQ,EACtB,CAAC,EACDyoE,GAAe,MAAOrxD,EAAM0yD,aAAqBY,EAASgG,KAAI,CAAE,EAChEhmD,EAAAA,SAAS,IAAM,CACb09C,EAAYpoE,MAAQ,EACtB,CAAC,GAGC,CAAC0K,IAAU+9D,KAAiB,IAC9BkC,EAAQ3qE,MAAQ,GAChB0qE,EAAS/oE,OAAS,EAClBipE,EAAO5qE,MAAQ,GACf,EAAE6qE,EAAY7qE,MAEdulB,EAAUnO,EAAMg5D,MAAM,IAEtBzF,EAAQ3qE,MAAQ,GAChB4qE,EAAO5qE,MAAQ,GAEfulB,EAAUnO,EAAM84D,UAA2BxF,EAASgG,KAAI,CAAE,EAE9D,CAEA,SAASC,GAAiBrgE,GAAmB,CAC3C,GAAI8G,EAAMnX,OAAS,SAAWyrE,GAAa1rE,OAAS,CAAC8qE,EAAO9qE,MAAO,OAEnE,KAAM,CAAE4wE,YAAaC,GAAar/B,aAAcs/B,EAAc,EAAGhG,EAAO9qE,MAClE,CAAE+wE,QAAAA,GAASC,QAAAA,EAAQ,EAAI1gE,GAE7Bo6D,EAAS0D,KAAK,CAAE2C,GAAUF,GAAe,IAAMG,GAAUF,GAAgB,GAAG,CAAC,EAEzEpG,EAAS/oE,QAAUyV,EAAM2yD,MAAMpoE,QACjC+oB,EAAAA,SAAS6lD,EAAc,CAE3B,CAEA,SAASU,GAAc/oE,GAAeoI,GAAc,CAClDA,GAAM0xC,gBAAiB,EAEnB0pB,EAAAA,GAAa1rE,OAASkI,KAAUwiE,EAAS/oE,OAAS,IAEtD+oE,EAASwG,IAAK,CAChB,CAEA,SAASC,IAAgB,CAClB9tB,EAAUrjD,QACb8zD,EAAQ9zD,MAAQ,GAEpB,CAEA,SAASoxE,IAAc,CAAA,IAAAjtB,GACrB,OAAA77B,EAAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,OAAO,EAAG+nB,GAAa1rE,OAAS2nB,EAAGm8B,IAAI,QAAS,QAAQ,CAAC,EAAC,QAC/D6sB,EAAgB,EAAA,CAExBv5D,EAAMsyD,OAAKphD,EAAAA,YAAA,MAAA,CAAA,MACEX,EAAGg8B,GAAG,aAAa,CAAC,EAAA,CAAAr7B,EAAA,YAAA,SAAA,CAAA,IAEvBwiD,EAAM,MACJnjD,EAAGg8B,GAAG,QAAQ,EAAC,MACfimB,GAAW5pE,MAAM,CAAC,EAAC,OAClB4pE,GAAW5pE,MAAM,CAAC,CAAC,EAAA,IAAA,EAE5BoX,EAAMnX,OAAS,SAAOqoB,EAAA,YAAA,MAAA,CAAA,MACTX,EAAGg8B,GAAG,WAAW,CAAC,EAAA,CAAAr7B,EAAA,YAAA,SAAA,CAAA,IAErByiD,EAAS,MACPpjD,EAAGg8B,GAAG,YAAY,EAAC,OAClBimB,GAAW5pE,MAAM,CAAC,EAAC,MACpByrE,GAAezrE,OAG3B,IAAA,CAAA,CAAA,CAAA,CAAA,EAGJoX,EAAMnX,OAAS,SAAOqoB,EAAA,YAAA+oD,kBAAA,CAAA,KACE1pD,EAAGy8B,GAAG,MAAM,EAAC,OAAA,EAAA,EAAA1H,GAAAyH,GACjCumB,EAASh2D,IAAI,CAAC,CAACid,GAAGC,EAAC,EAAG1pB,KAAKogB,EAAAA,YAAA,OAAA,CAAA,IAEnBpgB,GAAK,MACHyf,EAAGg8B,GAAG,SAAS,EAAC,MAChB,CAAEnkB,IAAK,GAAG5N,EAAC,IAAKppB,KAAM,GAAGmpB,EAAC,GAAK,EAAA,QAC7Bs/C,GAActZ,KAAK,KAAMzvD,EAAK,CAAC,EAAA,CAEvCA,GAAQ,CAAC,CAEb,CAAA,CAAC,EAAAi8C,GAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,EAAA,EAEL,EAAA77B,EAAA,YAAAmrB,aAAA,CAAA,KACiB9rB,EAAGy8B,GAAG,MAAM,CAAC,EAAA,CAAAn9B,QAAAA,IAC5B,EAACo8B,EAAUrjD,OAAS4qE,EAAO5qE,QAAKsoB,EAAA,YAAA,MAAA,CAAA,MAEtB,CACLX,EAAGg8B,GAAG,WAAW,EACjBh8B,EAAGm8B,IAAI,YAAaT,EAAUrjD,MAAQ,UAAY,MAAM,CAAC,EAC1D,QACQgiD,EAERqB,EAAAA,CAAAA,EAAUrjD,MACNoX,EAAMoyD,YAAc9vD,EAAO1Z,MAAM2qE,QACjCvzD,EAAMqyD,SAAW/vD,EAAO1Z,MAAMsxE,IAAK,CAE3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAIT,CAEA,SAASC,IAAe,CACtB,OAAAjpD,EAAAA,YAAAkpD,GAAA,CAAA,IAESxG,EAAM,MACJrjD,EAAGm8B,IAAI,SAAU,OAAO,EAAC,OACxBmnB,EAAWjrE,MAAK,UACboX,EAAMuyD,UAAS,QACjBjB,GAAU1oE,MAAK,eACVoX,EAAMsnC,YAAW,eAAA,GAAA,iBAEftnC,EAAMwnC,cAAa,SACzBxnC,EAAM6T,UAAYugD,EAAWxrE,MAAK,aAC9BoX,EAAM0yD,aAAY,UACrBmG,GAAkB,OACrBE,GAAe,YACVR,EAAe,OACpBE,GAAU,UACPE,CAAa,EAAA,CAGtBxG,IAAKA,IACHhhD,EAAAA,WAAWjN,EAAO,MAAO,CAAEqvD,QAAStnB,EAAUrjD,KAAM,EAAG,IAAM,CAAAsoB,EAAA,YAAAG,GAAA,CAAA,SACvCrR,EAAMkE,MAAMiuD,IAAG,KAAQ,CAAEoB,QAAStnB,EAAUrjD,KAAM,CAAC,EAAA,CAAAinB,QAAAA,IAAA,CACpE7P,EAAMmyD,KAAO7vD,EAAO1Z,MAAMyxE,KAAK,EAEnC,CAAA,CAAA,CAAC,CAAA,CAIZ,CAEA,SAASC,IAAiB,CACxB,OAAAppD,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,WAAW,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,MAChBX,EAAGg8B,GAAG,KAAK,CAAC,EAAA,CACrBp7B,EAAAA,WAAWjN,EAAO,MAAO,CAAEqvD,QAAStnB,EAAUrjD,KAAM,EAAG,IAAM,CAAAsoB,EAAA,YAAAG,GAAA,CAAA,SACxCrR,EAAMkE,MAAMiuD,IAAG,KAAQ,CAAEoB,QAAStnB,EAAUrjD,KAAM,CAAC,EAAA,CAAAinB,QAAAA,IAAA,CACpE7P,EAAMmyD,KAAO7vD,EAAO1Z,MAAM2xE,YAAY,CAE1C,CAAA,CAAA,CAAA,CAAC,CAAArpD,EAAAA,EAAAA,YAEG,OAAA,KAAA,CAAA,GAAG,CACTC,EAAAA,aAAWjN,EAAO,QAAS,CAAEyuD,MAAOv0B,EAAAA,MAAMp+B,EAAO,OAAO,CAAE,EAAG,IAAA,CAAA,IAAA+3C,GAAA,MAAM,CAAA7mC,EAAA,YAAAG,GAAA,CAAA,SAC9CrR,EAAMkE,MAAMyuD,MAAK,KAAQ,CAAEA,MAAOv0B,EAAAA,MAAMp+B,EAAO,OAAO,CAAE,CAAC,EAAAslC,GAAAyS,GAC1E/3C,EAAM2yD,MAAMr1D,IAAI,CAACqqD,GAAM72D,KAAKogB,EAAA,YAAA,OAAA,CAAA,IAChBpgB,GAAK,MAASyf,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CACnCob,EAAI,CAAA,CAER,CAAC,EAAA5P,GAAA,CAAAloC,QAAAA,IAAA,CAAAkoC,EAAA,EAEL,CAAA,CAAC,CAAA,CAAA,CAAA,CAGR,CAEA,SAASyiB,IAAe,CACtB,OAAIx6D,EAAMnX,OAAS,QAAgBsxE,GAAc,EAC7Cn6D,EAAMnX,OAAS,QAAgByxE,GAAgB,EAE5C,IACT,CAEA,SAASG,IAAc,QACrB,OAAAvpD,EAAAA,YAAA,MAAA,CAAA,IAES+F,EAAO,GACR8uB,EAAMn9C,MAAK,MACRgb,GAAUhb,MAAK,SACZ,GAAE,KACN,cAAa,kBACFo9C,EAAQp9C,KAAK,EAAA,CAAAsoB,EAAA,YAAA,MAAA,CAAA,MAElBX,EAAGg8B,GAAG,QAAQ,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,MACbX,EAAGg8B,GAAG,OAAO,CAAC,EAAA,CACvBp7B,EAAAA,WAAWjN,EAAO,QAAS,CAAEqvD,QAAStnB,EAAUrjD,KAAM,EAAG,IAAM,CAAAsoB,EAAA,YAAAG,GAAA,CAAA,SAC1CrR,EAAMkE,MAAM8L,MAAK,KAAQ,CAAEujD,QAAStnB,EAAUrjD,KAAM,CAAC,EAAA,CAAAinB,QAAAA,IAAA,CACtE7P,EAAMgQ,OAAS1N,EAAO1Z,MAAM8xE,SAAS,CAEzC,CAAA,CAAA,CAAA,CAAC,GAAAxpD,EAAAA,YAAA,OAAA,CAAA,KAEQ,OAAM,MAAS,YAAY,EAAA,IAAA,EAAAA,EAAA,YAAA,SAAA,CAAA,MAE9B,CACLX,EAAGg8B,GAAG,QAAQ,EACdh8B,EAAGg8B,GAAG,SAAS,EACf+nB,GAAa1rE,OAAS2nB,EAAGm8B,IAAI,SAAU,UAAU,CAAC,EACnD,KACK,SAAQ,QACLusB,EAAa,EAAA,CAErB9nD,EAAU,WAACjN,EAAO,UAAW+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACzBrR,EAAMkE,MAAM2nB,OAAO,EAAA,CAAAhc,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAE/BpJ,EAAM1gB,MAAMijC,QAAO,CAAA,KACjB7rB,EAAMyyD,aAAenpD,EAAM1gB,MAAMijC,QAAQtiB,IAAI,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAGxD,CAAC,CAAA,CAAA,CAAA,EAAA2H,EAAAA,YAAAgC,GAAA,CAAA,OAGQo+C,GAAU1oE,SAASgrE,GAAAA,EAAOhrE,QAAPgrE,YAAAA,GAActC,WAAS,MAAS,EAAK,EAAA,CAElEzhD,QAASmqD,GACTzwD,KAAMwL,GAAiB7Q,EAAO,CAAC,eAAgB,aAAa,EAAG,IAAAgN,EAAA,YAAAG,GAAA,CAAA,SACzCrR,EAAMkE,MAAMojC,WACjC,EAAA,IAAA,CAAA,EAGJkzB,EAAAA,GAAY,CAAE,CAAA,CAGrB,CAEA,SAASpb,IAAgB,CACvB,OAAOjuC,EAAU,WACfjN,EACA,UACA,CAAEw4C,QAASA,EAAQ9zD,MAAO2qE,QAAStnB,EAAUrjD,KAAM,EACnD,IAAM,CAAAsoB,EAAA,YAAAG,GAAA,CAAA,SAEQrR,EAAMkE,MAAMsU,QAAO,KACvB,CAAEkkC,QAASA,EAAQ9zD,MAAO2qE,QAAStnB,EAAUrjD,KAAM,CAAC,EAAA,CAAAinB,QAAAA,IAAAqB,CAAAA,EAAA,YAAA46C,GAAA,CAAA,MAGjD,CAACv7C,EAAGg8B,GAAG,QAAQ,EAAGN,EAAUrjD,OAAS2nB,EAAGm8B,IAAI,SAAU,SAAS,CAAC,EAAC,KAClET,EAAUrjD,MAAQ,UAAY,UAAS,KACvCoX,EAAMgzD,YAAW,MAAA,GAAA,QAEdtW,EAAQ9zD,OAAS,CAACqjD,EAAUrjD,MAAK,KACpCqjD,EAAUrjD,MAAQ0gB,EAAM1gB,MAAM2qE,QAAQhqD,KAAO,KAAI,QAC9CwwD,EAAa,EAAA,CAAAlqD,QAAAA,IAErB7P,CAAAA,EAAMizD,cACJhnB,EAAUrjD,MAAQ0Z,EAAO1Z,MAAM+xE,UAAYr4D,EAAO1Z,MAAM4vB,QAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAI3E,CACF,CAEA,MAAO,IACDxY,EAAM+yD,WACR7hD,EAAAA,YAAA60C,GAAA,CAAA,MAEWx1C,EAAGo4B,GAAG,SAAS,EAAC,QACd+T,EAAQ9zD,MAAK,QACb,SAAQ,IAAA,GAAA,QAAA,GAAA,SAGPoX,EAAMg1B,QAAQ,EAAA,CAGtBxc,QAAS4mC,GACTvvC,QAAS4qD,EAAW,CAAA,EAMrBA,GAAa,CAExB,CACF,CAAC,ECh0BYG,GAAYztD,GAAW,CAClC,MAAO,OACP,OAAQ,OACR,aAAca,GACd,MAAO,MACT,CAAC,oECEK,MAAAhO,EAAQiM,GAAS,OADRsF,EACwB,CACrC,MAAO,GACP,OAAQ,CACN,QAAS,SACT,UAAY3oB,GAA0B,CAAC,SAAU,QAAS,OAAO,EAAE,SAASA,CAAK,CACnF,EACA,aAAc,KAAO,CAAA,GACrB,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsb,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,MAAM,EAEzBrH,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAG,UAAUvQ,EAAM,MAAM,EAAE,EAC9B,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,OAAA,CAE9B,CACD,EACK+8B,EAAW17B,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,OAASlE,EAAM,OAASA,EAAM,MAAM,MAAM,EAC7E66D,EAAWx5D,WAAS,IAAM,CAAC,EAAE6C,EAAM,OAASlE,EAAM,MAAM,MAAM,EAC9D86D,EAAYz5D,WAAS,IAAM,CAAC,CAAC6C,EAAM,QAAU64B,EAAS,OAAS89B,EAAS,KAAK,8BAIjFxoD,EAAA,mBAwBU,UAAA,CAxBA,uBAAOzO,EAAS,KAAA,CAAA,GACbk3D,EAAS,qBAApBzoD,EAAAA,mBAiBM,MAAA,OAjBiB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GACjCgC,EAAAA,WAeOC,qBAfP,IAeO,CAdLtB,cAaWgB,EAAAA,MAAAb,EAAA,EAAA,CAbA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAMM,CANK+8B,EAAQ,qBAAnB1qB,EAAAA,mBAMM,MAAA,OANgB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChCgC,EAAAA,WAIOC,oBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAAiB,CAAd2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,KAAK,EAAA,CAAA,CAAA,2DAIT66D,EAAQ,qBAAnBxoD,EAAAA,mBAIM,MAAA,OAJgB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChCgC,EAAAA,WAEOC,oBAFP,IAEO,CADLtB,cAAmDgB,EAAAA,MAAAb,EAAA,EAAA,CAAxC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,oHAM3CyS,EAAAA,mBAIM,MAAA,CAJA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAc,MAAKo1C,EAAA,eAAEzzC,QAAKlS,CAAA,EAAC,YAAY,CAAA,GACvDuS,EAAAA,WAEOC,sBAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qCCrD5B+6D,GAAgB5tD,GAAW,CACtC,OAAQ,OACR,SAAU,OACV,SAAUJ,EACV,SAAUA,EACV,KAAMA,EACN,MAAO,OACP,aAAc,OACd,SAAUE,GACV,QAAS,OACT,MAAO,OACP,aAAc,OACd,OAAQ,CAAC,OAAQ,MAAM,EACvB,YAAaF,EACb,MAAO,OACP,SAAUmB,EAAoC,EAC9C,OAAQA,EAAoC,EAC5C,OAAQA,EAAoC,EAC5C,SAAUA,EAAoC,CAChD,CAAC,ECFY8sD,GAAiB,0JCVxB,MAAAh7D,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,OAAQ,CACN,QAAS,EACT,OAAQ,EACV,EACA,SAAU,CACR,QAAS,EACT,aAAoB3oB,EAAQ,CAC9B,EACA,SAAU,GACV,SAAU,GACV,KAAM,GACN,MAAO,CACL,QAAS,UACT,aAAoB,CAAC,UAAW,SAAU,MAAM,EAAE,SAASA,CAAK,CAClE,EACA,aAAc,CACZ,QAAS,QACT,UAAoBA,GAAA,CAAC,QAAS,QAAQ,EAAE,SAASA,CAAK,CACxD,EACA,SAAU,CACR,QAAS,GACT,UAAqBA,GAAA,OAAOA,GAAU,SAAWA,EAAQ,IAAM,EACjE,EACA,QAAS,CACP,QAAS,OACT,aAAoB,CAAC,UAAW,SAAU,MAAM,EAAE,SAASA,CAAK,CAClE,EACA,MAAO,IACP,aAAc,EACd,OAAQ,KACR,YAAa,GACb,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKo2C,EAAOC,EAIP1uB,EAAKtF,GAAc,UAAU,EAC7B3B,EAAQU,GAAS,EACjBozC,EAAar7C,GAAc,EAC3B,CAAE,MAAAszB,CAAM,EAAIX,GAAO,EACnB20B,EAAa33C,EAAAA,IAAQ,IAAA,GAAgB,EACrCD,EAAgBC,MAAI,CAAC,EACrBupD,EAAWvpD,MAAI,EAAK,EACpBwpD,EAAcxpD,EAAA,IAAI1R,EAAM,eAAiB,QAAQ,EAEjDm7D,EAAWruD,EAAAA,SAAS,CACxB,MAAO,EACP,OAAQ,CAAA,CACT,EACKyqD,EAAYzqD,EAAAA,SAAS,CACzB,MAAO,EACP,OAAQ,EACR,OAAQ,CAAA,CACT,EACKsuD,EAAWtuD,EAAAA,SAAS,CACxB,MAAO,EACP,OAAQ,CAAA,CACT,EAEK,CAAE,QAAAmK,EAAS,QAAAC,CAAQ,EAAIF,GAAS,EAEhCnX,EAAO6R,EAAAA,IAAiB,EACxB5R,EAAO4R,EAAAA,IAAiB,EAExB7X,EAAawH,EAAAA,SAAS,IACnBrB,EAAM,UAAYqpD,EAAW,MAAM,MAAQrpD,EAAM,QACzD,EACK4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAG1W,EAAW,KAClC,EACD,EACK8W,EAAQtP,EAAAA,SAAS,KACd,CACL,OACErB,EAAM,UAAYA,EAAM,OACpB,GAAGA,EAAM,MAAM,GAAG,OAAOA,EAAM,QAAW,SAAW,KAAO,EAAE,GAC9D,MACR,EACD,EACK83B,EAAYz2B,EAAAA,SAAS,KAClB,CACL,MAAO85D,EAAS,MAAQ,GAAGA,EAAS,KAAK,KAAO,OAChD,OAAQA,EAAS,OAAS,GAAGA,EAAS,MAAM,KAAO,MACrD,EACD,EACKE,EAAah6D,EAAAA,SAAS,KACnB,CACL,MAAOk2D,EAAU,MAAQ,GAAGA,EAAU,KAAK,KAAO,OAClD,OAAQA,EAAU,OAAS,GAAGA,EAAU,MAAM,KAAO,OACrD,UAAWA,EAAU,OACjB,YAAYv3D,EAAM,SAAW,IAAM,GAAG,IACtCq1B,EAAM,OAAS,CAACr1B,EAAM,SAAW,GAAG,CAACu3D,EAAU,MAAM,GAAKA,EAAU,MACtE,oBACE,OACJ,mBAAoB0D,EAAS,MAAQ,MAAQ,GAAGj7D,EAAM,KAAK,IAC7D,EACD,EACKs7D,EAAej6D,EAAAA,SAAS,IACrBxH,EAAW,OAAU,CAACmG,EAAM,MAAQyR,EAAc,OAAS,CACnE,EACK8pD,EAAel6D,EAAAA,SAAS,IAE1BxH,EAAW,OACV,CAACmG,EAAM,MAAQyR,EAAc,OAAS43C,EAAW,MAAM,KAAOrpD,EAAM,QAExE,EACKw7D,EAAan6D,EAAAA,SAAS,IACnBrB,EAAM,SACT,CAACsJ,EAAM,MAAM,QAASA,EAAM,MAAM,SAAS,EAC3C+rB,EAAM,MACJ,CAAC/rB,EAAM,MAAM,WAAYA,EAAM,MAAM,SAAS,EAC9C,CAACA,EAAM,MAAM,UAAWA,EAAM,MAAM,UAAU,CACrD,EAEDsD,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACK8tD,GAAA9tD,EAAQoX,EAAM,YAAY,CAAA,CAE1C,EACA4M,QAAMsK,EAAkBtuB,GAAA,CAClBoX,EAAM,cAENpX,EACe6yE,EAAA,EAEAC,EAAA,EACnB,CACD,EACK9uD,EAAAA,MAAA,IAAM5M,EAAM,SAAU6rB,EAAO,EAC7Bjf,EAAAA,MAAA,IAAM5M,EAAM,SAAU27D,CAAW,EAEjC,MAAAnS,EAAgB/tD,GAAc,IAAM,CACxC,MAAM,KAAK4tD,EAAW,KAAK,EAAE,QAAQ,CAACtxD,EAAMjH,IAAU,CACpDiH,EAAK,MAAQjH,CAAA,CACd,CAAA,CACF,EACK8qE,EAAiBngE,GAAc,IAAM,CAC9B4tD,EAAA,MAAM,QAAiBjzC,GAAA,CAChCA,EAAM,MAAQglD,EAAS,MACvBhlD,EAAM,OAASglD,EAAS,MAAA,CACzB,CAAA,CACF,EACKS,EAAiBpgE,GAAc,IAAM,CACzC87D,EAAU,MAAQ6D,EAAS,MAAQ/R,EAAW,MAAM,KACpDkO,EAAU,OAAS6D,EAAS,OAAS/R,EAAW,MAAM,IAAA,CACvD,EAEDvnD,EAAA,QACEk5D,GACAluD,WAAS,CACP,SAAUsxB,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,aAAAypD,EACA,aAAAC,EACA,aAAAoS,EACA,aAAAv9B,EACD,CAAA,CACH,EAGA,IAAIw9B,EAAe,GACfC,EAAc,GAElBf,EAAS,MAAQ,GAEjBxmD,EAAAA,UAAU,IAAM,CACEwnD,GAAA,EACJvlB,GAAA12C,EAAM,OAASA,EAAM,YAAY,EAC7Bk8D,GAAA,EAEhB,WAAW,IAAM,CACfjB,EAAS,MAAQ,GACFc,EAAA,GAEHJ,EAAA,GACX,CAAC,CAAA,CACL,EAEY7pD,EAAA,CACX,WAAAu3C,EACA,cAAA53C,EACA,YAAAypD,EACA,QAAAjkD,EACA,KAAApX,EACA,KAAAC,EACA,QAAA+rB,EAAA,CACD,EAED,SAAS49B,EAAa1xD,EAAiB,CAC1BsxD,EAAA,MAAM,IAAItxD,CAAI,EACXyxD,EAAA,EACCoS,EAAA,EACAC,EAAA,CAAA,CAGjB,SAASnS,EAAa3xD,EAAiB,CAC1BsxD,EAAA,MAAM,OAAOtxD,CAAI,EACdyxD,EAAA,EACCqS,EAAA,CAAA,CAGjB,SAASC,EAAa7rD,EAAe,CACnC,OAAQwB,EAAc,MAAQzR,EAAM,cAAgBqpD,EAAW,MAAM,OAASp5C,CAAA,CAGhF,SAASgsD,IAAkB,CACrB,GAAA,CAAChlD,EAAQ,MAAO,OAEpB,IAAIklD,EAAU,EACVC,EAAU,EAEVp8D,EAAM,QAAU,YACdA,EAAM,UACRm8D,EAAUt8D,EAAK,MAAQA,EAAK,MAAM,aAAe,EACjDu8D,EAAUt8D,EAAK,MAAQA,EAAK,MAAM,aAAe,IAEjDq8D,EAAUt8D,EAAK,MAAQA,EAAK,MAAM,YAAc,EAChDu8D,EAAUt8D,EAAK,MAAQA,EAAK,MAAM,YAAc,IAIhDE,EAAM,UACRm7D,EAAS,MAAQ,EACjBA,EAAS,OAASlkD,EAAQ,MAAM,aAAeklD,EAAUC,EAEzDhB,EAAS,MAAQ,EACRA,EAAA,OAASD,EAAS,OAASn7D,EAAM,WAE1Cm7D,EAAS,MAAQlkD,EAAQ,MAAM,YAAcklD,EAAUC,EACvDjB,EAAS,OAAS,EAETC,EAAA,MAAQD,EAAS,MAAQn7D,EAAM,SACxCo7D,EAAS,OAAS,EACpB,CAGF,SAASvvC,IAAU,CACDowC,GAAA,EACDL,EAAA,EACAC,EAAA,EAEXtE,EAAU,OAAS,EACrB8E,GAAW,CAAC,EAEZC,GAAW,CAAC,EAGd,WAAW,IAAM,CACfrB,EAAS,MAAQ,GACFc,EAAA,IACd,CAAC,CAAA,CAGN,SAAS3xB,GAAkB,CACzB,MAAMlM,GAAUzsB,EAAc,MAAQzR,EAAM,cAAgBqpD,EAAW,MAAM,KAE7ErqB,EAAK,gBAAiBd,CAAM,EAClB/vB,EAAAnO,EAAM,SAAUk+B,CAAM,CAAA,CAGzB,SAAAm+B,GAAWjmE,EAAS,EAAG,CAC1B,GAAAyD,EAAW,OAASkiE,EAAc,OAEtC,MAAMQ,EAAav8D,EAAM,SAAWo7D,EAAS,OAASA,EAAS,MACzDjkC,GAAW,MAAM,KAAKkyB,EAAW,KAAK,EACtCmT,EAAYrlC,GAAS,OACrBslC,IAAehrD,EAAc,MAAQrb,EAASomE,GAAaA,EAC3DE,GAAajrD,EAAc,MAE7B,GAAAgrD,IAAeD,EAAYx8D,EAAM,SAAU,CACzC,GAAA,CAACA,EAAM,KAAM,OAEb,GAAAu3D,EAAU,OAAS,EACjB,GAAAnhE,EAASqb,EAAc,MACf8lD,EAAA,OAAS,CAACkF,GAAcF,MAC7B,CACKhF,EAAA,OAASgF,GAAcC,EAAYC,IAE7C,QAASryE,GAAIqyE,GAAaryE,GAAIoyE,EAAW,EAAEpyE,GACzC+sC,GAAS/sC,EAAC,EAAE,OAAS,CAACoyE,EAAYD,CACpC,KAEG,CACL,QAASnyE,GAAI,EAAGA,GAAIoyE,EAAW,EAAEpyE,GAC/B+sC,GAAS/sC,EAAC,EAAE,OACVA,GAAIqyE,GACA,GACCpnC,EAAM,OAAS,CAACr1B,EAAM,SAAWw8D,EAAY,CAACA,GAAaD,EAG1DhF,EAAA,OAASgF,GAAcC,EAAYC,GAAA,CAG/ChrD,EAAc,MAAQgrD,EAAA,MAEtBhrD,EAAc,MAAQgrD,GACZlF,EAAA,OAAS,CAAC9lD,EAAc,MAAQ8qD,EAG9BP,EAAAvqD,EAAc,OAAS+qD,EAAYx8D,EAAM,SACxC+7D,EAAA,GAEDtqD,EAAA,QAAUirD,IAActyB,EAAgB,CAAA,CAG/C,SAAAkyB,GAAWlmE,EAAS,EAAG,CAC1B,GAAAyD,EAAW,OAASkiE,EAAc,OAEtC,MAAMQ,EAAav8D,EAAM,SAAWo7D,EAAS,OAASA,EAAS,MACzDjkC,GAAW,MAAM,KAAKkyB,EAAW,KAAK,EACtCmT,EAAYrlC,GAAS,OACrBslC,GAAchrD,EAAc,MAAQrb,EACpCsmE,GAAajrD,EAAc,MAEjC,GAAIgrD,GAAcpT,EAAW,MAAM,KAAOrpD,EAAM,SAAU,CACpD,GAAA,CAACA,EAAM,KAAM,OAEb,GAAAu3D,EAAU,OAAS,EACXA,EAAA,OAASgF,GAAcC,EAAYC,QACxC,CACC,MAAAE,GAAcF,GAAcz8D,EAAM,SAAWw8D,EAE1C,QAAApyE,GAAI,EAAG4H,GAAMmlC,GAAS,OAAQ/sC,GAAI4H,GAAK,EAAE5H,GAChD+sC,GAAS/sC,EAAC,EAAE,OACVA,GAAIuyE,IACCtnC,EAAM,OAAS,CAACr1B,EAAM,SAAW,CAACw8D,EAAYA,GAAaD,EAC5D,EAGEhF,EAAA,OAAS,CAACkF,GAAcF,CAAA,CAGpC9qD,EAAc,MAAQgrD,GAAcD,CAAA,MAEpC/qD,EAAc,MAAQgrD,GACZlF,EAAA,OAAS,CAAC9lD,EAAc,MAAQ8qD,EAG9BP,EAAAvqD,EAAc,OAAS+qD,EAAYx8D,EAAM,SACxC+7D,EAAA,GAEDtqD,EAAA,QAAUirD,IAActyB,EAAgB,CAAA,CAGxD,SAASsM,GAAYxY,EAAgB,CACnC,GAAIrkC,EAAW,OAASkiE,GAAgB79B,IAAWzsB,EAAc,MAAO,OAElE,MAAA+qD,EAAYnT,EAAW,MAAM,KAInC,GAFAnrB,EAAUA,EAASs+B,GAAct+B,EAAS,EAAIs+B,EAAY,GAEtDx8D,EAAM,KAAM,CACV,IAAA4uC,GACAguB,EAEA1+B,EAASzsB,EAAc,OACzBm9B,GAAU1Q,EAASzsB,EAAc,MAC1BmrD,EAAAJ,EAAYt+B,EAASzsB,EAAc,QAEhCm9B,GAAA4tB,EAAY/qD,EAAc,MAAQysB,EAC5C0+B,EAAOnrD,EAAc,MAAQysB,GAG3B0Q,GAAUguB,EACZN,GAAW1tB,EAAO,EACTA,GAAUguB,EACnBP,GAAWO,CAAI,EAEXrF,EAAU,OAAS,EACrB8E,GAAWztB,EAAO,EAElB0tB,GAAW1tB,EAAO,CAEtB,MAEI1Q,EAASzsB,EAAc,MACd4qD,GAAA5qD,EAAc,MAAQysB,CAAM,EAE5Bo+B,GAAAp+B,EAASzsB,EAAc,KAAK,CAE3C,CAGF,SAASyqD,IAAkB,CACpBF,GAGQ3S,EAAA,MAAM,QAAiBjzC,GAAA,CAChCA,EAAM,OAAS,CAAA,CAChB,EAEa4lD,EAAA,GACdf,EAAS,MAAQ,GAEjB,sBAAsB,IAAM,CAChB1D,EAAA,OAAS,CAAC9lD,EAAc,OAASzR,EAAM,SAAWo7D,EAAS,OAASA,EAAS,OAEvF,sBAAsB,IAAM,CAC1BH,EAAS,MAAQ,GACFc,EAAA,EAAA,CAChB,CAAA,CACF,GAhBcA,EAAA,EAiBjB,CAGF,SAASc,IAAkB,CACzBR,GAAW,CAAC,EACFluD,EAAAnO,EAAM,QAASyR,EAAc,MAAQzR,EAAM,cAAgBqpD,EAAW,MAAM,IAAI,CAAA,CAG5F,SAASyT,IAAkB,CACzBR,GAAW,CAAC,EACFnuD,EAAAnO,EAAM,QAASyR,EAAc,MAAQzR,EAAM,cAAgBqpD,EAAW,MAAM,IAAI,CAAA,CAG5F,SAAS9qB,GAAatuB,EAAe,CACzB9B,EAAAnO,EAAM,SAAUiQ,CAAK,CAAA,CAG3B,KAAA,CAAE,MAAAtU,CAAM,EAAI66B,GAAc,EAEhC,SAASmlC,GAAc,CAGjB,GAFJ,cAAchgE,EAAM,IAAI,EAEpB,CAACqE,EAAM,SAAU,OAErB,IAAIy0C,EAAU,IAEV,OAAOz0C,EAAM,UAAa,WAC5By0C,EAAUz0C,EAAM,UAGZrE,EAAA,KAAO,OAAO,YAAY,IAAM,CAChC,CAACqE,EAAM,MAAQu7D,EAAa,MAC9B7kB,GAAY,CAAC,EAEF4lB,GAAA,GAEZ7nB,CAAO,CAAA,CAGZ,SAASgnB,GAAmB,CACtBz7D,EAAM,WACR,aAAarE,EAAM,KAAK,EAElBA,EAAA,MAAQ,WAAW,IAAM,CAC7B,cAAcA,EAAM,IAAI,CAAA,EACvByhD,EAAW,KAAK,GAGjBp9C,EAAM,eAAiB,SAAWA,EAAM,QAAU,WACpDk7D,EAAY,MAAQ,GACtB,CAGF,SAASQ,GAAmB,CACtB17D,EAAM,WACR,aAAarE,EAAM,KAAK,EAElBA,EAAA,MAAQ,WAAW,IAAM,CACjBggE,EAAA,CAAA,EACXve,EAAW,KAAK,GAGjBp9C,EAAM,eAAiB,UACzBk7D,EAAY,MAAQ,GACtB,CAGF,SAAS6B,EAAkBjsE,EAAe,CACpC,OAAAkP,EAAM,KAAa,GAEhB,EACLlP,GAASkP,EAAM,aAAe,GAAKlP,EAAQu4D,EAAW,MAAM,KAAOrpD,EAAM,aAAe,EAAA,6BAM1FqS,EAAA,mBA6FM,MAAA,SA5FA,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EACjB,KAAK,OACJ,uBAAO+M,EAAK,KAAA,CAAA,GAEbO,cA6DiBgB,EAAA,MAAAgiB,EAAA,EAAA,CA7DA,SAAQrI,IAAO,mBAC9B,IA2DM,CA3DNpZ,EAAAA,mBA2DM,MAAA,CA1DH,MAAKkzC,EAAAA,eAAA,oCAAwF,cAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,SAAQ,SAAA,uBAQpGkS,EAAA,MAAAlS,CAAA,EAAM,QAAK,sBADnBqS,qBAsBM,MAAA,eApBA,OAAJ,IAAIxS,EACH,MAAKyS,EAAAA,eAAA,CAAgBJ,EAAA,MAAA3B,CAAA,EAAG,IAAa,QAAA2B,QAAAlS,CAAA,EAAM,KAAK,EAAekS,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,EAA+B2qD,EAAW,MAAGhpD,QAAE3B,CAAA,EAAC,IAAG,QAAA,MAAA,EAAA,OAMzHkC,EAAAA,mBAYM,MAAA,CAXH,MAAKH,EAAAA,eAAA,CAAmB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAAmC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,UAAA,CAAA,EAA0B+qD,EAAY,KAAA,GAI5G,QAAOuB,EAAA,GAERtqD,aAIOC,EAJiB,OAAA,YAAA,CAAA,SAAU8oD,EAAA,OAAlC,IAIO,CAHLpqD,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,UAAY,eAAkBs7D,EAAY,KAAA,CAAA,qBACzE,IAA+E,CAA/EpqD,EAAA,YAA+EgB,QAAApO,EAAA,EAA/E4O,aAA+E8oD,EAAvD,MAAA,CAAA,EAAA,CAAM,MAAK,EAAIA,EAAU,MAAA,CAAA,EAAI,OAAK,GAAA,8FAKlE/oD,EAAAA,mBAIM,MAAA,CAJA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,uBAAOunB,EAAS,KAAA,CAAA,GAC3CrlB,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EAAY,uBAAO8qD,EAAU,KAAA,EAAG,gCAAoBa,GAAe,CAAA,MAAA,CAAA,CAAA,GACnF3pD,EAAAA,WAAqEC,sBAArE,IAAqE,CAA9DtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,4DAAoB,IAAE,cAI1DkS,EAAA,MAAAlS,CAAA,EAAM,QAAK,sBADnBqS,qBAsBM,MAAA,eApBA,OAAJ,IAAIvS,EACH,MAAKwS,EAAAA,eAAA,CAAgBJ,EAAA,MAAA3B,CAAA,EAAG,IAAa,QAAA2B,QAAAlS,CAAA,EAAM,KAAK,EAAekS,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,EAA+B2qD,EAAW,MAAGhpD,QAAE3B,CAAA,EAAC,IAAG,QAAA,MAAA,EAAA,OAMzHkC,EAAAA,mBAYM,MAAA,CAXH,MAAKH,EAAAA,eAAA,CAAmB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAAmC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,UAAA,CAAA,EAA0BgrD,EAAY,KAAA,GAI5G,QAAOuB,EAAA,GAERvqD,aAIOC,EAJiB,OAAA,YAAA,CAAA,SAAU+oD,EAAA,OAAlC,IAIO,CAHLrqD,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,UAAY,eAAkBu7D,EAAY,KAAA,CAAA,qBACzE,IAA+E,CAA/ErqD,EAAA,YAA+EgB,QAAApO,EAAA,EAA/E4O,aAA+E8oD,EAAvD,MAAA,CAAA,EAAA,CAAM,MAAK,EAAIA,EAAU,MAAA,CAAA,EAAI,OAAK,GAAA,0GAO3DtpD,EAAA,MAAAlS,CAAA,EAAM,UAAO,sBAAxBqS,qBAwBM,MAAA,OAxBgC,uBAAOH,EAAA,MAAE3B,CAAA,EAAC,IAAgB,WAAA2B,EAAA,MAAAlS,CAAA,EAAM,OAAO,CAAA,CAAA,IAC3EqgC,EAAAA,UAAA,EAAA,EAAAhuB,EAsBM,mBAAAqsB,WArBY,KAAAC,EAAA,WAAA0qB,EAAA,MAAW,KAApBv4D,mBADTuhB,EAAA,mBAsBM,MAAA,CApBH,IAAKvhB,GACL,MAAKwhB,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,GAA+B,CAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,UAAA,QAAA,CAAA,EAAoCzf,GAAK,KAAU2gB,QAAgBS,QAAAlS,CAAA,EAAM,cAAgBqpD,EAAU,MAAC,MAAiBn3C,EAAA,MAAE3B,CAAA,EAAC,IAA6B,UAAA,UAAA,CAAA,EAAAwsD,EAAkBjsE,GAAQohB,EAAA,MAAKlS,CAAA,EAAC,aAAY,CAAA,CAAA,GAM/P,WAAO02C,GAAY5lD,GAAQohB,EAAAA,MAAAlS,CAAA,EAAM,aAAY,CAAA,CAAA,GAE9CuS,aAUOC,EAAA,OAAA,UAAA,CARJ,OAAQ1hB,GAAK,KAAU2gB,EAAa,MAAGS,QAAKlS,CAAA,EAAC,cAAgBqpD,EAAU,MAAC,IAAA,EAF3E,IAUO,CANLn4C,cAKWgB,EAAAA,MAAAb,EAAA,EAAA,CAJR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QACtB,KAAI,CAAA,OAAYlP,GAAK,KAAU2gB,EAAa,MAAGS,EAAAA,MAAKlS,CAAA,EAAC,cAAgBqpD,EAAU,MAAC,IAAI,CAAA,qBAErF,IAA6C,CAA7C52C,EAAAA,mBAA6C,OAAA,CAAtC,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,eAAA,CAAA,iLCnkBzB,MAAAysD,EAAgBn7D,EAAAA,OAAOm5D,GAAgB,IAAI,EAE3CzqD,EAAKtF,GAAc,UAAU,EAC7BmL,EAAmBtJ,EAAAA,SAAS,CAChC,MAAO,GACP,MAAO,EACP,OAAQ,EACR,OAAQ,CAAA,CACT,EAEKoxB,EAAS78B,EAAAA,SAAS,KACf27D,GAAA,YAAAA,EAAe,aAAa5mD,EAAM,SAAU,EACpD,EACKxS,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,IAAI,OAAQ,QAAQ,CAAC,EAAG2tB,EAAO,KACrC,EACD,EACKvtB,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,KAAM,CAAE,MAAA8c,EAAO,OAAAC,EAAQ,OAAAkD,CAAW,EAAAlL,EAE3B,MAAA,CACL,MAAO+H,EAAQ,GAAGA,CAAK,KAAO,OAC9B,OAAQC,EAAS,GAAGA,CAAM,KAAO,OACjC,UAAWkD,EAAS,YAAY07C,GAAA,MAAAA,EAAe,SAAW,IAAM,GAAG,IAAI17C,CAAM,MAAQ,MACvF,CAAA,CACD,EAEG07C,IACFA,EAAc,aAAa5mD,CAAK,EAEhCxB,EAAAA,gBAAgB,IAAM,CACpBooD,EAAc,aAAa5mD,CAAK,CAAA,CACjC,GAGH,SAAS4wC,GAAc,CACNgW,GAAA,MAAAA,EAAA,aAAa5mD,EAAM,MAAK,6BAKvC/D,EAAA,mBAOM,MAAA,CANH,uBAAOzO,EAAS,KAAA,EACjB,KAAK,WACJ,uBAAO+M,EAAK,KAAA,EACZ,QAAOq2C,CAAA,GAERz0C,EAAA,WAA8BC,EAAA,OAAA,UAAA,CAAvB,OAAQ0rB,EAAM,KAAA,CAAA,UCjDZ++B,GAAgB9vD,GAAW,CACtC,KAAMI,GACN,MAAOI,GACP,QAASZ,EACT,MAAO,OACP,MAAO,CAAC,OAAQ,MAAM,EACtB,WAAYgB,GACZ,SAAUhB,EACV,OAAQA,EACR,QAASA,EACT,QAASA,EACT,SAAU,CAAC,OAAQ,MAAM,EACzB,QAASA,EACT,YAAaA,EACb,KAAM,OACN,MAAO,OACP,WAAYA,EACZ,SAAUmB,EAAsC,EAChD,QAASA,EAAuC,CAClD,CAAC,EAcYgvD,GAAqB/vD,GAAW,CAC3C,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAqB,EAC7B,MAAO,MACP,SAAUrB,EACV,SAAUA,EACV,OAAQA,EACR,QAAS,MACT,QAASA,EACT,YAAaA,EACb,QAASC,GACT,MAAO,OACP,WAAYD,EACZ,SAAUmB,EAAgD,CAC5D,CAAC,EChCYo5C,GAAc,0OCZrB,KAAA,CACJ,MAAAvhB,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,cAAAC,EACA,cAAAC,GACEhD,GAAuB,IAAM,QAAA,OAAAriC,GAAA4oC,EAAM,QAAN,YAAA5oC,GAAa,QAAO,EAG/Cf,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,QAAS,CACP,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,MAAO,KACP,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,WAAY,KACZ,SAAU,IAAMtyB,EAAS,MACzB,OAAQ,GACR,QAAS,GACT,QAAS,GACT,SAAU,EACV,QAAS,IAAMoyB,EAAQ,MACvB,YAAa,GACb,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,MAAO,KACP,WAAY,EAAA,CACb,EAEKjH,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAIRg2C,EAAa3lD,EAAAA,OAAOylD,GAAa,IAAI,EAErC/2C,EAAKtF,GAAc,UAAU,EAC7BkyD,EAAiBzrD,EAAA,IAAI1R,EAAM,SAAW,EAAK,EAC3Co9D,EAAiB1rD,EAAAA,IAAI1R,EAAM,OAAO,EAElC2pC,EAAQj4B,EAAAA,IAAsB,EAE9B2rD,EAAevwD,EAAAA,SAAS,CAC5B,QAASqwD,EACT,QAASC,CAAA,CACV,EAEKE,EAAej8D,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,OAAQxnD,EAAM,IAAI,EAC5Du9D,EAAgBl8D,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,QAASxnD,EAAM,KAAK,EAC/DnG,EAAawH,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,WAAYxnD,EAAM,QAAQ,EAClEsxD,EAAYjwD,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,UAAWxnD,EAAM,OAAO,EAC/Dw9D,EAAgBn8D,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,cAAexnD,EAAM,WAAW,EAC3Ey9D,EAAap8D,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,aAAcxnD,EAAM,UAAU,EACtE2L,EAAWtK,EAAAA,SAAS,IAAMiwD,EAAU,OAASkM,EAAc,KAAK,EAChE55D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG4sD,EAAe,MACnC,CAAC5sD,EAAG,GAAG,UAAU,CAAC,EAAG1W,EAAW,MAChC,CAAC0W,EAAG,GAAG,UAAU,CAAC,EAAG5E,EAAS,MAC9B,CAAC4E,EAAG,GAAG,SAAS,CAAC,EAAG+gD,EAAU,MAC9B,CAAC/gD,EAAG,GAAG+sD,EAAa,KAAK,CAAC,EAAGA,EAAa,QAAU,UACpD,CAAC/sD,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,SAAWo9D,EAAe,MACpD,CAAC7sD,EAAG,GAAGgtD,EAAc,KAAK,CAAC,EAAGA,EAAc,QAAU,SAAA,CAE1D,CACD,EACK3S,EAAWvpD,EAAAA,SAAS,IAAM,CAC9B,GAAI,CAACrB,EAAM,MAAO,OAAOwnD,GAAA,YAAAA,EAAY,SAE/B,MAAAtqB,GAAY7vC,GAAiB2S,EAAM,KAAK,EAEvC,MAAA,CACL,KAAMk9B,GAAU,SAAS,EACzB,SAAUrtC,GAAYqtC,GAAW,EAAG,EAAE,SAAS,CACjD,CAAA,CACD,EACKvsB,EAAQtP,EAAAA,SAAiC,IAAM,CACnD,GAAI,CAACupD,EAAS,MAAO,MAAO,CAAC,EAE7B,KAAM,CAAE,KAAAh3D,GAAM,SAAA8pE,CAAS,EAAI9S,EAAS,MAEpC,OAAOr6C,EAAG,IAAI,CACZ,sBAAuB3c,GACvB,UAAW6pE,EAAW,MAAQ7pE,GAAO,OACrC,gBAAiBA,GACjB,kBAAmBA,GACnB,0BAA2BA,GAC3B,gBAAiB8pE,CAAA,CAClB,CAAA,CACF,EACKC,EAAWt8D,EAAAA,SAAS,IACjBrY,GAAUgX,EAAM,KAAK,GAAKA,EAAM,QAAU,EAClD,EACK8nC,EAAezmC,EAAAA,SAAS,IACrBrB,EAAM,OAASA,EAAM,KAC7B,EAeD,GAbA4M,EAAA,MACE,IAAM5M,EAAM,QACHpX,IAAA,CACPg1E,EAAkBh1E,EAAK,CAAA,CAE3B,EACAgkB,EAAA,MACE,IAAM5M,EAAM,QACHpX,IAAA,CACPw0E,EAAe,MAAQx0E,EAAA,CAE3B,EAEI4+D,EAAY,CACd,IAAIqW,GAAY,GAEVjxD,EAAAA,MAAAk7B,EAAc,CAACl/C,EAAO08D,KAAc,CACpC/7D,GAAWi+D,EAAW,YAAY,GACzBA,EAAA,aAAalC,GAAW18D,CAAK,CAC1C,CACD,EACDgkB,EAAA,MACE,IAAM5M,EAAM,QACHpX,GAAA,CACHA,GACEi1E,KACSrW,EAAA,aAAa1f,EAAa,MAAO6B,CAAK,EACrCk0B,GAAA,IAGdrW,EAAW,gBAAgB6V,CAAY,GAEvC7V,EAAW,gBAAgB6V,CAAY,CAE3C,EACA,CAAE,UAAW,EAAK,CACpB,EACAzwD,EAAA,MACE,IAAM46C,EAAW,cACR5+D,GAAA,CACFoX,EAAM,SACT49D,EAAkBh1E,EAAM,SAASk/C,EAAa,KAAK,CAAC,CAExD,EACA,CAAE,UAAW,EAAK,CACpB,EAEArzB,EAAAA,UAAU,IAAM,CACTzU,EAAM,UACTwnD,EAAW,aAAa1f,EAAa,MAAOq1B,EAAe,MAAOxzB,CAAK,EAC3Dk0B,GAAA,GACd,CACD,EAEDjpD,EAAAA,gBAAgB,IAAM,CACf5U,EAAM,QAGTwnD,EAAW,gBAAgB6V,CAAY,EAF5B7V,EAAA,aAAa1f,EAAa,MAAO6B,CAAK,CAGnD,CACD,CAAA,CAGU73B,EAAA,CACX,MAAAi0B,EACA,QAAAC,EACA,eAAAm3B,EACA,MAAAxzB,EACA,MAAQ9+C,IAA2B,OAAA,OAAAkW,EAAA4oC,EAAM,QAAN,YAAA5oC,EAAa,MAAMlW,KACtD,KAAM,IAAA,QAAM,OAAAkW,GAAA4oC,EAAM,QAAN,YAAA5oC,GAAa,OAAK,CAC/B,EAED,SAAS+8D,GAAiB,CACxB,MAAMC,GAAUZ,EAAe,MAE/Bn+B,EAAK,iBAAkB++B,EAAO,EAC9B33B,EAAc23B,EAAO,EACX5vD,EAAAnO,EAAM,SAAU+9D,EAAO,CAAA,CAGnC,SAASH,EAAkBG,GAAkB,CACvC/9D,EAAM,SAAWzW,GAAWi+D,GAAA,YAAAA,EAAY,mBAAmB,EAC7DA,EAAY,oBAAoB,EACvB2V,EAAe,QAAUY,KAClCZ,EAAe,MAAQY,GACRD,EAAA,EACjB,CAGF,SAASzzB,EAAa0zB,GAAkB,CAClClkE,EAAW,OAAS8R,EAAS,QAIjCiyD,EAAkBG,EAAO,EAErB,CAAC/9D,EAAM,SAAWwnD,GACpBj+D,GAAWi+D,EAAW,cAAc,GAAKA,EAAW,eAAe1f,EAAa,MAAOi2B,EAAO,EAG3FvW,GACWthB,EAAA,EAChB,CAGF,SAAS8gB,GAAY9tD,GAAmB,CAC5BiV,EAAAnO,EAAM,QAAS9G,EAAK,CAAA,8BAK9BmZ,EAAA,mBAwBQ,QAAA,CAvBL,GAAIH,QAAK6zB,CAAA,EACT,uBAAOniC,EAAS,KAAA,EAChB,uBAAO+M,EAAK,KAAA,EACZ,gBAAe9W,EAAU,MACzB,kBAAiBqY,QAAO8zB,CAAA,EACxB,QAAOghB,EAAA,GAERv0C,EAAAA,mBAWE,QAAA,SAVI,QAAJ,IAAIk3B,EACJ,KAAK,WACJ,MAAKr3B,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,QAAS4sD,EAAc,MACvB,SAAUtjE,EAAU,OAAI8R,EAAQ,MAChC,SAAUuG,EAAAA,MAAKlS,CAAA,EAAC,SAChB,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,qCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GACd,SAAM6vC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,IAAE3Q,EAAY,CAAE8yB,EAAc,KAAA,GACpC,oCAAD,IAAW,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,cAEb1qD,EAAAA,mBAAiF,OAAA,CAA1E,MAAKH,EAAA,eAAA,CAAGJ,EAAAA,SAAG,aAAco/C,EAAS,OAAIp/C,QAAE3B,CAAA,EAAC,IAAG,SAAA,QAAA,CAAA,CAAA,CAAA,UACvCotD,EAAQ,OAAIz5D,EAAM,uBAA9BmO,qBAEO,OAAA,OAFiC,wBAAQH,EAAA,MAAE3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,EAAAA,MAAAlS,CAAA,EAAM,UAAU,CAAA,CAAA,GAC9EuS,EAAAA,WAA8BC,uBAA9B,IAA8B,CAArBG,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,KAAK,EAAA,CAAA,ymBCxP1B,MAAMA,EAAQuR,EA+CRytB,EAAOC,EAIP1uB,EAAKtF,GAAc,UAAU,EAC7B3B,EAAQU,GAAS,EACjB,CAAE,MAAAqrB,CAAM,EAAIX,GAAO,EACnBspC,EAAiBtsD,MAAI,EAAE,EAEvBxU,EAAOwU,EAAAA,IAAwB,EAE/B,CAAE,OAAQuF,CAAQ,EAAIgC,GAAY,CACtC,QAAS,GACT,UAAW,CAAC/f,EAAOygB,IAAa,CAC9B,GAAIA,EAAS,OAAQ,CACnBqlB,EAAK,OAAO,EACZ,MAAA,CAGFr0C,GACE,CACE,CACE,IAAMgvB,EAAS,IAAMA,EAAS,KAC9B,IAAM,CACA,GAAAqkD,EAAe,MAAQ,EAAG,CAC5BA,EAAe,MAAQh+D,EAAM,QAAQ,UAAUykD,CAAU,EAErDuZ,EAAe,MAAQ,IACzBA,EAAe,MAAQ,GAGzB,MAAA,CAGFA,EAAe,MAAQrwE,GACrBswE,EAAiBD,EAAe,OAASrkD,EAAS,GAAK,GAAK,GAAIA,EAAS,GAAK,GAAK,CAAC,EACpF,EACA3Z,EAAM,QAAQ,OAAS,CACzB,EACAk+D,EAAmBF,EAAe,MAAOrkD,EAAS,GAAK,MAAQ,QAAQ,CAAA,CAE3E,EACA,CACE,IAAMA,EAAS,MAAQA,EAAS,MAChC,IAAM,CACJ,GAAIA,EAAS,MAAO,CAClB,MAAMupC,EAASljD,EAAM,QAAQg+D,EAAe,KAAK,EAE7C9a,GAAUib,EAAYjb,CAAM,GAC9BlkB,EAAK,OAAQkkB,CAAM,CACrB,MAEAlkB,EAAK,MAAM,CACb,CAEJ,EACA,CACE,IAAMrlB,EAAS,OAASA,EAAS,MACjC,IAAM,CACJzgB,EAAM,gBAAgB,EAEtB,MAAMgqD,EAASljD,EAAM,QAAQg+D,EAAe,KAAK,EAE7C9a,IACEljD,EAAM,SACRo+D,EAAkBlb,CAAM,EAEX3kB,EAAA2kB,EAAQ8a,EAAe,KAAK,EAE7C,CACF,CAEJ,EACA,CACE,eAAgB,IAAM9kE,EAAM,eAAe,EAC3C,cAAeygB,EAAS,QAAA,CAE5B,CAAA,CACF,CACD,EAED,IAAI0kD,EAAa,EACbC,EAEE1xD,EAAA,MAAA,CAAC,IAAM5M,EAAM,MAAO,IAAMA,EAAM,OAAO,EAAG,IAAM,OACpD,sBAAsBu+D,CAAiB,EAEnCv+D,EAAM,QACRe,EAAA7D,EAAK,QAAL,MAAA6D,EAAY,UACZi9D,EAAe,MAAQh+D,EAAM,QAAQ,UAAUykD,CAAU,GAEzDuZ,EAAe,MAAQ,EACzB,CACD,EAEDvpD,EAAAA,UAAU,IAAM,CACd,sBAAsB8pD,CAAiB,CAAA,CACxC,EAED3pD,EAAAA,gBAAgB8mD,CAAgB,EAEnB5pD,EAAA,CAAE,eAAAksD,EAAgB,EAE/B,SAASG,EAAYjb,EAA6B,OAChD,MAAO,CAAC,EAAEA,EAAO,WAAYniD,EAAAmiD,EAAO,WAAP,MAAAniD,EAAiB,OAAA,CAGhD,SAAS0jD,EAAWvB,EAA6B,CAE5C,OAAAib,EAAYjb,CAAM,GAAKA,EAAO,KAAOljD,EAAM,UAAaA,EAAM,OAAO,SAASkjD,EAAO,SAAS,CAAA,CAInG,SAASsb,EAAmBtb,EAA6B,CACvD,OACEA,EAAO,UACN,CAACljD,EAAM,QACNA,EAAM,UACNA,EAAM,SACNm+D,EAAYjb,CAAM,GAClB,CAACA,EAAO,cAAA,CAIL,SAAA3kB,EAAa2kB,EAA6BpyD,EAAe,CAC5DoyD,EAAO,WAEX8a,EAAe,MAAQltE,EAEnBkP,EAAM,UAAYA,EAAM,WAC1Bm+D,EAAYjb,CAAM,EAAIlkB,EAAK,SAAUkkB,CAAM,EAAIkb,EAAkBlb,CAAM,EAEvElkB,EAAK,SAAUkkB,CAAM,EACvB,CAGF,SAASkb,EAAkBlb,EAA6B,CACtD,CAACsb,EAAmBtb,CAAM,GAAKlkB,EAAK,QAASkkB,CAAM,CAAA,CAGrD,SAASuY,EAAiBvY,EAA6B,CACrD,aAAaob,CAAU,EAEvBA,EAAa,WAAW,IAAM,CAC5B,CAACpb,EAAO,UAAYlkB,EAAK,QAASkkB,CAAM,GACvC,GAAG,CAAA,CAGR,SAASwY,GAAmB,CAC1B,aAAa4C,CAAU,CAAA,CAGzB,SAASC,GAAoB,OACrB,MAAA1lE,GAAKkI,EAAA7D,EAAK,QAAL,YAAA6D,EAAY,QAEvB,GAAIlI,EAAI,CACA,MAAA8X,EAAQ,iBAAiB9X,CAAE,EAC3Bm3B,EAAa,SAASrf,EAAM,UAAU,EACtCuf,EAAgB,SAASvf,EAAM,aAAa,EAErC0tD,EAAAxlE,EAAG,aAAem3B,EAAaE,CAAA,CAC9C,CAGO,SAAAuuC,EAAkB3tE,EAAe5G,EAAc,OACtD,MAAMW,EAAUmV,EAAM,QAGf,IAFA9V,EAAAA,EAAO,KAAK,IAAIA,CAAI,GAEpB6W,EAAAlW,EAAQiG,CAAK,IAAb,MAAAiQ,EAAgB,WACZjQ,GAAA5G,EAEL,EAAA4G,EAAQ,GAAKA,GAASjG,EAAQ,UAAlC,CAGK,OAAAiG,CAAA,CAGA,SAAAmtE,EAAiBntE,EAAe+lD,EAAe,EAAG,OACzD,MAAMhsD,EAAUmV,EAAM,QAElB,OAAAe,EAAAlW,EAAQiG,CAAK,IAAb,MAAAiQ,EAAgB,WACVjQ,EAAA2tE,EAAkB3tE,EAAO+lD,CAAI,GAEjCA,EAAO,EAAI/lD,GAASjG,EAAQ,OAASiG,EAAQ,KACvCA,EAAA2tE,EAAkB3tE,EAAO,CAAC+lD,CAAI,GAGlCA,EAAO,EAAI/lD,EAAQ,EAAIA,GAASjG,EAAQ,UAAgBiG,EAAA,MAIzDA,CAAA,CAGA,SAAAotE,EAAmBptE,EAAegtB,EAA6B,CAChE,MAAAolC,EAASljD,EAAM,QAAQlP,CAAK,EAC5B4tE,EAAe,GAErB,GAAI,GAACxb,GAAU,CAAChmD,EAAK,OAErB,GAAI4gB,IAAc,SAAU,CACpB,MAAA3sB,GAAUL,EAAQ,GAAK4tE,EAEzBxhE,EAAK,MAAM,aAAemhE,EAAaltE,GACpC+L,EAAA,MAAM,SAAS/L,EAASktE,CAAU,CACzC,KACK,CACL,MAAMltE,EAASL,EAAQ4tE,EAEnBxhE,EAAK,MAAM,aAAe/L,GACvB+L,EAAA,MAAM,SAAS/L,CAAM,CAC5B,CACF,6BAKAkhB,EAAA,mBAsFM,MAAA,SArFA,UAAJ,IAAI4E,EACH,MAAK3E,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,SAAS,KACR,kBAAiBgB,EAAS,UAC1B,aAAYmqD,CAAA,GAEbxqD,cA8EcgB,EAAAA,MAAAi0C,EAAA,EAAA,SA7ER,OAAJ,IAAIjpD,EACJ,QAAA,GACC,MAAOqU,EAAO,QACd,YAAW,GACZ,OAAO,OACP,SAAO,KACN,cAAW,QAA+BW,EAAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,EAAuBgB,EAAQ,SAAGW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,UAAA,EAAA,KAA0CgB,EAAU,WAAGW,QAAE3B,CAAA,EAAC,IAAG,UAAA,aAAA,EAAA,yCAAmGgB,EAAQ,UAS/P,SAAQgtD,CAAA,GAEE,QACT1Y,EAAAA,QAAA,CAyDS,CA1DW,KAAA9tD,EAAM,MAAAjH,KAAK,CAC/BogB,cAyDSgB,EAAAA,MAAAk0C,EAAA,EAAA,CAxDN,MAAK9zC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,GAAsB,eAAA,CAAA,EAAAxY,EAAK,KAAA,GAGpD,MAAOA,EAAK,MACZ,MAAOA,EAAK,MACZ,SAAUA,EAAK,SACf,SAAU0sD,EAAW1sD,CAAI,EACzB,QAASjH,IAAUktE,EAAc,MACjC,SAAQhjB,GAAAzc,EAAaxmC,EAAMjH,CAAK,EAChC,aAAUkqD,GAAEygB,EAAiB1jE,CAAI,CAAA,qBAElC,IA4CO,CA5CPwa,aA4COC,EAAA,OAAA,UAAA,CA3CJ,OAAQza,EACR,MAAAjH,EACA,SAAU2zD,EAAW1sD,CAAI,EACzB,SAAWymE,EAAmBzmE,CAAI,EAClC,SAAWomE,EAAYpmE,CAAI,CAAA,EAL9B,IA4CO,CApCGwZ,EAAA,UAAYA,EAAU,0BAD9BY,EAAA,YAUYD,QAAAysD,EAAA,EAAA,OARV,QAAA,GACC,MAAKrsD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACZ,QAASxY,EAAK,QACd,QAASomE,EAAYpmE,CAAI,EACzB,QAASA,EAAK,QACd,SAAUymE,EAAmBzmE,CAAI,EAClC,KAAK,QACJ,QAAK81D,EAAAA,cAAA7S,GAAeojB,EAAkBrmE,CAAI,EAAA,CAAA,UAAA,MAAA,CAAA,qGAE7C0a,EAAAA,mBAYO,OAAA,CAZA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACjBgC,aAUOC,EAAA,OAAA,QAAA,CARJ,OAAQza,EACR,MAAAjH,EACA,SAAU2zD,EAAW1sD,CAAI,EACzB,SAAWymE,EAAmBzmE,CAAI,EAClC,SAAWomE,EAAYpmE,CAAI,EAC3B,aAAqB,IAAAwmC,EAAaxmC,EAAMjH,CAAK,CAAA,EAPhD,IAUO,CADF6hB,EAAAA,gBAAAC,EAAA,gBAAA7a,EAAK,KAAK,EAAA,CAAA,QAGjB0a,EAAAA,mBAYM,MAAA,CAZA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACJxY,EAAK,qBAAjB,EAAAoa,cAAwDD,EAAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAvzC,aAAA,CAAA,IAAA,GAAtBR,EAAAA,MAAK5I,CAAA,EAAC,OAAO,CAAA,EAAA,KAAA,EAAA,GAC9BvR,EAAK,qBAAtBoa,EAAAA,YAA2DD,QAAApO,EAAA,EAAAmiD,iBAAAvzC,EAAAA,WAAA,CAAA,IAAA,CAAA,EAAtBR,EAAK,MAAA5I,CAAA,EAAC,OAAO,CAAA,EAAA,KAAA,EAAA,GAC7B60D,EAAYpmE,CAAI,iBAArCsa,EAAAA,mBAGWqsB,EAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAFGxsB,QAAKmjB,CAAA,iBAAjBljB,EAAAA,YAAmDD,EAAAA,MAAApO,EAAA,EAAAmiD,EAAAA,eAAAvzC,EAAAA,WAAA,CAAA,IAAA,CAAA,EAAxBR,QAAK5I,CAAA,EAAC,SAAS,CAAA,EAAA,KAAA,EAAA,kBAC1C6I,EAAA,YAA8CD,QAAApO,EAAA,EAAAmiD,iBAAAvzC,aAAA,CAAA,IAAA,CAAA,EAAzBR,EAAAA,MAAK5I,CAAA,EAAC,UAAU,CAAA,EAAA,KAAA,EAAA,UAGzBiI,EAAQ,UAAA,CAAKA,EAAU,YAAIA,EAAS,WAAIA,EAAM,OAAC,SAASxZ,EAAK,SAAS,GADpFsoC,EAAA,UAAA,EAAAluB,EAAAA,YAIQD,EAAA,MAJRpO,EAAA,EAAA4O,EAAAA,WAIQ,CAFE,IAAA,CAAA,EAAAR,EAAA,MAAA5I,CAAA,EAAM,MAAK,CAClB,KAAMiI,EAAS,WAAIW,WAAM,MAAM,IAAA,uMC9UnC0sD,GAAgBzxD,GAAW,CACtC,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAmB,EAC3B,MAAO,MACP,QAASrB,EACT,QAAS,MACT,YAAa,OACb,OAAQyB,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OACb,WAAYzB,EACZ,SAAUA,EACV,SAAUA,EACV,UAAWA,EACX,UAAW,OACX,SAAUC,GACV,aAAcD,EACd,SAAUA,EACV,eAAgB,OAChB,aAAcA,EACd,UAAW,OACX,UAAW,OACX,aAAcA,EACd,YAAa,OACb,WAAYA,EACZ,UAAWA,EACX,YAAa,SACb,UAAWA,EACX,QAAS,OACT,UAAW,OACX,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,YAAaA,EACb,YAAaA,EACb,MAAO,OACP,SAAUmB,EAAsC,EAChD,SAAUA,EAAmD,EAC7D,SAAUA,EAAmD,EAC7D,SAAUA,EAAuB,EACjC,eAAgBA,EAAU,EAC1B,eAAgBA,EAAU,EAC1B,QAASA,EAAU,CACrB,CAAC,+NCnCK,MAAA2wD,EAAS,OAAO,QAAQ,EACxBC,EAAa,OAAO,YAAY,EAEhCle,EAAgD,CACpD,MAAO,QACP,MAAO,QACP,SAAU,WACV,SAAU,WACV,SAAU,UACZ,EAIM,CACJ,MAAA7a,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,WAAA3C,EACA,cAAA4C,EACA,cAAAC,GACEhD,GAA6B,IAAM,OAAA,OAAAriC,EAAAwd,EAAU,QAAV,YAAAxd,EAAiB,QAAO,EAEzD4O,EAAS4B,EACThB,EAAKtF,GAAc,UAAU,EAC7BjL,EAAQiM,GAAS,WAAY0D,EAAQ,CACzC,KAAMjC,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,QAAS,CACP,QAAS,GACT,OAAQ,EACV,EACA,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,YAAa,KACb,OAAQ13B,GAAe,EACvB,YAAa,GACb,OAAQA,GAAe,EACvB,YAAa,GACb,WAAY,GACZ,SAAU,GACV,SAAU,IAAMoF,EAAS,MACzB,UAAW,GACX,UAAW,CACT,QAAS,eACT,UAAWjrB,GAASisC,GAAmB,SAASjsC,CAAK,CACvD,EACA,SAAU,GACV,aAAc,GACd,SAAU,GACV,eAAgB,IAAM2nB,EAAG,GAAG,MAAM,EAClC,aAAc,GACd,UAAW,KAAO,CAAA,GAClB,UAAW,CACT,QAAS,IACT,UAAoB3nB,GAAAA,EAAM,SAAW,CACvC,EACA,aAAc,GACd,YAAa,EACb,WAAY,GACZ,UAAW,GACX,YAAa,CACX,QAAS,KACT,OAAQ,EACV,EACA,UAAW,GACX,QAAS,KACT,UAAW,KACX,QAAS,IAAMq9C,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,YAAa,GACb,YAAa,KACb,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKuwB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERlI,EAAQU,GAAS,EACjB1H,EAASI,GAAU,SAAU07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAEnDq9C,EAAiB3rC,EAAAA,IAAI1R,EAAM,OAAO,EAClCkhD,EAAgBxvC,EAAc,IAAA,EAAE,EAChCuvC,EAAgBvvC,EAAc,IAAA,EAAE,EAChCqtD,EAAertD,EAAc,IAAA,EAAE,EAC/BstD,EAAettD,EAAc,IAAA,EAAE,EAC/ButD,EAAevtD,MAAI,EAAK,EACxB0K,EAAYgiB,EAAAA,MAAMp+B,EAAO,WAAW,EACpCg1B,EAAWoJ,EAAAA,MAAMp+B,EAAO,UAAU,EAElCuiD,EAAe7wC,MAA0B,IAAI,EAC7CwtD,EAAaxtD,MAA2B,IAAK,EAC7CytD,EAAc99D,EAAAA,SAAS,IAAM,OAAOrB,EAAM,aAAgB,UAAU,EACpEo/D,EAAc/9D,EAAAA,SAAS,IAAMrB,EAAM,WAAa,CAACA,EAAM,UAAU,EACjEq/D,EAAiBh+D,EAAA,SAAS,IAC9B+9D,EAAY,MAAQL,EAAa,MAAQ7d,EAAc,KACzD,EACMoe,EAAiBj+D,EAAA,SAAS,IAC9B+9D,EAAY,MAAQJ,EAAa,MAAQ/d,EAAc,KACzD,EAEA,IAAIse,GAAoC,KACpCC,GAAgD,KAChDld,EAAmD,KACnDmd,GAAgB,GAChBC,GAAe,GACfC,GAEE,MAAAnd,GAAgB9wC,MAAI,CAAC,EAE3BhG,EAAAA,YAAY,IAAM,CAEhB1L,EAAM,UAAU,MAChBA,EAAM,UAAU,MAChBA,EAAM,UAAU,SAChBA,EAAM,UAAU,SACVA,EAAA,UACMm/D,EAAA,MAGKQ,GAAAvhE,GAAS4B,EAAM,QAA+B,CAC7D,SAAU6+D,EACV,YAAaC,EACb,WAAY9+D,EAAM,UAAU,UAAY4gD,EAAiB,SACzD,YAAa,EAAA,CACd,EAEa4B,GAAA,OAAA,CACf,EAED51C,EAAAA,MAAM41C,GAAeod,GAAkB,CAAE,UAAW,GAAM,EAE1D,SAASA,IAAmB,CAC1B,MAAM1W,EAAYlpD,EAAM,UAClB6/D,GAAUV,EAAY,MAE5BI,GAAaO,GAAmBH,EAAc,EAC9CH,OAAkB,IAClBld,MAAqB,IAEZ,QAAAl4D,GAAI,EAAG4H,GAAMutE,GAAW,OAAQn1E,GAAI4H,GAAK,EAAE5H,GAAG,CAC/C,MAAA84D,EAASqc,GAAWn1E,EAAC,EAE3B21E,GAAe7c,EAAQgG,CAAS,EACpBsW,GAAA,IAAItc,EAAO,GAAIA,CAAM,EAClBZ,EAAA,IAAIY,EAAO,UAAWA,CAAM,EAEvC2c,KACK3c,EAAA,eAAiB8c,GAAoB9c,CAAM,EACpD,CAGSgc,EAAA,MAAQvhE,GAAc4hE,EAAU,EAC3C/b,GAAkBjB,EAAa,KAAK,CAAA,CAGhC,MAAA0d,GAAYvuD,EAAc,IAAA,EAAE,EAC5BwuD,GAAc7+D,EAAAA,SAAS,IACpB,CACL69D,EAAW,MACX,GAAGe,GAAU,MAAM,IAAU/hE,GAAA,QAAA,OAAA6C,GAAAy+D,GAAY,IAAIthE,CAAE,IAAlB,YAAA6C,GAAqB,SAAQ,EAAE,OAAO,OAAO,CAC5E,CACD,EAEKkW,EAAU7C,GAAgB4pC,EAAkB,EAC5C9oB,EAASxjB,EAAAA,IAAmB,EAC5B,CAAE,UAAA6M,EAAW,WAAA6W,EAAY,aAAAK,CAAA,EAAiBX,GAAU,CACxD,UAAA1Y,EACA,SAAA4Y,EACA,QAAA/d,EACA,OAAQ5V,EAAAA,SAAS,IAAA,OAAM,OAAAN,EAAAm0B,EAAO,QAAP,YAAAn0B,EAAc,QAAO,EAC5C,OAAQ,EAAA,CACT,EACK,CAAE,QAAAmW,CAAA,EAAYF,GAASuH,CAAS,EAEhC4hD,EAAczuD,EAA0C,IAAA,EAAE,EAC1D8vC,GAAe9vC,MAAI,CAAC,EACpB+vC,EAAc/vC,MAAI,EAAK,EACvB0uD,GAAgB1uD,MAAI,CAAC,EAErB9N,GAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,YAAY,CAAC,EAAG,GACvB,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,YAAY,CAAC,EAAGvQ,EAAM,UAAYA,EAAM,aAAe,CAChE,EACD,EACK2L,GAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D6jD,GAAgBxiD,EAAAA,SAAS,IAAM,CAC7B,MAAAyiD,EAAUvzC,EAAG,GAAG,UAAU,EAEzB,MAAA,CACL,CAACuzC,CAAO,EAAG,GACX,CAAC,GAAGA,CAAO,WAAW,EAAG,CAAC9jD,EAAM,UAAYq9C,EAAe,MAC3D,CAAC,GAAGyG,CAAO,YAAY,EAAG9jD,EAAM,SAChC,CAAC,GAAG8jD,CAAO,YAAY,EAAGn4C,GAAS,MACnC,CAAC,GAAGm4C,CAAO,WAAW,EAAG9jD,EAAM,QAC/B,CAAC,GAAG8jD,CAAO,KAAK9jD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,UAC9C,CAAC,GAAG8jD,CAAO,KAAK9jD,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,UAChD,CAAC,GAAG8jD,CAAO,cAAc,EAAGhb,GAAU,MACtC,CAAC,GAAGgb,CAAO,cAAc,EAAG,CAAC9jD,EAAM,SACnC,CAAC,GAAG8jD,CAAO,eAAe,EAAG9jD,EAAM,WACrC,CAAA,CACD,EACK8oC,GAAYznC,EAAAA,SAAS,IAClB,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,MAAM,QAAUA,EAAM,OACvD,EACKqpC,GAAWhoC,EAAAA,SAAS,IAAM,CAAC,CAACg+D,EAAe,MAAM,CAAC,CAAC,EACnDgB,GAAah/D,EAAAA,SAAS,IAAMrB,EAAM,cAAgB,CAACm/D,EAAY,KAAK,EACpE71B,GAAYjoC,EAAAA,SAAS,IAClB,CAACrB,EAAM,UAAY,CAAC2L,GAAS,OAAS3L,EAAM,WAAakX,EAAQ,OAASmyB,GAAS,KAC3F,EAEDz8B,EAAA,MACE,IAAM5M,EAAM,QACHpX,GAAA,CACPy0D,EAAe,MAAQz0D,CAAA,CAE3B,EACMgkB,QAAAywC,EAAgB,MAAMz0D,GAAS,QAC/BA,GACF64D,EAAY,MAAQ,GACN2e,GAAA,QAAQr/D,GAAAkW,EAAQ,QAAR,YAAAlW,GAAe,cAAe,EAEpD,MAAM00B,EAAa,EACnBniB,EAAAA,SAAS,IAAM,YACbqC,IAAA5U,GAAAhE,GAAQojE,EAAY,KAAK,IAAzB,YAAAp/D,GAA4B,MAA5B,MAAA4U,GAAiC,OAAM,CACxC,IAEDspD,EAAa,MAAQ,GAEjB1gD,EAAU,OAAS,CAACkhD,IACtBlhD,EAAU,MAAM,MAAM,GAIVkhD,GAAA,EAAA,CACjB,EAED,IAAIa,GAAiB,GAErB1zD,EAAA,MAAM21C,EAAc,IAAM,CACP+d,GAAA,EAAA,CAClB,EACD1zD,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,EACHA,IAAU25D,EAAa,OAAS+d,MAClC/d,EAAa,MAAQ35D,EACrB46D,GAAkB56D,CAAK,EACvB0qB,EAAAA,SAAS,IAAM,CACIgtD,GAAA,EAAA,CAClB,EAEL,EACA,CAAE,UAAW,EAAK,CACpB,EACA1zD,EAAA,MACE,IAAM5M,EAAM,WACHugE,GAAA,CACPtf,EAAc,MAAQC,EAAc,MACjC,gBAAa,OAAAngD,GAAAuhD,EAAe,IAAI15D,EAAK,IAAxB,YAAAmY,GAA4Bw/D,EAAQ,QAAU,aAAsB,EACjF,OAAO,OAAO,CAAA,CAIrB,EACA3zD,QAAMuyD,EAAsBv2E,GAAA,CAC1B,GAAIA,EACS,UAAAs6D,MAAUsc,GAAY,SACxBtc,GAAA,eAAiB8c,GAAoB9c,EAAM,CAEtD,CACD,EACDt2C,QAAMwyD,EAAsBx2E,GAAA,CAQ1B,GAPIA,IACFm2E,EAAa,MAAM,OAAS,EAC5BC,EAAa,MAAM,OAAS,EAEVwB,GAAA,GAGhBrB,EAAY,MAAO,CACrB,MAAMsB,GAAyC,CAAC,EAErC,UAAAvd,MAAUsc,GAAY,SAC3Btc,GAAO,SACTud,GAAgB,KAAKvd,EAAM,EAGzBA,GAAO,UAAY,CAACA,GAAO,SAAS,QAAU,CAACA,GAAO,SACxDA,GAAO,QAAU,IAIZ,QAAA94D,GAAI,EAAG4H,GAAMyuE,GAAgB,OAAQr2E,GAAI4H,GAAK,EAAE5H,GAAG,CACpD,MAAA84D,EAASud,GAAgBr2E,EAAC,EAEhCs2E,GAAoBxd,CAAM,EAC1Byd,GAAkBzd,CAAM,CAAA,CAC1B,CAGiB0d,GAAA,CAAA,CACpB,EACDh0D,EAAA,MACE,IAAMszD,GAAY,MAAM,OACxB,IAAM,CACSzqC,EAAA,EACbniB,EAAAA,SAAS,IAAM,WACbqC,IAAA5U,EAAAhE,GAAQojE,EAAY,KAAK,IAAzB,YAAAp/D,EAA4B,MAA5B,MAAA4U,GAAiC,QAClB+pD,GAAA,EAAA,CAChB,CAAA,CAEL,EACA9yD,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACHA,GACF66D,GAAW,EAAK,CAClB,CAEJ,EACA72C,QAAMjB,GAAmB/iB,GAAA,CACnBA,GACF66D,GAAW,EAAK,CAClB,CACD,EAEDod,EAAAA,eAAe,IAAM,CACnBV,EAAY,MAAM,OAAS,CAAA,CAC5B,EAEYruD,EAAA,CACX,MAAAi0B,EACA,QAAAC,EACA,eAAAqX,EACA,cAAA6D,EACA,cAAAD,EACA,QAAA/pC,EACA,UAAA+oD,GACA,aAAAze,GACA,YAAAC,EACA,YAAAye,GACA,SAAA72B,GACA,eAAAg2B,EACA,eAAAC,EACA,UAAAh2B,GACA,QAAAryB,EACA,UAAAsH,EACA,OAAA2W,EACA,YAAAirC,EACA,gBAAAW,GACA,mBAAAC,GACA,kBAAAC,GACA,cAAA/iB,GACA,YAAAtT,GACA,gBAAAs2B,GACA,MAAQp2E,GAA2B,QAAA,OAAAkW,GAAAwd,EAAU,QAAV,YAAAxd,GAAiB,MAAMlW,IAC1D,KAAM,IAAA,OAAM,OAAAkW,EAAAwd,EAAU,QAAV,YAAAxd,EAAiB,OAAK,CACnC,EAED,SAAS++D,GAAmBoB,EAA4C,CAChE,KAAA,CACJ,MAAOxe,GACP,MAAOC,GACP,SAAUC,GACV,SAAUue,GACR,CAAE,GAAGvgB,EAAkB,GAAG5gD,EAAM,SAAU,EAEvC,OAAAkhE,EAAW,IAAiB/d,IAAA,CAC3B,KAAA,CACJ,CAAC0b,CAAM,EAAG3gE,GACV,CAAC4gE,CAAU,EAAGnnE,GACd,CAAC+qD,EAAQ,EAAG95D,GACZ,CAAC+5D,EAAQ,EAAG1yC,GACZ,CAAC2yC,EAAW,EAAG/uC,GACf,CAACstD,CAAW,EAAGC,EAAA,EACbje,GAEJ,OAAOr2C,WAA8B,CACnC,GAAA5O,GACA,OAAAvG,GACA,MAAA/O,GACA,SAAAirB,GACA,SAAAutD,GACA,MAAOnxD,IAAS,OAAOrnB,EAAK,EAC5B,UAAW,GACX,UAAW,GACX,SAAU,CAAC,EACX,QAAS,GACT,QAAS,GACT,QAAS,GACT,OAAQ,GACR,MAAO,GACP,eAAgB,GAChB,KAAMu6D,EAAA,CACP,CAAA,CACF,CAAA,CAGM,SAAA4c,GAAe7c,EAA6BgG,GAAmB,CACtE,IAAItgE,GAAQs6D,EAAO,MACfjzC,GAAQizC,EAAO,MACfvrD,EAAS6nE,GAAY,IAAItc,EAAO,MAAM,EAE1C,KAAOvrD,GACL/O,GAAQ,GAAG+O,EAAO,KAAK,GAAGuxD,EAAS,GAAGtgE,EAAK,GAC3CqnB,GAAQ,GAAGtY,EAAO,KAAK,GAAGuxD,EAAS,GAAGj5C,EAAK,GAClCtY,EAAA6nE,GAAY,IAAI7nE,EAAO,MAAM,EAGxCurD,EAAO,UAAYt6D,GACnBs6D,EAAO,UAAYjzC,EAAA,CAGrB,SAAS+vD,GAAoB9c,EAA6B,WACxD,GAAIA,EAAO,UAAY,GAACniD,GAAAmiD,EAAO,WAAP,MAAAniD,GAAiB,QACvC,OAAOmiD,EAAO,OAGhB,MAAMtkD,GAA8B,CAAC,GAAGskD,EAAO,QAAQ,EAEvD,KAAOtkD,GAAK,QAAQ,CACZ,MAAAI,EAAQJ,GAAK,MAAM,EAEzB,GAAI,CAAAI,EAAM,eAEV,IAAIA,EAAM,UAAY,GAAC2W,GAAA3W,EAAM,WAAN,MAAA2W,GAAgB,UACrC3W,EAAM,eAAiBA,EAAM,OAEzB,CAACA,EAAM,QAAe,MAAA,GAGvBJ,GAAA,KAAK,GAAGI,EAAM,QAAQ,EAAA,CAGtB,MAAA,EAAA,CAGT,SAASwhE,IAAoB,CACrB,MAAAa,EAAalC,EAAY,MAC3Bje,EAAc,MAAM,OAAO6d,EAAa,KAAK,EAC7C7d,EAAc,MACZogB,GAAS,IAAI,IAAID,CAAU,EAC3BziE,GAAO,CAAC,GAAGyiE,CAAU,EAE3B,KAAOziE,GAAK,QAAQ,CACZ,MAAAhW,EAAQgW,GAAK,MAAM,EAEnBskD,GAASZ,EAAe,IAAI15D,CAAK,EAEvC,GAAIs6D,GAAQ,CACV,MAAMvrD,GAAS6nE,GAAY,IAAItc,GAAO,MAAM,EAExCvrD,IAAA,MAAAA,GAAQ,UACV2pE,GAAO,OAAO14E,CAAK,EACZ04E,GAAA,IAAI3pE,GAAO,SAAS,EACtBiH,GAAA,KAAKjH,GAAO,SAAS,EAC5B,CACF,CAGF,MAAM4pE,GAAavhE,EAAM,WAEZ++D,EAAA,MAAQ,MAAM,KAAKuC,EAAM,EAAE,OAAgB14E,GAAA05D,EAAe,IAAI15D,CAAK,CAAC,EACjFo2E,EAAa,MAAQD,EAAa,MAC/B,IAAan2E,GAAA,CACN,MAAAs6D,GAASZ,EAAe,IAAI15D,CAAK,EAEhC,OAAA24E,GAAare,GAAO,MAAQA,GAAO,SAAA,CAC3C,EACA,OAAO,OAAO,CAAA,CAGnB,SAASse,GAAuC54E,EAAkC,CACzE,MAAA,CAAC,CAACA,EAAM,QAAU,CAAC,MAAM,QAAQA,EAAM,CAAC,CAAC,CAAA,CAGlD,SAAS64E,GAA0C74E,EAAoC,CAC9E,MAAA,CAAC,CAACA,EAAM,QAAU,MAAM,QAAQA,EAAM,CAAC,CAAC,CAAA,CAGjD,SAAS46D,GAAkB56D,EAA6B,CACtD,MAAM84E,GAAgB,IAAM,CACtBtC,EAAY,QACVD,EAAY,QACdJ,EAAa,MAAQ,MAAM,KAAKS,GAAY,OAAQ,CAAA,EACjD,OAAOtc,GAAUA,EAAO,OAAO,EAC/B,IAAIA,GAAUA,EAAO,SAAS,GAGjBsd,GAAA,EAEtB,EAEA,UAAWtd,KAAUqc,GACnBrc,EAAO,QAAU,GACjBA,EAAO,QAAU,GAGf,GAAA,EAACt6D,GAAA,MAAAA,EAAO,QAAQ,CAClBs4D,EAAc,MAAQ,CAAC,EACvBD,EAAc,MAAQ,CAAC,EACTygB,GAAA,EACd,MAAA,CAGF,MAAMH,GAAavhE,EAAM,WAEzB,GAAIA,EAAM,SAAU,CAClB,MAAM0kD,EAAkB8c,GAAY54E,CAAK,EAAI,CAACA,CAAK,EAAIA,EACjD+7D,GAAW,IAAI,IAAYD,EAAgB,IAASz3D,IAAAA,GAAE,KAAK+S,EAAM,SAAS,CAAC,CAAC,EAC5E4kD,GAA2B,CAAC,EAC5BC,GAA2B,CAAC,EAC5B8c,GAAyC,CAAC,EAe5C,GAbKhd,GAAA,QAAQ/7D,IAAS,CAClB,MAAAs6D,GAASZ,EAAe,IAAI15D,EAAK,EAEnCs6D,KACFA,GAAO,QAAU,GACjBA,GAAO,QAAU,GAEjB0B,GAAe,KAAKh8D,EAAK,EACzBi8D,GAAe,KAAK0c,GAAare,GAAO,MAAQA,GAAO,SAAS,EAChEye,GAAgB,KAAKze,EAAM,EAC7B,CACD,EAEG,CAACljD,EAAM,WAAY,CACrB,MAAMygE,GAAkBkB,GAAgB,OACtC,MAAM,KAAKnC,GAAY,QAAQ,EAAE,OAAiBtc,IAAAA,GAAO,UAAYA,GAAO,OAAO,CACrF,EAES,QAAA94D,GAAI,EAAG4H,GAAMyuE,GAAgB,OAAQr2E,GAAI4H,GAAK,EAAE5H,GAAG,CACpD,MAAA84D,GAASud,GAAgBr2E,EAAC,EAEhCs2E,GAAoBxd,EAAM,EAC1Byd,GAAkBzd,EAAM,CAAA,CAC1B,CAGFhC,EAAc,MAAQ0D,GACtB3D,EAAc,MAAQ4D,EAAA,KACjB,CAEL,MAAM2I,IADkBiU,GAAe74E,CAAK,EAAIA,EAAM,CAAC,EAAIA,GACvB,KAAKoX,EAAM,SAAS,EAClDkjD,GAASZ,EAAe,IAAIkL,EAAW,EAEzCtK,IACYhC,EAAA,MAAQ,CAACsM,EAAW,EAClCvM,EAAc,MAAQ,CAACsgB,GAAare,GAAO,MAAQA,GAAO,SAAS,EAE/DljD,EAAM,aACRkjD,GAAO,QAAU,GACjBA,GAAO,QAAU,MAGnBhC,EAAc,MAAQ,CAAC,EACvBD,EAAc,MAAQ,CAAC,EACzB,CAKE,GAFUygB,GAAA,EAEVzB,GAAU,MAAM,OAAQ,OAEtB,MAAA2B,GAAa1gB,EAAc,MAAM,CAAC,EAExC,GAAI0gB,GAAY,CACR,MAAA1e,EAASZ,EAAe,IAAIsf,EAAU,EACtCC,GAAM,CAAC3e,EAAO,EAAE,EAEtB,IAAIvrD,GAAS6nE,GAAY,IAAItc,EAAO,MAAM,EAE1C,KAAOvrD,IACDkqE,GAAA,KAAKlqE,GAAO,EAAE,EACTA,GAAA6nE,GAAY,IAAI7nE,GAAO,MAAM,EAGxCsoE,GAAU,MAAQ4B,GAAI,QAAU,EAAA,MAAM,EAAG,EAAE,CAAA,CAC7C,CAGF,SAASpe,GAAW/G,EAAkB,CAChCW,EAAe,QAAUX,IAE7BW,EAAe,MAAQX,EAEvB1d,EAAK,iBAAkB0d,CAAO,EACpBvuC,EAAAnO,EAAM,SAAU08C,CAAO,EAAA,CAGpB,eAAAokB,GAAgB5d,EAA6BhkD,GAAe,WACzE,GAAI,GAACgkD,EAAO,UAAY,GAACniD,GAAAmiD,EAAO,WAAP,MAAAniD,GAAiB,SAEtC,IAAAo+D,EAAY,OAAS,GAACxpD,GAAAutC,EAAO,WAAP,MAAAvtC,GAAiB,SAAU,CAACutC,EAAO,OAAQ,CACnEA,EAAO,QAAU,GAEb,IAAA5vD,EAEA,GAAA,CACOA,EAAA0M,EAAM,YAAYkjD,EAAO,IAAI,EACtC5vD,EAAShK,GAAUgK,CAAM,EAAI,MAAMA,EAASA,OAClC,CACV4vD,EAAO,MAAQ,GACfA,EAAO,QAAU,GACjB,MAAA,CAGF,MAAMge,GAAa5tE,EAEnB,GAAI,CAAC,MAAM,QAAQ4tE,EAAU,GAAK,CAACA,GAAW,OAC5Che,EAAO,SAAW,OACb,CACC,MAAAr4D,GAAUi1E,GAAmBoB,EAAU,EACvC/iE,GAAW+kD,EAAO,GAClBgG,GAAYlpD,EAAM,UAEjBkjD,EAAA,SAAS,KAAK,GAAGr4D,EAAO,EAE/B,IAAI8T,GAAU,KAAK,IAAI,GAAG,MAAM,KAAK6gE,GAAY,KAAM,CAAA,EAAE,IAAI,MAAM,CAAC,EAAI,EAEhE30E,GAAA,QAAQq4D,IAAU,CACxBA,GAAO,GAAKvkD,KACZukD,GAAO,OAAS/kD,GAEhB4hE,GAAe7c,GAAQgG,EAAS,EAEpBsW,GAAA,IAAItc,GAAO,GAAIA,EAAM,EAClBZ,EAAA,IAAIY,GAAO,UAAWA,EAAM,CAAA,CAC5C,EAEUqc,GAAA,KAAK,GAAG10E,EAAO,CAAA,CAG5Bq4D,EAAO,OAAS,GAChBA,EAAO,QAAU,GAEA4e,GAAqB5e,CAAM,EACnC,QAAQA,IAAU,CACzBA,GAAO,eAAiB8c,GAAoB9c,EAAM,CAAA,CACnD,CAAA,CAGChkD,GAAQ+gE,GAAU,MAAM,SAC1BA,GAAU,MAAQA,GAAU,MAAM,MAAM,EAAG/gE,EAAK,GAGxC+gE,GAAA,MAAM,KAAK/c,EAAO,EAAE,EAC9B,sBAAsB,IAAM,WAC1BvtC,IAAA5U,EAAAhE,GAAQojE,EAAY,KAAK,IAAzB,YAAAp/D,EAA4B,MAA5B,MAAA4U,GAAiC,OAAM,CACxC,EAAA,CAGM,SAAAorD,GAAmB7d,EAA6BhkD,GAAe,QACjEgkD,IAEDA,EAAO,WAAYniD,GAAAmiD,EAAO,WAAP,MAAAniD,GAAiB,OACtC+/D,GAAgB5d,EAAQhkD,EAAK,EAE7B6iE,GAAmB7e,EAAO,SAAS,EACrC,CAGF,SAAS4e,GAAqB5e,EAA6B,CACnD,MAAAr4D,GAAU,CAACq4D,CAAM,EACvB,IAAIvrD,GAAS6nE,GAAY,IAAItc,EAAO,MAAM,EAE1C,KAAOvrD,IACL9M,GAAQ,KAAK8M,EAAM,EACVA,GAAA6nE,GAAY,IAAI7nE,GAAO,MAAM,EAGjC,OAAA9M,EAAA,CAGT,SAAS61E,GAAoBsB,EAAqC,CAChE,IAAI9e,GAAS8e,EAEb,KAAO,CAAC/4E,GAAOi6D,GAAO,MAAM,GAAG,CAC7B,MAAMvrD,GAAS6nE,GAAY,IAAItc,GAAO,MAAM,EAI5C,GAFI,CAACvrD,IAEDurD,GAAO,UAAYvrD,GAAO,SAAWurD,GAAO,UAAYvrD,GAAO,QACjE,MAGEurD,GAAO,SACFvrD,GAAA,QAAUA,GAAO,SAAS,UAAcI,GAAK,UAAYA,GAAK,OAAO,EACrEJ,GAAA,QAAU,CAACA,GAAO,UAEzBA,GAAO,QAAU,GACVA,GAAA,QAAUA,GAAO,SAAS,SAAaI,GAAK,SAAWA,GAAK,OAAO,GAGnEmrD,GAAAvrD,EAAA,CACX,CAGF,SAASgpE,GAAkBqB,EAAqC,QAC9D,MAAMjE,GAAUiE,EAAe,QACzBC,GAAUD,EAAe,QAEzBpjE,GAAO,CAAC,GAAGojE,EAAe,QAAQ,EAEpC,IAAA9e,EAEJ,KAAOtkD,GAAK,QACVskD,EAAStkD,GAAK,MAAM,EAEhB,CAAAskD,EAAO,WAEXA,EAAO,QAAU6a,GACjB7a,EAAO,QAAU+e,IAEblhE,GAAAmiD,EAAO,WAAP,MAAAniD,GAAiB,QACdnC,GAAA,KAAK,GAAGskD,EAAO,QAAQ,EAEhC,CAGF,SAAS8d,GAAkB9d,EAA6B,CACtD,GAAI,CAACA,EAAQ,OAEb,MAAMr4D,GAAU,MAAM,KAAK20E,GAAY,QAAQ,EACzCzB,GAAU,CAAC7a,EAAO,QAEpB,GAAA,CAACljD,EAAM,SAAU,CACV,QAAA5V,GAAI,EAAG4H,EAAMnH,GAAQ,OAAQT,GAAI4H,EAAK,EAAE5H,GACvCS,GAAAT,EAAC,EAAE,QAAU,GAGvB,OAAA84D,EAAO,QAAU6a,GACjB7a,EAAO,QAAU,GAEV6e,GAAmB7e,EAAO,SAAS,CAAA,CAMxC,GAHJA,EAAO,QAAU6a,GACjB7a,EAAO,QAAU,GAEb,CAACljD,EAAM,WAAY,CACf,MAAAygE,GAAkB,CAACvd,CAAM,EAAE,OAC/Br4D,GAAQ,OAAOq4D,GAAUA,EAAO,UAAYA,EAAO,OAAO,CAC5D,EAES,QAAA94D,EAAI,EAAG4H,GAAMyuE,GAAgB,OAAQr2E,EAAI4H,GAAK,EAAE5H,EAAG,CACpD84D,MAAAA,GAASud,GAAgBr2E,CAAC,EAEhCs2E,GAAoBxd,EAAM,EAC1Byd,GAAkBzd,EAAM,CAAA,CAC1B,CAGQ/0C,EAAAnO,EAAM+9D,GAAU,WAAa,UAAU,EAAG7a,EAAO,UAAWA,EAAO,IAAI,EAC9D0d,GAAA,CAAA,CAGrB,SAASA,IAAqB,CAC5B,MAAM/1E,EAAU,MAAM,KAAK20E,GAAY,QAAQ,EACzCmC,GAAkB3hE,EAAM,WAC1BnV,EAAQ,OAAOq4D,IAAUA,GAAO,OAAO,EACvCr4D,EAAQ,OAAOq4D,YAAU,OAAAA,GAAO,SAAW,EAAEA,GAAO,WAAYniD,GAAAmiD,GAAO,WAAP,MAAAniD,GAAiB,QAAO,EAEtF6jD,GAA2B,CAAC,EAC5BC,GAA2B,CAAC,EAE5Byc,EAAgC,CAAC,EACjCY,GAAqB,CAAC,EACtBX,GAAavhE,EAAM,WAEzB2hE,GAAgB,QAAkBze,IAAA,CACjB0B,GAAA,KAAK1B,GAAO,SAAS,EACpC2B,GAAe,KAAK0c,GAAare,GAAO,MAAQA,GAAO,SAAS,EAEhE,KAAM,CAAE,MAAAt6D,GAAO,KAAAiP,EAAA,EAASsqE,GAAejf,GAAO,SAAS,EAEvDoe,EAAO,KAAK14E,EAAK,EACjBs5E,GAAS,KAAKrqE,EAAI,CAAA,CACnB,EAEDqpD,EAAc,MAAQ0D,GACtB3D,EAAc,MAAQ4D,GAElBua,EAAY,QACVD,EAAY,QACDJ,EAAA,MAAQl0E,EAAQ,OAAiBq4D,IAAAA,GAAO,OAAO,EAAE,IAAcA,IAAAA,GAAO,SAAS,GAG5Esd,GAAA,GAGhBpB,EAAY,OAASD,EAAY,QACnCmC,EAAO,OAAS,EAChBY,GAAS,OAAS,EAELnD,EAAA,MAAM,QAAqBqD,IAAA,CAChC,MAAAlf,GAASZ,EAAe,IAAI8f,EAAS,EAE3C,GAAIlf,GAAQ,CACV,KAAM,CAAE,MAAAt6D,GAAO,KAAAiP,EAAA,EAASsqE,GAAejf,GAAO,SAAS,EAEvDoe,EAAO,KAAK14E,EAAK,EACjBs5E,GAAS,KAAKrqE,EAAI,CAAA,CACpB,CACD,GAGHuyC,GAAgBk3B,EAAQY,EAAQ,EAChC5uD,EAAAA,SAASmiB,CAAY,CAAA,CAGvB,SAASssC,GAAmBK,EAAmB,CACvC,MAAAlf,GAASZ,EAAe,IAAI8f,CAAS,EAE3C,GAAI,CAAClf,GAAQ,OAEb/0C,EAAUnO,EAAM,SAAUoiE,EAAWlf,GAAO,IAAI,EAE5Ckf,GACYlhB,EAAA,MAAM,CAAC,EAAIkhB,EACzBnhB,EAAc,MAAM,CAAC,EAAIjhD,EAAM,WAAakjD,GAAO,MAAQA,GAAO,YAElEhC,EAAc,MAAM,OAAS,EAC7BD,EAAc,MAAM,OAAS,GAG/B,KAAM,CAAE,MAAAr4D,GAAO,KAAAiP,IAASsqE,GAAeC,CAAS,EAEhDh4B,GAAgBxhD,GAAOiP,EAAI,EAC3B4rD,GAAW,EAAK,CAAA,CAGT,SAAArZ,GAAgBxhD,EAAsBiP,GAAyB,CACtE0qD,EAAa,MAAQ35D,EAErB0qB,EAAAA,SAAS,IAAM,CACIgtD,GAAA,GAEjBthC,EAAK,eAAgBp2C,CAAK,EAC1Bw9C,EAAcx9C,CAAK,EACTulB,EAAAnO,EAAM,SAA4BpX,EAAOiP,EAAI,EACzCquC,EAAA,CAAA,CACf,CAAA,CAGH,SAASi8B,GAAeC,EAAmB,CACrC,IAAAlf,GAASZ,EAAe,IAAI8f,CAAS,EAErC,GAAA,CAAClf,GAAe,MAAA,CAAE,MAAO,CAAC,EAAG,KAAM,EAAG,EAEpC,MAAAt6D,GAAQ,CAACs6D,GAAO,KAAK,EACrBrrD,GAAO,CAACqrD,GAAO,IAAI,EAEzB,KAAOA,GAAO,QAAQ,CACpB,MAAMvrD,EAAS6nE,GAAY,IAAItc,GAAO,MAAM,EAE5C,GAAI,CAACvrD,EAAQ,MAEP/O,GAAA,KAAK+O,EAAO,KAAK,EAClBE,GAAA,KAAKF,EAAO,IAAI,EACZurD,GAAAvrD,CAAA,CAGJ,MAAA,CACL,MAAO/O,GAAM,QAAQ,EACrB,KAAMiP,GAAK,QAAQ,CACrB,CAAA,CAGF,SAASomD,GAAcvB,EAAU,CAACW,EAAe,MAAO,CAClDr9C,EAAM,UAAY2L,GAAS,OAE/B83C,GAAW/G,CAAO,CAAA,CAGpB,SAASsB,IAAqB,CAC5ByD,EAAY,MAAQ,GACpBtzC,EAAUnO,EAAM,cAAc,EAE1BA,EAAM,cAAgBq9C,EAAe,QACvCoG,GAAW,EAAK,EACAgc,GAAA,GAChBtxD,EAAUnO,EAAM,cAAc,EAChC,CAGF,SAAS2qC,IAAc,CACjB,GAAA,EAAA3qC,EAAM,UAAY2L,GAAS,QAE3B3L,EAAM,UAAW,CACnB,MAAMH,EAAO0iD,EAAa,MAE1BrB,EAAc,MAAM,OAAS,EAC7BD,EAAc,MAAM,OAAS,EAC7B8d,EAAa,MAAM,OAAS,EAC5BC,EAAa,MAAM,OAAS,EAC5BiB,GAAU,MAAM,OAAS,EACzB1d,EAAa,OAAQ1iD,GAAA,YAAAA,EAAM,UAAW,EAAIA,EAAO,CAAC,EAClD4hD,EAAY,MAAQ,GAET,UAAAyB,MAAUsc,GAAY,SAC/Btc,GAAO,QAAU,GACjBA,GAAO,QAAU,IAGfrjD,GAAA,YAAAA,EAAM,UAAW,IACdm/B,EAAA,eAAgBujB,EAAa,KAAK,EACvCp0C,EAAUnO,EAAM,SAA4BuiD,EAAa,MAAO,CAAA,CAAE,GAGpEp0C,EAAUnO,EAAM,OAAO,EACvBujC,EAAWgf,EAAa,KAAK,CAAA,CAC/B,CAGF,SAASmD,IAAoB,CACtBrI,EAAe,MAGlBoE,EAAY,MAAQ,GAFRA,EAAA,MAAQ,CAACA,EAAY,KAGnC,CAGF,SAAS4gB,GAAeD,EAAmB,CACrCpiE,EAAM,UAAY2L,GAAS,QAE3B3L,EAAM,SACUghE,GAAA1e,EAAe,IAAI8f,CAAS,CAAE,EAEhDL,GAAmBK,CAAS,EAC9B,CAGO,SAAAE,GAAmBpf,EAA6BhkD,GAAe,CACtE4hE,GAAgB5d,EAAQhkD,EAAK,EAE7B,sBAAsB,IAAM,CACpB,MAAAqjE,GAAQxlE,GAAQojE,EAAY,KAAK,EAEnCoC,IAASA,GAAM,eAAiB,IAC5BA,GAAA,eAAiBA,GAAM,QAAQ,UAAUrf,IAAUA,GAAO,KAAOwc,EAAY,EAE/E6C,GAAM,eAAiB,IACzBA,GAAM,eAAiB,GAE3B,CACD,CAAA,CAGH,SAAStB,IAAkB,CACVvB,GAAAO,GAAU,MAAM,IAAI,CAAA,CAGrC,SAASuC,IAAoB,CAC3B,sBAAsB,IAAM,CAC1BvD,EAAa,MAAQ,EAAA,CACtB,CAAA,8BAKD5sD,EAAA,mBAyNM,MAAA,CAxNH,GAAIH,QAAK6zB,CAAA,UACN,UAAJ,IAAI9uB,EACH,uBAAOrT,GAAS,KAAA,EACjB,KAAK,QACJ,gBAAesO,EAAA,MAAA1X,EAAA,EAAY0X,EAAAA,MAAAlS,CAAA,EAAM,QAAQ,EACzC,gBAAekS,EAAAA,MAAW1X,EAAA,EAAC6iD,EAAc,KAAA,EAC1C,gBAAc,SACb,kBAAiBnrC,QAAO8zB,CAAA,EACxB,0BAAOiY,GAAa,EAAA,GAErBxrC,EAAAA,mBAmJM,MAAA,SAlJA,YAAJ,IAAI8L,EACH,uBAAOslC,GAAa,KAAA,EACrB,SAAS,IACR,UAAO,8CAAgB5F,KAAa,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,gCACvBA,GAAa,EAAA,EAAA,CAAA,KAAA,CAAA,EAAA,IAGnBnV,GAAS,qBADjBz2B,EAAAA,mBAUM,MAAA,OARH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,iBAAA,CAAA,MAAWzzC,EAAAA,MAAKlS,CAAA,EAAC,WAAW,CAAA,CAAA,GAElCuS,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,6EAIzByS,EAAAA,mBAoFM,MAAA,CApFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAChBgC,EAAAA,WAkFOC,sBAlFP,IAkFO,CAjFLtB,cAgFWgB,EAAAA,MAAAb,EAAA,EAAA,CAhFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAqEW,CApEHkS,QAAAlS,CAAA,EAAM,sBADd,EAAAmS,cAqEWD,EAAAA,MAAA0zC,EAAA,EAAA,OAnET,QAAA,GACC,MAAKtzC,iBAAA,CAAGJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,EACb,MAAO8uD,EAAc,MACrB,YAAWntD,EAAAA,MAAKlS,CAAA,EAAC,YACjB,aAAW6vC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEwG,GAAY,MAAGxG,GAAA,GAElB,QACT6K,EAAAA,QAAA,CAUM,CAXc,KAAA9tD,GAAM,MAAAjH,MAAK,CAC/BogB,cAUMgB,EAAAA,MAAA4zC,EAAA,EAAA,CATJ,QAAA,GACC,MAAKxzC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,EACZ,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACb,SAAA,GACC,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,yCAAYi+C,GAAA,EAAa,CAAA,MAAA,CAAA,GACzB,QAAKjD,GAAEqnB,GAAetqE,EAAI,CAAA,qBAE3B,IAA2B,CAAxB4a,kBAAAC,EAAA,gBAAA0sD,EAAA,MAAexuE,EAAK,CAAA,EAAA,CAAA,CAAA,sDAGhB,QAAO+0D,EAAA,QAChB,CAQM,CATc,MAAAhzD,MAAK,CAEjBqf,QAAAlS,CAAA,EAAM,uBADd,EAAAmS,cAQMD,EAAAA,MAAA4zC,EAAA,EAAA,OANJ,QAAA,GACC,wBAAQ5zC,QAAE3B,CAAA,EAAC,GAAW,KAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,EAC3B,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAAA,qBAEjB,IAAiB,yCAAVnN,EAAK,EAAA,EAAA,CAAA,CAAA,0DAEdwf,EAAAA,mBAoCO,OAAAq+C,GAAA,CAnCLx/C,cAkCUgB,EAAAA,MAAA6zC,EAAA,EAAA,CAjCR,QAAA,GACC,SAAU,GACV,QAAStE,EAAW,MACrB,QAAQ,SACR,UAAU,UACT,YAAWvvC,EAAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,EAChB,wBAAYm1C,GAAiB,CAAA,MAAA,CAAA,CAAA,GAEnB,kBACT,IAOM,CAPNx0C,cAOMgB,EAAAA,MAAA4zC,EAAA,EAAA,CANJ,QAAA,GACC,wBAAQ5zC,QAAE3B,CAAA,EAAC,GAAW,KAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,EAC3B,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAAA,qBAEjB,IAAiB,yCAAVnN,EAAK,EAAA,EAAA,CAAA,CAAA,8DAGhB,IAce,CAdfqe,cAcegB,EAAAA,MAAAstC,EAAA,EAAA,CAdD,QAAA,GAAQ,YAAA,EAAA,qBACV,IAAuC,EAAjDnf,EAAAA,UAAA,EAAA,EAAAhuB,EAYW,mBAAAqsB,WAZuB,KAAAC,EAAA,WAAA0gC,EAAA,MAAhB,CAAAtnE,GAAMjH,wDAAgCA,GAAK,CAEnDA,GAASuuE,EAAA,MAAe,OAAS7d,GAAY,qBADrDrvC,EAAAA,YAUMD,EAAA,MAAA4zC,EAAA,EAAA,OARJ,QAAA,GACC,MAAKxzC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,EACb,SAAA,GACC,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAAKg7C,IAAEqnB,GAAetqE,EAAI,CAAA,qBAE3B,IAA2B,CAAxB4a,kBAAAC,EAAA,gBAAA0sD,EAAA,MAAexuE,CAAK,CAAA,EAAA,CAAA,CAAA,sMAQrCuhB,EAEW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,qBADN,gBAAAuiB,EAAa,MAAA,CAAA,CAAA,EAAA,CAAA,SAGT/uC,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAAA,SAAO,eAAiBm3B,GAAQ,qBAD9Dh3B,EAAAA,mBAKO,OAAA,OAHJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAEV,EAAAqC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAA,MAAA5P,CAAA,EAAO,WAAW,EAAA,CAAA,4DAMzC4P,EAAAA,MAAAlS,CAAA,EAAM,SAqBFkS,EAAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAAlS,CAAA,EAAM,uBADtCqS,EAAAA,mBAGO,MAAA,OADJ,MAAKC,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,QAAE3B,CAAA,EAAC,IAAG,OAAA,aAAA,EAAyB2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,uDAvB9D8B,qBAoBM,MAAA,OAlBH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,EAAAA,eAAA,CAAqB,MAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,oBAAgCspC,GAAS,OAAIp3B,EAAAA,MAAKlS,CAAA,EAAC,QAAO,KAAA,OAK3FuS,EAAAA,WAWOC,qBAXP,IAWO,CAVLtB,cASWgB,EAAAA,MAAAb,EAAA,EAAA,CATA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAMQ,CALAkS,QAAAlS,CAAA,EAAM,oBADd,EAAAmS,cAMQD,EAAAA,MAAApO,EAAA,EAAA,OAJL,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,OACZ,MAAKsS,EAAAA,eAAA,CAAqB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAe,OAAA,CAAA,EAAA,CAAA2B,EAAAA,MAAAlS,CAAA,EAAM,2CAIrDqgC,EAAAA,UAAA,EAAAluB,cAAqED,EAAAA,MAArEpO,EAAA,EAAA4O,EAAAA,WAAqE,CAAhD,IAAA,CAAA,EAAAR,QAAA5I,CAAA,EAAM,UAAS,CAAG,MAAO4I,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,sDAQzDW,EAAAA,YAkBakB,EAAAA,WAAA,CAlBA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IASS,CARD+4B,GAAS,qBADjBj3B,EAAAA,mBASS,SAAA,OAPN,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EAC7B,KAAK,SACL,SAAS,KACR,aAAY2B,EAAA,MAAA5P,CAAA,EAAO,UAAU,MAC7B,wBAAYqoC,GAAW,CAAA,MAAA,CAAA,CAAA,GAExBz5B,EAAAA,YAAkCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAApBh0C,QAAK5I,CAAA,EAAC,KAAK,CAAA,EAAA,KAAA,EAAA,CAAA,UAEX4I,QAAAlS,CAAA,EAAM,uBAAtBqS,EAAA,mBAMM,MAAA,OAN0B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAC1DW,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,WAAM,aAAeA,QAAK5I,CAAA,EAAC,QAAQ,2FAKlD4H,cAyDSgB,EAAAA,MAAAotC,EAAA,EAAA,SAxDH,SAAJ,IAAIpqB,EACH,MAAK5iB,iBAAA,CAAGJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,EAAY2B,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,EAAgB2B,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,EACnD,QAAS8sC,EAAc,MACvB,GAAInrC,QAAUkjB,CAAA,EACd,WAAYljB,EAAAA,MAAKlS,CAAA,EAAC,eAClB,MAAOkS,EAAA,MAAAlS,CAAA,EAAM,cAAgBkS,QAAUkjB,CAAA,EACvC,sCAAD,IAAW,CAAA,EAAA,CAAA,MAAA,CAAA,GACV,QAAOotC,EAAA,qBAER,IA8CM,CA9CN/vD,EAAAA,mBA8CM,MAAA,CA7CH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,EAAA,GAA8B,CAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,OAAA,CAAA,EAAA,CAAuB2vD,SAAmB,CAAA,GAAA,CAAAA,GAAA,SAAe,WAKvGA,GAAW,MAAA,CAAA,GAAOA,GAAW,MAAA,CAAA,EAAI,QAC/C7/B,EAAAA,UAAA,EAAA,EAAAhuB,EAAAA,mBA8BgBqsB,EAAA,SA7BW,CAAA,IAAA,CAAA,EAAAC,aAAAuhC,GAAA,MAAjB,CAAAxgE,GAAO5O,oBADjBqhB,EAAA,YA8BgBswD,GAAA,CA5Bb,IAAK3xE,cACL,IAAMyxE,GAAeA,GAASpC,EAAW,MAAC,KAAKoC,CAAK,EACpD,QAAS7iE,GACT,YAAWugE,GAAS,MAACnvE,EAAK,EAC1B,OAAQowD,EAAa,MACrB,MAAO+d,EAAY,MACnB,SAAU/sD,EAAAA,MAAKlS,CAAA,EAAC,SAChB,WAAUm/D,EAAW,MACrB,OAAQC,EAAW,MACnB,cAAaltD,EAAAA,MAAKlS,CAAA,EAAC,WACnB,aAAYkS,QAAO8zB,CAAA,EACnB,SAAQgV,GAAA+lB,GAAmB/lB,EAAQlqD,EAAK,EACxC,WAAOuvE,GAAU,OAAIS,GAAgB9lB,EAAQlqD,EAAK,EAClD,QAAK++C,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,GAAEgmB,GAAkBhmB,CAAM,GAC/B,OAAMA,GAAAsnB,GAAmBtnB,EAAQlqD,EAAK,EACtC,OAAMmwE,GACN,yBAAO5jB,EAAc,MAAA,0BAENn5C,EAAM,SAAWgO,EAAA,SAAM,MAAM,cAAU,UACrD,GAAA2zC,EAAAA,QAD8D/sD,GAAO,CACrEyZ,aAEOC,EAFP,OAAA,UAAAE,EAAAA,WAEO,CAFO,QAAA,EAAA,EAAA5Z,CAAO,EAArB,IAEO,CADLoY,cAAqEgB,EAAAA,MAAAb,EAAA,EAAA,CAA1D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAMlH,mDAGrCoL,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,QACjD,GAAA2zC,EAAAA,QADwD/sD,GAAO,CAC/DyZ,aAEOC,EAFP,OAAA,QAAAE,EAAAA,WAEO,CAFoB,QAAA,EAAA,EAAA5Z,CAAO,EAAlC,IAEO,CADLoY,cAAmEgB,EAAAA,MAAAb,EAAA,EAAA,CAAxD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMlH,mNAKvDuZ,EAAAA,mBAMM,MAAA,OANO,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EAAY,iCAAmB6vD,GAAa,KAAA,IAAA,CAAA,CAAA,GACnE7tD,EAAAA,WAIOC,oBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAAqC,CAAlC2S,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAA5P,CAAA,EAAO,KAAK,EAAA,CAAA,CAAA,uGCxsC1CogE,GAAa,CAAC,OAAQ,OAAQ,KAAK,EAE5BC,GAAYx1D,GAAW,CAClC,IAAK,OACL,IAAK,CAAC,OAAQ,KAAK,EACnB,KAAMu1D,GACN,QAASA,GACT,SAAUA,GACV,YAAaA,GACb,MAAO31D,EACP,QAAS,OACT,MAAO,OACP,SAAU,CACR,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IAAA,CAEb,CAAC,EAKKyzB,GAAY,CAAC,OAAQ,MAAM,EAEpBoiC,GAAYz1D,GAAW,CAClC,IAAK,OACL,IAAK,CAAC,OAAQ,MAAM,EACpB,KAAM,CAAC,OAAQ,MAAM,EACrB,MAAO,OACP,OAAQ,OACR,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,CAAC,OAAQ,MAAM,EACvB,GAAIqzB,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,IAAKA,GACL,QAAS,CACP,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IAAA,CAEb,CAAC,ECzCYE,GAAc,OAAO,OAAqB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAK,CAAC,EAC/EmiC,GAAoBnxD,MAAgB,IAAI,EAErD,GAAIlpB,GAAU,CAcZ,IAASs6E,EAAT,UAAkC,CAChC,SAAW,CAACC,EAAOC,CAAK,IAAKC,EAC3B,GAAID,EAAM,QAAS,CACjBH,GAAkB,MAAQE,EAC1B,KAAA,CAGN,EApBM,MAAA7oE,EAAgB,iBAAiB,SAAS,eAAe,EACzDgpE,EAAW,CAAC,EAElBxiC,GAAY,QAAiBqiC,GAAA,CAC3B,MAAMI,EAAQjpE,EAAc,iBAAiB,qBAAqB6oE,CAAK,EAAE,EAAE,KAAK,EAC1EC,EAAQ,WAAW,mBAAmBG,CAAK,EAAE,EAE7CH,EAAA,iBAAiB,SAAUF,CAAsB,EACvDI,EAASH,CAAK,EAAIC,CAAA,CACnB,EAED,MAAMC,EAAe,OAAO,QAAQC,CAAQ,EAAE,QAAQ,EAW/BJ,EAAA,CACzB,CCDO,MAAMM,GAAa,mBCpB1BC,GAAe5zD,kBAAgB,CAC7B,KAAM,OACN,MAAOmzD,GACP,MAAMjzD,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,OAAQ0D,EAAQ,CACrC,IAAK,MACL,IAAK,OACL,KAAM,OACN,MAAO,KACP,OAAQ,EACR,MAAO,GACP,OAAQ,GACR,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,IAAK,KACL,QAAS,IAAA,CACV,EAEK2zD,EAAYzhE,EAAAA,OAAOuhE,GAAY,IAAI,EACnC7yD,EAAKtF,GAAc,MAAM,EAE/BnJ,EAAA,QAAQshE,GAAY,IAAK,EAEzB,MAAMG,EAAcz2D,EAAAA,SAAS,CAC3B,IAAK9M,EAAM,IACX,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,KAAMA,EAAM,KACZ,MAAOA,EAAM,MACb,OAAQA,EAAM,MAAA,CACf,EACKwjE,EAAa,OAAO,KAAKD,CAAW,EASpCE,EAAepiE,EAAAA,SAAS,IACxBrY,GAAUgX,EAAM,KAAK,EAChBA,EAAM,MAGRsjE,GAAA,MAAAA,EAAW,SAAW,OAAOA,EAAU,SAAY,SAAWA,EAAU,QAAU,CAC1F,EAED12D,EAAA,MACEi2D,GACSj6E,GAAA,CACD,MAAA86E,EAAYC,EAAuB/6E,CAAK,EAE1C86E,EACE,OAAOA,GAAc,UACvBF,EAAW,QAAez6E,GAAA,CACZw6E,EAAAx6E,CAAG,EAAIiX,EAAMjX,CAAG,CAAA,CAC7B,EAEDw6E,EAAY,MAAQG,IAEpBF,EAAW,QAAez6E,GAAA,CACZw6E,EAAAx6E,CAAG,EAAID,GAAI46E,EAAW36E,CAAG,EAAI26E,EAAU36E,CAAG,EAAKiX,EAAMjX,CAAG,CAAA,CACrE,EAEWw6E,EAAA,MAAQA,EAAY,OAASE,EAAa,QAGxDD,EAAW,QAAez6E,GAAA,CACZw6E,EAAAx6E,CAAG,EAAIiX,EAAMjX,CAAG,CAAA,CAC7B,EAEDw6E,EAAY,MAAQE,EAAa,MAErC,EACA,CAAE,UAAW,EAAK,CACpB,EAEM,MAAA7/D,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,MAAMuiE,EAAW5jE,EAAM,UAAY,KAChCA,EAAM,UAAWsjE,GAAA,YAAAA,EAAW,YAAa,CAC1C,IAAIA,GAAA,YAAAA,EAAW,WAAY,CAAC,EAC5B,GAAItjE,EAAM,QACNA,EAAM,UAAY,GAChB,CAAE,QAAS,QAAS,MAAO,OAC3BA,EAAM,QACR,CAAA,CACN,EACM4D,EAAuB,CAC3B,CAAC2M,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,SAAS,CAAC,EAAG+yD,GAAatjE,EAAM,QACvC,CAACuQ,EAAG,GAAG,MAAM,CAAC,EAAGqzD,CACnB,EAEA,OAAIA,IACEA,EAAS,UAAShgE,EAAU2M,EAAG,GAAGqzD,EAAS,OAAO,CAAC,EAAI,IACvDA,EAAS,QAAOhgE,EAAU2M,EAAG,GAAGqzD,EAAS,KAAK,CAAC,EAAI,KAGlDhgE,CAAA,CACR,EACK+M,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAuB,CAAC,EAExBkzD,EAASC,EAAcP,EAAY,GAAG,EACtCQ,EAAWD,EAAcP,EAAY,KAAK,EAC1CS,EAAYF,EAAcP,EAAY,MAAM,EAC5CU,EAAUH,EAAcP,EAAY,IAAI,EAE9C,OAAIM,GAAUG,GACZrzD,EAAM,aAAeuzD,EAAcX,EAAY,GAAG,EAClD5yD,EAAM,WAAauzD,EAAcX,EAAY,MAAM,GAC1CM,GACTlzD,EAAM,aAAeuzD,EAAcX,EAAY,GAAG,EAClD5yD,EAAM,WAAa,QAAQ4yD,EAAY,MAAM,IACpCS,GACTrzD,EAAM,aAAe,QAAQ4yD,EAAY,MAAM,GAC/C5yD,EAAM,WAAauzD,EAAcX,EAAY,MAAM,GAEnD5yD,EAAM,WAAa,QAAQ4yD,EAAY,MAAM,GAG3CU,GAAWF,GACbpzD,EAAM,gBAAkBuzD,EAAcX,EAAY,IAAI,EACtD5yD,EAAM,cAAgBuzD,EAAcX,EAAY,KAAK,GAC5CU,GACTtzD,EAAM,gBAAkBuzD,EAAcX,EAAY,IAAI,EACtD5yD,EAAM,cAAgB,QAAQ4yD,EAAY,KAAK,IACtCQ,GACTpzD,EAAM,gBAAkB,QAAQ4yD,EAAY,KAAK,GACjD5yD,EAAM,cAAgBuzD,EAAcX,EAAY,KAAK,GAErD5yD,EAAM,gBAAkB,QAAQ4yD,EAAY,KAAK,GAG5C5yD,CAAA,CACR,EAED,SAASmzD,EAAcl7E,EAAwB,CACtC,OAAAA,IAAU,GAAMA,GAASA,IAAU,MAAA,CAG5C,SAASs7E,EAAct7E,EAAwB,CAC7C,OAAO,OAAOA,GAAU,SAAWA,EAAQ,EAAIA,CAAA,CAGjD,SAAS+6E,EAAuBQ,EAAwB,CACtD,MAAMrzE,EAAQ4vC,GAAY,UAAUzzC,GAAKA,IAAMk3E,CAAU,EAEzD,GAAI,CAACrzE,GACH,QAAS1G,EAAI0G,EAAO1G,GAAK,EAAG,EAAEA,EAC5B,GAAIpB,GAAUgX,EAAM0gC,GAAYt2C,CAAC,CAAC,CAAC,EAC1B,OAAA4V,EAAM0gC,GAAYt2C,CAAC,CAAC,EAK1B,OAAA,IAAA,CAGT,MAAO,IACLwC,EAAA,EACEoT,EAAM,KAAO,MACb,CACE,MAAO4D,EAAU,MACjB,MAAO+M,EAAM,KACf,EACA,CACE,QAAS,IAAM,OAAA,OAAA5P,EAAAmD,EAAM,UAAN,YAAAnD,EAAA,KAAAmD,GAAgB,CAEnC,CAAA,CAEN,CAAC,4JC7JK,KAAA,CACJ,MAAA6hC,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,cAAAC,EACA,cAAAC,CAAA,EACEhD,GAAmCkD,CAAK,EAGtCtmC,EAAQiM,GAAS,gBADRsF,EACiC,CAC9C,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,SAAU,GACV,SAAU,IAAMtyB,EAAS,MACzB,OAAQ,GACR,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,QAAS,IAAMoyB,EAAQ,MACvB,QAAS,KACT,YAAa,GACb,MAAO,KACP,WAAY,EAAA,CACb,EAEKjH,EAAOC,EAEP1uB,EAAKtF,GAAc,gBAAgB,EACnC3I,EAASI,GAAU,WAAY07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACrDokE,MAAe,IACfC,MAAe,IACfC,MAAiB,IACjBpjB,EAAgBxvC,EAAA,IAAyB1R,EAAM,OAAS,CAAA,CAAE,EAE1D2L,EAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D4D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,eAAe,EACrB,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAG5E,EAAS,MAC9B,CAAC4E,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,SAAA,CAE1C,CACD,EACKukE,EAAeljE,EAAAA,SAAS,IACrB,OAAOrB,EAAM,SAAY,SAAWA,EAAM,QAAUsC,EAAO,MAAM,GACzE,EACKsoD,EAAWvpD,EAAAA,SAAS,IAAM,CAC1B,GAAA,CAACrB,EAAM,MAAc,OAAA,KAEnB,MAAAk9B,EAAY7vC,GAAiB2S,EAAM,KAAK,EAEvC,MAAA,CACL,KAAMk9B,EAAU,SAAS,EACzB,SAAUrtC,GAAYqtC,EAAW,EAAG,EAAE,SAAS,CACjD,CAAA,CACD,EAEKsnC,EAAc/oE,GAAc,IAAM,CACtCylD,EAAc,MAAQ,CAAC,EAEdkjB,EAAA,QAAQ,CAACrG,EAASn1E,KAAU,CAC/Bm1E,GACY7c,EAAA,MAAM,KAAKt4D,EAAK,CAChC,CACD,EAEDyhD,EAAa6W,EAAc,KAAK,CAAA,CACjC,EAEKujB,EAAgBhpE,GAAc,IAAM,CAClC,MAAAipE,EAAcxjB,EAAc,MAAM,OAClC6c,GAAU2G,IAAgBN,EAAS,KACnCnC,GAAUyC,EAAc,GAAK,CAAC3G,GAEzBuG,EAAA,QAAQluD,GAAS,CAC1BA,EAAM,QAAU2nD,GAChB3nD,EAAM,QAAU6rD,EAAA,CACjB,CAAA,CACF,EAEDngE,EAAA,QACEwlD,GACAx6C,WAAS,CACP,cAAAo0C,EACA,KAAM9iB,EAAAA,MAAMp+B,EAAO,MAAM,EACzB,MAAOo+B,EAAAA,MAAMp+B,EAAO,OAAO,EAC3B,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,QAASo+B,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,YAAao+B,EAAAA,MAAMp+B,EAAO,aAAa,EACvC,SAAA4qD,EACA,WAAYxsB,EAAAA,MAAMp+B,EAAO,YAAY,EACrC,aAAAypD,EACA,aAAAC,EACA,gBAAAib,EACA,gBAAAC,EACA,oBAAAC,EACA,eAAAC,EACA,aAAAC,CACD,CAAA,CACH,EAEAn4D,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACD,MAAAo8E,GAAgB,IAAI,IAAIp8E,CAAK,EAC7Bq8E,GAAY,MAAM,KAAKb,EAAS,MAAM,EAE5CljB,EAAc,MAAQ,CAAC,EAEb+jB,GAAA,QAAQr8E,GAAS,CACnB,MAAAm1E,GAAUiH,GAAc,IAAIp8E,CAAK,EAEvCw7E,EAAS,IAAIx7E,EAAOo8E,GAAc,IAAIp8E,CAAK,CAAC,EACjCm1E,IAAA7c,EAAc,MAAM,KAAKt4D,CAAK,CAAA,CAC1C,CAAA,CAEL,EACAgkB,EAAA,MAAMs0C,EAAe,IAAM,CACXujB,EAAA,CAAA,CACf,EAEQ,SAAAhb,EACP7gE,EACAm1E,GACAp0B,GACA,CACSy6B,EAAA,IAAIx7E,EAAOm1E,EAAO,EAC3BsG,EAAS,IAAI16B,EAAK,CAAA,CAGX,SAAA+f,EAAa9gE,EAAwB+gD,GAA4C,CACxFy6B,EAAS,OAAOx7E,CAAK,EACrBy7E,EAAS,OAAO16B,EAAK,CAAA,CAGvB,SAASg7B,EAAgBvuD,EAAqB,CAC5CkuD,EAAW,IAAIluD,CAAK,EACNquD,EAAA,CAAA,CAGhB,SAASG,EAAgBxuD,EAAqB,CAC5CkuD,EAAW,OAAOluD,CAAK,CAAA,CAGhB,SAAA0uD,EAAel8E,EAAwBm1E,GAAkB,CAC5D,CAAC/0E,GAAUJ,CAAK,GAAK,CAACw7E,EAAS,IAAIx7E,CAAK,IAEnCw7E,EAAA,IAAIx7E,EAAOm1E,EAAO,EACfyG,EAAA,EACEC,EAAA,EAAA,CAGhB,SAASI,GAAsB,CAE7B,MAAMI,EAAY,MAAM,KAAKb,EAAS,MAAM,EACtCrG,GAAU7c,EAAc,MAAM,SAAW+jB,EAAU,OAEzDA,EAAU,QAAiBr8E,IAAA,CAChBw7E,EAAA,IAAIx7E,GAAOm1E,EAAO,CAAA,CAC5B,EAEWyG,EAAA,EACEC,EAAA,CAAA,CAGhB,SAASp6B,EAAazhD,EAA4B,CAChDo2C,EAAK,eAAgBp2C,CAAK,EAC1Bw9C,EAAcx9C,CAAK,EACTulB,EAAAnO,EAAM,SAAUpX,CAAK,EACjBs9C,EAAA,CAAA,CAGP,SAAA6+B,EAAazf,EAA4B3sC,GAA2B,CAEzE3vB,GAAUs8D,CAAS,GACnBt8D,GAAU2vB,EAAQ,GAClB2sC,IAAc3sC,IACdyrD,EAAS,IAAI9e,CAAS,IAEtB8e,EAAS,IAAIzrD,GAAUyrD,EAAS,IAAI9e,CAAS,CAAE,EAC/C8e,EAAS,OAAO9e,CAAS,EAC3B,CAGF,SAAShf,EAAMz7C,EAAwB,QACrC,MAAM8+C,IAAQ5oC,GAAA,MAAM,KAAKsjE,CAAQ,EAAE,CAAC,IAAtB,YAAAtjE,GAAyB,MAEnCvY,IAAYmhD,IAAS,SAAS,gBAAkBA,IAClDA,GAAM,MAAM9+C,CAAO,CACrB,CAGW,OAAAinB,EAAA,CACX,MAAAi0B,EACA,QAAAC,EACA,gBAAA2+B,EACA,gBAAAC,EACA,MAAAt+B,EACA,KAAM,IAAM,OACV,UAAWqD,MAAS06B,GAClBtjE,EAAA4oC,GAAM,QAAN,MAAA5oC,EAAa,MACf,CACF,CACD,yBAICsR,EAAA,mBAyBM,MAAA,CAxBH,GAAIH,QAAK6zB,CAAA,EACT,uBAAOniC,EAAS,KAAA,EACjB,KAAK,QACJ,kBAAiBsO,QAAO8zB,CAAA,CAAA,GAEzBzzB,EAAAA,WAkBOC,sBAlBP,IAkBO,CAjBWN,QAAAlS,CAAA,EAAM,qBAAtB,EAAAmS,cAEWD,EAAAA,MAAAysD,EAAA,EAAA,OAFoB,QAAA,GAAQ,QAAA,EAAA,qBACrC,IAAkB,qCAAf4F,EAAY,KAAA,EAAA,CAAA,CAAA,uCAEjBlkC,EAAAA,UAAA,EAAA,EAAAhuB,qBAaWqsB,EAAAA,2BAbuBxsB,EAAA,MAAKlS,CAAA,EAAC,QAAtB,CAAAjI,GAAMjH,wDAA+BA,GAAK,CAElDohB,QAAA7oB,EAAA,EAAS0O,EAAI,iBADrBoa,EAAA,YAQWD,QAAAysD,EAAA,EAAA,OANT,QAAA,GACC,MAAO5mE,GAAK,MACZ,QAASA,GAAK,QACd,SAAUA,GAAK,QAAA,qBAEhB,IAA8B,CAA3B4a,kBAAAC,EAAA,gBAAA7a,GAAK,OAASA,GAAK,KAAK,EAAA,CAAA,CAAA,6DAE7Boa,EAAAA,YAEWD,EAAA,MAAAysD,EAAA,EAAA,OAFM,QAAA,GAAS,MAAO5mE,EAAA,qBAC/B,IAAU,qCAAPA,EAAI,EAAA,CAAA,CAAA,oDCnPJmtE,GAAiB,uBAE9B,IAAIvmE,GAAU,EAEP,SAASwmE,IAAa,CACpB,OAAAxmE,IACT,6HCfM,MAAAqB,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,SAAU,CACR,QAAS,KACT,OAAQ,EACV,EACA,KAAM,GACN,UAAW,GACX,UAAW,CACT,QAAS,QACT,UAAY3oB,GAA6B,CAAC,QAAS,OAAQ,MAAM,EAAE,SAASA,CAAK,CACnF,EACA,MAAO,GACP,MAAO,EAAA,CACR,EAEKo2C,EAAOC,EAEP1uB,EAAKtF,GAAc,UAAU,EAC7Bm6D,EAAct4D,EAAAA,SAAa,IAAA,GAAiB,EAC5Cu4D,EAAkB3zD,EAAyB,IAAA,EAAE,EAE7C,CAAE,OAAQuF,CAAQ,EAAIgC,GAAY,CACtC,QAAS,GACT,UAAW,CAAC/f,EAAOygB,IAAa,CAC1B,GAAAA,EAAS,MAAQA,EAAS,MAAO,CACnC,GAAI,CAAC1C,EAAQ,OAAS,CAAC,CAAC,GAAGmuD,CAAW,EAAE,KAAK,CAAC,CAAE,IAAAE,CAAI,IAAMA,IAAQpsE,EAAM,MAAM,EAAG,OAE3E,MAAAqsE,EAAO,MAAM,KAAKtuD,EAAQ,MAAM,iBAAiB1G,EAAG,IAAI,QAAQ,CAAC,CAAC,EAEpE,GAAAg1D,EAAK,OAAS,EAAG,OAErBrsE,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAEhB,MAAApI,EAAQ,SAAS,cACnBy0E,EAAK,UAAmBhD,GAAAA,IAAU,SAAS,aAAa,EACxD,GAEJ,GAAI,CAACzxE,EAAO,CACJ,MAAAK,EAASo0E,GAAMz0E,GAAS6oB,EAAS,KAAO,GAAK,GAAK4rD,EAAK,QAAUA,EAAK,MAAM,EAElFp0E,GAAA,MAAAA,EAAQ,OAAM,CAChB,MACSwoB,EAAS,SAClBzgB,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAERssE,EAAA,EAChB,CACF,CACD,EAEK5hE,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAG,SAASvQ,EAAM,SAAS,EAAE,EAChC,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,MAAM,CAAC,EAAGvQ,EAAM,KACvB,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAG,CAACvQ,EAAM,MAAQA,EAAM,KAAA,CAE3C,CACD,EAEKwpD,EAAgB/tD,GAAc,IAAM,CAOxC,GANM,MAAA,KAAK2pE,EAAY,OAAO,CAAC,EAAE,QAAQ,CAACrtE,EAAMjH,IAAU,CACpD7H,GAAO8O,EAAK,KAAK,IACnBA,EAAK,MAAQjH,EAAQ,EACvB,CACD,EAEGs0E,EAAY,KACd,UAAW7C,KAAS6C,EACdC,EAAgB,MAAM,SAAS9C,EAAM,KAAK,EAC5CA,EAAM,SAAW,GACRA,EAAM,UACHkD,EAAAlD,EAAM,MAAO,EAAI,CAGnC,CACD,EAEDzgE,EAAA,QACEojE,GACAp4D,WAAS,CACP,UAAWsxB,EAAAA,MAAMp+B,EAAO,WAAW,EACnC,MAAOo+B,EAAAA,MAAMp+B,EAAO,OAAO,EAC3B,cAAA0lE,EACA,gBAAAC,EACA,YAAAF,EACA,cAAAjc,CACD,CAAA,CACH,EAEA99C,EAAAA,YAAY,IAAM,CAChB,MAAMk6D,EAAc5lE,EAAM,SACpB6lE,EACJ7lE,EAAM,WAAa,MAAM,QAAQ4lE,CAAW,EACxCA,EAAY,CAAC,EACbA,GAAeA,IAAgB,EAC7BA,EACA,CAAC,EAEOP,EAAA,MAAQ,MAAM,QAAQQ,CAAQ,EAAI,MAAM,KAAKA,CAAQ,EAAI,CAACA,CAAQ,CAAA,CACnF,EAEDpxD,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAASwyD,CAAkB,EAErBl5D,EAAAA,MAAAy4D,EAAiB,CAACxlE,EAAMC,IAAS,CAChCimE,EAAelmE,EAAMC,CAAI,GACTgmE,EAAA,CACrB,CACD,CAAA,CACF,EAEYh0D,EAAA,CAAE,gBAAAuzD,EAAiB,QAAApuD,EAAS,EAEzC,SAASyuD,EAAcnD,EAAmB,CACxC6C,EAAY,IAAI7C,CAAK,EAEP/Y,EAAA,CAAA,CAGhB,SAASmc,EAAgBpD,EAAmB,CAC1C6C,EAAY,OAAO7C,CAAK,EACZkD,EAAAlD,EAAM,MAAO,EAAK,EAChB/Y,EAAA,CAAA,CAGP,SAAAuc,EAAelmE,EAA2BC,EAA2B,CACtE,MAAAkmE,EAAU,IAAI,IAAInmE,CAAI,EAE5B,OAAImmE,EAAQ,OAAS,IAAI,IAAIlmE,CAAI,EAAE,KAAa,GAEzCA,EAAK,MAAM/H,GAAQiuE,EAAQ,IAAIjuE,CAAI,CAAC,CAAA,CAGpC,SAAA0tE,EAAYx1D,EAAwB41D,EAAmB,CAC1D,CAAC51D,GAASA,IAAU,IAEpBjQ,EAAM,UACRqlE,EAAgB,MAAQQ,EAAW,CAAC51D,CAAK,EAAI,CAAC,EAE1C41D,EACcR,EAAA,MAAM,KAAKp1D,CAAK,EAEhBxS,GAAA4nE,EAAgB,MAAOp1D,CAAK,EAIhCm6B,EAAA,EACG07B,EAAA,EAAA,CAGrB,SAASN,GAAgB,CAClBH,EAAgB,MAAM,SAE3BA,EAAgB,MAAQ,CAAC,EAETj7B,EAAA,EACG07B,EAAA,EAAA,CAGrB,SAAS17B,GAAkB,CACpBpL,EAAA,kBAAmBqmC,EAAgB,KAAK,EACnCl3D,EAAAnO,EAAM,SAAUqlE,EAAgB,KAAK,CAAA,CAGjD,SAASS,GAAqB,CAC5BV,EAAY,QAAiB7C,GAAA,CAC3BA,EAAM,YAAY8C,EAAgB,MAAM,SAAS9C,EAAM,KAAK,CAAC,CAAA,CAC9D,CAAA,6BAKDlwD,EAAA,mBAOM,MAAA,SANA,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EACjB,KAAK,UACL,SAAS,IAAA,GAET2O,aAAaC,EAAA,OAAA,SAAA,oOChMX,MAAAxS,EAAQiM,GAAS,gBADRsF,EACiC,CAC9C,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,MAAO,GACP,SAAU,GACV,aAAc,KACd,SAAU,GACV,KAAM,GACN,UAAW,CACT,QAAS,QACT,UAAY3oB,GAA6B,CAAC,QAAS,OAAQ,MAAM,EAAE,SAASA,CAAK,CACnF,EACA,KAAM6lB,GAAe,EACrB,MAAO,GACP,MAAO,KACP,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKuwB,EAAOC,EAIPgnC,EAAgBpkE,EAAAA,OAAOqjE,GAAgB,IAAI,EAE3C30D,EAAKtF,GAAc,UAAU,EAC7B3B,EAAQU,GAAS,EACjBq7D,EAAkB3zD,EAAAA,IAAI1R,EAAM,QAAQ,EACpCipD,EAAev3C,EAAAA,IAAI1R,EAAM,KAAK,EAC9BkmE,EAASx0D,EAAAA,IAAI2zD,EAAgB,KAAK,EAElCC,EAAM5zD,EAAAA,IAAiB,EAEvBxT,EAAKinE,GAAW,EAEhBgB,EAAQ9kE,EAAAA,SAAS,IAAM,GAAGkP,EAAG,GAAG,KAAK,CAAC,IAAIrS,CAAE,EAAE,EAC9CkoE,EAAS/kE,EAAAA,SAAS,IAAM,GAAGkP,EAAG,GAAG,MAAM,CAAC,IAAIrS,CAAE,EAAE,EAChDmoE,EAAUhlE,EAAAA,SAAS,IAClB4kE,EAIE,GAHEjmE,EAAM,IAIhB,EACKsmE,EAAWjlE,EAAAA,SAAS,IACnB4kE,EAIE,GAHEjmE,EAAM,KAIhB,EACKumE,EAAellE,EAAAA,SAAS,IACxB4kE,EACKA,EAAc,UAGhBjmE,EAAM,SACd,EACKwmE,EAAQnlE,EAAAA,SAAS,IAEdrB,EAAM,QAASimE,GAAA,YAAAA,EAAe,QAAS,EAC/C,EACKriE,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,GAAG,OAAO,EACbA,EAAG,GAAG,MAAM,EACZA,EAAG,IAAI,QAAS,SAASg2D,EAAa,KAAK,EAAE,EAC7C,CACE,CAACh2D,EAAG,IAAI,QAAS,SAAS,CAAC,EAAG01D,GAAiBjmE,EAAM,QACrD,CAACuQ,EAAG,IAAI,QAAS,MAAM,CAAC,EAAG81D,EAAQ,MACnC,CAAC91D,EAAG,IAAI,QAAS,OAAO,CAAC,EAAG,CAAC81D,EAAQ,OAASC,EAAS,MACvD,CAAC/1D,EAAG,IAAI,QAAS,UAAU,CAAC,EAAG80D,EAAgB,MAC/C,CAAC90D,EAAG,IAAI,QAAS,UAAU,CAAC,EAAGvQ,EAAM,QAAA,CAEzC,CACD,EAED,GAAIimE,EAAe,CACjB,MAAM7vD,EAAoBtJ,EAAAA,SAAS,CACjC,IAAAw4D,EACA,MAAOrc,EACP,SAAUoc,EACV,YAAAoB,CAAA,CACD,EAED75D,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACP,MAAM08D,EAAY2D,EAAa,MAC/BA,EAAa,MAAQrgE,GAASA,IAAU,EAAIA,EAAQ08D,CAAA,CAExD,EAEA2gB,EAAc,cAAc7vD,CAAK,EAEjCxB,EAAAA,gBAAgB,IAAM,CACpBqxD,EAAc,gBAAgB7vD,CAAK,CAAA,CACpC,CAAA,MAEDxJ,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACPy8E,EAAgB,MAAQz8E,CAAA,CAE5B,EAGI,MAAA89E,EAAmBrlE,EAAAA,SAAS,IAAM,CACtC,OAAQmlE,EAAM,MAAO,CACnB,IAAK,GACL,IAAK,SACI,MAAA,GACT,IAAK,UACH,OAAON,EAAO,MAChB,QACE,OAAOb,EAAgB,KAAA,CAC3B,CACD,EAEKsB,EAAqBtlE,EAAAA,SAAS,IAC3B,CAACmlE,EAAM,OAASnB,EAAgB,KACxC,EAEIA,EAAgB,OACnBz4D,EAAA,MACEy4D,EACA,IAAM,CACJa,EAAO,MAAQ,EACjB,EACA,CAAE,KAAM,EAAK,CACf,EAGF,SAASO,EAAYZ,EAAmB,CACtCR,EAAgB,MAAQQ,EAExB7mC,EAAK,kBAAmB6mC,CAAQ,EACtB13D,EAAAnO,EAAM,SAAU6lE,CAAQ,CAAA,CAGpC,SAAS5e,EAAa4e,EAAW,CAACR,EAAgB,MAAO,CACnDrlE,EAAM,WAENimE,EAEYA,EAAA,YAAYhd,EAAa,MAAO4c,CAAQ,EAEtDY,EAAYZ,CAAQ,EACtB,CAGW,OAAA/zD,EAAA,CACX,gBAAAuzD,EACA,IAAAC,EACA,MAAAa,EACA,OAAAC,EACA,aAAAnf,CAAA,CACD,wBAIC50C,EAAA,mBAyCU,UAAA,CAzCA,uBAAOzO,EAAS,KAAA,CAAA,GACxB6O,EAAAA,mBAwBS,SAAA,CAvBN,GAAI0zD,EAAK,cACN,MAAJ,IAAIb,EACH,MAAKhzD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EACb,KAAK,SACL,KAAK,MACJ,gBAAe80D,EAAe,MAC9B,gBAAee,EAAM,MACrB,mBAAkBA,EAAM,MACxB,uBAAOnf,EAAY,EAAA,GAEpBx0C,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBgC,aAIOC,EAJa,OAAA,QAAA,CAAA,SAAU6yD,EAAA,OAA9B,IAIO,CAHLn0D,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,eAAkBqlE,EAAe,KAAA,CAAA,qBACxE,IAAuC,CAAvCn0D,EAAAA,YAAuCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAAzBh0C,QAAK5I,CAAA,EAAC,UAAU,CAAA,EAAA,KAAA,EAAA,CAAA,qCAIpCiJ,EAAAA,WAKOC,oBALP,IAKO,CAJMN,QAAAlS,CAAA,EAAM,oBAAjBqS,qBAEM,MAAA,OAFkB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAClCW,cAAgCgB,EAAAA,MAAApO,EAAA,EAAA,CAAzB,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,IAAA,sEACf,IACN4S,kBAAGV,EAAAA,MAAKlS,CAAA,EAAC,KAAK,EAAA,CAAA,YAGlBkR,EAAAA,YAcqBgB,EAAA,MAAAwpB,EAAA,EAAA,KAAA,mBAbnB,IAYM,CAXEgrC,EAAgB,sCADxBr0D,EAAAA,mBAYM,MAAA,OATH,GAAI+zD,EAAM,MACV,MAAK9zD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EACb,KAAK,WACL,SAAS,IACR,kBAAiB41D,EAAK,KAAA,GAEvB1zD,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAc,MAAKo1C,EAAA,eAAEzzC,QAAKlS,CAAA,EAAC,YAAY,CAAA,GACvDuS,aAAaC,EAAA,OAAA,SAAA,CAAA,wBARPm0D,EAAkB,KAAA,CAAA,+CChLlCC,GAAen3D,kBAAgB,CAC7B,KAAM,eACN,MAAO,CACL,IAAK,CACH,KAAM,OACN,QAAS,EACT,UAAY7mB,GACHA,GAAS,GAAKA,GAAS,GAElC,EACA,MAAO,CACL,KAAM,OACN,QAAS,EACT,UAAYA,GACHA,GAAS,GAAKA,GAAS,CAElC,EACA,WAAY,CACV,KAAM,OACN,QAAS,EACT,UAAYA,GACHA,GAAS,GAAKA,GAAS,CAChC,CAEJ,EACA,MAAO,CAAC,aAAc,WAAY,QAAQ,EAC1C,MAAMoX,EAAO,CAAE,KAAAg/B,GAAQ,CACrB,MAAM6nC,EAAan1D,EAAAA,KAAK,EAAI1R,EAAM,OAAS,GAAG,EACxC6wD,EAAcn/C,EAAA,IAAI1R,EAAM,WAAa,GAAG,EAE9C,IAAIu4B,EAAUsuC,EAAW,MACrBC,EAAWjW,EAAY,MACvBI,EACA8V,EACAC,EACAC,EAEJ,KAAM,CAAE,OAAQhwD,CAAQ,EAAIgC,GAAY,CACtC,QAAS,GACT,UAAW,CAAC/f,EAAOygB,IAAa,CAC9B,GAAIA,EAAS,IAAMA,EAAS,MAAQA,EAAS,MAAQA,EAAS,MAAO,CACnEzgB,EAAM,eAAe,EAErB,MAAMhP,EAAOgP,EAAM,QAAU,GAAKA,EAAM,OAAS,GAAM,EACjD29C,EAAOl9B,EAAS,IAAMA,EAAS,KAAO,GAAK,EAC3C5oB,EAAQ7G,EAAO2sD,EAEjBl9B,EAAS,IAAMA,EAAS,KAC1BktD,EAAW,OAAS91E,EAEpB8/D,EAAY,OAAS9/D,EAGRogE,EAAA,EACf54B,EAAUsuC,EAAW,MACrBC,EAAWjW,EAAY,MACVxmB,EAAA,CAAA,CACf,CACF,CACD,EAEK,CAAE,OAAQ68B,CAAQ,EAAI5sD,GAAU,CACpC,OAAQrD,EACR,QAAS,CAACb,EAAOld,IAAU,CACzB,GAAI,CAAC+d,EAAQ,OAAS/d,EAAM,OAAS,EAC5B,MAAA,GAGH,MAAAS,EAAOsd,EAAQ,MAAM,sBAAsB,EAC3C,CAAE,IAAAmR,EAAK,KAAAh3B,EAAM,MAAA+sB,EAAO,OAAAC,CAAW,EAAAzkB,EAExBs3D,EAAA9yC,EACC4oD,EAAA3oD,EAEdyoD,EAAW,OAAUG,EAAa5wD,EAAM,QAAUgS,GAAOhK,EAAU,IACnEyyC,EAAY,OAAUoW,EAAc7wD,EAAM,QAAUhlB,GAAQ+sB,EAAS,IAEtDgzC,EAAA,EACfnyB,EAAK,YAAY,EAEjB,IAAIiQ,EAAU,GAEV,KAAK,IAAI43B,EAAW,MAAQtuC,CAAO,GAAK,MAC1CA,EAAUsuC,EAAW,MACX53B,EAAA,IAGR,KAAK,IAAI4hB,EAAY,MAAQiW,CAAQ,GAAK,MAC5CA,EAAWjW,EAAY,MACb5hB,EAAA,IAGZA,GAAW5E,EAAa,CAC1B,EACA,OAAiBj0B,GAAA,CACfywD,EAAW,OAAUG,EAAa5wD,EAAM,QAAU2wD,EAAe,IACjElW,EAAY,OAAUoW,EAAc7wD,EAAM,QAAU66C,EAAc,IAEnDE,EAAA,EACF9mB,EAAA,CACf,EACA,MAAO,IAAM,CACXrL,EAAK,UAAU,CAAA,CACjB,CACD,EAEDpyB,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACIi+E,EAAA,OAAS,EAAIj+E,GAAS,IAClBuoE,EAAA,CACjB,EACA,CAAE,UAAW,EAAK,CACpB,EACAvkD,EAAA,MACE,IAAM5M,EAAM,WACHpX,GAAA,CACPioE,EAAY,MAAQjoE,EAAQ,IACbuoE,EAAA,CACjB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,SAASA,GAAiB,CACb0V,EAAA,MAAQ50E,GAAQtE,GAAWk5E,EAAW,MAAO,EAAG,GAAG,EAAG,CAAC,EACtDhW,EAAA,MAAQ5+D,GAAQtE,GAAWkjE,EAAY,MAAO,EAAG,GAAG,EAAG,CAAC,CAAA,CAGtE,SAASxmB,GAAe,CACtBrL,EAAK,SAAU,CACb,EAAGh/B,EAAM,IACT,EAAG6wD,EAAY,MAAQ,IACvB,EAAG5+D,GAAQ,EAAI40E,EAAW,MAAQ,IAAK,CAAC,CAAA,CACzC,CAAA,CAGI,MAAA,CACL,GAAI57D,GAAc,cAAc,EAChC,WAAA47D,EACA,YAAAhW,EACA,QAAAqW,EAEA,QAAAjwD,CAGF,CAAA,CAEJ,CAAC,gDAjLC5E,EAoBM,mBAAA,MAAA,CAnBJ,IAAI,UACH,MAAKC,EAAE,eAAAE,EAAA,GAAG,GAAE,SAAA,CAAA,EACb,SAAS,KACT,KAAK,QACJ,MAAKmzC,EAAAA,eAAA,CAAA,gBAAA,OAAkCnzC,EAAG,GAAA,cAAA,CAAA,IAI3CC,EAAAA,mBAAoD,MAAA,CAA9C,MAAKH,EAAE,eAAAE,EAAA,GAAG,GAAE,YAAA,CAAA,EAAgB,KAAK,MAAA,EAAA,KAAA,CAAA,EACvCC,EAAAA,mBAA+C,MAAA,CAAzC,MAAKH,EAAE,eAAAE,EAAA,GAAG,GAAE,OAAA,CAAA,EAAW,KAAK,MAAA,EAAA,KAAA,CAAA,EAClCC,EAAAA,mBAQM,MAAA,CAPH,MAAKH,EAAE,eAAAE,EAAA,GAAG,GAAE,iBAAA,CAAA,EACZ,MAAKmzC,EAAAA,eAAA,CAAA,IAAA,GAAoBnzC,EAAU,UAAA,IAAA,KAAA,GAAsBA,EAAW,WAAA,GAAA,CAAA,IAKrEC,EAAAA,mBAA6C,MAAA,CAAvC,MAAKH,EAAAA,eAAEE,EAAA,GAAG,GAAE,iBAAA,CAAA,CAAA,EAAA,KAAA,CAAA,0CCDxB20D,GAAe13D,kBAAgB,CAC7B,KAAM,WACN,MAAO,CACL,IAAK,CACH,KAAM,OACN,QAAS,EACT,UAAY7mB,GACHA,GAAS,GAAKA,GAAS,GAChC,CAEJ,EACA,MAAO,CAAC,aAAc,WAAY,QAAQ,EAC1C,MAAMoX,EAAO,CAAE,KAAAg/B,GAAQ,CACrB,MAAM6xB,EAAcn/C,EAAA,IAAI1R,EAAM,IAAM,GAAG,EAEvC,IAAI8mE,EAAWjW,EAAY,MACvBI,EACAgW,EAEJ,KAAM,CAAE,OAAQhwD,CAAQ,EAAIgC,GAAY,CACtC,QAAS,GACT,UAAW,CAAC/f,EAAOygB,IAAa,CAC1B,GAAAA,EAAS,MAAQA,EAAS,MAAO,CACnCzgB,EAAM,eAAe,EAGrB,MAAMnI,GADOmI,EAAM,QAAU,GAAKA,EAAM,OAAS,GAAM,IACjCygB,EAAS,KAAO,GAAK,GAE3Ck3C,EAAY,OAAS9/D,EAENogE,EAAA,EACf2V,EAAWjW,EAAY,MACVxmB,EAAA,CAAA,CACf,CACF,CACD,EAEK,CAAE,OAAQ68B,CAAQ,EAAI5sD,GAAU,CACpC,OAAQrD,EACR,QAAS,CAACb,EAAOld,IAAU,CACzB,GAAI,CAAC+d,EAAQ,OAAS/d,EAAM,OAAS,EAC5B,MAAA,GAGH,MAAAS,EAAOsd,EAAQ,MAAM,sBAAsB,EAC3C,CAAE,KAAA7lB,EAAM,MAAA+sB,CAAA,EAAUxkB,EAEXs3D,EAAA9yC,EACb0yC,EAAY,OAAUoW,EAAc7wD,EAAM,QAAUhlB,GAAQ+sB,EAAS,IAEtDgzC,EAAA,EACfnyB,EAAK,YAAY,EAEb,KAAK,IAAI6xB,EAAY,MAAQiW,CAAQ,GAAK,MAC5CA,EAAWjW,EAAY,MACVxmB,EAAA,EAEjB,EACA,OAAiBj0B,GAAA,CACfy6C,EAAY,OAAUoW,EAAc7wD,EAAM,QAAU66C,EAAc,IAEnDE,EAAA,EACF9mB,EAAA,CACf,EACA,MAAO,IAAM,CACXrL,EAAK,UAAU,CAAA,CACjB,CACD,EAEDpyB,EAAA,MACE,IAAM5M,EAAM,IACHpX,GAAA,CACKioE,EAAA,MAASjoE,EAAQ,IAAO,IACrBuoE,EAAA,CACjB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,SAASA,GAAiB,CACZN,EAAA,MAAQ5+D,GAAQtE,GAAWkjE,EAAY,MAAO,EAAG,GAAG,EAAG,CAAC,CAAA,CAGtE,SAASxmB,GAAe,CACtBrL,EAAK,SAAW6xB,EAAY,MAAQ,IAAO,GAAG,CAAA,CAGzC,MAAA,CACL,GAAI5lD,GAAc,cAAc,EAChC,YAAA4lD,EACA,QAAAqW,EAEA,QAAAjwD,CACF,CAAA,CAEJ,CAAC,gDA/GC5E,EAOM,mBAAA,MAAA,CANJ,IAAI,UACH,MAAKC,EAAE,eAAAE,EAAA,GAAG,GAAE,KAAA,CAAA,EACb,SAAS,KACT,KAAK,OAAA,EAAA,CAELC,EAAAA,mBAA8E,MAAA,CAAxE,MAAKH,EAAE,eAAAE,EAAA,GAAG,GAAE,aAAA,CAAA,EAAkB,MAAKmzC,0BAAanzC,EAAW,WAAA,GAAA,CAAA,CAAA,EAAA,KAAA,CAAA,sCCoBrE40D,GAAe33D,kBAAgB,CAC7B,KAAM,aACN,MAAO,CACL,IAAK,CACH,KAAM,OACN,QAAS,KACA,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,GAE5B,UAAY7mB,GACH,MAAOA,GAAS,MAAOA,GAAS,MAAOA,CAElD,EACA,MAAO,CACL,KAAM,OACN,QAAS,EACT,UAAYA,GACHA,GAAS,GAAKA,GAAS,CAChC,CAEJ,EACA,MAAO,CAAC,aAAc,WAAY,QAAQ,EAC1C,MAAMoX,EAAO,CAAE,KAAAg/B,GAAQ,CACrB,MAAM6xB,EAAcn/C,EAAA,IAAI1R,EAAM,MAAQ,GAAG,EAEzC,IAAI8mE,EAAWjW,EAAY,MACvBI,EACAgW,EAEJ,KAAM,CAAE,OAAQhwD,CAAQ,EAAIgC,GAAY,CACtC,QAAS,GACT,UAAW,CAAC/f,EAAOygB,IAAa,CAC1B,GAAAA,EAAS,MAAQA,EAAS,MAAO,CACnCzgB,EAAM,eAAe,EAGrB,MAAMnI,GADOmI,EAAM,QAAU,GAAKA,EAAM,OAAS,GAAM,IACjCygB,EAAS,KAAO,GAAK,GAE3Ck3C,EAAY,OAAS9/D,EAENogE,EAAA,EACf2V,EAAWjW,EAAY,MACVxmB,EAAA,CAAA,CACf,CACF,CACD,EAEK,CAAE,OAAQ68B,CAAQ,EAAI5sD,GAAU,CACpC,OAAQrD,EACR,QAAS,CAACb,EAAOld,IAAU,CACzB,GAAI,CAAC+d,EAAQ,OAAS/d,EAAM,OAAS,EAC5B,MAAA,GAGH,MAAAS,EAAOsd,EAAQ,MAAM,sBAAsB,EAC3C,CAAE,KAAA7lB,EAAM,MAAA+sB,CAAA,EAAUxkB,EAEXs3D,EAAA9yC,EACb0yC,EAAY,OAAUoW,EAAc7wD,EAAM,QAAUhlB,GAAQ+sB,EAAS,IAEtDgzC,EAAA,EACfnyB,EAAK,YAAY,EAEb,KAAK,IAAI6xB,EAAY,MAAQiW,CAAQ,GAAK,MAC5CA,EAAWjW,EAAY,MACVxmB,EAAA,EAEjB,EACA,OAAiBj0B,GAAA,CACfy6C,EAAY,OAAUoW,EAAc7wD,EAAM,QAAU66C,EAAc,IAEnDE,EAAA,EACF9mB,EAAA,CACf,EACA,MAAO,IAAM,CACXrL,EAAK,UAAU,CAAA,CACjB,CACD,EAEKqoC,EAAYhmE,EAAAA,SAAS,IAAM,CAC/B,KAAM,CAAE,EAAA9U,EAAG,EAAAC,EAAG,EAAAC,GAAMuT,EAAM,IAE1B,MAAO,GAAGzT,CAAC,KAAKC,CAAC,KAAKC,CAAC,EAAA,CACxB,EAEc0kE,EAAA,EAEfvkD,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPioE,EAAY,MAAQjoE,EAAQ,IACbuoE,EAAA,CACjB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,SAASA,GAAiB,CACZN,EAAA,MAAQ5+D,GAAQtE,GAAWkjE,EAAY,MAAO,EAAG,GAAG,EAAG,CAAC,CAAA,CAGtE,SAASxmB,GAAe,CACjBrL,EAAA,SAAU6xB,EAAY,MAAQ,GAAG,CAAA,CAGjC,MAAA,CACL,GAAI5lD,GAAc,cAAc,EAChC,YAAA4lD,EACA,QAAAqW,EAEA,UAAAG,EAEA,QAAApwD,CACF,CAAA,CAEJ,CAAC,gDA3IC5E,EAaM,mBAAA,MAAA,CAZJ,IAAI,UACH,MAAKC,EAAE,eAAAE,EAAA,GAAG,GAAE,OAAA,CAAA,EACb,SAAS,KACT,KAAK,OAAA,EAAA,CAELC,EAAAA,mBAKO,MAAA,CAJJ,MAAKH,EAAE,eAAAE,EAAA,GAAG,GAAE,SAAA,CAAA,EACZ,MAAKmzC,EAAAA,eAAA,CAA+D,gBAAA,kCAAAnzC,EAAA,SAAS,gBAAgBA,EAAS,SAAA,SAAA,CAAA,WAIzGC,EAAAA,mBAAgF,MAAA,CAA1E,MAAKH,EAAE,eAAAE,EAAA,GAAG,GAAE,eAAA,CAAA,EAAoB,MAAKmzC,0BAAanzC,EAAW,WAAA,GAAA,CAAA,CAAA,EAAA,KAAA,CAAA,sCCO1D80D,GAAmBn6D,GAAW,CACzC,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAwB,EAChC,MAAO,CAAC,OAAQ,MAAM,EACtB,QAASrB,EACT,OAAQ,OACR,MAAOA,EACP,SAAUA,EACV,eAAgB,OAChB,QAASA,EACT,SAAU,CACR,KAAM,CAAC,QAAS,KAAK,EACrB,QAAS,IACX,EACA,UAAW,OACX,SAAUC,GACV,aAAcD,EACd,UAAWA,EACX,WAAY,OACZ,YAAa,OACb,OAAQyB,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OACb,SAAUzB,EACV,aAAcA,EACd,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,YAAaA,EACb,UAAWA,EACX,YAAa,OACb,MAAO,OACP,SAAUmB,EAAsC,EAChD,eAAgBA,EAAU,EAC1B,eAAgBA,EAAU,EAC1B,QAASA,EAAU,EACnB,SAAUA,EAA2C,EACrD,WAAYA,EAA2C,CACzD,CAAC,EChDYq5D,GAAmB,OAAO,OAAO,CAC5C,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,CAAC,EAEYC,GAAgB,IAAMl5E,GAAS,EAAG,EAAG,CAAC,sPCM7C,KAAA,CACJ,MAAAy3C,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,WAAA3C,EACA,cAAA4C,EACA,cAAAC,GACEhD,GAA4B,IAAM,QAAA,OAAAriC,GAAAwd,GAAU,QAAV,YAAAxd,GAAiB,QAAO,EAExDwP,EAAKtF,GAAc,cAAc,EAGjCjL,EAAQiM,GAAS,cADRsF,EAC+B,CAC5C,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,QAAS,GACT,OAAQ,CACN,QAAS,MACT,cAAoB,CAAC,MAAO,MAAO,MAAO,KAAK,EAAE,SAASv9C,EAAK,CACjE,EACA,MAAO,GACP,SAAU,IAAMirB,EAAS,MACzB,eAAgB,IAAMtD,EAAG,GAAG,MAAM,EAClC,QAAS,GACT,SAAU,GACV,UAAW,CACT,QAAS,SACT,UAAW3nB,IAASisC,GAAmB,SAASjsC,EAAK,CACvD,EACA,SAAU,GACV,aAAc,GACd,UAAW,GACX,WAAY,KACZ,YAAa,KACb,OAAQ6lB,GAAe,EACvB,YAAa,GACb,OAAQA,GAAe,EACvB,YAAa,GACb,SAAU,GACV,aAAc,GACd,QAAS,IAAMw3B,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,YAAa,KACb,UAAW,GACX,YAAa,KACb,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKuwB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERlI,EAAQU,GAAS,EACjB1H,EAASI,GAAU,cAAe07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAExDxW,EAAUkoB,MAAI,EAAI,EAClB2rC,EAAiB3rC,EAAAA,IAAI1R,EAAM,OAAO,EAClC8nC,EAAep2B,MAAc,IAAK,EAClC+1D,EAAe/1D,MAAI,CAAC,EACpBw1D,EAAUx1D,MAAI,EAAK,EACnB0K,EAAYgiB,EAAAA,MAAMp+B,EAAO,WAAW,EACpCg1B,EAAWoJ,EAAAA,MAAMp+B,EAAO,UAAU,EAClC0nE,EAAkBh2D,MAAI,CAAC,EACvBi2D,EAAmBj2D,MAAI,EAAK,EAElCs7C,GAAWhtD,EAAM,KAAK,EAEhB,MAAA4nE,EAAUl2D,MAAI,IAAI,EAClBm2D,EAAMn2D,MAAI,IAAI,EACdo2D,EAAUp2D,MAAI,IAAI,EAClBq2D,EAAar2D,MAAI,IAAI,EACrBi4B,EAAQj4B,MAAI,IAAI,EAChBs2D,EAASt2D,MAAI,IAAI,EACjBu2D,EAAUv2D,MAAI,IAAI,EAElBuF,EAAU7C,GAAgB4pC,EAAkB,EAC5C9oB,GAASxjB,EAAAA,IAAmB,EAC5B,CAAE,UAAA6M,GAAW,WAAA6W,EAAY,aAAAK,EAAA,EAAiBX,GAAU,CACxD,UAAA1Y,EACA,SAAA4Y,EACA,QAAA/d,EACA,OAAQ5V,EAAAA,SAAS,IAAA,QAAM,OAAAN,GAAAm0B,GAAO,QAAP,YAAAn0B,GAAc,QAAO,EAC5C,OAAQ,EAAA,CACT,EACK,CAAE,QAAAmW,EAAA,EAAYF,GAASuH,EAAS,EAEhC2pD,GAAW7mE,EAAAA,SAAS,IACjB,CACLumE,EAAQ,MACRC,EAAI,MACJC,EAAQ,MACRC,EAAW,MACXp+B,EAAM,MACNq+B,EAAO,MACPC,EAAQ,KAAA,EACR,OAAO,OAAO,CACjB,EAEK5/B,GAAY32B,EAAAA,IAAe,CAC/B,GAAGo2B,EAAa,MAChB,EAAG2/B,EAAa,MAChB,OAAQ,MAAA,CACT,EAEK7jE,GAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,YAAY,CAAC,EAAG,GACvB,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAG/mB,EAAQ,OAAS,CAAC6zD,EAAe,MACnD,CAAC9sC,EAAG,GAAG,SAAS,CAAC,EAAG8sC,EAAe,MACnC,CAAC9sC,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAGvQ,EAAM,MACxB,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,SACxC,EACD,EACK2L,GAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D6jD,GAAgBxiD,EAAAA,SAAS,IAAM,CAC7B,MAAAyiD,GAAUvzC,EAAG,GAAG,UAAU,EAEzB,MAAA,CACL,CAACuzC,EAAO,EAAG,GACX,CAAC,GAAGA,EAAO,YAAY,EAAG9jD,EAAM,SAChC,CAAC,GAAG8jD,EAAO,YAAY,EAAGn4C,GAAS,MACnC,CAAC,GAAGm4C,EAAO,WAAW,EAAG9jD,EAAM,QAC/B,CAAC,GAAG8jD,EAAO,KAAK9jD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,UAC9C,CAAC,GAAG8jD,EAAO,WAAW,EAAGzG,EAAe,MACxC,CAAC,GAAGyG,EAAO,KAAK9jD,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,SAClD,CAAA,CACD,EACKzS,EAAM8T,EAAAA,SAAS,IAAM,CACzB,KAAM,CAAE,EAAAzU,GAAG,EAAAC,GAAG,EAAAI,IACZ66C,EAAa,OAASuV,EAAe,MACjCvV,EAAa,MACZO,GAAU,OAAS,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAEtC,OAAA36C,GAASd,GAAGC,GAAGI,EAAC,CAAA,CACxB,EACK2B,EAAMyS,EAAAA,SAAS,IAAM,CACzB,KAAM,CAAE,EAAA9U,GAAG,EAAAC,GAAG,EAAAC,IAAMc,EAAI,MAExB,OAAIyS,EAAM,MACDjR,GAAUxC,GAAGC,GAAGC,GAAGg7E,EAAa,KAAK,EAGvC/4E,GAASnC,GAAGC,GAAGC,EAAC,CAAA,CACxB,EACK07E,EAAe9mE,EAAAA,SAAS,IACvBrB,EAAM,SAEP,MAAM,QAAQA,EAAM,QAAQ,EACvBA,EAAM,SAGRunE,GANqB,CAAC,CAO9B,EACKz+B,EAAYznC,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,QAAUA,EAAM,MAAM,OAAO,EACjFspC,EAAYjoC,EAAAA,SAAS,IAClB,CAACrB,EAAM,UAAY,CAAC2L,GAAS,OAAS3L,EAAM,WAAakX,GAAQ,OAAS,CAAC1tB,EAAQ,KAC3F,EACK4+E,EAAiB/mE,EAAAA,SAAS,IAAMgnE,GAAkBroE,EAAM,MAAM,CAAC,EAC/DsoE,EAAajnE,EAAAA,SAAS,IAAM,QAE9B,OAAAN,GAAAf,EAAM,YAAcqoE,GAAkBroE,EAAM,WAAW,EAAIooE,EAAe,QAA1E,YAAArnE,GACC,UAAS,CACb,EAED6L,EAAA,MACE,IAAM5M,EAAM,QACHpX,IAAA,CACPy0D,EAAe,MAAQz0D,EAAA,CAE3B,EACAgkB,QAAMywC,EAAyBz0D,IAAA,CAC7BA,IAAS6sC,GAAa,CAAA,CACvB,EACD7oB,EAAA,MACE,IAAM5M,EAAM,MACHpX,IAAA,CACPokE,GAAWpkE,EAAK,EACNy/C,GAAA,MAAQ,CAAE,GAAGP,EAAa,MAAO,EAAG2/B,EAAa,MAAO,OAAQ,MAAO,CAAA,CAErF,EACA76D,EAAA,MACE,IAAM5M,EAAM,SACHpX,IAAA,CACHA,IACF66D,EAAW,EAAK,CAClB,CAEJ,EAEa3xC,EAAA,CACX,MAAAi0B,EACA,QAAAv8C,EACA,eAAA6zD,EACA,aAAAvV,EACA,aAAA2/B,EACA,IAAAl6E,EACA,IAAAqB,EACA,WAAA05E,EACA,QAAArxD,EACA,UAAAsH,GACA,OAAA2W,GACA,cAAA+oB,GACA,MAAA3X,GACA,KAAAuD,EAAA,CACD,EAED,SAASmjB,GAAWpkE,GAAqB,CACvC,GAAIA,GAAO,CACT,KAAM,CAAE,EAAA2D,GAAG,EAAAC,GAAG,EAAAC,GAAG,EAAAe,EAAE,EAAIH,GAAiBzE,EAAK,EAE7CY,EAAQ,MAAQ,GAChBs+C,EAAa,MAAQx5C,GAAS/B,GAAGC,GAAGC,EAAC,EACrCg7E,EAAa,MAAQj6E,EAAA,MAErBhE,EAAQ,MAAQ,GAChBs+C,EAAa,MAAQ0/B,GAAc,EACnCC,EAAa,MAAQ,CACvB,CAGF,SAAShkB,EAAW/G,GAAkB,CAChCW,EAAe,QAAUX,KAE7BW,EAAe,MAAQX,GAEvB1d,EAAK,iBAAkB0d,EAAO,EACpBvuC,EAAAnO,EAAM,SAAU08C,EAAO,EAAA,CAGnC,SAAS2rB,GAAkBzyE,GAAqB,CAC1C,IAAAzJ,GAEJ,GAAIyJ,KAAW,MAAO,CACpB,KAAM,CAAE,EAAArJ,GAAG,EAAAC,GAAG,EAAAC,IAAMc,EAAI,MAEpByS,EAAM,MACR7T,GAAQ4C,GAAUxC,GAAGC,GAAGC,GAAGg7E,EAAa,KAAK,EAErCt7E,GAAAuC,GAASnC,GAAGC,GAAGC,EAAC,CAC1B,KACK,CACL,OAAQmJ,GAAQ,CACd,IAAK,MAAO,CACFzJ,GAAA,CAAE,GAAGoB,EAAI,KAAM,EACvBpB,GAAM,EAAI,KAAK,MAAMA,GAAM,CAAC,EAC5BA,GAAM,EAAI,KAAK,MAAMA,GAAM,CAAC,EAC5BA,GAAM,EAAI,KAAK,MAAMA,GAAM,CAAC,EAE5B,KAAA,CAEF,IAAK,MAAO,CACV,KAAM,CAAE,EAAAS,GAAG,EAAAC,GAAG,EAAAI,IAAM66C,EAAa,MAEzB37C,GAAA+B,GAAStB,GAAGC,GAAGI,EAAC,EACxBd,GAAM,EAAI,KAAK,MAAMA,GAAM,CAAC,EAC5BA,GAAM,EAAI8F,GAAQ9F,GAAM,EAAG,CAAC,EAC5BA,GAAM,EAAI8F,GAAQ9F,GAAM,EAAG,CAAC,EAE5B,KAAA,CAEF,QACUA,GAAA,CAAE,GAAG27C,EAAa,KAAM,EAChC37C,GAAM,EAAI,KAAK,MAAMA,GAAM,CAAC,EAC5BA,GAAM,EAAI8F,GAAQ9F,GAAM,EAAG,CAAC,EAC5BA,GAAM,EAAI8F,GAAQ9F,GAAM,EAAG,CAAC,CAC9B,CAGFA,GAAM,EAAI8F,GAAQw1E,EAAa,MAAO,CAAC,CAAA,CAGlC,OAAAt7E,EAAA,CAGT,SAAS6xD,IAAqB,CACvBkpB,EAAQ,QACX/4D,EAAUnO,EAAM,cAAc,EAE1BA,EAAM,cAAgBq9C,EAAe,QACvCoG,EAAW,EAAK,EAChBt1C,EAAUnO,EAAM,cAAc,GAElC,CAGF,SAASi+C,IAAgB,CACnBj+C,EAAM,UAAY2L,GAAS,OAEpB83C,EAAA,CAACpG,EAAe,KAAK,CAAA,CAGlC,SAAS1S,IAAc,CACjB3qC,EAAM,UAAY2L,GAAS,OAE3B3L,EAAM,YACRyjD,EAAW,EAAK,EAChBzkB,EAAK,eAAgB,EAAE,EACb7wB,EAAAnO,EAAM,SAAU,EAAE,EAE5BsT,EAAAA,SAAS,IAAM,CACb05C,GAAW,IAAI,EACJzpB,EAAA,EACXp1B,EAAUnO,EAAM,OAAO,CAAA,CACxB,EACH,CAGF,SAASuoE,IAAgB,CACnBvoE,EAAM,UAAY2L,GAAS,QAErB08B,GAAA,MAAQ,CAAE,GAAGP,EAAa,MAAO,EAAG2/B,EAAa,MAAO,OAAQ,MAAO,EACjFj+E,EAAQ,MAAQ,GAChBi6D,EAAW,EAAK,EACHpZ,GAAA,EAAA,CAGf,SAASA,IAAe,CACtB,MAAMl+C,GAAQi8E,EAAe,MAE7BppC,EAAK,eAAgB7yC,EAAK,EAC1Bi6C,EAAcj6C,EAAK,EACTgiB,EAAAnO,EAAM,SAAU7T,EAAK,EACjB+5C,EAAA,CAAA,CAGhB,SAASsiC,GAAoB,CAAE,EAAA37E,GAAG,EAAAI,IAAe,CAC/C66C,EAAa,MAAM,EAAIj7C,GACvBi7C,EAAa,MAAM,EAAI76C,EAAA,CAGzB,SAASw7E,GAAgBZ,GAAa,CACpC//B,EAAa,MAAM,EAAI+/B,EAAA,CAGzB,SAASa,GAAkB54E,GAAe,CACxC23E,EAAa,MAAQ33E,EAAA,CAGvB,SAAS64E,GAAiB//E,GAAe,CACvC,KAAM,CAAE,EAAA2D,GAAG,EAAAC,GAAG,EAAAC,GAAG,EAAAe,EAAE,EAAIH,GAAiBzE,EAAK,EAE7Ck/C,EAAa,MAAQx5C,GAAS/B,GAAGC,GAAGC,EAAC,EACrCg7E,EAAa,MAAQj6E,EAAA,CAGvB,SAASo7E,GAAoBz8E,GAAe,CAC1C,KAAM,CAAE,EAAAI,GAAG,EAAAC,GAAG,EAAAC,GAAG,EAAAe,EAAE,EAAIH,GAAiBlB,EAAK,EAE7C27C,EAAa,MAAQx5C,GAAS/B,GAAGC,GAAGC,EAAC,EACrCg7E,EAAa,MAAQj6E,GAEX2gB,EAAAnO,EAAM,WAAYooE,EAAe,KAAK,CAAA,CAGlD,SAASS,GAAcC,GAAe,CAC/BA,GAKH5B,EAAQ,MAAQ,GAJhB,WAAW,IAAM,CACfA,EAAQ,MAAQ,IACf,CAAC,CAGN,CAGF,SAAS6B,GAAc7vE,GAAsB,QACvC,GAAA1Q,IAAY60D,EAAe,MAAO,CAC9B,MAAA2rB,GAAW,UAAY,SAAS,cAEtC,GAAI,CAACA,GAAU,OAEf9vE,GAAM,eAAe,EAErB,MAAM+qB,GAAQ/qB,GAAM,SACd+vE,GAAS,MAAM,KAAKf,GAAS,KAAK,EAClCp3E,GAAQm4E,GAAO,UAAkBC,IAAA,CACrC,MAAMrwE,GAAKpP,GAAUy/E,EAAI,EAAIA,GAAOA,GAAK,IAEzC,OAAOrwE,KAAOmwE,IAAYnwE,GAAG,SAASmwE,EAAQ,CAAA,CAC/C,EAEG,IAAAG,GAEC,CAACr4E,IAEKmzB,GAAQ,CAACnzB,GAAQA,KAAUm4E,GAAO,OAAS,GACpDE,GAAU5qD,GAAU,MAEpB4qD,GAAUF,GAAOn4E,IAASmzB,GAAQ,GAAK,EAAE,EAJzCklD,GAAUllD,GAAQlnB,GAAQksE,EAAM,EAAIA,GAAO,CAAC,EAO1CE,KACE,OAAOA,GAAQ,OAAU,WAC3BA,GAAQ,MAAM,GAEdpoE,GAAAooE,GAAQ,MAAR,MAAApoE,GAAa,QAEjB,CACF,CAGF,SAASqoE,IAAuB,CAC9B1B,EAAgB,MAAQ,EACxBC,EAAiB,MAAQ,EAAA,CAG3B,SAAS0B,GAAuBnwE,GAAsB,CAC9C,MAAAnQ,GAAMmQ,GAAM,MAAQA,GAAM,IAC1BowE,GAAgBnB,EAAa,MAAM,OAEzC,OAAQp/E,GAAK,CACX,IAAK,UACL,IAAK,YAAa,CACA2+E,EAAA,QAChB,KAAA,CAEF,IAAK,YACL,IAAK,aAAc,CACDA,EAAA,QAChB,KAAA,CAEF,IAAK,QACL,IAAK,QACL,IAAK,IAAK,CACR,MAAMv7E,GAAQg8E,EAAa,MAAMT,EAAgB,KAAK,EAEtDv7E,IAASy8E,GAAoBz8E,EAAK,EAClC,KAAA,CACF,CAGcu7E,EAAA,OAASA,EAAgB,MAAQ4B,IAAiBA,EAAA,CAGpE,SAASC,GAAgBrwE,GAAsB,QACzC8G,EAAM,SACRyjD,EAAW,EAAK,GAEhBvqD,GAAM,eAAe,EAEjBmkD,EAAe,OACHkrB,GAAA,GACdxnE,GAAAwd,GAAU,QAAV,MAAAxd,GAAiB,SAEjB0iD,EAAW,EAAI,EAEnB,CAGF,SAAS+lB,IAAgB,QACvB/lB,EAAW,EAAK,GAChB1iD,GAAAwd,GAAU,QAAV,MAAAxd,GAAiB,OAAM,CAGzB,SAASulC,GAAMz7C,GAAwB,SAC3BkW,GAAAwd,GAAA,QAAA,MAAAxd,GAAO,MAAMlW,GAAO,CAGhC,SAASg/C,IAAO,SACd9oC,GAAAwd,GAAU,QAAV,MAAAxd,GAAiB,MAAK,+BAKtBsR,EAAA,mBA+MM,MAAA,CA9MH,GAAIH,QAAK6zB,CAAA,UACN,UAAJ,IAAI9uB,EACH,uBAAOrT,GAAS,KAAA,EACjB,KAAK,QACJ,gBAAesO,EAAA,MAAA1X,EAAA,EAAY0X,EAAAA,MAAAlS,CAAA,EAAM,QAAQ,EACzC,gBAAekS,EAAAA,MAAW1X,EAAA,EAAC6iD,EAAc,KAAA,EAC1C,gBAAc,UACb,kBAAiBnrC,QAAO8zB,CAAA,EACxB,QAAOiY,GACP,UAAO,4BAAW8qB,GAAa,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,CAAA,aAChBQ,GAAe,CAAA,OAAA,CAAA,aACdC,GAAa,CAAA,QAAA,CAAA,CAAA,IAE9B/2D,EAAAA,mBAmGM,MAAA,SAnGG,YAAJ,IAAI8L,GAAa,uBAAOslC,GAAa,KAAA,EAAE,SAAS,GAAA,GACnDtxC,aAiGOC,GAAA,OAAA,UAAA,CA/FJ,MAAOjlB,EAAG,MACV,MAAOk6E,EAAY,MACnB,MAAOj+E,EAAO,KAAA,EAJjB,IAiGO,CA3FL0nB,cA0FWgB,EAAAA,MAAAb,EAAA,EAAA,CAzFR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QACtB,KAAe,CAAA,MAAAzS,EAAA,MAAY,MAAAk6E,EAAA,YAAqBj+E,EAAO,KAAA,CAAA,qBAExD,IAUM,CATEs/C,EAAS,qBADjBz2B,EAAAA,mBAUM,MAAA,OARH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,iBAAA,CAAA,MAAWzzC,EAAAA,MAAKlS,CAAA,EAAC,WAAW,CAAA,CAAA,GAElCuS,EAAAA,WAIOC,sBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,6EAIzByS,EAAAA,mBA8BM,MAAA,CA9BA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAChBkC,EAAAA,mBAYM,MAAA,CAZA,MAAKH,EAAA,eAAA,CAAGJ,EAAAA,SAAG,aAAcu3D,GAAS,WAAIv3D,QAAE3B,CAAA,EAAC,IAAG,SAAA,YAAA,CAAA,CAAA,CAAA,GACnC,CAAA8sC,EAAA,OAAkB7zD,EAAO,qBAAtC2oB,EAAA,YAAoED,QAAApO,EAAA,EAAAmiD,EAAAA,eAAAvzC,EAAAA,WAAA,CAAA,IAAA,GAApBR,EAAAA,MAAK5I,CAAA,EAAC,KAAK,CAAA,EAAA,KAAA,EAAA,kBAC3D+I,EAAAA,mBASO,MAAA,OAPJ,MAAKszC,EAAAA,eAAA,oDAAkHp4D,EAAG,MAAC,CAAC,KAAKA,EAAA,MAAI,CAAC,KAAKA,EAAG,MAAC,CAAC,KAA0B8vD,EAAA,MAAiBoqB,EAAA,MAAep/B,GAAA,MAAU,qBAS9MohC,GAAS,yBAApBp3D,EAAAA,mBAeM,MAAA,OAfiB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACjCgC,aAaOC,GAAA,OAAA,QAAA,CAXJ,MAAOjlB,EAAG,MACV,MAAOk6E,EAAY,MACnB,MAAOj+E,EAAO,MACd,MAAO8+E,EAAU,KAAA,EALpB,IAaO,CANLp3D,cAKWgB,EAAAA,MAAAb,EAAA,EAAA,CAJR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MACtB,YAAezS,EAAG,MAAA,MAASk6E,QAAqB,MAAAj+E,EAAA,YAAgB8+E,EAAU,KAAA,CAAA,qBAE3E,IAAgB,qCAAbA,EAAU,KAAA,EAAA,CAAA,CAAA,sEAMZp2D,EAAAA,MAAAlS,CAAA,EAAM,SAqBFkS,EAAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAAlS,CAAA,EAAM,uBADtCqS,EAAAA,mBAGO,MAAA,OADJ,MAAKC,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,QAAE3B,CAAA,EAAC,IAAG,OAAA,aAAA,EAAyB2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,uDAvB9D8B,qBAoBM,MAAA,OAlBH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,EAAAA,eAAA,CAAyB,MAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,oBAAoCspC,EAAS,OAAIp3B,EAAAA,MAAKlS,CAAA,EAAC,QAAO,KAAA,OAKnGuS,EAAAA,WAWOC,sBAXP,IAWO,CAVLtB,cASWgB,EAAAA,MAAAb,EAAA,EAAA,CATA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAMQ,CALAkS,QAAAlS,CAAA,EAAM,oBADd,EAAAmS,cAMQD,EAAAA,MAAApO,EAAA,EAAA,OAJL,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,OACZ,MAAKsS,EAAAA,eAAA,CAAyB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAe,OAAA,CAAA,EAAA,CAAA2B,EAAAA,MAAAlS,CAAA,EAAM,2CAIzDqgC,EAAAA,UAAA,EAAAluB,cAAqED,EAAAA,MAArEpO,EAAA,EAAA4O,EAAAA,WAAqE,CAAhD,IAAA,CAAA,EAAAR,QAAA5I,CAAA,EAAM,UAAS,CAAG,MAAO4I,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,sDAQzDW,EAAAA,YAkBakB,EAAAA,WAAA,CAlBA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IASS,CARD+4B,EAAS,qBADjBj3B,EAAAA,mBASS,SAAA,OAPN,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EAC7B,KAAK,SACL,SAAS,KACR,aAAY2B,EAAA,MAAA5P,CAAA,EAAO,UAAU,MAC7B,wBAAYqoC,GAAW,CAAA,MAAA,CAAA,CAAA,GAExBz5B,EAAAA,YAAkCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAApBh0C,QAAK5I,CAAA,EAAC,KAAK,CAAA,EAAA,KAAA,EAAA,CAAA,UAEX4I,QAAAlS,CAAA,EAAM,uBAAtBqS,EAAA,mBAMM,MAAA,OAN0B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAC1DW,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,WAAM,aAAeA,QAAK5I,CAAA,EAAC,QAAQ,0HAOtD4H,cA4FSgB,EAAAA,MAAAotC,EAAA,EAAA,SA3FH,SAAJ,IAAIpqB,GACH,wBAAQhjB,QAAE3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,EAC9B,QAAS8sC,EAAc,MACvB,GAAInrC,QAAUkjB,CAAA,EACd,WAAYljB,EAAAA,MAAKlS,CAAA,EAAC,eAClB,MAAOkS,EAAA,MAAAlS,CAAA,EAAM,cAAgBkS,QAAUkjB,CAAA,EACvC,sCAAD,IAAW,CAAA,EAAA,CAAA,MAAA,CAAA,GACV,UAAO,4BAAW2zC,GAAa,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,CAAA,aAChBQ,GAAe,CAAA,OAAA,CAAA,aACdC,GAAa,CAAA,QAAA,CAAA,CAAA,sBAE9B,IA+EM,CA/EN/2D,EAAAA,mBA+EM,MAAA,CA/EA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBkC,EAAAA,mBA8CM,MAAA,CA9CA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAChBW,EAAAA,YAQgBw4D,GAAA,SAPV,UAAJ,IAAI9B,EACH,IAAK9/B,EAAY,MAAC,EAClB,WAAYA,EAAY,MAAC,EACzB,MAAOA,EAAY,MAAC,EACpB,8BAAY+gC,GAAa,EAAA,GACzB,4BAAUA,GAAa,EAAA,GACvB,SAAQL,EAAA,uCAEXt3D,EAAAA,YAMYy4D,GAAA,SALN,MAAJ,IAAI9B,EACH,IAAK//B,EAAY,MAAC,EAClB,8BAAY+gC,GAAa,EAAA,GACzB,4BAAUA,GAAa,EAAA,GACvB,SAAQJ,oBAGHv2D,QAAAlS,CAAA,EAAM,qBADdmS,cAQcy3D,GAAA,eANR,UAAJ,IAAI9B,EACH,IAAKv6E,EAAG,MACR,MAAOk6E,EAAY,MACnB,8BAAYoB,GAAa,EAAA,GACzB,4BAAUA,GAAa,EAAA,GACvB,SAAQH,EAAA,uDAGHx2D,QAAAlS,CAAA,EAAM,wBADdqS,qBAmBM,MAAA,eAjBA,aAAJ,IAAI01D,EACH,MAAKz1D,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EACb,SAAS,KACR,QAAO64D,GACP,yBAAMzB,EAAgB,MAAA,IACtB,UAAS0B,EAAA,IAEVhpC,EAAAA,UAAA,EAAA,EAAAhuB,EASO,mBAAAqsB,WARmB,KAAAC,EAAA,WAAAwpC,EAAA,MAAhB,CAAApwE,GAAMjH,oBADhBuhB,EAAA,mBASO,MAAA,CAPJ,IAAKvhB,GACL,MAAKwhB,EAAAA,eAAA,CAAqB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,eAAA,CAAA,EAAA,GAA2C,CAAA2B,QAAA3B,CAAA,EAAG,IAAG,gBAAA,SAAA,CAAA,EAA+Bo3D,SAAoBD,EAAA,QAAoB52E,EAAA,GAIvJ,wCAA0BiH,GAAI,EAC9B,QAAKijD,IAAE4tB,GAAoB7wE,EAAI,CAAA,4DAItC0a,EAAAA,mBA8BM,MAAA,CA9BA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAEP2B,EAAA,MAAAlS,CAAA,EAAM,mDADfmS,EAAA,YASSD,QAAA8zC,EAAA,EAAA,eAPH,QAAJ,IAAIrc,EACJ,QAAA,GACC,MAAKr3B,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,KAAK,QACJ,MAAO3hB,EAAG,MAAC,YAAW,EACtB,QAAS,GACT,SAAQ+5E,EAAA,6BAGHz2D,QAAAlS,CAAA,EAAM,uBADd,EAAAmS,cASSD,EAAAA,MAAA45C,EAAA,EAAA,eAPH,SAAJ,IAAIkc,EACJ,QAAA,GACA,KAAA,GACA,KAAK,QACJ,QAAOr9B,EAAA,qBAER,IAAuC,CAApCh4B,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,YAAckS,EAAAA,MAAA5P,CAAA,EAAO,MAAM,EAAA,CAAA,CAAA,0CAEtC4O,cAQSgB,EAAAA,MAAA45C,EAAA,EAAA,SAPH,UAAJ,IAAImc,EACJ,QAAA,GACA,KAAK,UACL,KAAK,QACJ,QAAOM,EAAA,qBAER,IAAyC,CAAtC51D,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAAA,MAAA5P,CAAA,EAAO,OAAO,EAAA,CAAA,CAAA,qGCjtBrCunE,GAAsB38D,GAAU,CAC3C,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAC,EACnB,EACA,OAAQ,CACN,KAAM,OACN,QAAS,KAAO,CAAC,EACnB,EACA,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAC,EACnB,EACA,OAAQ,CACN,KAAM,OACN,QAAS,IACX,EACA,MAAO,CACL,KAAM,OACN,QAAS,IACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,IAAA,CAEb,CAAC,ECnBcuC,qBAAgB,CAC7BjX,KAAM,iBACNwH,MAAO6pE,GACPn6D,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,KAAM,CAAElE,MAAAA,EAAOsC,OAAAA,EAAQgH,MAAAA,EAAO2F,OAAAA,EAAQ66D,MAAAA,EAAO1sB,WAAAA,CAAW,EAAI2C,EAAAA,OAAOpwC,CAAM,EAEnEY,EAAKtF,GAAc,iBAAiB,EAE1Ca,OAAAA,GAAY9L,CAAK,EACjBuC,GAAaD,CAAM,EACnBkH,GAAYF,CAAK,EACjByF,GAAaE,CAAM,EACnBzN,GAAiB47C,CAAU,EAEpB,IACD0sB,EAAMlhF,MACRsoB,EAAAA,YAAA,UAAA,CAAA,MACkB,CAACX,EAAG9jB,EAAC,EAAI8jB,EAAGy8B,GAAG,cAAc88B,EAAMlhF,KAAK,EAAE,CAAC,CAAC,EAAA,CACzDuoB,EAAU,WAACjN,EAAO,SAAS,CAAC,CAAA,EAK5BiN,EAAU,WAACjN,EAAO,SAAS,CAEtC,CACF,CAAC,ECjCY6lE,GAAc58D,GAAW,CACpC,OAAQJ,EACR,SAAUA,EACV,MAAOA,EACP,eAAgB,OAChB,eAAgB,OAChB,SAAUA,EACV,cAAe,SACf,SAAUC,GACV,WAAYD,EACZ,UAAWA,EACX,WAAYA,EACZ,SAAUmB,EAAqC,EAC/C,QAASA,EAAU,EACnB,OAAQA,EAAU,EAClB,OAAQA,EAAU,EAClB,SAAUA,EAAgD,EAC1D,YAAaA,EAAuC,CACtD,CAAC,kHCXK,MAAAqC,EAAKtF,GAAc,QAAQ,EAE3BjL,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,OAAQ,CACN,QAAS,GACT,OAAQ,EACV,EACA,SAAU,GACV,MAAO,GACP,eAAgB,IAAMhB,EAAG,GAAG,MAAM,EAClC,eAAgB,IAAMA,EAAG,GAAG,MAAM,EAClC,SAAU,GACV,cAAe,CACb,QAAS,KACT,OAAQ,EACV,EACA,SAAU,GACV,WAAY,GACZ,UAAW,GACX,WAAY,EAAA,CACb,EAEKyuB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAKRqpC,EAAW1rC,GAAU,EAErBsC,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAEhCiP,EAASyC,EAAAA,IAAI1R,EAAM,OAAS66C,IAAa,CAAC,EAC1CmvB,EAAct4D,EAAAA,IAAI1R,EAAM,MAAM,EAE9BiX,EAAUvF,EAAAA,IAAiB,EAC3Bu4D,EAAUv4D,EAAAA,IAAiB,EAC3Bw4D,EAAax4D,EAAAA,IAAiB,EAEpC,IAAIy4D,EAAW,GACXC,EAAc,GACdC,EAAS,GACTC,EAAoC,KAElC,MAAAl1C,EAAa/zB,EAAAA,SAAS,IACnBrB,EAAM,MACT,GACA,OAAOA,EAAM,UAAa,UACxBA,EAAM,SACJ,OACA,GACFA,EAAM,QACb,EACK4D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAG6kB,EAAW,QAAU,QAAUp1B,EAAM,QACzD,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAGvQ,EAAM,MACxB,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,QAAA,CAE/B,CACD,EAED4M,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP6oB,EAAc,MAAQ7oB,EAElBA,IACFohF,EAAY,MAAQphF,EACtB,CAEJ,EACAgkB,QAAM6E,EAAwB7oB,GAAA,CACvBA,GAQH0hF,EAAgB,SAAS,cACzBr7D,EAAO,MAAQ4rC,EAAS,IARfwvB,EAAA,GAELC,IACFA,EAAc,MAAM,EACJA,EAAA,QAOf,CAACtqE,EAAM,gBAAkBA,EAAM,WAAa,CAACA,EAAM,iBAC9CpX,EAAA2hF,IAAcC,EAAW,EACnC,CACD,EACD59D,EAAA,MACE,CAAC,IAAM5M,EAAM,UAAWiX,CAAO,EAC/B,IAAM,CACAA,EAAQ,QACFA,EAAA,MAAM,oBAAoB,QAASwzD,CAAY,EAElDzqE,EAAM,WACDiX,EAAA,MAAM,iBAAiB,QAASwzD,CAAY,EAG1D,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,EAEa34D,EAAA,CACX,cAAAL,EACA,OAAAxC,EACA,YAAA+6D,EACA,QAAA/yD,EACA,QAAAgzD,EACA,WAAAC,CAAA,CACD,EAED,SAASO,EAAavxE,EAAmB,CACvCA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,CAAA,CAGxB,SAASwxE,EAAaxsC,EAAiB,CACjCzsB,EAAc,QAAUysB,IAE5BzsB,EAAc,MAAQysB,EAEtBc,EAAK,gBAAiBd,CAAM,EAClB/vB,EAAAnO,EAAM,SAAUk+B,CAAM,EAAA,CAGlC,eAAeZ,GAAc,CACvB,GAAA,CAACt9B,EAAM,SAAU,OAErB,IAAI1M,EAAkB,GAElB,OAAO0M,EAAM,eAAkB,aACjC1M,EAAS0M,EAAM,cAAc,EAEzB1W,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,IAIfA,IAAW,IACbggB,EAAAA,SAAS,IAAM,CACbo3D,EAAa,EAAK,EAClBv8D,EAAUnO,EAAM,OAAO,CAAA,CACxB,CACH,CAGF,SAASuqE,GAAY,OACf,GAAA,CAAC94D,EAAc,MAAO,OAEpB,MAAAu3D,EAAW,UAAY,SAAS,eAElC,CAACA,GAAY,CAAC/xD,EAAQ,OAAS,CAACA,EAAQ,MAAM,SAAS+xD,CAAQ,MACjEjoE,EAAAkpE,EAAQ,QAAR,MAAAlpE,EAAe,SAGjBuS,EAAAA,SAAS,IAAM,CACJ+2D,EAAA,GACTl8D,EAAUnO,EAAM,MAAM,CAAA,CACvB,CAAA,CAGH,SAASwqE,GAAa,CAChB/4D,EAAc,OAElB6B,EAAAA,SAAS,IAAM,CACb02D,EAAY,MAAQ,GACpB77D,EAAUnO,EAAM,MAAM,CAAA,CACvB,CAAA,CAGH,SAAS2qE,GAAgB,CAClBl5D,EAAc,QAER04D,EAAA,IACT,CAACnqE,EAAM,gBAAkB,CAACkE,EAAM,SAAWkmE,IAAgBG,EAAU,EAAA,CAGzE,SAASK,GAAiB,CACpBn5D,EAAc,QAEP04D,EAAA,IACT,CAACnqE,EAAM,gBAAkB,CAACkE,EAAM,SAAW,CAACkmE,IAAgBI,EAAW,EAAA,CAG3E,SAASK,GAAmB,CACrBp5D,EAAc,QAEL24D,EAAA,IACZ,CAACpqE,EAAM,gBAAkBA,EAAM,UAAYmqE,IAAaI,EAAU,EAAA,CAGtE,SAASO,GAAoB,CACvBr5D,EAAc,QAEJ24D,EAAA,IACZ,CAACpqE,EAAM,gBAAkBA,EAAM,UAAY,CAACmqE,IAAaK,EAAW,EAAA,CAGxE,SAASv4D,EAAgB/Y,EAAmB,CAChCiV,EAAAnO,EAAM,YAAa9G,CAAK,EACtBokC,EAAA,CAAA,CAGd,SAASytC,EAAc7xE,EAAmB,CACxC,MAAM/H,EAAS+H,EAAM,OAErB,GAAI,CAACmxE,GAAU,CAACpzD,EAAQ,OAAS,CAAC9lB,GAAU,CAAC84E,EAAQ,OAAS,CAACC,EAAW,MACxE,OAGI,MAAAc,EAAWlxE,GAAcmd,EAAQ,KAAK,EAEvC+zD,EAAS,SAIVf,EAAQ,QAAU94E,EACZ4L,GAAAiuE,CAAQ,EAAG,MAAM,EAChBd,EAAW,QAAU/4E,GACrB65E,EAAA,CAAC,EAAE,MAAM,EACpB,CAGF,SAAS72C,EAAan8B,EAA4B,CACtCmW,EAAAnO,EAAM,SAAUhI,CAAK,CAAA,CAGjC,SAASizE,EAAa/xE,EAAsB,CACrC8G,EAAM,aACT9G,EAAM,eAAe,EACTokC,EAAA,EACd,eAKeprB,EAAA,MAAKlS,CAAA,EAAC,YAAcgqE,EAAW,qBAA9C73D,EAAAA,YA6DSD,EAAA,MAAA0oC,EAAA,EAAA,OA7DwC,GAAIxlB,EAAU,KAAA,qBAC7D,IA2DM,CA3DN3iB,EAAAA,mBA2DM,MA3DNC,aA2DMF,EA1DU,OAAA,SACV,UAAJ,IAAIyE,EACH,MAAQ,CAAArT,EAAA,MAAWsnE,EAAAA,OAAO,KAAK,EAChC,SAAS,KACR,MAAK,QAAYj8D,EAAM,MAAci8D,GAAAA,EAAAA,OAAO,OAAK,CAAA,EAAgC,cAAAlB,EAAA,MAAc,OAAS,OAA+B,WAAAA,EAAA,MAAc,OAAS,UAM9J,UAASe,EACT,qBAAgBE,EAAY,CAAA,QAAA,CAAA,CAAA,IAE7B/5D,cAoBiBgB,EAAA,MAAAgiB,EAAA,EAAA,CApBA,SAAQC,GAAY,mBACnC,IAYa,CAXJjiB,EAAAA,MAAAlS,CAAA,EAAM,sBAYf,EAAAqS,EAAA,mBAKO,MAAA,OAHJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,EACb,KAAK,OACL,cAAA,EAAA,0BAjBF4B,cAYaC,aAAA,OAVX,OAAA,GACC,KAAMF,EAAAA,MAAKlS,CAAA,EAAC,eACZ,aAAa2qE,EACb,aAAaC,CAAA,qBAEd,IAIM,kBAJNn4D,qBAIM,MAAA,CAJuB,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,QAAO0B,CAAA,GACzDM,EAAAA,WAEOC,mBAFP,IAEO,CADLC,EAAAA,mBAAwC,MAAA,CAAlC,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,2BAFTkB,EAAa,KAAA,gCAa9BgB,EAAAA,mBAKO,MAAA,SAJD,UAAJ,IAAIw3D,EACJ,SAAS,IACT,KAAK,OACL,MAAA,CAA4D,MAAA,IAAA,OAAA,IAAA,SAAA,SAAA,QAAA,MAAA,CAAA,YAE9Dx3D,EAAAA,mBAWM,MAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAc,oCAAD,IAAmB,CAAA,EAAA,CAAA,OAAA,SAAA,CAAA,EAAA,GAExC2B,QAAAlS,CAAA,EAAM,8BADdmS,cAQaC,aAAA,OANX,OAAA,GACC,KAAMF,EAAAA,MAAKlS,CAAA,EAAC,eACZ,aAAa6qE,EACb,aAAaC,CAAA,qBAEd,IAAmC,CAAnCv4D,EAAA,WAAmCC,EAAA,OAAA,UAAA,CAA5B,KAAMf,EAAa,KAAA,CAAA,CAAA,qBAE5Bc,EAAAA,WAA0CC,EAAA,OAAA,UAAA,OAA5B,KAAMf,EAAa,aAEnCgB,EAAAA,mBAKO,MAAA,SAJD,aAAJ,IAAIy3D,EACJ,SAAS,IACT,KAAK,OACL,MAAA,CAA4D,MAAA,IAAA,OAAA,IAAA,SAAA,SAAA,QAAA,MAAA,mECvS9DiB,GAAe,CAAC,OAAQ,MAAM,EAEvBC,GAAqBxiF,GACzBA,IAAU,QAAU,CAAC,OAAO,MAAM,WAAWA,CAAe,CAAC,EAEzDyiF,GAAe,CAC1B,QAAS,OACT,UAAWD,EACb,EAEaE,GAAan+D,GAAW,CACnC,OAAQiB,GAAkB,EAC1B,SAAUpB,GACV,OAAQD,EACR,MAAOo+D,GACP,OAAQA,GACR,IAAKA,GACL,KAAMA,GACN,MAAOA,GACP,OAAQA,GACR,MAAO,OACP,SAAUp+D,EACV,MAAOA,EACP,UAAWA,EACX,WAAYgB,GACZ,WAAYC,GACZ,SAAUjB,EACV,SAAUA,EACV,UAAWA,EACX,UAAWA,EACX,cAAe,SACf,QAASA,EACT,SAAU,OACV,UAAW,OACX,eAAgB,OAChB,YAAa,OACb,WAAY,OACZ,WAAYQ,GACZ,WAAYR,EACZ,YAAa,OACb,aAAc,OACd,WAAY,OACZ,YAAa,OACb,UAAWA,EACX,QAASo+D,GACT,QAASA,GACT,WAAYp+D,EACZ,MAAO,OACP,SAAUmB,EAAqC,EAC/C,UAAWA,EAAU,EACrB,SAAUA,EAAU,EACpB,QAASA,EAAU,EACnB,OAAQA,EAAU,EAClB,OAAQA,EAAU,EAClB,YAAaA,EAA+C,EAC5D,WAAYA,EAA+C,EAC3D,UAAWA,EAA+C,EAC1D,cAAeA,EAAuC,EACtD,aAAcA,EAAuC,EACrD,YAAaA,EAAuC,CACtD,CAAC,2LCjDK,MAAAqC,EAAKtF,GAAc,OAAO,EAG1BjL,EAAQiM,GAAS,QADRsF,EACyB,CACtC,OAAQ,KACR,SAAU,GACV,OAAQ,CACN,QAAS,GACT,OAAQ,EACV,EACA,MAAO85D,GACP,OAAQA,GACR,IAAKA,GACL,KAAMA,GACN,MAAOA,GACP,OAAQA,GACR,MAAO,GACP,SAAU,GACV,MAAO,GACP,UAAW,GACX,WAAY,KACZ,WAAY,KACZ,SAAU,GACV,SAAU,GACV,UAAW,GACX,UAAW,GACX,cAAe,CACb,QAAS,KACT,OAAQ,EACV,EACA,QAAS,GACT,SAAU,IACV,UAAW,IACX,eAAgB,IAAM96D,EAAG,GAAG,MAAM,EAClC,YAAa,KACb,WAAY,KACZ,WAAY,GACZ,YAAa,UACb,aAAc,KACd,WAAY,UACZ,YAAa,KACb,WAAY7C,GAAe,OAAO,EAClC,UAAW,GACX,QAAS,EACT,QAAS,EACT,WAAY,GACZ,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsxB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERlP,EAASI,GAAU,QAAS07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAClDsJ,EAAQU,GAAS,EAEvB,SAASuhE,EAAY3iF,EAAyB,CAC5C,MAAO,CAACK,GAAOL,CAAK,GAAKA,IAAU,MAAA,CAGrC,SAAS4iF,EAAe5iF,EAAyB,CAC/C,OAAO6I,GAAc7I,EAAO,EAAI,EAC5B,GAAG+I,GAAS/I,CAAK,CAAC,KAClBK,GAAOL,CAAK,EACV,OACA,OAAOA,CAAK,CAAA,CAGd,MAAA6oB,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAChCrG,EAAOmT,EAAAA,SAAS,CACpB,IAAK0+D,EAAexrE,EAAM,GAAG,EAC7B,MAAOwrE,EAAexrE,EAAM,KAAK,EACjC,OAAQwrE,EAAexrE,EAAM,MAAM,EACnC,KAAMwrE,EAAexrE,EAAM,IAAI,EAC/B,MAAOwrE,EAAexrE,EAAM,KAAK,EACjC,OAAQwrE,EAAexrE,EAAM,MAAM,CAAA,CACpC,EACKyrE,EAAa3+D,EAAAA,SAAS,CAAE,MAAO,EAAG,OAAQ,EAAG,EAC7C4+D,EAAY5+D,EAAAA,SAAS,CAAE,MAAO,EAAG,OAAQ,EAAG,EAE5C6+D,EAAcj6D,MAAI,EAAK,EAEvBk6D,EAASl6D,EAAAA,IAAmB,EAC5BuF,EAAUvF,EAAAA,IAAiB,EAC3Bm6D,EAASn6D,EAAAA,IAAiB,EAE1Bo6D,EAAazqE,EAAAA,SAAS,IACnBrB,EAAM,MAAQ,QAAUurE,EAAYvrE,EAAM,MAAM,GAAKurE,EAAYvrE,EAAM,MAAM,CACrF,EACK+rE,EAAc1qE,EAAAA,SAAS,IACpBrB,EAAM,OAAS,QAAUurE,EAAYvrE,EAAM,KAAK,GAAKurE,EAAYvrE,EAAM,KAAK,CACpF,EAEK,CAAE,OAAQgsE,EAAQ,OAAQ9a,CAAA,EAAa52C,GAAU,CACrD,QAAS,GACT,QAAS,CAAClE,EAAOld,IAAU,CACrB,GAAA,CAAC+d,EAAQ,OAAS,CAACjX,EAAM,WAAa9G,EAAM,OAAS,EAChD,MAAA,GAGT+yE,GAAa,EAAK,EAElBN,EAAY,MAAQ,GACdv1D,EAAA,OAAS,WAAWzc,EAAK,IAAI,EAC7Byc,EAAA,OAAS,WAAWzc,EAAK,GAAG,EAElCwU,EAAUnO,EAAM,YAAa,CAC3B,IAAKoW,EAAM,OACX,KAAMA,EAAM,MAAA,CACb,CACH,EACA,OAAiBA,GAAA,CACVzc,EAAA,KAAO,GAAGyc,EAAM,IAAI,KACpBzc,EAAA,IAAM,GAAGyc,EAAM,IAAI,KAExBjI,EAAUnO,EAAM,WAAY,CAC1B,IAAKoW,EAAM,KACX,KAAMA,EAAM,IAAA,CACb,CACH,EACA,MAAgBA,GAAA,CACdjI,EAAUnO,EAAM,UAAW,CACzB,IAAKoW,EAAM,KACX,KAAMA,EAAM,IAAA,CACb,CAAA,CACH,CACD,EAEK,CAAE,OAAQ81D,EAAS,OAAQC,CAAA,EAAa7xD,GAAU,CACtD,QAAS,CAAClE,EAAOld,IAAU,CACrB,GAAA,CAAC+d,EAAQ,OAAS,CAACjX,EAAM,WAAa9G,EAAM,OAAS,EAChD,MAAA,GAGI+yE,GAAA,EAEb,IAAIG,EAAY,GAEZJ,EAAO,QACTI,GAAaJ,EAAO,MAAM,cAGxBH,EAAO,QACTO,GAAaP,EAAO,MAAM,cAG5BF,EAAY,MAAQ,GACdv1D,EAAA,OAAS,WAAWzc,EAAK,KAAK,EAC9Byc,EAAA,OAAS,WAAWzc,EAAK,MAAM,EACrCyc,EAAM,UAAY,KAAK,IAAIg2D,EAAWpsE,EAAM,SAAS,EAErDmO,EAAUnO,EAAM,cAAe,CAC7B,MAAOoW,EAAM,OACb,OAAQA,EAAM,MAAA,CACf,CACH,EACA,OAAiBA,GAAA,CACf,MAAM+H,EAAQ,KAAK,IAAIne,EAAM,SAAUoW,EAAM,KAAM,EAAE,EAC/CgI,EAAS,KAAK,IAAIhI,EAAM,UAAqBA,EAAM,IAAI,EAExDzc,EAAA,MAAQ,GAAGwkB,CAAK,KAChBxkB,EAAA,OAAS,GAAGykB,CAAM,KAEvBjQ,EAAUnO,EAAM,aAAc,CAAE,MAAAme,EAAO,OAAAC,EAAQ,CACjD,EACA,MAAgBhI,GAAA,CACd,MAAM+H,EAAQ,KAAK,IAAIne,EAAM,SAAUoW,EAAM,KAAM,EAAE,EAC/CgI,EAAS,KAAK,IAAIhI,EAAM,UAAqBA,EAAM,IAAI,EAE7DjI,EAAUnO,EAAM,YAAa,CAAE,MAAAme,EAAO,OAAAC,EAAQ,CAAA,CAChD,CACD,EAGKxa,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAGvQ,EAAM,MACxB,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,UAC5B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,UAC5B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAAA,CAEhC,CACD,EACK6oC,EAAexnC,EAAAA,SAAS,IACrB,CACLkP,EAAG,GAAG,SAAS,EACf,CACE,CAACA,EAAG,IAAI,UAAW,UAAU,CAAC,EAAGvQ,EAAM,SACvC,CAACuQ,EAAG,IAAI,UAAW,UAAU,CAAC,EAAG2gD,EAAS,MAC1C,CAAC3gD,EAAG,IAAI,UAAW,UAAU,CAAC,EAAG47D,EAAS,KAC5C,EACAnsE,EAAM,UACR,CACD,EACKq6B,EAAYh5B,EAAAA,SAAS,IAAM,CAC/B,MAAMgrE,EAAuB,CAAC,EAE9B,OAAIrsE,EAAM,SACRqsE,EAAW,KAAK,cAAcb,EAAexrE,EAAM,OAAO,CAAC,GAAG,EAG5DA,EAAM,SACRqsE,EAAW,KAAK,cAAcb,EAAexrE,EAAM,OAAO,CAAC,GAAG,EAG5DqsE,EAAW,QACbA,EAAW,KAAK,eAAe,EAG1BA,EAAW,OAASA,EAAW,KAAK,GAAG,EAAI,MAAA,CACnD,EACKC,EAAejrE,EAAAA,SAAS,IACrB,CACLrB,EAAM,WACN,CACE,GAAGrG,EACH,OAAQA,EAAK,SAAW,OAASA,EAAK,OAAS,OAC/C,UAAW0gC,EAAU,KAAA,CAEzB,CACD,EACKkyC,EAAkBlrE,EAAAA,SAAS,IAAM,CACrC,MAAMoX,EAAS,CAAE,EAAG,MAAO,EAAG,KAAM,EAEpC,GAAIkzD,EAAY,MACPlzD,EAAA,EAAI,GAAG,WAAW9e,EAAK,IAAI,EAAI,GAAM+xE,EAAU,KAAK,KACpDjzD,EAAA,EAAI,GAAG,WAAW9e,EAAK,GAAG,EAAI,GAAM+xE,EAAU,MAAM,SACtD,CACL,GAAII,EAAW,MACNrzD,EAAA,EAAI,eAAe,WAAW9e,EAAK,MAAM,EAAI,GAAM,WAAWA,EAAK,MAAM,CAAC,cACxE4xE,EAAYvrE,EAAM,GAAG,EAAG,CAC3B,MAAAooB,EAAM,WAAWzuB,EAAK,GAAG,EAE3B,GAAA4xE,EAAYvrE,EAAM,MAAM,EAC1ByY,EAAO,EAAI,GAAG2P,EAAM,GAAM,WAAWzuB,EAAK,MAAM,CAAC,aACxC4xE,EAAYvrE,EAAM,MAAM,EAAG,CAC9B,MAAA4uB,EAAS,WAAWj1B,EAAK,MAAM,EAC/BykB,EAASqtD,EAAW,OAASrjD,EAAMwG,EAEzCnW,EAAO,EAAI,GAAG2P,EAAM,GAAMhK,CAAM,IAAA,MAEzB3F,EAAA,EAAI,GAAG,WAAW9e,EAAK,GAAG,EAAI,GAAM+xE,EAAU,MAAM,IAC7D,CAGF,GAAIK,EAAY,MACPtzD,EAAA,EAAI,eAAe,WAAW9e,EAAK,KAAK,EAAI,GAAM,WAAWA,EAAK,KAAK,CAAC,cACtE4xE,EAAYvrE,EAAM,IAAI,EAAG,CAC5B,MAAA5O,EAAO,WAAWuI,EAAK,IAAI,EAE7B,GAAA4xE,EAAYvrE,EAAM,KAAK,EACzByY,EAAO,EAAI,GAAGrnB,EAAO,GAAM,WAAWuI,EAAK,KAAK,CAAC,aACxC4xE,EAAYvrE,EAAM,KAAK,EAAG,CAC7B,MAAA3O,EAAQ,WAAWsI,EAAK,KAAK,EAC7BwkB,EAAQstD,EAAW,MAAQr6E,EAAOC,EAExConB,EAAO,EAAI,GAAGrnB,EAAO,GAAM+sB,CAAK,IAAA,MAEzB1F,EAAA,EAAI,GAAG,WAAW9e,EAAK,IAAI,EAAI,GAAM+xE,EAAU,KAAK,IAC7D,CACF,CAGF,MAAO,GAAGjzD,EAAO,CAAC,IAAIA,EAAO,CAAC,EAAA,CAC/B,EACKqiD,EAAYz5D,EAAAA,SAAS,IAClB,CAAC,EAAE6C,EAAM,QAAUA,EAAM,OAASlE,EAAM,OAASA,EAAM,MAAM,QAAUA,EAAM,MAAM,MAC3F,EACKwsE,EAAUlhE,GAAM,EAChB86D,EAAS96D,GAAM,EAErB,UAAWqF,KAAS,OAAO,KAAKhX,CAAI,EAClCiT,EAAA,MACE,IAAM5M,EAAM2Q,CAAK,EACR/nB,GAAA,CACF+Q,EAAAgX,CAAK,EAAI66D,EAAe5iF,CAAK,CAAA,CAEtC,EAGFgkB,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP6oB,EAAc,MAAQ7oB,CAAA,CAE1B,EACAgkB,QAAM6E,EAAwB7oB,GAAA,CACtBoX,EAAA,UAAYpX,GAASurC,EAAa,CAAA,CACzC,EACKvnB,QAAA,CAAC,IAAM5M,EAAM,IAAK,IAAMA,EAAM,OAAQ,IAAMA,EAAM,MAAM,EAAG,IAAM,CACvDyR,EAAA,OAAS6B,WAASm5D,EAAU,CAAA,CAC3C,EACK7/D,QAAA,CAAC,IAAM5M,EAAM,KAAM,IAAMA,EAAM,MAAO,IAAMA,EAAM,KAAK,EAAG,IAAM,CACtDyR,EAAA,OAAS6B,WAASo5D,CAAW,CAAA,CAC5C,EAED,MAAMv4C,EAAe,IAAM,OACrB1iB,EAAc,OAAS,CAACk6D,EAAY,OACtCr4D,EAAAA,SAAS,IAAM,CACFm5D,GAAA,EACCC,EAAA,CAAA,CACb,GAGC3rE,EAAA6qE,EAAO,QAAP,MAAA7qE,EAAc,UACL0qE,EAAA,MAAQG,EAAO,MAAM,QAAQ,YAC7BH,EAAA,OAASG,EAAO,MAAM,QAAQ,aAE7C,EAEa95D,EAAA,CACX,SAAAo/C,EACA,SAAAib,EACA,QAAAK,EACA,OAAApG,EACA,QAAAnvD,EACA,OAAA+0D,EACA,OAAAH,EACA,QAAAK,EACA,aAAA/3C,EACA,cAAAo0C,GACA,aAAAoE,GACA,YAAArvC,EAAA,CACD,EAED,MAAMyW,EAAaC,EAAA,gBACjBlnC,WAAS,CACP,SAAAokD,EACA,SAAAib,EACA,aAAAh4C,EACA,cAAAo0C,GACA,aAAAoE,GACA,YAAArvC,EACD,CAAA,CACH,EAEA,SAASsvC,EAAU1uC,EAAiB,CAC9BzsB,EAAc,QAAUysB,IAE5BzsB,EAAc,MAAQysB,EAEtBc,EAAK,gBAAiBd,CAAM,EAClB/vB,EAAAnO,EAAM,SAAUk+B,CAAM,EAAA,CAGlC,SAAS2uC,IAAuB,CAC9B,GAAI,CAAC51D,EAAQ,MAAO,OAAO,SAAS,KAEhC,IAAApC,EAAgBoC,EAAQ,MAAM,cAE3B,KAAApC,GAAiBA,IAAkB,SAAS,MAAM,CACvD,GAAI,iBAAiBA,CAAa,EAAE,WAAa,SACxC,OAAAA,EAGTA,EAAgBA,EAAc,aAAA,CAGzB,OAAAA,CAAA,CAGT,SAAS43D,IAAa,CACpB,GAAI,CAACx1D,EAAQ,OAASjX,EAAM,MAAQ,QAAU8rE,EAAW,MAAO,OAE1D,MAAAgB,EAAgB71D,EAAQ,MAAM,aAEhCjX,EAAM,MACRrG,EAAK,IAAM,IAAIkzE,GAAuB,EAAA,aAAeC,GAAiB,CAAC,KAEvEnzE,EAAK,IAAM,IAAI,OAAO,YAAcmzE,GAAiB,EAAI,EAAE,IAC7D,CAGF,SAASJ,GAAc,CACrB,GAAI,CAACz1D,EAAQ,OAASjX,EAAM,OAAS,QAAU+rE,EAAY,MAAO,OAE5D,MAAAgB,EAAe91D,EAAQ,MAAM,YAE/BjX,EAAM,MACRrG,EAAK,KAAO,IAAIkzE,GAAuB,EAAA,YAAcE,GAAgB,CAAC,KAEtEpzE,EAAK,KAAO,IAAI,OAAO,WAAaozE,GAAgB,CAAC,IACvD,CAGO,SAAAd,GAAae,EAAW,GAAM,CACjC,GAAA,CAAC/1D,EAAQ,MAAO,OAEpB,KAAM,CAAE,YAAA6P,EAAa,aAAAC,EAAc,UAAAkmD,EAAW,WAAAC,CAAA,EAAej2D,EAAQ,MAKnE,CAAC+1D,IACC,CAAClB,EAAW,OAAS9rE,EAAM,SAAW,QACrC,CAAC+rE,EAAY,OAAS/rE,EAAM,QAAU,UAE9BgtE,EAAA,IAGN,OAAA,OACLrzE,EACA,CACE,IAAK,GAAGszE,CAAS,KACjB,MAAO,OACP,OAAQ,OACR,KAAM,GAAGC,CAAU,IACrB,EACAF,EACI,CACA,MAAO,GAAGlmD,CAAW,KACrB,OAAQ,GAAGC,CAAY,IAAA,EAEvB,CAAA,CACN,CAAA,CAGF,SAASwhD,IAAgB,CACvBjrC,GAAY,EAAI,EAChBnvB,EAAUnO,EAAM,SAAS,CAAA,CAG3B,SAAS2sE,IAAe,CACtBrvC,GAAY,EAAK,EACjBnvB,EAAUnO,EAAM,QAAQ,CAAA,CAGX,eAAAs9B,GAAY6vC,EAAY,GAAO,CAC5C,IAAI75E,EAAkB,GAElB,OAAA,OAAO0M,EAAM,eAAkB,aACxB1M,EAAA0M,EAAM,cAAcmtE,CAAS,EAElC7jF,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,IAIfA,IAAW,IACb,MAAMggB,WAAS,IAAM,CACnBs5D,EAAU,EAAK,EACfz+D,EAAUnO,EAAM,OAAO,CAAA,CACxB,EAGI1M,CAAA,CAGT,SAASye,IAAa,CACpB5D,EAAUnO,EAAM,MAAM,CAAA,CAGxB,SAASgS,IAAa,CACpB7D,EAAUnO,EAAM,MAAM,CAAA,CAGxB,SAASotE,IAAkB,CACzB,GAAIptE,EAAM,UACR,OAAOs9B,GAAY,EAAK,CAC1B,CAGF,SAAS+vC,EAAkBr1E,EAA4B,OAC/C,MAAAs1E,GAAMvsE,EAAA/I,EAAM,gBAAN,YAAA+I,EAAsB,GAE9BusE,GACF5B,EAAU,MAAQ4B,EAAI,WACtB5B,EAAU,OAAS4B,EAAI,YAEb5B,EAAA,MAAQ1zE,EAAM,YAAY,MAC1B0zE,EAAA,OAAS1zE,EAAM,YAAY,OACvC,6BAKAma,EAAAA,YAyGSD,EAAA,MAAAq7D,EAAA,EAAA,SAxGH,SAAJ,IAAI3B,EACI,OAAQn6D,EAAa,uCAAbA,EAAa,MAAAupC,GAC5B,QAAS9oC,EAAAA,MAAKlS,CAAA,EAAC,QACf,uBAAO4D,EAAS,KAAA,EAChB,MAAOsO,EAAAA,MAAKlS,CAAA,EAAC,MACb,kBAAiBkS,EAAAA,MAAKlS,CAAA,EAAC,eACvB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,UAChB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,kBAAiBotE,GACjB,SAAUl7D,EAAAA,MAAKlS,CAAA,EAAC,SAChB,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,OAAM+R,GACN,OAAMC,GACN,SAAQmiB,CAAA,GAEE,QAAO0xB,EAAA,QAChB,CAqFU,CAtFU,KAAAlN,KAAI,kBACxBlmC,qBAqFU,UAAA,CArFc,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EAAgB,wCAASg8D,EAAe,KAAA,CAAA,CAAA,GAC1Er7D,cAmFiBgB,EAAA,MAAAgiB,EAAA,EAAA,CAnFA,SAAQm5C,GAAiB,mBACxC,IAiFM,CAjFN56D,EAAAA,mBAiFM,MAAA,SAhFA,UAAJ,IAAIwE,EACH,uBAAO4xB,EAAY,KAAA,EACpB,KAAK,SACJ,uBAAOyjC,EAAY,KAAA,EACnB,aAAY3zB,EAAI,OAAY,OAC5B,kBAAiBzmC,QAAOs6D,CAAA,EACxB,mBAAkBt6D,QAAMk0D,CAAA,CAAA,GAEdtL,EAAS,qBAApBzoD,EAAAA,mBA+BM,MAAA,eA/BoB,SAAJ,IAAI25D,EAAU,MAAK15D,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAC9CgC,aA6BOC,EAAA,OAAA,SAAAyzC,EAAAA,eAAAC,EA7BqB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAtC,IA6BO,CA5BL7iC,cA2BWgB,EAAAA,MAAAb,EAAA,EAAA,CA3BA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMkS,QAAU6hC,CAAA,CAAA,qBACxD,IAMM,CANNthC,EAAAA,mBAMM,MAAA,CANA,GAAIP,QAAOs6D,CAAA,EAAG,MAAKl6D,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAC9BgC,aAIOC,EAAA,OAAA,QAAAyzC,EAAAA,eAAAC,EAJoB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAArC,IAIO,CAHL7iC,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMkS,QAAU6hC,CAAA,CAAA,qBACvD,IAAiB,CAAdphC,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,KAAK,EAAA,CAAA,CAAA,yCAKZkS,QAAAlS,CAAA,EAAM,wBADdqS,qBAkBS,SAAA,OAhBP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,0CAAD,IAAiB,CAAA,EAAA,CAAA,MAAA,CAAA,GAChB,wCAAD,IAAe,CAAA,EAAA,CAAA,MAAA,CAAA,GACd,yCAAD,IAAgB,CAAA,EAAA,CAAA,MAAA,CAAA,GACf,uBAAO+sB,GAAW,EAAA,EAAA,GAEnB/qB,aAQOC,EAAA,OAAA,QAAAyzC,EAAAA,eAAAC,EARoB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAArC,IAQO,CAPL7iC,cAMWgB,EAAAA,MAAAb,EAAA,EAAA,CANA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMkS,QAAU6hC,CAAA,CAAA,qBACvD,IAIQ,CAJR7iC,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,MAAK,CAClB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,MAAM,OAAK,GAAA,IAC3B,MAAM,gKAQpBmJ,EAAAA,mBAUM,MAAA,CATH,GAAIP,QAAMk0D,CAAA,EACV,MAAK9zD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAA8B,SAAAzzC,EAAA,MAAAi6D,CAAA,WAAsB,WAI1D55D,aAEOC,EAAA,OAAA,UAAAyzC,EAAAA,eAAAC,EAFO,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAxB,IAEO,CADL7iC,cAAwEgB,EAAAA,MAAAb,EAAA,EAAA,CAA7D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAMkS,QAAU6hC,CAAA,yCAGnD7hC,EAAAA,MAAAlS,CAAA,EAAM,oDAAlBqS,qBA2BM,MAAA,eA3B0B,SAAJ,IAAIw5D,EAAU,MAAKv5D,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GACpDgC,aAyBOC,EAAA,OAAA,SAAAyzC,EAAAA,eAAAC,EAzBqB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAtC,IAyBO,CAxBL7iC,cAuBWgB,EAAAA,MAAAb,EAAA,EAAA,CAvBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMkS,QAAU6hC,CAAA,CAAA,qBACxD,IAUS,CAVT7iC,EAAAA,YAUSgB,EAAA,UAVTQ,aAUS,CATN,OAAQR,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,QAAA,CAAA,EAChC,QAAA,GACA,KAAA,GACC,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,WACZ,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,UAAA,EACLkS,EAAAA,MAAAlS,CAAA,EAAM,YACb,CAAA,QAAO2sE,EAAY,CAAA,EAAA,mBAEpB,IAAuC,CAApCh6D,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,YAAckS,EAAAA,MAAA5P,CAAA,EAAO,MAAM,EAAA,CAAA,CAAA,oCAEtC4O,EAAAA,YAUSgB,EAAA,UAVTQ,aAUS,CATN,OAAQR,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,SAAA,CAAA,EAChC,QAAA,GACC,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,YACZ,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,WACZ,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,OAAA,EACRkS,EAAAA,MAAAlS,CAAA,EAAM,aACb,CAAA,QAAOuoE,EAAa,CAAA,EAAA,mBAErB,IAAyC,CAAtC51D,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAAA,MAAA5P,CAAA,EAAO,OAAO,EAAA,CAAA,CAAA,mFAKnC4P,QAAAlS,CAAA,EAAM,yBAAjBqS,qBAA0E,MAAA,eAA1C,UAAJ,IAAI65D,EAAW,MAAK55D,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,2EAlF5CooC,CAAI,sICreX,SAAA60B,GAAS3iF,EAAiC,GAAyB,CAC7E,GAAA,CAACrC,GAAiB,OAAAoB,GAEhB,KAAA,CACJ,WAAA6jF,EACA,QAAAxnC,EACA,SAAA31B,EACA,eAAAo9D,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,OAAAC,EACA,GAAG9tE,CAAA,EACDnV,EAEEqzC,EAASxsB,MAAI,EAAK,EAExB,IAAImoB,EAAW73B,EAAAA,mBAAmB,EAE9B83B,EAAqC,SAAS,cAAc,KAAK,EACjEp4B,EAEJ,GAAI+rE,GAAc5zC,EAAU,CAC1B,MAAM9mB,EAAQE,EAAA,YAAY86D,EAAa,KAAM,IAAI,EAE3Ch7D,EAAA,WAAa06D,GAAc5zC,EAAU,WAC3CzmB,EAAA,OAAOL,EAAO+mB,CAAS,CAAA,MAEvBp4B,EAAMssE,YAAUD,CAAW,EAC3BrsE,EAAI,MAAMo4B,CAAS,EAGZ,SAAA,KAAK,YAAYA,CAAS,EAGnCxmB,EAAAA,SAAS,IAAM,CACb4qB,EAAO,MAAQ,EAAA,CAChB,EAED,SAAS6vC,GAAc,CACd,OAAAnhF,EAAA,EACLqhF,GACA,CACE,GAAGjuE,EACH,OAAQk+B,EAAO,MACf,SAAU,GACV,WAAY,GACZ,QAASv8B,QAAMskC,CAAO,EACtB,OAAQ,MAAM,QAAQ6nC,CAAM,EAAI,CAAC,GAAGA,EAAQI,CAAO,EAAIJ,EAAS,CAACA,EAAQI,CAAO,EAAIA,CACtF,EACA,CACE,OAAQR,EACR,MAAOC,EACP,MAAOC,EACP,QAASt9D,EACT,OAAQu9D,CAAA,CAEZ,CAAA,CAGF,SAASK,GAAU,CACbr0C,IACWC,GAAA1mB,EAAAA,OAAO,KAAM0mB,CAAS,EACxBD,EAAA,MAGTn4B,IACFA,EAAI,QAAQ,EACNA,EAAA,QAGJo4B,IACO,SAAA,KAAK,YAAYA,CAAS,EACvBA,EAAA,OACd,CAGK,MAAA,IACLxmB,WAAS,IAAM,CACb4qB,EAAO,MAAQ,EAAA,CAChB,CACL,CAEA+vC,GAAU,KAAOT,GAEjB,MAAMW,GAAQF,GCtHR9C,GAAe,CAAC,OAAQ,MAAM,EAEvBiD,GAAejhE,GAAW,CACrC,OAAQiB,GAAoB,EAC5B,MAAO+8D,GACP,OAAQA,GACR,IAAKA,GACL,KAAMA,GACN,MAAOA,GACP,OAAQA,GACR,UAAWp+D,EACX,YAAa,OACb,WAAY,OACZ,YAAa,OACb,WAAY,OACZ,KAAM,CACJ,KAAM,CAAC,QAAS,OAAQ,QAAQ,EAChC,QAAS,IACX,EACA,UAAWgB,GACX,MAAOC,GACP,SAAU,SACV,UAAW,OACX,SAAUjB,EACV,aAAc,OACd,aAAc,OACd,UAAWA,EACX,WAAYA,EACZ,QAASo+D,GACT,QAASA,EACX,CAAC,sGCvBK,MAAAC,EAAqBxiF,GAClBA,IAAU,QAAU,CAAC,OAAO,MAAM,WAAWA,CAAe,CAAC,EAEhEyiF,EAAe,CACnB,QAAS,OACT,UAAWD,CACb,EAEMiD,EAAqB,OAAO,OAA4B,CAC5D,UACA,UACA,OACA,UACA,UACA,OAAA,CACD,EAKKruE,EAAQiM,GAAS,UADRsF,EAC2B,CACxC,OAAQ,KACR,MAAO,CACL,QAAS,IACT,UAAW65D,CACb,EACA,OAAQC,EACR,IAAKA,EACL,KAAMA,EACN,MAAOA,EACP,OAAQA,EACR,UAAW,GACX,YAAa,CACX,QAAS,UACT,UAAWziF,GAASylF,EAAmB,SAASzlF,CAAK,CACvD,EACA,WAAY,CACV,QAAS,UACT,UAAWA,GAASylF,EAAmB,SAASzlF,CAAK,CACvD,EACA,YAAa,KACb,WAAY,KACZ,KAAM,CACJ,OAAQ,GACR,QAAS,EACX,EACA,UAAW,KACX,MAAO,KACP,SAAU,CACR,QAAS,KACT,OAAQ,GACR,OAAQ,EACV,EACA,UAAW,KAAO,CAAA,GAClB,SAAU,GACV,UAAW,GACX,aAAc,OACd,aAAc,QACd,WAAY,GACZ,QAAS,EACT,QAAS,CAAA,CACV,EAEK2nB,EAAKtF,GAAc,SAAS,EAC5B3B,EAAQU,GAAS,EACjB1H,EAASI,GAAU,UAAW07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAEpDmM,EAAc,CAClB,YACA,QACA,OACA,YACA,YACA,cACA,aACA,cACA,aACA,YACA,WACA,eACA,eACA,aACA,QACA,SACA,MACA,QACA,SACA,OACA,UACA,SACF,EAEMiK,EAAQtJ,EAAAA,SAAuB,CACnC,GAAGX,EAAY,OAAO,CAACtM,EAAMjE,KAAciE,EAAKjE,CAAO,EAAIoE,EAAMpE,CAAO,EAAIiE,GAAO,CAAA,CAAS,EAC5F,QAAS,GACT,QAAS,GACT,MAAO,GACP,QAAS,GACT,IAAK,CAAA,CAAC,CACP,EAEKyuE,EAAY58D,EAAAA,IAA4B1R,EAAM,QAAQ,EAE5D,IAAIuuE,EAAyC,KAEzCC,EAAiC,KACjCC,EAAgC,KAE9B,MAAAC,EAAiB,IAAI,QAAyB14C,GAAA,CAClDvhB,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS0iB,CAAO,CAAA,CACjB,CAAA,CACF,EAEDlkB,EAAa,CAAE,MAAAsE,EAAO,YAAAu4D,EAAa,aAAchC,EAAc,YAAAiC,EAAa,EAE5E,eAAeD,EAAY9jF,EAAyB,CAC5C,aAAA6jF,EAEC,MAAM,IAAI,QAA4B14C,GAAA,CAC3C,UAAWp+B,KAAQuU,EACfiK,EAAcxe,CAAI,EAAI/M,EAAQ+M,CAAI,GAAKoI,EAAMpI,CAAI,EAWjD,GAREwe,EAAA,MAAQvrB,EAAQ,OAAS,GACzBurB,EAAA,QAAUvrB,EAAQ,SAAW,GAEnCurB,EAAM,IAAMvrB,EAEZyjF,EAAU,MAAQ/kF,GAAWsB,EAAQ,QAAQ,EAAIA,EAAQ,SAAWmV,EAAM,SAC1EuuE,EAAiBhlF,GAAWsB,EAAQ,eAAe,EAAIA,EAAQ,gBAAkB,KAE7EtB,GAAW+kF,EAAU,KAAK,EAAG,CAC/B,MAAMl7D,EAASk7D,EAAU,MAEzBA,EAAU,MAAQ,IAAMl7D,EAAOgD,EAAOmyD,EAAeoE,CAAY,CAAA,CAGnEv2D,EAAM,QAAU,GAEhB,IAAIy4D,EAAW,GAEfL,EAAY,IAAM,CACf,CAAAK,GAAY74C,EAAQ,EAAI,EACd64C,EAAA,GACMN,EAAA,IACnB,EACAE,EAAW,IAAM,CACd,CAAAI,GAAY74C,EAAQ,EAAK,EACf64C,EAAA,GACMN,EAAA,IACnB,CAAA,CACD,CAAA,CAGH,eAAehG,GAAgB,CAGzB,GAFJnyD,EAAM,QAAU,GAEZ7sB,GAAWglF,CAAc,EAAG,CAC9B,IAAIj7E,EAASi7E,EAAe,EAM5B,GAJIjlF,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,GAGbA,IAAW,GAAO,CACpB8iB,EAAM,QAAU,GAEhB,MAAA,CACF,CAGFA,EAAM,QAAU,GAChBA,EAAM,QAAU,GAEZ7sB,GAAWilF,CAAS,IACZA,EAAA,EACEA,EAAA,KACd,CAGF,SAAS7B,GAAe,CACtBv2D,EAAM,QAAU,GAEZ7sB,GAAWklF,CAAQ,IACZA,EAAA,EACEA,EAAA,KACb,CAGF,SAASG,GAAc,CACrB,UAAWh3E,KAAQuU,EACfiK,EAAcxe,CAAI,EAAIoI,EAAMpI,CAAI,EAGpCwe,EAAM,QAAU,GAChBA,EAAM,QAAU,GAChBA,EAAM,MAAQ,GACdA,EAAM,QAAU,GAEhBA,EAAM,IAAM,CAAC,EAEbk4D,EAAU,MAAQtuE,EAAM,QAAA,6BAMxBqS,EAAA,mBAqGM,MAAA,CArGA,wBAAQH,EAAA,MAAE3B,CAAA,EAAC,IAAK2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,CAAA,GACzBW,cAmGQgB,EAAAA,MAAAi8D,EAAA,EAAA,CAlGN,YAAA,GACC,cAAa,GACb,SAAU,GACV,SAAU,GACV,OAAQ/3D,EAAM,QACd,cAAaA,EAAM,UACnB,cAAaA,EAAM,MACnB,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,IAAKA,EAAM,IACX,KAAMA,EAAM,KACZ,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,WAAUA,EAAM,QAChB,WAAUA,EAAM,QAChB,aAAYA,EAAM,UAClB,OAAMw4D,EACN,QAAOjC,CAAA,qBAER,IAAwE,CAAxDz6D,QAAA3oB,EAAA,EAAW+kF,EAAS,KAAA,iBAApCn8D,EAAA,YAAwED,QAAAb,EAAA,EAAA,OAAhC,SAAUi9D,EAAS,4CAC3Dj8D,EAAAA,mBA6EWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CA5EEtoB,EAAM,qBAAjB/D,EAAAA,mBAsBM,MAAA,OAtBmB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GACnCkC,EAAAA,mBAKM,MAAA,CALA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACO,OAAA6F,EAAM,OAAK,wBAAlC,EAAAjE,cAAsFD,EAAAA,MAAAb,EAAA,EAAA,OAAlC,SAAU+E,EAAM,4CACpE/D,EAAAA,mBAEWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,EAAAA,gBAAAC,EAAA,gBAAAwD,EAAM,KAAK,EAAA,CAAA,YAIVA,EAAM,wBADd/D,EAAAA,mBAcS,SAAA,OAZP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,wCAAD,IAAe,CAAA,EAAA,CAAA,MAAA,CAAA,GACd,QAAOo8D,CAAA,GAERp6D,EAAAA,WAMOC,oBANP,IAMO,CALLtB,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,MAAK,CAClB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,MAAM,OAAK,GAAA,IAC3B,MAAM,kGAKdmJ,EAAAA,mBA8BM,MAAA,CA7BH,MAAKH,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAsB2B,QAAA3B,CAAA,EAAG,IAAY,OAAA6F,EAAM,YAAY,EAAgB,CAAAA,EAAM,OAASlE,EAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,UAAA,MAM5G6F,EAAM,OAAI,kBAArB/D,EAAAA,mBAeM,MAAA,OAf4B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAE7B,OAAA6F,EAAM,MAAI,WADzBiqB,EAAAA,YAAAluB,EAIQ,YAAAD,EAAA,MAJRpO,EAAA,EAAA4O,EAAAA,WAIQ,CAFE,IAAA,CAAA,EAAA0D,EAAM,UAAS,CACtB,KAAMA,EAAM,2BAEfiqB,YAAA,EAAAluB,cAQQD,EAAAA,UARRQ,EAAAA,WAQQ,OANL,MAAO,GAAA,MACsB0D,EAAM,WAAalE,QAAA5I,CAAA,EAAM,SAAW4I,EAAAA,MAAK5I,CAAA,EAAC,QAA6B,GAAA8M,EAAM,SAAA,GAI1G,MAAOA,EAAM,WAAalE,QAAA5I,CAAA,EAAM,SAAW4I,EAAA,MAAA5I,CAAA,EAAM,SAAS,2DAGxC,OAAA8M,EAAM,SAAO,wBAApC,EAAAjE,cAA0FD,EAAAA,MAAAb,EAAA,EAAA,OAApC,SAAU+E,EAAM,8CACtE/D,EAAAA,mBAKWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAJEtoB,EAAM,yBAAjB/D,EAAAA,mBAAmF,MAAA,OAAtD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAa,UAAQ6F,EAAM,OAAA,8BACpE/D,qBAEM,MAAA,OAFO,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CACpB,EAAAqC,kBAAAwD,EAAM,OAAO,EAAA,CAAA,aAItB3D,EAAAA,mBAqBM,MAAA,CArBA,MAAKH,EAAA,eAAA,CAAGJ,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,EAAY2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,SAAW6F,EAAM,YAAY,CAAA,CAAA,CAAA,GAExDA,EAAM,0BADdjE,EAAAA,YASSD,EAAAA,MAAA45C,EAAA,EAAA,OAPN,wBAAQ55C,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,QAAA,CAAA,CAAA,EAChC,QAAA,GACA,WAAA,GACC,KAAM6F,EAAM,WACZ,QAAOu2D,CAAA,qBAER,IAAuC,CAApCh6D,kBAAAC,EAAAA,gBAAAwD,EAAM,YAAclE,QAAA5P,CAAA,EAAO,MAAM,EAAA,CAAA,CAAA,yDAEtC4O,cASSgB,EAAAA,MAAA45C,EAAA,EAAA,CARN,wBAAQ55C,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,SAAA,CAAA,CAAA,EAChC,QAAA,GACA,WAAA,GACC,KAAM6F,EAAM,YACZ,QAASA,EAAM,QACf,QAAOmyD,CAAA,qBAER,IAAyC,CAAtC51D,kBAAAC,EAAAA,gBAAAwD,EAAM,aAAelE,QAAA5P,CAAA,EAAO,OAAO,EAAA,CAAA,CAAA,2LC7SlD2rE,GAAU,KAAO,UAEV,MAAMa,EAAe,CAW1B,YAAYjkF,EAAmC,GAAI,CAVnDugB,GAAA,aACAA,GAAA,iBAEQA,GAAA,oBACAA,GAAA,kBACAA,GAAA,kBACAA,GAAA,mBACAA,GAAA,iBACAA,GAAA,mBAGN,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,WAAa,KAClB,KAAK,KAAO,UACZ,KAAK,SAAW,CAAC,EAEjB,KAAK,OAAOvgB,CAAO,CAAA,CAMrB,KAAKA,EAAuBmlB,EAAgBnnB,EAA0B,OACpE,GAAI,CAACL,GACH,OAGE,OAAOqC,GAAY,WACjBhC,EACFgC,EAAU,CAAE,MAAAmlB,EAAO,QAASnlB,EAAS,YAAahC,CAAK,EAEvDgC,EAAU,CAAE,QAASA,EAAS,YAAamlB,CAA2B,GAI1E,MAAMjY,EAAuB,CAAE,GAAG,KAAK,SAAU,GAAGlN,CAAQ,EAE5D,OAAIkN,EAAK,MAAQ,OAAOA,EAAK,MAAS,WAC/BA,EAAA,KAAOgS,UAAQhS,EAAK,IAAI,IAGxBgJ,EAAA,KAAK,iBAAL,YAAAA,EAAqB,YAAYhJ,EAAI,CAG9C,OAAQ,QACDgJ,EAAA,KAAA,iBAAA,MAAAA,EAAgB,cAAa,CAGpC,OAAOlW,EAAkC,CACvC,KAAK,SAAW,CAAE,GAAG,KAAK,SAAU,GAAGA,CAAQ,CAAA,CAGjD,OAAQ,CACN,MAAMkkF,EAAU,IAAID,GAAe,KAAK,QAAQ,EAEhD,OAAAC,EAAQ,YAAc,KAAK,YAEpBA,CAAA,CAGT,SAAU,SACR,KAAK,cAAchuE,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,KAAK,cACnD4U,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcvC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAC/Chb,GAAc,IAAI,CAAA,CAGpB,aAAc,CACL,MAAA,EAAA,CAGT,QAAQsJ,EAAU7W,EAA2D,GAAI,CAC/E,KAAM,CAAE,SAAAmkF,EAAU,GAAGC,CAAA,EAAWpkF,EAEhC,KAAK,OAAOokF,CAAM,EAClB,KAAK,YAAcvtE,GAEfstE,GAAY,CAACttE,EAAI,OAAO,iBAAiB,YAC3CA,EAAI,OAAO,iBAAiBstE,GAAY,UAAU,EAAI,KACxD,CAGF,WAAW79E,EAA0C,CACnD,GAAI,CAAC3I,GAAU,OAET,MAAAqQ,EAAK2c,GAAarkB,CAAM,EAE1B0H,IACF,KAAK,SAAWA,EAEZ,KAAK,UACP,KAAK,YAAc,KAAK,SAAS,YAAY,KAAK,UAAU,EAE5D,KAAK,aAAa,EAEtB,CAGM,cAAe,CACjB,GAAA,CAAC,KAAK,WAAarQ,GAAU,CAC3B,GAAA,CAAC,KAAK,YACR,QAAQ,KAAK,kEAAkE,EAE1E,KAAA,WAAa,SAAS,cAAc,KAAK,EACzC,KAAA,UAAYwlF,YAAUC,EAAS,EACpC,KAAK,UAAY,KAAK,UAAU,MAAM,KAAK,UAAU,MAChD,CACL,MAAMl7D,EAAQE,EAAA,YAAYg7D,GAAW,KAAM,IAAI,EAE1C,KAAA,WAAa,SAAS,cAAc,KAAK,EACxCl7D,EAAA,WAAa,KAAK,YAAY,SAE7BK,SAAAL,EAAO,KAAK,UAAU,EAExB,KAAA,UAAY2C,GAA8B3C,CAAK,CAAA,CAGjD,KAAA,WAAa,KAAK,WAAW,mBAChC,KAAK,UAAY,SAAS,MAAM,YAAY,KAAK,UAAU,CAAA,CAG/D,OAAO,KAAK,SAAA,CAEhB,CAEa,MAAAm8D,GAAU,IAAIJ,GCvIdK,GAAiB,uBACjBC,GAAiB,uBCX9BC,GAAe5/D,kBAAgB,CAC7B,MAAMxO,EAAG,CAAE,MAAAiD,GAAS,CACZ,MAAAorE,EAAgBztE,EAAAA,OAAOutE,GAAgB,IAAI,EAEhC,OAAAE,GAAAxtE,EAAA,QAAQqtE,GAAgBG,EAAc,YAAY,EAE5D,IAAMn+D,EAAAA,WAAWjN,EAAO,SAAS,CAAA,CAE5C,CAAC,ECEYqrE,GAAgBpiE,GAAW,CACtC,QAASJ,EACT,UAAW,OACX,aAAcA,EACd,QAAS,OACT,MAAO,CAAC,OAAQ,MAAM,EACtB,eAAgB,OAChB,SAAUC,GACV,UAAWe,GACX,OAAQhB,EACR,KAAM,OACN,MAAOA,EACP,OAAQA,EACR,MAAOA,EACP,SAAUmB,EAAsC,EAChD,SAAUA,EAAoF,EAC9F,eAAgBA,EAAU,EAC1B,eAAgBA,EAAU,CAC5B,CAAC,EAKYshE,GAAoBtiE,GAAU,CACzC,MAAO,CACL,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,IACX,EACA,SAAU,CACR,KAAM,QACN,QAAS,EACX,EACA,SAAU,CACR,KAAM,QACN,QAAS,EACX,EACA,QAAS,CACP,KAAM,QACN,QAAS,EACX,EACA,UAAW,CACT,KAAM,QACN,QAAS,EACX,EACA,KAAM,CACJ,KAAM,OACN,QAAS,KAAO,CAAC,EACnB,EACA,SAAUgB,EAA4C,CACxD,CAAC,EC3De,SAAAuhE,GACdC,EACAn7D,EACA,CACM,MAAAtE,EAAQyB,EAAAA,IAAIg+D,EAAS,KAAK,EAEhC,SAASC,EAAS/mF,EAA+B,OAC3C2rB,EAAQ,MACVtE,EAAM,MAAQrnB,KAASmY,EAAAwT,EAAQ,MAAM,cAAd,YAAAxT,EAA2B,SAAU,KAE5DkP,EAAM,MAAQrnB,CAChB,CAGFgkB,OAAAA,QAAM8iE,EAAmB9mF,GAAA,CACvB+mF,EAAS/mF,CAAK,CAAA,CACf,EAED6rB,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS,IAAM,CACbq8D,EAASD,EAAS,KAAK,CAAA,CACxB,CAAA,CACF,EAEMz/D,CACT,6ICNM,MAAAM,EAAKtF,GAAc,UAAU,EAG7BjL,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,QAAS,CACP,QAAS,GACT,OAAQ,EACV,EACA,UAAW,CACT,QAAS,SACT,UAAW3oB,GAASisC,GAAmB,SAASjsC,CAAK,CACvD,EACA,aAAc,GACd,QAAS,CACP,QAAS,QACT,aAAoB,CAAC,QAAS,QAAS,QAAQ,EAAE,SAASA,CAAK,CACjE,EACA,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,eAAgB,IAAM2nB,EAAG,GAAG,MAAM,EAClC,SAAU,GACV,UAAW,KACX,OAAQ,GACR,KAAM,KACN,MAAO,GACP,OAAQ,GACR,MAAO,EAAA,CACR,EAEKyuB,EAAOC,EAEP2wC,EAAc/tE,EAAAA,OAAOutE,GAAgB,IAAI,EACzC,CAAE,MAAA/5C,CAAM,EAAIX,GAAO,EACnB0oB,EAAar7C,GAAc,EAE3B8tE,EAAW,CAAC,CAACD,EACb3/D,EAAQmuB,EAAAA,MAAMp+B,EAAO,OAAO,EAC5Boc,EAAY1K,EAAAA,IAAI1R,EAAM,SAAS,EAC/Bq9C,EAAiB3rC,EAAAA,IAAI1R,EAAM,OAAO,EAClC8vE,EAAcp+D,MAAI,EAAK,EAEvBsjB,EAAW66C,EAAWn+D,EAAA,IAAI,EAAK,EAAI0sB,EAAA,MAAMp+B,EAAO,UAAU,EAE1DikB,EAAQ5iB,WAAS,IAAM,CAAC,EAAEuuE,GAAA,MAAAA,EAAa,OAAS5vE,EAAM,MAAM,EAE5DiX,EAAU7C,GAAgB4pC,CAAkB,EAC5C9oB,EAASxjB,EAAAA,IAAmB,EAC5B,CAAE,UAAA6M,EAAW,WAAA6W,EAAY,aAAAK,CAAA,EAAiBX,GAAU,CACxD,UAAA1Y,EACA,MAAA6H,EACA,SAAA+Q,EACA,QAAA/d,EACA,OAAQ5V,EAAAA,SAAS,IAAA,OAAM,OAAAN,EAAAm0B,EAAO,QAAP,YAAAn0B,EAAc,QAAO,EAC5C,OAAQ,GACR,OAAQ8uE,EAAW,CAAC,GAAI,CAAC,EAAI,MAAA,CAC9B,EACK5mB,EAAewmB,GAASx/D,EAAOsO,CAAS,EAExC3a,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG8sC,EAAe,KACrC,EACD,EACK0yB,EAAU1uE,EAAAA,SAAS,KAAMuuE,GAAA,YAAAA,EAAa,QAAS5vE,EAAM,KAAK,EAEhE8B,EAAA,QAAQqtE,GAAgB,IAAK,EAC7B,CAACnvE,EAAM,QACL8B,EAAA,QACEstE,GACAtiE,WAAS,CACP,MAAOijE,EACP,MAAA9rD,EACA,aAAAsa,EACA,mBAAA2f,EACA,mBAAAC,CACD,CAAA,CACH,EAEFvxC,EAAA,MACE,IAAM5M,EAAM,QACHpX,GAAA,CACPy0D,EAAe,MAAQz0D,CAAA,CAE3B,EAEAgkB,EAAA,MACE,IAAM5M,EAAM,UACHpX,GAAA,CACPonF,EAAapnF,CAAK,CAAA,CAEtB,EAEAgkB,QAAMywC,EAAyBz0D,GAAA,CACzBA,GACW6sC,EAAA,CACf,CACD,EAEDhhB,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS,IAAM,CACb08D,EAAahwE,EAAM,SAAS,CAAA,CAC7B,CAAA,CACF,EAEY8R,EAAA,CACX,SAAA+9D,EACA,eAAAxyB,EACA,QAAA0yB,EACA,QAAA94D,EACA,UAAAsH,EACA,OAAA2W,EACA,mBAAAgpB,EACA,mBAAAC,EACA,mBAAAC,CAAA,CACD,EAED,SAASqF,EAAW/G,EAAkB,CAChCW,EAAe,QAAUX,IAE7BW,EAAe,MAAQX,EAEvB1d,EAAK,iBAAkB0d,CAAO,EACpBvuC,EAAAnO,EAAM,SAAU08C,CAAO,EAAA,CAGnC,SAASsB,GAAqB,CAC5B7vC,EAAUnO,EAAM,cAAc,EAE1BA,EAAM,cAAgBA,EAAM,UAAY,UAAYq9C,EAAe,QACrEoG,EAAW,EAAK,EAChBt1C,EAAUnO,EAAM,cAAc,EAChC,CAGO,SAAAu+B,EAAa0xC,EAA6BC,EAAsC,CACnFlwE,EAAM,UAAY,WACpByjD,EAAW,EAAK,EACNt1C,EAAAnO,EAAM,SAAUiwE,EAAQC,CAAQ,GAGxC,OAAON,GAAA,YAAAA,EAAa,eAAiB,YACvCA,EAAY,aAAa,CAAC3mB,EAAa,MAAQ,GAAGgnB,CAAM,EAAG,CAACjwE,EAAM,MAAQ,GAAI,GAAGkwE,CAAQ,CAAC,CAC5F,CAGF,SAASF,EAAapnF,EAAkB,CACtC,KAAM,CAACunF,CAAU,EAAIvnF,EAAM,MAAM,GAAG,EAEhCinF,GAAYM,IAAe,SAAWA,IAAe,OAC7C/zD,EAAA,MAAQiZ,EAAM,MAAQ,aAAe,cAE/CjZ,EAAU,MAAQxzB,CACpB,CAGI,KAAA,CAAE,MAAA+S,CAAM,EAAI66B,GAAc,EAEhC,SAAS0nB,GAAqB,CACxBl+C,EAAM,UAAY,UACpB,aAAarE,EAAM,KAAK,EAEpB,OAAOi0E,GAAA,YAAAA,EAAa,qBAAuB,YAC7CA,EAAY,mBAAmB,EAG3Bj0E,EAAA,MAAQ,WAAW,IAAM,CAC7B8nD,EAAW,EAAI,CAAA,EACdrG,EAAW,KAAK,EACrB,CAGF,SAASe,GAAqB,CACxBn+C,EAAM,UAAY,UACpB,aAAarE,EAAM,KAAK,EAEpB,OAAOi0E,GAAA,YAAAA,EAAa,qBAAuB,YAC7CA,EAAY,mBAAmB,EAG3Bj0E,EAAA,MAAQ,WAAW,IAAM,CAC7B8nD,EAAW,EAAK,CAAA,EACfrG,EAAW,KAAK,EACrB,CAGF,SAASgB,GAAqB,CACxBp+C,EAAM,UAAY,SACTyjD,EAAA,CAACpG,EAAe,KAAK,CAClC,6BAKAhrC,EAAA,mBAqCM,MAAA,SApCA,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EAChB,aAAYs6C,EACZ,aAAYC,CAAA,GAEb1rC,EAAAA,mBAQM,MAAA,SAPA,YAAJ,IAAI8L,EACH,MAAKjM,EAAA,eAAA,CAAGJ,WAAG,cAAemrC,EAAc,MAAGnrC,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,QAAA,EAAA,EAAA,CAAA,EACjD,QAAO6tC,EACP,UAAO,4BAAgBA,EAAkB,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,6BAClBA,EAAkB,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAE1C7rC,aAAaC,EAAA,OAAA,SAAA,CAAA,SAEftB,EAAAA,YAqBegB,EAAA,MAAAm9D,EAAA,EAAA,KAAA,mBApBb,IAmBS,CAnBTn+D,cAmBSgB,EAAAA,MAAAotC,EAAA,EAAA,SAlBH,SAAJ,IAAIpqB,EACH,MAAK5iB,EAAAA,eAAA,CAAcJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,EAAsB2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAoBs/D,EAAW39D,EAAE,MAAA3B,CAAA,EAAC,IAAG,SAAA,QAAA,EAAA,KAAuC2B,EAAA,MAAAlS,CAAA,EAAM,SAAA,GAMrI,QAASq9C,EAAc,MACvB,MAAO0yB,EAAO,OAAID,EAAW,MAC7B,GAAI59D,QAAUkjB,CAAA,EACd,WAAYljB,EAAAA,MAAKlS,CAAA,EAAC,eAClB,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,aAAYk+C,EACZ,aAAYC,EACZ,4BAAa2xB,EAAW,MAAA,IACxB,4BAAaA,EAAW,MAAA,GAAA,qBAEzB,IAAyB,CAAzBv9D,aAAyBC,EAAA,OAAA,MAAA,CAAA,6JC1P3B,MAAAjC,EAAKtF,GAAc,UAAU,8BAIjCoH,EAAA,mBAEK,KAAA,CAFA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAU,KAAK,MAAA,GAC9BgC,aAAaC,EAAA,OAAA,SAAA,wGCAjB,MAAMxS,EAAQuR,EAER6+D,EAAsBvuE,EAAAA,OAAOstE,GAAgB,IAAI,EAEjD5+D,EAAKtF,GAAc,UAAU,EAC7BgM,EAAUvF,MAAI,IAAI,EAClBzB,EAAQmuB,EAAAA,MAAMp+B,EAAO,OAAO,EAC5BqwE,EAAc3+D,EAAAA,IAAI1R,EAAM,SAAS,EAEjCipD,EAAewmB,GAASx/D,EAAOgH,CAAO,EAEtCrT,EAAYvC,EAAAA,SAAS,IAAM,CACzB,MAAAivE,EAAY//D,EAAG,GAAG,MAAM,EAEvB,MAAA,CACL,CAAC+/D,CAAS,EAAG,GACb,CAAC,GAAGA,CAAS,YAAY,EAAGtwE,EAAM,SAClC,CAAC,GAAGswE,CAAS,YAAY,EAAG,CAACtwE,EAAM,UAAYA,EAAM,SACrD,CAAC,GAAGswE,CAAS,WAAW,EAAGtwE,EAAM,OACnC,CAAA,CACD,EAEY8R,EAAA,CAAE,QAAAmF,EAAS,aAAAsnB,EAAc,EAEtC,SAASA,GAAe,CAClBv+B,EAAM,UAAYqwE,EAAY,QAI9B,OAAOD,GAAwB,YACbA,EAAA,CAACnnB,EAAa,KAAM,EAAG,CAACjpD,EAAM,MAAQ,CAAA,CAAE,CAAC,EAGrDmO,EAAAnO,EAAM,SAAWipD,EAAa,KAAM,EAAA,6BAK9C52C,EAAA,mBAQK,KAAA,SAPC,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EACjB,KAAK,WACL,SAAS,IACR,QAAO26B,CAAA,GAERhsB,aAAaC,EAAA,OAAA,SAAA,UCjDuB,SAAA8yB,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAKxC,SAAS0jF,GAAex4E,EAAyBwY,EAAgB,CAC/D,OAAKxY,EAAKwR,KAEV2H,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,MAAM,GAACr7B,CAAAA,EAAA,YAAApN,GAAA,CAAA,KAEf/L,EAAKwR,KAAI,MACR,CAAC,CAAEpd,MAAO4L,EAAKy4E,WAAaz4E,EAAK5L,KAAM,EAAI4L,EAAKwR,KAAaoH,KAAK,CAAC,EAAA,IAAA,CAAA,CAAA,EANzD,IAUzB,CAEA,SAAS8/D,GAAmB14E,EAAyBwY,EAAgB,CACnE,OAAKxY,EAAK24E,SAEVx/D,EAAAA,YAAA,MAAA,CAAA,MAAmBX,EAAGg8B,GAAG,UAAU,GAAIx0C,CAAAA,EAAK24E,QAAQ,CAAA,EAFzB,IAG7B,CAEA,SAASC,GAAgB54E,EAAyBwY,EAAgB,CAChE,MAAMjH,EAAQU,GAAU,EAClB,CAAEqrB,MAAAA,CAAO,EAAGX,GAAQ,EAE1B,OAAAxjB,EAAA,YAAA0/D,GAAAl+D,aAAA,CAAA,QAAA,GAAA,SAGc,EAAK,EAAA,CAEbm+D,cAAgB33E,GAAsB,CACpCA,EAAMkzC,eAAgB,EACtBlzC,EAAM0xC,gBAAiB,CACzB,CAAC,CAAA,EAAA,CAID/6B,QAASA,IAAAqB,EAAA,YAAA4/D,GAAA,CAAA,MAEEvgE,EAAGg8B,GAAG,MAAM,EAAC,MACbx0C,EAAKhP,IAAG,QACNgP,EAAKsrD,QAAO,SACXtrD,EAAK8b,QAAQ,EAAA,CAAAhE,QAAAA,IAEtB0gE,CAAAA,GAAex4E,EAAMwY,CAAE,EACvB,OAAOxY,EAAKuY,UAAa,WACxBvY,EAAKuY,SAAQ,EAAEY,EAAAA,YAAA,OAAA,CAAA,MAEFX,EAAGg8B,GAAG,OAAO,EAAC,MAAS,CAAEpgD,MAAO4L,EAAK5L,KAAM,CAAC,EAAA,CACtD4L,EAAKkY,OAASlY,EAAKhP,GAAG,CAAA,EAG1B0nF,GAAmB14E,EAAMwY,CAAE,EAACW,EAAAA,YAAA,MAAA,CAAA,MACjB,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGg8B,GAAG,OAAO,CAAC,CAACr7B,EAAAA,CAAAA,EAAA,YAAApN,GAAA4O,EAAAA,WAElC2iB,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMmoF,UAAYznE,EAAM1gB,MAAMooF,WAAU,CAAA,MAC1D,CAAE7kF,MAAO4L,EAAKy4E,WAAaz4E,EAAK5L,KAAM,CAAC,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,EAIrD,EACD8kF,KAAMA,IAAA,CAAA,IAAAlkC,EAAA,OAAA77B,EAAAA,YAAAggE,GAAA,CAAA,MAEK,CACL3gE,EAAGg8B,GAAG,MAAM,EACZx0C,EAAK+G,SAAUqyE,KAAKC,GAAKA,EAAE7nE,IAAI,EAC3BgH,EAAGm8B,IAAI,OAAQ,OAAO,EACtBn8B,EAAGm8B,IAAI,OAAQ,SAAS,EAC5B30C,EAAK+G,SAAUqyE,KAAKC,GAAKA,OAAAA,OAAAA,EAAAA,EAAEtyE,WAAFsyE,YAAAA,EAAY7mF,OAAM,EACvCgmB,EAAGm8B,IAAI,OAAQ,QAAQ,EACvBn8B,EAAGm8B,IAAI,OAAQ,UAAU,CAAC,CAC/B,EAAApH,GAAAyH,EAEAh1C,EAAK+G,SAAUxB,IAAIlT,GAAKinF,GAAW,CAAE9gE,GAAAA,EAAI1G,OAAQzf,EAAG,CAAC,CAAC,EAAA2iD,EAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,CAAA,CAAA,CAAA,CAAA,CAE1D,CAAA,CAIT,CAEO,SAASskC,GAAW,CAAExnE,OAAAA,EAAQ0G,GAAAA,CAAkD,EAAG,OACxF,OAAI1G,EAAAA,EAAO/K,WAAP+K,MAAAA,EAAiBtf,OACZomF,GAAgB9mE,EAAQ0G,CAAE,EAEjCW,EAAAA,YAAA4/D,GAAA,CAAA,MAEWvgE,EAAGg8B,GAAG,MAAM,EAAC,MACb1iC,EAAO9gB,IAAG,QACR8gB,EAAOw5C,QAAO,SACbx5C,EAAOgK,QAAQ,EAAA,CAAAhE,QAAAA,IAExB0gE,CAAAA,GAAe1mE,EAAQ0G,CAAE,EACzB,OAAO1G,EAAOyG,UAAa,WAC1BzG,EAAOyG,SAAQ,EAAEY,EAAAA,YAAA,OAAA,CAAA,MAEJX,EAAGg8B,GAAG,OAAO,EAAC,MAAS,CAAEpgD,MAAO0d,EAAO1d,KAAM,CAAC,EAAA,CACxD0d,EAAOoG,OAASpG,EAAO9gB,GAAG,CAE9B,EACA0nF,GAAmB5mE,EAAQ0G,CAAE,CAAC,CAAA,CAAA,CAIvC,yFCjGM,MAAAA,EAAKtF,GAAc,aAAa,EAChC,CAAE,MAAAoqB,CAAM,EAAIX,GAAO,EACnBgoB,EAAUhrC,MAAI,EAAK,EACnB4/D,EAAU5/D,EAAyB,IAAA,EAAE,EACrCq/B,EAASr/B,MAAI,EAAK,EAElByB,EAAWrG,EAAAA,SAAS,CACxB,EAAG,EACH,EAAG,CAAA,CACJ,EAEKq6C,EAAWz1C,MAAoC,IAAI,EACnD+8D,EAAW/8D,MAAyB,IAAI,EAE9C,SAAS6/D,EAAgB1mF,EAA6B,CAC3C,OAAAsoB,EAAA,EAAItoB,EAAQ,SAAW,EACvBsoB,EAAA,EAAItoB,EAAQ,SAAW,EAChCymF,EAAQ,MAAQzmF,EAAQ,QACjBkmD,EAAA,MAAQlmD,EAAQ,QAAU,GAEjC6xD,EAAQ,MAAQ,GAET,IAAI,QAAiC1mB,GAAA,CACjCmxB,EAAA,MAAS/6C,GAAgB,CAChC4pB,EAAQ5pB,CAAI,CACd,EACAqiE,EAAS,MAAQ,IAAM,CACrBz4C,EAAQ,IAAI,CACd,CAAA,CACD,CAAA,CAGH,SAASw7C,GAAmB,CAC1BrqB,EAAS,MAAQ,KACjBsnB,EAAS,MAAQ,IAAA,CAGnB,SAASlwC,EAAanyB,EAAa,CACjCswC,EAAQ,MAAQ,GAEZnzD,GAAW49D,EAAS,KAAK,IAC3BA,EAAS,MAAM/6C,CAAI,EACFolE,EAAA,EACnB,CAGF,SAAS7E,GAAe,CACtBjwB,EAAQ,MAAQ,GAEZnzD,GAAWklF,EAAS,KAAK,IAC3BA,EAAS,MAAM,EACE+C,EAAA,EACnB,CAGF,OAAA1/D,EAAa,CAAE,QAAA4qC,EAAS,SAAAvpC,EAAU,gBAAAo+D,EAAiB,aAAAhzC,EAAc,aAAAouC,EAAc,wBAI7Ex6D,EAAAA,YAkCWD,EAAA,MAAA0+D,EAAA,EAAA,CAjCD,QAASl0B,EAAO,wCAAPA,EAAO,MAAA1B,GACvB,wBAAQ9oC,EAAA,MAAE3B,CAAA,EAAC,IAAK2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,EACtB,QAAQ,QACP,UAAW2B,EAAA,MAAKmjB,CAAA,EAAA,aAAA,cAChB,OAAQ0b,EAAM,MACd,SAAU,GACV,MAAK4U,EAAAA,eAAA,CAAkB,IAAA,GAAAxyC,EAAS,CAAC,KAAqB,KAAA,GAAAA,EAAS,CAAC,IAAA,GAIhE,0CAAD,IAAyB,CAAA,EAAA,CAAA,UAAA,MAAA,CAAA,GACxB,SAAQorB,EACR,eAAeouC,CAAA,GAGL,eACT,IAee,CAffz7D,cAeegB,EAAAA,MAAAg/D,EAAA,EAAA,CAdZ,MAAK5+D,EAAAA,eAAA,CAAcJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAoB+gE,EAAA,MAAQ,QAAUF,EAAE,IAAI,EAAIl/D,EAAAA,SAAG,IAAuB,OAAA,OAAA,EAAAA,EAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,SAAA,EAA+B+gE,EAAA,MAAQ,KAAKF,GAAKA,EAAE,UAAYA,EAAE,SAAS,MAAM,EAAgBl/D,EAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,QAAA,EAAiC2B,QAAA3B,CAAA,EAAG,IAAG,OAAA,UAAA,wBASpP,IAAuB,kBADzB8B,EAAAA,mBAKYqsB,EAAA,SAAA,KAAAC,EAAAA,WAJK2yC,EAAO,MAAfv5E,kBADToa,EAAAA,YAKYD,EAAA,MAAAb,EAAA,EAAA,CAHT,IAAKtZ,EAAK,IACV,KAAI,CAAA,OAAYA,EAAI,GAAEma,EAAAA,MAAE3B,CAAA,CAAA,EACxB,SAAU2B,QAAUm/D,EAAA,0HC7FxB,MAAMI,EAAmB,CAW9B,aAAc,CAVdrmE,GAAA,aAEQA,GAAA,oBACAA,GAAA,kBACAA,GAAA,kBACAA,GAAA,mBACAA,GAAA,iBACAA,GAAA,iBACAA,GAAA,mBAGN,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,SAAW,KAChB,KAAK,WAAa,KAClB,KAAK,KAAO,aAAA,CAGd,KAAKvgB,EAA6B,CAChC,GAAI,CAACrC,GACH,OAGF,KAAM,CAAE,OAAA2I,EAAS,SAAS,KAAM,GAAG89E,CAAW,EAAApkF,EAE9C,YAAK,SAAW,KAAK,aAAasG,CAAM,EAAG,gBAAgB89E,CAAM,EAE1D,KAAK,QAAA,CAGd,SAAU,SACR,KAAK,cAAcluE,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,KAAK,cACnD4U,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcvC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAC/Chb,GAAc,IAAI,CAAA,CAGpB,aAAc,CACL,MAAA,EAAA,CAGT,QAAQsJ,EAAU7W,EAAiC,GAAI,CAC/C,KAAA,CAAE,SAAAmkF,GAAankF,EAErB,KAAK,YAAc6W,GAEfstE,GAAY,CAACttE,EAAI,OAAO,iBAAiB,gBAC3CA,EAAI,OAAO,iBAAiBstE,GAAY,cAAc,EAAI,KAC5D,CAGM,aAAa79E,EAA0C,SAC7D,GAAK3I,GAEL,IAAI,KAAK,SAAU,CACjB,IAAIkpF,EAAW,KAAK,UAChB53C,EAAY,KAAK,WAErB,MAAM63C,EAAU,IAAM,CACpBD,GAAA,MAAAA,EAAU,UACG53C,GAAA1mB,EAAAA,OAAO,KAAM0mB,CAAS,EAExB43C,EAAA,KACC53C,EAAA,IACd,EAEK,KAAA,SAAS,QAAQ63C,CAAO,GAC7B5wE,EAAA,KAAK,YAAL,MAAAA,EAAgB,cAAa,MAE7B4U,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcvC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAK7C,GAFJ,KAAK,SAAW,KAEZ,CAAC,KAAK,YACR,QAAQ,KAAK,sEAAsE,EAE9E,KAAA,WAAa,SAAS,cAAc,KAAK,EACzC,KAAA,UAAY46D,YAAUC,EAAS,EACpC,KAAK,UAAY,KAAK,UAAU,MAAM,KAAK,UAAU,MAChD,CACL,MAAMl7D,EAAQE,EAAA,YAAYg7D,GAAW,KAAM,IAAI,EAE1C,KAAA,WAAa,SAAS,cAAc,KAAK,EACxCl7D,EAAA,WAAa,KAAK,YAAY,SAE7BK,SAAAL,EAAO,KAAK,UAAU,EAExB,KAAA,UAAY2C,GAAkC3C,CAAK,CAAA,CAGrD,YAAA,WAAa,KAAK,WAAW,kBAClC,KAAK,SAAWyC,GAAarkB,CAAM,GAAK,SAAS,KAE5C,KAAA,SAAS,YAAY,KAAK,UAAU,EAElC,KAAK,UAAA,CAEhB,CAEa,MAAAygF,GAAc,IAAIH,GC9Eb,IAAAI,IAAAA,IAChBA,EAAAC,EAAA,SAAA,CAAA,EAAA,WACAD,EAAAC,EAAA,KAAA,CAAA,EAAA,OACAD,EAAAC,EAAA,YAAA,CAAA,EAAA,cACAD,EAAAC,EAAA,YAAA,CAAA,EAAA,cACAD,EAAAC,EAAA,MAAA,CAAA,EAAA,QALgBD,IAAAA,IAAA,CAAA,CAAA,EAWL,MAAAE,GAAkB,OAAO,OAAyB,CAC7D,OACA,WACA,OACA,OACF,CAAC,EAEYC,GAAkB,IAAA,KAAK,EAAE,EAGzBC,GAAW,gDClDlBC,GAAa,MAAM,KAAK,CAAE,OAAQ,IAAM,CAACjxE,EAAG7W,IAAMA,CAAC,EAEzD,SAAS+nF,GAAYppF,EAAa2H,EAAY,CACrC,OAAA3H,IAAQ,QAAQ2H,CAAG,IAAM3H,IAAQ,SAAS2H,CAAG,IAAM3H,IAAQ,GAAG2H,CAAG,EAC1E,CAEO,SAAS0hF,GAAel5E,EAAsB,CAC7C,MAAAnQ,EAAMmQ,EAAM,MAAQA,EAAM,IAEhC,IAAIrQ,EAAuE,KACvEwpF,EAAU,GAEd,OAAQtpF,EAAK,CACX,IAAK,MAAO,CACAspF,EAAA,GACHxpF,EAAAqQ,EAAM,SAAW,OAAS,OACjC,KAAA,CAEF,IAAK,aAAc,CAEPm5E,EAAA,GACHxpF,EAAA,OACP,KAAA,CAEF,IAAK,SACL,IAAK,YAAa,CAENwpF,EAAA,GACHxpF,EAAA,OACP,KAAA,CAEF,IAAK,UAAW,CAEJwpF,EAAA,GACHxpF,EAAA,KACP,KAAA,CAEF,IAAK,YAAa,CAENwpF,EAAA,GACHxpF,EAAA,OACP,KAAA,CAEF,IAAK,QACL,IAAK,IACL,IAAK,QACL,IAAK,cAAe,CAERwpF,EAAA,GACHxpF,EAAA,KACP,KAAA,CAEF,IAAK,SAAU,CAEHwpF,EAAA,GACHxpF,EAAA,MACP,KAAA,CACF,CAGF,GAAIwpF,EACFn5E,EAAM,eAAe,EACrBA,EAAM,gBAAgB,MACjB,CAEL,MAAMo5E,EAAiBJ,GAAW,aAAiBC,GAAYppF,EAAK2H,CAAG,CAAC,EAEpE,CAAC4hF,IACIzpF,EAAAypF,EAEPp5E,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACxB,CAGK,OAAArQ,CACT,CAEO,SAAS0pF,GACdC,EACAC,EAAgB/gE,MAAI8gE,EAAS,CAAC,CAAC,EAC/B,CACM,MAAAE,EAAc,MAAM,KAAKF,CAAQ,EACjCG,EAAcD,EAAY,OAC1BE,EAAU9lE,EAAA,SACd4lE,EAAY,OAAO,CAAC7yE,EAAMjE,KACxBiE,EAAKjE,CAAO,EAAI,GACTiE,GACN,CAAS,CAAA,CACd,EAEA,SAASgzE,EAAkBC,EAAY,CACvBL,EAAA,MAAQK,EAAM,KAAKjqF,GAAQ+pF,EAAQ/pF,CAAI,CAAC,GAAK4pF,EAAc,KAAA,CAGlE,SAAAM,EAAYlqF,EAAiBo0D,EAAU,GAAO,CAChDp0D,IACH4pF,EAAc,MAAQ,MAGxB,MAAMK,EAAQ71B,EAAU,MAAM,KAAKy1B,CAAW,EAAE,UAAYA,EACtD5hF,EAAQgiF,EAAM,UAAUE,GAAUA,IAAWnqF,CAAI,EAEnD,CAACiI,EACe+hF,EAAAC,EAAM,MAAMhiF,EAAO6hF,CAAW,EAAE,OAAOG,EAAM,MAAM,EAAGhiF,CAAK,CAAC,CAAC,EAE/E+hF,EAAkBC,CAAK,CACzB,CAGO,SAAAG,EAAYpqF,EAAuBqqF,EAAU,GAAM,CACrDT,EAAc,QACHA,EAAA,OAAS5pF,IAAS,OAASkU,GAAQ21E,CAAW,EAAIA,EAAY,CAAC,IAAM,MAGrF,QAAStoF,EAAI,EAAGA,EAAIuoF,EAAa,EAAEvoF,EACjC,GAAIqoF,EAAc,QAAUC,EAAYtoF,CAAC,EAAG,CACpC,MAAA+oF,EAAWtqF,IAAS,OAAS,MAAM,KAAK6pF,CAAW,EAAE,UAAYA,EACjE9vD,GAAa/5B,IAAS,OAAS8pF,EAAcvoF,EAAIA,EAAI,GAAKuoF,EAC1DG,EAAQI,EACVC,EAAS,MAAMvwD,EAAW+vD,CAAW,EAAE,OAAOQ,EAAS,MAAM,EAAGvwD,CAAS,CAAC,EAC1EA,EACEuwD,EAAS,MAAMvwD,EAAW+vD,CAAW,EACrC,CAAC,EAEPE,EAAkBC,CAAK,EAEvB,KAAA,CAEJ,CAGK,MAAA,CACL,cAAAL,EACA,QAAAG,EACA,YAAAG,EACA,YAAAE,CACF,CACF,CAEA,MAAMG,GAAa,CAAC,EAAG,EAAG,CAAC,EACrBC,GAAa,CAAC,GAAI,GAAI,EAAE,EAEd,SAAAC,GAAaC,EAAwBC,EAAwB,CACrE,MAAAC,EAAWpyE,EAAAA,SAAS,IACjBkyE,EAAU,MAAQA,EAAU,MAAM,MAAM,GAAG,EAAE,IAAI5hF,EAAQ,EAAIyhF,EACrE,EACKM,EAAWryE,EAAAA,SAAS,IACjBmyE,EAAU,MAAQA,EAAU,MAAM,MAAM,GAAG,EAAE,IAAI7hF,EAAQ,EAAI0hF,EACrE,EACKhlB,EAAWhtD,EAAAA,SAAS,IAAM,CAC9B,MAAM7S,EAAMilF,EAAS,MACfllF,EAAMmlF,EAAS,MAErB,QAAStpF,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,CAC1B,GAAIoE,EAAIpE,CAAC,EAAImE,EAAInE,CAAC,EAAU,MAAA,GAC5B,GAAIoE,EAAIpE,CAAC,EAAImE,EAAInE,CAAC,EAAU,MAAA,EAAA,CAGvB,MAAA,EAAA,CACR,EAEKupF,EAAyC,CAC7C,KAAMC,EACN,OAAQ,CAACx+E,EAAMC,IAAWw+E,EAAiBz+E,EAAMC,CAAM,IAAMw8E,GAAa,MAC1E,OAAQ,CAACz8E,EAAMC,EAAQC,IAAWw+E,EAAiB1+E,EAAMC,EAAQC,CAAM,IAAMu8E,GAAa,KAC5F,EAEA,SAAS+B,EAAex+E,EAAc,CACpC,MAAM5G,EAAMilF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EACvC7kF,EAAMmlF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EAEtC,OAAAhlB,EAAS,MAAQj5D,EAAO7G,GAAO6G,EAAO5G,EAAM4G,EAAO5G,GAAO4G,EAAO7G,CAAA,CAGjE,SAAAslF,EAAiBz+E,EAAcC,EAAgB,CACtD,GAAIu+E,EAAex+E,CAAI,EAAG,OAAOy8E,GAAa,SAE9C,GAAI4B,EAAS,MAAM,CAAC,IAAMC,EAAS,MAAM,CAAC,GAAKt+E,IAASq+E,EAAS,MAAM,CAAC,EAAG,CACzE,MAAMjlF,EAAMilF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EACvC7kF,EAAMmlF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EAEzC,GAAAhlB,EAAS,MAAQh5D,EAAS9G,GAAO8G,EAAS7G,EAAM6G,EAAS7G,GAAO6G,EAAS9G,EAC3E,OAAOsjF,GAAa,IACtB,CAGF,GAAIz8E,IAASq+E,EAAS,MAAM,CAAC,EAAG,CAC9B,MAAMjlF,EAAMilF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EAEzC,GAAA/9E,EAAS7G,EAAK,OAAOqjF,GAAa,WAAA,CAGxC,GAAIz8E,IAASs+E,EAAS,MAAM,CAAC,EAAG,CAC9B,MAAMnlF,EAAMmlF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EAEzC,GAAAh+E,EAAS9G,EAAK,OAAOsjF,GAAa,WAAA,CAGxC,OAAOA,GAAa,KAAA,CAGb,SAAAiC,EAAiB1+E,EAAcC,EAAgBC,EAAgB,CACtE,GAAIu+E,EAAiBz+E,EAAMC,CAAM,IAAMw8E,GAAa,aAAcA,GAAa,SAG7E,GAAA4B,EAAS,MAAM,CAAC,IAAMC,EAAS,MAAM,CAAC,GACtCt+E,IAASq+E,EAAS,MAAM,CAAC,GACzBA,EAAS,MAAM,CAAC,IAAMC,EAAS,MAAM,CAAC,GACtCr+E,IAAWo+E,EAAS,MAAM,CAAC,EAC3B,CACA,MAAMjlF,EAAMilF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EACvC7kF,EAAMmlF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EAEzC,GAAAhlB,EAAS,MAAQ/4D,EAAS/G,GAAO+G,EAAS9G,EAAM8G,EAAS9G,GAAO8G,EAAS/G,EAC3E,OAAOsjF,GAAa,IACtB,CAGE,GAAAz8E,IAASq+E,EAAS,MAAM,CAAC,GAAKp+E,IAAWo+E,EAAS,MAAM,CAAC,EAAG,CAC9D,MAAMjlF,EAAMilF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EAEzC,GAAA99E,EAAS9G,EAAK,OAAOqjF,GAAa,WAAA,CAGpC,GAAAz8E,IAASs+E,EAAS,MAAM,CAAC,GAAKr+E,IAAWq+E,EAAS,MAAM,CAAC,EAAG,CAC9D,MAAMnlF,EAAMmlF,EAAS,MAAM,CAAC,GAAKL,GAAW,CAAC,EAEzC,GAAA/9E,EAAS/G,EAAK,OAAOsjF,GAAa,WAAA,CAGxC,OAAOA,GAAa,KAAA,CAGf,MAAA,CACL,SAAA4B,EACA,SAAAC,EACA,SAAArlB,EACA,eAAAslB,CACF,CACF,40CC7OA,MAAM3zE,EAAQuR,EA8ERytB,EAAOC,EAYP1uB,EAAKtF,GAAc,aAAa,EAEhCgM,EAAUvF,EAAAA,IAAiB,EAE3BzB,EAAQ5O,EAAAA,SAAS,IAAMrB,EAAM,OAAO,WAAa,EAAE,EACnD+zE,EAAc1yE,EAAAA,SAAS,IACnB,OAAO,KAAKrB,EAAM,OAAO,EAAqB,MAAcnX,GAC3D,CAACmX,EAAM,QAAQnX,CAAI,GAAKmX,EAAM,UAAUnX,CAAI,CACpD,CACF,EACK+a,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,GAAG,OAAO,CAAC,EAAG,GAClB,CAACA,EAAG,IAAI,QAAS,WAAW,CAAC,EAAGwjE,EAAY,MAC5C,CAACxjE,EAAG,IAAI,QAAS,OAAO,CAAC,EAAGvQ,EAAM,QACpC,EACD,EACKg0E,EAAgB3yE,EAAAA,SAAS,IACtBrB,EAAM,QAAQ,MAAQA,EAAM,QAAQ,QAAUA,EAAM,QAAQ,MACpE,EACKi0E,EAAgB5yE,EAAAA,SAAS,IACtB6yE,EAAY,MAAM,CAC1B,EACKC,EAAiB9yE,EAAAA,SAAS,IACvB6yE,EAAY,OAAO,CAC3B,EACKE,EAAgB/yE,EAAAA,SAAS,IACtB6yE,EAAY,MAAM,CAC1B,EACKG,EAAgBhzE,EAAAA,SAAS,IACtB6yE,EAAY,MAAM,CAC1B,EACKI,EAAkBjzE,EAAAA,SAAS,IACxB6yE,EAAY,QAAQ,CAC5B,EACKK,EAAkBlzE,EAAAA,SAAS,IACxB6yE,EAAY,QAAQ,CAC5B,EACKM,EAAenzE,EAAAA,SAAS,IACrBxK,GAAkBmJ,EAAM,UAAU,KAAMA,EAAM,UAAU,KAAK,CACrE,EACKy0E,EAAgBpzE,EAAAA,SAAS,IAAM,CACnC,KAAM,CAACqzE,EAAKC,EAAKC,CAAK,EAAI50E,EAAM,cAEzB,MAAA,CACL,CAAC00E,CAAG,EAAG,GACP,CAACC,CAAG,EAAG,GACP,CAACC,CAAK,EAAG,CACX,CAAA,CACD,EAEY9iE,EAAA,CACX,YAAAiiE,EACA,QAAA98D,EACA,MAAO,IAAM,QACXlW,EAAAkW,EAAQ,QAAR,MAAAlW,EAAe,OACjB,EACA,KAAM,IAAM,QACVA,EAAAkW,EAAQ,QAAR,MAAAlW,EAAe,MAAK,CACtB,CACD,EAED,SAASmzE,EAAYrrF,EAAoB,CACvC,MAAMgsF,EAAShsF,IAAS,OAClBisF,EAAS90E,EAAM,OAErB,OAAOA,EAAM,UAAUnX,CAAI,EACvBgsF,EACE70E,EAAM,UAAU,KAAK,SAAS,EAAE,SAAS,EAAG,GAAG,EAC/CnO,GAAamO,EAAM,UAAUnX,CAAI,CAAC,EACpC,GAAGgsF,EAAS,GAAGC,CAAM,GAAGA,CAAM,GAAK,EAAE,GAAGA,CAAM,GAAGA,CAAM,EAAA,CAG7D,SAASC,EAAkBlsF,EAAoB,CACtC,OAAAmX,EAAM,SAAWA,EAAM,WAAanX,EAAO0nB,EAAG,IAAI,OAAQ,SAAS,EAAI,IAAA,CAGhF,SAASykE,EAAiBnsF,EAAoB,CACxCmX,EAAM,UAEVg/B,EAAK,aAAcn2C,CAAI,CAAA,CAGzB,SAASwjD,EAAYnzC,EAAsB,CACrC,GAAA,CAAC8G,EAAM,QAAS,OAEd,MAAAnX,EAAOupF,GAAel5E,CAAK,EAEjC,GAAI8G,EAAM,SAAU,CAClB,OAAQnX,EAAM,CACZ,IAAK,KAAM,CACTm2C,EAAK,OAAO,EACZ,KAAA,CAEF,IAAK,MAAO,CACVA,EAAK,QAAQ,EACb,KAAA,CACF,CAGF,MAAA,CAGF,OAAQn2C,EAAM,CACZ,IAAK,OAAQ,CACXm2C,EAAK,WAAW,EAChB,KAAA,CAEF,IAAK,OAAQ,CACXA,EAAK,WAAW,EAChB,KAAA,CAEF,IAAK,KAAM,CACJA,EAAA,QAAS9lC,EAAM,OAAO,EAC3B,KAAA,CAEF,IAAK,OAAQ,CACN8lC,EAAA,OAAQ9lC,EAAM,OAAO,EAC1B,KAAA,CAEF,IAAK,KAAM,CACT8lC,EAAK,OAAO,EACZ,KAAA,CAEF,IAAK,MAAO,CACVA,EAAK,QAAQ,EACb,KAAA,CAEF,QACM,OAAOn2C,GAAS,UAClBm2C,EAAK,QAASn2C,CAAI,CAEtB,CACF,CAGF,SAASohD,GAAa,CACpBjL,EAAK,MAAM,CAAA,6BAKX3sB,EAAA,mBAqLM,MAAA,SApLA,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EACjB,KAAK,OACL,SAAS,KACR,UAASyoC,EACT,OAAMpC,CAAA,GAEK,CAAA14B,EAAA,UAAYwiE,EAAW,mBAAnC,EAAA1hE,EAAA,mBAEM,MAAA,OAFgC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,qBAC7CgB,EAAW,WAAA,EAAA,CAAA,kBAEhBc,EAyKW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAvKDntB,EAAA,QAAQ,oBADhBc,EAAAA,mBAcM,MAAA,OAZH,MAAQC,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,MAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,KAClB,gBAAejQ,EAAM,UAAU,KAC/B,iBAAgBi0E,EAAa,MAC7B,gBAAe,EACf,gBAAe,KACf,kBAAiB1iE,EAAS,UAC1B,8BAAgBkjE,EAAa,MAAA,KAAA,EAC7B,uBAAOO,EAAgB,MAAA,EAAA,IAErB,gBAAAf,EAAa,KAAA,EAAA,GAAA/4B,EAAA,+BAGV3pC,EAAA,OAAO,oBADfc,EAAAA,mBAQM,MAAA,OANH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,8BAAgBkkE,EAAa,MAAA,KAAA,EAC7B,uBAAOO,EAAgB,MAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,IAAI,EAAA,CAAA,+BAEAA,EAAA,QAAQ,qBAAxBc,qBAgCWqsB,WAAA,CAAA,IAAA,GAAA,CA9BDntB,EAAA,QAAQ,oBADhBc,EAAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EACb,cAAA,GACA,MAAA,CAAiB,MAAA,IAAA,CAAA,oBAEdgB,EAAa,aAAA,EAAA,CAAA,+BAElBkB,EAAAA,mBAaM,MAAA,CAZH,MAAQH,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,OAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,MAClB,gBAAejQ,EAAM,UAAU,MAC/B,iBAAgBm0E,EAAc,MAC9B,gBAAe,EACf,gBAAe,GACf,kBAAiB5iE,EAAS,UAC1B,8BAAgBkjE,EAAa,MAAA,MAAA,EAC7B,uBAAOO,EAAgB,OAAA,MAErB,gBAAAb,EAAc,KAAA,EAAA,GAAAzjB,EAAA,EAGXn/C,EAAA,OAAO,qBADfc,EAAAA,mBAQM,MAAA,OANH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,8BAAgBkkE,EAAa,MAAA,MAAA,EAC7B,uBAAOO,EAAgB,OAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,KAAK,EAAA,CAAA,iEAGHA,EAAA,QAAQ,oBAAxBc,qBAgCWqsB,WAAA,CAAA,IAAA,GAAA,CA9BDntB,EAAA,QAAQ,OAASA,EAAA,QAAQ,oBADjCc,EAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EACb,cAAA,GACA,MAAA,CAAiB,MAAA,IAAA,CAAA,oBAEdgB,EAAa,aAAA,EAAA,CAAA,+BAElBkB,EAAAA,mBAaM,MAAA,CAZH,MAAQH,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,MAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,KAClB,gBAAejQ,EAAM,UAAU,KAC/B,iBAAgBo0E,EAAa,MAC7B,gBAAe,EACf,gBAAeI,EAAY,OAAA,GAC3B,kBAAiBjjE,EAAS,UAC1B,8BAAgBkjE,EAAa,MAAA,KAAA,EAC7B,uBAAOO,EAAgB,MAAA,MAErB,gBAAAZ,EAAa,KAAA,EAAA,GAAAa,EAAA,EAGV1jE,EAAA,OAAO,oBADfc,EAAAA,mBAQM,MAAA,OANH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,8BAAgBkkE,EAAa,MAAA,KAAA,EAC7B,uBAAOO,EAAgB,MAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,IAAI,EAAA,CAAA,iEAIFyiE,EAAa,qBAA7B3hE,EAAAA,mBA4EWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CA3ETjsB,EAAAA,mBAAiC,MAAA,CAA3B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,CAAA,UAEVgB,EAAA,QAAQ,oBADhBc,EAAAA,mBAaM,MAAA,OAXH,MAAQC,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,MAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,KAClB,gBAAejQ,EAAM,UAAU,KAC/B,iBAAgBq0E,EAAa,MAC7B,gBAAe,EACf,gBAAe,GACf,kBAAiB9iE,EAAS,UAC1B,uBAAOyjE,EAAgB,MAAA,EAAA,IAErB,gBAAAX,EAAa,KAAA,EAAA,GAAAa,EAAA,+BAGV3jE,EAAA,OAAO,oBADfc,EAAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,uBAAOykE,EAAgB,MAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,IAAI,EAAA,CAAA,+BAEAA,EAAA,QAAQ,sBAAxBc,qBAyBWqsB,WAAA,CAAA,IAAA,GAAA,CAxBEntB,EAAA,QAAQ,oBAAnBc,EAAAA,mBAEM,MAAA,OAFoB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EAAe,cAAA,EAAA,oBAChDgB,EAAa,aAAA,EAAA,CAAA,+BAElBkB,EAAAA,mBAYM,MAAA,CAXH,MAAQH,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,QAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,OAClB,gBAAejQ,EAAM,UAAU,OAC/B,iBAAgBs0E,EAAe,MAC/B,gBAAe,EACf,gBAAe,GACf,kBAAiB/iE,EAAS,UAC1B,uBAAOyjE,EAAgB,QAAA,MAErB,gBAAAV,EAAe,KAAA,EAAA,GAAAa,EAAA,EAGZ5jE,EAAA,OAAO,sBADfc,EAAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,uBAAOykE,EAAgB,QAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,MAAM,EAAA,CAAA,iEAGJA,EAAA,QAAQ,sBAAxBc,qBAyBWqsB,WAAA,CAAA,IAAA,GAAA,CAxBEntB,EAAA,QAAQ,QAAUA,EAAA,QAAQ,oBAArCc,EAAA,mBAEM,MAAA,OAFsC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EAAe,cAAA,EAAA,oBAClEgB,EAAa,aAAA,EAAA,CAAA,+BAElBkB,EAAAA,mBAYM,MAAA,CAXH,MAAQH,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,QAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,OAClB,gBAAejQ,EAAM,UAAU,OAC/B,iBAAgBu0E,EAAe,MAC/B,gBAAe,EACf,gBAAe,GACf,kBAAiBhjE,EAAS,UAC1B,yBAAOyjE,EAAgB,QAAA,MAErB,gBAAAT,EAAe,KAAA,EAAA,GAAAa,EAAA,EAGZ7jE,EAAA,OAAO,sBADfc,EAAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,yBAAOykE,EAAgB,QAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,MAAM,EAAA,CAAA,kHCxZf8jE,GAAcloE,GAAW,CACpC,YAAaY,GACb,YAAaC,GACb,YAAa,OACb,KAAM,OACN,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,CAAC,OAAQ,MAAM,EACvB,OAAQ,OACR,OAAQ,OACR,SAAUjB,EACV,QAASA,EACT,MAAOA,EACP,QAAS,OACT,QAAS,OACT,QAASA,EACT,QAASA,EACT,QAAS,OACT,SAAUgB,GACV,SAAUd,GACV,YAAa,OACb,SAAUF,EACV,aAAcA,EACd,eAAgB,SAChB,YAAaA,EACb,UAAW,OACX,SAAUmB,EAAgD,EAC1D,iBAAkBA,EAAsC,EACxD,iBAAkBA,EAAsC,EACxD,QAASA,EAAkE,EAC3E,cAAeA,EAA0D,EACzE,SAAUA,EAA4C,EACtD,YAAaA,EAA0D,EACvE,iBAAkBA,EAA+C,EACjE,YAAaA,EAA+C,EAC5D,eAAgBA,EAA+C,EAC/D,QAASA,EAAU,CACrB,CAAC,ECzCM,SAAS2iC,GAAiB,CAC/B,KAAAC,EACA,SAAAj9B,EACA,MAAAsK,EACA,OAAAC,EACA,QAAA4yB,EACA,QAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,eAAAC,CACF,EAUG,CACD,KAAM,CAAE,UAAA/4B,EAAW,cAAAO,CAAc,EAAIT,GAAa,EAE5Cmd,EAAY5jB,EAAAA,IAAiB,EAC7B2/B,EAAY3/B,EAAAA,IAAiB,EAG7BuF,EAAUnK,EAAAA,SAAS,CACvB,GAAIwoB,EACJ,MAAO3jC,GAASwsB,EAAM,KAAK,EAC3B,OAAQxsB,GAASysB,EAAO,KAAK,CAAA,CAC9B,EAGKwW,EAAU9nB,EAAAA,SAAS,CACvB,GAAIukC,EACJ,MAAO,EACP,OAAQ,CAAA,CACT,EAEK92B,EAAIlC,EAAU,CAAC24B,EAAQ,KAAK,EAC5Bx2B,EAAInC,EAAU,CAAC44B,EAAQ,KAAK,EAE5BqkC,EAAU5jE,MAAI,EAAK,EAEnB4/B,EAAWj5B,EAAU,CAAC,EACtBk5B,EAAWl5B,EAAU,CAAC,EAEtBm5B,EAAenwC,EAAAA,SAAS,IACrB4V,EAAQ,MAAQA,EAAQ,MAAQ2d,EAAQ,MAAQ,CACxD,EACK6c,EAAepwC,EAAAA,SAAS,IACrB4V,EAAQ,OAASA,EAAQ,OAAS2d,EAAQ,OAAS,CAC3D,EACK8c,EAAgBrwC,EAAAA,SAAS,IAE3B,CAACwS,EAAS,OACVi9B,EAAK,QAAU,YACf,CAAC,CAAC75B,EAAQ,OACV2d,EAAQ,MAAQ3d,EAAQ,MAAQ,CAEnC,EACK06B,EAAgBtwC,EAAAA,SAAS,IAE3B,CAACwS,EAAS,OACVi9B,EAAK,QAAU,cACf,CAAC,CAAC75B,EAAQ,QACV2d,EAAQ,OAAS3d,EAAQ,OAAS,CAErC,EACK26B,EAAavwC,EAAAA,SAAS,IACtB4V,EAAQ,MACH,KAAK,IAAI,KAAK,IAAKA,EAAQ,OAAS2d,EAAQ,OAAS,GAAM,IAAK,EAAE,EAAG,CAAC,EAGxE,EACR,EACKid,EAAaxwC,EAAAA,SAAS,IACtB4V,EAAQ,OACH,KAAK,IAAI,KAAK,IAAKA,EAAQ,QAAU2d,EAAQ,QAAU,GAAM,IAAK,EAAE,EAAG,CAAC,EAG1E,EACR,EAEDhoB,EAAA,MAAM0oB,EAAW,IAAM,CACNigD,EAAA,CAAA,CAChB,EACD3oE,EAAA,MAAMykC,EAAW,IAAM,CACFS,EAAA,CAAA,CACpB,EACDllC,QAAMokC,EAAkBpoD,GAAA,CACtB2xB,EAAE,MAAQ,CAAC3xB,EACEsmD,EAAA,CAAA,CACd,EACDtiC,QAAMqkC,EAAkBroD,GAAA,CACtB4xB,EAAE,MAAQ,CAAC5xB,EACEsmD,EAAA,CAAA,CACd,EACDtiC,EAAA,MAAMuR,EAAO,IAAM,CACFo3D,EAAA,EAAE,KAAKrmC,CAAY,CAAA,CACnC,EACDtiC,EAAA,MAAMwR,EAAQ,IAAM,CACHm3D,EAAA,EAAE,KAAKrmC,CAAY,CAAA,CACnC,EAED,SAASsmC,EAAmBC,EAA8B,CACxD,OAAOniE,WAAS,IAAM,CAChB,GAAA,CAAC2D,EAAQ,GAAI,OAEjB,MAAMjtB,EAAOyrF,IAAa,QAAUt3D,EAAM,MAAQC,EAAO,MACnDs3D,GAAoBD,EAAS,MAAM,EAAG,CAAC,EAAE,cAAgBA,EAAS,MAAM,CAAC,EAG3E,OAAOzrF,GAAS,SACd,CAACA,EAAK,SAAS,IAAI,IAAM,CAACA,GAAQ,OAAO,MAAM,OAAOA,CAAI,CAAC,GAC7DitB,EAAQw+D,CAAQ,EACdx+D,EAAQ,GAAG,SAASy+D,EAAiB,EAAoC,EAEnEz+D,EAAAw+D,CAAQ,EAAI,SAASzrF,CAAI,EAGnCitB,EAAQw+D,CAAQ,EAAIzrF,CACtB,CACD,CAAA,CAGH,eAAeurF,GAAiB,CAC9B,MAAMI,EAA4B,CAAC,EAE/B7kC,EAAK,QAAU,YACR6kC,EAAA,KAAKH,EAAmB,OAAO,CAAC,EAGvC1kC,EAAK,QAAU,cACR6kC,EAAA,KAAKH,EAAmB,QAAQ,CAAC,EAGtC,MAAA,QAAQ,IAAIG,CAAQ,CAAA,CAGxB,IAAAh6E,EAEJ,SAASm2C,GAAqB,CAC5B,oBAAan2C,CAAK,EAEX,IAAI,QAAyBq6B,GAAA,CAClCs/C,EAAQ,MAAQ,GAEhB35E,EAAQ,WAAW,IAAM,CACnB,GAAA,CAACi5B,EAAQ,GAAI,CACPoB,EAAA,EACR,MAAA,CAGE8a,EAAK,QAAU,aACTlc,EAAA,MAAQA,EAAQ,GAAG,YAEvB3d,EAAQ,OAAS2d,EAAQ,MAC3Bra,EAAE,MAAQ,EAENA,EAAE,QAAU,IACZA,EAAA,MAAQ,CAACy2B,EAAQ,QAKrBF,EAAK,QAAU,eACTlc,EAAA,OAASA,EAAQ,GAAG,aAExB3d,EAAQ,QAAU2d,EAAQ,OAC5Bpa,EAAE,MAAQ,EAENA,EAAE,QAAU,IACZA,EAAA,MAAQ,CAACy2B,EAAQ,QAKzB,WAAW,IAAM,CACfqkC,EAAQ,MAAQ,GACHpmC,EAAA,EACLlZ,EAAA,GACP,CAAC,GACH,CAAC,CAAA,CACL,CAAA,CAMH,SAASkZ,GAAe,CACjBomC,EAAQ,QAITxkC,EAAK,QAAU,aACfv2B,EAAA,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAE,MAAOi3B,EAAa,KAAK,CAAC,EAEvDV,EAAK,QAAU,SACjBt2B,EAAE,MAAQ,IAIVs2B,EAAK,QAAU,eACft2B,EAAA,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAE,MAAOi3B,EAAa,KAAK,CAAC,EAEvDX,EAAK,QAAU,SACjBv2B,EAAE,MAAQ,IAIC23B,EAAA,EACDt5B,EAAA,EAAA,CAGhB,SAASs5B,GAAiB,CACfZ,EAAA,MAAQ/+C,GAAcgoB,EAAE,OAASi3B,EAAa,OAAS,IAAK,IAAK,CAAC,EAClED,EAAA,MAAQh/C,GAAcioB,EAAE,OAASi3B,EAAa,OAAS,IAAK,IAAK,CAAC,EAElEH,EAAA,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAS,MAAO,GAAG,CAAC,EACjDC,EAAA,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAS,MAAO,GAAG,CAAC,CAAA,CAG5D,SAASpd,EAAage,EAA6B,CACzCtmB,EAAA,EACRqlB,GAAA,MAAAA,EAAWiB,EAAM,CAGnB,IAAIh4B,EAAY,GAEhB1F,EAAAA,UAAU,IAAM,CACNoX,EAAA,EACI1R,EAAA,EAAA,CACb,EAED,eAAe0R,GAAU,CACnB,OAAOslB,GAAoB,YACbA,EAAA,EAGHokC,EAAA,EACT,MAAAzjC,EAAA,EAAqB,KAAK,IAAM,CACpC,WACE,IAAM,CACS5C,EAAA,EAET,OAAOkC,GAAmB,YACbA,EAAA,CAEnB,EACAj3B,EAAY,GAAK,GACnB,CAAA,CACD,CAAA,CAGI,MAAA,CACL,UAAAmb,EACA,UAAA+b,EAEA,QAAAp6B,EACA,QAAA2d,EACA,QAAA0gD,EACA,EAAA/6D,EACA,EAAAC,EACA,SAAA82B,EACA,SAAAC,EACA,aAAAC,EACA,aAAAC,EACA,cAAAC,EACA,cAAAC,EACA,WAAAC,EACA,WAAAC,EAEA,aAAA1d,EACA,aAAA+a,EACA,eAAAgD,EACA,QAAArmB,EACA,cAAAjT,CACF,CACF,CC1Pa,MAAA05B,GAAc,OAAO,OAAqB,CACrD,aACA,mBACA,WACA,MACF,CAAC,EAEYC,GAAa95C,GAAY,YAAc,YACvC+5C,GAAW/5C,GAAY,WAAa,2FChB3C,MAAAuH,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,YAAa,KACb,YAAa,KACb,YAAa,KACb,KAAM,CACJ,QAAS,WACT,UAAW3oB,IAAS0pD,GAAY,SAAS1pD,EAAK,CAChD,EACA,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,SAAU,GACV,QAAS6P,GACT,MAAO,GACP,QAAS,CACP,QAAS,EACT,OAAQ,EACV,EACA,QAAS,CACP,QAAS,EACT,OAAQ,EACV,EACA,QAAS,GACT,QAAS,GACT,QAAS,KACT,SAAU,KACV,SAAU,GACV,YAAa,IACb,SAAU,GACV,aAAc,GACd,eAAgB,CACd,QAAS,KACT,OAAQ,EACV,EACA,YAAa,GACb,UAAW,KAAA,CACZ,EAEK+6C,EAAU/4C,GAAmB,EAE7B8V,EAAKtF,GAAc,QAAQ,EAC3B,CAAE,MAAAoqB,CAAM,EAAIX,GAAO,EACnB,CAAE,MAAA/4B,CAAM,EAAI66B,GAAc,EAE1Bid,EAAW/hC,MAAI,EAAK,EACpB89B,EAAY99B,MAAI,EAAK,EACrBkkE,EAAqBlkE,MAAY,CAAC,EAClCo/B,EAAOzvC,WAAS,IAAOrB,EAAM,OAAS,mBAAqB,aAAeA,EAAM,IAAK,EAE3F,IAAI61E,EAAY,IAEhB,MAAMniC,EAAOhiC,EAAAA,IAAsB,EAC7BiiC,EAAOjiC,EAAAA,IAAsB,EAEnC,IAAIkiC,EAAc,GAEZ,KAAA,CACJ,UAAAte,EACA,UAAA+b,EAEA,QAAAp6B,EACA,QAAAq+D,EACA,EAAA/6D,EACA,EAAAC,EACA,SAAA82B,EACA,SAAAC,EACA,aAAAC,EACA,aAAAC,EACA,cAAAC,EACA,cAAAC,EACA,WAAAC,EACA,WAAAC,EAEA,aAAA1d,EACA,aAAA+a,EACA,eAAAgD,EACA,QAAArmB,EACA,cAAAjT,GACEi4B,GAAiB,CACnB,KAAAC,EACA,SAAU1S,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,MAAOo+B,EAAAA,MAAMp+B,EAAO,OAAO,EAC3B,OAAQo+B,EAAAA,MAAMp+B,EAAO,QAAQ,EAC7B,QAASo+B,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,QAASo+B,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,SAAmBhI,IAAA,CACPmW,EAAAnO,EAAM,SAAUhI,EAAK,CACjC,EAEA,eAAgB,IAAM,CACN67C,GAAA,EAETD,IACWA,EAAA,GACAE,GAAA,EAChB,CACF,CACD,EAEKC,EAAaC,EAAAA,gBAAgB,CACjC,SAAAC,GACA,QAAApoB,EACA,SAAA2M,GACA,SAAAE,GACA,gBAAA0Z,GACA,aAAA8B,EAAA,CACD,EAGKC,EAAUziC,MAAI,EAAK,EAEnB0iC,GAAc/yC,EAAAA,SAAS,IAEzByvC,EAAK,QAAU,SACd3nD,GAAO6W,EAAM,QAAQ,GAAK,CAACA,EAAM,SAAW,OAC3C8wC,EAAK,QAAU,cAAgBY,EAAc,OAC5CZ,EAAK,QAAU,YAAca,EAAc,MAEjD,EAEK/kC,EAAA,MAAA,CAAC,IAAM5M,EAAM,SAAU,IAAMA,EAAM,WAAW,EAAG,IAAM,CAC9Cq0C,EAAA,EACb/gC,EAAAA,SAASwgC,EAAa,CAAA,CACvB,EAED,SAASA,IAAgB,CACnB,GAAA,CAACM,GAAY,MAAO,OAEXC,EAAA,EAEb,MAAMtV,GAAW+R,EAAK,QAAU,aAAe,QAAU,SACnDn+C,GAAQm+C,EAAK,QAAU,aAAeU,EAAeC,EAErD75C,GAAOk5C,EAAK,QAAU,aAAev2B,EAAIC,EACzCi6B,GAAUz0C,EAAM,YAAc,GAAK,GAAKA,EAAM,YAEpD,IAAI20C,GAAY,GAEZ,OAAO30C,EAAM,UAAa,WAC5B20C,GAAa19B,EAAQ8nB,EAAQ,EAAI/+B,EAAM,SAAY,IAGrD,MAAM81E,GAAgB,IAAM,CACX5jC,EAAA,EACDt5B,EAAA,EACAi7B,GAAA,EACd0C,GAAgBzF,EAAK,KAAK,CAC5B,EACMroB,GAAS,IAAM,CACnB7wB,GAAK,OAAS+8C,GAEV/8C,GAAK,OAASjF,GAAM,OACtBiF,GAAK,MAAQjF,GAAM,MACnBwhD,EAAQ,MAAQ,GAEF2hC,GAAA,EAERn6E,EAAA,IAAM,WAAW,IAAM,CAClB68B,GAAA,EAAG,EAAG,GAAG,EAEZ78B,EAAA,MAAQ,WAAW,IAAM,CAC7Bw4C,EAAQ,MAAQ,GAEhBoC,GAAgBzF,EAAK,KAAK,EACnBroB,GAAA,CAAA,EACN,IAAMgsB,EAAO,GACfA,EAAO,IAEIqhC,GAAA,EAEV3hC,EAAQ,OACV,sBAAsB1rB,EAAM,EAGlC,EAEM9sB,EAAA,KAAO,WAAW,IAAM,CAC5Bw4C,EAAQ,MAAQ,GACT1rB,GAAA,GACNgsB,EAAO,CAAA,CAGZ,SAASJ,GAAe,CACtBF,EAAQ,MAAQ,GAEhB,aAAax4C,EAAM,IAAI,EACvB,aAAaA,EAAM,KAAK,EACxB,aAAaA,EAAM,GAAG,CAAA,CAIlB,MAAAiI,GAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAGugC,EAAK,KAAK,EAChB,CACE,CAACvgC,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGkjC,EAAS,MAC/B,CAACljC,EAAG,GAAG,WAAW,CAAC,EAAGi/B,EAAU,MAChC,CAACj/B,EAAG,GAAG,UAAU,CAAC,EAAG,CAAC+kE,EAAQ,MAC9B,CAAC/kE,EAAG,GAAG,eAAe,CAAC,EAAGvQ,EAAM,YAAA,CAEpC,CACD,EACK2Q,GAAQtP,EAAAA,SAAS,IAAM,CACrB,KAAA,CAAE,MAAA8c,GAAO,OAAAC,EAAA,EAAWpe,EAEnB,MAAA,CACL,MAAOme,GACH,OAAOA,IAAU,SACf,OAAO,MAAM,OAAOA,EAAK,CAAC,EACxBA,GACA,GAAG,OAAOA,EAAK,CAAC,KAClB,GAAGA,EAAK,KACV,OACJ,OAAQC,GACJ,OAAOA,IAAW,SAChB,OAAO,MAAM,OAAOA,EAAM,CAAC,EACzBA,GACA,GAAG,OAAOA,EAAM,CAAC,KACnB,GAAGA,EAAM,KACX,MACN,CAAA,CACD,EACKyqB,GAAexnC,EAAAA,SAAS,IAAM,QAC3B,MAAA,EAACN,GAAAf,EAAM,cAAN,YAAAe,GAAmB,MAAOf,EAAM,YAAauQ,EAAG,GAAG,SAAS,CAAC,CAAA,CACtE,EACK+7D,GAAejrE,EAAAA,SAAS,IAAM,QAClC,MAAO,EAACN,GAAAf,EAAM,cAAN,YAAAe,GAAmB,MAAOf,EAAM,WAAW,CAAA,CACpD,EAED4M,QAAM8kC,EAAwB9oD,IAAA,CAClBulB,EAAAnO,EAAM,iBAAkBpX,EAAK,CAAA,CACxC,EACDgkB,QAAM+kC,EAAwB/oD,IAAA,CAClBulB,EAAAnO,EAAM,iBAAkBpX,EAAK,CAAA,CACxC,EACDgkB,QAAM0oE,EAAkB1sF,IAAA,CAClBA,IACFgtF,EAAmB,MAAQ,GAC3BznE,EAAUnO,EAAM,OAAO,GAEvB41E,EAAmB,MAAQ,CAC7B,CACD,EACDlqE,EAAAA,YAAY,IAAM,CACX2lC,EAAU,QAEfA,EAAU,MAAM,MAAM,UAAY,eAAehc,EAAM,MAAQ,CAAC9a,EAAE,MAAQA,EAAE,KAAK,OAC/EC,EAAE,KACJ,SAAA,CACD,EACD9O,EAAAA,YAAY,IAAM,CACX2lC,EAAU,QAELA,EAAA,MAAM,MAAM,mBACpBukC,EAAmB,MAAQ,EAAI,GAAK,GAAGA,EAAmB,KAAK,KAAA,CAClE,EAEDnhE,EAAAA,UAAU,IAAM,CACd,GAAI,CAACjsB,IAAY,CAAC8sC,EAAU,MAAO,OAG7B,MAAAuG,GADQ,iBAAiBvG,EAAU,KAAK,EACvB,iBAAiB/kB,EAAG,GAAG,eAAe,CAAC,EAAE,KAAK,EAEjEsrB,GAAS,SAAS,IAAI,EACxBg6C,EAAY,WAAWh6C,EAAQ,EACtBA,GAAS,SAAS,GAAG,IAClBg6C,EAAA,WAAWh6C,EAAQ,EAAI,KAGrCg6C,EAAY,OAAO,MAAMA,CAAS,EAAI,IAAMA,CAAA,CAC7C,EAEDjhE,EAAAA,gBAAgBy/B,CAAY,EAEfviC,EAAA,CACX,SAAAw/B,EACA,SAAAC,EACA,EAAAh3B,EACA,EAAAC,EACA,QAAA86D,EAEA,WAAA1jC,EACA,WAAAC,EACA,cAAAH,EACA,cAAAC,EAEA,QAASrc,EACT,QAAS+b,EACT,KAAAqC,EACA,KAAAC,EAEA,QAAA9nB,EACA,SAAA2M,GACA,SAAAE,GACA,gBAAA0Z,GACA,aAAA8B,GACA,gBAAAqB,GACA,gBAAAC,GACA,kBAAAC,GACA,qBAAAC,EAAA,CACD,EAED,SAASC,IAAmB,CACnB,MAAA,CACL,QAAS,CAACp7B,EAAE,MACZ,QAAS,CAACC,EAAE,MACZ,SAAU82B,EAAS,MACnB,SAAUC,EAAS,KACrB,CAAA,CAGF,SAASsC,IAAgB,YAClB9yC,GAAA2yC,EAAA,QAAA,MAAA3yC,GAAO,aAAauwC,EAAS,QAC7B37B,GAAAg+B,EAAA,QAAA,MAAAh+B,GAAO,aAAa47B,EAAS,MAAK,CAGzC,SAASpC,GAAgBj2C,GAAmB,CAC1C,GAAI,CAAC8G,EAAM,SAAW9G,GAAM,OAAS,GAAKT,GACjC,MAAA,GAGTo9C,EAAkB38C,EAAK,CAAA,CAGzB,SAAS68E,EAAiB78E,GAAmB,CAC3C,GAAI,CAAC8G,EAAM,SAAW9G,GAAM,QAAQ,SAAW,EACtC,MAAA,GAGT28C,EAAkB38C,EAAK,CAAA,CAIzB,IAAI48C,EAAiB,EACjBC,EAAiB,EAGjBC,EAAkB,EAClBC,EAAkB,EAElB+/B,EAAQ,GACR7kF,EAA6B,KAC7B8kF,GAAW,EAEf,SAASpgC,EAAkB38C,GAAgC,CACzD,GAAI,CAACw4C,EAAc,OAAS,CAACC,EAAc,MAClC,MAAA,GAGLz4C,GAAM,YACRA,GAAM,eAAe,EAGTg9C,GAAA,EAEd0/B,EAAmB,MAAQ,EAE3B,MAAMhjC,GAAU,YAAa15C,GAAQA,GAAM,QAAQ,CAAC,EAAIA,GAExD48C,EAAiBv7B,EAAE,MACnBw7B,EAAiBv7B,EAAE,MACnBw7B,EAAkBpD,GAAQ,QAC1BqD,EAAkBrD,GAAQ,QAElBojC,EAAA,GACR7kF,EAAS+H,GAAM,OACf+8E,GAAW,KAAK,IAAI,EAEX,SAAA,iBAAiB1jC,GAAY6D,EAAiB,EAC9C,SAAA,iBAAiB5D,GAAU6D,EAAe,EAEzCloC,EAAAnO,EAAM,cAAe21C,IAAkB,CAAA,CAGnD,SAASS,GAAkBl9C,GAAgC,QACzDA,GAAM,gBAAgB,EAEjBT,IACHS,GAAM,eAAe,EAGvB,MAAM05C,GAAU,YAAa15C,GAAQA,GAAM,QAAQ,CAAC,EAAIA,GAClDg9E,GAAQtjC,GAAQ,QAAUoD,EAAkB,EAAI,EAAI,GACpDmgC,GAAQvjC,GAAQ,QAAUqD,EAAkB,EAAI,EAAI,GAE1D,KAAIl1C,GAAAf,EAAM,iBAAN,YAAAe,GAAA,KAAAf,EAAuB,CAAE,MAAAk2E,GAAO,MAAAC,EAAM,MAAO,GACxC,MAAA,GAGT3mC,EAAU,MAAQ,GAEdkC,EAAc,QACdn3B,EAAA,MAAQu7B,EAAiBlD,GAAQ,QAAUoD,EACrCggC,EAAA,IAGNrkC,EAAc,QACdn3B,EAAA,MAAQu7B,EAAiBnD,GAAQ,QAAUqD,EACrC+/B,EAAA,IAGNh2E,EAAM,SACKkvC,EAAA,GAEEgD,EAAA,EACDt5B,EAAA,GAGFi7B,GAAA,EACd0C,GAAgBzF,EAAK,KAAK,CAAA,CAG5B,SAASuF,GAAgBn9C,GAAgC,CACnD,CAAC88E,GAAS7kF,GAAU+H,GAAM,SAAW/H,GAAU,KAAK,IAAA,EAAQ8kF,IAAY,KAC1E9kF,EAAO,cAAc,IAAI,WAAW,QAAS+H,EAAK,CAAC,EAG5C,SAAA,oBAAoBq5C,GAAY6D,EAAiB,EACjD,SAAA,oBAAoB5D,GAAU6D,EAAe,EAEtDu/B,EAAmB,MAAQ,GACnBI,EAAA,GAEKI,GAAA,EACAlnC,EAAA,EACC2E,GAAA,EACJ1lC,EAAAnO,EAAM,YAAa21C,IAAkB,EACjC7B,GAAA,CAAA,CAIP,SAAA4C,GAAYx9C,GAAmBrQ,GAAiC,QACjE,MAAA8tD,GAAmBhF,EAAc,OAAS9oD,KAAS,WACnD+tD,GAAqBlF,EAAc,OAAS7oD,KAAS,aAGrDguD,GAAO39C,GAAM,OAAS,EAAI,GAAK,EAErC,GACE8G,EAAM,QACL22C,IAAoBC,OACrB71C,GAAAf,EAAM,iBAAN,YAAAe,GAAA,KAAAf,EAAuB,CAAE,MAAO,CAAC62C,GAAM,MAAO,CAACA,EAAM,MAAM,GAE3D39C,GAAM,eAAe,EACrBA,GAAM,gBAAgB,MAEf,OAAA,GAGT,GAAI43C,EAAK,QAAU,QAAUA,EAAK,QAAUjoD,GAAa,MAAA,GAE3CqtD,GAAA,EAEd,MAAMmgC,GAAgBx/B,IAAQhuD,KAAS,aAAemX,EAAM,OAASA,EAAM,QAEvE22C,GACFn8B,EAAE,OAAS67D,GACFz/B,KACTr8B,EAAE,OAAS87D,IAGAnnC,EAAA,EACC2E,GAAA,EACd0C,GAAgB1tD,EAAI,EAEpBslB,EAAUnO,EAAM,QAAS,CACvB,GAAG21C,GAAiB,EACpB,KAAA9sD,GACA,KAAM,CAACguD,EAAA,CACR,EAEa/C,GAAA,CAAA,CAGhB,SAASoC,IAAgB,CACV7B,EAAA,EACb,aAAa14C,EAAM,MAAM,CAAA,CAG3B,SAASy6E,IAAe,CAClBp2E,EAAM,SACFrE,EAAA,OAAS,WAAW,IAAM,CAC9B6zC,EAAU,MAAQ,IACjB,GAAG,EAENA,EAAU,MAAQ,EACpB,CAGF,SAASyH,GAAqBpuD,GAAiC,CAC7D4qD,EAAS,MAAQ,GACjBtlC,EAAUnO,EAAM,iBAAkB,CAAE,GAAG21C,GAAiB,EAAG,KAAA9sD,GAAM,CAAA,CAGnE,SAASsuD,GAAmBtuD,GAAiC,CAC3D4qD,EAAS,MAAQ,GACjBtlC,EAAUnO,EAAM,eAAgB,CAAE,GAAG21C,GAAiB,EAAG,KAAA9sD,GAAM,CAAA,CAGjE,SAASwuD,GAAiB/mD,GAAiB,CACzCghD,EAAS,MAAQhhD,GACfiqB,EAAA,MAASjqB,GAAUkhD,EAAa,MAAS,IAC7B54B,EAAA,EAEdzK,EAAUnO,EAAM,YAAa,CAC3B,GAAG21C,GAAiB,EACpB,KAAM,YAAA,CACP,EACDY,GAAgB,YAAY,CAAA,CAG9B,SAASgB,GAAiBjnD,GAAiB,CACzCihD,EAAS,MAAQjhD,GACfkqB,EAAA,MAASlqB,GAAUmhD,EAAa,MAAS,IAC7B74B,EAAA,EAEdzK,EAAUnO,EAAM,YAAa,CAC3B,GAAG21C,GAAiB,EACpB,KAAM,UAAA,CACP,EACDY,GAAgB,UAAU,CAAA,CAG5B,SAASA,GAAgB1tD,GAA+C,CACtEslB,EAAUnO,EAAM,SAAU,CACxB,GAAG21C,GAAiB,EACpB,KAAA9sD,EAAA,CACD,EACD2qD,EAAQ,KAAK,SAAU,CACrB,GAAGmC,GAAiB,EACpB,KAAA9sD,EAAA,CACD,CAAA,CAGH,SAASytF,IAAqB,CACxBhhD,EAAU,QACZA,EAAU,MAAM,UAAY,EAC5BA,EAAU,MAAM,WAAa,EAC/B,CAGF,SAAS2e,IAAW,CACZ,KAAA,CAAE,QAASjD,GAAS,QAASC,GAAS,SAAAK,GAAU,SAAAC,EAAS,EAAIoE,GAAiB,EAE7E,MAAA,CACL,QAAA3E,GACA,QAAAC,GACA,SAAAK,GACA,SAAAC,GACA,cAAeG,EAAc,MAC7B,cAAeC,EAAc,KAC/B,CAAA,CAGO,SAAA4kC,GAAe16C,GAAWg6C,EAAW,CAC5C,oBAAal6E,EAAM,IAAI,EAEhB,IAAI,QAAyBq6B,IAAA,CAClCr6B,EAAM,KAAO,WAAW,IAAMq6B,GAAQ,EAAG6F,GAAW,CAAC,CAAA,CACtD,CAAA,CAGM,SAAArD,GAAStd,GAAiBC,GAAiB0gB,GAAmB,CACrE,OAAA26C,GAAY36C,EAAQ,EACpBvoB,EAAAA,SAAS,IAAM,CACb,IAAI27B,GAAU,GAEVyC,EAAc,OAAS,KAAK,IAAIn3B,EAAE,MAAQW,EAAO,EAAI,MACvDX,EAAE,MAAQ,CAACW,GACD+zB,GAAA,IAGR0C,EAAc,OAAS,KAAK,IAAIn3B,EAAE,MAAQW,EAAO,EAAI,MACvDX,EAAE,MAAQ,CAACW,GACD8zB,GAAA,IAGCC,EAAA,EACC2E,GAAA,EAET5E,KAAS2mC,EAAmB,MAAQ,GAAA,CAC1C,EAEMW,GAAe16C,EAAQ,CAAA,CAGvB,SAAAnD,GAASld,GAAgBC,GAAgBogB,GAAmB,CACnE,OAAA26C,GAAY36C,EAAQ,EACpBvoB,EAAAA,SAAS,IAAM,CACb,IAAI27B,GAAU,GAEVzzB,IAAUk2B,IACZn3B,EAAE,OAASiB,GACDyzB,GAAA,IAGRxzB,IAAUk2B,IACZn3B,EAAE,OAASiB,GACDwzB,GAAA,IAGCC,EAAA,EACC2E,GAAA,EAET5E,KAAS2mC,EAAmB,MAAQ,GAAA,CAC1C,EAEMW,GAAe16C,EAAQ,CAAA,CAGhC,SAAS26C,GAAY36C,GAAmB,CAClC,OAAOA,IAAa,WACtB+5C,EAAmB,MAAQ/5C,GAEvB+5C,EAAmB,QAAU,GAC/BtiE,EAAAA,SAAS,IAAM,CACbsiE,EAAmB,MAAQ,EAAA,CAC5B,EAEL,CAGF,SAASxjC,GAAgBv5C,GAAsBgjC,GAAmBva,GAAS,EAAG,CAO5E,GANI,CAAC+vB,EAAU,QAEX,OAAOx4C,IAAO,WACXA,GAAAw4C,EAAU,MAAM,cAAcx4C,EAAE,GAGnC,CAACpP,GAAUoP,EAAE,GAAG,OAAO,QAAQ,QAAQ,EAErC,MAAAgiC,GAAcwW,EAAU,MAAM,sBAAsB,EACpDgB,GAASx5C,GAAG,sBAAsB,EAExC,IAAIqiB,GAAU,EACVC,GAAU,EAEV,OAAA21B,EAAK,QAAU,aACP51B,GAAAm3B,GAAO,KAAOxX,GAAY,KAAOvZ,IAGzCwvB,EAAK,QAAU,eACP31B,GAAAk3B,GAAO,IAAMxX,GAAY,IAAMvZ,IAGpCkX,GAAStd,GAASC,GAAS0gB,EAAQ,CAAA,CAG5C,SAASqY,GAAar7C,GAAsBgjC,GAAmBva,GAAS,EAAG,CAOzE,GANI,CAACgU,EAAU,QAEX,OAAOz8B,IAAO,WACXA,GAAAy8B,EAAU,MAAM,cAAcz8B,EAAE,GAGnC,CAACpP,GAAUoP,EAAE,GAAG,OAAO,QAAQ,QAAQ,EAErC,MAAAgiC,GAAcvF,EAAU,MAAM,sBAAsB,EACpD+c,GAASx5C,GAAG,sBAAsB,EAExC,IAAIqiB,GAAU,EACVC,GAAU,EAEV,OAAA21B,EAAK,QAAU,aACbuB,GAAO,KAAOxX,GAAY,KAAOvZ,GACzBpG,GAAAm3B,GAAO,KAAOxX,GAAY,KAAOvZ,GAClC+wB,GAAO,MAAQxX,GAAY,MAAQvZ,KAClCpG,GAAAm3B,GAAO,MAAQxX,GAAY,MAAQvZ,KAI7CwvB,EAAK,QAAU,eACbuB,GAAO,IAAMxX,GAAY,IAAMvZ,GACvBnG,GAAAk3B,GAAO,IAAMxX,GAAY,IAAMvZ,GAChC+wB,GAAO,OAASxX,GAAY,OAASvZ,KACpCnG,GAAAk3B,GAAO,OAASxX,GAAY,OAASvZ,KAI5CoX,GAASxd,GAASC,GAAS0gB,EAAQ,CAAA,CAG5C,SAAS0Z,IAAkB,CACzB,MAAO,CAAC,EAAG,CAAC/D,EAAa,KAAK,CAAA,CAGhC,SAASgE,IAAkB,CACzB,MAAO,CAAC,EAAG,CAAC/D,EAAa,KAAK,CAAA,CAGhC,SAASgE,GAAkBhiC,GAAwB,CACzC+/B,EAAA,GAAG,SAAU//B,EAAQ,CAAA,CAG/B,SAASiiC,GAAqBjiC,GAAwB,CAC5C+/B,EAAA,IAAI,SAAU//B,EAAQ,CAAA,+BAK9BpB,EAAA,mBAyDM,MAAA,SAxDA,YAAJ,IAAIijB,EACH,uBAAO1xB,GAAS,KAAA,EAChB,uBAAO+M,GAAK,KAAA,EACZ,YAAWw+B,GACX,aAAY4mC,EACZ,SAAQO,GACR,QAAK,mCAAe5/B,GAAYsE,GAAQ9oC,EAAAA,MAAAlS,CAAA,EAAM,OAAI,mBAAA,aAAA,UAAA,cAGrC6vC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAge,EAAA,cAAA7S,IAAAtE,GAAYsE,GAAM,YAAA,EAAA,CAAA,OAAA,CAAA,EAAA,IAErBvc,GAAAA,OAAO,qBAAlBpsB,EAAAA,mBAEM,MAAA,OAFoB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACpCgC,aAA8CC,wDAAnBN,EAAAA,MAAU6hC,CAAA,CAAA,CAAA,CAAA,mCAEvC7iC,cAWiBgB,EAAAA,MAAAgiB,EAAA,EAAA,CAXD,SAAA,GAAU,YAAWhiB,QAAYiiB,CAAA,CAAA,qBAC/C,IASY,gBATZhiB,EASY,YAAAskE,0BARLvkE,EAAAA,SAAM,kBADbQ,EAAA,WASYR,EAPG,MAAAlS,CAAA,EAAC,YAAW,SACrB,YAAJ,IAAIqxC,EACH,MAAOxI,GAAY,MACnB,MAAOyjC,GAAY,MACnB,kCAAesJ,EAAkB,MAAA,GAAA,sBAElC,IAAiC,CAAjCrjE,aAAiCC,0DAAnBN,EAAAA,MAAU6hC,CAAA,CAAA,CAAA,CAAA,CAAA,uDAIpB7hC,QAAAlS,CAAA,EAAM,qBADd,EAAAmS,cAcaD,EAAAA,MAAA8lC,EAAA,EAAA,eAZP,OAAJ,IAAItE,EACJ,QAAA,GACA,UAAU,SACT,wBAAQxhC,QAAE3B,CAAA,EAAC,IAA0B,MAAA,YAAA,EAAA2B,EAAA,MAAAlS,CAAA,EAAM,QAAQ,CAAA,EACnD,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,QACZ,aAAYkS,QAAU0/B,CAAA,EACtB,UAAW1/B,EAAA,MAAaw/B,CAAA,EACxB,SAAUkkC,EAAkB,MAC5B,YAAW1jE,EAAAA,MAAKlS,CAAA,EAAC,YACjB,gCAAci3C,GAAoB,YAAA,GAClC,SAAQI,GACR,8BAAYF,GAAkB,YAAA,yGAGzBjlC,QAAAlS,CAAA,EAAM,qBADd,EAAAmS,cAcaD,EAAAA,MAAA8lC,EAAA,EAAA,eAZP,OAAJ,IAAIrE,EACJ,QAAA,GACA,UAAU,QACT,wBAAQzhC,QAAE3B,CAAA,EAAC,IAAwB,MAAA,UAAA,EAAA2B,EAAA,MAAAlS,CAAA,EAAM,QAAQ,CAAA,EACjD,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,QACZ,aAAYkS,QAAU2/B,CAAA,EACtB,UAAW3/B,EAAA,MAAay/B,CAAA,EACxB,SAAUikC,EAAkB,MAC5B,YAAW1jE,EAAAA,MAAKlS,CAAA,EAAC,YACjB,gCAAci3C,GAAoB,UAAA,GAClC,SAAQM,GACR,8BAAYJ,GAAkB,UAAA,kHCjvBxBu/B,GAAc,8SC5B3B,MAAM12E,EAAQuR,EAmBRhB,EAAKtF,GAAc,OAAO,EAE1B0rE,EAAa90E,EAAAA,OAAO60E,GAAa,IAAI,EAErCv4D,EAAQzM,MAAI,CAAC,EACb0M,EAAS1M,MAAI,CAAC,EAEduF,EAAUvF,EAAAA,IAAiB,EAE3B0E,EAAQtJ,EAAAA,SAAS,CACrB,MAAAqR,EACA,OAAAC,EACA,GAAInH,EACJ,MAAOmnB,EAAAA,MAAMp+B,EAAO,OAAO,EAC3B,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,KAAMo+B,EAAAA,MAAMp+B,EAAO,MAAM,CAAA,CAC1B,EAEK2Q,EAAQtP,EAAAA,SAAS,KACd,CACL,MAAO8c,EAAM,MAAQ,GAAGA,EAAM,KAAK,KAAO,OAC1C,OAAQC,EAAO,MAAQ,GAAGA,EAAO,KAAK,KAAO,MAC/C,EACD,EAED,OAAIu4D,IACFliE,EAAAA,UAAU,IAAM,CACdkiE,EAAW,aAAavgE,CAAK,CAAA,CAC9B,EAEDxB,EAAAA,gBAAgB,IAAM,CACpB+hE,EAAW,aAAavgE,CAAK,CAAA,CAC9B,GAGUtE,EAAA,CAAE,QAAAmF,EAAS,wBAItB5E,EAAA,mBAeK,KAAA,SAdC,UAAJ,IAAI4E,EACH,MAAK3E,EAAAA,eAAA,CAAUJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAgBgB,EAAQ,UAAIW,QAAE3B,CAAA,EAAC,IAAG,OAAA,UAAA,EAA4BgB,EAAM,QAAIW,EAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,QAAA,CAAA,GAKnG,KAAK,SACJ,gBAAegB,EAAQ,SAAA,OAAY,OACnC,gBAAeA,EAAM,OACrB,uBAAOZ,EAAK,KAAA,CAAA,GAEb4B,EAAAA,WAEOC,sBAFP,IAEO,qCADFjB,EAAK,KAAA,EAAA,CAAA,gBCzEDqlE,GAAazpE,GAAW,CACnC,MAAOQ,GACP,WAAYZ,EACZ,MAAO,CAAC,OAAQ,MAAM,EAItB,UAAW,OACX,MAAOA,EACP,QAASA,EACT,QAAS,MACT,YAAaC,GACb,SAAUD,EACV,QAASA,EACT,YAAaA,EACb,aAAc,SACd,aAAcA,EACd,WAAYA,EACZ,MAAO,OACP,SAAUmB,EAAkE,EAC5E,OAAQA,EAAkE,EAC1E,OAAQA,EAAkE,EAC1E,YAAaA,EAAkE,CACjF,CAAC,2ICVD,KAAM,CAAE,MAAA63B,EAAO,QAAAC,EAAS,MAAA5vB,EAAO,SAAAvC,EAAU,QAAAoyB,EAAS,cAAAC,EAAe,cAAAC,EAAe,cAAAC,CAAA,EAC9EhD,GAA+B,IAAA,OAAM,OAAAriC,EAAAkW,EAAQ,QAAR,YAAAlW,EAAe,QAAO,EAGvDf,EAAQiM,GAAS,QADRsF,EACyB,CACtC,MAAOzD,GAAgBsI,CAAK,EAC5B,WAAY,GACZ,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,UAAW,CACT,QAAS,EACT,aAAoB,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,SAASv9C,CAAK,CACjD,EACA,MAAO,GACP,QAAS6P,GACT,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,YAAa,GACb,SAAU,IAAMob,EAAS,MACzB,QAAS,IAAMoyB,EAAQ,MACvB,YAAa,GACb,aAAc,CACZ,QAASn8C,GACT,OAAQ,EACV,EACA,aAAc,GACd,WAAY,GACZ,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKk1C,EAAOC,EAIP1uB,EAAKtF,GAAc,OAAO,EAC1B3B,EAAQU,GAAS,EAEjBtK,EAAQgS,EAAAA,IAAQ,IAAA,GAAgB,EAChCD,EAAgBC,MAAI,CAAC,EACrBgoC,EAAehoC,MAAI,CAAC,EACpBmlE,EAAgBnlE,MAAI,CAAC,EACrBolE,EAAcplE,MAAI,CAAC,EACnBqlE,EAAerlE,MAAI,CAAC,EACpB8e,EAAoB9e,MAAI,CAAC,EACzB+e,EAAkB/e,MAAI,CAAC,EACvBslE,EAAStlE,MAAI,EAAK,EAElB,CAAE,MAAA2jB,CAAM,EAAIX,GAAO,EAEnBzd,EAAU5C,GAAWC,CAAW,EAChCmU,EAAS/W,EAAAA,IAAiC,EAEpCuH,GAAA,CACV,OAAQhC,EACR,QAAS,GACT,UAAW,CAAC/d,EAAOygB,KAAa,EAC1BA,GAAS,IAAMA,GAAS,QAC1BzgB,EAAM,eAAe,EACZygB,GAAA,GAAK0iD,EAAW,EAAIC,EAAW,EAC1C,CACF,CACD,EAEK,MAAA5oD,EAAoBrS,EAAAA,SAAwB,IAAM,CACtD,MAAMxW,EAAUmV,EAAM,QAAQ,IAAckjD,IAAA,CACtC,GAAA,OAAOA,IAAW,SAAU,CAC9B,KAAM,CAAE,MAAAt6D,GAAO,MAAAqnB,GAAO,SAAA4D,GAAW,IAAUqvC,GAEpC,MAAA,CACL,MAAAt6D,GACA,MAAOqnB,IAAS,OAAOrnB,EAAK,EAC5B,SAAAirB,GACA,KAAMqvC,EACR,CAAA,CAGK,MAAA,CAAE,MAAOA,GAAQ,MAAO,OAAOA,EAAM,EAAG,SAAU,GAAO,KAAMA,EAAO,CAAA,CAC9E,EAED,OAAIljD,EAAM,aACRnV,EAAQ,QAAQ,CACd,MAAO,GACP,MAAO,OAAOmV,EAAM,aAAgB,SAAWA,EAAM,YAAc,IACnE,SAAU,GACV,KAAM,EAAA,CACP,EAGInV,CAAA,CACR,EACKssC,EAAW91B,EAAAA,SAAS,IACjB,MAAM,KAAK3B,EAAM,KAAK,CAC9B,EACKiM,EAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D4D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAGvQ,EAAM,WAAa,aAAe,UAAU,EAClD,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAG5E,EAAS,MAC9B,CAAC4E,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,OAAA,CAE9B,CACD,EACK83B,EAAYz2B,EAAAA,SAAS,IACrBrB,EAAM,WACD,CACL,aAAc,GAAGwwB,EAAkB,KAAK,KACxC,YAAa,GAAGA,EAAkB,KAAK,IACzC,EAGK,CACL,WAAY,GAAGC,EAAgB,KAAK,KACpC,cAAe,GAAGA,EAAgB,KAAK,IACzC,CACD,EACK7e,EAAYvQ,EAAAA,SAAS,IACrBrB,EAAM,WACD,CACL,MAAOwwB,EAAkB,MAAQ,GAAGA,EAAkB,KAAK,KAAO,MACpE,EAGK,CACL,OAAQC,EAAgB,MAAQ,GAAGA,EAAgB,KAAK,KAAO,MACjE,CACD,EACKwmD,EAAc51E,EAAAA,SAAS,IAAM,CACjC,MAAMsP,EAAgC,CACpC,MAAO3Q,EAAM,WACT,KAAKwwB,EAAkB,MAAQ,CAAC,KAChC,GAAGC,EAAgB,MAAQ,CAAC,MAClC,EAEA,OAAIzwB,EAAM,YACR2Q,EAAM,UAAY,IAClBA,EAAM,aAAe,MAErBA,EAAM,YAAc,IACpBA,EAAM,WAAa,KAGdA,CAAA,CACR,EACKumE,EAAe71E,EAAAA,SAAS,IAE1BrB,EAAM,UACN,CAACm3B,EAAS,MAAM,MAAM,EAAG1lB,EAAc,KAAK,EAAE,KAAK1Z,GAAQ,CAACo/E,GAAep/E,CAAI,CAAC,CAEnF,EACKq/E,EAAe/1E,EAAAA,SAAS,IAE1BrB,EAAM,UACNyR,EAAc,OAAS0lB,EAAS,MAAM,OAAS,GAC/C,CAACA,EAAS,MACP,MAAM1lB,EAAc,MAAQ,EAAG0lB,EAAS,MAAM,MAAM,EACpD,KAAap/B,GAAA,CAACo/E,GAAep/E,CAAI,CAAC,CAExC,EACKs/E,GAAWh2E,EAAA,SAAS,IACxBrB,EAAM,WACFq1B,EAAM,MACJ/rB,EAAM,MAAM,WACZA,EAAM,MAAM,UACdA,EAAM,MAAM,OAClB,EACMguE,GAAWj2E,EAAA,SAAS,IACxBrB,EAAM,WACFq1B,EAAM,MACJ/rB,EAAM,MAAM,UACZA,EAAM,MAAM,WACdA,EAAM,MAAM,SAClB,EAEAxH,EAAAA,QAAQ40E,GAAa,CAAE,aAAAjtB,GAAc,aAAAC,CAAA,CAAc,EAE7C,MAAA6tB,EAAe97E,GAAc,IAAM,CACvC,MAAMyiC,EAAS,KAAK,IAClB/G,EAAS,MAAM,cAAkBp/B,GAAK,QAAUiI,EAAM,KAAK,EAC3D,CACF,EAEU4sE,GAAA4K,GAAkBt5C,CAAM,CAAC,CAAA,CACpC,EAEKu5C,GAAch8E,GAAc,IAAM,CACtC6X,EAAAA,SAAS,IAAM,CACb,MAAMytB,EAAa/gC,EAAM,WAEhBm3B,EAAA,MAAM,QAAgBp/B,IAAA,CACzBA,IAAQA,GAAK,KACf++E,EAAY,MAAQ,KAAK,IAAIA,EAAY,MAAO/+E,GAAK,GAAG,WAAW,EACnEg/E,EAAa,MAAQ,KAAK,IAAIA,EAAa,MAAOh/E,GAAK,GAAG,YAAY,EACxE,CACD,EAED,MAAM2/E,GAAY13E,EAAM,UAClB23E,GAAY,EAAID,GAAY,EAErBh+B,EAAA,MAAQi+B,GAAYb,EAAY,MAC/BD,EAAA,MAAQc,GAAYZ,EAAa,MAE7BvmD,EAAA,MAAQknD,GAAYZ,EAAY,MAClCrmD,EAAA,MAAQinD,GAAYX,EAAa,MAE3Cr3E,EAAA,MAAM,QAAgB3H,IAAA,CACtBgpC,EACFhpC,GAAK,MAAQ++E,EAAY,MAEzB/+E,GAAK,OAASg/E,EAAa,KAC7B,CACD,EAED,WAAW,IAAM,SACfh2E,GAAA0nB,EAAO,QAAP,MAAA1nB,GAAc,WACb,CAAC,CAAA,CACL,CAAA,CACF,EAEK62E,GAAgB97E,GAAS,IAAM,CACnC,GAAI2sB,EAAO,MAAO,CAChB,IAAIovD,EAAgB,EAChBC,GAAgB,EAEhB93E,EAAM,WACQ63E,EAAApmE,EAAc,MAAQqlE,EAAY,MAElCgB,GAAArmE,EAAc,MAAQslE,EAAa,MAGrDzjE,EAAAA,SAAS,IAAM,SACNvS,GAAA0nB,EAAA,QAAA,MAAA1nB,GAAO,SAAS82E,EAAeC,GAAa,CACpD,CAAA,GAEF,EAAE,EAELlrE,EAAA,MACE,IAAM5M,EAAM,MACZ,IAAM,CACSu3E,EAAA,EACCK,GAAA,CAChB,EACA,CAAE,UAAW,EAAK,CACpB,EACMhrE,EAAAA,MAAA,IAAM5M,EAAM,WAAYy3E,EAAW,EACnC7qE,EAAAA,MAAA,IAAM5M,EAAM,UAAWy3E,EAAW,EAE3B3lE,EAAA,CACX,MAAAi0B,EACA,cAAAt0B,EACA,OAAAulE,EACA,YAAAF,EACA,aAAAC,EACA,aAAAr9B,EACA,cAAAm9B,EACA,SAAA1/C,EACA,QAAAlgB,EACA,OAAAwR,EACA,cAAAmvD,GACA,MAAQ/sF,GAA2B,QAAA,OAAAkW,GAAAkW,EAAQ,QAAR,YAAAlW,GAAe,MAAMlW,IACxD,KAAM,IAAA,OAAM,OAAAkW,EAAAkW,EAAQ,QAAR,YAAAlW,EAAe,OAAK,CACjC,EAED,SAASo2E,GAAep/E,EAAiB,CACvC,OAAOA,EAAK,UAAYiI,EAAM,aAAajI,EAAK,MAAOA,EAAK,IAAI,CAAA,CAGlE,SAAS60E,GAAU1uC,EAAgB,CAC7B,GAAAzsB,EAAc,QAAUysB,EAAQ,OAEpCzsB,EAAc,MAAQysB,EAEhB,MAAAnmC,GAAOo/B,EAAS,MAAM+G,CAAM,EAC5Bt1C,GAAQmP,IAAA,YAAAA,GAAM,MAEN6/E,GAAA,EACd54C,EAAK,eAAgBp2C,EAAK,EAC1Bw9C,EAAcx9C,EAAK,EACnBulB,EAAUnO,EAAM,SAAUpX,GAAOmP,IAAA,YAAAA,GAAM,IAAI,EAC7BmuC,EAAA,CAAA,CAGP,SAAA6xC,GAAmB75C,EAAgBh0C,GAAc,CAGxD,IAFOA,GAAAA,GAAO,KAAK,IAAIA,EAAI,EAEpBitC,EAAS,MAAM+G,CAAM,EAAE,WAClBA,GAAAh0C,GAEN,EAAAg0C,EAAS,GAAKA,GAAU/G,EAAS,MAAM,UAA3C,CAGK,OAAA+G,CAAA,CAGA,SAAAs5C,GAAkBt5C,EAAgB2Y,GAAO,EAAG,CAC/C,OAAA1f,EAAS,MAAM+G,CAAM,GAAKi5C,GAAehgD,EAAS,MAAM+G,CAAM,CAAC,IACxDA,EAAA65C,GAAmB75C,EAAQ,EAAI2Y,EAAI,GAExCA,GAAO,EAAI3Y,GAAU/G,EAAS,MAAM,OAAS+G,EAAS,KAC/CA,EAAA65C,GAAmBpqF,GAAWuwC,EAAQ,EAAG/G,EAAS,MAAM,OAAS,CAAC,EAAG,GAAK0f,EAAI,GAGnFA,GAAO,EAAI3Y,EAAS,EAAIA,GAAU/G,EAAS,MAAM,UAAiB+G,EAAA,KAInEA,CAAA,CAGT,SAASurB,GAAa1xD,EAAiB,CAC/B2H,EAAA,MAAM,IAAI3H,CAAI,EACR0/E,GAAA,EACCF,EAAA,CAAA,CAGf,SAAS7tB,EAAa3xD,EAAiB,CAC/B2H,EAAA,MAAM,OAAO3H,CAAI,EACX0/E,GAAA,EACCF,EAAA,CAAA,CAGf,SAASjjE,GAAc,OACTmjE,GAAA,GACZ12E,EAAA0nB,EAAO,QAAP,MAAA1nB,EAAc,UAEduS,EAAAA,SAAS,IAAM,CACb0jE,EAAO,MAAQ,GAEFO,EAAA,EACCK,GAAA,CAAA,CACf,CAAA,CAGH,SAASI,EAAa,CAAE,MAAA9B,EAAO,MAAAC,IAA2C,CACxE,GAAIn2E,EAAM,UAAY2L,EAAS,MAAc,MAAA,GAEvC,MAAAkrC,GAAO72C,EAAM,WAAak2E,EAAQC,GAExC,MAAO,EAAGt/B,GAAO,GAAKqgC,EAAa,OAAWrgC,GAAO,GAAKugC,EAAa,MAAA,CAGzE,SAAS35C,EAAgB,CAAE,QAAAviB,EAAS,QAAAC,IAAiD,CACnF,MAAM88D,GAAcj4E,EAAM,WAAakb,EAAU47D,EAAY,MAAQ37D,GAAU47D,EAAa,MACtF74C,GAAS,KAAK,MAAM+5C,EAAW,EAEjC/5C,KAAWzsB,EAAc,MAC3Bm7D,GAAU4K,GAAkBt5C,GAAQA,GAAS+5C,GAAc,EAAI,EAAE,CAAC,EAEpDL,GAAA,CAChB,CAGF,SAASlhC,EAAY,CACnB,KAAAG,EACA,QAAA37B,GACA,QAAAC,EAAA,EAKC,CACD,MAAM+iB,GAASl+B,EAAM,WACjB,KAAK,MAAMkb,GAAU47D,EAAY,KAAK,EACtC,KAAK,MAAM37D,GAAU47D,EAAa,KAAK,EAEjCnK,GAAA4K,GAAkBt5C,GAAQ2Y,CAAI,CAAC,CAAA,CAG3C,SAASwlB,GAAa,CAChB,GAAA,CAAC6a,EAAa,MAAO,CACvBtK,GAAU4K,GAAkB/lE,EAAc,MAAQ,EAAG,EAAE,CAAC,EAExD,MAAM1Z,EAAOo/B,EAAS,MAAM1lB,EAAc,KAAK,EAE/CtD,EAAUnO,EAAM,OAAQjI,GAAA,YAAAA,EAAM,MAAOA,GAAA,YAAAA,EAAM,IAAI,CAAA,CACjD,CAGF,SAASukE,GAAa,CAChB,GAAA,CAAC8a,EAAa,MAAO,CACvBxK,GAAU4K,GAAkB/lE,EAAc,MAAQ,EAAG,CAAC,CAAC,EAEvD,MAAM1Z,EAAOo/B,EAAS,MAAM1lB,EAAc,KAAK,EAE/CtD,EAAUnO,EAAM,OAAQjI,GAAA,YAAAA,EAAM,MAAOA,GAAA,YAAAA,EAAM,IAAI,CAAA,CACjD,CAGO,SAAAmgF,GAAgBh1B,EAAqBpyD,GAAe,CACvDkP,EAAM,YAAc,CAACm3E,GAAehgD,EAAS,MAAMrmC,EAAK,CAAC,GAC3D87E,GAAU97E,EAAK,EAGjBqd,EAAUnO,EAAM,YAAakjD,EAAO,MAAOA,EAAO,IAAI,CAAA,8BAKtD7wC,EAAA,mBAoFM,MAAA,CAnFH,GAAIH,QAAK6zB,CAAA,UACN,UAAJ,IAAI9uB,EACH,uBAAOrT,EAAS,KAAA,EACjB,SAAS,IACT,KAAK,QACJ,kBAAiBsO,QAAO8zB,CAAA,CAAA,GAGjB9zB,QAAAlS,CAAA,EAAM,qBADdqS,qBAYM,MAAA,OAVJ,IAAI,YACH,MAAKC,EAAAA,eAAA,CAAYJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,EAAmB2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,EAA2B2mE,EAAY,MAAGhlE,QAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,EAAA,EAAA,GAKhG,cAAA,GACC,QAAO8rD,CAAA,GAERnrD,cAA+BgB,EAAAA,gDAAjBmlE,GAAQ,KAAA,CAAA,EAAA,KAAA,EAAA,mCAExB5kE,EAAAA,mBAiDM,MAAA,CAjDA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAY,KAAK,MAAA,GACjCW,cAmCSgB,EAAAA,MAAAimE,EAAA,EAAA,SAlCH,SAAJ,IAAI1vD,EACJ,QAAA,GACC,WAAUvW,EAAAA,MAAKlS,CAAA,EAAC,WAAa82E,EAAA,MAAcrlE,EAAa,MAAA,EACxD,WAAUS,EAAAA,MAAKlS,CAAA,EAAC,WAAiB,EAAA+2E,EAAA,MAAetlE,EAAa,MAC7D,MAAOS,EAAA,MAAAlS,CAAA,EAAM,WAAa05C,EAAY,MAAA,OACtC,OAAQxnC,EAAA,MAAAlS,CAAA,EAAM,kBAAsB62E,EAAa,MACjD,QAAS3kE,EAAAA,MAAKlS,CAAA,EAAC,QACf,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,WAAU,aAAA,WACtB,UAAS82E,EAAW,MACpB,UAASC,EAAY,MACrB,mBAAkBiB,EAClB,gBAAe9lE,EAAAA,MAAKlS,CAAA,EAAC,aACrB,QAAO02C,EACP,YAAYjZ,CAAA,qBAEb,IAkBK,CAlBLhrB,EAAAA,mBAkBK,KAAA,CAlBD,IAAI,OAAQ,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,uBAAOunB,EAAS,KAAA,CAAA,GACrCk/C,EAAM,OACpB32C,EAAA,UAAA,EAAA,EAAAhuB,EAAAA,mBAcYqsB,EAAAA,SAbgB,CAAA,IAAA,CAAA,EAAAC,EAAAA,WAAAjrB,EAAA,MAAlB,CAAAwvC,GAAQpyD,oBADlBqhB,EAAA,YAcYimE,GAAA,CAZT,IAAKtnF,GACL,MAAOoyD,GAAO,MACd,SAAUA,GAAO,UAAYhxC,QAAAlS,CAAA,EAAM,aAAakjD,GAAO,MAAOA,EAAM,EACpE,OAAQzxC,EAAa,QAAK3gB,GAC1B,KAAMoyD,GAAO,KACb,QAAOlI,IAAAk9B,GAAgBh1B,GAAQpyD,EAAK,CAAA,qBAErC,IAIO,CAJPyhB,aAIOC,EAAA,OAAA,UAAA,CAJA,OAAA0wC,GAAiB,MAAApyD,EAAA,EAAxB,IAIO,CAHLogB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAI,CAAI,OAAAkjD,GAAQ,MAAApyD,EAAK,CAAA,qBAC9D,IAAkB,CAAf6hB,EAAAA,gBAAAC,EAAA,gBAAAswC,GAAO,KAAK,EAAA,CAAA,CAAA,gPAOXhxC,QAAAlS,CAAA,EAAM,yBAAtBqS,EAAA,mBAGWqsB,WAAA,CAAA,IAAA,GAAA,CAFTjsB,EAAAA,mBAA8E,MAAA,CAAxE,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,KAAA,CAAA,CAAA,EAAmB,uBAAOqB,EAAS,KAAA,CAAA,UACtEa,EAAAA,mBAAiF,MAAA,CAA3E,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,QAAA,CAAA,CAAA,EAAsB,uBAAOqB,EAAS,KAAA,6CAE3Ea,EAAAA,mBAOO,MAAA,CANJ,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,EAAA,GAA8B,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA0B,SAAA,QAAA,CAAA,EAAA2B,EAAAA,MAAAlS,CAAA,EAAM,QAAoB,CAAAkS,EAAA,MAAA3B,CAAA,EAAG,IAA4B,SAAA,UAAA,CAAA,EAAA2B,QAAAlS,CAAA,EAAM,UAAA,GAKnJ,uBAAOi3E,EAAW,KAAA,eAIf/kE,QAAAlS,CAAA,EAAM,qBADdqS,qBAYM,MAAA,OAVJ,IAAI,YACH,MAAKC,EAAAA,eAAA,CAAYJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,EAAmB2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,EAA2B6mE,EAAY,MAAGllE,QAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,EAAA,EAAA,GAKhG,cAAA,GACC,QAAO+rD,CAAA,GAERprD,cAA+BgB,EAAAA,gDAAjBolE,GAAQ,KAAA,CAAA,EAAA,KAAA,EAAA,8tBC9e5B,MAAMt3E,EAAQuR,EAuDRytB,EAAOC,EAIP1uB,EAAKtF,GAAc,aAAa,EAEhCotE,EAAc3mE,EAAAA,IAAI1R,EAAM,IAAI,EAC5Bs4E,EAAgB5mE,EAAAA,IAAI1R,EAAM,MAAM,EAChCu4E,EAAgB7mE,EAAAA,IAAI1R,EAAM,MAAM,EAChCw4E,EAAY9mE,EAAc,IAAA,EAAE,EAC5B+mE,EAAc/mE,EAAc,IAAA,EAAE,EAC9BgnE,EAAchnE,EAAc,IAAA,EAAE,EAE9BinE,EAAYjnE,EAAAA,IAAkB,EAC9BknE,EAAclnE,EAAAA,IAAkB,EAChCmnE,EAAcnnE,EAAAA,IAAkB,EAEtC9E,EAAA,MAAM,IAAM5M,EAAM,MAAO84E,EAAiB,CAAE,UAAW,GAAM,EAC7DlsE,EAAA,MACE,IAAM5M,EAAM,KACHpX,GAAA,CACPyvF,EAAY,MAAQzvF,CAAA,CAExB,EACAgkB,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP0vF,EAAc,MAAQ1vF,CAAA,CAE1B,EACAgkB,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP2vF,EAAc,MAAQ3vF,CAAA,CAE1B,EACAgkB,QAAMyrE,EAAsBzvF,GAAA,CAC1Bo2C,EAAK,cAAep2C,CAAK,EACpBo2C,EAAA,SAAU,OAAQp2C,CAAK,CAAA,CAC7B,EACDgkB,QAAM0rE,EAAwB1vF,GAAA,CAC5Bo2C,EAAK,gBAAiBp2C,CAAK,EACtBo2C,EAAA,SAAU,SAAUp2C,CAAK,CAAA,CAC/B,EACDgkB,QAAM2rE,EAAwB3vF,GAAA,CAC5Bo2C,EAAK,gBAAiBp2C,CAAK,EACtBo2C,EAAA,SAAU,SAAUp2C,CAAK,CAAA,CAC/B,EAEYkpB,EAAA,CAAE,aAAAinE,EAAc,EAE7B,SAASnF,EAAex+E,EAAc,CAC7B,OAAA,OAAO4K,EAAM,aAAa,MAAS,YAAcA,EAAM,aAAa,KAAK5K,CAAI,CAAA,CAGtF,SAASy+E,EAAiBx+E,EAAgB,CAEtC,OAAA,OAAO2K,EAAM,aAAa,QAAW,YACrCA,EAAM,aAAa,OAAOq4E,EAAY,MAAOhjF,CAAM,CAAA,CAIvD,SAASy+E,EAAiBx+E,EAAgB,CACxC,OACE,OAAO0K,EAAM,aAAa,QAAW,YACrCA,EAAM,aAAa,OAAOq4E,EAAY,MAAOC,EAAc,MAAOhjF,CAAM,CAAA,CAI5E,SAASwjF,GAAkB,CACnB,KAAA,CAACE,EAAW,EAAGC,EAAa,EAAGC,EAAa,CAAC,EAAIl5E,EAAM,MAE7Dw4E,EAAU,MAAQzuF,GAAM,GAAKivF,EAAU,EAAGA,CAAQ,EAClDP,EAAY,MAAQ1uF,GAAM,GAAKkvF,EAAY,EAAGA,CAAU,EACxDP,EAAY,MAAQ3uF,GAAM,GAAKmvF,EAAY,EAAGA,CAAU,CAAA,CAG1D,SAASC,EAAmBtwF,EAAgB,CAC1Cm2C,EAAK,aAAcn2C,CAAI,CAAA,CAGzB,SAASkwF,GAAe,CACpB,CAAAJ,EAAU,MAAOC,EAAY,MAAOC,EAAY,KAAK,EAAE,QAAiBO,GAAA,CACxEA,GAAA,MAAAA,EAAO,eAAc,CACtB,CAAA,6BAKD/mE,EAAA,mBA2FM,MAAA,CA3FA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBW,cA6BQgB,EAAAA,MAAAmnE,EAAA,EAAA,SA5BF,YAAJ,IAAIV,EACI,MAAON,EAAW,sCAAXA,EAAW,MAAAr9B,GAC1B,QAAA,GACC,MAAK1oC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,EACZ,QAASgB,EAAO,QAChB,OAAQA,EAAO,QACf,UAAWA,EAAS,UACpB,QAASinE,EAAS,MACnB,SAAS,KACR,gBAAejnE,EAAY,aAC3B,4BAAY4nE,EAAkB,MAAA,GAC9B,4BAAYA,EAAkB,MAAA,GAC9B,sCAAD,IAAa,CAAA,EAAA,CAAA,MAAA,CAAA,GACZ,YAAUtpC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAEq9B,EAAW,MAAGr9B,EAAA,GAEhB,QACT6K,EAAAA,QAAA,CAUO,CAXa,OAAA3C,EAAQ,MAAApyD,KAAK,CACjC2hB,EAAAA,mBAUO,OAAA,CATJ,MAAKH,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,EAAwB2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAsBqjE,EAAe1wB,EAAO,KAAoB,GAAAhxC,EAAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,UAAA,MAM9HgC,aAEOC,EAAA,OAAA,OAAA,CAFY,OAAA0wC,EAAiB,MAAApyD,CAAA,EAApC,IAEO,qCADFohB,QAAYrgB,EAAA,EAACqxD,EAAO,KAAK,CAAA,EAAA,CAAA,4FAKpChyC,cA6BQgB,EAAAA,MAAAmnE,EAAA,EAAA,SA5BF,cAAJ,IAAIT,EACI,MAAON,EAAa,sCAAbA,EAAa,MAAAt9B,GAC5B,QAAA,GACC,MAAK1oC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,EACZ,QAASgB,EAAO,QAChB,OAAQA,EAAO,QACf,UAAWA,EAAS,UACpB,QAASknE,EAAW,MACrB,SAAS,KACR,gBAAelnE,EAAY,aAC3B,4BAAY4nE,EAAkB,QAAA,GAC9B,4BAAYA,EAAkB,QAAA,GAC9B,sCAAD,IAAa,CAAA,EAAA,CAAA,MAAA,CAAA,GACZ,YAAUtpC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAEs9B,EAAa,MAAGt9B,EAAA,GAElB,QACT6K,EAAAA,QAAA,CAUO,CAXa,OAAA3C,EAAQ,MAAApyD,KAAK,CACjC2hB,EAAAA,mBAUO,OAAA,CATJ,MAAKH,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,EAAwB2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,EAAwBsjE,EAAiB3wB,EAAO,KAAoB,GAAAhxC,EAAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,UAAA,MAMlIgC,aAEOC,EAAA,OAAA,SAAA,CAFc,OAAA0wC,EAAiB,MAAApyD,CAAA,EAAtC,IAEO,qCADFohB,QAAYrgB,EAAA,EAACqxD,EAAO,KAAK,CAAA,EAAA,CAAA,4FAKpChyC,cA6BQgB,EAAAA,MAAAmnE,EAAA,EAAA,SA5BF,cAAJ,IAAIR,EACI,MAAON,EAAa,wCAAbA,EAAa,MAAAv9B,GAC5B,QAAA,GACC,MAAK1oC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,EACZ,QAASgB,EAAO,QAChB,OAAQA,EAAO,QACf,UAAWA,EAAS,UACpB,QAASmnE,EAAW,MACrB,SAAS,KACR,gBAAennE,EAAY,aAC3B,8BAAY4nE,EAAkB,QAAA,GAC9B,8BAAYA,EAAkB,QAAA,GAC9B,wCAAD,IAAa,CAAA,EAAA,CAAA,MAAA,CAAA,GACZ,YAAUtpC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAmL,GAAEu9B,EAAa,MAAGv9B,EAAA,GAElB,QACT6K,EAAAA,QAAA,CAUO,CAXa,OAAA3C,EAAQ,MAAApyD,KAAK,CACjC2hB,EAAAA,mBAUO,OAAA,CATJ,MAAKH,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,EAAwB2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,EAAwBujE,EAAiB5wB,EAAO,KAAoB,GAAAhxC,EAAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,UAAA,MAMlIgC,aAEOC,EAAA,OAAA,SAAA,CAFc,OAAA0wC,EAAiB,MAAApyD,CAAA,EAAtC,IAEO,qCADFohB,QAAYrgB,EAAA,EAACqxD,EAAO,KAAK,CAAA,EAAA,CAAA,82CCrNxC,MAAMljD,EAAQuR,EAmGRytB,EAAOC,EAcP1uB,EAAKtF,GAAc,aAAa,EAChC3B,EAAQU,GAAS,EACjB,CAAE,MAAAqrB,CAAM,EAAIX,GAAO,EAEnB4kD,EAAQ5jF,GAAOsK,EAAM,KAAK,EAC1Bu5E,EAAaC,GAAa,GAAI,EAAG,CAAC,EAElCC,EAAe/nE,EAAA,IACnB1R,EAAM,OAAS,OAAS,OAASA,EAAM,OAAS,QAAU,QAAU,MACtE,EACMkwD,EAAex+C,EAAAA,IAAI4nE,EAAM,YAAA,CAAa,EACtCnpB,EAAgBz+C,EAAA,IAAI4nE,EAAM,SAAA,EAAa,CAAC,EACxCI,EAAchoE,MAAI,CAAC,EACnBioE,EAAejoE,MAAI,CAAC,EACpBkoE,EAAYloE,EAAc,IAAA,EAAE,EAE5BmoE,EAAgB/sE,EAAAA,SAAS,CAAE,MAAO,EAAG,OAAQ,EAAG,EAEhDgtE,EAAaz4E,EAAAA,SAAS,IAAM,CAC1B,KAAA,CAAE,MAAA8c,EAAO,OAAAC,CAAA,EAAWy7D,EAE1B,OAAQ75E,EAAM,mBAAoB,CAChC,IAAK,MACH,MAAO,CAAE,WAAY,GAAGoe,CAAM,IAAK,EACrC,IAAK,QACH,MAAO,CAAE,aAAc,GAAGD,CAAK,IAAK,EACtC,IAAK,SACH,MAAO,CAAE,cAAe,GAAGC,CAAM,IAAK,EACxC,QACE,MAAO,CAAE,YAAa,GAAGD,CAAK,IAAK,CAAA,CACvC,CACD,EACK47D,EAAiB14E,EAAAA,SAAS,IAAM,CACpC,MAAM24E,EAAYh6E,EAAM,eAExB,OAAOg6E,EAAU,MAAQA,EAAU,OAASA,EAAU,IAAA,CACvD,EACKC,EAAe54E,EAAAA,SAAS,IAAM,CAClC,MAAM24E,EAAYh6E,EAAM,aAExB,OAAOg6E,EAAU,MAAQA,EAAU,OAASA,EAAU,IAAA,CACvD,EACKE,EAAa74E,EAAAA,SAAS,IACnBrB,EAAM,OAAS,UACvB,EACKiwD,EAAgB5uD,EAAAA,SAAS,IACtBrB,EAAM,MACT+5E,EAAe,OAASE,EAAa,MACnC,CAACE,EAAe,OAAO,EAAGA,EAAe,KAAK,CAAC,EAC/C,CAAC,GAAI,EAAE,EACTJ,EAAe,MACbI,EAAe,OAAO,EACtB,EACP,EACKC,EAAW/4E,EAAAA,SAAS,IACjB,CACLrB,EAAM,OAAO,MACbA,EAAM,OAAO,MACbA,EAAM,OAAO,MACbA,EAAM,OAAO,MACbA,EAAM,OAAO,MACbA,EAAM,OAAO,MACbA,EAAM,OAAO,KAAA,EACb,IAAIwvD,GAAQA,EAAK,MAAM,EAAG,CAAC,CAAC,CAC/B,EAED5iD,EAAA,MACEsjD,EACStnE,GAAA,CACGgxF,EAAA,MAAQJ,GAAa,GAAI,KAAK,MAAM5wF,EAAQ,EAAE,EAAI,GAAI,CAAC,CACnE,EACA,CAAE,UAAW,EAAK,CACpB,EAEA6rB,EAAAA,UAAU,IAAM,CACd4lE,EAAgB,OAAO,CAAA,CACxB,EAEYvoE,EAAA,CAAE,gBAAAuoE,EAAiB,EAEhC,SAASF,EAAetxF,EAAuB,CAC7C,MAAMD,EAAQC,IAAS,QAAUmX,EAAM,WAAaA,EAAM,SAEnD,OAAApX,EAAQ,GAAGA,EAAM,IAAI,IAAIA,EAAM,KAAK,IAAIA,EAAM,IAAI,GAAK,EAAA,CAGhE,SAAS0xF,EAAcxpF,EAAe,CACpC,OAAOkP,EAAM,OAAO,QAAQlP,CAAmB,EAAE,CAAA,CAGnD,SAASypF,EAAY1xF,EAAgB,CACnC4wF,EAAa,MAAQ5wF,CAAA,CAGd,SAAA2xF,EAAe3xF,EAAwBuN,EAAgB,CAC9D,GAAIvN,IAAS,OACXqnE,EAAa,OAAS95D,MACjB,CAEL+5D,EAAc,OAAS/5D,EAEjB,MAAApB,EAAO,IAAI,KAAKk7D,EAAa,MAAOC,EAAc,MAAQ,EAAG,CAAC,EAEvDD,EAAA,MAAQl7D,EAAK,YAAY,EACxBm7D,EAAA,MAAQn7D,EAAK,SAAa,EAAA,CAAA,CAC1C,CAGF,SAASgyD,EAAY9tD,EAAmB,CACtC8lC,EAAK,QAAS9lC,CAAK,CAAA,CAGrB,SAASuhF,EAAe3pF,EAAe,CACrC,KAAM,CAAE,MAAAlI,EAAO,KAAA4P,CAAA,EAASwH,EAAM,UAAUlP,CAAK,EAE7CkuC,EAAK,WAAYxmC,EAAMsE,GAAWlU,CAAK,CAAC,CAAA,CAG1C,SAAS8xF,EAAiB1lF,EAAY,CACzB2lF,EAAA,CAAC3lF,EAAK,YAAA,EAAeA,EAAK,SAAS,EAAI,EAAGA,EAAK,QAAQ,CAAC,CAAC,CAAA,CAGtE,SAAS4lF,EAAiB3lF,EAAc,CAClC4lF,GAAe5lF,CAAI,IAEvBi7D,EAAa,MAAQj7D,EAEjB+K,EAAM,OAAS,OACjBu6E,EAAY,OAAO,EAEnBI,EAAW,CAAC1lF,EAAM,EAAG,CAAC,CAAC,EACzB,CAGF,SAAS6lF,EAAkB5lF,EAAe,CACpC6lF,GAAgB7lF,CAAK,IAEzBi7D,EAAc,MAAQj7D,EAElB8K,EAAM,OAAS,QACjBu6E,EAAY,MAAM,EAElBI,EAAW,CAACzqB,EAAa,MAAOh7D,EAAO,CAAC,CAAC,EAC3C,CAGF,SAASylF,EAAWrZ,EAAkB,CACpCtiC,EAAK,SAAUsiC,CAAM,CAAA,CAGd,SAAA0Z,EAAsBnyF,EAAgBkqC,EAAc,CACtDiM,EAAA,cAAe,QAASn2C,EAAMkqC,CAAI,CAAA,CAGhC,SAAAkoD,EAAoBpyF,EAAgBkqC,EAAc,CACpDiM,EAAA,cAAe,MAAOn2C,EAAMkqC,CAAI,CAAA,CAGvC,SAASmoD,GAAwB,CAC3BzB,EAAa,QAAU,OACfG,EAAA,MAAQJ,GAAa,GAAII,EAAU,MAAM,CAAC,EAAI,GAAI,CAAC,EAE7DY,EAAe,OAAQ,EAAE,CAC3B,CAEF,SAASW,GAAwB,CAC3B1B,EAAa,QAAU,OACzBG,EAAU,MAAQJ,GAAa,GAAII,EAAU,MAAM,EAAE,EAAG,CAAC,EAEzDY,EAAe,OAAQ,CAAC,CAC1B,CAGF,SAAS7N,IAAe,CACtB3tC,EAAK,QAAQ,CAAA,CAGf,SAASupC,IAAgB,CACvBvpC,EAAK,SAAS,CAAA,CAGhB,SAASo8C,EAAgBpmF,EAAmB,CAC1CgqC,EAAK,QAAShqC,CAAI,CAAA,CAGpB,SAASqmF,GAAepmF,EAAc,CAChC,OAACA,EAGF+K,EAAM,eAAe,MAAQA,EAAM,WAAW,OAAS/K,GACvD+K,EAAM,aAAa,MAAQA,EAAM,SAAS,OAAS/K,EAJpC,EAIoC,CAIxD,SAASqmF,GAAgBpmF,EAAe,CAClC,GAAA,CAACA,EAAc,MAAA,GAEb,MAAAqmF,EAAY,IAAMrrB,EAAa,MAAQh7D,EAG1C,OAAA8K,EAAM,eAAe,OACpB,IAAMA,EAAM,WAAW,KAAOA,EAAM,WAAW,QAAUu7E,GAC1Dv7E,EAAM,aAAa,OAAS,IAAMA,EAAM,SAAS,KAAOA,EAAM,SAAS,QAAUu7E,CAAA,CAItF,SAASV,GAAe5lF,EAAc,CAChC,GAAA+K,EAAM,OAAS,OACjB,OAAOA,EAAM,aAAa,IAAI,KAAK/K,EAAM,CAAC,CAAC,EAG7C,QAAS7K,EAAI,EAAGA,GAAK,GAAI,EAAEA,EACzB,GAAI,CAAC2wF,GAAgB3wF,EAAG6K,CAAI,EACnB,MAAA,GAIJ,MAAA,EAAA,CAGT,SAAS8lF,GAAgB7lF,EAAeD,EAAOi7D,EAAa,MAAO,CAC7D,GAAAlwD,EAAM,OAAS,OAAe,MAAA,GAE9B,GAAAA,EAAM,OAAS,QACjB,OAAOA,EAAM,aAAa,IAAI,KAAK/K,EAAMC,EAAQ,CAAC,CAAC,EAGrD,MAAM0G,EAAU,IAAI,KAAK3G,EAAMC,EAAQ,CAAC,EAElCsmF,GADM,IAAI,KAAKvmF,EAAMC,EAAO,CAAC,EACd,QAAQ,EAE7B,QAAS9K,EAAI,EAAGA,GAAKoxF,GAAU,EAAEpxF,EAG/B,GAFAwR,EAAQ,QAAQxR,CAAC,EAEb,CAAC4V,EAAM,aAAapE,CAAO,EACtB,MAAA,GAIJ,MAAA,EAAA,CAGT,SAAS6/E,GAAgBxmF,EAAc,CACrCykF,EAAY,MAAQmB,GAAe5lF,CAAI,EAAI,EAAIA,CAAA,CAGjD,SAASymF,GAAiBxmF,EAAe,CACvCykF,EAAa,MAAQoB,GAAgB7lF,CAAK,EAAI,EAAIA,CAAA,CAGpD,SAASymF,GAAc1mF,EAAc,CACnC,GACE,CAAC+K,EAAM,OACN,CAAC05E,EAAY,OAAS,CAAC15E,EAAM,eAAe,MAAQ,CAACA,EAAM,aAAa,KAElE,MAAA,GAUH,MAAA47E,EAAY57E,EAAM,WAAW,KAC7B67E,EAAU77E,EAAM,SAAS,KAE3B,IAAAxR,EACAD,GAEA,GAAA,CAACmrF,EAAY,OAAS15E,EAAM,eAAe,MAAQA,EAAM,aAAa,KAClExR,EAAA,KAAK,IAAIotF,EAAWC,CAAO,EAC3BttF,GAAA,KAAK,IAAIqtF,EAAWC,CAAO,UACxBnC,EAAY,MAAO,CACxB,GAAA,CAAC15E,EAAM,eAAe,MAAQ,CAACA,EAAM,aAAa,KAAa,MAAA,GAEnE,GAAI,CAACA,EAAM,eAAe,MAAQ,CAACA,EAAM,aAAa,KAAM,CAC1D,MAAM87E,EAAe97E,EAAM,eAAe,KAAO47E,EAAYC,EAE7DrtF,EAAM,KAAK,IAAIkrF,EAAY,MAAOoC,CAAY,EAC9CvtF,GAAM,KAAK,IAAImrF,EAAY,MAAOoC,CAAY,CAAA,KACzC,CACL,MAAMC,EAAU,KAAK,IAAIH,EAAWC,CAAO,EACrCG,GAAU,KAAK,IAAIJ,EAAWC,CAAO,EAE3CrtF,EAAM,KAAK,IAAIkrF,EAAY,MAAOqC,CAAO,EACzCxtF,GAAM,KAAK,IAAImrF,EAAY,MAAOsC,EAAO,CAAA,CAC3C,KAEO,OAAA,GAGF,OAAA/mF,GAAQzG,GAAOyG,GAAQ1G,EAAA,CAGhC,SAAS0tF,EAAe/mF,EAAe,CACrC,GACE,CAAC8K,EAAM,OACN,CAAC25E,EAAa,OAAS,CAAC35E,EAAM,eAAe,OAAS,CAACA,EAAM,aAAa,MAEpE,MAAA,GAUT,MAAMk8E,EAAiB,IAAMl8E,EAAM,WAAW,KAAOA,EAAM,WAAW,MAChEm8E,EAAe,IAAMn8E,EAAM,SAAS,KAAOA,EAAM,SAAS,MAE5D,IAAAxR,EACAD,GAEA,GAAA,CAACorF,EAAa,OAAS35E,EAAM,eAAe,OAASA,EAAM,aAAa,MACpExR,EAAA,KAAK,IAAI0tF,EAAgBC,CAAY,EACrC5tF,GAAA,KAAK,IAAI2tF,EAAgBC,CAAY,UAClCxC,EAAa,MAAO,CACzB,GAAA,CAAC35E,EAAM,eAAe,OAAS,CAACA,EAAM,aAAa,MAAc,MAAA,GAErE,MAAMo8E,GAAmB,IAAMlsB,EAAa,MAAQypB,EAAa,MAEjE,GAAI,CAAC35E,EAAM,eAAe,OAAS,CAACA,EAAM,aAAa,MAAO,CAC5D,MAAMq8E,GAAoBr8E,EAAM,eAAe,MAAQk8E,EAAiBC,EAElE3tF,EAAA,KAAK,IAAI4tF,GAAkBC,EAAiB,EAC5C9tF,GAAA,KAAK,IAAI6tF,GAAkBC,EAAiB,CAAA,KAC7C,CACL,MAAMC,GAAe,KAAK,IAAIJ,EAAgBC,CAAY,EACpDI,GAAe,KAAK,IAAIL,EAAgBC,CAAY,EAEpD3tF,EAAA,KAAK,IAAI4tF,GAAkBE,EAAY,EACvC/tF,GAAA,KAAK,IAAI6tF,GAAkBG,EAAY,CAAA,CAC/C,KAEO,OAAA,GAGH,MAAAhB,EAAY,IAAMrrB,EAAa,MAAQh7D,EAEtC,OAAAqmF,GAAa/sF,GAAO+sF,GAAahtF,EAAA,CAI1C,SAAS8rF,EAAgBmC,EAA4B,CAC7ClD,MAAAA,EAAQ5jF,GAAOsK,EAAM,KAAK,EAE5Bw8E,IAAc,SACHtsB,EAAA,MAAQlwD,EAAM,eAAe,KAAOA,EAAM,WAAW,KAAOs5E,EAAM,YAAY,EAC7EnpB,EAAA,MAAQnwD,EAAM,eAAe,MAAQA,EAAM,WAAW,MAAQs5E,EAAM,SAAa,EAAA,IAElFppB,EAAA,MAAQlwD,EAAM,aAAa,KAAOA,EAAM,SAAS,KAAOs5E,EAAM,YAAY,EACzEnpB,EAAA,MAAQnwD,EAAM,aAAa,MAAQA,EAAM,SAAS,MAAQs5E,EAAM,SAAa,EAAA,EAC7F,CAGF,SAASmD,EAAsBzkF,EAA4B,OACnD,MAAAs1E,GAAMvsE,EAAA/I,EAAM,gBAAN,YAAA+I,EAAsB,GAE9BusE,GACFuM,EAAc,MAAQvM,EAAI,WAC1BuM,EAAc,OAASvM,EAAI,YAEbuM,EAAA,MAAQ7hF,EAAM,YAAY,MAC1B6hF,EAAA,OAAS7hF,EAAM,YAAY,OAC3C,6BAKAqa,EAAA,mBAsOM,MAAA,CArOH,MAAKC,EAAAA,eAAA,CAAW,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,EAAA,GAAyB,CAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,UAAA,CAAA,EAAgCgB,EAAA,UAAU,SAAWA,EAAA,4BAAgCA,EAAkB,qBAAA,SAAA,GAK3J,kBAAiBA,EAAS,UAC1B,uBAAOuoE,EAAU,KAAA,EACjB,QAAO9yB,CAAA,GAEcz1C,EAAA,UAAU,sBAAhCY,cAmBiBD,EAAAA,MAAAgiB,EAAA,EAAA,OAnBwB,YAAWuoD,CAAA,qBAClD,IAiBM,CAjBNhqE,EAAAA,mBAiBM,MAAA,CAhBH,MAAKH,EAAAA,eAAA,CAAcJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAoB2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,KAAA,EAA2B2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,WAAA,EAAyB2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,YAAcgB,EAAkB,kBAAA,OAOlJ8uB,EAAAA,UAAA,EAAA,EAAAhuB,EAQM,mBAAAqsB,WAPoB,KAAAC,EAAA,WAAAptB,EAAA,UAAhB,CAAAxZ,EAAMjH,mBADhBuhB,EAAA,mBAQM,MAAA,CANH,IAAKvhB,EACL,MAAKwhB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACZ,MAAOxY,EAAK,KACZ,QAAKijD,IAAEy/B,EAAe3pF,CAAK,GAEzB8hB,EAAA,gBAAA7a,EAAK,IAAI,EAAA,GAAA24D,EAAA,mDAIlBj+C,EAAAA,mBAuMM,MAAA,CAvMA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAU,KAAK,aAAA,GAC/BkC,EAAAA,mBAkLM,MAAA,CAlLA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,GAChBkC,EAAAA,mBA6IM,MAAA,CA7IA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,GAChBkC,EAAAA,mBA+CM,MAAA,CA/CA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAChBkC,EAAAA,mBAEM,MAAA,CAFA,wBAAQP,QAAE3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,WAAA,CAAA,CAAA,EAAiB,QAAO2qE,CAAA,GACzDhqE,EAAA,YAAmEgB,QAAApO,EAAA,EAAAmiD,iBAAAC,qBAArDh0C,EAAAA,SAAQA,EAAAA,MAAA5I,CAAA,EAAM,YAAc4I,QAAK5I,CAAA,EAAC,UAAU,CAAA,EAAA,KAAA,EAAA,uBAE5DmJ,qBAMM,MAAA,CAJH,wBAAQP,QAAE3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,YAAA,CAAA,CAAA,EAC7B,uBAAOiqE,EAAc,QAAA,EAAA,EAAA,GAEtBtpE,EAAA,YAAiEgB,QAAApO,EAAA,EAAAmiD,iBAAAC,qBAAnDh0C,EAAAA,SAAQA,EAAAA,MAAA5I,CAAA,EAAM,WAAa4I,QAAK5I,CAAA,EAAC,SAAS,CAAA,EAAA,KAAA,EAAA,gBAJhDmwE,EAAY,QAAA,MAAA,CAAA,GAMtBhnE,EAAAA,mBAyBM,MAAA,CAzBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,GAChBgC,aAuBOC,EAAA,OAAA,QAAA,CArBJ,MAAOinE,EAAY,MACnB,UAAYG,EAAS,MAAA,CAAA,EACrB,KAAM1pB,EAAY,MAClB,MAAOC,EAAa,MACpB,YAAAoqB,CAAA,EANH,IAuBO,CAfL9nE,EAAAA,mBAOM,MAAA,CAPD,IAAI,OAAQ,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,uCAAYgqE,EAAW,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,GAC7Cd,EAAY,QAAA,sBAA5BpnE,qBAEWqsB,WAAA,CAAA,IAAA,GAAA,wCADHk7C,EAAS,MAAA,CAAA,CAAA,GAAMroE,SAAO,IAAI,MAAMqoE,EAAS,MAAA,CAAA,CAAA,GAAMroE,EAAM,OAAC,IAAI,EAAA,EAAA,CAAA,CAAA,sBAElEc,EAAAA,mBAEWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,wCADHwxB,EAAY,KAAA,GAAG3+C,EAAM,OAAC,IAAI,EAAA,EAAA,CAAA,6BAGpCkB,qBAMM,MAAA,CAJH,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,uCAAYgqE,EAAW,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAErB3nE,EAAAA,gBAAA0nE,EAAcnqB,EAAa,KAAA,CAAA,EAAA,CAAA,EAAA,UAJtBspB,EAAY,QAAA,MAAA,2BAQ1BhnE,qBAMM,MAAA,CAJH,wBAAQP,QAAE3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,YAAA,CAAA,CAAA,EAC7B,uBAAOiqE,EAAc,QAAA,CAAA,EAAA,GAEtBtpE,EAAA,YAAiEgB,QAAApO,EAAA,EAAAmiD,iBAAAC,qBAAnDh0C,EAAAA,SAAQA,EAAAA,MAAA5I,CAAA,EAAM,UAAY4I,QAAK5I,CAAA,EAAC,UAAU,CAAA,EAAA,KAAA,EAAA,gBAJhDmwE,EAAY,QAAA,MAAA,CAAA,GAMtBhnE,EAAAA,mBAEM,MAAA,CAFA,wBAAQP,QAAE3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,WAAA,CAAA,CAAA,EAAiB,QAAO4qE,CAAA,GACzDjqE,EAAA,YAAmEgB,QAAApO,EAAA,EAAAmiD,iBAAAC,qBAArDh0C,EAAAA,SAAQA,EAAAA,MAAA5I,CAAA,EAAM,WAAa4I,QAAK5I,CAAA,EAAC,WAAW,CAAA,EAAA,KAAA,EAAA,CAAA,SAG9DmJ,EAAAA,mBA2FM,MAAA,CA3FA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,CAAA,GAERkpE,EAAY,QAAA,sBADpBpnE,EAAAA,mBAiCM,MAAA,OA/BH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,EACZ,4BAAYmpE,EAAW,MAAA,EAAA,IAExBr5C,EAAAA,UAAA,EAAA,EAAAhuB,EA2BM,mBAAAqsB,WA1BoB,KAAAC,EAAA,WAAAi7C,EAAA,MAAhB,CAAA7hF,EAAMjH,mBADhBuhB,EAAA,mBA2BM,MAAA,CAzBH,IAAKvhB,EACL,MAAKwhB,EAAAA,eAAA,CAAuB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,WAAA,CAAA,EAAA,GAAyC,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA+B,YAAA,UAAA,CAAA,EAAA8qE,GAAetjF,CAAI,GAAsBma,EAAAA,MAAE3B,CAAA,EAAC,IAAG,YAAA,MAAA,CAAA,EAAwBzf,EAAK,EAAyB,CAAAohB,EAAA,MAAA3B,CAAA,EAAG,IAA+B,YAAA,UAAA,CAAA,EAAAsqE,GAAe9iF,CAAI,EAAsB,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAA+B,YAAA,UAAA,CAAA,EAAAorE,GAAc5jF,CAAI,CAAA,GAOhV,QAAK81D,gBAAA7S,IAAO4/B,EAAiB7iF,CAAI,EAAA,CAAA,MAAA,CAAA,EACjC,aAAUijD,IAAEygC,GAAgB1jF,CAAI,CAAA,GAEjC0a,EAAAA,mBAaM,MAAA,CAbA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,GAChBgC,aAWOC,EAAA,OAAA,OAAA,CATJ,KAAMza,EACN,SAAUsjF,GAAetjF,CAAI,EAC7B,OAASjH,EAAK,EACd,SAAU+pF,GAAe9iF,CAAI,EAC7B,QAAU4jF,GAAc5jF,CAAI,CAAA,EAN/B,IAWO,CAHL0a,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,kBAAA,CAAA,CAAA,oBACbxY,CAAI,EAAA,CAAA,8BAOJ0hF,EAAY,QAAA,qBADzB,EAAApnE,EAAA,mBAgCM,MAAA,OA9BH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,EACZ,4BAAYopE,EAAY,MAAA,EAAA,oBAEzBtnE,EA0BM,mBAAAqsB,WAAA,KAAAC,EAAA,WAzBYzsB,QAAUqnE,CAAA,EAAnBzoF,kBADTuhB,EAAA,mBA0BM,MAAA,CAxBH,IAAKvhB,EACL,MAAKwhB,EAAAA,eAAA,CAAuB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,YAAA,CAAA,EAAA,GAA0C,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAgC,aAAA,UAAA,CAAA,EAAA+qE,GAAgBxqF,CAAK,EAAsB,CAAAohB,EAAA,MAAA3B,CAAA,EAAG,IAAgC,aAAA,UAAA,CAAA,EAAAwqE,GAAgBjqF,CAAK,EAAsB,CAAAohB,EAAAA,MAAA3B,CAAA,EAAG,IAAgC,aAAA,UAAA,CAAA,EAAA0rE,EAAenrF,CAAK,CAAA,GAM9R,QAAK+8D,gBAAA7S,GAAO8/B,EAAkBhqF,CAAK,EAAA,CAAA,MAAA,CAAA,EACnC,aAAUkqD,GAAE0gC,GAAiB5qF,CAAK,CAAA,GAEnC2hB,EAAAA,mBAaM,MAAA,CAbA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAAA,GAChBgC,aAWOC,EAAA,OAAA,QAAA,CATJ,KAAM09C,EAAY,MAClB,MAAOp/D,EACP,SAAUwqF,GAAgBxqF,CAAK,EAC/B,SAAUiqF,GAAgBjqF,CAAK,EAC/B,QAAUmrF,EAAenrF,CAAK,CAAA,EANjC,IAWO,CAHL2hB,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,mBAAA,CAAA,GACbqC,kBAAA0nE,EAAcxpF,CAAK,CAAA,EAAA,CAAA,6CAMhCqhB,EAAAA,YAsBgBD,EAAAA,MAAAs+C,EAAA,EAAA,OApBd,QAAA,GACC,MAAOP,EAAa,MACpB,KAAMC,EAAY,MAClB,MAAOC,EAAa,MACpB,aAAY5+C,EAAa,cACzB,gBAAeA,EAAY,aAC3B,MAAOA,EAAK,MACZ,IAAKA,EAAG,IACR,IAAKA,EAAG,IACR,aAAYA,EAAS,UACrB,YAAW6oE,EAAQ,MACnB,SAAQM,EACR,QAAOU,wBAEQ38C,EAAAA,OAAO,WAAO,OAC5B,GAAAonB,EAAAA,QADkC62B,GAAU,CAC5CnqE,EAAA,WAA6CC,sDAAnBkqE,CAAU,CAAA,CAAA,CAAA,mBAEtBj+C,EAAAA,OAAO,WAAO,cAC5B,GAAAonB,EAAAA,QADyC82B,GAAU,CACnDpqE,EAAA,WAA6CC,sDAAnBmqE,CAAU,CAAA,CAAA,CAAA,uIAKjCzC,EAAU,qBAArB7nE,EAAAA,mBAkCM,MAAA,OAlCkB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,GAClCkC,EAAAA,mBASM,MAAA,CATA,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,MAAA,CAAA,CAAA,CAAA,GACnBgB,EAAK,qBAArBc,EAAAA,mBAOWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CANTjsB,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,GACbqC,EAAA,gBAAArB,EAAA,OAAO,SAAS,EAAA,CAAA,EAErBkB,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,GACbqC,EAAA,gBAAArB,EAAA,OAAO,OAAO,EAAA,CAAA,wCAIvBkB,EAAAA,mBAsBM,MAAA,CAtBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBW,EAAAA,YASa0rE,GAAA,CARV,KAAMrrE,EAAU,WAAC,KACjB,OAAQA,EAAU,WAAC,OACnB,OAAQA,EAAU,WAAC,OACnB,UAAW,EACX,MAAOA,EAAK,MACZ,gBAAeA,EAAY,aAC3B,gBAAeA,EAAW,YAC1B,SAAQypE,CAAA,6EAGHzpE,EAAK,qBADbY,EAAAA,YAUayqE,GAAA,OARV,KAAMrrE,EAAQ,SAAC,KACf,OAAQA,EAAQ,SAAC,OACjB,OAAQA,EAAQ,SAAC,OACjB,UAAW,EACX,MAAOA,EAAK,MACZ,gBAAeA,EAAY,aAC3B,gBAAeA,EAAW,YAC1B,SAAQ0pE,oJAKL1pE,EAAQ,oDAApBc,EAAAA,mBAkBM,MAAA,OAlBiB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GACjCW,cAOSgB,EAAAA,MAAA45C,EAAA,EAAA,CANP,QAAA,GACA,KAAA,GACA,KAAK,QACJ,QAAO6gB,EAAA,qBAER,IAAiC,qCAA9Bp7D,EAAU,YAAIA,EAAM,OAAC,MAAM,EAAA,CAAA,CAAA,SAEhCL,cAQSgB,EAAAA,MAAA45C,EAAA,EAAA,CAPP,QAAA,GACA,KAAK,UACL,KAAK,QACJ,SAAUv6C,EAAQ,SAClB,QAAOg3D,EAAA,qBAER,IAAmC,qCAAhCh3D,EAAW,aAAIA,EAAM,OAAC,OAAO,EAAA,CAAA,CAAA,6CClsB7BsrE,GAAkB1vE,GAAW,CACxC,KAAMI,GACN,MAAOI,GACP,OAAQ,OACR,KAAM,OACN,QAASZ,EACT,UAAW,OACX,SAAUC,GACV,MAAO,CAAC,OAAQ,OAAQ,KAAM,KAAK,EACnC,OAAQ,OACR,YAAa,CAAC,OAAQ,MAAO,QAAQ,EACrC,OAAQ,OACR,UAAWD,EACX,SAAUA,EACV,OAAQ,OACR,cAAe,OACf,cAAe,OACf,UAAW,MACX,aAAc,SACd,MAAO,MACP,UAAW,MACX,OAAQyB,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OACb,SAAUzB,EACV,SAAUA,EACV,eAAgB,OAChB,YAAa,OACb,WAAY,OACZ,MAAO,CAAC,OAAQ,OAAQ,IAAI,EAC5B,MAAOA,EACP,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,IAAK,CAAC,OAAQ,OAAQ,IAAI,EAC1B,IAAK,CAAC,OAAQ,OAAQ,IAAI,EAC1B,aAAcA,EACd,cAAeA,EACf,YAAa,CAAC,OAAQ,KAAK,EAC3B,aAAcA,EACd,UAAW,OACX,YAAaA,EACb,mBAAoB,OACpB,MAAO,OACP,QAASmB,EAAuD,EAChE,OAAQA,EAAuD,EAC/D,QAASA,EAAuD,EAChE,QAASA,EAAU,EACnB,SAAUA,EAAU,EACpB,SAAUA,EAAgD,EAC1D,QAASA,EAAU,EACnB,WAAYA,EAAmC,EAC/C,SAAUA,EAAsC,EAChD,QAASA,EAAU,EACnB,OAAQA,EAAU,EAClB,YAAaA,EAA2E,EACxF,eAAgBA,EAAU,EAC1B,eAAgBA,EAAU,CAC5B,CAAC,EAWY4uE,GAAkB3vE,GAAW,CACxC,KAAMI,GACN,MAAOI,GACP,OAAQS,GAAuB,EAC/B,QAASrB,EACT,UAAW,OACX,SAAUC,GACV,OAAQ,OACR,UAAW,OACX,MAAO,CAAC,OAAQ,KAAK,EACrB,OAAQ,OACR,UAAWD,EACX,SAAUA,EACV,QAASA,EACT,QAASA,EACT,UAAW,OACX,MAAO,MACP,OAAQ,OACR,UAAW,MACX,MAAOA,EACP,SAAUA,EACV,eAAgB,OAChB,YAAa,OACb,WAAY,OACZ,UAAW,MACX,OAAQyB,GACR,YAAa,OACb,OAAQA,GACR,YAAa,OACb,SAAUzB,EACV,SAAUA,EACV,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,IAAK,OACL,IAAK,OACL,aAAcA,EACd,cAAeA,EACf,aAAcA,EACd,YAAaA,EACb,mBAAoB,OACpB,YAAa,CAAC,OAAQ,KAAK,EAC3B,MAAO,OACP,QAASmB,EAAmD,EAC5D,OAAQA,EAAmD,EAC3D,QAASA,EAAmD,EAC5D,QAASA,EAAU,EACnB,SAAUA,EAAU,EACpB,SAAUA,EAAgD,EAC1D,QAASA,EAAU,EACnB,WAAYA,EAAmC,EAC/C,SAAUA,EAAsC,EAChD,QAASA,EAAU,EACnB,OAAQA,EAAU,EAClB,YAAaA,EAAuE,EACpF,eAAgBA,EAAU,EAC1B,eAAgBA,EAAU,CAC5B,CAAC,mQC1GK,KAAA,CACJ,MAAA63B,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,WAAA3C,EACA,cAAA4C,EACA,cAAAC,GACEhD,GAAqC,IAAM,OAAA,OAAAriC,EAAAwd,GAAU,QAAV,YAAAxd,EAAiB,QAAO,EAEjEwP,EAAKtF,GAAc,aAAa,EAGhCjL,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,KAAM,CACJ,QAAS,OACT,UAAWxtB,GAASmpF,GAAgB,SAASnpF,CAAK,CACpD,EACA,QAAS,GACT,UAAW,CACT,QAAS,eACT,UAAWA,GAASisC,GAAmB,SAASjsC,CAAK,CACvD,EACA,SAAU,GACV,MAAO,CACL,QAAS,IAAMu9C,EAAc,EAC7B,OAAQ,EACV,EACA,OAAQ,UACR,YAAa,KACb,OAAQ,CACN,QAAS,IACT,UAAoBv9C,GAAAA,EAAM,SAAW,CACvC,EACA,UAAW,GACX,SAAU,GACV,OAAQ,KAAO,CAAA,GACf,cAAe,IACf,cAAe,IACf,UAAW,IAAM,CAAC,EAClB,aAAc,CACZ,QAASkB,GACT,OAAQ,EACV,EACA,MAAO,IAAM,CAAC,EAAG,EAAG,CAAC,EACrB,UAAW,IAAM,CAAC,EAAG,EAAG,CAAC,EACzB,OAAQ2kB,GAAe,EACvB,YAAa,GACb,OAAQA,GAAe,EACvB,YAAa,GACb,SAAU,GACV,SAAU,IAAMoF,EAAS,MACzB,eAAgB,IAAMtD,EAAG,GAAG,MAAM,EAClC,YAAa,KACb,WAAY,KACZ,MAAO,CACL,QAAS,IAAM,IAAI,KACnB,aAAoB,CAAC,OAAO,MAAM,IAAI,KAAK3nB,CAAK,CAAC,CACnD,EACA,MAAO,KACP,QAAS,IAAMq9C,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,IAAK,KACL,IAAK,KACL,aAAc,GACd,cAAe,GACf,YAAa,KACb,aAAc,GACd,UAAW,KACX,YAAa,KACb,mBAAoB,OACpB,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKuwB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERurE,EAAiBr6E,GAAU,UAAU,EACrCs6E,EAAmBt6E,GAAU,YAAY,EACzC4G,EAAQU,GAAS,EACjB9G,EAAYN,GAAa,EAEzBwZ,EAAYgiB,EAAAA,MAAMp+B,EAAO,WAAW,EACpCg1B,EAAWoJ,EAAAA,MAAMp+B,EAAO,UAAU,EAClCq9C,EAAiB3rC,EAAAA,IAAI1R,EAAM,OAAO,EAClC6nC,EAAUn2B,MAAI,EAAK,EACnBurE,EAAaC,GAAgB,EAC7BC,EAAWD,GAAgB,EAC3BE,EAAe1rE,MAAqB,OAAO,EAC3C22B,EAAY32B,MAAI,EAAE,EAClB2rE,EAAgB3rE,EAAAA,IAA0B,EAC1C08C,EAAc18C,EAAAA,IAAQ,IAAA,IAAM,EAC5B4rE,EAAc5rE,MAAI,EAAK,EACvB+iE,EAAgB/iE,EAAgB,IAAA,EAAE,EAElC,CAAE,MAAA/V,CAAM,EAAI66B,GAAc,EAE1Bvf,EAAU7C,GAAgB4pC,EAAkB,EAC5C9oB,EAASxjB,EAAAA,IAAmB,EAC5B,CAAE,UAAA6M,GAAW,WAAA6W,GAAY,aAAAK,CAAA,EAAiBX,GAAU,CACxD,UAAA1Y,EACA,SAAA4Y,EACA,QAAA/d,EACA,OAAQ5V,EAAAA,SAAS,IAAA,OAAM,OAAAN,EAAAm0B,EAAO,QAAP,YAAAn0B,EAAc,QAAO,EAC5C,OAAQ,EAAA,CACT,EACK,CAAE,QAAAmW,EAAA,EAAYF,GAASuH,EAAS,EAEhCg/D,GAAa7rE,EAAAA,IAAsC,EACnD8rE,GAAW9rE,EAAAA,IAAsC,EACjD+rE,GAAY/rE,EAAAA,IAAoC,EAEhDgsE,GAAer8E,EAAAA,SAAS,IAAM,CAClC,MAAMiB,EAAShC,GAAay8E,EAAe,MAAOC,EAAiB,MAAO,EAAI,EAEvE,OAAA3zF,GAAS2W,EAAM,MAAM,EAAIM,GAAagC,EAAQtC,EAAM,MAAM,EAAIsC,CAAA,CACtE,EACKq7E,GAAmBt8E,EAAAA,SAAS,IAAM,CACtC,GAAIrB,EAAM,YACD,OAAA,MAAM,QAAQA,EAAM,WAAW,EAAIA,EAAM,YAAY,CAAC,EAAIA,EAAM,YAGnE,KAAA,CAAE,OAAAgsC,EAAQ,MAAA/hD,GAAO,CAAC+V,EAAM,IAAI,EAAGnX,EAAS,EAAA60F,GAAa,MAAM,YAEjE,OAAOz6E,GAAajD,EAAM,MAAQ,GAAG/V,EAAK,IAAIpB,EAAI,GAAK,GAAGmjD,CAAM,IAAInjD,EAAI,GAAIqa,EAAU,KAAK,CAAA,CAC5F,EACK06E,GAAiBv8E,EAAAA,SAAS,IAAM,CACpC,GAAIrB,EAAM,YACR,OAAO,MAAM,QAAQA,EAAM,WAAW,EAClCA,EAAM,YAAY,CAAC,GAAKA,EAAM,YAAY,CAAC,EAC3CA,EAAM,YAGN,KAAA,CAAE,IAAAib,EAAK,CAACjb,EAAM,IAAI,EAAGnX,IAAS60F,GAAa,MAAM,YAEvD,OAAOz6E,GAAa,GAAGgY,CAAG,IAAIpyB,EAAI,GAAIqa,EAAU,KAAK,CAAA,CACtD,EACKU,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,YAAY,EAClBA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAGvQ,EAAM,IAAI,EAChB,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG,CAAC0sE,EAAW,QAAQ,KACxC,CAAC1sE,EAAG,GAAG,WAAW,CAAC,EAAG,CAAC0sE,EAAW,QAAQ,OAC1C,CAAC1sE,EAAG,GAAG,WAAW,CAAC,EAAG,CAAC0sE,EAAW,QAAQ,OAC1C,CAAC1sE,EAAG,GAAG,SAAS,CAAC,EAAG8sC,EAAe,MACnC,CAAC9sC,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,KAAA,CAE/B,CACD,EACK2L,EAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D6jD,EAAgBxiD,EAAAA,SAAS,IAAM,CAC7B,MAAAyiD,EAAUvzC,EAAG,GAAG,UAAU,EAEzB,MAAA,CACL,CAACuzC,CAAO,EAAG,GACX,CAAC,GAAGA,CAAO,YAAY,EAAG9jD,EAAM,SAChC,CAAC,GAAG8jD,CAAO,YAAY,EAAGn4C,EAAS,MACnC,CAAC,GAAGm4C,CAAO,WAAW,EAAG9jD,EAAM,QAC/B,CAAC,GAAG8jD,CAAO,KAAK9jD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,UAC9C,CAAC,GAAG8jD,CAAO,WAAW,EAAGjc,EAAQ,MACjC,CAAC,GAAGic,CAAO,KAAK9jD,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,SAClD,CAAA,CACD,EACK8oC,EAAYznC,EAAAA,SAAS,IAClB,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,OACjC,EACK8nC,EAAezmC,EAAAA,SAAS,IAAM,CAClC,MAAMigE,EAAS,CAAC2b,EAAYE,CAAQ,EAAE,IAAI/mE,IAAS,CACjD,MAAMkrD,GAAS,OAAO,OAAOlrD,GAAM,SAAS,EAAE,IAAIvkB,EAAY,EAE9D,MAAO,GAAGyvE,GAAO,MAAM,EAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAIA,GAAO,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,EAAA,CACpE,EAED,OAAOthE,EAAM,MAAQshE,EAASA,EAAO,CAAC,CAAA,CACvC,EACKuc,EAAex8E,EAAAA,SAAS,IAAM,CAC9B,GAAA,CAACg8E,EAAc,MAAc,MAAA,GAEjC,KAAM,CAACpoF,EAAMC,GAAOF,EAAI,EAAIqoF,EAAc,MACpCS,GAAgB,IAAA,KAAK,GAAG7oF,CAAI,IAAIC,EAAK,IAAIF,EAAI,EAAE,EAAE,QAAQ,EACzD+oF,GAAY3vB,EAAY,MAAM,QAAQ,EAE5C,OAAO0vB,GAAYC,EAAA,CACpB,EACKz0C,EAAYjoC,EAAAA,SAAS,IAClB,CAACrB,EAAM,UAAY,CAAC2L,EAAS,OAAS3L,EAAM,WAAakX,GAAQ,OAAS,CAAC,CAACmxB,EAAU,KAC9F,EACK75C,GAAM6S,EAAAA,SAAS,IAAM,CACzB,GAAIrB,EAAM,IAAK,CACb,MAAMhL,EAAOgpF,GAAeh+E,EAAM,IAAKgyE,EAAW,EAElD,OAAI,OAAO,MAAM,CAACh9E,CAAI,EAAU,MAEhCA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EAEjBA,EAAK,QAAQ,EAAA,CAGf,MAAA,IAAA,CACR,EACKzG,EAAM8S,EAAAA,SAAS,IAAM,CACzB,GAAIrB,EAAM,IAAK,CACb,IAAIhL,EAAOgpF,GAAeh+E,EAAM,IAAKgyE,EAAW,EAEhD,OAAI,OAAO,MAAM,CAACh9E,CAAI,EAAU,KAE5BgL,EAAM,OAAS,aACjBhL,EAAK,SAAS,GAAI,GAAI,GAAI,GAAG,EAEzBgL,EAAM,OAAS,QACjBhL,EAAK,SAAS,EAAE,EAChBA,EAAK,QAAQ,EAAE,GACNgL,EAAM,OAAS,UACxBhL,EAAK,SAASA,EAAK,SAAS,EAAI,CAAC,EACjCA,EAAO+B,GAAa/B,CAAI,EACxBA,EAAK,QAAQA,EAAK,QAAQ,EAAI,CAAC,IAI5BA,EAAK,QAAQ,EAAA,CAGf,MAAA,IAAA,CACR,EACKq5D,GAAWhtD,EAAAA,SAAS,IACpB,OAAO,MAAM7S,GAAI,KAAK,GAAK,OAAO,MAAMD,EAAI,KAAK,EAC5C,GAGFC,GAAI,MAAQD,EAAI,KACxB,EACK0vF,GAAe58E,EAAAA,SAAS,IACxBrB,EAAM,OAAS,YAAcA,EAAM,KAAO,CAAChJ,GAAegJ,EAAM,IAAKi9E,EAAW,QAAS,CAAA,EACpF/mF,GAAQ8J,EAAM,GAAG,EAGnB,EACR,EACKk+E,GAAe78E,EAAAA,SAAS,IACxBrB,EAAM,OAAS,YAAcA,EAAM,KAAO,CAAChJ,GAAegJ,EAAM,IAAKi9E,EAAW,QAAS,CAAA,EACpF/mF,GAAQ8J,EAAM,GAAG,EAGnB,EACR,EACKm+E,GAAa98E,EAAAA,SAAS,IAExBrB,EAAM,OAAS,YACfA,EAAM,OACNA,EAAM,KACN,CAAChJ,GAAegJ,EAAM,IAAKi9E,EAAW,QAAS,CAAA,EAExC/mF,GAAQ8J,EAAM,GAAG,EAGnB,EACR,EACKo+E,GAAa/8E,EAAAA,SAAS,IAExBrB,EAAM,OAAS,YACfA,EAAM,OACNA,EAAM,KACN,CAAChJ,GAAegJ,EAAM,IAAKi9E,EAAW,QAAS,CAAA,EAExC/mF,GAAQ8J,EAAM,GAAG,EAGnB,EACR,EACKq+E,GAAgBh9E,EAAAA,SAAS,IAAM,CAC/B,GAAA,CAACrB,EAAM,MAAc,MAAA,GAEzB,MAAMkuD,EAAa+uB,EAAW,UACxB9uB,GAAWgvB,EAAS,UAEtB,IAAArK,GAEA9yE,EAAM,OAAS,OACjB8yE,GAAQ,CAAC,MAAM,EACN9yE,EAAM,OAAS,QAChB8yE,GAAA,CAAC,OAAQ,OAAO,EACf9yE,EAAM,OAAS,OAChB8yE,GAAA,CAAC,OAAQ,QAAS,MAAM,EAEhCA,GAAQ,CAAC,OAAQ,QAAS,OAAQ,OAAQ,SAAU,QAAQ,EAG9D,UAAWjqF,MAAQiqF,GAAO,CACxB,GAAI5kB,EAAWrlE,EAAI,EAAIslE,GAAStlE,EAAI,EAAU,MAAA,GAC9C,GAAIqlE,EAAWrlE,EAAI,EAAIslE,GAAStlE,EAAI,EAAU,MAAA,EAAA,CAGzC,MAAA,EAAA,CACR,EAEKy1F,GAAiBhL,GAAa2K,GAAcC,EAAY,EACxDK,GAAejL,GAAa6K,GAAYC,EAAU,EAElDzK,GAAiBtyE,EAAAA,SAAS,IACvB+7E,EAAa,QAAU,QAC1BkB,GAAe,eACfC,GAAa,cAClB,EACKC,GAAan9E,EAAAA,SAAS,IAAM,CAChC,KAAM,CAAE,KAAAjM,EAAM,OAAAC,GAAQ,OAAAC,IAAW2nF,EAAW,UACtC,CAAE,eAAAtJ,EAAAA,EAAmB2K,GAGzB,OAAAD,GAAc,OACdI,GAAexB,EAAW,SAAS,GACnCtJ,GAAe,KAAKv+E,CAAI,GACxBu+E,GAAe,OAAOv+E,EAAMC,EAAM,GAClCs+E,GAAe,OAAOv+E,EAAMC,GAAQC,EAAM,CAAA,CAE7C,EACKopF,GAAWr9E,EAAAA,SAAS,IAAM,CAC1B,GAAA,CAACrB,EAAM,MAAc,MAAA,GAEzB,KAAM,CAAE,KAAA5K,EAAM,OAAAC,GAAQ,OAAAC,IAAW6nF,EAAS,UACpC,CAAE,eAAAxJ,EAAAA,EAAmB4K,GAGzB,OAAAF,GAAc,OACdI,GAAetB,EAAS,SAAS,GACjCxJ,GAAe,KAAKv+E,CAAI,GACxBu+E,GAAe,OAAOv+E,EAAMC,EAAM,GAClCs+E,GAAe,OAAOv+E,EAAMC,GAAQC,EAAM,CAAA,CAE7C,EACKqpF,GAAet9E,EAAAA,SAAS,IAAMrB,EAAM,OAAS,YAAcA,EAAM,QAAQ,EAEzE4M,EAAAA,MAAA,IAAM5M,EAAM,KAAM4+E,EAAW,EACnChyE,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPokE,GAAWpkE,CAAK,EAEhBy/C,EAAU,OAAS,MAAM,QAAQz/C,CAAK,EAAIA,EAAM,CAAC,GAAKA,EAAM,CAAC,EAAIA,GAASuxF,GAAmB,EAAA,EAC/F,EACA,CAAE,UAAW,EAAK,CACpB,EACAvtE,EAAA,MACE,IAAM5M,EAAM,KACHpX,GAAA,CACP,MAAMi2F,GAAWj2F,IAAU,OACrBk2F,GAAUD,IAAYj2F,IAAU,QAEtCq0F,EAAW,QAAQ,KAAO,GAC1BE,EAAS,QAAQ,KAAO,GACxBF,EAAW,QAAQ,MAAQ4B,GAC3B1B,EAAS,QAAQ,MAAQ0B,GACzB5B,EAAW,QAAQ,KAAO6B,GAC1B3B,EAAS,QAAQ,KAAO2B,EAC1B,EACA,CAAE,UAAW,EAAK,CACpB,EACAlyE,EAAA,MAAM,IAAM5M,EAAM,OAAQ4+E,GAAa,CAAE,UAAW,GAAM,EAC1DhyE,EAAA,MACE,IAAM5M,EAAM,QACHpX,GAAA,CACPy0D,EAAe,MAAQz0D,CAAA,CAE3B,EACAgkB,QAAMywC,EAAyBz0D,GAAA,CACzBA,GACW6sC,EAAA,CACf,CACD,EACD7oB,QAAMi7B,EAAkBj/C,GAAA,CAEpBulB,EADEvlB,EACQoX,EAAM,QAENA,EAAM,MAFO,CAGzB,CACD,EACD4M,QAAMwwE,EAAuBx0F,GAAA,CACvB,CAACoX,EAAM,cAAgBq9C,EAAe,OACxClvC,EAAUnO,EAAM,YAAa++E,GAAgB,EAAE,OAAQn2F,CAAK,CAC9D,CACD,EACDgkB,EAAA,MACE,IAAMqwE,EAAW,OACRr0F,GAAA,CACH,CAACoX,EAAM,cAAgBq9C,EAAe,OAAS+/B,EAAa,QAAU,SAC9DjvE,EAAAnO,EAAM,YAAapX,EAAO,OAAO,CAC7C,CAEJ,EACAgkB,EAAA,MACE,IAAMuwE,EAAS,OACNv0F,GAAA,CACH,CAACoX,EAAM,cAAgBq9C,EAAe,OAAS+/B,EAAa,QAAU,OAC9DjvE,EAAAnO,EAAM,YAAapX,EAAO,KAAK,CAC3C,CAEJ,EACAgkB,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACHA,IACF66D,GAAW,EAAK,EACLxZ,GAAA,EACb,CAEJ,EACAr9B,QAAMjB,EAAmB/iB,GAAA,CACnBA,GACF66D,GAAW,EAAK,CAClB,CACD,EAEY3xC,EAAA,CACX,MAAAi0B,EACA,eAAAsX,EACA,QAAAxV,EACA,QAAA3wB,GACA,WAAA+lE,EACA,SAAAE,EACA,aAAAC,EACA,WAAAoB,GACA,SAAAE,GACA,QAAAznE,EACA,UAAAsH,GACA,OAAA2W,EACA,MAAOqoD,GACP,IAAKC,GACL,MAAOC,GACP,aAAAhoD,EACA,MAAQ5qC,GAA2B,QAAA,OAAAkW,GAAAwd,GAAU,QAAV,YAAAxd,GAAiB,MAAMlW,IAC1D,KAAM,IAAA,OAAM,OAAAkW,EAAAwd,GAAU,QAAV,YAAAxd,EAAiB,OAAK,CACnC,EAED,SAASm8E,IAAkB,CAEzB,KAAM,CAAE,cAAAzK,EAAe,QAAAG,GAAS,YAAAG,GAAa,YAAAE,IAAgBV,GAAU,CACrE,OACA,QACA,OACA,OACA,SACA,QAAA,CACiB,EAEbyM,GAAYlyE,EAAAA,SAAS,CACzB,KAAM,KACN,MAAO,EACP,KAAM,EACN,KAAM,EACN,OAAQ,EACR,OAAQ,CAAA,CACT,EACKktE,GAAYltE,EAAAA,SAAS,CACzB,KAAM,GACN,MAAO,GACP,KAAM,GACN,KAAM,GACN,OAAQ,GACR,OAAQ,EAAA,CACT,EAEG,IAAAmyE,GAAc,CAAE,GAAGD,EAAU,EAC7BE,GAAkB,CAAE,GAAGlF,EAAU,EAErC,OAAOltE,WAAS,CACd,OAAQ2lE,EACR,QAAAG,GACA,UAAAoH,GACA,UAAAgF,GACA,YAAAjM,GACA,YAAAE,GACA,QAAS,CAACj+E,EAAYmqF,GAAW,KAAS,CAC9BH,GAAA,KAAOhqF,EAAK,YAAY,EACxBgqF,GAAA,MAAQhqF,EAAK,SAAa,EAAA,EAC1BgqF,GAAA,KAAOhqF,EAAK,QAAQ,EAE1BmqF,KACQH,GAAA,KAAOhqF,EAAK,SAAS,EACrBgqF,GAAA,OAAShqF,EAAK,WAAW,EACzBgqF,GAAA,OAAShqF,EAAK,WAAW,EAEvC,EACA,QAAS,IACA,IAAI,KACTgqF,GAAU,KACVA,GAAU,MAAQ,EAClBA,GAAU,KACVA,GAAU,KACVA,GAAU,OACVA,GAAU,MACZ,EAEF,QAAS,CACOC,GAAA,CAAE,GAAGD,EAAU,EACXE,GAAA,CAAE,GAAGlF,EAAU,CACnC,EACA,SAAU,CACD,OAAA,OAAOgF,GAAWC,EAAW,EAC7B,OAAA,OAAOjF,GAAWkF,EAAe,CAAA,CAC1C,CACD,CAAA,CAGH,SAASH,IAAkB,CAClB,OAAA3B,EAAa,QAAU,QAAUH,EAAaE,CAAA,CAGvD,SAASa,GAAep1F,EAAiB4jB,GAAe,IAAI,KAAKxM,EAAM,KAAK,EAAG,CACzE,IAAAhL,GAAOU,GAAO9M,CAAK,EAEvB,OAAI,OAAO,MAAMoM,GAAK,QAAS,CAAA,IACtBA,GAAAwX,IAGFxX,EAAA,CAGT,SAASg4D,GAAsCpkE,EAAgB,CACxD,MAAM,QAAQA,CAAK,IACdA,EAAA,CAACA,EAAOA,CAAK,GAGvB,QAASwB,GAAI,EAAGA,GAAI,EAAG,EAAEA,GAAG,CAC1B,MAAM4K,GAAOgpF,GAAep1F,EAAMwB,EAAC,GAAK,EAAE,EAMtC,IALUA,KAAM,EAAI6yF,EAAaE,GAE/B,QAAQnoF,EAAI,EACFoqF,GAAA,CAAC,CAACx2F,EAAMwB,EAAC,EAAGA,KAAM,EAAI,QAAU,KAAK,EAEjD,CAAC4V,EAAM,MAAO,KAAA,CACpB,CAGF,SAASq/E,IAAqB,CACtB,MAAAC,MAAe,IAGrB,IAAIC,GAAc,GAET,QAAAn1F,GAAI,EAAG4H,GAAMgO,EAAM,OAAO,OAAQ5V,GAAI4H,GAAK,EAAE5H,GAAG,CACvD,MAAM8W,GAAOlB,EAAM,OAAO,OAAO5V,EAAC,EAElC,GAAI8W,KAAS,IACXq+E,GAAc,CAACA,WACN,CAACA,GACV,OAAQr+E,GAAM,CACZ,IAAK,IACHo+E,EAAS,IAAI,MAAM,EACnB,MACF,IAAK,IACHA,EAAS,IAAI,OAAO,EACpB,MACF,IAAK,IACHA,EAAS,IAAI,MAAM,EACnB,KAAA,CAEN,CAGY7K,EAAA,MAAQ,CAAC,GAAG6K,CAAQ,CAAA,CAGpC,SAASE,IAAuB,CACxB,MAAAtF,EAAal6E,EAAM,OAAS,WAEjC,CAACi9E,EAAYE,CAAQ,EAAE,QAAQ/mE,IAAS,CAKnC,GAJJA,GAAM,QAAQ,KAAO,GACrBA,GAAM,QAAQ,OAAS,GACvBA,GAAM,QAAQ,OAAS,GAEnB8jE,GAAcl6E,EAAM,OAAQ,CAE9B,IAAIu/E,GAAc,GAET,QAAAn1F,GAAI,EAAG4H,GAAMgO,EAAM,OAAO,OAAQ5V,GAAI4H,GAAK,EAAE5H,GAAG,CACvD,MAAM8W,GAAOlB,EAAM,OAAO,OAAO5V,EAAC,EAElC,GAAI8W,KAAS,IACXq+E,GAAc,CAACA,WACN,CAACA,GACV,OAAQr+E,GAAM,CACZ,IAAK,IACHkV,GAAM,QAAQ,KAAO,GACrB,MACF,IAAK,IACHA,GAAM,QAAQ,OAAS,GACvB,MACF,IAAK,IACHA,GAAM,QAAQ,OAAS,GACvB,KAAA,CAEN,CACF,CACF,CACD,CAAA,CAGH,SAASwoE,IAAc,CACFS,GAAA,EACEG,GAAA,CAAA,CAGd,SAAAJ,GAAgBx2F,EAAgB4zF,GAA6B,EACrDA,GACXA,KAAc,QACZ,CAACS,CAAU,EACX,CAACE,CAAQ,EACX,CAACF,EAAYE,CAAQ,GAElB,QAAQ/mE,IAAS,CACpB,OAAO,KAAKA,GAAM,SAAS,EAAqB,QAAgBvtB,IAAA,CAChEutB,GAAM,UAAUvtB,EAAI,EAAID,CAAA,CACzB,CAAA,CACF,CAAA,CAGH,SAASuxF,IAAiB,CACjB,OAAA,MAAM,QAAQryC,EAAa,KAAK,EAAIA,EAAa,MAAM,KAAK,GAAG,EAAIA,EAAa,KAAA,CAGzF,SAAS22C,GAAezpF,EAAY,CAC9B,GAAA,OAAOgL,EAAM,cAAiB,YAC5BA,EAAM,aAAahL,CAAI,EAClB,MAAA,GAIL,MAAA+9B,GAAO/9B,EAAK,QAAQ,EAE1B,GAAIq5D,GAAS,OACX,GAAIt7B,GAAOxkC,EAAI,OAASwkC,GAAOvkC,GAAI,MAC1B,MAAA,WAGLukC,GAAOvkC,GAAI,OAASukC,GAAOxkC,EAAI,MAC1B,MAAA,GAIJ,MAAA,EAAA,CAGT,SAASkxF,IAAa,EAChBjB,GAAW,OAAUx+E,EAAM,OAAS0+E,GAAS,QAC/C1xB,GAAWhtD,EAAM,KAAK,CACxB,CAGF,SAASyjD,GAAW/G,EAAkB,CAChCW,EAAe,QAAUX,IAE7BW,EAAe,MAAQX,EAEvB1d,EAAK,iBAAkB0d,CAAO,EACpBvuC,EAAAnO,EAAM,SAAU08C,CAAO,EAAA,CAGnC,SAASi+B,IAAa,CAGhB,GAFO8E,GAAA,EAEPp3C,EAAU,QAAU8xC,KAAkB,CACxC9xC,EAAU,MAAQ8xC,GAAe,EAE3B,MAAA7Y,EAAS,MAAM,QAAQx5B,EAAa,KAAK,EAAIA,EAAa,MAAQ,CAACA,EAAa,KAAK,EACrF43C,GAAuB,CAAC,EACxBC,GAA6B,CAAC,EAE9BC,GAAc5/E,EAAM,YACpBk0E,GACJ,OAAO0L,IAAgB,WACnBA,GACAA,GACE,CAACC,GAAWh3F,IACZ+M,GACEiqF,GACC,MAAM,QAAQD,EAAW,EAEtB/2F,IAAS,QACP+2F,GAAY,CAAC,EACbA,GAAY,CAAC,EAHfA,EAGe,EAERC,IAAAA,GAErB,QAASz1F,GAAI,EAAGA,GAAI,IACd4V,EAAM,OAAS,OACN0/E,GAAAt1F,EAAC,EAAI,IAAI,KAClBA,KAAM,EAAI6yF,EAAW,UAAU,KAAOE,EAAS,UAAU,KACzD,GACA,QAAQ,EACDn9E,EAAM,OAAS,WACxB0/E,GAAWt1F,EAAC,EAAQ,IAAA,KAAKk3E,EAAOl3E,EAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAI,WAAW,EAAE,QAAQ,EAE7Ds1F,GAAAt1F,EAAC,EAAI,IAAI,KAAKk3E,EAAOl3E,EAAC,CAAC,EAAE,QAAQ,EAG9Bu1F,GAAAv1F,EAAC,EAAI8pF,GAAYwL,GAAWt1F,EAAC,EAAGA,KAAM,EAAI,QAAU,KAAK,EAErE,EAAC4V,EAAM,OAdU,EAAE5V,GAcnB,CAGN,MAAM01F,GAAY9/E,EAAM,MAAQ0/E,GAAaA,GAAW,CAAC,EACnDz2C,GAAiBjpC,EAAM,MAAQ2/E,GAAkBA,GAAgB,CAAC,EAExEP,GAAgB,EAAI,EACpBpgD,EAAK,eAAgB8gD,EAAS,EAC9B9gD,EAAK,yBAA0BiK,EAAc,EAC7C7C,EAAc05C,EAAS,EACb3xE,EAAAnO,EAAM,SAAmC8/E,EAAS,EAC9C55C,EAAA,CAAA,CAChB,CAGO,SAAA65C,GAAYC,EAAe,GAAM,CACxCv8B,GAAW,EAAK,EAEhBu8B,GAAgBrF,GAAW,EAC3BsC,EAAW,YAAY,EACvBE,EAAS,YAAY,CAAA,CAGvB,SAAS8C,GAAYp3F,EAAoB,CACjC,MAAAm2F,GAAYD,KAAkB,UAEpC,OAAQl2F,EAAM,CACZ,IAAK,OAAQ,CACXm2F,GAAU,KAAOrxF,GAAWqxF,GAAU,KAAM,KAAM,IAAI,EACtD,KAAA,CAEF,IAAK,QAAS,CACZA,GAAU,MAAQrxF,GAAWqxF,GAAU,MAAO,EAAG,EAAE,EACnD,KAAA,CAEF,IAAK,OAAQ,CACX,MAAM9pF,GAAQ8pF,GAAU,MAEpB,IAAAloF,GAEA5B,GAAQ,EACNA,KAAU,EACZ4B,GAAU,GAAM5B,GAAQ,EAEpB0B,GAAWooF,GAAU,IAAI,EACjBloF,GAAA,GAEAA,GAAA,GAIdA,GAAU,GAAM5B,GAAQ,EAG1B8pF,GAAU,KAAOrxF,GAAWqxF,GAAU,KAAM,EAAGloF,EAAO,EACtD,KAAA,CAEF,IAAK,OACL,IAAK,SACL,IAAK,SACOkoF,GAAAn2F,CAAI,EAAI8E,GAAWqxF,GAAUn2F,CAAI,EAAG,EAAGA,IAAS,OAAS,GAAK,EAAE,EAC1Em2F,GAAUn2F,CAAI,EAAI,KAAK,MAAMm2F,GAAUn2F,CAAI,EAAIq3F,GAAQr3F,CAAI,CAAC,EAAIq3F,GAAQr3F,CAAI,CAC9E,CACF,CAGF,SAASs3F,IAAgB,CACnBngF,EAAM,WAEV6nC,EAAQ,MAAQ,GAEVlsC,EAAA,MAAQ,WAAW,IAAM,UACzBksC,EAAQ,QACNu1C,EAAa,QAAU,SACzBr8E,EAAAw8E,GAAW,QAAX,MAAAx8E,EAAkB,SAElB4U,GAAA6nE,GAAS,QAAT,MAAA7nE,GAAgB,UAGnB,GAAG,EAAA,CAGR,SAASs0B,IAAa,UACpB,aAAatuC,EAAM,KAAK,EAExBksC,EAAQ,MAAQ,IAChB9mC,EAAAw8E,GAAW,QAAX,MAAAx8E,EAAkB,QAClB4U,GAAA6nE,GAAS,QAAT,MAAA7nE,GAAgB,MAAK,CAGvB,SAASyqE,GAAUlnF,EAAc,CAC3B,GAAA8G,EAAM,UAAY2L,EAAS,MAAO,OAEtC,MAAMxa,GAAS+H,EAAM,OAIjB,GAFJuqD,GAAW,EAAI,EAEXxsC,EAAQ,OAAS9lB,GAAQ,CAC3B,MAAMkvF,GAAQ,MAAM,KAAKppE,EAAQ,MAAM,iBAAiB,IAAI1G,EAAG,GAAG,MAAM,CAAC,EAAE,CAAC,EACtEzf,GAAQuvF,GAAM,UAAUnX,IAAQA,KAAS/3E,IAAU+3E,GAAK,SAAS/3E,EAAM,CAAC,EAEzE,CAACL,KACJmsF,EAAW,OAAS,KACpBE,EAAS,OAAS,MAGhBn9E,EAAM,OAASlP,IAASuvF,GAAM,OAAS,EACzCC,GAAmB,KAAK,EAExBA,GAAmB,OAAO,CAC5B,CAGYH,GAAA,CAAA,CAGhB,SAAS9zC,GAAYzjD,EAAe,CAClC,MAAMwtB,GAAQ2oE,GAAgB,EACxBl2F,GAAOutB,GAAM,OAEdvtB,KAEL03F,GAAkB13F,GAAMD,CAAK,GAEzBC,KAAS,OAASutB,GAAM,UAAU,MAAQ,IAAOA,GAAM,UAAUvtB,EAAI,GAAK,KAC5EutB,GAAM,YAAY,OAAQ,EAAK,EACjC,CAGO,SAAAmqE,GAAkB13F,EAAoBwH,GAAgB,CAC7D,MAAM+lB,GAAQ2oE,GAAgB,EACxBl/E,GAAOuW,GAAM,UAAUvtB,CAAI,EAE7ButB,GAAM,UAAUvtB,CAAI,GAAKgX,GAAO,GAAKA,IAAQhX,IAAS,OAAS,IAAO,IACxEutB,GAAM,UAAUvtB,CAAI,EAAIgX,GAAO,GAAKxP,IAEpC+lB,GAAM,UAAUvtB,CAAI,EAAIwH,GACxBmwF,GAAiB33F,CAAI,GAGdA,IAAA,QAAUo3F,GAAYp3F,CAAI,EACnCslB,EAAUnO,EAAM,QAASnX,EAAMutB,GAAM,UAAUvtB,CAAI,CAAC,CAAA,CAGtD,SAAS23F,GAAiB33F,EAAoB,CACtC,MAAAmxF,GAAY+E,KAAkB,UAEhCl2F,IAAS,QACXmxF,GAAU,KAAO,GACjBA,GAAU,MAAQ,IACTnxF,IAAS,QAClBmxF,GAAU,KAAO,GACRnxF,IAAS,SAClBmxF,GAAU,KAAO,GACRnxF,IAAS,WAClBmxF,GAAU,KAAO,GACjBA,GAAU,OAAS,IAGrBA,GAAUnxF,CAAI,EAAI,EAAA,CAGpB,SAASmsF,GAAiBnsF,EAAoB,CAC5Ck2F,GAAA,EAAkB,OAASl2F,CAAA,CAG7B,SAAS43F,GAAW53F,EAAsC,CACxD,MAAO,CAAC,OAAQ,SAAU,QAAQ,EAAE,SAASA,CAAI,CAAA,CAG1C,SAAA63F,EAAaC,EAA8BC,GAAkB,QACpE,MAAMC,GAASF,IAAe,OACxB9pC,GAAOgqC,GAAS,EAAI,GACpBzqE,GAAQ2oE,GAAgB,EACxBl2F,GAAOutB,GAAM,OAEdvtB,IAEDutB,GAAM,QAAQvtB,EAAI,IAChB43F,GAAW53F,EAAI,EACjButB,GAAM,UAAUvtB,EAAI,GAAKguD,IAAQ+pC,GAAUE,GAAYj4F,EAAI,EAAIq3F,GAAQr3F,EAAI,IAEvE+3F,GACE/3F,KAAS,OACXutB,GAAM,UAAU,MAAQygC,GAAO,GAE/BzgC,GAAM,UAAUvtB,KAAS,OAAS,QAAU,MAAM,GAAKguD,GAGzDzgC,GAAM,UAAUvtB,EAAI,GAAKguD,GAGfkqC,GAAA,EACZC,GAAoBn4F,EAAI,GAG1Bo3F,GAAYp3F,EAAI,EACNslB,EAAAnO,EAAM6gF,GAAS,SAAW,SAAS,EAAGh4F,GAAMutB,GAAM,UAAUvtB,EAAI,CAAC,GACjEkY,GAAA08E,GAAA,QAAA,MAAA18E,GAAO,gBAAgBq8E,EAAa,OAChD,CAGF,SAAS6D,GAAWL,EAAkB,CACpCF,EAAa,OAAQE,CAAO,CAAA,CAG9B,SAASM,GAAYN,EAAkB,CACrCF,EAAa,QAASE,CAAO,CAAA,CAG/B,SAASG,IAAc,CACf,MAAA/B,EAAYD,KAAkB,UAC9B/pF,GAAO,IAAI,KAAKgqF,EAAU,KAAMA,EAAU,MAAQ,EAAGA,EAAU,IAAI,EAE/DA,EAAA,KAAOhqF,GAAK,YAAY,EACxBgqF,EAAA,MAAQhqF,GAAK,SAAa,EAAA,EAC1BgqF,EAAA,KAAOhqF,GAAK,QAAQ,CAAA,CAGhC,SAASmsF,GAAgB,CACvB,sBAAsB,IAAM,OACfl3C,GAAA,GACXlpC,EAAAwd,GAAU,QAAV,MAAAxd,EAAiB,OAAM,CACxB,CAAA,CAGH,SAAS+pC,IAAc,CACPq2C,EAAA,EACFpB,GAAA,EACZ5xE,EAAUnO,EAAM,OAAO,CAAA,CAGzB,SAAS2sE,IAAe,CACRwU,EAAA,EACdn0B,GAAW3kB,EAAU,MAAM,MAAM,GAAG,CAAC,EACrC03C,GAAY,EAAK,EACjB5xE,EAAUnO,EAAM,QAAQ,CAAA,CAGjB,SAAA2qC,GAAYy2C,EAAS,GAAM,CAC9BphF,EAAM,UAAY2L,EAAS,OAE3B3L,EAAM,WACRsT,EAAAA,SAAS,IAAM,CACb,MAAMwsE,GAAY9/E,EAAM,MAAS,CAAkB,EAAA,KAEnDgtD,GAAW,IAAI,EACfo0B,GAAUrB,GAAY,EAAK,EAC3B/gD,EAAK,eAAgB8gD,EAAS,EAC9B9gD,EAAK,yBAA0Bh/B,EAAM,MAAQ,CAAA,EAAK,IAAI,EAC5CmO,EAAAnO,EAAM,SAAmC8/E,EAAS,EAC5D3xE,EAAUnO,EAAM,OAAO,EACvBujC,EAAWu8C,EAAU,EACrBsB,GAAUn3C,GAAW,EAErB5B,EAAU,MAAQ,GAElB/0B,EAAAA,SAAS,IAAM,CACb8rE,GAAgB,EAAK,CAAA,CACtB,CAAA,CACF,CACH,CAGO,SAAA3E,GAAejiF,EAAc5P,GAA8B,CACpDu4F,EAAA,EACdn0B,GAAWpkE,EAAK,EACNulB,EAAAnO,EAAM,WAAoExH,EAAM5P,EAAK,EACnFm3F,GAAA,CAAA,CAId,SAASG,GAAQr3F,EAAgB,CACxB,OAAAmX,EAAM,MAAMnX,IAAS,OAAS,EAAIA,IAAS,SAAW,EAAI,CAAC,GAAK,CAAA,CAIzE,SAASi4F,GAAYj4F,EAAgB,CAC5B,OAAAmX,EAAM,UAAUnX,IAAS,OAAS,EAAIA,IAAS,SAAW,EAAI,CAAC,GAAK,CAAA,CAG7E,SAASw4F,GAAgBC,EAAwB,CAC3C,GAAAthF,EAAM,OAASshF,IACjBlzB,EAAY,MAAQkzB,EAEhBjE,EAAc,OAAO,CACjB,MAAAkE,GAAc,CAACD,EAAU,cAAeA,EAAU,SAAA,EAAa,EAAGA,EAAU,SAAS,EACrFr3F,GAAQ4zF,EAAa,MAAQR,EAAc,MAAQkE,GACnDtmE,GAAM4iE,EAAa,MAAQ0D,GAAclE,EAAc,MAEzD,IAAAvK,GAEA9yE,EAAM,OAAS,OACjB8yE,GAAQ,CAAC,MAAM,EACN9yE,EAAM,OAAS,QAChB8yE,GAAA,CAAC,OAAQ,OAAO,EAEhBA,GAAA,CAAC,OAAQ,QAAS,MAAM,EAGzB,QAAA1oF,GAAI,EAAG4H,GAAM8gF,GAAM,OAAQ1oF,GAAI4H,GAAK,EAAE5H,GAC7C6yF,EAAW,UAAUnK,GAAM1oF,EAAC,CAAC,EAAIH,GAAMG,EAAC,EACxC+yF,EAAS,UAAUrK,GAAM1oF,EAAC,CAAC,EAAI6wB,GAAI7wB,EAAC,CACtC,CAEJ,CAGF,SAASo3F,GAAkBlgB,EAAkB,CACvC,IAAAwR,GAUA,GARA9yE,EAAM,OAAS,OACjB8yE,GAAQ,CAAC,MAAM,EACN9yE,EAAM,OAAS,QAChB8yE,GAAA,CAAC,OAAQ,OAAO,EAEhBA,GAAA,CAAC,OAAQ,QAAS,MAAM,EAG9B,CAAC9yE,EAAM,MAAO,CACP,QAAA5V,GAAI,EAAG4H,GAAM8gF,GAAM,OAAQ1oF,GAAI4H,GAAK,EAAE5H,GAC7C6yF,EAAW,UAAUnK,GAAM1oF,EAAC,CAAC,EAAIk3E,EAAOl3E,EAAC,EACrB42F,GAAAlO,GAAM1oF,EAAC,EAAG,OAAO,EAGnCu0F,GAAa,OAAmB7zC,GAAA,EAEpC,MAAA,CAGE,GAACuyC,EAAc,MASZ,CACL,KAAM,CAACpoF,GAAMC,GAAOF,EAAI,EAAIqoF,EAAc,MACpCS,GAAgB,IAAA,KAAK,GAAG7oF,EAAI,IAAIC,EAAK,IAAIF,EAAI,EAAE,EAAE,QAAQ,EACzDysF,GAAiB,IAAA,KAAK,GAAGngB,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,CAAC,EAAE,EAAE,QAAQ,EACxEr3E,GAAQ6zF,GAAY2D,GAAapE,EAAc,MAAQ/b,EACvDrmD,EAAM6iE,GAAY2D,GAAangB,EAAS+b,EAAc,MAEnD,QAAAjzF,GAAI,EAAG4H,GAAM8gF,GAAM,OAAQ1oF,GAAI4H,GAAK,EAAE5H,GAC7C6yF,EAAW,UAAUnK,GAAM1oF,EAAC,CAAC,EAAIH,GAAMG,EAAC,EACxC+yF,EAAS,UAAUrK,GAAM1oF,EAAC,CAAC,EAAI6wB,EAAI7wB,EAAC,EAChB42F,GAAAlO,GAAM1oF,EAAC,EAAG,OAAO,EACjB42F,GAAAlO,GAAM1oF,EAAC,EAAG,KAAK,EAGpBs3F,GAAA,EACjBrE,EAAc,MAAQ,OAElBsB,GAAa,OAAmB7zC,GAAA,CAAA,KA1BZ,CACxBuyC,EAAc,MAAQ/b,EAEb,QAAAl3E,GAAI,EAAG4H,GAAM8gF,GAAM,OAAQ1oF,GAAI4H,GAAK,EAAE5H,GAC7C6yF,EAAW,UAAUnK,GAAM1oF,EAAC,CAAC,EAAIk3E,EAAOl3E,EAAC,EACzC+yF,EAAS,UAAUrK,GAAM1oF,EAAC,CAAC,EAAIk3E,EAAOl3E,EAAC,EACnB42F,GAAAlO,GAAM1oF,EAAC,EAAG,OAAO,EACjB42F,GAAAlO,GAAM1oF,EAAC,EAAG,KAAK,CACrC,CAmBF,CAGO,SAAAu3F,GAAiBnF,EAA4B3zF,GAAgBkqC,GAAc,CAC5E3c,MAAAA,GAAQomE,IAAc,QAAUS,EAAaE,EAEnD/mE,GAAM,UAAUvtB,EAAI,EAAIkqC,GACxBiuD,GAAoB,OAAQxE,CAAS,EACrCwE,GAAoB,SAAUxE,CAAS,EACvCwE,GAAoB,SAAUxE,CAAS,CAAA,CAGhC,SAAAwE,GAAoBn4F,EAAoB2zF,GAA6B,CAC5E,MAAMpmE,GAAQomE,GAAaA,KAAc,QAAUS,EAAaE,EAAY4B,GAAgB,EAExFl2F,IAAS,QACXutB,GAAM,UAAU,KAAO,GACdvtB,IAAS,SAClButB,GAAM,UAAU,KAAO,GACvBA,GAAM,UAAU,MAAQ,IAG1BA,GAAM,UAAUvtB,CAAI,EAAI,EAAA,CAG1B,SAAS64F,IAAmB,CACtB,GAAA,CAAC1hF,EAAM,MAAO,OAEZ,MAAA4hF,EAAY3E,EAAW,QAAQ,EAC/B4E,GAAU1E,EAAS,QAAQ,EAE7ByE,EAAU,QAAA,EAAYC,GAAQ,YAChC5E,EAAW,QAAQ4E,EAAO,EAC1B1E,EAAS,QAAQyE,CAAS,EAC5B,CAGF,SAAStB,GAAmBz3F,EAAuB,CACjDu0F,EAAa,MAAQv0F,CAAA,CAGvB,SAASoqF,GAAYpqF,EAAuB,CAC1C,GAAImX,EAAM,MAAO,CACXnX,IAAS,QAAUu0F,EAAa,QAAU,SAAW,CAACH,EAAW,QACnEqD,GAAmB,KAAK,EAG1B,MAAMlqE,GAAQ2oE,GAAgB,EACxBtM,GAAgBr8D,GAAM,OAIxB,GAFJA,GAAM,YAAYvtB,EAAM,CAAC4pF,EAAa,EAElCA,KAAkBr8D,GAAM,OAAQ,CAC5B,MAAAmH,GAAU6/D,EAAa,QAAU,SACpB7/D,GAAU4/D,EAAWF,GAE7B,YAAYp0F,IAAS,OAAS,SAAW,OAAQA,IAAS,MAAM,EACxDy3F,GAAA/iE,GAAU,MAAQ,OAAO,CAAA,CAC9C,MAEA0/D,EAAW,YAAYp0F,CAAI,CAC7B,CAGF,SAASi5F,GAAiBj5F,EAAoB,CAC5Cy3F,GAAmB,OAAO,EAC1BtL,GAAiBnsF,CAAI,EAErByqB,EAAAA,SAAS,IAAM,SACHvS,GAAA08E,GAAA,QAAA,MAAA18E,GAAO,gBAAgB,QAAO,CACzC,CAAA,CAGH,SAASghF,GAAel5F,EAAoB,CAC1Cy3F,GAAmB,KAAK,EACxBtL,GAAiBnsF,CAAI,EAErByqB,EAAAA,SAAS,IAAM,SACHvS,GAAA08E,GAAA,QAAA,MAAA18E,GAAO,gBAAgB,MAAK,CACvC,CAAA,CAGH,SAASi9C,IAAqB,CAC5B7vC,EAAUnO,EAAM,cAAc,EAE1BA,EAAM,cAAgBq9C,EAAe,QACvC0iC,GAAY,CAACpB,GAAa,OAAS,CAAC3+E,EAAM,aAAa,EAC5CiqC,GAAA,EACX97B,EAAUnO,EAAM,cAAc,EAChC,8BAKAqS,EAAA,mBAkNM,MAAA,CAjNH,GAAIH,QAAK6zB,CAAA,UACN,UAAJ,IAAI9uB,EACH,uBAAOrT,EAAS,KAAA,EACjB,KAAK,QACJ,gBAAesO,EAAA,MAAA1X,EAAA,EAAY0X,EAAAA,MAAAlS,CAAA,EAAM,QAAQ,EACzC,gBAAekS,EAAAA,MAAW1X,EAAA,EAAC6iD,EAAc,KAAA,EAC1C,gBAAc,SACb,kBAAiBnrC,QAAO8zB,CAAA,EACxB,QAAOo6C,EAAA,GAER3tE,EAAAA,mBA6HM,MAAA,SA5HA,YAAJ,IAAI8L,GACH,uBAAOslC,EAAa,KAAA,EACrB,SAAS,IACR,UAAO,4BAAgBu8B,GAAS,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,+CACLz1C,GAAW,EAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,WAAA,CAAA,EAAA,IAG/B7B,EAAS,qBADjBz2B,EAAAA,mBAUM,MAAA,OARH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,iBAAA,CAAA,MAAWzzC,EAAAA,MAAKlS,CAAA,EAAC,WAAW,CAAA,CAAA,GAElCuS,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,6EAIzByS,EAAAA,mBAoEM,MAAA,CApEA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAChBW,EAAAA,YA4Be8wE,GAAA,CA3Bb,IAAI,QACH,YAAW5E,EAAA,QAA2B,QAAAlrE,EAAAA,MAAA+qE,CAAA,EAAW,OAAM,GACvD,QAAS/qE,EAAAA,MAAU+qE,CAAA,EAAC,QACpB,UAAW/qE,EAAAA,MAAU+qE,CAAA,EAAC,UACtB,aAAY/qE,EAAAA,MAAU+qE,CAAA,EAAC,UACvB,MAAO/qE,EAAAA,MAAKlS,CAAA,EAAC,MACb,aAAYkS,EAAAA,MAAKlS,CAAA,EAAC,UAClB,QAAS6nC,EAAO,MAChB,QAASwV,EAAc,MACvB,iBAAgBnrC,EAAAA,MAAKlS,CAAA,EAAC,cACtB,iBAAgBkS,EAAAA,MAAKlS,CAAA,EAAC,cACtB,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,YAAWw+E,GAAU,MACrB,YAAab,GAAgB,MAC7B,SAAUzrE,EAAAA,MAAKlS,CAAA,EAAC,aAChB,aAAYkS,QAAO8zB,CAAA,EACnB,kBAAiByuC,EAAa,MAC9B,QAAOpoC,GACP,OAAM40C,GACN,QAAOC,GACP,QAAOp2C,GACP,SAAQ6hC,GACR,YAAYmV,GACZ,6BAAW7O,GAAW,MAAA,GACtB,6BAAWA,GAAW,MAAA,GACtB,OAAIpjC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE9oC,EAAA,MAAU+qE,CAAA,EAAC,OAAM,KAAA,4NAEV/qE,QAAAlS,CAAA,EAAM,qBAAtBqS,EAAA,mBAqCWqsB,WAAA,CAAA,IAAA,GAAA,CApCTjsB,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,CAAA,GAChBgC,EAAAA,WAIOC,uBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAA,qBAC/B,IAA8D,CAA9DkR,cAA8DgB,EAAA,MAAApO,EAAA,EAA9D4O,EAAAA,WAAcR,EAAAA,MAAgD5I,CAAA,EAA1C,SAAQ,CAAE,MAAA,CAAwB,cAAA,KAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,8BAI5D4H,EAAAA,YA4Be8wE,GAAA,CA3Bb,IAAI,MACH,YAAW5E,EAAA,QAAyB,MAAAlrE,EAAAA,MAAAirE,CAAA,EAAS,OAAM,GACnD,QAASjrE,EAAAA,MAAQirE,CAAA,EAAC,QAClB,UAAWjrE,EAAAA,MAAQirE,CAAA,EAAC,UACpB,aAAYjrE,EAAAA,MAAQirE,CAAA,EAAC,UACrB,MAAOjrE,EAAAA,MAAKlS,CAAA,EAAC,MACb,aAAYkS,EAAAA,MAAKlS,CAAA,EAAC,UAClB,QAAS6nC,EAAO,MAChB,QAASwV,EAAc,MACvB,iBAAgBnrC,EAAAA,MAAKlS,CAAA,EAAC,cACtB,iBAAgBkS,EAAAA,MAAKlS,CAAA,EAAC,cACtB,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,YAAW0+E,GAAQ,MACnB,YAAad,GAAc,MAC3B,SAAU1rE,EAAAA,MAAKlS,CAAA,EAAC,aAChB,aAAYkS,QAAO8zB,CAAA,EACnB,kBAAiByuC,EAAa,MAC9B,QAAOpoC,GACP,OAAM40C,GACN,QAAOC,GACP,QAAOp2C,GACP,SAAQ6hC,GACR,YAAYoV,GACZ,6BAAW9O,GAAW,MAAA,GACtB,6BAAWA,GAAW,MAAA,GACtB,OAAIpjC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE9oC,EAAA,MAAQirE,CAAA,EAAC,OAAM,KAAA,kQAKnBjrE,EAAAA,MAAAlS,CAAA,EAAM,SAcFkS,EAAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAAlS,CAAA,EAAM,uBADtCqS,EAAAA,mBAGO,MAAA,OADJ,MAAKC,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,QAAE3B,CAAA,EAAC,IAAG,OAAA,aAAA,EAAyB2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,uDAhB9D8B,qBAaM,MAAA,OAXH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,EAAAA,eAAA,CAAqB,MAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,oBAAgCspC,EAAS,OAAIp3B,EAAAA,MAAKlS,CAAA,EAAC,QAAO,KAAA,OAK3FuS,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAiF,CAAjFkR,EAAA,YAAiFgB,QAAjFpO,EAAA,EAAA4O,aAAcR,QAAmE5I,CAAA,EAA7D,SAAQ,CAAG,KAAM4I,WAAM,QAAUA,QAAK5I,CAAA,EAAC,SAAS,uDAQ1E4H,EAAAA,YAmBakB,EAAAA,WAAA,CAnBA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IASS,CARD+4B,EAAS,qBADjBj3B,EAAAA,mBASS,SAAA,OAPN,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EAC7B,KAAK,SACL,SAAS,KACR,aAAYmtE,GAAA,MAAa,UAAU,MACnC,0CAAY/yC,KAAW,CAAA,MAAA,CAAA,EAAA,GAExBz5B,EAAAA,YAAgDgB,EAAAA,MAAApO,EAAA,EAAhD4O,EAAAA,WAAcR,EAAAA,MAAkC5I,CAAA,EAA5B,MAAK,CAAE,MAAM,OAAA,CAAO,EAAA,KAAA,EAAA,CAAA,UAE1B4I,QAAAlS,CAAA,EAAM,uBAAtBqS,EAAA,mBAOM,MAAA,OAP0B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAC1DW,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,EAAAA,SAAM,aAAeA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,KAC1C,MAAM,mGAKd4H,cAwESgB,EAAAA,MAAAotC,EAAA,EAAA,SAvEH,SAAJ,IAAIpqB,EACH,MAAQ5iB,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,aAAc2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,eAAA,EAAmB2B,WAAG,GAAwB,kBAAA,EAAAA,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,EACjF,QAAS8sC,EAAc,MACvB,GAAInrC,QAAUkjB,EAAA,EACd,WAAYljB,EAAAA,MAAKlS,CAAA,EAAC,eAClB,MAAOkS,EAAA,MAAAlS,CAAA,EAAM,cAAgBkS,QAAUkjB,EAAA,EACvC,wBAAY+qD,GAAa,CAAA,MAAA,CAAA,EACzB,gCAAc7C,EAAW,MAAA,IACzB,gCAAcA,EAAW,MAAA,IACzB,iCAAaA,EAAW,MAAA,IACxB,iCAAaA,EAAW,MAAA,GAAA,qBAEzB,IA0DY,CA1DZpsE,EAAAA,YA0DY+wE,GAAA,CAzDV,IAAI,QACH,KAAM/vE,EAAAA,MAAKlS,CAAA,EAAC,KACZ,cAAakS,EAAAA,MAAU+qE,CAAA,EAAC,UACxB,YAAW/qE,EAAAA,MAAQirE,CAAA,EAAC,UACpB,kBAAiBjrE,EAAAA,MAAU+qE,CAAA,EAAC,UAC5B,gBAAe/qE,EAAAA,MAAQirE,CAAA,EAAC,UACxB,aAAYC,EAAY,MACxB,UAAWlrE,EAAAA,MAAKlS,CAAA,EAAC,UACjB,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,YAAWkS,EAAAA,MAAKlS,CAAA,EAAC,SACjB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,gBAAey+E,GACf,gBAAe9K,GAAc,MAC7B,YAAW6K,GAAU,OAAIE,GAAQ,MACjC,iBAAgBb,EAAY,MAAA,MAAA,QAC5B,OAAQH,GAAY,MACpB,aAAYxrE,EAAAA,MAAKlS,CAAA,EAAC,UAClB,eAAcs9E,EAAW,MACzB,sBAAqBprE,EAAAA,MAAKlS,CAAA,EAAC,mBAC3B,aAAYkS,QAAO8zB,CAAA,EACnB,WAAUy0C,GACV,SAAQ+G,GACR,UAAS12C,GACT,SAAQ6hC,GACR,QAAO0U,GACP,aAAaM,yBAEEljD,EAAAA,OAAO,YAAcvsB,EAAAA,SAAM,MAAM,iBAAa,QAC5D,GAAA2zC,EAAAA,QADmEq8B,IAAW,CAC9E3vE,aAEOC,EAAA,OAAA,aAAAyzC,iBAAAC,qBAFyBg8B,EAAW,CAAA,EAA3C,IAEO,CADLhxE,cAA4EgB,EAAAA,MAAAb,EAAA,EAAA,CAAjE,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,WAAa,KAAMkiF,oDAGxCzjD,EAAAA,OAAO,WAAavsB,EAAAA,SAAM,MAAM,gBAAY,OAC1D,GAAA2zC,EAAAA,QADgEs8B,IAAU,CAC1E5vE,aAEOC,EAAA,OAAA,YAAAyzC,iBAAAC,qBAFwBi8B,EAAU,CAAA,EAAzC,IAEO,CADLjxE,cAA0EgB,EAAAA,MAAAb,EAAA,EAAA,CAA/D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,UAAY,KAAMmiF,oDAGvC1jD,EAAAA,OAAO,YAAcvsB,EAAAA,SAAM,MAAM,iBAAa,QAC5D,GAAA2zC,EAAAA,QADmEu8B,IAAW,CAC9E7vE,aAEOC,EAAA,OAAA,aAAAyzC,iBAAAC,qBAFyBk8B,EAAW,CAAA,EAA3C,IAEO,CADLlxE,cAA4EgB,EAAAA,MAAAb,EAAA,EAAA,CAAjE,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,WAAa,KAAMoiF,oDAGxC3jD,EAAAA,OAAO,WAAavsB,EAAAA,SAAM,MAAM,gBAAY,OAC1D,GAAA2zC,EAAAA,QADgE62B,IAAU,CAC1EnqE,aAEOC,EAAA,OAAA,YAAAyzC,iBAAAC,qBAFwBw2B,EAAU,CAAA,EAAzC,IAEO,CADLxrE,cAA0EgB,EAAAA,MAAAb,EAAA,EAAA,CAA/D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,UAAY,KAAM08E,oDAGvCj+C,EAAAA,OAAO,WAAavsB,EAAAA,SAAM,MAAM,gBAAY,OAC1D,GAAA2zC,EAAAA,QADgEw8B,IAAU,CAC1E9vE,aAEOC,EAAA,OAAA,YAAAyzC,iBAAAC,qBAFwBm8B,EAAU,CAAA,EAAzC,IAEO,CADLnxE,cAA0EgB,EAAAA,MAAAb,EAAA,EAAA,CAA/D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,UAAY,KAAMqiF,gaC94ClDC,GAAen1E,GAAW,CACrC,SAAUJ,EACV,aAAc,OAId,QAASA,EACT,OAAQA,EACR,OAAQ,CAAC,OAAQ,MAAM,CACzB,CAAC,0ECLK,MAAA/M,EAAQiM,GAAS,UADRsF,EAC2B,CACxC,SAAU,GACV,aAAc,CACZ,QAAS,SACT,aAAoB,CAAC,SAAU,OAAQ,OAAO,EAAE,SAAS3oB,CAAK,CAChE,EACA,QAAS,GACT,OAAQ,GACR,OAAQ,IAAA,CACT,EAEKsb,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,SAAS,EAE5Bs3E,EAAUlhF,EAAS,SAAA,IAAM,CAAC,CAAC6C,EAAM,OAAO,EACxCN,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAGvQ,EAAM,SAAW,WAAa,YAAY,EAChD,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG,CAACvQ,EAAM,UAAYA,EAAM,QAC7C,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAG,CAACvQ,EAAM,UAAYuiF,EAAQ,MACjD,CAAChyE,EAAG,GAAG,aAAavQ,EAAM,YAAY,EAAE,CAAC,EACvC,CAACA,EAAM,UAAYuiF,EAAQ,OAASviF,EAAM,eAAiB,QAAA,CAEjE,CACD,EACK0X,EAASrW,EAAAA,SAAS,IAAM9G,GAAUyF,EAAM,MAAM,CAAC,EAC/C2Q,EAAQtP,EAAAA,SAAS,IAChBqW,EAAO,MAEL1X,EAAM,SACT,CACA,YAAa0X,EAAO,MACpB,WAAYA,EAAO,KAAA,EAEnB,CACA,UAAWA,EAAO,MAClB,aAAcA,EAAO,KACvB,EAVwB,CAAC,CAW5B,8BAICrF,EAAA,mBAIM,MAAA,CAJA,uBAAOzO,EAAS,KAAA,EAAE,KAAK,YAAa,uBAAO+M,EAAK,KAAA,CAAA,IACvCuB,EAAK,MAAAlS,CAAA,EAAC,UAAYuiF,EAAO,qBAAtClwE,EAAA,mBAEO,OAAA,OAFkC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACnDgC,aAAaC,EAAA,OAAA,SAAA,2CC7CNgwE,GAAcr1E,GAAW,CACpC,OAAQiB,GAAmB,EAC3B,SAAUpB,GACV,OAAQD,EACR,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,CAAC,OAAQ,MAAM,EACvB,UAAW,OACX,MAAO,OACP,SAAUA,EACV,MAAOA,EACP,UAAWA,EACX,YAAagB,GACb,SAAUhB,EACV,cAAe,SACf,UAAWA,EACX,WAAYA,EACZ,OAAQA,EACR,YAAa,OACb,WAAY,OACZ,QAASA,EACT,YAAa,OACb,aAAc,OACd,WAAY,OACZ,YAAa,OACb,WAAYQ,GACZ,UAAWR,EACX,WAAYA,EACZ,MAAO,OACP,SAAUmB,EAAqC,EAC/C,QAASA,EAAU,EACnB,OAAQA,EAAU,EAClB,OAAQA,EAAU,EAClB,cAAeA,EAA6D,EAC5E,aAAcA,EAA6D,EAC3E,YAAaA,EAA6D,EAC1E,UAAWA,EAAU,EACrB,SAAUA,EAAU,CACtB,CAAC,EChCYu0E,GAAmB,OAAO,OAA0B,CAAC,MAAO,QAAS,SAAU,MAAM,CAAC,6LCO7F,MAAAziF,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,OAAQ,KACR,SAAU,GACV,OAAQ,CACN,QAAS,GACT,OAAQ,EACV,EACA,MAAO,CACL,QAAS,IACT,UAAW3oB,GAAS,OAAOA,GAAU,UAAYA,EAAQ,CAC3D,EACA,OAAQ,CACN,QAAS,IACT,UAAWA,GAAS,OAAOA,GAAU,UAAYA,EAAQ,CAC3D,EACA,UAAW,CACT,QAAS,QACT,UAAWA,GAAS65F,GAAiB,SAAS75F,CAAK,CACrD,EACA,MAAO,GACP,SAAU,GACV,MAAO,GACP,UAAW,GACX,YAAa,KACb,SAAU,GACV,cAAe,CACb,QAAS,KACT,OAAQ,EACV,EACA,UAAW,GACX,WAAY,GACZ,OAAQ,GACR,YAAa,KACb,aAAc,KACd,WAAY,KACZ,YAAa,KACb,QAAS,GACT,YAAa,UACb,WAAY,UACZ,WAAY8kB,GAAe,OAAO,EAClC,UAAW,GACX,WAAY,GACZ,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsxB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,QAAQ,EAC3B3B,EAAQU,GAAS,EACjB1H,EAASI,GAAU,SAAU07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAEnDyR,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAChC+sE,EAAer7D,EAAAA,IAAI1R,EAAM,KAAK,EAC9B8sE,EAAgBp7D,EAAAA,IAAI1R,EAAM,MAAM,EAEhCiX,EAAUvF,EAAAA,IAAiB,EAE3B,CAAE,OAAQw6D,EAAS,OAAQC,CAAA,EAAa7xD,GAAU,CACtD,QAAS,CAAClE,EAAOld,IAAU,CACrB,GAAA,CAAC8G,EAAM,WAAa9G,EAAM,OAAS,GAAK,CAAC+d,EAAQ,MAC5C,MAAA,GAGT,MAAMkH,EAAQ,GAAG4uD,EAAa,KAAK,GAAG,SAAS,GAAG,EAC9C91D,EAAQ,MAAM,YACdtlB,GAASo7E,EAAa,KAAK,EACzB3uD,EAAS,GAAG0uD,EAAc,KAAK,GAAG,SAAS,GAAG,EAChD71D,EAAQ,MAAM,aACdtlB,GAASm7E,EAAc,KAAK,EAEhC12D,EAAM,OAAS+H,EACf/H,EAAM,OAASgI,EAEfjQ,EAAUnO,EAAM,cAAe,CAAE,MAAAme,EAAO,OAAAC,EAAQ,CAClD,EACA,OAAQ,CAAChI,EAAOld,IAAU,CAClB,MAAAsiB,EAAStiB,EAAM,QAAUkd,EAAM,QAC/BqF,EAASviB,EAAM,QAAUkd,EAAM,QAEjC,IAAA+H,EAAQxsB,GAASo7E,EAAa,KAAK,EACnC3uD,EAASzsB,GAASm7E,EAAc,KAAK,EAEzC,OAAQ9sE,EAAM,UAAW,CACvB,IAAK,MAAO,CACVoe,EAAShI,EAAM,OAASqF,EACxB,KAAA,CAEF,IAAK,QAAS,CACZ0C,EAAQ/H,EAAM,OAASoF,EACvB,KAAA,CAEF,IAAK,SAAU,CACb4C,EAAShI,EAAM,OAASqF,EACxB,KAAA,CAEF,QACE0C,EAAQ/H,EAAM,OAASoF,CACzB,CAGFuxD,EAAa,MAAQ,KAAK,IAAI5uD,EAAO,GAAG,EACxC2uD,EAAc,MAAQ,KAAK,IAAI1uD,EAAQ,GAAG,EAE1CjQ,EAAUnO,EAAM,aAAc,CAC5B,MAAOrO,GAASo7E,EAAa,KAAK,EAClC,OAAQp7E,GAASm7E,EAAc,KAAK,CAAA,CACrC,CACH,EACA,MAAO,IAAM,CACX3+D,EAAUnO,EAAM,YAAa,CAC3B,MAAOrO,GAASo7E,EAAa,KAAK,EAClC,OAAQp7E,GAASm7E,EAAc,KAAK,CAAA,CACrC,CAAA,CACH,CACD,EAEKlpE,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAGvQ,EAAM,MACxB,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,UAC5B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAAA,CAEhC,CACD,EACK0iF,EAAiBrhF,EAAAA,SAAS,IACvBkP,EAAG,GAAG,QAAQvQ,EAAM,SAAS,EAAE,CACvC,EACK6oC,EAAexnC,EAAAA,SAAS,IACrB,CACLkP,EAAG,GAAG,SAAS,EACfA,EAAG,IAAI,UAAWvQ,EAAM,SAAS,EACjC,CACE,CAACuQ,EAAG,IAAI,UAAW,WAAW,CAAC,EAAGvQ,EAAM,SACxC,CAACuQ,EAAG,IAAI,UAAW,UAAU,CAAC,EAAG47D,EAAS,KAC5C,EACAnsE,EAAM,WACR,CACD,EACKssE,EAAejrE,EAAAA,SAAS,IAAM,CAClC,MAAM+a,EAAYpc,EAAM,UAEpB,GAAAoc,IAAc,OAASA,IAAc,SAAU,CACjD,MAAMgC,EAAS0uD,EAAc,MAEtB,MAAA,CACL,OAAQ,GAAG1uD,CAAM,GAAG,SAAS,GAAG,EAAIA,EAAS,GAAGA,CAAM,IACxD,CAAA,CAGF,MAAMD,EAAQ4uD,EAAa,MAEpB,MAAA,CACL,MAAO,GAAG5uD,CAAK,GAAG,SAAS,GAAG,EAAIA,EAAQ,GAAGA,CAAK,IACpD,CAAA,CACD,EACK4e,EAAW17B,EAAAA,SAAS,IACjB,CAAC,EAAE6C,EAAM,QAAUA,EAAM,OAASlE,EAAM,OAASA,EAAM,MAAM,QAAUA,EAAM,MAAM,MAC3F,EACKwsE,EAAUlhE,GAAM,EAChB86D,EAAS96D,GAAM,EAErBsB,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP6oB,EAAc,MAAQ7oB,CAAA,CAE1B,EACAgkB,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPmkF,EAAa,MAAQnkF,CAAA,CAEzB,EACAgkB,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACPkkF,EAAc,MAAQlkF,CAAA,CAE1B,EAEakpB,EAAA,CACX,SAAAq6D,EACA,QAAAK,EACA,OAAApG,EACA,QAAAnvD,EACA,QAAAi1D,EACA,cAAA3D,EACA,aAAAoE,EACA,YAAArvC,CAAA,CACD,EAED,MAAMyW,EAAaC,EAAA,gBACjBlnC,WAAS,CACP,SAAAq/D,EACA,cAAA5D,EACA,aAAAoE,EACA,YAAArvC,CACD,CAAA,CACH,EAEA,SAASsvC,EAAU1uC,EAAiB,CAC9BzsB,EAAc,QAAUysB,IAE5BzsB,EAAc,MAAQysB,EAEtBc,EAAK,gBAAiBd,CAAM,EAClB/vB,EAAAnO,EAAM,SAAUk+B,CAAM,EAAA,CAGnB,eAAAZ,EAAY6vC,EAAY,GAAO,CAC5C,IAAI75E,EAAkB,GAElB,OAAA,OAAO0M,EAAM,eAAkB,aACxB1M,EAAA0M,EAAM,cAAcmtE,CAAS,EAElC7jF,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,IAIfA,IAAW,IACbggB,EAAAA,SAAS,IAAM,CACbs5D,EAAU,EAAK,EACfz+D,EAAUnO,EAAM,OAAO,CAAA,CACxB,EAGI1M,CAAA,CAGT,SAAS85E,GAAkB,CACzB,GAAIptE,EAAM,UACR,OAAOs9B,EAAY,CACrB,CAGF,SAASvrB,GAAa,CACpB5D,EAAUnO,EAAM,MAAM,CAAA,CAGxB,SAASgS,GAAa,CACpB7D,EAAUnO,EAAM,MAAM,CAAA,CAGxB,SAASuoE,GAAgB,CACvBjrC,EAAY,EAAI,EAChBnvB,EAAUnO,EAAM,SAAS,CAAA,CAG3B,SAAS2sE,GAAe,CACtBrvC,EAAY,EAAK,EACjBnvB,EAAUnO,EAAM,QAAQ,CAAA,6BAKxBmS,EAAAA,YAyGSD,EAAA,MAAAq7D,EAAA,EAAA,CAxGC,OAAQ97D,EAAa,uCAAbA,EAAa,MAAAupC,GAC5B,QAAS9oC,EAAAA,MAAKlS,CAAA,EAAC,QACf,uBAAO4D,EAAS,KAAA,EAChB,MAAOsO,EAAAA,MAAKlS,CAAA,EAAC,MACb,kBAAiB0iF,EAAc,MAC/B,SAAUxwE,EAAAA,MAAKlS,CAAA,EAAC,UAChB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,kBAAiBotE,EACjB,SAAUl7D,EAAAA,MAAKlS,CAAA,EAAC,SAChB,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,OAAM+R,EACN,OAAMC,CAAA,GAEI,QAAO6zC,EAAA,QAChB,CAuFU,CAxFU,KAAAlN,KAAI,kBACxBlmC,qBAuFU,UAAA,SArFJ,UAAJ,IAAIwE,EACH,uBAAO4xB,EAAY,KAAA,EACnB,uBAAOyjC,EAAY,KAAA,EACpB,KAAK,SACJ,aAAY3zB,EAAI,OAAY,OAC5B,kBAAiBzmC,QAAOs6D,CAAA,EACxB,mBAAkBt6D,QAAMk0D,CAAA,CAAA,GAEdrpC,EAAQ,qBAAnB1qB,EAAAA,mBA4BM,MAAA,OA5BgB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAChCgC,aA0BOC,EAAA,OAAA,SAAAyzC,EAAAA,eAAAC,EA1BqB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAtC,IA0BO,CAzBL7iC,cAwBWgB,EAAAA,MAAAb,EAAA,EAAA,CAxBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMkS,QAAU6hC,CAAA,CAAA,qBACxD,IAMM,CANNthC,EAAAA,mBAMM,MAAA,CANA,GAAIP,QAAOs6D,CAAA,EAAG,MAAKl6D,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAC9BgC,aAIOC,EAAA,OAAA,QAAAyzC,EAAAA,eAAAC,EAJoB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAArC,IAIO,CAHL7iC,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMkS,QAAU6hC,CAAA,CAAA,qBACvD,IAAiB,CAAdphC,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,KAAK,EAAA,CAAA,CAAA,yCAKZkS,QAAAlS,CAAA,EAAM,wBADdqS,qBAeS,SAAA,OAbP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,uBAAO+sB,EAAW,EAAA,GAEnB/qB,aAQOC,EAAA,OAAA,QAAAyzC,EAAAA,eAAAC,EARoB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAArC,IAQO,CAPL7iC,cAMWgB,EAAAA,MAAAb,EAAA,EAAA,CANA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMkS,QAAU6hC,CAAA,CAAA,qBACvD,IAIQ,CAJR7iC,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,MAAK,CAClB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,MAAM,OAAK,GAAA,IAC3B,MAAM,+JAQpBmJ,EAAAA,mBAIM,MAAA,CAJA,GAAIP,QAAMk0D,CAAA,EAAG,MAAK9zD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAC7BgC,aAEOC,EAAA,OAAA,UAAAyzC,EAAAA,eAAAC,EAFO,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAxB,IAEO,CADL7iC,cAAwEgB,EAAAA,MAAAb,EAAA,EAAA,CAA7D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAMkS,QAAU6hC,CAAA,yCAGpD7hC,EAAAA,MAAKlS,CAAA,EAAC,QAAUkE,EAAM,QAAUgO,EAAA,MAAKlS,CAAA,EAAC,MAAM,sBAAvDqS,EAAAA,mBA2BM,MAAA,OA3B0D,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAC1EgC,aAyBOC,EAAA,OAAA,SAAAyzC,EAAAA,eAAAC,EAzBqB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAtC,IAyBO,CAxBL7iC,cAuBWgB,EAAAA,MAAAb,EAAA,EAAA,CAvBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMkS,QAAU6hC,CAAA,CAAA,qBACxD,IAUS,CAVT7iC,EAAAA,YAUSgB,EAAA,UAVTQ,aAUS,CATN,OAAQR,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,QAAA,CAAA,EAChC,QAAA,GACA,KAAA,GACC,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,WACZ,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,UAAA,EACLkS,EAAAA,MAAAlS,CAAA,EAAM,YACb,CAAA,QAAO2sE,CAAY,CAAA,EAAA,mBAEpB,IAAuC,CAApCh6D,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,YAAckS,EAAAA,MAAA5P,CAAA,EAAO,MAAM,EAAA,CAAA,CAAA,oCAEtC4O,EAAAA,YAUSgB,EAAA,UAVTQ,aAUS,CATN,OAAQR,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,SAAA,CAAA,EAChC,QAAA,GACC,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,YACZ,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,WACZ,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,OAAA,EACRkS,EAAAA,MAAAlS,CAAA,EAAM,aACb,CAAA,QAAOuoE,CAAa,CAAA,EAAA,mBAErB,IAAyC,CAAtC51D,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAAA,MAAA5P,CAAA,EAAO,OAAO,EAAA,CAAA,CAAA,+GAMtC4P,QAAAlS,CAAA,EAAM,yBADdqS,qBAcM,MAAA,eAZA,UAAJ,IAAI65D,EACH,MAAK55D,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,EAAyB2B,EAAA,MAAA3B,CAAA,EAAG,IAAe,UAAA2B,QAAAlS,CAAA,EAAM,SAAS,IAAgCkS,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,UAAA,CAAA,EAA0B2B,EAAAA,MAAQi6D,CAAA,CAAA,MAQ7J55D,aAEOC,EAAA,OAAA,UAAAyzC,EAAAA,eAAAC,EAFsB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAvC,IAEO,CADL7iC,cAAwEgB,EAAAA,MAAAb,EAAA,EAAA,CAA7D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAMkS,QAAU6hC,CAAA,oFAnFvD4E,CAAI,sIC3SPgqC,GAAgBx1E,GAAW,CACtC,UAAW,OACX,SAAUH,GACV,QAASD,EACT,eAAgB,OAChB,aAAc,OACd,SAAUgB,GACV,SAAU,OACV,YAAa,CAAC,OAAQ,MAAM,EAC5B,YAAahB,EACb,SAAU,CACR,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,MAAO,MACT,CAAC,uFCRK,MAAAwD,EAAKtF,GAAc,UAAU,EAG7BjL,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,UAAW,CACT,QAAS,MACT,UAAW3oB,GAASisC,GAAmB,SAASjsC,CAAK,CACvD,EACA,SAAU,OACV,QAAS,GACT,eAAgB,IAAM2nB,EAAG,GAAG,MAAM,EAClC,aAAc,CACZ,QAAS,OACT,UAAoB3nB,GAAA,CAAC,QAAS,MAAM,EAAE,SAASA,CAAK,CACtD,EACA,SAAU,KACV,SAAU,KACV,YAAa,IACb,YAAa,GACb,SAAU,GACV,MAAO,KAAO,CAAC,EAAA,CAChB,EAIKw0D,EAAar7C,GAAc,EAC3B26C,EAAUhrC,MAAI,EAAK,EACnBkjB,EAAUljB,MAAI,EAAE,EAEhB,CAAE,MAAA/V,CAAM,EAAI66B,GAAc,EAE1Bvf,EAAUvF,EAAAA,IAAiB,EAE3B9N,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,QAC7B,EACD,EACK4iF,EAAgBvhF,EAAAA,SAAS,IACtBrB,EAAM,SAAW,EAAI,CAAE,qBAAsBA,EAAM,UAAa,EACxE,EACK88C,EAAWz7C,EAAAA,SAAS,KACjB,CACL,SACE,OAAOrB,EAAM,aAAgB,SACzB,WAAWA,EAAM,WAAW,GAAKA,EAAM,YACvC,GAAGA,EAAM,WAAW,IAC5B,EACD,EAEY8R,EAAA,CACX,QAAA4qC,EACA,QAAAzlC,CAAA,CACD,EAED,SAASinC,GAAqB,CAC5B,aAAaviD,EAAM,KAAK,EAEpB,CAAAqE,EAAM,cAEJrE,EAAA,MAAQ,WAAW,IAAM,CAC7B,GAAI,CAACsb,EAAQ,OAAS,CAACA,EAAQ,MAAM,WAAW,OAAQ,CACtDylC,EAAQ,MAAQ,GAChB,MAAA,CAKE,GAAA18C,EAAM,SAAW,EAAG,CAChB,MAAAi8B,EAAehlB,EAAQ,MAAM,aAC7BmjB,EAAenjB,EAAQ,MAAM,aAEnCylC,EAAQ,MAAQzgB,EAAe7B,CAAA,MAEvBsiB,EAAA,MAAQtiD,GAAc6c,EAAQ,KAAK,EAAIA,EAAQ,MAAM,wBAAwB,MAGvF2d,EAAQ,MAAQ8nB,EAAQ,MAASzlC,EAAQ,MAAM,aAAe,GAAM,EAAA,EACnEmmC,EAAW,KAAK,EAAA,CAGrB,SAASe,GAAqB,CAC5B,aAAaxiD,EAAM,KAAK,EAEpB,CAAAqE,EAAM,cAEJrE,EAAA,MAAQ,WAAW,IAAM,CAC7B+gD,EAAQ,MAAQ,EAAA,EACfU,EAAW,KAAK,EAAA,6BAKnBjrC,EAAAA,YAkCUD,EAAA,MAAA6zC,EAAA,EAAA,CAjCP,QAASrJ,EAAO,MACjB,QAAQ,SACP,SAAUxqC,EAAAA,MAAKlS,CAAA,EAAC,YAChB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,WAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAChB,kBAAiBkS,EAAAA,MAAKlS,CAAA,EAAC,eACvB,YAAWkS,EAAAA,MAAKlS,CAAA,EAAC,SACjB,YAAW88C,EAAQ,MACnB,QAAS5qC,EAAA,MAAKlS,CAAA,EAAC,eAAY,OAC3B,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,SACb,WAAWk+C,EACX,WAAWC,CAAA,GAED,kBACT,IAWM,CAXN1rC,EAAA,mBAWM,MAXNC,aAWM,SAVA,UAAJ,IAAIuE,CAAA,EACIi0D,EAAM,OAAA,CACb,MAAOtnE,EAAS,MAChB,MAAOg/E,EAAa,MACpB,aAAY1kC,EACZ,aAAYC,CAAA,IAEb5rC,EAAAA,WAEOC,sBAFP,IAEO,CADLtB,cAAqDgB,EAAAA,MAAAb,EAAA,EAAA,CAA1C,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,kDAIvC,IAIO,CAJPuS,aAIOC,EAJe,OAAA,UAAA,CAAA,QAASoiB,EAAA,OAA/B,IAIO,CAHL1jB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,cAAQ40B,EAAO,KAAA,CAAA,qBACxD,IAAa,qCAAVA,EAAO,KAAA,EAAA,CAAA,CAAA,8SCtGZ,MAAArkB,EAAKtF,GAAc,MAAM,EAEzBjL,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,OAAQ,KACR,MAAO,CACL,QAAS,GACT,OAAQ,EACV,EACA,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,MAAO,IAAM,CAAC,EACd,WAAY,KACZ,SAAU,GACV,QAAS,CACP,QAAS,KACT,OAAQ,EACV,EACA,gBAAiB,IAAMhB,EAAG,GAAG,MAAM,EACnC,aAAc,CACZ,QAAS,KACT,OAAQ,EACV,EACA,aAAc,GACd,YAAa,KACb,aAAc,KACd,UAAW,KACX,OAAQ,GACR,KAAM,GACN,KAAM,GACN,OAAQ,GACR,KAAM,GACN,OAAQ,KACR,KAAM,KACN,KAAM,KACN,MAAO,KACP,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,IAAK,KACL,KAAM,IAAA,CACP,EAEKrM,EAAQsN,EAAAA,SAAA,EAER0vB,EAAYr/B,EAAAA,OAAOy/B,GAAY,EAAE,EACjCuhD,EAAchhF,EAAAA,OAAO2/B,GAAc,IAAI,EACvCshD,EAAajhF,EAAAA,OAAO0/B,GAAa,IAAI,EACrCiS,EAAU/4C,GAAmB,EAE7B6H,EAASI,GAAU,OAAQ07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACjDsJ,EAAQU,GAAS,EACjB9G,EAAYN,GAAa,EAEzBglC,EAAYl2B,EAAAA,IAAI1R,EAAM,YAAY,EAClC+iF,EAAUrxE,MAAI,EAAK,EACnBsxE,EAAWtxE,MAAI,EAAE,EACjBuxE,EAAavxE,MAAI,EAAK,EACtBwxE,EAAmBxxE,MAAI,EAAK,EAC5BmwB,EAAanwB,MAAI,CAAC,EAElByxE,EAAoBnvC,EAAA,gBACxBlnC,WAAS,CACP,QAAAi2E,CACD,CAAA,CACH,EAEMp8C,EAActyB,GAAW,IAAM,CAC/BsyB,EAAY,QACH9E,EAAA,MAAQ8E,EAAY,MAAM,YACvC,CACD,EAEKX,EAAU16B,GAAM,EAChB83E,EAAa/hF,EAAAA,SAAS,IAAM6/B,EAAU,aAAelhC,EAAM,QAAQ,EACnEqjF,EAAchiF,EAAAA,SAAS,IACpB4B,GAAa,GAAGjD,EAAM,OAASA,EAAM,IAAI,IAAIsC,EAAO,MAAM,WAAW,GAAIY,EAAU,KAAK,CAChG,EACKogF,EAAWjiF,EAAAA,SAAS,IAAM,CAC9B,GAAI,CAACrB,EAAM,KAAM,MAAO,CAAC,EAEzB,MAAMujF,EAAuBH,EAAW,MACpC,CAAC,CAAE,SAAUA,EAAW,MAAO,QAASC,EAAY,KAAM,CAAC,EAC3D,CAAC,EACCG,EAAY,MAAM,QAAQxjF,EAAM,KAAK,EAAIA,EAAM,MAAQ,CAACA,EAAM,KAAK,EAEzE,IAAIyjF,EAAoB,CAAC,EAEzB,OAAIviD,EAAU,QACZuiD,EAAa7gD,GAAe1B,EAAU,MAAOlhC,EAAM,IAAI,GAAgB,CAAC,GAG1EyjF,EAAY,MAAM,QAAQA,CAAS,EAAIA,EAAY,CAACA,CAAS,EAEtDF,EAAa,OAAOE,EAAWD,CAAS,CAAA,CAChD,EACK17C,EAAezmC,WAASqL,EAAQ,EAChCg3E,EAAgBriF,EAAAA,SAAS,IACtBpY,GAAO+W,EAAM,WAAW,EAAKkhC,EAAU,aAAe,GAASlhC,EAAM,WAC7E,EACK2jF,EAActiF,EAAAA,SAAS,IAAM,CACjC,GAAIrB,EAAM,eAAiB,IAAQkhC,EAAU,aACpC,MAAA,GAGE,UAAAoD,KAAQg/C,EAAS,MACtB,GAAAh/C,EAAK,SAAiB,MAAA,GAG5B,OAAO8+C,EAAW,KAAA,CACnB,EACKQ,EAAYviF,WAAS,IAAMrB,EAAM,QAAUA,EAAM,YAAc,IAAQkhC,EAAU,SAAS,EAC1Fy8B,EAAWt8D,EAAAA,SAAS,IAAM,EAAEuiF,EAAU,OAAS,EAAE5jF,EAAM,OAASkE,EAAM,OAAO,EAC7E2/E,EAAaxiF,EAAAA,SAAS,IAAM6/B,EAAU,UAAU,EAChD4iD,EAAqBziF,EAAAA,SAAS,IAC9BwiF,EAAW,MACN9hD,EACL8hD,EAAW,QAAU,OAEjBD,EAAU,MADV,EAGE5jF,EAAM,YAAckhC,EAAU,YAAc,EACpD,EAGKa,EAAc6hD,EAAU,MAAQ,EAAI5jF,EAAM,YAAc,EAAE,CAClE,EACK4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,IAAI,OAAQ,SAAS,CAAC,EAAGuyE,GAAc9iF,EAAM,QACjD,CAACuQ,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAG,CAAC2wB,EAAU,cAAgByiD,EAAY,MACrE,CAACpzE,EAAG,IAAI,OAAQ,OAAO,CAAC,EAAGwyE,EAAQ,MACnC,CAACxyE,EAAG,IAAI,OAAQ,QAAQ,CAAC,EAAGvQ,EAAM,OAClC,CAACuQ,EAAG,IAAI,OAAQ,SAAS,CAAC,EAAG2wB,EAAU,QAAU2iD,EAAW,QAAU,OAAS,CAAClmB,EAAS,KAC3F,EACD,EACKomB,EAAe1iF,EAAAA,SAAS,KACrB,CACL,MAAOwiF,EAAW,QAAU,MAAQ,OAAY,eAAeC,EAAmB,KAAK,MACvF,WACEnmB,EAAS,OAASkmB,EAAW,QAAU,MAAQ,OAAY,GAAGC,EAAmB,KAAK,IAC1F,EACD,EACK9+B,EAAa3jD,EAAAA,SAAS,IAAM,CAChC,MAAMzY,EAAQk/C,EAAa,MAE3B,OAAI,MAAM,QAAQl/C,CAAK,GAAKS,GAAST,CAAK,EACjC,KAAK,UAAUA,CAAK,EAGtBA,CAAA,CACR,EACKq4C,EAAa5/B,EAAAA,SAAS,KACnB,CAAE,QAASrB,EAAM,OAAS,SAAW,QAAS,MAAO,QAAS,EACtE,EACKgkF,EAAoB3iF,EAAA,SACxB,IAAM,CAAC,EAAE6/B,EAAU,YAAcA,EAAU,aAAe,SAAWlhC,EAAM,WAAa,CAC1F,EAEMikF,OAAgB,IAEhBC,GAAc,OAAO,OAAO,CAChC,KAAM7iF,EAAA,SAAS,IAAMrB,EAAM,IAAI,EAC/B,MAAOqB,EAAA,SAAS,IAAMrB,EAAM,IAAI,EAChC,QAAAgmC,EACA,MAAO3kC,EAAyB,SAAA,IAAO0hF,EAAQ,MAAQ,QAAU,SAAU,EAC3E,SAAU1hF,EAAAA,SAAS,IAAM,CAAC,CAAC6/B,EAAU,QAAQ,EAC7C,QAAS7/B,EAAAA,SAAS,IAAM,CAAC,CAAC6/B,EAAU,OAAO,EAC3C,KAAM7/B,EAAAA,SAAS,IAAM6/B,EAAU,MAAQ,SAAS,EAChD,QAAAsS,EACA,WAAA3R,EAAA,SACAG,GACA,WAAAG,GACA,MAAAziB,GACA,SAAAhT,GACA,SAAA49B,GACA,KAAOzQ,GAAkB,CACnBoqD,GAAU,MACZ,QAAQ,KAAK,qEAAqE,EAGpFA,GAAU,IAAIpqD,CAAQ,CACxB,EACA,OAASA,GAAkB,CACzBoqD,GAAU,OAAOpqD,CAAQ,CAAA,CAC3B,CACD,EAED/3B,EAAAA,QAAQ2/B,GAAezhC,EAAM,OAAS,KAAOkkF,EAAW,EAExDt3E,EAAA,MACE,IAAM5M,EAAM,aACHpX,GAAA,CACPg/C,EAAU,MAAQh/C,CAAA,CAEtB,EAEA6rB,EAAAA,UAAU,IAAM,CACd,MAAM7rB,EAAQk/C,EAAa,MAEvB7+C,GAAO2+C,EAAU,KAAK,IACdA,EAAA,MAAQ,MAAM,QAAQh/C,CAAK,EAAI,MAAM,KAAKA,CAAK,EAAIA,GAG3Dk6F,GACFA,EAAW,IAAIoB,EAAW,CAC5B,CACD,EAEDtvE,EAAAA,gBAAgB,IAAM,CAChBkuE,GACFA,EAAW,OAAOoB,EAAW,CAC/B,CACD,EAEDpyE,EAAa,CAAE,QAAAixE,EAAS,WAAA/9B,EAAY,mBAAA8+B,CAAA,CAAoB,EAExD,SAAS/hD,EAAc5jB,EAAwB,CAC7C,OAAOA,IAAU,QAAS0kE,GAAA,YAAAA,EAAa,kBAAmB,GAAK1kE,CAAA,CAGjE,IAAIy1B,GAAc,GAET,SAAAlnC,GAASF,EAAwBo7B,EAAU,MAAO,CACzD,GAAI,CAAC1G,EAAU,OAAS,CAAClhC,EAAM,KAAa,OAAAwM,EAExC,GAAA,CACF,MAAM5jB,EAAQg6C,GAAe1B,EAAU,MAAOlhC,EAAM,KAAM,EAAI,EAChD,OAAA4zC,GAAA,GAEPhrD,OACG,CACV,OAAKgrD,KACH9Q,GAAe5B,EAAU,MAAOlhC,EAAM,KAAMwM,EAAc,EAAK,EACjDonC,GAAA,IAGTpnC,CAAA,CACT,CAGO,SAAA89B,GAAS1hD,EAAgB8I,EAAS,GAAO,CAChD,GAAI,GAACwvC,EAAU,OAAS,CAAClhC,EAAM,MAE3B,GAAA,CACF,OAAO8iC,GAAe5B,EAAU,MAAOlhC,EAAM,KAAMpX,EAAO8I,CAAM,OACtD,CAAA,CAAC,CAGf,SAASswC,IAAW,CAClB,OAAOmiD,GAAe,CAAA,CAGxB,SAAShiD,IAAa,CACpB4gD,EAAQ,MAAQ,GAChBC,EAAS,MAAQ,EAAA,CAGnB,SAAStjE,IAAQ,CAGf,GAFWyiB,GAAA,EAEP,CAACjB,EAAU,OAAS,CAAClhC,EAAM,KAAa,MAAA,GAE5C,MAAMpX,EAAQk/C,EAAa,MAEvB,IAAAs8C,EAEA,OAAA,MAAM,QAAQx7F,CAAK,EACRw7F,EAAA,MAAM,QAAQx8C,EAAU,KAAK,EAAI,MAAM,KAAKA,EAAU,KAAK,EAAI,CAAC,EAE7Ew8C,EAAa76F,GAAWq+C,EAAU,KAAK,EAAIA,EAAU,MAAA,EAAUA,EAAU,MAGpE9E,GAAe5B,EAAU,MAAOlhC,EAAM,KAAMokF,EAAY,EAAI,CAAA,CAGrE,eAAeD,IAAiB,CAC9B,GAAIjB,EAAiB,MACnB,OAAAA,EAAiB,MAAQ,GAElBmB,EAAkB,IAAI,EAG/B,GAAI,CAACrkF,EAAM,MAAQ,CAACkhC,EAAU,OAAS+hD,EAAW,MAChD,OAAOoB,EAAkB,IAAI,EAG/BpB,EAAW,MAAQ,GAEnB,MAAMr6F,EAAQk/C,EAAa,MACrBw8C,EAAWhB,EAAS,MACpBn/C,EAAQjD,EAAU,MAExB,IAAIwB,EAA0B,MAAM6hD,GAClCD,EACA17F,EACAu7C,EACAu/C,EAAc,MACdphF,EAAO,MAAM,YACf,EAES,OAAAogC,EAAAA,EAAO,OAASA,EAAS,KAE3B2hD,EAAkB3hD,CAAM,CAAA,CAGjC,SAAS2hD,EAAkB3hD,EAAyB,CAClD,OAAAugD,EAAW,MAAQ,GAEdvgD,GAGHqgD,EAAQ,MAAQ,GAChBC,EAAS,MAAQ,MAAM,QAAQtgD,CAAM,EAAIA,EAAO,CAAC,EAAIA,GAH1CP,GAAA,EAMNO,CAAA,CAGT,SAAS8hD,GAAmB,CAC1BhxC,EAAQ,KAAK,OAAO,CAAA,CAGhB,MAAAixC,EAAWpjF,WAAS,IAAM,CAAC,EAAE6/B,EAAU,QAAUA,EAAU,OAAO,eAI1DhvB,EAAA,MAAAlS,CAAA,EAAM,KAAlBuS,aAA0DC,yDAA1BN,EAAAA,MAAiBixE,CAAA,CAAA,CAAA,CAAA,iBACjDhxE,EAAAA,YAgFSD,EAAAA,MAAA+5C,EAAA,EAhFTv5C,EAAAA,WAgFS,CAAA,IAAA,CAAA,EA9ECw4D,EAAM,OAAA,CACb,MAAOtnE,EAAS,MAChB,QAASsO,EAAAA,MAAKlS,CAAA,EAAC,QAChB,KAAK,QACL,IAAI,MACH,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,GAAIkS,EAAAA,MAAKlS,CAAA,EAAC,GACV,GAAIkS,EAAAA,MAAKlS,CAAA,EAAC,GACV,GAAIkS,EAAAA,MAAKlS,CAAA,EAAC,GACV,GAAIkS,EAAAA,MAAKlS,CAAA,EAAC,GACV,GAAIkS,EAAAA,MAAKlS,CAAA,EAAC,GACV,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,WAAUihC,EAAU,KAAA,sBAErB,IAME,CALMwjD,EAAQ,qBADhBpyE,EAAAA,mBAME,QAAA,OAJA,KAAK,SACJ,KAAMH,EAAK,MAAAlS,CAAA,EAAC,MAAQkS,EAAA,MAAAlS,CAAA,EAAM,KAC1B,MAAOglD,EAAU,MAClB,MAAA,CAAqB,QAAA,MAAA,CAAA,0CAGf2Y,EAAQ,OAAIkmB,EAAU,QAAA,OAAA,CAAeG,EAAiB,qBAD9D3xE,EAAAA,mBAUO,OAAA,eARD,cAAJ,IAAIs0B,EACH,MAAKr0B,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,EACb,KAAK,MAAA,GAEO2B,EAAA,MAAAlS,CAAA,EAAM,MAAQkE,EAAM,MAAhCm8B,EAAAA,YAAAluB,cAAwFD,EAAAA,MAAxFpO,EAAA,EAAA4O,EAAAA,WAAwF,CAA1C,IAAA,GAAAR,QAAA5I,CAAA,EAAM,KAAI,CAAG,MAAO4I,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,mDACvEgC,EAAAA,WAEOC,oBAFP,IAEO,CADFG,EAAAA,gBAAAC,EAAA,gBAAAV,QAAAlS,CAAA,EAAM,OAASkS,QAAAgvB,CAAA,EAAU,aAAW,GAAA,EAAA,CAAA,qCAInCy8B,EAAQ,qBADhBtrD,EAAAA,mBAqBQ,QAAA,OAnBL,GAAIH,QAAO8zB,CAAA,EACX,MAAK1zB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,MAAgBo1C,EAAAA,eAAA,CAAA,MAAAk+B,EAAA,QAA0B,MAAA,GAAAC,EAAA,KAAkB,KAAO,MAAA,CAAS,EAC5E,IAAK5xE,EAAK,MAAAlS,CAAA,EAAC,SAAWkS,EAAA,MAAAlS,CAAA,EAAM,KAC5B,QAAOwkF,CAAA,GAEOtyE,EAAAA,MAAAlS,CAAA,EAAM,MAAQkE,EAAM,oBAAnCiO,EAAA,YASUD,QAAA6zC,EAAA,EAAA,OAT+B,SAAA,EAAA,GAC5B,kBACT,IAAwD,CAAxD70C,EAAA,YAAwDgB,QAAxDpO,EAAA,EAAA4O,aAAcR,QAA0C5I,CAAA,EAApC,KAAI,CAAG,MAAO4I,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,2CAEzC,IAIO,CAJPgC,EAAAA,WAIOC,mBAJP,IAIO,CAHLC,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,GACbqC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,IAAI,EAAA,CAAA,yCAInBuS,EAAAA,WAEOC,oBAFP,IAEO,CADFG,EAAAA,gBAAAC,EAAA,gBAAAV,QAAAlS,CAAA,EAAM,OAASkS,QAAAgvB,CAAA,EAAU,aAAW,GAAA,EAAA,CAAA,yCAG3CzuB,EAAAA,mBAkBM,MAAA,CAjBH,MAAKH,EAAAA,eAAA,CAAa,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA6B2B,EAAE,MAAA3B,CAAA,EAAC,IAAG,UAAA,UAAA,CAAA,EAAA,CAA2BotD,EAAQ,MAAW,CAAAzrD,EAAA,MAAA3B,CAAA,EAAG,IAA2B,UAAA,QAAA,CAAA,EAAA2B,QAAAlS,CAAA,EAAM,MAAA,GAK7I,KAAK,QACL,gBAAc,MACb,uBAAO+jF,EAAY,KAAA,CAAA,GAEpBxxE,aAAwCC,yDAA1BN,EAAiB,MAAAixE,CAAA,CAAA,CAAA,CAAA,EAC/BjyE,EAAAA,YAMakB,EAAAA,WAAA,CANA,KAAMF,EAAAA,MAAKlS,CAAA,EAAC,eAAA,qBACvB,IAIM,EAJMkS,EAAK,MAAAlS,CAAA,EAAC,cAAgB+iF,EAAO,qBAAzC1wE,EAAA,mBAIM,MAAA,OAJsC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,GACtDgC,aAEOC,EAFa,OAAA,QAAA,CAAA,IAAKwwE,EAAA,OAAzB,IAEO,qCADFA,EAAQ,KAAA,EAAA,CAAA,mQCtbjB,MAAAhjF,EAAQiM,GAAS,YADRsF,EAC6B,CAC1C,KAAM,KACN,OAAQ,KACR,KAAM,UACN,MAAO,KACP,OAAQ,KACR,KAAM,KACN,OAAQ,KACR,MAAO,KACP,SAAU,KACV,QAAS,KACT,OAAQ,KACR,YAAa9C,GAAe,EAC5B,cAAe,KACf,KAAMA,GAAe,EACrB,MAAO,KACP,WAAY,KACZ,MAAO,KACP,cAAe,CACb,QAAS,KACT,OAAQ,EAAA,CACV,CACD,EAEKvK,EAAQsN,EAAAA,SAAA,EAMRkzE,EAAU7iF,EAAAA,OAAO2/B,GAAc,IAAI,EAEnCjxB,EAAKtF,GAAc,MAAM,EACzB3I,EAASI,GAAU,OAAQ07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAEjD2kF,EAAYtjF,EAAAA,SAAS,IAAM,CAAC,CAACqjF,GAAW1kF,EAAM,OAAO,EAE3D,eAAe4uE,GAAc,CAC3B,GAAI5uE,EAAM,SAAU,OAEpB,IAAI1M,EAAkB,GAElB,OAAO0M,EAAM,eAAkB,aACjC1M,EAAS0M,EAAM,cAAc,EAEzB1W,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,IAIfA,IAAW,KACboxF,GAAA,MAAAA,EAAS,QACTv2E,EAAUnO,EAAM,OAAO,EACzB,6BAKAmS,EAAAA,YA+BSD,EAAA,MAAA45C,EAAA,EA/BTp5C,EAAA,WA+BSF,EA9BO,OAAA,CACb,QAASmyE,EAAS,MAClB,MAAOzyE,EAAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,EACZ,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,KACZ,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,iBAAgBkS,EAAAA,MAAKlS,CAAA,EAAC,cACtB,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,QAAO4uE,qCAER,IAEO,CAFPr8D,EAAAA,WAEOC,sBAFP,IAEO,CADFG,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,OAASkS,EAAAA,MAAA5P,CAAA,EAAO,KAAK,EAAA,CAAA,YAEhB4B,EAAM,WAAO,oBAC3B,IAAyB,CAAzBqO,aAAyBC,EAAA,OAAA,MAAA,CAAA,mBAEXtO,EAAM,cAAU,uBAC9B,IAA4B,CAA5BqO,aAA4BC,EAAA,OAAA,SAAA,CAAA,qSCrF5B,MAAAxS,EAAQiM,GAAS,cADRsF,EAC+B,CAC5C,KAAM,KACN,OAAQ,KACR,KAAM,UACN,MAAO,KACP,OAAQ,KACR,KAAM,KACN,OAAQ,KACR,MAAO,KACP,SAAU,KACV,OAAQ,KACR,YAAa9C,GAAe,EAC5B,cAAe,KACf,KAAMA,GAAe,EACrB,MAAO,KACP,WAAY,KACZ,MAAO,KACP,eAAgB,CACd,QAAS,KACT,OAAQ,EAAA,CACV,CACD,EAEKvK,EAAQsN,EAAAA,SAAA,EAMR24C,EAAetoD,EAAAA,OAAO4/B,GAAe,IAAI,EAEzCP,EAAYr/B,EAAAA,OAAOy/B,GAAY,EAAE,EACjCojD,EAAU7iF,EAAAA,OAAO2/B,GAAc,IAAI,EAEnCjxB,EAAKtF,GAAc,MAAM,EACzB3I,EAASI,GAAU,OAAQ07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAEjD,CAAE,MAAArE,CAAM,EAAI66B,GAAc,EAE1ByP,EAAUv0B,MAAI,EAAK,EAEnBkzE,EAASlzE,EAAAA,IAAiB,EAE1B+yE,EAAWpjF,EAAAA,SAAS,IAAM6/B,EAAU,QAAUA,EAAU,MAAM,EAC9DyjD,EAAYtjF,EAAAA,SAAS,IAAM,CAAC,CAACqjF,GAAW1kF,EAAM,OAAO,EACrDsxD,EAAYjwD,EAAAA,SAAS,IAClB4kC,EAAQ,QAAUkkB,EAAeA,EAAa,QAAQ,MAAQ,GACtE,EAEDr4C,EAAa,CAAE,OAAA8yE,EAAQ,SAAAH,EAAU,UAAAnzB,CAAA,CAAW,EAE5C,eAAe3uB,GAAe,OAC5B,GAAI3iC,EAAM,UAAYimC,EAAQ,OAAS,CAACy+C,EAAS,OAEjDz+C,EAAQ,MAAQ,GAEV,MAAAvD,EAAS,MAAMgiD,EAAQ,SAAS,EAEtC,GAAIhiD,EAAO,OACCv0B,EAAAnO,EAAM,QAAS0iC,CAAM,MAC1B,CACL,IAAIpvC,EAAkB,GAElB,OAAO0M,EAAM,gBAAmB,aAClC1M,EAAS0M,EAAM,eAAe,EAE1B1W,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,IAIfA,IAAW,KACb6a,EAAUnO,EAAM,QAAQ,EAEpBykF,EAAS,SACX1jF,EAAA6jF,EAAO,QAAP,MAAA7jF,EAAc,SAElB,CAGIpF,EAAA,QAAU,WAAW,IAAM,CAC/BsqC,EAAQ,MAAQ,IACf,GAAG,CAAA,6BAKN9zB,EAAAA,YAsCSD,EAAA,MAAA45C,EAAA,EAtCTp5C,EAAA,WAsCSF,EArCO,OAAA,CACb,QAASmyE,EAAS,MAClB,MAAOzyE,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,EACZ,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,KACZ,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASsxD,EAAS,MAClB,OAAQp/C,EAAAA,MAAKlS,CAAA,EAAC,OACd,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,iBAAgBkS,EAAAA,MAAKlS,CAAA,EAAC,cACtB,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,QAAO2iC,qCAER,IAEO,CAFPpwB,EAAAA,WAEOC,sBAFP,IAEO,CADFG,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,OAASkS,EAAAA,MAAA5P,CAAA,EAAO,MAAM,EAAA,CAAA,CAAA,GASzBmiF,EAAQ,qBADhBpyE,EAAAA,mBAMU,SAAA,eAJJ,SAAJ,IAAIuyE,EACJ,KAAK,SACL,MAAA,CAAqB,QAAA,MAAA,EACpB,oCAAD,IAAW,CAAA,EAAA,CAAA,MAAA,CAAA,mDAXG1gF,EAAM,WAAO,oBAC3B,IAAyB,CAAzBqO,aAAyBC,EAAA,OAAA,MAAA,CAAA,mBAEXtO,EAAM,cAAU,uBAC9B,IAA4B,CAA5BqO,aAA4BC,EAAA,OAAA,SAAA,CAAA,2MC7HrBqyE,GAAkB13E,GAAW,CACxC,IAAK,OACL,SAAUe,EAAkD,CAC9D,CAAC,sGCMK,MAAAlO,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,IAAK,KAAA,CACN,EAIKhB,EAAKtF,GAAc,aAAa,EAEhC65E,EAAUx5E,GAAM,EAEhBy5E,EAAYrzE,MAAI,EAAK,EACrBzC,EAASyC,EAAAA,IAAY,EACrBszE,EAAWtzE,EAAAA,IAAoB,EAE/B2E,EAAOhV,EAAAA,SAAS,IAAM0jF,EAAU,OAASC,EAAS,KAAM,EACxDphF,EAAYvC,EAAAA,SAAS,IAAM,CAACkP,EAAG,EAAE,EAAGA,EAAG,GAAG,MAAM,EAAG,CAAE,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG8F,EAAK,KAAM,CAAC,CAAC,EACnF+e,EAAa/zB,EAAAA,SAAS,IAAO2jF,EAAS,QAAU,SAAW,OAAS,EAAG,EAEvE,CACJ,MAAOC,EACP,KAAMC,EACN,OAAQjuE,EACR,KAAMkuE,GACJ7uE,GAAc,EAElB1J,QAAMu4E,EAAsBv8F,GAAA,CACrBA,IACHm8F,EAAU,MAAQ,GAClBC,EAAS,MAAQ,OACnB,CACD,EACDp4E,QAAMyJ,EAAeztB,GAAA,CACTulB,EAAAnO,EAAM,SAAUpX,CAAK,CAAA,CAChC,EAEc,eAAAiuB,EAAMhuB,EAAuB,SAAUu8F,EAAuB,CACvEL,EAAU,OACZ,MAAMnuE,EAAK,EAGT/tB,IAAS,UACX,MAAMo8F,EAAa,EAGrBF,EAAU,MAAQ,GAClB91E,EAAO,MAAQm2E,EACNJ,EAAA,MAAQn8F,IAAS,SAAW,UAAY,QAAA,CAGnD,eAAe+tB,GAAO,CACpB,MAAMsuE,EAAY,EAElBj2E,EAAO,MAAQ,OACf81E,EAAU,MAAQ,GAClBC,EAAS,MAAQ,MAAA,CAGJ,eAAAjuE,EAAOluB,EAAuB,SAAUomB,EAAiB,CAClE81E,EAAU,MACRC,EAAS,QAAUn8F,EACf,MAAAguB,EAAMhuB,EAAMomB,CAAM,EAExB,MAAM2H,EAAK,EAGP,MAAAC,EAAMhuB,EAAMomB,CAAM,CAC1B,CAGW,OAAA6C,EAAA,CACX,KAAAuE,EACA,QAAAyuE,EACA,QAAA7tE,EACA,MAAAJ,EACA,KAAAD,EACA,OAAAG,CAAA,CACD,wBAIC5E,EAAA,YAiBSD,QAAA0oC,EAAA,EAAA,CAjBA,GAAIxlB,EAAU,OAAA,mBACrB,IAeY,EAfZiL,EAAAA,YAAAluB,EAAAA,YAeYskE,EAAA,wBAdLvkE,EAAK,MAAAlS,CAAA,EAAC,KADb,KAAA,EAAA0S,aAEUw4D,EAAM,OAAA,SACV,UAAJ,IAAIj0D,EACH,MAAOrT,EAAS,MAChB,MAAU,CAAA,CAAAsO,EAAAA,MAAA3B,CAAA,EAAG,eAAgBtB,EAAM,KAAA,CAAA,sBAEpC,IAMQ,CANRsD,aAMQC,EAAA,OAAA,UAAA,CALL,KAAM6D,EAAI,MACV,QAAUnE,QAAO4yE,CAAA,EACjB,MAAAjuE,EACA,KAAAD,EACA,OAAAG,CAAA,GAEHtE,EAAAA,mBAA6D,MAAA,CAAvD,GAAIP,QAAO4yE,CAAA,EAAG,MAAKxyE,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EAAW,KAAK,MAAA,iECrGhD/e,GAAW,QAEXovC,GAAc,OAAO,OAAsB,CAC/C,QACA,MACA,SACA,eACA,gBACA,cACF,CAAC,EACKC,GAAY,OAAO,OAAoB,CAAC,MAAO,SAAU,SAAU,SAAS,CAAC,EAEnFwkD,GAAe51E,kBAAgB,CAC7B,KAAM,OACN,MAAOkzD,GACP,MAAMhzD,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,OAAQ0D,EAAQ,CACrC,IAAK,MACL,IAAK,EACL,KAAM,OACN,QAAS,GACT,SAAU,OACV,YAAa,OACb,MAAO,GACP,QAAS,CACP,QAAS,QACT,UAAW/mB,GAASg4C,GAAY,SAASh4C,CAAK,CAChD,EACA,MAAO,CACL,QAAS,UACT,UAAWA,GAASi4C,GAAU,SAASj4C,CAAK,CAC9C,EACA,SAAU,EAAA,CACX,EAEK2nB,EAAKtF,GAAc,MAAM,EAEzBrH,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAGvQ,EAAM,OAAO,CAAC,EAAG,GACxB,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,OAAO,CAAC,EAAGvQ,EAAM,KAC1B,EACD,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAuB,CAAC,EAE9B,OAAI3Q,EAAM,MACR2Q,EAAM,IAAM,MAAM,QAAQ3Q,EAAM,GAAG,EAC/B,GAAGA,EAAM,IAAI,CAAC,CAAC,MAAMA,EAAM,IAAI,CAAC,CAAC,KACjC,GAAGA,EAAM,GAAG,MAGlB2Q,EAAM,oBAAsB20E,EAAgBtlF,EAAM,OAAO,EAErDA,EAAM,OAAS,SACjB2Q,EAAM,iBAAmB20E,EAAgBtlF,EAAM,IAAI,GAGjDA,EAAM,WAAa,SACrB2Q,EAAM,aAAe40E,EAAgBvlF,EAAM,QAAQ,GAGjDA,EAAM,cAAgB,SACxB2Q,EAAM,gBAAkB40E,EAAgBvlF,EAAM,WAAW,GAGpD2Q,CAAA,CACR,EACKizD,EAAWviE,EAAAA,SAAS,IACpBrB,EAAM,WAAa,GACd,CACL,QAAS,QACT,MAAO,KACT,EACSA,EAAM,SACR,CACL,QAAS,QACT,MAAO,MACP,GAAGA,EAAM,QACX,EAGK,EACR,EAEO8B,UAAAshE,GAAYt2D,EAAS,SAAA,CAAE,SAAA82D,EAAU,QAASxlC,EAAAA,MAAMp+B,EAAO,SAAS,CAAE,CAAC,CAAC,EAE5E,SAASslF,EAAgB18F,EAAmB,CACtC,OAAA,OAAOA,GAAU,SACZ,UAAUA,CAAK,SAGpB,OAAOA,GAAU,SACZ4I,GAAS,KAAK5I,EAAM,KAAA,CAAM,EAAI,UAAUA,CAAK,SAAWA,EAG7D,MAAM,QAAQA,CAAK,EACdA,EACJ,IAAYmP,GACP,OAAOA,GAAS,SACX,GAAGA,CAAI,KAGZ,OAAOA,GAAS,UACXvG,GAAS,KAAKuG,EAAK,KAAA,CAAM,EAAI,GAAGA,CAAI,KAGtCA,CACR,EACA,KAAK,GAAG,EAGNnP,CAAA,CAGT,SAAS28F,EAAgB38F,EAAmB,CACtC,OAAA,OAAOA,GAAU,SACZ,GAAGA,CAAK,KAGb,OAAOA,GAAU,SACZ4I,GAAS,KAAK5I,EAAM,KAAA,CAAM,EAAI,UAAUA,CAAK,SAAWA,EAG7D,MAAM,QAAQA,CAAK,EACdA,EACJ,IAAYmP,GACP,OAAOA,GAAS,SACX,GAAGA,CAAI,KAGZ,OAAOA,GAAS,UACXvG,GAAS,KAAKuG,EAAK,KAAA,CAAM,EAAI,GAAGA,CAAI,KAGtCA,CACR,EACA,KAAK,GAAG,EAGNnP,CAAA,CAGT,MAAO,IACLgE,EAAA,EACEoT,EAAM,KAAO,MACb,CACE,MAAO4D,EAAU,MACjB,MAAO+M,EAAM,KACf,EACA,CACE,QAAS,IAAM,OAAA,OAAA5P,EAAAmD,EAAM,UAAN,YAAAnD,EAAA,KAAAmD,GAAgB,CAEnC,CAAA,CAEN,CAAC,EClKYshF,GAAiBr4E,GAAW,CACvC,QAAS,OACT,SAAU,MACV,WAAYJ,CACd,CAAC,yFCAK,MAAA/M,EAAQiM,GAAS,YADRsF,EAC6B,CAC1C,QAAS,CACP,QAAS,GACT,OAAQ,EACV,EACA,SAAU,CACR,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,WAAY,EAAA,CACb,EAEKhB,EAAKtF,GAAc,WAAW,EAE9B8N,EAAU1X,EAAAA,SAAS,IAAM,OAC7B,MAAMokF,GAAW1kF,EAAAf,EAAM,WAAN,YAAAe,EAAgB,OAAO,SAEpC,OAAC0kF,GAAA,MAAAA,EAAU,OAIR,IAAI,OACT,IAAIA,EAAS,KAAK,CAAC13F,EAAG0c,IAAMA,EAAE,OAAS1c,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,IAC1D,GAAGiS,EAAM,WAAa,IAAM,EAAE,GAChC,EANS,IAMT,CACD,EACK0lF,EAAcrkF,EAAAA,SAAS,IACvB,CAAC0X,EAAQ,OAAS,CAAC/Y,EAAM,QACpB,CAAC,CAAE,MAAO,GAAO,KAAMA,EAAM,QAAS,EAGxCA,EAAM,QAAQ,MAAM+Y,EAAQ,KAAK,EAAE,IAAY4uC,IAC7C,CAAE,MAAO5uC,EAAQ,MAAO,KAAK4uC,CAAI,EAAG,KAAAA,CAAK,EACjD,CACF,8BAICt1C,EAAA,mBAaM,MAAA,CAbA,MAAQC,EAAAA,eAAA,CAAAJ,QAAA3B,CAAA,EAAG,IAAK2B,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,EAAAA,SAAM,SAAWA,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,IACzD8vB,EAAAA,UAAA,EAAA,EAAAhuB,EAWW,mBAAAqsB,WAXuB,KAAAC,EAAA,WAAA+mD,EAAA,MAAhB,CAAA3tF,EAAMjH,wDAA6BA,GAAK,CAC5CiH,EAAK,qBAAjBsa,EAAAA,mBAIO,OAAA,OAJkB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,CAAA,GACnCgC,aAEOC,EAAA,OAAA,QAAA,CAFa,KAAMza,EAAK,IAAA,EAA/B,IAEO,CADF4a,EAAAA,gBAAAC,EAAA,gBAAA7a,EAAK,IAAI,EAAA,CAAA,wBAGhBsa,EAAAA,mBAIO,OAAA6oC,GAAA,CAHL3oC,aAEOC,EAAA,OAAA,UAAA,CAFA,KAAMza,EAAK,IAAA,EAAlB,IAEO,CADF4a,EAAAA,gBAAAC,EAAA,gBAAA7a,EAAK,IAAI,EAAA,CAAA,4BC7CT4tF,GAAcx4E,GAAW,CACpC,OAAQiB,GAAmB,EAC3B,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,CAAC,OAAQ,MAAM,EACvB,aAAcrB,EACd,aAAcA,EACd,UAAW,OACX,QAAS,OACT,QAAS,OACT,aAAcA,EACd,eAAgBA,EAChB,YAAa,OACb,aAAcA,EACd,iBAAkB,OAClB,QAAS,MACT,YAAaE,GACb,aAAcF,EACd,YAAaA,EACb,aAAc,MACd,YAAamB,EAAwC,EACrD,OAAQA,EAAwC,EAChD,UAAWA,EAAwC,EACnD,QAASA,EAAsD,EAC/D,SAAUA,EAAqD,EAC/D,QAASA,EAAuD,EAChE,QAASA,EAAuD,EAChE,OAAQA,EAAsD,EAC9D,OAAQA,EAAuD,EAC/D,QAASA,EAAwC,CACnD,CAAC,ECeiB,IAAA03E,IAAAA,IAChBA,EAAA,YAAc,eACdA,EAAA,WAAa,cACbA,EAAA,MAAQ,SACRA,EAAA,MAAQ,SACRA,EAAA,OAAS,UACTA,EAAA,QAAU,WACVA,EAAA,WAAa,cACbA,EAAA,MAAQ,QARQA,IAAAA,IAAA,CAAA,CAAA,EAWlB,MAAMC,GAA0C,CAC9C,CAAC,eAAgB,aAAa,EAC9B,CAAC,SAAU,QAAQ,EACnB,CAAC,UAAW,UAAU,EACtB,CAAC,aAAa,EACd,CAAC,OAAO,CACV,EAEA,QAASz7F,EAAI,EAAG4H,EAAM6zF,GAAoB,OAAQz7F,EAAI4H,EAAK,EAAE5H,EAC3Dy7F,GAAoBz7F,CAAC,EAAI,OAAO,OAAOy7F,GAAoBz7F,CAAC,CAAC,EAGlD,MAAA07F,GAA4B,OAAO,OAAOD,EAAmB,0GC5DpE,MAAA7lF,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,OAAQ,KACR,MAAO,OACP,OAAQ,OACR,aAAc,GACd,aAAc,GACd,UAAW,IACX,QAAS,GACT,QAAS,IACT,eAAgB,GAChB,YAAa,GACb,aAAc,GACd,aAAc,GACd,iBAAkB,SAClB,QAAS,IAAM,CAAC,EAChB,YAAa,GACb,aAAc,GACd,YAAa,GACb,aAAc,IAAM,CAAA,CAAC,CACtB,EAOKhB,EAAKtF,GAAc,QAAQ,EAC3B3I,EAASI,GAAU,SAAU07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACnDsJ,EAAQU,GAAS,EAEjB,CAAE,MAAArO,CAAM,EAAI66B,GAAc,EAC1BuvD,EAAgBr0E,MAAI,EAAK,EAEzBs0E,EAAOt0E,MAAI,CAAC,EACZrB,EAASqB,MAAI,CAAC,EACdu0E,EAAQv0E,MAAI,EAAK,EACjBw0E,EAAQx0E,MAAI,EAAK,EAEjBguB,EAAShuB,EAAAA,IAAiB,EAC1BwqB,EAAaxqB,EAAAA,IAAiB,EAE9B,CAAE,UAAWy0E,EAAe,KAAA9vE,EAAM,MAAO+vE,EAAW,KAAMC,CAAA,EAAa/vE,GAAcopB,CAAM,EAC3F,CACJ,OAAQ5F,EACR,EAAG+2B,EACH,EAAGgW,EACH,OAAAjsD,GACEN,GAAU,CACZ,QAAS,CAACrZ,EAAG/H,IAAU,CACrB,GAAI8G,EAAM,cAAgB9G,EAAM,OAAS,EAChC,MAAA,GAGCiV,EAAAnO,EAAM,YAAai0C,GAAU,CACzC,EACA,OAAQ,IAAM,CACF9lC,EAAAnO,EAAM,YAAai0C,GAAU,CACzC,EACA,MAAO,IAAM,CACD9lC,EAAAnO,EAAM,YAAai0C,GAAU,CAAA,CACzC,CACD,EAEK79B,EAAQtJ,EAAAA,SAAS,CACrB,KAAAk5E,EACA,OAAA31E,EACA,MAAA41E,EACA,MAAAC,EACA,KAAA7vE,EACA,OAAAuE,EACA,EAAGi2C,EACH,EAAGgW,CAAA,CACJ,EAEKyf,EAAa,CACjB,EAAG,EACH,EAAG,CACL,EAEYrtE,GAAA,CACV,OAAQymB,EACR,QAAS,GACT,UAAW,CAACxmC,EAAOygB,IAAa,CAC9B,GAAI,CAAAiB,EAAO,QAEPjB,EAAS,IAAMA,EAAS,MAAQA,EAAS,MAAQA,EAAS,OAAO,CACnEzgB,EAAM,eAAe,EAErB,MAAM0C,EAAU+d,EAAS,IAAMA,EAAS,KAAOktD,EAAahW,EACtD3mE,EAAOyvB,EAAS,IAAMA,EAAS,KAAO,IAAM,GAElD/d,EAAQ,OAAS1C,EAAM,QAAU,EAAIhP,EAAOA,EAE5CyvB,EAAS,SAAS,CAAA,CACpB,CACF,CACD,EAED,SAASs6B,GAAW,CACX,OAAA79B,CAAA,CAGA,SAAAmwE,EAEPC,EAA6B5uF,EAAS,CACtC,OAAOkF,GAAW0pF,EAAO5uF,CAAI,EAAUwe,CAAK,CAAA,CAM9C,SAASqwE,EAAejuF,EAAc,CAC7B,OAAA+X,EAAG,GAAG/X,CAAI,CAAA,CAGnB,MAAMkuF,EAAyC,CAC7C,CACE,KAAMd,GAAmB,YACzB,QAAS,IAAMe,GAAa3mF,EAAM,WAAW,EAC7C,aAAc,IAAMpT,EAAAA,EAAEkX,GAAMwF,EAAM,MAAM,WAAW,EACnD,MAAOm9E,EAAeb,GAAmB,WAAW,EACpD,MAAO,IAAMtjF,EAAO,MAAM,YAC1B,OAAQ,IAAMtC,EAAM,cACtB,EACA,CACE,KAAM4lF,GAAmB,WACzB,QAAS,IAAMe,GAAa,GAAK3mF,EAAM,WAAW,EAClD,aAAc,IAAMpT,EAAAA,EAAEkX,GAAMwF,EAAM,MAAM,UAAU,EAClD,MAAOm9E,EAAeb,GAAmB,UAAU,EACnD,MAAO,IAAMtjF,EAAO,MAAM,WAC1B,OAAQ,IAAMtC,EAAM,cACtB,EACA,CACE,KAAM4lF,GAAmB,MACzB,QAAS,IAAMgB,EAAY,EAC3B,aAAc,IAAMh6F,EAAAA,EAAEkX,GAAMwF,EAAM,MAAM,KAAK,EAC7C,MAAOm9E,EAAeb,GAAmB,KAAK,EAC9C,MAAO,IAAMtjF,EAAO,MAAM,eAC1B,OAAQ,IAAMtC,EAAM,YACtB,EACA,CACE,KAAM4lF,GAAmB,MACzB,QAAS,IAAMiB,GAAY,EAC3B,aAAc,IAAMj6F,EAAAA,EAAEkX,GAAMwF,EAAM,MAAM,KAAK,EAC7C,MAAOm9E,EAAeb,GAAmB,KAAK,EAC9C,MAAO,IAAMtjF,EAAO,MAAM,aAC1B,OAAQ,IAAMtC,EAAM,YACtB,EACA,CACE,KAAM4lF,GAAmB,OACzB,QAAS,IAAMkB,GAAW9mF,EAAM,SAAS,EACzC,aAAc,IAAMpT,EAAAA,EAAEkX,GAAMwF,EAAM,MAAM,MAAM,EAC9C,MAAOm9E,EAAeb,GAAmB,MAAM,EAC/C,MAAO,IAAMtjF,EAAO,MAAM,OAC1B,OAAQ,IAAMtC,EAAM,YACtB,EACA,CACE,KAAM4lF,GAAmB,QACzB,QAAS,IAAMkB,GAAW,GAAK9mF,EAAM,SAAS,EAC9C,aAAc,IAAMpT,EAAAA,EAAEkX,GAAMwF,EAAM,MAAM,OAAO,EAC/C,MAAOm9E,EAAeb,GAAmB,OAAO,EAChD,MAAO,IAAMtjF,EAAO,MAAM,QAC1B,OAAQ,IAAMtC,EAAM,YACtB,EACA,CACE,KAAM4lF,GAAmB,WACzB,QAAS,IAAMmB,GAAW,CAAC1wE,EAAK,KAAK,EACrC,aAAc,IAAMzpB,EAAAA,EAAEkX,GAAMuS,EAAK,MAAQ/M,EAAM,MAAM,YAAcA,EAAM,MAAM,UAAU,EACzF,MAAOm9E,EAAeb,GAAmB,UAAU,EACnD,MAAO,IAAOvvE,EAAK,MAAQ/T,EAAO,MAAM,eAAiBA,EAAO,MAAM,WACtE,OAAQ,IAAMtC,EAAM,YACtB,EACA,CACE,KAAM4lF,GAAmB,MACzB,QAAS,IAAMhX,GAAY,EAC3B,aAAc,IAAMhiF,EAAAA,EAAEkX,GAAMwF,EAAM,MAAM,OAAO,EAC/C,MAAOm9E,EAAeb,GAAmB,KAAK,EAC9C,MAAO,IAAMtjF,EAAO,MAAM,KAAA,CAE9B,EAEMsB,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAG,CAACvQ,EAAM,aAC7B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAG,CAACvQ,EAAM,aAC7B,CAACuQ,EAAG,GAAG,MAAM,CAAC,EAAG8F,EAAK,MACtB,CAAC9F,EAAG,GAAG,QAAQ,CAAC,EAAGqK,EAAO,MAC1B,CAACrK,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,YAC3B,EACD,EACK2Q,EAAQtP,EAAAA,SAAS,KACd,CACL,MAAO9G,GAAUyF,EAAM,KAAK,EAC5B,OAAQzF,GAAUyF,EAAM,MAAM,CAChC,EACD,EACKgnF,EAAkB3lF,EAAAA,SAAS,IAAM,CACrC,KAAM,CAAC4lF,CAAM,EAAIjnF,EAAM,iBAAiB,MAAM,GAAG,EAE1C,OAAAinF,IAAW,QAAUA,IAAW,OAAA,CACxC,EACKC,EAAc7lF,EAAAA,SAAS,IACpB,OAAOrB,EAAM,aAAgB,SAAWA,EAAM,YAAcA,EAAM,YAAc,KAAO,CAC/F,EACKmnF,EAAe9lF,EAAAA,SAAS,KACrB,CACL,CAACkP,EAAG,GAAG,SAAS,CAAC,EAAG,GACpB,CAACA,EAAG,IAAI,UAAW,QAAQ,CAAC,EAAG22E,EAAY,MAAQ,KAAOnB,EAAc,MACxE,CAACx1E,EAAG,IAAI,UAAWvQ,EAAM,gBAAgB,CAAC,EAAG,GAC7C,CAACuQ,EAAG,IAAI,UAAW,UAAU,CAAC,EAAGy2E,EAAgB,KACnD,EACD,EACKI,EAAe/lF,EAAAA,SAAS,KACrB,CACL,UAAW,eAAewvD,EAAY,KAAK,OAAOgW,EAAW,KAAK,gBAAgBmf,EAAK,KAAK,GAC9F,EACD,EACKqB,EAAkBhmF,EAAAA,SAAS,KACxB,CACL,UAAW,UAAU4kF,EAAM,MAAQ,GAAK,CAAC,YAAYC,EAAM,MAAQ,GAAK,CAAC,YACvE71E,EAAO,KACT,MACF,EACD,EACKi3E,EAAajmF,EAAAA,SAAS,IAAM,OAC1B,MAAA/D,MAAU,IACVonF,EAAmC,CAAC,EAE1CgC,EAAgB,OAAO1mF,EAAM,OAAO,EAAE,QAAkBwmF,GAAA,CAClDA,EAAO,MACLlpF,EAAA,IAAIkpF,EAAO,KAAMA,CAAM,CAC7B,CACD,EAEG,IAAAS,GAEClmF,EAAAf,EAAM,eAAN,MAAAe,EAAoB,OAOvBkmF,EAASjnF,EAAM,cANNinF,EAAA,CAAC,GAAGnB,EAAyB,EAElC9lF,EAAM,QAAQ,QAChBinF,EAAO,KAAKjnF,EAAM,QAAQ,IAAcwmF,GAAAA,EAAO,IAAI,CAAC,GAMxD,UAAWxxE,KAASiyE,EAAQ,CACpB,MAAA7jC,EAAQpuC,EAAM,IAAYxc,GAAA8E,EAAI,IAAI9E,CAAI,CAAE,EAAE,OAAO,OAAO,EAExD4qD,EAAA,QAAUshC,EAAQ,KAAKthC,CAAK,CAAA,CAG7B,OAAAshC,CAAA,CACR,EAEY5yE,EAAA,CACX,OAAA8I,EACA,cAAAurE,EACA,MAAA/vE,EACA,OAAAspB,EACA,UAAA5F,EACA,WAAAoC,EACA,aAAAyqD,GACA,qBAAsBC,EACtB,mBAAoBC,GACpB,WAAAC,GACA,WAAAC,GACA,YAAAnY,EAAA,CACD,EAEDn6D,EAAAA,UAAU,IAAM,CACd,GAAIqlB,EAAU,MAAO,CACb,MAAAngC,EAAOmgC,EAAU,MAAM,sBAAsB,EAEnDwsD,EAAW,EAAI3sF,EAAK,KAAOA,EAAK,MAAQ,GACxC2sF,EAAW,EAAI3sF,EAAK,IAAMA,EAAK,OAAS,EAAA,CAC1C,CACD,EAED,SAAS+8C,GAAYx9C,EAAmB,CACtCA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EAErB,MAAM29C,EAAO39C,EAAM,OAAS,EAAI,GAAK,EAErCotF,EAAW,EAAIptF,EAAM,QACrBotF,EAAW,EAAIptF,EAAM,QAEXiV,EAAAnO,EAAM,QAAS62C,EAAMzgC,CAAK,EACzB0wE,GAAAjwC,EAAO72C,EAAM,SAAS,CAAA,CAG1B,SAAA2mF,GAAaY,EAAavoD,EAAO,GAAM,CAC1Ch/B,EAAM,iBAEVqQ,EAAO,OAASk3E,EAEZvnF,EAAM,cAAgBqQ,EAAO,MAAQ,MAAQ,IAC/CA,EAAO,MAAQ,GAGjB2uB,GAAQ7wB,EAAUnO,EAAM,SAAUunF,EAAKnxE,CAAK,EAExCpW,EAAM,cACRsT,EAAAA,SAASk0E,EAAc,EACzB,CAGF,SAASZ,EAAYz1F,EAAS,CAAC80F,EAAM,MAAOjnD,EAAO,GAAM,CACnDh/B,EAAM,eAEVimF,EAAM,MAAQ90F,EACd6tC,GAAQ7wB,EAAUnO,EAAM,QAAS7O,EAAQilB,CAAK,EAAA,CAGhD,SAASywE,GAAY11F,EAAS,CAAC+0F,EAAM,MAAOlnD,EAAO,GAAM,CACnDh/B,EAAM,eAEVkmF,EAAM,MAAQ/0F,EACd6tC,GAAQ7wB,EAAUnO,EAAM,QAAS7O,EAAQilB,CAAK,EAAA,CAGvC,SAAA0wE,GAAWx6D,EAAe0S,EAAO,GAAM,CAC9C,GAAIh/B,EAAM,cAAgB,CAAC85B,EAAU,OAASlf,EAAO,MAAO,OAEtD,MAAA6sE,EAAgB3tD,EAAU,MAAM,sBAAsB,EACtD,CAAE,EAAAvf,EAAG,EAAAC,CAAA,EAAM8rE,EACX,CAAE,YAAAx/D,EAAa,aAAAC,CAAa,EAAI+S,EAAU,MAC1C4tD,GAAW1B,EAAK,MAEjBA,EAAA,MAAQ/zF,GAAQtE,GAAWq4F,EAAK,MAAQ15D,EAAOtsB,EAAM,QAASA,EAAM,OAAO,EAAG,CAAC,EAE9E,MAAAjP,EAAQi1F,EAAK,MAAQ0B,GAAW,EAChCC,GAAU52F,EAAQ+1B,EAAc,GAChC8gE,GAAU72F,EAAQg2B,EAAe,GAElC/mB,EAAM,cACT6wD,EAAY,OAAS9/D,GAASwpB,EAAIktE,EAAc,KAAO52B,EAAY,OAAS82B,GAC5E9gB,EAAW,OAAS91E,GAASypB,EAAIitE,EAAc,IAAM5gB,EAAW,OAAS+gB,IAG3E5oD,GAAQ7wB,EAAUnO,EAAM,OAAQgmF,EAAK,MAAO5vE,CAAK,CAAA,CAGnD,eAAe2wE,GAAWc,EAAS,CAACxxE,EAAK,MAAO2oB,EAAO,GAAM,CAC3D6oD,EAAS,MAAMzB,IAAc,MAAMC,EAAS,EAE5CrnD,GAAQ7wB,EAAUnO,EAAM,OAAQ6nF,EAAQzxE,CAAK,CAAA,CAGtC,SAAAw4D,GAAY5vC,EAAO,GAAM,CAChC6nC,EAAW,MAAQ,EACnBhW,EAAY,MAAQ,EACpBxgD,EAAO,MAAQ,EACf41E,EAAM,MAAQ,GACdC,EAAM,MAAQ,GACdF,EAAK,MAAQ,EAELhnD,GAAA7wB,EAAUnO,EAAM,QAASoW,CAAK,CAAA,CAGxC,SAASoxE,IAAiB,CACxB,GAAIxnF,EAAM,aAAc,CAClBqQ,EAAO,MAAQ,MAAQ,IACzBA,EAAO,MAAQ,GAGjB,MAAA,CAGF,MAAMzP,EAA2B,CAAC,EAE9ByP,EAAO,MAAQ,MAAQ,GACnBzP,EAAA,KACJ,IAAM,CACAs7B,EAAW,QACFA,EAAA,MAAM,MAAM,mBAAqB,MAEhD,EACA,IAAM,CACJ7rB,EAAO,MAAQ,CACjB,EACA,IAAM,CACA6rB,EAAW,QACFA,EAAA,MAAM,MAAM,mBAAqB,GAC9C,CAEJ,EAGF,MAAMp7B,EAAM,IAAM,QAChBC,EAAAH,EAAM,UAAN,MAAAG,IACMH,EAAA,QAAU,sBAAsBE,CAAG,CAC3C,EAEIA,EAAA,CAAA,CAGN,SAASgnF,IAAqB,CAC5B,aAAansF,EAAM,WAAW,EAC9BoqF,EAAc,MAAQ,EAAA,CAGxB,SAASgC,IAAqB,CAC5B,aAAapsF,EAAM,WAAW,EAE1BurF,EAAY,OAAS,MACjBvrF,EAAA,YAAc,WAAW,IAAM,CACnCoqF,EAAc,MAAQ,EAAA,EACrBmB,EAAY,KAAK,EACtB,6BAKA70E,EAAA,mBAiEM,MAAA,SAhEA,SAAJ,IAAIqtB,EACH,uBAAO97B,EAAS,KAAA,EACjB,SAAS,IACR,uBAAO+M,EAAK,KAAA,CAAA,GAEb8B,EAAAA,mBAWM,MAAA,SAXG,YAAJ,IAAIqnB,EAAa,MAAKxnB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EAAgB,QAAOmmC,EAAA,GACvDjkC,EAAAA,mBASM,MAAA,CATA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAc,uBAAO62E,EAAY,KAAA,CAAA,GACjD30E,EAAAA,mBAOM,MAAA,SANA,aAAJ,IAAIypB,EACH,MAAK5pB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,EACZ,uBAAO82E,EAAe,KAAA,EACtB,gBAAeG,EAAA,GAEhBj1E,EAAAA,WAA4BC,EAAA,OAAA,UAAA,CAArB,MAAA4D,CAAY,CAAA,CAAA,eAIzB3D,EAAAA,mBA8CM,MAAA,CA7CH,uBAAO00E,EAAY,KAAA,EACpB,KAAK,UACJ,aAAYW,GACZ,aAAYC,EAAA,IAEb1nD,EAAAA,UAAA,EAAA,EAAAhuB,EAuCW,mBAAAqsB,WAvCwB,KAAAC,EAAA,WAAA2oD,EAAA,MAAjB,CAAAlkC,EAAOtyD,wDAA4BA,GAAK,kBACxDuhB,qBAgCWqsB,EAAAA,SAAA,KAAAC,EAAA,WAhCgBykB,EAAVojC,mDAAuB,IAAAA,EAAO,IAAA,GAC5BD,EAAcC,EAAM,QAAA,6CACnCn0E,qBA4BS,SAAA,OA3BP,KAAK,SACJ,MAAKC,EAAAA,eAAA,EAAyC,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,EAAA,GAAsC,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA4B,SAAA,UAAA,CAAA,EAAAg2E,EAAcC,EAAM,UAAA,GAAkDD,EAAcC,EAAM,OAAA,CAAA,GAOlN,MAAOD,EAAcC,EAAM,OAAA,EAC3B,QAAY34B,EAAAA,cAAA7S,GAAAwrC,EAAO,QAAQpwE,CAAK,EAAA,CAAA,MAAA,CAAA,CAAA,GAEjC7D,aAeOC,EAAA,OAAA,UAfgBg0E,EAAO,IAAI,IAAK,MAAApwE,CAAY,EAAnD,IAeO,CAbGowE,EAAO,4BADfr0E,EAAAA,YAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUm1E,EAAO,aACjB,KAAMpwE,gCAGIowE,EAAO,oBADpBr0E,EAKQ,YAAAD,EAAA,MAAApO,EAAA,EAAA,OAHL,KAAM0iF,EAAO,KACb,MAAK7gC,EAAAA,eAAE4gC,EAAcC,EAAM,WAAA,CAAA,EAC3B,MAAOD,EAAcC,EAAM,WAAA,GAAA,oDAE9Bn0E,EAAAA,mBAEWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,EAAAA,gBAAAC,EAAA,gBAAA4zE,EAAO,IAAI,EAAA,CAAA,gCAOhB11F,IAAUw2F,EAAU,MAAC,OAAM,iBADnCn1E,EAAA,YAIWD,QAAA81E,EAAA,EAAA,OAFT,QAAA,GACC,UAAWhB,EAAe,KAAA,8ECpexBiB,GAAa96E,GAAW,CACnC,IAAK,OACL,YAAa,OACb,IAAK,OACL,IAAK,OACL,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,CAAC,OAAQ,MAAM,EACvB,SAAU,OACV,KAAMJ,EACN,KAAM,CAAC,OAAQ,OAAQ,QAAQ,EAC/B,WAAY,OACZ,QAASA,EACT,SAAU,CACR,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,YAAa,OACb,SAAU,OACV,OAAQ,OACR,OAAQC,GACR,WAAY,OACZ,eAAgBA,GAChB,YAAa,OACb,MAAO,OACP,OAAQkB,EAAkC,EAC1C,QAASA,EAAkC,EAC3C,UAAWA,EAAiC,CAC9C,CAAC,EAKYg6E,GAAkB/6E,GAAW,CACxC,QAASJ,EACT,QAASA,EACT,eAAgBC,GAChB,MAAO,OACP,UAAWkB,EAAoD,CACjE,CAAC,EAKYi6E,GAAmBh7E,GAAW,CACzC,OAAQJ,EACR,MAAO,OACP,QAAS,CAAC,OAAQ,KAAK,EACvB,SAAUC,GACV,YAAa,OACb,MAAO,OACP,SAAUkB,EAAqC,EAC/C,SAAUA,EAAgD,EAC1D,OAAQA,EAAgD,EACxD,OAAQA,EAAgD,EACxD,QAASA,EAAU,EACnB,OAAQA,EAAU,EAClB,OAAQA,EAAU,CACpB,CAAC,uJCrDK,MAAAlO,EAAQiM,GAAS,cADRsF,EAC+B,CAC5C,OAAQ,GACR,MAAO,EACP,QAAS,CACP,QAAS,GACT,OAAQ,EACV,EACA,SAAU,GACV,YAAa,KAAO,CAAA,GACpB,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKytB,EAAOC,EAIP1uB,EAAKtF,GAAc,cAAc,EACjC3B,EAAQU,GAAS,EAEjByH,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAChCmhD,EAAezvC,EAAAA,IAAI1R,EAAM,KAAK,EAE9B0/B,EAAShuB,EAAAA,IAAiC,EAE1C9N,EAAYvC,EAAAA,SAAS,IAClB,CAACkP,EAAG,IAAKA,EAAG,GAAG,YAAY,EAAGvQ,EAAM,SAAWuQ,EAAG,GAAG,SAAS,CAAC,CACvE,EACK63E,EAAW/mF,EAAAA,SAAS,IAAMxE,GAAY7T,GAAUgX,EAAM,OAAO,EAAIA,EAAM,QAAU,EAAE,CAAC,EACpFk3E,EAAe71E,EAAA,SAAS,IAAM8/C,EAAa,OAAS,CAAC,EACrDi2B,EAAe/1E,WAAS,IAAM8/C,EAAa,OAASinC,EAAS,MAAM,OAAS,CAAC,EAEnFx7E,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP6oB,EAAc,MAAQ7oB,CAAA,CAE1B,EACAgkB,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPu4D,EAAa,MAAQv4D,CAAA,CAEzB,EACAgkB,EAAAA,MAAM,IAAMw7E,EAAS,MAAM,OAAQC,CAAW,EAEjCv2E,EAAA,CACX,cAAAL,EACA,aAAA0vC,EACA,aAAA+1B,EACA,aAAAE,EACA,OAAA13C,CAAA,CACD,EAED,SAASktC,EAAU1uC,EAAiB,CAC9BzsB,EAAc,QAAUysB,IAE5BzsB,EAAc,MAAQysB,EAEtBc,EAAK,gBAAiBd,CAAM,EAClB/vB,EAAAnO,EAAM,SAAUk+B,CAAM,EAAA,CAGlC,SAASmqD,GAAc,CACRlnC,EAAA,MAAQxzD,GAAWwzD,EAAa,MAAO,EAAGinC,EAAS,MAAM,OAAS,CAAC,CAAA,CAGlF,SAAS/9C,GAAe,OACtB,MAAMzhD,EAAQu4D,EAAa,OAE3BpgD,EAAA2+B,EAAO,QAAP,MAAA3+B,EAAc,cACdi+B,EAAK,eAAgBp2C,CAAK,EAC1BulB,EAAUnO,EAAM,SAAUpX,EAAOw/F,EAAS,MAAMx/F,CAAK,CAAC,CAAA,CAGxD,SAASyzE,GAAa,CACpB,GAAI6a,EAAa,MAAO,OAExB,MAAMr3E,EAAOshD,EAAa,MAEbA,EAAA,QACDknC,EAAA,EACClnC,EAAA,QAAUthD,GAAQwqC,EAAa,EAClCl8B,EAAAnO,EAAM,OAAQmhD,EAAa,MAAOinC,EAAS,MAAMjnC,EAAa,KAAK,CAAC,CAAA,CAGhF,SAASmb,GAAa,CACpB,GAAI8a,EAAa,MAAO,OAExB,MAAMv3E,EAAOshD,EAAa,MAEbA,EAAA,QACDknC,EAAA,EACClnC,EAAA,QAAUthD,GAAQwqC,EAAa,EAClCl8B,EAAAnO,EAAM,OAAQmhD,EAAa,MAAOinC,EAAS,MAAMjnC,EAAa,KAAK,CAAC,CAAA,CAGhF,SAAS7jB,GAAc,CACrBsvC,EAAU,EAAK,EACfz+D,EAAUnO,EAAM,OAAO,CAAA,CAGzB,SAAS+R,GAAa,CACpB5D,EAAUnO,EAAM,MAAM,CAAA,CAGxB,SAASgS,GAAa,CACpB7D,EAAUnO,EAAM,MAAM,CAAA,6BAKtBmS,EAAAA,YAsESD,EAAA,MAAAq7D,EAAA,EAAA,CApEN,OAAQ97D,EAAa,MACrB,QAASS,EAAAA,MAAKlS,CAAA,EAAC,QACf,uBAAO4D,EAAS,KAAA,EACjB,SAAA,GACA,cAAA,GACC,SAAUsO,EAAAA,MAAKlS,CAAA,EAAC,SAChB,OAAM+R,EACN,OAAMC,EACN,SAAQ46D,CAAA,GAET,QAAA/mB,EAAA,QAAA,CAyDM,CApEI,KAAAlN,KAAI,kBAWdlmC,qBAyDM,MAAA,CAzDc,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAC9BW,EAAA,YAMSgB,QANTo2E,EAAA,EAAA51E,aAAgBR,QAMPlS,CAAA,EANa,YAAW,SAAM,SAAJ,IAAI0/B,CAAA,sBACrC,IAIO,CAJPntB,aAIOC,EAAA,OAAA,UAAA,CAJA,IAAK41E,EAAQ,MAACjnC,EAAY,KAAA,CAAA,EAAjC,IAIO,CAHLjwC,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAI,CAAA,IAASooF,EAAQ,MAACjnC,EAAY,KAAA,CAAA,CAAA,qBAC3E,IAAqC,CAArC1uC,EAAAA,mBAAqC,MAAA,CAA/B,IAAK21E,EAAQ,MAACjnC,EAAY,KAAA,CAAA,wDAItBinC,EAAA,MAAS,OAAM,iBAA/B/1E,EAAA,mBAmCWqsB,WAAA,CAAA,IAAA,GAAA,CAlCTjsB,EAAAA,mBAgBS,SAAA,CAfP,KAAK,SACJ,MAAKH,EAAA,eAAA,CAAGJ,EAAAA,SAAG,WAAYglE,EAAY,OAAIhlE,QAAE3B,CAAA,EAAC,IAAG,OAAA,UAAA,CAAA,CAAA,EAC7C,wBAAY8rD,EAAU,CAAA,MAAA,CAAA,CAAA,GAEvB9pD,aAUOC,EAVY,OAAA,OAAA,CAAA,SAAU0kE,EAAA,OAA7B,IAUO,CATLhmE,cAQWgB,EAAAA,MAAAb,EAAA,EAAA,CARA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,eAAkBk3E,EAAY,KAAA,CAAA,qBACpE,IAMM,CANNzkE,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,CAAA,GAChBW,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,UAAS,CACtB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,UAAU,OAAK,GAAA,IAC/B,MAAM,oEAMhBmJ,EAAAA,mBAgBS,SAAA,CAfP,KAAK,SACJ,MAAKH,EAAA,eAAA,CAAGJ,EAAAA,SAAG,WAAYklE,EAAY,OAAIllE,QAAE3B,CAAA,EAAC,IAAG,OAAA,UAAA,CAAA,CAAA,EAC7C,wBAAY+rD,EAAU,CAAA,MAAA,CAAA,CAAA,GAEvB/pD,aAUOC,EAVY,OAAA,OAAA,CAAA,SAAU4kE,EAAA,OAA7B,IAUO,CATLlmE,cAQWgB,EAAAA,MAAAb,EAAA,EAAA,CARA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,eAAkBo3E,EAAY,KAAA,CAAA,qBACpE,IAMM,CANN3kE,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,CAAA,GAChBW,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,WAAU,CACvB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,WAAW,OAAK,GAAA,IAChC,MAAM,sGAOlBmJ,EAAAA,mBAYS,SAAA,CAZD,KAAK,SAAU,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EAAY,wBAAY+sB,EAAW,CAAA,MAAA,CAAA,CAAA,GACpE/qB,EAAAA,WAUOC,oBAVP,IAUO,CATLtB,cAQWgB,EAAAA,MAAAb,EAAA,EAAA,CARA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAMM,CANNyS,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,eAAA,CAAA,CAAA,GAChBW,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,MAAK,CAClB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,MAAM,OAAK,GAAA,IAC3B,MAAM,4EAnDLqvC,CAAI,0DCvIR4vC,GAAgBp7E,GAAW,CACtC,KAAMI,GACN,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,CAAC,OAAQ,MAAM,EACvB,OAAQ,OACR,IAAK,OACL,UAAWR,EACX,MAAOA,EACP,UAAWyB,GACX,UAAW,OACX,MAAOzB,EACP,OAAQA,EACR,MAAOA,EACP,OAAQ,OACR,QAASA,CACX,CAAC,EAKYy7E,GAAqBr7E,GAAW,CAC3C,KAAMI,GACN,IAAKP,GACL,QAAS,OACT,UAAWD,EACX,MAAOA,EACP,OAAQA,EACR,MAAOA,EACP,QAASA,CACX,CAAC,ECrBYu6C,GAAc,6BCLZ73C,qBAAgB,CAC7BjX,KAAM,WACNi6C,aAAc,GACdzyC,MAAOuoF,GACP74E,MAAMC,EAAQ,CAAEC,MAAAA,EAAO1L,MAAAA,CAAM,EAAG,CAC9B,MAAMlE,EAAQiM,GAAS,WAAY0D,EAAQ,CACzC3lB,KAAM,KACNm0B,MAAO,KACPC,OAAQ,KACRqqE,OAAQ,CACN54E,QAAS,EACTtD,UAAY3jB,GAAkBA,EAAQ,CACvC,EACDyvD,IAAK,MACL2hC,UAAW,KACX1nB,MAAO,GACPo2B,UAAWj6E,GAAgB,EAC3Bk6E,UAAW,EACXhtE,MAAO,KACP+/B,OAAQ,KACRrxC,MAAO,KACPu+E,OAAQ,EACR3iD,QAAS,IACX,CAAC,EAEKuhB,EAAa3lD,EAAAA,OAAOylD,GAAa,EAAS,EAE1C/2C,EAAKtF,GAAc,UAAU,EAC7B3B,EAAQU,GAAU,EAElBgwE,EAAY34E,EAAAA,SAAS,IAClBrB,EAAMg6E,WAAaxyB,EAAWwyB,WAAa,EACnD,EACKr+D,EAAQta,EAAAA,SAAS,IACdrB,EAAM2b,OAAS6rC,EAAW7rC,OAAS,EAC3C,EACK+/B,EAASr6C,EAAAA,SAAS,IACfrB,EAAM07C,QAAU8L,EAAW9L,QAAU,EAC7C,EACKrxC,EAAQhJ,EAAAA,SAAS,IACdrB,EAAMqK,OAASm9C,EAAWn9C,OAAS,EAC3C,EACK47B,EAAU5kC,EAAAA,SAAS,IAChBrB,EAAMimC,SAAWuhB,EAAWvhB,SAAW,EAC/C,EACKoS,EAAMh3C,EAAAA,SAAS,IACZrB,EAAMq4C,KAAOmP,EAAWqhC,SAAW,KAC3C,EACKjlF,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGnB,OAAOlD,KAAKo7C,CAAU,EAAEj9D,QAAUyV,EAAM4oC,QAC5D,CAACr4B,EAAGE,GAAGzQ,EAAMhW,IAAI,CAAC,EAAGgW,EAAMhW,OAAQw9D,GAAAA,YAAAA,EAAYx9D,MAC/C,CAACumB,EAAGE,GAAG,OAAO,CAAC,EAAGpG,EAAMzhB,MACxB,CAAC2nB,EAAGE,GAAG,OAAO,CAAC,EAAGzQ,EAAMsyD,MACxB,CAAC/hD,EAAGE,GAAG,OAAO,CAAC,EAAGkL,EAAM/yB,OAAS,CAAC8yD,EAAO9yD,MACzC,CAAC2nB,EAAGE,GAAG,QAAQ,CAAC,EAAGirC,EAAO9yD,MAC1B,CAAC2nB,EAAGE,GAAG,WAAW,CAAC,EAAGupE,EAAUpxF,KACjC,EACF,EACK+nB,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAgC,CAAE,EAExC,OAAI3Q,EAAMme,QAAU,OAClBxN,EAAMJ,EAAGtG,GAAG,OAAO,CAAC,EAAI6+E,EAAU9oF,EAAMme,KAAK,GAG3Cne,EAAMoe,SAAW,OACnBzN,EAAMJ,EAAGtG,GAAG,QAAQ,CAAC,EAAI6+E,EAAU9oF,EAAMoe,MAAM,GAG7Cpe,EAAM4oF,SACRj4E,EAAMJ,EAAGtG,GAAG,QAAQ,CAAC,EAAI6+E,EAAU9oF,EAAM4oF,MAAM,GAG1Cj4E,CACT,CAAC,EAED,SAASm4E,EAAUlgG,EAAwB,CACzC,OAAI,OAAOA,GAAU,SACZ,GAAGA,CAAK,MAGjBA,EAAQA,EAAMssE,KAAM,EAEhB,MAAM6zB,KAAKngG,CAAK,EACX,GAAGA,CAAK,KAGVA,EACT,CAEA,SAASogG,GAAiB,CACxB,MAAM/pC,EAAU5G,EAAIzvD,OAAS,MAE7B,OAAAsoB,cAAA+tC,EAAAvsC,EAAA,WAEQ9C,EAAK,CAAA,MACF,CAAChM,EAAUhb,MAAOgnB,EAAMmB,KAAK,EAAC,MAC9B,CAACJ,EAAM/nB,MAAOgnB,EAAMe,KAAK,CAAC,CAAA,EAAA,CAAAd,QAAAA,IAAA,CAEhC7P,EAAMsyD,MAAKphD,EAAAA,YAAApN,GAAA4O,aAEJpJ,EAAM1gB,MAAM0pE,MAAK,CAAA,KACftyD,EAAM0oF,WAAap/E,EAAM1gB,MAAM0pE,MAAM/oD,KAAI,MACxCvJ,EAAM2oF,SAAS,CAAA,EAAA,IAAA,EAEtB,IAAI,CAAA,CAAA,CAGd,CAEA,MAAO,IACA1iD,EAAQr9C,MAIToX,EAAMyoF,OAAS,EACV7qC,MAAM9e,KAAK,CAAEv0C,OAAQyV,EAAMyoF,MAAO,EAAG,IAAMO,EAAc,CAAE,EAG7DA,EAAgB,EAPd73E,EAAU,WAACjN,EAAO,SAAS,CASxC,CACF,CAAC,ECrFYojD,GAAc,0BAEdC,GAAkB,OAAO,OAAyB,CAC7D,OACA,UACA,QACA,OACA,YACF,CAAC,0ICzCD,MAAM0hC,EAAgBrsF,GAAkB,EAKlCoD,EAAQiM,GAAS,QADRsF,EACyB,CACtC,IAAK,CACH,QAAS,GACT,OAAQ,EACV,EACA,YAAa,GACb,IAAK,GACL,IAAK,CACH,QAAS,QACT,UAAW3oB,GAAS2+D,GAAgB,SAAS3+D,CAAK,CACpD,EACA,MAAO,GACP,OAAQ,GACR,SAAU,KAAO,CAAA,GACjB,KAAM,GACN,KAAM,CACJ,QAAS,KACT,OAAQ,EACV,EACA,WAAY,GACZ,QAAS,GACT,SAAU,GACV,YAAa,GACb,SAAU,GACV,OAAQ,EACR,OAAQ,GACR,WAAY,GACZ,eAAgB,KAChB,YAAa,KAAO,CAAA,GACpB,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsb,EAAQsN,EAAAA,SAAA,EAERg2C,EAAa3lD,EAAAA,OAAOylD,GAAa,IAAI,EAErC/2C,EAAKtF,GAAc,OAAO,EAC1B3I,EAASI,GAAU,OAAO,EAE1BwmF,EAAUx3E,MAAIu3E,CAAa,EAC3BhjD,EAAUv0B,EAAAA,IAAIw3E,EAAQ,KAAK,EAC3BC,EAAaz3E,MAAI,EAAE,EACnB+1C,EAAW/1C,MAAI,EAAK,EACpBg2C,EAAeh2C,MAAI,EAAK,EACxB03E,EAAe13E,MAAI,EAAK,EACxBirB,EAASjrB,MAAI,EAAK,EAElBuF,EAAUvF,EAAAA,IAAiB,EAE3B23E,EAAYhoF,EAAAA,SAAS,IAClBomD,EAAS,QAAU,CAACznD,EAAM,aAAe0nD,EAAa,MAC9D,EACK4hC,EAAajoF,EAAAA,SAAS,IAAM,CAACmmD,GAAcxnD,EAAM,OAAO,EACxD4D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG01B,EAAQ,MAC5B,CAAC11B,EAAG,GAAG,OAAO,CAAC,EAAG84E,EAAU,MAC5B,CAAC94E,EAAG,GAAG,SAAS,CAAC,GAAGi3C,GAAA,YAAAA,EAAY,UAAW8hC,EAAW,KAAA,CAE1D,CACD,EACK34E,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAgC,CACpC,MAAOpW,GAAUyF,EAAM,KAAK,EAC5B,OAAQzF,GAAUyF,EAAM,MAAM,EAC9B,CAACuQ,EAAG,GAAG,KAAK,CAAC,EAAGvQ,EAAM,IACtB,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OAAS,GAAGA,EAAM,MAAM,KAAO,EAC1D,EAEA,OAAIA,EAAM,QAAU,OAAOA,EAAM,QAAW,WAC1C2Q,EAAMJ,EAAG,GAAG,SAAS,CAAC,EAAIvQ,EAAM,QAG3B2Q,CAAA,CACR,EACK44E,EAAWloF,EAAAA,SAAS,IAAM,OAAA,OAAArB,EAAM,OAAQe,EAAAf,EAAM,WAAN,YAAAe,EAAgB,KAAc,EACtEyoF,EAAanoF,EAAAA,SAAS,IACnBs7B,EAAO,OAAUssD,GAAiBjpF,EAAM,KAAQ,OAAS,MACjE,EACKuoF,EAAgBlnF,EAAAA,SAAS,IACtB,OAAOrB,EAAM,UAAa,SAC7B,OAAO,OAAO,CAAE,UAAW,EAAA,EAAQA,EAAM,QAAQ,EACjD,CAAE,UAAW,EAAK,CACvB,EAED4M,QAAM28E,EAAmB3gG,GAAA,CACvBq9C,EAAQ,MAAQijD,EAAQ,MACxBC,EAAW,MAAQvgG,EACnB6+D,EAAS,MAAQ,GACjBC,EAAa,MAAQ,EAAA,CACtB,EACD96C,EAAA,MACE,IAAM5M,EAAM,YACHpX,GAAA,CACP8+D,EAAa,MAAQ,GAEjBD,EAAS,QACXxhB,EAAQ,MAAQijD,EAAQ,MACxBC,EAAW,MAAQvgG,EACrB,CAEJ,EAEAugG,EAAW,MAAQI,EAAS,MAE5B,MAAMnzE,EAAoBtJ,EAAAA,SAAS,CACjC,IAAKzL,EAAS,SAAA,IAAMrB,EAAM,YAAcmpF,EAAW,KAAK,EACxD,MAAO,EACP,MAAO,CAAA,CACR,EAED,GAAI3hC,EAAY,CACdA,EAAW,aAAapxC,CAAK,EAEvB,MAAAxC,EAAYlI,EAAAA,YAAY,IAAM,CAClCixB,EAAO,MAAQ,CAAC6qB,EAAW,SAAWpxC,EAAM,MAAQ,CAAA,CACrD,EAEDxB,EAAAA,gBAAgB,IAAM,CACVhB,EAAA,EACV4zC,EAAW,aAAapxC,CAAK,CAAA,CAC9B,CAAA,CAGH,GAAI,CAAC6yE,EAAe,CACd,IAAAlxE,EAEE,MAAAnE,EAAYlI,EAAAA,YAAY,IAAM,CAIlC,GAHaqM,GAAA,MAAAA,IACAA,EAAA,OAET,CAACvvB,GAAU,OAET,MAAA+Q,EACJ,OAAOyG,EAAM,MAAS,SAAW,SAAS,cAAcA,EAAM,IAAI,EAAKA,EAAM,KAE3EA,EAAM,OACR+X,EAAaP,GAAgB,CAC3B,KAAM,OAAOje,GAAS,SAAWA,EAAO,SAAS,gBACjD,WAAYyG,EAAM,WAClB,OAAQiX,EACR,QAAS,IAAM,CACAc,GAAA,MAAAA,IACAA,EAAA,OACbmxE,EAAQ,MAAQ,GAChBjjD,EAAQ,MAAQ,EAAA,CAEnB,CAAA,EAAE,WACL,CACD,EAEDrxB,EAAAA,gBAAgB,IAAM,CACVhB,EAAA,EACGmE,GAAA,MAAAA,GAAA,CACd,CAAA,CAGUjG,EAAA,CACX,QAAAm0B,EACA,aAAAyhB,EACA,aAAA0hC,EACA,OAAAzsD,EACA,QAAA1lB,CAAA,CACD,EAED,SAASwyE,EAAWvwF,EAAc,CAChC+sC,EAAQ,MAAQ,IAEZ,CAACjmC,EAAM,aAAempF,EAAW,QAAUnpF,EAAM,cACzCmO,EAAAnO,EAAM,OAAQ9G,CAAK,CAC/B,CAGF,SAAS2uD,EAAY3uD,EAAc,CACjC,GAAI8G,EAAM,YAAa,CACjB,GAAAmpF,EAAW,QAAUnpF,EAAM,YAAa,CAC1CimC,EAAQ,MAAQ,GAChByhB,EAAa,MAAQ,GAErB,MAAA,CAGFyhC,EAAW,MAAQnpF,EAAM,WAAA,MAEzBimC,EAAQ,MAAQ,GAGlBwhB,EAAS,MAAQ,GACPt5C,EAAAnO,EAAM,QAAS9G,CAAK,CAAA,CAGhC,SAASwwF,GAAgB,CACvB,GAAI,CAACliC,EAAY,CACXxnD,EAAM,UACRopF,EAAa,MAAQ,IAGvBj7E,EAAUnO,EAAM,UAAWA,EAAM,YAAcmpF,EAAW,KAAK,EAC/D,MAAA,CAGF3hC,EAAW,cAAcpxC,CAAK,CAAA,8CAK9B/D,EAAAA,mBAwDM,MAAA,SAtDA,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EACjB,KAAK,OACJ,uBAAO+M,EAAK,KAAA,CAAA,GAEDs1B,EAAO,MAAnB1zB,EAAA,WAcOC,+BAdP,IAcO,CAbLtB,cAYWgB,EAAAA,MAAAb,EAAA,EAAA,CAZA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,WAAA,qBAC/B,IAKY,CAJJkS,QAAAlS,CAAA,EAAM,wBADdmS,EAKY,YAAAD,EAAA,MAAAy3E,EAAA,EALZj3E,EAAAA,WAKY,CAAA,IAAA,CAAA,EAHF61E,EAAa,MAAA,CACpB,MAAOr2E,EAAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,EACb,MAAA,EAAA,sCAGA8B,EAAA,mBAEO,OAAA,OAFA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAAA,EACdqC,EAAA,gBAAAV,QAAAlS,CAAA,EAAM,aAAekS,EAAA,MAAA5P,CAAA,EAAO,WAAW,EAAA,CAAA,EAAA,0BAKjC+mF,EAAS,MAA1B92E,EAAAA,WAMOC,yBANP,IAMO,CALLtB,cAIWgB,EAAAA,MAAAb,EAAA,EAAA,CAJA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAEO,CAFPyS,EAAAA,mBAEO,OAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,qBACd2B,EAAK,MAAAlS,CAAA,EAAC,UAAYkS,EAAA,MAAAlS,CAAA,EAAM,KAAOkS,EAAM,MAAA5P,CAAA,EAAC,KAAK,EAAA,CAAA,CAAA,sDAK5C4mF,EAAA,QAAYG,EAAS,OAD7BhpD,EAAAA,UAAA,EAAAhuB,qBAaE,MAbFK,EAAAA,WAaE,CAXQ,IAAA,CAAA,EAAAR,EAAAA,MAAAlS,CAAA,EAAM,SAAQ,CACrB,MAAOkS,EAAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,EACZ,IAAK44E,EAAU,MACf,IAAKj3E,EAAAA,MAAKlS,CAAA,EAAC,IACX,MAAOkS,EAAA,MAAAlS,CAAA,EAAM,OAAS,OACtB,OAAQkS,EAAA,MAAAlS,CAAA,EAAM,QAAU,OACxB,QAASwpF,EAAU,MACnB,aAAYt3E,EAAAA,MAAKlS,CAAA,EAAC,IAClB,OAAMypF,EACN,QAAO5hC,EACP,QAAO6hC,CAAA,4CAGFJ,EAAU,qBADlBn3E,EAAAA,YAYcD,EAAAA,MAAA03E,EAAA,EAZdl3E,EAAAA,WAYc,CAAA,IAAA,CAAA,EAVJizE,EAAW,YAAA,CACX,OAAQyD,EAAY,uCAAZA,EAAY,MAAApuC,GAC3B,WAAU9oC,EAAAA,MAAAlS,CAAA,EAAM,YAAcmpF,EAAU,MACxC,SAAUj3E,EAAAA,MAAKlS,CAAA,EAAC,sCAEDkE,EAAM,SAAWgO,EAAA,SAAM,MAAM,cAAU,UACrD,GAAA2zC,EAAA,QAAA,CAEO,CAHyD,IAAAoP,KAAG,CACnE1iD,aAEOC,EAFe,OAAA,UAAA,CAAA,IAAAyiD,GAAtB,IAEO,CADL/jD,cAAqEgB,EAAAA,MAAAb,EAAA,EAAA,CAA1D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,MAAQ,IAAAi1D,CAAG,yIAnDnDt4B,EAAM,KAAA,CAAA,gGCxNb,MAAA38B,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,QAAS,GACT,QAAS,GACT,eAAgB,KAChB,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKrN,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,aAAa,EAEhCwG,EAAgBC,MAAI,EAAK,EACzByvC,EAAezvC,MAAI,CAAC,EACpBm4E,EAAc/8E,EAAAA,SAAa,IAAA,GAAiB,EAE5ClJ,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,YAAY,EAClB,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,OAAA,CAE9B,CACD,EACK8pF,EAAUzoF,EAAAA,SAAS,IAAM,MAAM,KAAKwoF,CAAW,EAAE,IAAIzzE,GAASA,EAAM,GAAG,CAAC,EAExE2zE,EAAetuF,GAAc,IAAM,CACvC,MAAMlK,EAAQs4F,EAAY,KAE1B,MAAM,KAAKA,CAAW,EAAE,QAAQ,CAAC9xF,EAAMjH,IAAU,CAC/CiH,EAAK,MAAQjH,EACbiH,EAAK,MAAQxG,CAAA,CACd,CAAA,CACF,EAEDuQ,EAAA,QACEwlD,GACAx6C,WAAS,CACP,QAASsxB,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,QAASo+B,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,aAAAypD,EACA,aAAAC,EACA,cAAAggC,CACD,CAAA,CACH,EAEa53E,EAAA,CAAE,cAAAL,EAAe,aAAA0vC,EAAc,EAE5C,SAASsI,EAAa1xD,EAAkB,CACtC8xF,EAAY,IAAI9xF,CAAI,EACPgyF,EAAA,CAAA,CAGf,SAASrgC,EAAa3xD,EAAkB,CACtC8xF,EAAY,OAAO9xF,CAAI,EACVgyF,EAAA,CAAA,CAGf,SAASL,EAAc3xF,EAAkB,CACvCopD,EAAa,MAAQppD,EAAK,MAC1B0Z,EAAc,MAAQ,GAEZtD,EAAAnO,EAAM,UAAWjI,EAAK,IAAK,MAAM,KAAK+xF,EAAQ,KAAK,CAAC,CAAA,6BAK9Dz3E,EAAA,mBAeM,MAAA,CAfA,uBAAOzO,EAAS,KAAA,CAAA,GACpB2O,aAAaC,EAAA,OAAA,SAAA,EAELN,QAAAlS,CAAA,EAAM,qBADd,EAAAmS,cAYcD,EAAAA,MAAA03E,EAAA,EAAA,OAVJ,OAAQn4E,EAAa,uCAAbA,EAAa,MAAAupC,GACrB,MAAOmG,EAAY,sCAAZA,EAAY,MAAAnG,GAC1B,WAAU8uC,EAAO,MACjB,SAAU53E,EAAAA,MAAKlS,CAAA,EAAC,qCAEDkE,EAAM,SAAWgO,EAAA,SAAM,MAAM,cAAU,UACrD,GAAA2zC,EAAA,QAAA,CAEO,CAHyD,IAAAoP,KAAG,CACnE1iD,aAEOC,EAFe,OAAA,UAAA,CAAA,IAAAyiD,GAAtB,IAEO,CADL/jD,cAAqEgB,EAAAA,MAAAb,EAAA,EAAA,CAA1D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,MAAQ,IAAAi1D,CAAG,yIC7E1D+0B,GAAiB,CACrB,KAAM,CAAC,OAAQ,QAAS,QAAQ,EAGhC,QAAS,IACX,EAEaC,GAAc98E,GAAW,CACpC,OAAQiB,GAAmB,EAC3B,QAASrB,EACT,OAAQA,EACR,IAAK,OACL,MAAO,OACP,UAAW,OACX,KAAM,OACN,SAAU,OACV,OAAQ,MACR,KAAM,OACN,QAAS,MACT,SAAUA,EACV,QAASA,EACT,aAAcA,EACd,SAAU,OACV,YAAai9E,GACb,WAAYA,GACZ,UAAW,OACX,MAAO,MACP,OAAQ,MACR,MAAO,OACP,eAAgBA,GAChB,cAAeA,GACf,SAAUj9E,EACV,UAAWA,EACX,UAAWA,EACX,aAAc,OACd,SAAUA,EACV,SAAUA,EACV,iBAAkBmB,EAAuC,EACzD,gBAAiBA,EAAsC,EACvD,YAAaA,EAAuC,EACpD,aAAcA,EAA8C,EAC5D,aAAcA,EAA8C,EAC5D,YAAaA,EAA0C,EACvD,cAAeA,EAAmC,EAClD,cAAeA,EAAqC,EACpD,gBAAiBA,EAAsB,CACzC,CAAC,EAKYg8E,GAAmB/8E,GAAW,CACzC,IAAK,OACL,SAAUJ,EACV,QAASA,EACT,MAAO,MACP,UAAW,OACX,KAAM,OACN,SAAU,OACV,MAAOC,GACP,SAAU,OACV,iBAAkBkB,EAAuC,EACzD,gBAAiBA,EAAsC,EACvD,YAAaA,EAAuC,EACpD,aAAcA,EAA8C,CAC9D,CAAC,EAKYi8E,GAAoBh9E,GAAW,CAC1C,OAAQiB,GAAmB,EAC3B,IAAK,OACL,KAAM,OACN,SAAU,OACV,KAAM,OACN,YAAarB,EACb,aAAcA,EACd,OAAQ,MACR,QAAS,MACT,SAAU,OACV,OAAQ,MACR,MAAO,OACP,MAAO,OACP,UAAW,OACX,SAAUA,EACV,YAAamB,EAA0C,EACvD,cAAeA,EAAmC,EAClD,aAAcA,EAA8C,EAC5D,YAAaA,EAAuC,EACpD,gBAAiBA,EAAqC,EACtD,iBAAkBA,EAAuC,EACzD,gBAAiBA,EAAsC,EACvD,aAAcA,EAA8C,EAC5D,cAAeA,EAAqC,CACtD,CAAC,EAKYk8E,GAAkBj9E,GAAW,CACxC,IAAK,OACL,MAAOJ,CACT,CAAC,EAKYs9E,GAAoBl9E,GAAW,CAC1C,IAAK,OACL,UAAW,OACX,MAAO,MACP,cAAeH,EACjB,CAAC,ECNYs9E,GAAe,sBChHtBC,GAAS/hG,GAAW,SAAS,gBAAkB,OAC/ComB,GAAY27E,IAAU,iBAAiBA,EAAM,EAE5C,SAASC,GAAoB5hG,EAAc,CAC5C,GAAA,CAAC2hG,IAAU,CAAC37E,GAAW,OAE3B,MAAM67E,EAAmC,CACvC,MAAO,CAAC,EACR,QAAS,CAAC,EACV,KAAM,CAAA,CACR,EACMxtD,EAAQ5vC,GACZuhB,GAAU,iBAAiB,mBAAmB,GAAK,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,CAC9E,EACMitC,EAAQxuD,GACZuhB,GAAU,iBAAiB,mBAAmB,GAAK,CAAE,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,CAAE,CACpF,EACM+B,EAAQ45E,GAAO,MAErB,QAASngG,EAAI,EAAGA,EAAI,GAAI,EAAEA,EAAG,CAC3B,MAAMsgG,EAAQx7F,GAAS2sD,EAAOjzD,EAAOwB,EAAI,EAAG,EAAE,SAAS,EACjDqiD,EAAU58C,GAAYjH,EAAOqJ,GAAQ,EAAI7H,EAAI,GAAK,CAAC,CAAC,EAAE,SAAS,EAErEumB,EAAM,YAAY,6BAA6BvmB,CAAC,GAAIsgG,CAAK,EACzD/5E,EAAM,YAAY,+BAA+BvmB,CAAC,GAAIqiD,CAAO,EAEtDg+C,EAAA,MAAM,KAAKC,CAAK,EAChBD,EAAA,QAAQ,KAAKh+C,CAAO,CAAA,CAG7B,QAASriD,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,CAC1B,MAAMugG,EAAOz7F,GAAS+tC,EAAOr0C,EAAOwB,EAAI,EAAG,EAAE,SAAS,EAEtDumB,EAAM,YAAY,4BAA4BvmB,CAAC,GAAIugG,CAAI,EAChDF,EAAA,KAAK,KAAKE,CAAI,CAAA,CAGvB,OAAAh6E,EAAM,YAAY,2BAA4B,GAAG/nB,CAAK,EAAE,EAEjD6hG,CACT,CAEO,SAASG,IAAiB,CACxB,OAAA/oF,EAAA,OACLyoF,GACAx9E,WAAS,CACP,SAAU,GACV,OAAQ,GACR,QAAS,GACT,QAAS,EACT,aAAc,GACd,cAAe,GACf,UAAW,GACX,SAAU,GACV,QAAS,GACT,UAAW,GACX,QAAS,OAAO,OAAO,EAAE,EACzB,aAAcljB,EACf,CAAA,CACH,CACF,CAEA,MAAM82C,GAAc,OAAO,OAAqB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAK,CAAC,EAE9E,SAASmqD,GAAc7nB,EAAkD,CACxE,MAAArjE,EAAU+R,MAAI,EAAK,EACnB8wC,EAAgB9wC,MAAI,CAAC,EAErBxX,EAAgB1R,IAAY,iBAAiB,SAAS,eAAe,EACrEsiG,EAAgBzpF,EAAAA,SAAS,IAAM,CAI/B,GAFUmhD,EAAA,MAEV,OAAOwgB,EAAM,OAAU,YAActiC,GAAY,SAASsiC,EAAM,KAAY,EAAG,CACjF,MAAM+nB,EAAY/nB,EAAM,QAAU,KAAO,KAAOA,EAAM,MAElD,GAAA+nB,IAAcloB,GAAkB,MAAc,MAAA,GAE5C,MAAAM,EACJjpE,GAAiBA,EAAc,iBAAiB,qBAAqB6wF,CAAS,EAAE,EAAE,KAAK,EAElF,OAAA5nB,GAAS,mBAAmBA,CAAK,EAAA,CAG1C,OAAOH,EAAM,KAAA,CACd,EAED,IAAI7oD,EAAY,GACZ6wE,EAEJ,MAAMtyE,EAAS,IAAM,CACf,GAAA,OAAOoyE,EAAc,OAAU,UAAW,CAC5CnrF,EAAQ,MAAQmrF,EAAc,MAC9B,MAAA,CAGF,GAAI,CAACA,EAAc,OAASA,EAAc,QAAU,MAAO,CACzDnrF,EAAQ,MAAQ,GAChB,MAAA,CAGE,GAAAmrF,EAAc,QAAU,MAAO,CACjCnrF,EAAQ,MAAQ,GAChB,MAAA,CAGE,GAAA,OAAOmrF,EAAc,OAAU,WAAY,CAC7CnrF,EAAQ,MAAQmrF,EAAc,MAAMjoB,GAAkB,KAAK,EAC3D,MAAA,CAGE1oD,IACW6wE,EAAA,WAAWF,EAAc,KAAK,EAC/BE,GAAA,MAAAA,EAAA,iBAAiB,SAAUtyE,IAGzC/Y,EAAQ,MAAQqrF,EAAY,OAC9B,EAEAp+E,OAAAA,EAAA,MAAMk+E,EAAe,IAAM,CAClBpyE,EAAA,CAAA,CACR,EAEDjE,EAAAA,UAAU,IAAM,CACd,EAAE+tC,EAAc,MACJroC,EAAA,GACLzB,EAAA,CAAA,CACR,EAED9D,EAAAA,gBAAgB,IAAM,CACRuF,EAAA,GACA6wE,GAAA,MAAAA,EAAA,oBAAoB,SAAUtyE,GAC7BsyE,EAAA,MAAA,CACd,EAEMrrF,CACT,CAEO,SAASsrF,IAAmB,CAC3B,MAAAz/E,EAAUkG,MAAI,CAAC,EAErB+C,OAAAA,EAAAA,UAAU,IAAM,CACNjJ,EAAA,OAAA,CACT,EACD0/E,EAAAA,UAAU,IAAM,CACN1/E,EAAA,OAAA,CACT,EAEMA,CACT,CC3JA,MAAeiE,qBAAgB,CAC7BjX,KAAM,aACNwH,MAAOoqF,GACP16E,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,aAAc0D,EAAQ,CAC3C0oC,IAAK,OACLtgB,MAAO,EACT,CAAC,EAEKxnB,EAAKtF,GAAc,QAAQ,EAC3BmL,EAAQw0E,GAAgB,EAExBhnF,EAAYvC,EAAAA,SAAS,IAClB,CAACkP,EAAGg8B,GAAG,MAAM,EAAGvsC,EAAM+3B,OAASxnB,EAAGm8B,IAAI,OAAQ,OAAO,EAAGt2B,EAAMzS,QAAQwnF,IAAI,CAClF,EAED,MAAO,IAAM,CACX,MAAM9wC,EAAar6C,EAAMq4C,KAAO,OAEhC,OAAAnnC,EAAAA,YAAAmpC,EAAA,CAAA,MAAyBz2C,EAAUhb,KAAK,EAAA,CAAAinB,QAAAA,IAAAA,OAAA,QAAG3L,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,EAAA,CAAA,CAC7D,CACH,CACF,CAAC,ECpBYknF,GAAYj+E,GAAW,CAClC,OAAQ,OACR,UAAWJ,EACX,WAAY,OACZ,QAASA,EACT,WAAYA,EACZ,SAAUC,GACV,QAAS,OACT,UAAW,OACX,eAAgBD,EAChB,QAAS,MACT,OAAQ,OACR,YAAaA,EACb,OAAQ,CAAC,OAAQ,MAAM,EACvB,MAAOyB,GACP,MAAO,OACP,SAAUN,EAA8C,EACxD,SAAUA,EAA8C,EACxD,SAAUA,EAA8C,CAC1D,CAAC,EAKYm9E,GAAgBl+E,GAAW,CACtC,MAAO,OACP,KAAMqB,GACN,UAAW,OACX,SAAUzB,EACV,SAAUC,GACV,QAAS,OACT,eAAgB,OAChB,KAAM,OACN,SAAU,MACV,MAAO,CAAC,OAAQ,MAAM,EACtB,MAAOwB,GACP,MAAO,OACP,SAAUN,EAAU,CACtB,CAAC,EAKYo9E,GAAiBn+E,GAAW,CACvC,MAAO,OACP,SAAU,KACZ,CAAC,EC+CYo+E,GAAkB,wBAClBC,GAAmB,yBACnBC,GAAa,mBC7DpBC,GAAYC,EAAAA,qBAAqB,IAAM,8BAAsB,EAE7DC,GAAWn8E,EAAAA,gBAAgB,CAC/BjX,KAAM,WACNwH,MAAOqrF,GACPxlD,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO4hC,OAAAA,CAAO,EAAG,CAC/B,MAAM9lC,EAAQiM,GAAS,WAAY0D,EAAQ,CACzCM,MAAO,CACLJ,QAAS,KACTC,OAAQ,EACT,EACDvG,KAAMkF,GAAgB,EACtBW,UAAW,KACXyE,SAAU,GACVmhB,SAAU,KACVxc,QAAS,KACTikC,eAAgB,KAChB8M,KAAM,KACNzqD,SAAU,CACR+Q,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACT,EACDw5C,MAAO,KACPhpC,MAAO,KACPpc,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEK2nF,EAAYhqF,EAAAA,OAAO4pF,GAAY,IAAI,EACnCK,EAAkBjqF,EAAAA,OAAO0pF,GAAiB,IAAI,EAC9C/jC,EAAa3lD,EAAAA,OAAO2pF,GAAkB,IAAI,EAE1Cj7E,EAAKtF,GAAc,MAAM,EACzB3B,EAAQU,GAAU,EAClBozC,EAAar7C,GAAe,EAE5B,CAAEszB,MAAAA,CAAO,EAAGX,GAAQ,EAEpB47C,EAAY//D,EAAGg8B,GAAG,MAAM,EACxBnwB,EAAY1K,EAAAA,IAAe2jB,EAAMzsC,MAAQ,aAAe,aAAa,EACrEmjG,EAAgBr6E,EAAG,IAAC,EAAK,EACzBymC,EAAWzmC,EAAG,IAAC,EAAK,EACpBs6E,EAAct6E,EAAG,IAAC,EAAK,EACvBu6E,EAAav6E,EAAG,IAAC,EAAK,EAEtBusB,EAAS58B,EAAAA,SAAS,MAAOyqF,GAAAA,YAAAA,EAAiB7tD,SAAU,GAAK,CAAC,EAC1DiuD,EAAe7qF,EAAAA,SAAS,IAAMrB,EAAMg1B,WAAY62D,GAAAA,YAAAA,EAAW72D,WAAY,EAAK,EAC5Em3D,EAAa9qF,EAAAA,SAAS,IAAOyqF,EAAkBA,EAAgB92D,SAAW,EAAM,EAChFA,EAAW3zB,EAAAA,SAAS,IAAM,CAAC8qF,EAAWvjG,OAASsjG,EAAatjG,KAAK,EACjEwjG,EAAa/qF,EAAQ,SAAC,KAAMwqF,GAAAA,YAAAA,EAAWO,aAAc,OAAO,EAE5Dn1E,EAAU7C,GAAgB4pC,EAAkB,EAC5C9oB,EAASxjB,EAAAA,IAAoB,EAC7B,CAAE6M,UAAAA,EAAW6W,WAAAA,EAAYK,aAAAA,CAAc,EAAGX,GAAU,CACxD1Y,UAAAA,EACA4Y,SAAAA,EACA/d,QAAAA,EACAie,OAAQ7zB,EAAAA,SAAS,IAAA,OAAM6zB,OAAAA,EAAAA,EAAOtsC,QAAPssC,YAAAA,EAAcje,QAAO,EAC5CgN,MAAO,CAAEH,UAAW,EAAK,CAC3B,CAAC,EAEKuoE,EAAUhrF,WAAS,IAAA,OAAM,OAAC,EAAE6C,EAAMk/C,QAASpjD,EAAAA,EAAMlB,WAANkB,MAAAA,EAAgBzV,QAAO,EAClE+hG,EAAYjrF,EAAAA,SAAS,IAAMgrF,EAAQzjG,OAASmjG,EAAcnjG,KAAK,EAC/Dgb,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACivE,CAAS,EAAG,GACb,CAAC,GAAGA,CAAS,YAAY,EAAGtwE,EAAM6T,SAClC,CAAC,GAAGy8D,CAAS,iBAAiB,EAAGgc,EAAU1jG,MAC3C,CAAC,GAAG0nF,CAAS,YAAY,EAAGn4B,EAASvvD,MACrC,CAAC,GAAG0nF,CAAS,WAAW,EAAG,CAACtwE,EAAMuJ,KAClC,CAAC,GAAG+mE,CAAS,gBAAgB,EAAG0b,EAAYpjG,KAC7C,EACF,EACK2jG,EAAalrF,EAAAA,SAAS,IAAM,CAChC,GAAIwqF,GAAAA,MAAAA,EAAW9qD,YAAc+qD,GAAAA,MAAAA,EAAiBU,YAC5C,MAAO,CAAE,EAGX,MAAMC,EAAcl8E,EAAGrG,IAAI,cAAc,EACnCwiF,EACJzuD,EAAOr1C,OAASijG,GAAAA,MAAAA,EAAWc,UAAY,GAAKnlC,GAAAA,YAAAA,EAAYvpB,SAAU,GAAM,IAE1E,MAAO,CACL2uD,mBACEd,GAAmBA,EAAgBU,YAC/Bv7E,OACA,QAAQw7E,CAAW,MAAMC,CAAU,GAC1C,CACH,CAAC,EACKF,EAAcnrF,EAAAA,SAAS,IAExBwqF,IAAcA,EAAU9qD,YAAc8qD,EAAUgB,YAAc,aAC9DR,EAAQzjG,QAASijG,GAAAA,YAAAA,EAAWc,YAAa,CAACb,GAC3C,CAAC,EAACA,GAAAA,MAAAA,EAAiBU,YAEtB,EACKM,EAAkBzrF,EAAAA,SAAS,IAE7BgrF,EAAQzjG,OAAS,CAAC,EAAEkjG,GAAAA,MAAAA,EAAiBU,aAAgBX,GAAa,CAACA,EAAUc,UAEhF,EACKI,EAAiB1rF,EAAQ,SAAC,IAAM,CAAC,EAACwqF,GAAAA,MAAAA,EAAWkB,eAAc,EAC3DC,EAAe3rF,EAAAA,SAAS,KAAMwqF,GAAAA,YAAAA,EAAW9qD,aAAc,CAAC+qD,CAAe,EACvE5vD,EAAa76B,EAAAA,SAAS,IAClBrB,EAAMy8C,gBAAkBuwC,EAAapkG,MAAS2nB,EAAGy8B,GAAG,MAAM,EAAIz8B,EAAGy8B,GAAG,MAAM,CACnF,EACKigD,EAAc5rF,EAAAA,SAAS,IAAMrB,EAAMwY,UAAWqzE,GAAAA,YAAAA,EAAWrzE,UAAW,OAAO,EAE3E00E,GAAYpgF,EAAAA,SAAS,CACzBjU,GAAIoe,EACJhH,MAAOmuB,EAAAA,MAAMp+B,EAAO,OAAO,EAC3Bi+B,OAAAA,EACA8tD,cAAAA,EACAO,UAAAA,EACAE,YAAAA,EACA5c,YAAakc,EACb92D,SAAU3zB,EAAQ,SAAC,IAAM8qF,EAAWvjG,OAASsjG,EAAatjG,KAAK,EAC/DukG,eAAgBpB,EAAcnjG,MAC9BwkG,kBAAAA,GACAC,oBAAAA,GACA5xB,iBAAAA,GACAC,iBAAAA,EACF,CAAC,EAED55D,EAAO,QAACypF,GAAiB2B,EAAS,EAElCtgF,EAAK,MACH0/E,EACA1jG,GAAS,CACHA,GAAS4jG,EAAY5jG,QACvBqjG,EAAWrjG,MAAQ,GACnB6sC,EAAc,EAElB,EACA,CAAEgU,UAAW,EAAK,CACpB,EACA78B,EAAK,MAACurC,EAAUvvD,GAAS,CACnBA,GACFulB,EAAUnO,EAAMmnD,QAAQ,EAG1B0kC,GAAAA,MAAAA,EAAWyB,cAAcv1F,GAAQA,EAAKq1F,kBAAkB,GAAO,EAAK,GACpExkG,GACE0qB,EAAQ,SAAC,IAAM,CACbw4E,GAAAA,MAAAA,EAAiBsB,kBAAkBxkG,EACrC,CAAC,CACL,CAAC,EACDgkB,EAAK,MAACm/E,EAAelmB,GAAY,CAC3B,OAAOgmB,GAAAA,YAAAA,EAAW0B,eAAiB,YACrC1B,EAAU0B,aAAavtF,EAAMiQ,MAAO41D,EAAU7lE,EAAMupD,MAAQ,EAAE,CAElE,CAAC,EACD38C,EAAK,MACHogF,EACApkG,GAAS,CACPwzB,EAAUxzB,MAAQA,EAAQ,SAAWysC,EAAMzsC,MAAQ,aAAe,aACpE,EACA,CAAE6gD,UAAW,EAAK,CACpB,EAEIoiD,IACFj/E,EAAK,MACH,CAAC,IAAM5M,EAAMiQ,MAAO,IAAM47E,EAAUp6E,aAAa,EACjD,IAAM,CACJ0mC,EAASvvD,MAAQoX,EAAMiQ,QAAU47E,EAAUp6E,aAC7C,EACA,CAAEg4B,UAAW,EAAK,CACpB,EAEI,OAAOoiD,EAAUpiC,cAAiB,YACpCoiC,EAAUpiC,aAAayjC,EAAS,GAIpCt4E,EAAAA,gBAAgB,IAAM,CAChB,OAAOi3E,GAAAA,YAAAA,EAAWniC,eAAiB,YACrCmiC,EAAUniC,aAAawjC,EAAS,CAEpC,CAAC,EAEDpnD,EAAO,CACLimD,cAAAA,EACAM,QAAAA,EACAC,UAAAA,EACAE,YAAAA,EACAjuD,aAAAA,GACAk9B,iBAAAA,GACAC,iBAAAA,EACF,CAAC,EAED,SAAS0xB,GAAkBj1C,EAAmBq1C,EAAW,GAAM,CAC7DxB,EAAYpjG,MAAQuvD,EACpBq1C,IAAY1B,GAAAA,MAAAA,EAAiBsB,kBAAkBj1C,GACjD,CAEA,KAAM,CAAEx8C,MAAAA,CAAO,EAAG66B,GAAe,EAEjC,SAAS+H,IAAe,CAGtB,GAFAsW,aAAal5C,EAAM8iD,KAAK,EAEpBz+C,CAAAA,EAAM6T,SAEV,GAAIw4E,EAAQzjG,MAAO,CACjB,GAAI4jG,EAAY5jG,OAASqkG,EAAYrkG,QAAU,QAAS,OAExDijG,GAAAA,MAAAA,EAAWyB,cAAcv1F,GAAQ,CAC3B8zF,EAAU4B,YACZ11F,EAAKg0F,cAAgB,GAEzB,GACAA,EAAcnjG,MAAQ,CAACmjG,EAAcnjG,KACvC,MACM4jG,EAAY5jG,OACdykG,GAAoB,GAAO,EAAI,EAG7BxB,GACFA,EAAUttD,aAAav+B,EAAMiQ,MAAOjQ,EAAMupD,MAAQ,CAAA,EAAIvpD,EAAMspD,KAAK,EAGnEnR,EAASvvD,MAAQ,EAErB,CAEA,SAASykG,GAAoBxnB,EAAmB6nB,EAAS,GAAO,CAC9D74C,aAAal5C,EAAM8iD,KAAK,EAExBotC,GAAAA,MAAAA,EAAWyB,cAAcv1F,IAAQ,CAC3B8zF,EAAU4B,YACZ11F,GAAKg0F,cAAgB,GAEzB,GACAA,EAAcnjG,MAAQi9E,EAElB6nB,GAAU,OAAO5B,GAAAA,YAAAA,EAAiBuB,sBAAwB,YAC5DvB,EAAgBuB,oBAAoBxnB,EAAU6nB,CAAM,CAExD,CAEA,IAAIC,GAAc,GACdC,GAAY,GAEhB,SAASnyB,IAAmB,CAG1B,GAFA5mB,aAAal5C,EAAM8iD,KAAK,EAEpBkvC,EAAAA,IAAe,CAACnB,EAAY5jG,OAASqkG,EAAYrkG,QAAU,SAE/D,IAAI,CAACmjG,EAAcnjG,OAASqjG,EAAWrjG,MAAO,CAC5CglG,GAAY,GACZ,MACF,CAEI,OAAO9B,GAAAA,YAAAA,EAAiBrwB,mBAAqB,YAC/CqwB,EAAgBrwB,iBAAkB,EAGhCz7D,EAAAA,EAAM6T,UAAY,CAACw4E,EAAQzjG,SAE/B+S,EAAM8iD,MAAQvU,WAAW,IAAM,CAC7B6hD,EAAcnjG,MAAQ,EACxB,EAAGw0D,EAAWx0D,KAAK,GACrB,CAEA,SAAS8yE,IAAmB,CAC1B7mB,aAAal5C,EAAM8iD,KAAK,EAEpBkvC,EAAAA,IAAe,CAAC1B,EAAWrjG,OAAS,CAAC4jG,EAAY5jG,OAASqkG,EAAYrkG,QAAU,WAIhF,OAAOkjG,GAAAA,YAAAA,EAAiBpwB,mBAAqB,YAC/CowB,EAAgBpwB,iBAAkB,EAGhC17D,EAAAA,EAAM6T,UAAY,CAACw4E,EAAQzjG,SAE/B+S,EAAM8iD,MAAQvU,WAAW,IAAM,CAC7B6hD,EAAcnjG,MAAQ,EACxB,EAAGw0D,EAAWx0D,KAAK,GACrB,CAEA,SAASo1D,IAAqB,CACxBwuC,EAAY5jG,OAASqkG,EAAYrkG,QAAU,SAC7C0qB,EAAAA,SAAS,IAAM,CACby4E,EAAcnjG,MAAQ,EACxB,CAAC,CAEL,CAEA,SAASilG,GAAmB,CAI1B,GAHA5B,EAAWrjG,MAAQ,GACnBmjG,EAAcnjG,MAAQ,GAElBglG,GAAW,CAOb,GANAA,GAAY,GAER,OAAO9B,GAAAA,YAAAA,EAAiBrwB,mBAAqB,YAC/CqwB,EAAgBrwB,iBAAkB,EAGhCz7D,EAAM6T,UAAY,CAACw4E,EAAQzjG,MAAO,OAEtCmjG,EAAcnjG,MAAQ,EACxB,CACF,CAEA,SAASklG,EAAgB50F,EAAsB,CAC7C,MAAMnQ,EAAMmQ,EAAM60F,MAAQ70F,EAAMnQ,IAE5BA,IAAQ,SAAWA,IAAQ,eAC7BmQ,EAAM0xC,gBAAiB,EACvBrM,GAAc,GACLx1C,IAAQ,UACjBmQ,EAAM0xC,gBAAiB,EACvB1xC,EAAMkzC,eAAgB,EACtB7N,GAAc,EAElB,CAEA,SAASyvD,GAAiB,OACxB,GAAI,GAAChuF,EAAAA,EAAMlB,WAANkB,MAAAA,EAAgBzV,QACnB,OAAO,KAGT,MAAM8mF,EAAct5E,IAAiBmZ,EAAA,YAAA06E,GAAA,CAAA,MAE1B7zF,GAAKkY,MAAK,KACXlY,GAAKwR,KAAI,aACHxR,GAAKqX,UAAS,SAChBrX,GAAK8b,SAAQ,SACb9b,GAAK+G,SAAQ,MAChB/G,GAAKuxD,MAAK,KACXvxD,GAAKwxD,IAAI,EAAA,CAAA15C,QAAAA,IAAA,CAEd9X,GAAKS,KAAOsE,GAAW/E,GAAKS,IAAI,EAAIT,GAAKkY,KAAK,EAElD,EAED,OAAOjQ,EAAMlB,SAASxB,IAAI0B,IACpBA,GAAMokD,MACRlyC,EAAAA,YAAAw6E,GAAA,CAAA,IACkB1sF,GAAMiR,MAAK,MAASjR,GAAMxG,KAAOsE,GAAWkC,GAAMxG,IAAI,EAAIwG,GAAMiR,KAAK,EAAA,CAAAJ,QAAAA,IAAAA,OAAA,QAClF7Q,EAAAA,GAAMF,WAANE,YAAAA,EAAgB1B,IAAI+zE,EAAW,EAAA,CAAA,EAK/BA,EAAWryE,EAAK,CACxB,CACH,CAEA,SAASivF,GAAc,CACrB,MAAM7tF,EAAS,CAAE2rF,cAAeA,EAAcnjG,MAAOojG,YAAaA,EAAYpjG,KAAO,EAC/E2gB,EAAOvJ,EAAMsgB,QAASurE,GAAAA,YAAAA,EAAWvrE,QAAShX,EAAM1gB,MAAMslG,UAAU3kF,KAChEsH,GAAgBA,IAAAK,EAAA,YAAAG,GAAA,CAAA,SACArR,EAAMkE,MAAMoc,MAAK,KAAQlgB,CAAM,EAAA,CAAAyP,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAE3CpJ,EAAM1gB,MAAMslG,UAAS,CAAA,KACnB3kF,EAAI,MACH,CACL,CAACgH,EAAGg8B,GAAG,OAAO,CAAC,EAAG,GAClB,CAACh8B,EAAGm8B,IAAI,QAAS,SAAS,CAAC,EAAGq/C,EAAcnjG,MAC5C,CAAC2nB,EAAGm8B,IAAI,QAAS,cAAc,CAAC,EAAGs/C,EAAYpjG,KACjD,CAAC,CAAA,EAAA,IAAA,CAAA,EAGN,EAED,OAAOijG,EAAYA,EAAUsC,gBAAgB/tF,EAAQyQ,EAAa,EAAIA,GAAe,CACvF,CAEA,SAASu9E,GAAc,CACrB,OAAAl9E,EAAAA,YAAA60C,GAAA,CAAA,UAEe1wB,EAAMzsC,MAAQ,OAAS,QAAO,QAChCmkG,EAAenkG,MAAK,MAAA,GAAA,SAAA,GAAA,SAGnBkkG,EAAgBlkG,KAAK,EAAA,CAG7B4vB,QAASA,IAAAtH,EAAA,YAAA,MAAA,CAAA,IAEAqN,EAAS,MACP,CACL,CAAChO,EAAGg8B,GAAG,OAAO,CAAC,EAAG,GAClB,CAACh8B,EAAGm8B,IAAI,QAAS,UAAU0/C,EAAWxjG,KAAK,EAAE,CAAC,EAAG,GACjD,CAAC2nB,EAAGm8B,IAAI,QAAS,WAAW,CAAC,EAAGo/C,GAAAA,YAAAA,EAAiBU,WAClD,EAAA,KACK,WAAU,SACN,EAAC,gBACIxsF,EAAM6T,SAAW,OAAS5C,OAAS,MAC3Cs7E,EAAW3jG,MAAK,QACd21C,GAAY,UACVuvD,EAAe,aACZryB,GAAgB,aAChBC,IAEb,EAACx3D,EAAMqF,MAAQvJ,EAAMuJ,OAAI2H,EAAA,YAAA,MAAA,CAAA,MACZX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CACtBroC,EAAMqF,KACL4H,EAAAA,WAAWjN,EAAO,MAAM,EAACgN,EAAAA,YAAApN,GAAA4O,aAEf1S,EAAMoP,UAAS,CAAA,KAAQpP,EAAMuJ,IACxC,CAAA,EAAA,IAAA,CAAA,CAAA,EAEJ2H,EAAAA,YAAA,OAAA,CAAA,MAEQ,CACL,CAACX,EAAGg8B,GAAG,OAAO,CAAC,EAAG,GAClB,CAACh8B,EAAGm8B,IAAI,QAAS,UAAU,CAAC,EAAG,CAACsgD,EAAapkG,OAASyjG,EAAQzjG,KAChE,GAECsb,CAAAA,EAAM2L,QAAUsB,EAAU,WAACjN,EAAO,SAAS,EAAIlE,EAAMiQ,KAAK,CAAA,EAE5Do8E,EAAQzjG,OACPuoB,EAAAA,WACEjN,EACA,QACA,CAAE6nF,cAAeA,EAAcnjG,MAAOojG,YAAaA,EAAYpjG,KAAO,EACtE,IAAM,CAACqlG,GAAa,CACtB,CAAC,CAEN,EACDp+E,QAASA,IAAAqB,EAAA,YAAA,OAAA,CAAA,MACMX,EAAGg8B,GAAG,eAAe,CAAC,EAAA,CAChCroC,EAAM2L,QAAUsB,EAAU,WAACjN,EAAO,SAAS,EAAIlE,EAAMiQ,KAAK,CAAA,CAE9D,CAAA,CAIT,CAEA,MAAO,IACLiB,EAAAA,YAAA,KAAA,CAAA,IACW+F,EAAO,MAASrT,EAAUhb,MAAK,KAAQ,MAAM,EAAA,CACnDwlG,EAAW,EAAEl9E,EAAA,YAAAwqB,GAAA,CAAA,OAAA,EAAA,EAAA,CAAA7rB,QAAAA,IAEXw8E,CAAAA,EAAQzjG,OAAS,CAAC4jG,EAAY5jG,OAAKqyD,EAAAA,eAAA/pC,EAAA,YAAA,KAAA,CAAA,MACEX,EAAGg8B,GAAG,MAAM,CAC7CroC,EAAAA,CAAAA,EAAMk/C,MAAQjyC,EAAAA,WAAWjN,EAAO,OAAO,EAAI8pF,EAAc,CAAE,CAAAK,EAAAA,CAAAA,CAAAA,EAAAA,MADlD/B,EAAU1jG,KAAK,CAG5B,CAAA,CAAA,EAEFyjG,EAAAA,EAAQzjG,OAAS4jG,EAAY5jG,OAAKsoB,EAAA,YAAAouC,GAAA,CAAA,IAE1BpqB,EAAM,MACJ,CACL3kB,EAAGg8B,GAAG,QAAQ,EACdh8B,EAAGo4B,GAAG,MAAM,EACZqkD,EAAapkG,OAAS2nB,EAAGm8B,IAAI,SAAU,MAAM,CAAC,EAC/C,QACQu/C,EAAWrjG,OAAS0jG,EAAU1jG,MAAK,MACrC,CAACwsC,EAAWxsC,OAASqjG,EAAWrjG,MAAK,GACxCwsC,EAAWxsC,MAAK,WACRszC,EAAWtzC,MAAK,aACdilG,EAAgB,aAChBpgD,KAAQkgD,GAAc,GAAOlyB,GAAgB,GAAG,aAChD/tB,KAAQigD,GAAc,GAAQjyB,GAAkB,EAAC,EAAA,CAAA7rD,QAAAA,IAAA,CAAAqB,EAAA,YAAA,KAAA,CAAA,MAEpDX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CACrBroC,EAAMk/C,MAAQjyC,EAAU,WAACjN,EAAO,OAAO,EAAI8pF,EAAc,CAAE,CAAA,CAAA,CAGjE,CAAA,CAAA,CAAA,CAIT,CACF,CAAC,ECrfKtC,GAAYj8E,EAAAA,gBAAgB,CAChCjX,KAAM,YACNwH,MAAO,CACLiQ,MAAO21B,OACP9mC,SAAU8+C,KACX,EACDluC,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,YAAa0D,EAAQ,CAC1CM,MAAO,CACLJ,QAAS,GACTC,OAAQ,EACT,EACDhR,SAAU,CACR+Q,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACV,CACF,CAAC,EAEK+7E,EAAYhqF,EAAAA,OAAO4pF,GAAY,IAAI,EACnCK,EAAkBjqF,EAAAA,OAAO0pF,GAAiB,IAAI,EAE9Ch7E,EAAKtF,GAAc,YAAY,EAC/BqjF,EAASrjF,GAAc,MAAM,EAC7BgzB,EAASvsB,EAAG,IAAC,CAAC,EAEhBo6E,IACF7tD,EAAOr1C,MAAQkjG,EAAgB7tD,OAAS,GAG1C,MAAMswD,EAAaltF,EAAAA,SAAS,KACnB,CACL8uB,YAAa27D,GAAAA,MAAAA,EAAiBU,YAC1Bv7E,OACA,QAAQq9E,EAAOpkF,IAAI,cAAc,CAAC,MAAM+zB,EAAOr1C,KAAK,GACzD,EACF,EACK4lG,EAAentF,EAAAA,SAAS,KACrBwqF,GAAAA,YAAAA,EAAW9qD,aAAc,CAAC+qD,CAClC,EAEDhqF,EAAO,QAAC0pF,GAAkB1+E,WAAS,CAAEmxB,OAAAA,CAAO,CAAC,CAAC,EAE9C,SAAS+vD,GAAiB,CACxB,OAAO78E,aAAWjN,EAAO,UAAW,CAAE,EAAE,IAAM,OAC5C,GAAI,GAAClE,EAAAA,EAAMlB,WAANkB,MAAAA,EAAgBzV,QACnB,MAAO,CAAE,EAGX,MAAM8mF,EAAct5E,GAAiBmZ,EAAA,YAAA06E,GAAA,CAAA,MAE1B7zF,EAAKkY,MAAK,KACXlY,EAAKwR,KAAI,aACHxR,EAAKqX,UAAS,SAChBrX,EAAK8b,SAAQ,SACb9b,EAAK+G,SAAQ,MAChB/G,EAAKuxD,MAAK,KACXvxD,EAAKwxD,IAAI,EAAA,CAAA15C,QAAAA,IAAA,CAEd9X,EAAKS,KAAOsE,GAAW/E,EAAKS,IAAI,EAAIT,EAAKkY,KAAK,EAElD,EAED,OAAOjQ,EAAMlB,SAASxB,IAAI0B,GACpBA,EAAMokD,MACRlyC,EAAAA,YAAAw6E,GAAA,CAAA,IAES1sF,EAAMiR,MAAK,MACTjR,EAAMxG,KAAOsE,GAAWkC,EAAMxG,IAAI,EAAIwG,EAAMiR,KAAK,EAAA,CAAAJ,QAAAA,IAAAA,OAAA,QAEvD7Q,EAAAA,EAAMF,WAANE,YAAAA,EAAgB1B,IAAI+zE,EAAW,EAAA,CAAA,EAK/BA,EAAWryE,CAAK,CACxB,CACH,CAAC,CACH,CAEA,MAAO,IAAM,OACX,OAAIwvF,EAAa5lG,OACRsb,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,GAGTgN,EAAAA,YAAA,KAAA,CAAA,MACaX,EAAG9jB,EAAC,CAAE,EAAA,CAAAykB,EAAA,YAAA,MAAA,CAAA,MACHX,EAAGg8B,GAAG,OAAO,CAAC,EAAA,CAAAr7B,EAAA,YAAA,OAAA,CAAA,MACXX,EAAGg8B,GAAG,OAAO,EAAC,MAASgiD,EAAW3lG,KAAK,EAAA,CACjDsb,EAAM+L,MAAQ/L,EAAM+L,MAAO,EAAGjQ,EAAMiQ,KAAK,KAAAiB,EAAAA,YAAA,KAAA,CAAA,MAGnCX,EAAGg8B,GAAG,MAAM,GAAIyhD,CAAAA,GAAgB,CAAA,CAAA,CAAA,CAGhD,CACH,CACF,CAAC,2GC5Fcv+E,qBAAgB,CAC7BjX,KAAM,WACNwH,MAAO,CACLyuF,MAAO,CACL5lG,KAAM+0D,MACN/tC,QAASA,IAAM,CAAA,CACjB,CACD,EACDH,MAAM1P,EAAO,CACX,MAAM6rF,EAAYhqF,EAAAA,OAAO4pF,GAAY,IAAI,EAEnCl7E,EAAKtF,GAAc,MAAM,EACzB3B,EAAQU,GAAU,EAClBozC,EAAar7C,GAAe,EAE5BgqF,EAAgBr6E,EAAG,IAAC,EAAK,EACzBs6E,EAAct6E,EAAG,IAAC,EAAK,EACvBu6E,EAAav6E,EAAG,IAAC,EAAK,EAEtBsjB,EAAW3zB,EAAQ,SAAC,KAAMwqF,GAAAA,YAAAA,EAAW72D,WAAY,EAAK,EACtDi4D,EAAc5rF,EAAQ,SAAC,KAAMwqF,GAAAA,YAAAA,EAAWrzE,UAAW,OAAO,EAE1DvB,EAAU7C,GAAgB4pC,CAAkB,EAC5C9oB,EAASxjB,EAAAA,IAAoB,EAC7B,CAAE6M,UAAAA,EAAW6W,WAAAA,EAAYK,aAAAA,CAAc,EAAGX,GAAU,CACxD1Y,UAAW1K,EAAG,IAAC,QAAQ,EACvBsjB,SAAAA,EACA/d,QAAAA,EACAie,OAAQ7zB,EAAQ,SAAC,WAAM6zB,OAAAA,EAAAA,EAAOtsC,QAAPssC,YAAAA,EAAcje,QAAO,CAC9C,CAAC,EAEKi2E,EAAYpgF,EAAAA,SAAS,CACzBjU,GAAIoe,EACJhH,MAAO,GACPguB,OAAQ,EACR8tD,cAAAA,EACAO,UAAWP,EACXS,YAAa,GACb5c,YAAa,KACb56C,SAAAA,EACAm4D,eAAgB,GAChBC,kBAAAA,EACAC,oBAAAA,EACA5xB,iBAAAA,EACAC,iBAAAA,CACF,CAAC,EAED55D,EAAO,QAACypF,GAAiB2B,CAAS,EAElCtgF,EAAK,MAACm/E,EAAenjG,GAAS,CACxBA,IACFqjG,EAAWrjG,MAAQ,GACnB6sC,EAAc,EAElB,CAAC,EAED,SAAS23D,EAAkBj1C,EAAmB,CAC5C6zC,EAAYpjG,MAAQuvD,CACtB,CAEA,SAASk1C,EAAoBxnB,EAAmB,CAC9CkmB,EAAcnjG,MAAQi9E,CACxB,CAEA,KAAM,CAAElqE,MAAAA,CAAO,EAAG66B,GAAe,EAEjC,IAAIm3D,EAAc,GACdC,EAAY,GAEhB,SAASnyB,GAAmB,CAG1B,GAFA5mB,aAAal5C,EAAM8iD,KAAK,EAEpBkvC,EAAAA,GAAeV,EAAYrkG,QAAU,SAEzC,IAAI,CAACmjG,EAAcnjG,OAASqjG,EAAWrjG,MAAO,CAC5CglG,EAAY,GACZ,MACF,CAEAjyF,EAAM8iD,MAAQvU,WAAW,IAAM,CAC7B6hD,EAAcnjG,MAAQ,EACxB,EAAGw0D,EAAWx0D,KAAK,EACrB,CAEA,SAAS8yE,GAAmB,CAC1B7mB,aAAal5C,EAAM8iD,KAAK,EAEpBkvC,EAAAA,GAAe,CAAC1B,EAAWrjG,OAASqkG,EAAYrkG,QAAU,WAE9D+S,EAAM8iD,MAAQvU,WAAW,IAAM,CAC7B6hD,EAAcnjG,MAAQ,EACxB,EAAGw0D,EAAWx0D,KAAK,EACrB,CAEA,SAASo+D,GAAc,CACjBimC,EAAYrkG,QAAU,UACxBmjG,EAAcnjG,MAAQ,GAE1B,CAEA,SAASo1D,GAAqB,CACxBivC,EAAYrkG,QAAU,SACxB0qB,EAAAA,SAAS,IAAM,CACby4E,EAAcnjG,MAAQ,EACxB,CAAC,CAEL,CAEA,SAASilG,GAAmB,CAC1B5B,EAAWrjG,MAAQ,GACnBmjG,EAAcnjG,MAAQ,GAElBglG,IACFA,EAAY,GACZ7B,EAAcnjG,MAAQ,GAE1B,CAEA,SAAS8lG,GAAkB,OACzB,OAAK1uF,EAAAA,EAAMyuF,QAANzuF,MAAAA,EAAazV,OAIXyV,EAAMyuF,MAAMnxF,IAAIvF,GAAImZ,EAAAA,YAAA06E,GAAA,CAAA,IAElB7zF,EAAKkY,MAAK,MACRlY,EAAKkY,MAAK,KACXlY,EAAKwR,KAAI,aACHxR,EAAKqX,UAAS,SAChBrX,EAAK8b,SAAQ,SACb9b,EAAK+G,SAAQ,MAChB/G,EAAKuxD,MAAK,KACXvxD,EAAKwxD,IAAI,EAAA,CAAA15C,QAAAA,IAAA,CAEd9X,EAAKS,KAAOsE,GAAW/E,EAAKS,IAAI,EAAIT,EAAKkY,KAAK,CAAA,CAAA,CAElD,EAhBQ,IAiBX,CAEA,MAAO,IACLiB,EAAAA,YAAA,MAAA,CAAA,IAES+F,EAAO,MACL1G,EAAGg8B,GAAG,MAAM,EAAC,aACNkvB,EAAgB,aAChBC,CAAgB,EAAA,CAAAxqD,EAAA,YAAA,MAAA,CAAA,IAGvBqN,EAAS,MACP,CAAChO,EAAGg8B,GAAG,cAAc,EAAGy/C,EAAYpjG,OAAS2nB,EAAGm8B,IAAI,eAAgB,UAAU,CAAC,EAAC,QAC9Esa,CAAW,EAAA,CAAA91C,EAAA,YAAApN,GAEVwF,EAAM1gB,MAAM+lG,SAAQ,IAAA,CAAA,CAAA,EAAAz9E,EAAA,YAAAouC,GAAA,CAAA,IAGzBpqB,EAAM,MACJ,CAAC3kB,EAAGg8B,GAAG,QAAQ,EAAGh8B,EAAGo4B,GAAG,MAAM,EAAGp4B,EAAGm8B,IAAI,SAAU,MAAM,CAAC,EAAC,QACxDu/C,EAAWrjG,OAASmjG,EAAcnjG,MAAK,MACzC,CAACwsC,EAAWxsC,OAASqjG,EAAWrjG,MAAK,GACxCwsC,EAAWxsC,MAAK,WACR2nB,EAAGy8B,GAAG,MAAM,EAAC,aACX6gD,EAAgB,aAChBpgD,KAAQkgD,EAAc,GAAOlyB,EAAgB,GAAG,aAChD/tB,KAAQigD,EAAc,GAAQjyB,EAAkB,EAAC,EAAA,CAAA7rD,QAAAA,IAAA,CAAAqB,EAAA,YAAA,KAAA,CAAA,MAEpD,CAACX,EAAGg8B,GAAG,MAAM,EAAGh8B,EAAGm8B,IAAI,OAAQ,OAAO,CAAC,GAAIgiD,CAAAA,EAAe,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAKjF,CACF,CAAC,ECpKoC,SAAAppD,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAYrC,MAAM+hG,GAAkBt/E,OAAOC,OAAyB,CAAC,MAAO,QAAS,SAAU,OAAQ,MAAM,CAAC,EAEnFE,qBAAgB,CAC7BjX,KAAM,OACNwH,MAAOorF,GACPvlD,MAAO,CAAC,eAAe,EACvBn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CACrC,MAAM9lC,EAAQiM,GAAS,OAAQ0D,EAAQ,CACrCuuB,OAAQ,CACNruB,QAAS,KACTC,OAAQ,EACT,EACD29E,UAAW,GACXrB,WAAY,CACVv8E,QAAS,QACTtD,UAAW3jB,GAASgmG,GAAgBz+E,SAASvnB,CAAK,CACnD,EACDimG,QAAS,GACT9tD,WAAY,GACZ/L,SAAU,GACVxc,QAAS,QACTq0E,UAAW,CACTh9E,QAAS,WACTtD,UAAW3jB,GAAS,CAAC,WAAY,UAAU,EAAEunB,SAASvnB,CAAK,CAC5D,EACDmkG,eAAgB,KAChBliG,QAAS,CACPglB,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACT,EACDg/E,OAAQ,KACRC,YAAa,GACb9wD,OAAQ,KACR3d,MAAO,KACPpc,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEKqM,EAAKtF,GAAc,MAAM,EACzB+jF,EAAc,IAAIC,IAClBx9E,EAAgBC,EAAAA,IAAI1R,EAAMk+B,MAAM,EAChCyuD,EAAYj7E,EAAG,IAAC,EAAK,EAErBuF,EAAUvF,EAAAA,IAAkB,EAC5Bw9E,EAAOx9E,EAAAA,IAAoC,EAE3C06E,EAAa/qF,EAAAA,SAAS,IACtBrB,EAAM+gC,aAAe/gC,EAAMosF,aAAe,QAAUpsF,EAAMosF,aAAe,SACpE,SAEP,CAACpsF,EAAM+gC,aACN/gC,EAAMosF,aAAe,OAASpsF,EAAMosF,aAAe,UAE7C,QAEApsF,EAAMosF,aAAepsF,EAAM+gC,WAAa,SAAW,QAE7D,EACKn9B,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAG,EACN8jB,EAAGo4B,GAAG,MAAM,EACZp4B,EAAGE,GAAG,UAAU27E,EAAWxjG,KAAK,EAAE,EAClC,CACE,CAAC2nB,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAG,SAAS,CAAC,EAAGk8E,EAAU/jG,MAC9B,CAAC2nB,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM6sF,YAAc,WACzC,CAACt8E,EAAGE,GAAG,YAAY,CAAC,EAAGzQ,EAAM+gC,UAC/B,CAAC,CAEJ,EACKpwB,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,MAAMsP,EAAgC,CAAE,EAExC,OAAI3nB,GAAUgX,EAAMi+B,MAAM,IACxBttB,EAAMJ,EAAGtG,GAAG,cAAc,CAAC,EACzB,OAAOjK,EAAMi+B,QAAW,SAAW,GAAGj+B,EAAMi+B,MAAM,KAAOj+B,EAAMi+B,QAG5DttB,CACT,CAAC,EACK89E,EAAQptF,EAAAA,SAAS,IAAM,SAC3B,IAAIrB,EAAAA,EAAMnV,UAANmV,MAAAA,EAAezV,OACjB,OAAOyV,EAAMnV,QAGf,MAAMskG,GAASnvF,EAAAA,EAAM8uF,SAAN9uF,YAAAA,EAAcnV,QAAQskG,OAErC,OAAKA,GAAAA,MAAAA,EAAQ5kG,OAIN6kG,EAAmBD,CAAM,EAHvB,CAAE,CAIb,CAAC,EACKE,EAAehuF,EAAAA,SAAS,IAAA,OAAMrB,OAAAA,EAAAA,EAAM8uF,SAAN9uF,YAAAA,EAAcqvF,aAAazmG,MAAK,EAEpEkZ,EAAO,QACL2pF,GACA3+E,WAAS,CACP2E,cAAAA,EACAk7E,UAAAA,EACA5rD,WAAY3C,EAAAA,MAAMp+B,EAAO,YAAY,EACrCytF,UAAWrvD,EAAAA,MAAMp+B,EAAO,WAAW,EACnC6sF,UAAWzuD,EAAAA,MAAMp+B,EAAO,WAAW,EACnC+sF,eAAgB3uD,EAAAA,MAAMp+B,EAAO,gBAAgB,EAC7Cg1B,SAAUoJ,EAAAA,MAAMp+B,EAAO,UAAU,EACjCwY,QAAS4lB,EAAAA,MAAMp+B,EAAO,SAAS,EAC/BosF,WAAAA,EACA9rE,MAAO8d,EAAAA,MAAMp+B,EAAO,OAAO,EAC3Bu+B,aAAAA,EACAgvD,aAAAA,EACA9jC,aAAAA,EACAC,aAAAA,EACA4jC,cAAAA,EACAa,gBAAAA,CACF,CAAC,CACH,EAEAvhF,EAAAA,MACE,IAAM5M,EAAMk+B,OACZt1C,GAAS,CACHA,IAAU6oB,EAAc7oB,QAC1B6oB,EAAc7oB,MAAQA,EAE1B,CACF,EACAgkB,EAAAA,MACE,IAAM5M,EAAM6uF,QACZjmG,GAAS,CACHoX,EAAM+gC,aAENn4C,EACF0mG,EAAkB,EAElBC,EAAkB,EAEtB,CACF,EACA3iF,EAAK,MAACyiF,EAAczmG,GAAS,OACvB,CAACoX,EAAM+uF,aAAenmG,IACxB6oB,EAAc7oB,QAASA,EAAAA,EAAM2gE,OAAN3gE,YAAAA,EAAYqnB,QAAoBrnB,EAAMurB,KAEjE,CAAC,EAEDM,EAAAA,UAAU,IAAM,OAKd,GAJAnB,EAAAA,SAAS,IAAM,CACT,CAACtT,EAAM+gC,YAAc/gC,EAAM6uF,SAASS,EAAkB,CAC5D,CAAC,EAEGtvF,EAAM8uF,QAAU,CAAC9uF,EAAM+uF,aAAe,CAACt9E,EAAc7oB,MAAO,CAC9D,MAAM0gE,EAAQ+lC,EAAazmG,MAEvB0gE,IACF73C,EAAc7oB,QAAS0gE,EAAAA,EAAMC,OAAND,YAAAA,EAAYr5C,QAAoBo/E,EAAazmG,MAAMurB,KAE9E,CACF,CAAC,EAED2xB,EAAO,CAAE0pD,kBAAAA,CAAkB,CAAC,EAE5B,SAASJ,EAAmBD,EAAoC,CAC9D,MAAM51F,EAAoB,CAAE0W,MAAO,GAAInR,SAAU,CAAA,CAAI,EAC/CF,EAAOg/C,MAAM9e,KAAKqwD,CAAM,EAAE7xF,IAAIgsD,IAAU,CAAE3xD,OAAQ4B,EAAM+vD,MAAAA,CAAM,EAAE,EAEtE,KAAO1qD,EAAKrU,QAAQ,CAClB,KAAM,CAAEoN,OAAAA,EAAQ2xD,MAAAA,CAAM,EAAI1qD,EAAKqlB,MAAQ,EACjCwrE,EAAanmC,EAAMC,MAAQ,CAAU,EAE3C,GAAIkmC,EAAUC,OAAS,GACrB,SAGF,MAAM7kG,EAAU,CACd,GAAG4kG,EACHnmC,MAAAA,EACAr5C,MAAOw/E,EAAUx/E,OAASq5C,EAAMn1C,KAChC3b,KAAMi3F,EAAUj3F,MAAQ8wD,EAAM9wD,IAChB,EAEXb,EAAOmH,WACVnH,EAAOmH,SAAW,CAAE,GAGtBnH,EAAOmH,SAASk4D,KAAKnsE,CAAO,EAExBy+D,EAAMxqD,UACRF,EAAKo4D,KAAK,GAAG1N,EAAMxqD,SAASxB,IAAIgsD,IAAU,CAAE3xD,OAAQ9M,EAASy+D,MAAAA,CAAO,EAAC,CAAC,CAE1E,CAEA,OAAO/vD,EAAKuF,QACd,CAEA,SAAS2qD,EAAarzC,EAAsB,CAC1C44E,EAAYn+F,IAAIulB,CAAK,CACvB,CAEA,SAASszC,EAAatzC,EAAsB,CAC1C44E,EAAYW,OAAOv5E,CAAK,CAC1B,CAEA,SAASk3E,EAAcnyF,EAAmC,CACxD,UAAWpD,KAAQi3F,EACjB7zF,EAAGpD,CAAI,CAEX,CAEA,SAASwmC,EAAatuB,EAAes5C,EAA2BD,EAA0B,CACpF73C,EAAc7oB,QAAUqnB,IAC1BwB,EAAc7oB,MAAQqnB,EAEtB+uB,EAAK,gBAAiB/uB,CAAK,EAC3B9B,EAAUnO,EAAMmnD,SAAUl3C,EAAOs5C,CAAI,EAEjC,CAACvpD,EAAM+uF,aAAe/uF,EAAM8uF,QAAUxlC,GACxCtpD,EAAM8uF,OAAO93B,KAAK1N,CAAK,EAG7B,CAEA,SAASikC,EAAat9E,EAAe41D,EAAmBtc,EAA2B,CAE/Ep7C,EADE03D,EACQ7lE,EAAM4vF,SAEN5vF,EAAM6vF,SAFU5/E,EAAOs5C,CAAI,CAIzC,CAEA,SAAS+lC,GAAmB,CAC1B,GAAItvF,EAAM+gC,WAAY,OAEtB,IAAI+uD,EAA0C,KAE9C,UAAW/3F,KAAQi3F,EACjBj3F,EAAKo1F,eAAiBp1F,EAAKu0F,UAEvB,CAACwD,GAAqB/3F,EAAKu0F,YAC7BwD,EAAoB/3F,GAGtBA,EAAKs1F,oBAAoB,EAAK,EAGhCV,EAAU/jG,MAAQ,EACpB,CAEA,SAAS2mG,GAAmB,CAC1B,GAAIvvF,CAAAA,EAAM+gC,aAEV4rD,EAAU/jG,MAAQ,GAEdquB,EAAQruB,OAAO,CACjB,MAAMiQ,EAAKoe,EAAQruB,MACbmC,EAAWA,IAAM,CACrB6pD,sBAAsB,IAAM,CAC1B/7C,EAAG29C,oBAAoB,gBAAiBzrD,CAAQ,EAEhD,MAAMglG,EAAenyC,MAAM9e,KAAKkwD,CAAW,EAAEp8B,KAC3C76D,GAAQA,EAAKkY,QAAUwB,EAAc7oB,KACvC,EAEAgsD,sBAAsB,IAAM,CAC1BA,sBAAsB,IAAM,CAC1B,UAAW78C,KAAQi3F,EACjBj3F,EAAKg0F,cAAgBh0F,EAAKo1F,eAG5B,GAAI4C,EAAc,CAChB,IAAIp4F,EAASo4F,EAAangB,YAE1B,KAAOj4E,GACLA,EAAOo0F,cAAgB,GACvBp0F,EAASA,EAAOi4E,WAEpB,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACF,EAED/2E,EAAGs9C,iBAAiB,gBAAiBprD,CAAQ,CAC/C,CACF,CAEA,SAASykG,EAAkBv/E,EAAe,CACxC,UAAWlY,KAAQi3F,EACbj3F,EAAKkY,QAAUA,GACjBlY,EAAKs1F,oBAAoB,GAAM,EAAI,CAGzC,CAEA,SAASc,EAAgB/tF,EAA6ByQ,EAA4B,CAChF,OAAOM,EAAU,WAACjN,EAAO,QAAS,CAAE,GAAG9D,CAAO,EAAG,IAAA,CAAA,IAAA2sC,EAAA,MAAM,CAAA77B,EAAA,YAAAG,GAAA,CAAA,SACjCrR,EAAMkE,MAAMoc,MAAK,KAAQlgB,CAAMklC,EAAAA,GAAAyH,EAChDl8B,EAAe,CAAA,EAAAk8B,EAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,CAAA,EAEnB,CAAA,EAAC,CACJ,CAEA,SAASijD,EAAej4F,EAAmB,CACzC,OAAAmZ,EAAAA,YAAA06E,GAAA,CAAA,MAEW7zF,EAAKkY,MAAK,KACXlY,EAAKwR,KAAI,aACHxR,EAAKqX,UAAS,SAChBrX,EAAK8b,SAAQ,SACb9b,EAAK+G,SAAQ,MAChB/G,EAAKuxD,MAAK,KACXvxD,EAAKwxD,IAAI,EAAA,CAAA15C,QAAAA,IAAA,CAEd9X,EAAKS,KAAOsE,GAAW/E,EAAKS,IAAI,EAAIT,EAAKkY,KAAK,CAAA,CAAA,CAGrD,CAEA,SAASggF,GAAc,CACrB,OAAOxB,EAAM7lG,MAAM0U,IAAIoyF,GACrBA,EAAKtsC,MAAKlyC,EAAA,YAAAw6E,GAAA,CAAA,IACQgE,EAAKz/E,MAAK,MAASy/E,EAAKl3F,KAAOsE,GAAW4yF,EAAKl3F,IAAI,EAAIk3F,EAAKz/E,KAAK,EAAA,CAAAJ,QAAAA,IAAAA,OAAA,QAC9E6/E,EAAAA,EAAK5wF,WAAL4wF,MAAAA,EAAenlG,OAASmlG,EAAK5wF,SAASxB,IAAI0yF,CAAc,EAAI,IAAI,EAAA,CAAA,EAGnEA,EAAeN,CAAI,CAEvB,CACF,CAEA,MAAO,IACLx+E,EAAAA,YAAA,KAAA,CAAA,IACW+F,EAAO,MAASrT,EAAUhb,MAAK,KAAQ,OAAM,SAAY,GAAE,MAAS+nB,EAAM/nB,KAChFuoB,EAAAA,CAAAA,EAAAA,WAAWjN,EAAO,UAAW,CAAE,EAAE,IACzBlE,EAAM+gC,WACT,CAAA7vB,EAAAA,YAAA00C,GAAA,CAAA,MACiBr1C,EAAGg8B,GAAG,UAAU,EAAC,QAAA,GAAA,IAAe,CAAC,EAAA,CAE9C18B,QAASogF,EACTzkF,QAASA,CAAC,CAAE3Y,MAAAA,KAA0Bqe,EAAAA,YAAAg/E,GAAA,CAAA,IACrBhB,EAAI,MAAST,EAAM7lG,MAAM6hD,MAAM,CAAC53C,CAAK,CAAC,EAAA,IAAA,EAI5D,CAAA,EACCo9F,EAAa,CAClB,CAAC,CAAA,CAIV,CACF,CAAC,ECvXYE,GAAchjF,GAAW,CACpC,KAAMI,GACN,MAAOI,GACP,MAAOZ,EACP,SAAUA,EACV,UAAW,OACX,WAAY,OACZ,QAASA,EACT,YAAayB,GACb,cAAe,OACf,SAAUA,GACV,UAAWA,GACX,SAAU,OACV,UAAW,OACX,eAAgB,SAChB,UAAWzB,EACX,KAAM,OACN,MAAO,OACP,SAAUmB,EAAoC,CAChD,CAAC,6MCHK,KAAA,CACJ,MAAA63B,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,cAAAC,EACA,cAAAC,GACEhD,GAAuB,IAAM,OAAA,OAAAriC,EAAA4oC,EAAM,QAAN,YAAA5oC,EAAa,QAAO,EAG/Cf,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,SAAU,IAAMtyB,EAAS,MACzB,UAAW,GACX,WAAY,GACZ,QAAS,IAAMoyB,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,cAAe,KACf,SAAUA,GAAe,EACzB,UAAWA,GAAe,EAC1B,SAAU,GACV,UAAW,GACX,eAAgB,CACd,QAAS,KACT,OAAQ,EACV,EACA,UAAW,GACX,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKuwB,EAAOC,EAIP1uB,EAAKtF,GAAc,QAAQ,EAC3B3B,EAAQU,GAAS,EACjB89B,EAAep2B,EAAAA,IAAI1R,EAAM,KAAK,EAE9B2pC,EAAQj4B,EAAAA,IAAsB,EAE9B9N,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,MAAM,CAAC,EAAGu3B,EAAa,MAC9B,CAACv3B,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAAA,CAEhC,CACD,EACK2Q,EAAQtP,EAAAA,SAAS,KACd,CACL,gBAAiBymC,EAAa,MAAQ9nC,EAAM,UAAYA,EAAM,UAChE,EACD,EACKowF,EAAc/uF,EAAAA,SAAS,KACpB,CACL,MAAOymC,EAAa,MAAQ9nC,EAAM,UAAYA,EAAM,UACtD,EACD,EACKnG,EAAawH,EAAAA,SAAS,IACnBrB,EAAM,UAAYA,EAAM,OAChC,EAED4M,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPk/C,EAAa,MAAQl/C,CAAA,CAEzB,EAEakpB,EAAA,CACX,MAAAi0B,EACA,QAAAC,EACA,aAAA8B,EACA,MAAA6B,EACA,MAAQ9+C,GAA2B,OAAA,OAAAkW,EAAA4oC,EAAM,QAAN,YAAA5oC,EAAa,MAAMlW,IACtD,KAAM,IAAA,OAAM,OAAAkW,EAAA4oC,EAAM,QAAN,YAAA5oC,EAAa,OAAK,CAC/B,EAED,eAAespC,EAAa0zB,EAAU,CAACj2B,EAAa,MAAO,CACrD,GAAAi2B,IAAYj2B,EAAa,MAAO,OAEpC,IAAIx0C,EAAkB,GAElB,OAAO0M,EAAM,gBAAmB,aACzB1M,EAAA0M,EAAM,eAAe+9D,CAAO,EAEjCz0E,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,IAIfA,IAAW,KACbw0C,EAAa,MAAQi2B,EAErB/+B,EAAK,eAAgB++B,CAAO,EAC5B33B,EAAc23B,CAAO,EACX5vD,EAAAnO,EAAM,SAAU+9D,CAAO,EACnB73B,EAAA,EAChB,6BAKA7zB,EAAA,mBA8DQ,QAAA,CA7DL,GAAIH,QAAK6zB,CAAA,EACT,uBAAOniC,EAAS,KAAA,EACjB,KAAK,SACJ,eAAckkC,EAAY,MAC1B,gBAAejuC,EAAU,MACzB,kBAAiBqY,QAAO8zB,CAAA,EACxB,uBAAOr1B,EAAK,KAAA,CAAA,GAEb8B,EAAAA,mBAUE,QAAA,SATI,QAAJ,IAAIk3B,EACJ,KAAK,WACJ,MAAKr3B,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,QAASu3B,EAAY,MACrB,SAAUjuC,EAAU,MACpB,KAAMqY,EAAAA,MAAKlS,CAAA,EAAC,KACZ,qCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GACd,wBAAQqqC,KACR,oCAAD,IAAW,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,cAEb53B,EAAAA,mBAWO,OAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,EAAiB,cAAA,EAAA,GAClCkC,EAAAA,mBAIO,OAAA,CAJA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,GACjBgC,EAAAA,WAEOC,mBAFP,IAEO,CADLtB,cAAsEgB,EAAAA,MAAAb,EAAA,EAAA,CAA3D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAAM,IAAoB,CAAjB2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,QAAQ,EAAA,CAAA,CAAA,8BAG5DyS,EAAAA,mBAIO,OAAA,CAJA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,GACjBgC,EAAAA,WAEOC,oBAFP,IAEO,CADLtB,cAAuEgB,EAAAA,MAAAb,EAAA,EAAA,CAA5D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAAM,IAAqB,CAAlB2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,SAAS,EAAA,CAAA,CAAA,kCAI/DyS,EAAAA,mBAiBO,OAAA,CAjBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAa,uBAAO6/E,EAAW,KAAA,CAAA,GACpCl+E,EAAAA,MAAAlS,CAAA,EAAM,QAAlBuS,aASOC,2BATP,IASO,CARLtB,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CAPA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAKQ,CALRkR,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,EAAAA,SAAM,aAAeA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,KAC1C,MAAM,gEAIZiJ,EAKO,WAAAC,EAAA,OAAA,OAAA,OALmB,MAAOs1B,EAAY,KAAA,EAA7C,IAKO,CAJL52B,cAGWgB,EAAAA,MAAAb,EAAA,EAAA,CAHA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,YAAe8nC,EAAY,KAAA,CAAA,qBACjE,IAA0E,CAA9DA,EAAY,OAAI51B,QAAKlS,CAAA,EAAC,wBAAlCmS,EAAA,YAA0ED,QAAApO,EAAA,EAAA,OAA7B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,QAAA,qBACvC8nC,EAAY,OAAI51B,EAAK,MAAAlS,CAAA,EAAC,yBAAxCmS,EAAAA,YAAkFD,EAAAA,MAAApO,EAAA,EAAA,OAA9B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,SAAA,oFAItEyS,EAAAA,mBAWO,OAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACLu3B,EAAY,qBAAxBz1B,EAAAA,mBAIO,OAAA,OAJoB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,GACrCgC,EAAAA,WAEOC,mBAFP,IAEO,CADLtB,cAAsEgB,EAAAA,MAAAb,EAAA,EAAA,CAA3D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAAM,IAAoB,CAAjB2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,QAAQ,EAAA,CAAA,CAAA,8CAG5DqS,EAAAA,mBAIO,OAAA,OAJO,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,GACxBgC,EAAAA,WAEOC,oBAFP,IAEO,CADLtB,cAAuEgB,EAAAA,MAAAb,EAAA,EAAA,CAA5D,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAAM,IAAqB,CAAlB2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,SAAS,EAAA,CAAA,CAAA,+CC7KpDyP,qBAAgB,CAC7BjX,KAAM,eACNwH,MAAOmqF,GACPtkD,MAAO,CAAC,mBAAoB,eAAgB,sBAAuB,kBAAkB,EACrFn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,QACrC,MAAM9lC,EAAQiM,GAAS,eAAgB0D,EAAQ,CAC7CrN,OAAQ,KACR+1C,IAAK,SACLg4C,KAAM,GACNC,SAAU,GACVC,KAAM,CACJ1gF,QAASA,KAAO,CAAErX,KAAM,EAAG,GAC3BsX,OAAQ,EACT,EACD0gF,YAAa,GACbC,aAAc,GACd5mF,OAAQA,IAAM,CAAC,MAAO,QAAS,OAAO,EACtC66E,QAASA,IAAM,CAAE,EACjBgM,SAAU,QACVjG,OAAQA,IAAM,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/Et+F,MAAO,GACPsiG,MAAO,CACL5+E,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACT,EACDs7E,UAAW,KACXuF,SAAU,IACZ,CAAC,EAEKpgF,EAAKtF,GAAc,QAAQ,EAC3B3B,EAAQU,GAAU,EAClB1H,EAASI,GAAU,SAAU07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACnDujE,EAAcqnB,GAAgB,EAC9BgG,EAAkBl/E,EAAAA,IAAoB1R,EAAM0wF,QAAQ,EACpDG,EAAqBn/E,EAAAA,IAAI1R,EAAMwwF,WAAW,EAE1Cd,EAAOh+E,EAAAA,IAAkB,EAEzB,CAAE2jB,MAAAA,CAAO,EAAGX,GAAQ,EACpB,CAAEva,UAAAA,CAAW,EAAGF,GAAY,EAE5BswE,EAASlpF,EAAAA,SAAS,KAEtB8Y,EAAUvxB,MACHJ,GAAWojD,SAASpjB,gBAAkB,KAC9C,EACKsoE,EAAep/E,MAAI1R,EAAM7T,OAAS4kG,EAAY,KAAM/wF,GAAAA,EAAMyqF,SAANzqF,YAAAA,GAAe,GAAE,EACrEgxF,EAASt/E,EAAG,IAAC,EAAK,EAElB9N,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAGg8B,GAAG,QAAQ,EACd,CACE,CAACh8B,EAAGo4B,GAAG,MAAM,CAAC,EAAG,CAAC46B,EAAY0tB,SAC9B,CAAC1gF,EAAGm8B,IAAI,SAAU,SAAS,CAAC,EAAG62B,EAAY0tB,UAAYjxF,EAAM4oC,QAC7D,CAACr4B,EAAGm8B,IAAI,SAAU,MAAM,CAAC,EAAG,CAAC62B,EAAY2tB,aACzC,CAAC3gF,EAAGm8B,IAAI,SAAU,SAAS,CAAC,EAAG62B,EAAY4tB,OAC7C,EACA5tB,EAAY5/D,QAAQqoE,MAAM,CAE7B,EACKolB,EAAc/vF,EAAAA,SAAS,IAAM,QACjC,OAAKrB,GAAAA,EAAM0kF,UAAN1kF,MAAAA,GAAezV,OAWbyV,EAAM0kF,QAAQlmF,OAAOgoF,IAAU,CAACA,GAAO7pD,MAAM,EAV3C,CACL,CACE1sB,MAAO,UACPzX,KAAM8J,EAAO1Z,MAAMyoG,QACnB9nF,KAAMD,EAAM1gB,MAAMyoG,QAAQ9nF,KAC1B6F,UAAW9F,EAAM1gB,MAAMyoG,OACzB,CAAC,CAKP,CAAC,EACKC,EAAUjwF,EAAAA,SAAS,IAChB,CAAC,EAAErB,EAAMqwF,MAAQrwF,EAAMswF,UAAYpsF,EAAM9S,KACjD,EACKmgG,EAAUlwF,EAAAA,SAAS,IAAM,WAC7B,MAAO,CAAC,GAAErB,GAAAA,EAAMyuF,QAANzuF,MAAAA,GAAazV,SAAUyV,GAAAA,EAAMorF,YAANprF,MAAAA,GAAiB8uF,OACpD,CAAC,EAEK/6C,EAAaC,EAAe,gBAChClnC,WAAS,CACP+4D,SAAUznC,EAAAA,MAAMmlC,EAAa,UAAU,EACvCsrB,QAASzwD,EAAAA,MAAMmlC,EAAa,SAAS,EACrCiuB,eAAAA,EACAC,cAAAA,EACAC,kBAAAA,EACAC,kBAAAA,CACF,CAAC,CACH,EAEA7rD,EAAO,CAAE4pD,KAAAA,EAAM8B,eAAAA,EAAgBC,cAAAA,EAAeG,kBAAAA,EAAmBD,kBAAAA,CAAkB,CAAC,EAEpF/kF,EAAAA,MACE,IAAM5M,EAAM0wF,SACZ9nG,IAAS,CACPgoG,EAAgBhoG,MAAQA,EAC1B,CACF,EACAgkB,EAAAA,MACE,IAAM5M,EAAMwwF,YACZ5nG,IAAS,CACPioG,EAAmBjoG,MAAQA,EAC7B,CACF,EACAgkB,EAAK,MAACkkF,EAActG,EAAmB,EACvC59E,EAAAA,MACE,IAAM5M,EAAM2wF,SACZ/nG,IAAS,QACPooG,EAAOpoG,MAAQA,MAAS2hG,GAAAA,EAAO3hG,QAAP2hG,YAAAA,GAAcsH,UAAUr4F,SAAS,UAAW,EACtE,EACA,CAAEiwC,UAAW,EAAK,CACpB,EAEAh1B,EAAAA,UAAU,IAAM,CACdq9E,EAAYd,EAAOpoG,KAAK,CAC1B,CAAC,EAEDmpG,EAAAA,cAAc,IAAM,CAClBnlF,EAAAA,MACE,IAAM5M,EAAM7T,MACZvD,IAAS,QACPkoG,EAAaloG,MAAQA,IAASmoG,EAAc,KAAI/wF,GAAAA,EAAMyqF,SAANzqF,YAAAA,GAAe,GACjE,EACA,CAAEypC,UAAW,EAAK,CACpB,EAEA+gD,GAAoBsG,EAAaloG,KAAK,CACxC,CAAC,EAED,SAASmoG,GAAe,CACtB,OAAIxG,EAAO3hG,MACFy8B,iBAAiBklE,EAAO3hG,KAAK,EAAEkzD,iBAAiB,0BAA0B,EAG5E,SACT,CAEA,SAASk2C,EAAuB/hF,GAAes5C,GAA2B,CACxEp7C,EAAUnO,EAAMiyF,aAAchiF,GAAOs5C,EAAI,CAC3C,CAEA,SAAS2oC,EAAqBrpG,GAAsB,CAClD06E,EAAY4uB,aAAa,IAAM,CAC7BvB,EAAgBhoG,MAAQC,GAExBm2C,EAAK,mBAAoBn2C,EAAI,EAC7BslB,EAAUnO,EAAMoyF,YAAavpG,EAAI,CACnC,CAAC,CACH,CAEA,SAAS2oG,EAAe3rB,GAAW,CAACtC,EAAYsC,SAAU,CACxDtC,EAAYsC,SAAWA,GAEvB13D,EAAUnO,EAAMqyF,iBAAkBxsB,EAAQ,CAC5C,CAEA,SAAS4rB,EAAc5C,GAAU,CAACtrB,EAAYsrB,QAAS,CACrDtrB,EAAYsrB,QAAUA,GAEtB1gF,EAAUnO,EAAMsyF,gBAAiBzD,EAAO,CAC1C,CAEA,SAAS6C,EAAkBvlG,GAAe,CACxC2kG,EAAaloG,MAAQuD,GAErB6yC,EAAK,eAAgB7yC,EAAK,EAC1BgiB,EAAUnO,EAAMuyF,cAAepmG,EAAK,CACtC,CAEA,SAASqmG,EAAgBt5F,GAAmB,CAC1CiV,EAAUnO,EAAMyyF,YAAav5F,EAAK,CACpC,CAEA,SAASy4F,EAAkBe,GAAU,CAAC7B,EAAmBjoG,MAAO,CAC9DioG,EAAmBjoG,MAAQ8pG,GAE3B1zD,EAAK,sBAAuB0zD,EAAO,EACnCvkF,EAAUnO,EAAM2yF,gBAAiBD,EAAO,CAC1C,CAEA,SAASE,EAAiB3iF,GAAes5C,GAA2B,CAClEooC,EAAkB,EAAK,EACvBxjF,EAAUnO,EAAM6yF,aAAc5iF,GAAOs5C,EAAI,CAC3C,CAEA,SAASqoC,EAAkB3hF,GAAe,SACxCy/E,GAAAA,EAAK9mG,QAAL8mG,MAAAA,GAAYF,kBAAkBv/E,GAChC,CAEA,SAAS6hF,EAAYnB,GAAmB,CACtCK,EAAOpoG,MAAQ+nG,GAEf3xD,EAAK,mBAAoB2xD,EAAQ,EACjCxiF,EAAUnO,EAAM8yF,cAAenC,EAAQ,EAElCnoG,IAELosD,sBAAsB,IAAM,CACtB21C,EAAO3hG,QACL+nG,GACFpG,EAAO3hG,MAAMipG,UAAUhhG,IAAI,MAAM,EAEjC05F,EAAO3hG,MAAMipG,UAAUl+E,OAAO,MAAM,EAG1C,CAAC,CACH,CAEA,SAASo/E,GAAc,CACrB,OAAA7hF,EAAAA,YAAApN,GAAiBwF,EAAM1gB,MAAMoqG,MAAK,IAAA,CACpC,CAEA,SAASC,GAAqB,CAC5B,OAAA/hF,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,aAAa,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,MAErB,CAACX,EAAGg8B,GAAG,aAAa,EAAGh8B,EAAGm8B,IAAI,cAAe,OAAO,CAAC,EAAC,QACpDY,IAAM4kD,EAAqB,OAAO,GAE1CtB,CAAAA,EAAgBhoG,QAAU,SAAWmqG,EAAW,CAAE,CAAA,EAAA7hF,EAAA,YAAA,MAAA,CAAA,MAEzCX,EAAGg8B,GAAG,aAAa,EAAC,QAAWe,IAAM4kD,EAAqB,QAAQ,GAC3EtB,CAAAA,EAAgBhoG,QAAU,UAAYmqG,EAAW,CAAE,CAAA,CAAA,CAAA,CAI5D,CAEA,SAASG,GAAoB,CAC3B,OAAAhiF,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,aAAa,GAACr7B,CAAAA,EAAA,YAAAiiF,GAAA,CAAA,MAErBnC,EAAOpoG,MAAK,MACZ,CAAC2nB,EAAGg8B,GAAG,YAAY,EAAGykD,EAAOpoG,OAAS2nB,EAAGm8B,IAAI,aAAc,MAAM,CAAC,EAAC,aAC9D,QAAO,SACTolD,CAAW,EAAA,CAGnBvoF,KAAMA,IACJynF,EAAOpoG,MAAKsoB,EAAAA,YAAApN,GACAwF,EAAM1gB,MAAM+hG,KAAI,IAAA,EAAAz5E,EAAAA,YAAApN,GAEhBwF,EAAM1gB,MAAM8hG,MAAK,IAAA,CAC5B,CAAA,CAAA,CAAA,CAKb,CAEA,SAAS0I,GAAoB,QAC3B,OAAKpzF,GAAAA,EAAMyqF,SAANzqF,MAAAA,GAAczV,OAInB2mB,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,aAAa,GAC5BvsC,CAAAA,EAAMyqF,OAAOntF,IAAInR,IAAK+kB,EAAA,YAAA,MAAA,CAAA,IAEd/kB,GAAK,MACHokB,EAAGg8B,GAAG,aAAa,EAAC,MACpB,CACL6P,gBAAiBjwD,EAClB,EAAA,QACQmhD,IAAMokD,EAAkBvlG,EAAK,GAErC2kG,CAAAA,EAAaloG,QAAUuD,IAAS4mG,EAAa,CAAA,CAAA,CAEjD,CAAC,CAAA,EAhBG,IAmBX,CAEA,SAASM,IAAmB,QAC1B,OAAInvF,EAAMovF,OACDniF,aAAWjN,EAAO,SAAU6vC,CAAU,EAG3C,QAAO/zC,GAAAA,EAAMuwF,OAANvwF,YAAAA,GAAYszF,SAAW,SAChCpiF,EAAAA,YAAAq3C,GAAA,CAAA,IAESvoD,EAAMuwF,KAAK+C,OAAM,OACdtzF,EAAMywF,aAAY,QACjBnjD,IAAMqkD,EAAiB,CAAE,EAAA,CAGhCpoF,KAAMA,IAAA2H,EAAAA,YAAApN,GAAgBwF,EAAM1gB,MAAM2nG,KAAI,IAAA,CAAS,CAAA,EAMvDr/E,EAAAA,YAAAq3C,GAAA,CAAA,OACkBvoD,EAAMywF,aAAY,QAAWnjD,IAAMqkD,EAAiB,CAAE,EAAA,CAElEpoF,KAAMA,IAAA2H,EAAAA,YAAApN,GAAA4O,EAAA,WACMpJ,EAAM1gB,MAAM2nG,KAAI,CAAA,KAAQvwF,EAAMuwF,KAAK+C,QAAUhqF,EAAM1gB,MAAM2nG,KAAKhnF,IAAI,CAAA,EAAA,IAAA,CAC7E,CAAA,CAIT,CAEA,SAASgqF,IAAiB,CACxB,OAAAriF,EAAA,YAAAggE,GAAA,KAAA,CAAArhE,QAAAA,IAEK7P,WAAAA,SAAAA,GAAAA,EAAMuwF,OAANvwF,YAAAA,GAAYxH,OAAI0Y,EAAA,YAAA,KAAA,CAAA,MACJX,EAAGg8B,GAAG,cAAc,CAAC,EAAA,CAAAr7B,EAAA,YAAA,OAAA,CAAA,MACjBX,EAAGg8B,GAAG,WAAW,CAAC,EAAA,CAAGvsC,EAAMuwF,KAAK/3F,IAAI,CAAA,EAChDwH,EAAMuwF,KAAKiD,OAAKtiF,EAAA,YAAA,OAAA,CAAA,MAAiBX,EAAGg8B,GAAG,YAAY,CAAC,EAAA,CAAGvsC,EAAMuwF,KAAKiD,KAAK,CAAA,CAAQ,CAEnF,GACAxzF,GAAAA,EAAM6J,SAAN7J,MAAAA,GAAczV,OAASkpG,EAAe,EAAG,KACzCrC,EAAYxoG,MAAM0U,IAAIkpF,IAAMt1E,EAAA,YAAA4/D,GAAA,CAAA,IAEpB0V,GAAOv2E,MAAK,MACVM,EAAGg8B,GAAG,aAAa,EAAC,MACpBi6C,GAAOv2E,MAAK,SACTu2E,GAAO3yE,SAAQ,QAChB2yE,GAAOnjC,QAAO,SACb8D,IAAM6qC,EAAuBxL,GAAOv2E,MAAOu2E,GAAOj9B,MAAQ,CAAE,CAAA,CAAC,EAAA,CAAA15C,QAAAA,IAEtE22E,CAAAA,GAAOj9E,MAAI2H,EAAA,YAAApN,GAAA4O,EAAAA,WAEJ8zE,GAAOp3E,UAAS,CAAA,KACdo3E,GAAOj9E,KAAI,MACV,CAAEwvC,YAAa,KAAM,CAAC,CAAA,EAAA,IAAA,EAGhCytC,GAAOhuF,MAAQguF,GAAOv2E,KAAK,CAAA,CAAA,CAE/B,CAAC,EAAA,CAAA,CAGR,CAEA,SAASwjF,GAAgB,CACvB,OAAAviF,EAAAA,YAAA,KAAA,CAAA,MACaX,EAAGg8B,GAAG,QAAQ,CAAC,EAAA,CACvBvsC,EAAM6J,OAAOsG,SAAS,KAAK,GAC1BozD,EAAYmwB,WAAa,CAAAxiF,EAAA,YAAA,MAAA,CAAA,IACf,EAAC,MAASX,EAAGg8B,GAAG,cAAc,CACrCjqC,EAAAA,CAAAA,EAAO1Z,MAAM8nG,QAAQ,CAExBuC,EAAAA,EAAoB,CAAA,EAErBjzF,EAAM6J,OAAOsG,SAAS,OAAO,GAAK,CAAAe,EAAAA,YAAA,MAAA,CAAA,IACvB,EAAC,MAASX,EAAGg8B,GAAG,cAAc,CACrCjqC,EAAAA,CAAAA,EAAO1Z,MAAM+qG,SAAS,CAEzBT,EAAAA,EAAmB,CAAA,EAEpBlzF,EAAM6J,OAAOsG,SAAS,OAAO,GAAK,CAAAe,EAAAA,YAAA,MAAA,CAAA,IACvB,EAAC,MAASX,EAAGg8B,GAAG,cAAc,GACrCjqC,CAAAA,EAAO1Z,MAAMgrG,UAAU,CAE1BR,EAAAA,EAAmB,CAAA,CACpB,CAAA,CAGP,CAEA,MAAO,IAAM,CACX,MAAM/4C,GAAar6C,EAAMq4C,KAAO,SAEhC,OAAAnnC,EAAAA,YAAAmpC,GAAA,CAAA,MACoBz2C,EAAUhb,KAAK,EAAA,CAAAinB,QAAAA,IAAA,CAC9ByhF,EAAQ1oG,OAAKsoB,EAAAA,YAAA,MAAA,CAAA,MACA,CAACX,EAAGg8B,GAAG,aAAa,EAAGg3B,EAAY5/D,QAAQkwF,UAAU,CAAC,EAAA,CAC/D3vF,EAAM9S,KACL+f,EAAU,WAACjN,EAAO,OAAQ6vC,CAAU,EAClC/zC,EAAM0wF,WAAa,SAAQx/E,EAAAA,YAAA,MAAA,CAAA,MACjBX,EAAGg8B,GAAG,MAAM,EAAC,QAAWimD,CAAe,EAAA,CAChDxyF,EAAMqwF,MAAIn/E,EAAAA,YAAA,MAAA,CAAA,MACGX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,IACblR,EAAMqwF,KAAI,IAAO,MAAM,EAAA,IAAA,CAAA,CAAA,EAGpCrwF,EAAMswF,UAAQp/E,EAAA,YAAA,OAAA,CAAA,MAAiBX,EAAGg8B,GAAG,WAAW,GAAIvsC,CAAAA,EAAMswF,QAAQ,CAAA,CAAQ,GAE3E,IAAI,CAAA,EAEXp/E,EAAA,YAAA,MAAA,CAAA,MACW,CAACX,EAAGg8B,GAAG,aAAa,EAAGg3B,EAAY5/D,QAAQmwF,UAAU,CAC9D5vF,EAAAA,CAAAA,EAAM2L,QACLsB,EAAU,WAACjN,EAAO,UAAW6vC,CAAU,EACrCw9C,EAAQ3oG,MAAKsoB,cAAA6iF,GAAArhF,EAAAA,WAAA,CAAA,IAERg9E,CAAI,EACJ1vF,EAAMorF,WAAa,GAAE,CAAA,WAAA,GAAA,SAAA,GAAA,QAGjBprF,EAAMyuF,MAAK,SACVmE,CAAgB,CAAA,EAAA,IAAA,EAE1B,IAAI,CAET1uF,EAAAA,EAAM7S,OAAK6f,EAAA,YAAA,MAAA,CAAA,MACE,CAACX,EAAGg8B,GAAG,cAAc,EAAGg3B,EAAY5/D,QAAQqwF,WAAW,GAChE7iF,CAAAA,EAAU,WAACjN,EAAO,QAAS6vC,CAAU,CAAC,CAE1C,EACA7vC,EAAMqsF,KACLp/E,EAAAA,WAAWjN,EAAO,OAAQ6vC,CAAU,EAAC7iC,EAAA,YAAA0/D,GAAA,CAAA,MAG5B,CAACrgE,EAAGg8B,GAAG,MAAM,EAAGg3B,EAAY5/D,QAAQswF,UAAU,EAAC,SAAA,GAAA,UAE3C5+D,EAAMzsC,MAAQ,eAAiB,aAAY,QAC7CioG,EAAmBjoG,MAAK,QACxB,SAAQ,eACDg2D,IAAM+yC,EAAkB,EAAK,CAAC,EAAA,CAG5C9hF,QAASwjF,GACTpiB,KAAMsiB,GAGX,CAAA,CAAA,CAAA,CAGN,CACH,CACF,CAAC,EClcYW,GAAc/mF,GAAW,CACpC,GAAI,OACJ,KAAM,OACN,KAAMqB,GACN,UAAWzB,EACX,SAAUA,EACV,OAAQ,OACR,QAASmB,EAAuC,CAClD,CAAC,6FCJK,MAAAimF,EAAc,OAAO,OAAqB,CAC9C,UACA,UACA,UACA,QACA,UACA,MAAA,CACD,EAKKn0F,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,GAAI,CACF,QAAS,KACT,OAAQ,EACV,EACA,KAAM,CACJ,QAAS,UACT,UAAY3oB,GAAsBurG,EAAY,SAASvrG,CAAK,CAC9D,EACA,KAAM6lB,GAAe,EACrB,UAAW,GACX,SAAU,GACV,OAAQ,QAAA,CACT,EAEK8B,EAAKtF,GAAc,QAAQ,EAE3BrH,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAC9B,EACD,EAED,SAASgnD,EAAY9tD,EAAmB,CAClC8G,EAAM,UACR9G,EAAM,eAAe,EAGbiV,EAAAnO,EAAM,QAAS9G,CAAK,CAAA,6BAK9BmZ,EAAA,mBAWI,IAAA,CAVD,uBAAOzO,EAAS,KAAA,EAChB,KAAMsO,EAAAA,MAAKlS,CAAA,EAAC,GACb,SAAS,IACR,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,QAAOgnD,CAAA,GAERz0C,EAAAA,WAEOC,mBAFP,IAEO,CADON,QAAAlS,CAAA,EAAM,kBAAlB,EAAAmS,cAAyED,EAAAA,MAAApO,EAAA,EAAA,OAAhD,MAAKwO,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,IAAA,0DAE9DuS,aAAaC,EAAA,OAAA,SAAA,CAAA,aC7DF/C,qBAAgB,CAC7BjX,KAAM,eACNwH,MAAOqqF,GACP36E,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,eAAgB0D,EAAQ,CAC7C0oC,IAAK,SACL+7C,UAAW,GACXC,MAAOA,IAAM,CAAE,EACfC,cAAe,IACjB,CAAC,EAEK/jF,EAAKtF,GAAc,QAAQ,EAC3Bs4D,EAAcqnB,GAAgB,EAC9B2J,EAAoB1J,GAAczsD,EAAK,MAACp+B,EAAO,eAAe,CAAC,EAE/D4D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAGg8B,GAAG,QAAQ,EACd,CACE,CAACh8B,EAAGo4B,GAAG,MAAM,CAAC,EAAG,CAAC46B,EAAY0tB,SAC9B,CAAC1gF,EAAGm8B,IAAI,SAAU,SAAS,CAAC,EAAG62B,EAAY0tB,UAAYjxF,EAAM4oC,OAC/D,EACA26B,EAAY5/D,QAAQkoE,MAAM,CAE7B,EAED,SAAS2oB,GAAc,OACrB,OAAKx0F,EAAAA,EAAMq0F,QAANr0F,MAAAA,EAAazV,OAIlB2mB,EAAAA,YAAA,MAAA,CAAA,MAEW,CACLX,EAAGg8B,GAAG,OAAO,EACb,CAACgoD,EAAkB3rG,OAAS2nB,EAAGm8B,IAAI,QAAS,UAAU,EACtD62B,EAAY5/D,QAAQ8wF,WAAW,CAChC,EAAA,CAAAvjF,EAAA,YAAA,MAAA,CAAA,MAEWX,EAAGg8B,GAAG,WAAW,GAC1BvsC,CAAAA,EAAMq0F,MAAM/2F,IAAI,CAAC8lD,EAAOtyD,IAAK,OAAAogB,OAAAA,EAAA,YAAA,MAAA,CAAA,IAErBpgB,EAAK,MACH,CACLyf,EAAGg8B,GAAG,YAAY,EAClB,CAACgoD,EAAkB3rG,OAAS2nB,EAAGm8B,IAAI,aAAc,UAAU,CAAC,CAC7D,EAAA,CAAAx7B,EAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,WAAW,EAAGh8B,EAAGm8B,IAAI,YAAa,OAAO,CAAC,CAAC,EAAA,CAC3D0W,EAAM5kB,GAAEttB,EAAAA,YAAAwjF,GAAA,CAAA,KACOtxC,EAAM75C,KAAI,GAAM65C,EAAM5kB,GAAE,OAAU4kB,EAAMjyD,MAAM,EAAA,CAAA0e,QAAAA,IACzDuzC,CAAAA,EAAM5qD,IAAI,CAAA,CAAA,EAGb,CAAC4qD,EAAM75C,MAAI2H,EAAAA,YAAApN,GAAA,CAAA,KAAgBs/C,EAAM75C,MAAa,IAAA,EAAE65C,EAAM5qD,IAAI,EAE3D4qD,EAAMuxC,SAAOzjF,EAAA,YAAA,MAAA,CAAA,MAAgBX,EAAGg8B,GAAG,cAAc,GAAI,CAAA,KAAK6W,EAAMuxC,OAAO,EAAE,EAAO,CAElFvxC,GAAAA,EAAAA,EAAMtkD,WAANskD,MAAAA,EAAgB74D,OACb64D,EAAMtkD,SAASxB,IAAI,CAAC6gC,EAAMrtC,IAAKogB,EAAA,YAAA,MAAA,CAAA,IACrBpgB,EAAK,MAASyf,EAAGg8B,GAAG,MAAM,GAACr7B,CAAAA,EAAA,YAAAwjF,GAAA,CAAA,KACrBv2D,EAAK50B,KAAI,GAAM40B,EAAKK,GAAE,OAAUL,EAAKhtC,MAAM,EAAA,CAAA0e,QAAAA,IACtDsuB,CAAAA,EAAK3lC,IAAI,CAAA,CAAA,EAEX2lC,EAAKw2D,SAAOzjF,EAAAA,YAAA,MAAA,CAAA,MACCX,EAAGg8B,GAAG,cAAc,CAAI,EAAA,CAAA,KAAKpO,EAAKw2D,OAAO,EAAE,CACxD,CAAA,CAAA,CAEJ,EACC,IAAI,CAAA,EAEX,CAAC,CAAA,CAAA,CAAA,EA3CNzjF,EAAAA,YAAA,MAAA,CAAA,KAAkB,OAAM,cAAA,GAAA,MAAqB,eAAe,EAAA,IAAA,CA+ChE,CAEA,MAAO,IAAM,CACX,MAAMmpC,EAAar6C,EAAMq4C,KAAO,SAEhC,OAAAnnC,EAAAA,YAAAmpC,EAAA,CAAA,MACoBz2C,EAAUhb,KAAK,EAAA,CAAAinB,QAAAA,IAAA,CAC9B3L,EAAMmwF,MAAQljF,EAAU,WAACjN,EAAO,OAAO,EAAIswF,IAAatjF,EAAAA,YAAA,MAAA,CAAA,MAC7C,CAACX,EAAGg8B,GAAG,WAAW,EAAGg3B,EAAY5/D,QAAQywF,SAAS,CAAC,EAAA,CAC5DlwF,EAAMkwF,UAAYlwF,EAAMkwF,YAAcp0F,EAAMo0F,SAAS,CAAA,CAAA,CAAA,CAAA,CAI7D,CACH,CACF,CAAC,EC9Ec3kF,qBAAgB,CAC7BjX,KAAM,cACNwH,MAAOkqF,GACPrkD,MAAO,CAAC,iBAAkB,iBAAiB,EAC3Cn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CACrC,MAAM9lC,EAAQiM,GAAS,cAAe0D,EAAQ,CAC5C0oC,IAAK,QACLwtB,SAAU,GACVgpB,QAAS,GACTJ,MAAO,CACL5+E,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACT,EACDs7E,UAAW,KACXiF,KAAM,GACNC,SAAU,GACVv4D,MAAO,KACP24D,SAAU,OACZ,CAAC,EAEKngF,EAAKtF,GAAc,QAAQ,EAC3B3B,EAAQU,GAAU,EAElBu5D,EAAcqnB,GAAgB,EAC9BgK,EAAiBljF,EAAAA,IAAI1R,EAAM6uF,OAAO,EAClCxpB,EAAkB3zD,EAAAA,IAAI1R,EAAM6lE,QAAQ,EACpC5pC,EAAevqB,EAAG,IAAC,MAAM,EAEzB/R,EAAUkrF,GAAczsD,EAAK,MAACp+B,EAAO,OAAO,CAAC,EAC7CwL,EAAUy/E,GAAkB,EAE5B7iE,EAAM1W,EAAAA,IAAkB,EACxBkd,EAASld,EAAAA,IAAkB,EAC3Bg+E,EAAOh+E,EAAAA,IAAkB,EAEzB9N,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAGg8B,GAAG,OAAO,EACb,CACE,CAACh8B,EAAGo4B,GAAG,MAAM,CAAC,EAAG,CAAC46B,EAAY0tB,SAC9B,CAAC1gF,EAAGm8B,IAAI,QAAS,SAAS,CAAC,EAAG62B,EAAY0tB,UAAYjxF,EAAM4oC,QAC5D,CAACr4B,EAAGm8B,IAAI,QAAS,OAAO,CAAC,EAAG/sC,EAAQ/W,MACpC,CAAC2nB,EAAGm8B,IAAI,QAAS,UAAU,CAAC,EAAG24B,EAAgBz8E,MAC/C,CAAC2nB,EAAGm8B,IAAI,QAAS,SAAS,CAAC,EAAGkoD,EAAehsG,MAC7C,CAAC2nB,EAAGm8B,IAAI,QAAS,SAAS,CAAC,EAAG1sC,EAAM0wF,WAAa,OACnD,EACAntB,EAAY5/D,QAAQkxF,KAAK,CAE5B,EACKC,EAASzzF,EAAAA,SAAS,IACf,CAAC,EAAErB,EAAMqwF,MAAQrwF,EAAMswF,UAAYpsF,EAAMkkB,IACjD,EACKmpE,EAAUlwF,EAAAA,SAAS,IAAM,SAC7B,MAAO,CAAC,GAAErB,EAAAA,EAAMyuF,QAANzuF,MAAAA,EAAazV,SAAUyV,EAAAA,EAAMorF,YAANprF,MAAAA,EAAiB8uF,OACpD,CAAC,EAEK/6C,EAAaC,EAAe,gBAChClnC,WAAS,CACP+4D,SAAUR,EACVwpB,QAAS+F,EACTpD,eAAAA,EACAC,cAAAA,CACF,CAAC,CACH,EAEA3rD,EAAO,CAAE4pD,KAAAA,EAAM8B,eAAAA,EAAgBC,cAAAA,EAAeG,kBAAAA,CAAkB,CAAC,EAEjEhlF,EAAAA,MACE,IAAM5M,EAAM6uF,QACZjmG,GAAS,CACPgsG,EAAehsG,MAAQA,CACzB,CACF,EACAgkB,EAAAA,MACE,IAAM5M,EAAM6lE,SACZj9E,GAAS,CACPy8E,EAAgBz8E,MAAQA,CAC1B,CACF,EACAgkB,EAAK,MACHjN,EACA/W,GAAS,CACP26E,EAAYwxB,UAAY,CAACnsG,EACzBA,GAAS4oG,EAAe,EAAK,CAC/B,EACA,CAAE/nD,UAAW,EAAK,CACpB,EACA78B,QAAMpB,EAAS,IAAMwpF,CAAmB,EAExC,SAASA,GAAsB,CAC7B,IAAIC,EAAY,EACZC,EAAe,EAEf9sE,EAAIx/B,QACNqsG,EAAY7sE,EAAIx/B,MAAMm+B,cAGpB6H,EAAOhmC,QACTssG,EAAetmE,EAAOhmC,MAAMm+B,cAG1BkuE,GAAaC,EACfj5D,EAAarzC,MAAQ,eAAeqsG,EAAYC,CAAY,MAE5Dj5D,EAAarzC,MAAQ,MAEzB,CAEA,SAAS4oG,EAAe3rB,EAAW,CAACR,EAAgBz8E,MAAO,CACzDy8E,EAAgBz8E,MAAQi9E,EAExB7mC,EAAK,kBAAmB6mC,CAAQ,EAChC13D,EAAUnO,EAAMqyF,iBAAkBxsB,CAAQ,CAC5C,CAEA,SAAS4rB,EAAc5C,EAAU,CAAC+F,EAAehsG,MAAO,CACtDgsG,EAAehsG,MAAQimG,EAEvB7vD,EAAK,iBAAkB6vD,CAAO,EAC9B1gF,EAAUnO,EAAMsyF,gBAAiBzD,CAAO,CAC1C,CAEA,SAAS2D,EAAgBt5F,EAAmB,CAC1CiV,EAAUnO,EAAMyyF,YAAav5F,CAAK,CACpC,CAEA,SAAS05F,EAAiB3iF,EAAes5C,EAA2B,CAClEp7C,EAAUnO,EAAM6yF,aAAc5iF,EAAOs5C,CAAI,CAC3C,CAEA,SAASqoC,EAAkB3hF,EAAe,QACxCy/E,EAAAA,EAAK9mG,QAAL8mG,MAAAA,EAAYF,kBAAkBv/E,EAChC,CAEA,MAAO,IAAM,CACX,MAAMoqC,EAAar6C,EAAMq4C,KAAO,QAEhC,OAAAnnC,EAAAA,YAAAmpC,EAAA,CAAA,MACoBz2C,EAAUhb,KAAK,EAAA,CAAAinB,QAAAA,IAAA,CAC9BilF,EAAOlsG,OAAKsoB,EAAAA,YAAA,MAAA,CAAA,IACDkX,EAAG,MAAS,CAAC7X,EAAGg8B,GAAG,WAAW,EAAGg3B,EAAY5/D,QAAQwxF,QAAQ,CAAC,EAAA,CACrEjxF,EAAMkkB,IACLjX,aAAWjN,EAAO,MAAO6vC,CAAU,EAAC7iC,EAAA,YAAA,MAAA,CAAA,MAExBX,EAAGg8B,GAAG,MAAM,EAAC,QAAWimD,CAAe,EAAA,CAChDxyF,EAAMqwF,MAAIn/E,EAAAA,YAAA,MAAA,CAAA,MACGX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,IACblR,EAAMqwF,KAAI,IAAO,MAAM,EAAA,IAAA,CAAA,CAAA,EAGpCrwF,EAAMswF,UAAQp/E,EAAA,YAAA,OAAA,CAAA,MAAiBX,EAAGg8B,GAAG,WAAW,GAAIvsC,CAAAA,EAAMswF,QAAQ,CAAA,CAAQ,EAE9E,CAEJ,EAAAp/E,EAAA,YAAAsuC,GAAA,CAAA,MAEQ,CAACjvC,EAAGg8B,GAAG,YAAY,EAAGg3B,EAAY5/D,QAAQwnF,IAAI,EAAC,YAAA,GAAA,eAAA,GAAA,OAG9ClvD,EAAarzC,KAAK,EAAA,CAAAinB,QAAAA,IAAA,CAEzB3L,EAAM2L,QACLsB,EAAAA,WAAWjN,EAAO,UAAW6vC,CAAU,EACrCw9C,EAAQ3oG,MAAKsoB,EAAAA,YAAA6iF,GAAArhF,EAAAA,WAAA,CAAA,IAERg9E,CAAI,EACJ1vF,EAAMorF,WAAa,GAAE,CAAA,SAAA,GAAA,QAEjBprF,EAAMyuF,MAAK,QACXmG,EAAehsG,MAAK,SACnBgqG,CAAgB,CAAA,EAAA,IAAA,EAE1B,IAAI,CAAA,CAAA,EAAA1hF,EAAA,YAAA,MAAA,CAAA,IAEA0d,EAAM,MAAS,CAACre,EAAGg8B,GAAG,cAAc,EAAGg3B,EAAY5/D,QAAQyxF,WAAW,CAAC,EAAA,CAC9ElxF,EAAM0qB,OACLzd,aAAWjN,EAAO,SAAU6vC,CAAU,EAAC7iC,EAAA,YAAA,MAAA,CAAA,MAE3BX,EAAGg8B,GAAG,gBAAgB,EAAC,QAAWe,IAAMmkD,EAAa,GAC9DmD,CAAAA,EAAehsG,MAAKsoB,EAAA,YAAApN,GACTwF,EAAM1gB,MAAMq1C,aAAM/sB,EAAA,YAAApN,GAElBwF,EAAM1gB,MAAMysG,QAAO,IAAA,CAC9B,CAEJ,CAAA,CAAA,EAAAnkF,EAAA,YAAA,MAAA,CAAA,MAGM,CAACX,EAAGg8B,GAAG,gBAAgB,EAAGg3B,EAAY5/D,QAAQ2xF,aAAa,EAAC,QAC1DhoD,IAAMkkD,EAAc,GAE5BttF,CAAAA,EAAMqxF,OACLpkF,EAAU,WAACjN,EAAO,SAAU6vC,CAAU,EAAC7iC,EAAAA,YAAApN,GAE7BwF,EAAM1gB,MAAMooF,WACvB,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIR,CACH,CACF,CAAC,ECrMsC,SAAA1rC,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAUvC,MAAe4iB,qBAAgB,CAC7BjX,KAAM,SACNwH,MAAOiqF,GACPpkD,MAAO,CACL,kBACA,iBACA,mBACA,eACA,kBAAkB,EAEpBn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CACrC,MAAM9lC,EAAQiM,GAAS,SAAU0D,EAAQ,CACvCrN,OAAQ,KACRkzF,QAAS,GACT3pB,OAAQ,GACRxzB,IAAK,UACLo2C,MAAO,CACL5+E,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACT,EACDs7E,UAAW,KACXiF,KAAM,GACNC,SAAU,GACVzmF,OAAQA,IAAM,CAAC,MAAO,QAAS,OAAO,EACtC0mF,KAAM,KACN7L,QAASA,IAAM,CAAE,EACjB7e,SAAU,GACVgpB,QAAS,GACT4B,aAAc,GACdC,SAAU,QACV+E,YAAa,KACbC,WAAY,KACZtB,UAAW,GACXC,MAAOA,IAAM,CAAE,EACf5J,OAAQA,IAAM,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/Et+F,MAAO,GACPwpG,eAAgB,KAChBrB,cAAe,KACf3D,SAAU,KACViF,UAAW,GACXC,UAAW,GACXC,aAAcA,KAAO,CAAA,GACrBC,SAAU,GACVC,SAAU,EACZ,CAAC,EAEKzlF,EAAKtF,GAAc,QAAQ,EAC3BgrF,EAASvkF,EAAG,IAAC,EAAK,EAElBwkF,EAAgBxkF,EAAAA,IAAI1R,EAAM6lE,QAAQ,EAClCswB,EAAezkF,EAAAA,IAAI1R,EAAM6uF,OAAO,EAChC+B,EAAkBl/E,EAAAA,IAAoB1R,EAAM0wF,QAAQ,EACpDF,EAAc9+E,EAAG,IAAC,EAAK,EACvBo/E,EAAep/E,EAAAA,IAAI1R,EAAM7T,KAAK,EAE9B,CAAEguB,UAAAA,CAAU,EAAIF,GAAW,OAAO,EAElCm8E,EAAU1kF,EAAAA,IAAkB,EAC5B+W,EAAS/W,EAAAA,IAA0B,EACnCs6D,EAASt6D,EAAAA,IAA0B,EACnCmjF,EAAQnjF,EAAAA,IAAyB,EAEjCw/E,EAAerG,GAAczsD,EAAK,MAACp+B,EAAO,aAAa,CAAC,EACxDq2F,EAAgBxL,GAAczsD,EAAK,MAACp+B,EAAO,YAAY,CAAC,EACxDs2F,EAAkBzL,GAAczsD,EAAK,MAACp+B,EAAO,gBAAgB,CAAC,EAE9DoW,EAAQtJ,EAAAA,SAAS,CACrBmkF,SAAU,GACVgF,OAAQ50F,EAAQ,SAAC,IAAM40F,EAAOrtG,KAAK,EACnCuoG,QAAS,GACTlgD,QAAS,EACTigD,aAAAA,EACAmF,cAAAA,EACAtB,UAAW,GACXlvB,SAAUqwB,EACVrH,QAASsH,EACTzC,UAAWryF,EAAQ,SAAC,IAAM,CAACrB,EAAMw1F,OAAO,EACxC7xF,QAASy6B,EAAAA,MAAMp+B,EAAO,cAAc,EACpCmyF,aAAAA,EACF,CAAC,EAEKoE,EAAel1F,EAAQ,SAAC,IAAM,CAACrB,EAAM+1F,UAAYnF,EAAgBhoG,QAAU,QAAQ,EACnFgb,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAC,EACJ8jB,EAAGo4B,GAAG,MAAM,EACZ,CACE,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAMw1F,QAC3B,CAACjlF,EAAGE,GAAG,WAAW,CAAC,EAAGzQ,EAAM+1F,SAC5B,CAACxlF,EAAGE,GAAG,aAAa,CAAC,EAAG8lF,EAAa3tG,MACrC,CAAC2nB,EAAGE,GAAG,QAAQ,CAAC,EAAG,CAAC0J,EAAUvxB,OAASqtG,EAAOrtG,MAC9C,CAAC2nB,EAAGE,GAAG,YAAY,CAAC,EAAGzQ,EAAM61F,SAC/B,CAAC,CAEJ,EACKtL,EAASlpF,EAAAA,SAAS,IACf7Y,IAAY2xB,EAAUvxB,MAAQgjD,SAASpjB,gBAAkB,IACjE,EACKguE,EAAen1F,EAAAA,SAAS,IACrBrB,EAAMw1F,SAAWe,EAAa3tG,OAASwtB,EAAM2+E,SACrD,EACKrF,EAAOruF,EAAQ,SAAC,aAAMwzF,QAAAA,EAAAA,EAAMjsG,QAANisG,YAAAA,EAAanF,SAAQ1jB,EAAAA,EAAOpjF,QAAPojF,YAAAA,EAAc0jB,MAAI,EAC7DsB,EAASt/E,EAAAA,IAAI1R,EAAM2wF,QAAQ,EAC3B73D,EAAapnB,EAAG,IAAC,MAAM,EAEvBf,EAAQtP,EAAAA,SAAS,KACd,CACL,CAACkP,EAAGtG,GAAG,aAAa,CAAC,EAAGjK,EAAM61F,UAAY,QAAU/8D,EAAWlwC,KAChE,EACF,EAEKiyD,EAAW1rC,GAAW,EACtBF,EAASyC,EAAAA,IAAIwkF,EAActtG,MAAQiyD,EAAU,EAAG,CAAC,EAEjD9G,EAAaC,EAAe,gBAChClnC,WAAS,CACP+4D,SAAUqwB,EACVrH,QAASsH,EACT3E,eAAAA,EACAC,cAAAA,CACF,CAAC,CACH,EAEA3vF,EAAO,QAACwoF,GAAcl0E,CAAK,EAE3B0vB,EAAO,CAAErd,OAAAA,EAAQinE,KAAAA,EAAM8B,eAAAA,EAAgBC,cAAAA,EAAeG,kBAAAA,CAAkB,CAAC,EAEzEhlF,EAAK,MAACskF,EAActoG,GAAS,CAC3BwtB,EAAM+6E,QAAU,CAACvoG,GAASwtB,EAAM66B,SAAW,EAC7C,CAAC,EACDrkC,EAAAA,MACE,IAAM5M,EAAM6lE,SACZj9E,GAAS,CACPstG,EAActtG,MAAQA,CACxB,CACF,EACAgkB,EAAK,MAACspF,EAAettG,GAAS,CACxBwtB,EAAM2+E,WAAansG,IACrBqmB,EAAOrmB,MAAQiyD,EAAU,EAE7B,CAAC,EACDjuC,EAAAA,MACE,IAAM5M,EAAM6uF,QACZjmG,GAAS,CACPutG,EAAavtG,MAAQA,CACvB,CACF,EAOAgkB,EAAK,MAACgkF,EAAiBhoG,GAAS,CAC9Bo2C,EAAK,mBAAoBp2C,CAAK,EAC9BulB,EAAUnO,EAAMoyF,YAAaxpG,CAAK,CACpC,CAAC,EACDgkB,EAAAA,MACE,IAAM5M,EAAM7T,MACZvD,GAAS,OACPkoG,EAAaloG,MAAQA,KAASoX,EAAAA,EAAMyqF,SAANzqF,YAAAA,EAAe,KAAM+wF,EAAc,CACnE,CACF,EACAnkF,EAAK,MAACkkF,EAAcloG,GAAS,CAC3Bo2C,EAAK,eAAgBp2C,CAAK,EAC1BulB,EAAUnO,EAAMuyF,cAAe3pG,CAAK,CACtC,CAAC,EACDgkB,EAAAA,MACE,IAAM5M,EAAM2wF,SACZ/nG,GAAS,CACPooG,EAAOpoG,MAAQA,CACjB,CACF,EAEA,SAASmoG,GAAe,CACtB,OAAIxG,EAAO3hG,MACFy8B,iBAAiBklE,EAAO3hG,KAAK,EAAEkzD,iBAAiB,0BAA0B,EAG5E,SACT,CAEA,SAAS01C,EAAe3rB,EAAW,CAACswB,EAAavtG,MAAO,CACtDstG,EAActtG,MAAQi9E,EAEtB7mC,EAAK,kBAAmB6mC,CAAQ,EAChC13D,EAAUnO,EAAMqyF,iBAAkBxsB,CAAQ,CAC5C,CAEA,SAAS4rB,EAAc5C,EAAU,CAACsH,EAAavtG,MAAO,CACpDutG,EAAavtG,MAAQimG,EAErB7vD,EAAK,iBAAkB6vD,CAAO,EAC9B1gF,EAAUnO,EAAMsyF,gBAAiBzD,CAAO,CAC1C,CAEA,SAAS2D,EAAgBt5F,EAAmB,CAC1CiV,EAAUnO,EAAMyyF,YAAav5F,CAAK,CACpC,CAEA,SAAS05F,EAAiB3iF,EAAes5C,EAA2B,CAClEp7C,EAAUnO,EAAM6yF,aAAc5iF,EAAOs5C,CAAI,CAC3C,CAEA,SAASktC,GAAkBzF,EAAiB,CAC1ChyD,EAAK,mBAAoBgyD,CAAM,EAC/B7iF,EAAUnO,EAAM8yF,cAAe9B,CAAM,CACvC,CAEA,SAAS0F,GAAiBzmF,EAAes5C,EAA2B,CAClEp7C,EAAUnO,EAAMiyF,aAAchiF,EAAOs5C,CAAI,CAC3C,CAEA,SAASqoC,EAAkB3hF,EAAe,QACxCy/E,EAAAA,EAAK9mG,QAAL8mG,MAAAA,EAAYF,kBAAkBv/E,EAChC,CAEA,SAASkkB,IAAe,QAClB1L,EAAAA,EAAO7/B,QAAP6/B,MAAAA,EAAc6T,MAChBxD,EAAWlwC,MAAQ,GAAG6/B,EAAO7/B,MAAM0zC,IAAIvV,aAAe5sB,GAAWsuB,EAAO7/B,MAAM0zC,GAAG,CAAC,MAGpFnuB,EAAUnO,EAAM22F,eAAe,CACjC,CAEA,IAAIC,GAEJ,SAASzE,GAAa0E,EAAsB,CAC1CD,IAAAA,MAAAA,KACAA,GAAej2F,GAAc,CAC3B,IAAOs1F,EAAOrtG,MAAQ,GACtBiuG,EACA,IAAOZ,EAAOrtG,MAAQ,EAAM,CAC7B,CACH,CAEA,SAASkuG,GAAe59F,EAAc,CACpCA,EAAM0xC,gBAAiB,EACvB1xC,EAAMkzC,eAAgB,CACxB,CAEA,SAAS2qD,IAAa,CACpB,GAAI,CAAC/2F,EAAMqwF,MAAQ,CAACrwF,EAAMswF,UAAY,CAACpsF,EAAM2yC,KAC3C,OAAO,KAGT,GAAI3yC,EAAM2yC,KACR,OAAO1lC,aAAWjN,EAAO,OAAQ6vC,CAAU,EAG7C,MAAMijD,EAAeh3F,EAAMswF,UAAY,EAAEkG,EAAa5tG,OAAS,CAAC0tG,EAAgB1tG,OAEhF,OAAAsoB,EAAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,MAAM,EAAG,CAACyqD,GAAgBzmF,EAAGm8B,IAAI,OAAQ,WAAW,CAAC,EAAC,QAC3D8lD,CAAe,EAAA,CAEvB,CACCxyF,EAAMqwF,MAAIn/E,EAAAA,YAAA,MAAA,CAAA,MACIX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,IACblR,EAAMqwF,KAAI,IAAO,MAE9B,EAAA,IAAA,CAAA,CAAA,EACD2G,GAAY9lF,EAAAA,YAAA,OAAA,CAAA,MAAiBX,EAAGg8B,GAAG,WAAW,CAAC,EAAA,CAAGvsC,EAAMswF,QAAQ,CAAA,CAAQ,CACzE,CAAA,CAGP,CAEA,SAAS2G,IAAe,CACtB,OAAIj3F,EAAM+1F,SACR7kF,EAAAA,YAAA,SAAA,CAAA,KAAqB,OAAM,cAAA,GAAA,MAAqB,eAAe,EAAA,IAAA,EAG7DhN,EAAM8nE,OACD76D,aAAWjN,EAAO,SAAU6vC,CAAU,EAG/C7iC,EAAA,YAAAgmF,GAAAxkF,aAAA,CAAA,IAESs5D,EAAM,YACQ4kB,EAAgBhoG,MAAK,qBAAAoyD,GAArB41C,EAAgBhoG,MAAKoyD,EAAA,eAClBw1C,EAAY5nG,MAAK,wBAAAoyD,GAAjBw1C,EAAY5nG,MAAKoyD,EAAA,MACxB81C,EAAaloG,MAAK,iBAAAoyD,GAAlB81C,EAAaloG,MAAKoyD,EAAA,YACdg2C,EAAOpoG,MAAK,qBAAAoyD,GAAZg2C,EAAOpoG,MAAKoyD,EAAA,QAAA,GAAA,OAEvBh7C,EAAMsC,OAAM,KACdtC,EAAMuwF,KAAI,QACPvwF,EAAM0kF,QAAO,OACd1kF,EAAM6J,OAAM,gBACL7J,EAAMywF,aAAY,MAC1BzwF,EAAMw1F,QAAUx1F,EAAMyuF,MAAQ,CAAE,EAAA,aAC3BzuF,EAAMw1F,QAAUx1F,EAAMorF,UAAY,KAAI,OAC1CprF,EAAMyqF,OAAM,aACNiM,GAAgB,iBACZlF,EAAc,gBACfC,EAAa,aAChBmB,EAAgB,cACf6D,EAAiB,EAAA,CAE9B3/C,QAASggD,GACTK,YAAaL,EAAc,CAAA,EAAA,CAI3B1lG,KAAM2jB,GAAiB7Q,EAAO,CAAC,cAAe,YAAY,EAAG,IAC3DsyF,EAAa5tG,MAAQmuG,GAAU,EAAK,IACtC,EACAlnF,QAASkF,GAAiB7Q,EAAO,CAAC,cAAe,YAAY,CAAC,EAC9D7S,MAAO0jB,GAAiB7Q,EAAO,CAAC,eAAgB,aAAa,CAAC,EAC9DqsF,KAAMx7E,GAAiB7Q,EAAO,CAAC,cAAe,YAAY,CAAC,EAC3DovF,OAAQv+E,GAAiB7Q,EAAO,CAAC,gBAAiB,cAAc,CAAC,CAAC,CAAA,CAI1E,CAEA,SAASqpC,IAAc,CACrB,OAAIvtC,EAAMw1F,QACRtkF,EAAAA,YAAA,MAAA,CAAA,KAAkB,OAAM,cAAA,GAAA,MAAqB,eAAe,EAAA,IAAA,EAG9DA,EAAAA,YAAA,MAAA,CAAA,MAEW,CACLX,EAAGg8B,GAAG,SAAS,EACf,CAAC8pD,EAAcztG,OAAS2nB,EAAGm8B,IAAI,UAAW,MAAM,EAChD1sC,EAAM81F,aAAasB,OAAO,EAC3B,MACM,CAAEnoF,OAAQmH,EAAM2+E,UAAY9lF,EAAOrmB,MAAQ,EAAIqoB,MAAW,EAAA,QACxD6lF,GAAc,YACVA,EAAc,EAAA,CAE1B5yF,EAAM2wF,MACL1jF,aAAWjN,EAAO,QAAS6vC,CAAU,EAAC7iC,EAAA,YAAAmmF,GAAA,CAAA,IAG/BxC,EAAK,SACQqB,EAActtG,MAAK,oBAAAoyD,GAAnBk7C,EAActtG,MAAKoyD,EAAA,QACpBm7C,EAAavtG,MAAK,mBAAAoyD,GAAlBm7C,EAAavtG,MAAKoyD,EAAA,QAAA,GAAA,YAExBu7C,EAAa3tG,MAAQ,SAAW,QAAO,MAC3CoX,EAAMyuF,MAAK,aACNzuF,EAAMorF,UAAS,MACpBprF,EAAM01F,WAAU,iBACLlE,EAAc,gBACfC,EAAa,aAChBmB,CAAgB,EAAA,CAG5BxqE,IAAKrT,GAAiB7Q,EAAO,CAAC,YAAa,UAAU,EAAG,IACrDsyF,EAAa5tG,MAAuB,KAAfmuG,GAAU,CAClC,EACAlnF,QAASkF,GAAiB7Q,EAAO,CAAC,aAAc,WAAW,CAAC,EAC5D0qB,OAAQ7Z,GAAiB7Q,EAAO,CAAC,eAAgB,aAAa,CAAC,EAC/DqxF,OAAQxgF,GAAiB7Q,EAAO,CAAC,eAAgB,aAAa,CAAC,CAGpE,CAAA,CAAA,CAAA,CAGP,CAEA,SAASozF,GAAa,CACpB,OAAIpzF,EAAM2L,QACDsB,aAAWjN,EAAO,UAAW6vC,CAAU,EAGhD7iC,EAAAA,YAAAqmF,GAAA,CAAA,MACqBv3F,EAAM41F,SAAS,EAAA,CAE9B/lF,QAASkF,GAAiB7Q,EAAO,CAAC,MAAM,CAAC,CAAC,CAAA,CAIlD,CAEA,SAASs2D,GAAe,CACtB,OAAIt2D,EAAM2nE,OACD16D,aAAWjN,EAAO,SAAU6vC,CAAU,EAG/C7iC,EAAAA,YAAAsmF,GAAA,CAAA,QAAA,GAAA,UAGex3F,EAAMo0F,UAAS,MACnBp0F,EAAMq0F,MAAK,iBACFr0F,EAAMs0F,aAAa,EAAA,CAGjCD,MAAOt/E,GAAiB7Q,EAAO,CAAC,eAAgB,aAAa,CAAC,EAC9DkwF,UAAWr/E,GAAiB7Q,EAAO,CAAC,mBAAoB,iBAAiB,CAAC,CAAC,CAAA,CAInF,CAEA,SAASuzF,GAAe,CACtB,OAAIz3F,EAAMg2F,UAAY,CAAC5/E,EAAM2+E,UAAkB,KAE3C7wF,EAAM0nE,OACDz6D,aAAWjN,EAAO,SAAU6vC,CAAU,EAG/C7iC,EAAAA,YAAAq8D,GAAA,CAAA,OAEoB2oB,EAActtG,MAAK,kBAAAoyD,GAAnBk7C,EAActtG,MAAKoyD,EAAA,MAC5BzqC,EAAGg8B,GAAG,QAAQ,EAAC,MAAA,GAAA,SAAA,GAAA,cAAA,GAAA,SAIZ,GAAK,MACR,CAAEt9B,OAAQA,EAAOrmB,KAAO,EAAA,SACrB4oG,CAAc,EAAA,IAAA,CAG9B,CAEA,SAASkG,GAAgB,CACvB,MAAMr9C,EAAar6C,EAAMq4C,KAAO,UAEhC,OAAAnnC,EAAAA,YAAAmpC,EAAA,CAAA,MAEW,CACL9pC,EAAGg8B,GAAG,SAAS,EACfvsC,EAAM41F,WAAarlF,EAAGm8B,IAAI,UAAW,OAAO,EAC5C1sC,EAAM81F,aAAa7+E,OAAO,CAC3B,EAAA,CAAApH,QAAAA,IAEA0mF,CAAAA,EAAa3tG,OAASquG,GAAY,EAClC1pD,GAAW,EAAEr8B,EAAA,YAAA,UAAA,CAAA,IAEPklF,EAAO,MACL,CACL7lF,EAAGg8B,GAAG,SAAS,EACf,CACE,CAACh8B,EAAGm8B,IAAI,UAAW,MAAM,CAAC,EAAG2pD,EAAcztG,MAC3C,CAAC2nB,EAAGm8B,IAAI,UAAW,SAAS,CAAC,EAAGypD,EAAavtG,MAC7C,CAAC2nB,EAAGm8B,IAAI,UAAW,QAAQ,CAAC,EAAGupD,EAAOrtG,MACtC,CAAC2nB,EAAGm8B,IAAI,UAAW,OAAO,CAAC,EAAG1sC,EAAM41F,SACtC,EACA51F,EAAM81F,aAAaM,OAAO,CAG3B,EAAA,CAAA,CAACG,EAAa3tG,OAASquG,GAAY,EACnCK,IACAt3F,EAAM6rE,QAAUrR,GAAc,CAAA,EAEhCi9B,EAAc,CAAA,CAAA,CAAA,CAGrB,CAEA,MAAO,IAAM,CAAA,IAAA1/C,EACX,GAAI/3C,EAAM61F,UAAW,CAAA,IAAA9oD,EACnB,OAAA77B,EAAAA,YAAA,UAAA,CAAA,MACkBtN,EAAUhb,MAAK,MAAS+nB,EAAM/nB,OAAKsoB,CAAAA,EAAA,YAAAgjB,GAAA,CAAA,SAAA,GAAA,SACdC,EAAYmR,EAAAA,GAAAyH,EAC5C2qD,EAAe,CAAA,EAAA3qD,EAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAIxB,CAEA,OAAA77B,EAAAA,YAAAsuC,GAAA,CAAA,IAES/2B,EAAM,MACJ7kB,EAAUhb,MAAK,QACboX,EAAM4oC,QAAO,YAAA,GAAA,eAAA,GAAA,YAGX,CAACr4B,EAAGg8B,GAAG,WAAW,EAAGvsC,EAAM81F,aAAa6B,SAAS,EAAC,MACtDhnF,EAAM/nB,MAAK,SACRurC,EAAYmR,EAAAA,GAAAyS,EAErB2/C,EAAe,CAAA,EAAA3/C,EAAA,CAAAloC,QAAAA,IAAA,CAAAkoC,CAAA,CAAA,CAAA,CAGrB,CACH,CACF,CAAC,iGCzfK,MAAAxnC,EAAKtF,GAAc,SAAS,EAC5B,CAAE,MAAAoqB,CAAM,EAAIX,GAAO,EACnBgoB,EAAUhrC,MAAI,EAAK,EACnB3N,EAAc2N,MAAI,CAAC,EACnB0E,EAAQ1E,MAAkB,SAAS,EACnCyB,EAAWzB,MAAqB,KAAK,EACrCphB,EAAUohB,MAAI,CAAC,EAErB,IAAIkmF,EAAa,GAEX,MAAAh0F,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG6F,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,SACxC,EACD,EAEKzF,EAAQtP,EAAAA,SAAS,KACd,CACL,CAAC8R,EAAS,KAAK,EAAG,IAClB,OAAQ,GAAGpP,EAAY,KAAK,IAC9B,EACD,EAEKwtD,EAAclwD,EAAAA,SAAS,KACpB,CACL,UAAW,eAAgBg0B,EAAM,MAAQ,GAAK,IAAM/kC,EAAQ,MAAQ,KAAQ,CAAC,aAC3EA,EAAQ,MAAQ,GAClB,GACF,EACD,EAEG,IAAAqL,EACAL,EACAu8F,EAEJ/lF,EAAa,CAAE,QAAA4qC,EAAS,QAAApsD,EAAS,aAAAwnG,CAAA,CAAc,EAE/CljF,EAAAA,gBAAgB,IAAM,CACpB,aAAajZ,CAAK,EAClB,cAAcL,CAAQ,EACtB,qBAAqBu8F,CAAK,CAAA,CAC3B,EAED,SAASC,EAAajtG,EAAyB,CACzCyF,EAAQ,QAAU,MACpB,aAAaqL,CAAK,EAElB+gD,EAAQ,MAAQ,GAChBpsD,EAAQ,MAAQ,EAChB8lB,EAAM,MAAQ,UACdrS,EAAY,MAAQ,EACpBoP,EAAS,MAAQ,OAGnB,cAAc7X,CAAQ,EAEtB,MAAMy8F,EAAa,IAAM,CACvBznG,EAAQ,MAAQ3C,GAAW9C,EAAQ,QAAS,EAAG,GAAG,EAC5CurB,EAAA,MAAQvrB,EAAQ,OAASurB,EAAM,MACrCrS,EAAY,MAAQpW,GAAW9C,EAAQ,aAAe,EAAG,EAAG,EAAE,EACrDsoB,EAAA,MAAQtoB,EAAQ,UAAYsoB,EAAS,MAC9CykF,EAAajqG,GAAW9C,EAAQ,YAAc,GAAIyF,EAAQ,MAAO,EAAE,EAE/DA,EAAQ,QAAU,IACpBqL,EAAQ,WAAW,IAAM,CACvB+gD,EAAQ,MAAQ,IACf,GAAG,EAENphD,EAAW,YAAY,IAAM,CAC3BhL,EAAQ,OAAS,KAAK,MAAM,KAAK,OAAO,EAAI,EAAI,CAAC,EAE7CA,EAAQ,OAASsnG,IACnBtnG,EAAQ,MAAQsnG,EAChB,cAAct8F,CAAQ,IAEvB,GAAG,CAEV,EAEas8F,EAAA,GAEbC,EAAQ,sBAAsB,IAAM,CAC9Bn7C,EAAQ,MACCq7C,EAAA,GAEXr7C,EAAQ,MAAQ,GAChBm7C,EAAQ,sBAAsBE,CAAU,EAC1C,CACD,CAAA,6BAKD5lF,EAAA,YAYaC,aAAA,CAZA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IAUM,kBAVNkC,qBAUM,MAAA,CARH,uBAAO7O,EAAS,KAAA,EACjB,KAAK,cACJ,uBAAO+M,EAAK,KAAA,EACZ,gBAAergB,EAAO,MACvB,gBAAc,IACd,gBAAc,KAAA,GAEdmiB,EAAAA,mBAAyD,MAAA,CAAnD,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAa,uBAAOghD,EAAW,KAAA,6BARzC7U,EAAO,KAAA,2BC9Fd,MAAMs7C,EAAe,CAW1B,YAAYntG,EAA8B,GAAI,CAV9CugB,GAAA,aACAA,GAAA,iBAEQA,GAAA,oBACAA,GAAA,kBACAA,GAAA,kBACAA,GAAA,mBACAA,GAAA,iBACAA,GAAA,mBAGN,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,WAAa,KAClB,KAAK,KAAO,UACZ,KAAK,SAAW,CAAC,EAEjB,KAAK,OAAOvgB,CAAO,CAAA,CAKrB,KAAKA,EAAkC,CAChCrC,KAED,OAAOqC,GAAY,WACXA,EAAA,CAAE,QAASA,CAAQ,GAG1B,KAAA,eAAgB,aAAa,CAAE,GAAG,KAAK,SAAU,GAAGA,EAAS,EAAA,CAGpE,OAAQ,CACN,KAAK,KAAK,GAAG,CAAA,CAGf,OAAOA,EAA6B,CAClC,KAAK,SAAW,CAAE,GAAG,KAAK,SAAU,GAAGA,CAAQ,CAAA,CAGjD,OAAQ,CACN,MAAMkkF,EAAU,IAAIipB,GAAe,KAAK,QAAQ,EAEhD,OAAAjpB,EAAQ,YAAc,KAAK,YAEpBA,CAAA,CAGT,SAAU,SACR,KAAK,cAAchuE,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,KAAK,cACnD4U,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcvC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAC/Chb,GAAc,IAAI,CAAA,CAGpB,aAAc,CACL,MAAA,EAAA,CAGT,QAAQsJ,EAAU7W,EAAsD,GAAI,CAC1E,KAAM,CAAE,SAAAmkF,EAAU,GAAGC,CAAA,EAAWpkF,EAEhC,KAAK,OAAOokF,CAAM,EAClB,KAAK,YAAcvtE,GAEfstE,GAAY,CAACttE,EAAI,OAAO,iBAAiB,YAC3CA,EAAI,OAAO,iBAAiBstE,GAAY,UAAU,EAAI,KACxD,CAGF,WAAW79E,EAA0C,CACnD,GAAI,CAAC3I,GAAU,OAET,MAAAqQ,EAAK2c,GAAarkB,CAAM,EAE1B0H,IACF,KAAK,SAAWA,EAEZ,KAAK,UACP,KAAK,YAAc,KAAK,SAAS,YAAY,KAAK,UAAU,EAE5D,KAAK,aAAa,EAEtB,CAGM,cAAe,CACjB,GAAA,CAAC,KAAK,WAAarQ,GAAU,CAC3B,GAAA,CAAC,KAAK,YACR,QAAQ,KAAK,kEAAkE,EAE1E,KAAA,WAAa,SAAS,cAAc,KAAK,EACzC,KAAA,UAAYwlF,YAAUC,EAAS,EACpC,KAAK,UAAY,KAAK,UAAU,MAAM,KAAK,UAAU,MAChD,CACL,MAAMl7D,EAAQE,EAAA,YAAYg7D,GAAW,KAAM,IAAI,EAE1C,KAAA,WAAa,SAAS,cAAc,KAAK,EACxCl7D,EAAA,WAAa,KAAK,YAAY,SAE7BK,SAAAL,EAAO,KAAK,UAAU,EAExB,KAAA,UAAY2C,GAA8B3C,CAAK,CAAA,CAGjD,KAAA,WAAa,KAAK,WAAW,mBAChC,KAAK,UAAY,SAAS,MAAM,YAAY,KAAK,UAAU,CAAA,CAG/D,OAAO,KAAK,SAAA,CAEhB,CAEa,MAAAklF,GAAU,IAAID,GCtGdE,GAAiB,6BAIjBC,GAAkB,OAAO,OAAyB,CAC7D,YACA,aACA,WACA,eACA,gBACA,aACF,CAAC,iPC1BD,MAAMn4F,EAAQuR,EAeRytB,EAAOC,EAEPm5D,EAAev2F,EAAAA,OAAOq2F,GAAgBtuG,EAAI,EAC1C2mB,EAAKtF,GAAc,OAAO,EAC1B4vC,EAAW1rC,GAAU,EAErB8H,EAAUvF,EAAAA,IAAiB,EAE3BwqB,EAAa76B,WAAS,IAAMrB,EAAM,gBAAkBuQ,EAAG,GAAG,WAAW,CAAC,EAE5EkE,OAAAA,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS,IAAM,CACb,MAAM8C,EAAQpW,EAAM,MAEhBoW,GAASa,EAAQ,QACbb,EAAA,OAASa,EAAQ,MAAM,aAC/B,CACD,CAAA,CACF,wBAIC9E,EAAA,YAsBaC,aAAA,CAtBD,OAAA,GAAQ,KAAM8pB,EAAU,MAAG,aAAa2T,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAA9oC,EAAA,MAAAkmF,CAAA,EAAa7mF,EAAA,MAAM,GAAG,EAAA,qBACxE,IAoBM,kBApBNkB,qBAoBM,MAAA,SAlBA,UAAJ,IAAIwE,EACH,MAAK3E,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EACZ,+BAAiB2B,EAAAA,MAAQ2oC,CAAA,EAAA,EAAA,EACzB,YAAWtpC,EAAK,MAAC,IACjB,8BAAcytB,EAAI,OAAA,GAClB,8BAAcA,EAAI,OAAA,EAAA,GAEnBvsB,EAAAA,mBAUM,MAAA,CAVA,MAAQH,EAAAA,eAAA,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,iBAAkBgB,EAAU,UAAA,CAAA,CAAA,GAC3CgB,aAQOC,EARA,OAAA,UAAA,CAAA,KAAMjB,EAAA,OAAb,IAQO,CANU,OAAAA,EAAA,MAAM,UAAQ,0BAD7BY,EAAA,YAGYD,QAAAb,EAAA,EAAA,OADT,SAAUE,EAAK,MAAC,+CAEnBc,EAAAA,mBAEWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,EAAAA,gBAAAC,EAAAA,gBAAArB,EAAA,MAAM,OAAO,EAAA,CAAA,uBAfd,CAAA88E,EAAA,MAAA98E,EAAA,MAAM,OAAO,uTC9B3B,MAAMvR,EAAQuR,EAyBRhB,EAAKtF,GAAc,OAAO,EAC1BvL,EAAQgS,EAAsB,IAAA,EAAE,EAChC9Q,EAAsB,CAAC,EAEvBqW,EAAUvF,EAAAA,IAAiB,EAEjC,IAAI2mF,EAAU,GAER,MAAAC,EAAiBj3F,EAAAA,SAAS,IACvBrB,EAAM,UAAU,MAAM,GAAG,CACjC,EACKk8B,EAAa76B,WAAS,IAAMrB,EAAM,gBAAkBuQ,EAAG,GAAG,WAAW,CAAC,EAE5E3D,EAAA,MACE,IAAM5M,EAAM,YACZ,CAACpX,EAAO08D,IAAc,CACd5lD,EAAA,MAAM,QAAgB3H,GAAA,CAC1BA,EAAK,kBAAoBnP,EAAQ08D,CAAA,CAClC,CAAA,CAEL,EAEAxjD,EAAA,QAAQo2F,GAAgBK,CAAU,EAErBzmF,EAAA,CACX,MAAApS,EACA,QAAAuX,EACA,IAAApmB,EACA,OAAA8iB,EACA,IAAA7qB,EACA,KAAA8pE,EACA,MAAA/lB,CAAA,CACD,EAED,SAAS2rD,EAAazgG,EAAsB,CAEpC,MAAA4Y,EAAuB,CAAE,CADT2nF,EAAe,MAAM,CAAC,CACC,EAAG,GAAGvgG,EAAK,gBAAgB,IAAK,EACvEkX,EAAS,SAASlX,EAAK,MAAgB,EAE7C,OAAK,OAAO,MAAMkX,CAAM,IACtB0B,EAAM,OAAS1B,GAGV0B,CAAA,CAGT,SAAS9f,EAAIhG,EAA8B,CAClC,OAAA,IAAI,QAAwBmrC,GAAA,CACjC,MAAMyiE,EAASlvG,GAAWsB,EAAQ,MAAM,EAAIA,EAAQ,OAASjB,GAErDiB,EAAA,OAAU9B,GAAa,CAC7BitC,EAAQjtC,CAAG,EACJ0vG,EAAA,CACT,EAEA73F,EAAM,KAAK,CACT,KAAM,MACN,MAAO/V,CAAA,CACR,EAEIwtG,IACOA,EAAA,GACDK,EAAA,EACX,CACD,CAAA,CAGH,SAAS/kF,EAAO5qB,EAAU,CACjB,OAAA,IAAI,QAA4BitC,GAAA,CAC/B,MAAAj+B,EAAO66D,EAAK7pE,CAAG,EAErB,GAAI,CAACgP,EAAa,OAAAi+B,EAAQ,EAAK,EAE/B,MAAMimB,EAAU1yD,GAAWwO,EAAK,OAAO,EAAIA,EAAK,QAAUnO,GAErDmO,EAAA,QAAWzE,GAAoB,CAClC0iC,EAAQ1iC,CAAM,EACd2oD,EAAQ3oD,CAAM,CAChB,EAEAsN,EAAM,KAAK,CACT,KAAM,QACN,MAAO7X,CAAA,CACR,EAEIsvG,IACOA,EAAA,GACDK,EAAA,EACX,CACD,CAAA,CAGH,SAASA,GAAW,CAClB,GAAI93F,EAAM,OAAQ,CACV,MAAAwV,EAAQxV,EAAM,MAAM,EAEtBwV,EAAM,OAAS,MACjBi7D,EAAWj7D,EAAM,KAAK,EAEtBuiF,EAAWviF,EAAM,KAAK,EAGxB,sBAAsBsiF,CAAQ,CAAA,MAEpBL,EAAA,EACZ,CAGF,SAAShnB,EAAWxmF,EAA8B,CAChD,IAAIkN,EAAOlN,EAAQ,IAAM+nE,EAAK/nE,EAAQ,GAAU,EAAI,KAEhD,GAAA,EAACkN,GAAA,MAAAA,EAAM,SAAS,CAClB,MAAMjH,EAAQN,GAAe,EACvBzH,EAAO8B,EAAQ,KAAe0lB,EAAG,GAAG,GAAGzf,CAAK,EAAE,EAEpD,IAAI8nG,EAAkB54F,EAAM,YAEtBN,EAAA,MAAM,QAAwBm5F,GAAA,CAC9BA,EAAa,UACID,GAAAC,EAAa,OAAS74F,EAAM,QACjD,CACD,EAEMjI,EAAA+U,EAAA,SACL,OAAO,OACL,CACE,IAAA/jB,EACA,QAAS,GACT,SAAU,GACV,OAAQa,GACR,QAASA,GACT,QAASA,GACT,QAASA,EACX,EACAiB,EACA,CACE,OAAQ,EACR,QAAS,GACT,iBAAkB+tG,CAAA,CACpB,CAEJ,EAEMl5F,EAAA,MAAM,KAAK3H,CAAI,CAAA,CAIvBxO,GAAWsB,EAAQ,MAAM,GAAKA,EAAQ,OAAOkN,EAAK,GAAG,CAAA,CAGvD,SAAS4gG,EAAW5vG,EAAU,CAC5B,MAAM+H,EAAQ4O,EAAM,MAAM,UAAkB3H,GAAAA,EAAK,MAAQhP,CAAG,EAE5D,GAAI,CAAC+H,EAAO,CACJ,MAAAiH,EAAO2H,EAAM,MAAM5O,CAAK,EACxBgoG,EAAe/gG,EAAK,OAE1BA,EAAK,QAAU,GAEN,QAAA3N,EAAI0G,EAAQ,EAAGkB,EAAM0N,EAAM,MAAM,OAAQtV,EAAI4H,EAAK,EAAE5H,EAC3DsV,EAAM,MAAMtV,CAAC,EAAE,kBAAoB0uG,EAAe94F,EAAM,QAI1DzW,GAAWwO,EAAK,OAAO,GAAKA,EAAK,QAAQ,EAAI,CAAA,CAC/C,CAGF,SAASwgG,EAAWxvG,EAAU,CAC5B,MAAM+H,EAAQ4O,EAAM,MAAM,UAAkB3H,GAAAA,EAAK,MAAQhP,CAAG,EAExD,CAAC+H,GACG4O,EAAA,MAAM,OAAO5O,EAAO,CAAC,CAC7B,CAGF,SAAShI,EAAIC,EAAU,CACd,MAAA,CAAC,CAAC2W,EAAM,MAAM,UAAkB3H,GAAAA,EAAK,MAAQhP,CAAG,CAAA,CAGzD,SAAS6pE,EAAK7pE,EAAU,CACtB,OAAO2W,EAAM,MAAM,KAAa3H,GAAAA,EAAK,MAAQhP,CAAG,CAAA,CAGlD,SAAS8jD,GAAQ,CACfjsC,EAAM,OAAS,EACflB,EAAM,MAAQ,CAAC,CAAA,CAGjB,SAASq5F,EAAUhhG,EAAsB,CACvCxO,GAAWwO,EAAK,OAAO,GAAKA,EAAK,QAAQ,CAAA,CAG3C,SAASihG,EAAUjhG,EAAsB,CACvCxO,GAAWwO,EAAK,OAAO,GAAKA,EAAK,QAAQ,CAAA,6BAKzCsa,EAAA,mBAeM,MAAA,CAfA,MAAKC,EAAAA,eAAA,CAAGJ,WAAG,EAAA,EAAKA,EAAA,MAAE3B,CAAA,EAAC,GAAGgB,EAAS,SAAA,CAAA,CAAA,CAAA,oBACnCc,EAAAA,mBAaYqsB,EAAA,SAAA,KAAAC,EAAAA,WAZKj/B,EAAK,MAAb3H,kBADToa,EAAA,YAaY8mF,GAAA,CAXT,IAAKlhG,EAAK,IACV,MAAOA,EACP,kBAAiBmkC,EAAU,MAC3B,cAAa3qB,EAAU,WACvB,MAAKo0C,EAAA,eAAE6yC,EAAazgG,CAAI,CAAA,EACxB,QAAKijD,GAAE+9C,EAAUhhG,CAAI,EACrB,QAAKijD,GAAEg+C,EAAUjhG,CAAI,CAAA,GAEX,QAAO8tD,EAAAA,QAChB,CAA0C,CAAA,KADhBqzC,KAAQ,CAClC3mF,aAA0CC,EAAA,OAAA,OAAA,CAAvB,KAAM0mF,CAAQ,CAAA,CAAA,oGC9N5BC,GAAiB,OAAO,OAAO,CAAC,UAAW,OAAQ,UAAW,UAAW,OAAO,CAAC,EAEjFC,GAAiB,OAAO,OAAO,CAAC,UAAW,UAAW,OAAO,CAAC,6HCzBrE,MAAA7oF,EAAKtF,GAAc,SAAS,EAC5B3B,EAAQU,GAAS,EAEjByyB,EAAkBp7B,EAAAA,SAAS,KAAO,CACtC,QAASiI,EAAM,MAAM,KACrB,KAAMA,EAAM,MAAM,KAClB,QAASA,EAAM,MAAM,QACrB,QAASA,EAAM,MAAM,QACrB,MAAOA,EAAM,MAAM,KAAA,EACnB,EAEI8S,EAAY1K,MAAsB,KAAK,EACvC2nF,EAAc3nF,MAAI,EAAE,EACpB4nF,EAAU5nF,MAAI,EAAE,EAChB6nF,EAAQ7nF,EAAAA,IAAgC,EAExC8nF,EAAkBn4F,EAAAA,SAAS,IAAM,GAAG+a,EAAU,KAAK,SAAkB,EAE3E,eAAevrB,EAAIhG,EAA8B,CAC3C0uG,EAAM,OACF,MAAAA,EAAM,MAAM,IAAI1uG,CAAO,CAC/B,CAGF,eAAe8oB,EAAO5qB,EAAU,CACvB,MAAA,CAAC,CAACwwG,EAAM,OAAU,MAAMA,EAAM,MAAM,OAAOxwG,CAAG,CAAA,CAGvD,SAAS8gB,EAAOA,EAAuB,CAC3BuS,EAAA,MAAQvS,EAAO,WAAauS,EAAU,MACpCi9E,EAAA,MAAQxvF,EAAO,aAAewvF,EAAY,MAC9CC,EAAA,MAAQzvF,EAAO,SAAWyvF,EAAQ,KAAA,CAG5C,SAASzsD,GAAQ,CACT0sD,EAAA,OAASA,EAAM,MAAM,MAAM,CAAA,CAGnC,OAAAznF,EACEhF,WAAS,CACP,MAAAysF,EACA,IAAA1oG,EACA,OAAA8iB,EACA,MAAAk5B,EACA,OAAAhjC,CACD,CAAA,CACH,wBAKEsI,EAAAA,YAyEQD,EAAA,MAAAunF,EAAA,EAAA,SAxEF,QAAJ,IAAIF,EACH,MAAKjnF,EAAAA,eAAEJ,EAAAA,MAAE3B,CAAA,EAAC,GAAC,EACX,kBAAiB2B,EAAAA,MAAA3B,CAAA,EAAG,YAAY6L,EAAS,KAAA,EAAA,EACzC,UAAWo9E,EAAe,MAC1B,eAAcH,EAAW,MACzB,WAAUC,EAAO,KAAA,GAEP,KAAIzzC,EAAA,QACb,CA8DM,CA/DW,KAAA9tD,KAAI,CACrB0a,EAAAA,mBA8DM,MAAA,CA7DH,MAAKH,EAAAA,eAAA,EAA6B,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,GAA8B,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,GAA8B,CAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,OAASxY,EAAK,IAAS,CAAA,EAAAA,EAAK,MAAQma,EAAAA,MAAcinF,EAAA,EAAC,SAASphG,EAAK,IAAI,EAAgB,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAA4B,OAAA,YAAA,CAAA,EAAAxY,EAAK,YAAyBma,EAAE,MAAA3B,CAAA,EAAC,IAAuB,OAAA,OAAA,CAAA,EAAAxY,EAAK,YAAcA,EAAK,OAAoBma,QAAE3B,CAAA,EAAC,IAA6B,OAAA,YAAA,CAAA,EAAA,CAAAxY,EAAK,YAAcA,EAAK,MAAoB,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAA0B,OAAA,UAAA,CAAA,EAAAxY,EAAK,KAAmB,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAA0B,OAAA,UAAA,CAAA,EAAAxY,EAAK,UAAgCA,EAAK,SAAA,GAa/gB,KAAK,QACJ,MAAK4tD,EAAAA,eAAA,EAA0C,MAAA,OAAA5tD,EAAK,OAAK,SAAgBA,EAAK,MAAQ,OAA+C,gBAAA,OAAAA,EAAK,YAAU,SAAgBA,EAAK,WAAa,QAAiCA,EAAK,OAAK,CAAA,CAAA,GAOlO,cAAY,OACX,YAAWA,EAAK,MAAQma,QAAcknF,EAAA,EAAC,SAASrhG,EAAK,IAAI,EAAA,YAAA,QAAA,GAE1D0a,EAAAA,mBA4BM,MAAA,CA5BA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAERxY,EAAK,MAASA,EAAK,MAAQma,EAAAA,MAAAinF,EAAA,EAAe,SAASphG,EAAK,IAAI,iBADpEsa,EAAAA,mBAeM,MAAA,OAbH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAA,MAAW5tD,EAAK,SAAS,CAAA,CAAA,GAGvBA,EAAK,oBADboa,EAAAA,YAIQD,EAAAA,MAAApO,EAAA,EAAA,OAFL,KAAM/L,EAAK,KACX,MAAK4tD,EAAAA,eAAA,CAAA,CAAA,MAAY5tD,EAAK,WAAcA,EAAK,KAAa,KAAK,CAAA,CAAA,6BAE9DsoC,EAAAA,YAAAluB,EAAAA,YAIQD,YAJRQ,EAIQ,WAAA,CAAA,IAAA,CAAA,EAFE+pB,QAAgB1kC,EAAK,IAAI,EAAA,CAChC,MAAK,CAAA,MAAWA,EAAK,SAAS,yDAIpB,OAAAA,EAAK,UAAQ,wBAD5B,EAAAoa,cAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUtZ,EAAK,SACf,KAAMA,+CAETsa,EAKW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAJE3mC,EAAK,yBAAhBsa,EAAAA,mBAAiF,MAAA,OAArD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAa,UAAQxY,EAAK,OAAA,8BAClEsa,qBAEM,MAAA,OAFO,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,GACpBqC,EAAA,gBAAA7a,EAAK,SAAO,EAAA,EAAA,CAAA,aAKbA,EAAK,wBADbsa,EAAAA,mBAOS,SAAA,OALP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,QAAOyqC,GAAArnC,EAAO5b,EAAK,GAAG,CAAA,GAEvBmZ,EAAAA,YAAgDgB,EAAAA,MAAApO,EAAA,EAAhD4O,EAAAA,WAAcR,EAAAA,MAAkC5I,CAAA,EAA5B,MAAK,CAAE,MAAM,OAAA,CAAO,EAAA,KAAA,EAAA,+HCzG5CowF,GAAyC,CAAC,MAAO,QAAQ,EAE/D,IAAI7mG,GAAQ,EAEZ,SAAS8mG,IAAS,CAChB,MAAO,WAAW9mG,IAAO,EAC3B,CAEO,MAAM+mG,EAAe,CAoB1B,YAAY/uG,EAA0B,GAAI,CAnB1CugB,GAAA,aACAA,GAAA,iBAEAA,GAAA,aACAA,GAAA,gBACAA,GAAA,aACAA,GAAA,gBACAA,GAAA,gBACAA,GAAA,cAEQA,GAAA,oBACAA,GAAA,kBACAA,GAAA,kBACAA,GAAA,mBACAA,GAAA,iBACAA,GAAA,mBACAA,GAAA,mBACAA,GAAA,sBAGIvgB,EAAA,CACR,GAAGA,EACH,SAAUA,EAAQ,SAAW8G,GAAS9G,EAAQ,QAAQ,EAAI,GAC5D,EAEA,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,WAAa,KAClB,KAAK,WAAa,GAClB,KAAK,cAAgB,KACrB,KAAK,KAAO,UACZ,KAAK,SAAW,CAAC,EAEjB,KAAK,OAAOA,CAAO,EAEd,KAAA,KAAO,CAAC+pC,EAAuBiH,IAC3B,KAAK,MAAM,KAAMjH,EAASiH,CAAQ,EAGtC,KAAA,QAAU,CAACjH,EAAuBiH,IAC9B,KAAK,MAAM,UAAWjH,EAASiH,CAAQ,EAG3C,KAAA,KAAO,CAACjH,EAAuBiH,IAC3B,KAAK,MAAM,OAAQjH,EAASiH,CAAQ,EAGxC,KAAA,QAAU,CAACjH,EAAuBiH,IAC9B,KAAK,MAAM,UAAWjH,EAASiH,CAAQ,EAG3C,KAAA,QAAU,CAACjH,EAAuBiH,IAC9B,KAAK,MAAM,UAAWjH,EAASiH,CAAQ,EAG3C,KAAA,MAAQ,CAACjH,EAAuBiH,IAC5B,KAAK,MAAM,QAASjH,EAASiH,CAAQ,CAC9C,CAOF,MACEzlB,EACAm9C,EACAhvB,EACA1I,EACA,CACIzlB,EACG,KAAA,QAAQm9C,EAAS13B,CAAQ,EAEzB,KAAA,MAAM0I,EAAO1I,CAAQ,CAC5B,CAGF,MAAM9yC,EAAU,OACVE,GAAOF,CAAG,EACZ,KAAK,MAAM,GAENgY,EAAA,KAAA,aAAA,IAAA,MAAAA,EAAgB,OAAOhY,EAC9B,CAGF,OAAO,CAAE,UAAAqzB,EAAW,YAAAi9E,EAAa,QAAAC,EAAS,GAAGrqB,GAA0C,CAIrF,GAHA,KAAK,cAAgB,CAAE,UAAA7yD,EAAW,YAAAi9E,EAAa,QAAAC,CAAQ,EACvD,KAAK,SAAW,CAAE,GAAG,KAAK,SAAU,GAAGrqB,CAAO,EAE1C,KAAK,WAAY,CACb,MAAAp1C,EAAW,KAAK,aAAa,EAE/BA,IACEzd,GACFyd,EAAS,OAAO,CACd,UAAW6/D,GAAmB,SAASt9E,CAAS,EAAIA,EAAYs9E,GAAmB,CAAC,CAAA,CACrF,EAGH7/D,EAAS,OAAO,CAAE,YAAAw/D,EAAa,QAAAC,CAAA,CAAS,EAC1C,CACF,CAGF,OAAQ,CACN,MAAMvqB,EAAU,IAAI6qB,GAAe,KAAK,QAAQ,EAEhD,OAAA7qB,EAAQ,YAAc,KAAK,YAC3BA,EAAQ,cAAgB,KAAK,cAC7BA,EAAQ,WAAa,KAAK,WAEnBA,CAAA,CAGT,OAAQ,QACDhuE,EAAA,KAAA,iBAAA,MAAAA,EAAgB,OAAM,CAG7B,SAAU,SACR,KAAK,cAAcA,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,KAAK,cACnD4U,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcvC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAC/Chb,GAAc,IAAI,CAAA,CAGpB,aAAc,CACL,MAAA,EAAA,CAGT,QAAQsJ,EAAU7W,EAAkD,GAAI,CACtE,KAAM,CAAE,SAAAmkF,EAAU,GAAGC,CAAA,EAAWpkF,EAEhC,KAAK,YAAc6W,EACnB,KAAK,WAAa,GAClB,KAAK,OAAOutE,CAAM,GAEdD,GAAY,CAACttE,EAAI,OAAO,iBAAiB,YAC3CA,EAAI,OAAO,iBAAiBstE,GAAY,UAAU,EAAI,KACxD,CAGF,WAAW79E,EAA0C,CACnD,GAAI,CAAC3I,GAAU,OAET,MAAAqQ,EAAK2c,GAAarkB,CAAM,EAE1B0H,IACF,KAAK,SAAWA,EAEZ,KAAK,UACP,KAAK,YAAc,KAAK,SAAS,YAAY,KAAK,UAAU,EAE5D,KAAK,aAAa,EAEtB,CAGM,cAAe,CACjB,GAAA,CAAC,KAAK,WAAarQ,GAAU,CAC3B,GAAA,CAAC,KAAK,YACR,QAAQ,KAAK,kEAAkE,EAE1E,KAAA,WAAa,SAAS,cAAc,KAAK,EACzC,KAAA,UAAYwlF,YAAUC,EAAS,EACpC,KAAK,UAAY,KAAK,UAAU,MAAM,KAAK,UAAU,MAChD,CACL,MAAMl7D,EAAQE,EAAA,YAAYg7D,GAAW,KAAM,IAAI,EAE1C,KAAA,WAAa,SAAS,cAAc,KAAK,EACxCl7D,EAAA,WAAa,KAAK,YAAY,SAE7BK,SAAAL,EAAO,KAAK,UAAU,EAExB,KAAA,UAAY2C,GAA8B3C,CAAK,CAAA,CAGjD,KAAA,WAAa,KAAK,WAAW,mBAChC,KAAK,UAAY,SAAS,MAAM,YAAY,KAAK,UAAU,CAAA,CAG/D,OAAO,KAAK,SAAA,CAGN,MAAMlqB,EAA0B+rC,EAAuBilE,EAAoB,CACjF,GAAI,CAACrxG,GACI,OAAAoB,GAGH,MAAAiB,EAAU,OAAO+pC,GAAY,SAAW,CAAE,QAAAA,EAAS,SAAUilE,GAAcjlE,EAE3E7rC,EAAM8B,EAAQ,KAAO8uG,GAAO,EAC5BrhG,EAAU,KAAK,aAAa,EAE9B,IAAAqD,EAEJ,MAAMm+F,EAAcjvG,EAAQ,QACtBoxD,EAAU,IAAM,CAGhB,GAFJ,aAAatgD,CAAK,EAEd,OAAOm+F,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEMC,EAAclvG,EAAQ,QACtBkgD,EAAU,IAAM,CAKhB,GAJAlgD,EAAQ,aACV,aAAa8Q,CAAK,EAGhB,OAAOo+F,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEMC,EAAcnvG,EAAQ,QACtBovG,EAAU,IAAM,CAMhB,GALApvG,EAAQ,cACV,aAAa8Q,CAAK,EACJu+F,EAAA,GAGZ,OAAOF,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEMjiG,EAAuB,CAC3B,GAAG,KAAK,SACR,GAAGlN,EACH,IAAA9B,EACA,KAAMF,GAAQgC,EAAQ,KACtB,QAAAoxD,EACA,QAAAlR,EACA,QAAAkvD,CACF,EAEIliG,EAAK,MAAQ,OAAOA,EAAK,MAAS,aAC/BA,EAAA,KAAOgS,UAAQhS,EAAK,IAAI,GAG/BO,EAAQ,IAAIP,CAAI,EACFmiG,EAAA,EAEd,SAASA,GAAgB,CACvB,MAAMr+D,EAAW,OAAO9jC,EAAK,UAAa,SAAWA,EAAK,SAAW,IAEjE8jC,GAAY,MACdlgC,EAAQ,WAAW,IAAM,CACvBrD,EAAQ,OAAOvP,CAAG,GACjB8yC,CAAQ,EACb,CAGF,MAAO,IAAM,CACX,aAAalgC,CAAK,EAClBrD,EAAQ,OAAOvP,CAAG,CACpB,CAAA,CAEJ,CAEa,MAAAoxG,GAAU,IAAIP,GCxQdT,GAAiB,OAAO,OAAO,CAAC,UAAW,OAAQ,UAAW,UAAW,OAAO,CAAC,EAEjFC,GAAiB,OAAO,OAAO,CAAC,UAAW,UAAW,OAAO,CAAC,4IC1BrE,MAAA7oF,EAAKtF,GAAc,QAAQ,EAC3B3B,EAAQU,GAAS,EAEjByyB,EAAkBp7B,EAAAA,SAAS,KAAO,CACtC,QAASiI,EAAM,MAAM,KACrB,KAAMA,EAAM,MAAM,KAClB,QAASA,EAAM,MAAM,QACrB,QAASA,EAAM,MAAM,QACrB,MAAOA,EAAM,MAAM,KAAA,EACnB,EAEI8S,EAAY1K,MAAqB,WAAW,EAC5C2nF,EAAc3nF,MAAI,EAAE,EACpB4nF,EAAU5nF,MAAI,EAAE,EAChB6nF,EAAQ7nF,EAAAA,IAAgC,EAE9C,eAAe7gB,EAAIhG,EAA8B,CAC3C0uG,EAAM,OACF,MAAAA,EAAM,MAAM,IAAI1uG,CAAO,CAC/B,CAGF,eAAe8oB,EAAO5qB,EAAU,CACvB,MAAA,CAAC,CAACwwG,EAAM,OAAU,MAAMA,EAAM,MAAM,OAAOxwG,CAAG,CAAA,CAGvD,SAAS8jD,GAAQ,CACT0sD,EAAA,OAASA,EAAM,MAAM,MAAM,CAAA,CAGnC,SAAS1vF,EAAOA,EAAsB,CAC1BuS,EAAA,MAAQvS,EAAO,WAAauS,EAAU,MACpCi9E,EAAA,MAAQxvF,EAAO,aAAewvF,EAAY,MAC9CC,EAAA,MAAQzvF,EAAO,SAAWyvF,EAAQ,KAAA,CAG5C,OAAAxnF,EACEhF,WAAS,CACP,MAAAysF,EACA,IAAA1oG,EACA,OAAA8iB,EACA,MAAAk5B,EACA,OAAAhjC,CACD,CAAA,CACH,wBAKEsI,EAAAA,YAkGQD,EAAA,MAAAunF,EAAA,EAAA,SAjGF,QAAJ,IAAIF,EACH,MAAKjnF,EAAAA,eAAEJ,EAAAA,MAAE3B,CAAA,EAAC,GAAC,EACX,kBAAiB2B,EAAAA,MAAE3B,CAAA,EAAC,GAAY,SAAA6L,EAAA,MAAU,MAAK,GAAA,EAAA,CAAA,CAAA,EAAA,EAC/C,UAAWA,EAAS,MACpB,eAAci9E,EAAW,MACzB,WAAUC,EAAO,KAAA,GAEP,KAAIzzC,EAAA,QACb,CAuFM,CAxFW,KAAA9tD,KAAI,CACrB0a,EAAAA,mBAuFM,MAAA,CAtFH,MAAKH,EAAAA,eAAA,EAA6B,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,GAA8B,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,IAA8B2B,QAAE3B,CAAA,EAAC,IAA6B,OAAA,YAAA,CAAA,EAAA,CAAAxY,EAAK,SAAO,OAAWA,EAAK,UAAQ,WAA8B,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAA0B,OAAA,UAAA,CAAA,EAAAxY,EAAK,KAAmB,CAAAma,EAAA,MAAA3B,CAAA,EAAG,IAA+B,OAAA,cAAA,CAAA,EAAA,CAAAxY,EAAK,MAAoB,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAAG,OAASxY,EAAK,IAAS,CAAA,EAAAA,EAAK,MAAQma,EAAAA,MAAcinF,EAAA,EAAC,SAASphG,EAAK,IAAI,EAAgB,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAA4B,OAAA,YAAA,CAAA,EAAAxY,EAAK,YAAyBma,EAAE,MAAA3B,CAAA,EAAC,IAAuB,OAAA,OAAA,CAAA,EAAAxY,EAAK,YAAcA,EAAK,OAAoBma,QAAE3B,CAAA,EAAC,IAA6B,OAAA,YAAA,CAAA,EAAA,CAAAxY,EAAK,YAAcA,EAAK,MAAoB,CAAAma,EAAAA,MAAA3B,CAAA,EAAG,IAAwB,OAAA,QAAA,CAAA,EAAAxY,EAAK,QAA8BA,EAAK,SAAA,GAexqB,KAAK,QACJ,MAAK4tD,EAAAA,eAAA,EAA0C,MAAA,OAAA5tD,EAAK,OAAK,SAAgBA,EAAK,MAAQ,OAA+C,gBAAA,OAAAA,EAAK,YAAU,SAAgBA,EAAK,WAAa,QAAiCA,EAAK,OAAK,CAAA,CAAA,GAOlO,cAAY,OACX,YAAWA,EAAK,MAAQma,QAAcknF,EAAA,EAAC,SAASrhG,EAAK,IAAI,EAAA,YAAA,QAAA,GAGlDA,EAAK,MAASA,EAAK,MAAQma,EAAAA,MAAAinF,EAAA,EAAe,SAASphG,EAAK,IAAI,iBADpEsa,EAAAA,mBAiBM,MAAA,OAfH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAA,MAAW5tD,EAAK,SAAS,CAAA,CAAA,GAGvBA,EAAK,oBADboa,EAAAA,YAKQD,EAAAA,MAAApO,EAAA,EAAA,OAHL,KAAM/L,EAAK,KACX,OAAQA,EAAK,SAAkB,OAAAA,EAAK,UAAQ,WAAA,EAAA,EAC5C,MAAK4tD,EAAAA,eAAA,CAAA,CAAA,MAAY5tD,EAAK,WAAcA,EAAK,KAAa,KAAK,CAAA,CAAA,qCAE9DsoC,YAAA,EAAAluB,cAKQD,EAAAA,UALRQ,EAAAA,WAKQ,CAAA,IAAA,CAAA,EAHE+pB,QAAgB1kC,EAAK,IAAI,EAAA,CAChC,OAAQA,EAAK,SAAkB,OAAAA,EAAK,UAAQ,WAAA,EAAA,EAC5C,MAAK,CAAA,MAAWA,EAAK,SAAS,iEAGnC0a,EAAAA,mBAiCM,MAAA,CAjCA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAED,OAAAxY,EAAK,UAAQ,wBAD5B,EAAAoa,cAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUtZ,EAAK,SACf,KAAMA,+CAETsa,EA0BW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAzBO3mC,EAAK,qBAArBsa,EAAAA,mBAkBWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CAhBD3mC,EAAK,yBADbsa,EAAAA,mBAOO,MAAA,OALJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAoC,MAAA,OAAA5tD,EAAK,YAAU,SAAgBA,EAAK,WAAa,MAAA,GAG3F,UAAQA,EAAK,KAAA,8BAEfsa,qBAQM,MAAA,OANH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAoC,MAAA,OAAA5tD,EAAK,YAAU,SAAgBA,EAAK,WAAa,UAIxF6a,EAAA,gBAAA7a,EAAK,OAAK,EAAA,EAAA,CAAA,qCAGDA,EAAK,uBAArBsa,EAAAA,mBAKWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CAJE3mC,EAAK,yBAAhBsa,EAAAA,mBAAiF,MAAA,OAArD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAa,UAAQxY,EAAK,OAAA,8BAClEsa,qBAEM,MAAA,OAFO,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,GACpBqC,EAAA,gBAAA7a,EAAK,SAAO,EAAA,EAAA,CAAA,+CAMfA,EAAK,wBADbsa,EAAAA,mBAOS,SAAA,OALP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,QAAOyqC,GAAArnC,EAAO5b,EAAK,GAAG,CAAA,GAEvBmZ,EAAAA,YAAgDgB,EAAAA,MAAApO,EAAA,EAAhD4O,EAAAA,WAAcR,EAAAA,MAAkC5I,CAAA,EAA5B,MAAK,CAAE,MAAM,OAAA,CAAO,EAAA,KAAA,EAAA,+HC9H5CowF,GAAwC,CAC5C,YACA,WACA,eACA,aACF,EAEA,IAAI7mG,GAAQ,EAEZ,SAAS8mG,IAAS,CAChB,MAAO,UAAU9mG,IAAO,EAC1B,CAEO,MAAMunG,EAAc,CAoBzB,YAAYvvG,EAA0B,GAAI,CAnB1CugB,GAAA,aACAA,GAAA,iBAEAA,GAAA,aACAA,GAAA,gBACAA,GAAA,aACAA,GAAA,gBACAA,GAAA,gBACAA,GAAA,cAEQA,GAAA,oBACAA,GAAA,kBACAA,GAAA,kBACAA,GAAA,mBACAA,GAAA,iBACAA,GAAA,mBACAA,GAAA,mBACAA,GAAA,sBAGIvgB,EAAA,CACR,GAAGA,EACH,OAAQ,CAAC,CAACA,EAAQ,OAClB,SAAUA,EAAQ,SAAW8G,GAAS9G,EAAQ,QAAQ,EAAI,GAC5D,EAEA,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,WAAa,KAClB,KAAK,WAAa,GAClB,KAAK,cAAgB,KACrB,KAAK,KAAO,SACZ,KAAK,SAAW,CAAC,EAEjB,KAAK,OAAOA,CAAO,EAEnB,KAAK,KAAO,CAACmlB,EAAqB4kB,EAA2BiH,IACpD,KAAK,MAAM,KAAM7rB,EAAO4kB,EAASiH,CAAQ,EAGlD,KAAK,QAAU,CAAC7rB,EAAqB4kB,EAA2BiH,IACvD,KAAK,MAAM,UAAW7rB,EAAO4kB,EAASiH,CAAQ,EAGvD,KAAK,KAAO,CAAC7rB,EAAqB4kB,EAA2BiH,IACpD,KAAK,MAAM,OAAQ7rB,EAAO4kB,EAASiH,CAAQ,EAGpD,KAAK,QAAU,CAAC7rB,EAAqB4kB,EAA2BiH,IACvD,KAAK,MAAM,UAAW7rB,EAAO4kB,EAASiH,CAAQ,EAGvD,KAAK,QAAU,CAAC7rB,EAAqB4kB,EAA2BiH,IACvD,KAAK,MAAM,UAAW7rB,EAAO4kB,EAASiH,CAAQ,EAGvD,KAAK,MAAQ,CAAC7rB,EAAqB4kB,EAA2BiH,IACrD,KAAK,MAAM,QAAS7rB,EAAO4kB,EAASiH,CAAQ,CACrD,CAOF,MACEzlB,EACAm9C,EACAhvB,EACA1I,EACA,CACIzlB,EACG,KAAA,QAAQm9C,EAAS13B,CAAQ,EAEzB,KAAA,MAAM0I,EAAO1I,CAAQ,CAC5B,CAGF,MAAM9yC,EAAU,OACVE,GAAOF,CAAG,EACZ,KAAK,MAAM,GAENgY,EAAA,KAAA,aAAA,IAAA,MAAAA,EAAgB,OAAOhY,EAC9B,CAGF,OAAO,CAAE,UAAAqzB,EAAW,YAAAi9E,EAAa,QAAAC,EAAS,GAAGrqB,GAAwC,CAInF,GAHA,KAAK,cAAgB,CAAE,UAAA7yD,EAAW,YAAAi9E,EAAa,QAAAC,CAAQ,EACvD,KAAK,SAAW,CAAE,GAAG,KAAK,SAAU,GAAGrqB,CAAO,EAE1C,KAAK,WAAY,CACb,MAAAp1C,EAAW,KAAK,aAAa,EAE/BA,IACEzd,GACFyd,EAAS,OAAO,CACd,UAAW6/D,GAAmB,SAASt9E,CAAS,EAAIA,EAAYs9E,GAAmB,CAAC,CAAA,CACrF,EAGH7/D,EAAS,OAAO,CAAE,YAAAw/D,EAAa,QAAAC,CAAA,CAAS,EAC1C,CACF,CAGF,OAAQ,CACN,MAAMvqB,EAAU,IAAIqrB,GAAc,KAAK,QAAQ,EAE/C,OAAArrB,EAAQ,YAAc,KAAK,YAC3BA,EAAQ,cAAgB,KAAK,cAC7BA,EAAQ,WAAa,KAAK,WAEnBA,CAAA,CAGT,OAAQ,QACDhuE,EAAA,KAAA,iBAAA,MAAAA,EAAgB,OAAM,CAG7B,SAAU,SACR,KAAK,cAAcA,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,KAAK,cACnD4U,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcvC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAC/Chb,GAAc,IAAI,CAAA,CAGpB,aAAc,CACL,MAAA,EAAA,CAGT,QAAQsJ,EAAU7W,EAAkD,GAAI,CACtE,KAAM,CAAE,SAAAmkF,EAAU,GAAGC,CAAA,EAAWpkF,EAEhC,KAAK,YAAc6W,EACnB,KAAK,WAAa,GAClB,KAAK,OAAO,CAAE,GAAG,KAAK,cAAe,GAAGutE,EAAQ,GAE5CD,GAAY,CAACttE,EAAI,OAAO,iBAAiB,WAC3CA,EAAI,OAAO,iBAAiBstE,GAAY,SAAS,EAAI,KACvD,CAGF,WAAW79E,EAA0C,CACnD,GAAI,CAAC3I,GAAU,OAET,MAAAqQ,EAAK2c,GAAarkB,CAAM,EAE1B0H,IACF,KAAK,SAAWA,EAEZ,KAAK,UACP,KAAK,YAAc,KAAK,SAAS,YAAY,KAAK,UAAU,EAE5D,KAAK,aAAa,EAEtB,CAGM,cAAe,CACjB,GAAA,CAAC,KAAK,WAAarQ,GAAU,CAC3B,GAAA,CAAC,KAAK,YACR,QAAQ,KAAK,iEAAiE,EAEzE,KAAA,WAAa,SAAS,cAAc,KAAK,EACzC,KAAA,UAAYwlF,YAAUC,EAAS,EACpC,KAAK,UAAY,KAAK,UAAU,MAAM,KAAK,UAAU,MAChD,CACL,MAAMl7D,EAAQE,EAAA,YAAYg7D,GAAW,KAAM,IAAI,EAE1C,KAAA,WAAa,SAAS,cAAc,KAAK,EACxCl7D,EAAA,WAAa,KAAK,YAAY,SAE7BK,SAAAL,EAAO,KAAK,UAAU,EAExB,KAAA,UAAY2C,GAA6B3C,CAAK,CAAA,CAGhD,KAAA,WAAa,KAAK,WAAW,mBAChC,KAAK,UAAY,SAAS,MAAM,YAAY,KAAK,UAAU,CAAA,CAG/D,OAAO,KAAK,SAAA,CAGN,MACNlqB,EACAmnB,EACA4kB,EACAilE,EACA,CACA,GAAI,CAACrxG,GACI,OAAAoB,GAGL,IAAAiB,EAEAxB,GAAS2mB,CAAK,EACNnlB,EAAAmlB,EAEN,OAAO4kB,GAAY,SACX/pC,EAAA,CAAE,MAAAmlB,EAAO,SAAU4kB,CAAQ,EAC3BA,EAGV/pC,EAAU,CAAE,MAAAmlB,EAAO,QAAA4kB,EAAS,SAAUilE,CAAU,EAFtChvG,EAAA,CAAE,MAAAmlB,EAAO,SAAU6pF,CAAU,EAMrC,MAAA9wG,EAAM8B,EAAQ,KAAO8uG,GAAO,EAC5BU,EAAS,KAAK,aAAa,EAE7B,IAAA1+F,EAEJ,MAAMm+F,EAAcjvG,EAAQ,QACtBoxD,EAAU,IAAM,CAGhB,GAFJ,aAAatgD,CAAK,EAEd,OAAOm+F,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEMC,EAAclvG,EAAQ,QACtBkgD,EAAU,IAAM,CAKhB,GAJAlgD,EAAQ,aACV,aAAa8Q,CAAK,EAGhB,OAAOo+F,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEMC,EAAcnvG,EAAQ,QACtBovG,EAAU,IAAM,CAMhB,GALApvG,EAAQ,cACV,aAAa8Q,CAAK,EACJu+F,EAAA,GAGZ,OAAOF,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEMjiG,EAAsB,CAC1B,GAAG,KAAK,SACR,GAAGlN,EACH,IAAA9B,EACA,KAAMF,GAAQgC,EAAQ,KACtB,QAAAoxD,EACA,QAAAlR,EACA,QAAAkvD,CACF,EAEIliG,EAAK,MAAQ,OAAOA,EAAK,MAAS,aAC/BA,EAAA,KAAOgS,UAAQhS,EAAK,IAAI,GAG/BsiG,EAAO,IAAItiG,CAAI,EACDmiG,EAAA,EAEd,SAASA,GAAgB,CACvB,MAAMr+D,EAAW,OAAO9jC,EAAK,UAAa,SAAWA,EAAK,SAAW,IAEjE8jC,GAAY,MACdlgC,EAAQ,WAAW,IAAM,CACvB0+F,EAAO,OAAOtxG,CAAG,GAChB8yC,CAAQ,EACb,CAGF,MAAO,IAAM,CACX,aAAalgC,CAAK,EAClB0+F,EAAO,OAAOtxG,CAAG,CACnB,CAAA,CAEJ,CAEa,MAAAuxG,GAAS,IAAIF,oFC/TpB,MAAA7pF,EAAKtF,GAAc,cAAc,8BAIrCoH,EAAA,mBAeK,KAAA,CAdF,MAAKC,EAAAA,eAAA,CAAW,CAAAJ,QAAA3B,CAAA,EAAG,EAAC,CAAA,EAAA,GAAkB,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,GAAE,aAAA,CAAA,EAAA,IAA+B2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAc8yC,EAAO,YAMrG5wC,EAAAA,mBAIM,MAAA,CAJA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBgC,EAAAA,WAEOC,oBAFP,IAEO,qCADFvC,EAAK,KAAA,EAAA,CAAA,QAGZwC,EAAAA,mBAEK,KAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACfgC,aAAaC,EAAA,OAAA,SAAA,CAAA,aCnBN+nF,GAAkBptF,GAAW,CACxC,KAAMI,GACN,OAAQa,GAAuB,EAC/B,MAAO,OACP,SAAUrB,EACV,WAAYA,EACZ,SAAU,OACV,YAAa,MACb,UAAW,OACX,OAAQ,OACR,SAAUA,EACV,YAAa,SACb,cAAe,OACf,SAAU,OACV,QAAS,MACT,QAASA,EACT,QAAS,OACT,QAAS,OACT,MAAO,OACP,SAAUmB,EAAkC,EAC5C,iBAAkBA,EAAkC,CACtD,CAAC,ECIwC,SAAAo3B,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAAA,IAE9B2tG,YAAAA,EAAc,CAAdA,OAAAA,EAAc,KAAA,OAAdA,EAAc,OAAA,SAAdA,EAAc,MAAA,QAAdA,CAAc,EAAdA,IAAc,CAAA,CAAA,EAMzB,MAAe/qF,qBAAgB,CAC7BjX,KAAM,aACNwH,MAAOu6F,GACP10D,MAAO,CAAC,gBAAiB,kBAAkB,EAC3Cn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CACrC,MAAM9lC,EAAQiM,GAAS,aAAc0D,EAAQ,CAC3C3lB,KAAM0jB,GAAgB,EACtBpL,OAAQ,KACR/Q,MAAO,CACLse,QAAS,EACTtD,UAAW3jB,GAASA,GAAS,EAC7BknB,OAAQ,EACT,EACD2qF,SAAU,GACVC,WAAY,GACZC,SAAU,CACR9qF,QAAS,GACTtD,UAAW3jB,GAASA,EAAQ,CAC7B,EACDgyG,YAAaA,IAAM,CAAC,GAAI,GAAI,GAAI,GAAG,EACnCp+B,UAAW,CACT3sD,QAAS,EACTtD,UAAW3jB,GAASksD,OAAO+lD,UAAUjyG,CAAK,GAAKA,EAAQ,CACxD,EACDs1C,OAAQ,CACNruB,QAAS,EACTtD,UAAW3jB,GAASA,EAAQ,EAC5BknB,OAAQ,EACT,EACD+D,SAAU,GACVinF,YAAa,CACXjrF,QAASA,IAAM,GACfpD,OAAQ,EACT,EACDsuF,cAAe,EACfC,SAAU,KACVC,QAAS,CACPprF,QAASA,IAAM,CAAE,EACjBtD,UAAW3jB,GAASg1D,MAAMsU,QAAQtpE,CAAK,CACxC,EACDsyG,QAAS,GACTrS,QAAS,KACTppC,QAAS,KACTv7C,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEK,CAAEmxB,MAAAA,CAAO,EAAGX,GAAQ,EACpBnkB,EAAKtF,GAAc,YAAY,EAC/B3B,EAAQU,GAAU,EAClBmxF,EAAYzpF,EAAG,IAAW,EAAE,EAC5BD,EAAgBC,EAAAA,IAAI1R,EAAMk+B,MAAM,EAChCk9D,EAAkB1pF,EAAAA,IAAI1R,EAAM26F,QAAQ,EACpC7pD,EAAOp/B,EAAAA,IAAI8oF,GAAea,IAAI,EAC9BC,EAAiB5pF,EAAG,IAAC,EAAK,EAC1B6pF,EAAiB7pF,EAAG,IAAC,EAAK,EAC1B8pF,EAAY9pF,EAAAA,IAAI1R,EAAMk+B,MAAM,EAC5Bu9D,EAAa3uF,EAAQ,SAAgB,EAAE,EAEvCxK,EAASI,GAAU,aAAc07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAEvD,CAAE7O,OAAQ8lB,CAAS,EAAGgC,GAAY,CACtCG,QAAS,GACTE,UAAWA,CAACpgB,EAAOygB,IAAa,CAC1B3Z,EAAM6T,UAEVlpB,GACE,CACE,CACE,IAAMgvB,EAAS+hF,IAAM/hF,EAASgiF,MAAQhiF,EAASvoB,MAAQuoB,EAAStoB,MAChE,IAAM,CACJ,MAAMwlD,EAAOl9B,EAAS+hF,IAAM/hF,EAASvoB,KAAO,GAAK,EAEjD,GAAI5I,IAAYojD,SAASgwD,cAAe,CACtC,MAAM9qG,GAAQ2qG,EAAWI,UAAUhjG,IAAMA,KAAO+yC,SAASgwD,aAAa,EAEtE,GAAI,CAAC,CAAC9qG,GAAO,OAEE2qG,EAAW9tG,GAAWmD,GAAQ+lD,EAAM,EAAG4kD,EAAWlxG,OAAS,CAAC,CAAC,EAErE+7C,MAAO,CAChB,CACF,CAAC,EAEH,CACE,IAAM3sB,EAAS9C,OAAS8C,EAASmiF,MACjC,IAAM,CACJ,GAAIlwD,UAAYA,SAASgwD,eAGnB,CAAC,CAFSH,EAAWI,UAAUhjG,IAAMA,KAAO+yC,SAASgwD,aAAa,EAEzD,CACX,MAAMG,GAAcxrF,EAAGm8B,IAAI,OAAQ,QAAQ,EACrCs8B,EAAWyyB,EAAW7oC,KAAK/5D,IAAMA,GAAGg5F,UAAUr4F,SAASuiG,EAAW,CAAC,EAEzE/yB,GAAAA,MAAAA,EAAU1iC,OACZ,CAEH,CAAA,CACF,EAEH,CACE01D,eAAgBA,IAAM9iG,EAAMkzC,eAAgB,EAC5C6vD,cAAetiF,EAASC,QAC1B,CACF,CACF,CACF,CAAC,EAEKhW,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMhW,IAAI,CAAC,EAAGgW,EAAMhW,OAAS,UACpC,CAACumB,EAAGE,GAAG,YAAY,CAAC,EAAGzQ,EAAM06F,WAC7B,CAACnqF,EAAGE,GAAG,WAAW,CAAC,EAAGzQ,EAAMy6F,SAC5B,CAAClqF,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM6T,QAC5B,EACF,EACKqoF,EAAa76F,EAAAA,SAAS,IACnBy8C,KAAKq+C,KAAKn8F,EAAMzO,OAAS6pG,EAAgBxyG,OAAS,EAAE,GAAK,CACjE,EACKwzG,EAAc/6F,EAAAA,SAAS,IAAM66F,EAAWtzG,MAAQoX,EAAMw8D,SAAS,EAC/DlB,EAAej6D,EAAAA,SAAS,IAAM,CAClC,MAAMxO,EAAQklF,EAAmB,EAAG,CAAC,EAErC,OAAOllF,GAASqpG,EAAWtzG,OAAS6oB,EAAc7oB,QAAUiK,CAC9D,CAAC,EACK0oE,EAAel6D,EAAAA,SAAS,IAAM,CAClC,MAAMxO,EAAQklF,EAAmBmkB,EAAWtzG,MAAO,EAAE,EAErD,OAAOiK,GAAS,GAAK4e,EAAc7oB,QAAUiK,CAC/C,CAAC,EACKwpG,EAAoBh7F,EAAAA,SAAS,IAC1B,GAAGiB,EAAO1Z,MAAMiX,IAAI,IAAIgD,GAAaP,EAAO1Z,MAAM0zG,KAAMt8F,EAAM+6F,aAAa,CAAC,EACpF,EACKwB,EAAoBl7F,EAAAA,SAAS,IAC1B,GAAGiB,EAAO1Z,MAAMkX,IAAI,IAAI+C,GAAaP,EAAO1Z,MAAM0zG,KAAMt8F,EAAM+6F,aAAa,CAAC,EACpF,EACKyB,EAAqBn7F,EAAAA,SAAS,IAAM,CACxC,GAAI,CAAC+6F,EAAYxzG,MAAO,MAAO,GAE/B,IAAIs1C,EAAS65C,EAAmBtmE,EAAc7oB,MAAQoX,EAAM+6F,cAAe,EAAE,EAE7E,OAAI78D,EAAS,IACXA,EAAS65C,EAAmB,EAAG,CAAC,EAE5B75C,GAAUzsB,EAAc7oB,OAAc,EAGrCs1C,CACT,CAAC,EACKu+D,EAAqBp7F,EAAAA,SAAS,IAAM,CACxC,GAAI,CAAC+6F,EAAYxzG,MAAO,MAAO,GAE/B,IAAIs1C,EAAS65C,EAAmBtmE,EAAc7oB,MAAQoX,EAAM+6F,cAAe,CAAC,EAE5E,OAAI78D,EAASg+D,EAAWtzG,QACtBs1C,EAAS65C,EAAmBmkB,EAAWtzG,MAAO,EAAE,EAE5Cs1C,GAAUzsB,EAAc7oB,OAAc,EAGrCs1C,CACT,CAAC,EACKw+D,EAAoBr7F,EAAAA,SAAS,IAC1BrB,EAAM46F,YAAYt9F,IAAItT,IACpB,CACLpB,MAAOoB,EACPimB,MAAO,GAAGjmB,CAAI,IAAIsY,EAAO1Z,MAAM+zG,OAAO,EACvC,EACF,CACF,EACKC,EAAev7F,EAAAA,SAAS,IAAM,CAClC,MAAM45F,EAAUj7F,EAAMi7F,QAChB4B,EAAgB5B,EAAQY,UAAU5yG,EAAM,EAE9C,MAAO,CACLsI,MAAO0pG,EAAQY,UAAU9tG,GAAKA,IAAM,OAAO,EAAI8uG,EAC/C7yG,KAAMixG,EAAQY,UAAU9tG,GAAKA,IAAM,MAAM,EAAI8uG,EAC7CC,KAAM7B,EAAQY,UAAU9tG,GAAKA,IAAM,MAAM,EAAI8uG,CAC9C,CACH,CAAC,EACKE,EAAiB17F,EAAAA,SAAS,IAAM,CACpC,GAAI,CAACrB,EAAMi7F,QAAQ9qF,SAAS,MAAM,EAAG,MAAO,GAE5C,IAAI6sF,EAAY,EAEhB,OAAIh9F,EAAMi7F,QAAQ9qF,SAAS,MAAM,EAC/B6sF,EAAYl/C,KAAKq+C,KAAKn8F,EAAMzO,OAASusD,KAAKtvD,IAAI,GAAGwR,EAAM46F,WAAW,GAAK,GAAG,EAE1EoC,EAAYl/C,KAAKq+C,KAAKn8F,EAAMzO,OAASyO,EAAM26F,UAAY,GAAG,EAGrDqC,EAAUv0G,SAAQ,EAAG8B,OAAS,GAAK,EAC5C,CAAC,EAEDqiB,EAAAA,MACE,IAAM5M,EAAMk+B,OACZt1C,GAAS,CACPq0G,EAAar0G,EAAO,EAAK,CAC3B,CACF,EACAgkB,EAAAA,MAAM,IAAM5M,EAAMw8D,UAAW0gC,CAAa,EAC1CtwF,EAAK,MAACsvF,EAAYgB,CAAa,EAC/BtwF,EAAAA,MACE,IAAM5M,EAAM26F,SACZ/xG,GAAS,CACPwyG,EAAgBxyG,MAAQA,CAC1B,CACF,EACAgkB,EAAAA,MAAMwuF,EAAiB,CAACxyG,EAAO08D,IAAc,CAC3CtmB,EAAK,mBAAoBp2C,CAAK,EAC9BulB,EAAUnO,EAAMm9F,iBAAkBv0G,CAAK,EAGvC,MAAMw0G,EAASt/C,KAAKq+C,MAAM72C,GAAa7zC,EAAc7oB,MAAQ,GAAK,GAAKA,CAAK,EAE5E,IAAIs1C,GAAS65C,EAAmBqlB,EAAQ,CAAC,EAErCl/D,GAASg+D,EAAWtzG,QACtBs1C,GAAS65C,EAAmBqlB,EAAS,EAAG,EAAE,EAEtCl/D,GAAS,IAAGA,GAAS,IAG3BzsB,EAAc7oB,MAAQs1C,GACtBg/D,EAAe,CACjB,CAAC,EAEDp3D,EAAO,CAAEm3D,aAAAA,EAAc5gC,WAAAA,EAAYC,WAAAA,CAAW,CAAC,EAE/C7nD,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS4pF,CAAa,CACxB,CAAC,EAEDhS,EAAAA,UAAU,IAAM,CACTj0E,EAAQruB,QAEb6yG,EAAWlxG,OAAS,EACpBkxG,EAAWzkC,KACT,GAAGpZ,MAAM9e,KACP7nB,EAAQruB,MAAMy0G,iBACZ,GAAG9sF,EAAG+sF,IAAI,MAAM,CAAC,QAAQ/sF,EAAGgtF,KAAK,OAAQ,UAAU,CAAC,GACtD,CACF,CACF,EACF,CAAC,EAED,SAASxlB,EAAmB75C,EAAgBh0C,EAAc,CAGxD,IAFAA,EAAOA,EAAO4zD,KAAKiZ,IAAI7sE,CAAI,EAEpB8V,EAAM86F,YAAY58D,CAAM,IAC7BA,GAAUh0C,EAENg0C,EAAAA,EAAS,GAAKA,EAASg+D,EAAWtzG,SAAtC,CAGF,OAAOs1C,CACT,CAEA,SAASmM,EAAazhD,EAAe,CAC/B6oB,EAAc7oB,QAAUA,IAE5B6oB,EAAc7oB,MAAQA,EACtB4yG,EAAU5yG,MAAQA,EAElBs0G,EAAe,EACfl+D,EAAK,gBAAiBp2C,CAAK,EAC3BulB,EAAUnO,EAAMuqC,SAAU3hD,CAAK,EACjC,CAEA,SAASq0G,EAAa/+D,EAAgBoI,EAAQ,GAAM,CAGlD,GAFApI,EAASs/D,SAASt/D,EAAOz1C,UAAU,EAE/BuX,EAAAA,EAAM6T,UAAYqqB,EAAS,GAAKA,EAASg+D,EAAWtzG,OAASoX,EAAM86F,YAAY58D,CAAM,KAIzFmM,EAAanM,CAAM,EAEf11C,IAAY89C,GAAO,CACrB,MAAM0iC,EAAWyyB,EAAW7oC,KAAK/5D,IAAMA,KAAO+yC,SAASgwD,aAAa,EAEpE5yB,GAAAA,MAAAA,EAAUn/B,OACVv2B,EAAAA,SAAS,IAAM,SACbmoF,GAAAA,EAAW7oC,KAAK/5D,GAAMA,EAAG4kG,UAAY,CAAC,IAAtChC,MAAAA,GAAyCn1D,OAC3C,CAAC,CACH,CACF,CAEA,SAAS+1B,GAAa,CACpB,GAAI,CAACf,EAAa1yE,OAAS,CAACoX,EAAM6T,SAAU,CAC1C,MAAMqqB,EAAS65C,EAAmBtmE,EAAc7oB,MAAQ,EAAG,EAAE,EAEzDs1C,GAAU,GAAG++D,EAAa/+D,CAAM,CACtC,CACF,CAEA,SAASo+B,GAAa,CACpB,GAAI,CAACf,EAAa3yE,OAAS,CAACoX,EAAM6T,SAAU,CAC1C,MAAMqqB,EAAS65C,EAAmBtmE,EAAc7oB,MAAQ,EAAG,CAAC,EAExDs1C,GAAUg+D,EAAWtzG,OAAOq0G,EAAa/+D,CAAM,CACrD,CACF,CAEA,SAASg/D,GAAgB,CACvB,IAAIQ,EAEJ,GAAIxB,EAAWtzG,OAASoX,EAAMw8D,UAE5BkhC,EAAS3zG,GAAMmyG,EAAWtzG,KAAK,MAC1B,CACL,MAAM+0G,EAAc39F,EAAMw8D,UAAY,EAChCohC,EAAgB9/C,KAAKq+C,KAAKn8F,EAAMw8D,UAAY,CAAC,EAEnD,GAAI/qD,EAAc7oB,MAAQg1G,EAExBF,EAAS3zG,GAAM4zG,CAAW,EAC1BD,EAAO1mC,KAAKklC,EAAWtzG,KAAK,EAE5BkoD,EAAKloD,MAAQ4xG,GAAea,aACnB5pF,EAAc7oB,OAASszG,EAAWtzG,MAAQg1G,EAAe,CAElE,IAAI/qG,GAAQ8qG,EAAc,EAGtB9qG,GAAQ,IAAM,IAChBA,IAAS,GAGX6qG,EAAS3zG,GAAM8I,GAAO4e,EAAc7oB,OAASiK,GAAQ,GAAK,CAAC,EAC3D6qG,EAAOG,QAAQ,CAAC,EAChBH,EAAO1mC,KAAKklC,EAAWtzG,KAAK,EAE5BkoD,EAAKloD,MAAQ4xG,GAAesD,MAC9B,MAEEJ,EAAS3zG,GAAM4zG,EAAazB,EAAWtzG,MAAQ+0G,EAAc,CAAC,EAC9DD,EAAOG,QAAQ,CAAC,EAEhB/sD,EAAKloD,MAAQ4xG,GAAeuD,KAEhC,CAEIL,EAAOnzG,SAAW,IACpB4wG,EAAUvyG,MAAQ,CAAE,GAGtBuyG,EAAUvyG,MAAQ80G,EAAOjzD,MAAM,EAAG,EAAE,CACtC,CAEA,SAASuzD,GAAoB,CAC3B1C,EAAe1yG,MAAQ,EACzB,CAEA,SAASq1G,IAAoB,CAC3B3C,EAAe1yG,MAAQ,EACzB,CAEA,SAASs1G,IAAoB,CACvB,CAACl+F,EAAM6T,UAAY2oF,EAAmB5zG,OACxCq0G,EAAaT,EAAmB5zG,KAAK,CAEzC,CAEA,SAASu1G,GAAoB,CAC3B5C,EAAe3yG,MAAQ,EACzB,CAEA,SAASw1G,IAAoB,CAC3B7C,EAAe3yG,MAAQ,EACzB,CAEA,SAASy1G,IAAoB,CACvB,CAACr+F,EAAM6T,UAAY4oF,EAAmB7zG,OACxCq0G,EAAaR,EAAmB7zG,KAAK,CAEzC,CAEA,SAAS01G,GAAepgE,EAAgB,CACtCA,EAAS4f,KAAKvvD,IAAIuvD,KAAKtvD,IAAIgvG,SAASt/D,EAAOz1C,SAAU,CAAA,EAAGyzG,EAAWtzG,KAAK,EAAG,CAAC,EAE5E,MAAM21G,EAAergE,EAErB,GAAIA,IAAWzsB,EAAc7oB,MAAO,CAClC,MAAMsB,EAAOg0C,EAASzsB,EAAc7oB,MAAQ,EAAI,GAEhDs1C,EAAS65C,EAAmBwmB,EAAcr0G,CAAI,GAE1CA,EAAO,EAAIg0C,EAASg+D,EAAWtzG,MAAQs1C,EAAS,KAClDA,EAAS65C,EAAmBwmB,EAAc,CAACr0G,CAAI,GAE3CA,EAAO,EAAIg0C,EAAS,EAAIA,EAASg+D,EAAWtzG,SAC9Cs1C,EAAS,IAIbmM,EAAanM,CAAM,CACrB,CAEA5qB,EAAAA,SAAS,IAAM,CACbkoF,EAAU5yG,MAAQ6oB,EAAc7oB,KAClC,CAAC,CACH,CAEA,SAAS41G,GAAW14C,EAAU,CAAA,IAAA/Y,EAC5B,MAAMl5B,EAAW7T,EAAM6T,UAAYynD,EAAa1yE,MAC1C03B,GAAQ+U,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMooF,WAAa1nE,EAAM1gB,MAAMmoF,UAEjE,OAAA7/D,EAAAA,YAAA40C,EAAA,CAAA,IAESjtD,GAAMA,GAAM,CAACyiE,EAAa1yE,OAAS6yG,EAAWzkC,KAAKn+D,CAAS,EAAC,MAC3D,CACL0X,EAAGg8B,GAAG,MAAM,EACZh8B,EAAGm8B,IAAI,OAAQ,MAAM,EACrB74B,EAAWtD,EAAGm8B,IAAI,OAAQ,UAAU,EAAI,EAAE,EAC3C,MACM1sC,EAAMk7F,QAAUjqF,OAAY3O,EAAO1Z,MAAM61G,SAAQ,KAClD,WAAU,SACN,KAAI,aACFn8F,EAAO1Z,MAAM61G,SAAQ,cACpB5qF,EAAW,OAAS5C,OAAS,QACjCorD,EAAU,eACHA,EAAU,eACVA,CAAU/2B,EAAAA,GAAAyH,EAEzB57B,aAAWjN,EAAO,OAAQ,CAAE2P,SAAAA,CAAS,EAAG,IAAM,CAAA3C,EAAA,YAAAG,GAAA,CAAA,SACzBrR,EAAMkE,MAAMrE,KAAI,KAAQ,CAAEgU,SAAAA,CAAS,CAAC,EAAA,CAAAhE,QAAAA,IAAAqB,CAAAA,EAAAA,YAAApN,GAAA4O,EAAAA,WAC5C4N,GAAK,CAAA,MAAS,EAAEA,GAAMvQ,OAAS,EAAE,CAAA,EAAA,IAAA,CAAA,EAE9C,CAAA,CAAA,CAAC,EAAAg9B,EAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,CAAA,CAAA,CAAA,CAGR,CAEA,SAAS2xD,GAAW54C,EAAU,CAAA,IAAA/N,EAC5B,MAAMlkC,EAAW7T,EAAM6T,UAAY0nD,EAAa3yE,MAC1C03B,GAAQ+U,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMmoF,UAAYznE,EAAM1gB,MAAMooF,WAEhE,OAAA9/D,EAAAA,YAAA40C,EAAA,CAAA,IAESjtD,GAAMA,GAAM,CAAC0iE,EAAa3yE,OAAS6yG,EAAWzkC,KAAKn+D,CAAS,EAAC,MAC3D,CACL0X,EAAGg8B,GAAG,MAAM,EACZh8B,EAAGm8B,IAAI,OAAQ,MAAM,EACrB74B,EAAWtD,EAAGm8B,IAAI,OAAQ,UAAU,EAAI,EAAE,EAC3C,MACM1sC,EAAMk7F,QAAUjqF,OAAY3O,EAAO1Z,MAAM+1G,SAAQ,KAClD,WAAU,SACN,KAAI,aACFr8F,EAAO1Z,MAAM+1G,SAAQ,cACpB9qF,EAAW,OAAS5C,OAAS,QACjCqrD,EAAU,eACHA,EAAU,eACVA,CAAUh3B,EAAAA,GAAAyS,EAEzB5mC,aAAWjN,EAAO,OAAQ,CAAE2P,SAAAA,CAAS,EAAG,IAAM,CAAA3C,EAAA,YAAAG,GAAA,CAAA,SACzBrR,EAAMkE,MAAMpE,KAAI,KAAQ,CAAE+T,SAAAA,CAAS,CAAC,EAAA,CAAAhE,QAAAA,IAAAqB,CAAAA,EAAAA,YAAApN,GAAA4O,EAAAA,WAC5C4N,GAAK,CAAA,MAAS,EAAEA,GAAMvQ,OAAS,EAAE,CAAA,EAAA,IAAA,CAAA,EAE9C,CAAA,CAAA,CAAC,EAAAgoC,EAAA,CAAAloC,QAAAA,IAAA,CAAAkoC,CAAA,CAAA,CAAA,CAGR,CAEA,SAAS6mD,GAAmB94C,EAAU,CAAA,IAAA+4C,EACpC,GAAI,CAACzC,EAAYxzG,OAASkoD,EAAKloD,QAAU4xG,GAAea,KAAM,OAAO,KAErE,MAAMxnF,EAAW7T,EAAM6T,UAAY,CAAC2oF,EAAmB5zG,MAEvD,OAAAsoB,EAAAA,YAAA40C,EAAA,CAAA,IAESjtD,IAAMA,IAAM2jG,EAAmB5zG,OAAS6yG,EAAWzkC,KAAKn+D,EAAS,EAAC,MAChE,CACL,CAAC0X,EAAGg8B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACh8B,EAAGm8B,IAAI,OAAQ,MAAM,CAAC,EAAG,GAC1B,CAACn8B,EAAGm8B,IAAI,OAAQ,UAAU,CAAC,EAAG74B,CAC/B,EAAA,MACM7T,EAAMk7F,QAAUjqF,OAAYorF,EAAkBzzG,MAAK,KACpD,WAAU,SACN,KAAI,aACFyzG,EAAkBzzG,MAAK,QAC1Bs1G,GAAiB,eACVA,GAAiB,eACjBA,GAAiB,aACnBF,EAAiB,aACjBC,EAAiB,EAAA34D,GAAAu5D,EAE9B9pF,GAAiB7Q,EAAO,CAAC,YAAa,UAAU,EAAG,IAAM,CACxD,MAAMoc,GAAQ+U,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMk2G,YAAcx1F,EAAM1gB,MAAMm2G,WAElE,OAAA7tF,EAAAA,YAAAmrB,EAAAA,WAAA,CAAA,KACoB9rB,EAAGy8B,GAAG,MAAM,CAAC,EAAA,CAAAn9B,QAAAA,IAAA,CAC5B,CAACgE,GAAYynF,EAAe1yG,MAAKsoB,cAAApN,GAAA4O,EAAA,WACtB4N,GAAK,CAAA,MAAS,EAAEA,GAAMvQ,OAAS,GAAEmB,EAAAA,IAAAA,EAAAA,cAAApN,GAAA4O,EAAAA,WAGrCpJ,EAAM1gB,MAAM+lG,SAAQ,CAAA,MACjB,EAAErlF,EAAM1gB,MAAM+lG,SAAS5+E,OAAS,GAAE,MAClC,oBAEV,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAGP,CAAC,EAAE,CAAE8D,SAAAA,EAAUmrF,QAAS1D,EAAe1yG,MAAO,CAAC,EAAAi2G,EAAA,CAAAhvF,QAAAA,IAAA,CAAAgvF,CAAA,CAAA,CAAA,CAGrD,CAEA,SAASI,GAAmBn5C,EAAU,CAAA,IAAAo5C,EACpC,GAAI,CAAC9C,EAAYxzG,OAASkoD,EAAKloD,QAAU4xG,GAAeuD,MAAO,OAAO,KAEtE,MAAMlqF,EAAW7T,EAAM6T,UAAY,CAAC4oF,EAAmB7zG,MAEvD,OAAAsoB,EAAAA,YAAA40C,EAAA,CAAA,IAESjtD,IAAMA,IAAM4jG,EAAmB7zG,OAAS6yG,EAAWzkC,KAAKn+D,EAAS,EAAC,MAChE,CACL,CAAC0X,EAAGg8B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACh8B,EAAGm8B,IAAI,OAAQ,MAAM,CAAC,EAAG,GAC1B,CAACn8B,EAAGm8B,IAAI,OAAQ,UAAU,CAAC,EAAG74B,CAC/B,EAAA,MACM7T,EAAMk7F,QAAUjqF,OAAYsrF,EAAkB3zG,MAAK,KACpD,WAAU,SACN,KAAI,aACF2zG,EAAkB3zG,MAAK,QAC1By1G,GAAiB,eACVA,GAAiB,eACjBA,GAAiB,aACnBF,EAAiB,aACjBC,EAAiB,EAAA94D,GAAA45D,EAE9BnqF,GAAiB7Q,EAAO,CAAC,YAAa,UAAU,EAAG,IAAM,CACxD,MAAMoc,GAAQ+U,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMm2G,WAAaz1F,EAAM1gB,MAAMk2G,YAEjE,OAAA5tF,EAAAA,YAAAmrB,EAAAA,WAAA,CAAA,KACoB9rB,EAAGy8B,GAAG,MAAM,CAAC,EAAA,CAAAn9B,QAAAA,IAAA,CAC5B,CAACgE,GAAY0nF,EAAe3yG,MAAKsoB,cAAApN,GAAA4O,EAAA,WACtB4N,GAAK,CAAA,MAAS,EAAEA,GAAMvQ,OAAS,GAAEmB,EAAAA,IAAAA,EAAAA,cAAApN,GAAA4O,EAAAA,WAGrCpJ,EAAM1gB,MAAM+lG,SAAQ,CAAA,MACjB,EAAErlF,EAAM1gB,MAAM+lG,SAAS5+E,OAAS,GAAE,MAClC,oBAEV,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAGP,CAAC,EAAE,CAAE8D,SAAU,CAAC4oF,EAAmB7zG,MAAOo2G,QAASzD,EAAe3yG,MAAO,CAAC,EAAAs2G,EAAA,CAAArvF,QAAAA,IAAA,CAAAqvF,CAAA,CAAA,CAAA,CAGhF,CAEA,SAAS7tB,EAAWvrB,EAAUw2C,EAAc,CAAA,IAAA6C,EAC1C,MAAMtrF,GAAW7T,EAAM6T,UAAY7T,EAAM86F,YAAYwB,CAAI,EACnDp+D,EAASzsB,EAAc7oB,QAAU0zG,EAEvC,OAAAprF,EAAAA,YAAA40C,EAAA,CAAA,IAESjtD,IAAMA,IAAM4iG,EAAWzkC,KAAKn+D,EAAS,EAAC,MACpC,CACL,CAAC0X,EAAGg8B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACh8B,EAAGm8B,IAAI,OAAQ,UAAU,CAAC,EAAG74B,GAC9B,CAACtD,EAAGm8B,IAAI,OAAQ,QAAQ,CAAC,EAAGxO,CAC7B,EAAA,MACMl+B,EAAMk7F,QAAUjqF,OAAYqrF,EAAI,KACjC,gBAAe,SACXp+D,EAAS,IAAM,KAAI,gBACdo+D,EAAI,eACLJ,EAAWtzG,MAAK,gBACfirB,GAAW,OAAS5C,OAAS,QACnCq8B,IAAM2vD,EAAaX,CAAI,EAAC,eACjB8C,IAAMnC,EAAaX,CAAI,EAAC,eACxB+C,IAAMpC,EAAaX,CAAI,CAACh3D,EAAAA,GAAA65D,EAEvChuF,aAAWjN,EAAO,OAAQ,CAAEo4F,KAAAA,EAAMzoF,SAAAA,GAAUqqB,OAAAA,CAAO,EAAG,IAAM,CAAAhtB,EAAA,YAAAG,GAAA,CAAA,SACvCrR,EAAMkE,MAAMnM,KAAI,KAAQ,CAAEukG,KAAAA,EAAMzoF,SAAAA,GAAUqqB,OAAAA,CAAO,CAAC,EAAAoH,GACnEg3D,CAAI,EAAJA,EAAI,CAAAzsF,QAAAA,IAAA,CAAJysF,CAAI,EAER,CAAA,CAAA,CAAC,EAAA6C,EAAA,CAAAtvF,QAAAA,IAAA,CAAAsvF,CAAA,CAAA,CAAA,CAGR,CAEA,SAASG,GAAoB,CAC3B,OAAKt/F,EAAMi7F,QAAQ9qF,SAAS,OAAO,EAEnCe,EAAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,OAAO,EAAGqwD,EAAah0G,MAAM2I,MAAQ,GAAKgf,EAAGm8B,IAAI,QAAS,QAAQ,CAAC,EAAC,MAC3E,CAAE6yD,MAAO3C,EAAah0G,MAAM2I,KAAM,GAExC,CAAA,GAAG+Q,EAAO1Z,MAAM2I,KAAK,IAAIsR,GACxB7C,EAAMg7F,UAAY14F,EAAO1Z,MAAMoyG,SAC/Bh7F,EAAMzO,KACR,CAAC,EAAE,CAAA,EAVsC,IAa/C,CAEA,SAASiuG,GAAmB,CAC1B,OAAKx/F,EAAMi7F,QAAQ9qF,SAAS,MAAM,EAElCe,EAAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,MAAM,EAAGqwD,EAAah0G,MAAMoB,KAAO,GAAKumB,EAAGm8B,IAAI,OAAQ,QAAQ,CAAC,EAAC,MACxE,CAAE6yD,MAAO3C,EAAah0G,MAAMoB,IAAK,GAACknB,CAAAA,EAAA,YAAAg2C,GAAA,CAAA,MAGxBk0C,EAAgBxyG,MAAK,iBAAAoyD,GAArBogD,EAAgBxyG,MAAKoyD,EAAA,QAAA,GAAA,MAE7BzqC,EAAGg8B,GAAG,aAAa,EAAC,QAClBmwD,EAAkB9zG,MAAK,OACxB,GAAK,SACH,GAAK,UACJ,EAAK,EAAA,IAAA,CAAA,CAAA,EAdsB,IAkB9C,CAEA,SAAS62G,GAAmB,CAC1B,OAAKz/F,EAAMi7F,QAAQ9qF,SAAS,MAAM,EAElCe,EAAAA,YAAA,MAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,MAAM,EAAGqwD,EAAah0G,MAAMk0G,KAAO,GAAKvsF,EAAGm8B,IAAI,OAAQ,QAAQ,CAAC,EAAC,MACxE,CAAE6yD,MAAO3C,EAAah0G,MAAMk0G,IAAK,CAEvCx6F,EAAAA,CAAAA,EAAO1Z,MAAM82G,OAAMxuF,EAAAA,YAAAu/C,GAAA,CAAA,MAEH+qC,EAAU5yG,MAAK,iBAAAoyD,GAAfwgD,EAAU5yG,MAAKoyD,EAAA,QAAA,GAAA,MAEvBzqC,EAAGg8B,GAAG,YAAY,EAAC,UACf,GAAK,KACV,GAAK,MACJ,CAAEpuB,MAAO,GAAG4+E,EAAen0G,KAAK,IAAM,EAAA,SACnC01G,IAEXt7F,IAAAA,EAAAA,GAAiBV,EAAO1Z,MAAM0zG,KAAM,CAAC,CAAC,CAAA,EAjBC,IAoB9C,CAEA,MAAO,IAAM,CACX,MAAMqD,EAAU3/F,EAAM6oF,SAAW,KAC3BxoC,EAAWrgD,EAAMy/C,UAAoBkgD,IAAY,KAAO,KAAO,OAErE,OAAAzuF,EAAAA,YAAA,MAAA,CAAA,MACctN,EAAUhb,OAAKsoB,CAAAA,EAAA,YAAAmvC,EAAA,CAAA,IAElBppC,EAAO,MACL1G,EAAGg8B,GAAG,MAAM,EAAC,KACd,UAAS,aACH,aAAY,gBACTvsC,EAAM6T,SAAW,OAAS5C,MAAS,EAAA,CAAApB,QAAAA,IAAA,CAEjD2uF,GAAWmB,CAAO,EAClBtuB,EAAWsuB,EAAS,CAAC,EACrBf,GAAmBe,CAAO,EAC1BxE,EAAUvyG,MAAM0U,IAAIg/F,GAAQjrB,EAAWsuB,EAASrD,CAAI,CAAC,EACrD2C,GAAmBU,CAAO,EAC1BzD,EAAWtzG,MAAQ,GAAKyoF,EAAWsuB,EAASzD,EAAWtzG,KAAK,EAC5D81G,GAAWiB,CAAO,CAAC,CAErBL,CAAAA,EAAAA,EAAmB,EACnBE,EAAgB,EAChBC,EAAkB,CAAA,CAAA,CAGxB,CACH,CACF,CAAC,EClsBYG,GAAgBzyF,GAAW,CACtC,WAAY,OACZ,MAAOQ,GACP,YAAa,OACb,SAAU,OACV,UAAW,OACX,UAAWZ,EACX,YAAa,CAAC,OAAQ,MAAO,QAAQ,EACrC,MAAO,MACT,CAAC,ECEY8yF,GAAY,OAAO,OAA2B,CACzD,UACA,SACA,SACA,aACA,gBACA,MACF,CAAC,6HCRK,MAAA7/F,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,WAAY,CACV,QAAS,EACT,UAAW3oB,GAASA,GAAS,GAAKA,GAAS,IAC3C,OAAQ,EACV,EACA,MAAOklB,GAAgB,EACvB,YAAa,EACb,SAAU,CACR,QAAS,UACT,UAAWllB,GAASi3G,GAAU,SAASj3G,CAAK,CAC9C,EACA,UAAW,EACX,UAAW,GACX,YAAa,CACX,QAAS,KACT,UAAWA,GAAS,EAAE,MAAM,QAAQA,CAAK,IAAM,CAACA,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,GACtE,EACA,MAAO,KAAO,CAAC,EAAA,CAChB,EAEK2nB,EAAKtF,GAAc,UAAU,EAE7BrH,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAG,QAAQvQ,EAAM,QAAQ,EAAE,EAC9B,CACE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAAA,CAEhC,CACD,EACK2Q,EAAQtP,EAAAA,SAAS,KACd,CAAE,CAACkP,EAAG,GAAG,YAAY,CAAC,EAAGvQ,EAAM,UAAW,EAClD,EACKq7D,EAAah6D,EAAAA,SAAS,KACnB,CACL,OAAQ,GAAGrB,EAAM,WAAW,KAC5B,aAAc,GAAGA,EAAM,WAAW,IACpC,EACD,EACKuxD,EAAclwD,EAAAA,SAAS,IAAM,CACjC,MAAMsP,EAAuB,CAC3B,aAAc,GAAG3Q,EAAM,WAAW,IACpC,EAEM8/F,EAAchjG,GAAWkD,EAAM,YAAaA,EAAM,UAAU,EAE9D,OAAA,OAAO8/F,GAAgB,SACzBnvF,EAAM,gBAAkBmvF,EACf,MAAM,QAAQA,CAAW,IAClCnvF,EAAM,gBAAkB,6BAA6BmvF,EAAY,CAAC,CAAC,QAAQA,EAAY,CAAC,CAAC,UAGpFnvF,CAAA,CACR,EACKovF,EAAY1+F,EAAAA,SAAS,IAClBrB,EAAM,SAAS,SAAS,QAAQ,CACxC,EACKggG,EAAa3+F,EAAAA,SAAS,IACtB0+F,EAAU,OACL//F,EAAM,SAAS,MAAM,GAAG,EAAE,IAAI,IAAM,SAAW,SAGjD,KACR,EACKigG,EAAc5+F,EAAAA,SAAS,IACtB0+F,EAAU,MAIR,CACL,CAHWC,EAAW,QAAU,MAAQ,SAAW,KAG9C,EAAG,GAAGhgG,EAAM,WAAW,IAC9B,EAN6B,CAAC,CAO/B,EACKkgG,EAAe7+F,WAAS,IAAMpP,GAAQ+N,EAAM,WAAYA,EAAM,SAAS,CAAC,EAEjE,OAAA8R,EAAA,CAAE,aAAAouF,EAAc,wBAI3B7tF,EAAA,mBA+CM,MAAA,CA9CH,uBAAOzO,EAAS,KAAA,EAChB,uBAAO+M,EAAK,KAAA,EACb,KAAK,cACJ,gBAAeuvF,EAAY,MAC3B,oBAAmBA,EAAY,KAAA,IAChC,gBAAc,IACd,gBAAc,KAAA,GAEdztF,EAAAA,mBAWM,MAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EAAY,uBAAO8qD,EAAU,KAAA,CAAA,GAC7C5oD,EAAAA,mBAAyD,MAAA,CAAnD,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAa,uBAAOghD,EAAW,KAAA,CAAA,UACtCr/C,EAAA,MAAAlS,CAAA,EAAM,WAAQ,wBAAzBqS,qBAQM,MAAA,OARmC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACnDgC,EAAAA,WAMOC,sBANP,IAMO,CALLtB,cAIWgB,EAAAA,MAAAb,EAAA,EAAA,CAJA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAEO,CAFPyS,EAAAA,mBAEO,OAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,uBACX2vF,EAAY,KAAA,GAAA,EAAA,CAAA,CAAA,+DAMjBH,EAAS,qBAApB1tF,EAAAA,mBAgBM,MAAA,OAhBiB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,GACjCW,cAcSgB,EAAAA,MAAAiuF,EAAA,EAAA,CAbP,QAAA,GACC,MAAK7tF,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EACZ,uBAAO0vF,EAAW,KAAA,EAClB,UAAWD,EAAU,MACrB,gBAAe9tF,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,qBAErB,IAMO,CANPgC,EAAAA,WAMOC,sBANP,IAMO,CALLtB,cAIWgB,EAAAA,MAAAb,EAAA,EAAA,CAJA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAEO,CAFPyS,EAAAA,mBAEO,OAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,uBACX2vF,EAAY,KAAA,GAAA,EAAA,CAAA,CAAA,uFAMZhuF,EAAA,MAAAlS,CAAA,EAAM,WAAQ,yBAA9BqS,EAAA,mBAQM,MAAA,OARyC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACzDgC,EAAAA,WAMOC,sBANP,IAMO,CALLtB,cAIWgB,EAAAA,MAAAb,EAAA,EAAA,CAJA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAA,qBAC/B,IAEO,CAFPyS,EAAAA,mBAEO,OAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,uBACX2vF,EAAY,KAAA,GAAA,EAAA,CAAA,CAAA,uEC9HjBE,GAAajzF,GAAW,CACnC,KAAMI,GACN,MAAOI,GACP,MAAOW,GACP,MAAOA,GACP,WAAYP,GACZ,SAAUhB,EACV,SAAU,CAAC,OAAQ,MAAM,EACzB,QAASA,EACT,YAAaA,EACb,KAAM,OACN,MAAO,OACP,SAAUmB,EAAsC,CAClD,CAAC,EAKYmyF,GAAkBlzF,GAAW,CACxC,KAAMI,GACN,MAAOI,GACP,MAAOW,GACP,SAAUvB,EACV,SAAUA,EACV,QAAS,MACT,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,MAAO,OACP,SAAUmB,EAAsC,CAClD,CAAC,ECfYo5C,GAAc,0BAEdg5C,GAAc,OAAO,OAAqB,CAAC,UAAW,SAAU,QAAQ,CAAC,EACzEC,GAAmB,OAAO,OAA0B,CAAC,GAAGD,GAAa,cAAc,CAAC,2JCb3F,MAAAtgG,EAAQiM,GAAS,QADRsF,EACyB,CACtC,KAAM7D,GAAe,EACrB,MAAOI,GAAgB,EACvB,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,MAAO,CACL,QAAS,KACT,OAAQ,GACR,SAAU,EACZ,EACA,WAAY,KACZ,SAAU,GACV,SAAU,EACV,QAAS,GACT,YAAa,GACb,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,MAAO,CACL,QAAS,UACT,UAAWllB,GAAS03G,GAAY,SAAS13G,CAAK,CAAA,CAChD,CACD,EAEKo2C,EAAOC,EAIPuoB,EAAa3lD,EAAAA,OAAOylD,GAAa,IAAI,EAErC/2C,EAAKtF,GAAc,OAAO,EAC1B3B,EAAQU,GAAS,EACjB89B,EAAep2B,EAAAA,IAAI1R,EAAM,KAAK,EAE9B2pC,EAAQj4B,EAAAA,IAAsB,EAE9B1nB,EAAOqX,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,OAAQxnD,EAAM,IAAI,EACpDoW,EAAQ/U,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,QAASxnD,EAAM,KAAK,EACvDnG,EAAawH,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,WAAYxnD,EAAM,QAAQ,EAClEsxD,EAAYjwD,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,UAAWxnD,EAAM,OAAO,EAC/DsnC,EAAcjmC,EAAAA,SAAS,IAAMmmD,GAAA,YAAAA,EAAY,WAAW,EACpDgW,EAAgBn8D,EAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,cAAe,EAAK,EAC/DhgB,EAAgBnmC,EAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,gBAAiB,EAAE,EAC9Dg5C,EAAQn/F,EAAAA,SAAS,KAAMmmD,GAAA,YAAAA,EAAY,QAASxnD,EAAM,KAAK,EACvD2L,EAAWtK,EAAAA,SAAS,IAAMiwD,EAAU,OAASkM,EAAc,KAAK,EAChE55D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGu3B,EAAa,QAAU9nC,EAAM,MACjD,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAG1W,EAAW,MAChC,CAAC0W,EAAG,GAAG,UAAU,CAAC,EAAG5E,EAAS,MAC9B,CAAC4E,EAAG,GAAG,SAAS,CAAC,EAAG+gD,EAAU,MAC9B,CAAC/gD,EAAG,GAAGvmB,EAAK,KAAK,CAAC,EAAGA,EAAK,QAAU,UACpC,CAACumB,EAAG,GAAG6F,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAAC7F,EAAG,GAAGiwF,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,WAAaA,EAAM,QAAU,cAAA,CAEvE,CACD,EACKC,EAAWp/F,WAAS,IAAMm/F,EAAM,QAAU,UAAYA,EAAM,QAAU,cAAc,EAE1F5zF,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPk/C,EAAa,MAAQl/C,CAAA,CAEzB,EAEI4+D,IACF1f,EAAa,MAAQ0f,EAAW,aAE1B56C,EAAAA,MAAA,IAAM46C,EAAW,aAAcmzB,CAAU,EAE/ClmE,EAAAA,UAAU,IAAM,CACd+yC,EAAW,cAAc7d,CAAK,CAAA,CAC/B,EAED/0B,EAAAA,gBAAgB,IAAM,CACpB4yC,EAAW,gBAAgB7d,CAAK,CAAA,CACjC,GAGU73B,EAAA,CAAE,aAAAg2B,EAAc,MAAA6B,EAAO,EAEpC,SAASgxC,EAAW/xF,EAAkC,CAChDk/C,EAAa,QAAUl/C,IAE3Bk/C,EAAa,MAAQl/C,EAErBo2C,EAAK,eAAgBp2C,CAAK,EAChBulB,EAAAnO,EAAM,SAAyBpX,CAAK,EAAA,CAGhD,SAASyhD,GAAe,CAClBxwC,EAAW,OAAS8R,EAAS,QAIjCgvE,EAAW36E,EAAM,KAAK,EAElBwnD,GAAc1f,EAAa,QAAU9nC,EAAM,OAClCwnD,EAAA,YAAY1f,EAAa,KAAK,EAC3C,6BAKAz1B,EAAA,mBAmCQ,QAAA,CAnCA,uBAAOzO,EAAS,KAAA,CAAA,GACtB6O,EAAAA,mBAWE,QAAA,SAVI,QAAJ,IAAIk3B,EACJ,KAAK,QACJ,MAAKr3B,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,QAASu3B,EAAA,QAAiB51B,EAAAA,MAAAlS,CAAA,EAAM,MAChC,SAAUnG,EAAU,OAAI8R,EAAQ,MAChC,SAAUuG,EAAAA,MAAKlS,CAAA,EAAC,SAChB,KAAMkS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,qCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GACd,SAAQqqC,EACR,oCAAD,IAAW,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,cAEb53B,EAAAA,mBAAiF,OAAA,CAA1E,MAAKH,EAAA,eAAA,CAAGJ,EAAAA,SAAG,aAAco/C,EAAS,OAAIp/C,QAAE3B,CAAA,EAAC,IAAG,SAAA,QAAA,CAAA,CAAA,CAAA,UACnDkC,EAAAA,mBAoBO,OAAA,CApBA,wBAAQP,EAAA,MAAE3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,EAAAA,MAAAlS,CAAA,EAAM,UAAU,CAAA,CAAA,GAErCygG,EAAQ,qBADhBtuF,EAAAA,YAcqBD,EAAAA,MAAAwpB,EAAA,EAAA,OAZnB,OAAA,GACA,WAAA,GACA,cAAA,EAAA,qBAEA,IAOM,CAPK41B,EAAS,qBAApBj/C,EAAAA,mBAOM,MAAA,OAPiB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GACjCW,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,OAAQk+B,EAAa,OAAIt1B,WAAM,QAAQ,OACvC,KAAMo1B,EAAW,OAAIp1B,WAAM,QAAQ,KACpC,MAAM,6GAIZK,EAAAA,WAA8BC,sBAA9B,IAA8B,CAArBG,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,KAAK,EAAA,CAAA,CAAA,GACpByS,EAAAA,mBAEO,OAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,6CAAW,IAAsB,CAAA,EAAA,CAAA,SAAA,CAAA,EAAA,GAClDgC,aAA0BC,EAAA,OAAA,OAAA,CAAA,yLC/I5B,KAAA,CACJ,MAAAuzB,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,cAAAC,EACA,cAAAC,CAAA,EACEhD,GAAyCkD,CAAK,EAG5CtmC,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,SAAU,GACV,SAAU,IAAMtyB,EAAS,MACzB,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,QAAS,IAAMoyB,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,MAAO,CACL,QAAS,UACT,UAAW7lB,GAAS23G,GAAiB,SAAS33G,CAAK,CAAA,CACrD,CACD,EAEKo2C,EAAOC,EAEP1uB,EAAKtF,GAAc,aAAa,EAChC68B,EAAep2B,EAAAA,IAAI1R,EAAM,KAAK,EAC9BqkE,MAAe,IAEf14D,EAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D4D,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,YAAY,EAClB,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAG5E,EAAS,MAC9B,CAAC4E,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,SAAA,CAE1C,CACD,EAEKwnD,EAAa16C,EAAAA,SAAS,CAC1B,aAAAg7B,EACA,KAAM1J,EAAAA,MAAMp+B,EAAO,MAAM,EACzB,MAAOo+B,EAAAA,MAAMp+B,EAAO,OAAO,EAC3B,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,QAASo+B,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,YAAao+B,EAAAA,MAAMp+B,EAAO,aAAa,EACvC,YAAao+B,EAAAA,MAAMp+B,EAAO,aAAa,EACvC,cAAeo+B,EAAAA,MAAMp+B,EAAO,eAAe,EAC3C,MAAOo+B,EAAAA,MAAMp+B,EAAO,OAAO,EAC3B,YAAavE,GAAc+oE,CAAW,EACtC,cAAAk8B,EACA,gBAAAC,CAAA,CACD,EAGD7+F,EAAA,QAAQwlD,GAAaE,CAAU,EAE/B56C,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPk/C,EAAa,MAAQl/C,CAAA,CAEzB,EAEakpB,EAAA,CACX,MAAAi0B,EACA,MAAAO,EACA,KAAM,IAAM,OACV,UAAWqD,KAAS06B,GAClBtjE,EAAA4oC,EAAM,QAAN,MAAA5oC,EAAa,MACf,CACF,CACD,EAED,SAASyjE,EAAY57E,EAAkC,CACjDk/C,EAAa,QAAUl/C,IACzBk/C,EAAa,MAAQl/C,EAErBo2C,EAAK,eAAgBp2C,CAAK,EAC1Bw9C,EAAcx9C,CAAK,EACTulB,EAAAnO,EAAM,SAAyBpX,CAAK,EAChCs9C,EAAA,EAChB,CAGF,SAASw6D,EAAc/2D,EAA4C,CACjE06B,EAAS,IAAI16B,CAAK,CAAA,CAGpB,SAASg3D,EAAgBh3D,EAA4C,CACnE06B,EAAS,OAAO16B,CAAK,CAAA,CAGvB,SAASrD,EAAMz7C,EAAwB,OACrC,MAAM8+C,GAAQ5oC,EAAA,MAAM,KAAKsjE,CAAQ,EAAE,CAAC,IAAtB,YAAAtjE,EAAyB,MAEnCvY,IAAYmhD,GAAS,SAAS,gBAAkBA,GAClDA,EAAM,MAAM9+C,CAAO,CACrB,6BAKAwnB,EAAA,mBAsBM,MAAA,CArBH,GAAIH,QAAK6zB,CAAA,EACT,uBAAOniC,EAAS,KAAA,EACjB,KAAK,aACJ,mBAAkBo9B,EAAQ,SAAA,WAAA,aAC1B,kBAAiB9uB,QAAO8zB,CAAA,CAAA,GAEzBzzB,EAAAA,WAcOC,sBAdP,IAcO,EAbL6tB,EAAAA,UAAA,EAAA,EAAAhuB,EAAA,mBAYWqsB,EAZc,SAAA,KAAAC,aAAAzsB,EAAAA,MAAAlS,CAAA,EAAM,QAAdjI,uDAA6BA,GAAI,CAExCma,QAAA7oB,EAAA,EAAS0O,CAAI,iBADrBoa,EAAA,YAOQD,QAAA0uF,EAAA,EAAA,OALN,QAAA,GACC,MAAO7oG,EAAK,MACZ,SAAUA,EAAK,QAAA,qBAEhB,IAAgC,CAA7B4a,kBAAAC,EAAA,gBAAA7a,EAAK,SAAWA,EAAK,KAAK,EAAA,CAAA,CAAA,mDAE/Boa,EAAA,YAEQD,QAAA0uF,EAAA,EAAA,OAFM,QAAA,GAAS,MAAO7oG,CAAA,qBAC5B,IAAU,qCAAPA,CAAI,EAAA,CAAA,CAAA,oDC/JJ8oG,GAAc1zF,GAAW,CACpC,MAAO,OACP,KAAMI,GACN,KAAM,OACN,KAAMiB,GACN,UAAW,OACX,YAAa,OACb,MAAO,MACT,CAAC,ECLYsyF,GAAc,OAAO,OAAqB,CACrD,UACA,OACA,UACA,UACA,OACF,CAAC,wECAK,MAAA9gG,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,MAAO,GACP,KAAM7D,GAAe,EACrB,KAAM,CACJ,QAAS,UACT,UAAW9kB,GAASk4G,GAAY,SAASl4G,CAAK,CAChD,EACA,KAAM6lB,GAAe,EACrB,UAAW,GACX,YAAa,GACb,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKvK,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,QAAQ,EAC3B3B,EAAQU,GAAS,EAEjByyB,EAAkBp7B,EAAAA,SAAS,KAAO,CACtC,QAASiI,EAAM,MAAM,KACrB,KAAMA,EAAM,MAAM,KAClB,QAASA,EAAM,MAAM,QACrB,QAASA,EAAM,MAAM,QACrB,MAAOA,EAAM,MAAM,KAAA,EACnB,EAEI6zB,EAAW97B,EAAAA,SAAS,IACjBrB,EAAM,KAAO,CAAE,KAAMA,EAAM,IAAS,EAAAy8B,EAAgB,MAAMz8B,EAAM,IAAI,CAC5E,EACK+8B,EAAW17B,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,OAASlE,EAAM,OAASA,EAAM,MAAM,MAAM,EAC7Eg9B,EAAU37B,EAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,MAAQlE,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAM,KAAK,EACvF+gG,EAAiB1/F,EAAA,SACrB,IAAM,CAAC,EAAE6C,EAAM,aAAelE,EAAM,aAAeA,EAAM,MAAM,YACjE,EACM4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,KAC3B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,SACtC,EACD,EACK2Q,EAAQtP,EAAAA,SAAS,IACjBrB,EAAM,UACDuQ,EAAG,IAAI,CACZ,aAAcvQ,EAAM,SAAA,CACrB,EAGI,CAAC,CACT,8BAICqS,EAAA,mBA2BM,MAAA,CA3BA,uBAAOzO,EAAS,KAAA,EAAG,uBAAO+M,EAAK,KAAA,CAAA,GACxBqsB,EAAO,qBAAlB3qB,EAAAA,mBAMM,MAAA,OANe,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAC/BgC,EAAAA,WAIOC,mBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IAAA,qBAC/B,IAA0F,CAA1FkR,cAA0FgB,EAAA,MAAApO,EAAA,EAA1F4O,EAAAA,WAA0FyqB,EAApE,MAAA,CAAG,MAAOjrB,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAW,MAAK,CAAA,MAAW2B,QAAKlS,CAAA,EAAC,SAAS,yFAI1E+8B,EAAQ,qBAAnB1qB,EAAAA,mBAMM,MAAA,OANgB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChCgC,EAAAA,WAIOC,oBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAAiB,CAAd2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,KAAK,EAAA,CAAA,CAAA,2DAIT+gG,EAAc,qBAAzB1uF,EAAAA,mBAMM,MAAA,OANsB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAAA,GACtCgC,EAAAA,WAIOC,0BAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,WAAA,qBAC/B,IAAuB,CAApB2S,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,WAAW,EAAA,CAAA,CAAA,2DAIfkE,EAAM,OAASgO,EAAA,SAAM,MAAM,qBAAtCG,EAAA,mBAIM,MAAA,OAJwC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACxDgC,EAAAA,WAEOC,oBAFP,IAEO,CADLtB,cAAmDgB,EAAAA,MAAAb,EAAA,EAAA,CAAxC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,kECxFzCghG,GAAevxF,kBAAgB,CAC7B,KAAM,gBACN,MAAO+4E,GACP,MAAM74E,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,gBAAiB0D,EAAQ,CAC9C,KAAM,KACN,IAAK,GACL,QAAS,KACT,UAAW,GACX,MAAO,GACP,OAAQ,GACR,MAAO,GACP,QAAS,EAAA,CACV,EAEKY,EAAKtF,GAAc,eAAe,EAExCnJ,OAAAA,EAAA,QAAQwlD,GAAatnD,CAAK,EAEnB,IACDA,EAAM,IACDpT,EAAA,EACL,OAAOoT,EAAM,KAAQ,SAAWA,EAAM,IAAM,MAC5C,CACE,MAAO,CAACuQ,EAAG,IAAKvQ,EAAM,SAAWuQ,EAAG,GAAG,SAAS,CAAC,EACjD,KAAM,OACR,EACA,CACE,QAAS,IAAM,OAAA,OAAAxP,EAAAmD,EAAM,UAAN,YAAAnD,EAAA,KAAAmD,GAAgB,CAEnC,EAGKiN,EAAA,WAAWjN,EAAO,SAAS,CACpC,CAEJ,CAAC,4mBC5BD,MAAMlE,EAAQuR,EAmDRytB,EAAOC,EAIP1uB,EAAKtF,GAAc,QAAQ,EAC3BmyC,EAAar7C,GAAc,EAE3Bk/F,EAAYvvF,MAAI,EAAK,EAErBwvF,EAAUxvF,MAA4D,IAAI,EAC1E/W,EAAU+W,EAAAA,IAAiB,EAE3B,CAAE,MAAA/V,CAAM,EAAI66B,GAAc,EAC1B,CAAE,OAAQvf,CAAQ,EAAIgC,GAAY,CACtC,QAAS,GACT,UAAW,CAAC/f,EAAOygB,IAAa,CAC9B,GAAIA,EAAS,IAAMA,EAAS,MAAQA,EAAS,MAAQA,EAAS,MAAO,CACnEU,EAAanhB,CAAK,EAEZ,MAAAioG,EAAYjoG,EAAM,QACpB,OACAA,EAAM,SACJ,QACAA,EAAM,OACJ,MACA,OAEJygB,EAAS,IAAMA,EAAS,KAC1BqlB,EAAK,YAAamiE,CAAS,EAE3BniE,EAAK,WAAYmiE,CAAS,CAC5B,CACF,CACF,CACD,EAEKtkD,EAAWx7C,EAAAA,SAAS,IAAM,OAAA,OAACkP,EAAG,GAAG,KAAK,GAAGxP,EAAAf,EAAM,WAAN,YAAAe,EAAgB,QAAQ,EAAC,EAExE+Q,EAAa,CAAE,cAAAsvF,EAAe,MAAA96D,EAAO,KAAAuD,CAAA,CAAM,EAE3C,SAASw3D,GAAc,CACrB,aAAa1lG,EAAM,KAAK,EAEnBqE,EAAM,WACHrE,EAAA,MAAQ,WAAW,IAAM,CAC7BslG,EAAU,MAAQ,EAAA,EACjB7jD,EAAW,KAAK,EACrB,CAGF,SAASkkD,GAAc,CACrB,aAAa3lG,EAAM,KAAK,EAElBA,EAAA,MAAQ,WAAW,IAAM,CAC7BslG,EAAU,MAAQ,EAAA,EACjB7jD,EAAW,KAAK,CAAA,CAGrB,SAAS/iC,EAA8BnhB,EAAU,CAC3CA,EAAM,aACRA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EACvB,CAGF,SAASkoG,GAAgB,CACnBF,EAAQ,OACVA,EAAQ,MAAM,aAAa,CAC7B,CAGF,SAAS56D,EAAMz7C,EAAwB,QAC7BkW,EAAApG,EAAA,QAAA,MAAAoG,EAAO,MAAMlW,EAAO,CAG9B,SAASg/C,GAAO,QACd9oC,EAAApG,EAAQ,QAAR,MAAAoG,EAAe,MAAK,6BAKpBsR,EAAA,mBA6CM,MAAA,SA5CA,UAAJ,IAAI4E,EACH,MAAK3E,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EACb,SAAS,KACR,aAAY8J,CAAA,GAEbnJ,EAAAA,YAsCUgB,EAAA,UAtCVQ,aAsCU,SArCJ,UAAJ,IAAIwuF,EACH,UAAW3vF,EAAQ,SAAA,QAAA,KAAA,EACZA,EAAQ,SAAA,CAChB,QAAQ,SACP,SAAUA,EAAW,YACrB,QAAS0vF,EAAS,OAAI1vF,EAAO,QAC7B,YAAWsrC,EAAQ,MACnB,SAAUtrC,EAAO,QACjB,YAAWA,EAAQ,SACnB,WAAW8vF,EACX,WAAWC,CAAA,IAED,kBACT,IAmBM,CAnBN7uF,EAAAA,mBAmBM,MAAA,SAlBA,UAAJ,IAAI9X,EACH,MAAK2X,EAAAA,eAAA,CAAiB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,EAAA,IAAgC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,SAAA,SAAA,CAAA,EAAwBgB,EAAO,SAAeW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,SAAA,SAAA,CAAA,EAAwBgB,EAAO,OAAA,GAKrJ,KAAK,SACL,SAAS,IACR,gBAAeA,EAAK,MACpB,gBAAeA,EAAG,IAClB,gBAAeA,EAAG,IAClB,gBAAeA,EAAQ,SACvB,aAAY8vF,EACZ,aAAYC,CAAA,GAEb/uF,EAAAA,WAEOC,sBAFP,IAEO,CADLC,EAAAA,mBAAqC,MAAA,CAA/B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,yCAIxB,IAEO,CAFPgC,EAAAA,WAEOC,kBAFP,IAEO,qCADFjB,EAAK,KAAA,EAAA,CAAA,6FCtLHgwF,GAAcp0F,GAAW,CACpC,MAAOQ,GACP,MAAO,CAAC,OAAQ,KAAK,EACrB,IAAK,OACL,IAAK,OACL,KAAM,OACN,SAAUZ,EACV,QAASA,EACT,YAAaC,GACb,SAAUD,EACV,QAASA,EACT,YAAaA,EACb,QAASA,EACT,MAAOA,EACP,QAAS,CAAC,OAAQ,KAAK,EACvB,WAAYA,EACZ,SAAUA,EACV,WAAYA,EACZ,YAAaA,EACb,SAAU,OACV,KAAMA,EACN,eAAgBA,EAChB,MAAO,OACP,SAAUmB,EAA8C,EACxD,QAASA,EAA8C,CACzD,CAAC,6ICJK,KAAA,CAAE,MAAA63B,EAAO,MAAA3vB,EAAO,QAAA4vB,EAAS,SAAAnyB,EAAU,QAAAoyB,EAAS,cAAAC,EAAe,cAAAC,EAAe,cAAAC,GAC9EhD,GAAiCkD,EAAK,EAGlCtmC,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,MAAOzD,GAAgBsI,CAAK,EAC5B,MAAO,CACL,QAAS,IAAM+vB,EAAA,GAAmB,EAClC,OAAQ,EACV,EACA,IAAK,EACL,IAAK,IACL,KAAM,CACJ,QAAS,EACT,cAAoBv9C,GAAQ,CAC9B,EACA,SAAU,GACV,QAAS,GACT,YAAa,KACb,SAAU,IAAMirB,EAAS,MACzB,QAAS,IAAMoyB,EAAQ,MACvB,YAAa,GACb,QAAS,GACT,MAAO,GACP,QAAS,KACT,WAAY,GACZ,SAAU,GACV,WAAY,GACZ,YAAa,GACb,SAAU,KAAO,CAAA,GACjB,KAAM,GACN,eAAgB,GAChB,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKjH,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,QAAQ,EAC3BmyC,EAAar7C,GAAc,EAE3B,CAAE,MAAApG,CAAM,EAAI66B,GAAc,EAE1BgrE,EAAe9vF,EAAA,IAAI,CAAC,EAAG,CAAC,CAAC,EACzB+vF,EAAU/vF,EAAA,IAAI,CAAC,GAAO,EAAK,CAAC,EAC5BgwF,EAAchwF,MAAI,CAAe,EACjC8rC,EAAU9rC,MAAI,EAAK,EACnBiwF,EAAcjwF,MAAI,EAAK,EAEvB6G,EAAQ7G,EAAAA,IAAiB,EACzBkwF,EAAelwF,EAAAA,IAAwC,EACvDmwF,EAAanwF,EAAAA,IAAwC,EAErDowF,EAAazgG,EAAAA,SAAS,IAAM,CAChC,MAAM0gG,GAAU/hG,EAAM,QAChB9C,GAAkD,CAAC,EAErD,GAAA,CAAC6kG,GAAgB,OAAA7kG,GAEjB,GAAA,MAAM,QAAQ6kG,EAAO,EACvB,UAAWhlD,MAAOglD,GAAS,CACnB,KAAA,CAAE,MAAAn5G,GAAO,GAAGo5G,IAAW,OAAOjlD,IAAQ,SAAW,CAAE,MAAOA,EAAA,EAAQA,GAEnE,OAAO,MAAMn0D,EAAK,GACrBsU,GAAK,KAAK,CAAE,MAAAtU,GAAO,OAAAo5G,EAAA,CAAQ,CAC7B,KAGF,WAAWp5G,MAAS,OAAO,KAAKm5G,EAAO,EAAG,CAClC,MAAA1xG,GAAS,WAAWzH,EAAK,EACzBo5G,GAASD,GAAQn5G,EAAK,EAEvB,OAAO,MAAMyH,EAAM,GACtB6M,GAAK,KAAK,CACR,MAAO7M,GACP,OAAQ,OAAO2xG,IAAW,SAAW,CAAE,MAAOA,IAAWA,EAAA,CAC1D,CACH,CAIG,OAAA9kG,GAAK,KAAK,CAAC2C,GAAMC,KAASD,GAAK,MAAQC,GAAK,KAAK,CAAA,CACzD,EACKmiG,EAAiB5gG,EAAAA,SAAS,IAAM,CAAC,CAACygG,EAAW,MAAM,KAAK,CAAC,CAAE,OAAAE,EAAA,IAAaA,GAAO,KAAK,CAAC,EACrFr2F,EAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5DkiG,EAAe7gG,EAAAA,SAAS,IAAMrB,EAAM,OAASA,EAAM,cAAc,EACjE4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGkxF,EAAQ,MAAM,CAAC,GAAKA,EAAQ,MAAM,CAAC,EACvD,CAAClxF,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAG5E,EAAS,MAC9B,CAAC4E,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,aAAa,CAAC,EAAG0xF,EAAe,MACvC,CAAC1xF,EAAG,GAAG,aAAa,CAAC,EAAGvQ,EAAM,WAC9B,CAACuQ,EAAG,GAAG,cAAc,CAAC,EAAGvQ,EAAM,aAAe,CAAC2hG,EAAY,MAC3D,CAACpxF,EAAG,GAAG,iBAAiB,CAAC,EAAG2xF,EAAa,KAC3C,EACD,EACKC,EAAY9gG,EAAAA,SAAS,IAAMvP,GAAckO,EAAM,IAAI,CAAC,EAEpDoiG,EAAa/gG,EAAA,SAAS,IAAM,KAAK,KAAK,KAAK,IAAIrB,EAAM,IAAKA,EAAM,GAAG,EAAIA,EAAM,IAAI,CAAC,EAElFqiG,EAAahhG,EAAA,SAAS,IAAM,KAAK,MAAM,KAAK,IAAIrB,EAAM,IAAKA,EAAM,GAAG,EAAIA,EAAM,IAAI,CAAC,EACnFsiG,EAAajhG,EAAAA,SAAS,IACnB,CACLpP,GAAQuvG,EAAa,MAAM,CAAC,EAAIxhG,EAAM,KAAMmiG,EAAU,KAAK,EAC3DlwG,GAAQuvG,EAAa,MAAM,CAAC,EAAIxhG,EAAM,KAAMmiG,EAAU,KAAK,CAC7D,CACD,EACKI,EAAelhG,EAAAA,SAAS,IAAMghG,EAAW,MAAQD,EAAW,OAAS,CAAC,EACtEI,EAAiBnhG,EAAAA,SAAS,IACvB,CAACohG,GAAUjB,EAAa,MAAM,CAAC,CAAC,EAAGiB,GAAUjB,EAAa,MAAM,CAAC,CAAC,CAAC,CAC3E,EACKjwC,GAAclwD,EAAAA,SAAS,IAAM,CAC3B,KAAA,CAAE,SAAA2/B,GAAU,QAAAic,EAAA,EAAYj9C,EAEvB,MAAA,CACL,CAACghC,GAAYic,GAAU,SAAW,MAASA,GAAU,QAAU,MAAM,EACnE,GAAG,KAAK,IAAIulD,EAAe,MAAM,CAAC,EAAGA,EAAe,MAAM,CAAC,CAAC,CAAC,IAC/D,CAACxhE,GAAW,SAAW,OAAO,EAC5B,GAAG,KAAK,IAAIwhE,EAAe,MAAM,CAAC,EAAIA,EAAe,MAAM,CAAC,CAAC,CAAC,GAClE,CAAA,CACD,EACKE,GAAoBrhG,EAAAA,SAAS,IAAM,CACjC,KAAA,CAAE,SAAA2/B,GAAU,QAAAic,EAAA,EAAYj9C,EAEvB,MAAA,CACL,CAACi9C,GAAU,SAAW,KAAK,EAAGjc,GAAW,GAAGwhE,EAAe,MAAM,CAAC,CAAC,IAAM,MACzE,CAACvlD,GAAU,QAAU,MAAM,EAAGjc,GAAW,MAAQ,GAAGwhE,EAAe,MAAM,CAAC,CAAC,IAC3E,OAAQd,EAAY,QAAU,EAAoB,EAAI,OACtD,UAAW,aAAazkD,GAAU,GAAK,GAAG,QAAQA,GAAU,GAAK,GAAG,MACtE,CAAA,CACD,EACK0lD,EAAkBthG,EAAAA,SAAS,IAAM,CAC/B,KAAA,CAAE,SAAA2/B,GAAU,QAAAic,EAAA,EAAYj9C,EAEvB,MAAA,CACL,CAACi9C,GAAU,SAAW,KAAK,EAAGjc,GAAW,GAAGwhE,EAAe,MAAM,CAAC,CAAC,IAAM,MACzE,CAACvlD,GAAU,QAAU,MAAM,EAAGjc,GAAW,MAAQ,GAAGwhE,EAAe,MAAM,CAAC,CAAC,IAC3E,OAAQd,EAAY,QAAU,EAAkB,EAAI,OACpD,UAAW,aAAazkD,GAAU,GAAK,GAAG,QAAQA,GAAU,GAAK,GAAG,MACtE,CAAA,CACD,EACKpjD,GAAawH,EAAAA,SAAS,IAAMrB,EAAM,UAAY2L,EAAS,KAAK,EAE5Di3F,GAAmB5uD,EAAA,gBACvBlnC,WAAS,CACP,OAAQw1F,EACR,QAAAb,EACA,QAASe,EACT,SAAUpkE,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,QAASo+B,EAAAA,MAAMp+B,EAAO,SAAS,CAChC,CAAA,CACH,EAEM,CAAE,OAAQ80E,EAAO,EAAIx6D,GAAU,CACnC,SAAUjZ,EAAS,SAAA,IAAM,CAAC6gG,EAAa,OAASroG,GAAW,KAAK,EAChE,QAAS,CAACuc,GAAOld,KAAU,CACzB,GAAI,CAACqf,EAAM,OAASrf,GAAM,OAAS,EAC1B,MAAA,GAGT,aAAayC,EAAM,OAAO,EAC1BzC,GAAM,gBAAgB,EACtBA,GAAM,eAAe,EAETq+D,EAAAh/C,EAAM,MAAM,sBAAsB,EAC9CnC,GAAM,WAAaorF,EAAa,MAAM,CAAiB,EACvDprF,GAAM,SAAWorF,EAAa,MAAM,CAAe,EACnDprF,GAAM,UAAaA,GAAM,SAAuBA,GAAM,UACxD,EACA,OAAQ,CAACA,GAAOld,KAAU,CACxB,GAAI,CAACq+D,EACH,OAGFr+D,GAAM,eAAe,EAErB,MAAM8nC,GAAWhhC,EAAM,SACjBi9C,GAAUj9C,EAAM,QAChBjP,GAAQiwC,GAAW5qB,GAAM,OAASA,GAAM,OAE9C,QAAShsB,GAAI,EAAGA,GAAI,EAAG,EAAEA,GAAG,CACpB,MAAAvB,GAAOuB,GAAI,EAAkB,EACnCo3G,EAAa,MAAM34G,EAAI,GACpBo0D,GAAU,GAAK,IACblsD,GAAQwmE,EAAUv2B,GAAW,SAAW,OAAO,GAChDuhE,EAAa,MACf,OAAOnsF,GAAMhsB,GAAI,WAAa,YAAY,CAAC,CAAA,CAGnC61F,EAAA,EAERuhB,EAAa,MAAM,CAAiB,IAAMY,EAAW,MACvDZ,EAAa,MAAM,GACjBA,EAAa,MAAM,CAAA,EAAsBprF,GAAM,UACxCorF,EAAa,MAAM,CAAe,IAAMa,EAAW,QAC5Db,EAAa,MAAM,GACjBA,EAAa,MAAM,CAAA,EAAoBprF,GAAM,WAGjDukE,EAAW,OAAO,CACpB,EACA,MAAO,IAAMA,EAAW,CAAA,CACzB,EAED3tB,GAAWhtD,EAAM,KAAK,EACVigF,EAAA,EAEZ,IAAI53C,GAA+BroC,EAAM,MACrCsiG,EAAW,MAAM,CAAC,EAAIA,EAAW,MAAM,CAAC,EACtC,CAACA,EAAW,MAAM,CAAC,EAAGA,EAAW,MAAM,CAAC,CAAC,EACzC,CAACA,EAAW,MAAM,CAAC,EAAGA,EAAW,MAAM,CAAC,CAAC,EAC3CA,EAAW,MAAM,CAAC,EAClBO,GAAoC,MAAM,QAAQx6D,EAAS,EAAI,CAAC,GAAGA,EAAS,EAAIA,GAEpFz7B,EAAA,MACE,IAAM5M,EAAM,MACHpX,IAAA,CACHk6G,GAAaz6D,GAAWz/C,EAAK,IAIjCokE,GAAWpkE,EAAK,EACJq3F,EAAA,EAAA,CAEhB,EACArzE,EAAA,MACE,IAAM5M,EAAM,KACZ,IAAM,CACJgtD,GAAWhtD,EAAM,KAAK,EACVigF,EAAA,CAAA,CAEhB,EAEanuE,EAAA,CACX,MAAAi0B,EACA,QAAA07D,EACA,MAAAlpF,EACA,aAAAqpF,EACA,WAAAC,EACA,eAAAkB,GACA,MAAAz8D,GACA,KAAAuD,EAAA,CACD,EAED,SAAS44D,GAAU75G,GAAwB,CACzC,OAAS,WAAWA,EAAe,EAAIw5G,EAAW,OAASG,EAAa,MAAS,GAAA,CAGnF,SAASv1C,GAAWpkE,GAA0B,CAC5C,GAAIoX,EAAM,MAAO,CACT,MAAAshE,GAAS,MAAM,QAAQ14E,EAAK,EAAIA,GAAQ,CAACA,GAAO,GAAG,EAE5C44G,EAAA,MAAQ,CAAClgC,GAAO,CAAC,EAAIthE,EAAM,KAAMshE,GAAO,CAAC,EAAIthE,EAAM,IAAI,CAAA,MAEpEwhG,EAAa,MAAQ,CAACY,EAAW,OAAQ,MAAM,QAAQx5G,EAAK,EAAIA,GAAM,CAAC,EAAIA,IAASoX,EAAM,IAAI,CAChG,CAGF,SAASigF,GAAc,CACrBuhB,EAAa,MAAQA,EAAa,MAAM,IAAa54G,IAAA,CACnD,IAAIo6G,GAAgB,KAAK,IAAIZ,EAAW,MAAO,KAAK,IAAIC,EAAW,MAAO,KAAK,MAAMz5G,EAAK,CAAC,CAAC,EAE5F,GAAIoX,EAAM,YAAc8hG,EAAW,MAAM,OAAQ,CAC/C,IAAImB,GAAU,IACVC,GAAgB,EAEpB,SAAW,CAAE,MAAAt6G,EAAM,IAAKk5G,EAAW,MAAO,CACxC,MAAM/wG,GAAQ,KAAK,IAAIiyG,GAAgBhjG,EAAM,KAAOpX,EAAK,EAErDq6G,GAAUlyG,KACFkyG,GAAAlyG,GACMnI,GAAAA,GAClB,CAGFo6G,GAAgBE,GAAgBljG,EAAM,IAAA,CAGjC,OAAAgjG,EAAA,CACR,CAAA,CAGH,SAASG,GAAiB,CACpB3lD,EAAQ,OAASikD,EAAQ,MAAM,CAAC,GAAKA,EAAQ,MAAM,CAAC,IAExDE,EAAY,MAAQ,GAAA,CAGtB,SAASyB,GAAqB,CAC5B,aAAaznG,EAAM,KAAK,EAElBA,EAAA,MAAQ,WAAW,IAAM,CAC7B6hD,EAAQ,MAAQ,GAChBmkD,EAAY,MAAQ,EAAA,EACnBvkD,EAAW,KAAK,CAAA,CAGrB,SAASimD,GAAqB,CAC5B,aAAa1nG,EAAM,KAAK,EAElBA,EAAA,MAAQ,WAAW,IAAM,CAC7B6hD,EAAQ,MAAQ,GACD2lD,EAAA,CAAA,EACd/lD,EAAW,KAAK,CAAA,CAGrB,SAASu9B,EAAW9xF,GAA2B,SAAU6+C,GAAO1nC,EAAM,KAAM,CAC1E,KAAM,CAAC/V,GAAOgxB,EAAG,EAAIqnF,EAAW,MAC1B15G,GAAQoX,EAAM,MAAS/V,GAAQgxB,GAAM,CAACA,GAAKhxB,EAAK,EAAI,CAACA,GAAOgxB,EAAG,EAAKA,GAE1E,GAAIpyB,KAAS,SAAU,CACjB,GAAAi6G,GAAaz6D,GAAWz/C,EAAK,EAAG,OAExBy/C,GAAAz/C,GAEP8+C,KACcm7D,GAAAj6G,GAEjBo2C,EAAK,eAAgBp2C,EAAK,EAC1Bw9C,EAAcx9C,EAAK,GAGXulB,EAAAnO,EAAM,SAAUpX,EAAK,EAE1B8+C,IACWxB,EAAA,CAChB,KACK,CACD,GAAA48D,GAAaD,GAAgBj6G,EAAK,EAAG,OAExBi6G,GAAAj6G,GAEb8+C,KACF1I,EAAK,eAAgBp2C,EAAK,EAC1Bw9C,EAAcx9C,EAAK,GAGXulB,EAAAnO,EAAM,QAASpX,EAAK,EAE1B8+C,IACYxB,EAAA,CAChB,CACF,CAGF,IAAIqxB,EAA4B,KAEhC,SAAS+rC,EAAoBpqG,GAAqB,CAChD,GAAI,CAACq+D,EAAW,OAEhB,MAAMv2B,GAAWhhC,EAAM,SACjBi9C,GAAUj9C,EAAM,QAChBujG,GAASviE,GAAW9nC,GAAM,QAAUA,GAAM,QAEnCsoG,EAAA,MAAME,EAAY,KAAK,GACjCzkD,GAAU,GAAK,KACZsmD,GAAShsC,EAAUv2B,GAAYic,GAAU,SAAW,MAASA,GAAU,QAAU,MAAM,GACvFsa,EAAUv2B,GAAW,SAAW,OAAO,GACzCuhE,EAAa,MACfH,EAAW,KAAA,CAGN,SAAAU,GAAajjG,GAAyBjE,GAA4B,CACzE,OAAI,MAAM,QAAQiE,EAAI,GAAK,MAAM,QAAQjE,EAAO,EACvCiE,GAAK,CAAC,IAAMjE,GAAQ,CAAC,GAAKiE,GAAK,CAAC,IAAMjE,GAAQ,CAAC,EAGjDiE,KAASjE,EAAA,CAGZ,MAAAkf,EAAe1f,GAAUlC,IAAwB,CACjD,CAACq+D,GAAav3D,EAAM,WAExB9G,GAAM,eAAe,EAErBoqG,EAAoBpqG,EAAK,EACb+mF,EAAA,EAER2hB,EAAa,OACfA,EAAa,MAAM,cAAc,EAG/BC,EAAW,OACbA,EAAW,MAAM,cAAc,EAUjClnB,EAAW,OAAO,EAAA,CACnB,EAED,SAAS6oB,GAAgBtqG,GAAqB,CAC5C,GAAI,GAACqf,EAAM,OAAS1e,GAAW,OAQ/B,IANA,aAAa8B,EAAM,OAAO,EAC1BzC,GAAM,gBAAgB,EACtBA,GAAM,eAAe,EAETq+D,EAAAh/C,EAAM,MAAM,sBAAsB,EAE1CvY,EAAM,MAAO,CACT,KAAA,CAAE,SAAAghC,GAAU,QAAAic,EAAA,EAAYj9C,EACxBujG,GAASviE,GAAW9nC,GAAM,QAAUA,GAAM,QAC1CuqG,IACFxmD,GACEsa,EAAUv2B,GAAW,SAAW,OAAO,EAAIuiE,GAC3CA,GAAShsC,EAAUv2B,GAAW,MAAQ,MAAM,GAC9Cu2B,EAAUv2B,GAAW,SAAW,OAAO,EACzC,IAEF0gE,EAAY,MACV,KAAK,IAAI+B,GAAcjB,EAAe,MAAM,CAAC,CAAC,EAC9C,KAAK,IAAIiB,GAAcjB,EAAe,MAAM,CAAC,CAAC,EAC1C,EACA,CAAA,MAENd,EAAY,MAAQ,EAGdD,EAAA,MAAMC,EAAY,KAAK,EAAI,GACnCC,EAAY,MAAQ,GAEpB2B,EAAoBpqG,EAAK,EACb+mF,EAAA,EACZtF,EAAW,OAAO,EAET,SAAA,iBAAiB,cAAe+oB,EAAU,EAC1C,SAAA,iBAAiB,YAAaC,EAAa,EAAA,CAGtD,SAASD,GAAWxqG,GAAqB,CACvC4hB,EAAa5hB,EAAK,CAAA,CAGpB,SAASyqG,IAAgB,CACXpsC,EAAA,KAEH,SAAA,oBAAoB,cAAemsC,EAAU,EAC7C,SAAA,oBAAoB,YAAaC,EAAa,EAE5ChpB,EAAA,EAELh/E,EAAA,QAAU,WAAW,IAAM,CACvB8lG,EAAA,MAAMC,EAAY,KAAK,EAAI,GACpByB,EAAA,GACd,GAAG,CAAA,CAGR,SAAS9oF,GAA8BnhB,GAAU,CAC3CA,GAAM,aACRA,GAAM,gBAAgB,EACtBA,GAAM,eAAe,EACvB,CAGF,SAAS0qG,GAAch7G,GAAwB,CACvC,KAAA,CAAE,SAAAo4C,GAAU,QAAAic,EAAA,EAAYj9C,EAC9B,OAAApX,GAAQ65G,GAAU75G,EAAK,EAEhB,CACL,CAACq0D,GAAU,SAAW,KAAK,EAAGjc,GAAW,GAAGp4C,EAAK,IAAM,MACvD,CAACq0D,GAAU,QAAU,MAAM,EAAGjc,GAAW,MAAQ,GAAGp4C,EAAK,IACzD,UAAW,aAAaq0D,GAAU,GAAK,GAAG,QAAQA,GAAU,GAAK,GAAG,MACtE,CAAA,CAGF,SAAS4mD,GAAej7G,GAAwB,CACxC,KAAA,CAAE,SAAAo4C,GAAU,QAAAic,EAAA,EAAYj9C,EAC9B,OAAApX,GAAQ65G,GAAU75G,EAAK,EAEhB,CACL,CAACq0D,GAAU,SAAW,KAAK,EAAGjc,GAAW,GAAGp4C,EAAK,IAAM,OACvD,CAACq0D,GAAU,QAAU,MAAM,EAAGjc,GAAW,OAAY,GAAGp4C,EAAK,IAC7D,UAAW,YAAYo4C,GAAW,IAAM,GAAG,IAAIic,GAAU,GAAK,GAAG,MACnE,CAAA,CAGF,SAAS8lD,GAAen6G,GAAwB,CACxC,MAAAyH,GAAS,WAAWzH,EAAe,EAEzC,GAAI,OAAO,MAAMyH,EAAM,EAAU,MAAA,GAEjC,GAAI2P,EAAM,MAAO,CACT,MAAAxR,GAAM,KAAK,IAAI8zG,EAAW,MAAM,CAAC,EAAGA,EAAW,MAAM,CAAC,CAAC,EACvD/zG,GAAM,KAAK,IAAI+zG,EAAW,MAAM,CAAC,EAAGA,EAAW,MAAM,CAAC,CAAC,EAEtD,OAAAjyG,IAAU7B,IAAO6B,IAAU9B,EAAA,KAE3B,QAAA8B,IAAUiyG,EAAW,MAAM,CAAC,CACrC,CAGF,SAASwB,GAAYj7G,GAAmBkI,GAAeod,GAAY,GAAO,CAC3DqzF,EAAA,MAAM34G,EAAI,GAAKkI,GAEhBkvF,EAAA,EACZ9xE,IAAawsE,EAAW,CAAA,CAGjB,SAAAsG,GAAWp4F,GAAmBwkB,GAAiC,CACtE,GAAI,CAAAxT,GAAW,MAEX,GAAAmG,EAAM,YAAcqN,KAAU,MAAO,CACnC,GAAA,CAACy0F,EAAW,MAAM,OAAQ,OAExB,MAAAl5G,GAAQ05G,EAAW,MAAMz5G,EAAI,EAEnC,SAAW,CAAE,MAAOk7G,EAAY,IAAKjC,EAAW,MAC9C,GAAIiC,GAAcn7G,GAAO,CACV44G,EAAA,MAAM34G,EAAI,EAAIk7G,GAC3B,KAAA,CAIOppB,EAAA,CAAA,MAECmpB,GAAAj7G,GAAMwkB,KAAU,QAAU,EAAIA,KAAU,OAAS,GAAK,EAAG,EAAI,CAC3E,CAGO,SAAA6zE,GAAYr4F,GAAmBwkB,GAAiC,CACvE,GAAI,CAAAxT,GAAW,MAEX,GAAAmG,EAAM,YAAcqN,KAAU,MAAO,CACnC,GAAA,CAACy0F,EAAW,MAAM,OAAQ,OAExB,MAAAl5G,GAAQ05G,EAAW,MAAMz5G,EAAI,EAE1B,QAAAuB,GAAI03G,EAAW,MAAM,OAAS,EAAG13G,IAAK,EAAG,EAAEA,GAAG,CACrD,KAAM,CAAE,MAAO25G,EAAA,EAAgBjC,EAAW,MAAM13G,EAAC,EAEjD,GAAI25G,GAAcn7G,GAAO,CACV44G,EAAA,MAAM34G,EAAI,EAAIk7G,GAC3B,KAAA,CACF,CAGSppB,EAAA,CAAA,MAEXmpB,GAAYj7G,GAAMwkB,KAAU,QAAU,GAAKA,KAAU,OAAS,IAAM,EAAE,CACxE,CAGF,SAASi5B,GAAMz7C,GAAwB,SACnCkW,GAAA6gG,EAAa,OAASC,EAAW,QAAjC,MAAA9gG,GAAyC,MAAMlW,GAAO,CAG1D,SAASg/C,IAAO,SACZ9oC,GAAA6gG,EAAa,OAASC,EAAW,QAAjC,MAAA9gG,GAAyC,MAAK,+BAKhDsR,EAAA,mBAqNM,MAAA,CApNH,GAAIH,QAAK6zB,CAAA,EACT,uBAAOniC,EAAS,KAAA,EACjB,SAAS,KACT,KAAK,QACJ,kBAAiBsO,QAAO8zB,CAAA,EACxB,cAAaw9D,GACb,eAAcJ,EACd,eAAcC,EACd,aAAYhpF,EAAA,GAEb5H,EAAAA,mBAyMM,MAAA,CAzMA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,GAChBkC,EAAAA,mBAA+C,MAAA,SAAtC,QAAJ,IAAI8F,EAAS,MAAKjG,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,UAC9BgC,aAMOC,GAAA,OAAA,SAAAyzC,EAAAA,eAAAC,EANqB,mBAAAh0C,QAAgB0wF,EAAA,CAAA,CAAA,EAA5C,IAMO,CALL1xF,cAIWgB,EAAAA,MAAAb,EAAA,EAAA,CAJA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMkS,QAAgB0wF,EAAA,CAAA,qBAC9D,IAEM,CAFNnwF,EAAAA,mBAEM,MAAA,SAFG,SAAJ,IAAIqiE,GAAU,MAAKxiE,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAa,uBAAOghD,GAAW,KAAA,CAAA,GAC5D9+C,EAAAA,mBAA0C,MAAA,CAApC,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,+CAIRuxF,EAAA,MAAW,sBAA3BzvF,qBA0DWqsB,WAAA,CAAA,IAAA,GAAA,CAzDTjsB,EAAAA,mBA2BM,MAAA,CA3BA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,IAChB8vB,EAAAA,UAAA,EAAA,EAAAhuB,EAAA,mBAyBMqsB,EAxBwB,SAAA,KAAAC,aAAAmjE,EAAA,MAAnB,CAAA,CAAA,MAAAl5G,GAAO,OAAAo5G,qBADlB3vF,EAAA,mBAyBM,MAAA,CAvBH,IAAKzpB,GACL,MAAK0pB,EAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,OAAA,EAAWwyF,GAAen6G,EAAK,GAAKspB,QAAE3B,CAAA,EAAC,IAAG,QAAA,UAAA,CAAA,CAAA,EACvD,MAAKo1C,EAAAA,eAAEi+C,GAAch7G,EAAK,CAAA,CAAA,GAE3B2pB,EAAAA,WAkBOC,GAAA,OAAA,QAlBPE,EAAA,WAkBO,CAAA,QAAA,EAAA,EAhBGR,QAAgB0wF,EAAA,EAAA,CACvB,OAAAZ,GACA,YAAcp5G,GACd,QAAUm6G,GAAen6G,EAAK,IALjC,IAkBO,CAXLsoB,cAUWgB,EAAAA,MAAAb,EAAA,EAAA,CATR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MACtB,KAAI,IAAyBkS,EAAAA,MAAgB0wF,EAAA,EAAoB,OAAAZ,eAAuCp5G,GAAkC,QAAAm6G,GAAen6G,EAAK,CAAA,sBAO/J,IAAmC,CAAnC6pB,EAAAA,mBAAmC,OAAA,CAA5B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,8DAK3BkC,EAAAA,mBA4BM,MAAA,CA5BA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,IAChB8vB,EAAAA,UAAA,EAAA,EAAAhuB,EAAA,mBA0BWqsB,EA1B2B,SAAA,KAAAC,aAAAmjE,EAAA,MAAnB,CAAA,CAAA,MAAAl5G,GAAO,OAAAo5G,OACxB3hE,YAAA,EAAAhuB,qBAwBM,MAxBNK,EAAAA,WAwBM,KAzBgD9pB,eAE5Co5G,GAAO,MAAK,CACnB,OAAQ9vF,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAAyxF,GAAO,KAAK,EACrC,OAAQ6B,GAAej7G,EAAK,EAAGo5G,GAAO,KAAK,CAAA,IAE5CzvF,EAAAA,WAkBOC,GAAA,OAAA,SAlBPE,EAAA,WAkBO,CAAA,QAAA,EAAA,EAhBGR,QAAgB0wF,EAAA,EAAA,CACvB,OAAAZ,GACA,YAAcp5G,GACd,QAAUm6G,GAAen6G,EAAK,IALjC,IAkBO,CAXLsoB,cAUWgB,EAAAA,MAAAb,EAAA,EAAA,CATR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OACtB,KAAI,IAA2BkS,EAAAA,MAAgB0wF,EAAA,EAAsB,OAAAZ,eAAyCp5G,GAAoC,QAAAm6G,GAAen6G,EAAK,CAAA,sBAOvK,IAAkB,CAAf+pB,EAAAA,gBAAAC,EAAA,gBAAAovF,GAAO,KAAK,EAAA,CAAA,CAAA,uFAQnB9vF,QAAAlS,CAAA,EAAM,qBADdmS,cAkEgB6xF,GAAA,eAhEV,eAAJ,IAAIpC,EACH,MAAOU,EAAU,MAAA,CAAA,EACjB,eAAcpwF,EAAAA,MAAKlS,CAAA,EAAC,YACpB,WAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAChB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,QAASyhG,EAAO,MAAA,CAAA,EAChB,YAAWvvF,EAAAA,MAAKlS,CAAA,EAAC,SACjB,uBAAO0iG,GAAiB,KAAA,EACxB,YAAWxwF,EAAAA,MAAKlS,CAAA,EAAC,SACjB,UAAQ6vC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEimC,GAAU,EAAIjmC,EAAM,GAC9B,WAASnL,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEkmC,GAAW,EAAIlmC,EAAM,qCAEjC,IAqBO,CApBC92C,EAAM,SAAWgO,WAAM,MAAM,QADrCK,aAqBOC,GAAA,OAAA,UAAA,OAlBL,KAAK,QACJ,MAAO8vF,EAAU,MAAA,CAAA,EACjB,QAASb,EAAO,MAAA,CAAA,EAChB,QAASe,EAAc,MAAA,CAAA,EACvB,SAAUtwF,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,OAAA,EARlB,IAqBO,CAXLkR,cAUYgB,EAAAA,MAAAb,EAAA,EAAA,CATT,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QACtB,KAAI,oBAAsDsiG,EAAU,MAAA,CAAA,UAA4Bb,EAAO,MAAA,CAAA,UAA4Be,EAAc,MAAA,CAAA,EAA6B,SAAAtwF,EAAAA,MAAAlS,CAAA,EAAM,SAAiC,QAAAkS,EAAAA,MAAAlS,CAAA,EAAM,OAAA,qEAUhNkE,EAAM,KAAOgO,EAAA,SAAM,MAAM,UAAM,mBAC7C,IAsBO,CAtBPK,aAsBOC,GAAA,OAAA,MAAA,CApBL,KAAK,QACJ,MAAO8vF,EAAU,MAAA,CAAA,EACjB,QAASb,EAAO,MAAA,CAAA,EAChB,QAASe,EAAc,MAAA,CAAA,EACvB,SAAUtwF,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,OAAA,EAPlB,IAsBO,CAbLkR,cAYWgB,EAAAA,MAAAb,EAAA,EAAA,CAXR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IACtB,KAAI,oBAA0DsiG,EAAU,MAAA,CAAA,UAA8Bb,EAAO,MAAA,CAAA,UAA8Be,EAAc,MAAA,CAAA,EAA+B,SAAAtwF,EAAAA,MAAAlS,CAAA,EAAM,SAAmC,QAAAkS,EAAAA,MAAAlS,CAAA,EAAM,OAAA,sBASxO,IAAmB,qBAAhB,gBAAAsiG,EAAU,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,4NAKrBpxF,EAAAA,YAiEgB8yF,GAAA,SAhEV,aAAJ,IAAInC,EACH,MAAOS,EAAU,MAAA,CAAA,EACjB,eAAcpwF,EAAAA,MAAKlS,CAAA,EAAC,YACpB,WAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAChB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,IAAKkS,EAAAA,MAAKlS,CAAA,EAAC,IACX,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,QAASyhG,EAAO,MAAA,CAAA,EAChB,YAAWvvF,EAAAA,MAAKlS,CAAA,EAAC,SACjB,uBAAO2iG,EAAe,KAAA,EACtB,YAAWzwF,EAAAA,MAAKlS,CAAA,EAAC,SACjB,UAAQ6vC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEimC,GAAU,EAAIjmC,EAAM,GAC9B,WAASnL,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAEkmC,GAAW,EAAIlmC,EAAM,qCAEjC,IAqBO,CApBC92C,EAAM,SAAWgO,WAAM,MAAM,QADrCK,aAqBOC,GAAA,OAAA,UAAA,OAlBL,KAAK,MACJ,MAAO8vF,EAAU,MAAA,CAAA,EACjB,QAASb,EAAO,MAAA,CAAA,EAChB,QAASe,EAAc,MAAA,CAAA,EACvB,SAAUtwF,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,OAAA,EARlB,IAqBO,CAXLkR,cAUYgB,EAAAA,MAAAb,EAAA,EAAA,CATT,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QACtB,KAAI,kBAAoDsiG,EAAU,MAAA,CAAA,UAA4Bb,EAAO,MAAA,CAAA,UAA4Be,EAAc,MAAA,CAAA,EAA6B,SAAAtwF,EAAAA,MAAAlS,CAAA,EAAM,SAAiC,QAAAkS,EAAAA,MAAAlS,CAAA,EAAM,OAAA,qEAU9MkE,EAAM,KAAOgO,EAAA,SAAM,MAAM,UAAM,mBAC7C,IAsBO,CAtBPK,aAsBOC,GAAA,OAAA,MAAA,CApBL,KAAK,MACJ,MAAO8vF,EAAU,MAAA,CAAA,EACjB,QAASb,EAAO,MAAA,CAAA,EAChB,QAASe,EAAc,MAAA,CAAA,EACvB,SAAUtwF,EAAAA,MAAKlS,CAAA,EAAC,SAChB,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,OAAA,EAPlB,IAsBO,CAbLkR,cAYWgB,EAAAA,MAAAb,EAAA,EAAA,CAXR,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,IACtB,KAAI,kBAAwDsiG,EAAU,MAAA,CAAA,UAA8Bb,EAAO,MAAA,CAAA,UAA8Be,EAAc,MAAA,CAAA,EAA+B,SAAAtwF,EAAAA,MAAAlS,CAAA,EAAM,SAAmC,QAAAkS,EAAAA,MAAAlS,CAAA,EAAM,OAAA,sBAStO,IAAmB,qBAAhB,gBAAAsiG,EAAU,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,+MC3xBd2B,GAAa92F,GAAW,CACnC,SAAUJ,EACV,OAAQA,EACR,IAAK,OACL,MAAO,OACP,QAAS,OACT,OAAQA,EACR,KAAM,CAAC,OAAQ,OAAQ,KAAK,EAC5B,UAAWiB,GACX,YAAajB,CACf,CAAC,ECXmC,SAAAu4B,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAKpC,MAAM+zC,GAActxB,OAAOC,OAAuB,CAChD,QACA,MACA,SACA,eACA,gBACA,cAAc,CACf,EACKsxB,GAAYvxB,OAAOC,OAAqB,CAAC,QAAS,MAAO,SAAU,WAAY,SAAS,CAAC,EAEzF20F,GAAaznG,GAAgB,EAEnC,SAAS0nG,GAAev7G,EAAe,CACrC,OAAOA,IAAU,SAAWA,IAAU,MAAQ,QAAQA,CAAK,GAAKA,CAClE,CAEA,MAAe6mB,qBAAgB,CAC7BjX,KAAM,QACNwH,MAAOikG,GACPv0F,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,QAAS0D,EAAQ,CACtCqxB,SAAU,GACVojE,OAAQ,GACR/rD,IAAK,MACLgsD,MAAO,CACLx0F,QAAS,UACTtD,UAAW3jB,GAASi4C,GAAU1wB,SAASvnB,CAAK,CAC7C,EACD07G,QAAS,CACPz0F,QAAS,QACTtD,UAAW3jB,GAASg4C,GAAYzwB,SAASvnB,CAAK,CAC/C,EACD27G,OAAQ,GACRv6G,KAAM,UACNw6G,UAAW,KACXC,YAAa,CAACP,EAChB,CAAC,EAEK3zF,EAAKtF,GAAc,OAAO,EAC1By5F,EAA8B,CAClC93G,EAAG,OAAO2jB,EAAGtG,GAAG,OAAO,CAAC,IACxB06F,GAAI,YAAYp0F,EAAGtG,GAAG,OAAO,CAAC,WAC9B26F,IAAK,YAAYr0F,EAAGtG,GAAG,OAAO,CAAC,YAC/Bhd,EAAG,OAAOsjB,EAAGtG,GAAG,OAAO,CAAC,IACxB46F,GAAI,YAAYt0F,EAAGtG,GAAG,OAAO,CAAC,WAC9B66F,IAAK,YAAYv0F,EAAGtG,GAAG,OAAO,CAAC,WAChC,EAEKrG,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,MAAMuC,EAAuB,CAC3B,CAAC2M,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMokG,OACzB,CAAC7zF,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAMghC,SAC3B,CAACzwB,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAMghC,UAAYhhC,EAAMukG,OAC5C,CAACh0F,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMykG,WAC1B,EAED,OAAI,OAAOzkG,EAAMhW,MAAS,UAAYgW,EAAMhW,OAAS,YACnD4Z,EAAU2M,EAAGE,GAAGzQ,EAAMhW,IAAI,CAAC,EAAI,IAG1B4Z,CACT,CAAC,EACK+M,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,KAAM,CAAEijG,QAAAA,EAASD,MAAAA,EAAOr6G,KAAAA,CAAK,EAAIgW,EAE3B2Q,EAAgC,CACpCo0F,WAAYZ,GAAeE,CAAK,EAChCW,eAAgBb,GAAeG,CAAO,CACvC,EAED,GAAI,OAAOt6G,GAAS,SAAU,CAC5B,MAAMi7G,EAAiBrnD,MAAMsU,QAAQloE,CAAI,EAAIA,EAAO,CAACA,EAAMA,CAAI,EAE/D2mB,EAAMJ,EAAGtG,GAAG,OAAO,CAAC,EAAI,GAAGg7F,EAAe,CAAC,CAAC,KAC5Ct0F,EAAMJ,EAAGtG,GAAG,OAAO,CAAC,EAAI,GAAGg7F,EAAe,CAAC,CAAC,IAC9C,CAEA,OAAIjlG,EAAMykG,aAAe,CAACzkG,EAAMghC,WAC9BrwB,EAAMorB,UAAY2oE,EAAOI,IACzBn0F,EAAMqrB,aAAe0oE,EAAOI,KAGvBn0F,CACT,CAAC,EAED,MAAO,IAAM,CAAA,IAAAo8B,EACX,MAAMsN,EAAYr6C,EAAMq4C,KAAQ,MAC1Bv5C,EAAWqS,EAAU,WAACjN,EAAO,SAAS,EAAEpF,SAE9C,GAAI,EAACA,GAAAA,MAAAA,EAAUvU,QACb,OAAA2mB,EAAAA,YAAAmpC,EAAA,CAAA,MAAyBz2C,EAAUhb,MAAK,MAAS+nB,EAAM/nB,KAAK,EAAA,IAAA,EAG9D,MAAMssB,EAASC,GAAWrW,CAAQ,EAC5BomG,EAAYhwF,EAAO3qB,OAAS,EAC5B+5G,EAAUtkG,EAAMskG,QAChBa,EAAeb,EAAQnvC,WAAW,OAAO,EACzCiwC,EAAad,IAAY,gBAE/B,OAAApzF,EAAAA,YAAAmpC,EAAA,CAAA,MACoBz2C,EAAUhb,MAAK,MAAS+nB,EAAM/nB,KAAK,EAAA08C,GAAAyH,EAClD73B,EAAO5X,IAAI,CAACyV,EAAOjiB,IAAKogB,EAAA,YAAA,MAAA,CAAA,IAEhBpgB,EAAK,MACHyf,EAAGg8B,GAAG,MAAM,EAAC,KACd,OAAM,MACL,CACLvsC,EAAMwkG,UACLxkG,EAAMykG,YAEHzkG,EAAMghC,SACJ,CACAhF,aAAclrC,IAAUo0G,EAAYR,EAAOz3G,EAAIgkB,MACjD,EACE,CACA+e,WAAY00E,EAAOG,GACnB30E,cAAew0E,EAAOG,GACtB9rD,YAAaosD,EACTC,GAAct0G,IAAUo0G,EACtBR,EAAOC,GACP1zF,OACFngB,IAAUo0G,EACRR,EAAO93G,EACPqkB,OACN6nC,WAAYqsD,IACRC,GAAct0G,IAAU,GACtB4zG,EAAOC,GAET1zF,MACL,EApBD,EAoBC,CACN,EAAA,CAEA8B,CAAK,CAAA,CAET,CAAC,EAAAg6B,EAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,CAAA,CAAA,CAAA,CAGP,CACH,CACF,CAAC,ECnJYs4D,GAAal4F,GAAW,CACnC,MAAO,OACP,IAAK,OACL,IAAK,OACL,SAAUJ,EACV,aAAcA,EACd,KAAMA,EACN,QAASA,EACT,SAAUmB,EAAmC,EAC7C,OAAQA,EAA+D,EACvE,QAASA,EAAU,EACnB,YAAaA,EAAmC,EAChD,OAAQA,EAAmC,EAC3C,UAAWA,EAAmC,CAChD,CAAC,ECsCDo3F,GAAe71F,kBAAgB,CAC7B,KAAM,QACN,WAAY,CACV,KAAA3L,EACF,EACA,MAAOuhG,GACP,MAAO,CAAC,cAAc,EACtB,MAAM11F,EAAQ,CAAE,KAAAqvB,GAAQ,CAChB,MAAAh/B,EAAQiM,GAAS,QAAS0D,EAAQ,CACtC,MAAO,CACL,QAAS,GACT,UAAY/mB,GAAkBA,EAAQ,GAAKA,EAAQ,EACnD,OAAQ,EACV,EACA,IAAK,GACL,IAAK,GACL,SAAU,GACV,aAAc,GACd,KAAM,GACN,QAAS,EAAA,CACV,EAEK2nB,EAAKtF,GAAc,OAAO,EAC1B3B,EAAQU,GAAS,EACjB89B,EAAep2B,EAAAA,IAAI1R,EAAM,KAAK,EAC9BulG,EAAc7zF,MAAgB,CAAC,EAC/BwqB,EAAaxqB,MAAI,EAAK,EAEtBuF,EAAUvF,EAAAA,IAAiB,EAC3B8zF,EAAQ9zF,EAAAA,IAAiB,EAEzB4P,EAASjgB,EAAAA,SAAS,IACfrB,EAAM,SAAW,eAAiB,aAC1C,EACKmT,EAAW9R,EAAAA,SAAgD,IACxDrB,EAAM,SAAW,CAAC,MAAO,QAAQ,EAAI,CAAC,OAAQ,OAAO,CAC7D,EAEK,CAAE,OAAQrF,EAAS,OAAAigB,CAAA,EAAWN,GAAU,CAC5C,KAAM,GACN,QAAS,GACT,QAAS,CAAClE,EAAOld,IAAU,CACzB,GAAIqsG,EAAY,OAAS,CAACtuF,EAAQ,OAAS/d,EAAM,OAAS,EACjD,MAAA,GAGT,KAAM,CAAE,IAAA1K,EAAK,IAAAD,EAAK,SAAAyyC,EAAU,KAAAvmB,CAAS,EAAAza,EAC/BylG,EAAQxuF,EAAQ,MAAMqK,EAAO,KAAK,EAClCokF,EAAcl3G,GAAO,EAAIA,EAAMA,EAAMi3G,EACrCE,EAAcp3G,GAAO,EAAIA,EAAMA,EAAMk3G,EAE3CrvF,EAAM,MAAQqvF,EACdrvF,EAAM,IAAMsvF,EACZtvF,EAAM,IAAMuvF,EACZvvF,EAAM,SAAW4qB,EACjB5qB,EAAM,UAAYqE,EACZrE,EAAA,MAAQ0xB,EAAa,MAAQ29D,EACnCrvF,EAAM,OAAS0xB,EAAa,MAExBrtB,GAAQ+qF,EAAM,QACVA,EAAA,MAAM,MAAMryF,EAAS,MAAM,CAAC,CAAC,EAAI,GAAG20B,EAAa,MAAQ,GAAG,GAC5D09D,EAAA,MAAM,MAAM,QAAU,SAGpBr3F,EAAAnO,EAAM,YAAa8nC,EAAa,KAAK,CACjD,EACA,OAAiB1xB,GAAA,CACf,MAAMqvF,EAAQrvF,EAAM,MACd5nB,EAAM4nB,EAAM,IACZ7nB,EAAM6nB,EAAM,IACZrlB,EAAQqlB,EAAM,SAAWA,EAAM,OAASA,EAAM,OAC9CnsB,EAAQmsB,EAAM,MACdxtB,EAAQ,KAAK,IAAI,KAAK,IAAI4F,GAAMvE,EAAQ8G,GAAS00G,CAAK,EAAGl3G,CAAG,EAE9D6nB,EAAM,WACJovF,EAAM,QACFA,EAAA,MAAM,MAAMryF,EAAS,MAAM,CAAC,CAAC,EAAI,GAAGvqB,EAAQ,GAAG,KAGvDwtB,EAAM,OAASxtB,GAEfyhD,EAAazhD,CAAK,EAGVulB,EAAAnO,EAAM,OAAQpX,CAAK,CAC/B,EACA,MAAgBwtB,GAAA,CAKd,GAJIovF,EAAM,QACFA,EAAA,MAAM,MAAM,QAAU,IAG1BpvF,EAAM,UAAW,CACnB,MAAMjlB,EAASilB,EAAM,OAEjB,KAAK,IAAIjlB,EAAS22C,EAAa,KAAK,EAAI,KAC5B89D,EAAA,EAGhBv7D,EAAal5C,CAAM,CAAA,CAGXgd,EAAAnO,EAAM,UAAW8nC,EAAa,KAAK,CAAA,CAC/C,CACD,EAEKlkC,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,IAAI2jF,EAAW,GAEf,OAAIugB,EAAY,QACVvlG,EAAM,SACGglF,EAAAugB,EAAY,MAAQ,EAAI,MAAQ,SAEhCvgB,EAAAugB,EAAY,MAAQ,EAAI,OAAS,SAIzC,CACL,CAACh1F,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAGvQ,EAAM,SAAW,WAAa,YAAY,CAAC,EAAG,GACrD,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGqK,EAAO,MAC1B,CAACrK,EAAG,GAAG,GAAGy0E,CAAQ,OAAO,CAAC,EAAG,CAAC,CAACA,EAC/B,CAACz0E,EAAG,GAAG,YAAY,CAAC,EAAG2rB,EAAW,KACpC,CAAA,CACD,EACK2pE,EAAgBxkG,EAAAA,SAAS,KACtB,CACL,CAAC8R,EAAS,MAAM,CAAC,CAAC,EAChBoyF,EAAY,MAAQ,EAChB,IACAA,EAAY,MAAQ,EAClB,OACA,IAAI,EAAIz9D,EAAa,OAAS,GAAG,GAC3C,EACD,EACKg+D,EAAiBzkG,EAAAA,SAAS,KACvB,CACL,CAAC8R,EAAS,MAAM,CAAC,CAAC,EAChBoyF,EAAY,MAAQ,EAChB,OACAA,EAAY,MAAQ,EAClB,IACA,GAAGz9D,EAAa,MAAQ,GAAG,GACrC,EACD,EACK0pB,EAAenwD,EAAAA,SAAS,KACrB,CACL,CAAC8R,EAAS,MAAM,CAAC,CAAC,EAChBoyF,EAAY,MAAQ,EAChB,OACAA,EAAY,MAAQ,EAClB,IACA,QAAQz9D,EAAa,MAAQ,GAAG,WAAWv3B,EAAG,GAAG,cAAc,CAAC,UAC1E,EACD,EACKw1F,EAAY1kG,EAAAA,SAAS,IAClBrB,EAAM,SACT,CAACsJ,EAAM,MAAM,UAAWA,EAAM,MAAM,OAAO,EAC3C,CAACA,EAAM,MAAM,WAAYA,EAAM,MAAM,SAAS,CACnD,EAEDsD,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACHA,EAAM,QAAQ,CAAC,IAAMk/C,EAAa,MAAM,QAAQ,CAAC,IACnDA,EAAa,MAAQl/C,EACPg9G,EAAA,EAChB,CAEJ,EACAh5F,QAAMk7B,EAAuBl/C,GAAA,CACvB48G,EAAM,QACFA,EAAA,MAAM,MAAMryF,EAAS,MAAM,CAAC,CAAC,EAAI,GAAGvqB,EAAQ,GAAG,IACvD,CACD,EACDgkB,QAAM24F,EAAsB38G,GAAA,CAG1B,GAFcg9G,EAAA,EAEVh9G,EAAO,CACL,IAAAC,EAEAmX,EAAM,SACDnX,EAAAD,EAAQ,EAAI,MAAQ,SAEpBC,EAAAD,EAAQ,EAAI,OAAS,QAGpBulB,EAAAnO,EAAM,OAAQnX,CAAI,CAAA,MAE5BslB,EAAUnO,EAAM,OAAO,CACzB,CACD,EAED,SAAS4lG,GAAgB,CACvB1pE,EAAW,MAAQ,CAACl8B,EAAM,cAAgB,CAAC4a,EAAO,KAAA,CAGpD,SAASorF,GAAmB,CAC1B9pE,EAAW,MAAQ,EAAA,CAGrB,SAAS+pE,EAAWp9G,EAAc,CAC3BmX,EAAM,UAIPulG,EAAY,MACdA,EAAY,MAAQ,EAEpBA,EAAY,MAAQ18G,EACtB,CAGF,SAASwhD,EAAazhD,EAAe,CAC/BA,EAAM,QAAQ,CAAC,IAAMk/C,EAAa,MAAM,QAAQ,CAAC,IACnDA,EAAa,MAAQl/C,EAEXulB,EAAAnO,EAAM,SAAUpX,CAAK,EAC/Bo2C,EAAK,eAAgBp2C,CAAK,EAC5B,CAGK,MAAA,CACL,MAAAoX,EACA,GAAAuQ,EAEA,UAAA3M,EACA,SAAAuP,EACA,cAAA0yF,EACA,eAAAC,EACA,aAAAt0C,EACA,UAAAu0C,EAEA,QAAA9uF,EACA,MAAAuuF,EACA,QAAA7qG,EAEA,iBAAAqrG,EACA,WAAAC,CACF,CAAA,CAEJ,CAAC,mFA1SC5zF,EA4CM,mBAAA,MAAA,CA5CD,IAAI,UAAW,MAAKC,EAAAA,eAAEE,EAAS,SAAA,EAAG,gBAAaq9B,EAAE,CAAA,IAAAA,EAAA,CAAA,EAAA,IAAAr0C,IAAAgX,EAAA,kBAAAA,EAAA,iBAAA,GAAAhX,CAAA,EAAA,EAAA,CACpDiX,EAAAA,mBAKM,MAAA,CAJH,MAAKH,kBAAGE,EAAG,GAAA,GAAE,SAAWA,EAAG,GAAA,IAAG,QAAUA,EAAA,MAAM,SAAQ,MAAA,MAAA,CAAA,CAAA,EACtD,MAAKmzC,EAAAA,eAAEnzC,EAAa,aAAA,CAAA,EAAA,CAErBD,aAAyBC,EAAA,OAAA,MAAA,CAAA,EAAA,CAAA,EAE3BC,EAAAA,mBAKM,MAAA,CAJH,MAAKH,kBAAGE,EAAG,GAAA,GAAE,SAAWA,EAAG,GAAA,IAAG,QAAUA,EAAA,MAAM,SAAQ,SAAA,OAAA,CAAA,CAAA,EACtD,MAAKmzC,EAAAA,eAAEnzC,EAAc,cAAA,CAAA,EAAA,CAEtBD,aAA0BC,EAAA,OAAA,OAAA,CAAA,EAAA,CAAA,EAE5BC,EAAAA,mBA6BM,MAAA,CA7BA,MAAKH,EAAE,eAAAE,EAAA,GAAG,GAAE,SAAA,CAAA,EAAc,MAAKmzC,EAAAA,eAAEnzC,EAAY,YAAA,CAAA,EAAA,CACjDC,EAAAA,mBA2BM,MAAA,CA3BD,IAAI,UAAW,MAAKH,EAAAA,eAAEE,EAAA,GAAG,GAAE,SAAA,CAAA,CAAA,EAAA,CACdA,EAAA,MAAM,uBAAtBH,EAoBW,mBAAAqsB,WAAA,CAAA,IAAA,GAAA,CAnBTjsB,EAAAA,mBAOS,SAAA,CANP,KAAK,SACJ,MAAKH,EAAAA,gBAAGE,EAAG,GAAA,GAAE,UAAYA,EAAG,GAAA,IAAG,SAAc,GAAAA,EAAA,MAAM,SAAQ,MAAA,MAAA,OAAA,CAAA,CAAA,EAC3D,cAAWq9B,EAAZ,CAAA,IAAAA,EAAA,CAAA,EAAAge,EAAAA,cAAA,IAAA,CAAA,EAAiB,CAAA,MAAA,CAAA,GAChB,QAAKhe,+BAAOr9B,EAAU,WAAA,EAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAEvBtB,EAA6E,YAAAg1F,EAA7ExzF,EAA6E,WAAAF,EAA/D,UAAS,CAAA,EAAA,CAAM,MAAK,EAAIA,EAAS,UAAA,CAAA,EAAI,OAAK,GAAA,EAAA,CAAA,EAAA,KAAA,GAAA,CAAA,OAAA,CAAA,OAE1DC,EAAAA,mBAUS,SAAA,CATP,KAAK,SACJ,MAAKH,EAAAA,eAAA,CAAkBE,KAAG,GAAE,QAAA,EAA0BA,EAAG,GAAA,IAAG,SAAc,GAAAA,EAAA,MAAM,SAAQ,SAAA,OAAA,OAAA,CAAA,CAAA,EAIxF,cAAWq9B,EAAZ,CAAA,IAAAA,EAAA,CAAA,EAAAge,EAAAA,cAAA,IAAA,CAAA,EAAiB,CAAA,MAAA,CAAA,GAChB,QAAKhe,+BAAOr9B,EAAU,WAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAEvBtB,EAA6E,YAAAg1F,EAA7ExzF,EAA6E,WAAAF,EAA/D,UAAS,CAAA,EAAA,CAAM,MAAK,EAAIA,EAAS,UAAA,CAAA,EAAI,OAAK,GAAA,EAAA,CAAA,EAAA,KAAA,GAAA,CAAA,OAAA,CAAA,MAI1D,EAAA,EAAA,GAAAD,EAAA,WAEOC,2BAFP,IAEO,EAAA6tB,EAAA,UAAA,EADLhuB,EAAAA,mBAA+DqsB,EAAA,SAAA,KAAAC,aAA7C,EAALl0B,GAAbgI,EAAAA,mBAA+D,OAAA,CAAzC,IAAKhI,EAAI,MAAK6H,EAAAA,eAAEE,EAAA,GAAG,GAAE,SAAA,CAAA,CAAA,EAAA,KAAA,CAAA,kBAKnDC,EAAAA,mBAA+C,MAAA,CAA1C,IAAI,QAAS,MAAKH,EAAAA,eAAEE,EAAA,GAAG,GAAE,OAAA,CAAA,CAAA,EAAA,KAAA,CAAA,uCChCrB2zF,GAAch5F,GAAW,CACpC,OAAQ,CAAC,OAAQ,MAAM,EACvB,KAAMJ,EACN,QAAS,MACT,MAAO,OACP,UAAW,OACX,SAAUA,EACV,QAASA,EACT,MAAO,OACP,SAAUmB,EAAsC,EAChD,MAAOA,EAAU,EACjB,QAASA,EAAsC,CACjD,CAAC,EAKYk4F,GAAkBj5F,GAAW,CACxC,MAAO,CAAC,OAAQ,MAAM,EACtB,SAAUJ,EACV,KAAMyB,GACN,SAAUzB,EACV,SAAUmB,EAAqC,CACjD,CAAC,ECWYm4F,GAAgB,sBAEhBC,GAAgB,OAAO,OAAO,CACzC,IAAK,CAAC,OAAQ,OAAO,EACrB,MAAO,CAAC,MAAO,QAAQ,EACvB,OAAQ,CAAC,OAAQ,OAAO,EACxB,KAAM,CAAC,MAAO,QAAQ,CACxB,CAAU,kJCtCJ,MAAAtmG,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,MAAO,CACL,OAAQ,GACR,QAAS,IACX,EACA,SAAU,GACV,KAAM9C,GAAe,EACrB,SAAU,IAAA,CACX,EAEK83F,EAAc1kG,EAAAA,OAAOwkG,GAAe,IAAI,EAExC91F,EAAKtF,GAAc,SAAS,EAC5B3B,EAAQU,GAAS,EACjBk0B,EAASxsB,MAAI,EAAK,EAClBu3C,EAAev3C,EAAAA,IAAI1R,EAAM,KAAK,EAC9BlP,EAAQ4gB,MAAI,CAAC,EACbngB,EAAQmgB,MAAI,CAAC,EAEbuF,EAAUvF,EAAAA,IAAiB,EAE3B80F,EAAenlG,EAAAA,SAAS,IAAM,CAC5B,MAAAivE,EAAY//D,EAAG,GAAG,SAAS,EAE1B,MAAA,CACL,CAAC+/D,CAAS,EAAG,GACb,CAAC,GAAGA,CAAS,YAAY,EAAGtwE,EAAM,SAClC,CAAC,GAAGswE,CAAS,UAAU,EAAG,CAACtwE,EAAM,UAAYk+B,EAAO,KACtD,CAAA,CACD,EACKuoE,EAAaplG,EAAAA,SAAS,IACtBrY,GAAUgX,EAAM,QAAQ,EACnBA,EAAM,UAGRumG,GAAA,YAAAA,EAAa,WAAY,EACjC,EAaD,GAXA35F,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPqgE,EAAa,MAAQrgE,EACrB29G,GAAA,MAAAA,EAAa,eAAc,CAE/B,EACA35F,QAAMsxB,EAAiBt1C,GAAA,CACXulB,EAAAnO,EAAM,SAAWpX,CAAK,CAAA,CACjC,EAEG29G,EAAa,CACf,MAAMnwF,EAAmBtJ,EAAAA,SAAS,CAChC,GAAImK,EACJ,MAAOgyC,EACP,MAAAn4D,EACA,MAAAS,CAAA,CACD,EAEDqb,EAAA,MAAMq8C,EAAc,IAAM,CACjB/qB,EAAA,MAAQ+qB,EAAa,QAAUs9C,EAAY,aAAA,CACnD,EACD35F,EAAA,MACE,IAAM25F,EAAY,cACT39G,GAAA,CACAs1C,EAAA,MAAQ+qB,EAAa,QAAUrgE,CACxC,EACA,CAAE,UAAW,EAAK,CACpB,EAEA29G,EAAY,aAAanwF,CAAK,EAE9BxB,EAAAA,gBAAgB,IAAM,CACpB2xF,EAAY,aAAanwF,CAAK,CAAA,CAC/B,CAAA,CAGH,SAASmoB,GAAe,CAClBv+B,EAAM,UAIGumG,GAAA,MAAAA,EAAA,aAAat9C,EAAa,MAAK,CAG9C,SAAS3rB,GAAc,CACjBt9B,EAAM,UAIGumG,GAAA,MAAAA,EAAA,YAAYt9C,EAAa,MAAK,6BAK3C52C,EAAA,mBAyBK,KAAA,SAzBG,UAAJ,IAAI4E,EAAW,MAAK3E,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAU,KAAK,MAAA,GAC5CkC,EAAAA,mBAAiC,MAAA,CAA3B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,CAAA,UAClBkC,EAAAA,mBAsBM,MAAA,CArBH,uBAAO+zF,EAAY,KAAA,EACpB,KAAK,MACL,SAAS,IACR,gBAAet0F,EAAAA,MAAKlS,CAAA,EAAC,SACrB,eAAczO,EAAK,OAAI,OACvB,gBAAeT,EAAK,OAAI,OACxB,QAAOytC,EACP,qCAAoBA,EAAY,CAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,GAErBrsB,QAAAlS,CAAA,EAAM,kBAAlB,EAAAmS,cAAyED,EAAAA,MAAApO,EAAA,EAAA,OAAhD,MAAKwO,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,IAAA,wDAC5DuS,EAAAA,WAEOC,sBAFP,IAEO,CADFG,kBAAAC,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,KAAK,EAAA,CAAA,CAAA,GAGRymG,EAAU,qBADlBp0F,EAAAA,mBAOS,SAAA,OALP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,wBAAY+sB,EAAW,CAAA,MAAA,CAAA,CAAA,GAExBpsB,EAAAA,YAAgDgB,EAAAA,MAAApO,EAAA,EAAhD4O,EAAAA,WAAcR,EAAAA,MAAkC5I,CAAA,EAA5B,MAAK,CAAE,MAAM,OAAA,CAAO,EAAA,KAAA,EAAA,oKC9G1C,MAAAtJ,EAAQiM,GAAS,SADRsF,EAC0B,CACvC,OAAQ,CACN,QAAS,KACT,OAAQ,EACV,EACA,KAAM,GACN,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,MAAO,OACP,UAAW,MACX,SAAU,GACV,QAAS,GACT,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKytB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,SAAS,EAC5B3B,EAAQU,GAAS,EACjByH,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAChC0mG,EAAiBh1F,MAAI,CAAC,EACtBi1F,EAAaj1F,MAAI,CAAC,EAClB23C,MAAiB,IAEjBpyC,EAAU5C,GAAWuyF,CAAoB,EACzCn+E,EAAS/W,EAAAA,IAAiC,EAE1C9N,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAASvQ,EAAM,KAAK,EAAE,CAAC,EAAG,GACjC,CAACuQ,EAAG,GAAGvQ,EAAM,SAAS,CAAC,EAAG,GAC1B,CAACuQ,EAAG,GAAG,MAAM,CAAC,EAAGvQ,EAAM,IACzB,EACD,EACK6mG,EAAcxlG,EAAAA,SAAS,IAAM,CACjC,KAAM,CAAC8R,EAAU5oB,CAAM,EAAI+7G,GAActmG,EAAM,SAAS,EAEjD,MAAA,CACL,CAACmT,CAAQ,EAAG,GAAGuzF,EAAe,KAAK,KACnC,CAACn8G,CAAM,EAAG,GAAGo8G,EAAW,KAAK,IAC/B,CAAA,CACD,EACKjnG,EAAQ2B,EAAAA,SAAS,IACdrB,EAAM,QAAQ,IAAYjI,GAC3B,OAAOA,GAAS,UAAY,OAAOA,GAAS,SACvC,CAAE,MAAOA,CAAK,EAGhBA,CACR,CACF,EACK+uG,EAAazlG,EAAAA,SAAS,IACnBrB,EAAM,YAAc,OAASA,EAAM,YAAc,SAAW,mBAAqB,UACzF,EAEKwpD,EAAgB/tD,GAAc,IAAM,CACxC,MAAMlK,EAAQ83D,EAAW,KAEzB,MAAM,KAAKA,CAAU,EAAE,QAAQ,CAACtxD,EAAMjH,IAAU,CAC9CiH,EAAK,MAAQjH,EAAQ,EACrBiH,EAAK,MAAQxG,EAETtI,GAAO8O,EAAK,KAAK,IACnBA,EAAK,MAAQjH,EAAQ,EACvB,CACD,EAEGu4D,EAAW,MAAQ,GAAK09C,EAAA,IAC1Bt1F,EAAc,MAAQ,MAAM,KAAK43C,CAAU,EAAE,CAAC,EAAE,MAClD,CACD,EAEDvnD,EAAA,QACEukG,GACAv5F,WAAS,CACP,cAAA2E,EACA,SAAU2sB,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,aAAAypD,EACA,aAAAC,EACA,aAAAlqB,EACA,YAAAlC,EACA,cAAAksB,CACD,CAAA,CACH,EAEA58C,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP6oB,EAAc,MAAQ7oB,EACDg+G,EAAA,CAAA,CAEzB,EACAh6F,EAAA,MACE,IAAM5M,EAAM,UACZ,IAAM,CACJ,sBAAsB4mG,CAAoB,CAAA,CAE9C,EAEAnyF,EAAAA,UAAUmyF,CAAoB,EAEjB90F,EAAA,CACX,MAAApS,EACA,QAAAuX,EACA,OAAAwR,EACA,qBAAAm+E,EACA,UAAAI,CAAA,CACD,EAED,SAASD,GAAgB,CACvB,OAAO99G,GAAOwoB,EAAc,KAAK,GAAKA,EAAc,QAAU,EAAA,CAGhE,SAASg4C,EAAa1xD,EAAiB,CACrCsxD,EAAW,IAAItxD,CAAI,EACLyxD,EAAA,CAAA,CAGhB,SAASE,EAAa3xD,EAAiB,CACrCsxD,EAAW,OAAOtxD,CAAI,EACRyxD,EAAA,CAAA,CAGhB,SAAShqB,EAAavvB,EAAwB,CAC5CwB,EAAc,MAAQxB,EAED22F,EAAA,EACrB5nE,EAAK,gBAAiB/uB,CAAK,EACjB9B,EAAAnO,EAAM,SAAyBiQ,CAAK,CAAA,CAGhD,SAAS+2F,GAAY,CACnB74F,EAAUnO,EAAM,KAAK,CAAA,CAGvB,SAASs9B,EAAYrtB,EAAwB,CACjC9B,EAAAnO,EAAM,QAAwBiQ,CAAK,EAE7C,sBAAsB22F,CAAoB,CAAA,CAG5C,SAASA,GAAuB,CACxB,MAAAK,EAAa,MAAM,KAAK59C,CAAU,EAAE,KAAatxD,GAAAA,EAAK,QAAU0Z,EAAc,KAAK,EAErFw1F,GAAA,MAAAA,EAAY,GACVjnG,EAAM,YAAc,OAASA,EAAM,YAAc,UACpC0mG,EAAA,MAAQO,EAAW,GAAG,WAC1BN,EAAA,MAAQM,EAAW,GAAG,cAElBP,EAAA,MAAQO,EAAW,GAAG,UAC1BN,EAAA,MAAQM,EAAW,GAAG,eAGnCP,EAAe,MAAQ,EACvBC,EAAW,MAAQ,EACrB,6BAKAt0F,EAAA,mBAiEM,MAAA,SAjEG,UAAJ,IAAI4E,EAAW,uBAAOrT,EAAS,KAAA,EAAE,SAAS,IAAA,GAC7CsN,cAQiBgB,EAAA,MAAAgiB,EAAA,EAAA,CARA,YAAW0yE,GAAoB,mBAC9C,IAMM,CANNn0F,EAAAA,mBAMM,MAAA,CANA,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,QAAA,CAAA,CAAA,CAAA,GACvBrM,EAAM,QAAUgO,EAAA,SAAM,MAAM,sBAAvCG,EAAA,mBAIM,MAAA,OAJ0C,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAC1DgC,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,sEAKzCkR,cA6CSgB,EAAAA,MAAAimE,EAAA,EAAA,SA5CH,SAAJ,IAAI1vD,EACH,MAAKnW,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EACZ,KAAMu2F,EAAU,MAChB,UAAS,GACT,UAAS,GACV,aAAW,KACV,eAAc50F,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EACnB,eAAc,CAAmB,KAAA,SAAA,CAAA,qBAElC,IAYO,CAZPgC,EAAAA,WAYOC,sBAZP,IAYO,kBAXLH,EAAAA,mBAUaqsB,EAAA,SAAA,KAAAC,EAAAA,WATIj/B,EAAK,MAAb3H,kBADToa,EAAAA,YAUaD,EAAA,MAAAg1F,EAAA,EAAA,CARV,IAAKnvG,EAAK,MACV,MAAOA,EAAK,MACZ,KAAMA,EAAK,KACX,SAAUA,EAAK,SACf,SAAUA,EAAK,SACf,SAAQA,EAAK,QAAA,qBAEd,IAAgC,CAA7B4a,kBAAAC,EAAA,gBAAA7a,EAAK,SAAWA,EAAK,KAAK,EAAA,CAAA,CAAA,0EAGvBma,EAAAA,MAAKlS,CAAA,EAAC,SAAWkE,EAAM,KAAOgO,EAAA,MAAKlS,CAAA,EAAC,MAAM,mBAApDqS,EAAAA,mBASK,KAAA,OATqD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAU,KAAK,MAAA,GACnFkC,EAAAA,mBAAiC,MAAA,CAA3B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,CAAA,UAClBkC,EAAAA,mBAMS,SAAA,CAND,KAAK,SAAU,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,EAAU,QAAOy2F,CAAA,GAClDz0F,EAAAA,WAIOC,kBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,GAAA,qBAC/B,IAAyE,CAAzEkR,EAAA,YAAyEgB,QAAzEpO,EAAA,EAAA4O,aAAcR,QAA2D5I,CAAA,EAArD,KAAI,CAAG,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,KAAK,OAAK,GAAA,uFAMnD4I,EAAAA,MAAAlS,CAAA,EAAM,gDADfqS,qBAWM,MAAA,OATH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,KAAK,OACJ,uBAAOs2F,EAAW,KAAA,CAAA,GAEnBt0F,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAoC,CAApCyS,EAAAA,mBAAoC,MAAA,CAA9B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,mFAK1BW,cAQiBgB,EAAA,MAAAgiB,EAAA,EAAA,CARA,YAAW0yE,GAAoB,mBAC9C,IAMM,CANNn0F,EAAAA,mBAMM,MAAA,CANA,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAa,OAAA,EAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,QAAA,CAAA,CAAA,CAAA,GACvBrM,EAAM,QAAUgO,EAAA,SAAM,MAAM,sBAAvCG,EAAA,mBAIM,MAAA,OAJ0C,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAC1DgC,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,8EC/OhCmnG,GAAYj6F,GAAU,CACjC,GAAGE,GAAU+4F,GAAa,CAAC,SAAS,CAAC,EACrC,KAAMp5F,EACN,SAAUA,EACV,MAAO,MACT,CAAC,EAKYq6F,GAAgBl6F,GAAU,CACrC,GAAGk5F,GACH,KAAMr5F,EACN,SAAUA,EACV,KAAM,CACJ,KAAM,OACN,QAAS,EAAA,CAEb,CAAC,ECFYs6F,GAAa,iHCZpB,MAAArnG,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,KAAM,KACN,SAAU,IAAA,CACX,EAEKrN,EAAQsN,EAAAA,SAAA,EAKR81F,EAAYzlG,EAAAA,OAAOwlG,GAAY,IAAI,EAEnC92F,EAAKtF,GAAc,MAAM,EACzBizB,EAASxsB,MAAI,EAAK,EAClBu3C,EAAev3C,EAAAA,IAAI1R,EAAM,KAAK,EAC9BkmE,EAASx0D,MAAI,EAAK,EAElB+I,EAAOpZ,EAAAA,SAAS,IAAMrB,EAAM,OAAQsnG,GAAA,YAAAA,EAAW,OAAQ,EAAK,EAC5DC,EAAWlmG,EAAAA,SAAS,IAAMrB,EAAM,WAAYsnG,GAAA,YAAAA,EAAW,WAAY,EAAK,EACxE1jG,EAAYvC,EAAAA,SAAS,IAAM,CACzB,MAAAivE,EAAY//D,EAAG,GAAG,OAAO,EAExB,MAAA,CACL,CAAC+/D,CAAS,EAAG,GACb,CAAC,GAAGA,CAAS,YAAY,EAAGtwE,EAAM,SAClC,CAAC,GAAGswE,CAAS,QAAQ,EAAG71D,EAAK,MAC7B,CAAC,GAAG61D,CAAS,UAAU,EAAG,CAACtwE,EAAM,UAAYk+B,EAAO,KACtD,CAAA,CACD,EAaD,GAXAtxB,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPqgE,EAAa,MAAQrgE,EACrB0+G,GAAA,MAAAA,EAAW,eAAc,CAE7B,EACA16F,QAAMsxB,EAAiBt1C,GAAA,CACXulB,EAAAnO,EAAM,SAAWpX,CAAK,CAAA,CACjC,EAEG0+G,EAAW,CACb,MAAMlxF,EAAQtJ,EAAAA,SAAS,CACrB,MAAOm8C,EACP,KAAM7qB,EAAAA,MAAMp+B,EAAO,MAAM,EACzB,KAAMo+B,EAAAA,MAAMp+B,EAAO,MAAM,EACzB,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,cAAe,IAAA,CAChB,EAED4M,EAAA,MACE,IAAM1I,EAAM,MACHtb,GAAA,CACPwtB,EAAM,cAAgBxtB,EAAgBiP,GAAAjP,EAAMiP,CAAI,EAAI,IACtD,EACA,CAAE,UAAW,EAAK,CACpB,EACA+U,EAAA,MAAMq8C,EAAc,IAAM,CACjB/qB,EAAA,MAAQ+qB,EAAa,QAAUq+C,EAAU,aAAA,CACjD,EACD16F,EAAA,MACE,IAAM06F,EAAU,cACP1+G,GAAA,CACAs1C,EAAA,MAAQ+qB,EAAa,QAAUrgE,EAElC,CAACs9E,EAAO,OAAShoC,EAAO,QAC1BgoC,EAAO,MAAQ,GAEnB,EACA,CAAE,UAAW,EAAK,CACpB,EAEAohC,EAAU,aAAalxF,CAAK,EAE5BxB,EAAAA,gBAAgB,IAAM,CACpB0yF,EAAU,aAAalxF,CAAK,CAAA,CAC7B,CAAA,cAMS,EAAAqE,EAAA,OAAS8sF,EAAA,OAAa,CAAArhC,EAAA,QAAYhoC,EAAM,qBADlD7rB,EAAAA,mBAOM,MAAA,OALH,uBAAOzO,EAAS,KAAA,EACjB,KAAK,WACJ,eAAcs6B,EAAM,KAAA,GAErB3rB,aAAaC,EAAA,OAAA,SAAA,0CCpDJg1F,GAAar6F,GAAW,CACnC,OAAQiB,GAAkB,EAC1B,QAAS,MACT,UAAW,MACX,KAAM,MACN,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQ,OACR,UAAW,OACX,SAAU,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAC1C,SAAU,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAC1C,SAAU,CAAC,OAAQ,QAAQ,EAG3B,OAAQrB,EACR,OAAQA,EACR,UAAWA,EACX,QAASA,EACT,QAASA,EACT,QAAS,OACT,aAAcA,EACd,UAAW,OACX,aAAc,OACd,QAASA,EACT,YAAa,OACb,YAAa,OAMb,eAAgB,SAChB,YAAa,OACb,SAAU,OACV,YAAaA,EACb,aAAc,OACd,aAAc,CAAC,OAAQ,MAAM,EAC7B,aAAcA,EACd,aAAcA,EACd,UAAW,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAG3C,UAAW,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAG3C,UAAW,CAAC,OAAQ,QAAQ,EAG5B,UAAW,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAC3C,UAAW,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAC3C,UAAW,CAAC,OAAQ,QAAQ,EAG5B,UAAW,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAC3C,UAAW,CAAC,OAAQ,OAAQ,MAAO,QAAQ,EAC3C,UAAW,CAAC,OAAQ,QAAQ,EAG5B,aAAcA,EACd,aAAcA,EACd,UAAW,OACX,aAAcA,EACd,UAAW,CAAC,OAAQ,MAAM,EAC1B,WAAYA,EACZ,aAAc,CACZ,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,SAAU,SACV,YAAa,CAAC,OAAQ,KAAK,EAC3B,MAAO,OACP,YAAa,OACb,WAAY,SACZ,aAAcA,EACd,SAAUA,EACV,MAAO,OACP,SACEmB,EAEE,EACJ,WAAYA,EAA8C,EAC1D,WAAYA,EAA8C,EAC1D,WAAYA,EAA8C,EAC1D,cAAeA,EAA8C,EAC7D,iBAAkBA,EAA8C,EAChE,WAAYA,EAA8C,EAC1D,cAAeA,EAAwD,EACvE,YAAaA,EAA8C,EAC3D,gBAAiBA,EAA8C,EAC/D,eAAgBA,EAAiD,EACjE,cAAeA,EAAiD,EAChE,UAAWA,EAAiE,EAC5E,aAAcA,EAAkE,EAChF,YAAaA,EAAyE,EACtF,UAAWA,EAAuE,EAClF,YAAaA,EAA+C,EAC5D,YAAaA,EAA+C,EAC5D,YAAaA,EAA+C,EAC5D,eAAgBA,EAA+C,EAC/D,kBAAmBA,EAA+C,EAClE,YAAaA,EAA+C,EAC5D,YAAaA,EAA+C,EAC5D,YAAaA,EAA+C,EAC5D,eAAgBA,EAA+C,EAC/D,kBAAmBA,EAA+C,EAClE,iBAAkBA,EAA+C,EACjE,gBAAiBA,EAA+C,EAChE,eAAgBA,EAA+C,EAC/D,YAAaA,EAA+C,EAC5D,YAAaA,EAA+C,EAC5D,YAAaA,EAA+C,EAC5D,eAAgBA,EAA+C,EAC/D,kBAAmBA,EAA+C,CACpE,CAAC,EAQYu5F,GAAmBt6F,GAAW,CACzC,MAAO,CAAC,OAAQ,MAAM,EACtB,KAAM,OACN,SAAU,SACV,MAAO,CACL,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,MAAOY,GACP,MAAOC,GACP,MAAO,OACP,KAAM,OACN,MAAO,CAAC,OAAQ,MAAM,EACtB,SAAU,OACV,SAAU,OACV,OAAQ,OACR,OAAQ,CACN,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,SAAU,SACV,aAAc,SACd,eAAgB,SAChB,MAAO,OACP,SAAUjB,EACV,aAAcQ,GACd,cAAeA,GACf,WAAY,SACZ,WAAYR,EACZ,WAAY,SACZ,KAAM,OACN,UAAW,OACX,SAAU,OACV,SAAU,SACV,UAAWA,EACX,gBAAiB,SACjB,SAAUA,EACV,UAAW,SACX,aAAcA,CAChB,CAAC,EAiBY26F,GAAwBv6F,GAAW,CAC9C,KAAM,OACN,MAAO,CACL,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,MAAO,OACP,SAAUJ,EACV,UAAW,OACX,SAAU,SACV,SAAU,KACZ,CAAC,EAKY46F,GAAoBx6F,GAAW,CAC1C,MAAO,CAAC,OAAQ,MAAM,EACtB,KAAM,OACN,MAAOY,GACP,MAAOC,GACP,MAAO,OACP,SAAU,SACV,MAAO,OACP,MAAOjB,EACP,KAAM,OACN,SAAU,QACZ,CAAC,ECtOiB,IAAA66F,IAAAA,IAChBA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QAHQA,IAAAA,IAAA,CAAA,CAAA,EAgfX,MAAMC,GAAoB,KAIpBC,GAAc,oBAIdC,GAAgB,sBAChBC,GAAc,oBACdC,GAAoB,oBACpBC,GAAoB,oBAEpBC,GACX,mCAEWz1B,GAAiC,CAAC,QAAS,YAAa,SAAU,MAAM,EAExE01B,GAAiBn7G,GAAWA,ECpgBnCo7G,GAAW,OAAO,KAAKZ,EAAgB,EACvCa,GAAkD,CACtD,MAAO,KACT,EACMC,GAAgC,CACpC,WACA,eACA,iBACA,iBACF,EACMC,GAAgC,CACpC,QACA,QACA,OACA,QACA,WACA,WACA,SACA,QACA,aACA,aACA,WACA,UACF,EACMC,GAA2B,CAAC,OAAQ,SAAU,OAAO,EAErDC,GAAW,CACf,QAAS,KACT,OAAQ,GACR,OAAQ,EACV,EAEAC,GAAel5F,kBAAgB,CAC7B,KAAM,cACN,aAAc,GACd,MAAOg4F,GACP,MAAM93F,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,cAAe0D,EAAQ,CAC5C,MAAO,CACL,QAAS,KACT,UAAW/mB,GAAS,CAACK,GAAOL,CAAK,EACjC,OAAQ,EACV,EACA,KAAM,CACJ,QAAS,GACT,OAAQ,EACV,EACA,SAAU,CACR,QAAS,KACT,OAAQ,GACR,OAAQ,EACV,EACA,MAAO,CACL,QAAS,GACT,OAAQ,EACV,EACA,MAAO,KACP,MAAO,KACP,MAAO,KACP,KAAM,CACJ,QAAS,KACT,UAAWA,GAAS8pF,GAAY,SAAS9pF,CAAK,EAC9C,OAAQ,EACV,EACA,MAAO,KACP,SAAU,GACV,SAAU,KACV,OAAQ,KACR,OAAQ,GACR,SAAU8/G,GACV,aAAcA,GACd,eAAgBA,GAChB,MAAO,CACL,QAAS,EACT,OAAQ,EACV,EACA,SAAU,KACV,aAAc,CACZ,GAAGh7F,GAAe,EAClB,QAAS,IACX,EACA,cAAe,CACb,GAAGA,GAAe,EAClB,QAAS,IACX,EACA,WAAY,CACV,QAAS,KACT,OAAQ,EACV,EACA,WAAY,GACZ,WAAY,CACV,QAAS,KACT,OAAQ,EACV,EACA,KAAM,KACN,UAAW,CACT,QAAS,OACT,UAAW9kB,GAAS6/G,GAAO,SAAS7/G,CAAK,CAC3C,EACA,SAAU,CACR,QAAS,EACT,OAAQ,EACV,EACA,SAAU8/G,GACV,UAAW,GACX,gBAAiBA,GACjB,SAAU,GACV,UAAW,CACT,QAAS,KACT,OAAQ,EACV,EACA,aAAc,EAAA,CACf,EAEKE,EAAgBvnG,EAAAA,SAAS,KACzBrB,EAAM,cACR/E,GAAS,yEAAyE,EAG7E+E,EAAM,eAAiBA,EAAM,cAAgB,UACrD,EAEK6oG,EAAchnG,EAAAA,OAAOkmG,GAAe,IAAI,EACxCe,EAAgBjnG,EAAAA,OAAOsmG,GAAsB,IAAI,EACjDt9G,EAAUiiB,EAAS,SAAA,EAAE,EAE3B,UAAW/jB,KAAOs/G,GAAU,CACtB,GAAAE,GAAa,SAASx/G,CAAG,EAAG,SAE5B,GAAAA,IAAQ,iBAAmBA,IAAQ,eAAgB,CACnD8B,EAAgB,cAAgB+9G,EAAc,MAEhDh8F,QAAMg8F,EAAwBhgH,GAAA,CAC1BiC,EAAgB,cAAgBjC,EAClCigH,GAAA,MAAAA,EAAa,cAAch+G,EAAQ,IAAK,gBAAiBjC,EAAK,CAC/D,EAED,QAAA,CAGI,MAAAmgH,EAAYT,GAAQv/G,CAAG,GAAKA,EAIlC,GAFE8B,EAAQk+G,CAAQ,EAAY/oG,EAAMjX,CAAG,EAEnCA,IAAQ,QAAS,CACb,MAAA2vB,EAAU9vB,GAA2B,CACrCK,GAAOL,CAAK,GAAKoX,EAAM,KACvBnV,EAAQk+G,CAAQ,EAAYngH,EAAQ,SAASoX,EAAM,IAAI,GAEvDnV,EAAQk+G,CAAQ,EAAYngH,CAElC,EAEA8vB,EAAO1Y,EAAM,KAAK,EAClB4M,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACP8vB,EAAO9vB,CAAK,EACZigH,GAAA,MAAAA,EAAa,eAAc,CAE/B,CAAA,SACS9/G,IAAQ,SAAU,CACrB,MAAAigH,EAAoB3nG,EAAAA,SAAS,IAAM,CACvC,GAAIrB,EAAM,OAAQ,CAChB,KAAM,CAAE,KAAAupD,EAAM,GAAG/qD,GAAWwB,EAAM,OAC3B,OAAAxB,CAAA,CAGT,OAAOwB,EAAM,MAAA,CACd,EAED4M,EAAA,MACEo8F,EACA,IAAM,CACJn+G,EAAQ,OAASmV,EAAM,OACvB6oG,GAAA,MAAAA,EAAa,eACf,EACA,CAAE,KAAM,EAAK,CACf,CAAA,KACK,CACC,MAAArwF,EAAUgwF,GAAa,SAASz/G,CAAG,EAEzC6jB,EAAA,MACE,IAAM5M,EAAMjX,CAAG,EACNH,GAAA,CACLiC,EAAQk+G,CAAQ,EAAYngH,EAE1B4vB,EAAAqwF,GAAA,MAAAA,EAAa,gBACbA,GAAA,MAAAA,EAAa,cAAch+G,EAAQ,IAAK9B,EAAKH,EAAK,CAE1D,CAAA,CACF,CAGIgkB,EAAAA,MAAA,IAAM5M,EAAM,SAAUipG,CAAW,EACjCr8F,EAAAA,MAAA,IAAM5M,EAAM,aAAckpG,CAAe,EACzCt8F,EAAAA,MAAA,IAAM5M,EAAM,eAAgBmpG,CAAiB,EAC7Cv8F,EAAAA,MAAA,IAAM5M,EAAM,gBAAiBopG,CAAkB,EAEzCH,EAAA,EACIC,EAAA,EACEC,EAAA,EACCC,EAAA,EAEfN,GACFA,EAAc,eAAej+G,CAAO,EAEpC+pB,EAAAA,gBAAgB,IAAM,CACpBk0F,EAAc,eAAej+G,CAAO,CAAA,CACrC,IAEDg+G,GAAA,MAAAA,EAAa,eAAeh+G,GAE5B+pB,EAAAA,gBAAgB,IAAM,CACpBi0F,GAAA,MAAAA,EAAa,eAAeh+G,EAAO,CACpC,GAUH,SAASo+G,GAAc,CACrB,GAAIp+G,EAAQ,MAAQA,EAAQ,OAAS,SAAU,CAC3CA,EAAgB,SAAW,OAC7B,MAAA,CAGMA,EAAA,SAAYgN,GAAc,CAC5B,GAAA,OAAOqM,EAAM,SAAY,WACpB,OAAAiN,aAAWjN,EAAO,UAAWrM,CAAI,EAGtC,GAAA,OAAOmI,EAAM,UAAa,WACrB,OAAAA,EAAM,SAASnI,CAAI,EAGxB,GAAAhN,EAAQ,OAAS,SACZ,MAAA,GAGT,MAAM4kE,EAAM53D,EAAK,IACXwxG,EAAWxxG,EAAK,SAIhBvE,GAFJ,OAAOzI,EAAQ,WAAc,WAAaA,EAAQ,UAAYu9G,IAG9D,OAAOpoG,EAAM,UAAa,WACtBA,EAAM,SAASyvD,EAAa45C,CAAQ,EACnC55C,EAAsB5kE,EAAQ,GAAqC,CAC1E,EAEA,OAAO5B,GAAOqK,CAAM,EAAI,GAAK,OAAOA,CAAM,CAC5C,CAAA,CAGF,SAAS41G,GAAkB,CACrB,GAAAr+G,EAAQ,OAAS,YAAa,CAC9BA,EAAgB,SAAW,OAC7B,MAAA,CAGFA,EAAQ,aAAuBgN,GACzB,OAAOqM,EAAM,MAAS,WACjBiN,aAAWjN,EAAO,OAAQrM,CAAI,EAGnC,OAAOmI,EAAM,cAAiB,WACzBA,EAAM,aAAanI,CAAI,EAGzBmI,EAAM,IACf,CAGF,SAASmpG,GAAoB,CACvB,OAAOjlG,EAAM,QAAW,YAAc,OAAOlE,EAAM,gBAAmB,WACxEnV,EAAQ,eAAyBgN,GAC3B,OAAOqM,EAAM,QAAW,WACnBiN,aAAWjN,EAAO,SAAUrM,CAAI,EAGlCmI,EAAM,eAAenI,CAAI,EAGlChN,EAAQ,eAAiB,MAC3B,CAGF,SAASu+G,GAAqB,CACxB,OAAOllG,EAAM,SAAY,YAAc,OAAOlE,EAAM,iBAAoB,WAC1EnV,EAAQ,gBAA0BgN,GAC5B,OAAOqM,EAAM,SAAY,WACpBiN,aAAWjN,EAAO,UAAWrM,CAAI,EAGtC,OAAOmI,EAAM,iBAAoB,WAC5BA,EAAM,gBAAgBnI,CAAI,EAG5B,GAGThN,EAAQ,gBAAkB,MAC5B,CAGF,MAAO,IAAM,IAAA,CAEjB,CAAC,ECvTKw9G,GAAW/4F,OAAOlD,KAAKs7F,EAAqB,EAC5Ca,GAA+B,CAAC,WAAY,UAAU,EACtDC,GAA+B,CAAC,QAAS,OAAO,EAEhDc,GAAmB75F,EAAAA,gBAAgB,CACvCjX,KAAM,mBACNi6C,aAAc,GACdzyC,MAAO0nG,GACPh4F,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,cAAe0D,EAAQ,CAC5CnX,KAAM,CACJqX,QAAS,GACTC,OAAQ,EACT,EACDioB,MAAO,CACLloB,QAAS,GACTC,OAAQ,EACT,EACDyvF,MAAO,CACL1vF,QAAS,EACTC,OAAQ,EACT,EACD6+E,SAAU,KACVj5B,UAAW,SACXplD,SAAU,CACRT,QAAS,KACTpD,OAAQ,GACRqD,OAAQ,EACT,EACDhR,SAAU,CACR+Q,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACV,CACF,CAAC,EACK+4F,EAAchnG,EAAAA,OAAOkmG,GAAe,IAAI,EACxCe,EAAgBjnG,EAAAA,OAAOsmG,GAAsB,IAAI,EAEjDoB,EAAUz8F,EAAAA,SAAS,IAAImiF,GAAyB,EAChDnwF,EAAWuC,EAAQ,SAAC,IAAM,CAAC,GAAGkoG,CAAO,CAAC,EACtC1+G,EAAUiiB,EAAAA,SAAS,CAAEhO,SAAAA,CAAS,CAAC,EAErCjU,EAAQ9B,IAAMygH,OAAO,kBAAkB,EAEvC,UAAWzgH,KAAOs/G,GAAU,CAC1B,GAAIE,GAAap4F,SAASpnB,CAAG,EAAG,SAC9B8B,EAAQ9B,CAAG,EAAwCiX,EAAMjX,CAAG,EAE9D,MAAMyvB,EAAUgwF,GAAar4F,SAASpnB,CAAG,EAEzC6jB,EAAAA,MACE,IAAM5M,EAAMjX,CAAG,EACfH,GAAS,CACLiC,EAAQ9B,CAAG,EAAwCH,EACrD4vB,EACIqwF,GAAAA,MAAAA,EAAaY,gBACbZ,GAAAA,MAAAA,EAAaa,cAAc7+G,EAAQ9B,IAAKA,EAAKH,EACnD,CACF,CACF,CAEAgkB,EAAAA,MAAM,IAAM5M,EAAMsQ,SAAU24F,EAAa,CAAEx/D,UAAW,EAAK,CAAC,EAE5D3nC,EAAAA,QAAQqmG,GAAsB,CAC5BwB,eAAAA,EACAC,eAAAA,CACF,CAAC,EAEGd,GACFA,EAAca,eAAe9+G,CAAO,EAEpC+pB,EAAAA,gBAAgB,IAAM,CACpBk0F,EAAcc,eAAe/+G,CAAO,CACtC,CAAC,IAEDg+G,GAAAA,MAAAA,EAAac,eAAe9+G,GAE5B+pB,EAAAA,gBAAgB,IAAM,CACpBi0F,GAAAA,MAAAA,EAAae,eAAe/+G,EAC9B,CAAC,GAGH,SAAS8+G,EAAe32B,EAA4B,CAClDu2B,EAAQ14G,IAAImiF,CAAM,CACpB,CAEA,SAAS42B,EAAe52B,EAA4B,CAClDu2B,EAAQ5Z,OAAO3c,CAAM,CACvB,CAEA,SAASi2B,GAAc,CACrBp+G,EAAQylB,SAAW,IACb,OAAOpM,EAAM2lG,MAAS,WACjB14F,EAAU,WAACjN,EAAO,MAAM,EAG7B,OAAOlE,EAAMsQ,UAAa,WACrBtQ,EAAMsQ,SAAU,EAGlBtQ,EAAMxH,IAEjB,CAEA,SAASw1F,GAAiB,CACxB,OAAOhuF,EAAMlB,SAASxB,IAAI0B,GAAS,CACjC,GAAI,aAAcA,EAChB,OAAAkS,cAAAo4F,GAA6BtqG,EAAK,IAAA,EAGpC,KAAM,CAAEjW,IAAAA,EAAK,GAAGkmF,CAAO,EAAIjwE,EAE3B,OAAAkS,cAAAy3F,GAAAj2F,EAAA,WAAwBu8D,EAAM,CAAA,SAAUlmF,CAAG,CAAA,EAAA,IAAA,CAC7C,CAAC,CACH,CAEA,MAAO,IAAM,CAACooB,EAAAA,WAAWjN,EAAO,SAAS,EAAG,GAAG8pF,GAAgB,CACjE,CACF,CAAC,EC9HKqa,GAAW,OAAO,KAAKV,EAAiB,EACxCW,GAAmD,CACvD,MAAO,KACT,EACMC,GAAiC,CAAC,UAAU,EAC5CC,GAAiC,CAAC,QAAS,WAAY,QAAS,OAAO,EAEvEE,GAAW,CACf,QAAS,KACT,OAAQ,GACR,OAAQ,EACV,EAEAoB,GAAer6F,kBAAgB,CAC7B,KAAM,eACN,MAAOk4F,GACP,MAAMh4F,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,eAAgB0D,EAAQ,CAC7C,MAAO,CACL,QAAS,KACT,UAAW/mB,GAAS,CAACK,GAAOL,CAAK,EACjC,OAAQ,EACV,EACA,MAAO,KACP,MAAO,KACP,MAAO,KACP,SAAU8/G,GACV,MAAO,CACL,QAAS,EACT,OAAQ,EACV,EACA,MAAO,CACL,QAAS,GACT,OAAQ,EACV,EACA,KAAM,KACN,SAAUA,EAAA,CACX,EAEKG,EAAchnG,EAAAA,OAAOkmG,GAAe,IAAI,EACxCl9G,EAAUiiB,EAAS,SAAA,EAAE,EAE3B,UAAW/jB,KAAOs/G,GAAU,CACtB,GAAAE,GAAa,SAASx/G,CAAG,EAAG,SAE1B,MAAAggH,EAAYT,GAAQv/G,CAAG,GAAKA,EAC5ByvB,EAAUgwF,GAAa,SAASz/G,CAAG,EAEvC8B,EAAQk+G,CAAQ,EAAY/oG,EAAMjX,CAAG,EAEvC6jB,EAAA,MACE,IAAM5M,EAAMjX,CAAG,EACNH,GAAA,CACLiC,EAAQk+G,CAAQ,EAAYngH,EAE1B4vB,EAAAqwF,GAAA,MAAAA,EAAa,kBACbA,GAAA,MAAAA,EAAa,eAAeh+G,EAAQ,IAAK9B,EAAKH,EAAK,CAE3D,CAAA,CAGIgkB,EAAAA,MAAA,IAAM5M,EAAM,SAAUipG,CAAW,EAE3BA,EAAA,EACZJ,GAAA,MAAAA,EAAa,gBAAgBh+G,GAE7B+pB,EAAAA,gBAAgB,IAAM,CACpBi0F,GAAA,MAAAA,EAAa,gBAAgBh+G,EAAO,CACrC,EAED,SAASo+G,GAAc,CACrBp+G,EAAQ,SAAmBgN,GACrB,OAAOA,EAAK,OAAO,iBAAoB,WAClCA,EAAK,OAAO,gBAAgB,CACjC,GAAGA,EACH,QAAShN,CAAA,CACV,EAGC,OAAOqZ,EAAM,SAAY,WACpBiN,aAAWjN,EAAO,UAAWrM,CAAI,EAGtC,OAAOmI,EAAM,UAAa,WACrBA,EAAM,SAASnI,CAAI,EAGrB,EACT,CAGF,MAAO,IAAM,IAAA,CAEjB,CAAC,+IC1FD,MAAMmI,EAAQuR,EAWRw4F,EAAeloG,SAAOkmG,EAAa,EACnCiC,EAAanoG,SAAOmmG,EAAW,EAE/BiC,EAAa5oG,EAAAA,SAAS,IAAM0oG,EAAa,QAAQ/pG,EAAM,IAAI,CAAC,eAKxDkS,EAAAA,MAAU3oB,EAAA,EAAC2oB,EAAU,MAAA83F,CAAA,EAAA,QAASz4F,EAAI,IAAA,EAAA,CAAA,iBAD1CY,EAAAA,YAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUa,EAAAA,MAAY63F,CAAA,EAAC,gBACvB,mBAAsBx4F,EAAI,IAAA,EAAA,CAAA,+BAEZW,EAAAA,MAAY63F,CAAA,EAAC,QAAQx4F,EAAI,IAAA,iBAA1CY,cAAuED,EAAAA,MAAApO,EAAA,EAAA,OAAzB,KAAMmmG,EAAU,KAAA,qBAC9D5pE,EAAAA,YAAAluB,EAAAA,YAAoCD,kDAAfX,EAAM,MAAA,CAAA,EAAA,KAAA,EAAA,0DCkDvB24F,GAAW,kQA3DjB,MAAMlqG,EAAQuR,EAuBR,CAAE,MAAA6E,EAAO,QAAA+zF,EAAS,UAAAC,CAAU,EAAIvoG,EAAAA,OAAOimG,EAAW,EAClDiC,EAAeloG,SAAOkmG,EAAa,EAEnCx3F,EAAKtF,GAAc,OAAO,EAC1B3I,EAAS87B,EAAAA,MAAMhoB,EAAO,QAAQ,EAC9B9M,EAAQU,GAAS,EACjB,CAAE,MAAAqrB,CAAM,EAAIX,GAAO,EAEnB21E,EAAgB34F,MAAI,EAAK,EACzB44F,EAAYlsE,EAAAA,MAAMhoB,EAAO,cAAc,EACvC+1D,EAAW9qE,EAAAA,SAAS,IAAM+U,EAAM,WAAW,EAE3Ca,EAAUvF,EAAAA,IAAiB,EAE3B26E,EAAUhrF,EAAAA,SAAS,IAAM+oG,EAAU,cAAcpqG,EAAM,MAAM,CAAC,EAC9DupG,EAAUloG,EAAAA,SAAS,IAChBrB,EAAM,QAAU,OACnBoW,EAAM,iBACNpW,EAAM,QAAU,QACdoW,EAAM,kBACNA,EAAM,aACb,EACKm0F,EAAWlpG,EAAAA,SAAS,IAEtB+U,EAAM,YAAY,IAAIpW,EAAM,OAAS,SAAS,EAAG,IAAI,IAAIA,EAAM,QAAQ,IAAIA,EAAM,KAAK,EAAE,GAAK,CAC3F,QAAS,EACT,QAAS,CACX,CAEH,EACKwqG,EAASnpG,EAAAA,SAAS,IACfgrF,EAAQ,MACXrsF,EAAM,OAAO,KACbA,EAAM,OAAO,MAAQuqG,EAAS,MAAM,SAAWn0F,EAAM,QAAQ,MAClE,EAID,IAAI22D,EAAe,EAEV,SAAA09B,EAAiB3xG,EAAsB2hB,EAAO,GAAO,CACtD,MAAA0D,EAAQ,KAAK,IAAI4uD,GAAgBj0E,EAAQ,MAAQ,GAAK,GAAKA,EAAQ,OAAQoxG,EAAQ,EAEzF,OAACzvF,GACC2vF,EAAU,mBACRh0F,EAAM,QACH,MAAMpW,EAAM,OAAO,MAAOA,EAAM,OAAO,MAAQuqG,EAAS,MAAM,OAAO,EACrE,IAAIv3B,GAAUA,EAAO,GAAG,EAC3B70D,CACF,EAEKA,CAAA,CAGT,KAAM,CAAE,OAAQ+tD,CAAQ,EAAI5xD,GAAU,CACpC,QAAS,GACT,QAAS,CAACxhB,EAASI,IAAU,CAC3B,GAAI,CAACoxG,EAAU,OAASn+B,EAAS,OAASkgB,EAAQ,MAAc,MAAA,GAE1D,MAAAqe,EAAQX,EAAa,gBAAgB,EAE3C,GAAI,CAACW,GAAS,CAACzzF,EAAQ,MAAc,MAAA,GAErCne,EAAQ,OAASA,EAAQ,QAAU4xG,EAAM,wBAAwB,KACjE5xG,EAAQ,MAAQu8B,EAAM,MACP03C,EAAA91D,EAAQ,MAAM,sBAAwB,EAAA,MAErDmzF,EAAU,kBAAkB,EAAI,EACtBA,EAAA,cAActxG,EAAQ,MAAM,EACtCixG,EAAa,cAAc,QAAS,CAClC,GAAGY,EAAkBzxG,CAAK,EAC1B,MAAO6zE,CAAA,CACR,CACH,EACA,OAAQ,CAACj0E,EAASI,IAAU,CAClBJ,EAAA,KAAO,KAAK,IAAIA,EAAQ,OAASi0E,EAAem9B,GAAUpxG,EAAQ,IAAI,EAEpEsxG,EAAA,cAActxG,EAAQ,IAAI,EACpCixG,EAAa,cAAc,OAAQ,CACjC,GAAGY,EAAkBzxG,CAAK,EAC1B,MAAOuxG,EAAiB3xG,EAASsd,EAAM,eAAiB,YAAY,CAAA,CACrE,CACH,EACA,MAAO,CAACtd,EAASI,IAAU,CACzBkxG,EAAU,kBAAkB,EAAK,EACjCL,EAAa,cAAc,MAAO,CAChC,GAAGY,EAAkBzxG,CAAK,EAC1B,MAAOuxG,EAAiB3xG,CAAO,CAAA,CAChC,CAAA,CACH,CACD,EAEK8xG,EAAQvpG,WAAS,IAAMqxE,GAAY,SAAU1yE,EAAM,OAA2B,IAAI,CAAC,EACnF4D,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,IAAIwpG,EAAc,KAEd,OAAA,OAAOz0F,EAAM,WAAc,WAC7By0F,EAAcz0F,EAAM,UAAU,CAC5B,OAAQpW,EAAM,OACd,MAAOA,EAAM,OAAO,SACpB,SAAUA,EAAM,QAAA,CACjB,EAED6qG,EAAcz0F,EAAM,UAGf,CACL7F,EAAG,GAAG,WAAW,EACjB,CACE,CAACA,EAAG,IAAI,YAAa,OAAO,CAAC,EAAG87E,EAAQ,MACxC,CAAC97E,EAAG,IAAI,YAAa,OAAO,CAAC,EAAGq6F,EAAM,MACtC,CAACr6F,EAAG,IAAI,YAAa,QAAQ,CAAC,EAAGq6F,EAAM,OAAS5qG,EAAM,OAAO,YAAc,SAC3E,CAACuQ,EAAG,IAAI,YAAa,OAAO,CAAC,EAAGvQ,EAAM,OAAO,YAAc,QAC3D,CAACuQ,EAAG,IAAI,YAAa,MAAM,CAAC,EAAGi6F,EAAO,KACxC,EACAxqG,EAAM,OAAO,MACb6qG,CACF,CAAA,CACD,EACKC,EAAczpG,EAAAA,SAAS,IACvB,OAAO+U,EAAM,WAAc,WACtBA,EAAM,UAAU,CACrB,OAAQpW,EAAM,OACd,MAAOA,EAAM,OAAO,SACpB,SAAUA,EAAM,QAAA,CACjB,EAGIoW,EAAM,SACd,EACKzF,EAAQtP,EAAAA,SAAS,IAAM,aACrB,MAAA0pG,EACJ/qG,EAAM,QAAU,OACZmqG,EAAQ,gBACRnqG,EAAM,QAAU,QACdmqG,EAAQ,iBACRA,EAAQ,aACV,CAAE,QAAAa,EAAS,QAAAC,CAAQ,EAAIV,EAAS,MAChCW,EAAU,CAACf,EAAQ,eACnBgB,GAAUD,KAAWnqG,EAAAwoG,EAAQ,MAAM,CAAC,IAAf,YAAAxoG,EAAkB,SAAU,SAASqV,EAAM,YAAY,CAAC,GAAK,EAClFg1F,GACJF,KAAWv1F,GAAA5Y,GAAQwsG,EAAQ,KAAK,IAArB,YAAA5zF,GAAwB,SAAU,UAAUS,EAAM,YAAY,CAAC,GAAK,EAC3E+H,EAAQ4sF,EAAY/qG,EAAM,MAAQgrG,CAAO,EAAID,EAAY/qG,EAAM,KAAK,EAEtE,IAAAoe,GAEJ,GAAI6sF,EAAU,EAAG,CACN7sF,GAAA,EAET,QAASh0B,GAAI,EAAGA,GAAI6gH,EAAS,EAAE7gH,GACnBg0B,MAAAxI,GAAAQ,EAAM,OAAO,IAAI,GAAG6xF,EAAiB,GAAGjoG,EAAM,SAAW5V,EAAC,EAAE,IAA5D,YAAAwrB,GAA+D,SAAU,CACrF,CAGK,MAAA,CACL5V,EAAM,OAAO,OAAS,GACtB8qG,EAAY,MACZ,CACE,QAAUE,EAAmB,OAAT,OACpB,MAAO,IAAIhrG,EAAM,OAAO,MAAQ,EAAImrG,IAAYX,EAAO,MAAQY,EAAW,GAAKjtF,CAAK,KACpF,OAAQC,GAAS,GAAGA,EAAM,KAAO,OACjC,WAAYpe,EAAM,OAAO,OAAS,CAACA,EAAM,MAAQ,SAAW,OAC5D,iBACE,CAACoW,EAAM,QAAU40F,EAAU,GAAKhrG,EAAM,MAAQgrG,GAAWD,EAAY,OAAS,EAC1E,EACA,OACN,UAAW,eAAe11E,EAAM,MAAQ,IAAM,EAAE,IAC7Cr1B,EAAM,OAAO,MAAQmrG,EAAU,GAAKJ,EAAY/qG,EAAM,KAAK,CAC9D,WAAA,CAEJ,CAAA,CACD,EACK4P,EAAQvO,EAAAA,SAAS,IAAM,CACvB,IAAAgqG,EAEA,OAAA,OAAOj1F,EAAM,WAAc,WAC7Bi1F,EAAcj1F,EAAM,UAAU,CAC5B,OAAQpW,EAAM,OACd,MAAOA,EAAM,OAAO,SACpB,SAAUA,EAAM,QAAA,CACjB,EAEDqrG,EAAcj1F,EAAM,UAGf,CAAE,GAAIpW,EAAM,OAAO,OAAS,GAAK,GAAIqrG,GAAe,EAAI,CAAA,CAChE,EACKC,EAASjqG,EAAAA,SAAS,IACf+U,EAAM,QAAQ,IAAIpW,EAAM,OAAO,GAAG,GAAM,CAAC,CACjD,EACKxB,EAAS6C,EAAAA,SAAS,IACf+U,EAAM,QAAQ,IAAIpW,EAAM,OAAO,GAAG,GAAM,CAAC,CACjD,EACKurG,EAAkBlqG,EAAAA,SAAS,IAAM,CACrC,MAAMxW,EAAU2T,EAAO,MAAM,SAAW,CAAC,EAEhC,QAAApU,EAAI,EAAG4H,EAAMnH,EAAQ,OAAQT,EAAI4H,EAAK,EAAE5H,EAC3C,GAAAS,EAAQT,CAAC,EAAE,OACN,MAAA,GAIJ,MAAA,EAAA,CACR,EACKohH,EAAmBnqG,EAAAA,SAAS,IAAM,CACtC,GAAI,CAACoqG,EAAYzrG,EAAM,MAAM,EACpB,MAAA,GAGT,MAAM0rG,EAAU,OAAO,OAAOvB,EAAQ,gBAAgB,EAEtD,OACEA,EAAQ,cAAc,SAAWuB,EAAQ,QACzC,CAAC,OAAO,OAAOvB,EAAQ,gBAAgB,EAAE,SAAS,EAAK,CAAA,CAE1D,EAEKwB,EAAiB,IAAMpvG,GAAcwtG,EAAa,cAAc,EAEtE,SAAS0B,EAAYz4B,EAAiD,CACpE,MAAO,CAACqZ,EAAQ,OAAUrZ,EAA2B,OAAS,WAAA,CAGhE,SAAS23B,EAAkBzxG,EAAc,CAChC,MAAA,CACL,OAAQ8G,EAAM,OACd,MAAOA,EAAM,OAAO,SACpB,MAAA9G,CACF,CAAA,CAGF,SAASuiE,EAAiBviE,EAAmB,CAC3C6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAASwiE,EAAiBxiE,EAAmB,CAC3C6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAAS8tD,EAAY9tD,EAAmB,CACtC6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAAS0yG,EAAe1yG,EAAmB,CACzC6wG,GAAA,MAAAA,EAAc,cAAc,WAAYY,EAAkBzxG,CAAK,EAAC,CAGlE,SAAS2yG,GAAkB3yG,EAAmB,CAC5C6wG,GAAA,MAAAA,EAAc,cAAc,cAAeY,EAAkBzxG,CAAK,EAAC,CAGrE,SAAS4yG,IAAgB,CACjB,MAAA/iH,EAAMiX,EAAM,OAAO,IACnBnX,EAAOyiH,EAAO,MAAM,OAAS,MAAQ,KAAO,MAExClB,EAAA,WAAWrhH,EAAKF,CAAI,EAC9BkhH,EAAa,YAAY,CAAA,CAG3B,SAASgC,GAAiB,CAClB,MAAAhjH,EAAMiX,EAAM,OAAO,IACnBnX,EAAOyiH,EAAO,MAAM,OAAS,OAAS,KAAO,OAEzClB,EAAA,WAAWrhH,EAAKF,CAAI,EAC9BkhH,EAAa,YAAY,CAAA,CAG3B,SAASiC,GAAapjH,EAAsC,CAC1DwhH,EAAU,aAAapqG,EAAM,OAAO,IAAKpX,CAAK,CAAA,CAGvC,SAAAqjH,GAAuBrjH,EAAwBs1C,EAAiB,CACvEksE,EAAU,uBAAuB,CAC/B,IAAKpqG,EAAM,OAAO,IAClB,MAAApX,EACA,OAAAs1C,EACA,cAAe,EAAA,CAChB,EACD8tE,GAAapjH,CAAK,EAClByhH,EAAc,MAAQ,GACtBN,EAAa,cAAc,CAAA,CAGpB,SAAAmC,GAAkBtjH,EAAwBm1E,EAAkB,CACnEqsC,EAAU,uBAAuB,CAC/B,IAAKpqG,EAAM,OAAO,IAClB,MAAApX,EACA,OAAQm1E,CAAA,CACT,CAAA,CAGH,SAASouC,IAAuB,CAC9B,MAAMthH,EAAU2T,EAAO,MAAM,SAAW,CAAC,EACnC4tG,EAAe,CAAC,EAEb,QAAAhiH,EAAI,EAAG4H,EAAMnH,EAAQ,OAAQT,EAAI4H,EAAK,EAAE5H,EAAG,CAC5C,MAAA84D,EAASr4D,EAAQT,CAAC,EAEpB84D,EAAO,QACIkpD,EAAA,KAAKlpD,EAAO,KAAK,CAChC,CAGF8oD,GAAaI,CAAY,EACzB/B,EAAc,MAAQ,GACtBN,EAAa,cAAc,CAAA,CAG7B,SAASsC,IAAoB,CAC3BhC,EAAc,MAAQ,GACtB2B,GAAa,IAAI,EACjB5B,EAAU,uBAAuB,CAC/B,IAAKpqG,EAAM,OAAO,IAClB,MAAO,KACP,cAAe,EAAA,CAChB,EACD+pG,EAAa,cAAc,CAAA,CAG7B,SAASuC,IAAoB,CAC3BlC,EAAU,eAAe,EACzBL,EAAa,gBAAgB3zF,EAAM,WAAYA,EAAM,OAAO,CAAA,CAG9D,SAASm2F,GAAiBv0G,EAA4B,SAC1CoyG,EAAA,cACRpqG,EAAM,IAAI,IACVA,EAAM,OAAO,OACZ2V,GAAA5U,EAAA/I,EAAM,gBAAN,YAAA+I,EAAsB,KAAtB,YAAA4U,EAA0B,YAAa3d,EAAM,YAAY,QAAUoe,EAAM,WAC5E,CAAA,2BAKA,EAAA/D,EAAA,mBAiNM,MAjNNK,EAAA,WAiNM9C,EAhNS,MAAA,SACT,UAAJ,IAAIqH,EACH,MAAOrT,EAAS,MACjB,KAAK,eACL,MAAM,MACL,QAAS2mG,QAAS,YAAgBA,EAAQ,MAAC,QAAU,OACrD,QAASA,QAAS,YAAgBA,EAAQ,MAAC,QAAU,OACrD,MAAO55F,EAAK,MACZ,aAAmB07E,EAAO,OAAIif,EAAM,MAAC,KAAeA,EAAA,MAAO,KAAiBA,EAAA,MAAO,OAAI,sCAA6F,OASpL,aAAY7vC,EACZ,aAAYC,EACZ,QAAO1U,EACP,WAAU4kD,EACV,cAAaC,GACb,gBAAeF,CAAA,IAGRp6F,EAAA,OAAO,QAAK,iBADpBc,qBAKO,MAAA,OAHJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACb,KAAK,OACL,cAAA,yCAEck7F,EAAYl6F,EAAM,MAAA,iBAAlCc,EAAA,mBAaWqsB,WAAA,CAAA,IAAA,GAAA,CAZGntB,EAAA,OAAO,wDAAnBc,qBAWM,MAAA,OAX4B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAC5CW,cASYgB,EAAAA,MAAAysD,EAAA,EAAA,CARV,QAAA,GACA,QAAA,GACC,MAAKrsD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EACZ,QAAS2B,EAAAA,MAAKkE,CAAA,EAAC,WACf,QAASlE,EAAAA,MAAKkE,CAAA,EAAC,QACf,SAAUo1F,EAAgB,MAC1B,KAAMj6F,EAAM,OAAC,eAAa,UAC1B,wBAAe+6F,GAAiB,CAAA,SAAA,CAAA,CAAA,oFAIvCn6F,EAAAA,YAwJiBD,EAAAA,MAAAgiB,EAAA,EAAA,OAtJd,SAAU3iB,EAAM,OAAC,UAAYW,EAAA,MAAAkE,CAAA,EAAM,SACnC,YAAWm2F,EAAA,qBAEZ,IAkJO,CAlJP95F,EAAAA,mBAkJO,OAAA,CAjJJ,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA+B2B,QAAE3B,CAAA,EAAC,IAA6B,UAAA,UAAA,CAAA,EAAAgB,EAAA,OAAO,UAAYW,EAAA,MAAKkE,CAAA,EAAC,aAM1G7E,EAAA,OAAO,UAAYW,EAAAA,MAAAkE,CAAA,EAAM,wBADjCjE,EAAAA,YAmBWD,EAAA,MAAA9M,EAAA,EAAA,OAjBT,QAAA,GACC,MAAKkN,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACZ,gBAAe2B,EAAAA,MAAKkE,CAAA,EAAC,aACrB,gBAAelE,EAAAA,MAAKkE,CAAA,EAAC,YAAA,qBAEtB,IAGY,CAFJi2E,EAAA,OAAWn6E,EAAAA,MAAA3oB,EAAA,EAAYgoB,EAAA,OAAe,QAAQ,iBADtDY,EAGY,YAAAD,EAAA,MAAAb,EAAA,EAAA,OADT,SAAWE,EAAM,OAAS,QAAA,wBAGhBW,EAAU,MAAA3oB,EAAA,EAACgoB,EAAM,OAAC,YAAY,iBAD3CY,EAAAA,YAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUE,EAAM,OAAC,aACjB,KAAI,CAAA,OAAIA,EAAM,OAAA,MAAEA,EAAK,KAAA,+CAExBc,EAEW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,EAAAA,gBAAAC,EAAAA,gBAAArB,EAAA,OAAO,IAAI,EAAA,CAAA,4EAGlBc,EAaW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAXD2tD,EAAA,OAAWn6E,EAAAA,MAAA3oB,EAAA,EAAYgoB,EAAA,OAAe,QAAQ,iBADtDY,EAGY,YAAAD,EAAA,MAAAb,EAAA,EAAA,OADT,SAAWE,EAAM,OAAS,QAAA,wBAGhBW,EAAU,MAAA3oB,EAAA,EAACgoB,EAAM,OAAC,YAAY,iBAD3CY,EAAAA,YAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUE,EAAM,OAAC,aACjB,KAAI,CAAA,OAAIA,EAAM,OAAA,MAAEA,EAAK,KAAA,+CAExBc,EAEW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,EAAAA,gBAAAC,EAAAA,gBAAArB,EAAA,OAAO,IAAI,EAAA,CAAA,cAGD86E,EAAO,iDAAxBh6E,qBAyGWqsB,WAAA,CAAA,IAAA,GAAA,CAxGE4sE,EAAA,MAAO,oBAAlBj5F,EAAAA,mBAmBM,MAAA,OAnBmB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GACnCkC,EAAAA,mBAQO,OAAA,CAPJ,MAAKH,EAAAA,eAAA,CAAqB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,KAAA,CAAA,EAAA,GAA2C,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA0B,SAAA,QAAA,CAAA,EAAA+6F,EAAA,MAAO,OAAI,KAAA,GAInH,uBAAOQ,GAAa,EAAA,GAErB56F,EAAAA,YAA0Ds7F,GAAA,CAA/C,KAAK,MAAO,OAAQt6F,EAAAA,MAAK5I,CAAA,EAAC,OAAA,yBAEvCmJ,EAAAA,mBAQO,OAAA,CAPJ,MAAKH,EAAAA,eAAA,CAAqB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,MAAA,CAAA,EAAA,GAA4C,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA0B,SAAA,QAAA,CAAA,EAAA+6F,EAAA,MAAO,OAAI,MAAA,GAIpH,uBAAOS,EAAc,EAAA,GAEtB76F,EAAAA,YAA6Ds7F,GAAA,CAAlD,KAAK,OAAQ,OAAQt6F,EAAAA,MAAK5I,CAAA,EAAC,SAAA,0DAG1B9K,EAAA,MAAO,oBAAvB6T,qBAmFWqsB,WAAA,CAAA,IAAA,GAAA,CAjFDxsB,EAAAA,MAAU3oB,EAAA,EAACgoB,EAAM,OAAC,cAAc,iBADxCY,EAAAA,YAIYD,EAAA,MAAAb,EAAA,EAAA,OAFT,SAAUE,EAAM,OAAC,eACjB,aAAQA,EAAM,OAAA,MAAEA,QAAO,OAAA/S,EAAA,qBAAoB,+CAE9C2T,EAAAA,YA4EUD,EAAA,MAAA6zC,EAAA,EAAA,OA1EA,QAASskD,EAAa,wCAAbA,EAAa,MAAArvD,GAC9B,SAAA,GACA,UAAU,SACV,QAAQ,QACP,MAAK1oC,EAAAA,eAAA,CAAqB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,EAAA,IAAoC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,SAAA,SAAA,CAAA,EAAwB85F,EAAa,MAAmB,CAAAn4F,EAAA,MAAA3B,CAAA,EAAG,IAA0B,SAAA,QAAA,CAAA,EAAA/R,EAAA,MAAO,MAAA,GAKrK,YAAS,CAAqB,CAAA0T,EAAA,MAAA3B,CAAA,EAAG,GAAE,gBAAA,CAAA,EAAA,GAA4C,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,GAAkC,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAoC,iBAAA,UAAA,CAAA,EAAA/R,EAAA,MAAO,QAAA,kBAM1J,kBACT,IAEM,CAFNiU,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,gBAAA,CAAA,CAAA,GAChBW,EAAAA,YAA4Ds7F,GAAA,CAAjD,KAAK,SAAU,OAAQt6F,EAAAA,MAAK5I,CAAA,EAAC,MAAA,iCAG5B9K,EAAA,MAAO,eAAW,uBAChC,IAUM,CAVNiU,EAAAA,mBAUM,MAAA,CAVD,SAAA,GAAU,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,CAAA,IACzB8vB,EAAAA,UAAA,EAAA,EAAAhuB,EAQY,mBAAAqsB,WAPK,KAAAC,EAAA,WAAAngC,EAAA,MAAO,QAAfzG,kBADToa,EAAAA,YAQYD,EAAA,MAAAysD,EAAA,EAAA,CANT,IAAK5mE,EAAK,MACX,QAAA,GACC,QAASA,EAAK,OACd,MAAOA,EAAK,MACZ,MAAOA,EAAK,MACZ,YAAQm0G,GAAkBn0G,EAAK,MAAOijD,CAAM,CAAA,6DAGjDvoC,EAAAA,mBAkBM,MAAA,CAlBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,gBAAA,CAAA,CAAA,GAChBW,cAQSgB,EAAAA,MAAA45C,EAAA,EAAA,CAPP,QAAA,GACA,KAAA,GACA,KAAK,QACJ,UAAWy/C,EAAe,MAC1B,uBAAOY,GAAoB,EAAA,qBAE5B,IAA0B,CAAvBx5F,EAAAA,gBAAAC,EAAAA,gBAAAtQ,EAAA,MAAO,aAAa,EAAA,CAAA,CAAA,wBAEzB4O,cAOSgB,EAAAA,MAAA45C,EAAA,EAAA,CANP,QAAA,GACA,KAAA,GACA,KAAK,QACJ,QAAOugD,EAAA,qBAER,IAAwB,CAArB15F,EAAAA,gBAAAC,EAAAA,gBAAAtQ,EAAA,MAAO,WAAW,EAAA,CAAA,CAAA,8BAIT,uBAChB,IAQM,CARNmQ,EAAAA,mBAQM,MAAA,CAPH,MAAKH,EAAAA,eAAA,CAAyB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,aAAA,CAAA,EAAA,GAA6C,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAgC,cAAA,QAAA,CAAA,EAAA,CAAA/R,EAAA,MAAO,MAAA,GAI1H,QAAO6tG,IAELz5F,EAAA,gBAAAtQ,EAAA,MAAO,SAAS,EAAA,CAAA,GAErB+9B,EAAAA,UAAA,EAAA,EAAAhuB,EAUM,mBAAAqsB,WATW,KAAAC,EAAA,WAAAngC,EAAA,MAAO,QAAfzG,kBADTsa,EAAA,mBAUM,MAAA,CARH,IAAKta,EAAK,MACV,MAAKua,EAAAA,eAAA,CAAyB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,aAAA,CAAA,EAAA,GAA6C,CAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAA+B,cAAA,QAAA,CAAA,EAAAxY,EAAK,MAAA,GAIvH,QAAKijD,GAAEixD,GAAuBl0G,EAAK,MAAK,CAAGA,EAAK,MAAM,GAEpD6a,EAAA,gBAAA7a,EAAK,KAAK,EAAA,GAAA24D,EAAA,kIASlB,CAAA27B,EAAA,OAAWie,EAAS,OAAA,CAAKM,SAAU,CAAAr5F,EAAA,OAAO,oBADnDc,EAAAA,mBAIO,MAAA,eAFD,UAAJ,IAAI65D,EACH,MAAK55D,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,wCAGPi6F,EAAM,qBADdn4F,EAAAA,mBAKO,MAAA,OAHJ,wBAAQH,EAAE,MAAA3B,CAAA,EAAC,GAAgB,UAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,WAAA,OAAA,CAAA,CAAA,EAClC,KAAK,OACL,cAAA,uTChkBN,MAAMvQ,EAAQuR,EAuBR,CAAE,MAAA6E,EAAO,QAAA+zF,EAAS,UAAAC,CAAU,EAAIvoG,EAAAA,OAAOimG,EAAW,EAClDe,EAAchnG,SAAOkmG,EAAa,EAElCx3F,EAAKtF,GAAc,OAAO,EAE1B,CAAE,MAAAtP,CAAM,EAAI66B,GAAc,EAC1B06B,EAAWx/C,MAAI,EAAK,EACpB+6F,EAAa/6F,MAAI,EAAK,EAEtBuF,EAAUvF,EAAAA,IAAiB,EAC3Bg7F,EAAQh7F,EAAAA,IAAiB,EACzBi7F,EAAWj7F,EAAAA,IAAiB,EAE5BmoB,EAAW/sB,EAAAA,SAAS,CACxB,GAAImK,EACJ,IAAKmnB,EAAAA,MAAMp+B,EAAO,KAAK,CAAA,CACxB,EAEK4sG,EAASvrG,EAAA,SAAS,IAAMrB,EAAM,IAAI,GAAG,EACrC6sG,EAAUxrG,WAAS,IAAOrB,EAAM,OAAS,OAASA,EAAM,OAAS,OAAS,MAAU,EACpF4D,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,IAAIwpG,GAAc,KAEd,OAACgC,EAAQ,QACP,OAAOz2F,EAAM,UAAa,WAC5By0F,GAAcz0F,EAAM,SAASpW,EAAM,IAAI,KAAMA,EAAM,KAAK,EAExD6qG,GAAcz0F,EAAM,UAIjB,CACL7F,EAAG,GAAG,KAAK,EACX,CACE,CAACA,EAAG,IAAI,MAAO,OAAO,CAAC,EAAG6F,EAAM,WAAaA,EAAM,UAAY,EAC/D,CAAC7F,EAAG,IAAI,MAAO,OAAO,CAAC,EACrB,CAACs8F,EAAQ,OAASz2F,EAAM,WAAaw2F,EAAO,QAAUx2F,EAAM,cAC9D,CAAC7F,EAAG,IAAI,MAAO,QAAQ,CAAC,EAAG6F,EAAM,QAAUpW,EAAM,MAAQ,IAAM,EAC/D,CAACuQ,EAAG,IAAI,MAAO,SAAS,CAAC,EAAGvQ,EAAM,IAAI,QACtC,CAACuQ,EAAG,IAAI,MAAO,UAAU,CAAC,EAAG2gD,EAAS,MACtC,CAAC3gD,EAAG,IAAI,MAAO,WAAW,CAAC,EAAGk8F,EAAW,KAC3C,EACA5B,EACF,CAAA,CACD,EACKiC,EAAYzrG,EAAA,SAAS,IACzB,KAAK,IAAI,GAAG,OAAO,OAAOrB,EAAM,IAAI,aAAe,EAAE,EAAGoW,EAAM,YAAY,CAC5E,EACMzF,EAAQtP,EAAAA,SAAS,IAAM,CAC3B,IAAIypG,GAAmB,GAEnB,OAAC+B,EAAQ,QACP,OAAOz2F,EAAM,UAAa,WAC5B00F,GAAc10F,EAAM,SAASpW,EAAM,IAAI,KAAMA,EAAM,KAAK,EAExD8qG,GAAc10F,EAAM,UAIjB,CACL00F,GACA,CACE,OAAS10F,EAAM,UAAqC,GAAGA,EAAM,SAAS,KAA3C,GAAG02F,EAAU,KAAK,KAC7C,UAAW12F,EAAM,UAAY,OAAY,GAAGA,EAAM,YAAY,KAC9D,OAAQ,GAAA,CAEZ,CAAA,CACD,EACKxG,EAAQvO,EAAAA,SAAS,IAChBwrG,EAAQ,MAQN,KAPD,OAAOz2F,EAAM,UAAa,WACrBA,EAAM,SAASpW,EAAM,IAAI,KAAMA,EAAM,KAAK,EAE1CoW,EAAM,QAKlB,EACK22F,EAAa1rG,EAAAA,SAAS,IAAM,CAChC,GAAIrB,EAAM,QAAUA,EAAM,OAAe,OAGnCoW,EAAA,cAEN,MAAMkL,GACJlL,EAAM,cAAgB,CAACy2F,EAAQ,OAAS7sG,EAAM,MAAQoW,EAAM,aAAa,IAAIpW,EAAM,KAAK,EAAI,EAEvF,MAAA,CACL,UAAWshB,GAAS,kBAAkBA,EAAM,SAAW,MACzD,CAAA,CACD,EACK0rF,EAAgB3rG,EAAAA,SAAS,IACtB8oG,EAAQ,eAAiB,CAACA,EAAQ,gBAAgB,IAAIyC,EAAO,KAAK,CAC1E,EACKK,EAAe5rG,EAAAA,SAAS,IAAM,CAACwrG,EAAQ,OAASz2F,EAAM,YAAY,EAClE82F,EAAY7rG,WAAS,IAAM,CAACwrG,EAAQ,QAAUz2F,EAAM,cAAgB42F,EAAc,MAAM,EACxFG,EAAiB9rG,EAAAA,SAAS,IAAM+U,EAAM,cAAc,EACpDg3F,EAAY/rG,EAAAA,SAAS,IACrBrB,EAAM,QAAUA,EAAM,QAAU,CAACmqG,EAAQ,aAAqB,GAC9D/zF,EAAM,kBAAkB,OAAepW,EAAM,QAAU,QACvDoW,EAAM,iBAAiB,OAAepW,EAAM,QAAU,OAEnD,CAAC,CAACoW,EAAM,cAAc,QAAU,CAACpW,EAAM,KAC/C,EAED,SAASqtG,GAAkB,CACrB,IAAAt2B,GAEA/2E,EAAM,IAAI,UAAY2sG,EAAS,MACjC51B,GAAe41B,EAAS,MAAM,aAEf51B,GAAA,EAGbA,KAAiB/2E,EAAM,IAAI,eAC7BoqG,EAAU,WAAWwC,EAAO,MAAO,eAAgB71B,EAAY,EAC/Du2B,EAAkB,EAAI,EACxB,CAGO,SAAAA,EAAkBx2F,GAAQ,GAAO,CACpC,GAAAV,EAAM,cAAgB+zF,EAAQ,YAAY,IAAIyC,EAAO,KAAK,IAAM91F,IAAS,CAAC9W,EAAM,OAAQ,CAC1F,MAAMoe,GAASpe,EAAM,IAAI,OAASA,EAAM,IAAI,aACtCpP,GAAOwlB,EAAM,aACbvW,GAAOjP,GAAK,IAAIoP,EAAM,KAAK,EAE7Boe,KAAWve,KACbjP,GAAK,IAAIoP,EAAM,MAAOoe,GAASve,EAAI,EACnCuqG,EAAU,kBAAkB,EAC5BA,EAAU,oBAAoB,EAChC,CACF,CAGF,SAASj2E,EAAan8B,GAA4B,WAChD,MAAMomB,KAASzI,IAAA5U,GAAA/I,GAAM,gBAAN,YAAA+I,GAAsB,KAAtB,YAAA4U,GAA0B,YAAa3d,GAAM,YAAY,OACxEoyG,EAAU,WAAWwC,EAAO,MAAO,SAAUxuF,EAAM,EAClD,CAAAyuF,EAAQ,OAASS,EAAkB,CAAA,CAGtC5hG,EAAAA,YAAY,IAAM,CACZ1L,EAAM,QAAUA,EAAM,SAE1BoqG,EAAU,WAAWwC,EAAO,MAAO,SAAUx2F,EAAM,WAAa02F,EAAU,KAAK,EAC9E,CAAAD,EAAQ,OAASS,EAAkB,EACpCh6F,EAAAA,SAAS,IAAM,CACb85F,EAAU,OAASC,EAAgB,CAAA,CACpC,EAAA,CACF,EAED54F,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS,IAAM,CACb82F,EAAU,WAAWwC,EAAO,MAAO,SAAUx2F,EAAM,WAAa02F,EAAU,KAAK,EAC/Ex5F,EAAAA,SAAS,IAAM,CACb85F,EAAU,OAASC,EAAgB,CAAA,CACpC,CAAA,CACF,CAAA,CACF,EAED,SAAS1C,EAAkBzxG,GAAc,CAChC,MAAA,CACL,IAAK8G,EAAM,IAAI,KACf,IAAKA,EAAM,IAAI,IACf,MAAOA,EAAM,MACb,MAAA9G,EACF,CAAA,CAGF,SAASuiE,EAAiBviE,GAAmB,CACjCkxG,EAAA,iBAAiBwC,EAAO,KAAK,EAEnC,CAACC,EAAQ,OAAShE,GACpBA,EAAY,aAAa,QAAS8B,EAAkBzxG,EAAK,CAAC,CAC5D,CAGF,SAASwiE,EAAiBxiE,GAAmB,CAC3CkxG,EAAU,iBAAiB,IAAI,EAE3B,CAACyC,EAAQ,OAAShE,GACpBA,EAAY,aAAa,QAAS8B,EAAkBzxG,EAAK,CAAC,CAC5D,CAGF,SAAS8tD,EAAY9tD,GAAmB,CAClC,CAAC2zG,EAAQ,OAAShE,GACpBA,EAAY,aAAa,QAAS8B,EAAkBzxG,EAAK,CAAC,CAC5D,CAGF,SAAS0yG,EAAe1yG,GAAmB,CACrC,CAAC2zG,EAAQ,OAAShE,GACpBA,EAAY,aAAa,WAAY8B,EAAkBzxG,EAAK,CAAC,CAC/D,CAGF,SAAS2yG,EAAkB3yG,GAAmB,CACxC,CAAC2zG,EAAQ,OAAShE,GACpBA,EAAY,aAAa,cAAe8B,EAAkBzxG,EAAK,CAAC,CAClE,CAGF,SAASq0G,GAAoB,CACpB,OAAAL,EAAU,OAAS92F,EAAM,QAAA,CAGlC,SAASmiD,EAAgBr/D,GAAkB,CACrC,CAACg0G,EAAU,OAAS,CAACF,EAAc,QAEvC97C,EAAS,MAAQ,GACL23C,EAAA,mBAAmBhvE,EAAU3gC,EAAK,EAAA,CAGhD,SAASs0G,GAAet0G,GAAkB,CACpC,CAACq0G,EAAkB,GAAMP,EAAc,OAAS,CAAC7C,EAAQ,cAE7D,aAAaxuG,EAAM,IAAI,EACvBzC,GAAM,gBAAgB,EACtBA,GAAM,eAAe,EAErBuzG,EAAW,MAAQ,GAEP5D,EAAA,kBAAkBhvE,EAAU3gC,EAAK,EAAA,CAG/C,SAASu0G,GAAWv0G,GAAkB,CAC/Bq0G,MAEL,aAAa5xG,EAAM,IAAI,EACvBzC,GAAM,gBAAgB,EACtBA,GAAM,eAAe,EAErBuzG,EAAW,MAAQ,GAEP5D,EAAA,cAAchvE,EAAU3gC,EAAK,EACzCoa,EAAA,SAAS,IAAM82F,EAAU,WAAWwC,EAAO,MAAO,EAAK,CAAC,EAAA,CAG1D,SAASj0C,EAAcz/D,GAAkB,CAClCq0G,MAELr0G,GAAM,gBAAgB,EACtBg4D,EAAS,MAAQ,GAEjB23C,EAAY,iBAAiB3vG,EAAK,EAClCoa,EAAA,SAAS,IAAM82F,EAAU,WAAWwC,EAAO,MAAO,EAAK,CAAC,EAAA,CAG1D,SAASc,GAAgBx0G,GAAkB,CACpCq0G,MAEL,aAAa5xG,EAAM,IAAI,EACvBzC,GAAM,eAAe,EAEfyC,EAAA,KAAO,WAAW,IAAM,CAC5B8wG,EAAW,MAAQ,IAClB,GAAG,EAAA,CAGR,SAASkB,IAAc,CACrBvD,EAAU,WAAWwC,EAAO,MAAO,gBAAiB,EAAK,CAAA,gBAMhDr7F,EAAA,IAAI,kDADbc,qBA6DM,MAAA,eA3DA,UAAJ,IAAI4E,EACH,MAAK3E,EAAAA,eAAA,CAAW,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,EAAA,GAAyB,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA0B,QAAA,SAAA,CAAA,EAAAgB,EAAA,IAAI,QAAgB,CAAAW,EAAA,MAAA3B,CAAA,EAAG,IAAuB,QAAA,MAAA,CAAA,EAAAgB,EAAA,IAAI,IAAA,GAK9H,KAAK,MACJ,UAAW07F,EAAA,OAAgB17F,EAAA,IAAI,SAC/B,uBAAOw7F,EAAU,KAAA,EACjB,aAAYtxC,EACZ,aAAYC,EACZ,QAAO1U,EACP,WAAU4kD,EACV,cAAaC,EACb,4BAAgBtzC,EAAe,CAAA,MAAA,CAAA,EAC/B,WAAUi1C,GACV,OAAMC,GACN,UAAS90C,EACT,YAAW+0C,EAAA,GAEZx8F,cASiBgB,EAAA,MAAAgiB,EAAA,EAAA,CATA,YAAWC,GAAY,mBACtC,IAOM,CAPN1hB,EAAAA,mBAOM,MAPNC,aAOM9C,EANS,MAAA,SACT,QAAJ,IAAI88F,EACH,MAAO9oG,EAAS,MAChB,MAAO+M,EAAK,KAAA,IAEb4B,aAAaC,GAAA,OAAA,SAAA,CAAA,cAIT46F,EAAS,qBADjBj7F,EAAAA,YA4BqBD,EAAAA,MAAAwpB,EAAA,EAAA,OA1BlB,SAAQ,CAAGnqB,EAAG,IAAC,cACf,QAAO87F,EACP,QAAOA,EACP,aAAaM,GACb,aAAaA,EAAA,qBAEd,IAmBM,CAlBEp8F,EAAA,IAAI,wBADZc,EAAAA,mBAmBM,MAAA,eAjBA,WAAJ,IAAIs6F,EACH,MAAKr6F,EAAA,eAAA,CAAGJ,WAAG,eAAgBX,EAAK,QAAA,SAAgBW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,WAAA,OAAA,CAAA,CAAA,CAAA,GAEvDW,cAaiBgB,EAAAA,MAAAgiB,EAAA,EAAA,CAbA,SAAU3iB,EAAG,IAAC,cAAgB,YAAW87F,CAAA,qBACxD,IAWM,CAXN56F,EAAAA,mBAWM,MAAA,CAXA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,kBAAA,CAAA,CAAA,GAER2B,EAAAA,MAAA3oB,EAAA,EAAW2oB,QAAAi4F,CAAA,EAAQ,aAAc,QAAQ,iBADjDh4F,EAAAA,YAIYD,EAAA,MAAAb,EAAA,EAAA,OAFT,SAAUa,EAAA,MAAAi4F,CAAA,EAAQ,aAAc,SAChC,KAA0C,CAAA,UAAA,EAAA,WAAA,EAAA,IAAA54F,EAAA,IAAI,cAAgBA,EAAK,KAAA,CAAA,+BAGzDW,QAAA3oB,EAAA,EAAW4jH,EAAc,KAAA,iBADtCh7F,EAAAA,YAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAU87F,EAAc,MACxB,KAA0C,CAAA,UAAA,EAAA,WAAA,EAAA,IAAA57F,EAAA,IAAI,cAAgBA,EAAK,KAAA,CAAA,oSC5VlF,MAAMvR,EAAQuR,EAOR,CAAE,MAAA6E,EAAO,QAAA+zF,EAAS,UAAAC,CAAU,EAAIvoG,EAAAA,OAAOimG,EAAW,EAElDv3F,EAAKtF,GAAc,OAAO,EAC1B2iG,EAAavsG,EAAAA,SAAS,IAAM,CAC1B,MAAAjQ,EAAOglB,EAAM,iBAAiB,OAC9B/kB,EAAQ+kB,EAAM,WAAW,CAAC,EAAE,OAASA,EAAM,kBAAkB,OAE/D,OAAApW,EAAM,QAAU,OACXoW,EAAM,WAAW,IAAImzF,GAAWA,EAAQ,MAAM,EAAGn4G,CAAI,CAAC,EACpD4O,EAAM,QAAU,QAClBoW,EAAM,WAAW,IAAImzF,GAAWA,EAAQ,MAAMl4G,EAAO+kB,EAAM,WAAW,CAAC,EAAE,MAAM,CAAC,EAGlFA,EAAM,WAAW,IAAImzF,GAAWA,EAAQ,MAAMn4G,EAAMC,CAAK,CAAC,CAAA,CAClE,EACKk4G,EAAUloG,EAAAA,SAAS,IAChBrB,EAAM,QAAU,OACnBoW,EAAM,iBACNpW,EAAM,QAAU,QACdoW,EAAM,kBACNA,EAAM,aACb,EACKzF,EAAQtP,EAAAA,SAAS,IAAM,SAC3B,MAAM8c,EACJne,EAAM,QAAU,OACZjD,GAAQotG,EAAQ,eAAe,EAC/BnqG,EAAM,QAAU,QACdjD,GAAQotG,EAAQ,gBAAgB,EAChCptG,GAAQotG,EAAQ,YAAY,EAC9BgB,IAAUpqG,EAAAwoG,EAAQ,MAAM,CAAC,IAAf,YAAAxoG,EAAkB,SAAU,QAASqV,EAAM,YAAY,CAAC,GAAK,EACvEg1F,IAAWz1F,EAAA5Y,GAAQwsG,EAAQ,KAAK,IAArB,YAAA5zF,EAAwB,SAAU,SAAUS,EAAM,YAAY,CAAC,GAAK,EAE9E,MAAA,CACL,SAAU+H,GAAS,GAAGA,EAAQgtF,EAAUC,CAAQ,IAClD,CAAA,CACD,EAED,SAASyC,EAAO/8G,EAAe,CAC7B,MAAM/H,EAAM,GAAGk/G,EAAiB,GAAGn3G,CAAK,GAExC,OAAOslB,EAAM,OAAO,IAAIrtB,CAAG,GAAKqhH,EAAU,kBAAkBrhH,CAAG,CAAA,6BAK/DspB,EAAA,mBAsBM,MAAA,CAtBA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAU,KAAK,WAAY,uBAAOI,EAAK,KAAA,CAAA,IACvD0vB,EAAAA,UAAA,EAAA,EAAAhuB,EAoBW,mBAAAqsB,WAnBwB,KAAAC,EAAA,WAAAivE,EAAA,MAAzB,CAAAE,EAAYzE,mBADtBl3F,EAAA,YAoBW47F,GAAA,CAlBR,IAAK1E,EACL,MAAOA,EACR,UAAA,GACC,MAAO93F,EAAK,MACZ,IAAKs8F,EAAOxE,CAAQ,EACpB,gBAAeA,CAAA,qBAEN,IAA4C,EAAtDhpE,YAAA,EAAA,EAAAhuB,EAAAA,mBAUWqsB,EAAA,SAVyB,KAAAC,EAAAA,WAAAmvE,EAAlB,CAAA96B,EAAQliF,wDAAmCA,GAAK,CAExDkiF,iBADR7gE,EAAA,YAQiB67F,GAAA,OANd,OAAAh7B,EACA,MAAAliF,EACA,IAAK+8G,EAAOxE,CAAQ,EACpB,YAAWA,EACX,MAAO93F,EAAK,MACZ,gBAAezgB,kdCvD1B,MAAMkP,EAAQuR,EAuBR,CAAE,MAAA6E,EAAO,QAAA+zF,EAAS,UAAAC,CAAU,EAAIvoG,EAAAA,OAAOimG,EAAW,EAClDiC,EAAeloG,SAAOkmG,EAAa,EAEnCx3F,EAAKtF,GAAc,OAAO,EAC1B3B,EAAQU,GAAS,EACjB,CAAE,MAAAqrB,CAAM,EAAIX,GAAO,EAEnBzD,EAAgBvf,MAAI,CAAC,EAErBuF,EAAUvF,EAAAA,IAAiB,EAE3B84F,EAASnpG,EAAAA,SAAS,IACfrB,EAAM,OAAO,MAAQuqG,EAAS,MAAM,SAAWn0F,EAAM,QAAQ,MACrE,EACKxS,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,IAAIwpG,EAAc,KAEd,OAAOz0F,EAAM,WAAc,WAC7By0F,EAAcz0F,EAAM,UAAU,CAC5B,IAAKpW,EAAM,IAAI,KACf,SAAUA,EAAM,SAChB,OAAQA,EAAM,OACd,YAAaA,EAAM,OAAO,KAAA,CAC3B,EAED6qG,EAAcz0F,EAAM,UAGtB,MAAMw0F,GAAQl4B,GAAY,SAAU1yE,EAAM,OAA2B,IAAI,EAElE,MAAA,CACLuQ,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,IAAI,OAAQ,OAAO,CAAC,EAAGq6F,GAC3B,CAACr6F,EAAG,IAAI,OAAQ,QAAQ,CAAC,EAAGq6F,IAAS5qG,EAAM,OAAO,YAAc,SAChE,CAACuQ,EAAG,IAAI,OAAQ,OAAO,CAAC,EAAGvQ,EAAM,OAAO,YAAc,QACtD,CAACuQ,EAAG,IAAI,OAAQ,MAAM,CAAC,EAAGi6F,EAAO,KACnC,EACAxqG,EAAM,OAAO,MACb6qG,CACF,CAAA,CACD,EACKtB,EAAUloG,EAAAA,SAAS,IAChBrB,EAAM,QAAU,OACnBoW,EAAM,iBACNpW,EAAM,QAAU,QACdoW,EAAM,kBACNA,EAAM,aACb,EACKm0F,EAAWlpG,EAAAA,SAAS,IAEtB+U,EAAM,YACH,IAAIpW,EAAM,OAAS,SAAS,EAC5B,IAAI,GAAGA,EAAM,IAAI,KAAK,IAAIA,EAAM,OAAO,KAAK,EAAE,GAAK,CAAE,QAAS,EAAG,QAAS,CAAE,CAElF,EACK8qG,EAAczpG,EAAAA,SAAS,IACvB,OAAO+U,EAAM,WAAc,WACtBA,EAAM,UAAU,CACrB,IAAKpW,EAAM,IAAI,KACf,SAAUA,EAAM,SAChB,OAAQA,EAAM,OACd,YAAaA,EAAM,OAAO,KAAA,CAC3B,EAGIoW,EAAM,SACd,EACKzF,EAAQtP,EAAAA,SAAS,IAAM,WACrB,MAAA0pG,EACJ/qG,EAAM,QAAU,OACZmqG,EAAQ,gBACRnqG,EAAM,QAAU,QACdmqG,EAAQ,iBACRA,EAAQ,aACV,CAAE,QAAAa,GAAS,QAAAC,EAAQ,EAAIV,EAAS,MAChCW,EAAU,CAACf,EAAQ,eACnBgB,IAAUD,KAAWnqG,GAAAwoG,EAAQ,MAAM,CAAC,IAAf,YAAAxoG,GAAkB,SAAU,SAASqV,EAAM,YAAY,CAAC,GAAK,EAClFg1F,IACJF,KAAWv1F,GAAA5Y,GAAQwsG,EAAQ,KAAK,IAArB,YAAA5zF,GAAwB,SAAU,UAAUS,EAAM,YAAY,CAAC,GAAK,EAC3E+H,GAAQ4sF,EAAY/qG,EAAM,SAAWgrG,EAAO,EAAID,EAAY/qG,EAAM,QAAQ,EAE5E,IAAAoe,GAEA,OAAA6sF,GAAU,GAAK70F,EAAM,eACvBgI,GACEhI,EAAM,aAAa,IAAIpW,EAAM,IAAI,UAAYirG,EAAO,EACpD70F,EAAM,aAAa,IAAIpW,EAAM,IAAI,SAAS,GAGvC,CACLA,EAAM,OAAO,OAAS,GACtB8qG,EAAY,MACZ,CACE,QAAS,CAACE,IAAW,CAACC,GAAU,OAAS,OACzC,MAAO,IAAIjrG,EAAM,OAAO,MAAQ,EAAImrG,KAAYX,EAAO,MAAQY,GAAW,GAAKjtF,EAAK,KACpF,OAAQC,GAAS,GAAGA,EAAM,KAAO,OACjC,WAAYpe,EAAM,OAAO,OAAS,CAACA,EAAM,MAAQ,SAAW,OAC5D,iBACE,CAACoW,EAAM,QAAU40F,GAAU,GAAKhrG,EAAM,SAAWgrG,IAAWD,EAAY,OAAS,EAC7E,EACA,OACN,kBACEE,GAAU,GAAKjrG,EAAM,SAAWirG,IAAWd,EAAQ,cAAc,OAAS,EAAI,OAChF,UAAW,eAAe90E,EAAM,MAAQ,IAAM,EAAE,IAC7Cr1B,EAAM,OAAO,MAAQmrG,GAAU,GAAKJ,EAAY/qG,EAAM,QAAQ,CACjE,WAAA,CAEJ,CAAA,CACD,EACK4P,EAAQvO,EAAAA,SAAS,IAAM,CACvB,IAAAgqG,EAEA,OAAA,OAAOj1F,EAAM,WAAc,WAC7Bi1F,EAAcj1F,EAAM,UAAU,CAC5B,IAAKpW,EAAM,IAAI,KACf,SAAUA,EAAM,SAChB,OAAQA,EAAM,OACd,YAAaA,EAAM,QAAA,CACpB,EAEDqrG,EAAcj1F,EAAM,UAGf,CAAE,GAAIpW,EAAM,OAAO,OAAS,GAAK,GAAIqrG,GAAe,EAAI,CAAA,CAChE,EACKp1G,EAAYoL,EAAAA,SAAS,IAClB9X,GAAWyW,EAAM,OAAO,SAAS,EAAIA,EAAM,OAAO,UAAYooG,EACtE,EACK6F,EAAe5sG,EAAAA,SAAS,IAE1B8oG,EAAQ,YACPA,EAAQ,eAAiBnqG,EAAM,OAAO,MAAQmqG,EAAQ,eAAe,IAAMnqG,EAAM,OAAO,MAE5F,EAED0L,EAAAA,YAAY,IAAM,CACZwiG,EAAaluG,EAAM,MAAM,GAEnBoqG,EAAA,cAAcpqG,EAAM,IAAI,IAAKA,EAAM,OAAO,IAAKixB,EAAc,KAAK,CAAA,CAC7E,EAED,SAASk9E,EAAkBn7B,EAAiD,CAC1E,OAAQA,EAA2B,OAAS,WAAA,CAG9C,SAASo7B,EAAcp7B,EAA6C,CAClE,OAAQA,EAA2B,OAAS,OAAA,CAG9C,SAASq7B,EAAer7B,EAA8C,CACpE,OAAQA,EAA2B,OAAS,QAAA,CAG9C,SAASs7B,EAAat7B,EAA4C,CAChE,OAAQA,EAA2B,OAAS,MAAA,CAG9C,SAASk7B,EAAal7B,EAA4C,CAE9D,OAAAm7B,EAAkBn7B,CAAM,GACxBo7B,EAAcp7B,CAAM,GACpBq7B,EAAer7B,CAAM,GACrBs7B,EAAat7B,CAAM,CAAA,CAIvB,SAAS23B,EAAkBzxG,EAAc,CAChC,MAAA,CACL,IAAK8G,EAAM,IAAI,KACf,IAAKA,EAAM,IAAI,IACf,SAAUA,EAAM,SAChB,OAAQA,EAAM,OACd,YAAaA,EAAM,SACnB,MAAA9G,CACF,CAAA,CAGF,SAASuiE,EAAiBviE,EAAmB,CAC3C6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAASwiE,EAAiBxiE,EAAmB,CAC3C6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAAS8tD,EAAY9tD,EAAmB,CACtC6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAAS0yG,EAAe1yG,EAAmB,CACzC6wG,GAAA,MAAAA,EAAc,cAAc,WAAYY,EAAkBzxG,CAAK,EAAC,CAGlE,SAAS2yG,EAAkB3yG,EAAmB,CAC5C6wG,GAAA,MAAAA,EAAc,cAAc,cAAeY,EAAkBzxG,CAAK,EAAC,CAGrE,SAASq1G,EAAe9+C,EAAoBv2D,GAAmBs1G,GAAS,GAAO,CAC7E,GAAI,CAACrE,EAAQ,iBAAiB,IAAI16C,EAAI,GAAG,EAAG,CACpC,MAAAsO,EAAU,CAACtO,EAAI,QACf,CAAE,KAAA53D,GAAM,IAAA9O,GAAK,MAAA+H,EAAU,EAAA2+D,EAEnB26C,EAAA,YAAYrhH,GAAKg1E,EAASywC,EAAM,EAC7BzE,EAAA,aAAa,CAAE,IAAKlyG,GAAM,IAAA9O,GAAK,MAAA+H,GAAO,MAAAoI,GAAO,QAAA6kE,EAAS,CAAA,CACrE,CAGO,SAAA0wC,EAAgBh/C,EAAoBv2D,GAAmB,CAC9D,GAAI,CAACixG,EAAQ,kBAAkB,IAAI16C,EAAI,GAAG,EAAG,CACrC,MAAAoW,GAAW,CAACpW,EAAI,SAChB,CAAE,KAAA53D,EAAM,IAAA9O,GAAK,MAAA+H,EAAU,EAAA2+D,EAEnB26C,EAAA,WAAWrhH,GAAK,gBAAiB,EAAI,EAC/CuqB,EAAAA,SAAS,IAAM,CACH82F,EAAA,aAAarhH,GAAK88E,EAAQ,EACvBkkC,EAAA,cAAc,CAAE,IAAKlyG,EAAM,IAAA9O,GAAK,MAAA+H,GAAO,MAAAoI,GAAO,SAAA2sE,GAAU,CAAA,CACtE,CAAA,CACH,CAGF,SAAS6oC,EAAcj/C,EAAoB,CACpC06C,EAAQ,gBAAgB,IAAI16C,EAAI,GAAG,GAC5B26C,EAAA,WAAW36C,EAAI,IAAK,EAAI,CACpC,CAGO,SAAAk/C,EAAiBl/C,EAAoBv2D,GAAmB,QAC3D,GAAA,GAAC6H,GAAA0uD,EAAI,WAAJ,MAAA1uD,GAAc,QAAQ,OAErB,MAAA8kE,GAAW,CAACpW,EAAI,aAChB,CAAE,KAAA53D,EAAM,IAAA9O,GAAK,MAAA+H,EAAU,EAAA2+D,EAE7Bs6C,EAAa,YAAY,EACfK,EAAA,gBAAgB36C,EAAI,IAAKoW,EAAQ,EAC9BkkC,EAAA,cAAc,CAAE,IAAKlyG,EAAM,IAAA9O,GAAK,MAAA+H,GAAO,MAAAoI,GAAO,SAAA2sE,GAAU,CAAA,CAGvE,SAAS0mC,EAAiBv0G,EAA4B,WACtCi5B,EAAA,SACXtb,IAAA5U,GAAA/I,EAAM,gBAAN,YAAA+I,GAAsB,KAAtB,YAAA4U,GAA0B,YAAa3d,EAAM,YAAY,QAAUoe,EAAM,WAAA,0CAK5E,EAAA/D,EAAA,mBA2IM,MA3INK,EAAA,WA2IM9C,EA1IS,MAAA,SACT,UAAJ,IAAIqH,EACH,MAAOrT,EAAS,MACjB,KAAK,OACJ,MAAO2N,EAAA,OAAO,YAAgB,OAC9B,QAASg5F,QAAS,YAAgBA,EAAQ,MAAC,QAAU,OACrD,QAASA,QAAS,YAAgBA,EAAQ,MAAC,QAAU,OACrD,MAAO55F,EAAK,MACZ,aAAY8qD,EACZ,aAAYC,EACZ,QAAO1U,EACP,WAAU4kD,EACV,cAAaC,CAAA,IAGNt6F,EAAA,OAAO,QAAK,iBADpBc,qBAKO,MAAA,OAHJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACb,KAAK,OACL,cAAA,yCAES29F,EAAa38F,EAAM,MAAA,iBAA9Bc,qBAkDM,MAAA,OAlD4B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAC5B49F,EAAkB58F,EAAM,MAAA,iBAAxCc,EAAA,mBAsBWqsB,WAAA,CAAA,IAAA,GAAA,CApBDntB,EAAA,OAAO,4BADfY,cASSD,EAAAA,MAAA0uF,EAAA,EAAA,OAPP,QAAA,GACC,MAAOrvF,EAAG,IAAC,IACX,MAAOA,EAAG,IAAC,QAAUA,EAAA,IAAI,IAAG,KAC5B,MAAKe,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EACZ,KAAMgB,EAAM,OAAC,eAAa,UAC1B,SAAUW,EAAAA,SAAQ,iBAAiB,IAAIX,EAAG,IAAC,GAAG,EAC9C,QAAoBs+B,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAge,EAAAA,cAAA7S,GAAAuzD,EAAeh9F,EAAA,IAAKypC,EAAM,EAAA,EAAA,CAAA,UAAA,MAAA,CAAA,wEAEjD7oC,EAUY,YAAAD,EAAA,MAAAysD,EAAA,EAAA,OARV,QAAA,GACC,MAAKrsD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EACZ,QAASgB,EAAG,IAAC,QACb,KAAMA,EAAM,OAAC,eAAa,UAC1B,SAAUW,EAAAA,SAAQ,iBAAiB,IAAIX,EAAG,IAAC,GAAG,EAC9C,QAASA,EAAG,IAAC,QACb,QAAW,CAAA,GAAAxQ,GAAAwQ,EAAA,IAAI,WAAJ,MAAAxQ,GAAc,QACzB,QAAoB8uC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAge,gBAAA7S,GAAAuzD,EAAeh9F,EAAA,IAAKypC,CAAM,EAAA,CAAA,UAAA,MAAA,CAAA,EAAA,2EAGlCozD,EAAc78F,EAAM,MAAA,iBAArCc,EAAA,mBAEO,OAAA,OAFkC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAChD,EAAAqC,EAAA,gBAAArB,EAAA,OAAO,YAAcA,EAAA,OAAO,WAAWA,EAAM,OAAC,WAAaA,EAAA,IAAI,MAAQA,EAAQ,QAAA,CAAA,EAAA,CAAA,GAE/D88F,EAAe98F,EAAM,MAAA,iBAA1Cc,EAAAA,mBAYWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CAVAxsB,QAAAi4F,CAAA,EAAQ,kBAAkB,IAAI54F,EAAA,IAAI,GAAG,6CAD9Cc,EAAAA,mBAUS,SAAA,OARP,KAAK,SACJ,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,EAAA,GAAgC,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA0B,SAAA,QAAA,CAAA,EAAAgB,EAAA,IAAI,QAAA,GAI5F,QAAYs+B,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAge,EAAA,cAAA7S,GAAAyzD,EAAgBl9F,EAAA,IAAKypC,CAAM,EAAA,CAAA,MAAA,CAAA,EAAA,GAExC9pC,EAAAA,YAAgEs7F,GAAA,CAArD,KAAK,SAAU,OAAQt6F,EAAAA,MAAK5I,CAAA,EAAC,UAAA,gCAGvBglG,EAAa/8F,EAAM,MAAA,iBAAxCc,EASW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAPAxsB,QAAAi4F,CAAA,EAAQ,gBAAgB,IAAI54F,EAAA,IAAI,GAAG,6CAD5Cc,EAAAA,mBAOS,SAAA,OALP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EACZ,YAASs/B,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,GAAE0zD,EAAcn9F,EAAG,GAAA,EAAA,GAE7BL,EAAAA,YAA8Ds7F,GAAA,CAAnD,KAAK,UAAW,OAAQt6F,EAAAA,MAAK5I,CAAA,EAAC,OAAA,iFAI/C6I,EAAAA,YA4DiBD,EAAAA,MAAAgiB,EAAA,EAAA,OA5DO,YAAWq4E,CAAA,qBACjC,IA0DO,OAAA,OA1DP95F,EAAAA,mBA0DO,OAAA,CAzDJ,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA+B2B,QAAE3B,CAAA,EAAC,IAA6B,UAAA,UAAA,CAAA,EAAAgB,EAAA,OAAO,UAAYW,EAAA,MAAKkE,CAAA,EAAC,aAKvG63F,EAAY,qBAAvB57F,EAAAA,mBAkBM,MAAA,OAlBoB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAAA,GACpCkC,EAAAA,mBAKQ,OAAA,CAJL,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,KAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAmB,CAAAzzC,EAAAA,MAAA3B,CAAA,EAAG,GAAkB,WAAA,CAAA,EAAAgB,EAAA,IAAI,iBAIpDkB,EAAAA,mBAUS,SAAA,CATP,KAAK,SACJ,MAAKH,EAAAA,eAAA,CAAkBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,aAAA,EAAgC,GAAAxP,EAAAwQ,EAAA,IAAI,WAAJ,MAAAxQ,EAAc,SAAUmR,QAAA3B,CAAA,EAAG,IAAG,cAAA,QAAA,CAAA,GAI1F,QAAOs/B,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAA2zD,EAAiBp9F,EAAA,IAAKypC,EAAM,EAAA,GAEnBzpC,EAAA,IAAI,4BAArBY,EAAAA,YAAwFq6F,GAAA,OAArD,KAAK,QAAS,OAAQt6F,EAAAA,MAAK5I,CAAA,EAAC,WAAA,mCAC/D,EAAA6I,EAAA,YAAqEq6F,GAAA,OAAnD,KAAK,OAAQ,OAAQt6F,EAAAA,MAAK5I,CAAA,EAAC,qEAIzCiI,EAAA,OAAO,UAAYW,EAAAA,MAAAkE,CAAA,EAAM,wBADjCjE,EAAAA,YAmBWD,EAAA,MAAA9M,EAAA,EAAA,OAjBT,QAAA,GACC,MAAKkN,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACZ,eAAc2B,EAAAA,MAAKkE,CAAA,EAAC,aACpB,gBAAelE,EAAAA,MAAKkE,CAAA,EAAC,aACrB,gBAAelE,EAAAA,MAAKkE,CAAA,EAAC,YAAA,qBAEtB,IAIY,CAHJlE,EAAAA,MAAU3oB,EAAA,EAACgoB,EAAM,OAAC,QAAQ,iBADlCY,EAAAA,YAIYD,EAAA,MAAAb,EAAA,EAAA,OAFT,SAAUE,EAAM,OAAC,SACjB,KAAI,CAAA,IAASA,EAAG,IAAC,KAAI,SAAEA,EAAQ,SAAA,OAAEA,EAAM,OAAA,YAAeA,EAAM,OAAC,KAAK,CAAA,+BAEhDW,EAAAA,MAAU3oB,EAAA,EAACgoB,EAAM,OAAC,QAAQ,iBAA/Cc,EAAAA,mBAEWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,qCADNzoC,EAAS,MAACsb,SAAO,SAASA,EAAG,IAAC,KAAMA,EAAQ,QAAA,CAAA,CAAA,EAAA,CAAA,CAAA,sBAEjDc,EAAAA,mBAEWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,EAAAA,gBAAAC,EAAA,gBAAA3c,EAAA,MAAUsb,EAAG,IAAC,KAAKA,EAAA,OAAO,GAAG,CAAA,CAAA,EAAA,CAAA,2FAGpCc,EAAAA,mBAYWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CAVDxsB,EAAAA,MAAU3oB,EAAA,EAACgoB,EAAM,OAAC,QAAQ,iBADlCY,EAAAA,YAIYD,EAAA,MAAAb,EAAA,EAAA,OAFT,SAAUE,EAAM,OAAC,SACjB,KAAI,CAAA,IAASA,EAAG,IAAC,KAAI,SAAEA,EAAQ,SAAA,OAAEA,EAAM,OAAA,YAAeA,EAAM,OAAC,KAAK,CAAA,+BAEhDW,EAAAA,MAAU3oB,EAAA,EAACgoB,EAAM,OAAC,QAAQ,iBAA/Cc,EAAAA,mBAEWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,qCADNzoC,EAAS,MAACsb,SAAO,SAASA,EAAG,IAAC,KAAMA,EAAQ,QAAA,CAAA,CAAA,EAAA,CAAA,CAAA,sBAEjDc,EAAAA,mBAEWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,EAAAA,gBAAAC,EAAA,gBAAA3c,EAAA,MAAUsb,EAAG,IAAC,KAAKA,EAAA,OAAO,GAAG,CAAA,CAAA,EAAA,CAAA,4BAMhCi5F,EAAM,qBADdn4F,EAAAA,mBAKO,MAAA,OAHJ,wBAAQH,EAAE,MAAA3B,CAAA,EAAC,GAAgB,UAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,WAAA,OAAA,CAAA,CAAA,EAClC,KAAK,OACL,cAAA,kKCpaN,MAAMvQ,EAAQuR,EAOR,CAAE,MAAA6E,EAAO,QAAA+zF,GAAYtoG,EAAAA,OAAOimG,EAAW,EAEvCv3F,EAAKtF,GAAc,OAAO,EAC1B3I,EAAS87B,EAAAA,MAAMhoB,EAAO,QAAQ,EAE9BmzF,EAAUloG,EAAAA,SAAS,IAChBrB,EAAM,QAAU,OACnBoW,EAAM,iBACNpW,EAAM,QAAU,QACdoW,EAAM,kBACNA,EAAM,aACb,EACKve,EAAOwJ,WAAS,IAAO+U,EAAM,QAAUA,EAAM,YAAc+zF,EAAQ,aAAc,EACjFyE,EAAWvtG,EAAAA,SAAS,IACpB+U,EAAM,kBAAkB,OAAepW,EAAM,QAAU,QACvDoW,EAAM,iBAAiB,OAAepW,EAAM,QAAU,OACnD,EACR,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,SAC3B,MAAM8c,EACJne,EAAM,QAAU,OACZjD,GAAQotG,EAAQ,eAAe,EAC/BnqG,EAAM,QAAU,QACdjD,GAAQotG,EAAQ,gBAAgB,EAChCptG,GAAQotG,EAAQ,YAAY,EAC9BgB,IAAUpqG,EAAAwoG,EAAQ,MAAM,CAAC,IAAf,YAAAxoG,EAAkB,SAAU,QAASqV,EAAM,YAAY,CAAC,GAAK,EACvEg1F,IAAWz1F,EAAA5Y,GAAQwsG,EAAQ,KAAK,IAArB,YAAA5zF,EAAwB,SAAU,SAAUS,EAAM,YAAY,CAAC,GAAK,EAC/Ey4F,EAAYD,EAAS,OAAS/2G,EAAK,MAAM,SAAW,EAEnD,MAAA,CACL,CAAC0Y,EAAG,GAAG,mBAAmB,CAAC,EACzBvQ,EAAM,QAAU,SAAWme,EAAQ,GAAGA,EAAQgtF,EAAUC,CAAQ,KAAO,MACzE,CAACyD,EAAY,QAAU,UAAU,EAAG1wF,GAAS,GAAGA,EAAQgtF,EAAUC,CAAQ,KAC1E,UAAW,GAAGh1F,EAAM,WAAW,IACjC,CAAA,CACD,EACK04F,EAAaztG,EAAAA,SAAS,IAAM,CAC1B,KAAA,CAAE,UAAA0tG,EAAW,aAAAC,CAAA,EAAiB54F,EAE7B,MAAA,CACL,UAAW,GAAG24F,GAAaC,CAAY,IACzC,CAAA,CACD,8BAIC38F,EAAA,mBA+BM,MAAA,CA/BA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAU,KAAK,WAAY,uBAAOI,EAAK,KAAA,CAAA,GACvC9Y,EAAA,MAAK,QACnBwoC,EAAA,UAAA,EAAA,EAAAhuB,EAAAA,mBAkBWqsB,EAAA,SAjBc,CAAA,IAAA,CAAA,EAAAC,aAAA9mC,EAAA,MAAf,CAAA43D,EAAK3+D,mBADfqhB,EAAA,YAkBW47F,GAAA,CAhBR,IAAKj9G,EACL,IAAA2+D,EACA,MAAOA,EAAI,UACX,MAAOl+C,EAAK,MACZ,gBAAek+C,EAAI,KAAA,qBAGlB,IAAqC,EADvCpvB,EAAAA,UAAA,EAAA,EAAAhuB,EASa,mBAAAqsB,WARkB,KAAAC,EAAA,WAAA4qE,EAAA,MAArB,CAAAv2B,EAAQi8B,mBADlB98F,EAAA,YASa+8F,GAAA,CAPV,IAAKD,EACL,IAAAx/C,EACA,YAAWA,EAAI,UACf,OAAAujB,EACA,YAAWi8B,EACX,MAAO19F,EAAK,MACZ,gBAAe09F,CAAA,gJAKTL,EAAQ,mBADrB,EAAAv8F,EAAA,mBAQM,MAAA,OANH,MAAKC,EAAA,eAAA,CAAGJ,WAAG,YAAaX,EAAK,QAAA,SAAgBW,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,OAAA,CAAA,CAAA,EACnD,uBAAOu+F,EAAU,KAAA,CAAA,GAElBv8F,EAAAA,WAEOC,oBAFP,IAEO,CADFG,EAAAA,gBAAAC,EAAAA,gBAAAtQ,EAAA,MAAO,KAAK,EAAA,CAAA,4ZC7EvB,MAAMtC,EAAQuR,EA+BR,CAAE,MAAA6E,EAAO,QAAA+zF,EAAS,UAAAC,CAAU,EAAIvoG,EAAAA,OAAOimG,EAAW,EAClDiC,EAAeloG,SAAOkmG,EAAa,EAEnCx3F,EAAKtF,GAAc,OAAO,EAC1B,CAAE,MAAAoqB,CAAM,EAAIX,GAAO,EAEnBzd,EAAUvF,EAAAA,IAAiB,EAE3B84F,EAASnpG,EAAAA,SAAS,IACfrB,EAAM,OAAO,MAAQuqG,EAAS,MAAM,SAAWn0F,EAAM,QAAQ,MACrE,EACKmzF,EAAUloG,EAAAA,SAAS,IAChBrB,EAAM,QAAU,OACnBoW,EAAM,iBACNpW,EAAM,QAAU,QACdoW,EAAM,kBACNA,EAAM,aACb,EAEKmwB,EAASllC,EAAAA,SAAS,IAAOrB,EAAM,MAAQ,KAAO,IAAK,EACnDmvG,EAAY9tG,WAAS,IAAOrB,EAAM,MAAQoW,EAAM,eAAiBA,EAAM,cAAe,EACtFg5F,EAAU/tG,WAAS,IAAOrB,EAAM,MAAQmqG,EAAQ,gBAAkBA,EAAQ,kBAAmB,EAC7FvmG,EAAYvC,EAAAA,SAAS,IAAM,CAC/B,IAAIwpG,EAAc,KAEd,OAAOz0F,EAAM,WAAc,WAC7By0F,EAAcz0F,EAAM,UAAU,CAC5B,OAAQpW,EAAM,OACd,YAAaA,EAAM,OAAO,MAC1B,QAASA,EAAM,QACf,aAAcA,EAAM,YAAA,CACrB,EAED6qG,EAAcz0F,EAAM,UAGtB,MAAMw0F,EAAQl4B,GAAY,SAAU1yE,EAAM,OAA2B,IAAI,EAElE,MAAA,CACLuQ,EAAG,GAAG,WAAW,EACjB,CACE,CAACA,EAAG,IAAI,YAAa,OAAO,CAAC,EAAGq6F,EAChC,CAACr6F,EAAG,IAAI,YAAa,QAAQ,CAAC,EAAGq6F,GAAS5qG,EAAM,OAAO,YAAc,SACrE,CAACuQ,EAAG,IAAI,YAAa,OAAO,CAAC,EAAGvQ,EAAM,OAAO,YAAc,QAC3D,CAACuQ,EAAG,IAAI,YAAa,MAAM,CAAC,EAAGi6F,EAAO,KACxC,EACAxqG,EAAM,OAAO,MACb6qG,CACF,CAAA,CACD,EACKN,EAAWlpG,EAAAA,SAAS,IAEtB+U,EAAM,YACH,IAAIpW,EAAM,OAAS,SAAS,EAC5B,IAAI,GAAGumC,EAAO,KAAK,GAAGvmC,EAAM,YAAY,IAAIA,EAAM,OAAO,KAAK,EAAE,GAAK,CACtE,QAAS,EACT,QAAS,CACX,CAEH,EACK8qG,EAAczpG,EAAAA,SAAS,IACvB,OAAO+U,EAAM,WAAc,WACtBA,EAAM,UAAU,CACrB,OAAQpW,EAAM,OACd,YAAaA,EAAM,OAAO,MAC1B,QAASA,EAAM,QACf,aAAcA,EAAM,YAAA,CACrB,EAGIoW,EAAM,SACd,EACKzF,EAAQtP,EAAAA,SAAS,IAAM,SACrB,MAAA0pG,EACJ/qG,EAAM,QAAU,OACZmqG,EAAQ,gBACRnqG,EAAM,QAAU,QACdmqG,EAAQ,iBACRA,EAAQ,aACV,CAAE,QAAAa,EAAS,QAAAC,CAAQ,EAAIV,EAAS,MAChCY,IAAUpqG,EAAAwoG,EAAQ,MAAM,CAAC,IAAf,YAAAxoG,EAAkB,SAAU,QAASqV,EAAM,YAAY,CAAC,GAAK,EACvEg1F,IAAWz1F,EAAA5Y,GAAQwsG,EAAQ,KAAK,IAArB,YAAA5zF,EAAwB,SAAU,SAAUS,EAAM,YAAY,CAAC,GAAK,EAC/E+H,EAAQ4sF,EAAY/qG,EAAM,SAAWgrG,CAAO,EAAID,EAAY/qG,EAAM,QAAQ,EAE5E,IAAAoe,EAEJ,OAAI6sF,EAAU,IACH7sF,EAAAgxF,EAAQ,MAAMpvG,EAAM,aAAeirG,CAAO,EAAImE,EAAQ,MAAMpvG,EAAM,YAAY,GAGlF,CACLA,EAAM,OAAO,OAAS,GACtB8qG,EAAY,MACZ,CACE,QAAS,CAACE,GAAW,CAACC,EAAU,OAAS,OACzC,MAAO,IAAIjrG,EAAM,OAAO,MAAQ,EAAImrG,IAAYX,EAAO,MAAQY,EAAW,GAAKjtF,CAAK,KACpF,OAAQC,EAAS,GAAGA,CAAM,KAAO,OACjC,WAAYpe,EAAM,OAAO,OAAS,CAACA,EAAM,MAAQ,SAAW,OAC5D,iBACE,CAACoW,EAAM,QAAU40F,EAAU,GAAKhrG,EAAM,SAAWgrG,GAAWD,EAAY,OAAS,EAC7E,EACA,OACN,kBACEE,EAAU,GAAKjrG,EAAM,aAAeirG,GAAWkE,EAAU,MAAM,OAAS,EAAI,OAC9E,UAAW,eAAe95E,EAAM,MAAQ,IAAM,EAAE,IAC7Cr1B,EAAM,OAAO,MAAQmrG,EAAU,GAAKJ,EAAY/qG,EAAM,QAAQ,CACjE,WAAA,CAEJ,CAAA,CACD,EACK4P,EAAQvO,EAAAA,SAAS,IAAM,CACvB,IAAAgqG,EAEA,OAAA,OAAOj1F,EAAM,WAAc,WAC7Bi1F,EAAcj1F,EAAM,UAAU,CAC5B,OAAQpW,EAAM,OACd,YAAaA,EAAM,OAAO,MAC1B,QAASA,EAAM,QACf,aAAcA,EAAM,YAAA,CACrB,EAEDqrG,EAAcj1F,EAAM,UAGf,CAAE,GAAIpW,EAAM,OAAO,OAAS,GAAK,GAAIqrG,GAAe,EAAI,CAAA,CAChE,EACKgE,EAAchuG,WAAS,IAAM8oG,EAAQ,YAAY,IAAInqG,EAAM,OAAO,GAAG,CAAC,EAE5E,SAAS2qG,EAAkBzxG,EAAc,CAChC,MAAA,CACL,OAAQ8G,EAAM,OACd,YAAaA,EAAM,OAAO,MAC1B,QAASA,EAAM,QACf,aAAcA,EAAM,aACpB,MAAA9G,CACF,CAAA,CAGF,SAASuiE,EAAiBviE,EAAmB,CAC3C6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAASwiE,EAAiBxiE,EAAmB,CAC3C6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAAS8tD,EAAY9tD,EAAmB,CACtC6wG,GAAA,MAAAA,EAAc,cAAc,QAASY,EAAkBzxG,CAAK,EAAC,CAG/D,SAAS0yG,EAAe1yG,EAAmB,CACzC6wG,GAAA,MAAAA,EAAc,cAAc,WAAYY,EAAkBzxG,CAAK,EAAC,CAGlE,SAAS2yG,EAAkB3yG,EAAmB,CAC5C6wG,GAAA,MAAAA,EAAc,cAAc,cAAeY,EAAkBzxG,CAAK,EAAC,CAGrE,SAASqzG,EAAiBv0G,EAA4B,SAC1CoyG,EAAA,cACRpqG,EAAM,IAAI,IACVA,EAAM,OAAO,OACZ2V,GAAA5U,EAAA/I,EAAM,gBAAN,YAAA+I,EAAsB,KAAtB,YAAA4U,EAA0B,YAAa3d,EAAM,YAAY,QAAUoe,EAAM,WAC5E,CAAA,2BAKA,EAAA/D,EAAA,mBAmEM,MAnENK,EAAA,WAmEM9C,EAlES,MAAA,SACT,UAAJ,IAAIqH,EACH,MAAOrT,EAAS,MACjB,KAAK,OACJ,MAAO2N,EAAA,OAAO,YAAgB,OAC9B,QAASg5F,QAAS,YAAgBA,EAAQ,MAAC,QAAU,OACrD,QAASA,QAAS,YAAgBA,EAAQ,MAAC,QAAU,OACrD,MAAO55F,EAAK,MACZ,aAAY8qD,EACZ,aAAYC,EACZ,QAAO1U,EACP,WAAU4kD,EACV,cAAaC,CAAA,IAGNt6F,EAAA,OAAO,QAAK,iBADpBc,qBAKO,MAAA,OAHJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACb,KAAK,OACL,cAAA,yCAGM2B,EAAAA,MAAU3oB,EAAA,EAACgoB,EAAO,QAAC,QAAQ,iBADnCY,EAAAA,YAuCiBD,EAAA,MAAAgiB,EAAA,EAAA,OArCd,SAAU3iB,EAAM,OAAC,UAAYW,EAAA,MAAAkE,CAAA,EAAM,SACnC,YAAWm2F,CAAA,qBAEZ,IAiCO,CAjCP95F,EAAAA,mBAiCO,OAAA,CAhCJ,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA+B2B,QAAE3B,CAAA,EAAC,IAA6B,UAAA,UAAA,CAAA,EAAAgB,EAAA,OAAO,UAAYW,EAAA,MAAKkE,CAAA,EAAC,aAM1G7E,EAAA,OAAO,UAAYW,EAAAA,MAAAkE,CAAA,EAAM,wBADjCjE,EAAAA,YAgBWD,EAAA,MAAA9M,EAAA,EAAA,OAdT,QAAA,GACC,MAAKkN,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACZ,gBAAe2B,EAAAA,MAAKkE,CAAA,EAAC,aACrB,gBAAelE,EAAAA,MAAKkE,CAAA,EAAC,YAAA,qBAEtB,IAQY,CARZlF,cAQYgB,EAAAA,MAAAb,EAAA,EAAA,CAPT,SAAUE,EAAO,QAAC,SAClB,KAAI,QAAkBA,EAAM,OAAuB,MAAAA,EAAA,OAAO,MAA2B,KAAAW,EAAAA,MAAAkE,CAAA,EAAM,UAA0Bi5F,EAAW,KAAA,mGAQrIl9F,EAAAA,YASYD,EAAA,MAAAb,EAAA,EAAA,OAPT,SAAUE,EAAO,QAAC,SAClB,KAAI,QAAgBA,EAAM,OAAqB,MAAAA,EAAA,OAAO,MAAyB,KAAAW,EAAAA,MAAAkE,CAAA,EAAM,UAAwBi5F,EAAW,KAAA,wFAUvH7E,EAAM,qBADdn4F,EAAAA,mBAKO,MAAA,OAHJ,wBAAQH,EAAE,MAAA3B,CAAA,EAAC,GAAgB,UAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,WAAA,OAAA,CAAA,CAAA,EAClC,KAAK,OACL,cAAA,kMC5QN,MAAMvQ,EAAQuR,EAWR,CAAE,MAAA6E,EAAO,QAAA+zF,EAAS,UAAAC,CAAU,EAAIvoG,EAAAA,OAAOimG,EAAW,EAElDv3F,EAAKtF,GAAc,OAAO,EAE1Bs+F,EAAUloG,EAAAA,SAAS,IAChBrB,EAAM,QAAU,OACnBoW,EAAM,iBACNpW,EAAM,QAAU,QACdoW,EAAM,kBACNA,EAAM,aACb,EACK+4F,EAAY9tG,WAAS,IAAOrB,EAAM,MAAQoW,EAAM,eAAiBA,EAAM,cAAe,EACtFi5F,EAAchuG,EAAAA,SAAS,IACpB8tG,EAAU,MAAM,IAAeG,GAAA,CACpC,MAAMvmH,EAAMqhH,EAAU,gBAAgBkF,EAAQ,GAAG,EAC3C7/C,EAAMr5C,EAAM,OAAO,IAAIrtB,CAAG,GAAKqhH,EAAU,kBAAkBrhH,CAAG,EAE7D,MAAA,CAAE,QAAAumH,EAAS,IAAA7/C,CAAI,CAAA,CACvB,CACF,EACK7rD,EAAYvC,EAAAA,SAAS,IAClB,CAACkP,EAAG,GAAG,MAAM,EAAGA,EAAG,IAAI,OAAQvQ,EAAM,MAAQ,QAAU,OAAO,CAAC,CACvE,EACK2Q,EAAQtP,EAAAA,SAAS,IAAM,SAC3B,MAAM8c,EACJne,EAAM,QAAU,OACZjD,GAAQotG,EAAQ,eAAe,EAC/BnqG,EAAM,QAAU,QACdjD,GAAQotG,EAAQ,gBAAgB,EAChCptG,GAAQotG,EAAQ,YAAY,EAC9BgB,IAAUpqG,EAAAwoG,EAAQ,MAAM,CAAC,IAAf,YAAAxoG,EAAkB,SAAU,QAASqV,EAAM,YAAY,CAAC,GAAK,EACvEg1F,IAAWz1F,EAAA5Y,GAAQwsG,EAAQ,KAAK,IAArB,YAAA5zF,EAAwB,SAAU,SAAUS,EAAM,YAAY,CAAC,GAAK,EAE9E,MAAA,CACL,SAAU+H,GAAS,GAAGA,EAAQgtF,EAAUC,CAAQ,IAClD,CAAA,CACD,8BAIC/4F,EAAA,mBAsBM,MAAA,CAtBA,uBAAOzO,EAAS,KAAA,EAAE,KAAK,WAAY,uBAAO+M,EAAK,KAAA,CAAA,IACnD0vB,EAAAA,UAAA,EAAA,EAAAhuB,qBAoBWqsB,EAAAA,2BAnB2B2wE,EAAW,MAAA,CAAA,CAArC,IAAA5/C,EAAK,QAAA6/C,CAAA,EAAWx+G,mBAD5BqhB,EAAA,YAoBW47F,GAAA,CAlBR,IAAKt+C,EAAI,IACV,UAAA,GACC,MAAOl+C,EAAK,MACZ,IAAAk+C,EACA,gBAAe3+D,CAAA,qBAGd,IAAqC,EADvCuvC,EAAAA,UAAA,EAAA,EAAAhuB,EAWiB,mBAAAqsB,WAVc,KAAAC,EAAA,WAAA4qE,EAAA,MAArB,CAAAv2B,EAAQi8B,mBADlB98F,EAAA,YAWiBo9F,GAAA,CATd,IAAKN,EACL,IAAAx/C,EACA,OAAAujB,EACA,YAAWi8B,EACX,QAAAK,EACA,gBAAex+G,EACf,MAAOygB,EAAK,MACZ,MAAOA,EAAK,MACZ,gBAAe09F,uKC1EjB,SAASO,GAA2C3kH,EAGxD,CACD,SAAS61E,EAAoB33E,EAA+B,CACtD,IAAA27B,EAAO75B,EAAQ,QAAQ9B,CAAG,EAE9B,GAAK27B,EAEL,KAAO,CAACz7B,GAAOy7B,EAAK,MAAM,GAAG,CAC3B,MAAMvmB,EAAWumB,EAAK,OAChB/sB,EAAS9M,EAAQ,QAAQsT,CAAQ,EAIvC,GAFI,CAACxG,GAED+sB,EAAK,UAAY/sB,EAAO,SAAW+sB,EAAK,UAAY/sB,EAAO,QAC7D,MAGE+sB,EAAK,SACP/sB,EAAO,QAAUA,EAAO,SAAS,MAAMI,GAAQA,EAAK,OAAO,EACpDJ,EAAA,QAAU,CAACA,EAAO,UAEzBA,EAAO,QAAU,GACVA,EAAA,QAAUA,EAAO,SAAS,QAAaI,EAAK,SAAWA,EAAK,OAAO,GAGrE2sB,EAAA/sB,CAAA,CACT,CAGF,SAASgpE,EAAkB53E,EAA+B,CAClD,MAAA0mH,EAAa5kH,EAAQ,QAAQ9B,CAAG,EAEtC,GAAI,CAAC0mH,EAAY,OAEjB,MAAMC,EAAU,OAAO7kH,EAAQ,aAAgB,WAAaA,EAAQ,YAAcf,GAC5Ei0E,EAAU0xC,EAAW,QACrBxtC,EAAUwtC,EAAW,QAErB7wG,EAAO,CAAC,GAAI6wG,EAAW,QAAgB,EAEzC,IAAA/qF,EAEJ,KAAO9lB,EAAK,QACV8lB,EAAO9lB,EAAK,MAAM,EAEd,CAAA8wG,EAAQhrF,CAAI,IAEhBA,EAAK,QAAUq5C,EACfr5C,EAAK,QAAUu9C,EAEXv9C,EAAK,SAAS,QACX9lB,EAAA,KAAK,GAAI8lB,EAAK,QAAgB,EAEvC,CAGK,MAAA,CACL,oBAAAg8C,EACA,kBAAAC,CACF,CACF,CCdA,MAAMgvC,GAAqB,OAAO,OAAyB,CACzD,IAAK,IACL,IAAK,IACL,IAAK,GACP,CAAC,EAED,IAAIC,GAAU,EAEd,SAASzqC,IAAa,CACpB,MAAO,mBAAmByqC,IAAS,EACrC,CAEA,SAASC,GAAkB/+G,EAAe,CACxC,OAAOA,EAAQ,CACjB,CAEA,MAAMg/G,GAAuB,IACvBC,GAA2B,GAE1B,SAASC,GAASnlH,EAAuB,CAC9C,MAAMurB,EAAQtJ,EAAAA,SAAS,CACrB,GAAGjiB,EACH,QAAS,CAAC,EACV,cAAe,CAAC,EAChB,WAAY,CAAC,EACb,UAAW,CAAC,EACZ,KAAM,CAAC,EACP,QAASA,EAAQ,SAAWg9G,GAC5B,QAAS,CAAC,EACV,YAAa,CAAC,EACd,MAAO,EACP,kBAAmB,CAAC,EACpB,iBAAkB,CAAC,EACnB,eAAgB,CAAC,EACjB,eAAgB,CAAC,EACjB,aAAch9G,EAAQ,cAAgB,GACtC,aAAc,CAAC,CAACA,EAAQ,aACxB,cAAe,IACf,WAAY,IACZ,eAAgB,IAChB,WAAY,QACZ,WAAY,GACZ,QAAS,GACT,WAAY,IACZ,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,EACb,YAAa,EACb,OAAQ,EACR,SAAU,EACV,OAAQ,EACR,SAAU,GACV,aAAc,KACd,YAAa,CAAC,EACd,YAAaA,EAAQ,aAAeA,EAAQ,KAAK,OACjD,YAAa,GACb,WAAY,EACZ,gBAAiB,IACjB,gBAAiB,IACjB,YAAaA,EAAQ,aAAe,CAAC,EAAG,CAAC,EACzC,OAAQ,GACR,aAAc,GACd,cAAe,EACf,cAAe,IAAA,CAChB,EAEDolH,EAAWplH,EAAQ,OAAO,EAC1BqlH,EAAarlH,EAAQ,SAAS,EAC9BslH,GAAQtlH,EAAQ,IAAI,EAEd,MAAAulH,EAAW/uG,EAAAA,SAAS,IACjB,OAAO+U,EAAM,YAAe,WAC/BA,EAAM,QAAQ,OAAcq5C,GAAAr5C,EAAM,WAAWq5C,EAAI,IAAI,CAAC,EACtDr5C,EAAM,OACX,EACKi6F,EAAehvG,EAAAA,SAAS,IACrB+U,EAAM,aACTg6F,EAAS,MACTE,GAAWl6F,EAAM,QAASg6F,EAAS,MAAOh6F,EAAM,YAAY,CACjE,EACKm6F,EAAalvG,EAAAA,SAAS,IACb+U,EAAM,aACfi6F,EAAa,MACbG,EAASp6F,EAAM,QAASi6F,EAAa,MAAOj6F,EAAM,QAASA,EAAM,YAAY,CAGlF,EACKq6F,EAAgBpvG,EAAAA,SAAS,IAAM,CACnC,MAAMxJ,EAAO64G,GAASt6F,EAAM,YAAaA,EAAM,SAAUm6F,EAAW,KAAK,EAEhE,QAAAnmH,GAAI,EAAG4H,GAAM6F,EAAK,OAAQzN,GAAI4H,GAAK,EAAE5H,GACvCyN,EAAAzN,EAAC,EAAE,UAAYA,GACpByN,EAAKzN,EAAC,EAAE,KAAOA,KAAM4H,GAAM,EAGtB,OAAA6F,CAAA,CACR,EACK84G,EAActvG,EAAAA,SAAS,IAAM,IAAI,IAAIovG,EAAc,MAAM,IAAWhhD,GAAAA,EAAI,GAAG,CAAC,CAAC,EAC7EmhD,EAAmBvvG,EAAAA,SAAS,IAAM,CACtC,MAAMwvG,EAAUJ,EAAc,MACxBK,GAAkB16F,EAAM,QAAQ,KACpCre,IAASA,GAA8B,OAAS,WAClD,EACM64G,OAAuB,IAE7B,GAAIE,IAAmB,OAAOA,GAAgB,YAAe,WAAY,CACvE,MAAMj3G,GAAai3G,GAAgB,WAE1B,QAAA1mH,GAAI,EAAG4H,GAAM6+G,EAAQ,OAAQzmH,GAAI4H,GAAK,EAAE5H,GAAG,CAC5C,MAAAqlE,GAAMohD,EAAQzmH,EAAC,EAEjByP,GAAW41D,GAAI,IAAI,GACrBmhD,GAAiB,IAAInhD,GAAI,GAAG,CAC9B,CACF,CAGKmhD,OAAAA,EAAA,CACR,EACKG,EAAoB1vG,EAAAA,SAAS,IAAM,CACvC,MAAMwvG,EAAUJ,EAAc,MACxBO,GAAe56F,EAAM,QAAQ,KACjCre,IAASA,GAA2B,OAAS,QAC/C,EACMg5G,OAAwB,IAE9B,GAAIC,IAAgB,OAAOA,GAAa,YAAe,WAAY,CACjE,MAAMn3G,GAAam3G,GAAa,WAEvB,QAAA5mH,GAAI,EAAG4H,GAAM6+G,EAAQ,OAAQzmH,GAAI4H,GAAK,EAAE5H,GAAG,CAC5C,MAAAqlE,GAAMohD,EAAQzmH,EAAC,EAEjByP,GAAW41D,GAAI,IAAI,GACrBshD,GAAkB,IAAIthD,GAAI,GAAG,CAC/B,CACF,CAGKshD,OAAAA,EAAA,CACR,EACKE,EAAkB5vG,EAAAA,SAAS,IAAM,CACrC,MAAMwvG,EAAUJ,EAAc,MACxBS,GAAa96F,EAAM,QAAQ,KAAcre,IAAAA,GAAyB,OAAS,MAAM,EAGjFk5G,OAAsB,IAE5B,GAAIC,IAAc,OAAOA,GAAW,YAAe,WAAY,CAC7D,MAAMr3G,GAAaq3G,GAAW,WAErB,QAAA9mH,GAAI,EAAG4H,GAAM6+G,EAAQ,OAAQzmH,GAAI4H,GAAK,EAAE5H,GAAG,CAC5C,MAAAqlE,GAAMohD,EAAQzmH,EAAC,EAEjByP,GAAW41D,GAAI,IAAI,GACrBwhD,GAAgB,IAAIxhD,GAAI,GAAG,CAC7B,CACF,CAGKwhD,OAAAA,EAAA,CACR,EACKE,EAAY9vG,EAAAA,SAAS,IAClB,CAAC+U,EAAM,cAAgBA,EAAM,QAAQ,KAAKq5C,GAAO,QAAA,OAAA1uD,GAAA0uD,EAAI,WAAJ,YAAA1uD,GAAc,OAAM,CAC7E,EACKqwG,EAAgB/vG,EAAAA,SAAS,IACtB,CAAC,CAAC+U,EAAM,QAAQ,QAAe,SAAU48D,GAAUA,EAAO,OAAS,MAAM,CACjF,EACKq+B,EAAchwG,EAAAA,SAAS,IAAM,CAAC,CAACovG,EAAc,MAAM,KAAKhhD,GAAOA,EAAI,QAAQ,CAAC,EAC5Es7C,EAAc1pG,EAAAA,SAAS,IAAMiwG,GAAkB,EAC/CC,EAAelwG,EAAAA,SAAS,IAAMiwG,EAAiBl7F,EAAM,aAAa,CAAC,EACnEo7F,EAAkBnwG,EAAAA,SAAS,IAAMiwG,EAAiBl7F,EAAM,gBAAgB,CAAC,EACzEq7F,EAAmBpwG,EAAAA,SAAS,IAAMiwG,EAAiBl7F,EAAM,iBAAiB,CAAC,EAC3E46F,EAAe3vG,EAAAA,SAAS,IACrB+U,EAAM,QAAQ,KAAgB48D,GAAAA,EAA6B,OAAS,QAAQ,CAGpF,EACKq8B,EAAchuG,EAAAA,SAAS,IAAM,CACjC,KAAM,CAAE,QAAAkoG,EAAS,UAAA4F,GAAW,KAAAt3G,EAAS,EAAAue,EAC/B9Y,OAAU,IAEZ,GAAA,CAAC6xG,GAAU,OAAe,OAAA7xG,GAE9B,UAAW01E,MAAUu2B,EAAS,CAC5B,MAAMxgH,GAAMiqF,GAAO,IAEf,GAAAA,GAAO,MAAQA,GAAO,UAAW,CAC/B11E,GAAA,IAAIvU,GAAK4mH,EAAkB,EAC/B,QAAA,CAGI,MAAAxyG,GACJ,OAAO61E,GAAO,UAAa,WAAaA,GAAO,SAAYn7E,IAAeA,GAAK9O,EAAG,EAEpF,IAAIiI,GAAM,EACNxC,GAAM,IACND,GAAM,KACNq4D,GAAQ,GAEH,QAAAx8D,GAAI,EAAG4H,GAAM6F,GAAK,OAAQzN,GAAI4H,GAAK,EAAE5H,GAAG,CAC/C,MAAMxB,GAAQuU,GAAStF,GAAKzN,EAAC,EAAGA,EAAC,EAC3BiG,GAAS,WAAWzH,EAAe,EAErC,OAAO,MAAMyH,EAAM,IAEhBW,IAAAX,GACD7B,GAAA,KAAK,IAAIA,GAAK6B,EAAM,EACpB9B,GAAA,KAAK,IAAIA,GAAK8B,EAAM,EAClBu2D,GAAA,GAAA,CAGVA,GAAQtpD,GAAI,IAAIvU,GAAK,CAAE,IAAAiI,GAAK,IAAAxC,GAAK,IAAAD,EAAI,CAAC,EAAI+O,GAAI,IAAIvU,GAAK4mH,EAAkB,CAAA,CAGpE,OAAAryG,EAAA,CACR,EACKo0G,EAAkBrwG,EAAAA,SAAS,IAAMswG,EAAoBv7F,EAAM,cAAc,CAAC,EAC1Ew7F,EAAqBvwG,EAAAA,SAAS,IAAMswG,GAAqB,EACzDE,EAAiBxwG,EAAAA,SAAS,IACvB+U,EAAM,QAAQ,KAAK48D,GAAU,CAACA,EAAO,MAAQA,EAAO,QAAQ,CACpE,EACK8+B,EAAiBzwG,EAAAA,SAAS,IACvB,CAAC,EAAE+U,EAAM,iBAAiB,QAAUA,EAAM,kBAAkB,OACpE,EAEK+zF,EAAUr9F,EAAAA,SAAS,CACvB,aAAAujG,EACA,WAAAE,EACA,cAAAE,EACA,YAAAE,EACA,iBAAAC,EACA,kBAAAG,EACA,gBAAAE,EACA,UAAAE,EACA,cAAAC,EACA,YAAAC,EACA,YAAAtG,EACA,aAAAwG,EACA,gBAAAC,EACA,iBAAAC,EACA,aAAAT,EACA,YAAA3B,EACA,gBAAAqC,EACA,mBAAAE,EACA,eAAAC,EACA,eAAAC,CAAA,CACD,EAEK1H,EAAY,CAGhB,WAAY3uG,GAAcw0G,CAAU,EAEpC,aAAcx0G,GAAcy0G,CAAY,EACxC,QAASz0G,GAAc00G,EAAO,EAG9B,kBAAmB10G,GAAc6xG,EAAiB,EAElD,cAAAyE,EACA,gBAAAC,EACA,cAAAtI,EACA,eAAAuI,EACA,WAAAC,EACA,eAAAC,GACA,YAAAC,GACA,YAAAC,GACA,YAAAC,GACA,YAAAC,GACA,aAAAC,GACA,aAAAC,EACA,aAAAC,EACA,aAAAC,EACA,aAAAC,EACA,aAAAC,EACA,aAAAC,EACA,aAAAC,EACA,aAAAC,GACA,cAAAC,EACA,aAAAC,GACA,gBAAAC,GACA,cAAAC,GACA,WAAAC,GACA,gBAAAC,GACA,eAAAC,GACA,eAAAC,GACA,UAAAC,GACA,UAAAC,GACA,aAAAC,GACA,WAAAC,GACA,UAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,YAAAC,GACA,aAAAC,GACA,gBAAAC,GACA,cAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,kBAAAC,GACA,cAAAC,GACA,kBAAAC,GACA,YAAAC,GACA,eAAAC,GACA,eAAAC,GACA,cAAAC,GACA,YAAAC,GACA,UAAAC,GACA,gBAAAC,GACA,iBAAAC,GAEA,WAAAC,EACA,UAAAC,GACA,aAAArJ,GACA,YAAAsJ,GACA,uBAAAC,GACA,gBAAAC,GACA,YAAAC,GACA,eAAAC,GACA,cAAAC,GACA,cAAAC,GACA,aAAAroB,GACA,WAAA90B,GACA,iBAAAo9C,GACA,gBAAAC,GACA,aAAAC,GACA,mBAAAC,GACA,eAAAC,GACA,kBAAAC,EACA,aAAAC,EACA,gBAAAC,GACA,oBAAAC,EACA,SAAAC,EACF,EAEA5qG,EAAAA,YAAY,IAAM,CAChB0K,EAAM,aAAezlB,GACnB8/G,EAAc,MAAM,OACpBr6F,EAAM,WAAaA,EAAM,YAC3B,EAEAA,EAAM,YAAc,GACFk3F,GAAA,CAAA,CACnB,EACD5hG,EAAAA,YAAY6qG,EAAe,EAE3B,SAASF,GAAsB,CAC7B,EAAEjgG,EAAM,cAEJA,EAAM,eAAiB,OAAO,mBAChCA,EAAM,cAAgB,EACxB,CAGO,SAAAk7F,EAAiB/H,EAAUnzF,EAAM,QAAS,CACjD,MAAMogG,GAASpgG,EAAM,OACfqgG,GAA2B,CAAC,CAAC,EAEnC,IAAIt4F,GAAQ,EAEH,QAAA/zB,GAAI,EAAG4H,GAAMu3G,EAAQ,OAAQn/G,GAAI4H,GAAK,EAAE5H,GAAG,CAElD,MAAMrB,GADSwgH,EAAQn/G,EAAC,EACL,IACbssH,GAAcF,GAAO,IAAIztH,EAAG,GAAK,EAE9Bo1B,IAAAu4F,GACTD,GAAe,KAAKt4F,EAAK,CAAA,CAGpB,OAAAs4F,EAAA,CAGA,SAAA9E,EAAoBxC,EAAY/4F,EAAM,eAAgB,CAC7D,MAAMugG,GAASvgG,EAAM,OACfg5F,GAAoB,CAAC,CAAC,EAE5B,IAAIhxF,GAAS,EAEJ,QAAAh0B,GAAI,EAAG4H,GAAMm9G,EAAU,OAAQ/kH,GAAI4H,GAAK,EAAE5H,GAAG,CAC9C,MAAAklH,GAAUH,EAAU/kH,EAAC,EACrBrB,GAAMipH,EAAgB1C,GAAQ,GAAG,EACjC7/C,GAAMknD,GAAO,IAAI5tH,EAAG,EAEtB0mE,KACFrxC,IAAUqxC,GAAI,QAAU,GAG1B2/C,GAAQ,KAAKhxF,EAAM,CAAA,CAGd,OAAAgxF,EAAA,CAGT,SAAS8G,EAAkBntH,EAAU,CAC5B,MAAA,CAAE,IAAAA,EAAK,YAAa,GAAI,OAAQqtB,EAAM,WAAaA,EAAM,YAAa,CAAA,CAG/E,SAAS27F,EAAc/+B,EAA2C,QACzD,MAAA,CAAC,GAACjyE,GAAAiyE,EAAO,WAAP,MAAAjyE,GAAiB,OAAA,CAG5B,SAAS61G,EAAarN,EAAkC,CACtD,MAAMqE,GAAmC,CAAC,EACpCiJ,GAA+B,CAAC,EAChCC,OAAgB,IAChBC,OAAmB,IAEnBC,GAAiBj/E,IACdA,KAAU,IAAQA,KAAU,OAAS,GAAKA,KAAU,QAAU,EAAI,EAErEk/E,GAAQ,CACZC,GACAn/E,GACA03B,GAAM,EACNn8D,GAA+B,KAC5B,CACH4jH,GAAWA,GACR,OAAiBlkC,IAAA,EAAE,aAAcA,KAAW++B,EAAc/+B,EAAM,CAAC,EACjE,KAAK,CAACnzE,GAAMC,MAAUD,GAAK,OAAS,IAAMC,GAAK,OAAS,EAAE,EAC1D,KAAK,CAACD,GAAMC,KAASk3G,GAAcn3G,GAAK,KAAK,EAAIm3G,GAAcl3G,GAAK,KAAK,CAAC,EACrEi4B,GAAAA,KAAU,GAAO,OAASA,GAElC,MAAMwxE,GAAU2N,GACVpJ,GAAax6G,GAAOm8D,EAAG,IAAMn8D,GAAOm8D,EAAG,EAAI,IAE7C,IAAA3+D,GAAQ2+D,GAAM,EAAIn8D,GAAOm8D,GAAM,CAAC,EAAE,OAAS,EAAI,EAEnD,SAAW,CAAE,GAAGujB,EAAO,IAAKu2B,GAAS,CAO/B,GANCtgH,GAAO8uC,EAAK,IACfi7C,GAAO,MAAQj7C,IAGjB+1E,GAAWh9G,EAAK,EAAIkiF,GAEhB++B,EAAc/+B,EAAM,EAAG,CACnB,MAAAn7C,GAAWo/E,GAAMjkC,GAAO,SAAUA,GAAO,MAAOvjB,GAAM,EAAGn8D,EAAM,EAE9D0/E,GAAA,IAAM,OAAO,kBAAkB,EACtCA,GAAO,SAAWn7C,GAAW/mC,GACrBA,GAAA+mC,EAAA,KACH,CACL,MAAMs/E,GAAYnkC,GAAO,MAAQN,GAAY,SAASM,GAAO,IAAI,EAE7DmkC,KACEJ,GAAa,IAAI/jC,GAAO,IAAI,GAC9B,QAAQ,KAAK,0DAA0DA,GAAO,IAAI,GAAG,EAG1E+jC,GAAA,IAAI/jC,GAAO,IAAI,GAG9B,IAAIjqF,GAAMiqF,GAAO,IAEb/pF,GAAOF,EAAG,IACRouH,GACIpuH,GAAA,SAASiqF,GAAO,IAAI,IAE1B,QAAQ,KAAK,8DAA8D,EAE3EjqF,GAAMo8E,GAAW,IAIrB6N,GAAO,IAAMjqF,GACb8tH,GAAY,KAAK7jC,EAAM,EACdliF,IAAA,CAAA,CAGDgmH,GAAA,IAAI9jC,GAAO,IAAKA,EAAM,CAAA,CAG3B,OAAAliF,EACT,EAEMmmH,GAAA1N,EAAS,OAAW,EAAGqE,EAAU,EAEvC,IAAIrjH,GAAS,EAEb,UAAWujH,MAAcF,GACvBrjH,GAAS,KAAK,IAAIujH,GAAW,OAAQvjH,EAAM,EAG7C,UAAWujH,MAAcF,GACnBE,GAAW,SACL/wG,GAAA+wG,EAAU,EAAG,KAAO,IAG9BA,GAAW,OAASvjH,GAGb,QAAAH,GAAI,EAAGgtH,GAAWxJ,GAAW,OAAQxjH,GAAIG,GAAQ,EAAEH,GAAG,CAC7D,IAAImlD,GAAO,EAEX,QAAS0K,GAAIm9D,GAAW,EAAGn9D,IAAK,EAAG,EAAEA,GAAG,CACtC,MAAM+4B,GAAS46B,GAAW3zD,EAAC,EAAE7vD,EAAC,EAE1B4oF,IACFA,GAAO,SAAW5oF,GAClB4oF,GAAO,QAAUzjC,GACVA,GAAA,GAEL,EAAAA,EACJ,CACF,CAGK,MAAA,CAAE,WAAAq+D,GAAY,YAAAiJ,GAAa,UAAAC,EAAU,CAAA,CAG9C,SAAS7G,EAAW1G,EAAkC,CACpD,KAAM,CAAE,OAAAiN,GAAQ,QAAAa,GAAS,QAAAC,EAAY,EAAAlhG,EAC/B,CAAE,WAAAw3F,GAAY,YAAAiJ,GAAa,UAAAC,EAAU,EAAIF,EAAarN,CAAO,EAE7DgO,GAAiC,CAAC,EAClCC,GAAqC,CAAC,EACtCC,GAAoC,CAAC,EAElC,QAAArtH,GAAI,EAAG4H,GAAM6kH,GAAY,OAAQzsH,GAAI4H,GAAK,EAAE5H,GAAG,CAChD,MAAA4oF,GAAS6jC,GAAYzsH,EAAC,EAM5B,GAJA4oF,GAAO,MAAQ,GACfA,GAAO,KAAO,GACdA,GAAO,MAAQ5oF,GAEX4oF,GAAO,MAAQN,GAAY,SAASM,GAAO,IAAI,EAAG,CACpD,OAAQA,GAAO,KAAM,CACnB,IAAK,QAAS,CACLA,GAAA,WAAa,CAAC,CAACA,GAAO,WAEzB,OAAOA,GAAO,YAAe,aAC/BA,GAAO,WAAa68B,IAGlB5mH,GAAO+pF,GAAO,KAAK,IACrBA,GAAO,MAAQ,GACfA,GAAO,SAAW,IAGpB,KAAA,CAEF,IAAK,YAAa,CACTA,GAAA,cAAgBA,GAAO,eAAiB,UAE3C,OAAOA,GAAO,YAAe,aAC/BA,GAAO,WAAalpF,IAGlBb,GAAO+pF,GAAO,KAAK,IACrBA,GAAO,MAAQ,GACfA,GAAO,SAAW,IAGpB,KAAA,CAEF,IAAK,SAAU,CACT,OAAOA,GAAO,YAAe,aAC/BA,GAAO,WAAalpF,IAGlBb,GAAO+pF,GAAO,KAAK,IACrBA,GAAO,MAAQ,GACfA,GAAO,SAAW,IAGpB,KAAA,CAEF,IAAK,OAAQ,CACP,OAAOA,GAAO,YAAe,aAC/BA,GAAO,WAAalpF,IAGlBb,GAAO+pF,GAAO,KAAK,IACrBA,GAAO,MAAQ,GACfA,GAAO,SAAW,IAGpB,KAAA,CACF,CAGGA,GAAO,MACVA,GAAO,IAAM,SAASA,GAAO,IAAI,IAAI5oF,EAAC,GACxC,MAEA4oF,GAAO,KAAO,OAITwjC,GAAA,IACLxjC,GAAO,IACP,OAAOA,GAAO,OAAU,SACpB+8B,GACA,KAAK,MACLpiH,GACEqlF,GAAO,OAAS88B,GAChB98B,GAAO,UAAY+8B,GACnB/8B,GAAO,UAAY,GAAA,CACrB,CAEN,EACAqkC,GAAQ,IAAIrkC,GAAO,IAAK0kC,GAAY1kC,GAAO,MAAM,CAAC,EAClDskC,GAAQ,IAAItkC,GAAO,IAAK2kC,GAAY3kC,GAAO,MAAM,CAAC,EAElD,MAAMj7C,GAAQi7C,GAAO,MAEjBj7C,KAAU,IAAQA,KAAU,OAC9B0/E,GAAiB,KAAKzkC,EAAM,EACnBj7C,KAAU,QACnBy/E,GAAkB,KAAKxkC,EAAM,EAE7BukC,GAAc,KAAKvkC,EAAM,CAC3B,CAGF,GAAI58D,EAAM,WAAW,OAASw3F,GAAW,OAC9B,QAAAxjH,GAAIwjH,GAAW,OAAS,EAAG57G,GAAMokB,EAAM,WAAW,OAAQhsB,GAAI4H,GAAK,EAAE5H,GAC5EgsB,EAAM,OAAO,OAAO,GAAG6xF,EAAiB,GAAG79G,EAAC,EAAE,EAIzC,QAAAA,GAAI,EAAG4H,GAAM47G,GAAW,OAAQxjH,GAAI4H,GAAK,EAAE5H,GAAG,CACrD,MAAMwiH,GAAS,GAAG3E,EAAiB,GAAG79G,EAAC,GAEvCgsB,EAAM,OAAO,IAAIw2F,GAAQsJ,EAAkBtJ,EAAM,CAAC,CAAA,CAQhD,GALJx2F,EAAM,UAAY0gG,GAClB1gG,EAAM,QAAU,MAAM,KAAKqhG,EAAgB,EAAE,OAAOF,GAAeC,EAAiB,EACpFphG,EAAM,cAAgBmhG,GACtBnhG,EAAM,WAAaw3F,GAEfx3F,EAAM,QAAQ,OAAQ,CACb,UAAA48D,MAAU58D,EAAM,QACrB,GAAA,CAAC48D,GAAO,KAAM,CAChBA,GAAO,MAAQ,GACf,KAAA,CAIIj2E,GAAAqZ,EAAM,OAAO,EAAG,KAAO,EAAA,CAG7BqhG,GAAiB,SACnBrhG,EAAM,iBAAmBqhG,IAGvBD,GAAkB,SACpBphG,EAAM,kBAAoBohG,GAC5B,CAGO,SAAA9N,EAAc3gH,EAAU6O,GAAchP,GAAY,CACrDwtB,EAAM,UAAU,IAAIrtB,CAAG,IACvBqtB,EAAM,UAAU,IAAIrtB,CAAG,EAAU6O,EAAI,EAAIhP,GAC7C,CAGF,SAASopH,EAAgBjpH,EAAU,CACjC,OAAO,OAAOA,GAAQ,SAAWA,EAAM,GAAGm/G,EAAiB,GAAGn/G,CAAG,EAAA,CAGnE,SAASmnH,EAAaf,EAAkC,CACtDA,EAAY,MAAM,KAAKA,CAAS,EAAE,KAAK,CAACtvG,GAAMC,MACpCD,GAAK,OAAS,IAAMC,GAAK,OAAS,EAC3C,EAEK,MAAA83G,GAAW,IAAI,IAAIxhG,EAAM,UAAU,IAAIk5F,IAAWA,GAAQ,GAAG,CAAC,EAC9DuI,GAAmC,CAAC,EACpCC,GAAmC,CAAC,EACpCC,OAAiB,IAEd,QAAA3tH,GAAI,EAAG4H,GAAMm9G,EAAU,OAAQ/kH,GAAI4H,GAAK,EAAE5H,GAAG,CACpD,MAAMklH,GAAU,CAAE,GAAGH,EAAU/kH,EAAC,CAAE,EAElC,IAAIrB,GAAMumH,GAAQ,IAWlB,GATIrmH,GAAOF,EAAG,IACZ,QAAQ,MAAM,+DAA+D,EAE7EA,GAAMo8E,GAAW,GAGnBmqC,GAAQ,IAAMvmH,IACZumH,GAAQ,MAAQuI,GAAiBC,IAAgB,KAAKxI,EAAO,EAE3D,CAACsI,GAAS,IAAItI,GAAQ,GAAG,EAAG,CACxB,MAAA1C,GAASoF,EAAgB1C,GAAQ,GAAG,EAE1Cl5F,EAAM,OAAO,IAAIw2F,GAAQsJ,EAAkBtJ,EAAM,CAAC,CAAA,CAG3CgL,GAAA,OAAOtI,GAAQ,GAAG,EAChByI,GAAA,IAAIzI,GAAQ,IAAKA,EAAO,CAAA,CAcrC,GAXAl5F,EAAM,UAAY,MAAM,KAAKyhG,EAAc,EAAE,OAAOC,EAAc,EAClE1hG,EAAM,WAAa2hG,GAEfF,GAAe,SACjBzhG,EAAM,eAAiByhG,IAGrBC,GAAe,SACjB1hG,EAAM,eAAiB0hG,IAGrBF,GAAS,KACX,UAAW7uH,MAAO6uH,GAChBxhG,EAAM,OAAO,OAAO47F,EAAgBjpH,EAAG,CAAC,CAE5C,CAGO,SAAAkpH,EAAelpH,EAAU6O,GAAchP,GAAY,CACtDwtB,EAAM,WAAW,IAAIrtB,CAAG,IACxBqtB,EAAM,WAAW,IAAIrtB,CAAG,EAAU6O,EAAI,EAAIhP,GAC9C,CAGF,SAASspH,EAAWpwE,EAAe,CACjC,MAAMk2E,GAAa5hG,EAAM,QAEzB,GAAI,CAACntB,GAAO64C,CAAK,GAAKk2E,KAAel2E,EAAO,CACpC,KAAA,CAAE,QAAA+uE,GAAS,OAAAoH,EAAA,EAAW7hG,EAE5BA,EAAM,QAAU0rB,EAEhB+uE,GAAQ,QAAephD,IAAA,CACjB,IAAA1mE,GAAM0mE,GAAI,KAAK3tB,CAAK,EAEpB74C,GAAOF,EAAG,IACZA,GAAMo8E,GAAW,GAGnB1V,GAAI,IAAM1mE,GACHkvH,GAAA,IAAIxoD,GAAI,KAAM1mE,EAAG,CAAA,CACzB,CAAA,CACH,CAGF,SAAS8sH,GAAiBpmD,EAAoBn8D,GAA0B,GAAI,QAC1E,GAAIm8D,EAAI,gBAAgB1uD,GAAA0uD,EAAI,WAAJ,MAAA1uD,GAAc,QACzB,UAAAm3G,MAAYzoD,EAAI,SACzBn8D,GAAO,KAAK4kH,EAAQ,EACpBrC,GAAiBqC,GAAU5kH,EAAM,EAI9B,OAAAA,EAAA,CAGT,SAAS68G,GAAQt4G,EAAc,CAC7B,MAAMsgH,GAA8B,CAAC,EAC/BxB,OAAa,IACb,CAAE,WAAA/I,GAAY,QAAAwK,GAAS,UAAAr2D,GAAW,OAAAk2D,GAAQ,aAAAI,IAAiBjiG,EAC3DkiG,GAAaliG,EAAM,OACnBumB,GAAS,CAAC,CAACvmB,EAAM,QAEjB,CACJ,SAAU4sC,GACV,QAASu1D,GACT,OAAQC,GACR,SAAUC,GACV,aAAcC,EAAA,EACZ32D,GAEK,QAAA33D,GAAI,EAAG4H,GAAM47G,GAAW,OAAQxjH,GAAI4H,GAAK,EAAE5H,GAAG,CACrD,MAAMrB,GAAM,GAAGk/G,EAAiB,GAAG79G,EAAC,GAE7BusH,GAAA,IAAI5tH,GAAKuvH,GAAW,IAAIvvH,EAAG,GAAKmtH,EAAkBntH,EAAG,CAAC,CAAA,CAGpD,UAAAumH,MAAWl5F,EAAM,UAAW,CAC/B,MAAArtB,GAAMipH,EAAgB1C,GAAQ,GAAG,EAEhCqH,GAAA,IAAI5tH,GAAKuvH,GAAW,IAAIvvH,EAAG,GAAKmtH,EAAkBntH,EAAG,CAAC,CAAA,CAG/D,MAAM4vH,GAAW,CAAClgG,GAAgBnlB,GAAyBqE,KAA2B,CAC3E,QAAAvN,GAAI,EAAG4H,GAAMymB,GAAO,OAAQruB,GAAI4H,GAAK,EAAE5H,GAAG,CAC3C,MAAA2N,GAAO0gB,GAAOruB,EAAC,EAEjB,IAAArB,GAAMgP,GAAKqgH,EAAO,EAElBnvH,GAAOF,EAAG,IACNA,GAAAkvH,GAAO,IAAIlgH,EAAI,EAEjB9O,GAAOF,EAAG,IACZA,GAAMo8E,GAAW,IAIjB,IAAA1V,GAEA,GAAA6oD,GAAW,IAAIvvH,EAAG,EAAG,CACjB0mE,GAAA6oD,GAAW,IAAIvvH,EAAG,EAElB,KAAA,CACJ,CAACwvH,EAAU,EAAGx6C,GACd,CAACy6C,EAAS,EAAGp6F,GACb,CAACq6F,EAAW,EAAG5yC,GACf,CAAC6yC,EAAe,EAAGE,EACrB,EAAInpD,GAAI,OAAS13D,GAAO,OAAO,OAAO03D,GAAI,KAAM13D,EAAI,EAAI03D,GAAI,KAExDA,GAAA,QAAWxmE,GAAO80E,EAAO,EAAgBtO,GAAI,QAAhB,CAAC,CAACsO,GAC/BtO,GAAA,OAAUxmE,GAAOm1B,EAAM,EAAuBqxC,GAAI,OAAvB99D,GAASysB,EAAM,EAC1CqxC,GAAA,SAAYxmE,GAAO48E,EAAQ,EAAiBpW,GAAI,SAAjB,CAAC,CAACoW,GACjCpW,GAAA,aAAgBxmE,GAAO2vH,EAAY,EAAqBnpD,GAAI,aAArB,CAAC,CAACmpD,EAAmB,KAC3D,CACC,KAAA,CACJ,CAACL,EAAU,EAAGx6C,GACd,CAACy6C,EAAS,EAAGp6F,GACb,CAACq6F,EAAW,EAAG5yC,GACf,CAAC6yC,EAAe,EAAGE,EAAA,EACjB7gH,GAEE03D,GAAA,CACJ,IAAA1mE,GACA,OAAA4zC,GACA,QAAS,CAAC,CAACohC,GACX,OAAQpsE,GAASysB,EAAM,EACvB,SAAU,CAAC,CAACynD,GACZ,MAAO,GACP,aAAc,EACd,MAAO,GACP,SAAU,CAAC,EACX,MAAO,EACP,aAAc,CAAC,CAAC+yC,GAChB,QAAS,GACT,SAAU,GACV,UAAW,EACX,YAAa9rG,EAAS,SAAA,EAAE,EACxB,KAAM,GACN,cAAe,GACf,KAAM/U,EACR,EAEOkgH,GAAA,IAAIlgH,GAAMhP,EAAG,CAAA,CAGlB4O,KACF83D,GAAI,OAAS93D,GAAO,IAChB83D,GAAA,MAAQ93D,GAAO,MAAQ,GAG7B83D,GAAI,SAAW,CAAC,EAEV,MAAA3wD,GAAW2wD,GAAI,KAAKzM,EAAW,EACrClkD,IAAA,MAAAA,GAAU,QAAU65G,GAAS75G,GAAU2wD,GAAI,SAAUA,EAAG,EAExDn8D,GAAO,KAAKm8D,EAAG,EACRknD,GAAA,IAAI5tH,GAAK0mE,EAAG,CAAA,CAEvB,EAEAkpD,GAAS9gH,EAAMsgH,EAAU,EAEzB/hG,EAAM,OAASugG,GACfvgG,EAAM,YAAc+hG,GAEfE,GAGHjiG,EAAM,QAAU+hG,GAFHhC,EAAA,EAKf//F,EAAM,KAAOve,EAEG29G,GAAA,EACDqD,GAAA,CAAA,CAGjB,SAAS1C,GAAe,CACtB,GAAI//F,EAAM,aAAc,OAExB,MAAMy6F,EAA2B,CAAC,EAEvB,UAAAphD,MAAOr5C,EAAM,YACtBy6F,EAAQ,KAAKphD,EAAG,EAChBomD,GAAiBpmD,GAAKohD,CAAO,EAG/Bz6F,EAAM,QAAUy6F,CAAA,CAGlB,SAASuF,IAAkB,CACzBn3G,GAASmX,EAAM,YAAa,CAACq5C,EAAKvwD,KAAU,CAC1CuwD,EAAI,MAAQvwD,EAAA,CACb,CAAA,CAGH,SAASizG,GAAe2G,EAAqB,CAC3C1iG,EAAM,YAAc0iG,GAAe,CAAA,CAGrC,SAAS1G,GAAYzX,EAAkB,CACrCvkF,EAAM,SAAWukF,GAAY,CAAA,CAG/B,SAAS0X,GAAY0G,EAAiD,CACpE3iG,EAAM,SAAW2iG,GAAY,EAAA,CAG/B,SAASzG,GAAY0G,EAAiD,CACpE5iG,EAAM,SAAW4iG,GAAY,EAAA,CAG/B,SAASzG,GAAY0G,EAAqE,CACxF7iG,EAAM,SAAW6iG,GAAY,IAAA,CAG/B,SAASzG,GAAa0G,EAAmD,CACvE9iG,EAAM,UAAY8iG,GAAa,EAAA,CAGjC,SAASzG,EAAa0G,EAAmD,CACvE/iG,EAAM,UAAY+iG,GAAa,EAAA,CAGjC,SAASzG,EAAa0G,EAAuE,CAC3FhjG,EAAM,UAAYgjG,GAAa,IAAA,CAGjC,SAASzG,EAAa0G,EAAmD,CACvEjjG,EAAM,UAAYijG,GAAa,EAAA,CAGjC,SAASzG,EAAa0G,EAAmD,CACvEljG,EAAM,UAAYkjG,GAAa,EAAA,CAGjC,SAASzG,EAAa0G,EAAuE,CAC3FnjG,EAAM,UAAYmjG,GAAa,IAAA,CAGjC,SAASzG,EAAa0G,EAAmD,CACvEpjG,EAAM,UAAYojG,GAAa,EAAA,CAGjC,SAASzG,EAAa0G,EAAmD,CACvErjG,EAAM,UAAYqjG,GAAa,EAAA,CAGjC,SAASzG,GAAa0G,EAAuE,CAC3FtjG,EAAM,UAAYsjG,GAAa,IAAA,CAGjC,SAASzG,EAAc90F,EAAe,CACpCA,EAAQxsB,GAASwsB,CAAK,EAEtB,KAAM,CAAE,QAAAorF,GAAS,OAAAiN,GAAQ,QAAAmD,EAAY,EAAAvjG,EAG/BwjG,GAA+B,CAAC,EAEtC,IAAIC,GAAY17F,EAEP,QAAA/zB,GAAI,EAAG4H,GAAMu3G,GAAQ,OAAQn/G,GAAI4H,GAAK,EAAE5H,GAAG,CAC5C,MAAA4oF,GAASu2B,GAAQn/G,EAAC,EAClB,CAAE,SAAA8/G,GAAU,SAAAhwD,EAAA,EAAa84B,GAE/B,GAAI2mC,GAAQ,IAAI3mC,GAAO,GAAG,EACX6mC,IAAArD,GAAO,IAAIxjC,GAAO,GAAG,UAEzBA,GAAO,MACZ,GAAA,OAAOA,GAAO,OAAU,SAAU,CACpC,MAAM1iF,GAAU3C,GAAWgE,GAASqhF,GAAO,KAAK,EAAG,EAAG,GAAG,EAEzD,GAAI1iF,GAAS,CACX,MAAMwpH,GAAa,KAAK,MACtBnsH,GACGwwB,EAAQ7tB,GAAW,IACpB45G,IAAY6F,GACZ71D,IAAY,GAAA,CAEhB,EAEa2/D,IAAAC,GACNtD,GAAA,IAAIxjC,GAAO,IAAK8mC,EAAU,CACN,MAE3BF,GAAY,KAAK5mC,EAAM,CACzB,KACK,CACL,MAAM70D,GAAQ,KAAK,MACjBxwB,GACEqlF,GAAO,OAAS88B,GAChB5F,IAAY6F,GACZ71D,IAAY,GAAA,CAEhB,EAEa/7B,IAAAA,GACNq4F,GAAA,IAAIxjC,GAAO,IAAK70D,EAAK,CACD,MAG7By7F,GAAY,KAAK5mC,EAAM,CACzB,CAGF,MAAM+mC,GAAkBH,GAAY,OAC9BI,GAAaC,GAAiBL,GAAaC,EAAS,EAE1D,IAAIK,GAAY,EAEhB,QAAS9vH,GAAI,EAAGA,GAAI2vH,GAAiB,EAAE3vH,GAAG,CAClC,MAAA4oF,GAAS4mC,GAAYxvH,EAAC,EACtB+zB,GAAQ,KAAK/zB,GAAI,EAAI,OAAS,OAAO,EAAE4vH,GAAW5vH,EAAC,CAAC,EAEtDA,GAAI2vH,GAAkB,IACX57F,IAAAA,IAGRq4F,GAAA,IAAIxjC,GAAO,IAAK70D,EAAK,CAAA,CAG1B47F,IAAmBF,IAAaK,GAAYn9G,GAAQi9G,EAAU,GAChExD,GAAO,IAAIz5G,GAAQ68G,EAAW,EAAG,IAAKC,GAAYK,EAAS,EAG7D9jG,EAAM,MAAQ+H,CAAA,CAGP,SAAA87F,GAAiB1Q,EAA0BxvD,GAA8B,CAChF,MAAMlnD,GAAQ02G,EAAQ,OAChB4Q,GAAY,KAAK,IAAIpgE,GAAalnD,GAAOi9G,EAAoB,EAE7D0G,GAASjN,EAAQ,IAAW6Q,IAAA,CAChC,IAAIC,GAAIF,GACJ,OAAAC,GAAI,UAAY,OAAMC,GAAI,KAAK,IAAIA,GAAGD,GAAI,QAAQ,GAClDA,GAAI,UAAY,OAAMC,GAAI,KAAK,IAAIA,GAAGD,GAAI,QAAQ,GAC/CC,EAAA,CACR,EAEKC,GAAe9D,GAAO,OAAO,CAAChpH,GAAGf,KAAMe,GAAIf,GAAG,CAAC,EACrD,IAAIsE,GAAQgpD,GAAaugE,GAEzB,MAAMC,GAAWnwH,IAAcm/G,EAAQn/G,EAAC,EAAE,UAAY,MAAQosH,GAAOpsH,EAAC,EAAIm/G,EAAQn/G,EAAC,EAAE,SAC/EowH,GAAapwH,IAAcm/G,EAAQn/G,EAAC,EAAE,UAAY,MAAQosH,GAAOpsH,EAAC,EAAIm/G,EAAQn/G,EAAC,EAAE,SAEjFqwH,GAAU,GAChB,IAAIC,GAAW,GAEf,KAAO,KAAK,IAAI3pH,EAAK,EAAI0pH,IAAS,CAChC,MAAME,GAAoBnE,GACvB,IAAI,CAACv1G,GAAG7W,KACH2G,GAAQ,GAAKwpH,GAAQnwH,EAAC,GACtB2G,GAAQ,GAAKypH,GAAUpwH,EAAC,EAAUA,GAC/B,EACR,EACA,OAAOA,IAAKA,KAAM,EAAE,EAEnB,GAAAuwH,GAAkB,SAAW,EAAG,CACvBD,GAAA,GACX,KAAA,CAGI,MAAAE,GAAa7pH,GAAQ4pH,GAAkB,OAC7C,UAAWvwH,MAAKuwH,GAAmB,CAC3B,MAAAhkG,GAAM6/F,GAAOpsH,EAAC,EACpB,IAAI0V,GAAO6W,GAAMikG,GAEbrR,EAAQn/G,EAAC,EAAE,UAAY,OAAW0V,GAAO,KAAK,IAAIA,GAAMypG,EAAQn/G,EAAC,EAAE,QAAS,GAC5Em/G,EAAQn/G,EAAC,EAAE,UAAY,OAAW0V,GAAO,KAAK,IAAIA,GAAMypG,EAAQn/G,EAAC,EAAE,QAAS,GAEhF2G,IAAS+O,GAAO6W,GAChB6/F,GAAOpsH,EAAC,EAAI0V,EAAA,CAGH46G,GAAA,EAAA,CAIT,MAAA,CAACA,IAAY3pH,GAAQ0pH,KAChBjE,GAAA3jH,GAAQ,CAAC,GAAK9B,IAGhBylH,EAAA,CAGT,SAAStD,GAAa90F,EAAgB,CACpChI,EAAM,UAAYgI,CAAA,CAGpB,SAAS+0F,GAAgB/0F,EAAgB,CACvChI,EAAM,aAAegI,CAAA,CAGd,SAAAg1F,GAAcxG,EAAaiO,GAAgBz8F,GAAgB,CAC9D,CAACn1B,GAAOm1B,EAAM,GAAKhI,EAAM,OAAO,IAAIw2F,CAAM,IAC5Cx2F,EAAM,OAAO,IAAIw2F,CAAM,EAAG,YAAYiO,EAAS,EAAIz8F,GACrD,CAGF,SAASk1F,GAAgBpG,EAAoB,CACrC92F,EAAA,aAAe,CAAC,CAAC82F,CAAA,CAGzB,SAASqG,GAAe9qF,EAAgB,CACtCrS,EAAM,YAAcqS,CAAA,CAGtB,SAAS+qF,GAAe/qF,EAAgB,CACtCrS,EAAM,YAAcqS,CAAA,CAGtB,SAASgrF,GAAU3qC,EAAe,CAC1B1yD,EAAA,OAAS,CAAC,CAAC0yD,CAAA,CAGnB,SAAS4qC,GAAU5qC,EAAe,CAC1B1yD,EAAA,OAAS,CAAC,CAAC0yD,CAAA,CAGnB,SAAS6qC,GAAa7qC,EAAe,CAC7B1yD,EAAA,UAAY,CAAC,CAAC0yD,CAAA,CAGtB,SAASuqC,GAAWn2D,EAAkB,CAC9B9mC,EAAA,QAAU,CAAC,CAAC8mC,CAAA,CAGX,SAAA02D,GAAW7qH,EAAU6O,GAA2ChP,GAAY,CACnF,MAAM6mE,GAAMr5C,EAAM,OAAO,IAAIrtB,CAAG,EAE5B0mE,IAAOA,GAAI73D,EAAI,IAAMhP,KACrB6mE,GAAY73D,EAAI,EAAIhP,GACxB,CAGF,SAASirH,GAAUvxG,EAA+B,CAChD8T,EAAM,OAAS9T,CAAA,CAGjB,SAASwxG,GAAgBhqC,EAAqB,CAC5C1zD,EAAM,aAAe0zD,CAAA,CAGvB,SAASiqC,GAAgBjqC,EAAwB,CAC/C1zD,EAAM,aAAe0zD,CAAA,CAGvB,SAASkqC,GAAgBlrC,EAAe,CAChC1yD,EAAA,aAAe,CAAC,CAAC0yD,CAAA,CAGzB,SAASmrC,GAAgBnrC,EAAe,CAChC1yD,EAAA,aAAe,CAAC,CAAC0yD,CAAA,CAGzB,SAASorC,GAAYhjD,EAAmB,CAChC96C,EAAA,SAAW,CAAC,CAAC86C,CAAA,CAGrB,SAASijD,GAAapyD,EAAqC,CACzD3rC,EAAM,UAAY2rC,CAAA,CAGpB,SAASqyD,GAAgBvgG,EAAmB,CACpCuC,EAAA,aAAe,CAAC,CAACvC,CAAA,CAGzB,SAASwgG,GAAcyG,EAAqB,CACpC1kG,EAAA,WAAa,CAAC,CAAC0kG,CAAA,CAGvB,SAASxG,GAAgBhK,EAAyC,CAC1Dl0F,EAAA,aAAek0F,IAAc,GAAO,OAASA,CAAA,CAGrD,SAASiK,GAAgBzrC,EAAe,CAChC1yD,EAAA,aAAe,CAAC,CAAC0yD,CAAA,CAGzB,SAAS0rC,GAAgB1rC,EAAe,CAChC1yD,EAAA,aAAe,CAAC,CAAC0yD,CAAA,CAGzB,SAAS2rC,GAAkBtoC,EAAmB,CACtC/1D,EAAA,YAAc,CAAC,CAAC+1D,CAAA,CAGxB,SAASuoC,GAActjH,EAAc,CACnCglB,EAAM,WAAahlB,CAAA,CAGrB,SAASujH,GAAkBrkG,EAAiC,CAC1D8F,EAAM,eAAiB9F,CAAA,CAGzB,SAASskG,GAAYmG,EAAgC,CACnD3kG,EAAM,SAAW2kG,CAAA,CAGnB,SAASlG,GAAe72F,EAA4B,CAC5C5H,EAAA,YAAc,MAAM,QAAQ4H,CAAO,EAAIA,EAAU,CAACA,EAASA,CAAO,CAAA,CAG1E,SAAS82F,GAAe32F,EAAe,CACrC/H,EAAM,YAAc,KAAK,IAAI+H,EAAO,CAAC,CAAA,CAGvC,SAAS42F,GAAcv2G,EAAiC,CACtD4X,EAAM,WAAa5X,CAAA,CAGrB,SAASw2G,GAAYrmB,EAAmB,CACtCv4E,EAAM,SAAWu4E,CAAA,CAGnB,SAASsmB,GAAUhf,EAAiB,CAClC7/E,EAAM,OAAS6/E,CAAA,CAGjB,SAASif,GAAgB1lE,EAAoB,CAC3Cp5B,EAAM,aAAeo5B,CAAA,CAGvB,SAAS2lE,GAAiBpsH,EAAiB,CACrC,GAAAqtB,EAAM,gBAAkBrtB,EAAK,CAC/B,MAAMiyH,GAAiB5kG,EAAM,eAAiBA,EAAM,OAAO,IAAIA,EAAM,aAAa,EAC5E6kG,GAAgBlyH,GAAOqtB,EAAM,OAAO,IAAIrtB,CAAG,EAE7CiyH,KACFA,GAAe,MAAQ,IAGrBC,KACFA,GAAc,MAAQ,GACxB,CAGF7kG,EAAM,cAAgBrtB,CAAA,CAGf,SAAAqsH,EAAWrsH,EAAUF,GAAwC,CAChEutB,EAAM,QAAQ,IAAIrtB,CAAG,IACnBqtB,EAAM,cAAgBvtB,IACdwsH,GAAA,EAGZj/F,EAAM,QAAQ,IAAIrtB,CAAG,EAAG,KAAOF,GACjC,CAGF,SAASwsH,IAAY,CACnB,MAAMgC,EAAUjhG,EAAM,QAEX,UAAAk1F,MAAU+L,EAAQ,SAC3B/L,GAAO,KAAO,IAChB,CAGO,SAAAU,GAAajjH,EAAUm1C,GAAuC,CACjE9nB,EAAM,QAAQ,IAAIrtB,CAAG,IACnBqtB,EAAM,eAAiB,MAAM,QAAQ8nB,EAAM,EAAIA,GAAO,OAASA,KACrDo3E,GAAA,EAGdl/F,EAAM,QAAQ,IAAIrtB,CAAG,EAAG,OAAS,MAAM,QAAQm1C,EAAM,EAAI,MAAM,KAAKA,EAAM,EAAIA,GAChF,CAGF,SAASo3E,IAAc,CACrB,MAAMgC,EAAUlhG,EAAM,QAEX,UAAA5X,MAAU84G,EAAQ,SAAU,CACrC94G,GAAO,OAAS,KAEL,UAAA0kD,MAAU1kD,GAAO,QAC1B0kD,GAAO,OAAS,EAClB,CACF,CAGF,KAAM,CAAE,oBAAAwd,EAAqB,kBAAAC,EAAkB,EAAI6uC,GAAmB,CACpE,QAASzmH,GAAOqtB,EAAM,OAAO,IAAIrtB,CAAG,EACpC,YAAoB0mE,GAAAmhD,EAAiB,MAAM,IAAInhD,EAAI,GAAG,CAAA,CACvD,EAED,SAASyrD,GAAenyH,EAAU,CAC1B,KAAA,CAAE,OAAA4tH,GAAQ,QAAA9F,EAAA,EAAYz6F,EACtB,CAAE,iBAAAw6F,EAAAA,EAAqBzG,EAE7B,GAAI,CAACwM,GAAO,IAAI5tH,CAAG,EAAG,OAEtB,MAAMoyH,GAAU,CAACxE,GAAO,IAAI5tH,CAAG,CAAE,EAAE,OAEjC8nH,GAAQ,OAAcD,IAAAA,GAAiB,IAAInhD,GAAI,GAAG,GAAKA,GAAI,OAAO,CACpE,EAES,QAAArlE,GAAI,EAAG4H,GAAMmpH,GAAQ,OAAQ/wH,GAAI4H,GAAK,EAAE5H,GAC3Bs2E,EAAAy6C,GAAQ/wH,EAAC,EAAE,GAAG,EAChBu2E,GAAAw6C,GAAQ/wH,EAAC,EAAE,GAAG,CAClC,CAGF,SAASqrH,GAAY1sH,EAAUg1E,GAAkBywC,GAAS,GAAO,CACzD,KAAA,CAAE,OAAAmI,GAAQ,WAAAmE,EAAA,EAAe1kG,EACzB,CAAE,iBAAAw6F,EAAAA,EAAqBzG,EACvB16C,GAAMknD,GAAO,IAAI5tH,CAAG,EAErB0mE,KAED++C,KACFmH,GAAc,EAAI,EACdlmD,GAAA,QAAU,CAAC,CAACsO,IAGb6yC,GAAiB,IAAI7nH,CAAG,IACvB0mE,GAAA,QAAU,CAAC,CAACsO,GAChBtO,GAAI,QAAU,IAGf,CAAAqrD,IAAcI,GAAenyH,CAAG,EAClB8vH,GAAA,EAAA,CAGjB,SAASnD,IAAiB,CAClB,KAAA,CAAE,QAAA7E,EAAS,WAAAuK,EAAA,EAAehlG,EAC1B,CAAE,iBAAAw6F,EAAAA,EAAqBzG,EAE7B,IAAIpsC,GAAU,CAACq9C,GAGf,GAAIxK,GAAiB,KAAM,CAGzB,IAAIyK,GAAoB,GAExB,UAAW5rD,MAAOohD,EAEZ,GAAA,CAACD,GAAiB,IAAInhD,GAAI,GAAG,GAAK,CAACA,GAAI,QAAS,CAC9B4rD,GAAA,GAEpB,KAAA,CAIJt9C,GAAU,CAACs9C,EAAA,CAGb,UAAW5rD,MAAOohD,EACXD,GAAiB,IAAInhD,GAAI,GAAG,IAC/BA,GAAI,QAAUsO,IAIlB3nD,EAAM,WAAa2nD,GACnB3nD,EAAM,QAAU,GAEDyiG,GAAA,CAAA,CAGR,SAAAlD,GAAc57G,EAAkB,GAAO,CACxC,KAAA,CAAE,QAAA82G,IAAYz6F,EACd,CAAE,iBAAAw6F,EAAAA,EAAqBzG,EAE7B,UAAW16C,MAAOohD,IACZ92G,GAAmB,CAAC62G,GAAiB,IAAInhD,GAAI,GAAG,KAClDA,GAAI,QAAU,IAGZ11D,IACF01D,GAAI,QAAU,IAIlBr5C,EAAM,WAAa,GACnBA,EAAM,QAAU,GAEhB,CAACrc,GAAmB8+G,GAAe,CAAA,CAGrC,SAASA,IAAiB,CACxB,MAAMhhH,EAAOue,EAAM,QAEnB,IAAIklG,GAAa,GACbC,GAAgB,GAChBt5C,GAAU,GAEL,QAAA73E,GAAI,EAAG4H,GAAM6F,EAAK,OAAQzN,GAAI4H,GAAK,EAAE5H,GAS5C,GARYyN,EAAKzN,EAAC,EAEV,QACOkxH,GAAA,GAEGC,GAAA,GAGdD,IAAcC,GAAe,CACrBt5C,GAAA,GAEV,KAAA,CAIAq5C,IAAc,CAACr5C,GACjB7rD,EAAM,WAAa,GAEnBA,EAAM,WAAa,GAGrBA,EAAM,QAAU6rD,EAAA,CAGlB,SAAS2zC,GAAc3rH,EAAegxB,GAAanE,GAAQ,GAAO,CAChE,KAAM,CAAE,SAAA0kG,GAAU,OAAAC,GAAQ,aAAAC,GAAc,YAAAC,EAAgB,EAAAvlG,EAExD,GAAI,CAACU,IAAS7sB,IAAUuxH,IAAYvgG,KAAQwgG,GAAQ,OAE9C,KAAA,CAAE,cAAAhL,EAAAA,EAAkBtG,EAEtB,GAAA,CAACsG,GAAc,OAAQ,CACzBkL,GAAY,OAAS,EACrB,MAAA,CAGF,MAAMC,GAAe,IAAA,IAAI,CAAC,GAAGD,EAAW,CAAC,EACnCE,GAAyB,CAAC,EAC1BC,GAA2B,CAAC,EAEzB,QAAA1xH,GAAI,EAAG4H,GAAMy+G,GAAc,OAAQrmH,GAAI4H,GAAK,EAAE5H,GAAG,CAClD,MAAAyN,GAAO44G,GAAcrmH,EAAC,EAE5ByN,GAAK,OAAS,EAAEzN,IAAKH,GAASG,GAAI6wB,IAE9BpjB,GAAK,QACPA,GAAK,MAAQ,GAET+jH,GAAS,IAAI/jH,EAAI,GACnBikH,GAAQ,KAAKjkH,EAAI,GAET+jH,GAAS,IAAI/jH,EAAI,GAC3BgkH,GAAM,KAAKhkH,EAAI,EAGjB+jH,GAAS,OAAO/jH,EAAI,CAAA,CAGdikH,GAAA,KAAK,GAAGF,EAAQ,EAExB,MAAMrxH,GAAS,KAAK,IAAIsxH,GAAM,OAAQC,GAAQ,MAAM,EAEpD,QAAS1xH,GAAI,EAAGA,GAAIG,GAAQ,EAAEH,GAChBuxH,GAAAA,GAAY,QAAQG,GAAQ1xH,EAAC,CAAC,CAAC,EAAIyxH,GAAMzxH,EAAC,EAGpDyxH,GAAM,OAASC,GAAQ,OACzBH,GAAY,KAAK,GAAGE,GAAM,MAAMtxH,EAAM,CAAC,EAC9BsxH,GAAM,OAASC,GAAQ,SAC1B1lG,EAAA,YAAculG,GAAY,OAAO9jH,IAAQ,CAACikH,GAAQ,SAASjkH,EAAI,CAAC,GAGxEue,EAAM,QAASslG,IAAA,YAAAA,GAAc,IAAIzxH,KAAU,EAC3CmsB,EAAM,SAAWnsB,EACjBmsB,EAAM,OAAS6E,EAAA,CAGR,SAAAsyE,GAAaxkG,EAAU88E,GAAmB,CAC3C,KAAA,CAAE,OAAA8wC,IAAWvgG,EACb,CAAE,kBAAA26F,EAAAA,EAAsB5G,EAE1BwM,GAAO,IAAI5tH,CAAG,GAAK,CAACgoH,GAAkB,IAAIhoH,CAAG,IAC/C4tH,GAAO,IAAI5tH,CAAG,EAAG,SAAW,CAAC,CAAC88E,GAChC,CAGO,SAAApN,GAAW1vE,EAAUmoE,GAAmB,CACzC,KAAA,CAAE,OAAAylD,IAAWvgG,EACb,CAAE,gBAAA66F,EAAAA,EAAoB9G,EAExBwM,GAAO,IAAI5tH,CAAG,GAAK,CAACkoH,GAAgB,IAAIloH,CAAG,IAC7C4tH,GAAO,IAAI5tH,CAAG,EAAG,SAAW,CAAC,CAACmoE,GAChC,CAGO,SAAA4kD,GAAgB/sH,EAAU88E,GAAmB,QAChD,GAAA,CAACsrC,EAAU,MAAO,OAEtB,KAAM,CAAE,OAAAwF,GAAQ,QAAA9F,GAAS,QAAA3zD,EAAY,EAAA9mC,EAC/Bq5C,GAAMknD,GAAO,IAAI5tH,CAAG,EAEtB,GAAA,GAACgY,GAAA0uD,IAAA,YAAAA,GAAK,WAAL,MAAA1uD,GAAe,QAAQ,OAE5B,MAAMg7G,GAAYlG,GAAiB,CAAE,GAAGpmD,GAAK,aAAc,GAAM,EAE7DoW,GACFgrC,GAAQ,OAAOphD,GAAI,MAAQ,EAAG,EAAG,GAAGssD,EAAS,EAE7ClL,GAAQ,OAAOphD,GAAI,MAAQ,EAAGssD,GAAU,MAAM,EAG5CtsD,GAAA,aAAe,CAAC,CAACoW,GAEL2vC,GAAA,EAChBt4D,IAAW04D,GAAcx/F,EAAM,SAAUA,EAAM,OAAQ,EAAI,CAAA,CAG7D,SAASm/F,GAAuB1qH,EAK7B,CACD,KAAM,CAAE,IAAA9B,GAAK,MAAAH,GAAO,OAAAs1C,GAAS,GAAO,cAAA89E,GAAgB,IAAUnxH,EAE9D,GAAIurB,EAAM,QAAQ,IAAIrtB,EAAG,EAAG,CAC1B,MAAMy7D,GAAgBpuC,EAAM,QAAQ,IAAIrtB,EAAG,EAAG,QAE9C,GAAIizH,GACO,QAAA5xH,GAAI,EAAG4H,GAAMwyD,GAAc,OAAQp6D,GAAI4H,GAAK,EAAE5H,GACvCo6D,GAAAp6D,EAAC,EAAE,OAAS,GAI9B,MAAM2N,GAAOysD,GAAc,KAAKzsD,IAAQA,GAAK,QAAUnP,EAAK,EAExDmP,KACFA,GAAK,OAASmmC,GAChB,CACF,CAGF,SAASs3E,IAAkB,CACzB,MAAM39G,EAAOue,EAAM,QAEV,QAAAhsB,GAAI,EAAG4H,GAAM6F,EAAK,OAAQzN,GAAI4H,GAAK,EAAE5H,GACvCyN,EAAAzN,EAAC,EAAE,MAAQA,EAClB,CAGF,SAASkjH,IAAoB,CACrB,KAAA,CAAE,aAAAoO,GAAiBtlG,EAErBslG,EACItlG,EAAA,YAAcslG,EAAa,IAAS,GAAA,EAE1CtlG,EAAM,YAAc,CACtB,CAGO,SAAAshG,GAAYpM,EAAuC,GAAiC,CAC3F,MAAMvuD,GAAM,OAAOuuD,GAAW,UAAY,CAAE,KAAMA,GAAWA,EACvD,CAAE,KAAAxiC,GAAO,GAAM,KAAAjgF,GAAO,KAAM,MAAA02G,GAAQ,EAAG,OAAAlkG,GAAS,IAAA,EAAS0hD,GAE/D,MAAO,CAAE,KAAA+rB,GAAM,KAAAjgF,GAAM,MAAA02G,GAAO,OAAAlkG,EAAO,CAAA,CAGrC,SAASs8G,GAAYn5G,EAAyD,CAC5EA,EAASA,GAAU,CAAE,KAAM,GAAO,QAAS,CAAA,CAAG,EAExC,KAAA,CACJ,KAAAsqE,GAAO,GACP,OAAAmzC,GAAS,GACT,SAAAzpH,GAAW,GACX,OAAA0rC,GAAS,KACT,OAAA7iC,GAAS,KACT,KAAAkuD,EAAA,EACE/qD,EAEE3T,GAAUsM,GAAUqH,EAAO,SAAW,CAAA,CAAE,EACxC09G,GAAmB,CAAC,EAEjB,QAAA9xH,GAAI,EAAG4H,GAAMnH,GAAQ,OAAQT,GAAI4H,GAAK,EAAE5H,GAAG,CAC5C,MAAA2N,GAAOlN,GAAQT,EAAC,EAChB84D,GAAS,OAAOnrD,IAAS,SAAW,CAAE,MAAOA,EAAK,EAAI,CAAE,GAAGA,EAAK,EAEtEmrD,GAAO,MAAQA,GAAO,OAASA,GAAO,MAAM,SAAS,EAErD,IAAIi5D,GAAW,GAEX3pH,IAAY,MAAM,QAAQ0rC,EAAM,EACvBi+E,GAAAj+E,GAAO,SAASglB,GAAO,KAAK,EAC7Bj6D,GAAOi1C,EAAM,IACvBi+E,GAAW,OAAO,GAAGj5D,GAAO,MAAOhlB,EAAM,GAG3CglB,GAAO,OAASi5D,GAEhBD,GAAiB,KAAKh5D,EAAoE,CAAA,CAGrF,MAAA,CAAE,KAAA4lB,GAAM,OAAAmzC,GAAQ,KAAA1yD,GAAM,QAAS2yD,GAAkB,SAAA1pH,GAAU,OAAA0rC,GAAQ,OAAA7iC,EAAO,CAAA,CAG1E,SAAAi1G,GACPgH,EACAz/G,GACAukH,GACA,CACA,MAAMC,GAAoC,CAAC,EACrCC,GAA4B,CAAC,EAExB,UAAA99G,MAAU84G,EAAQ,SAAU,CACrC,KAAM,CAAE,KAAAxuC,GAAM,OAAA5qC,GAAQ,OAAA7iC,EAAW,EAAAmD,GAEjC,GAAIsqE,IAAQ5qC,IAAU,OAAO7iC,IAAW,aACtCghH,GAAW,KAAK79G,EAAM,EAElB49G,IAAU,KAChB,CAGF,MAAMG,GAAkBF,GAAW,OAE1B,QAAAjyH,GAAI,EAAG4H,GAAM6F,GAAK,OAAQzN,GAAI4H,GAAK,EAAE5H,GAAG,CACzC,MAAAqlE,GAAM53D,GAAKzN,EAAC,EAElB,IAAIoyH,GAAW,GAEf,QAASviE,GAAI,EAAGA,GAAIsiE,GAAiBtiE,KAAK,CACxC,KAAM,CAAE,OAAA/b,GAAQ,OAAA7iC,IAAWghH,GAAWpiE,EAAC,EAIvC,GAFWuiE,GAAAnhH,GAAQ6iC,GAAgBuxB,GAAI,IAAI,EAEvC,CAAC+sD,GACH,KACF,CAGEA,IACFF,GAAS,KAAK7sD,EAAG,CACnB,CAGK,OAAA6sD,EAAA,CAGT,SAAS9L,EACP6G,EACAx/G,GACA0xG,GACA6S,GACA,CACA,MAAMK,GAAa,CAAC,EAEpB,SAAW,CAACC,GAAMpR,EAAM,IAAK+L,EAAS,CACpC,MAAMtuH,GAAM2zH,GACN,CAAE,KAAA5zC,GAAM,KAAAjgF,GAAM,MAAA02G,GAAO,OAAAlkG,EAAW,EAAAiwG,GAEtC,GAAIxiC,IAAQjgF,GAAM,CAChB,MAAMmqF,GAASu2B,GAAQ,KAAaxxG,IAAAA,GAAK,MAAQhP,EAAG,EAC9CoU,GAAW61E,IAAA,YAAAA,GAAQ,SAiBzB,GAfAypC,GAAW,KAAK,CACd,KAAA3zC,GACA,IAAA//E,GACA,MAAAw2G,GACA,KAAA12G,GACA,OAAQwS,IAAU,OAClB,SAASo0D,GAAoB,CACvB,OAAA,OAAOtyD,IAAa,WACfA,GAASsyD,GAAI,KAAMA,GAAI,KAAK,EAG9BA,GAAI,KAAK1mE,EAAG,CAAA,CACrB,CACD,EAEGqzH,GAAU,KAAA,CAChB,CAIF,OAAAK,GAAW,KAAK,CAAC58G,GAAMC,KAASD,GAAK,MAAQC,GAAK,KAAK,EAEhDC,GAAYlI,GAAM4kH,EAAU,CAAA,CAG5B,SAAA/L,GAASoI,EAAqBne,GAAkB9iG,GAAuB,CACvE,OAAA8iG,GAAW,EAAI9iG,GAAK,OAAOihH,EAAc,GAAKne,GAAUme,EAAcne,EAAQ,EAAI9iG,EAAA,CAG3F,SAASk+G,GAAahtH,EAAU,CACxB,KAAA,CAAE,OAAA4tH,IAAWvgG,EACbq5C,GAAMknD,GAAO,IAAI5tH,CAAG,EAE1B,OAAKE,GAAOwmE,IAAA,YAAAA,GAAK,MAAM,EAIhB,KAHEknD,GAAO,IAAIlnD,GAAK,MAAM,GAAK,IAG7B,CAGL,IAAAktD,GAEK,SAAA3G,GAAmB5pG,EAAawwG,GAAkB,CACzD,KAAM,CAAE,QAAAjD,GAAS,OAAAnD,GAAQ,QAAAjN,GAAS,UAAAuN,GAAW,MAAO+F,IAAezmG,EAC7D7rB,GAAS6hB,EAAK,OAEpB,GAAI,CAACm9F,GAAQ,QAAU,CAACh/G,GAAQ,OAEhC,MAAMuyH,GAAaF,GAAWryH,GACxBs4C,GAAU9lC,GAAQwsG,EAAO,EAAG,IAElC,QAASn/G,GAAI,EAAGA,GAAIG,GAAQ,EAAEH,GAAG,CACzB,MAAArB,GAAMqjB,EAAKhiB,EAAC,EACZ4oF,GAAS8jC,GAAU,IAAI/tH,EAAG,EAEhC,GAAI,CAACiqF,GAAQ,SAEb,MAAM70D,GACJ5zB,KAAW,EAAI,KAAK,MAAMuyH,EAAU,EAAI,KAAK1yH,GAAI,EAAI,OAAS,OAAO,EAAE0yH,EAAU,EAC7E,CAAE,SAAA5S,GAAU,SAAAhwD,EAAA,EAAa84B,GAE/B2mC,GAAQ,IAAI5wH,EAAG,EACRytH,GAAA,IAAIztH,GAAK4E,GAAWwwB,GAAO+rF,IAAY6F,GAA0B71D,IAAY,GAAQ,CAAC,CAAA,CAG/F,IAAIH,GAAa,EAEN,UAAA57B,MAASq4F,GAAO,SACXz8D,IAAA57B,GAGH47B,GAAA9nD,GAAQ8nD,GAAY,CAAC,EAGhCA,GAAay8D,GAAO,IAAI3zE,EAAO,EAC/Bg6E,IAAcF,IAAmBnG,GAAO,IAAI3zE,EAAO,IAE9C85E,KACeA,GAAAnG,GAAO,IAAI3zE,EAAO,GAGtC2zE,GAAO,IAAI3zE,GAAS2zE,GAAO,IAAI3zE,EAAO,EAAKg6E,GAAa9iE,EAAU,GACzD4iE,KACFnG,GAAA,IAAI3zE,GAAS85E,EAAgB,EAClBA,GAAA,OACpB,CAGF,SAASpG,IAAkB,CACnB,KAAA,CACJ,cAAAgB,EACA,iBAAAE,GACA,kBAAAD,GACA,eAAAK,GACA,eAAAC,GACA,QAAAjH,GACA,YAAAkM,GACA,YAAAC,EAAA,EACE5mG,EACE,CAAE,cAAAq6F,EAAAA,EAAkBtG,EAE1B,UAAWthH,KAAQ,CAAC,OAAQ,UAAW,OAAO,EAC5Ck0H,GAAY,IAAIl0H,GAAU,IAAA,GAAK,EAC/Bm0H,GAAY,IAAIn0H,GAAU,IAAA,GAAK,EAGjC,SAAS+rH,GACPvL,GACA4T,GACAllF,GACAmlF,GACA32E,GAAS,GACT,CACA,MAAM42E,GAAY,GAAG52E,EAAM,GAAG8iE,EAAQ,IAAI4T,EAAW,GAC/CG,GAAYJ,GAAY,IAAIjlF,EAAK,EAEnC,GAAAqlF,GAAU,IAAID,EAAS,EAAG,CAChBJ,GAAA,IAAIhlF,EAAK,EAAG,IAAIolF,GAAW,CAAE,QAAS,EAAG,QAAS,EAAG,EACjE,MAAA,CAGF,MAAM5tE,GAAO2tE,GAAQ,EACf,CAAE,QAAAlS,GAAS,QAAAC,EAAA,EAAY17D,GAE7B,QAASnlD,GAAI,EAAGA,GAAI4gH,GAAS,EAAE5gH,GAC7B,QAAS6vD,GAAI,EAAGA,GAAIgxD,GAAS,EAAEhxD,GAAG,CAC5B,GAAA,CAAC7vD,IAAK,CAAC6vD,GAAG,SAER,MAAAlxD,GAAM,GAAGw9C,EAAM,GAAG8iE,GAAWpvD,EAAC,IAAIgjE,GAAc7yH,EAAC,GAEnD,IAAAizH,GAAYD,GAAU,IAAIr0H,EAAG,EAE5Bs0H,KACHA,OAAgB,IACND,GAAA,IAAIr0H,GAAKs0H,EAAS,GAG9BA,GAAU,IAAIF,EAAS,CAAA,CAI3BJ,GAAY,IAAIhlF,EAAK,EAAG,IAAIolF,GAAW5tE,EAAI,CAAA,CAG7C,UAAWg6D,KAAW,CAACgO,EAAeE,GAAkBD,EAAiB,EAAG,CACtE,GAAA,CAACjO,GAAQ,OAAQ,SAEf,MAAAxxE,GAAQwxE,GAAQ,CAAC,EAAE,QAAU,GAAO,OAASA,GAAQ,CAAC,EAAE,OAAS,UACjE+T,GAAc/T,GAAQ,CAAC,EAAE,QAAU,GAAO,OAASA,GAAQ,CAAC,EAAE,OAAS,OAEvEn4G,GAAOglB,EAAM,iBAAiB,OAC9B/kB,GAAQ+kB,EAAM,WAAW,CAAC,EAAE,OAASA,EAAM,kBAAkB,OAE/D,IAAAw3F,GAEA71E,KAAU,OACC61E,GAAAx3F,EAAM,WAAW,IAAImzF,IAAWA,GAAQ,MAAM,EAAGn4G,EAAI,CAAC,EAC1D2mC,KAAU,QACnB61E,GAAax3F,EAAM,WAAW,IAAImzF,IAChCA,GAAQ,MAAMl4G,GAAO+kB,EAAM,WAAW,CAAC,EAAE,MAAM,CACjD,EAEaw3F,GAAAx3F,EAAM,WAAW,IAAImzF,IAAWA,GAAQ,MAAMn4G,GAAMC,EAAK,CAAC,EAGhE,QAAAjH,GAAI,EAAGmzH,GAAO3P,GAAW,OAAQxjH,GAAImzH,GAAM,EAAEnzH,GAAG,CACjD,MAAA0jH,GAAaF,GAAWxjH,EAAC,EAEtB,QAAA6vD,GAAI,EAAGujE,GAAO1P,GAAW,OAAQ7zD,GAAIujE,GAAM,EAAEvjE,GAAG,CACjD,MAAA+4B,GAAS86B,GAAW7zD,EAAC,EAE3B,GAAI,CAAC+4B,GAAQ,SAEb,MAAMj7C,GAAQi7C,GAAO,QAAU,GAAO,OAASA,GAAO,OAAS,UAE/D4hC,GACExqH,GACA6vD,GACAliB,GACA,IAAM,CACJ,MAAMwxE,GACJxxE,KAAU,OACN0/E,GACA1/E,KAAU,QACRy/E,GACAD,EAID,MAFM,CAAE,QADC5pH,GAAWqlF,GAAO,UAAY,EAAG,EAAGu2B,GAAQ,OAAStvD,EAAC,EAC9C,QAAS+4B,GAAO,OAAQ,CAGlD,EACA,GACF,CAAA,CACF,CAGO,QAAAi8B,GAAW,EAAGj9G,GAAMu3G,GAAQ,OAAQ0F,GAAWj9G,GAAK,EAAEi9G,GAAU,CACjE,MAAAj8B,GAASu2B,GAAQ0F,EAAQ,EAE/B,UAAWx/C,MAAOohD,GAChB+D,GAAYnlD,GAAI,MAAOujB,GAAO,MAAOj7C,GAAO,IAAM,CAC5C,IAAAzkC,GAEA,OAAO0/E,GAAO,UAAa,WAC7B1/E,GAAS0/E,GAAO,SAAS,CACvB,IAAKvjB,GAAI,KACT,MAAOA,GAAI,MACX,MAAO6tD,EAAA,CACR,EACQ,OAAOlnG,EAAM,UAAa,aACnC9iB,GAAS8iB,EAAM,SAAS,CACtB,IAAKq5C,GAAI,KACT,SAAUA,GAAI,MACd,OAAAujB,GACA,YAAaA,GAAO,MACpB,MAAOsqC,EAAA,CACR,GAGHhqH,GAASA,IAAW,CAAE,QAAS,EAAG,QAAS,CAAE,EAEvC,MAAAi8C,GAAO,CAAE,QAASj8C,GAAO,SAAW,EAAG,QAASA,GAAO,SAAW,CAAE,EAE1E,OAAAi8C,GAAK,QAAU5hD,GAAW4hD,GAAK,QAAS,EAAGg6D,GAAQ,OAAS0F,EAAQ,EAC/D1/D,GAAA,QAAU5hD,GAAW4hD,GAAK,QAAS,EAAGkhE,GAAc,OAAShhD,GAAI,SAAS,EAExElgB,EAAA,CACR,EAGQ,SAAA,CAAE,OAAAhJ,GAAQ,UAAA4oE,KAAe,CAClC,CAAE,OAAQ,KAAM,UAAW0I,EAAe,EAC1C,CAAE,OAAQ,KAAM,UAAWC,EAAe,CAAA,EAEjC,QAAA1tH,GAAI,EAAG4H,GAAMm9G,GAAU,OAAQ/kH,GAAI4H,GAAK,EAAE5H,GAAG,CAC9C,MAAAklH,GAAUH,GAAU/kH,EAAC,EAE3BwqH,GACExqH,GACA4oF,GAAO,MACPj7C,GACA,IAAM,CACA,IAAAzkC,GAEA,OAAOg8G,GAAQ,UAAa,aAC9Bh8G,GAASg8G,GAAQ,SAAS,CACxB,OAAAt8B,GACA,MAAOA,GAAO,MACd,MAAOsqC,EAAA,CACR,GAGG,KAAA,CAAE,QAAAtS,GAAS,QAAAC,IAAY33G,IAAW,CAAE,QAAS,EAAG,QAAS,CAAE,EAC3Di8C,GAAO,CAAE,QAASy7D,IAAW,EAAG,QAASC,IAAW,CAAE,EAE5D,OAAA17D,GAAK,QAAU5hD,GAAW4hD,GAAK,QAAS,EAAGg6D,GAAQ,OAAS0F,EAAQ,EACpE1/D,GAAK,QAAU5hD,GAAW4hD,GAAK,QAAS,EAAG4/D,GAAU,OAAS/kH,EAAC,EAExDmlD,EACT,EACAhJ,EACF,CAAA,CAEJ,CACF,CACF,CAGF,SAAS0vE,IAAiB,CACxB,KAAM,CAAE,YAAAwH,EAAa,aAAApF,GAAc,UAAAt2D,EAAc,EAAA3rC,EAEjD,OAAIiiG,GACKoF,EAAY,IAAIhuD,KAAQ,CAAE,GAAGA,GAAI,MAAO,EAG1CtwD,GAAQs+G,EAAahuD,KAAQ,CAAE,GAAGA,GAAI,OAAS,CACpD,WAAY1N,GAAU,QAAA,CACvB,CAAA,CAGH,SAASu0D,GAASoH,EAAmC,CACnD,KAAM,CAAE,QAAAtF,GAAS,OAAAzB,GAAQ,OAAAsB,EAAW,EAAA7hG,EAEhC,IAAArtB,GAEA,OAAA,OAAO20H,GAAc,SACvB30H,GAAMkvH,GAAO,IAAIyF,CAAS,GAAKA,EAAUtF,EAAO,EAE1CrvH,GAAA20H,EAGDz0H,GAAOF,EAAG,EAAI,OAAY4tH,GAAO,IAAI5tH,EAAG,CAAA,CAS1C,MAAA,CAAE,MAAAqtB,EAAO,QAAA+zF,EAAS,UAAAC,CAAU,CACrC,0KCv5DA,MAAMxpD,EAA6C,CACjD,GAAI,KACJ,SAAU,WACV,QAAS,UACT,OAAQ,SACR,SAAU,WACV,aAAc,cAChB,EAKM5gD,EAAQiM,GAAS,QADRsF,EACyB,CACtC,OAAQ,KACR,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,UAAW,CACT,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,KAAM,CACJ,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,MAAO,KACP,OAAQ,KACR,UAAW,KACX,SAAU,KACV,SAAU,KACV,SAAU,KACV,OAAQ,GACR,OAAQ,GACR,UAAW,GACX,QAAS,GACT,QAAS,GACT,QAAS,KACT,aAAc,GACd,UAAW,CACT,QAAS,KACT,cAAoB3oB,GAAQ,CAC9B,EACA,aAAc,CACZ,QAAS,GACT,cAAoBA,GAAQ,CAC9B,EACA,QAAS,GACT,YAAa,CACX,QAAS,EACT,cAAoBA,IAAS,CAC/B,EACA,YAAa,KAAO,CAAA,GACpB,eAAgB,CACd,QAAS,KACT,OAAQ,EACV,EACA,YAAa,CACX,QAAS,EACT,cAAoBA,GAAQ,EAC5B,OAAQ,EACV,EACA,SAAU,EACV,YAAa,GACb,aAAc,CACZ,QAAS,OACT,UAAoBA,IAAA,CAAC,QAAS,MAAM,EAAE,SAASA,EAAK,CACtD,EACA,aAAc,IACd,aAAc,GACd,aAAc,GACd,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,aAAc,GACd,aAAc,GACd,UAAW,KAAO,CAAA,GAClB,aAAc,GACd,UAAW,OACX,WAAY,GACZ,aAAc,GACd,SAAU,CACR,QAAS,KACT,OAAQ,EACV,EACA,YAAa,EACb,MAAO,KAAO,CAAA,GACd,YAAa,EACb,WAAY,CACV,QAAS,KACT,OAAQ,EACV,EACA,aAAc,GACd,SAAU,GACV,MAAO,KAAO,CAAC,EAAA,CAChB,EAGKo2C,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,OAAO,EAC1B,CAAE,MAAAtP,CAAM,EAAI66B,GAAc,EAE1BmnF,EAAajsG,EAAAA,IAAwB1R,EAAM,MAAM,EACjD49G,EAAgBlsG,EAAA,IAAI1R,EAAM,QAAU,CAAC,EACrC69G,EAAiBnsG,MAAI,EAAK,EAC1BosG,EAAiBpsG,MAAI,EAAK,EAC1BqsG,EAAiBrsG,MAAI,CAAC,EACtBssG,EAAiBtsG,MAAI,CAAC,EACtBusG,EAAavsG,MAAI,CAAC,EAClBwsG,EAAaxsG,MAAI,CAAC,EAClBysG,EAAgBzsG,MAAI,EAAK,EACzB0sG,EAAgB1sG,EAAAA,IAAIk2F,GAAS,MAAM,EACnCyW,EAAcvxG,EAAAA,SAAa,IAAA,GAAmD,EAC9EwxG,EAAgBxxG,EAAAA,SAAa,IAAA,GAA0B,EACvD+vG,EAAanrG,EAAAA,IAAqB,EAClC0/F,EAAgB1/F,MAAI,EAAK,EACzB6sG,EAAY7sG,MAAI,CAAC,EAEjBuF,EAAUvF,EAAAA,IAAiB,EAC3B8sG,EAAa9sG,EAAAA,IAAyB,EACtC+sG,EAAc/sG,EAAAA,IAAyB,EACvCgtG,EAAehtG,EAAAA,IAAyB,EACxCitG,EAAejtG,EAAAA,IAAyB,EACxCktG,EAAQltG,EAAAA,IAAiB,EACzBmtG,EAAantG,EAAAA,IAAiB,EAC9BotG,EAAaptG,EAAAA,IAAiB,EAC9BqtG,EAAYrtG,EAAAA,IAAiB,EAC7BstG,EAAattG,EAAAA,IAAsB,EACnCutG,EAAavtG,EAAAA,IAAsB,EAEzC,IAAIyI,EAAY,GAEhB,MAAM7X,GAASI,GAAU,QAAS07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAClD+hD,GAAY1gD,WAAS,KAAO,CAAE,GAAGu/C,EAAkB,GAAG5gD,EAAM,SAAA,EAAY,EACxE4tG,EAAavsG,EAAAA,SAAS,IAAM,MAAM,KAAKg9G,CAAW,CAAC,EACnDa,GAAe79G,EAAAA,SAAS,IAAM,MAAM,KAAKi9G,CAAa,CAAC,EAEvDa,GAAmB,CACvB,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,SACA,YACA,cACA,WACA,YACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,aACA,eACA,iBACA,WACA,cACA,cACA,aACA,UACF,EAEMC,GAAQpP,GAAS,CACrB,GAAImP,GAAiB,OACnB,CAACt/G,GAAMjE,MAAciE,GAAKjE,EAAO,EAAIoE,EAAMpE,EAAO,EAAIiE,IACtD,CAAA,CACF,EACA,QAAS+tG,EAAW,MACpB,UAAWsR,GAAa,MACxB,KAAMl/G,EAAM,KACZ,QAAS+hD,GAAU,MAAM,GACzB,QAAS/hD,EAAM,QACf,OAAQsC,GAAO,MACf,UAAWy/C,GAAU,MACrB,aAAc/hD,EAAM,aACpB,aAAcA,EAAM,eAAiB,GAAO,OAASA,EAAM,aAC3D,YAAa,MAAM,QAAQA,EAAM,WAAW,EACxCA,EAAM,YACN,CAACA,EAAM,YAAaA,EAAM,WAAW,CAAA,CAC1C,EAED8B,EAAA,QAAQgmG,GAAasX,EAAK,EAC1Bt9G,EAAAA,QAAQimG,GAAe,CACrB,eAAA4B,GACA,eAAAC,EACA,gBAAAyV,GACA,gBAAAC,GACA,gBAAAC,GACA,eAAA5T,GACA,aAAA6T,GACA,gBAAAC,GACA,cAAAC,GACA,kBAAAC,GACA,cAAAC,GACA,YAAAC,GACA,mBAAAC,GACA,kBAAAC,EACA,cAAAC,GACA,iBAAAC,GACA,aAAAC,GACA,cAAAC,GACA,cAAAC,GACA,cAAAC,GACA,cAAAC,EACA,QAAiB9nH,IAAA,CAAC,CAACwH,EAAM,MAAMxH,EAAI,EACnC,QAASA,IAAQwH,EAAM,MAAMxH,EAAI,EACjC,gBAAA+nH,GACA,YAAAC,GACA,cAAe,IAAM/kH,GAAcguG,EAAa,EAChD,cAAAC,GACA,gBAAiB,IAAMjuG,GAAcglH,EAAe,EACpD,eAAAxO,EAAA,CACD,EACDnwG,EAAA,QAAQkmG,GAAa9jG,CAAc,EAEnC,KAAM,CAAE,MAAAkS,GAAO,QAAA+zF,GAAS,UAAAC,EAAc,EAAAgV,GAEhCsB,GAAer/G,WAAS,IAAMrB,EAAM,cAAgBoW,GAAM,QAAUA,GAAM,YAAY,EACtFxS,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAG,QAAQ,CAAC,EAAGvQ,EAAM,OACzB,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,UAC5B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,QAC5B,CAACuQ,EAAG,GAAG,aAAa,CAAC,EAAGvQ,EAAM,YAC9B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,eAAe,CAAC,EAAGvQ,EAAM,aAChC,CAACuQ,EAAG,GAAG,cAAc,CAAC,EAAG6F,GAAM,YAC/B,CAAC7F,EAAG,GAAG,QAAQ,CAAC,EAAGmwG,GAAa,MAChC,CAACnwG,EAAG,GAAG,YAAY,CAAC,EAAG6F,GAAM,eAAe,OAC5C,CAAC7F,EAAG,GAAG,YAAY,CAAC,EAAG6F,GAAM,eAAe,OAC5C,CAAC7F,EAAG,GAAG,WAAW,CAAC,EAAG6F,GAAM,YAC9B,EACD,EACKzF,EAAQtP,EAAAA,SAAS,IAAM,CACrB,MAAA8c,GAAQ0+F,EAAW,OAAS78G,EAAM,MAClC,CAACmrG,GAASC,EAAQ,EAAIh1F,GAAM,YAE5BzF,GAAmB,CACvB,CAACJ,EAAG,GAAG,kBAAkB,CAAC,EACxB,OAAOvQ,EAAM,WAAc,SAAW,GAAGA,EAAM,SAAS,KAAOA,EAAM,UACvE,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG,GAAGvQ,EAAM,WAAW,KACxC,CAACuQ,EAAG,GAAG,gBAAgB,CAAC,EAAG,GAAGguG,EAAU,KAAK,IAC/C,EAEA,OAAIpT,KACFx6F,GAAMJ,EAAG,GAAG,eAAe,CAAC,EAAI,GAAG46F,EAAO,MAGxCC,KACFz6F,GAAMJ,EAAG,GAAG,gBAAgB,CAAC,EAAI,GAAG66F,EAAQ,MAG1CpiH,GAAUm1B,EAAK,IACb,OAAOA,IAAU,UAAY1sB,GAAc0sB,GAAO,EAAI,GACxDxN,GAAM,MAAQ,GAAGwN,EAAK,KACtBxN,GAAM,SAAW,GAAGwN,EAAK,MAEzBxN,GAAM,MAAQwN,IAIXxN,EAAA,CACR,EACKgwG,EAAat/G,EAAAA,SAAS,IACnB,CAAC,EACNrY,GAAUgX,EAAM,KAAK,GACrBoW,GAAM,iBAAiB,QACvBA,GAAM,kBAAkB,OAE3B,EACKwqG,EAAmBv/G,EAAAA,SAAS,IAAM,CAChC,KAAA,CAAE,YAAAw/G,IAAgBzqG,GAExB,OAAOunG,EAAW,MAAQ,KAAK,IAAIA,EAAW,MAAOkD,EAAW,EAAI,MAAA,CACrE,EACKjvE,EAAavwC,EAAAA,SAAS,IAAA,QAAM,QAAAN,GAAAy9G,EAAW,QAAX,YAAAz9G,GAAkB,aAAc,GAAE,EAC9D8wC,EAAaxwC,EAAAA,SAAS,IAAM,CAC1B,KAAA,CAAE,YAAAw/G,IAAgBzqG,GAEpB,OAAAwqG,EAAiB,OAASC,IACrB,KAAK,IAAI,KAAK,IAAKD,EAAiB,MAAQC,GAAe,IAAK,EAAE,EAAG,CAAC,GAAK,EAG7E,CACR,EACK9V,EAAc1pG,EAAAA,SAAS,KAExBtE,GAAQotG,GAAQ,WAAW,GAAK,IAAM/zF,GAAM,YAAY,CAAC,GAAK,IAAMA,GAAM,YAAY,CAAC,GAAK,EAEhG,EACK0qG,GAAkBz/G,EAAAA,SAAS,IAAMw8G,EAAe,OAASE,EAAe,MAAQ,CAAC,EACjFgD,EAAmB1/G,EAAAA,SAAS,IAAMw8G,EAAe,OAASE,EAAe,MAAQ,GAAG,EAEpF,CACJ,WAAA9N,GACA,aAAAC,GACA,QAAAC,GACA,WAAA+B,GACA,cAAAe,GACA,eAAAM,GACA,eAAAC,GACA,cAAAoC,GACA,WAAAvC,GACA,UAAAQ,GACA,YAAAK,GACA,aAAAC,GACA,gBAAAC,GACA,UAAAa,GACA,gBAAAC,GACA,UAAAG,GACA,YAAAC,GACA,gBAAAE,GACA,cAAAG,GACA,aAAAI,GACA,eAAAE,GACA,aAAAE,GACA,gBAAAC,GACA,SAAAE,GACA,YAAAb,GACA,gBAAAK,EAAA,EACE1L,GAEJx9F,EAAA,MAAMghG,EAAYnE,EAAa,EAC/B78F,EAAA,MAAMsyG,GAAcuB,EAAe,EACnC7zG,EAAAA,MAAM,IAAMm1C,GAAU,MAAM,GAAImwD,EAAU,EAC1CtlG,EAAA,MAAM,IAAM5M,EAAM,KAAMghH,GAAkB,CAAE,KAAM,GAAM,EAClDp0G,EAAAA,MAAA,IAAM5M,EAAM,MAAOihH,EAAiB,EACpCr0G,EAAA,MAAA,CAAC,IAAM5M,EAAM,OAAQ,IAAMA,EAAM,WAAW,EAAG,IAAM,CACzDsT,EAAAA,SAAS4tG,EAAiB,CAAA,CAC3B,EACDt0G,EAAAA,MAAMtK,GAAQuxG,GAAW,CAAE,KAAM,GAAM,EACvCjnG,EAAA,MACE,IAAM5M,EAAM,QACHpX,IAAA,CACPyqH,GAAWzqH,EAAK,EAChBunH,GAAQnwG,EAAM,IAAI,EACGmhH,GAAA,CAAA,CAEzB,EACAv0G,EAAA,MACEm1C,GACUl4C,IAAA,CACRsqG,GAAatqG,EAAM,EACnBsmG,GAAQnwG,EAAM,IAAI,CACpB,EACA,CAAE,KAAM,EAAK,CACf,EACA4M,EAAA,MACE,IAAM5M,EAAM,aACHpX,IAAA,CACPwrH,GAAgBxrH,EAAK,EACrBunH,GAAQnwG,EAAM,IAAI,CAAA,CAEtB,EACM4M,EAAA,MAAA,CAAC,IAAM5M,EAAM,UAAW,IAAMA,EAAM,YAAY,EAAG,IAAM,CACrD6rB,GAAA,CAAA,CACT,EAED,UAAWj0B,MAAQunH,GAAkB,CACnC,MAAMiC,GACJhX,GACE,MAAMxyG,GAAK,OAAO,CAAC,EAAE,kBAAkB,CAAC,GAAGA,GAAK,MAAM,CAAC,CAAC,EAC1D,EAEFgV,EAAAA,MAAM,IAAM5M,EAAMpI,EAAI,EAAGwpH,EAAoB,CAAA,CAG/C,SAASvtE,IAAgB,YACZ9yC,GAAAi+G,EAAA,QAAA,MAAAj+G,GAAO,aAAag9G,EAAe,QACnCpoG,GAAAspG,EAAA,QAAA,MAAAtpG,GAAO,aAAaqoG,EAAe,MAAK,CAG/C,MAAAqD,GAAgBvlH,GAAS+vB,EAAO,EAEtCpX,EAAAA,UAAU,IAAM,CACF0F,EAAA,GAEZvN,EAAA,MAAMg0G,EAAkBO,EAAoB,EACpCt1F,GAAA,EACD,OAAA,iBAAiB,SAAUw1F,EAAa,EAC/C/tG,EAAAA,SAAS,IAAM,CACb89F,EAAc,MAAQjH,GAAQ,aAAA,CAC/B,EAEGqU,EAAW,QACEX,EAAA,MAAQW,EAAW,MAAM,cACzBV,EAAA,MAAQU,EAAW,MAAM,cAC1C,CACD,EAED5pG,EAAAA,gBAAgB,IAAM,CACRuF,EAAA,GAEL,OAAA,oBAAoB,SAAUknG,EAAa,CAAA,CACnD,EAEYvvG,EAAA,CACX,WAAA6rG,EACA,eAAAE,EACA,eAAAC,EACA,eAAAC,EACA,eAAAC,EACA,WAAAC,EACA,WAAAC,EACA,cAAAC,EACA,iBAAAyC,EACA,YAAA7V,EACA,YAAa1pG,EAAA,SAAS,IAAM+U,GAAM,WAAW,EAC7C,OAAQsqG,GAER,MAAAtB,GAEA,QAAAnoG,EACA,WAAAunG,EACA,YAAAC,EACA,aAAAC,EACA,aAAAC,EACA,MAAAC,EACA,WAAAC,EACA,WAAAC,EACA,UAAAC,EACA,WAAAC,EACA,WAAAC,EAEA,UAAA5J,GACA,YAAAC,GACA,cAAeK,GACf,QAAA9pF,GACA,YAAam1F,GACb,YAAAM,GACA,QAASrL,GACT,UAAWsL,GACX,cAAeC,EAAA,CAChB,EAEQ,SAAAR,GAAiBnpH,GAAOmI,EAAM,KAAM,CAC3C,OAAOwgH,GAAY,IAAM,CACvBrQ,GAAQt4G,EAAI,EACHyb,WAAA,IAAMmuG,GAAkB,EAAI,CAAC,EACjBN,GAAA,CAAA,CACtB,CAAA,CAGH,SAASF,IAAoB,CAC3B,MAAM9iG,GAAQne,EAAM,MAEhBhX,GAAUm1B,EAAK,IACb,OAAOA,IAAU,UAAY,WAAWA,EAAK,EAAE,aAAeA,GAChE0+F,EAAW,MAAQ1+F,GAEnB0+F,EAAW,MAAQ,GAAGlrH,GAASwsB,EAAK,CAAC,MAIzC7K,EAAAA,SAAS,IAAM,SACbvS,GAAAy9G,EAAW,QAAX,MAAAz9G,GAAkB,SAAWkyG,GAAcuL,EAAW,MAAM,QAAQ,WAAW,EAChE7S,GAAA,CAAA,CAChB,CAAA,CAGH,SAASuV,IAAoB,CAC3B,MAAM9iG,GAASpe,EAAM,OACfosE,GAAYpsE,EAAM,UAClB0hH,GAAc1hH,EAAM,YAE1B,IAAI2hH,GAAc,EAEd/C,EAAM,OAASC,EAAW,OAASC,EAAW,OAC5CF,EAAM,QACR+C,GAAc/C,EAAM,MAAM,cAGxBC,EAAW,QACb8C,IAAe9C,EAAW,MAAM,cAG9BC,EAAW,QACb6C,GAAc7C,EAAW,MAAM,eAInB6C,GAAA3hH,EAAM,WAAaA,EAAM,aAGzC2hH,IAAe,EAAID,GAEf14H,GAAUo1B,EAAM,EAClBu/F,EAAW,MAAQv/F,GAASujG,GAE5BhE,EAAW,MAAQ,OAGjB30H,GAAUojF,EAAS,EACrBwxC,EAAc,MAAQ,KAAK,IAAIxxC,GAAWhuD,IAAU,GAAQ,EAAIujG,GAEhE/D,EAAc,MAAQ,CACxB,CAGF,SAASgE,GAAiB9oH,GAA8B,CAClDsd,GAAM,eAENtd,GAAQ,OAAS,YACnB+oH,GAAc/oH,EAAO,EAGnBA,GAAQ,OAAS,cACnBgpH,GAAchpH,EAAO,EACvB,CAGF,SAAS+oH,GAAc,CAAE,QAAA3mG,GAAS,SAAAo2B,IAAmD,CAC/El7B,GAAM,eAEV2nG,EAAe,MAAQzsE,GACvBkiE,GAAet4F,EAAO,EACR24B,GAAA,EACd1lC,EAAUnO,EAAM,SAAU,CACxB,KAAM,aACN,OAAQkb,GACR,QAASo2B,EAAA,CACV,EAAA,CAGH,SAASwwE,GAAc,CAAE,QAAA3mG,GAAS,SAAAo2B,IAAmD,CAC/En7B,GAAM,eAEV4nG,EAAe,MAAQzsE,GACvBgiE,GAAep4F,EAAO,EACR04B,GAAA,EACdkuE,GAAY5mG,GAASo2B,EAAQ,EAAA,CAG/B,SAAS8F,GAAiB/mD,GAAiB,CACrC,GAAA,CAACkuH,EAAW,MAAO,OAEvB,MAAMjb,GAAUib,EAAW,MAAM,aAAeluH,GAAW,IAE3DytH,EAAe,MAAQztH,GACvBkjH,GAAejQ,EAAM,EACrBp1F,EAAUnO,EAAM,SAAU,CAAE,KAAM,aAAc,OAAAujG,GAAQ,QAAAjzG,GAAS,CAAA,CAGnE,SAASinD,EAAiBjnD,GAAiB,CACnC,KAAA,CAAE,YAAAuwH,IAAgBzqG,GAClBmtF,GAAUjzG,IAAWuwH,IAAeD,EAAiB,OAAS,IAAO,IAE3E5C,EAAe,MAAQ1tH,GACvBijH,GAAehQ,EAAM,EACrBwe,GAAYxe,GAAQjzG,EAAO,CAAA,CAGpB,SAAAyxH,GAAYxe,GAAgBjzG,GAAiB,CACxCkwH,GAAA,EACZjkH,GAAcklH,EAAiB,EAC/BtzG,EAAUnO,EAAM,SAAU,CAAE,KAAM,WAAY,OAAAujG,GAAQ,QAAAjzG,GAAS,CAAA,CAGjE,SAAS6jC,IAAe,SAClBpzB,GAAAy9G,EAAW,QAAX,MAAAz9G,GAAkB,UACVw9G,EAAA,MAAQC,EAAW,MAAM,QAAQ,aAG7CrkG,GAAa0R,GAAQ,CAAA,CAGvB,SAAS89E,GAAe32B,GAA4B,CAClDqrC,EAAY,IAAIrrC,EAAM,CAAA,CAGxB,SAAS42B,EAAe52B,GAA4B,CAClDqrC,EAAY,OAAOrrC,EAAM,CAAA,CAG3B,SAASqsC,GAAgB/P,GAA8B,CACrDgP,EAAc,IAAIhP,EAAO,CAAA,CAG3B,SAASgQ,GAAgBhQ,GAA8B,CACrDgP,EAAc,OAAOhP,EAAO,CAAA,CAG9B,SAAS7F,IAAgB,CACvB+W,GAAY,IAAM,CAChBvQ,GAAWrC,EAAW,KAAK,EAC3BzzF,GAAa8mG,GAAkB,EAC/B3tG,EAAAA,SAAS,IAAM,CACb89F,EAAc,MAAQjH,GAAQ,aAAA,CAC/B,CAAA,CACF,CAAA,CAGM,SAAAT,GAAc3gH,GAAU6O,GAAchP,GAAY,CAC/CwhH,GAAA,cAAcrhH,GAAK6O,GAAMhP,EAAK,CAAA,CAG1C,SAAS63H,IAAkB,CACzBD,GAAY,IAAM,CAChBtQ,GAAagP,GAAa,KAAK,CAAA,CAChC,CAAA,CAGM,SAAAjN,GAAelpH,GAAU6O,GAAchP,GAAY,CAChDwhH,GAAA,eAAerhH,GAAK6O,GAAMhP,EAAK,CAAA,CAG3C,SAAS22H,IAAkB,CACzB,OAAOtoG,EAAQ,KAAA,CAGjB,SAAS00F,IAAiB,kBACxB5qG,GAAAy9G,EAAW,QAAX,MAAAz9G,GAAkB,WAClB4U,GAAA8oG,EAAY,QAAZ,MAAA9oG,GAAmB,WACnBC,GAAA8oG,EAAa,QAAb,MAAA9oG,GAAoB,WACpB+pB,GAAAg/E,EAAa,QAAb,MAAAh/E,GAAoB,SAAQ,CAG9B,SAAS6/E,GAAa1mH,GAAiD,CAC3DqV,EAAAnO,EAAM,WAAYlH,EAAO,CAAA,CAG5B,SAAA2mH,GAAgB1hD,GAAkBkE,GAAkB,CACjD9zD,EAAAnO,EAAM,cAAe+9D,GAASkE,EAAO,CAAA,CAGjD,SAASy9C,GAAc5mH,GAAkD,CAC7DqV,EAAAnO,EAAM,YAAalH,EAAO,CAAA,CAGtC,SAAS6mH,GAAkB7mH,GAAkD,CACjEqV,EAAAnO,EAAM,gBAAiBlH,EAAO,CAAA,CAG1C,SAAS8mH,IAAgB,CACjB,KAAA,CAAE,QAAArW,GAAS,QAAA+N,EAAA,EAAYlhG,GACvB0gG,GAAY75G,GAAUssG,GAAS,KAAK,EACpCyY,GAAW,MAAM,KAAK1K,GAAQ,KAAA,CAAM,EACvC,OAAcvuH,IAAAuuH,GAAQ,IAAIvuH,EAAG,EAAG,MAAM,EACtC,IAAWA,IAAA,CACJ,MAAAiqF,GAAS8jC,GAAU/tH,EAAa,EAE/B,MAAA,CACL,KAAMiqF,GAAO,KACb,IAAKA,GAAO,IACZ,KAAMA,GAAO,KACb,OAAQskC,GAAQ,IAAIvuH,EAAG,EAAG,MAC5B,CAAA,CACD,EAEH04H,GAAkB,EAAI,EACtBtzG,EACEnO,EAAM,YACNgiH,GACA7X,GAAQ,aAAa,IAAI16C,IAAOA,GAAI,IAAI,CAC1C,CAAA,CAGF,SAASowD,IAAc,CACf,KAAA,CAAE,QAAAtW,GAAS,QAAA8N,EAAA,EAAYjhG,GACvB0gG,GAAY75G,GAAUssG,GAAS,KAAK,EACpCyY,GAAW,MAAM,KAAK3K,GAAQ,KAAA,CAAM,EACvC,OAActuH,IAAAsuH,GAAQ,IAAItuH,EAAG,EAAG,IAAI,EACpC,IAAWA,IAAA,CACJ,MAAAiqF,GAAS8jC,GAAU/tH,EAAa,EAChCuiH,GAAS+L,GAAQ,IAAItuH,EAAG,EAEvB,MAAA,CACL,KAAMiqF,GAAO,KACb,IAAKA,GAAO,IACZ,KAAMA,GAAO,KACb,KAAMs4B,GAAO,KACb,MAAOA,GAAO,KAChB,CAAA,CACD,EAEHmW,GAAkB,EAAI,EACtBtzG,EACEnO,EAAM,UACNgiH,GACA7X,GAAQ,WAAW,IAAI16C,IAAOA,GAAI,IAAI,CACxC,CAAA,CAGE,IAAAwyD,GAQK,SAAAnC,GAAmBoC,GAA+BhpH,GAAkB,CAC/D+oH,GAAA,CACV,YAAaC,GAAY,IACzB,UAAWjrG,EAAQ,MAAO,sBAAsB,EAChD,YAAa,KACb,SAAU2wF,GAAS,OACnB,QAAS,EACX,EAEAsM,GAAY,EAAI,EAChB/lG,EAAUnO,EAAM,eAAgBkiH,GAAY,IAAI,KAAMhpH,EAAK,CAAA,CAGpD,SAAA6mH,EAAkBmC,GAA+BhpH,GAAkB,CAC1E,GAAI,CAAC+oH,IAAa,CAACC,GAAY,GAAI,OAE7B,MAAAC,GAAcD,GAAY,GAAG,sBAAsB,EACnDE,GAAYH,GAAU,UACtBI,GAAcjsG,GAAM,aAAe,GAAM,IACzCksG,GAAclsG,GAAM,aAAe,GAAM,IACzC2oB,GAAW7lC,GAAM,QAAUipH,GAAY,IACvCI,GAAgBJ,GAAY,OAE9B,IAAAK,GACAC,GAAe,MACfC,GAAkB,GAElB3jF,GAAWwjF,GAAgBF,IAC7BG,GAAW5a,GAAS,OACL6a,GAAAN,GAAY,IAAMC,GAAU,KAClCrjF,IAAYwjF,GAAgBD,IACrCE,GAAW5a,GAAS,MACL6a,GAAAN,GAAY,OAASC,GAAU,MAE9CI,GAAW5a,GAAS,MACF8a,GAAA,IAGhB3D,EAAU,QACZA,EAAU,MAAM,MAAM,IAAM,GAAG0D,GAAe,CAAC,MAGjDR,GAAU,YAAcC,GAAY,IACpCD,GAAU,SAAWO,GAErBrE,EAAc,MAAQuE,GACtBtE,EAAc,MAAQoE,GAEtBr0G,EAAUnO,EAAM,cAAekiH,GAAY,IAAI,KAAMhpH,EAAK,CAAA,CAGnD,SAAAypH,GAAkBvxH,GAAqBC,GAAsB,CACpE,GAAI,CAACD,IAAQ,CAACC,GAAc,MAAA,GAE5B,KAAOD,IAAM,CACX,GAAIA,KAASC,IAASD,GAAK,MAAQC,GAAM,IAChC,MAAA,GAGFD,GAAA2kH,GAAa3kH,GAAK,GAAG,CAAA,CAGvB,MAAA,EAAA,CAGA,SAAA4uH,GAAckC,GAA+BhpH,GAAkB,QACtE,GAAI,CAAC+oH,GAAW,OAEhB,KAAM,CAAE,YAAAW,GAAa,YAAAC,GAAa,SAAAL,EAAa,EAAAP,GAE/C,GAAI,CAACY,IAAeF,GAAkBE,GAAaD,EAAW,EAAG,OAE7D,IAAAE,GACAnrH,GAmBA,GAjBAirH,KACOjrH,GAAAo+G,GAAa6M,GAAY,GAAG,EAEhCjrH,KACMA,GAAA,CACP,SAAUye,GAAM,WAClB,GAGF0sG,GAAaF,GAAY,IACzBnlH,GAAgB9F,GAAO,SAAkBI,IAAAA,GAAK,MAAQ+qH,EAAU,GAE3D/hH,GAAApJ,GAAO,WAAP,MAAAoJ,GAAiB,SACpBpJ,GAAO,aAAe,KAItB6qH,KAAa5a,GAAS,MAAO,CAC1B,MAAM,QAAQib,GAAY,QAAQ,IACrCA,GAAY,SAAW,CAAC,GAG1B,MAAM/jH,GAAW,MAAM,KAAK+jH,GAAY,QAAQ,EAEhD/jH,GAAS,KAAK8jH,EAAW,EAEzBC,GAAY,SAAW/jH,GACvB+jH,GAAY,aAAe,GAC3BD,GAAY,OAASC,GAAY,GAAA,KAC5B,CACLC,GAAaD,GAAY,IAChBlrH,GAAAo+G,GAAa8M,GAAY,GAAG,EAEhClrH,KACMA,GAAA,CACP,SAAUye,GAAM,WAClB,GAGF,MAAMtlB,GAAQ6G,GAAO,SAAS,UAAiB83D,IAAAA,GAAI,MAAQqzD,EAAU,EAEjE,CAAChyH,KACI6G,GAAA,SAAS,OAAO,EAAE6qH,KAAa5a,GAAS,OAAS92G,GAAO,EAAG8xH,EAAW,EAE7EA,GAAY,OAASjrH,GAAO,IAC9B,CAGFsqH,GAAU,QAAU,GAEJ7L,GAAA,EACHD,GAAA,EACGX,GAAA,EAChBrnG,EAAUnO,EAAM,UAAWkiH,GAAY,IAAI,KAAMM,GAAWtpH,EAAK,CAAA,CAGnE,SAAS+mH,GAAiB/mH,GAAkB,CAC1C,GAAI,CAAC+oH,GAAW,OAEV,KAAA,CAAE,YAAAW,GAAa,QAAAlwB,EAAA,EAAYuvB,GAErBA,GAAA,KACZ9D,EAAc,MAAQ,GAEtB7qG,EAAAA,SAAS,IAAM,CACb,MAAMyvG,GAAiBrwB,GAAUujB,GAAe,EAAI7/F,GAAM,KAE1D89F,GAAY,EAAK,EACNxhB,IAAA1zD,EAAK,cAAe+jF,EAAc,EAC7C50G,EAAUnO,EAAM,aAAc4iH,GAAY,KAAMG,GAAgB7pH,EAAK,CAAA,CACtE,CAAA,CAGM,SAAAgnH,GAAar3H,GAAsBiQ,GAA0B,CACpEqV,EAAUnO,EAAM,QAAQnX,EAAI,EAAE,EAAGiQ,EAAO,CAAA,CAGjC,SAAAqnH,GAAct3H,GAAsBiQ,GAA2B,CACtEqV,EAAUnO,EAAM,SAASnX,EAAI,EAAE,EAAGiQ,EAAO,CAAA,CAGlC,SAAAsnH,GAAcv3H,GAAsBiQ,GAA2B,CACtEqV,EAAUnO,EAAM,SAASnX,EAAI,EAAE,EAAGiQ,EAAO,CAAA,CAGlC,SAAAunH,GAAcx3H,GAAqBiQ,GAAgC,CAC1EqV,EAAUnO,EAAM,cAAcnX,EAAI,EAAE,EAAGiQ,EAAO,CAAA,CAGvC,SAAAwnH,EAAcz3H,GAAsBiQ,GAA2B,CACtEqV,EAAUnO,EAAM,SAASnX,EAAI,EAAE,EAAGiQ,EAAO,CAAA,CAGlC,SAAA2oH,GAAkB3qG,GAAQ,GAAO,CACxC,KAAM,CAAE,YAAA+pG,GAAa,YAAAmC,GAAa,aAAAtH,EAAiB,EAAAtlG,GAC7C,CAAE,cAAAq6F,IAAkBtG,GACpBiN,GAAW3G,GAAc,OAE3B,GAAA,CAACzwG,EAAM,QAAS,CACJ41G,GAAA,EAAGwB,GAAUtgG,EAAK,EAEhC,MAAA,CAGF,MAAMgiB,GAAa,KAAK,IACtB,KAAK,IAAI6kF,EAAW,OAAS,EAAGiD,EAAiB,OAAS,CAAC,EAC3DhD,EAAc,KAChB,EAEK9kF,IACW88E,GAAA,EAAG,EAAG9+F,EAAK,EAG3B,IAAImsG,GAAYD,GACZE,GAAUF,GAAclqF,GAExBoqF,GAAUrC,KACFqC,GAAArC,GACVoC,GAAYC,GAAUpqF,IAGlB,MAAA7uC,GAAQyxH,GAAa,WAAWuH,EAAS,EACzChoG,GAAMygG,GAAa,WAAWwH,EAAO,EACrCC,GAAc,KAAK,IAAIl5H,GAAQ+V,EAAM,YAAa,CAAC,EACnDojH,GAAY,KAAK,IAAInoG,GAAMjb,EAAM,YAAc,EAAGo3G,EAAQ,EAElDxB,GAAAuN,GAAaC,GAAWtsG,EAAK,CAAA,CAG7C,SAAS+U,IAAU,CACjB,OAAO20F,GAAY,IAAM,CACvBltG,EAAAA,SAAS2tG,EAAiB,EAC1B,WAAW,IAAM,CACGC,GAAA,EACGC,GAAA,EACrB5kH,GAAcklH,EAAiB,GAC9B,CAAC,CAAA,CACL,CAAA,CAGH,eAAejB,GAAY7lH,GAAU/Q,GAAMmS,GAAQ,IAAK,CACtD,oBAAaJ,EAAM,MAAM,EAEzBs5G,GAAU,EAAI,EACd,MAAMt6G,GAAQ,EAEP,IAAI,QAAyBq7B,IAAA,CAC5Br6B,EAAA,OAAS,WAAW,IAAM,CAC9Bs5G,GAAU,EAAK,EACPj/E,GAAA,GACPj6B,EAAK,CAAA,CACT,CAAA,CAGH,SAASolH,IAAuB,CAC9B,aAAaxlH,EAAM,MAAM,EAEnBA,EAAA,OAAS,WAAW,IAAM,CACxB,KAAA,CAAE,YAAAklH,GAAa,YAAAmC,EAAA,EAAgB5sG,GAErC4nG,EAAe,MAAQ,KAAK,IAC1B,KAAK,IAAKgF,IAAenC,IAAeD,EAAiB,OAAS,IAAM,GAAM,IAAK,GAAG,EACtF,CACF,EACc/sE,GAAA,EACdvgC,EAAAA,SAAS,IAAM,CACK4tG,GAAA,CAAA,CACnB,EACWV,GAAA,EACZjkH,GAAcklH,EAAiB,GAC9B,EAAE,CAAA,CAGP,SAASH,IAAc,CACrB,MAAMzpH,GAAOue,GAAM,QACbitG,GAAe,CAAC,EAEb,QAAAj5H,GAAI,EAAG4H,GAAM6F,GAAK,OAAQzN,GAAI4H,GAAK,EAAE5H,GAAG,CACzC,MAAAqlE,GAAM53D,GAAKzN,EAAC,EAEdqlE,GAAI,SACO4zD,GAAA,KAAK5zD,GAAI,IAAI,CAC5B,CAGK,OAAA4zD,EAAA,CAGA,SAAA9B,GAAc7D,GAAmC3/C,GAAmB,CACrE,MAAAtO,GAAM6mD,GAASoH,EAAS,EAE1B,CAACjuD,IAAO06C,GAAQ,iBAAiB,IAAI16C,GAAI,GAAG,GAEhDgmD,GAAYhmD,GAAI,IAAKsO,IAAW,CAACtO,GAAI,OAAO,CAAA,CAGrC,SAAA+xD,GAAmB9D,GAAmC73C,GAAoB,CAC3E,MAAApW,GAAM6mD,GAASoH,EAAS,EAEzBjuD,KAEO+wD,GAAA,EACZ1K,GAAgBrmD,GAAI,IAAKoW,IAAY,CAACpW,GAAI,YAAY,EAAA,CAG/C,SAAA8wD,GAAgB,CAAE,KAAA/nH,IAA0B,CAC5C,OAAA2Y,EAAA,WAAWjN,EAAgB1L,EAAI,CAAA,+BAKtC6Z,EAAA,mBAwPM,MAAA,SAvPA,UAAJ,IAAI4E,EACH,uBAAOrT,EAAS,KAAA,EACjB,KAAK,QACJ,uBAAO+M,EAAK,KAAA,EACZ,gBAAeuB,EAAA,MAAAlS,CAAA,EAAM,KAAK,MAAA,GAE3Bi7C,iBAAAxoC,EAAAA,mBAeM,MAfNi+C,GAeM,CAdJn+C,aAAaC,GAAA,OAAA,SAAA,GACb6tB,EAAAA,UAAA,EAAA,EAAAhuB,qBAMWqsB,EAAAA,2BALiBxsB,EAAA,MAAKlS,CAAA,EAAC,QAAxB,CAAAgzE,GAAQliF,yDACTkiF,GAA8B,KAAG,kBAAsBliF,EAAK,EAAA,gBAE7BkiF,IAAtC3yC,YAAA,EAAAluB,cAAiFD,YAAjFQ,aAAiF,iBAA3B,EAAAsgE,EAAM,EAAA,KAAA,EAAA,IAC5D3yC,EAAAA,YAAAluB,EAAAA,YAAuED,EAAA,UAAvEQ,aAAuE,mBAA3CsgE,GAAM,CAAG,SAAQA,GAAO,yDAEtD3gE,EAAAA,mBAKgBqsB,EAAAA,SAAA,KAAAC,EAAAA,WAJwBzsB,EAAAA,SAAM,YAAlC,IAAAnpB,GAAG,GAAKkmF,IAAUn+E,kBAD9B,EAAAqhB,cAKgBD,EAAAA,MAAA43F,EAAA,EALhBp3F,EAAA,WAKgB,CAAA,QAAA,EAAA,EAHNu8D,GAAM,CACb,uBAAwBn+E,EAAK,GAC7B,SAAQ/H,iDAbA,EAAK,CAAA,GAgBlB0pB,EAAAA,mBA8BM,MAAA,SA9BG,QAAJ,IAAImsG,EAAS,MAAKtsG,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,CAAA,GAC5BW,cA4BegB,EAAAA,MAAAstC,EAAA,EAAA,SA3BT,cAAJ,IAAIi/D,EACJ,QAAA,GACA,KAAK,aACL,cAAA,GACC,MAAKnsG,EAAAA,eAAA,CAAGJ,WAAG,cAAeA,EAAK,MAAAlS,CAAA,EAAC,YAAY,UAAU,CAAA,EACtD,WAAUkS,EAAAA,MAAKkE,EAAA,EAAC,YAChB,SAAQyrG,EAAA,qBAET,IAQM,CAPE3vG,EAAA,MAAKkE,EAAA,EAAC,iBAAiB,sBAD/B/D,qBAQM,MAAA,OANH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,CAAA,EAAA,IAAuC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBuwG,GAAe,UAK/G5vG,EAAAA,YAAoCoyG,GAAA,CAAzB,MAAM,MAAM,CAAA,mCAEzBpyG,EAAAA,YAAuBoyG,EAAA,EAEfpxG,EAAA,MAAKkE,EAAA,EAAC,kBAAkB,sBADhC/D,qBAQM,MAAA,OANH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,OAAA,CAAA,EAAA,IAAwC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBwwG,EAAgB,UAKjH7vG,EAAAA,YAAqCoyG,GAAA,CAA1B,MAAM,OAAO,CAAA,sEAKtBpxG,EAAA,MAAKkE,EAAA,EAAC,eAAe,sBAD7B/D,qBAkCM,MAAA,eAhCA,aAAJ,IAAIwsG,EACH,wBAAQ3sG,EAAE,MAAA3B,CAAA,EAAC,GAAoB,cAAA,EAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,eAAA,OAAA,CAAA,CAAA,CAAA,GAEtCW,cA4BegB,EAAAA,MAAAstC,EAAA,EAAA,SA3BT,eAAJ,IAAIk/D,EACJ,QAAA,GACA,KAAK,aACL,cAAA,GACC,MAAKpsG,EAAAA,eAAA,CAAGJ,WAAG,cAAeA,EAAK,MAAAlS,CAAA,EAAC,YAAY,UAAU,CAAA,EACtD,WAAUkS,EAAAA,MAAKkE,EAAA,EAAC,YAChB,SAAQyrG,EAAA,qBAET,IAQM,CAPE3vG,EAAA,MAAKkE,EAAA,EAAC,iBAAiB,sBAD/B/D,qBAQM,MAAA,OANH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,CAAA,EAAA,IAAuC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBuwG,GAAe,UAK/G5vG,EAAAA,YAA0CqyG,GAAA,CAA/B,MAAM,OAAO,MAAA,sCAE1BryG,EAAAA,YAA6BqyG,GAAA,CAAlB,MAAA,GAAK,EAERrxG,EAAA,MAAKkE,EAAA,EAAC,kBAAkB,sBADhC/D,qBAQM,MAAA,OANH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,OAAA,CAAA,EAAA,IAAwC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBwwG,EAAgB,UAKjH7vG,EAAAA,YAA2CqyG,GAAA,CAAhC,MAAM,QAAQ,MAAA,sGAI/B9wG,EAAAA,mBA0EM,MAAA,CAzEH,MAAKH,EAAAA,eAAA,CAAYJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,cAAA,EAA0B2B,EAAAA,MAAAkE,EAAA,EAAM,aAAewnG,SAAiB1rG,EAAA,MAAA3B,CAAA,EAAG,IAAG,eAAA,UAAA,CAAA,GAI5F,MAAKo1C,EAAAA,eAAA,KAAiBi7D,EAAgB,OAAI1uG,EAAK,MAAAkE,EAAA,EAAC,aAAiD,OAAA,GAAAlE,EAAA,MAAAkE,EAAA,EAAM,WAAW,gBAA4ClE,EAAA,MAAAlS,CAAA,EAAM,cAAgBkS,EAAAA,MAAAkE,EAAA,EAAM,OAAyB,OAAsC,UAAAlE,EAAA,MAAA3B,CAAA,EAAG,IAAG,iBAAA,CAAA,EAAA,EAA+C,oBAAkCqtG,EAAa,KAAA,SAa9V1sG,cAuDegB,EAAAA,MAAAstC,EAAA,EAAA,SAtDT,aAAJ,IAAIg/D,EACJ,QAAA,GACA,KAAK,OACL,cAAA,GACA,eAAA,GACC,MAAKlsG,EAAAA,eAAA,CAAGJ,WAAG,cAAeA,EAAK,MAAAlS,CAAA,EAAC,YAAY,KAAK,CAAA,EACjD,YAAWkS,EAAE,MAAA3B,CAAA,EAAC,IAAG,MAAA,YAAA,EACjB,OAAQqwG,EAAgB,MACxB,WAAU1uG,EAAAA,MAAKkE,EAAA,EAAC,YAChB,WAAUlE,EAAAA,MAAKkE,EAAA,EAAC,YAChB,SAAQwrG,GACR,iBAAgB/xE,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE6iE,EAAc,MAAG7iE,IACnC,iBAAgBnL,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE8iE,EAAc,MAAG9iE,IACnC,SAAQ7mB,EAAA,qBAET,IAeM,CAdEjiB,EAAA,MAAKkE,EAAA,EAAC,iBAAiB,sBAD/B/D,qBAeM,MAAA,OAbH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,CAAA,EAAA,IAAuC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBuwG,GAAe,KAAA,GAI9G,MAAKn7D,EAAAA,eAAA,CAAA,UAAA,GAAkBzzC,QAAKkE,EAAA,EAAC,WAAW,IAAA,CAAA,CAAA,GAEzClF,cAMYsyG,GAAA,CAND,MAAM,QAAMC,cAAA,CAAA,EAAA,GAAA,CACLv/G,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,qBACjD,IAEO,CAFPK,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAmDgB,EAAAA,MAAAb,EAAA,EAAA,CAAxC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,oFAKzCkR,cAMYsyG,GAAA,KAAAC,cAAA,CAAA,EAAA,GAAA,CALMv/G,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,qBACjD,IAEO,CAFPK,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAmDgB,EAAAA,MAAAb,EAAA,EAAA,CAAxC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,mDAK/BkS,EAAA,MAAKkE,EAAA,EAAC,kBAAkB,sBADhC/D,qBAeM,MAAA,OAbH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,OAAA,CAAA,EAAA,IAAwC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBwwG,EAAgB,KAAA,GAIhH,MAAKp7D,EAAAA,eAAA,CAAA,UAAA,GAAkBzzC,QAAKkE,EAAA,EAAC,WAAW,IAAA,CAAA,CAAA,GAEzClF,cAMYsyG,GAAA,CAND,MAAM,SAAOC,cAAA,CAAA,EAAA,GAAA,CACNv/G,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,qBACjD,IAEO,CAFPK,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAmDgB,EAAAA,MAAAb,EAAA,EAAA,CAAxC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,uJAQrCkS,EAAA,MAAKkE,EAAA,EAAC,eAAe,sBAD7B/D,qBAoCM,MAAA,eAlCA,aAAJ,IAAIysG,EACH,wBAAQ5sG,EAAE,MAAA3B,CAAA,EAAC,GAAoB,cAAA,EAAA2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,eAAA,OAAA,CAAA,CAAA,CAAA,GAEtCW,cA8BegB,EAAAA,MAAAstC,EAAA,EAAA,SA7BT,eAAJ,IAAIm/D,EACJ,QAAA,GACA,KAAK,aACL,cAAA,GACC,MAAKrsG,EAAAA,eAAA,CAAGJ,WAAG,cAAeA,EAAK,MAAAlS,CAAA,EAAC,YAAY,UAAU,CAAA,EACtD,YAAWkS,EAAE,MAAA3B,CAAA,EAAC,IAAG,MAAA,YAAA,EACjB,WAAU2B,EAAAA,MAAKlS,CAAA,EAAC,QAChB,WAAUkS,EAAAA,MAAKkE,EAAA,EAAC,YAChB,SAAQyrG,EAAA,qBAET,IAQM,CAPE3vG,EAAA,MAAKkE,EAAA,EAAC,iBAAiB,sBAD/B/D,qBAQM,MAAA,OANH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,MAAA,CAAA,EAAA,IAAuC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBuwG,GAAe,UAK/G5vG,EAAAA,YAAoCqyG,GAAA,CAAzB,MAAM,MAAM,CAAA,mCAEzBryG,EAAAA,YAAuBqyG,EAAA,EAEfrxG,EAAA,MAAKkE,EAAA,EAAC,kBAAkB,sBADhC/D,qBAQM,MAAA,OANH,MAAKC,EAAAA,eAAA,CAAiB,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,OAAA,CAAA,EAAA,IAAwC2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,QAAA,QAAA,CAAA,EAAsBwwG,EAAgB,UAKjH7vG,EAAAA,YAAqCqyG,GAAA,CAA1B,MAAM,OAAO,CAAA,0HAKtBrxG,EAAAA,MAAKlS,CAAA,EAAC,SAAW2gH,EAAU,qBADnCxuG,EAAA,YAaaD,QAAA8lC,EAAA,EAAA,eAXP,aAAJ,IAAIgnE,EACJ,QAAA,GACA,UAAU,SACT,MAAK1sG,iBAAEJ,QAAE3B,CAAA,EAAC,IAAG,MAAA,YAAA,CAAA,EACb,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,UAAW69G,EAAc,MACzB,aAAYjsE,EAAU,MACtB,kCAAoBssE,EAAU,KAAA,KAAA,EAC9B,gCAAchsG,EAAA,MAAegjG,EAAA,EAAA,EAAA,GAC7B,SAAQ79D,GACR,8BAAYnlC,EAAAA,MAAegjG,EAAA,EAAA,EAAA,0FAGtBhjG,EAAAA,MAAKlS,CAAA,EAAC,SAAW4gH,EAAgB,qBADzCzuG,EAAA,YAgBaD,QAAA8lC,EAAA,EAAA,eAdP,aAAJ,IAAIinE,EACJ,QAAA,GACA,UAAU,QACT,MAAK3sG,iBAAEJ,QAAE3B,CAAA,EAAC,IAAG,MAAA,UAAA,CAAA,EACb,KAAM2B,EAAAA,MAAKlS,CAAA,EAAC,QACZ,UAAW89G,EAAc,MACzB,aAAYjsE,EAAU,MACtB,MAAK8T,EAAAA,eAAA,KAAiBs4D,EAAU,MAAA,GAAMA,EAAU,KAAA,KAAO,cAA2BC,EAAU,MAAA,GAAMA,EAAU,KAAA,KAAO,MAAA,GAInH,gCAAchsG,EAAA,MAAegjG,EAAA,EAAA,EAAA,GAC7B,SAAQ39D,EACR,8BAAYrlC,EAAAA,MAAegjG,EAAA,EAAA,EAAA,0FAGtBhjG,QAAKlS,CAAA,EAAC,cAAgBoxG,EAAa,sCAD3C/+F,EAAA,mBASO,MAAA,eAND,YAAJ,IAAI0sG,EACH,MAAKzsG,EAAAA,eAAA,CAAYJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,WAAA,EAAuB6tG,EAAa,QAAA,UAAiBlsG,EAAA,MAAE3B,CAAA,EAAC,IAAG,YAAA,QAAA,EAAiC6tG,EAAa,QAAA,SAAgBlsG,EAAAA,MAAE3B,CAAA,EAAC,IAAG,YAAA,OAAA,wBAF9I4tG,EAAa,KAAA,CAAA,+BASfjsG,QAAAkE,EAAA,EAAM,eAAY,uCAD1B/D,EAAA,mBAKO,MAAA,OAFJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,kBAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAA,KAAA,GAAazzC,QAAKkE,EAAA,EAAC,UAAU,IAAA,CAAA,CAAA,YAF3B,CAAAi4E,QAAAn8E,EAAAA,MAAAkE,EAAA,EAAM,WAAW,CAAA,2CCvxCxB,SAASstG,GACdllH,EACA,CACO,OAAAA,CACT,CAEO,SAASmlH,GAA4BrY,EAA+B,CAClE,OAAAA,CACT,CAEO,SAASsY,GACd5wC,EACA,CACO,OAAAA,CACT,CAEO,SAAS6wC,GACdta,EACA,CACO,OAAAA,CACT,CAEO,SAASua,GACdxU,EACA,CACO,OAAAA,CACT,CAEO,SAASyU,GACd5U,EACA,CACO,OAAAA,CACT,mHCrBM,MAAAnvG,EAAQiM,GAAS,OADRsF,EACwB,CACrC,OAAQ,CACN,QAAS,KACT,OAAQ,EACV,EACA,KAAM,GACN,MAAO,OACP,UAAW,MACX,SAAU,GACV,QAAS,GACT,KAAM,GACN,SAAU,GACV,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKytB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,MAAM,EAEzBwG,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAChCmhD,EAAezvC,MAAI,CAAC,EACpB23C,EAAav8C,EAAAA,SAAa,IAAA,GAAgB,EAC1CivD,EAAerqD,MAAI,EAAK,EAExBylB,EAAW91B,EAAAA,SAAS,IAAM,MAAM,KAAKgoD,CAAU,CAAC,EAEhDG,EAAgB/tD,GAAc,IAAM,CACxC07B,EAAS,MAAM,QAAQ,CAACp/B,EAAMjH,IAAU,CAClC7H,GAAO8O,EAAK,KAAK,IACnBA,EAAK,MAAQjH,EAAQ,EACvB,CACD,EAEGqmC,EAAS,MAAM,QAAU,GAAK4vE,MAChCt1F,EAAc,MAAQ0lB,EAAS,MAAM,CAAC,EAAE,MAC1C,CACD,EACK6sF,EAAevoH,GAAc,IAAM,CACjC,MAAA3K,EAAQqmC,EAAS,MAAM,aAAkBp/B,EAAK,QAAU0Z,EAAc,KAAK,EAE7E,CAAC3gB,IACHqwD,EAAa,MAAQrwD,EACvB,CACD,EAEDgR,EAAA,QACEulG,GACAv6F,WAAS,CACP,cAAA2E,EACA,KAAM2sB,EAAAA,MAAMp+B,EAAO,MAAM,EACzB,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,aAAAw/B,EACA,aAAAiqB,EACA,aAAAC,EACA,cAAAF,CACD,CAAA,CACH,EAEA58C,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACP6oB,EAAc,MAAQ7oB,CAAA,CAE1B,EAEA6rB,EAAAA,UAAUuvG,CAAY,EAETlyG,EAAA,CACX,cAAAL,EACA,aAAAsqD,EACA,SAAA5kC,EACA,aAAAqI,EACA,UAAAwnE,EACA,YAAA1pE,CAAA,CACD,EAED,SAASypE,GAAgB,CACvB,OAAO99G,GAAOwoB,EAAc,KAAK,GAAKA,EAAc,QAAU,EAAA,CAGhE,SAASg4C,EAAa1xD,EAAiB,CACrCsxD,EAAW,IAAItxD,CAAI,EACLyxD,EAAA,CAAA,CAGhB,SAASE,EAAa3xD,EAAiB,CACrCsxD,EAAW,OAAOtxD,CAAI,EACRyxD,EAAA,CAAA,CAGhB,SAAShqB,EAAavvB,EAAwB,CAC5CwB,EAAc,MAAQxB,EAET+zG,EAAA,EACbhlF,EAAK,gBAAiB/uB,CAAK,EACjB9B,EAAAnO,EAAM,SAAyBiQ,CAAK,CAAA,CAGhD,SAAS+2F,GAAY,CACnB74F,EAAUnO,EAAM,KAAK,CAAA,CAGvB,SAASs9B,EAAYrtB,EAAwB,CACjC9B,EAAAnO,EAAM,QAAwBiQ,CAAK,CAAA,6BAK7CoC,EAAA,mBA+DM,MAAA,CA/DA,wBAAQH,EAAE,MAAA3B,CAAA,EAAC,EAAK,EAAA2B,QAAA3B,CAAA,EAAG,GAAG2B,EAAA,SAAM,SAAS,EAAGA,QAAKlS,CAAA,EAAC,SAAWkS,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAClEkC,EAAAA,mBAoDM,MAAA,CApDA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAChBW,cAkDSgB,EAAAA,MAAA+xG,EAAA,EAAA,CAjDP,QAAA,GACC,OAAQxyG,EAAa,MACrB,KAAMS,EAAAA,MAAKlS,CAAA,EAAC,KACZ,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,WAAUkS,EAAAA,MAAKlS,CAAA,EAAC,QAChB,SAAQw/B,EACR,MAAKwnE,EACL,QAAO1pE,oCAQN,IAAiC,EADnC+C,EAAAA,UAAA,EAAA,EAAAhuB,EAiBa,mBAAAqsB,WAhBa,KAAAC,EAAA,WAAAxH,EAAA,MAAhB,CAAAp/B,EAAMjH,mBADhBqhB,EAAAA,YAiBaD,EAAA,MAAAg1F,EAAA,EAAA,CAfV,IAAKp2G,EACL,MAAOiH,EAAK,MACZ,KAAMA,EAAK,KACX,SAAUA,EAAK,SACf,SAAUA,EAAK,QAAA,qBAEhB,IAKW,CALKma,QAAU3oB,EAAA,EAACwO,EAAK,aAAa,iBAC3Coa,EAAA,YAGYD,QAAAb,EAAA,EAAA,OAFT,SAAUtZ,EAAK,cACf,YAAeA,EAAK,MAAiB,SAAAA,EAAK,QAAQ,+CAGvDsa,EAEW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CADN/rB,kBAAAC,EAAA,gBAAA7a,EAAK,MAAQA,EAAK,KAAK,EAAA,CAAA,oEAQdmM,EAAM,KAAOgO,EAAAA,SAAM,MAAM,IACvCK,EAEO,WAAAC,uBAFP,IAEO,CADLtB,cAAiDgB,EAAAA,MAAAb,EAAA,EAAA,CAAtC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,GAAA,qDAGrBkE,EAAM,QAAUgO,EAAAA,SAAM,MAAM,OAC1CK,EAEO,WAAAC,0BAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,6DAnCrBkE,EAAM,QAAUgO,EAAA,SAAM,MAAM,aAAS,sBACnD,IAEO,CAFPK,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,2CAqBrBkE,EAAM,QAAUgO,EAAA,SAAM,MAAM,aAAS,sBACnD,IAEO,CAFPK,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,mHAezCyS,EAAAA,mBAQM,MAAA,CAPH,MAAKH,EAAAA,eAAA,CAAa,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,IAA0B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,OAAA,YAAA,CAAA,EAAyBwrD,EAAY,KAAA,GAI5F,+BAAeA,EAAY,MAAA,GAAA,GAE5BxpD,aAAaC,EAAA,OAAA,SAAA,CAAA,cC/KN0xG,GAAgB/2G,GAAW,CACtC,MAAOQ,GACP,OAAQS,GAAkB,EAC1B,MAAO,OACP,YAAa,OACb,KAAM,OACN,SAAUrB,EACV,UAAWA,EACX,WAAYA,EACZ,aAAcC,GACd,SAAUD,EACV,SAAUA,EACV,SAAUA,EACV,MAAO,OACP,UAAW,OACX,UAAWA,EACX,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,KAAMA,EACN,aAAcgB,GACd,aAAc,OACd,KAAM,OACN,QAASG,EAAuC,EAChD,OAAQA,EAAuC,EAC/C,QAASA,EAAmC,EAC5C,SAAUA,EAAmC,EAC7C,QAASA,EAAU,EACnB,UAAWA,EAA0C,EACrD,WAAYA,EAA0C,EACtD,QAASA,EAA0C,EACnD,mBAAoBA,EAA6C,EACjE,iBAAkBA,EAA6C,CACjE,CAAC,oQC7BD,KAAM,CAAE,MAAA63B,EAAO,MAAA3vB,EAAO,QAAA4vB,EAAS,SAAAnyB,EAAU,QAAAoyB,EAAS,cAAAC,EAAe,cAAAC,EAAe,cAAAC,CAAA,EAC9EhD,GAAsB,IAAA,OAAM,OAAAriC,EAAAojH,EAAS,QAAT,YAAApjH,EAAgB,QAAO,EAG/Cf,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,MAAOzD,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,MAAO,CACL,QAAS,IAAM+vB,EAAc,EAC7B,OAAQ,EACV,EACA,YAAa,KACb,KAAM,EACN,SAAU,GACV,UAAW,GACX,WAAY,GACZ,aAAc,GACd,SAAU,GACV,SAAU,IAAMtyB,EAAS,MACzB,SAAU,GACV,MAAO,KACP,UAAW,EACX,UAAW,GACX,QAAS,IAAMoyB,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,KAAM,GACN,aAAc,KACd,aAAc,KACd,KAAM,CACJ,QAAS,GACT,OAAQ,EAAA,CACV,CACD,EAEKuwB,EAAOC,EAEP1uB,EAAKtF,GAAc,UAAU,EAC7B3I,EAASI,GAAU,QAAS07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAClDsJ,EAAQU,GAAS,EAEjB69B,EAAUn2B,MAAI,EAAK,EACnBo2B,EAAep2B,EAAAA,IAAI1R,EAAM,KAAK,EAC9BgoC,EAAgBt2B,EAAI,IAAA1R,EAAM,MAAQA,EAAM,MAAM,OAAS,CAAC,EACxDmoC,EAAYz2B,MAAI,EAAK,EAErByyG,EAAWzyG,EAAAA,IAAyB,EAE1C,IAAI22B,EAAYroC,EAAM,MAEhB,MAAAumD,EAAallD,EAAAA,SAAS,IAClBrB,EAAM,SAAWA,EAAM,aAAgBA,EAAM,QACtD,EACK4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,YAAY,CAAC,EAAG,GACvB,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGs3B,EAAQ,MAC5B,CAACt3B,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGg2C,EAAW,MAChC,CAACh2C,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAC5B,CAACuQ,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,SACxC,EACD,EACKupC,EAAeloC,EAAAA,SAAS,IACrB,OAAOrB,EAAM,cAAiB,UACjCA,EAAM,aACJ,KACA,MACFA,EAAM,YACX,EAED4M,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPk/C,EAAa,MAAQl/C,EACTy/C,EAAAz/C,EACK4gD,EAAA,CAAA,CAErB,EAEa13B,EAAA,CACX,MAAAi0B,EACA,aAAA+B,EACA,cAAAE,EACA,UAAAG,EACA,WAAAoe,EACA,SAAA49D,EACA,UAAAv6E,EACA,MAAQ/+C,GAA2B,QAAA,OAAAkW,GAAAojH,EAAS,QAAT,YAAApjH,GAAgB,MAAMlW,IACzD,KAAM,IAAA,OAAM,OAAAkW,EAAAojH,EAAS,QAAT,YAAApjH,EAAgB,OAAK,CAClC,EAED,SAASipC,EAAY9wC,EAAmB,CACtC2uC,EAAQ,MAAQ,GACN15B,EAAAnO,EAAM,QAAS9G,CAAK,CAAA,CAGhC,SAAS+wC,EAAW/wC,EAAmB,CACrC2uC,EAAQ,MAAQ,GACN15B,EAAAnO,EAAM,OAAQ9G,CAAK,CAAA,CAG/B,SAASmxC,EAAanxC,EAAc,CAClC,MAAMrQ,GAAOqQ,EAAM,KAEnB,GAAIivC,EAAU,MAAO,CACnB,GAAIt/C,KAAS,QAAS,OAEtBs/C,EAAU,MAAQ,EAAA,CAMpB,GAHaL,EAAA,MAAS5uC,EAAM,OAA+B,MAC1CswC,EAAA,EAEb3gD,KAAS,SAAU,CACjB,GAAAw/C,IAAcP,EAAa,MAAO,OAEtCO,EAAYP,EAAa,MAEpB9nC,EAAM,OACJg/B,EAAA,eAAgB8I,EAAa,KAAK,EACvC1B,EAAc0B,EAAa,KAAK,GAGxB35B,EAAAnO,EAAM,SAAU8nC,EAAa,KAAK,EAEvC9nC,EAAM,MACKkmC,EAAA,CAChB,MAEIlmC,EAAM,OACHg/B,EAAA,eAAgB8I,EAAa,KAAK,EACvC1B,EAAc0B,EAAa,KAAK,GAGxB35B,EAAAnO,EAAM,QAAS8nC,EAAa,KAAK,EAEvC9nC,EAAM,MACMkmC,EAAA,CAElB,CAGF,SAAS4E,GAAc,CACrB38B,EAAUnO,EAAM,OAAO,CAAA,CAGzB,SAASorC,EAAclyC,EAAsB,CACjCiV,EAAAnO,EAAM,UAAW9G,CAAK,CAAA,CAGlC,SAASmyC,EAAenyC,EAAsB,CAClCiV,EAAAnO,EAAM,WAAY9G,CAAK,CAAA,CAGnC,SAASqyC,EAAYryC,EAAsB,CAC/BiV,EAAAnO,EAAM,QAAS9G,CAAK,CAAA,CAGhC,SAASswC,GAAmB,CAC1B,IAAI5gD,EAAQk/C,EAAa,MAErB,GAAA7+C,GAAOL,CAAK,EAAG,CACjBo/C,EAAc,MAAQ,EAEtB,MAAA,CAGF,MAAMhB,GAAYhnC,EAAM,UAEpBgnC,IAAap+C,EAAM,OAASo+C,KACtBp+C,EAAAA,EAAM,MAAM,EAAGo+C,EAAS,GAGlCgB,EAAc,MAAQp/C,EAAM,OAC5Bk/C,EAAa,MAAQl/C,CAAA,CAGvB,SAASghD,GAAY,CACbu6E,MAAAA,EAAW,SAAS,cAAc,UAAU,EAElDA,EAAS,MAAM,OAAS,IACxBA,EAAS,aAAa,WAAY,UAAU,EAC5CA,EAAS,MAAQr8E,EAAa,MACrB,SAAA,KAAK,YAAYq8E,CAAQ,EAClCA,EAAS,OAAO,EAEV,MAAAl4E,GAAY,SAAS,YAAY,MAAM,EAEpC,gBAAA,KAAK,YAAYk4E,CAAQ,EAE3Bl4E,EAAA,CAGH,MAAAlwC,EAAQpK,GAASqO,EAAM,KAAK,EAC5BqsC,EAAcrsC,EAAM,SACtBlE,GAASuuC,EAActuC,GAAS,GAAG,EACnCX,GAASivC,EAActuC,GAAS,EAAE,EAEtC,SAASyvC,GAAuBtyC,EAAyB,CACvDivC,EAAU,MAAQ,GACRh6B,EAAAnO,EAAM,mBAAoB9G,CAAK,CAAA,CAG3C,SAASwyC,GAAqBxyC,EAAyB,CACjDivC,EAAU,QACZA,EAAU,MAAQ,GAEdg8E,EAAS,OACXA,EAAS,MAAM,cAAc,IAAI,MAAM,OAAO,CAAC,GAIzCh2G,EAAAnO,EAAM,mBAAoB9G,CAAK,CAAA,+CAKzCmZ,EAAA,mBA4CM,MAAA,CA5CA,GAAIH,QAAK6zB,CAAA,EAAG,uBAAOniC,EAAS,KAAA,EAAG,QAAKisC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE,QAAA,OAAAj6C,GAAAojH,EAAQ,QAAR,YAAApjH,GAAU,SAAK,GACzD0R,qBAyBY,WAzBZC,EAAA,WACUR,EAwBE,MAAAlS,CAAA,EAxBI,aAAY,SACtB,WAAJ,IAAImkH,EACH,MAAQ,CAAAjyG,EAAAA,MAAA3B,CAAA,EAAG,GAAe,SAAA,GAAA2B,GAAAA,EAAAA,MAAAlS,CAAA,EAAM,eAANkS,YAAAA,GAAoB,MAAOA,EAAA,MAAAlS,CAAA,EAAM,YAAY,EACvE,MAAO8nC,EAAY,MACnB,KAAM51B,EAAAA,MAAKlS,CAAA,EAAC,KACZ,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,aAAcupC,EAAY,MAC1B,WAAYr3B,EAAAA,MAAKlS,CAAA,EAAC,WAClB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,SAChB,SAAUumD,EAAU,MACpB,YAAar0C,EAAK,MAAAlS,CAAA,EAAC,aAAekS,EAAA,MAAA5P,CAAA,EAAO,YACzC,UAAW4P,EAAAA,SAAM,YAAgBA,QAAKlS,CAAA,EAAC,UAAY,OACnD,KAAMkS,EAAAA,SAAM,QAAQA,GAAAA,EAAAA,MAAKlS,CAAA,EAAC,eAANkS,YAAAA,GAAoB,MACxC,kBAAiBA,QAAO8zB,CAAA,EACxB,OAAMiE,EACN,QAAOD,EACP,QAAK,YAAQc,EAAW,CAAA,OAAA,CAAA,EACjBS,GACP,WAAUF,EACV,UAASD,EACT,QAAKyE,GAAA,CAAA,IAAAA,GAAA,CAAA,WAAE39B,EAAAA,MAAWm6B,CAAA,GAAAn6B,EAAAA,MAAAm6B,CAAA,EAAA,GAAA7wC,EAAA,GAClB,SAAQ6uC,EACR,mBAAkBmB,GAClB,iBAAgBE,EAAA,eAEnBj5B,EAAAA,mBAgBM,MAAA,CAhBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBW,EAAAA,YASakB,EAAAA,WAAA,CATA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IAOM,CAPK2B,QAAAlS,CAAA,EAAM,uBAAjBqS,qBAOM,MAAA,OAPqB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GACrCW,EAAA,YAKQgB,QALRpO,EAAA,EAAA4O,aACUR,QAIF5I,CAAA,EAJQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,EAAAA,SAAM,aAAeA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,KAC1C,MAAM,2FAID4I,EAAAA,MAAAlS,CAAA,EAAM,UAAkB,GAAA,CAAAkS,EAAAA,MAAAlS,CAAA,EAAM,yBAAzCqS,EAAAA,mBAIM,MAAA,OAJ+C,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAC/DgC,aAEOC,EAFa,OAAA,QAAA,CAAA,MAAOs1B,EAAA,OAA3B,IAEO,qBADF,gBAAA51B,QAAKlS,CAAA,EAAC,YAAc,IAAWgoC,EAAa,MAAA,GAAMA,EAAa,KAAA,IAAI91B,EAAK,MAAAlS,CAAA,EAAC,SAAS,EAAA,EAAA,CAAA,qDCxQ/F,IAAI9B,GAAK,EAEF,SAASkmH,IAAQ,CACf,OAAAlmH,IACT,CAEA,MAAMmmH,OAAgB,IAEtB,IAAI1oH,GACA2oH,GAEY,SAAAC,GAAUrmH,EAAYD,EAAuB,CACjDomH,GAAA,IAAInmH,EAAID,CAAM,EAEpBomH,GAAU,MAAQ,CAACC,KACrB,cAAc3oH,EAAK,EAEnBA,GAAQ,YAAY,IAAM,CACZ2oH,GAAA,GAEN,MAAA1oH,EAAU,KAAK,IAAI,EAEfyoH,GAAA,QAAQpmH,GAAU,CACrBA,EAAO,UAERrC,EAAUqC,EAAO,QAAUA,EAAO,WACpCA,EAAO,QAAQ,MAAQumH,GACrBvmH,EAAO,SACPrC,EACAqC,EAAO,OAAO,MACdA,EAAO,UAAU,KACnB,EACAA,EAAO,QAAUrC,EACnB,CACD,GACA,GAAI,EAEX,CAEO,SAAS6oH,GAAYvmH,EAAY,CACtCmmH,GAAU,OAAOnmH,CAAE,EAEdmmH,GAAU,OACb,cAAc1oH,EAAK,EACP2oH,GAAA,GAEhB,CAEO,SAASE,GACdxvH,EACA4G,EACA0G,EACAY,EACA,CACA,MAAMo1B,EAAO,KAAK,IAAI18B,EAAU5G,EAAK,SAAS,EACxCnM,EAAO+S,EAAU5G,EAAK,QAAY,EAAAsN,EAAO,IAAMA,EAAO,KAExD,IAAA2N,EACAy0G,EACAC,EAAW,GA2Cf,OAzCIrsF,EAAO,GAAKvkC,IACdkc,EAAQ3N,EAAO,QACJqiH,EAAA,IACFrsF,EAAOrkC,IAChBgc,EAAQ3N,EAAO,OACJoiH,EAAA,KAAK,MAAMpsF,EAAOvkC,EAAsB,GAC1CukC,EAAOlkC,IAChB6b,EAAQ3N,EAAO,OACJoiH,EAAA,KAAK,MAAMpsF,EAAOrkC,EAAsB,GAC1CqkC,EAAO7jC,IAChBwb,EAAQ3N,EAAO,KACJoiH,EAAA,KAAK,MAAMpsF,EAAOlkC,EAAoB,GACxCkkC,EAAO,GAAK7jC,IACViwH,EAAA,KAAK,MAAMpsF,EAAO7jC,EAAmB,EAE5CiwH,IAAa,GACfz0G,EAAQ3N,EAAO,UACJqiH,EAAA,IAEX10G,EAAQ3N,EAAO,MAERg2B,EAAO,IAAM7jC,IACtBiwH,EAAW,KAAK,MAAMpsF,GAAQ,GAAK7jC,GAAoB,EAEnDiwH,IAAa,GACfz0G,EAAQ3N,EAAO,UACJqiH,EAAA,IAEX10G,EAAQ3N,EAAO,SAGjBoiH,EAAW,KAAK,MAAMpsF,EAAO,IAAM7jC,EAAmB,EAElDiwH,IAAa,GACfz0G,EAAQ3N,EAAO,SACJqiH,EAAA,IAEX10G,EAAQ3N,EAAO,OAIfqiH,EACK10G,EAGFhN,GAAa,GAAGJ,GAAaoN,EAAOy0G,CAAS,CAAC,IAAI77H,CAAI,GAAIqa,CAAS,CAC5E,CCxHO,MAAM0hH,GAAez3G,GAAW,CACrC,OAAQiB,GAAoB,EAC5B,SAAU,CAAC,OAAQ,OAAQ,IAAI,EAC/B,SAAUnB,GACV,MAAOD,GACP,YAAa,MACf,CAAC,mGCCK,MAAAhN,EAAQiM,GAAS,UADRsF,EAC2B,CACxC,OAAQ,KACR,SAAU,CACR,QAAS,IAAM,KAAK,IAAI,EACxB,OAAQ,EACV,EACA,SAAU,CACR,QAAS,GACT,UAAW3oB,GAAS,OAAOA,GAAU,WAAaA,GAAS,CAC7D,EACA,MAAO,GACP,YAAa,qBAAA,CACd,EAEK2nB,EAAKtF,GAAc,UAAU,EAC7B45G,EAAWC,EAAY9kH,EAAM,QAAQ,EACrCsC,EAASI,GAAU,UAAW07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACpDkD,EAAYN,GAAa,EACzBmiH,EAAUrzG,EAAAA,IAAI8yG,GAAeK,EAAU,KAAK,IAAI,EAAGviH,EAAO,MAAOY,EAAU,KAAK,CAAC,EAEjFhF,EAAKkmH,GAAM,EACXnmH,EAAS,CACb,SAAA4mH,EACA,QAAAE,EACA,OAAAziH,EACA,UAAAY,EACA,SAAU8hH,EAAchlH,EAAM,QAAQ,EACtC,QAAS,KAAK,IAAI,CACpB,EAEMilH,EAAe5jH,EAAAA,SAAS,IAAM,CAC9B,GAACrB,EAAM,MAEX,OAAI,OAAOA,EAAM,OAAU,SAAiBA,EAAM,MAE3CpK,GAAOoK,EAAM,SAAUA,EAAM,WAAW,CAAA,CAChD,EAEDukH,GAAUrmH,EAAID,CAAM,EAEpB2O,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACAqV,EAAA,SAAW6mH,EAAYl8H,CAAK,EAC3Bm8H,EAAA,MAAQP,GAAeK,EAAU,KAAK,IAAO,EAAAviH,EAAO,MAAOY,EAAU,KAAK,CAAA,CAEtF,EACA0J,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACAqV,EAAA,SAAW+mH,EAAcp8H,CAAK,CAAA,CAEzC,EAEAgsB,EAAAA,gBAAgB,IAAM,CACpB6vG,GAAYvmH,CAAE,CAAA,CACf,EAED,SAAS8mH,EAAc1pH,EAA4B,CACjD,OAAOA,IAAaA,IAAa,GAAO,IAAMA,EAAW,IAAA,CAG3D,SAASwpH,EAAYl8H,EAAiB,CAChC,OAAA,OAAOA,GAAU,WACXA,EAAAA,EAAM,QAAQ,KAAM,GAAG,GAG1B8M,GAAO9M,CAAK,CAAA,CAGR,OAAAkpB,EAAA,CAAE,QAAAizG,EAAS,wBAItB1yG,EAAA,mBAEO,OAAA,CAFA,MAAKC,EAAA,eAAA,CAAGJ,EAAAA,MAAE3B,CAAA,EAAC,IAAK2B,EAAA,MAAKlS,CAAA,EAAC,SAAWkS,EAAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,EAAe,MAAO00G,EAAY,SAC1E,gBAAAF,EAAO,KAAA,EAAA,GAAA7pE,EAAA,6gCC3Ed,MAAMl7C,EAAQuR,EAoERytB,EAAOC,EAaP1uB,EAAKtF,GAAc,aAAa,EAEhCgM,EAAUvF,EAAAA,IAAiB,EAE3BzB,EAAQ5O,EAAAA,SAAS,IAAMrB,EAAM,OAAO,WAAa,EAAE,EACnD+zE,EAAc1yE,EAAAA,SAAS,IACnB,OAAO,KAAKrB,EAAM,OAAO,EAAiB,MAAcnX,GACvD,CAACmX,EAAM,QAAQnX,CAAI,GAAKmX,EAAM,UAAUnX,CAAI,CACpD,CACF,EACKwrF,EAAgBhzE,EAAAA,SAAS,IACtB6yE,EAAY,MAAM,CAC1B,EACKI,EAAkBjzE,EAAAA,SAAS,IACxB6yE,EAAY,QAAQ,CAC5B,EACKK,EAAkBlzE,EAAAA,SAAS,IACxB6yE,EAAY,QAAQ,CAC5B,EAEYpiE,EAAA,CACX,YAAAiiE,EACA,QAAA98D,EACA,MAAO,IAAM,QACXlW,EAAAkW,EAAQ,QAAR,MAAAlW,EAAe,OACjB,EACA,KAAM,IAAM,QACVA,EAAAkW,EAAQ,QAAR,MAAAlW,EAAe,MAAK,CACtB,CACD,EAED,SAASmzE,EAAYrrF,EAAgB,CACnC,OAAOmX,EAAM,UAAUnX,CAAI,EACvBgJ,GAAamO,EAAM,UAAUnX,CAAI,CAAC,EAClC,GAAGmX,EAAM,MAAM,GAAGA,EAAM,MAAM,EAAA,CAGpC,SAAS+0E,EAAkBlsF,EAAgB,CAClC,OAAAmX,EAAM,SAAWA,EAAM,WAAanX,EAAO0nB,EAAG,IAAI,OAAQ,SAAS,EAAI,IAAA,CAGhF,SAASykE,EAAiBnsF,EAAgB,CACpCmX,EAAM,UAEVg/B,EAAK,aAAcn2C,CAAI,CAAA,CAGzB,SAASwjD,EAAYnzC,EAAsB,CACrC,GAAA,CAAC8G,EAAM,QAAS,OAEd,MAAAnX,EAAOupF,GAAel5E,CAAK,EAEjC,GAAI8G,EAAM,SAAU,CAClB,OAAQnX,EAAM,CACZ,IAAK,KAAM,CACTm2C,EAAK,OAAO,EACZ,KAAA,CAEF,IAAK,MAAO,CACVA,EAAK,QAAQ,EACb,KAAA,CACF,CAGF,MAAA,CAGF,OAAQn2C,EAAM,CACZ,IAAK,OAAQ,CACXm2C,EAAK,WAAW,EAChB,KAAA,CAEF,IAAK,OAAQ,CACXA,EAAK,WAAW,EAChB,KAAA,CAEF,IAAK,KAAM,CACJA,EAAA,QAAS9lC,EAAM,OAAO,EAC3B,KAAA,CAEF,IAAK,OAAQ,CACN8lC,EAAA,OAAQ9lC,EAAM,OAAO,EAC1B,KAAA,CAEF,IAAK,KAAM,CACG4xC,EAAA,EACZ,KAAA,CAEF,IAAK,MAAO,CACG6hC,EAAA,EACb,KAAA,CAEF,QACM,OAAO9jF,GAAS,UAClBm2C,EAAK,QAASn2C,CAAI,CAEtB,CACF,CAGF,SAASiiD,GAAc,CACrB9L,EAAK,OAAO,CAAA,CAGd,SAAS2tC,GAAe,CACtB3tC,EAAK,QAAQ,CAAA,CAGf,SAASiL,GAAa,CACpBjL,EAAK,MAAM,CAAA,6BAKX3sB,EAAA,mBAuFM,MAAA,SAtFA,UAAJ,IAAI4E,EACH,MAAK3E,EAAA,eAAA,CAAGJ,EAAAA,SAAG,YAAaX,EAAQ,UAAIW,QAAE3B,CAAA,EAAC,IAAG,QAAA,OAAA,CAAA,CAAA,EAC3C,KAAK,OACL,SAAS,KACR,UAAS87B,EACT,OAAMpC,CAAA,GAEK,CAAA14B,EAAA,UAAYwiE,EAAW,mBAAnC,EAAA1hE,EAAA,mBAEM,MAAA,OAFgC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,qBAC7CgB,EAAW,WAAA,EAAA,CAAA,kBAEhBc,EA2EW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAzEDntB,EAAA,QAAQ,oBADhBc,EAAAA,mBAaM,MAAA,OAXH,MAAQC,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,MAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,KAClB,gBAAejQ,EAAM,UAAU,KAC/B,iBAAgBq0E,EAAa,MAC7B,gBAAe,EACf,gBAAe,GACf,kBAAiB9iE,EAAS,UAC1B,uBAAOyjE,EAAgB,MAAA,EAAA,IAErB,gBAAAX,EAAa,KAAA,EAAA,GAAAn5B,EAAA,+BAGV3pC,EAAA,OAAO,oBADfc,EAAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,uBAAOykE,EAAgB,MAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,IAAI,EAAA,CAAA,+BAEAA,EAAA,QAAQ,sBAAxBc,qBAyBWqsB,WAAA,CAAA,IAAA,GAAA,CAxBEntB,EAAA,QAAQ,oBAAnBc,EAAAA,mBAEM,MAAA,OAFoB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EAAe,cAAA,EAAA,oBAChDgB,EAAS,SAAA,EAAA,CAAA,+BAEdkB,EAAAA,mBAYM,MAAA,CAXH,MAAQH,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,QAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,OAClB,gBAAejQ,EAAM,UAAU,OAC/B,iBAAgBs0E,EAAe,MAC/B,gBAAe,EACf,gBAAe,GACf,kBAAiB/iE,EAAS,UAC1B,uBAAOyjE,EAAgB,QAAA,MAErB,gBAAAV,EAAe,KAAA,EAAA,GAAA5jB,EAAA,EAGZn/C,EAAA,OAAO,sBADfc,EAAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,uBAAOykE,EAAgB,QAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,MAAM,EAAA,CAAA,iEAGJA,EAAA,QAAQ,sBAAxBc,qBAyBWqsB,WAAA,CAAA,IAAA,GAAA,CAxBEntB,EAAA,QAAQ,QAAUA,EAAA,QAAQ,oBAArCc,EAAA,mBAEM,MAAA,OAFsC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EAAe,cAAA,EAAA,oBAClEgB,EAAS,SAAA,EAAA,CAAA,+BAEdkB,EAAAA,mBAYM,MAAA,CAXH,MAAQH,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,WAAYwkE,EAAiB,QAAA,CAAA,CAAA,EACzC,KAAK,aACJ,aAAY9kE,EAAK,MAAC,OAClB,gBAAejQ,EAAM,UAAU,OAC/B,iBAAgBu0E,EAAe,MAC/B,gBAAe,EACf,gBAAe,GACf,kBAAiBhjE,EAAS,UAC1B,uBAAOyjE,EAAgB,QAAA,MAErB,gBAAAT,EAAe,KAAA,EAAA,GAAAU,EAAA,EAGZ1jE,EAAA,OAAO,sBADfc,EAAAA,mBAOM,MAAA,OALH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACb,cAAA,GACC,uBAAOykE,EAAgB,QAAA,EAAA,EAErBpiE,EAAA,gBAAArB,EAAA,OAAO,MAAM,EAAA,CAAA,sWC3PpB,KAAA,CACJ,MAAAw0B,EACA,QAAAC,EACA,MAAA5vB,EACA,SAAAvC,EACA,QAAAoyB,EACA,KAAAj8C,EACA,cAAAk8C,EACA,WAAA3C,EACA,cAAA4C,EACA,cAAAC,GACEhD,GAAiC,IAAM,QAAA,OAAAriC,GAAAwd,EAAU,QAAV,YAAAxd,GAAiB,QAAO,EAE7DwP,EAAKtF,GAAc,aAAa,EAGhCjL,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,KAAM7D,GAAe1jB,CAAI,EACzB,MAAO8jB,GAAgBsI,CAAK,EAC5B,OAAQ,KACR,QAAS,GACT,UAAW,CACT,QAAS,eACT,UAAWxtB,IAASisC,GAAmB,SAASjsC,EAAK,CACvD,EACA,SAAU,GACV,OAAQ,WACR,UAAW,IACX,MAAO,CACL,QAAS,IAAMu9C,EAAc,EAC7B,OAAQ,EACV,EACA,OAAQ,CACN,QAAS,IACT,UAAoBv9C,IAAAA,GAAM,SAAW,CACvC,EACA,UAAW,GACX,SAAU,GACV,QAAS,GACT,QAAS6P,GACT,UAAW,CACT,QAAS,EACT,cAAoB,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,SAAS7P,EAAK,CACjD,EACA,MAAO,IAAM,CAAC,EAAG,EAAG,CAAC,EACrB,OAAQ,KAAO,CAAA,GACf,UAAW,IAAM,CAAC,EAClB,MAAO,KACP,SAAU,IAAMirB,EAAS,MACzB,eAAgB,IAAMtD,EAAG,GAAG,MAAM,EAClC,YAAa,KACb,WAAY,KACZ,UAAW,IAAM,CAAC,EAAG,EAAG,CAAC,EACzB,OAAQ9B,GAAe,EACvB,YAAa,GACb,OAAQA,GAAe,EACvB,YAAa,GACb,SAAU,GACV,SAAU,GACV,QAAS,IAAMw3B,EAAQ,MACvB,YAAax3B,GAAe,EAC5B,YAAa,GACb,cAAe,KACf,IAAK,KACL,IAAK,KACL,aAAc,GACd,cAAe,GACf,YAAa,KACb,aAAc,GACd,YAAa,KACb,mBAAoB,OACpB,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKuwB,EAAOC,EAEP/6B,EAAQsN,EAAAA,SAAA,EAERlP,EAASI,GAAU,aAAc07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACvDsJ,EAAQU,GAAS,EACjB9G,EAAYN,GAAa,EAEzBwZ,EAAYgiB,EAAAA,MAAMp+B,EAAO,WAAW,EACpCg1B,EAAWoJ,EAAAA,MAAMp+B,EAAO,UAAU,EAClCq9C,EAAiB3rC,EAAAA,IAAI1R,EAAM,OAAO,EAClC6nC,EAAUn2B,MAAI,EAAK,EACnB22B,EAAY32B,MAAI,EAAE,EAClBurE,EAAaioC,EAAgB,EAC7B/nC,EAAW+nC,EAAgB,EAC3B9nC,EAAe1rE,MAAqB,OAAO,EAC3C4rE,EAAc5rE,MAAI,EAAK,EAEvB,CAAE,MAAA/V,CAAM,EAAI66B,GAAc,EAE1Bvf,EAAU7C,GAAgB4pC,EAAkB,EAC5C9oB,EAASxjB,EAAAA,IAAmB,EAC5B,CAAE,UAAA6M,EAAW,WAAA6W,EAAY,aAAAK,CAAA,EAAiBX,GAAU,CACxD,UAAA1Y,EACA,SAAA4Y,EACA,QAAA/d,EACA,OAAQ5V,EAAAA,SAAS,IAAA,QAAM,OAAAN,GAAAm0B,EAAO,QAAP,YAAAn0B,GAAc,QAAO,EAC5C,OAAQ,EAAA,CACT,EACK,CAAE,QAAAmW,CAAA,EAAYF,GAASuH,CAAS,EAChC,CAAE,eAAAo1D,EAAe,EAAIL,GAAal1C,QAAMp+B,EAAO,KAAK,EAAGo+B,EAAA,MAAMp+B,EAAO,KAAK,CAAC,EAE1Eu9E,GAAa7rE,EAAAA,IAAsC,EACnD8rE,EAAW9rE,EAAAA,IAAsC,EAEjDisE,GAAmBt8E,EAAAA,SAAS,IAAM,CACtC,GAAIrB,EAAM,YACD,OAAA,MAAM,QAAQA,EAAM,WAAW,EAAIA,EAAM,YAAY,CAAC,EAAIA,EAAM,YAGzE,KAAM,CAAE,OAAAgsC,GAAQ,MAAA/hD,GAAO,KAAA8oC,EAAK,EAAIzwB,EAAO,MAAM,YAE7C,OAAOW,GAAajD,EAAM,MAAQ,GAAG/V,EAAK,IAAI8oC,EAAI,GAAK,GAAGiZ,EAAM,IAAIjZ,EAAI,GAAI7vB,EAAU,KAAK,CAAA,CAC5F,EACK06E,GAAiBv8E,EAAAA,SAAS,IAAM,CACpC,GAAIrB,EAAM,YACR,OAAO,MAAM,QAAQA,EAAM,WAAW,EAClCA,EAAM,YAAY,CAAC,GAAKA,EAAM,YAAY,CAAC,EAC3CA,EAAM,YAGZ,KAAM,CAAE,IAAAib,GAAK,KAAA8X,EAAK,EAAIzwB,EAAO,MAAM,YAEnC,OAAOW,GAAa,GAAGgY,EAAG,IAAI8X,EAAI,GAAI7vB,EAAU,KAAK,CAAA,CACtD,EACKU,GAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,YAAY,EAClBA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,SAC3B,CAACuQ,EAAG,GAAGvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAG,CAAC0sE,EAAW,QAAQ,KACxC,CAAC1sE,EAAG,GAAG,WAAW,CAAC,EAAG,CAAC0sE,EAAW,QAAQ,OAC1C,CAAC1sE,EAAG,GAAG,WAAW,CAAC,EAAG,CAAC0sE,EAAW,QAAQ,OAC1C,CAAC1sE,EAAG,GAAG,SAAS,CAAC,EAAG8sC,EAAe,MACnC,CAAC9sC,EAAG,GAAGvQ,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACuQ,EAAG,GAAG,UAAU,CAAC,EAAGvQ,EAAM,KAAA,CAE/B,CACD,EACK2L,GAAWtK,EAAAA,SAAS,IAAMrB,EAAM,SAAWA,EAAM,WAAW,EAC5D6jD,GAAgBxiD,EAAAA,SAAS,IAAM,CAC7B,MAAAyiD,GAAUvzC,EAAG,GAAG,UAAU,EAEzB,MAAA,CACL,CAACuzC,EAAO,EAAG,GACX,CAAC,GAAGA,EAAO,YAAY,EAAG9jD,EAAM,SAChC,CAAC,GAAG8jD,EAAO,YAAY,EAAGn4C,GAAS,MACnC,CAAC,GAAGm4C,EAAO,WAAW,EAAG9jD,EAAM,QAC/B,CAAC,GAAG8jD,EAAO,KAAK9jD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,UAC9C,CAAC,GAAG8jD,EAAO,WAAW,EAAGjc,EAAQ,MACjC,CAAC,GAAGic,EAAO,KAAK9jD,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,SAClD,CAAA,CACD,EACK8oC,GAAYznC,EAAAA,SAAS,IAAM,CAAC,EAAE6C,EAAM,QAAUlE,EAAM,QAAUA,EAAM,MAAM,OAAO,EACjF8nC,GAAezmC,EAAAA,SAAS,IAAM,CAClC,MAAMigE,GAAS,CAAC2b,EAAYE,CAAQ,EAAE,IAAI/mE,IACjC,OAAO,OAAOA,GAAM,SAAS,EAAE,IAAIvkB,EAAY,EAAE,KAAK,GAAG,CACjE,EAED,OAAOmO,EAAM,MAAQshE,GAASA,GAAO,CAAC,CAAA,CACvC,EACKh4B,EAAYjoC,EAAAA,SAAS,IAClB,CAACrB,EAAM,UAAY,CAAC2L,GAAS,OAAS3L,EAAM,WAAakX,EAAQ,OAAS,CAAC,CAACmxB,EAAU,KAC9F,EACKm2C,EAAan9E,EAAAA,SAAS,IAAM,CAChC,KAAM,CAAE,KAAAjM,GAAM,OAAAC,GAAQ,OAAAC,IAAW2nF,EAAW,UAE5C,OACEtJ,GAAe,KAAKv+E,EAAI,GACxBu+E,GAAe,OAAOv+E,GAAMC,EAAM,GAClCs+E,GAAe,OAAOv+E,GAAMC,GAAQC,EAAM,CAAA,CAE7C,EACKopF,EAAWr9E,EAAAA,SAAS,IAAM,CAC1B,GAAA,CAACrB,EAAM,MAAc,MAAA,GAEzB,KAAM,CAAE,KAAA5K,GAAM,OAAAC,GAAQ,OAAAC,IAAW6nF,EAAS,UAE1C,OACExJ,GAAe,KAAKv+E,EAAI,GACxBu+E,GAAe,OAAOv+E,GAAMC,EAAM,GAClCs+E,GAAe,OAAOv+E,GAAMC,GAAQC,EAAM,CAAA,CAE7C,EAEDsX,EAAA,MACE,IAAM5M,EAAM,MACHpX,IAAA,CACPokE,EAAWpkE,EAAK,EAChBy/C,EAAU,OAAS,MAAM,QAAQz/C,EAAK,EAAIA,GAAM,CAAC,GAAKA,GAAM,CAAC,EAAIA,IAASuxF,EAAmB,EAAA,EAC/F,EACA,CAAE,UAAW,EAAK,CACpB,EACAvtE,EAAA,MAAM,IAAM5M,EAAM,OAAQ4+E,EAAa,CAAE,UAAW,GAAM,EAC1DhyE,EAAA,MACE,IAAM5M,EAAM,QACHpX,IAAA,CACPy0D,EAAe,MAAQz0D,EAAA,CAE3B,EACAgkB,QAAMywC,EAAyBz0D,IAAA,CACzBA,IACW6sC,EAAA,CACf,CACD,EACD7oB,QAAMi7B,EAAkBj/C,IAAA,CAEpBulB,EADEvlB,GACQoX,EAAM,QAENA,EAAM,MAFO,CAGzB,CACD,EACD4M,QAAMwwE,EAAuBx0F,IAAA,CACvB,CAACoX,EAAM,cAAgBq9C,EAAe,OACxClvC,EAAUnO,EAAM,YAAa++E,EAAgB,EAAE,OAAQn2F,EAAK,CAC9D,CACD,EACDgkB,EAAA,MACE,IAAMqwE,EAAW,OACRr0F,IAAA,CACH,CAACoX,EAAM,cAAgBq9C,EAAe,OAAS+/B,EAAa,QAAU,SAC9DjvE,EAAAnO,EAAM,YAAapX,GAAO,OAAO,CAC7C,CAEJ,EACAgkB,EAAA,MACE,IAAMuwE,EAAS,OACNv0F,IAAA,CACH,CAACoX,EAAM,cAAgBq9C,EAAe,OAAS+/B,EAAa,QAAU,OAC9DjvE,EAAAnO,EAAM,YAAapX,GAAO,KAAK,CAC3C,CAEJ,EACAgkB,EAAA,MACE,IAAM5M,EAAM,SACHpX,IAAA,CACHA,KACF66D,GAAW,EAAK,EACLxZ,GAAA,EACb,CAEJ,EACAr9B,QAAMjB,GAAmB/iB,IAAA,CACnBA,IACF66D,GAAW,EAAK,CAClB,CACD,EAEY3xC,EAAA,CACX,MAAAi0B,EACA,QAAA7uB,EACA,eAAAmmC,EACA,QAAAxV,EACA,WAAAo1C,EACA,SAAAE,EACA,aAAAC,EACA,aAAAt1C,GACA,WAAA02C,EACA,SAAAE,EACA,QAAAznE,EACA,UAAAsH,EACA,OAAA2W,EACA,MAAOqoD,GACP,IAAKC,EACL,aAAA/nD,EACA,MAAQ5qC,IAA2B,QAAA,OAAAkW,GAAAwd,EAAU,QAAV,YAAAxd,GAAiB,MAAMlW,KAC1D,KAAM,IAAA,QAAM,OAAAkW,GAAAwd,EAAU,QAAV,YAAAxd,GAAiB,OAAK,CACnC,EAED,SAASmkH,GAAkB,CACzB,KAAM,CAAE,cAAAzyC,GAAe,QAAAG,GAAS,YAAAG,GAAa,YAAAE,IAAgBV,GAAU,CACrE,OACA,SACA,QAAA,CACa,EAET4yC,GAAYr4G,EAAAA,SAAS,CACzB,KAAM,EACN,OAAQ,EACR,OAAQ,CAAA,CACT,EACKktE,GAAYltE,EAAAA,SAAS,CACzB,KAAM,GACN,OAAQ,GACR,OAAQ,EAAA,CACT,EAED,OAAOA,WAAS,CACd,OAAQ2lE,GACR,QAAAG,GACA,UAAAoH,GACA,UAAAmrC,GACA,YAAApyC,GACA,YAAAE,EAAA,CACD,CAAA,CAGH,SAAS8L,GAAkB,CAClB,OAAA3B,EAAa,QAAU,QAAUH,EAAaE,CAAA,CAGvD,SAASnwB,EAAoCpkE,GAAgB,CACtD,MAAM,QAAQA,EAAK,IACdA,GAAA,CAACA,GAAOA,EAAK,GAGjB,MAAAw8H,OAAkB,KAExB,QAASh7H,GAAI,EAAGA,GAAI,EAAG,EAAEA,GAAG,CAC1B,MAAMkC,GAAQ2lF,GAAS,KAAKrpF,GAAMwB,EAAC,GAAK,EAAE,EACpCgsB,GAAQhsB,KAAM,EAAI6yF,EAAaE,EAC/B,CAAE,UAAAgoC,IAAc/uG,GAEtB,GAAI9pB,GAAO,CACT8yF,GAAgB,GAAMh1F,KAAM,EAAI,QAAU,KAAK,EAE/C,MAAMgL,GAAO,SAAS9I,GAAM,CAAC,CAAC,EACxB+I,EAAS/I,GAAM,CAAC,EAAI,SAASA,GAAM,CAAC,EAAE,MAAM,CAAC,CAAC,EAAI,EAClDgJ,GAAShJ,GAAM,CAAC,EAAI,SAASA,GAAM,CAAC,EAAE,MAAM,CAAC,CAAC,EAAI,EAElD0I,GAAO,IAAI,KAAK,IAAM,EAAG,EAAGI,GAAMC,EAAQC,EAAM,EAE5C6vH,GAAA,KAAOnwH,GAAK,SAAS,EACrBmwH,GAAA,OAASnwH,GAAK,WAAW,EACzBmwH,GAAA,OAASnwH,GAAK,WAAW,CAAA,MAEzBmwH,GAAA,KAAOC,GAAY,SAAS,EAC5BD,GAAA,OAASC,GAAY,WAAW,EAChCD,GAAA,OAASC,GAAY,WAAW,EAE1ChmC,GAAgB,GAAOh1F,KAAM,EAAI,QAAU,KAAK,EAG9C,GAAA,CAAC4V,EAAM,MAAO,KAAA,CACpB,CAGF,SAAS4+E,GAAc,CACpB,CAAC3B,EAAYE,CAAQ,EAAE,QAAQ/mE,IAAS,CACvCA,GAAM,QAAQ,KAAOpW,EAAM,OAAO,SAAS,GAAG,EAC9CoW,GAAM,QAAQ,OAASpW,EAAM,OAAO,SAAS,GAAG,EAChDoW,GAAM,QAAQ,OAASpW,EAAM,OAAO,SAAS,GAAG,CAAA,CACjD,CAAA,CAGM,SAAAo/E,GAAgBx2F,GAAgB4zF,GAA6B,EACrDA,GACXA,KAAc,QACZ,CAACS,CAAU,EACX,CAACE,CAAQ,EACX,CAACF,EAAYE,CAAQ,GAElB,QAAQ/mE,IAAS,CACpB,OAAO,KAAKA,GAAM,SAAS,EAAiB,QAAgBvtB,IAAA,CAC5DutB,GAAM,UAAUvtB,EAAI,EAAID,EAAA,CACzB,CAAA,CACF,CAAA,CAGH,SAASuxF,GAAiB,CACjB,OAAA,MAAM,QAAQryC,GAAa,KAAK,EAAIA,GAAa,MAAM,KAAK,GAAG,EAAIA,GAAa,KAAA,CAGzF,SAASu9E,IAAa,EAChB7mC,EAAW,OAAUx+E,EAAM,OAAS0+E,EAAS,QAC/C1xB,EAAWhtD,EAAM,KAAK,CACxB,CAGF,SAASyjD,GAAW/G,GAAkB,CAChCW,EAAe,QAAUX,KAE7BW,EAAe,MAAQX,GAEvB1d,EAAK,iBAAkB0d,EAAO,EACpBvuC,EAAAnO,EAAM,SAAU08C,EAAO,EAAA,CAGnC,SAASi+B,IAAa,CACT0qC,GAAA,EAEPh9E,EAAU,QAAU8xC,MACtB9xC,EAAU,MAAQ8xC,EAAe,EAEjCiF,GAAgB,EAAI,EACfpgD,EAAA,eAAgB8I,GAAa,KAAK,EACvC1B,EAAc0B,GAAa,KAAK,EACtB35B,EAAAnO,EAAM,SAAmC8nC,GAAa,KAAK,EACvD5B,EAAA,EAChB,CAGF,SAASi6C,IAAgB,CACnBngF,EAAM,WAEV6nC,EAAQ,MAAQ,GAEVlsC,EAAA,MAAQ,WAAW,IAAM,WACzBksC,EAAQ,QACNu1C,EAAa,QAAU,SACzBr8E,GAAAw8E,GAAW,QAAX,MAAAx8E,GAAkB,SAElB4U,GAAA6nE,EAAS,QAAT,MAAA7nE,GAAgB,UAGnB,GAAG,EAAA,CAGR,SAASs0B,IAAa,WACpB,aAAatuC,EAAM,KAAK,EAExBksC,EAAQ,MAAQ,IAChB9mC,GAAAw8E,GAAW,QAAX,MAAAx8E,GAAkB,QAClB4U,GAAA6nE,EAAS,QAAT,MAAA7nE,GAAgB,MAAK,CAGvB,SAASyqE,GAAUlnF,GAAc,CAC3B,GAAA8G,EAAM,UAAY2L,GAAS,MAAO,OAEtC,MAAMxa,GAAS+H,GAAM,OAErBuqD,GAAW,EAAI,EACD08B,GAAA,EAEVlpE,EAAQ,OAAS9lB,KACL,MAAM,KAAK8lB,EAAQ,MAAM,iBAAiB,IAAI1G,EAAG,GAAG,MAAM,CAAC,EAAE,CAAC,EAEjE,KAAa24D,IAAAA,KAAS/3E,IAAU+3E,GAAK,SAAS/3E,EAAM,CAAC,IAC9D8rF,EAAW,OAAS,KACpBE,EAAS,OAAS,MAEtB,CAGO,SAAA4C,GAAYC,GAAe,GAAM,CACxCv8B,GAAW,EAAK,EAEhBu8B,IAAgBrF,GAAW,EAC3BsC,EAAW,YAAY,EACvBE,EAAS,YAAY,CAAA,CAGd,SAAAxyC,GAAYy2C,GAAS,GAAM,CAC9BphF,EAAM,UAAY2L,GAAS,OAE3B3L,EAAM,WACRsT,EAAAA,SAAS,IAAM,CACb,MAAMwsE,GAAY9/E,EAAM,MAAS,CAAkB,EAAA,GAEnDgtD,EAAW,IAAI,EACfo0B,IAAUrB,GAAY,EAAK,EAC3B/gD,EAAK,eAAgB8gD,EAAS,EACpB3xE,EAAAnO,EAAM,SAAmC8/E,EAAS,EAC5D3xE,EAAUnO,EAAM,OAAO,EACvBujC,EAAWu8C,EAAS,EACpBsB,IAAUn3C,GAAW,EAErB5B,EAAU,MAAQ,GAElB/0B,EAAAA,SAAS,IAAM,CACb8rE,GAAgB,EAAK,CAAA,CACtB,CAAA,CACF,CACH,CAGF,SAASkmC,GAAkBz8H,GAAgB,CACrCw0D,EAAe,QACD0hC,IAAE,UAAUl2F,EAAI,EAAI,GACtC,CAGF,SAASmsF,GAAiBnsF,GAAgB,CACxCk2F,EAAA,EAAkB,OAASl2F,EAAA,CAG7B,SAASwjD,GAAYzjD,GAAe,CAClC,MAAMwtB,GAAQ2oE,EAAgB,EACxBl2F,GAAOutB,GAAM,OAEdvtB,KAEL03F,GAAkB13F,GAAMD,EAAK,EAEzBwtB,GAAM,SAAW,UAAYA,GAAM,UAAUvtB,EAAI,GAAK,IACxDutB,GAAM,YAAY,OAAQ,EAAK,EACjC,CAGO,SAAAmqE,GAAkB13F,GAAgBwH,GAAgB,CACzD,MAAM+lB,GAAQ2oE,EAAgB,EACxBl/E,GAAOuW,GAAM,UAAUvtB,EAAI,EAE7ButB,GAAM,UAAUvtB,EAAI,GAAKgX,GAAO,GAAKA,GAAO,GAC9CuW,GAAM,UAAUvtB,EAAI,EAAIgX,GAAO,GAAKxP,GAEpC+lB,GAAM,UAAUvtB,EAAI,EAAIwH,GAG1B4vF,GAAYp3F,EAAI,EAEhButB,GAAM,UAAUvtB,EAAI,EAAI,GACxBslB,EAAUnO,EAAM,QAASnX,GAAMutB,GAAM,UAAUvtB,EAAI,CAAC,CAAA,CAGtD,SAASo3F,GAAYp3F,GAAgB,CAC7B,MAAAs8H,GAAYpmC,IAAkB,UAE1BomC,GAAAt8H,EAAI,EAAI8E,GAAWw3H,GAAUt8H,EAAI,EAAG,EAAGA,KAAS,OAAS,GAAK,EAAE,EAC1Es8H,GAAUt8H,EAAI,EAAI,KAAK,MAAMs8H,GAAUt8H,EAAI,EAAIq3F,GAAQr3F,EAAI,CAAC,EAAIq3F,GAAQr3F,EAAI,CAAA,CAG9E,SAASo4F,GAAWL,GAAkB,CACpC,MAAMxqE,GAAQ2oE,EAAgB,EACxBl2F,GAAOutB,GAAM,OAEdvtB,IAEDutB,GAAM,QAAQvtB,EAAI,IACpButB,GAAM,UAAUvtB,EAAI,GAAK+3F,GAAUE,GAAYj4F,EAAI,EAAIq3F,GAAQr3F,EAAI,EAEnEo3F,GAAYp3F,EAAI,EAChBslB,EAAUnO,EAAM,OAAQnX,GAAMutB,GAAM,UAAUvtB,EAAI,CAAC,EACrD,CAGF,SAASq4F,GAAYN,GAAkB,CACrC,MAAMxqE,GAAQ2oE,EAAgB,EACxBl2F,GAAOutB,GAAM,OAEdvtB,IAEDutB,GAAM,QAAQvtB,EAAI,IACpButB,GAAM,UAAUvtB,EAAI,GAAK+3F,GAAUE,GAAYj4F,EAAI,EAAIq3F,GAAQr3F,EAAI,EAEnEo3F,GAAYp3F,EAAI,EAChBslB,EAAUnO,EAAM,QAASnX,GAAMutB,GAAM,UAAUvtB,EAAI,CAAC,EACtD,CAGF,SAASq3F,GAAQr3F,GAAgB,CACxB,OAAAmX,EAAM,MAAMnX,KAAS,OAAS,EAAIA,KAAS,SAAW,EAAI,CAAC,GAAK,CAAA,CAGzE,SAASi4F,GAAYj4F,GAAgB,CAC5B,OAAAmX,EAAM,UAAUnX,KAAS,OAAS,EAAIA,KAAS,SAAW,EAAI,CAAC,GAAK,CAAA,CAG7E,SAASs4F,IAAgB,CACvB,sBAAsB,IAAM,QACfl3C,GAAA,GACXlpC,GAAAwd,EAAU,QAAV,MAAAxd,GAAiB,OAAM,CACxB,CAAA,CAGH,SAAS+pC,IAAc,CACPq2C,GAAA,EACFpB,GAAA,EACZ5xE,EAAUnO,EAAM,OAAO,CAAA,CAGzB,SAAS2sE,IAAe,CACRwU,GAAA,EACdn0B,EAAWhtD,EAAM,KAAK,EACtB+/E,GAAY,EAAK,EACjB5xE,EAAUnO,EAAM,QAAQ,CAAA,CAG1B,SAASy6E,GAAe3pF,GAAe,CACrC,KAAM,CAAE,MAAAlI,GAAO,KAAA4P,EAAA,EAASwH,EAAM,UAAUlP,EAAK,EACvCy0H,GAAczoH,GAAWlU,EAAK,EAEtBu4F,GAAA,EACdn0B,EAAWu4D,EAAW,EACZp3G,EAAAnO,EAAM,WAAgExH,GAAM+sH,EAAW,EACrFxlC,GAAA,CAAA,CAGd,SAASO,GAAmBz3F,GAAuB,CACjDu0F,EAAa,MAAQv0F,EAAA,CAGvB,SAASoqF,GAAYpqF,GAAuB,CAC1C,GAAImX,EAAM,MAAO,CACXnX,KAAS,QAAUu0F,EAAa,QAAU,SAAW,CAACH,EAAW,QACnEqD,GAAmB,KAAK,EAG1B,MAAMlqE,GAAQ2oE,EAAgB,EACxBtM,GAAgBr8D,GAAM,OAIxB,GAFJA,GAAM,YAAYvtB,GAAM,CAAC4pF,EAAa,EAElCA,KAAkBr8D,GAAM,OAAQ,CAC5B,MAAAmH,GAAU6/D,EAAa,QAAU,SACpB7/D,GAAU4/D,EAAWF,GAE7B,YAAYp0F,KAAS,OAAS,SAAW,OAAQA,KAAS,MAAM,EACxDy3F,GAAA/iE,GAAU,MAAQ,OAAO,CAAA,CAC9C,MAEA0/D,EAAW,YAAYp0F,EAAI,CAC7B,CAGF,SAASi5F,GAAiBj5F,GAAgB,CACxCy3F,GAAmB,OAAO,EAC1BtL,GAAiBnsF,EAAI,CAAA,CAGvB,SAASk5F,GAAel5F,GAAgB,CACtCy3F,GAAmB,KAAK,EACxBtL,GAAiBnsF,EAAI,CAAA,CAGvB,SAAS28H,IAAgB,CACrB,OAAO,KAAKvoC,EAAW,SAAS,EAAiB,QAAgBp0F,IAAA,CAC3D,MAAAyO,GAAO6lF,EAAS,UAAUt0F,EAAI,EACpCs0F,EAAS,UAAUt0F,EAAI,EAAIo0F,EAAW,UAAUp0F,EAAI,EACzCo0F,EAAA,UAAUp0F,EAAI,EAAIyO,EAAA,CAC9B,CAAA,CAGH,SAASmuH,GAAoBvsH,GAAmB,CAC1C8G,EAAM,WACP,CAAAq9C,EAAe,OAASnkD,GAAM,gBAAgB,EACjCssH,GAAA,EAChB,CAGF,SAASxnE,IAAqB,CAC5B7vC,EAAUnO,EAAM,cAAc,EAE1BA,EAAM,cAAgBq9C,EAAe,QAC3B0iC,GAAA,CAAC//E,EAAM,aAAa,EACrBiqC,GAAA,EACX97B,EAAUnO,EAAM,cAAc,EAChC,+BAKAqS,EAAA,mBAuOM,MAAA,CAtOH,GAAIH,QAAK6zB,CAAA,UACN,UAAJ,IAAI9uB,EACH,uBAAOrT,GAAS,KAAA,EACjB,KAAK,QACJ,gBAAesO,EAAA,MAAA1X,EAAA,EAAY0X,EAAAA,MAAAlS,CAAA,EAAM,QAAQ,EACzC,gBAAekS,EAAAA,MAAW1X,EAAA,EAAC6iD,EAAc,KAAA,EAC1C,gBAAc,SACb,kBAAiBnrC,QAAO8zB,CAAA,EACxB,QAAOo6C,EAAA,GAER3tE,EAAAA,mBA6HM,MAAA,SA5HA,YAAJ,IAAI8L,EACH,uBAAOslC,GAAa,KAAA,EACrB,SAAS,IACR,UAAO,4BAAgBu8B,GAAS,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,+CACLz1C,GAAW,EAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,WAAA,CAAA,EAAA,IAG/B7B,GAAS,qBADjBz2B,EAAAA,mBAUM,MAAA,OARH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,iBAAA,CAAA,MAAWzzC,EAAAA,MAAKlS,CAAA,EAAC,WAAW,CAAA,CAAA,GAElCuS,EAAAA,WAIOC,sBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAAkC,CAAlCkR,cAAkCgB,EAAAA,MAAApO,EAAA,EAAA,CAA3B,KAAMoO,EAAAA,MAAKlS,CAAA,EAAC,MAAA,6EAIzByS,EAAAA,mBAqEM,MAAA,CArEA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAChBW,EAAAA,YA2Bew0G,GAAA,SA1BT,aAAJ,IAAInoC,GACH,YAAWH,EAAA,QAA2B,QAAAlrE,EAAAA,MAAA+qE,CAAA,EAAW,OAAM,GACvD,QAAS/qE,EAAAA,MAAU+qE,CAAA,EAAC,QACpB,UAAW/qE,EAAAA,MAAU+qE,CAAA,EAAC,UACtB,aAAY/qE,EAAAA,MAAU+qE,CAAA,EAAC,UACvB,MAAO/qE,EAAAA,MAAKlS,CAAA,EAAC,MACb,aAAYkS,EAAAA,MAAKlS,CAAA,EAAC,UAClB,QAAS6nC,EAAO,MAChB,QAASwV,EAAc,MACvB,UAAWnrC,EAAAA,MAAKlS,CAAA,EAAC,UACjB,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,YAAWw+E,EAAU,MACrB,YAAab,GAAgB,MAC7B,SAAUzrE,EAAAA,MAAKlS,CAAA,EAAC,aAChB,aAAYkS,QAAO8zB,CAAA,EACnB,OAAQ9zB,QAAM5P,CAAA,EACd,QAAO+pC,GACP,OAAM40C,GACN,QAAOC,GACP,QAAOp2C,GACP,SAAQ6hC,GACR,YAAYmV,GACZ,6BAAW7O,GAAW,MAAA,GACtB,6BAAWA,GAAW,MAAA,GACtB,OAAIpjC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE9oC,EAAA,MAAU+qE,CAAA,EAAC,OAAM,KAAA,6LAEV/qE,QAAAlS,CAAA,EAAM,qBAAtBqS,EAAA,mBAuCWqsB,WAAA,CAAA,IAAA,GAAA,CAtCTjsB,EAAAA,mBASM,MAAA,CARH,MAAKH,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,UAAA,EAAc2B,QAAKlS,CAAA,EAAC,SAAWkS,EAAAA,MAAE3B,CAAA,EAAC,IAAG,WAAA,SAAA,EAAA,EAAA,CAAA,EAClD,QAAOk1G,EAAA,GAERlzG,EAAAA,WAIOC,wBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAA,qBAC/B,IAA8D,CAA9DkR,cAA8DgB,EAAA,MAAApO,EAAA,EAA9D4O,EAAAA,WAAcR,EAAAA,MAAgD5I,CAAA,EAA1C,SAAQ,CAAE,MAAA,CAAwB,cAAA,KAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,8BAI5D4H,EAAAA,YA2Bew0G,GAAA,SA1BT,WAAJ,IAAIloC,EACH,YAAWJ,EAAA,QAAyB,MAAAlrE,EAAAA,MAAAirE,CAAA,EAAS,OAAM,GACnD,QAASjrE,EAAAA,MAAQirE,CAAA,EAAC,QAClB,UAAWjrE,EAAAA,MAAQirE,CAAA,EAAC,UACpB,aAAYjrE,EAAAA,MAAQirE,CAAA,EAAC,UACrB,MAAOjrE,EAAAA,MAAKlS,CAAA,EAAC,MACb,aAAYkS,EAAAA,MAAKlS,CAAA,EAAC,UAClB,QAAS6nC,EAAO,MAChB,QAASwV,EAAc,MACvB,UAAWnrC,EAAAA,MAAKlS,CAAA,EAAC,UACjB,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,OAAQkS,EAAAA,MAAKlS,CAAA,EAAC,OACd,YAAW0+E,EAAQ,MACnB,YAAad,GAAc,MAC3B,SAAU1rE,EAAAA,MAAKlS,CAAA,EAAC,aAChB,aAAYkS,QAAO8zB,CAAA,EACnB,OAAQ9zB,QAAM5P,CAAA,EACd,QAAO+pC,GACP,OAAM40C,GACN,QAAOC,GACP,QAAOp2C,GACP,SAAQ6hC,GACR,YAAYoV,GACZ,6BAAW9O,GAAW,MAAA,GACtB,6BAAWA,GAAW,MAAA,GACtB,OAAIpjC,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAE9oC,EAAA,MAAQirE,CAAA,EAAC,OAAM,KAAA,mOAKnBjrE,EAAAA,MAAAlS,CAAA,EAAM,SAcFkS,EAAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAAlS,CAAA,EAAM,uBADtCqS,EAAAA,mBAGO,MAAA,OADJ,MAAKC,EAAAA,eAAA,CAAGJ,QAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,QAAE3B,CAAA,EAAC,IAAG,OAAA,aAAA,EAAyB2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,uDAhB9D8B,qBAaM,MAAA,OAXH,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,MAAKo1C,EAAAA,eAAA,CAAqB,MAAAzzC,EAAAA,MAAAlS,CAAA,EAAM,oBAAgCspC,EAAS,OAAIp3B,EAAAA,MAAKlS,CAAA,EAAC,QAAO,KAAA,OAK3FuS,EAAAA,WAIOC,sBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,qBAC/B,IAA2E,CAA3EkR,EAAA,YAA2EgB,QAA3EpO,EAAA,EAAA4O,aAAcR,QAA6D5I,CAAA,EAAvD,MAAK,CAAG,KAAM4I,WAAM,QAAUA,QAAK5I,CAAA,EAAC,MAAM,uDAQpE4H,EAAAA,YAkBakB,EAAAA,WAAA,CAlBA,KAAMF,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU,OAAA,EAAA,qBAChC,IASS,CARD+4B,EAAS,qBADjBj3B,EAAAA,mBASS,SAAA,OAPN,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EAC7B,KAAK,SACL,SAAS,KACR,aAAY2B,EAAA,MAAA5P,CAAA,EAAO,UAAU,MAC7B,0CAAYqoC,KAAW,CAAA,MAAA,CAAA,EAAA,GAExBz5B,EAAAA,YAAkCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAApBh0C,QAAK5I,CAAA,EAAC,KAAK,CAAA,EAAA,KAAA,EAAA,CAAA,UAEX4I,QAAAlS,CAAA,EAAM,uBAAtBqS,EAAA,mBAMM,MAAA,OAN0B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAC1DW,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,QAAO,CACpB,OAAQ4I,EAAAA,SAAM,eAAiBA,EAAAA,MAAK5I,CAAA,EAAC,QAAQ,OAC7C,KAAM4I,WAAM,aAAeA,QAAK5I,CAAA,EAAC,QAAQ,8FAKlD4H,cA6FSgB,EAAAA,MAAAotC,EAAA,EAAA,SA5FH,SAAJ,IAAIpqB,EACH,wBAAQhjB,QAAE3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,EAC9B,QAAS8sC,EAAc,MACvB,GAAInrC,QAAUkjB,CAAA,EACd,WAAYljB,EAAAA,MAAKlS,CAAA,EAAC,eAClB,MAAOkS,EAAA,MAAAlS,CAAA,EAAM,cAAgBkS,QAAUkjB,CAAA,EACvC,wBAAY+qD,GAAa,CAAA,MAAA,CAAA,EACzB,kCAAc7C,EAAW,MAAA,IACzB,kCAAcA,EAAW,MAAA,IACzB,iCAAaA,EAAW,MAAA,IACxB,iCAAaA,EAAW,MAAA,GAAA,qBAEzB,IA+EM,CA/EN7qE,EAAAA,mBA+EM,MAAA,CA9EH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,EAAA,GAA6B,CAAA2B,QAAA3B,CAAA,EAAG,IAAG,QAAA,UAAA,CAAA,EAAoC2B,QAAKlS,CAAA,EAAC,UAAU,SAAuBkS,QAAAlS,CAAA,EAAM,qBAAgC,OAAAkS,QAAAlS,CAAA,EAAM,qBAAkB,SAAA,GAOrM,kBAAiBkS,QAAO8zB,CAAA,CAAA,GAGjB9zB,EAAA,MAAKlS,CAAA,EAAC,UAAU,sBADxBqS,qBAkBM,MAAA,OAhBH,MAAKC,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAsB2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,KAAA,EAA6B2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,WAAA,EAA2B2B,EAAA,MAAA3B,CAAA,EAAG,IAAiB,YAAA2B,EAAA,MAAAlS,CAAA,EAAM,kBAAkB,OAOhKqgC,EAAAA,UAAA,EAAA,EAAAhuB,qBAQMqsB,EAAAA,2BAPoBxsB,EAAA,MAAKlS,CAAA,EAAC,UAAtB,CAAAjI,GAAMjH,oBADhBuhB,EAAA,mBAQM,MAAA,CANH,IAAKvhB,GACL,MAAKwhB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACZ,MAAOxY,GAAK,KACZ,QAAKijD,IAAEy/B,GAAe3pF,EAAK,GAEzB8hB,EAAA,gBAAA7a,GAAK,IAAI,EAAA,GAAAo9E,EAAA,2CAGhB1iE,EAAAA,mBAiDM,MAAA,CAjDA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAChBkC,EAAAA,mBA4BM,MAAA,CA5BA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAChBW,EAAAA,YAYa0rE,GAAA,CAXH,KAAM1qE,EAAA,MAAA+qE,CAAA,EAAW,UAAU,uCAArB/qE,EAAA,MAAU+qE,CAAA,EAAC,UAAU,KAAIjiC,IAC/B,OAAQ9oC,EAAA,MAAA+qE,CAAA,EAAW,UAAU,2CAArB/qE,EAAA,MAAU+qE,CAAA,EAAC,UAAU,OAAMjiC,IACnC,OAAQ9oC,EAAA,MAAA+qE,CAAA,EAAW,UAAU,6CAArB/qE,EAAA,MAAU+qE,CAAA,EAAC,UAAU,OAAMjiC,IAC1C,WAAU9oC,EAAAA,MAAKlS,CAAA,EAAC,QAChB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,gBAAekS,QAAcyhE,EAAA,EAC7B,gBAAe2J,EAAW,MAC1B,SAAQgoC,GACR,gCAAYhlC,GAAkB,OAAA,gHAGzBpuE,QAAAlS,CAAA,EAAM,qBADdmS,cAaayqE,GAAA,OAXH,KAAM1qE,EAAA,MAAAirE,CAAA,EAAS,UAAU,yCAAnBjrE,EAAA,MAAQirE,CAAA,EAAC,UAAU,KAAIniC,IAC7B,OAAQ9oC,EAAA,MAAAirE,CAAA,EAAS,UAAU,6CAAnBjrE,EAAA,MAAQirE,CAAA,EAAC,UAAU,OAAMniC,IACjC,OAAQ9oC,EAAA,MAAAirE,CAAA,EAAS,UAAU,6CAAnBjrE,EAAA,MAAQirE,CAAA,EAAC,UAAU,OAAMniC,IACxC,WAAU9oC,EAAAA,MAAKlS,CAAA,EAAC,QAChB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,MAAOkS,EAAAA,MAAKlS,CAAA,EAAC,MACb,QAASkS,EAAAA,MAAKlS,CAAA,EAAC,QACf,gBAAekS,QAAcyhE,EAAA,EAC7B,gBAAe2J,EAAW,MAC1B,SAAQgoC,GACR,gCAAYhlC,GAAkB,KAAA,EAAA,+IAGvBpuE,EAAAA,MAAAlS,CAAA,EAAM,oDAAlBqS,qBAkBM,MAAA,OAlBuB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GACvCW,cAOSgB,EAAAA,MAAA45C,EAAA,EAAA,CANP,QAAA,GACA,KAAA,GACA,KAAK,QACJ,wBAAY6gB,GAAY,CAAA,MAAA,CAAA,CAAA,qBAEzB,IAAuC,CAApCh6D,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,YAAckS,EAAAA,MAAA5P,CAAA,EAAO,MAAM,EAAA,CAAA,CAAA,SAEtC4O,cAQSgB,EAAAA,MAAA45C,EAAA,EAAA,CAPP,QAAA,GACA,KAAK,UACL,KAAK,QACJ,SAAU0yB,EAAU,OAAIE,EAAQ,MAChC,wBAAY5zC,GAAW,CAAA,MAAA,CAAA,CAAA,qBAExB,IAAyC,CAAtCn4B,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAAA,MAAA5P,CAAA,EAAO,OAAO,EAAA,CAAA,CAAA,6GC74BvCqjH,GAAgBx4G,GAAW,CACtC,QAASJ,EACT,OAAQA,EACR,UAAW,OACX,QAAS,CAAC,OAAQ,MAAM,EACxB,KAAMA,EACN,WAAYA,EACZ,UAAWA,EACX,cAAemB,EAA4C,CAC7D,CAAC,EAKY03G,GAAoBz4G,GAAW,CAC1C,KAAM,OACN,MAAO,OACP,MAAO,CAAC,OAAQ,MAAM,EACtB,OAAQJ,EACR,UAAW,OACX,QAAS,CAAC,OAAQ,MAAM,EACxB,cAAemB,EAA4C,CAC7D,CAAC,ECNY23G,GAAiB,uBAEjBC,GAAoB,OAAO,OAA2B,CACjE,UACA,OACA,UACA,QACA,UACA,UACF,CAAC,uFClBK,MAAA9lH,EAAQiM,GAAS,WADRsF,EAC4B,CACzC,QAAS,GACT,OAAQ,GACR,UAAW,KACX,QAAS,KACT,KAAM,GACN,WAAY,GACZ,UAAW,EAAA,CACZ,EAEKhB,EAAKtF,GAAc,UAAU,EAC7Bo+C,EAAav8C,EAAAA,SAAa,IAAA,GAAgB,EAE1ClJ,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,EAAE,CAAC,EAAG,GACV,CAACA,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,SAAS,CAAC,EAAGvQ,EAAM,QAC1B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,UAC5B,CAACuQ,EAAG,GAAG,MAAM,CAAC,EAAGvQ,EAAM,KACvB,CAACuQ,EAAG,GAAG,YAAY,CAAC,EAAGvQ,EAAM,UAC/B,EACD,EACKoe,EAAS/c,EAAAA,SAAS,IACf,KAAK,IAAI,GAAG,MAAM,KAAKgoD,CAAU,EAAE,IAAIjzC,GAASA,EAAM,MAAM,CAAC,EAAI,CACzE,EAEYtE,EAAA,CAAE,WAAAu3C,EAAY,EAErB,MAAAG,EAAgB/tD,GAAc,IAAM,CACxC,MAAMlK,EAAQ83D,EAAW,KAEzB,MAAM,KAAKA,CAAU,EAAE,QAAQ,CAACtxD,EAAMjH,IAAU,CAC9CiH,EAAK,MAAQjH,EAAQ,EACrBiH,EAAK,MAAQxG,EAETtI,GAAO8O,EAAK,KAAK,IACnBA,EAAK,MAAQjH,EAAQ,EACvB,CACD,CAAA,CACF,EAEKslB,EAAuBtJ,EAAAA,SAAS,CACpC,OAAQsxB,EAAAA,MAAMp+B,EAAO,QAAQ,EAC7B,UAAWo+B,EAAAA,MAAMp+B,EAAO,WAAW,EACnC,QAASo+B,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,UAAWo+B,EAAAA,MAAMp+B,EAAO,WAAW,EACnC,WAAYo+B,EAAAA,MAAMp+B,EAAO,YAAY,EACrC,aAAAypD,EACA,aAAAC,EACA,kBAAAq8D,CAAA,CACD,EAEDjkH,EAAA,QAAQ+jH,GAAgBzvG,CAAK,EAE7B,SAASqzC,EAAa1xD,EAAiB,CACrCsxD,EAAW,IAAItxD,CAAI,EACLyxD,EAAA,CAAA,CAGhB,SAASE,EAAa3xD,EAAiB,CACrCsxD,EAAW,OAAOtxD,CAAI,EACRyxD,EAAA,CAAA,CAGhB,SAASu8D,EAAkB91G,EAAwB,CACvC9B,EAAAnO,EAAM,cAAeiQ,CAAK,CAAA,6BAKpCoC,EAAA,mBAKM,MAAA,CAJH,uBAAOzO,EAAS,KAAA,EAChB,MAAK+hD,EAAA,eAAA,CAAA,OAAYzzC,EAAAA,MAAKlS,CAAA,EAAC,YAAckS,EAAAA,MAAKlS,CAAA,EAAC,UAAS,GAAMoe,EAAM,KAAA,KAAO,MAAS,CAAA,CAAA,GAEjF7L,aAAaC,EAAA,OAAA,SAAA,wGC7EX,MAAAxS,EAAQiM,GAAS,eADRsF,EACgC,CAC7C,KAAM,CACJ,QAAS,UACT,UAAW3oB,GAASk9H,GAAkB,SAASl9H,CAAK,CACtD,EACA,MAAO,GACP,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,OAAQ,KACR,UAAW,KACX,QAAS,IAAA,CACV,EAQKo9H,EAAgBnkH,EAAAA,OAAOgkH,GAAgB,IAAI,EAE3Ct1G,EAAKtF,GAAc,UAAU,EAC7Bg+C,EAAev3C,EAAAA,IAAI1R,EAAM,KAAK,EAC9B40B,EAAUljB,EAAAA,IAAiB,EAE3B9N,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,IAAI,OAAQvQ,EAAM,IAAI,CAAC,EAAG8lH,GAAkB,SAAS9lH,EAAM,IAAI,CACrE,EACD,EACKwkG,EAAYnjG,EAAAA,SAAS,IAAM,CACzB,MAAA4kH,EAAUjmH,EAAM,SAAWA,EAAM,UAAY,EAAIA,EAAM,QAAUgmH,GAAA,YAAAA,EAAe,QAChFr1G,EAA6B,CACjC,CAACJ,EAAG,GAAG,WAAW,CAAC,EAAG,OAAO01G,GAAY,SAAW,GAAGA,CAAO,KAAOA,CACvE,EAEA,OAAIjmH,EAAM,QACR2Q,EAAMJ,EAAG,GAAG,eAAe,CAAC,EAAIvQ,EAAM,MACtC2Q,EAAMJ,EAAG,GAAG,iBAAiB,CAAC,EAAIvQ,EAAM,OAGnC2Q,CAAA,CACR,EACKu1G,EAAY7kH,EAAAA,SAAS,IAAM,CAC/B,MAAM8kH,EAAWnmH,EAAM,SAAUgmH,GAAA,YAAAA,EAAe,SAAU,GACpD75H,EAAQ6T,EAAM,YAAagmH,GAAA,YAAAA,EAAe,WAEzC,MAAA,CACL,uBAAwBG,EAAY,SAAqB,OACzD,uBAAwBh6H,CAC1B,CAAA,CACD,EAID,GAFa2lB,EAAA,CAAE,aAAAm3C,EAAc,QAAAr0B,EAAS,EAElCoxF,EAAe,CAoBjB,IAASI,EAAT,UAAwB,CACtB,sBAAsB,IAAM,CACtBJ,GAAA,MAAAA,EAAe,YAAcpxF,EAAQ,QACjCxe,EAAA,OAASwe,EAAQ,MAAM,aAC/B,CACD,CACH,EAzBA,MAAMxe,EAAmBtJ,EAAAA,SAAS,CAChC,MAAOm8C,EACP,MAAO,EACP,MAAO,EACP,OAAQ,CAAA,CACT,EAED+8D,EAAc,aAAa5vG,CAAK,EAE1BxJ,EAAAA,MAAA,IAAMo5G,EAAc,UAAWI,CAAY,EAC3Cx5G,EAAAA,MAAA,IAAMo5G,EAAc,WAAYI,CAAY,EAElD3xG,EAAAA,UAAU2xG,CAAY,EACtBl7B,EAAAA,UAAUk7B,CAAY,EAEtBxxG,EAAAA,gBAAgB,IAAM,CACpBoxG,EAAc,aAAa5vG,CAAK,CAAA,CACjC,CAAA,CAWH,SAAS2vG,GAAoB,CACjB53G,EAAAnO,EAAM,cAAeipD,EAAa,KAAK,EAClC+8D,GAAA,MAAAA,EAAA,kBAAkB/8D,EAAa,MAAK,6BAKnD52C,EAAA,mBAYM,MAAA,CAZA,uBAAOzO,EAAS,KAAA,EAAG,uBAAO4gG,EAAS,KAAA,CAAA,GACvC/xF,EAAAA,mBAIM,MAAA,CAJA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAa,QAAOw1G,CAAA,GACpCxzG,EAAAA,WAEOC,qBAFP,IAEO,CADLC,EAAAA,mBAAqC,MAAA,CAA/B,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,iBAGtBkC,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,uBAAO21G,EAAS,KAAA,CAAA,GAC3C3zG,aAAyBC,EAAA,OAAA,MAAA,MAE3BC,EAAAA,mBAEM,MAAA,SAFG,UAAJ,IAAImiB,EAAW,MAAKtiB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAC9BgC,aAAaC,EAAA,OAAA,SAAA,CAAA,aC7GN6zG,GAAal5G,GAAW,CACnC,UAAW,OACX,KAAMqB,GACN,UAAW,OACX,SAAU,OACV,eAAgB,OAChB,SAAUzB,EACV,UAAWA,EACX,SAAUA,EACV,UAAWgB,GACX,UAAWC,GACX,UAAWjB,EACX,SAAU,QACZ,CAAC,ECQYosF,GAAiB,OAAO,OAAO,CAAC,UAAW,UAAW,QAAS,SAAS,CAAC,kGCbhF,MAAA5oF,EAAKtF,GAAc,OAAO,EAG1BjL,EAAQiM,GAAS,QADRsF,EACyB,CACtC,UAAW,IACX,KAAM9C,GAAe,EACrB,UAAW,KAAO,CAAA,GAClB,SAAU,SACV,eAAgB,IAAM8B,EAAG,GAAG,MAAM,EAClC,SAAU,GACV,UAAW,GACX,SAAU,GACV,UAAW,KACX,UAAW,KACX,SAAU,CACR,QAAS,KACT,OAAQ,GACR,OAAQ,EACV,EACA,UAAW,EAAA,CACZ,EAEKsqC,EAAW1rC,GAAU,EACrB7F,EAAQU,GAAS,EAEjByyB,EAAkBp7B,EAAAA,SAAS,KAAO,CACtC,QAASiI,EAAM,MAAM,QACrB,QAASA,EAAM,MAAM,QACrB,MAAOA,EAAM,MAAM,MACnB,QAASA,EAAM,MAAM,OAAA,EACrB,EAEI8M,EAAQtJ,EAAAA,SAAS,CACrB,QAAS,GACT,OAAQ,EACR,KAAM,KACN,QAAS,GACT,KAAM9M,EAAM,KACZ,UAAWA,EAAM,UACjB,SAAUA,EAAM,SAChB,WAAYA,EAAM,eAClB,SAAUA,EAAM,SAChB,UAAWA,EAAM,UACjB,SAAUA,EAAM,SAChB,UAAWA,EAAM,UACjB,UAAWA,EAAM,UACjB,UAAWA,EAAM,UACjB,SAAU,GACV,SAAUA,EAAM,SAChB,QAAS,IAAA,CACV,EAEK0uE,EAAiB,IAAI,QAAyB14C,GAAA,CAClDvhB,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS0iB,CAAO,CAAA,CACjB,CAAA,CACF,EAEDlkB,EAAa,CAAE,MAAAsE,EAAO,UAAAkwG,EAAW,WAAAC,EAAY,YAAA33C,EAAa,EAE1D,eAAe03C,EAAUz7H,EAAuB,CAqB1C,GApBE,MAAA6jF,EAENt4D,EAAM,OAASykC,EAAS,EAClBzkC,EAAA,KAAOvrB,EAAQ,MAAQ,KACvBurB,EAAA,QAAUvrB,EAAQ,SAAW,GAC7BurB,EAAA,KAAOvrB,EAAQ,MAAQmV,EAAM,KAC7BoW,EAAA,UAAYvrB,EAAQ,WAAamV,EAAM,UACvCoW,EAAA,SAAWvrB,EAAQ,UAAYmV,EAAM,SACrCoW,EAAA,WAAavrB,EAAQ,gBAAkBmV,EAAM,eAC7CoW,EAAA,SAAWvrB,EAAQ,UAAYmV,EAAM,SACrCoW,EAAA,UAAYvrB,EAAQ,WAAamV,EAAM,UACvCoW,EAAA,SAAWvrB,EAAQ,UAAYmV,EAAM,SACrCoW,EAAA,UAAYvrB,EAAQ,WAAamV,EAAM,UACvCoW,EAAA,UAAYvrB,EAAQ,WAAamV,EAAM,UACvCoW,EAAA,UAAYvrB,EAAQ,WAAamV,EAAM,UAC7CoW,EAAM,SAAW7sB,GAAWsB,EAAQ,QAAQ,EAAIA,EAAQ,SAAWmV,EAAM,SACnEoW,EAAA,QAAUvrB,EAAQ,SAAW,KAE7BurB,EAAA,SAAW,CAACA,EAAM,MAAQ,EAAEA,EAAM,MAAQ+iF,GAAe,SAAS/iF,EAAM,IAAI,GAE9E7sB,GAAW6sB,EAAM,QAAQ,EAAG,CAC9B,MAAMhD,EAASgD,EAAM,SAEfA,EAAA,SAAW,IAAMhD,EAAOvoB,CAAO,EACrCurB,EAAM,SAAW,EAAA,CAGnBA,EAAM,QAAU,EAAA,CAGlB,SAASmwG,GAAa,CACpBnwG,EAAM,QAAU,GAEZ7sB,GAAW6sB,EAAM,OAAO,GAC1BA,EAAM,QAAQ,CAChB,CAGF,SAASw4D,GAAc,CACjBx4D,EAAM,UAEVA,EAAM,KAAO,KACbA,EAAM,QAAU,GAChBA,EAAM,KAAOpW,EAAM,KACnBoW,EAAM,UAAYpW,EAAM,UACxBoW,EAAM,SAAWpW,EAAM,SACvBoW,EAAM,WAAapW,EAAM,eACzBoW,EAAM,SAAWpW,EAAM,SACvBoW,EAAM,UAAYpW,EAAM,UACxBoW,EAAM,SAAWpW,EAAM,SACvBoW,EAAM,UAAYpW,EAAM,UACxBoW,EAAM,UAAYpW,EAAM,UACxBoW,EAAM,UAAYpW,EAAM,UACxBoW,EAAM,SAAW,GACjBA,EAAM,SAAWpW,EAAM,SACvBoW,EAAM,QAAU,KAAA,CAGlB,SAASowG,GAAqB,CACxBpwG,EAAM,SAAWA,EAAM,UACdmwG,EAAA,CACb,CAGF,SAASt0G,GAAkB,CACrBmE,EAAM,SAAWA,EAAM,WACdmwG,EAAA,CACb,6BAKAl0G,EAAA,mBAyDM,MAAA,CAxDH,MAAKC,EAAAA,eAAA,CAAW,CAAAJ,QAAA3B,CAAA,EAAG,EAAC,CAAA,EAAA,GAAkB,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,EAAA,GAAwB,CAAA2B,EAAAA,MAAA3B,CAAA,EAAG,GAAkB,WAAA,CAAA,EAAA6F,EAAM,QAAA,GAK/F,KAAK,QACJ,MAAKuvC,EAAAA,eAAA,CAAkB,OAAAvvC,EAAM,MAAA,GAG9B,cAAY,OACZ,YAAU,WAAA,GAEVlF,EAAAA,YAQakB,EAAAA,WAAA,CARA,KAAMF,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,qBACtB,IAMO,CALC6F,EAAM,UAAYA,EAAM,uBADhC/D,qBAMO,MAAA,OAJJ,wBAAQH,EAAAA,MAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA6F,EAAM,SAAS,CAAA,EACtC,MAAKuvC,EAAAA,eAAEvvC,EAAM,SAAS,EACtB,QAAOnE,EACP,oCAAD,IAAmB,CAAA,EAAA,CAAA,OAAA,SAAA,CAAA,6DAGvBf,EAAAA,YAkCakB,EAAAA,WAAA,CAlCA,KAAMgE,EAAM,UAAA,qBACvB,IAgCM,CA/BEA,EAAM,uBADd/D,EAAAA,mBAgCM,MAAA,OA9BH,MAAKC,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA+B2B,EAAE,MAAA3B,CAAA,EAAC,IAAe,UAAA6F,EAAM,QAAQ,CAAA,EAAIA,EAAM,WAAQ,SAA0B,CAAAlE,EAAAA,MAAA3B,CAAA,EAAG,IAA6B,UAAA,UAAA,CAAA,EAAA6F,EAAM,QAAA,GAK1K,QAAOowG,EACP,oCAAD,IAAmB,CAAA,EAAA,CAAA,OAAA,SAAA,CAAA,EAAA,GAEHt0G,QAAU3oB,EAAA,EAAC6sB,EAAM,QAAQ,iBAAzCjE,EAAA,YAAkFD,QAAAb,EAAA,EAAA,OAArC,SAAU+E,EAAM,+CAC7D/D,EAAAA,mBAoBWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAlBDtoB,EAAM,MAASA,EAAM,MAAQlE,EAAAA,MAAAinF,EAAA,EAAe,SAAS/iF,EAAM,IAAI,iBADvE/D,EAAAA,mBAcM,MAAA,OAZH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAGL6F,EAAM,MADdiqB,YAAA,EAAAluB,cAKQD,YALRQ,aAKQ,OAHL,KAAM0D,EAAM,KACZ,MAAO,GAAA,EACAA,EAAM,SAAS,EAAA,KAAA,GAAA,CAAA,MAAA,CAAA,gBAEzB,EAAAjE,EAAA,YAGQD,QAAApO,EAAA,EAAAmiD,EAAAA,eAAAvzC,EAAAA,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,GADO+pB,QAAgBrmB,EAAM,IAAI,EAAA,MAAA,IAAA,GAAmBA,EAAM,SAAS,CAAA,CAAA,EAAA,KAAA,EAAA,oCAGlEA,EAAM,yBAAjB/D,EAAAA,mBAAmF,MAAA,OAAtD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,EAAa,UAAQ6F,EAAM,OAAA,8BACpE/D,qBAEM,MAAA,OAFO,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CACpB,EAAAqC,kBAAAwD,EAAM,OAAO,EAAA,CAAA,sEChLtBqwG,GAAuD,CAC3D,QAAS,CAAC,EACV,QAAS,CAAC,EACV,MAAO,CAAC,EACR,QAAS,CACP,SAAU,EAAA,CAEd,EAEO,MAAMC,EAAa,CAkBxB,YAAY77H,EAAiC,GAAI,CAjBjDugB,GAAA,aACAA,GAAA,iBAEAA,GAAA,aACAA,GAAA,gBACAA,GAAA,gBACAA,GAAA,cACAA,GAAA,gBAEQA,GAAA,oBACAA,GAAA,kBACAA,GAAA,kBACAA,GAAA,mBACAA,GAAA,eACAA,GAAA,iBACAA,GAAA,mBAGIvgB,EAAA,CACR,GAAGA,EACH,SAAUA,EAAQ,SAAW8G,GAAS9G,EAAQ,QAAQ,EAAI,GAC5D,EAEA,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,WAAa,KAClB,KAAK,OAAS,KACd,KAAK,SAAW,KAChB,KAAK,WAAa,KAClB,KAAK,KAAO,QACZ,KAAK,SAAW,CAAC,EAEjB,KAAK,OAAOA,CAAO,EAEd,KAAA,KAAO,CAAC+pC,EAAuBiH,IAC3B,KAAK,MAAM,KAAMjH,EAASiH,CAAQ,EAGtC,KAAA,QAAU,CAACjH,EAAuBiH,IAC9B,KAAK,MAAM,UAAWjH,EAASiH,CAAQ,EAG3C,KAAA,QAAU,CAACjH,EAAuBiH,IAC9B,KAAK,MAAM,UAAWjH,EAASiH,CAAQ,EAG3C,KAAA,MAAQ,CAACjH,EAAuBiH,IAC5B,KAAK,MAAM,QAASjH,EAASiH,CAAQ,EAGzC,KAAA,QAAU,CAACjH,EAAuBiH,IAC9B,KAAK,MAAM,UAAWjH,EAASiH,CAAQ,CAChD,CAGF,OAAQ,OACD,KAAA,QAAU,aAAa,KAAK,MAAM,GAClC96B,EAAA,KAAA,iBAAA,MAAAA,EAAgB,YAAW,CAGlC,OAAOlW,EAAkC,CACvC,KAAK,SAAW,CAAE,GAAG,KAAK,SAAU,GAAGA,CAAQ,CAAA,CAGjD,OAAQ,CACN,MAAMkkF,EAAU,IAAI23C,GAAa,KAAK,QAAQ,EAE9C,OAAA33C,EAAQ,YAAc,KAAK,YAEpBA,CAAA,CAGT,SAAU,SACR,KAAK,cAAchuE,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,KAAK,cACnD4U,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcvC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAC/Chb,GAAc,IAAI,CAAA,CAGpB,aAAc,CACL,MAAA,EAAA,CAGT,QAAQsJ,EAAU7W,EAAyD,GAAI,CAC7E,KAAM,CAAE,SAAAmkF,EAAU,GAAGC,CAAA,EAAWpkF,EAEhC,KAAK,OAAOokF,CAAM,EAClB,KAAK,YAAcvtE,GAEfstE,GAAY,CAACttE,EAAI,OAAO,iBAAiB,UAC3CA,EAAI,OAAO,iBAAiBstE,GAAY,QAAQ,EAAI,KACtD,CAGF,WAAW79E,EAA0C,CACnD,GAAI,CAAC3I,GAAU,OAET,MAAAqQ,EAAK2c,GAAarkB,CAAM,EAE1B0H,IACF,KAAK,SAAWA,EAEZ,KAAK,UACP,KAAK,YAAc,KAAK,SAAS,YAAY,KAAK,UAAU,EAE5D,KAAK,aAAa,EAEtB,CAGM,cAAe,CACjB,GAAA,CAAC,KAAK,WAAarQ,GAAU,CAC3B,GAAA,CAAC,KAAK,YACR,QAAQ,KAAK,gEAAgE,EAExE,KAAA,WAAa,SAAS,cAAc,KAAK,EACzC,KAAA,UAAYwlF,YAAUC,EAAS,EACpC,KAAK,UAAY,KAAK,UAAU,MAAM,KAAK,UAAU,MAChD,CACL,MAAMl7D,EAAQE,EAAA,YAAYg7D,GAAW,KAAM,IAAI,EAE1C,KAAA,WAAa,SAAS,cAAc,KAAK,EACxCl7D,EAAA,WAAa,KAAK,YAAY,SAE7BK,SAAAL,EAAO,KAAK,UAAU,EAExB,KAAA,UAAY2C,GAA4B3C,CAAK,CAAA,CAG/C,KAAA,WAAa,KAAK,WAAW,mBAChC,KAAK,UAAY,SAAS,MAAM,YAAY,KAAK,UAAU,CAAA,CAG/D,OAAO,KAAK,SAAA,CAGN,MAAMlqB,EAAwB+rC,EAAuBilE,EAAoB,CAC/E,GAAI,CAACrxG,GACI,OAAAoB,GAGJ,KAAA,QAAU,aAAa,KAAK,MAAM,EAEjC,MAAAiB,EAAU,OAAO+pC,GAAY,SAAW,CAAE,QAAAA,EAAS,SAAUilE,GAAcjlE,EAC3E+xF,EAAqB99H,EAAQ49H,GAAa59H,CAAI,GAAK,GAAM,CAAC,EAE1DixG,EAAcjvG,EAAQ,QACtBoxD,EAAU,IAAM,CAGhB,GAFC,KAAA,QAAU,aAAa,KAAK,MAAM,EAEnC,OAAO69C,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEM8sB,EAAQ,KAAK,aAAa,EAC1B7uH,EAAqB,CACzB,GAAG,KAAK,SACR,GAAG4uH,EACH,GAAG97H,EACH,KAAMhC,GAAQgC,EAAQ,KACtB,QAAAoxD,CACF,EAEIlkD,EAAK,MAAQ,OAAOA,EAAK,MAAS,aAC/BA,EAAA,KAAOgS,UAAQhS,EAAK,IAAI,GAG/B6uH,EAAM,UAAU7uH,CAAI,EAEpB,MAAM8jC,EAAW,OAAO9jC,EAAK,UAAa,SAAWA,EAAK,SAAW,IAErE,OAAI8jC,GAAY,MACT,KAAA,OAAS,WAAW,IAAM,CAC7B+qF,EAAM,WAAW,GAChB/qF,CAAQ,GAGN,IAAM,CACN,KAAA,QAAU,aAAa,KAAK,MAAM,EACvC+qF,EAAM,WAAW,CACnB,CAAA,CAEJ,CAEa,MAAAC,GAAQ,IAAIH,GCrNZI,GAAY35G,GAAW,CAClC,OAAQiB,GAAiB,EACzB,OAAQrB,EACR,MAAO,OACP,MAAO,MACP,KAAM,OACN,SAAUA,EACV,SAAU,OACV,QAAS,CAAC,OAAQ,KAAK,EACvB,SAAUA,EACV,UAAWA,EACX,SAAUC,GACV,MAAO,OACP,SAAUkB,EAAqC,EAC/C,SAAUA,EAA0D,EACpE,QAASA,EAAU,EACnB,YAAaA,EAAuC,CACtD,CAAC,EAKY64G,GAAgB55G,GAAW,CACtC,OAAQ,CAAC,OAAQ,OAAQ,QAAQ,EACjC,UAAW,OACX,MAAO,OACP,QAAS,OACT,MAAO,OACP,KAAM,OACN,SAAU,SACV,OAAQe,EAAU,EAClB,OAAQA,EAAU,CACpB,CAAC,ECiBY84G,GAAa,6XCvBpB,MAAAhnH,EAAQiM,GAAS,OADRsF,EACwB,CACrC,OAAQ,KACR,OAAQ,GACR,MAAO,CACL,OAAQ,GACR,QAAS,EACT,aAAoB3oB,GAAS,CAC/B,EACA,MAAO,CACL,OAAQ,GACR,QAAS,IAAM,CAAA,CACjB,EACA,KAAM,UACN,SAAU,GACV,SAAU,MACV,QAAS,GACT,SAAU,GACV,UAAW,GACX,SAAU,GACV,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKo2C,EAAOC,EAIP1uB,EAAKtF,GAAc,MAAM,EACzB3I,EAASI,GAAU,OAAQ07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACjDsJ,EAAQU,GAAS,EAEjByH,EAAgBC,EAAAA,IAAI1R,EAAM,MAAM,EAChCmhD,EAAezvC,EAAAA,IAAI1R,EAAM,KAAK,EAC9BinH,EAAkCn6G,EAAAA,SAAa,IAAA,GAAU,EACzDo6G,EAAcx1G,EAAAA,IAAc,EAC5By1G,EAAYz1G,EAAAA,IAA2B,EAEvCk6D,EAASl6D,EAAAA,IAAmB,EAC5B01G,EAAS11G,EAAAA,IAAmB,EAC5BuF,EAAU5V,EAAA,SAAS,IAAM,OAAA,OAAAN,EAAA6qE,EAAO,QAAP,YAAA7qE,EAAc,QAAO,EAExCkY,GAAA,CACV,OAAQhC,EACR,QAAS,GACT,UAAW,CAAC/d,EAAOygB,IAAa,CACzBlI,EAAc,OAEnB9mB,GACE,CACE,CAAC,IAAMgvB,EAAS,MAAQA,EAAS,GAAI9Z,CAAI,EACzC,CAAC,IAAM8Z,EAAS,OAASA,EAAS,KAAM7Z,CAAI,EAC5C,CAAC,IAAM6Z,EAAS,OAAQ2jB,CAAW,CACrC,EACA,CACE,eAAgB,IAAM,CACpBpkC,EAAM,eAAe,EACrBA,EAAM,gBAAgB,CACxB,EACA,cAAeygB,EAAS,QAAA,CAE5B,CAAA,CACF,CACD,EAEK,MAAA0tG,EAAWhmH,EAAAA,SAAS,IACjB,MAAM,KAAK4lH,CAAS,EACxB,OAAOjnH,EAAM,KAAK,EAClB,KAAK,CAACH,EAAMC,KAAUD,EAAK,OAAS,IAAMC,EAAK,OAAS,EAAE,CAC9D,EACKwnH,EAAcjmH,EAAAA,SAAS,IAAMgmH,EAAS,MAAMlmE,EAAa,KAAK,CAAC,EAC/Dt4D,EAAOwY,EAAAA,SAAS,IAAM,OAC1B,MAAMxY,IAAOkY,EAAAumH,EAAY,QAAZ,YAAAvmH,EAAmB,OAAQf,EAAM,KAEvCnX,OAAAA,IAAS,UAAY,OAAYA,CAAA,CACzC,EACK+a,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZ,CACE,CAACA,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAC5B,CAACuQ,EAAG,GAAG,WAAW,CAAC,EAAGvQ,EAAM,SAAA,CAEhC,CACD,EACKge,EAAU3c,EAAAA,SAAS,IACnB,MAAM,QAAQrB,EAAM,OAAO,EACtBA,EAAM,QAAQ,SAAW,EAC5B,CAACA,EAAM,QAAQ,CAAC,EAAGA,EAAM,QAAQ,CAAC,EAAGA,EAAM,QAAQ,CAAC,EAAGA,EAAM,QAAQ,CAAC,CAAC,EACvEA,EAAM,QAEH,IAAI,MAAc,CAAC,EAAE,KAAKA,EAAM,OAAO,CAEjD,EACKunH,EAASj8G,GAAM,EAEf,CAAE,UAAAiT,EAAW,UAAAnC,EAAW,aAAAqZ,CAAA,EAAiBX,GAAU,CACvD,QAAA7d,EACA,UAAW5V,EAAS,SAAA,IAAM,OAAA,QAAAN,EAAAumH,EAAY,QAAZ,YAAAvmH,EAAmB,YAAa,SAAQ,EAClE,OAAQM,EAAAA,SAAS,IAAA,OAAM,OAAAN,EAAAqmH,EAAO,QAAP,YAAArmH,EAAc,IAAG,EACxC,MAAOM,EAAAA,SAAS,IAAA,OAAM,OAAAN,EAAAqmH,EAAO,QAAP,YAAArmH,EAAc,MAAK,EACzC,MAAO,CAAE,UAAW,EAAK,EACzB,WAAY,EAAA,CACb,EAED6L,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACHA,EACIqB,EAAA,EAENwnB,EAAc,MAAQ7oB,CACxB,CAEJ,EACAgkB,EAAA,MACE,IAAM5M,EAAM,MACHpX,GAAA,CACPu4D,EAAa,MAAQ,KAAK,IAAI,EAAGv4D,CAAK,CAAA,CAE1C,EACAgkB,EAAA,MACE,CAAC6E,EAAe61G,CAAW,EAC3B,IAAM,CAGJ,GAFAH,EAAU,MAAQ,OAEd,CAAC3+H,IAAY,CAACipB,EAAc,OAAS,CAAC61G,EAAY,MAAO,OAE7D,MAAMn2H,EAASqkB,GAAa1Y,GAAWwqH,EAAY,MAAM,MAAM,CAAgB,EAE/E,GAAI,CAACn2H,EAAQ,CACX+1H,EAAY,MAAQ,OACpB,MAAA,CAGF,KAAM,CAAE,IAAA9+F,EAAK,KAAAh3B,GAAM,MAAA+sB,GAAO,OAAAC,CAAO,EAAIjtB,EAAO,sBAAsB,EASlE,GAPA+1H,EAAY,MAAQ,CAClB91H,GAAO4sB,EAAQ,MAAM,CAAC,EACtBoK,EAAMpK,EAAQ,MAAM,CAAC,EACrBG,GAAQH,EAAQ,MAAM,CAAC,EAAIA,EAAQ,MAAM,CAAC,EAC1CI,EAASJ,EAAQ,MAAM,CAAC,EAAIA,EAAQ,MAAM,CAAC,CAC7C,EAEIhe,EAAM,UAAW,CACnB,KAAM,CAACua,GAAGC,GAAG6/F,GAAGztH,EAAC,EAAIs6H,EAAY,MAEjCC,EAAU,MAAQ,CAChB,CAAC,EAAG,EAAG,OAAQ3sG,EAAC,EAChB,CAACD,GAAI8/F,GAAG,EAAG,eAAe9/F,GAAI8/F,EAAC,MAAO,MAAM,EAC5C,CAAC,EAAG7/F,GAAI5tB,GAAG,OAAQ,eAAe4tB,GAAI5tB,EAAC,KAAK,EAC5C,CAAC,EAAG,EAAG2tB,GAAG,MAAM,CAClB,CAAA,CAGWkb,EAAA,CACf,EACA,CAAE,UAAW,GAAM,MAAO,MAAO,CACnC,EAEA3zB,EAAAA,QAAQklH,GAAY,CAClB,aAAAQ,EACA,aAAAC,CAAA,CACD,EAEY31G,EAAA,CACX,QAAAmF,EACA,cAAAxF,EACA,aAAA0vC,EACA,YAAAmmE,EACA,SAAAD,EACA,MAAAp9H,EACA,KAAA4V,EACA,KAAAC,EACA,MAAAq8C,CAAA,CACD,EAED,MAAMuoC,EAAU,CAAE,MAAAz6F,EAAO,KAAA4V,EAAM,KAAAC,EAAM,MAAAq8C,CAAM,EACrCpI,EAAaC,EAAA,gBACjBlnC,WAAS,CACP,GAAG43E,EACH,KAAM4iC,EACN,MAAOnmE,CACR,CAAA,CACH,EAEA,SAASqmE,EAAat9H,EAAuB,CAC3C+8H,EAAU,IAAI/8H,CAAI,CAAA,CAGpB,SAASu9H,EAAav9H,EAAuB,CAC3C+8H,EAAU,OAAO/8H,CAAI,CAAA,CAGvB,SAASD,GAAQ,CACXwnB,EAAc,QAElBA,EAAc,MAAQ,GACtButB,EAAK,gBAAiB,EAAI,EAChB7wB,EAAAnO,EAAM,SAAU,EAAI,EAE1BmhD,EAAa,QACfA,EAAa,MAAQ,EACrBniB,EAAK,eAAgB,CAAC,GACxB,CAGF,SAASn/B,GAAO,CACV,CAAC4R,EAAc,OAAS0vC,EAAa,OAAS,IAElD,EAAEA,EAAa,MACVniB,EAAA,eAAgBmiB,EAAa,KAAK,EACvChzC,EAAUnO,EAAM,SAAUmhD,EAAa,MAAOmmE,EAAY,KAAK,EAAA,CAGxD,SAAAxnH,EAAK4nH,EAAY,GAAM,CAC1B,GAACj2G,EAAc,MAEnB,IAAI0vC,EAAa,OAASkmE,EAAS,MAAM,OAAS,EAAG,CAC/CK,GACIvrE,EAAA,EAGR,MAAA,CAGF,EAAEgF,EAAa,MACVniB,EAAA,eAAgBmiB,EAAa,KAAK,EACvChzC,EAAUnO,EAAM,SAAUmhD,EAAa,MAAOmmE,EAAY,KAAK,EAAA,CAGjE,SAASnrE,GAAQ,CACV1qC,EAAc,QAEnBA,EAAc,MAAQ,GACtButB,EAAK,gBAAiB,EAAK,EACjB7wB,EAAAnO,EAAM,SAAU,EAAK,EAAA,CAGjC,SAASs9B,GAAc,CAChB7rB,EAAc,QAEb0qC,EAAA,EACNhuC,EAAUnO,EAAM,OAAO,EAAA,mEAKvBi7C,iBAAAxoC,EAAAA,mBAEM,MAFNyoC,GAEM,CADJ3oC,aAAaC,EAAA,OAAA,SAAA,kBADF,EAAK,CAAA,GAGlBtB,cAyLSgB,EAAA,MAAAq7D,EAAA,EAzLT76D,EAAAA,WAyLSF,EAxLO,OAAA,SACV,SAAJ,IAAIo5D,EACI,OAAQn6D,EAAa,wCAAbA,EAAa,MAAAupC,IAC5B,QAAS9oC,EAAAA,MAAKlS,CAAA,EAAC,QACf,MAAO4D,EAAS,MAChB,SAAUoxB,EAAQ,SACnB,cAAA,GACA,kBAAgB,GACf,SAAU9iB,EAAAA,MAAKlS,CAAA,EAAC,SAChB,OAAMkS,QAAYujB,CAAA,EAClB,OAAIoa,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,IAAEksE,EAAW,MAAG,QACpB,4BAAYh1G,EAAAA,MAAS/D,CAAA,EAAC+D,EAAA,SAAM,YAAa8oC,EAAM,EAAA,IAErC,QAAO6K,EAAA,QAChB,CAYO,CAba,KAAAlN,MAAI,CAEhBuuE,EAAW,qBADnB70G,EAAAA,mBAYO,MAAA,eAVD,YAAJ,IAAIkM,EACH,MAAKjM,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,EACb,KAAK,OACL,cAAY,OACX,MAAKo1C,EAAAA,eAAA,QAAsBuhE,EAAW,MAAA,CAAA,CAAA,aAA4BA,EAAW,MAAA,CAAA,CAAA,cAA6BA,EAAW,MAAA,CAAA,CAAA,eAA8BA,EAAW,MAAA,CAAA,CAAA,6CAOjKh2G,EAAAA,YAiHakB,EAAAA,WAAA,CAjHD,OAAA,GAAQ,KAAMF,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,qBAC7B,IA+GS,CA9GDooC,IAAQ2uE,EAAW,qBAD3Bn1G,cA+GSD,EAAAA,MAAAiuF,EAAA,EAAA,eA7GH,SAAJ,IAAIinB,EACJ,QAAA,GACC,MAAK90G,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,GAAyB22G,EAAW,OAAIh1G,EAAA,MAAE3B,CAAA,EAAC,IAAG,SAAA,QAAA,EAAkC1nB,EAAI,OAAIqpB,QAAE3B,CAAA,EAAC,IAAG,SAAA,OAAA,EAAiC1nB,EAAA,OAAQqpB,QAAA3B,CAAA,EAAG,aAAc1nB,EAAI,KAAA,CAAA,GAMtL,gBAAeqpB,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EACpB,UAAW2B,QAASkK,CAAA,EACpB,KAAMkrG,EAAW,MAAC,MAAQp1G,EAAA,MAAAlS,CAAA,EAAM,IAAA,qBAEjC,IAIY,CAHJkS,EAAAA,MAAU3oB,EAAA,EAAC+9H,EAAW,MAAC,QAAQ,iBADvCn1G,EAAAA,YAIYD,EAAA,MAAAb,EAAA,EAAA,OAFT,SAAUi2G,EAAW,MAAC,SACtB,KAAM5iC,wCAETryE,EAAAA,mBA2FWqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CA1FTjsB,EAAAA,mBA4BM,MAAA,CA5BA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAChBgC,aA0BOC,EAAA,OAAA,SAAAyzC,EAAAA,eAAAC,EA1BqB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAtC,IA0BO,CAzBL7iC,cAwBWgB,EAAAA,MAAAb,EAAA,EAAA,CAxBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMkS,QAAU6hC,CAAA,CAAA,qBACxD,IAMM,CANNthC,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBgC,aAIOC,EAAA,OAAA,QAAAyzC,EAAAA,eAAAC,EAJoB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAArC,IAIO,CAHL7iC,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMkS,QAAU6hC,CAAA,CAAA,qBACvD,IAAwE,qBAArE,gBAAAuzE,EAAW,MAAC,OAASp1G,QAAA/O,EAAA,EAAc+O,EAAAA,MAAM5P,CAAA,EAAC,UAAW6+C,EAAY,KAAA,CAAA,EAAA,CAAA,CAAA,qCAKlEjvC,QAAAlS,CAAA,EAAM,wBADdqS,qBAeS,SAAA,OAbP,KAAK,SACJ,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,QAAO+sB,CAAA,GAER/qB,aAQOC,EAAA,OAAA,QAAAyzC,EAAAA,eAAAC,EARoB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAArC,IAQO,CAPL7iC,cAMWgB,EAAAA,MAAAb,EAAA,EAAA,CANA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMkS,QAAU6hC,CAAA,CAAA,qBACvD,IAIQ,CAJR7iC,EAAA,YAIQgB,QAJRpO,EAAA,EAAA4O,aACUR,QAGF5I,CAAA,EAHQ,MAAK,CAClB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,MAAM,OAAK,GAAA,IAC3B,MAAM,kIAQpBmJ,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAChBgC,aAIOC,EAAA,OAAA,OAAAyzC,EAAAA,eAAAC,EAJmB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAApC,IAIO,CAHL7iC,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAMkS,QAAU6hC,CAAA,CAAA,qBACtD,IAAyB,CAAtBphC,EAAAA,gBAAAC,EAAAA,gBAAA00G,EAAA,MAAY,OAAO,EAAA,CAAA,CAAA,qCAI5B70G,EAAAA,mBAqDM,MAAA,CArDA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAChBgC,aAmDOC,EAAA,OAAA,SAAAyzC,EAAAA,eAAAC,EAnDqB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAtC,IAmDO,CAlDL7iC,cAiDWgB,EAAAA,MAAAb,EAAA,EAAA,CAjDA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMkS,QAAU6hC,CAAA,CAAA,qBACxD,IAsBM,CAtBNthC,EAAAA,mBAsBM,MAAA,CAtBA,MAAKH,EAAA,eAAA,CAAGJ,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,QAAE3B,CAAA,EAAC,IAAG,OAAS2B,EAAA,MAAKlS,CAAA,EAAC,QAAQ,CAAA,CAAA,CAAA,GACxDuS,aAoBOC,EAAA,OAAA,OAAAyzC,EAAAA,eAAAC,EApBmB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAApC,IAoBO,CAnBL7iC,cAkBWgB,EAAAA,MAAAb,EAAA,EAAA,CAlBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAMkS,QAAU6hC,CAAA,CAAA,qBACtD,IAIW,CAJK7hC,EAAAA,MAAAlS,CAAA,EAAM,WAAQ,uBAA9BqS,EAAAA,mBAIWqsB,EAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAHTjsB,qBAAmC,8BAA1B0uC,EAAY,MAAA,CAAA,EAAA,CAAA,EACrB1uC,EAAAA,mBAA0C,OAAA,CAAnC,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,EAAe,IAAC,CAAA,EACnCkC,EAAA,mBAAkC,OAAA,KAAAG,EAAAA,gBAAzBy0G,EAAQ,MAAC,MAAM,EAAA,CAAA,CAAA,QAGxBhnF,EAAA,UAAA,EAAA,EAAAhuB,EAAAA,mBASQqsB,EAAAA,SARM,CAAA,IAAA,GAAAC,EAAAA,WAAA0oF,EAAA,MAAS,OAAd58G,mBADT4H,EAAA,mBASQ,OAAA,CAPL,IAAK5H,GACL,MAAK6H,EAAAA,eAAA,CAAkCJ,EAAAA,MAAA3B,CAAA,EAAG,GAAW,QAAA2B,EAAA,MAAAlS,CAAA,EAAM,WAAQ,MAAA,MAAA,KAAA,EAAA,EAA6DyK,OAAU02C,EAAY,OAAoCjvC,EAAAA,MAAA3B,CAAA,EAAG,IAAY,QAAA2B,EAAA,MAAAlS,CAAA,EAAM,WAAQ,MAAA,MAAA,KAAA,GAAA,QAAA,qEAWlOyS,qBAA4C,OAAA,CAAtC,MAAA,CAAkB,KAAA,MAAA,EAAC,KAAK,MAAA,YAC9BF,aAuBOC,EAAA,OAAA,UAAAyzC,EAAAA,eAAAC,EAvBsB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAvC,IAuBO,CAtBL7iC,cAqBWgB,EAAAA,MAAAb,EAAA,EAAA,CArBA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAMkS,QAAU6hC,CAAA,CAAA,qBACzD,IASS,CARDoN,EAAY,MAAA,iBADpBhvC,cASSD,EAAAA,MAAA45C,EAAA,EAAA,OAPP,QAAA,GACC,wBAAQ55C,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,MAAA,CAAA,CAAA,EAChC,KAAK,QACJ,OAAQ1nB,EAAI,MACZ,QAAOgX,CAAA,qBAER,IAAiB,CAAd8S,kBAAAC,EAAA,gBAAAV,EAAA,MAAA5P,CAAA,EAAO,IAAI,EAAA,CAAA,CAAA,yDAGR6+C,EAAY,OAAIkmE,EAAQ,MAAC,OAAM,iBADvCl1G,EAAAA,YASSD,EAAA,MAAA45C,EAAA,EAAA,OAPP,QAAA,GACC,wBAAQ55C,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,MAAA,CAAA,CAAA,EAC/B,KAAM1nB,EAAI,MAAA,UAAA,UACX,KAAK,QACJ,wBAAOiX,EAAI,EAAA,qBAEZ,IAAsE,qBAAnE,gBAAAqhD,EAAY,QAAKkmE,EAAQ,MAAC,OAAM,EAAOn1G,EAAAA,MAAM5P,CAAA,EAAC,KAAO4P,EAAAA,MAAM5P,CAAA,EAAC,IAAI,EAAA,CAAA,CAAA,sPAW5E,eACT,IAuCM,QAAA,QAvCN+9B,EAAAA,YAAAhuB,EAAAA,mBAuCM,MAvCNq+C,GAuCM,CAtCJj+C,EAAA,mBAmBO,OAAA,KAAA,CAlBLA,qBAiBO,OAAA,CAjBA,GAAIP,EAAAA,MAAMq1G,CAAA,GAAA,aACf90G,qBAME,OAAA,CALA,EAAE,IACF,EAAE,IACF,MAAM,OACN,OAAO,OACP,KAAK,OAAA,YAGCy0G,EAAW,qBADnB70G,EAAAA,mBAQE,OAAA,OANC,wBAAQH,EAAE,MAAA3B,CAAA,EAAC,GAAc,QAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,SAAA,QAAA,CAAA,CAAA,EAC/B,EAAG22G,EAAW,MAAA,CAAA,EACd,EAAGA,EAAW,MAAA,CAAA,EACd,MAAOA,EAAW,MAAA,CAAA,EAClB,OAAQA,EAAW,MAAA,CAAA,EACpB,KAAK,OAAA,oDAIXz0G,EAAAA,mBAOE,OAAA,CANA,EAAE,IACF,EAAE,IACF,MAAM,OACN,OAAO,OACP,KAAK,qBACJ,aAAcP,QAAMq1G,CAAA,CAAA,GAAA,cAEdxmH,GAAAomH,EAAA,QAAA,MAAApmH,GAAW,QAApBs/B,EAAAA,UAAA,EAAAhuB,EAAA,mBASI,IATJ+iE,GASI,EARF/0C,EAAAA,UAAA,EAAA,EAAAhuB,EAOE,mBAAAqsB,WANwB,KAAAC,EAAA,WAAAwoF,EAAA,MAAhB,CAAAxtH,GAAM7I,mBADhBuhB,EAAA,mBAOE,OAAA,CALC,IAAKvhB,EACL,EAAG6I,GAAI,CAAA,EACP,EAAGA,GAAI,CAAA,EACP,MAAOA,GAAI,CAAA,EACX,OAAQA,GAAI,CAAA,CAAA,wICrcnB0uG,GAAW,OAAO,KAAK0e,EAAa,EACpCY,GAA2B,CAAC,EAC5Bpf,GAA8B,CAAC,UAAU,EAEzCG,GAAW,CACf,QAAS,KACT,OAAQ,GACR,OAAQ,EACV,EAEAkf,GAAen4G,kBAAgB,CAC7B,KAAM,WACN,MAAOs3G,GACP,MAAMp3G,EAAQ,CAAE,MAAAzL,GAAS,CACjB,MAAAlE,EAAQiM,GAAS,WAAY0D,EAAQ,CACzC,OAAQ,CACN,QAAS,KACT,OAAQ,EACV,EACA,UAAW,SACX,MAAO,GACP,QAAS,GACT,MAAO,CACL,QAAS,EACT,OAAQ,EACV,EACA,KAAM,UACN,SAAU+4F,EAAA,CACX,EAEKmf,EAAYhmH,EAAAA,OAAOmlH,GAAY,IAAI,EACnCn8H,EAAUiiB,EAAS,SAAA,EAAE,EAE3B,UAAW/jB,KAAOs/G,GACZE,GAAa,SAASx/G,CAAG,GAE7B6jB,EAAA,MACE,IAAM5M,EAAMjX,CAAG,EACNH,GAAA,CACLiC,EAAQ9B,CAA4B,EAAYH,CACpD,EACA,CAAE,UAAW,GAAM,KAAM++H,GAAU,SAAS5+H,CAAG,CAAE,CACnD,EAGI6jB,EAAAA,MAAA,IAAM5M,EAAM,SAAUipG,CAAW,EAE3BA,EAAA,EAEZ4e,GAAA,MAAAA,EAAW,aAAah9H,GAExB+pB,EAAAA,gBAAgB,IAAM,CACpBizG,GAAA,MAAAA,EAAW,aAAah9H,EAAO,CAChC,EAED,SAASo+G,GAAc,CACjB,OAAO/kG,EAAM,SAAY,WAC3BrZ,EAAQ,SAAYiO,GAAyBqY,EAAW,WAAAjN,EAAO,UAAWpL,CAAc,EAC/E,OAAOkH,EAAM,UAAa,WACnCnV,EAAQ,SAAWmV,EAAM,SAEzBnV,EAAQ,SAAW,MACrB,CAGF,MAAO,IAAM,IAAA,CAEjB,CAAC,ECjDc4kB,qBAAgB,CAC7BjX,KAAM,gBACNwH,MAAO,CACLnX,KAAM,CACJA,KAAM+8C,OACN/1B,QAAS,IACV,EACDuG,MAAO,CACLvtB,KAAM8kB,GACNkC,QAAS,SACV,EACDsoC,SAAU,CACRtvD,KAAMomG,IACNp/E,QAASA,IAAM,IAAIo/E,GACpB,EACD64B,MAAO,CACLj/H,KAAMk/H,QACNl4G,QAAS,EACV,EACDrR,OAAQ,CACN3V,KAAMm/H,SACNn4G,QAAS,IACV,EACDgE,SAAU,CACRhrB,KAAMk/H,QACNl4G,QAAS,EACV,EACDG,MAAO,CACLnnB,KAAM+8C,OACN/1B,QAAS,EACV,EACDhlB,QAAS,CACPhC,KAAM+0D,MACN/tC,QAASA,IAAM,CAAA,CAChB,EACDo4G,UAAW,CACTp/H,KAAM+8C,OACN/1B,QAAS,MACV,EACD6uD,aAAc,CACZ71E,KAAMisD,OACNjlC,QAAS,EACV,EACDq4G,UAAW,CACTr/H,KAAMk/H,QACNl4G,QAAS,EACV,EACDo2B,QAAS,CACPp9C,KAAMk/H,QACNl4G,QAAS,EACV,EACDy3B,YAAa,CACXz+C,KAAM,CAACymB,OAAQ04G,QAAQ,EACvBn4G,QAAS,IACV,EACD03B,YAAa,CACX1+C,KAAMk/H,QACNl4G,QAAS,EACV,EACD23B,cAAe,CACb3+C,KAAM+8C,OACN/1B,QAAS,IACV,EACDvN,OAAQ,CACNzZ,KAAMymB,OACNO,QAASA,KAAO,CAAE,EACpB,CACD,EACDg2B,MAAO,CAAC,kBAAmB,SAAU,QAAS,QAAQ,EACtDn2B,MAAM1P,EAAO,CAAEkE,MAAAA,EAAO86B,KAAAA,CAAK,EAAG,CAC5B,MAAMzuB,EAAKtF,GAAc,UAAU,EAC7B3B,EAAQU,GAAU,EAElB,CAAEqrB,MAAAA,CAAO,EAAGX,GAAQ,EAEpByzF,EAAkBz2G,EAAAA,IAAI,IAAIu9E,IAAIjvF,EAAMm4C,QAAQ,CAAC,EAC7CwiD,EAAWjpF,EAAG,IAAC,EAAE,EACjBonG,EAAcpnG,EAAG,IAAC,CAAC,EACnB02G,EAAc12G,EAAG,IAAyB,IAAI,EAC9CssD,EAAiBtsD,EAAG,IAAC,EAAE,EACvB2vC,EAAgB3vC,EAAG,IAAC,EAAE,EACtB22G,EAAY32G,EAAG,IAAC,EAAK,EAErBs6D,EAASt6D,EAAAA,IAAkB,EAC3B0X,EAAO1X,EAAAA,IAAkB,EACzBm6D,EAASn6D,EAAAA,IAAkB,EAC3B42G,EAAS52G,EAAAA,IAAkB,EAC3Bi4B,EAAQj4B,EAAAA,IAAiC,EACzCxU,EAAOwU,EAAAA,IAAyB,EAEtC,IAAI62G,EAAiB,EACjBC,EAAuC,KACvCC,EAAU,GAEd,KAAM,CAAEt3H,OAAQ8lB,EAAS0C,SAAAA,CAAU,EAAGV,GAAY,CAChDG,QAAS,GACTE,UAAWA,CAACpgB,EAAOygB,IAAa,CAC9BhvB,GACE,CACE,CACE,IAAMgvB,EAAS+hF,IAAM/hF,EAASgiF,KAC9B,IAAM,CACA,CAAC8sB,GAAWzqD,EAAep1E,MAAQ,GACrC6/H,EAAU,GAEND,EACFxqD,EAAep1E,MAAQoX,EAAMnV,QAAQgxG,UACnC34C,GAAUA,EAAOt6D,QAAU4/H,CAC7B,EACStrH,EAAKtU,QACdo1E,EAAep1E,MAAQk1D,KAAKniC,MAAMze,EAAKtU,MAAM6uC,aAAez3B,EAAM0+D,YAAY,GAGhFV,EAAep1E,MAAQo1E,EAAep1E,QAAU,GAAK,EAAIo1E,EAAep1E,OAExEo1E,EAAep1E,MAAQ+E,GACrBswE,GACED,EAAep1E,OAAS+wB,EAAS+hF,GAAK,GAAK,GAC3C/hF,EAAS+hF,GAAK,GAAK,CACrB,EACA,EACAgtB,EAAe9/H,MAAM2B,OAAS,CAChC,EAGGyV,EAAM8nH,OACT5pD,GAAmBF,EAAep1E,MAAO+wB,EAAS+hF,GAAK,MAAQ,QAAQ,CAE1E,CAAA,EAEH,CACE,IAAM17F,EAAM8nH,QAAUnuG,EAASvoB,MAAQuoB,EAAStoB,QAAU6H,EAAM0nF,QAChE,IAAM,CACJ+nC,EAAiB7P,EAAYlwH,OAAS+wB,EAASvoB,KAAO,GAAK,EAAE,EAC7D4sE,EAAep1E,MAAQ,CACxB,CAAA,EAEH,CACE,IACGoX,EAAMnX,OAAS,UAAY8wB,EAAStoB,OACpC2O,EAAMnX,OAAS,UAAY8wB,EAASvoB,KACvC,IAAM,CACJq3H,EAAU,GACVzqD,EAAep1E,MAAQ,GACvB4/H,EAAe,KACfxpF,EAAK,QAAQ,CACd,CAAA,EAEH,CACE,IAAMrlB,EAASmiF,MACf,IAAM,CACJ,MAAM54C,EAASwlE,EAAe9/H,MAAMo1E,EAAep1E,KAAK,EAEpDs6D,IACFilE,EAAgBv/H,MAAMu/H,EAAgBv/H,MAAME,IAAIo6D,EAAOt6D,KAAK,EAAI,SAAW,KAAK,EAC9Es6D,EAAOt6D,KACT,EACAggI,GAAoB,EAExB,CAAC,EAEH,CAAC,IAAMjvG,EAAS9C,MAAO,IAAMmoB,EAAK,OAAO,CAAC,EAC1C,CACE,IAAM,OAAOh/B,EAAMxB,QAAW,YAAc,CAAC,CAACmrC,EAAM/gD,OAAS+wB,EAAS,QAAQ,EAC9E,IAAM,CACJzgB,EAAM0xC,gBAAiB,EACvBjB,EAAM/gD,MAAO09C,MAAO,CACrB,CAAA,CACF,EAEH,CACE01D,eAAgBA,IAAM9iG,EAAMkzC,eAAgB,EAC5C6vD,cAAetiF,EAASC,QAC1B,CACF,CACF,CACF,CAAC,EAEKhW,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAGg8B,GAAG,OAAO,CAAC,EAAG,GAClB,CAACh8B,EAAGm8B,IAAI,QAAS1sC,EAAMoW,KAAK,CAAC,EAAGpW,EAAMoW,QAAU,UAChD,CAAC7F,EAAGm8B,IAAI,QAAS,UAAU,CAAC,EAAG1sC,EAAM6T,QACtC,EACF,EACKiuC,EAAiBzgD,EAAAA,SAAS,IAAM,CACpC,MAAM7C,EAASwB,EAAMxB,OACfqqH,EAAcxnE,EAAcz4D,MAElC,OAAI4V,GAAUqqH,EACL7oH,EAAMnV,QAAQ2T,OAAO0kD,GAAU1kD,EAAOqqH,EAAa3lE,CAAM,CAAC,EAG5DljD,EAAMnV,OACf,CAAC,EACKi+H,EAAaznH,EAAQ,SAAC,IAAMygD,EAAel5D,MAAM2B,MAAM,EACvDw+H,EAAe1nH,EAAAA,SAAS,IACrBygD,EAAel5D,MAAM6hD,OACzBquE,EAAYlwH,MAAQ,GAAK+xG,EAAS/xG,MACnCkwH,EAAYlwH,MAAQ+xG,EAAS/xG,KAC/B,CACD,EACK8/H,EAAiBrnH,EAAQ,SAAC,IAAOrB,EAAM8nH,MAAQiB,EAAangI,MAAQk5D,EAAel5D,KAAM,EACzFogI,EAAa3nH,EAAAA,SAAS,IAAMy8C,KAAKq+C,KAAK2sB,EAAWlgI,OAAS+xG,EAAS/xG,OAAS,EAAE,CAAC,EAErFgkB,EAAAA,MACE,IAAM5M,EAAMm4C,SACZvvD,GAAS,CACPu/H,EAAgBv/H,MAAQA,CAC1B,CACF,EACAgkB,EAAK,MAACk8G,EAAY,IAAM,CACtBL,EAAU,GACVzqD,EAAep1E,MAAQ,GACvB4/H,EAAe,IACjB,CAAC,EAED,MAAMvmD,EAAUvwD,EAAG,IAAC,EAAK,EACnBu3G,EAAcv3G,EAAG,IAAC,EAAK,EAE7BhG,EAAAA,YAAY,IAAM,CAChB,MAAM7gB,EAAUi3D,EAAel5D,MACzBuvD,EAAWgwE,EAAgBv/H,MAEjC,IAAIsgI,EAAc,GACdC,EAAgB,GAEpB,QAAS/+H,EAAI,EAAG4H,GAAM82H,EAAWlgI,MAAOwB,EAAI4H,GAAK,EAAE5H,EAAG,CACpD,MAAM84D,EAASr4D,EAAQT,CAAC,EAUxB,GARK84D,EAAOrvC,WACNskC,EAASrvD,IAAIo6D,EAAOt6D,KAAK,EAC3BsgI,EAAc,GAEdC,EAAgB,IAIhBD,GAAeC,EACjB,KAEJ,CAEAF,EAAYrgI,MAAQsgI,GAAe,CAACC,EACpClnD,EAAQr5E,MAAQ,CAACqgI,EAAYrgI,OAASuvD,EAASnuD,KAAO,CACxD,CAAC,EAED,SAASo/H,GAAkB,CACzBx0E,sBAAsB,IAAM,OAC1B,MAAMy0E,EAASjgG,EAAKxgC,SAASsU,EAAAA,EAAKtU,QAALsU,YAAAA,EAAY+Z,SAEzC,GAAIoyG,EAAQ,CACV,MAAM14G,EAAQ0U,iBAAiBgkG,CAAM,EAC/Br5F,EAAawtE,SAAS7sF,EAAMqf,UAAU,EACtCE,EAAgBstE,SAAS7sF,EAAMuf,aAAa,EAC5Co5F,GAAcD,EAAOtiG,aAAeiJ,EAAaE,EAEvDq4F,EAAiBe,GACjB3uB,EAAS/xG,MAAQk1D,KAAKliC,MAAM0tG,IAAetpH,EAAM0+D,cAAgB,EAAE,CACrE,CACF,CAAC,CACH,CAEA,SAAS6qD,EAAarmE,EAA6B,CACjD,GAAIljD,EAAAA,EAAM6T,UAAYqvC,EAAOrvC,UAE7B,IAAIu0G,EAAYx/H,OAAS+wB,EAASsK,MAAO,CACvCulG,EAAkBpB,EAAYx/H,MAAOs6D,EAAOt6D,KAAK,EACjD,MACF,CAEIu/H,EAAgBv/H,MAAME,IAAIo6D,EAAOt6D,KAAK,EACxCu/H,EAAgBv/H,MAAM+mG,OAAOzsC,EAAOt6D,KAAK,EAEzCu/H,EAAgBv/H,MAAMiI,IAAIqyD,EAAOt6D,KAAK,EAGxC6/H,EAAU,GACVzqD,EAAep1E,MAAQ,GACvB4/H,EAAetlE,EAAOt6D,MACtBw/H,EAAYx/H,MAAQs6D,EAAOt6D,MAC3BggI,GAAoB,EACtB,CAEA,SAASY,EAAkBv/H,EAAwBgxB,EAAsB,OACvE,MAAMpwB,EAAUi3D,EAAel5D,MAE/B,IAAI8uC,EAAa,GACbG,EAAW,GAEf,QAASztC,GAAI,EAAG4H,GAAMnH,EAAQN,OAAQH,GAAI4H,GAAK,EAAE5H,GAAG,CAClD,MAAM84D,GAASr4D,EAAQT,EAAC,EAQxB,GANI84D,GAAOt6D,QAAUqB,EACnBytC,EAAattC,GACJ84D,GAAOt6D,QAAUqyB,IAC1B4c,EAAWztC,IAGTstC,EAAa,GAAKG,EAAW,EAAG,KACtC,CAEA,MAAMx8B,GAAS8sH,EAAgBv/H,MAAME,KAAI+B,EAAAA,EAAQ6sC,CAAU,IAAlB7sC,YAAAA,EAAqBjC,KAAK,EAAI,MAAQ,SAE3E8uC,EAAaG,IACd,CAACH,EAAYG,CAAQ,EAAI,CAACA,EAAUH,CAAU,GAGjD,QAASttC,GAAIstC,EAAYttC,IAAKytC,EAAU,EAAEztC,GAAG,CAC3C,MAAM84D,GAASr4D,EAAQT,EAAC,EAEnB84D,GAAOrvC,UACVs0G,EAAgBv/H,MAAMyS,EAAM,EAAE6nD,GAAOt6D,KAAK,CAE9C,CAEAggI,GAAoB,CACtB,CAEA,SAASa,EAAgBvwH,EAAe,CAGtC,GAFAA,GAAAA,MAAAA,EAAOkzC,iBAEHpsC,CAAAA,EAAM6T,SAEV,IAAIo1G,EAAYrgI,MACd,UAAWs6D,KAAUpB,EAAel5D,MAClC,CAACs6D,EAAOrvC,UAAYs0G,EAAgBv/H,MAAM+mG,OAAOzsC,EAAOt6D,KAAK,MAG/D,WAAWs6D,KAAUpB,EAAel5D,MAClC,CAACs6D,EAAOrvC,UAAYs0G,EAAgBv/H,MAAMiI,IAAIqyD,EAAOt6D,KAAK,EAI9Dw/H,EAAYx/H,MAAQ,KACpBggI,GAAoB,EACtB,CAEA,SAASc,GAAgB,CACvB,GAAI1pH,CAAAA,EAAM6T,SAEV,GAAIouD,EAAQr5E,MAAO,CACjB,MAAM+gI,EAAe,IAAI16B,IAAIk5B,EAAgBv/H,KAAK,EAElD,UAAWs6D,KAAUpB,EAAel5D,MAC7Bs6D,EAAOrvC,WACN81G,EAAa7gI,IAAIo6D,EAAOt6D,KAAK,EAC/Bu/H,EAAgBv/H,MAAM+mG,OAAOzsC,EAAOt6D,KAAK,EAEzCu/H,EAAgBv/H,MAAMiI,IAAIqyD,EAAOt6D,KAAK,GAK5Cw/H,EAAYx/H,MAAQ,KACpBggI,GAAoB,CACtB,MACEa,EAAiB,CAErB,CAEA,SAASx/E,IAAa,CACpBm+E,EAAYx/H,MAAQ,KACpB+wB,EAASC,SAAU,CACrB,CAEA,SAASgvG,IAAqB,CAC5B5pF,EAAK,kBAAmBmpF,EAAgBv/H,KAAK,EAC7Co2C,EAAK,QAAQ,CACf,CAEA,SAAS2pF,EAAiBrsB,EAAc,CACtCwc,EAAYlwH,MAAQ+E,GAAW2uG,EAAM,EAAG0sB,EAAWpgI,KAAK,CAC1D,CAEA,SAAS61E,GAAkB3tE,EAAe5G,EAAc,OACtD,MAAMW,EAAU69H,EAAe9/H,MAG/B,IAFAsB,EAAOA,EAAO4zD,KAAKiZ,IAAI7sE,CAAI,GAEpBW,EAAAA,EAAQiG,CAAK,IAAbjG,MAAAA,EAAgBgpB,WACrB/iB,GAAS5G,EAEL4G,EAAAA,EAAQ,GAAKA,GAASjG,EAAQN,UAAlC,CAGF,OAAOuG,CACT,CAEA,SAASmtE,GAAiBntE,EAAe+lD,EAAe,EAAG,OACzD,MAAMhsD,EAAU69H,EAAe9/H,MAE/B,OAAIiC,EAAAA,EAAQiG,CAAK,IAAbjG,MAAAA,EAAgBgpB,WAClB/iB,EAAQ2tE,GAAkB3tE,EAAO+lD,CAAI,GAEjCA,EAAO,EAAI/lD,GAASjG,EAAQN,OAASuG,EAAQ,KAC/CA,EAAQ2tE,GAAkB3tE,EAAO,CAAC+lD,CAAI,GAGlCA,EAAO,EAAI/lD,EAAQ,EAAIA,GAASjG,EAAQN,UAAQuG,EAAQ,MAIzDA,CACT,CAEA,SAASotE,GAAmBptE,EAAegtB,EAA6B,CACtE,MAAMolC,EAASljD,EAAMnV,QAAQiG,CAAK,EAElC,GAAIkP,EAAAA,EAAM8nH,OAAS,CAAC5kE,GAAU,CAAChmD,EAAKtU,OAEpC,GAAIk1B,IAAc,SAAU,CAC1B,MAAM3sB,GAAUL,EAAQ,GAAKkP,EAAM0+D,aAE/BxhE,EAAKtU,MAAM6uC,aAAe8wF,EAAiBp3H,GAC7C+L,EAAKtU,MAAM4vC,UAAU1nC,EAAQ6pG,EAAS/xG,MAAQ,GAAKoX,EAAM0+D,YAAY,CAEzE,KAAO,CACL,MAAMvtE,EAASL,EAAQkP,EAAM0+D,aAEzBxhE,EAAKtU,MAAM6uC,aAAetmC,GAC5B+L,EAAKtU,MAAM4vC,SAASrnC,CAAM,CAE9B,CACF,CAEA,MAAM4iD,GAAajnC,EAAAA,SAAS,CAC1BjkB,KAAMu1C,EAAAA,MAAMp+B,EAAO,MAAM,EACzB84G,YAAAA,EACAne,SAAAA,EACAquB,WAAAA,EACAC,YAAAA,EACAhnD,QAAAA,EACA9pB,SAAU92C,EAAQ,SAAC,IAAMu8C,MAAM9e,KAAKqpF,EAAgBv/H,KAAK,CAAC,EAC1DiC,QAASwW,EAAQ,SAAC,IAAMygD,EAAel5D,KAAK,EAC5C6gI,gBAAAA,EACAC,cAAAA,CACF,CAAC,EAED,SAASE,GAAa,CAAE1mE,OAAAA,EAAQpyD,MAAAA,CAAsD,EAAG,CACvF,MAAM+iB,EAAW7T,EAAM6T,UAAYqvC,EAAOrvC,SACpC4hG,EAAev8G,GAAsB,CACzCA,EAAMkzC,eAAgB,EACtBlzC,EAAM0xC,gBAAiB,EACvB2+E,EAAarmE,CAAM,CACpB,EAED,OAAAhyC,EAAAA,YAAA,KAAA,CAAA,MAEW,CACL,CAACX,EAAGg8B,GAAG,QAAQ,CAAC,EAAG,GACnB,CAACh8B,EAAGm8B,IAAI,SAAU,UAAU,CAAC,EAAG74B,EAChC,CAACtD,EAAGm8B,IAAI,SAAU,SAAS,CAAC,EAAGsxB,EAAep1E,QAAUkI,CACzD,EAAA,KACK,SAAQ,gBACC+iB,EAAW,OAAS5C,OAAS,QACnCq8B,IAAMi8E,EAAarmE,CAAM,CAAC,EAAA,CAElC/xC,EAAAA,WAAWjN,EAAO,SAAU,CAAErb,KAAMmX,EAAMnX,KAAMq6D,OAAAA,EAAQpyD,MAAAA,CAAM,EAAG,IAAM,CAAAogB,EAAA,YAAAytD,GAAA,CAAA,IAE/D,EAAC,MACCpuD,EAAGg8B,GAAG,UAAU,EAAC,MACjBvsC,EAAMkoH,UAAYloH,EAAMoW,MAAQnF,OAAS,QACvCk3G,EAAgBv/H,MAAME,IAAIo6D,EAAOt6D,KAAK,EAAC,SACtCirB,EAAQ,YACP,GAAE,QACJ4hG,CAAW,EAAA,IAAA,EAAAvkG,EAAA,YAAA,OAAA,CAAA,IAEX,EAAC,MAASX,EAAGg8B,GAAG,OAAO,CAAC,EAAA,CAChCp7B,EAAAA,WAAWjN,EAAO,QAAS,CAAErb,KAAMmX,EAAMnX,KAAMq6D,OAAAA,EAAQpyD,MAAAA,GAAS,IAAM,CACrEoyD,EAAOjzC,KAAK,CACb,CAAC,CAAA,CAAA,CAEL,CAAC,CAAA,CAGR,CAEA,SAASgnF,IAAe,CACtB,OAAA/lF,EAAAA,YAAA,MAAA,CAAA,IACY86D,EAAM,MAASz7D,EAAGg8B,GAAG,QAAQ,CAAC,EAAA,CACrCp7B,EAAU,WAACjN,EAAO,SAAU6vC,GAAY,IAAM,CAAA7iC,EAAA,YAAAwtB,WAAAxtB,KAAAA,CAAAA,EAAAA,YAAAytD,GAAA,CAAA,QAAA,GAAA,QAAA,GAAA,MAKlCpuD,EAAGg8B,GAAG,UAAU,EAAC,MACjBvsC,EAAMkoH,UAAYloH,EAAMoW,MAAQnF,OAAS,QACvCg4G,EAAYrgI,MAAK,QACjBq5E,EAAQr5E,MAAK,SACZoX,EAAM6T,SAAQ,YACb,GAAE,QACJ41G,CAAe,EAAA,IAAA,EAAAv4G,EAAA,YAAA,MAAA,CAAA,MAGjB,CAACX,EAAGg8B,GAAG,SAAS,EAAGvsC,EAAM6T,UAAYtD,EAAGm8B,IAAI,UAAW,UAAU,CAAC,EAAC,MACnE1sC,EAAMsC,OAAO26C,QAAO,QAClBysE,GAAax4G,CAAAA,EAAA,YAAApN,GAAA4O,EAAA,WAGhBpJ,EAAM1gB,MAAMihI,QAAO,CAAA,MAChB,EAAEvgH,EAAM1gB,MAAMihI,QAAQ95G,OAAS,GAAK,GAAG,CAAA,EAAA,IAAA,CAAA,CAAA,EAAAmB,EAAAA,YAAA,MAAA,CAAA,MAGtCX,EAAGg8B,GAAG,SAAS,GACxB,CAAA,GAAG47E,EAAgBv/H,MAAMoB,IAAI,IAAI83D,EAAel5D,MAAM2B,MAAM,EAAE,CAAA,GAE/DyV,EAAMgQ,OAAS9L,EAAM8L,QAAKkB,EAAA,YAAA,OAAA,CAAA,MACbX,EAAGg8B,GAAG,OAAO,CAAC,EAAA,CACxBp7B,EAAU,WAACjN,EAAO,QAAS6vC,GAAY,IAAM,CAAC/zC,EAAMgQ,KAAK,CAAC,CAAC,GAE/DkB,EAAAA,YAAAwqB,GAAA,CAAA,OAAA,GAAA,WAAA,GAAA,cAAA,EAAA,EAAA,CAAA7rB,QAAAA,IAAA,CAEE7P,EAAMimC,SAAO/0B,EAAAA,YAAA,MAAA,CAAA,MACAX,EAAGg8B,GAAG,SAAS,GAACr7B,CAAAA,EAAA,YAAApN,GAAA4O,EAAA,WAEpBpJ,EAAM1gB,MAAMq9C,QAAO,CAAA,OACfjmC,EAAMwnC,eAAiBl+B,EAAM1gB,MAAMq9C,QAAQ71B,OAAM,KACnDpQ,EAAMsnC,aAAeh+B,EAAM1gB,MAAMq9C,QAAQ18B,KAAI,MAC5C,UAGZ,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGN,CAAC,CAAA,CAGR,CAEA,SAASugH,IAAe,CACtB,GAAI,OAAO9pH,EAAMxB,QAAW,WAAY,OAAO,KAE/C,MAAMuV,EAAQxJ,GAAaA,EAAEqgC,gBAAiB,EAG9C,OAAA15B,EAAAA,YAAA,MAAA,CAAA,IACYo3G,EAAM,MAAS/3G,EAAGg8B,GAAG,QAAQ,GAACr7B,CAAAA,EAAA,YAAA80C,GAAA,CAAA,IAE/Brc,EAAK,MACK0X,EAAcz4D,MAAK,iBAAAoyD,GAAnBqG,EAAcz4D,MAAKoyD,EAAA,QAAA,GAAA,UAAA,GAAA,KAAA,GAAA,SAIxBh7C,EAAM6T,SAAQ,YACXw0G,EAAUz/H,MAAQqoB,OAAYjR,EAAMsC,OAAOgmH,OAAM,UACnDv0G,EAAI,QACNsvB,IAAOglF,EAAUz/H,MAAQ,GAAK,OAC/BuhD,IAAOk+E,EAAUz/H,MAAQ,EAAM,EAAA,CAGrC69C,OAAQA,IAAAv1B,EAAAA,YAAApN,GAAgBwF,EAAM1gB,MAAM0/H,OAAM,IAAA,CAAS,CAAA,CAAA,CAAA,CAK7D,CAEA,SAASyB,GAAa,CACpB,OAAI/pH,EAAM8nH,OAAS5jH,EAAMklB,KACvBlY,EAAAA,YAAAgjB,GAAA,CAAA,SAAA,GAAA,SACqCk1F,CAAe,EAAA,CAAAv5G,QAAAA,IAAA,CAAAqB,EAAA,YAAA,KAAA,CAAA,IACvCkY,EAAI,MAAS7Y,EAAGg8B,GAAG,MAAM,EAAC,KAAQ,SAAS,EAAA,CACjDp7B,EAAU,WAACjN,EAAO,OAAQ6vC,GAAY,IAAM,CAC3Cg1E,EAAangI,MAAM2B,OACjBw+H,EAAangI,MAAM0U,IAAI,CAAC4lD,EAAQpyD,IAAU84H,GAAa,CAAE1mE,OAAAA,EAAQpyD,MAAAA,EAAO,CAAC,EAACogB,EAAA,YAAA,MAAA,CAAA,MAE9DX,EAAGg8B,GAAG,OAAO,GAAIvsC,CAAAA,EAAMioH,WAAajoH,EAAMsC,OAAOorD,KAAK,CACnE,CAAA,CACF,CAAC,CAAA,CAAA,CAAA,CAAA,EAMVx8C,EAAAA,YAAAi1C,GAAA,CAAA,IAESjpD,EAAI,QAAA,GAAA,MAEFqT,EAAGg8B,GAAG,MAAM,EAAC,MACbuV,EAAel5D,MAAK,YAChBoX,EAAM0+D,aAAY,aAAA,GAAA,YAAA,GAAA,SAGrB,QAAO,cACF,CAAE1tD,KAAM,UAAW47B,UAAW5sC,EAAMnX,IAAM,EAAA,SAC7CugI,CAAe,EAAA,CAGvBv5G,QAASA,CAAC,CAAE9X,KAAAA,EAAMjH,MAAAA,CAAqD,IACrE84H,GAAa,CAAE1mE,OAAQnrD,EAAMjH,MAAAA,CAAM,CAAC,EACtC48D,MAAOA,IAAAx8C,EAAA,YAAA,MAAA,CAAA,MAAkBX,EAAGg8B,GAAG,OAAO,CAAIvsC,EAAAA,CAAAA,EAAMioH,WAAajoH,EAAMsC,OAAOorD,KAAK,CAAA,CAAO,CAAA,CAI9F,CAEA,SAAS8M,GAAe,CACtB,MAAI,CAACx6D,EAAM8nH,OAAS,CAAC5jH,EAAM2nE,OAAe,KAE1C36D,EAAAA,YAAA,MAAA,CAAA,IACY26D,EAAM,MAASt7D,EAAGg8B,GAAG,QAAQ,GACpCp7B,CAAAA,EAAU,WAACjN,EAAO,SAAU6vC,GAAY,IAAM,CAAA7iC,EAAA,YAAA,MAAA,CAAA,MACjCX,EAAGg8B,GAAG,YAAY,CAACr7B,EAAAA,CAAAA,EAAA,YAAApN,GAAA4O,EAAAA,WAEtB2iB,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMooF,WAAa1nE,EAAM1gB,MAAMmoF,UAAS,CAAA,MAC1D,CACLxgE,EAAGg8B,GAAG,WAAW,EACjBusE,EAAYlwH,OAAS,GAAK2nB,EAAGm8B,IAAI,YAAa,UAAU,CAAC,EAC1D,QACQY,IAAMq7E,EAAiB7P,EAAYlwH,MAAQ,CAAC,CAACsoB,CAAAA,EAAAA,IAAAA,EAAAA,EAAA,YAAAu/C,GAAA,CAAA,QAAA,GAAA,MAI/CqoD,EAAYlwH,MAAK,MACjB2nB,EAAGg8B,GAAG,YAAY,EAAC,KACpB,QAAO,IACR,EAAC,IACDy8E,EAAWpgI,MAAK,SACX+/H,CAAgB,EAAA,IAAA,EAAAz3G,EAAA,YAAA,OAAA,CAAA,MAEf,eAAe,EAAA,CAAG,GAAG,CAAA,EAAAA,cAAA,OAAA,KAAA,CAC3B83G,EAAWpgI,KAAK,CAAA,EAAAsoB,EAAAA,YAAApN,GAAA4O,EAAA,WAEhB2iB,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMmoF,UAAYznE,EAAM1gB,MAAMooF,WAAU,CAAA,MAC1D,CACLzgE,EAAGg8B,GAAG,YAAY,EAClBusE,EAAYlwH,OAASogI,EAAWpgI,OAAS2nB,EAAGm8B,IAAI,aAAc,UAAU,CAAC,EAC1E,QACQY,IAAMq7E,EAAiB7P,EAAYlwH,MAAQ,CAAC,CAAC,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAG3D,CAAC,CAAA,CAGR,CAEA,MAAO,IAAAsoB,EAAA,YAAA,MAAA,CAAA,IACK+F,EAAO,MAASrT,EAAUhb,MAAK,SAAY,EAAC,OAAUqhD,EAAU,EAAA,CACvEgtD,GAAY,EACZ6yB,GAAY,EACZC,EAAY,EACZvvD,EAAY,CAAE,CAElB,CACH,CACF,CAAC,EC1oBYwvD,GAAgB78G,GAAW,CACtC,MAAOQ,GACP,OAAQS,GAAqB,EAC7B,QAAS,MACT,MAAO,MACP,SAAUrB,EACV,MAAOA,EACP,OAAQ,CACN,KAAM,CAAC,QAAS,QAAQ,EACxB,QAAS,IACX,EACA,UAAW,OACX,UAAW,OACX,aAAc,OACd,WAAYA,EACZ,YAAa,OACb,YAAa,OACb,UAAWA,EACX,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,MAAO,OACP,SAAUmB,EAAoC,EAC9C,SAAUA,EAAyB,CACrC,CAAC,EChBK0yC,GAAgD,CACpDh4D,MAAO,QACPqnB,MAAO,QACP4D,SAAU,UACZ,EAEepE,qBAAgB,CAC7BjX,KAAM,WACNwH,MAAOgqH,GACPnkF,MAAO,CAAC,cAAc,EACtBn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CACrC,KAAM,CACJC,MAAAA,EACAC,QAAAA,EACA5vB,MAAAA,EACAvC,SAAAA,EACAoyB,QAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,cAAAA,CACF,EAAIhD,GAAmC,IAAA,UAAM1iC,OAAAA,GAAAA,GAAAA,EAAO9X,QAAP8X,YAAAA,GAAc47B,MAAd57B,YAAAA,EAAmB4lC,QAAO,EAEjEtmC,EAAQiM,GAAS,WAAY0D,EAAQ,CACzCyG,MAAOtI,GAAgBsI,CAAK,EAC5B9T,OAAQ,KACRzX,QAAS,CACPglB,QAASA,IAAM,CAAE,EACjBC,OAAQ,EACT,EACDlnB,MAAO,CACLinB,QAASA,IAAMs2B,EAAe,EAC9Br2B,OAAQ,EACT,EACD+D,SAAUA,IAAMA,EAASjrB,MACzBk/H,MAAO,GACPtpH,OAAQ,GACRypH,UAAW,KACXlmE,UAAWA,KAAO,CAAA,GAClB2c,aAAc,CACZ7uD,QAAS,GACTtD,UAAW3jB,IAASA,GAAQ,CAC7B,EACDqhI,WAAY,GACZC,YAAa,KACbC,YAAa,KACbjC,UAAW,GACXjiF,QAASA,IAAMA,EAAQr9C,MACvB0+C,YAAa74B,GAAgB,EAC7B84B,YAAa,GACbC,cAAe,KACftjC,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEK,CAAEmxB,MAAAA,CAAO,EAAGX,GAAQ,EAEpBnkB,EAAKtF,GAAc,UAAU,EAC7B3I,EAASI,GAAU,WAAY07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACrDsJ,EAAQU,GAAU,EAElB89B,EAAep2B,EAAG,IAAuB,IAAK,EAC9C04G,EAAiB14G,EAAAA,IAAI,IAAIu9E,GAAsB,EAC/Co7B,EAAiB34G,EAAAA,IAAI,IAAIu9E,GAAsB,EAC/Cq7B,EAAgB54G,EAAG,IAAwB,EAAE,EAC7C64G,EAAgB74G,EAAG,IAAwB,EAAE,EAC7CmwC,EAAenwC,EAAG,IAAwB,EAAE,EAE5ChR,EAASgR,EAAAA,IAAyC,EAClDvgB,EAASugB,EAAAA,IAAyC,EAElDqwC,EAAY1gD,EAAAA,SAAS,KAAO,CAAE,GAAGu/C,GAAkB,GAAG5gD,EAAM+hD,SAAU,EAAE,EAE9E,IAAIO,EAAiB,IAAIkoE,IACrBjoE,EAAeviD,EAAMpX,MAEzB,MAAM45D,EAAgB9wC,EAAG,IAAC,CAAC,EAE3BhG,EAAAA,YAAY,IAAM,CAEhB1L,EAAM+hD,UAAUn5D,MAChBoX,EAAM+hD,UAAU9xC,MAChBjQ,EAAM+hD,UAAUluC,SAEhB,QAASzpB,GAAI,EAAG4H,EAAMgO,EAAMnV,QAAQN,OAAQH,GAAI4H,EAAK,EAAE5H,GACrD4V,EAAMnV,QAAQT,EAAC,EAIjBo4D,EAAc55D,OAChB,CAAC,EAEDgkB,EAAK,MAAC41C,EAAeztB,EAAa,CAAE0U,UAAW,EAAK,CAAC,EAErD/9B,EAAAA,YAAY,IAAM,CAChB,GAAI,CAACo8B,EAAal/C,MAAMoB,KAAM,CAC5BsgI,EAAc1hI,MAAQg1D,MAAM9e,KAAK+iB,EAAaj5D,KAAK,EACnD2hI,EAAc3hI,MAAQ,CAAE,EACxB,MACF,CAEA,MAAMg8D,GAAiB,IAAIqqC,IAAInnD,EAAal/C,KAAK,EAC3CuI,EAAgC,CAAE,EAClCuP,EAAgC,CAAE,EAExC,UAAWwiD,KAAUrB,EAAaj5D,MAC5Bg8D,GAAe97D,IAAIo6D,EAAOt6D,KAAK,EACjCuI,EAAO6lE,KAAK9T,CAAM,EAElBxiD,EAAOs2D,KAAK9T,CAAM,EAItBqnE,EAAc3hI,MAAQuI,EACtBm5H,EAAc1hI,MAAQ8X,CACxB,CAAC,EAED,SAASq0B,GAAc,CACrB,KAAM,CAAEnsC,MAAO85D,GAAUzyC,MAAO0yC,EAAU9uC,SAAU+uC,CAAa,EAAGb,EAAUn5D,MACxEq6D,EAASX,EACThlD,EAAM,IAAIktH,IAEhBxqH,EAAMnV,QAAQ4/H,QAAQvnE,GAAU,CAC9B,MAAMC,EAAY,OAAOD,GAAW,SAAW,CAAE,CAACR,EAAQ,EAAGQ,CAAO,EAAIA,EAClEt6D,EAAQu6D,EAAUT,EAAQ,EAEhC,GAAIz5D,GAAOL,CAAK,EAAG,OAEnB,MAAMqnB,GAAQkzC,EAAUR,CAAQ,GAAK/c,OAAOh9C,CAAK,EAC3C,CAAE,CAACg6D,CAAW,EAAG/uC,EAAW,EAAM,EAAIsvC,EACtCG,GAAWL,EAAOhyD,IAAIkyD,EAAUv6D,KAAK,EACrC26D,GAAcz2C,EAAAA,SAAS,CAC3B+G,SAAAA,EACAjrB,MAAAA,EACAqnB,MAAAA,GACA0sB,QAAQ2mB,IAAAA,YAAAA,GAAU3mB,SAAU,GAC5BooB,SAASzB,IAAAA,YAAAA,GAAUyB,UAAW,GAC9BltD,KAAMqrD,CACR,CAAC,EAED5lD,EAAIC,IAAI3U,EAAO26D,EAAW,CAC5B,CAAC,EAEDjB,EAAiBhlD,EACjBukD,EAAaj5D,MAAQg1D,MAAM9e,KAAKxhC,EAAIgkE,OAAM,CAAE,EAC5Cx5B,EAAal/C,MAAQ,IAAIqmG,IAAI1sC,CAAY,CAC3C,CAEA,MAAM52C,EAAWtK,EAAAA,SAAS,IAAMrB,EAAMimC,SAAWjmC,EAAMunC,WAAW,EAC5D3jC,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAC,EACJ8jB,EAAGo4B,GAAG,MAAM,EACZ,CACE,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMoW,KAAK,CAAC,EAAGpW,EAAMoW,QAAU,UACtC,CAAC7F,EAAGE,GAAG,UAAU,CAAC,EAAG9E,EAAS/iB,MAC9B,CAAC2nB,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAMimC,OAC5B,CAAC,CAEJ,EACKykF,EAAarpH,EAAAA,SAAS,IACnBrB,EAAMkoH,WAAaloH,EAAMoW,QAAU,UAAYpW,EAAMoW,MAAQ,SACrE,EACKu0G,EAAkBtpH,EAAAA,SAAS,IAAM,CAAC,CAAC+oH,EAAexhI,MAAMoB,IAAI,EAC5D4gI,EAAkBvpH,EAAAA,SAAS,IAAM,CAAC,CAACgpH,EAAezhI,MAAMoB,IAAI,EAC5D6gI,EAAgBxpH,EAAAA,SAAS,IACtBrB,EAAMiqH,WACT,CAACrhI,GAAes6D,IAChBA,EAAOjzC,MAAM66G,kBAAmB,EAAC36G,SAASvnB,EAAK,EAC/C,CAACA,GAAes6D,IAAgCA,EAAOjzC,MAAME,SAASvnB,EAAK,CAChF,EACKmiI,EAAe1pH,EAAQ,SAAC,IAAM2pH,GAAgB,QAAQ,CAAC,EACvDC,GAAe5pH,EAAQ,SAAC,IAAM2pH,GAAgB,QAAQ,CAAC,EAE7Dp+G,EAAAA,MACE,IAAM5M,EAAMpX,MACZA,IAAS,CACP25D,EAAe35D,GACfk/C,EAAal/C,MAAQ,IAAIqmG,IAAI1sC,CAAY,CAC3C,CACF,EAEAzc,EAAO,CACLolF,eAAAA,GACAC,eAAAA,GACAC,iBAAAA,GACAC,gBAAAA,GACA/kF,MAAQz7C,IAAsB,SAAK6V,OAAAA,GAAAA,EAAAA,EAAO9X,QAAP8X,YAAAA,EAAc47B,MAAd57B,YAAAA,EAAmB4lC,MAAMz7C,KAC5Dg/C,KAAMA,IAAM,eACVnpC,GAAAA,GAAAA,EAAO9X,QAAP8X,YAAAA,GAAc47B,MAAd57B,MAAAA,EAAmBmpC,QACnB14C,GAAAA,EAAAA,EAAOvI,QAAPuI,YAAAA,EAAcmrC,MAAdnrC,MAAAA,EAAmB04C,MACrB,CACF,CAAC,EAED,SAASmhF,GAAgBniI,GAA2B,CAClD,MAAM2V,EAASwB,EAAMxB,OAErB,GAAKA,EAEL,OAAI,OAAOA,GAAW,WACb,CAAC5V,EAAes6D,IAAgC1kD,EAAO5V,EAAOs6D,EAAQr6D,EAAI,EAG5EgiI,EAAcjiI,KACvB,CAEA,SAASyhD,GAAe,CACtBkY,EAAe3E,MAAM9e,KAAKgJ,EAAal/C,KAAK,EAE5Co2C,EAAK,eAAgBujB,CAAY,EACjCnc,EAAcmc,CAAY,EAC1Bp0C,EAAUnO,EAAMuqC,SAAUgY,CAAY,EACtCrc,EAAe,CACjB,CAEA,SAASglF,IAAiB,CACxB,UAAWtiI,MAASwhI,EAAexhI,MACjCk/C,EAAal/C,MAAMiI,IAAIjI,EAAK,EAG9BwhI,EAAexhI,MAAMikD,MAAO,EAC5BxC,EAAc,CAChB,CAEA,SAAS8gF,IAAiB,CACxB,UAAWviI,MAASyhI,EAAezhI,MACjCk/C,EAAal/C,MAAM+mG,OAAO/mG,EAAK,EAGjCyhI,EAAezhI,MAAMikD,MAAO,EAC5BxC,EAAc,CAChB,CAEA,SAAS9L,GAAa11C,GAA2B,CAC/C,MAAMsvD,EAAW,CACfz3C,OAAQk9C,MAAM9e,KAAKsrF,EAAexhI,KAAK,EACvCuI,OAAQysD,MAAM9e,KAAKurF,EAAezhI,KAAK,CACxC,EACKiP,EAAO,CACX6I,OAAQy3C,EAASz3C,OAAOpD,IAAI1U,GAAK,OAAI05D,QAAAA,EAAAA,EAAerxD,IAAIrI,CAAK,IAAxB05D,YAAAA,EAA2BzqD,OAAQ,GAAE,EAC1E1G,OAAQgnD,EAAShnD,OAAOmM,IAAI1U,UAAS05D,QAAAA,EAAAA,EAAerxD,IAAIrI,CAAK,IAAxB05D,YAAAA,EAA2BzqD,OAAQ,GAAE,CAC3E,EAEDsW,EAAUnO,EAAMmnD,SAAUt+D,GAAMsvD,EAAUtgD,CAAI,CAChD,CAEA,SAASuzH,GAAiBviI,GAA2B,SAC/CA,KAAS,UACX6X,EAAAA,EAAO9X,QAAP8X,MAAAA,EAAc47B,IAAIgK,SAElBn1C,EAAAA,EAAOvI,QAAPuI,MAAAA,EAAcmrC,IAAIgK,OAEtB,CAEA,SAAS+kF,IAAkB,WACzB3qH,GAAAA,EAAO9X,QAAP8X,MAAAA,GAAc47B,IAAIuN,QAClB14C,EAAAA,EAAOvI,QAAPuI,MAAAA,EAAcmrC,IAAIuN,MACpB,CAEA,SAASyhF,GAAct2G,GAAiB,CACtC,IAAI1E,EAAoByE,GAAiB7Q,EAAO8Q,EAAK,EAErD,GAAI,CAAC1E,EAAU,CACb,UAAW9X,KAAQwc,GAEjB,GADA1E,EAAWtQ,EAAMkE,MAAM1L,CAAI,EACvB,OAAO8X,GAAa,WACtB,MAIJ,OAAO,OAAOA,GAAa,WACtBlQ,GAAW8Q,EAAAA,YAAAG,GAAA,CAAA,SAAyBf,EAAQ,KAAelQ,CAAM,EAAA,IAAA,EAClE,IACN,CAEA,OAAO,IACT,CAEA,MAAO,IACL8Q,EAAAA,YAAA,MAAA,CAAA,GAEQ60B,EAAMn9C,MAAK,MACRgb,EAAUhb,MAAK,KAChB,cAAa,kBACFo9C,EAAQp9C,OAAKsoB,CAAAA,EAAA,YAAAq6G,GAAA,CAAA,IAGvB7qH,EAAM,SACO0pH,EAAexhI,MAAK,oBAAAoyD,IAApBovE,EAAexhI,MAAKoyD,GAAA,KAChC,SAAQ,MACPzqC,EAAGm8B,IAAI,QAAS,QAAQ,EAAC,MACzB1sC,EAAMoW,MAAK,MACXpW,EAAM8nH,MAAK,OACViD,EAAaniI,MAAK,SAChBoX,EAAM6T,SAAQ,MACjB7T,EAAMkqH,aAAe5nH,EAAO1Z,MAAM8X,OAAM,QACtC4pH,EAAc1hI,MAAK,aAChBoX,EAAMioH,WAAa3lH,EAAO1Z,MAAM8kE,MAAK,gBAClC1tD,EAAM0+D,aAAY,cACpB1+D,EAAMiqH,WAAU,aACjBjqH,EAAMkoH,UAAS,QAClBloH,EAAMimC,QAAO,eACRjmC,EAAMsnC,YAAW,eACjBtnC,EAAMunC,YAAW,iBACfvnC,EAAMwnC,cAAa,OAC3BllC,EAAO1Z,MAAK,SACVu+D,IAAM5oB,GAAa,QAAQ,EAAC,QAC7B2sF,GAAc,SACbM,IAAMJ,GAAiB,QAAQ,CAAC,EAAA,CAGxCp/C,OAAQs/C,GAAc,CAAC,gBAAiB,eAAgB,QAAQ,CAAC,EACjEt7G,MAAOs7G,GAAc,CAAC,eAAgB,cAAe,OAAO,CAAC,EAC7DliG,KAAMkiG,GAAc,CAAC,cAAe,aAAc,MAAM,CAAC,EACzDz/C,OAAQy/C,GAAc,CAAC,gBAAiB,eAAgB,QAAQ,CAAC,EACjEpoE,OAAQooE,GAAc,CAAC,gBAAiB,eAAgB,QAAQ,CAAC,EACjEr7G,MAAOq7G,GAAc,CAAC,eAAgB,cAAe,OAAO,CAAC,CAAC,CAAA,EAAAp6G,EAAA,YAAA,MAAA,CAAA,MAGtDX,EAAGg8B,GAAG,SAAS,CAAC,EAAA,CACzBp7B,EAAAA,WAAWjN,EAAO,UAAW,CAAEgnH,eAAAA,GAAgBC,eAAAA,EAAe,EAAG,IAAM,CAAAj6G,EAAA,YAAAG,GAAA,CAAA,SAClDrR,EAAMkE,MAAMwgF,QAAO,KAAQ,CAAEwmC,eAAAA,GAAgBC,eAAAA,EAAe,CAAC,EAAA,CAAAt7G,QAAAA,IAAAqB,CAAAA,EAAA,YAAA46C,GAAA,CAAA,IAExE,EAAC,QAAA,GAAA,MAECv7C,EAAGg8B,GAAG,QAAQ,EAAC,KAChBm+E,EAAW9hI,MAAK,KAChB,QAAO,SACHoX,EAAM6T,UAAY,CAAC82G,EAAgB/hI,MAAK,QACzC+iB,EAAS/iB,MAAK,eACToX,EAAMsnC,YAAW,iBACftnC,EAAMwnC,cAAa,MAC5B,CAAExL,aAAc,KAAO,EAAA,QACrBkvF,EAAc,EAAA,CAGrB3hH,KAAMA,IAAA2H,EAAA,YAAApN,GAAA4O,EAAAA,WAEG2iB,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMmoF,UAAYznE,EAAM1gB,MAAMooF,WAAU,CAAA,MAC1D37C,EAAMzsC,MAAQ,UAAY,UAAU,CAAA,EAAA,IAAA,EAE9CsoB,EAAAA,EAAA,YAAA46C,GAAA,CAAA,IAIE,EAAC,QAAA,GAAA,MAECv7C,EAAGg8B,GAAG,QAAQ,EAAC,KAChBm+E,EAAW9hI,MAAK,KAChB,QAAO,SACHoX,EAAM6T,UAAY,CAAC+2G,EAAgBhiI,MAAK,QACzC+iB,EAAS/iB,MAAK,eACToX,EAAMsnC,YAAW,iBACftnC,EAAMwnC,cAAa,MAC5B,CAAE9vB,OAAQ,GAAK,EAAA,QACbyzG,EAAc,EAAA,CAGrB5hH,KAAMA,IAAA2H,EAAA,YAAApN,GAAA4O,EAAAA,WAEG2iB,EAAMzsC,MAAQ0gB,EAAM1gB,MAAMooF,WAAa1nE,EAAM1gB,MAAMmoF,UAAS,CAAA,MAC1D17C,EAAMzsC,MAAQ,WAAa,SAAS,CAAA,EAAA,IAAA,CAE9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAIR,CAAC,CAAA,EAAAsoB,EAAAA,YAAAq6G,GAAA,CAAA,IAGGp6H,EAAM,SACOk5H,EAAezhI,MAAK,oBAAAoyD,IAApBqvE,EAAezhI,MAAKoyD,GAAA,KAChC,SAAQ,MACPzqC,EAAGm8B,IAAI,QAAS,QAAQ,EAAC,MACzB1sC,EAAMoW,MAAK,MACXpW,EAAM8nH,MAAK,OACVmD,GAAariI,MAAK,SAChBoX,EAAM6T,SAAQ,MACjB7T,EAAMmqH,aAAe7nH,EAAO1Z,MAAMuI,OAAM,QACtCo5H,EAAc3hI,MAAK,aAChBoX,EAAMioH,WAAa3lH,EAAO1Z,MAAM8kE,MAAK,gBAClC1tD,EAAM0+D,aAAY,cACpB1+D,EAAMiqH,WAAU,aACjBjqH,EAAMkoH,UAAS,QAClBloH,EAAMimC,QAAO,eACRjmC,EAAMsnC,YAAW,eACjBtnC,EAAMunC,YAAW,iBACfvnC,EAAMwnC,cAAa,OAC3BllC,EAAO1Z,MAAK,SACVu+D,IAAM5oB,GAAa,QAAQ,EAAC,QAC7B4sF,GAAc,SACbK,IAAMJ,GAAiB,QAAQ,CAAC,EAAA,CAGxCp/C,OAAQs/C,GAAc,CAAC,gBAAiB,eAAgB,QAAQ,CAAC,EACjEt7G,MAAOs7G,GAAc,CAAC,eAAgB,cAAe,OAAO,CAAC,EAC7DliG,KAAMkiG,GAAc,CAAC,cAAe,aAAc,MAAM,CAAC,EACzDz/C,OAAQy/C,GAAc,CAAC,gBAAiB,eAAgB,QAAQ,CAAC,EACjEpoE,OAAQooE,GAAc,CAAC,gBAAiB,eAAgB,QAAQ,CAAC,EACjEr7G,MAAOq7G,GAAc,CAAC,eAAgB,cAAe,OAAO,CAAC,CAAC,CAAA,CAAA,CAAA,CAM1E,CACF,CAAC,ECvZiB,IAAA1jB,IAAAA,IAChBA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QAHQA,IAAAA,IAAA,CAAA,CAAA,EA2IX,MAAM6jB,GAAa,mBACbC,GAAkB,wBAElB9qE,GAAgD,CAC3D,GAAI,KACJ,OAAQ,SACR,MAAO,QACP,SAAU,WACV,QAAS,UACT,SAAU,WACV,SAAU,WACV,SAAU,WACV,QAAS,UACT,QAAS,UACT,OAAQ,SACR,SAAU,WACV,SAAU,WACV,MAAO,QACP,SAAU,WACV,eAAgB,iBAChB,eAAgB,iBAChB,cAAe,gBACf,OAAQ,QACV,mMC/KA,MAAM5gD,EAAQuR,EAORo6G,EAAY9pH,SAAO4pH,EAAU,EAE7Bl7G,EAAKtF,GAAc,MAAM,EACzB3B,EAAQU,GAAS,EAEjB,CAAE,MAAAqrB,CAAM,EAAIX,GAAO,EAEnBzd,EAAUvF,EAAAA,IAAiB,EAC3BikB,EAAUjkB,EAAAA,IAAiB,EAE3Bk+D,EAAcvuE,EAAAA,SAAS,IACpBrB,EAAM,KAAK,OAAS2rH,EAAU,WAAW,IAAI3rH,EAAM,KAAK,MAAM,EAAI,MAC1E,EAEWiZ,GAAA,CACV,OAAQhC,EACR,QAAS,GACT,UAAW,CAAC/d,EAAOygB,KAAa,CAC1BgyG,EAAU,WAEdhhI,GACE,CACE,CACE,IAAMgvB,GAAS,IAAMA,GAAS,KAC9B,IAAMgyG,EAAU,oBAAoBhyG,GAAS,GAAK,KAAO,MAAM,CACjE,EACA,CACE,IAAMA,GAAS,MAAQA,GAAS,MAChC,IAAM,WACJ,MAAMynD,KAAWrgE,GAAAf,EAAM,KAAK,WAAX,YAAAe,GAAqB,QAAS,EAE3C4Y,GAAS,OAAS3Z,EAAM,KAAK,UAAYohE,GAC3CuqD,EAAU,oBAAoB,MAAM,EAC3BhyG,GAAS,OAAS,CAAC3Z,EAAM,KAAK,UAAY,CAACohE,IAC1CuqD,EAAA,mBAAkBh2G,GAAAi6D,EAAY,QAAZ,YAAAj6D,GAAmB,EAAE,EAEjD67E,EAAe73E,GAAS,KAAK,CAC/B,CAEJ,EACA,CAAC,IAAMiyG,EAAY,OAASjyG,GAAS,MAAOykD,CAAiB,EAC7D,CAAC,IAAMzkD,GAAS,MAAOkyG,CAAkB,CAC3C,EACA,CACE,eAAgB,IAAM,CACpB3yH,EAAM,eAAe,EACrBA,EAAM,gBAAgB,CACxB,EACA,cAAeygB,GAAS,QAAA,CAE5B,CAAA,CACF,CACD,EAED,MAAMusD,EAASx0D,EAAAA,IAAI,CAACi6G,EAAU,gBAAkB3rH,EAAM,KAAK,MAAM,EAC3DynD,EAAW/1C,EAAAA,IAAIi6G,EAAU,gBAAkB3rH,EAAM,KAAK,QAAQ,EAC9DkxD,EAAWx/C,MAAI,EAAK,EACpB+6F,EAAa/6F,MAAI,EAAK,EACtBm2B,EAAUn2B,MAAI,EAAK,EAEnB7X,EAAawH,EAAAA,SAAS,IAAM,OAChC,MAAQ,CAACsqH,EAAU,cAAc5qH,EAAA6uE,EAAY,QAAZ,YAAA7uE,EAAmB,WAAaf,EAAM,KAAK,QAAA,CAC7E,EACKumD,EAAallD,EAAAA,SAAS,IAAM,OAChC,MAAQ,CAACsqH,EAAU,cAAc5qH,EAAA6uE,EAAY,QAAZ,YAAA7uE,EAAmB,WAAaf,EAAM,KAAK,QAAA,CAC7E,EAEK8rH,EAAYzqH,EAAA,SAChB,IAAM,CAACrB,EAAM,KAAK,UAAYA,EAAM,KAAK,cAAgBA,EAAM,KAAK,aACtE,EACM+rH,EAAc1qH,WAAS,IAAM,CAAC,CAACsqH,EAAU,UAAY3rH,EAAM,KAAK,MAAQ,CAAC,EACzE4D,EAAYvC,EAAAA,SAAS,IAAM,OACxB,MAAA,CACL,CAACkP,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,IAAI,OAAQ,MAAM,CAAC,EAAGvQ,EAAM,KAAK,KACrC,CAACuQ,EAAG,IAAI,OAAQ,SAAS,CAAC,EAAGs3B,EAAQ,MACrC,CAACt3B,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAGvQ,EAAM,KAAK,SACzC,CAACuQ,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAGvQ,EAAM,KAAK,SACzC,CAACuQ,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAG1W,EAAW,MACzC,CAAC0W,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAGg2C,EAAW,MACzC,CAACh2C,EAAG,IAAI,OAAQ,WAAW,CAAC,EAAGu7G,EAAU,MACzC,CAACv7G,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAG2gD,EAAS,MACvC,CAAC3gD,EAAG,IAAI,OAAQ,WAAW,CAAC,EAAGk8F,EAAW,MAC1C,CAACl8F,EAAG,IAAI,OAAQ,WAAW,CAAC,EAAGw7G,EAAY,MAC3C,CAACx7G,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAG,CAACy7G,EAAS,MACxC,CAACz7G,EAAG,IAAI,OAAQ,UAAU,CAAC,EAAGo7G,EAAU,eAAe5qH,EAAAf,EAAM,KAAK,WAAX,YAAAe,EAAqB,QAC5E,CAACwP,EAAG,IAAI,OAAQ,QAAQ,CAAC,EAAG21D,EAAO,MACnC,CAAC31D,EAAG,IAAI,OAAQ,WAAW,CAAC,EAAGk3C,EAAS,KAC1C,CAAA,CACD,EACKjoD,EAAS6B,EAAAA,SAAS,IAAM,QACtB7B,MAAAA,EAASQ,EAAM,KAAK,OAE1B,IAAIisH,GAA6B,OAC7BC,GAAY,GAEhB,OAAIjjI,GAAOuW,CAAM,GAAKA,IAAW,QACpBysH,GAAA,OACXC,GAAYP,EAAU,gBAEXnsH,GAAAA,EAGNysH,KAAa,OAChB,GAAElrH,GAAAf,EAAM,KAAK,WAAX,MAAAe,GAAqB,QAAWmrH,IAAa,CAAChmD,EAAO,OACvD,CAAC,CAAC+lD,EAAA,CACP,EACKD,EAAW3qH,EAAAA,SAAS,IACjBpY,GAAO+W,EAAM,KAAK,KAAK,GAAKA,EAAM,KAAK,QAAU,OACpD2rH,EAAU,QAAU,OAClB,CAACnsH,EAAO,MACRmsH,EAAU,MACZ3rH,EAAM,KAAK,KAChB,EACK4rH,EAAcvqH,EAAAA,SAAS,IAAM,CAC3B,MAAA8qH,EAAWnsH,EAAM,KAAK,SAE5B,OAAO/W,GAAOkjI,CAAQ,EAAIR,EAAU,SAAWQ,CAAA,CAChD,EAEKC,EAAiB/qH,EAAAA,SAAS,IAAMsqH,EAAU,cAAc,EACxDU,EAAYv/G,EAAAA,SAAS,CACzB,GAAImK,EACJ,MAAO5V,EAAAA,SAAS,IAAMrB,EAAM,KAAK,KAAK,EACtC,SAAUnG,EACV,SAAU0sD,CAAA,CACX,EAEK35C,QAAA,CAAC,IAAM++G,EAAU,eAAgB,IAAM3rH,EAAM,KAAK,MAAM,EAAashE,GAAA,CACzE4E,EAAO,MAAQ,CAAC5E,EAAO,CAAC,GAAKA,EAAO,CAAC,CAAA,CACtC,EACK10D,QAAA,CAAC,IAAM++G,EAAU,eAAgB,IAAM3rH,EAAM,KAAK,QAAQ,EAAashE,GAAA,CAC3E7Z,EAAS,MAAQ,CAAC6Z,EAAO,CAAC,GAAKA,EAAO,CAAC,CAAA,CACxC,EACD10D,EAAA,MACE,IAAM5M,EAAM,KAAK,GACjB,CAACpX,EAAOiX,KAAS,CACL8rH,EAAA,WAAW,OAAO9rH,EAAI,EACtB8rH,EAAA,WAAW,IAAI/iI,EAAOyjI,CAAS,CAAA,CAE7C,EAEAV,EAAU,WAAW,IAAI3rH,EAAM,KAAK,GAAIqsH,CAAS,EAE7C,IAAAC,EAEJ13G,EAAAA,gBAAgB,IAAM,CACpB,aAAa03G,CAAS,EACtBX,EAAU,WAAW,IAAI3rH,EAAM,KAAK,GAAIqsH,CAAS,CAAA,CAClD,EAMQ,SAAA/hF,EAAsBvhD,EAA0BH,GAAU,CAC/DoX,EAAM,KAAajX,CAAG,EAAIH,EAAA,CAG9B,SAASo+D,GAAc,CACX2kE,EAAA,gBAAgB3rH,EAAM,IAAI,EAEhC2rH,EAAU,aACKnnC,EAAA,CACnB,CAGF,SAASqnB,EAAkB3yG,EAAmB,CAClCyyH,EAAA,sBAAsBzyH,EAAO8G,EAAM,IAAI,CAAA,CAGnD,SAASo+D,EAAkB0K,EAAO,CAAC9oE,EAAM,KAAK,QAAS,CACjDnG,EAAW,OAASmG,EAAM,KAAK,gBAEnCsqC,EAAS,UAAWw+B,CAAI,EACxBx+B,EAAS,UAAW,EAAK,EAEzBh3B,EAAAA,SAAS,IAAM,CACHq4G,EAAA,oBAAoB3rH,EAAM,KAAM8oE,CAAI,CAAA,CAC/C,EAAA,CAGH,eAAe0oB,EAAe1oB,EAAO,CAAC9oE,EAAM,KAAK,SAAU,CAEvD,GAAA,EAAA2rH,EAAU,WACV3rH,EAAM,KAAK,SACXnG,EAAW,OACXmG,EAAM,KAAK,gBACXR,EAAO,OAKT,GAAIspE,GAAQ6iD,EAAU,gBAAkB,CAACzlD,EAAO,MAAO,CACrD57B,EAAS,UAAW,EAAI,EAExB,MAAMh3C,GAAS,MAAMq4H,EAAU,gBAAgB3rH,EAAM,IAAI,EAEzDusH,EAAkBj5H,EAAM,CAAA,MAExBg3C,EAAS,WAAYw+B,CAAI,EAErBA,EACQ6iD,EAAA,iBAAiB3rH,EAAM,IAAI,EAE3B2rH,EAAA,iBAAiB3rH,EAAM,IAAI,CAEzC,CAGF,eAAe6rH,EAAmB/iD,EAAO,CAAC9oE,EAAM,KAAK,SAAU,CAC7D,GAAInG,EAAW,OAASmG,EAAM,KAAK,eAAgB,OAEnD,GAAI2rH,EAAU,YAAa,CACzB,MAAMn6B,EAAe,EACrB,MAAA,CAGI,MAAAr5C,GAAW,CAACoO,EAAW,OAASuiB,GAElC3wB,IAAY,CAACwzE,EAAU,eACzBrhF,EAAS,WAAY6N,EAAQ,EAI3BoO,EAAW,OAASuiB,EACZ6iD,EAAA,iBAAiB3rH,EAAM,IAAI,GAC5B2rH,EAAU,UAAY,CAACA,EAAU,eAChCA,EAAA,iBAAiB3rH,EAAM,IAAI,CACvC,CAGF,SAASwkF,GAAmB,CAChBmnC,EAAA,iBAAiB3rH,EAAM,IAAI,EAClB6rH,EAAA,CAAA,CAGZ,SAAAU,EAAkBh5D,EAAU,GAAM,QACzCjpB,EAAS,UAAW,EAAK,EAChBA,EAAA,WAAYipB,IAAY,EAAK,EAElCA,IAAY,IACdjpB,EAAS,SAAU,EAAI,EACvBA,EAAS,WAAY,EAAK,GAEtBvpC,GAAAf,EAAM,KAAK,WAAX,MAAAe,GAAqB,OACb4qH,EAAA,iBAAiB3rH,EAAM,IAAI,EAErCsqC,EAAS,QAAS,EAAK,GAGzBA,EAAS,WAAY,EAAI,CAC3B,CAGF,SAASkiF,GAAe,CACf,MAAA,CACL,GAAIv1G,EAAQ,MACZ,MAAO0e,EAAQ,MACf,KAAM31B,EAAM,IACd,CAAA,CAGF,SAASu4D,GAAkB,CACpBozD,EAAU,YAEfz6D,EAAS,MAAQ,GACPy6D,EAAA,oBAAoBa,GAAc,EAAA,CAG9C,SAAShf,EAAet0G,EAAkB,CACpC,CAACyyH,EAAU,WAAa,CAACA,EAAU,WAEvC,aAAaW,CAAS,EACtBpzH,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EAErBuzG,EAAW,MAAQ,GAETkf,EAAA,mBAAmBa,EAAa,EAAGtzH,CAAK,EAAA,CAGpD,SAASw0G,EAAgBx0G,EAAkB,CACpCyyH,EAAU,YAEf,aAAaW,CAAS,EACtBpzH,EAAM,eAAe,EAErBozH,EAAY,WAAW,IAAM,CAC3B7f,EAAW,MAAQ,IAClB,GAAG,EAAA,CAGR,SAASgB,GAAWv0G,EAAkB,CAChC,CAACyyH,EAAU,WAAa,CAACA,EAAU,WAEvC,aAAaW,CAAS,EACtBpzH,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EAErBuzG,EAAW,MAAQ,GAETkf,EAAA,eAAea,GAAc,EAAA,CAGzC,SAAS7zD,GAAcz/D,EAAkB,CACnC,CAACyyH,EAAU,WAAa,CAACA,EAAU,WAEvCzyH,EAAM,gBAAgB,EACtBg4D,EAAS,MAAQ,GACPy6D,EAAA,kBAAkBa,GAAc,EAAA,4BAK1C,EAAAn6G,EAAA,mBAiKK,KAjKLK,EAAA,WAiKKF,EAhKW,OAAA,SACV,UAAJ,IAAIyE,EACH,MAAOrT,EAAS,MAChB,UAAWsO,EAAAA,MAASy5G,CAAA,EAAC,UACtB,SAAS,KACR,gBAAe9xH,EAAU,MACzB,eAAcqY,EAAS,MAAAy5G,CAAA,EAAC,WAAaz6D,EAAA,aAAoB,OACzD,QAAUh/C,EAAA,MAAE3B,CAAA,EAAC,GAAc,OAAA,CAAA,EAAAgB,EAAA,KAAK,KAAK,EACrC,wBAAYy1C,EAAW,CAAA,MAAA,CAAA,EACvB,cAAa6kD,EACb,0BAAOhkE,EAAO,MAAA,IACd,yBAAMA,EAAO,MAAA,IACb,4BAAgB0wB,EAAe,CAAA,MAAA,CAAA,EAC/B,WAAUi1C,EACV,YAAWE,EACX,UAAS/0C,GACT,OAAM80C,EAAA,IAEPl7F,aA6IOC,EAAA,OAAA,UAAA,CA5IJ,KAAMjB,EAAI,KAAC,KACX,KAAMA,EAAI,KACV,MAAOA,EAAI,KAAC,MACZ,QAASs2B,EAAO,MAChB,UAAY,EACZ,YAAct2B,EAAI,KAAC,YACnB,YAAc6sD,EACd,aAAeozB,EACf,aAAeq6B,CAAA,EATlB,IA6IO,CAlIWE,EAAW,qBAA3B15G,EAAAA,mBAiBWqsB,EAAAA,SAAA,CAAA,IAAA,GAAA,EAhBT2B,EAAAA,UAAA,EAAA,EAAAhuB,EAAA,mBAUOqsB,6BATwBntB,EAAI,KAAC,YAA1B,CAAAk7G,GAAW37H,oBADrBuhB,EAAA,mBAUO,MAAA,CARJ,IAAKvhB,GACL,MAAKwhB,EAAAA,eAAA,CAAgBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,WAAA,EAA2B2B,EAAAA,MAAA3B,CAAA,EAAG,IAAG,YAAA,UAAA,GAAwCzf,IAASohB,EAAAA,MAAE3B,CAAA,EAAC,IAAG,YAAA,OAAA,CAAA,GAKlH,MAAUo1C,EAAAA,eAAA,CAAA,CAAAzzC,QAAA3B,CAAA,EAAG,uBAAwBk8G,GAAS,EAC/C,cAAY,MAAA,kBAGdh6G,EAAAA,mBAGO,MAAA,CAFJ,wBAAQP,EAAE,MAAA3B,CAAA,EAAC,GAAiB,WAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,YAAA,YAAA,CAAA,CAAA,EACnC,cAAY,kDAGhBkC,EAAAA,mBA+GM,MAAA,CA9GH,MAAKH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,GAA+B,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA2B,UAAA,QAAA,CAAA,EAAA2B,EAAAA,MAAAy5G,CAAA,EAAU,YAAwB,CAAAz5G,EAAAA,MAAA3B,CAAA,EAAG,IAAG,UAAA,UAAA,CAAA,EAAsC2B,EAAAA,MAAAy5G,CAAA,EAAU,cAAgB9xH,SAAc0X,EAAA,KAAK,oBAOlNkB,EAAAA,mBAuBO,OAAA,SAtBD,UAAJ,IAAIkjB,EACH,MAAKrjB,EAAAA,eAAA,CAAiB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,EAAA,GAA+B,CAAA2B,QAAA3B,CAAA,EAAG,IAAG,QAAA,aAAA,CAAA,EAAA,CAA4BgB,OAAK,UAAYy6G,EAAQ,MAAe,CAAA95G,EAAA,MAAA3B,CAAA,EAAG,IAA2B,QAAA,UAAA,CAAA,EAAAgB,EAAA,KAAK,SAAuB,CAAAW,QAAA3B,CAAA,EAAG,IAAG,QAAA,UAAA,CAAA,EAAwB1W,SAAc0X,EAAA,KAAK,cAAA,GAM/O,cAAc,CAAAA,EAAA,KAAK,UAAYy6G,EAAQ,MACvC,0CAAYx6B,IAAc,CAAA,MAAA,CAAA,EAAA,GAEfjgF,EAAA,KAAK,qBAAjB,EAAAY,EAAA,YAAwED,QAAApO,EAAA,EAAxE4O,EAAA,WAAwE,CAAtC,IAAA,CAAA,EAAAR,EAAAA,MAAA5I,CAAA,EAAM,QAAO,CAAE,MAAM,SAAS,CAAA,EAAA,KAAA,EAAA,GAChEiJ,EAUO,WAAAC,EAAA,OAAA,QAAA,OAPJ,KAAMjB,EAAI,KAAC,KACX,KAAMA,EAAI,KACV,MAAOA,EAAI,KAAC,MACZ,QAASs2B,EAAO,KAAA,EANnB,IAUO,CAFO31B,QAAAy5G,CAAA,EAAU,uBAAtB,EAAAx5G,cAAoED,EAAAA,MAAApO,EAAA,EAAA,OAAlC,KAAMoO,EAAAA,MAASy5G,CAAA,EAAC,4CAClDx5G,EAAwE,YAAAD,EAAA,MAAApO,EAAA,EAAAmiD,EAAAA,eAAAvzC,EAAAA,WAAA,CAAA,IAAA,CAAnD,EAAAR,EAAA,SAAQA,QAAA5I,CAAA,EAAM,UAAY4I,EAAA,MAAK5I,CAAA,EAAC,UAAU,CAAA,EAAA,KAAA,EAAA,aAI3DsiH,EAAA,QAAgBQ,EAAc,qBADtCj6G,EAAA,YAUYD,QAAAysD,EAAA,EAAA,OARV,QAAA,GACC,MAAKrsD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EACZ,YAAW,GACX,QAASy7G,EAAQ,MACjB,QAASz6G,EAAI,KAAC,QACd,SAAU1X,EAAA,OAAc0X,EAAA,KAAK,cAC7B,QAASA,EAAI,KAAC,QACd,0CAAoB6sD,EAAiB,EAAA,CAAA,UAAA,MAAA,CAAA,4FAExC3rD,EAAAA,mBAwDM,MAAA,CAvDH,MAAKH,EAAAA,eAAA,CAAiB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,EAAA,GAA+B,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAA0B,QAAA,QAAA,CAAA,EAAA,CAAA2B,EAAAA,MAAAy5G,CAAA,EAAU,YAA0B,CAAAz5G,EAAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,UAAA,CAAA,EAAuC,CAAA2B,QAAAy5G,CAAA,EAAU,cAAgB9xH,SAAc0X,EAAA,KAAK,eAAA,GAMrN,QAAQs+B,GAAA,CAAA,IAAAA,GAAA,CAAA,EAAAmL,IAAA,CAAA9oC,EAAAA,MAAAy5G,CAAA,EAAU,aAAennC,EAAgB,EAAA,GAEvCtyE,QAAAy5G,CAAA,EAAU,gBAAkBltF,EAAAA,OAAO,sBAA9CpsB,EAAA,mBAcM,MAAA,OAdiD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAEzD2B,QAAAy5G,CAAA,EAAU,4BADlB,EAAAx5G,cAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUa,EAAAA,MAASy5G,CAAA,EAAC,eACpB,KAAI,CAAA,KAAIp6G,EAAI,KAAA,MAASA,EAAI,KAAC,MAAK,KAAQA,EAAI,KAAC,KAAI,QAAEs2B,EAAO,KAAA,CAAA,+BAE5Dt1B,aAOQC,EAAA,OAAA,SAAA,OAJL,KAAMjB,EAAI,KAAC,KACX,KAAMA,EAAI,KACV,MAAOA,EAAI,KAAC,MACZ,QAASs2B,EAAO,yCAGrBp1B,EAAAA,mBAgBM,MAAA,CAhBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAER2B,QAAAy5G,CAAA,EAAU,sBADlB,EAAAx5G,cAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUa,EAAAA,MAASy5G,CAAA,EAAC,SACpB,KAAI,CAAA,KAAIp6G,EAAI,KAAA,MAASA,EAAI,KAAC,MAAK,KAAQA,EAAI,KAAC,KAAI,QAAEs2B,EAAO,KAAA,CAAA,+BAE5Dt1B,aASOC,EAAA,OAAA,QAAA,OANJ,KAAMjB,EAAI,KAAC,KACX,KAAMA,EAAI,KACV,MAAOA,EAAI,KAAC,MACZ,QAASs2B,EAAO,KAAA,EANnB,IASO,CADFl1B,kBAAAC,EAAAA,gBAAArB,EAAA,KAAK,KAAKW,EAAA,MAAAy5G,CAAA,EAAU,QAAQ,CAAA,EAAA,CAAA,QAGxBz5G,QAAAy5G,CAAA,EAAU,gBAAkBltF,EAAAA,OAAO,sBAA9CpsB,EAAA,mBAcM,MAAA,OAdiD,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GAEzD2B,QAAAy5G,CAAA,EAAU,4BADlB,EAAAx5G,cAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUa,EAAAA,MAASy5G,CAAA,EAAC,eACpB,KAAI,CAAA,KAAIp6G,EAAI,KAAA,MAASA,EAAI,KAAC,MAAK,KAAQA,EAAI,KAAC,KAAI,QAAEs2B,EAAO,KAAA,CAAA,+BAE5Dt1B,aAOQC,EAAA,OAAA,SAAA,OAJL,KAAMjB,EAAI,KAAC,KACX,KAAMA,EAAI,KACV,MAAOA,EAAI,KAAC,MACZ,QAASs2B,EAAO,6CAKf+jF,EAAA,OAAeQ,EAAc,qBADrCj6G,EAAA,YAUYD,QAAAysD,EAAA,EAAA,OARV,QAAA,GACC,wBAAQzsD,EAAE,MAAA3B,CAAA,EAAC,GAAgB,UAAA,EAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,WAAA,QAAA,CAAA,CAAA,EACjC,YAAW,GACX,QAASy7G,EAAQ,MACjB,QAASz6G,EAAI,KAAC,QACd,SAAU1X,EAAA,OAAc0X,EAAA,KAAK,cAC7B,QAASA,EAAI,KAAC,QACd,0CAAoB6sD,EAAiB,EAAA,CAAA,UAAA,MAAA,CAAA,8GC9dnCsuD,GAAYv/G,GAAW,CAClC,OAAQiB,GAAiB,EACzB,MAAO,CACL,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,KAAM,MACN,YAAarB,EACb,UAAW,OACX,SAAUA,EACV,SAAUA,EACV,SAAUA,EACV,eAAgBA,EAChB,SAAU,SACV,eAAgB,SAChB,eAAgB,SAChB,SAAUA,EACV,OAAQ,CAAC,OAAQ,MAAM,EACvB,UAAWA,EACX,UAAWA,EACX,OAAQA,EACR,YAAaA,EACb,YAAa,SACb,UAAWA,EACX,OAAQ,CAAC,OAAQ,MAAM,EACvB,UAAW,OACX,WAAYA,EACZ,OAAQ,CAAC,OAAQ,QAAQ,EACzB,WAAYA,EACZ,UAAW,CAAC,OAAQ,QAAQ,EAC5B,SAAU,CACR,KAAM,CAAC,QAAS,MAAM,EACtB,QAAS,IACX,EACA,WAAY,SACZ,QAASA,EACT,cAAe,OACf,QAASA,EACT,aAAcA,EACd,UAAWyB,GACX,YAAazB,EACb,WAAYA,EACZ,aAAcA,EACd,MAAO,OACP,aAAcmB,EAAuE,EACrF,YAAaA,EAAqD,EAClE,aAAcA,EAAgF,EAC9F,aAAcA,EAAqD,EACnE,aAAcA,EAAqD,EACnE,aAAcA,EAAqD,EACnE,kBAAmBA,EAAwE,EAC3F,YAAaA,EAAqD,EAClE,WAAYA,EAAqD,EACjE,OAAQA,EAA6E,EACrF,UAAWA,EAAqD,EAChE,aAAcA,EAAqD,CACrE,CAAC,+ECrBK,MAAAlO,EAAQiM,GAAS,OADRsF,EACwB,CACrC,MAAO,CACL,QAAS,OACT,UAAW3oB,IAAS,OAAOA,IAAU,WAAaA,KAAU,MAC9D,EACA,KAAM,CACJ,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,YAAa,GACb,UAAW,KACX,SAAU,GACV,SAAU,GACV,SAAU,GACV,eAAgB,GAChB,SAAU,CACR,QAAS,KACT,OAAQ,EACV,EACA,eAAgB,CACd,QAAS,KACT,OAAQ,EACV,EACA,eAAgB,CACd,QAAS,KACT,OAAQ,EACV,EACA,SAAU,GACV,OAAQ,OACR,UAAW,GACX,UAAW,GACX,OAAQ,GACR,YAAa,GACb,YAAa,CACX,QAAS,KACT,OAAQ,EACV,EACA,UAAW,GACX,OAAQ,KACR,UAAW,KAAO,CAAA,GAClB,WAAY,GACZ,OAAQ,GACR,WAAY,GACZ,UAAW,KACX,SAAU,GACV,WAAY,CACV,QAAS,KACT,OAAQ,EACV,EACA,QAAS,GACT,cAAe,CACb,QAAS,GACT,cAAoBA,GAAQ,CAC9B,EACA,QAAS,GACT,aAAc,GACd,UAAW6lB,GAAe,EAC1B,YAAa,GACb,WAAY,GACZ,aAAc,GACd,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKvK,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,MAAM,EACzB3I,EAASI,GAAU,OAAQ07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EAEjD2sH,MAAc,IACdC,MAAkB,IAClBC,EAAYn7G,EAAqB,IAAA,EAAE,EACnCo7G,EAAep7G,EAAqB,IAAA,EAAE,EACtCw/C,EAAWx/C,MAAI,EAAK,EACpBysG,EAAgBzsG,MAAI,EAAK,EACzBqwC,EAAYj1C,EAAAA,SAAS,CAAE,GAAG8zC,GAAkB,EAC5CmsE,EAAajgH,EAAAA,SAAa,IAAA,GAAyB,EACnDkgH,EAAYt7G,MAAI,EAAK,EACrBu7G,EAAiBv7G,EAAqB,IAAA,EAAE,EACxCw7G,EAAkBx7G,EAAAA,IAAQ,IAAA,GAAU,EAEpC,CAAE,MAAA/V,CAAM,EAAI66B,GAAc,EAC1B,CAAE,UAAArc,CAAU,EAAIF,GAAW,EAE3BkoC,EAAczwC,EAAAA,IAAwB,EACtCy7G,EAAOz7G,EAAAA,IAAiB,EACxBqtG,EAAYrtG,EAAAA,IAAiB,EAE7BuF,EAAU5V,EAAA,SAAS,IAAM,QAAA,OAAAN,GAAAohD,EAAY,QAAZ,YAAAphD,GAAmB,QAAO,EAEzD,IAAIqsH,EAAgC,CAAC,EAErC,MAAMC,EAAwB,CAC5B,QAAS,GACT,SAAU,GACV,SAAU,GACV,SAAU,GACV,QAAS,GACT,QAAS,GACT,OAAQ,GACR,SAAU,GACV,SAAU,GACV,MAAO,OAEP,SAAU,KACV,eAAgB,GAChB,eAAgB,GAChB,cAAe,GACf,OAAQ,MACV,EAEMC,EAAiBjsH,EAAAA,SAAS,IAAM,OAAOrB,EAAM,aAAgB,UAAU,EACvEutH,EAAWlsH,EAAAA,SAAS,IACjBrB,EAAM,WAAa,GAAO,SAAWA,EAAM,WAAa,OAAS,GAAQA,EAAM,QACvF,EACK2Q,EAAQtP,EAAAA,SAAS,KACd,CACL,CAACkP,EAAG,GAAG,cAAc,CAAC,EAAG,OAAOvQ,EAAM,QAAW,SAAW,GAAGA,EAAM,MAAM,KAAOA,EAAM,OACxF,CAACuQ,EAAG,GAAG,gBAAgB,CAAC,EAAGg9G,EAAS,OAAS,MAC/C,EACD,EACKC,EAAensH,EAAAA,SAAS,IAAMosH,GAAUZ,EAAU,KAAK,CAAC,EACxDa,EAAgBrsH,EAAAA,SAAS,IACtB2rH,EAAU,MAAQC,EAAe,MAAQO,EAAa,KAC9D,EACKG,EAActsH,EAAAA,SAAS,IACpB,OAAOrB,EAAM,WAAc,WAAaA,EAAM,UAAY,IAAMA,EAAM,SAC9E,EAED,SAAS4tH,EAAoBhlI,GAAe,CAC1C,MAAMiN,EAAUmK,EAAM,WAAa,OAAOpX,EAAK,EAAE,oBAAsBA,GAShE,OARiCiP,IAAA,CAChC,MAAAoY,GAAQpY,GAAKkqD,EAAU,KAAK,EAElC,OAAO/hD,EAAM,WACT,OAAOiQ,EAAK,EAAE,kBAAkB,EAAE,SAASpa,CAAO,EAClD,OAAOoa,EAAK,EAAE,SAASpa,CAAO,CACpC,CAEO,CAGH,MAAAg4H,EAAuB/xH,GAAS,IAAM,CACtCmb,EAAQ,QACOm2G,EAAA/zH,GAAS,IAAIkX,EAAG,GAAG,MAAM,CAAC,GAAI0G,EAAQ,KAAK,IAE7D,GAAG,EAEN,IAAI62G,EAAgB,GAEpB,SAASC,GAAoB,CACXD,EAAA,GAEhBx6G,EAAAA,SAAS,IAAM,CACGw6G,EAAA,EAAA,CACjB,CAAA,CAEHpiH,EAAAA,YAAY,IAAM,CAChB,MAAMsiH,GAAQlB,EAAa,MAIvB,GAFciB,EAAA,EAEb/tH,EAAM,OAQJ,CACC,MAAAxB,EACJ,OAAOwB,EAAM,QAAW,WAAaA,EAAM,OAAS4tH,EAAoB5tH,EAAM,MAAM,EAChFT,GAAWS,EAAM,WAEd,QAAA5V,GAAI,EAAG4H,GAAMg8H,GAAM,OAAQ5jI,GAAI4H,GAAK,EAAE5H,GAAG,CAC1C,MAAAs6B,EAAOspG,GAAM5jI,EAAC,EAEpB,GAAImV,IAAY,CAAC0uH,EAAWvpG,CAAI,EAAG,CACjCA,EAAK,QAAU,GACfA,EAAK,aAAe,GACpBA,EAAK,aAAe,GAEpB,QAAA,CAGF,MAAM/sB,GAAS+sB,EAAK,OAASioG,EAAQ,IAAIjoG,EAAK,MAAM,EAAI,OAMxD,GAJAA,EAAK,QAAUlmB,EAAOkmB,EAAK,KAAMA,CAAI,EACrCA,EAAK,aAAe,GACpBA,EAAK,aAAe,CAAC,CAAC/sB,KAAWA,GAAO,SAAWA,GAAO,cAEtD+sB,EAAK,QAAS,CAChB,IAAIwpG,GAAQv2H,GAEL,KAAAu2H,IAAS,CAACA,GAAM,cACrBA,GAAM,aAAe,GACrBA,GAAM,SAAW,GACjBA,GAAQA,GAAM,OAASvB,EAAQ,IAAIuB,GAAM,MAAM,EAAI,MACrD,CACF,CACF,KAtCS,SAAA9jI,EAAI,EAAG4H,GAAMg8H,GAAM,OAAQ5jI,EAAI4H,GAAK,EAAE5H,EAAG,CAC1C,MAAAs6B,GAAOspG,GAAM5jI,CAAC,EAEpBs6B,GAAK,QAAU,GACfA,GAAK,aAAe,GACpBA,GAAK,aAAe,EAAA,CAoCVypG,GAAA,CAAA,CACf,EACDziH,EAAA,YAAY,IAAM,OAAO,OAAOq2C,EAAW/hD,EAAM,SAAS,CAAC,EAC3D0L,EAAAA,YAAY,IAAM,CAChB,MAAM0iH,GAASlB,EAAgB,MACzBrrD,MAAU,IAEhB,IAAI5yB,GAAU,GAEH,UAAAvqB,MAAQooG,EAAa,MAC1BpoG,GAAK,WACHm9C,EAAA,IAAIn9C,GAAK,EAAE,EAEX,CAACuqB,IAAW,CAACm/E,GAAO,IAAI1pG,GAAK,EAAE,IACvBuqB,GAAA,MAKZA,IAAW4yB,EAAI,OAASusD,GAAO,QACjClB,EAAgB,MAAQrrD,EAC1B,CACD,EACDj1D,EAAA,MACE,CACE,IAAM5M,EAAM,KACZ,IAAMA,EAAM,KAAK,OACjB,IAAM+hD,EAAU,GAChB,IAAMA,EAAU,SAChB,IAAMA,EAAU,OAChB,IAAM/hD,EAAM,MACd,EACAquH,GACA,CAAE,UAAW,EAAK,CACpB,EACAzhH,EAAA,MACE,CAACigH,EAAW,IAAM7sH,EAAM,MAAM,EAC9B,IAAM,CACS8sH,EAAA,MAAQ1uH,GAASyuH,EAAU,MAAO,CAC7C,SAAU,KACV,YAAa,SACb,WAAY,WACZ,OAAQ7sH,EAAM,OACd,SAAU,GACV,WAAY,EAAA,CACb,CACH,EACA,CAAE,UAAW,EAAK,CACpB,EACM4M,EAAAA,MAAAsgH,EAAiB,CAACtkI,GAAOiX,IAAS,iBAKtC,GAJIG,EAAM,cACa6tH,EAAA,EAGnB7tH,EAAM,cAAgB8tH,GAAiB,CAAC72G,EAAQ,MAAO,OAEvD,IAAAq3G,GACAC,GAEJ,UAAWrwH,MAAMtV,GACf,GAAI,CAACiX,EAAK,IAAI3B,EAAE,EAAG,CACjB,GAAIowH,IAAW,KAAM,OAEXA,GAAApwH,EAAA,CAId,UAAWA,MAAM2B,EACf,GAAI,CAACjX,GAAM,IAAIsV,EAAE,EAAG,CAClB,GAAIqwH,IAAa,KAAM,OAEXA,GAAArwH,EAAA,CAKhB,GADIowH,IAAW,MAAQC,IAAa,MAEjCD,IAAW,GAAC34G,IAAA5U,GAAA4rH,EAAQ,IAAI2B,EAAO,IAAnB,YAAAvtH,GAAsB,WAAtB,MAAA4U,GAAgC,SAC5C44G,IAAa,GAAC5uF,IAAA/pB,GAAA+2G,EAAQ,IAAI4B,EAAS,IAArB,YAAA34G,GAAwB,WAAxB,MAAA+pB,GAAkC,QAEjD,OAEF,aAAahkC,EAAM,MAAM,EAEzB6yH,GAAa,MAAQ,GACrBxB,EAAU,MAAQ,GAEd,IAAAyB,GAEAH,IAAW,OACKG,GAAA5uH,GAGhB0uH,IAAa,OACVE,IAGeA,GAAA,IAAI,IAAIA,EAAe,EACzCA,GAAgB,OAAOF,EAAS,GAHdE,GAAA7lI,IAOtB,MAAM8lI,EAAYjB,GAAUZ,EAAU,MAAO4B,EAAgB,EAEvDvxE,GAAUl9C,EAAM,QAChB84B,GAAa7hB,EAAQ,MAAM,aAC3B03G,GAAa3uH,EAAM,eAAiB,EACpC4uH,GAAY,KAAK,KAAK91F,GAAa61F,EAAU,EAAI,EAEjD/vH,GAAO,CACX0vH,IAAW,MAAQ,CAAE,GAAIA,GAAS,KAAM,QAAS,EACjDC,IAAa,MAAQ,CAAE,GAAIA,GAAW,KAAM,QAAS,CACvD,EAEA,UAAWhlE,MAAQ3qD,GAAM,CACvB,GAAI,CAAC2qD,GAAM,SAEL,KAAA,CAAE,GAAArrD,GAAI,KAAArV,EAAA,EAAS0gE,GACfz4D,GAAQ49H,EAAU,UAAkBhqG,IAAAA,GAAK,KAAOxmB,EAAE,EAExD,GAAI,CAACpN,GAAO,CACJ,MAAAgO,GAAW4vH,EAAU59H,EAAK,EAAE,SAElC,GAAIgO,IAAA,MAAAA,GAAU,OAAQ,CACd,MAAA+vH,GAAapB,GAAU3uH,GAAUlW,EAAK,EAElC8lI,EAAA,OAAO59H,GAAQ,EAAG,EAAG,CAC7B,GAAI,OAAO,qBAAqB,EAChC,SAAU,GACV,KAAAjI,GACA,OAAQq0D,GAAU2xE,GAAW,OAASF,GAAa,OACnD,MAAOzxE,GAAU2xE,GAAW,MAAM,EAAGD,EAAS,EAAIC,EAAA,CAC5C,CAAA,CACV,CACF,CAGF5B,EAAe,MAAQyB,CAAA,CACxB,EAED5sH,EAAA,QACE2pH,GACA3+G,WAAS,CACP,MAAOsxB,EAAAA,MAAMp+B,EAAO,OAAO,EAC3B,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,eAAgBo+B,EAAAA,MAAMp+B,EAAO,gBAAgB,EAC7C,WAAYo+B,EAAAA,MAAMp+B,EAAO,YAAY,EACrC,SAAAutH,EACA,QAASnvF,EAAAA,MAAMp+B,EAAO,SAAS,EAC/B,SAAUo+B,EAAAA,MAAM2jB,EAAW,OAAO,EAClC,UAAW3jB,EAAAA,MAAMp+B,EAAO,WAAW,EACnC,YAAao+B,EAAAA,MAAMp+B,EAAO,aAAa,EACvC,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,eAAgBo+B,EAAAA,MAAMp+B,EAAO,gBAAgB,EAC7C,eAAgBo+B,EAAAA,MAAMp+B,EAAO,gBAAgB,EAC7C,UAAWo+B,EAAAA,MAAMp+B,EAAO,WAAW,EACnC,YAAao+B,EAAAA,MAAMp+B,EAAO,aAAa,EACvC,SAAAkxD,EACA,eAAAo8D,EACA,WAAAP,EACA,UAAAC,EACA,aAAc5uF,EAAAA,MAAMp+B,EAAO,cAAc,EACzC,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,cAAA+lB,GACA,qBAAA8nG,EACA,oBAAAiB,EACA,gBAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,iBAAAC,GACA,sBAAAC,EACA,gBAAAC,GACA,oBAAAC,GACA,mBAAAC,GACA,eAAAC,GACA,kBAAAC,GACA,oBAAAC,GACA,kBAAAC,GACA,iBAAAnrC,CACD,CAAA,CACH,EACA1iF,EAAA,QACE4pH,GACA5+G,WAAS,CACP,MAAO,GACP,SAAUsxB,EAAAA,MAAMp+B,EAAO,UAAU,EACjC,SAAUo+B,EAAAA,MAAMp+B,EAAO,UAAU,CAClC,CAAA,CACH,EAEa8R,EAAA,CACX,UAAA+6G,EACA,aAAAC,EACA,SAAA57D,EACA,UAAA87D,EAEA,YAAA7qE,EACA,KAAAgrE,EACA,UAAApO,EAEA,cAAAnnC,GACA,WAAAq2C,EACA,sBAAAI,GACA,gBAAAuB,GACA,sBAAAC,GACA,gBAAAC,GACA,mBAAAC,GACA,iBAAAC,GACA,oBAAAC,GACA,iBAAAC,GACA,iBAAAC,GACA,cAAApqG,GACA,gBAAAqqG,GACA,gBAAAC,GACA,mBAAAC,GACA,mBAAAC,GACA,cAAAC,GACA,iBAAAC,GACA,iBAAAC,GACA,gBAAAC,GACA,wBAAAC,GACA,kBAAAC,GACA,YAAAC,GACA,eAAAC,GACA,qBAAAlD,CAAA,CACD,EAEDp5G,EAAAA,UAAUo5G,CAAoB,EAE9B,KAAM,CAAE,oBAAAntD,EAAqB,kBAAAC,EAAkB,EAAI6uC,GAAmB,CACpE,QAASzmH,IAAO4jI,EAAQ,IAAI5jI,EAAG,EAC/B,gBAAqB27B,GAAK,QAAA,CAC3B,EAED,SAASygD,IAAa,CACb,MAAA,kBAAkB30E,IAAgB,EAAA,CAG3C,SAASy9H,EAAWvpG,GAAqB,QACvC,MAAMllB,EAASklB,GAAK,OAEpB,IAAIunG,GAA6B,OAC7BC,GAAY,GAEhB,OAAIjjI,GAAOuW,CAAM,GAAKA,IAAW,QACpBysH,GAAA,OACXC,GAAYoB,EAAe,OAEhBrB,GAAAzsH,EAGNysH,KAAa,OAAS,GAAElrH,GAAA2jB,GAAK,WAAL,MAAA3jB,GAAe,QAAWmrH,IAAa,CAACxnG,GAAK,QAAW,CAAC,CAACunG,EAAA,CAGlF,SAAAwB,GAAUO,GAAwBgD,EAAwB,CAC3D,MAAAC,GAAY,IAAI,IAAIjD,EAAK,EAE/B,OAAO5vH,GAAS4vH,GAAO,CACrB,SAAU,KACV,YAAa,SACb,WAAY,WACZ,SAAU,GACV,WAAY,GACZ,SAAU,GACV,OAAgBtpG,IAAA,CACV,GAAAusG,GAAU,IAAIvsG,EAAI,EACpB,OAAOA,GAAK,SAAWA,GAAK,cAAgBA,GAAK,aAG7C,MAAAyB,GAAaJ,GAAcrB,EAAI,EAErC,OACEA,GAAK,UACJA,GAAK,SAAWA,GAAK,cAAgBA,GAAK,gBAC1C,CAACyB,KAAe6qG,EAAcA,EAAY,IAAI7qG,GAAW,EAAE,EAAIA,GAAW,UAAA,CAE/E,CACD,CAAA,CAGH,SAAS+qG,GAAWxsG,GAAsC,CACxD,OAAOA,GAAK,QAAA,CAGd,SAASysG,IAAoB,CAC3BlyH,GAAS4tH,EAAU,MAAO,CAACnoG,GAAMxlB,IAAU,CAIzC,GAHAwlB,GAAK,MAAQxlB,EACRwlB,GAAA,YAAc,CAAC,CAAC,EAEjBA,GAAK,QAAUioG,EAAQ,IAAIjoG,GAAK,MAAM,EAAG,CAC3C,MAAM/sB,GAASg1H,EAAQ,IAAIjoG,GAAK,MAAM,EAEtCA,GAAK,KAAO3nB,GAAQpF,GAAO,QAAQ,IAAM+sB,GACzCA,GAAK,aAAe,CAAC/sB,GAAO,KAAM,GAAGA,GAAO,YAAY,CAAA,MAExD+sB,GAAK,KAAO3nB,GAAQ8vH,EAAU,KAAK,IAAMnoG,GACzCA,GAAK,aAAe,CAAC,EAGvB,QAASt6B,GAAI,EAAGA,GAAI8U,EAAO,EAAE9U,GACtBs6B,GAAK,aAAat6B,GAAI,CAAC,GACrBs6B,GAAA,YAAY,KAAKt6B,EAAC,CAE3B,CACD,CAAA,CAGH,SAASgnI,GAAepD,GAAwB,CACpCnB,EAAA,MAAQlvH,GAAcqwH,GAAO,CACrC,SAAU,KACV,YAAa,SACb,WAAY,WACZ,OAAQhuH,EAAM,MAAA,CACf,EAEiBmxH,GAAA,CAAA,CAGpB,SAAS9C,IAAwB,CAC/B,MAAMt3F,GAAQgrB,EAAU,GAClBu2D,MAAiB,IACjB+Y,OAAe,IAEV,UAAA3sG,MAAQioG,EAAQ,SACdrU,EAAA,IAAI5zF,GAAK,KAAMA,EAAI,EAC9B2sG,GAAS,IAAI3sG,GAAK,KAAKqS,EAAK,EAAGrS,EAAI,EAGrCioG,EAAQ,MAAM,EACdC,EAAY,MAAM,EAElB,MAAMoB,GAAyB,CAAC,EAEhC,GAAIhuH,EAAM,YACRf,GACEe,EAAM,KACN,CAACjI,GAAMkJ,EAAGtJ,KAAW,QACb,MAAA25H,GAAUhZ,EAAW,IAAIvgH,EAAI,EAC7BmG,IAAKozH,IAAA,YAAAA,GAAS,KAAMnsD,GAAW,EAC/BzgD,GAAO1kB,EAAM,UACdsxH,IAAWC,EAAex5H,EAAI,EAC/Bw5H,EAAex5H,GAAMu5H,EAAO,EAEhC5sG,GAAK,GAAKxmB,GACVwmB,GAAK,OAAS/sB,IAASoJ,GAAA6rH,EAAY,IAAIj1H,EAAM,IAAtB,YAAAoJ,GAAyB,GAAK,OAE7C4rH,EAAA,IAAIjoG,GAAK,GAAIA,EAAI,EACzBspG,GAAM,KAAKtpG,EAAI,EACHkoG,EAAA,IAAI70H,GAAM2sB,EAAI,CAC5B,EACA,CAAE,WAAYq9B,EAAU,SAAU,WAAY,EAAK,CACrD,MACK,CACL,MAAMlqD,GAAOmI,EAAM,KAEV,QAAA5V,EAAI,EAAG4H,GAAM6F,GAAK,OAAQzN,EAAI4H,GAAK,EAAE5H,EAAG,CACzC,MAAA2N,GAAOF,GAAKzN,CAAC,EACbknI,GAAUhZ,EAAW,IAAIvgH,EAAI,GAAKs5H,GAAS,IAAIt5H,GAAKg/B,EAAK,CAAC,EAC1DrS,GAAO1kB,EAAM,UACdsxH,IAAWC,EAAex5H,EAAI,EAC/Bw5H,EAAex5H,GAAMu5H,EAAO,EAExB3E,EAAA,IAAIjoG,GAAK,GAAIA,EAAI,EACzBspG,GAAM,KAAKtpG,EAAI,EACHkoG,EAAA,IAAI70H,GAAM2sB,EAAI,CAAA,CAC5B,CAKE,GAFJ0sG,GAAepD,EAAK,EAEhB,CAAChuH,EAAM,WAAY,CACrB,MAAMwxH,GAAe1E,EAAa,MAAM,OAAO/0H,GAAQA,EAAK,OAAO,EAE1D,QAAA3N,EAAI,EAAG4H,GAAMw/H,GAAa,OAAQpnI,EAAI4H,GAAK,EAAE5H,EAAG,CACjD,MAAA2N,GAAOy5H,GAAapnI,CAAC,EACrBqnI,GAAY15H,GAAK,OAEvB4oE,GAAkB5oE,GAAK,EAAE,EAErB05H,IAAa9E,EAAQ,IAAI8E,EAAS,IACrB9E,EAAQ,IAAI8E,EAAS,EAExB,SACV/wD,EAAoB3oE,GAAK,EAAE,EAE/B,CACF,CAGYo2H,GAAA,CAAA,CAGhB,SAASyB,IAAkB,CACzB,MAAM5B,GAAyB,CAAC,EAE1B,CACJ,GAAIj3F,EACJ,QAAS26F,GACT,SAAUC,GACV,SAAUlZ,GACV,SAAU71D,EACV,QAAS21D,GACT,QAASqZ,GACT,OAAQC,GACR,SAAUC,GACV,SAAUC,GACV,MAAOC,GACP,SAAUC,GACV,eAAgBC,GAChB,eAAgBC,GAChB,cAAeC,GACf,OAAQC,EAAA,EACNtwE,EAEEl2B,GAAU,CAACnH,GAAqB3sB,KAAe,CAC7C,KAAA,CACJ,CAAC25H,EAAU,EAAGh1E,GAAUh4B,GAAK,QAC7B,CAACitG,EAAW,EAAGx5E,GAAWzzB,GAAK,SAC/B,CAAC+zF,EAAW,EAAG5yC,EAAWnhD,GAAK,SAC/B,CAACk+B,CAAW,EAAG/uC,GAAW6Q,GAAK,SAC/B,CAAC6zF,EAAU,EAAGx6C,GAAUr5C,GAAK,QAC7B,CAACktG,EAAU,EAAG3rF,GAAUvhB,GAAK,QAC7B,CAACmtG,EAAS,EAAG3rD,GAASxhD,GAAK,OAC3B,CAACotG,EAAW,EAAGrqE,GAAW/iC,GAAK,SAC/B,CAACqtG,EAAW,EAAGpmH,GAAW+Y,GAAK,SAC/B,CAACstG,EAAQ,EAAG1xG,GAAQoE,GAAK,MACzB,CAACutG,EAAW,EAAG9F,EAAWznG,GAAK,SAC/B,CAACwtG,EAAiB,EAAGI,GAAiB5tG,GAAK,eAC3C,CAACytG,EAAiB,EAAGI,GAAiB7tG,GAAK,eAC3C,CAAC0tG,EAAgB,EAAGI,GAAgB9tG,GAAK,cACzC,CAAC2tG,EAAS,EAAG7yH,GAASklB,GAAK,MAAA,EACzB3sB,GAEJ2sB,GAAK,QAAUg4B,GACfh4B,GAAK,SAAWyzB,GAChBzzB,GAAK,SAAWmhD,EAChBnhD,GAAK,SAAW7Q,GAChB6Q,GAAK,QAAUq5C,GACfr5C,GAAK,QAAUuhB,GACfvhB,GAAK,OAASwhD,GACdxhD,GAAK,SAAW+iC,GAChB/iC,GAAK,SAAW/Y,GAChB+Y,GAAK,MAAQpE,GACboE,GAAK,SAAWynG,EAChBznG,GAAK,eAAiB4tG,GACtB5tG,GAAK,eAAiB6tG,GACtB7tG,GAAK,cAAgB8tG,GACrB9tG,GAAK,OAASllB,EAChB,EAEA,GAAIQ,EAAM,YACRf,GACEe,EAAM,KACN,CAACjI,GAAMkJ,GAAGtJ,KAAW,OACf,IAAA+sB,GAAOkoG,EAAY,IAAI70H,EAAI,EAE3B2sB,GACFmH,GAAQnH,GAAM3sB,EAAI,GAElB2sB,GAAO6sG,EAAex5H,EAAI,EAC1B2sB,GAAK,GAAKygD,GAAW,EACrBzgD,GAAK,OAAS/sB,IAASoJ,EAAA6rH,EAAY,IAAIj1H,EAAM,IAAtB,YAAAoJ,EAAyB,GAAK,OAE7C4rH,EAAA,IAAIjoG,GAAK,GAAIA,EAAI,EACbkoG,EAAA,IAAI70H,GAAM2sB,EAAI,GAG5BspG,GAAM,KAAKtpG,EAAI,CACjB,EACA,CAAE,WAAYq9B,EAAU,SAAU,WAAY,EAAK,CACrD,MACK,CACL,MAAMlqD,GAAOmI,EAAM,KAEV,QAAA5V,GAAI,EAAG4H,GAAM6F,GAAK,OAAQzN,GAAI4H,GAAK,EAAE5H,GAAG,CACzC,MAAA2N,GAAOF,GAAKzN,EAAC,EACb8T,EAAKnG,GAAKg/B,CAAK,EAEjB,IAAArS,GAAOioG,EAAQ,IAAIzuH,CAAE,EAErBwmB,GACFmH,GAAQnH,GAAM3sB,EAAI,GAElB2sB,GAAO6sG,EAAex5H,EAAI,EAClB40H,EAAA,IAAIzuH,EAAIwmB,EAAI,GAGtBspG,GAAM,KAAKtpG,EAAI,CAAA,CACjB,CAGF0sG,GAAepD,EAAK,EACNG,GAAA,CAAA,CAGhB,SAAS0B,IAAwB,CAClB/C,EAAA,MAAM,QAAgBpoG,IAAA,CAC7B,GAAA,CAACA,GAAK,KAAM,OAEV,KAAA,CAAE,KAAA7sB,EAAM,QAAA6kD,GAAS,SAAAvE,GAAU,SAAA0tB,GAAU,SAAAhyD,EAAU,QAAAkqD,GAAS,QAAA93B,GAAS,SAAAt6B,EAAA,EAAa+Y,GAEpF7sB,EAAK,QAAU6kD,GACf7kD,EAAK,SAAWsgD,GAChBtgD,EAAK,SAAWguE,GAChBhuE,EAAK,SAAWgc,EAChBhc,EAAK,QAAUkmE,GACflmE,EAAK,QAAUouC,GACfpuC,EAAK,SAAW8T,EAAA,CACjB,EAEawiH,GAAA,CAAA,CAGP,SAAAoD,EAAe15H,GAAY46H,EAAWpF,EAAsC,CAC7E,KAAA,CACJ,GAAIt2F,GACJ,OAAQ06F,GACR,QAASC,GACT,SAAUC,EACV,SAAUlZ,GACV,SAAU71D,GACV,QAAS21D,GACT,QAASqZ,GACT,OAAQC,GACR,SAAUC,GACV,SAAUC,GACV,MAAOC,GACP,SAAUC,GACV,eAAgBC,GAChB,eAAgBC,GAChB,cAAeC,GACf,OAAQC,EAAA,EACNtwE,EAEE,CACJ,CAAC2vE,EAAU,EAAGh1E,GAAU+1E,EAAS,QACjC,CAACd,CAAW,EAAGx5E,GAAWs6E,EAAS,SACnC,CAACha,EAAW,EAAG5yC,GAAW4sD,EAAS,SACnC,CAAC7vE,EAAW,EAAG/uC,EAAW4+G,EAAS,SACnC,CAACla,EAAU,EAAGx6C,GAAU00D,EAAS,QACjC,CAACb,EAAU,EAAG3rF,GAAUwsF,EAAS,QACjC,CAACZ,EAAS,EAAG3rD,GAASusD,EAAS,OAC/B,CAACX,EAAW,EAAGrqE,GAAWgrE,EAAS,SACnC,CAACV,EAAW,EAAGpmH,GAAW8mH,EAAS,SACnC,CAACT,EAAQ,EAAG1xG,GAAQmyG,EAAS,MAC7B,CAACR,EAAW,EAAG9F,GAAWsG,EAAS,SACnC,CAACP,EAAiB,EAAGI,EAAiBG,EAAS,eAC/C,CAACN,EAAiB,EAAGI,GAAiBE,EAAS,eAC/C,CAACL,EAAgB,EAAGI,GAAgBC,EAAS,cAC7C,CAACJ,EAAS,EAAG7yH,GAASizH,EAAS,MAAA,EAC7B56H,GACEqG,GAAK8B,EAAM,YAAc,KAAOnI,GAAKk/B,EAAK,EAC1Cp/B,GAASqI,EAAM,YAAc,KAAOnI,GAAK45H,EAAS,EAElD/sG,GAAO,CACX,GAAAxmB,GACA,OAAAvG,GACA,KAAAE,GACA,QAAA6kD,GACA,SAAAvE,GACA,SAAA0tB,GACA,SAAAhyD,EACA,QAAAkqD,GACA,QAAA93B,GACA,OAAAigC,GACA,SAAAze,GACA,SAAA97C,GACA,MAAA2U,GACA,SAAA6rG,GACA,eAAAmG,EACA,eAAAC,GACA,cAAAC,GACA,OAAAhzH,EACF,EAEI,OAAA,OAAOQ,EAAM,YAAe,YAC9BA,EAAM,WAAW0kB,EAAqB,EAGjC5X,WAAS,CACd,GAAG4X,GACH,GAAAxmB,GACA,OAAAvG,GACA,SAAU,CAAC,EACX,QAAS,GACT,QAAS,GACT,aAAc,GACd,aAAc,GACd,MAAO,GACP,KAAM,GAEN,aAAc,CAAC,EACf,YAAa,CAAA,CAAC,CACf,CAAA,CAGM,SAAAm3H,EAAoBrf,GAA2B3mC,EAAe,CACjE,GAAA,CAAC9oE,EAAM,WAAY,CACf,MAAA0yH,GAAW,CAACjjB,EAAU,EAAE,OAE5Bqd,EAAa,MAAM,OAAO/0H,KAASA,GAAK,UAAYA,GAAK,gBAAkBA,GAAK,OAAO,CACzF,EAES,QAAA3N,GAAI,EAAG4H,GAAM0gI,GAAS,OAAQtoI,GAAI4H,GAAK,EAAE5H,GAAG,CAC7C,MAAA2N,EAAO26H,GAAStoI,EAAC,EAEvBs2E,EAAoB3oE,EAAK,EAAE,EAC3B4oE,GAAkB5oE,EAAK,EAAE,CAAA,CAC3B,CAGFoW,EAAUnO,EAAM,aAAcyvG,GAAW,KAAMA,GAAY3mC,CAAI,CAAA,CAGjE,SAASimD,EAAgBrqG,GAAqB,CAC5CvW,EAAUnO,EAAM,YAAa0kB,GAAK,KAAMA,EAAI,CAAA,CAG9C,SAAS8/D,EAAiB9/D,GAAqB,CAC7CvW,EAAUnO,EAAM,aAAc0kB,GAAK,KAAMA,EAAI,CAAA,CAG/C,SAASsqG,EAAiBtqG,GAAqB,CAC7C,MAAMiuG,EAAgB7F,EAAa,MAAM,OAAO/0H,IAAQA,GAAK,QAAQ,EAErE,GAAIiI,EAAM,SACRmO,EACEnO,EAAM,aACN2yH,EAAc,IAAY56H,IAAAA,GAAK,IAAI,EACnC46H,CACF,MACK,CACL,MAAMC,GAAYluG,GAAK,GAEd,QAAAt6B,GAAI,EAAG4H,GAAM2gI,EAAc,OAAQvoI,GAAI4H,GAAK,EAAE5H,GAAG,CAClD,MAAA2N,EAAO46H,EAAcvoI,EAAC,EAEvB2N,EAAA,SAAWA,EAAK,KAAO66H,EAAA,CAG9BzkH,EAAUnO,EAAM,aAAc0kB,GAAK,KAAMA,EAAI,CAAA,CAC/C,CAGF,SAASuqG,EAAiBvqG,GAAqB,CAC7CvW,EAAUnO,EAAM,aAAc0kB,GAAK,KAAMA,EAAI,CAAA,CAG/C,SAASwqG,EAAiBxqG,GAAqB,CAC7C,GAAI1kB,EAAM,UAAW,CACb,MAAA6yH,EAAexC,GAAgB3rG,EAAI,EAEhC,QAAAt6B,GAAI,EAAG4H,GAAM6gI,EAAa,OAAQzoI,GAAI4H,GAAK,EAAE5H,GACvCyoI,EAAAzoI,EAAC,EAAE,SAAW,EAC7B,CAGF+jB,EAAUnO,EAAM,aAAc0kB,GAAK,KAAMA,EAAI,CAAA,CAG/C,SAASyqG,GAAiBzqG,GAAqB,CAC7CvW,EAAUnO,EAAM,aAAc0kB,GAAK,KAAMA,EAAI,CAAA,CAGtC,SAAA0qG,EAAsBl2H,GAAmBwrB,EAAqB,CACrEvW,EAAUnO,EAAM,kBAAmB9G,GAAOwrB,EAAK,KAAMA,CAAI,CAAA,CAG3D,eAAe2qG,GAAgB3qG,GAAqB,CAC9C,GAAA,CAAC4oG,EAAe,MAAc,MAAA,GAElC,IAAIh6H,EAAS0M,EAAM,YAAY0kB,GAAK,KAAMA,EAAI,EAE1C,OAAAp7B,GAAUgK,CAAM,IAClBA,EAAS,MAAMA,GAGVA,IAAW,EAAA,CAGpB,IAAI2uH,GAKO,KAEX,SAASqN,GAAoBwD,GAAgC,CACtD77G,EAAQ,QAEDgrG,GAAA,CACV,aAAc6Q,GAAa,KAC3B,SAAU77G,EAAQ,MAAM,sBAAsB,EAC9C,aAAc,KACd,SAAU2wF,GAAS,MACrB,EAEA12C,EAAS,MAAQ,GACjB/iD,EAAUnO,EAAM,YAAa8yH,GAAa,KAAK,KAAMA,GAAa,IAAI,EAAA,CAG/D,SAAAvD,GAAmBuD,GAAgC55H,EAAkB,CAC5E,GAAI,CAAC+oH,IAAa,CAAC6Q,GAAa,IAAM,CAACA,GAAa,MAAO,OAErD,MAAAC,GAAeD,GAAa,GAAG,sBAAsB,EACrDE,GAAW/Q,GAAU,SACrBgR,GAAgBH,GAAa,MAAM,sBAAsB,EACzDzQ,EAAc,IACdC,GAAc,IACdvjF,GAAW7lC,EAAM,QAAU65H,GAAa,IACxCG,GAAiBD,GAAc,OAEjC,IAAAzQ,GACAC,GAAe,MACfC,GAAkB,GAElB3jF,GAAWm0F,GAAiB7Q,GAC9BG,GAAW5a,GAAS,OACL6a,GAAAwQ,GAAc,IAAMD,GAAS,KACnCj0F,GAAWm0F,GAAiB5Q,IACrCE,GAAW5a,GAAS,MACL6a,GAAAwQ,GAAc,OAASD,GAAS,MAE/CxQ,GAAW5a,GAAS,MACF8a,GAAA,IAGhB3D,EAAU,QACZA,EAAU,MAAM,MAAM,IAAM,GAAG0D,EAAY,KAC3C1D,EAAU,MAAM,MAAM,iBAAmB,GAAGkU,GAAc,MAAQD,GAAS,IAAI,MAGjF/Q,GAAU,aAAe6Q,GAAa,KACtC7Q,GAAU,SAAWO,GAErBrE,EAAc,MAAQuE,GACtBv0G,EAAUnO,EAAM,WAAY8yH,GAAa,KAAK,KAAMA,GAAa,IAAI,CAAA,CAG9D,SAAAnQ,GAAkBvxH,GAAqBC,EAAsB,CACpE,GAAI,CAACD,IAAQ,CAACC,EAAc,MAAA,GAE5B,KAAOD,IAAM,CACX,GAAIA,KAASC,GAASD,GAAK,KAAOC,EAAM,GAC/B,MAAA,GAGTD,GAAO20B,GAAc30B,EAAI,CAAA,CAGpB,MAAA,EAAA,CAGT,SAASo+H,GAAesD,GAAgC,CACtD,GAAI,CAAC7Q,GAAW,OAEhB,KAAM,CAAE,aAAAkR,EAAc,aAAAC,GAAc,SAAA5Q,EAAa,EAAAP,GAEjD,GAAI,CAACmR,IAAgBzQ,GAAkByQ,GAAcD,CAAY,EAAG,OAEhE,IAAAP,GACAj7H,EAeA,GAbAw7H,IACFx7H,EAASouB,GAAcotG,CAAY,EAE9Bx7H,IACMA,EAAA,CACP,SAAUk1H,EAAU,KACtB,GAGF+F,GAAYO,EAAa,GACzB11H,GAAgB9F,EAAO,SAAkBI,IAAAA,GAAK,KAAO66H,EAAS,GAG5DpQ,KAAa5a,GAAS,MAAO,CAC1B,MAAM,QAAQwrB,GAAa,QAAQ,IACtCA,GAAa,SAAW,CAAC,GAG3B,MAAMt0H,GAAW,MAAM,KAAKs0H,GAAa,QAA2B,EAEpEt0H,GAAS,KAAKq0H,CAAY,EAE1BC,GAAa,SAAWt0H,GACxBq0H,EAAa,OAASC,GAAa,EAAA,KAC9B,CACLz7H,EAASouB,GAAcqtG,EAAY,EAE9Bz7H,IACMA,EAAA,CACP,OAAQ,OACR,SAAUk1H,EAAU,KACtB,GAGF+F,GAAYQ,GAAa,GACzB,MAAMtiI,GAAQ6G,EAAO,SAAS,UAAkBI,IAAAA,GAAK,KAAO66H,EAAS,EAEjE,CAAC9hI,KACI6G,EAAA,SAAS,OAAO,EAAE6qH,KAAa5a,GAAS,OAAS92G,GAAO,EAAGqiI,CAAY,EAE9EA,EAAa,OAASx7H,EAAO,GAC/B,CAGgBw5H,GAAA,EAClBhjH,EAAUnO,EAAM,OAAQ8yH,GAAa,KAAK,KAAMA,GAAa,KAAMtQ,EAAQ,CAAA,CAG7E,SAASiN,GAAkBqD,GAAgC,CACzD5hE,EAAS,MAAQ,GACjBitD,EAAc,MAAQ,GACV8D,GAAA,KACZ9zG,EAAUnO,EAAM,UAAW8yH,GAAa,KAAK,KAAMA,GAAa,IAAI,CAAA,CAGtE,SAASpD,GAAoB7mI,GAAqB,QAChD,MAAMmgF,EAAW,SAAS,cAE1B,GAAI,CAACokD,EAAe,QAAU,CAACpkD,EAAU,OAEzC,MAAMl4E,GAAQs8H,EAAe,UAAUiG,IAAUA,KAAWrqD,CAAQ,EAEhE,CAACl4E,MAEAiQ,GAAAqsH,GAAAt8H,IAASjI,KAAS,KAAO,GAAK,GAAKukI,EAAe,QAAUA,EAAe,MAC9E,IADG,MAAArsH,GACA,QACL,CAGF,SAAS4uH,GAAkB0D,GAA6B,CAClD,CAACA,IAAU,CAACjG,EAAe,QAE3BA,EAAe,SAASiG,EAAM,GAChCA,GAAO,MAAM,CACf,CAGF,SAASl7F,IAAe,CAED01F,EAAA,CAAA,CAGvB,SAASyF,GAAgBp6H,GAAmB,CAC1C,MAAM/H,EAAS+H,GAAM,OAEjB,CAACk0H,EAAe,QAAU,CAACj8H,GAAU,CAACg8H,EAAK,OAI3Ch8H,IAAWg8H,EAAK,OACHC,EAAA,CAAC,EAAE,MAAM,CAC1B,CAGF,SAASx1C,IAAgB,SACvB72E,GAAAohD,EAAY,QAAZ,MAAAphD,GAAmB,SAAQ,CAG7B,SAASotH,IAAgB,CACvBnB,EAAU,MAAQ,GAClB7yG,EAAU,OAAS0zG,EAAqB,CAAA,CAG1C,SAASlgB,IAAc,CACrB,GAAI3tG,EAAM,QAAS,CACHmuH,GAAA,EACd,MAAA,CAGFK,GAAa,MAAQ,GAErB,sBAAsB,IAAM,CACZL,GAAA,EACRxyH,EAAA,OAAS,WAAW,IAAM,CAC9B6yH,GAAa,MAAQ,IACpB,GAAG,CAAA,CACP,CAAA,CAGM,SAAAsB,GAAgByD,GAAiB,GAAwB,CACzD,OAAAzG,EAAa,MAAM,OAAO/0H,GAAQA,EAAK,SAAYw7H,IAAkBx7H,EAAK,OAAQ,CAAA,CAGlF,SAAAg4H,GAAmBwD,GAAiB,GAAO,CAClD,OAAOzD,GAAgByD,EAAc,EAAE,IAAI7uG,GAAQA,EAAK,IAAI,CAAA,CAG9D,SAASsrG,IAAoC,CAC3C,OAAOlD,EAAa,MAAM,OAAO/0H,IAAQA,GAAK,QAAQ,CAAA,CAGxD,SAASk4H,IAAsB,CAC7B,OAAOD,GAAiB,EAAE,IAAItrG,IAAQA,GAAK,IAAI,CAAA,CAGjD,SAASwrG,IAAoC,CAC3C,OAAOpD,EAAa,MAAM,OAAO/0H,IAAQA,GAAK,QAAQ,CAAA,CAGxD,SAASo4H,IAAoC,CAC3C,OAAOrD,EAAa,MAAM,OAAO/0H,IAAQA,GAAK,QAAQ,CAAA,CAGxD,SAASguB,GAAcrB,GAA2C,CAChE,OAAIA,GAAK,OACAioG,EAAQ,IAAIjoG,GAAK,MAAM,GAAK,KAG9B,IAAA,CAGT,SAAS0rG,GAAgB1rG,GAAqB,CAC5C,OAAOA,GAAK,QAAA,CAGL,SAAA2rG,GAAgB3rG,GAAqB8uG,EAAc,GAAwB,CAC5E,MAAA77H,GAASouB,GAAcrB,EAAI,EAE3BkuG,GAAYluG,GAAK,GACjBvmB,GAAWxG,GAAUA,GAAO,GAAa,KAExC,OAAAm1H,EAAa,MAAM,OAAe/0H,GAAA,CACvC,MAAM07H,GAAUt1H,KAAa,KAAO,CAACpG,EAAK,OAASA,EAAK,SAAWoG,GAE/D,OAAAs1H,IAAW,CAACD,EACPz7H,EAAK,KAAO66H,GAGda,EAAA,CACR,CAAA,CAGH,SAASnD,GAAmB5rG,GAA2C,CAC/D,MAAA/sB,EAASouB,GAAcrB,EAAI,EAE7B,GAAA,CAAC/sB,EAAe,OAAA,KAEpB,MAAMi7H,GAAYluG,GAAK,GACjBvmB,GAAWxG,EAAO,GAClBmH,GAAWguH,EAAa,MAAM,OAAe/0H,GAAAA,EAAK,SAAWoG,EAAQ,EAEvE,GAAAW,IAAYA,GAAS,OAAQ,CAC/B,MAAMhO,EAAQgO,GAAS,UAAkB/G,IAAAA,GAAK,KAAO66H,EAAS,EAE9D,GAAI9hI,EAAQ,EACH,OAAAgO,GAAShO,EAAQ,CAAC,CAC3B,CAGK,OAAA,IAAA,CAGT,SAASy/H,GAAmB7rG,GAA2C,CAC/D,MAAA/sB,EAASouB,GAAcrB,EAAI,EAE7B,GAAA,CAAC/sB,EAAe,OAAA,KAEpB,MAAMi7H,GAAYluG,GAAK,GACjBvmB,GAAWxG,EAAO,GAClBmH,GAAWguH,EAAa,MAAM,OAAe/0H,GAAAA,EAAK,SAAWoG,EAAQ,EAEvE,GAAAW,IAAYA,GAAS,OAAQ,CAC/B,MAAMhO,EAAQgO,GAAS,UAAkB/G,IAAAA,GAAK,KAAO66H,EAAS,EAE9D,GAAI,CAAC,CAAC9hI,GAASA,EAAQgO,GAAS,OAAS,EAChC,OAAAA,GAAShO,EAAQ,CAAC,CAC3B,CAGK,OAAA,IAAA,CAGT,SAAS0/H,GAA8B34H,GAA+B,CACpE,GAAImI,EAAM,YACR,OAAO8sH,EAAa,MAAM,SAAa/0H,GAAK,OAASF,EAAI,GAAK,KAGhE,MAAMk/B,EAAQgrB,EAAU,GAExB,OACE+qE,EAAa,MAAM,KACjB/0H,IAAQA,GAAK,OAASF,IAAQE,GAAK,KAAKg/B,CAAK,IAAMl/B,GAAKk/B,CAAgB,CAAA,GACrE,IAAA,CAIT,SAAS05F,GAAiC54H,GAASguE,EAAoB2nB,GAAW,GAAO,CACjF,MAAA9oE,GAAO8rG,GAAc34H,EAAI,EAE/B,GAAI6sB,KACGA,GAAA,SAAWz7B,GAAO48E,CAAQ,EAAI,CAACnhD,GAAK,SAAW,CAAC,CAACmhD,EAElD2nB,IAAU,CACR,IAAArnE,GAAaJ,GAAcrB,EAAI,EAEnC,KAAOyB,IACLA,GAAW,SAAWzB,GAAK,SAC3ByB,GAAaJ,GAAcI,EAAU,CACvC,CAEJ,CAGO,SAAAuqG,GAAiC74H,GAASsgD,EAAoB,CAC/D,MAAAzzB,GAAO8rG,GAAc34H,EAAI,EAE3B6sB,KACGA,GAAA,SAAWz7B,GAAOkvD,CAAQ,EAAI,CAACzzB,GAAK,SAAW,CAAC,CAACyzB,EACxD,CAGO,SAAAw4E,GAAgC94H,GAASkmE,EAAmB,CAC7D,MAAAr5C,GAAO8rG,GAAc34H,EAAI,EAE/B,GAAI6sB,KACGA,GAAA,QAAUz7B,GAAO80E,CAAO,EAAI,CAACr5C,GAAK,QAAU,CAAC,CAACq5C,EAE/C,CAAC/9D,EAAM,YAAY,CACf,MAAA0yH,GAAW,CAAChuG,EAAI,EAAE,OACtBooG,EAAa,MAAM,WAAe/0H,GAAK,UAAYA,GAAK,OAAO,CACjE,EAES,QAAA3N,GAAI,EAAG4H,EAAM0gI,GAAS,OAAQtoI,GAAI4H,EAAK,EAAE5H,GAAG,CAC7C,MAAA2N,GAAO26H,GAAStoI,EAAC,EAEvBs2E,EAAoB3oE,GAAK,EAAE,EAC3B4oE,GAAkB5oE,GAAK,EAAE,CAAA,CAC3B,CAEJ,CAGO,SAAA64H,GAAwC/4H,GAASouC,EAAmB,CACrE,MAAAvhB,GAAO8rG,GAAc34H,EAAI,EAE3B6sB,KACGA,GAAA,QAAUz7B,GAAOg9C,CAAO,EAAI,CAACvhB,GAAK,QAAU,CAAC,CAACuhB,EACrD,CAGF,SAAS4qF,GAAkBhrD,GAAmB,OACjC,UAAAnhD,MAAQooG,EAAa,MAC1B,CAACpoG,GAAK,UAAY,CAACA,GAAK,gBAAkB,CAACA,GAAK,WAAW3jB,EAAA2jB,GAAK,WAAL,MAAA3jB,EAAe,UAC5E2jB,GAAK,SAAWmhD,GAEpB,CAGO,SAAAirD,GAAY4C,GAAa,GAAO,CAChC,OAAAv0H,GACLu0H,GACIp0H,GAAWutH,EAAU,MAAOnoG,GAAQA,EAAK,QAAS,CAClD,WAAY,WACZ,SAAU1kB,EAAM,WAChB,OAAQiuH,CAAA,CACT,EACCpB,EAAU,MACLnoG,IAAA,CAAE,GAAGA,EAAK,IAAK,EAC1B,CAAA,CAGO,SAAAqsG,GAAe2C,GAAa,GAAO,CAExC,OAAAA,GACI5G,EAAa,MAAM,UAAepoG,EAAK,SAAWA,EAAK,cAAgBA,EAAK,YAAY,EACxFooG,EAAa,OACjB,IAAIpoG,IAAS,CAAE,GAAGA,EAAK,MAAO,CAAA,CAG5B,MAAA8pG,GAAe98G,MAAI,EAAK,+BAI5BS,EAAAA,YAkHcD,EAAA,MAAAi0C,EAAA,EAAA,SAjHR,cAAJ,IAAIhE,EACH,MAAQ7vC,EAAAA,eAAA,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,IAAK2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,EAAA,SAAM,SAAWA,EAAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,EACrD,QAAS2B,EAAAA,MAAKlS,CAAA,EAAC,QACf,MAAO0tH,EAAa,MACpB,YAAWx7G,EAAAA,MAAKlS,CAAA,EAAC,cAClB,YAAU,KACT,cAAW,CAAA,MAAWkS,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,EAC3B,WAAQ,CAAG2B,EAAAA,MAAKlS,CAAA,EAAC,QACjB,gBAAewuH,GAAY,MAC3B,SAAQ,CAAGt8G,EAAAA,MAAKlS,CAAA,EAAC,QAClB,KAAK,OACL,SAAS,KACR,gBAAekS,EAAAA,MAAKlS,CAAA,EAAC,SACrB,gBAAekS,EAAAA,MAAKlS,CAAA,EAAC,SACrB,uBAAO2Q,EAAK,KAAA,EACZ,SAAQwnB,EAAA,GAEE,wBACT,IAMO,CANP1lB,EAAAA,mBAMO,MAAA,SALD,OAAJ,IAAI06G,EACJ,SAAS,IACT,KAAK,OACL,MAAA,CAA4D,MAAA,IAAA,OAAA,IAAA,SAAA,SAAA,QAAA,MAAA,EAC3D,QAAOmG,gBAGD,QAAOztE,EAAAA,QAChB,CAwCqB,CAAA,KAzCKnhC,MAAI,CAEtBwsG,GAAWxsG,EAAI,iBADvBvS,EAAAA,YAwCqBD,EAAAA,MAAAwpB,EAAA,EAAA,OAtCnB,OAAA,GACC,QAAShX,GAAK,OAAI,SAClB,aAAaipF,EAAA,qBAEd,IAiCM,CAjCNl7F,EAAAA,mBAiCM,MAAA,CAjCA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,EAAe,MAAKo1C,iBAAA,CAAA,OAAA,GAAejhC,GAAK,MAAM,IAAA,CAAA,CAAA,IAC9D2b,EAAAA,UAAA,EAAA,EAAAhuB,EA+BW,mBAAAqsB,6BA9BoBha,GAAK,MAA1B,CAAAivG,GAAW7iI,MADrBuvC,YAAA,EAAAluB,cA+BWyhH,GA/BXlhH,EAAAA,WA+BW,CA7BR,IAAKihH,GAAU,IAAM7iI,EAAA,eACd68H,EAAW,MAACgG,GAAU,KAAMA,EAAS,EAAA,CAC5C,KAAMA,GAAS,EAAAlQ,cAAA,CAAA,EAAA,GAAA,CAEAv/G,EAAM,MAAQgO,EAAA,SAAM,MAAM,WAAO,UAC/C,GAAA2zC,EAAAA,QADwD/sD,GAAO,CAC/DyZ,aAEOC,GAFP,OAAA,OAAAE,EAAAA,WAEO,CAFmB,QAAA,EAAA,EAAA5Z,CAAO,EAAjC,IAEO,CADLoY,cAAkEgB,EAAAA,MAAAb,EAAA,EAAA,CAAvD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAMlH,mDAGlCoL,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,QACjD,GAAA2zC,EAAAA,QADwD/sD,GAAO,CAC/DyZ,aAEOC,GAFP,OAAA,QAAAE,EAAAA,WAEO,CAFoB,QAAA,EAAA,EAAA5Z,CAAO,EAAlC,IAEO,CADLoY,cAAmEgB,EAAAA,MAAAb,EAAA,EAAA,CAAxD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMlH,mDAGnCoL,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,QACjD,GAAA2zC,EAAAA,QADwD/sD,GAAO,CAC/DyZ,aAEOC,GAFP,OAAA,QAAAE,EAAAA,WAEO,CAFoB,QAAA,EAAA,EAAA5Z,CAAO,EAAlC,IAEO,CADLoY,cAAmEgB,EAAAA,MAAAb,EAAA,EAAA,CAAxD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMlH,mDAGnCoL,EAAM,QAAUgO,EAAA,SAAM,MAAM,aAAS,SACnD,GAAA2zC,EAAAA,QAD2D/sD,GAAO,CAClEyZ,aAEOC,GAFP,OAAA,SAAAE,EAAAA,WAEO,CAFqB,QAAA,EAAA,EAAA5Z,CAAO,EAAnC,IAEO,CADLoY,cAAoEgB,EAAAA,MAAAb,EAAA,EAAA,CAAzD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMlH,mDAGpCoL,EAAM,QAAUgO,EAAA,SAAM,MAAM,aAAS,SACnD,GAAA2zC,EAAAA,QAD2D/sD,GAAO,CAClEyZ,aAEOC,GAFP,OAAA,SAAAE,EAAAA,WAEO,CAFqB,QAAA,EAAA,EAAA5Z,CAAO,EAAnC,IAEO,CADLoY,cAAoEgB,EAAAA,MAAAb,EAAA,EAAA,CAAzD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMlH,2GAM1DunC,EAAA,UAAA,EAAAluB,EA0BW,YAAAyhH,GA1BXlhH,EAAAA,WA0BW,CA1Bc,IAAA,CAAA,EAAAi7G,EAAA,MAAYjpG,GAAK,KAAMA,EAAI,EAAI,CAAA,KAAAA,EAAU,CAAA,EAAA++F,EAAA,YAAA,CAAA,EAAA,GAAA,CAChDv/G,EAAM,MAAQgO,EAAA,SAAM,MAAM,WAAO,UAC/C,GAAA2zC,EAAAA,QADwD/sD,IAAO,CAC/DyZ,aAEOC,GAAA,OAAA,OAAAyzC,iBAAAC,qBAFmBptD,EAAO,CAAA,EAAjC,IAEO,CADLoY,cAAkEgB,EAAAA,MAAAb,EAAA,EAAA,CAAvD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAMlH,oDAGlCoL,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,QACjD,GAAA2zC,EAAAA,QADwD/sD,IAAO,CAC/DyZ,aAEOC,GAAA,OAAA,QAAAyzC,iBAAAC,qBAFoBptD,EAAO,CAAA,EAAlC,IAEO,CADLoY,cAAmEgB,EAAAA,MAAAb,EAAA,EAAA,CAAxD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMlH,oDAGnCoL,EAAM,OAASgO,EAAA,SAAM,MAAM,YAAQ,QACjD,GAAA2zC,EAAAA,QADwD/sD,IAAO,CAC/DyZ,aAEOC,GAAA,OAAA,QAAAyzC,iBAAAC,qBAFoBptD,EAAO,CAAA,EAAlC,IAEO,CADLoY,cAAmEgB,EAAAA,MAAAb,EAAA,EAAA,CAAxD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAQ,KAAMlH,oDAGnCoL,EAAM,QAAUgO,EAAA,SAAM,MAAM,aAAS,SACnD,GAAA2zC,EAAAA,QAD2D/sD,IAAO,CAClEyZ,aAEOC,GAAA,OAAA,SAAAyzC,iBAAAC,qBAFqBptD,EAAO,CAAA,EAAnC,IAEO,CADLoY,cAAoEgB,EAAAA,MAAAb,EAAA,EAAA,CAAzD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMlH,oDAGpCoL,EAAM,QAAUgO,EAAA,SAAM,MAAM,aAAS,SACnD,GAAA2zC,EAAAA,QAD2D/sD,IAAO,CAClEyZ,aAEOC,GAAA,OAAA,SAAAyzC,iBAAAC,qBAFqBptD,EAAO,CAAA,EAAnC,IAEO,CADLoY,cAAoEgB,EAAAA,MAAAb,EAAA,EAAA,CAAzD,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,OAAS,KAAMlH,wEAK7C,gBACT,IAMM,CANN2Z,EAAAA,mBAMM,MAAA,CANA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,GAChBgC,EAAAA,WAIOC,qBAJP,IAIO,CAHLtB,cAEWgB,EAAAA,MAAAb,EAAA,EAAA,CAFA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAA,qBAC/B,IAAqC,CAAlC2S,kBAAAC,EAAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,WAAakS,EAAAA,MAAA5P,CAAA,EAAO,KAAK,EAAA,CAAA,CAAA,gCAK/B,wBACT,IAKO,CAJC4P,EAAA,MAAAlS,CAAA,EAAM,0CADdqS,qBAKO,MAAA,eAFD,YAAJ,IAAI0sG,EACH,MAAKzsG,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,qBAFL4tG,EAAa,KAAA,CAAA,iLCv4ChB0V,GAAc1mH,GAAW,CACpC,MAAOQ,GACP,OAAQS,GAAmB,EAC3B,IAAK,OACL,SAAU,MACV,SAAUrB,EACV,IAAK,OACL,OAAQ,CAAC,OAAQ,KAAK,EACtB,OAAQ,CAAC,OAAQ,KAAK,EACtB,QAAS,OACT,MAAO,OACP,KAAM,OACN,QAAS,OACT,gBAAiBA,EACjB,OAAQA,EACR,YAAaA,EACb,WAAY,OACZ,UAAWA,EACX,eAAgB,SAChB,eAAgB,SAChB,aAAc,SACd,YAAaA,EACb,SAAU,OACV,MAAOA,EACP,YAAa,OACb,UAAWA,EACX,UAAW,OACX,cAAeA,EACf,YAAa,OACb,SAAUA,EACV,QAASA,EACT,YAAayB,GACb,YAAazB,EACb,cAAe,OACf,MAAOA,EACP,aAAc,MACd,WAAY,SACZ,UAAWiB,GACX,KAAM,OACN,YAAa,SACb,MAAO,OACP,SAAUE,EAA8C,EACxD,SAAUA,EAA8C,EACxD,cAAeA,EAA4C,EAC3D,YAAaA,EAA4C,EACzD,SAAUA,EAA2C,EACrD,UAAWA,EAA2C,EACtD,WAAYA,EAA4D,EACxE,UAAWA,EAA0D,EACrE,QAASA,EAAmE,CAC9E,CAAC,EASY4lH,GAAkB3mH,GAAW,CACxC,MAAO,MACP,YAAaJ,EACb,aAAc,SACd,KAAM,OACN,YAAa,OACb,MAAOiB,GACP,UAAW,OACX,WAAY,SACZ,MAAO,OACP,SAAUE,EAA2C,EACrD,UAAWA,EAA2C,CACxD,CAAC,EAKY6lH,GAAkB5mH,GAAW,CACxC,OAAQiB,GAAmB,EAC3B,KAAM,OACN,aAAc,SACd,SAAU,OACV,YAAa,OACb,YAAarB,EACb,UAAW,OACX,WAAY,SACZ,MAAO,OACP,SAAUmB,EAA2C,EACrD,UAAWA,EAA2C,CACxD,CAAC,EC7GK8lH,OAAiB,IAGvBA,GAAW,IAAI,YAAa,CAC1B,MACA,MACA,MACA,KACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,CAAC,EAEDA,GAAW,IAAI,YAAa,CAC1B,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACF,CAAC,EAEDA,GAAW,IACT,WACA,CACE,CACE,OACA,MACA,WACA,QACA,IACA,MACA,KACA,MACA,IACA,MACA,MACA,KACA,MACA,OACA,KACA,KACF,EACA,CAAC,KAAM,MAAO,MAAO,MAAO,KAAM,MAAO,MAAO,KAAK,EACrD,CAAC,MAAO,OAAQ,MAAM,EACtB,CAAC,OAAQ,MAAM,EACf,CAAC,MAAM,EACP,CAAC,OAAQ,QAAS,KAAK,EACvB,CAAC,KAAK,EACN,CAAC,OAAQ,KAAK,EACd,CAAC,KAAM,MAAO,MAAO,MAAO,KAAK,CAAA,EACjC,KAAK,CACT,EACAA,GAAW,IAAI,YAAa,CAC1B,KACA,OACA,OACA,OACA,MACA,SACA,OACA,MACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,KACF,CAAC,EACDA,GAAW,IAAI,UAAW,CACxB,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,KACF,CAAC,EACDA,GAAW,IACT,WACA,CACE,CAAC,MAAO,MAAM,EACd,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,KAAK,EAC7C,CAAC,MAAO,MAAO,IAAI,CAAA,EACnB,KAAK,CACT,EACAA,GAAW,IAAI,OAAQ,CAAC,SAAS,CAAC,EAElB,SAAAC,GAAa3qH,EAAQU,KAAY,CAC/C,OAAO3I,WAAS,IAAM,CACpB,MAAM/D,EAA2C,CAAC,EAElD,SAAW,CAAC8G,EAAU0uE,CAAK,IAAKkhD,GAAW,UACzC,GAAIlhD,GAAA,MAAAA,EAAO,OACT,UAAWjqF,KAAQiqF,EACjBx1E,EAAIzU,CAAI,EAAIygB,EAAM,MAAMlF,CAAQ,EAK/B,OAAA9G,CAAA,CACR,CACH,CC1HkB,IAAA42H,IAAAA,IAChBA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,OAAS,SALOA,IAAAA,IAAA,CAAA,CAAA,EAuGL,MAAAC,GAAkB,OAAO,OAAyB,CAC7D,OACA,SACA,YACA,MACF,CAAC,qNCxGD,MAAMC,EAAa,mDACbC,EAAgB,gBAEtB,SAASC,EAAQC,EAAuB,CACtC,GAAIA,EAAK,KACA,OAAAA,EAAK,KAAK,WAAW,QAAQ,EAGtC,KAAM,CAAE,KAAA/7H,EAAM,IAAAg8H,EAAK,OAAAC,CAAW,EAAAF,EAE9B,MAAO,CAAC,EACNH,EAAW,KAAK57H,CAAI,GACnBg8H,IAAQJ,EAAW,KAAKI,CAAG,GAAKH,EAAc,KAAKG,CAAG,IACtDC,GAAUJ,EAAc,KAAKI,CAAM,EAAA,CAKlC,MAAAz0H,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,OAAQ,KACR,KAAM,CACJ,QAAS,KAAO,CAAA,GAChB,OAAQ,EACV,EACA,aAAc,CACZ,QAAS,KACT,OAAQ,EACV,EACA,SAAU,CACR,QAAS,OACT,UAAW3oB,GAASurI,GAAgB,SAASvrI,CAAK,CACpD,EACA,YAAa,KACb,YAAa,GACb,UAAW,EACX,WAAY,CACV,QAAS0rI,EACT,OAAQ,EACV,EACA,MAAO,KAAO,CAAC,EAAA,CAChB,EAIK/jH,EAAKtF,GAAc,QAAQ,EAC3B3I,EAASI,GAAU,SAAU07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACnDsJ,EAAQU,GAAS,EACjB0qH,EAAYT,GAAa3qH,CAAK,EAE9BqrH,EAAkBtzH,EAAAA,SAAS,IAAM,OAAOrB,EAAM,cAAiB,UAAU,EACzE40H,EAAWvzH,WAAS,IAAMrB,EAAM,KAAK,MAAQA,EAAM,KAAK,IAAI,EAC5D60H,EAASxzH,EAAA,SAAS,IAAMrB,EAAM,KAAK,MAAM,EACzC80H,EAAazzH,WAAS,IAAMpP,GAAQ+N,EAAM,KAAK,WAAYA,EAAM,SAAS,CAAC,EAC3E+0H,EAAY1zH,EAAA,SAAS,IAAMizH,EAAQt0H,EAAM,IAAI,IAAMA,EAAM,KAAK,KAAOA,EAAM,KAAK,OAAO,EAEvF+zC,EAAaC,EAAA,gBACjBlnC,WAAS,CACP,KAAMsxB,EAAAA,MAAMp+B,EAAO,MAAM,EACzB,OAAA60H,EACA,WAAAC,CACD,CAAA,CACH,EAEA,SAASE,EAAiBT,EAAuB,CAC/C,OAAOA,EAAK,KAAK,MAAM,GAAG,EAAE,MAAO,kBAAkB,CAAA,CAG9C,SAAAU,EAAYV,EAAuBxkH,EAAQ,EAAG,CAC/C,MAAAmlH,EAAYF,EAAiBT,CAAI,EACjChrH,EAAO2rH,GACTR,EAAU,MAAMQ,CAAS,GAAKR,EAAU,MAAM,QAG3C,MAAA,CAAE,GAAGnrH,EAAM,MAAO,EAAEA,EAAK,OAAS,GAAKwG,CAAM,CAAA,CAGtD,SAASqoF,EAAam8B,EAAuB,CACjCpmH,EAAAnO,EAAM,SAAUu0H,CAAI,CAAA,CAGhC,SAAS7qC,EAAc6qC,EAAuB,CAClCpmH,EAAAnO,EAAM,UAAWu0H,CAAI,CAAA,CAGjC,SAASY,EAAcZ,EAAuB,CAC5C,GAAI,CAACA,EAAK,QAAU,CAACD,EAAQt0H,EAAM,IAAI,EAAG,OAEpC,MAAAo1H,EAAS,IAAI,WAEZA,EAAA,cAAcb,EAAK,MAAM,EAChCa,EAAO,OAAS,IAAM,OAChBb,EAAK,SAAWL,GAAW,SAC7BK,EAAK,SAASxzH,EAAAq0H,EAAO,SAAP,YAAAr0H,EAAe,aAAc,KAE/C,CAAA,6BAKAsR,EAAA,mBAiKK,KAAA,CAhKF,MAAKC,EAAAA,eAAA,CAAUJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAAgB2B,EAAA,MAAA3B,CAAA,EAAG,IAAY,OAAA2B,QAAAlS,CAAA,EAAM,QAAQ,EAASkS,QAAE3B,CAAA,EAAC,IAAG,OAASskH,EAAM,KAAA,EAAS3iH,QAAAlS,CAAA,EAAM,SAAWkS,EAAAA,MAAA3B,CAAA,EAAG,IAAG,OAAA,SAAA,CAAA,GAM/H,MAAOqkH,EAAQ,MAChB,SAAS,IAAA,GAETriH,aAsJOC,EAAA,OAAA,UAAAyzC,EAAAA,eAAAC,EAtJO,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAAxB,IAsJO,CArJL7iC,cAoJWgB,EAAAA,MAAAb,EAAA,EAAA,CApJA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,QAAU,KAAMkS,QAAU6hC,CAAA,CAAA,qBACzD,IAqDW,CArDK7hC,EAAAA,MAAAlS,CAAA,EAAM,WAAQ,sBAA9BqS,EAAAA,mBAqDWqsB,EAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CApDTjsB,EAAAA,mBAgBM,MAAA,CAhBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GAChBkC,EAAAA,mBAWM,MAAA,CAXA,wBAAQP,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,WAAA,CAAA,CAAA,CAAA,GAChCgC,aASOC,EAAA,OAAA,OAAAyzC,EAAAA,eAAAC,EATmB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAApC,IASO,CARL7iC,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CAPA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAMkS,QAAU6hC,CAAA,CAAA,qBACtD,IAIY,CAHJ4gF,EAAe,qBADvBxiH,EAAAA,YAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUa,EAAAA,MAAKlS,CAAA,EAAC,aAChB,KAAI,CAAA,KAAUkS,QAAKlS,CAAA,EAAC,IAAI,iCAE3BqgC,EAAAA,YAAAluB,EAAAA,YAAqDD,EAAA,MAAhCpO,EAAA,EAAAmiD,EAAAA,eAAAvzC,EAAA,WAAA,CAAA,IAAA,CAAA,EAAAuiH,EAAY/iH,EAAA,MAAAlS,CAAA,EAAM,IAAI,CAAA,CAAA,EAAA,KAAA,EAAA,EAAA,qCAIjDyS,EAAAA,mBAEO,OAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,qBACdqkH,EAAQ,KAAA,EAAA,CAAA,MAGfniH,EAAAA,mBAyBM,MAAA,CAzBA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAERskH,EAAM,QAAA,2BADdxiH,EAAAA,mBAMO,OAAA,OAJL,MAAA,CAAgC,oBAAA,OAAA,EAC/B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,wBAEPukH,EAAU,KAAA,GAAA,EAAA,CAAA,+BAEPD,EAAM,QAAA,yBAAjBxiH,EAAAA,mBAEM,MAAA,OAF4B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GAC5DW,EAAAA,YAAoCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAAtBh0C,QAAK5I,CAAA,EAAC,OAAO,CAAA,EAAA,KAAA,EAAA,CAAA,MAEburH,EAAM,QAAA,oBAAtB,EAAAxiH,EAAA,mBAEM,MAAA,OAF8B,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,CAAA,GAC9DW,EAAAA,YAAoCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAAtBh0C,QAAK5I,CAAA,EAAC,OAAO,CAAA,EAAA,KAAA,EAAA,CAAA,MAEburH,EAAM,QAAA,yBAAtB,EAAAxiH,EAAA,mBAEM,MAAA,OAFmC,wBAAQH,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,CAAA,CAAA,GACnEW,EAAAA,YAAoCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAAtBh0C,QAAK5I,CAAA,EAAC,OAAO,CAAA,EAAA,KAAA,EAAA,mCAE7BmJ,EAAAA,mBAOS,SAAA,CANP,KAAK,SACJ,wBAAQP,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,OAAA,CAAA,CAAA,EAC5B,aAAY2B,EAAA,MAAA5P,CAAA,EAAO,UAAU,OAC7B,QAAOutC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAAo9C,EAAalmF,EAAAA,MAAAlS,CAAA,EAAM,IAAI,EAAA,GAE/BkR,EAAAA,YAAmCgB,EAAA,MAAApO,EAAA,EAAAmiD,EAAA,eAAAC,EAAA,mBAArBh0C,QAAK5I,CAAA,EAAC,MAAM,CAAA,EAAA,KAAA,EAAA,cAGnBurH,EAAM,QAAA,2BAAjBxiH,EAAAA,mBAQM,MAAA,OAR8B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,CAAA,GAC9CW,cAMYgB,EAAAA,MAAAmjH,EAAA,EAAA,CALV,QAAA,GACA,YAAU,OACT,eAAc,EACd,WAAYnjH,EAAA,MAAAlS,CAAA,EAAM,KAAK,WACvB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,qFAIHkS,EAAA,MAAAlS,CAAA,EAAM,WAA4B,aAAAkS,EAAAA,MAAAlS,CAAA,EAAM,WAAQ,sBACnEqS,EAAAA,mBA0FM,MAAA,OA1FA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAChBkC,EAAAA,mBA2CM,MAAA,CA3CA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,WAAA,CAAA,CAAA,GACAskH,EAAM,QAAA,2BAAtBxiH,qBAsBWqsB,WAAA,CAAA,IAAA,GAAA,CArBExsB,EAAA,MAAAlS,CAAA,EAAM,WAAQ,2BAAzBqS,qBAcM,MAAA,OAdsC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,CAAA,GACtDkC,EAAAA,mBAEO,OAFPwiE,GACKriE,EAAA,gBAAAV,EAAA,MAAAlS,CAAA,EAAM,aAAekS,EAAM,MAAA5P,CAAA,EAAC,SAAS,EAAA,CAAA,EAE1C4O,cAMYgB,EAAAA,MAAAmjH,EAAA,EAAA,CALV,QAAA,GACA,YAAU,OACT,eAAc,EACd,WAAYnjH,EAAA,MAAAlS,CAAA,EAAM,KAAK,WACvB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,8CAEpByS,EAAAA,mBAEO,OAAA,CAFD,MAAA,CAAuB,aAAA,KAAA,EAAE,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,YAAA,CAAA,CAAA,uBACnCukH,EAAU,KAAA,GAAA,EAAA,CAAA,CAAA,OAGpBz0F,EAAA,UAAA,EAAAluB,EAAAA,YAKQD,EAAAA,MALRpO,EAAA,EAAA4O,EAAA,WAKQ,CAHE,IAAA,GAAAR,EAAA,MAAA5I,CAAA,EAAM,QAAO,CACpB,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,QAAQ,OAAK,GAAA,IAC7B,MAAM,sCAIGyrH,EAAS,qBADtB1iH,qBAKE,MAAA,OAHC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,IAAK2B,EAAK,MAAAlS,CAAA,EAAC,KAAK,KAAOkS,EAAK,MAAAlS,CAAA,EAAC,KAAK,QAAM,GACxC,IAAK40H,EAAQ,mCAEhBviH,EAAA,mBAYWqsB,WAAA,CAAA,IAAA,GAAA,CAXN/rB,kBAAAC,EAAAA,gBAAAuiH,EAAcjjH,QAAAlS,CAAA,EAAM,IAAI,GAAI,IAC/B,CAAA,EAAAuS,aASOC,EAAA,OAAA,OAAAyzC,EAAAA,eAAAC,EATmB,mBAAAh0C,QAAU6hC,CAAA,CAAA,CAAA,EAApC,IASO,CARL7iC,cAOWgB,EAAAA,MAAAb,EAAA,EAAA,CAPA,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAMkS,QAAU6hC,CAAA,CAAA,qBACtD,IAIY,CAHJ4gF,EAAe,qBADvBxiH,EAAAA,YAIYD,EAAAA,MAAAb,EAAA,EAAA,OAFT,SAAUa,EAAAA,MAAKlS,CAAA,EAAC,aAChB,KAAI,CAAA,KAAUkS,QAAKlS,CAAA,EAAC,IAAI,iCAE3BqgC,EAAA,UAAA,EAAAluB,EAA0D,YAAAD,QAArCpO,EAAA,EAAAmiD,EAAA,eAAAvzC,aAAA,CAAA,IAAA,GAAAuiH,EAAY/iH,EAAAA,MAAAlS,CAAA,EAAM,KAAI,GAAA,CAAA,CAAA,EAAA,KAAA,EAAA,EAAA,2CAKxCkS,EAAA,MAAAlS,CAAA,EAAM,WAAQ,sBAAzBqS,qBAeM,MAAA,OAfiC,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GACjDkC,EAAAA,mBAEO,OAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,qBACdqkH,EAAQ,KAAA,EAAA,CAAA,EAEb1jH,EAAAA,YAUqBgB,EAAA,MAAAwpB,EAAA,EAAA,KAAA,mBATnB,IAQM,CARKm5F,EAAM,QAAA,2BAAjBxiH,EAAAA,mBAQM,MAAA,OAR8B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,UAAA,CAAA,CAAA,GAC9CW,cAMYgB,EAAAA,MAAAmjH,EAAA,EAAA,CALV,QAAA,GACA,YAAU,OACT,eAAc,EACd,WAAYnjH,EAAA,MAAAlS,CAAA,EAAM,KAAK,WACvB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,wHAMlBkS,EAAAA,MAAKlS,CAAA,EAAC,WAAQ,QAAe60H,EAAM,QAAA,2BAD3CxiH,EAAAA,mBA4BM,MAAA,OA1BH,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAEF2B,EAAA,MAAAlS,CAAA,EAAM,WAAQ,2BAAzBqS,qBAAwE,MAAA,OAA5B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,CAAA,wCACxDkC,EAAAA,mBAcS,SAAA,CAbP,KAAK,SACJ,MAAKH,EAAAA,eAAA,CAAsBJ,EAAAA,MAAA3B,CAAA,EAAG,GAAE,MAAA,EAA4B2B,EAAAA,MAAA3B,CAAA,EAAG,GAAE,QAAA,IAAqD2B,EAAE,MAAA3B,CAAA,EAAC,IAA6B,SAAA,UAAA,CAAA,EAAA,CAAA2B,QAAAlS,CAAA,EAAM,WAAWkS,EAAAA,MAAKlS,CAAA,EAAC,IAAI,CAAA,IAOjL,UAAWkS,EAAK,MAAAlS,CAAA,EAAC,WAAWkS,QAAAlS,CAAA,EAAM,IAAI,EACtC,aAAYkS,EAAA,MAAA5P,CAAA,EAAO,UAAU,QAC7B,QAAOutC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAA0uC,EAAcx3E,EAAAA,MAAAlS,CAAA,EAAM,IAAI,EAAA,GAEhCkR,EAAA,YAA+EgB,QAA/EpO,EAAA,EAAA4O,aAAcR,QAAiE5I,CAAA,EAA3D,QAAO,CAAG,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,QAAQ,OAAK,GAAA,iCAE5DmJ,EAAAA,mBAOS,SAAA,CANP,KAAK,SACJ,wBAAQP,QAAE3B,CAAA,EAAC,GAAY,MAAA,EAAA2B,QAAA3B,CAAA,EAAG,GAAE,QAAA,CAAA,CAAA,EAC5B,aAAY2B,EAAA,MAAA5P,CAAA,EAAO,UAAU,OAC7B,QAAOutC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAAo9C,EAAalmF,EAAAA,MAAAlS,CAAA,EAAM,IAAI,EAAA,GAE/BkR,EAAA,YAA6EgB,QAA7EpO,EAAA,EAAA4O,aAAcR,QAA+D5I,CAAA,EAAzD,OAAM,CAAG,MAAS,EAAA4I,EAAAA,MAAA5I,CAAA,EAAM,OAAO,OAAK,GAAA,8NChQlE,MAAAtJ,EAAQiM,GAAS,aADRsF,EAC8B,CAC3C,MAAO,CACL,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,YAAa,GACb,aAAc,CACZ,QAAS,KACT,OAAQ,EACV,EACA,KAAM,CACJ,QAAS,OACT,UAAW3oB,GAASurI,GAAgB,SAASvrI,CAAK,CACpD,EACA,YAAa,KACb,MAAO,KACP,UAAW,EAEX,MAAO,KAAO,CAAC,EAAA,CAChB,EAEKsb,EAAQsN,EAAAA,SAAA,EAERjB,EAAKtF,GAAc,QAAQ,EAC3BwxC,EAAiBp7C,EAAAA,SAAS,IAAMkP,EAAG,GAAG,MAAM,CAAC,EAEnD,SAAS6nF,EAAam8B,EAAuB,CACjCpmH,EAAAnO,EAAM,SAAUu0H,CAAI,CAAA,CAGhC,SAAS7qC,EAAc6qC,EAAuB,CAClCpmH,EAAAnO,EAAM,UAAWu0H,CAAI,CAAA,6BAK/BliH,EAAA,mBAsDK,KAAA,CArDF,MAAQC,EAAA,eAAA,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,YAAa2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,MAAA,EAAU2B,WAAM,SAAWA,EAAA,MAAA3B,CAAA,EAAG,IAAG,QAAA,SAAA,CAAA,CAAA,EAC9D,MAAKo1C,EAAA,eAAEzzC,QAAKlS,CAAA,EAAC,KAAK,CAAA,IAEnBqgC,EAAAA,UAAA,EAAA,EAAAhuB,EAAA,mBA8CaqsB,EA7CI,SAAA,KAAAC,aAAAzsB,EAAAA,MAAAlS,CAAA,EAAM,MAAdjI,kBADToa,EAAA,YA8CaC,aAAA,CA5CV,IAAKra,EAAK,GACX,OAAA,GACC,KAAMma,EAAK,MAAAlS,CAAA,EAAC,YAAcy8C,EAAA,MAAiB,MAAA,qBAE5C,IAuCa,CAvCbvrC,cAuCagB,EAAAA,MAAAojH,EAAA,EAAA,CAtCX,QAAA,GACC,KAAMv9H,EACN,gBAAema,EAAAA,MAAKlS,CAAA,EAAC,aACrB,YAAWkS,EAAAA,MAAKlS,CAAA,EAAC,KACjB,eAAckS,EAAAA,MAAKlS,CAAA,EAAC,YACpB,gBAAekS,EAAAA,MAAKlS,CAAA,EAAC,YACrB,UAAWkS,EAAAA,MAAKlS,CAAA,EAAC,UACjB,cAAakS,EAAAA,MAAKlS,CAAA,EAAC,WACnB,SAAQo4F,EACR,UAAS1O,wBAEMxlF,EAAM,MAAQgO,EAAA,SAAM,MAAM,WAAO,UAC/C,GAAA2zC,EAAA,QAAA,CAcO,CAfmD,KAAA0uE,EAAM,OAAAM,EAAQ,WAAAC,KAAU,CAClFviH,aAcOC,EAAA,OAAA,OAAA,CAZJ,KAAA+hH,EACA,OAAAM,EACA,WAAAC,CAAA,EAJH,IAcO,CARL5jH,cAOYgB,EAAAA,MAAAb,EAAA,EAAA,CANT,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KACtB,KAAI,CAAoB,KAAAu0H,EAAsB,OAAAM,EAAwB,WAAAC,CAAA,mDAQ7D5wH,EAAM,MAAQgO,EAAA,SAAM,MAAM,WAAO,OAC/C,GAAA2zC,EAAA,QAAA,CAOO,CARgD,KAAA0uE,EAAM,OAAAM,EAAQ,WAAAC,KAAU,CAC/EviH,aAOOC,EAAA,OAAA,OAAA,CALJ,KAAA+hH,EACA,OAAAM,EACA,WAAAC,CAAA,EAJH,IAOO,CADL5jH,cAAuFgB,EAAAA,MAAAb,EAAA,EAAA,CAA5E,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,KAAO,KAAQ,CAAA,KAAAu0H,EAAM,OAAAM,EAAQ,WAAAC,CAAU,uLAKhFviH,EAAAA,WAEOC,qBAFP,IAEO,CADLtB,cAAoDgB,EAAAA,MAAAb,EAAA,EAAA,CAAzC,SAAUa,EAAA,MAAAlS,CAAA,EAAM,MAAM,MAAA,iCCnGvC,SAASu1H,GAASf,EAAagB,EAAqB,CAClD,MAAMl9H,EAAU,gBAAgBk8H,CAAG,IAAIgB,EAAI,MAAM,IAC3CjxF,EAAQ,IAAI,MAAMjsC,CAAO,EAEzB,OAAAisC,EAAA,SAAWkxF,GAAQD,CAAG,EAC5BjxF,EAAM,IAAMiwF,EACZjwF,EAAM,OAASixF,EAAI,OACnBjxF,EAAM,OAAS,OAERA,CACT,CAEA,SAASkxF,GAAQD,EAAqB,CAC9B,MAAA7tE,EAAO6tE,EAAI,cAAgBA,EAAI,SAErC,GAAI,CAAC7tE,EACI,OAAAA,EAGL,GAAA,CACK,OAAA,KAAK,MAAMA,CAAI,OACZ,CACH,OAAAA,CAAA,CAEX,CAEO,SAAS+tE,GAAO7qI,EAA6B,CAC9C,GAAA,OAAO,eAAmB,IACrB,OAAAjB,GAGH,MAAA4rI,EAAM,IAAI,eACVhB,EAAM3pI,EAAQ,IAEhB2qI,EAAI,QAAU3qI,EAAQ,aACpB2qI,EAAA,OAAO,WAAsBt8H,GAAA,CAC/B,IAAI5I,EAAU,EAEV4I,EAAM,MAAQ,IACL5I,EAAA4I,EAAM,OAASA,EAAM,MAAS,KAG3CrO,EAAQ,WAAYyF,CAAO,CAC7B,GAGI,MAAAqlI,EAAW,IAAI,SAErB,GAAI9qI,EAAQ,KAAM,CAChB,MAAMgN,EAAOhN,EAAQ,KAErB,OAAO,KAAKgN,CAAI,EAAE,QAAe9O,GAAA,CAC/B4sI,EAAS,OAAO5sI,EAAK8O,EAAK9O,CAAG,CAAC,CAAA,CAC/B,CAAA,CAGH4sI,EAAS,OAAO9qI,EAAQ,OAAS,OAAQA,EAAQ,IAAI,EAC7CA,EAAA,KAAK,MAAQ8qI,EAAS,OAAO9qI,EAAQ,WAAa,OAAQA,EAAQ,KAAK,IAAI,EAE/EA,EAAQ,UACV2qI,EAAI,QAAU,IAAM,CAClB3qI,EAAQ,QAAS0qI,GAASf,EAAKgB,CAAG,CAAC,CACrC,GAGFA,EAAI,OAAS,IAAM,OACjB,GAAIA,EAAI,OAAS,KAAOA,EAAI,QAAU,IAAK,CACrC3qI,EAAQ,SACVA,EAAQ,QAAQ0qI,GAASf,EAAKgB,CAAG,CAAC,EAGpC,MAAA,CAGI,MAAApsG,EAAOqsG,GAAQD,CAAG,GAExBz0H,EAAAlW,EAAQ,YAAR,MAAAkW,EAAA,KAAAlW,EAAoBu+B,EACtB,EAEIv+B,EAAQ,UACV2qI,EAAI,QAAU,IAAM,CAClB3qI,EAAQ,QAAS,CACnB,GAGE2qI,EAAA,KAAK,OAAQhB,EAAK,EAAI,EAEtB3pI,EAAQ,iBAAmB,oBAAqB2qI,IAClDA,EAAI,gBAAkB,IAGlB,MAAAI,EAAU/qI,EAAQ,SAAW,CAAC,EAEpC,cAAO,KAAK+qI,CAAO,EAAE,QAAkB5pD,GAAA,CACjCljF,GAAI8sI,EAAS5pD,CAAM,GAAKhjF,GAAU4sI,EAAQ5pD,CAAM,CAAC,GACnDwpD,EAAI,iBAAiBxpD,EAAQ4pD,EAAQ5pD,CAAM,CAAC,CAC9C,CACD,EAEDwpD,EAAI,KAAKG,CAAQ,EAEV,IAAMH,EAAI,MAAM,CACzB,CCtFsD,SAAAlwF,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAWtD,SAASgpI,IAAuC,CAC9C,MAAO,CACL33H,GAAI5T,GAAc,EAClBkO,KAAM,GACNxO,KAAM,EACNnB,KAAM,GACN4rI,OAAQ,KACRI,OAAQX,GAAW4B,QACnBhB,WAAY,EACZp0H,OAAQ,KACR8zH,IAAK,KACLrgH,KAAM,GACNqhH,IAAK,KACLO,SAAU,KACVxxF,MAAO,KACPyxF,MAAOpsI,EACR,CACH,CAEA,MAAe6lB,qBAAgB,CAC7BjX,KAAM,SACNwH,MAAO6zH,GACPhuF,MAAO,CAAC,kBAAkB,EAC1Bn2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,CACrC,KAAM,CACJC,MAAAA,EACAC,QAAAA,EACA5vB,MAAAA,EACAvC,SAAAA,EACAoyB,QAAAA,EACAj8C,KAAAA,EACAk8C,cAAAA,EACAC,cAAAA,EACAC,cAAAA,CACF,EAAIhD,GAAmCkD,CAAK,EAEtCtmC,EAAQiM,GAAS,SAAU0D,EAAQ,CACvCyG,MAAOtI,GAAgBsI,CAAK,EAC5B9T,OAAQ,KACRkyH,IAAK,CACH3kH,QAAS,GACTC,OAAQ,EACT,EACDmmH,SAAU,CACRpmH,QAASA,IAAMs2B,EAAe,EAC9Br2B,OAAQ,EACT,EACDtd,SAAU,GACV2/D,IAAK,GACL+jE,OAAQ,KACR13H,OAAQ,GACR23H,QAAS,CACPtmH,QAAS,KACTtD,UAAW3jB,IAASA,IAAS,CAC9B,EACDk5C,MAAO,OACPjqC,KAAMA,KAAO,CAAA,GACb+9H,QAASA,KAAO,CAAA,GAChBQ,gBAAiB,GACjBC,OAAQ,GACRC,YAAa,GACbC,WAAY,CACV1mH,QAAS,EACTtD,UAAW3jB,IAASA,IAAS,CAC9B,EACD4tI,UAAW,GACXC,eAAgB,CACd5mH,QAAS,KACTpD,OAAQ,EACT,EACDiqH,eAAgB,CACd7mH,QAAS,KACTpD,OAAQ,EACT,EACDkqH,aAAc,CACZ9mH,QAAS,KACTpD,OAAQ,EACT,EACDmqH,YAAa,GACbC,SAAU,CACRhnH,QAAS,OACTtD,UAAW3jB,IAASurI,GAAgBhkH,SAASvnB,EAAK,CACnD,EACDyhB,MAAO,GACPysH,YAAa,KACbC,UAAW,GACXC,UAAW,OACXC,cAAe,GACfC,YAAa,KACbrjH,SAAUA,IAAMA,EAASjrB,MACzBq9C,QAASA,IAAMA,EAAQr9C,MACvB0+C,YAAa74B,GAAgB,EAC7B84B,YAAa,GACbC,cAAe,KACf8qB,MAAO,GACP6kE,aAAcA,IAAM,CAAE,EAEtBr/F,UAAW,KACXt/B,KAAM,CACJqX,QAAS,GACTC,OAAQ,EACT,EACDsnH,YAAa,CACXvnH,QAAS,KACTpD,OAAQ,EACT,EACDvI,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEKqM,EAAKtF,GAAc,QAAQ,EAC3B3I,EAASI,GAAU,SAAU07B,EAAAA,MAAMp+B,EAAO,QAAQ,CAAC,EACnDsJ,EAAQU,GAAU,EAClBqtH,EAAa3lH,EAAG,IAAC,EAAE,EACnB+6F,EAAa/6F,EAAG,IAAC,EAAK,EAEtBi4B,EAAQj4B,EAAAA,IAAuB,EAC/BkkC,EAASlkC,EAAAA,IAAkC,EAC3C6wD,EAAQ7wD,EAAAA,IAAkB,EAE1B/F,EAAWtK,EAAAA,SAAS,IAAMrB,EAAMimC,SAAWjmC,EAAMunC,WAAW,EAC5D3jC,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAG,EACN8jB,EAAGo4B,GAAG,MAAM,EACZp4B,EAAGE,GAAG,QAAQzQ,EAAM62H,QAAQ,EAAE,EAC9B,CACE,CAACtmH,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMoW,KAAK,CAAC,EAAGpW,EAAMoW,QAAU,UACtC,CAAC7F,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAMxN,SAC3B,CAAC+d,EAAGE,GAAG,MAAM,CAAC,EAAGzQ,EAAMw2H,UACvB,CAACjmH,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAM42H,YACzB,CAACrmH,EAAGE,GAAG,OAAO,CAAC,EAAGzQ,EAAMqK,MACxB,CAACkG,EAAGE,GAAG,WAAW,CAAC,EAAGzQ,EAAMi3H,cAC5B,CAAC1mH,EAAGE,GAAG,OAAO,CAAC,EAAGzQ,EAAMsyD,MACxB,CAAC/hD,EAAGE,GAAG,UAAU,CAAC,EAAG,CAACzQ,EAAMs2H,aAAegB,EAAY1uI,MAAM2B,OAC7D,CAACgmB,EAAGE,GAAG,UAAU,CAAC,EAAG9E,EAAS/iB,MAC9B,CAAC2nB,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAMimC,OAC5B,CAAC,CAEJ,EACKc,EAAe1lC,EAAAA,SAAS,IACxBrB,EAAMsyD,MACD,CACL,CAAC/hD,EAAGg8B,GAAG,eAAe,CAAC,EAAG,GAC1B,CAACh8B,EAAGm8B,IAAI,gBAAiB,WAAW,CAAC,EAAG+/D,EAAW7jH,MACnD,CAAC2nB,EAAGm8B,IAAI,gBAAiB,UAAU,CAAC,EAAG1sC,EAAM6T,QAC9C,EAGI,CACL,CAACtD,EAAGg8B,GAAG,SAAS,CAAC,EAAG,GACpB,CAACh8B,EAAGm8B,IAAI,UAAW,WAAW,CAAC,EAAG+/D,EAAW7jH,KAC9C,CACF,EACK2uI,EAAel2H,EAAAA,SAAS,IAAM,QAClC,MAAM60H,GAASl2H,EAAMsyD,OAAStyD,GAAAA,EAAMk2H,SAANl2H,MAAAA,GAAczV,OAASyV,EAAMk2H,OAAS,UAAal2H,EAAMk2H,OAEvF,OAAOA,KAAW,OAAOA,IAAW,SAAWA,GAASA,GAAOsB,OACjE,CAAC,EACKC,EAAcp2H,WAAS,IAAMrB,EAAMm3H,aAAa75H,IAAIi3H,IAAQmD,EAAgBnD,EAAI,CAAC,CAAC,EAClF+C,EAAcj2H,EAAAA,SAAS,IACpBo2H,EAAY7uI,MAChB+uI,OAAON,EAAWzuI,KAAK,EACvB4V,OAAOzG,IAAQA,GAAK88H,SAAWX,GAAW0D,MAAM,CACpD,EAEDhrH,EAAAA,MACE,IAAM5M,EAAMi2H,SACZrtI,IAAS,CACP,MAAMivI,GAAQ,IAAIrN,IACZsN,GAAU,IAAItN,IAEpB,UAAWp0G,MAASihH,EAAWzuI,MACzBI,GAAUotB,GAAMlY,EAAE,GACpB25H,GAAMt6H,IAAI6Y,GAAMlY,GAAIkY,EAAK,EAGvBA,GAAM1V,QACRo3H,GAAQv6H,IAAI6Y,GAAM1V,OAAQ0V,EAAK,EAInCihH,EAAWzuI,OAASA,IAAS,IAAI0U,IAAIi3H,IACnCmD,EACEnD,GACAA,GAAKr2H,GAAK25H,GAAM5mI,IAAIsjI,GAAKr2H,EAAE,EAAIq2H,GAAK7zH,OAASo3H,GAAQ7mI,IAAIsjI,GAAK7zH,MAAM,EAAIuQ,MAC1E,CACF,EACA8mH,GAAgB,CAClB,EACA,CAAEtuF,UAAW,GAAMuuF,KAAM,EAAK,CAChC,EAEAlyF,EAAO,CACL2mE,WAAAA,EACAwrB,QAAAA,GACA7/B,aAAAA,GACA9xD,MAAAA,EACAuD,KAAMA,IAAM,YACV+L,GAAAA,EAAOhtD,QAAPgtD,MAAAA,GAActZ,IAAIuN,QAClB04B,GAAAA,EAAM35E,QAAN25E,MAAAA,GAAa14B,MACf,CACF,CAAC,EAED,SAASvD,EAAMz7C,GAAwB,YACjC+qD,GAAAA,EAAOhtD,QAAPgtD,MAAAA,GAActZ,IAChBsZ,EAAOhtD,MAAM0zC,IAAIgK,MAAMz7C,EAAO,GAE9B03E,GAAAA,EAAM35E,QAAN25E,MAAAA,GAAaj8B,MAAMz7C,GAEvB,CAEA,SAASm8D,GAAc,QACjBhnD,EAAM6T,UAAYlI,EAAS/iB,OAE/B,CAACoX,EAAMi3H,iBAAiBttF,GAAAA,EAAM/gD,QAAN+gD,MAAAA,GAAauuF,QACvC,CAEA,SAAS9sF,EAAclyC,GAAsB,CAC3C,MAAMnQ,GAAMmQ,GAAM60F,MAAQ70F,GAAMnQ,KAE5BA,KAAQ,SAAWA,KAAQ,UAC7Bi+D,EAAa,CAEjB,CAEA,SAASmxE,EAAkBj/H,GAAc,CACvC,MAAM/H,GAAS+H,GAAM/H,OAEjBA,IAAAA,MAAAA,GAAQinI,OACVC,EAAkBlnI,GAAOinI,KAAK,CAElC,CAEA,eAAeC,EAAkBC,GAA2C,CAC1E,MAAMC,GAAc36E,MAAM9e,KAAKw5F,IAAc,CAAA,CAAE,EAEzCF,GADYp4H,EAAM42H,YACEh5E,MAAM9e,KAAKu4F,EAAWzuI,KAAK,EAAI,CAAE,EAE3D,UAAW2rI,MAAQgE,GAAa,CACzBhE,GAAKpgH,OACRogH,GAAKpgH,KAAOogH,GAAKiE,oBAGnB,IAAIC,GAAYC,EAAqBnE,EAAI,EAkBzC,GAhBIkE,GAEAA,GAAU5D,SAAWX,GAAWyE,SAChCF,GAAU5D,SAAWX,GAAW0E,YAEhCH,GAAU5D,OAASX,GAAW4B,SAGhC2C,GAAYf,EAAgB,CAC1Bl/H,KAAM+7H,GAAK/7H,KACXxO,KAAMuqI,GAAKvqI,KACXnB,KAAM0rI,GAAK1rI,KACX6X,OAAQ6zH,EACV,CAAC,EAGC,OAAOv0H,EAAM02H,gBAAmB,WAAY,CAC9C,IAAIpjI,GAAS0M,EAAM02H,eAAe+B,GAAWL,EAAK,EAMlD,GAJI9uI,GAAUgK,EAAM,IAClBA,GAAS,MAAMA,IAGblK,GAAQkK,EAAM,EAAG,QACvB,CAEK8kI,GAAMjoH,SAASsoH,EAAS,GAC3BL,GAAMphE,KAAKyhE,EAAS,CAExB,CAEA,MAAMlC,GAAav2H,EAAMu2H,WAEzB,GAAIA,GAAa,GAAK6B,GAAM7tI,OAASgsI,GAAY,CAC/C,MAAMsC,GAAcT,GAAM3tF,MAAM8rF,EAAU,EAE1CpoH,EAAUnO,EAAM84H,SAAUD,EAAW,EACrCxB,EAAWzuI,MAAQwvI,GAAM3tF,MAAM,EAAG8rF,EAAU,CAC9C,MACEc,EAAWzuI,MAAQwvI,GAGrBL,GAAgB,EAChB3tF,EAAiB,EAEZpqC,EAAMq2H,QACT4B,GAAS,CAEb,CAEA,SAAS7tF,GAAkB,CACzBpL,EAAK,mBAAoBq4F,EAAWzuI,KAAK,EACzCw9C,EAAcixF,EAAWzuI,KAAK,EAC9BulB,EAAUnO,EAAMuqC,SAAU8sF,EAAWzuI,KAAK,EAC1Cs9C,EAAe,CACjB,CAEA,SAASwyF,EAAqBnE,GAAwB,CACpD,KAAM,CAAE/7H,KAAAA,GAAMxO,KAAAA,GAAMnB,KAAAA,EAAK,EAAI0rI,GACvBpgH,GAAOogH,GAAKpgH,MAAQogH,GAAKiE,mBAE/B,OAAOnB,EAAWzuI,MAAMgqE,KAAK,CAAC,CAAElyD,OAAAA,EAAO,IAEnCA,KACCA,GAAOyT,MAAQzT,GAAO83H,sBAAwBrkH,IAC/CzT,GAAOlI,OAASA,IAChBkI,GAAO1W,OAASA,IAChB0W,GAAO7X,OAASA,EAEnB,CACH,CAEA,SAAS6uI,EACPnD,GACA9B,GAAWoD,GAAmB,EACb,CACjB,KAAM,CAAE33H,GAAAA,GAAI1F,KAAAA,GAAMxO,KAAAA,GAAMnB,KAAAA,GAAM4rI,OAAAA,GAAQI,OAAAA,GAAQC,WAAAA,GAAYp0H,OAAAA,GAAQ8zH,IAAAA,GAAKrgH,KAAAA,EAAK,EAAIogH,GAEhFjlH,cAAOypH,OAAOtG,GAAU,CACtBv0H,GAAIA,IAAMu0H,GAASv0H,IAAM5T,GAAc,EACvCkO,KAAMA,IAAQ,GACdxO,KAAMA,IAAQ,EACdnB,KAAMA,IAAQ,GACd4rI,OAAQA,IAAU,KAClBI,OAAQA,IAAUX,GAAW4B,QAC7BhB,WAAYA,IAAc,EAC1Bp0H,OAAQA,IAAU,KAClB8zH,IAAKA,IAAO,KACZrgH,KAAMA,IAAQ,GACdqhH,IAAK,KACLO,SAAU,KACVxxF,MAAO,IACT,CAAC,EAEMkuF,EACT,CAEA,SAASuC,EAAiBT,GAAuB,CAC/C,OAAOA,GAAK/7H,KAAKulD,MAAM,GAAG,EAAE+b,IAAK,EAAEgxD,kBAAmB,CACxD,CAEA,eAAemN,IAAU,CACvB,GAAI,CAACj4H,EAAMw0H,KAAO,CAACwE,EAAW,EAC5B,MAAO,GAGT,MAAMC,GAAc5B,EAAWzuI,MAAM4V,OACnCzG,IAAQA,GAAK88H,SAAWX,GAAWyE,SAAW5gI,GAAK88H,SAAWX,GAAW0D,MAC3E,EACMsB,GAA2B,CAAE,EAEnC,UAAW3E,MAAQ0E,GACjBC,GAASliE,KAAKmiE,GAAW5E,EAAI,EAAE6E,MAAMxvI,EAAI,CAAC,EAG5C,OAAO,MAAM6tD,QAAQ4hF,IAAIH,EAAQ,EAAEI,KAAKC,IAAaA,GAAU/6H,OAAOu3H,IAAYA,EAAQ,CAAC,CAC7F,CAEA,eAAeoD,GAAW5E,GAAuB,CAC/C,GAAI,OAAOv0H,EAAMy2H,gBAAmB,WAAY,CAC9C,IAAInjI,GAAS0M,EAAMy2H,eACjBlC,GACA8C,EAAWzuI,MAAM4V,OACfzG,IAAQA,GAAK88H,SAAWX,GAAWyE,SAAW5gI,GAAK88H,SAAWX,GAAW0D,MAC3E,CACF,EAEA,GAAItuI,GAAUgK,EAAM,EAClB,GAAI,CACFA,GAAS,MAAMA,EAChB,MAAW,CACV,MACF,CAGF,GAAIlK,GAAQkK,EAAM,EAAG,OAEjBA,cAAkBkmI,OAChBlmI,cAAkBuS,KACpB0uH,GAAK7zH,OAASpN,GAEdihI,GAAK7zH,OAAS,IAAImF,KAAK,CAACvS,EAAM,EAAGihI,GAAK/7H,KAAM,CAC1C3P,KAAM0rI,GAAK1rI,IACb,CAAC,EAGP,CAEA,GAAI,CAAC0rI,GAAK7zH,OAAQ,OAElB6zH,GAAKM,OAASX,GAAW0E,UAEzB,KAAM,CAAEpE,IAAAA,GAAKoB,QAAAA,GAASQ,gBAAAA,GAAiBv+H,KAAAA,GAAMiqC,MAAAA,GAAOk1F,UAAAA,EAAU,EAAIh3H,EAElE,OAAO,MAAM,IAAIy3C,QAAQ,CAACzhB,GAASyjG,KAAW,CAC5ClF,GAAKyB,OAASh2H,EAAMo3H,aAAe1B,IAAQ,CACzClB,IAAAA,GACAoB,QAAAA,GACAQ,gBAAAA,GACAv+H,KAAAA,GACAiqC,MAAAA,GACAk1F,UAAAA,GACAzC,KAAMA,GAAK7zH,OACXg5H,WAAYppI,IAAW,CACrBqpI,GAAerpI,GAASikI,EAAI,CAC7B,EACDz7D,UAAWi9D,IAAY,CACrB6D,GAAc7D,GAAUxB,EAAI,EAC5Bv+F,GAAQ+/F,EAAQ,CACjB,EACD8D,QAASt1F,IAAS,CAChBsjB,GAAYtjB,GAAOgwF,EAAI,EACvBkF,GAAOl1F,EAAK,CACb,EACDu1F,QAASA,IAAM,CACb9jG,GAAQ,IAAI,CACd,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAASgjG,GAAc,CACrB,MAAMe,GAAY/5H,EAAMm2H,QAAUn2H,EAAMm2H,QAAU,KAAOjpF,IACnD1uC,GACJ,OAAOwB,EAAMxB,QAAW,SACpBwB,EAAMxB,OACJ,CAACwB,EAAMxB,MAAM,EACb,CAAA,EACFwB,EAAMxB,OAAOA,OAAOzG,IAAQA,EAAI,EAEtC,QAAS3N,GAAI,EAAG4H,GAAMqlI,EAAWzuI,MAAM2B,OAAQH,GAAI4H,GAAK,EAAE5H,GAAG,CAC3D,MAAMmqI,GAAO8C,EAAWzuI,MAAMwB,EAAC,EACzB8qI,GAAYF,EAAiBT,EAAI,EAEvC,GAAI/1H,GAAOjU,QAAU,CAACiU,GAAO2R,SAAS+kH,EAAS,EAC7C/mH,OAAAA,EAAUnO,EAAMg6H,cAAezF,EAAI,EAE5B,GAGT,GAAIA,GAAKvqI,KAAO+vI,GACd5rH,OAAAA,EAAUnO,EAAMi6H,YAAa1F,EAAI,EAE1B,EAEX,CAEA,MAAO,EACT,CAEA,SAASn8B,GAAam8B,GAAuB,QAC3CA,GAAKM,OAASX,GAAW0D,QAEzBrD,GAAAA,GAAKyB,QAALzB,MAAAA,GAAAA,KAAAA,IACAwD,GAAgB,EAChB5pH,EAAUnO,EAAMk6H,SAAU3F,EAAI,EAC9BnqF,EAAiB,CACnB,CAEA,SAASs/C,GAAc6qC,GAAuB,CAC5CpmH,EAAUnO,EAAMm6H,UAAW5F,EAAI,CACjC,CAEA,SAASwD,IAAiB,CACxB,GAAI,CAACvvI,GAAU,OAEf,MAAM4xI,GAAe,IAAIC,aACzBhD,EAAWzuI,MAAQyuI,EAAWzuI,MAAM4V,OAAOzG,IAAQA,GAAK88H,SAAWX,GAAW0D,MAAM,EAEpFP,EAAWzuI,MAAM6hI,QAAQ1yH,IAAQ,CAC/BA,GAAK2I,QAAU05H,GAAa16H,MAAM7O,IAAIkH,GAAK2I,MAAM,CACnD,CAAC,EAEGipC,EAAM/gD,QACR+gD,EAAM/gD,MAAMwvI,MAAQgC,GAAahC,MAErC,CAEA,SAASuB,GAAerpI,GAAiBikI,GAAuB,CAC1DA,GAAKM,SAAWX,GAAW0D,SAE/BrD,GAAKO,WAAaxkI,GAElB6d,EAAUnO,EAAM05H,WAAYnF,GAAMjkI,EAAO,EACzC85C,EAAiB,EACnB,CAEA,SAASwvF,GAAc7D,GAAexB,GAAuB,CACvDA,GAAKM,SAAWX,GAAW0D,SAE/BrD,GAAKM,OAASX,GAAWyE,QACzBpE,GAAKwB,SAAWA,GAChBxB,GAAKhwF,MAAQ,KAEbp2B,EAAUnO,EAAM84D,UAAWy7D,GAAMwB,EAAQ,EACzC3rF,EAAiB,EACnB,CAEA,SAASyd,GAAYtjB,GAAwBgwF,GAAuB,CAC9DA,GAAKM,SAAWX,GAAW0D,SAE/BrD,GAAKM,OAASX,GAAWoG,KACzB/F,GAAKhwF,MAAQA,GAEbp2B,EAAUnO,EAAM65H,QAAStF,GAAMhwF,EAAK,EACpC6F,EAAiB,EACnB,CAEA,IAAIkiF,GAEJ13G,EAAAA,gBAAgB,IAAM,CACpBigC,aAAay3E,EAAS,CACxB,CAAC,EAED,eAAe7e,EAAWv0G,GAAkB,CAC1C,GAAI,GAAC8G,EAAMw2H,WAAax2H,EAAM6T,UAAYlI,EAAS/iB,SAEnDisD,aAAay3E,EAAS,EACtBpzH,GAAMkzC,eAAgB,EAEtBqgE,EAAW7jH,MAAQ,GAEfsQ,GAAMkhI,cAAc,CACtB,MAAMhC,GAAQ,MAAMmC,EAAiBrhI,GAAMkhI,YAAY,EAEvDhC,GAAM7tI,QAAU8tI,EAAkBD,EAAK,CACzC,CACF,CAEA,SAASoC,EAAgBthI,GAAkB,CACrC,CAAC8G,EAAMw2H,WAAax2H,EAAM6T,UAAYlI,EAAS/iB,QAEnDisD,aAAay3E,EAAS,EACtBpzH,GAAMkzC,eAAgB,EAEtBqgE,EAAW7jH,MAAQ,GACrB,CAEA,SAAS8kH,EAAgBx0G,GAAkB,CACrC,CAAC8G,EAAMw2H,WAAax2H,EAAM6T,UAAYlI,EAAS/iB,QAEnDsQ,GAAMkzC,eAAgB,EAEtBkgF,GAAYpiF,WAAW,IAAM,CAC3BuiE,EAAW7jH,MAAQ,EACpB,EAAE,GAAG,EACR,CAEA,eAAe2xI,EAAiBH,GAA4B,WAC1D,KAAM,CAAE16H,MAAAA,GAAO04H,MAAAA,EAAM,EAAIgC,GAEzB,GAAI,CAAC16H,GAAMnV,OAAQ,MAAO,CAAE,EAE5B,MAAMkwI,GAAyB,CAAE,EAC3BC,GAA2D,CAAE,EAC7DC,GAA6B,CAAE,EAErC,QAASvwI,GAAI,EAAG4H,GAAM0N,GAAMnV,OAAQH,GAAI4H,GAAK,EAAE5H,GAAG,CAChD,MAAM+nD,IAASzyC,IAAAA,GAAAA,GAAMtV,EAAC,GAAEwwI,mBAATl7H,YAAAA,GAAAA,KAAAA,IAGf,GAAI,CAACyyC,GAAQ,OAAOimF,GAEhBjmF,GAAO0oF,OACTJ,GAAezjE,KAAKohE,GAAMhuI,EAAC,CAAC,EAE5BswI,GAAQ1jE,KAAK,CAAE8jE,IAAK3oF,GAAsC5L,OAAQ,EAAG,CAAC,CAG1E,CAEA,GAAI,CAACvmC,EAAM+2H,WAAa,CAAC2D,GAAQnwI,OAAQ,OAAOkwI,GAEhD,MAAMM,GAAiE,CAAE,EAEzE,IAAIxE,GAAav2H,EAAMu2H,YAAcv2H,EAAM42H,YAAcS,EAAWzuI,MAAM2B,OAAS,GACnFgsI,GAAaz4E,KAAKniC,MAAM46G,EAAU,EAAI,EAAIA,GAAa,IAEvD,MAAMyE,GAAYA,IAAM,CACtB,KAAON,GAAQnwI,QAAQ,CACrB,MAAMqU,GAAO87H,GAAQz2G,MAAQ,EACvB62G,GAAMl8H,GAAKk8H,IACXv0F,GAAS3nC,GAAK2nC,OAAS,GAAG3nC,GAAK2nC,MAAM,IAAIu0F,GAAItiI,IAAI,GAAKsiI,GAAItiI,KAC1D48H,GAAS0F,GAAIG,aAAc,EAEjCN,GAAU3jE,KACR,IAAIvf,QAAczhB,IAAW,CAC3Bo/F,GAAO8F,YAAYhjH,IAAW,CAC5BA,GAAQuyG,QAAQzyH,IAAS,CACnBA,GAAM6iI,OACRE,GAAY/jE,KAAK,CAAEh/D,MAAAA,GAAOuuC,OAAAA,EAAO,CAAC,EAElCm0F,GAAQ1jE,KAAK,CAAE8jE,IAAK9iI,GAAOuuC,OAAAA,EAAO,CAAC,CAEvC,CAAC,EAEDvQ,GAAS,CACX,CAAC,CACH,CAAC,CACH,CACF,CACD,EAED,KACEglG,GAAW,EACX,MAAMvjF,QAAQ4hF,IAAIsB,EAAS,EAEvB,GAACD,GAAQnwI,QAAUwwI,GAAYxwI,QAAUgsI,KAA7C,CAKF,OAAIwE,GAAYxwI,OAAS,EAChBkwI,GAAe9C,OACpB,MAAMlgF,QAAQ4hF,IACZ0B,GAAYz9H,IACV,CAAC,CAAEtF,MAAAA,GAAOuuC,OAAAA,EAAQ,IAChB,IAAIkR,QAAczhB,IAChBh+B,GAAMu8H,KAAKA,IAAQ,CACjBA,GAAKpgH,KAAO,GAAGoyB,EAAM,IAAIguF,GAAK/7H,IAAI,GAClCw9B,GAAQu+F,EAAI,CACd,CAAC,CACH,CACJ,CACF,CACF,EAGKkG,EACT,CAEA,SAASruF,EAAelzC,GAAc,CACpCA,GAAMkzC,eAAgB,CACxB,CAEA,SAAS+uF,GAAqB,CAC5B,MAAO,CAACn7H,EAAMw2H,WAAa,CAACx2H,EAAMi3H,cAAa/lH,EAAA,YAAAwtB,WAAAxtB,KAAAA,CAAAA,EAAAA,YAAA46C,GAAA,CAAA,IAGpClW,EAAM,QAAA,GAAA,KAEL5rD,EAAKpB,MAAK,KACVoX,EAAMoW,MAAK,SACPpW,EAAM6T,SAAQ,QACf7T,EAAMimC,OAAO,EAAA,CAGpBp2B,QAASA,IAAM7P,EAAMk3H,aAAe50H,EAAO1Z,MAAM8sI,OACjDnsH,KAAMA,IAAA2H,EAAAA,YAAApN,GAAgBwF,EAAM1gB,MAAM8sI,OAAU,IAAA,EAC5CzvF,QAASA,IAAA/0B,EAAAA,YAAApN,GAAA4O,EAAA,WAEDpJ,EAAM1gB,MAAMq9C,QAAO,CAAA,MAChB11B,EAAGg8B,GAAG,cAAc,EAAC,OACpBvsC,EAAMwnC,eAAiBl+B,EAAM1gB,MAAMq9C,QAAQ71B,OAAM,KACnDpQ,EAAMsnC,aAAeh+B,EAAM1gB,MAAMq9C,QAAQ18B,KAAI,MAC5C,SAAS,CAAA,EAAA,IAAA,CAEnB,CAAA,EAGJ4H,EAAU,WAACjN,EAAO,MAAO+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACrBrR,EAAMkE,MAAMiuD,GAAG,EAAA,CAAAtiD,QAAAA,IAAA,CAChC7P,EAAMmyD,KAAGjhD,EAAAA,YAAA,IAAA,CAAA,MAAcX,EAAGg8B,GAAG,KAAK,GAAIvsC,CAAAA,EAAMmyD,GAAG,CAAK,CAAA,CAExD,CAAA,CAAA,CAAA,CAAC,GAAAjhD,EAAAA,YAAA,MAAA,CAAA,IAIGqxD,EAAK,MACH,CAAChyD,EAAGg8B,GAAG,YAAY,EAAGvsC,EAAM6T,UAAYtD,EAAGm8B,IAAI,aAAc,UAAU,CAAC,EAAC,SACtE,CAAC,EAAA,CAEVv7B,EAAU,WAACjN,EAAO,QAAS+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACvBrR,EAAMkE,MAAMk3H,KAAK,EAAA,CAAAvrH,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAE7BpJ,EAAM1gB,MAAMyyI,YAAW,CAAA,MACpB,CAAC9qH,EAAGg8B,GAAG,OAAO,EAAGvsC,EAAM6T,UAAYtD,EAAGm8B,IAAI,QAAS,UAAU,CAAC,EAAC,MAC/D,EAAEpjC,EAAM1gB,MAAMyyI,YAAYtrH,OAAS,GAAK,CAAC,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAGrD,EACAoB,EAAAA,WAAWjN,EAAO,MAAO+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACrBrR,EAAMkE,MAAMiuD,GAAG,EAAA,CAAAtiD,QAAAA,IAAA,CAAAqB,EAAA,YAAA,IAAA,CAAA,MACvBX,EAAGg8B,GAAG,KAAK,GAAIvsC,CAAAA,EAAMmyD,KAAO7vD,EAAO1Z,MAAM0yI,WAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAEjE,EAACpqH,cAAApN,GAAA4O,EAAAA,WAEIpJ,EAAM1gB,MAAMq9C,QAAO,CAAA,MAChB11B,EAAGg8B,GAAG,cAAc,EAAC,OACpBvsC,EAAMwnC,eAAiBl+B,EAAM1gB,MAAMq9C,QAAQ71B,OAAM,KACnDpQ,EAAMsnC,aAAeh+B,EAAM1gB,MAAMq9C,QAAQ18B,KAAI,MAC5C,UAAS,MACT,CAAEkjC,QAASzsC,EAAMimC,QAAU,OAAS,IAAK,EAGrD,EAAA,IAAA,CAAA,CAAA,CACH,CAEA,SAASs1F,GAAoB,CAC3B,OAAArqH,EAAAA,YAAA,SAAA,CAAA,MAEW,CAACX,EAAGg8B,GAAG,cAAc,EAAGvsC,EAAM6T,UAAYtD,EAAGm8B,IAAI,eAAgB,UAAU,CAAC,EAAC,KAC9E,QAAQ,EAAA,CAEbv7B,EAAAA,WACCjN,EACA,UACA,CACEuoG,YAAazsG,EAAMw2H,WAAax2H,EAAMi3H,gBAAkBxqB,EAAW7jH,KACrE,EACA,IAAM,CAAAsoB,EAAA,YAAAG,GAAA,CAAA,SAEQrR,EAAMkE,MAAM2L,QAAO,KACvB,CAAE48F,YAAazsG,EAAMw2H,WAAax2H,EAAMi3H,gBAAkBxqB,EAAW7jH,KAAM,CAAC,EAAA,CAAAinB,QAAAA,IAAA,CAEjF7P,EAAMimC,QAAO/0B,EAAAA,YAAApN,GAAA4O,aAENpJ,EAAM1gB,MAAMq9C,QAAO,CAAA,MAChB11B,EAAGg8B,GAAG,cAAc,EAAC,OACpBvsC,EAAMwnC,eAAiBl+B,EAAM1gB,MAAMq9C,QAAQ71B,OAAM,KACnDpQ,EAAMsnC,aAAeh+B,EAAM1gB,MAAMq9C,QAAQ18B,KAAI,MAC5C,UAAS,MACT,CAAEyyB,aAAc,KAAM,EAAC9qB,EAAAA,IAAAA,EAAAA,cAAApN,GAAA4O,EAAAA,WAI1BpJ,EAAM1gB,MAAMiL,KAAI,CAAA,MACb,CAAC0c,EAAGg8B,GAAG,OAAO,EAAGvsC,EAAM6T,UAAYtD,EAAGm8B,IAAI,QAAS,UAAU,CAAC,EAAC,MAC/D,EAAEpjC,EAAM1gB,MAAMiL,KAAKkc,OAAS,GAAK,IAAG,MACpC,CAAEisB,aAAc,KAAM,CAEhC,CAAA,EAAA,IAAA,EAAA9qB,EAAA,YAAA,OAAA,KAAA,CACMlR,EAAMk3H,aAAe50H,EAAO1Z,MAAM8sI,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAGrD,CAAC,CAAA,CAGP,CAEA,SAASroF,IAAgB,CACvB,MAAMmuF,GAAUx7H,EAAMsyD,MAAQ,KAAO,MAErC,OAAAphD,EAAAA,YAAAsqH,GAAA,CAAA,MAEWz0F,EAAan+C,MAAK,SACf,GAAE,QACHo+D,EAAW,OACZymD,EAAU,WACN+sB,EAAe,YACd9sB,EAAe,UACjBtiE,CAAa,EAAA,CAAAv7B,QAAAA,IAEvB,CAAA,CAAC7P,EAAMi3H,eAAa/lH,EAAAA,YAAA,QAAA,CAAA,IAEZy4B,EAAK,KACJ,OAAM,MACLp5B,EAAGg8B,GAAG,OAAO,EAAC,SACXvsC,EAAM6T,SAAQ,SACd7T,EAAMxN,SAAQ,KAClBwN,EAAMxH,KAAI,OACR++H,EAAa3uI,MAAK,gBACToX,EAAM+2H,WAAa9lH,OAAS,SACnCknH,EAAiB,SACjB/rF,CAAc,EAAA,IAAA,EAG3BpsC,EAAMsyD,MACHipE,EAAiB,EACjBpqH,EAAU,WACVjN,EACA,UACA,CACEuoG,YAAazsG,EAAMw2H,WAAax2H,EAAMi3H,gBAAkBxqB,EAAW7jH,KACrE,EACA,IAAA,CAAA,IAAAmkD,GAAA,MAAM,CAAA77B,EAAA,YAAAG,GAAA,CAAA,SAEQrR,EAAMkE,MAAM2L,QAAO,KACvB,CACJ48F,YAAazsG,EAAMw2H,WAAax2H,EAAMi3H,gBAAkBxqB,EAAW7jH,KACrE,CAAC08C,EAAAA,GAAAyH,GAEAouF,EAAoB,CAAA,EAAApuF,GAAA,CAAAl9B,QAAAA,IAAA,CAAAk9B,EAAA,EAExB,CAAA,CAAA,CACH,CAAC,CAAA,CAAA,CAGT,CAEA,SAAS0uF,GAAiB,CACxB,OAAAvqH,EAAAA,YAAAwqH,GAAA,CAAA,QAAA,GAAA,MAGWpE,EAAY1uI,MAAK,gBACToX,EAAM42H,YAAW,KAC1B52H,EAAMsyD,MAAQ,YAActyD,EAAM62H,SAAQ,gBACjC72H,EAAM22H,aAAY,eACnB32H,EAAM82H,YAAW,cAClB92H,EAAM27H,WAAU,MACtB37H,EAAM83B,UAAS,SACZsgE,GAAY,UACX1O,EAAa,EAAA,CAGtB3xF,KACEmM,EAAMnM,MAAQiI,EAAMkE,MAAMnM,KACrBqI,IACD+Q,EAAAA,WAAWjN,EAAO,OAAQ9D,GAAQ,IAAM,CAAA8Q,EAAAA,YAAAG,GAAA,CAAA,SAClBrR,EAAMkE,MAAMnM,KAAI,KAAQqI,IAC7C,IAAA,CAAA,CAAA,EACD,KACNmJ,KACErF,EAAMqF,MAAQvJ,EAAMkE,MAAMqF,KACrBnJ,IACD+Q,EAAAA,WAAWjN,EAAO,OAAQ9D,GAAQ,IAAM,CAAA8Q,EAAAA,YAAAG,GAAA,CAAA,SAClBrR,EAAMkE,MAAMqF,KAAI,KAAQnJ,IAC7C,IAAA,CAAA,CAAA,EACD,KACNqmC,OAAQA,IACNzmC,EAAMsyD,QAAU,CAACtyD,EAAMu2H,YAAce,EAAY1uI,MAAM2B,OAASyV,EAAMu2H,YAClElpF,GAAa,EACb,IAAI,CAAA,CAIlB,CAEA,MAAO,IAAAn8B,EAAA,YAAA,MAAA,CAAA,GACI60B,EAAMn9C,MAAK,MAASgb,EAAUhb,MAAK,KAAQ,QAAO,kBAAmBo9C,EAAQp9C,KAAK,EAAA,CACxF,CAACoX,EAAMsyD,OAASjlB,GAAa,EAC7B,CAACrtC,EAAMs2H,aAAemF,EAAc,CAAE,CAE1C,CACF,EACD9tF,QAAS,CACPsqF,QAASruI,GACTwuG,aAAcxuG,GACd08C,MAAO18C,GACPigD,KAAMjgD,EACR,CACF,CAAC,EC71BYgyI,GAAazuH,GAAW,CACnC,IAAK,OACL,QAAS,MACT,WAAYJ,EACZ,WAAY,OACZ,KAAM,OACN,OAAQ,OACR,aAAc,OACd,cAAe,MAEf,cAAe,OACf,OAAQ,OACR,MAAO,OACP,SAAU,MACV,QAASA,EACT,YAAayB,GACb,cAAe,OACf,UAAW,OACX,MAAO,OACP,OAAQN,EAAU,EAClB,QAASA,EAAU,EACnB,QAASA,EAAU,EACnB,aAAcA,EAAkC,EAChD,eAAgBA,EAAoC,EACpD,aAAcA,EAAkC,EAChD,aAAcA,EAAmC,EACjD,YAAaA,EAAkC,EAC/C,aAAcA,EAAkD,EAChE,OAAQA,EAAU,EAClB,OAAQA,EAAU,EAClB,UAAWA,EAAU,CACvB,CAAC,EAKY2tH,GAAoB1uH,GAAW,CAC1C,KAAM,OACN,MAAO,OACP,SAAU,CAAC,OAAQ,MAAO,MAAM,EAChC,SAAUJ,EACV,SAAU,OACV,UAAWA,EACX,MAAO,CAAC,OAAQ,MAAM,EACtB,QAAS,MACT,QAASmB,EAAU,EACnB,QAASA,EAAU,EACnB,QAASA,EAAU,EACnB,QAASA,EAAuC,EAChD,OAAQA,EAAuC,EAC/C,SAAUA,EAAgD,CAC5D,CAAC,ECHK4tH,GAA8C,CAClD,KAAM,CAAC,YAAa,OAAQ,YAAa,UAAW,OAAO,EAC3D,OAAQ,CAAC,EACT,MAAO,CAAC,gBAAiB,SAAU,OAAQ,MAAO,cAAe,cAAc,CACjF,EAEA,UAAW/yI,KAAO,OAAO,KAAK+yI,EAAa,EACzCA,GAAc/yI,CAAG,EAAI,OAAO,OAAO+yI,GAAc/yI,CAAG,CAAC,EAG1C,MAAAgzI,GAA4B,OAAO,OAAOD,EAAa,EAEvDE,GAAwB,OAAO,OAAO,CACjD,KAAM,QACN,YAAa,SACb,YAAa,WACb,QAAS,IACT,KAAM,IACN,OAAQ,IACR,IAAK,IACL,cAAe,IACf,eAAgB,GAClB,CAAC,EAEYC,GAAc,uGCzErB,MAAAj8H,EAAQiM,GAAS,eADRsF,EACgC,CAC7C,KAAM,SACN,MAAO,CACL,OAAQ,GACR,QAAS,EACX,EACA,SAAU,KACV,SAAU,GACV,SAAU,CACR,OAAQ,GACR,QAAS,EACX,EACA,UAAW,GACX,MAAO,KACP,QAAS,IAAM,CAAA,CAAC,CACjB,EAUKhB,EAAKtF,GAAc,OAAO,EAE1BixH,EAAar6H,SAAOo6H,EAAW,EAE/Bn0F,EAAep2B,EAAAA,IAAI1R,EAAM,KAAK,EAE9B4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,GAAG,SAAS,CAAC,EAAG,GACpB,CAACA,EAAG,IAAI,UAAWvQ,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,SAChD,CAACuQ,EAAG,IAAI,UAAW,UAAU,CAAC,EAAGvQ,EAAM,QACzC,EACD,EACK68C,EAAWx7C,EAAAA,SAAS,IACjBrB,EAAM,OAAS,SAAWuQ,EAAG,GAAG,aAAa,EAAIA,EAAG,GAAG,eAAe,CAC9E,EACK4rH,EAAgB96H,EAAAA,SAAS,IACtBrB,EAAM,QAAQ,IAAckjD,GAC1B,OAAOA,GAAW,SAAW,CAAE,MAAOA,CAAW,EAAAA,CACzD,CACF,EACKk5E,EAAY/6H,WAAS,IAAMpE,GAAUk/H,EAAc,MAAO,QAAS,OAAW,EAAI,CAAC,EACnFE,EAAgBh7H,WAAS,IAAM+6H,EAAU,MAAM,IAAIt0F,EAAa,KAAK,CAAC,EAExE,IAAAw0F,EAEJ1vH,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACU0zI,GAAA,MAAAA,IAEb1zI,IACe0zI,EAAAJ,EAAW,YAAYtzI,EAAOo+D,CAAW,EAE9D,EACA,CAAE,UAAW,EAAK,CACpB,EAEgBpyC,EAAA,gBAAA,IAAM0nH,GAAA,YAAAA,GAAkB,EAExC,SAASt1E,GAAc,CACrB,CAAChnD,EAAM,UAAYmO,EAAUnO,EAAM,OAAO,CAAA,CAG5C,SAASu+B,EAAa2kB,EAA4B,CAC5CljD,EAAM,UAAYkjD,EAAO,WAE7Bpb,EAAa,MAAQob,EAAO,MAClB/0C,EAAAnO,EAAM,SAAUkjD,CAAM,EAAA,6BAKhC7wC,EAAA,mBAiEM,MAAA,CAjEA,uBAAOzO,EAAS,KAAA,CAAA,GACpBsN,cA+DUgB,EAAAA,MAAA6zC,EAAA,EAAA,CA9DP,QAAS7zC,EAAAA,MAAKlS,CAAA,EAAC,UAAS,cAAA,QACzB,IAAA,GACA,MAAA,GACC,SAAUkS,EAAAA,MAAUgqH,CAAA,EAAC,SAAe,IAAAhqH,QAAAgqH,CAAA,EAAW,OAAO,GACtD,YAAY,CAAAr/E,EAAA,MAAU3qC,EAAAA,MAAAlS,CAAA,EAAM,QAAQ,EACpC,WAAUkS,EAAA,MAAKlS,CAAA,EAAC,OAAI,SACpB,SAAUkS,EAAAA,MAAKlS,CAAA,EAAC,OAAI,SAAA,CAAiBkS,QAAKlS,CAAA,EAAC,MAAQkS,QAAKlS,CAAA,EAAC,SACzD,WAAW6vC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAA9oC,QAAA/D,CAAA,EAAU+D,EAAAA,MAAAlS,CAAA,EAAM,OAAO,GAClC,WAAW6vC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAmL,GAAA9oC,EAAAA,MAAA/D,CAAA,EAAU+D,EAAA,MAAAlS,CAAA,EAAM,OAAO,EAAA,GAExB,kBACT,IAWS,CAXTyS,EAAAA,mBAWS,SAAA,CAVN,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,gBAAA,CAAA,EACb,KAAK,SACJ,uBAAO2B,EAAAA,MAAS/D,CAAA,EAAC+D,EAAA,SAAM,QAAS8oC,CAAM,GACtC,sBAAM9oC,EAAAA,MAAS/D,CAAA,EAAC+D,EAAA,SAAM,OAAQ8oC,CAAM,GACpC,QAAOgM,CAAA,GAEIq1E,EAAa,MAAzB9pH,EAAAA,WAEOC,EAAA,OAAA,WAAA,OAFqC,OAAQ6pH,EAAa,KAAA,EAAjE,IAEO,qCADFA,EAAa,MAAC,eAAiBA,EAAA,MAAc,OAASA,EAAa,MAAC,KAAK,EAAA,CAAA,CAAA,GAE9E9pH,EAAoB,WAAAC,EAAA,OAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CAAA,0BAGxB,IASW,CATKN,EAAA,MAAAlS,CAAA,EAAM,OAAI,wBACxBqS,qBAOO,OAAA,OAPA,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,CAAA,GACjBgC,EAAAA,WAKOC,oBALP,IAKO,qCAJFN,QAAKlS,CAAA,EAAC,KAAK,EAAG,IACjB,CAAA,EAAYkS,QAAAlS,CAAA,EAAM,wBAAlBqS,qBAEO,OAAA,OAFsB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,kBAAA,CAAA,CAChC,EAAAqC,EAAA,gBAAA,IAAAV,EAAA,MAAAlS,CAAA,EAAM,QAAQ,GAAA,EAAA,CAAA,sCAK7BuS,EA2BO,WAAAC,yBA3BP,IA2BO,CA1BKN,EAAA,MAAAlS,CAAA,EAAM,OAAI,wBAApBqS,qBAyBK,KAAA,OAzB+B,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,iBAAA,CAAA,CAAA,IAC9C8vB,EAAAA,UAAA,EAAA,EAAAhuB,EAuBS,mBAAAqsB,WAtBmB,KAAAC,EAAA,WAAAw9F,EAAA,MAAlB,CAAAj5E,EAAQpyD,mBADlBqhB,EAAAA,YAuBSD,EAAA,MAAAk0C,EAAA,EAAA,CArBN,IAAKlD,EAAO,MACZ,MAAK5wC,EAAAA,eAAA,CAAmB,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,gBAAA,CAAA,EAAA,GAA0C,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAG,iBAAA,UAAA,CAAA,EAAiC2yC,EAAO,QAAUpb,EAAY,KAAA,GAI3I,MAAOob,EAAO,MACd,MAAOA,EAAO,MACd,SAAUA,EAAO,SACjB,QAASA,EAAO,SAChB,MAAOA,EAAO,MACf,WAAA,GACC,SAAMlI,GAAEzc,EAAa2kB,CAAM,CAAA,qBAE5B,IAOO,CAPP3wC,aAOOC,EAAA,OAAA,SAAA,CALJ,OAAA0wC,EACA,MAAApyD,EACA,SAAUoyD,EAAO,QAAUpb,EAAY,KAAA,EAJ1C,IAOO,CADFn1B,kBAAAC,EAAA,gBAAAswC,EAAO,OAASA,EAAO,KAAK,EAAA,CAAA,yMCrJtC,SAASq5E,GAAcC,EAAiB,CACzC,GAAAA,GAAW,EAAU,MAAA,QAEzB,MAAM5pI,EAAaH,GAAY,KAAK,KAAK+pI,CAAO,EAAG,GAAI,CAAC,EAEpD,OAAA5pI,EAAW,OAAS,GACtBA,EAAW,QAAQ,CAAC,EAGfA,EAAW,OAAS,EACvBA,EAAW,IAAIf,EAAY,EAAE,KAAK,GAAG,EACrCe,EAAW,IAAI,CAAC,EAAGxI,IAAOA,EAAIyH,GAAa,CAAC,EAAI,CAAE,EAAE,KAAK,GAAG,CAClE,CAEgB,SAAA4qI,GAAe1sH,EAAexG,EAAyC,CAC9E,MAAA,CACL,GAAGA,EACH,MAAO,EAAEA,EAAK,OAAS,GAAKwG,CAC9B,CACF,2SCIA,MAAM/P,EAAQuR,EAuBRytB,EAAOC,EAEP1uB,EAAKtF,GAAc,OAAO,EAC1B3I,EAASI,GAAU,OAAO,EAE1B,CAAE,MAAA/G,CAAM,EAAI66B,GAAc,EAE1BkmG,EAAWhrH,MAAI,CAAC,EAChB8rC,EAAU9rC,MAAI,EAAK,EACnB09C,EAAc19C,MAAI,CAAC,EACnBirH,EAAgBjrH,MAAI,CAAC,EACrBkrH,EAAclrH,MAAI,CAAC,EAErB,IAAAmrH,EAAW,CAAC,EAAG,CAAC,EAChBC,EAAc,IACdC,EAAe,GAEnB,MAAM9lH,EAAUvF,EAAAA,IAAiB,EAC3BkiD,EAASliD,EAAAA,IAAmB,EAC5BsrH,EAAW37H,EAAA,SAAS,IAAM,OAAA,OAAAN,EAAA6yD,EAAO,QAAP,YAAA7yD,EAAc,IAA8B,EACtEk8H,EAAUvrH,EAAAA,IAAiB,EAE3B+vF,EAAUpgG,WAAS,WAAM,OAAC,GAACN,EAAA6yD,EAAO,QAAP,MAAA7yD,EAAc,QAAQ,IAAE,EACnDzQ,EAAU+Q,EAAAA,SAAS,IAChBrB,EAAM,UAAayhG,EAAQ,MAAQi7B,EAAS,MAAQ18H,EAAM,MAAQA,EAAM,SAAY,IAAM,CAClG,EACK4D,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG,GAAG,UAAU,CAAC,EAAG,GACrB,CAACA,EAAG,IAAI,WAAY,SAAS,CAAC,EAAGkxF,EAAQ,MACzC,CAAClxF,EAAG,IAAI,WAAY,UAAU,CAAC,EAAGvQ,EAAM,UAAY,CACtD,EACD,EACKk9H,EAAS77H,EAAAA,SAAuB,IAAM,CAC1C,MAAMw6B,EAAW,KAAK,IAAI,EAAG77B,EAAM,QAAQ,EAE3C,IAAIzM,EAAQyM,EAAM,SAAS,IAAIm9H,GAAWA,EAAQ,IAAI,EAEjD5pI,EAAM,SAAgBA,EAAA,CAAC,EAAGsoC,CAAQ,GAE/BtoC,EAAAA,EAAM,GAAG,EAAE,IAAMsoC,EAAWtoC,EAAQ,CAAC,GAAGA,EAAOsoC,CAAQ,EACvDtoC,EAAAA,EAAM,CAAC,IAAM,EAAIA,EAAQ,CAAC,EAAG,GAAGA,CAAK,EAE7C,MAAM2pI,EAAuB,CAAC,EAErB,QAAA9yI,EAAI,EAAG4H,EAAMuB,EAAM,OAAS,EAAGnJ,EAAI4H,EAAK,EAAE5H,EAAG,CAC9C,MAAAH,EAAQsJ,EAAMnJ,CAAC,EACf6wB,GAAM1nB,EAAMnJ,EAAI,CAAC,EACjBgzI,GAAgBniH,GAAMhxB,EAE5BizI,EAAO,KAAK,CACV,MAAAjzI,EACA,aAAeA,EAAQ4xC,EAAY,IACnC,IAAA5gB,GACA,WAAaA,GAAM4gB,EAAY,IAC/B,SAAUuhG,GACV,gBAAkBA,GAAgBvhG,EAAY,IAC9C,OAAS5gB,GAAMhxB,GAAS4xC,EAAY,GAAA,CACrC,CAAA,CAGIqhG,OAAAA,CAAA,CACR,EACKG,EAAeh8H,EAAAA,SAAS,IAAM,OAClC,MAAM0xB,EAAOq8B,EAAY,MACnBkuE,EAAWt9H,EAAM,SAEnB,GAAA,CAACs9H,EAAS,OAAe,MAAA,GAE7B,IAAIxsI,EAAQ,GAEZ,GAAIiiC,GAAQ,EACFjiC,EAAA,MAEC,SAAA1G,EAAI,EAAG4H,GAAMsrI,EAAS,OAAQlzI,EAAI4H,GAAK,EAAE5H,EAChD,GAAIkzI,EAASlzI,CAAC,EAAE,KAAO2oC,EAAM,CAC3BjiC,EAAQ1G,EAAI,EACZ,KAAA,CAKF0G,EAAQ,IACVA,EAAQwsI,EAAS,OAAS,GAGtB,MAAAttH,IAAQjP,EAAAu8H,EAASxsI,CAAK,IAAd,YAAAiQ,EAAiB,QAASoC,GAAcb,EAAO,MAAM,aAAcxR,EAAQ,CAAC,EAEnF,OAAAkf,GAAS,KAAKA,CAAK,GAAA,CAC3B,EAEWwD,GAAAwpH,EAAU,eAAgB,IAAM,CAC1C,aAAarhI,EAAM,KAAK,EAElBA,EAAA,MAAQ,WAAW,IAAM,CAC7B6hD,EAAQ,MAAQ,IACf,GAAG,CAAA,CACP,EACWhqC,GAAAwpH,EAAU,eAAgB,IAAM,CAC1C,aAAarhI,EAAM,KAAK,EAElBA,EAAA,MAAQ,WAAW,IAAM,CAC7B6hD,EAAQ,MAAQ,IACf,GAAG,CAAA,CACP,EACDhqC,GACEwpH,EACA,cACA5hI,GAAUlC,GAAwB,CAC3BuoG,EAAQ,OACX87B,EAAmBrkI,CAAK,CAE3B,CAAA,CACH,EAEA,SAASqkI,EAAmBrkI,EAAqB,CAC3C,GAAA,CAAC8jI,EAAS,MAAO,OAErB,MAAMrjE,EAAUhsE,GACduL,EAAM,QAAU8jI,EAAS,MAAM,sBAAwB,EAAA,KACvD,EACAF,CACF,EAEY1tE,EAAA,MAASuK,EAAUmjE,EAAe98H,EAAM,SACtC28H,EAAA,MAAQhjE,EAAUkjE,EAAS,CAAC,EAC1CD,EAAY,MAAQjvI,GAClBgsE,EAAUojE,EAAe,GAAMF,EAAS,CAAC,EACzC,EACAC,EAAcC,EAAeF,EAAS,CAAC,EAAIA,EAAS,CAAC,CACvD,CAAA,CAGF,SAASW,EAAexlI,EAA4B,SAC9C,GAAA,CAACif,EAAQ,MAAO,OAEd,MAAAtG,EAAQ,iBAAiBsG,EAAQ,KAAK,EAEjC4lH,EAAA,CAAC,WAAWlsH,EAAM,WAAW,EAAG,WAAWA,EAAM,YAAY,CAAC,EACzEmsH,IAAcnnH,GAAA5U,EAAA/I,EAAM,gBAAN,YAAA+I,EAAsB,KAAtB,YAAA4U,EAA0B,aAAc3d,EAAM,YAAY,KAAA,CAG1E,SAASylI,EAAgBzlI,EAA4B,SACnD+kI,IAAepnH,GAAA5U,EAAA/I,EAAM,gBAAN,YAAA+I,EAAsB,KAAtB,YAAA4U,EAA0B,aAAc3d,EAAM,YAAY,KAAA,CAG3E,SAASqyC,EAAaqzF,EAAoB,CACxC1+F,EAAK,SAAW0+F,EAAa,IAAQ19H,EAAM,QAAQ,CAAA,CAG/C,MAAA29H,EAAcviI,GAASmiI,CAAkB,EAE/C,SAASK,GAAe,CACtBlB,EAAS,MAAQ18H,EAAM,KAEd,SAAA,iBAAiB,cAAe29H,CAAW,EAC3C,SAAA,iBAAiB,YAAaE,CAAU,CAAA,CAGnD,SAASA,GAAa,CACX,SAAA,oBAAoB,cAAeF,CAAW,EAC9C,SAAA,oBAAoB,YAAaE,CAAU,CAAA,6BAKpDxrH,EAAA,mBAyEM,MAAA,SAzEG,UAAJ,IAAI4E,EAAW,uBAAOrT,EAAS,KAAA,CAAA,GAClCsN,cA4CiBgB,EAAA,MAAAgiB,EAAA,EAAA,CA5CA,YAAWspG,GAAc,mBACxC,IA0CS,CA1CTtsH,cA0CSgB,EAAAA,MAAA4rH,EAAA,EAAA,SAzCH,SAAJ,IAAIlqE,EACH,MAAKthD,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,iBAAA,CAAA,EACZ,MAAOjgB,EAAO,MAAA,GACd,IAAK,IACL,SAAU,GACV,MAAO,GACR,WAAA,GACA,eAAA,GACA,cAAA,GACC,SAAUihB,EAAQ,UAAA,EAClB,SAAQ84B,EACR,cAAauzF,CAAA,GAEH,OAAM/3E,EAAAA,QAEmBzvC,GAFZ,EACtBiqB,EAAAA,UAAA,EAAA,EAAAhuB,EAoBM,mBAAAqsB,WAnBqB,KAAAC,EAAA,WAAAu+F,EAAA,MAAjB,CAAAn6D,EAAOjyE,mBADjBuhB,EAAA,mBAoBM,MAAA,CAlBH,IAAKvhB,EACL,MAAKwhB,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,kBAAA,CAAA,EACZ,MAAKo1C,iBAAA,CAAA,MAAA,GAAcod,EAAM,KAAK,GAAA,CAAA,CAAA,GAE/BtwD,EAAAA,mBAaM,MAAA,CAbA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,gBAAA,CAAA,CAAA,GAChBkC,EAAAA,mBAWO,MAAA,CAVJ,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,iBAAA,CAAA,EACZ,MAAKo1C,EAAAA,eAAA,CAAkC,WAAAvvC,EAAM,QAAO,CAAA,EAAM2sD,EAAM,sBAA0B,OAAsD,UAAA,cAAA,KAAK,IAA0B,KAAK,IAAI3sD,EAAM,QAAa,CAAA,EAAA2sD,EAAM,aAAmB,CAAA,EAAAA,EAAM,0EAaxO,kBACT,IAEO,CAFPxwD,EAAAA,WAEOC,sBAFP,IAEO,CADLC,EAAAA,mBAA8C,MAAA,CAAxC,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,kBAAA,CAAA,4DAK1BkC,EAAAA,mBAMO,MAAA,CALJ,MAAKH,EAAAA,eAAA,CAAa,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,oBAAA,CAAA,EAAA,GAAwC,CAAA2B,EAAA,MAAA3B,CAAA,EAAG,IAAsC,qBAAA,QAAA,CAAA,EAAAitC,EAAA,QAAYikD,EAAO,KAAA,GAI3H,gDAAkCk7B,EAAa,KAAA,mBAAA,CAAA,CAAA,UAE3BprH,EAAS,qDAAhCY,EAAAA,YAmBiBD,EAAAA,MAAAgiB,EAAA,EAAA,OAnBkB,YAAWupG,CAAA,qBAC5C,IAiBM,CAjBNhrH,EAAAA,mBAiBM,MAAA,SAhBA,UAAJ,IAAIwqH,EACH,MAAK3qH,EAAAA,eAAA,CAAe,CAAAJ,EAAA,MAAA3B,CAAA,EAAG,GAAE,SAAA,CAAA,EAAA,IAA+B2B,EAAAA,MAAE3B,CAAA,EAAC,IAAG,UAAA,WAAA,CAAA,EAA2BgB,EAAU,WAAa,CAAAW,EAAA,MAAA3B,CAAA,EAAG,IAA2B,UAAA,QAAA,CAAA,EAAAitC,EAAA,OAAWikD,EAAO,KAAA,GAKhK,gDAAkCm7B,EAAW,KAAA,mBAAA,CAAA,CAAA,GAE9CrqH,EAAAA,WAOOC,sBAPP,IAOO,CANMjB,EAAU,0BAArBc,EAAAA,mBAEM,MAAA,OAFkB,MAAKC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,eAAA,CAAA,CAAA,GAClCkC,qBAAyB,MAAA,CAAnB,IAAKlB,EAAU,YAAA,KAAA,EAAA2pC,EAAA,mCAEvBzoC,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,CAAA,CAAA,IACb,gBAAA2B,QAAaqqH,EAAA,EAACntE,EAAW,KAAA,EAAIiuE,EAAY,KAAA,EAAA,CAAA,kOCjRxD,MAAMr9H,EAAQuR,EAeRytB,EAAOC,EAEP1uB,EAAKtF,GAAc,OAAO,EAE1B8yH,EAAcrsH,EAAAA,IAAI1R,EAAM,IAAI,EAC5BknE,EAAUx1D,MAAI,EAAK,EACnByM,EAAQzM,MAAI,EAAE,EACdssH,EAAYtsH,MAAI,EAAE,EAElBi4B,EAAQj4B,EAAAA,IAAsB,EAC9BusH,EAAavsH,EAAAA,IAAiB,EAE9BwsH,EAAgB78H,EAAAA,SAAS,IAAMk7H,GAAcwB,EAAY,KAAK,CAAC,EAErEnxH,EAAA,MACE,IAAM5M,EAAM,KACHpX,GAAA,CACPm1I,EAAY,MAAQn1I,CAAA,CAExB,EACAgkB,EAAA,MACE,IAAM5M,EAAM,SACHpX,GAAA,CACHA,IACFs+E,EAAQ,MAAQ,GAClB,CAEJ,EAEAzyD,EAAAA,UAAU,IAAM,CACd7H,EAAA,MACE,IAAM5M,EAAM,SACZ,IAAM,CACJsT,EAAAA,SAAS,IAAM,CACP6K,EAAA,MAAQ8/G,EAAW,MAAQ7jI,GAAc6jI,EAAW,KAAK,EAAI,EAAI,GAAK,EAAA,CAC7E,CACH,EACA,CAAE,UAAW,EAAK,CACpB,CAAA,CACD,EAED,SAASj3E,GAAc,CACjB,CAAChnD,EAAM,UAAY,CAACknE,EAAQ,QAC9BA,EAAQ,MAAQ,GAChB82D,EAAU,MAAQE,EAAc,MAChC5qH,EAAAA,SAAS,IAAM,QACbvS,EAAA4oC,EAAM,QAAN,MAAA5oC,EAAa,OAAM,CACpB,EACH,CAGF,SAASg/E,EAAY9X,EAAkB,CAGrC,GAFAf,EAAQ,MAAQ,GAEZe,EAAS,CACX,MAAMoY,EAAQ29C,EAAU,MAAM,KAAK,EAAE,MAAM,GAAG,EAE1C39C,EAAM,MAAMnX,GAAQz3E,GAAcy3E,CAAI,CAAC,IAC7B60D,EAAA,MAAQ19C,EACjB,IAAI1uF,EAAQ,EACZ,QAAQ,EACR,MAAM,EAAG,CAAC,EACV,OAAO,CAAC6qI,EAAStzD,EAAM9+E,IAAMoyI,EAAU,IAAMpyI,EAAI8+E,EAAM,CAAC,EAC3D60D,EAAY,MAAQ,KAAK,IAAIA,EAAY,MAAO/9H,EAAM,QAAQ,EACzDg/B,EAAA,SAAU++F,EAAY,KAAK,EAClC,CACF,6BAKA1rH,EAAA,mBAwBM,MAAA,CAvBH,MAAQC,EAAAA,eAAA,CAAAJ,EAAAA,MAAA3B,CAAA,EAAG,cAAe2B,EAAA,MAAE3B,CAAA,EAAC,GAAE,OAAA,EAAWvQ,EAAM,UAAYkS,EAAA,MAAA3B,CAAA,EAAG,IAAG,UAAA,UAAA,CAAA,CAAA,EAClE,iCAAmB4N,EAAK,KAAA,KAAA,EACxB,QAAO6oC,CAAA,GAGAkgB,EAAO,qBADf/0D,EAAAA,YASSD,EAAAA,MAAA8zC,EAAA,EAAA,eAPH,QAAJ,IAAIrc,EACI,MAAOq0F,EAAS,sCAATA,EAAS,MAAAhjF,GACvB,MAAK1oC,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,EACb,KAAK,QACL,YAAA,GACC,sBAAMwvE,EAAW,EAAA,GACjB,uBAAOA,EAAW,EAAA,8CAErB1tE,EAQW,mBAAAqsB,EAAA,SAAA,CAAA,IAAA,GAAA,CAPTjsB,qBAEO,8BADFyrH,EAAa,KAAA,EAAA,CAAA,EAElBzrH,EAAAA,mBAAgD,OAAA,CAAzC,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,iBAAA,CAAA,CAAA,EAAqB,IAAC,CAAA,EACzCkC,EAAAA,mBAEO,OAAA,SAFG,aAAJ,IAAIwrH,CAAA,EACLrrH,EAAAA,gBAAAV,EAAAA,MAAAqqH,EAAA,EAAchrH,EAAQ,QAAA,CAAA,EAAA,GAAA,kKCzGjC,MAAMvR,EAAQuR,EAORytB,EAAOC,EAEP1uB,EAAKtF,GAAc,OAAO,EAC1B3B,EAAQU,GAAS,EAEjBkyH,EAAar6H,SAAOo6H,EAAW,EAE/BkC,EAAgBzsH,EAAAA,IAAI1R,EAAM,MAAM,EAChCo+H,EAAQ1sH,MAAI,EAAK,EAGjB2sH,EAAah9H,EAAAA,SAAS,IACnB+8H,EAAM,MACT90H,EAAM,MAAM,WACZ60H,EAAc,MAAQ,GACpB70H,EAAM,MAAM,UACZA,EAAM,MAAM,MACnB,EAEDsD,EAAA,MACE,IAAM5M,EAAM,OACHpX,GAAA,CACPu1I,EAAc,MAAQv1I,CAAA,CAE1B,EAEakpB,EAAA,CAAE,WAAAwsH,EAAY,EAE3B,IAAIC,EAAaJ,EAAc,MAE/B,SAASG,GAAa,CAChBF,EAAM,MACMD,EAAA,MAAQI,GAAc,EAAI,GAAMA,GAE9CA,EAAaJ,EAAc,MAC3BA,EAAc,MAAQ,GAGlBC,EAAA,MAAQ,CAACA,EAAM,MAEhBp/F,EAAA,SAAUm/F,EAAc,KAAK,CAAA,CAGpC,SAASK,EAAY51I,EAAe,CACzBA,GAAA,IACI21I,EAAA31I,EACbu1I,EAAc,MAAQv1I,EACtBw1I,EAAM,MAAQx1I,GAAS,EAElBo2C,EAAA,SAAUm/F,EAAc,KAAK,CAAA,6BAKlChsH,EAAA,YAuBessH,GAAA,CAtBZ,MAAKnsH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,QAAA,CAAA,EACb,KAAK,QACJ,YAAW2B,EAAAA,MAAE3B,CAAA,EAAC,GAAE,cAAA,EAChB,QAAO+tH,CAAA,GAGG,gBACT,IAEM,CAFN7rH,EAAAA,mBAEM,MAAA,CAFA,MAAKH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,aAAA,CAAA,CAAA,EACZqC,EAAAA,iBAAAurH,EAAA,WAAqB,QAAO,CAAA,EAAA,CAAA,EAElCjtH,cAUUgB,EAAAA,MAAA4rH,EAAA,EAAA,CATP,MAAOK,EAAa,MAAA,IACpB,MAAK7rH,EAAE,eAAAJ,EAAA,MAAE3B,CAAA,EAAC,GAAE,eAAA,CAAA,EACZ,IAAK,EACL,IAAK,IACN,SAAA,GACA,WAAA,GACA,QAAA,GACC,MAAO,GACP,QAAOiuH,iDAdZ,IAAuE,CAAvEttH,cAAuEgB,kDAAzDA,QAAcuqH,EAAA,EAACvqH,WAAW,UAAWmsH,EAAU,KAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,qCChDlD5uH,qBAAgB,CAC7BjX,KAAM,QACNwH,MAAO47H,GACP/1F,MAAO,CAAC,aAAc,cAAe,gBAAiB,sBAAsB,EAC5En2B,MAAMC,EAAQ,CAAEzL,MAAAA,EAAO86B,KAAAA,EAAM8G,OAAAA,CAAO,EAAG,WACrC,MAAM9lC,EAAQiM,GAAS,QAAS0D,EAAQ,CACtCslD,IAAK,CACHnlD,OAAQ,GACRD,QAAS,EACV,EACDi6E,QAAS,CACPh6E,OAAQ,GACRD,QAAS,IACV,EACD6uH,WAAY,GACZC,WAAY,KACZ5rG,KAAM,CACJjjB,OAAQ,GACRD,QAAS,CACV,EACD+uH,OAAQ,EACRC,aAAc,EACdC,cAAeA,IAAM,CAAC,GAAK,EAAG,KAAM,IAAK,CAAC,EAE1CC,cAAeA,IAAMhD,GACrBiD,OAAQ,GACRC,MAAO,CACLnvH,OAAQ,GACRD,QAAS,IACV,EACDytH,SAAUA,IAAM,CAAE,EAClBr3F,QAAS,GACTqB,YAAa,KACbE,cAAe,KACf03F,UAAWA,KAAO,CAAA,GAClBh7H,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEKqM,EAAKtF,GAAc,OAAO,EAC1B3I,EAASI,GAAU,OAAO,EAC1B4G,EAAQU,GAAU,EAElB,CAAErO,MAAAA,CAAO,EAAG66B,GAAe,EAE3B2oG,EAAa32I,IAAYojD,SAASwzF,wBAElCj2C,EAAaz3E,EAAAA,IACjB1R,EAAMi1D,OAAOj1D,GAAAA,EAAM8pF,UAAN9pF,YAAAA,GAAgB,OAAOA,GAAAA,EAAM2+H,aAAN3+H,YAAAA,GAAkBi1D,MAAkB,EAC1E,EACMoqE,EAAU3tH,EAAG,IAAC,EAAK,EACnBqsH,EAAcrsH,EAAAA,IAAI1R,EAAM+yB,IAAI,EAC5BohB,EAAUziC,EAAG,IAAC,EAAK,EACnBmqB,EAAWnqB,EAAG,IAAC,CAAC,EAChBysH,EAAgBzsH,EAAAA,IAAI1R,EAAM4+H,MAAM,EAChCU,EAAM5tH,EAAG,IAAC,EAAK,EACf6tH,EAAY7tH,EAAG,IAAC,EAAI,EAEpB8tH,EAAc9tH,EAAG,IAAC,EAAK,EACvB+tH,EAAc/tH,EAAAA,IAAI1R,EAAM6+H,YAAY,EAEpCa,EAAchuH,EAAG,IAAC,EAAK,EACvBiuH,EAAYjuH,EAAG,IAAC,EAAK,EACrBkuH,EAAUluH,EAAG,IAAC,EAAK,EACnBi3E,EAAYj3E,EAAG,IAAC,GAAG,EAEnBmuH,EAASnuH,EAAAA,IAAwB,EACjCuF,EAAU5V,EAAQ,SAAC,IAAMw+H,QAAAA,OAAAA,GAAAA,EAAOj3I,QAAPi3I,YAAAA,GAAc5oH,QAAkC,EACzEgoH,EAAQvtH,EAAAA,IAAuB,EAC/BouH,EAAYpuH,EAAAA,IAAuC,EAEnDozE,EAAUzjF,EAAQ,SAAC,IAAMw+H,QAAAA,OAAAA,GAAAA,EAAOj3I,QAAPi3I,YAAAA,GAAc/6C,QAAO,EAC9CzuE,EAAOhV,EAAAA,SAAiC,IAAA,QAAMw+H,QAAAA,GAAAA,EAAOj3I,QAAPi3I,YAAAA,GAAcxpH,OAAQ,GAAK,EACzE0pH,EAAW1+H,EAAAA,SAAuC,IAAM49H,EAAMr2I,OAASoX,EAAMi/H,KAAK,EAElFe,EAAiBlzH,EAAQ,SAAC,EAAgC,EAC1DoyH,EAAY79H,EAAAA,SAAS,KAAO,CAAE,GAAG26H,GAAuB,GAAGh8H,EAAMk/H,SAAU,EAAE,EAEnF,SAASe,EAAYl3I,GAAaoS,GAAgB,CAChD,OAAI6kI,EAAej3I,EAAG,GACpB0rE,QAAQC,KAAK,4CAA4C3rE,EAAG,0BAA0B,EAE/Ea,KAGTo2I,EAAej3I,EAAG,EAAIoS,GAEf,IAAM,CACX,OAAO6kI,EAAej3I,EAAG,CAC1B,EACH,CAEAkwB,GAAY,CACV9nB,OAAQ8lB,EACRmC,QAAS,GACTE,UAAWA,CAACpgB,GAAOygB,KAAa,CAC1BzgB,GAAM0nF,SAAW1nF,GAAM4+C,UAAY5+C,GAAMgnI,QAAUhnI,GAAMinI,SAE7Dx1I,GACE,CACE,CACE,IAAMgvB,GAAS+hF,GACf,IAAM,CACJyiC,EAAcv1I,MAAQk1D,KAAKtvD,IAAI,EAAG2vI,EAAcv1I,MAAQ,GAAI,CAC7D,CAAA,EAEH,CACE,IAAM+wB,GAASgiF,KACf,IAAOwiC,EAAcv1I,MAAQk1D,KAAKvvD,IAAI,EAAG4vI,EAAcv1I,MAAQ,GAAI,CAAE,EAEvE,CACE,IAAM+wB,GAAStoB,MACf,IAAO0sI,EAAYn1I,MAAQk1D,KAAKtvD,IAAIqtC,EAASjzC,MAAOm1I,EAAYn1I,MAAQ,CAAC,CAAE,EAE7E,CAAC,IAAM+wB,GAASvoB,KAAM,IAAO2sI,EAAYn1I,MAAQk1D,KAAKvvD,IAAI,EAAGwvI,EAAYn1I,MAAQ,CAAC,CAAE,EACpF,CAAC,IAAM+wB,GAASulH,EAAUt2I,MAAMg2I,QAAU,GAAG,EAAG,YAAMkB,OAAAA,GAAAA,EAAUl3I,QAAVk3I,YAAAA,GAAiBxB,aAAY,EACnF,GAAGhvH,OAAOlD,KAAK4zH,CAAc,EAAE1iI,IAAIvU,IAC1B,CAAC,IAAM4wB,GAAS5wB,EAAG,EAAGi3I,EAAej3I,EAAG,CAAC,CACjD,CAAC,EAEJ,CAAEkzG,cAAetiF,GAASC,QAAS,CACrC,CACF,CACF,CAAC,EAED,MAAMhW,EAAYvC,EAAAA,SAAS,IAClB,CACLkP,EAAG9jB,EAAC,EACJ8jB,EAAGo4B,GAAG,MAAM,EACZ,CACE,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAMimC,OAC5B,CAAC,CAEJ,EACKm6F,EAAW/+H,EAAAA,SAAS,IAAOg+H,EAAQz2I,MAAQ0gB,EAAM1gB,MAAMy3I,MAAQ/2H,EAAM1gB,MAAM03I,IAAK,EAChFC,EAAYl/H,EAAAA,SAAS,IAClBg+H,EAAQz2I,MAAQ0gB,EAAM1gB,MAAM43I,WAAal3H,EAAM1gB,MAAM63I,SAC7D,EACKC,GAAcr/H,EAAAA,SAAS,IAAM,CACjC,MAAMs/H,GAAQ3gI,EAAM8+H,cACjBxhI,IAAIy/C,IAAO,CACV,MAAM6jF,GAAO,OAAO7jF,IAAQ,SAAW,CAAEn0D,MAAOm0D,EAAI,EAAIA,GAExD6jF,OAAAA,GAAKh4I,MAAQ+I,GAASivI,GAAKh4I,KAAK,EAChCg4I,GAAK3wH,MACH2wH,GAAK3wH,OAAS,GAAGne,GAAc8uI,GAAKh4I,KAAK,EAAIg4I,GAAKh4I,MAAQg4I,GAAKh4I,MAAMqJ,QAAQ,CAAC,CAAC,IAE1E2uI,EACR,CAAA,EACApiI,OAAOoiI,IAAQA,GAAKh4I,MAAQ,CAAC,EAC7Bi4I,KAAK,CAAChhI,GAAMC,KAASA,GAAKlX,MAAQiX,GAAKjX,KAAK,EAE/C,GAAI,CAAC+3I,GAAM/tE,KAAKguE,IAAQA,GAAKh4I,QAAU,CAAC,EAAG,CACzC,MAAMkI,GAAQ6vI,GAAM9kC,UAAU+kC,IAAQA,GAAKh4I,MAAQ,CAAC,EAEpD+3I,GAAMG,QAAQhwI,GAAQ6vI,GAAMp2I,QAAUo2I,GAAMp2I,OAAQ,EAAG,CAAE3B,MAAO,EAAGqnB,MAAO,MAAO,CAAC,CACpF,CAEA,OAAO0wH,EACT,CAAC,EACKrD,GAAWj8H,EAAAA,SAAS,IACjBrB,EAAMs9H,SACVhgI,IAAI6/H,IAAY,OAAOA,IAAY,SAAW,CAAEpqG,KAAMoqG,EAAQ,EAAIA,EAAQ,EAC1E3+H,OAAO2+H,IAAWA,GAAQpqG,MAAQ,GAAKoqG,GAAQpqG,MAAQ8I,EAASjzC,KAAK,EACrEi4I,KAAK,CAAChhI,GAAMC,KAASD,GAAKkzB,KAAOjzB,GAAKizB,IAAI,CAC9C,EACKziC,EAAU+Q,EAAAA,SAAS,IAChBw6B,EAASjzC,MAASm1I,EAAYn1I,MAAQizC,EAASjzC,MAAS,IAAM,CACtE,EACKm4I,GAAc1/H,EAAAA,SAAS,IAAM,QACjC,MAAM4zD,GAAMj1D,EAAMi1D,OAAQj1D,GAAAA,EAAM2+H,aAAN3+H,YAAAA,GAAkBi1D,MAAkB,GAE9D,OAAIA,IAAOj1D,EAAM8pF,SAAW,CAAC9pF,EAAM8pF,QAAQ35E,SAAS8kD,EAAG,EAC9C,CAACA,EAAG,EAAE0iE,OAAO33H,EAAM8pF,OAAO,EAG5B9pF,EAAM8pF,SAAW,CAAC70B,EAAG,CAC9B,CAAC,EACK+rE,GAAW3/H,EAAAA,SAAS,IACjB0/H,GAAYn4I,MAAQm4I,GAAYn4I,MAAMq4I,QAAQ93C,EAAWvgG,KAAK,EAAI,EAC1E,EAEKmrD,GAAaC,EAAe,gBAChClnC,WAAS,CACPuyH,QAAAA,EACAtB,YAAAA,EACAI,cAAAA,EACAsB,YAAAA,EACAC,YAAAA,EACAE,QAAAA,EACAzrF,QAAAA,EACAtY,SAAAA,EACAyjG,IAAAA,EACAK,UAAAA,EACAuB,cAAAA,GACAC,UAAAA,GACAC,WAAAA,GACAC,WAAAA,EACAC,aAAAA,EACAv6C,WAAAA,EACF,CAAC,CACH,EAEAn6E,EAAAA,MACE,IAAM5M,EAAMi1D,IACZrsE,IAAS,CACP24I,EAAgB,EAChBp4C,EAAWvgG,MAAQA,EACrB,EACA,CAAE8gD,MAAO,KAAM,CACjB,EACA98B,EAAAA,MACE,IAAM5M,EAAM+yB,KACZnqC,IAAS,CACPy4I,EAAWz4I,GAAO,EAAK,CACzB,CACF,EACAgkB,EAAAA,MACE,IAAM5M,EAAM4+H,OACZh2I,IAAS,CACP04I,EAAa14I,GAAO,EAAK,CAC3B,CACF,EACAgkB,EAAAA,MACE,IAAM5M,EAAM6+H,aACZj2I,IAAS,CACPw4I,GAAWx4I,GAAO,EAAK,CACzB,CACF,EACAgkB,EAAK,MAACyyH,EAASz2I,IAAS,CAClBA,GACFgsD,sBAAsB,IAAM,CAC1B2qF,EAAU32I,MAAQ,EACpB,CAAC,EAED22I,EAAU32I,MAAQ,EAEtB,CAAC,EACDgkB,EAAK,MAACunC,EAASvrD,IAAS,CACjBA,KACHy2I,EAAQz2I,MAAQ,GAEpB,CAAC,EACDgkB,EAAK,MAAC2yH,EAAW32I,IAAS,CACpBA,KACF42I,EAAY52I,MAAQ,GAExB,CAAC,EAED6rB,EAAAA,UAAU,IAAM,CACdnB,EAAAA,SAAS,IAAM,QACT9qB,IAAY,CAACu3I,EAASn3I,SAASi3I,GAAAA,EAAOj3I,QAAPi3I,MAAAA,GAAc5oH,WAC/CgoH,EAAMr2I,MAASi3I,EAAOj3I,MAAMquB,QAAwBugC,cAAc,OAAO,GAAKvmC,QAG5E8uH,EAASn3I,OAASm1I,EAAYn1I,MAAQ,IACxCm3I,EAASn3I,MAAMm1I,YAAcA,EAAYn1I,MAE7C,CAAC,CACH,CAAC,EAEDkZ,EAAO,QAACm6H,GAAanvH,WAAS,CAAEg4E,QAAAA,EAAS6D,UAAAA,EAAWs3C,YAAAA,CAAY,CAAC,CAAC,EAElEzsH,GAAYusH,EAAU,UAAW,IAAM,QACrC5rF,EAAQvrD,MAAQ,GAChBizC,EAASjzC,QAAQm3I,GAAAA,EAASn3I,QAATm3I,YAAAA,GAAgBlkG,WAAY,CAC/C,CAAC,EACDroB,GAAYusH,EAAU,aAAc,IAAM,QACxChC,EAAYn1I,QAAQm3I,GAAAA,EAASn3I,QAATm3I,YAAAA,GAAgBhC,cAAe,EAEnD/+F,EAAK,cAAe++F,EAAYn1I,KAAK,EACrCulB,EAAUnO,EAAMwhI,aAAczD,EAAYn1I,KAAK,CACjD,CAAC,EACD4qB,GAAYusH,EAAU,QAAS0B,EAAW,EAI1CjuH,GAAYusH,EAAU,wBAAyB,IAAM,CACnDT,EAAI12I,MAAQ,GACZulB,EAAUnO,EAAM0hI,YAAa,EAAI,CACnC,CAAC,EACDluH,GAAYusH,EAAU,wBAAyB,IAAM,CACnDT,EAAI12I,MAAQ,GACZulB,EAAUnO,EAAM0hI,YAAa,EAAK,CACpC,CAAC,EAED57F,EAAO,CACLqjD,WAAAA,EACAk2C,QAAAA,EACAtB,YAAAA,EACAliG,SAAAA,EACAyjG,IAAAA,EACAI,YAAAA,EACAF,YAAAA,EACAvoH,QAAAA,EACAgoH,MAAAA,EACAsC,eAAAA,CACF,CAAC,EAED,SAASL,GAAct4I,GAAQ,CAACy2I,EAAQz2I,MAAO,cAC7C,GAAI,CAACurD,EAAQvrD,MAAO,CAClBy2I,EAAQz2I,MAAQ,GAEhB,MACF,CAEAy2I,EAAQz2I,MAAQA,GAEZy2I,EAAQz2I,OACV+2I,EAAU/2I,MAAQ,IAClBm3I,GAAAA,EAASn3I,QAATm3I,MAAAA,GAAgBO,SAEhBP,GAAAA,EAASn3I,QAATm3I,MAAAA,GAAgBM,SAGlBppH,GAAAA,EAAQruB,QAARquB,MAAAA,GAAeqvB,QACfn4B,EAAUkxH,EAAQz2I,MAAQoX,EAAM2hI,OAAS3hI,EAAM4hI,OAAO,CACxD,CAEA,SAASH,IAAc,QACrBpC,EAAQz2I,MAAQ,IAEhBm3I,GAAAA,EAASn3I,QAATm3I,MAAAA,GAAgBM,QAChBlyH,EAAUnO,EAAM6hI,OAAO,CACzB,CAEA,eAAeV,IAAY,CACrB,CAAChC,GAAc,CAACY,EAASn3I,QAEzB02I,EAAI12I,MACN,MAAMgjD,SAASk2F,qBAAsB,EAErC,MAAM/B,EAASn3I,MAAMm5I,wBAAyB,EAElD,CAEA,SAASX,GAAWR,GAAcoB,GAAW,GAAM,CACjDvC,EAAY72I,MAAQg4I,GAEhBb,EAASn3I,QACXm3I,EAASn3I,MAAMi2I,aAAe+B,IAG5BoB,KACFhjG,EAAK,uBAAwB4hG,EAAI,EACjCzyH,EAAUnO,EAAMiiI,aAAcrB,EAAI,EAEtC,CAEA,SAASS,EAAWtuG,GAAcivG,GAAW,GAAM,CACjDjE,EAAYn1I,MAAQmqC,GAEhBgtG,EAASn3I,OAASmqC,KAASgtG,EAASn3I,MAAMm1I,cAC5CgC,EAASn3I,MAAMm1I,YAAchrG,GAC7BA,GAAOgtG,EAASn3I,MAAMm1I,aAGpBiE,KACFhjG,EAAK,cAAejM,EAAI,EACxB5kB,EAAUnO,EAAMwhI,aAAczuG,EAAI,EAEtC,CAEA,SAASuuG,EAAa1C,GAAgBoD,GAAW,GAAM,CACrD7D,EAAcv1I,MAAQg2I,GAElBmB,EAASn3I,QACXm3I,EAASn3I,MAAMg2I,OAASA,IAGtBoD,KACFhjG,EAAK,gBAAiB4/F,EAAM,EAC5BzwH,EAAUnO,EAAMkiI,eAAgBtD,EAAM,EAE1C,CAEA,SAASuD,EAAWv5I,GAAQ,CAACg3I,EAAQh3I,MAAOo5I,GAAW,GAAM,CAC3DpC,EAAQh3I,MAAQA,GAEZo5I,IACF7zH,EAAUnO,EAAMoiI,aAAcxC,EAAQh3I,KAAK,CAE/C,CAEA,SAASy5I,EAAahsH,GAA8B,CAClD/C,EAAAA,SAAS,IAAM,SACb2D,GAAAA,EAAQruB,QAARquB,MAAAA,GAAeqvB,QACfn4B,EAAUnO,EAAMsiI,aAAcjsH,EAAI,CACpC,CAAC,CACH,CAEA,SAASkrH,GAAiB,QACxBlC,EAAQz2I,MAAQ,GAChBm1I,EAAYn1I,MAAQ,EACpBurD,EAAQvrD,MAAQ,GAChBizC,EAASjzC,MAAQ,EAEjB02I,EAAI12I,MAAQ,GACZ+2I,EAAU/2I,MAAQ,IAElBm3I,GAAAA,EAASn3I,QAATm3I,MAAAA,GAAgBM,OAClB,CAEA,SAASkC,GAAiB,CACxB1tF,aAAal5C,EAAM6mI,QAAQ,EAE3B9C,EAAY92I,MAAQ,GACpB+S,EAAM6mI,SAAWt4F,WAAW,IAAM,CAChCw1F,EAAY92I,MAAQ,EACrB,EAAE,GAAI,CACT,CAEA,SAASy6G,GAAqB,CAC5BxuD,aAAal5C,EAAM6mI,QAAQ,EAC3B7mI,EAAM6mI,SAAWt4F,WAAW,IAAM,CAChCw1F,EAAY92I,MAAQ,EACrB,EAAE,GAAG,CACR,CAEA,SAAS65I,GAAUrsI,GAAgB,CACjC,MAAM8G,GAAO6jI,GAAYn4I,MAErBoX,EAAM8pF,UACRX,EAAWvgG,MAAQsU,IAAM8jI,GAASp4I,MAAQwN,GAAS8G,GAAK3S,QAAU2S,GAAK3S,MAAM,EAC7Ey0C,EAAK,aAAcmqD,EAAWvgG,KAAK,EAEvC,CAEA,SAAS85I,GAAW,CAClBD,GAAU,EAAE,EACZt0H,EAAUnO,EAAM2iI,MAAM,CACxB,CAEA,SAASC,IAAW,CAClBH,GAAU,CAAC,EACXt0H,EAAUnO,EAAM6iI,MAAM,CACxB,CAEA,SAAS97C,GAAWl+F,GAAsB,SACxCg3I,GAAAA,EAAOj3I,QAAPi3I,MAAAA,GAAc9oH,OAAOluB,GACvB,CAEA,SAASowE,IAAgB,CACvB9qD,EAAUnO,EAAMk5D,SAAS,CAC3B,CAEA,SAAS4pE,IAAiB,CACxB,OAAA5xH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,WAAW,EAAC,MAClBjqC,EAAO1Z,MAAM85I,SAAQ,SAClBxD,EAAUt2I,MAAM,WAAW,EAAC,SAC5B,CAAC,CAACoX,EAAM8pF,SAAW,CAACk3C,GAASp4I,MAAK,QACnC85I,CAAQ,EAAA,CAAA7yH,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAGXpJ,EAAM1gB,MAAM85I,SAAQ,CAAA,MACjB,EAAEp5H,EAAM1gB,MAAM85I,SAAS3yH,OAAS,GAAK44E,EAAU//F,KAAK,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAInE,CAEA,SAASm6I,IAAa,CACpB,OAAA7xH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,MAAM,EAAC,MACb8yF,EAAQz2I,MAAQ0Z,EAAO1Z,MAAMy3I,MAAQ/9H,EAAO1Z,MAAM03I,KAAI,SACnDpB,EAAUt2I,MAAM03I,KAAI,SACpB,CAACnsF,EAAQvrD,MAAK,QACfs4I,EAAa,EAAA,CAAArxH,QAAAA,IAAA,CAAAqB,EAAA,YAAApN,GAAA4O,EAAA,WAGhB0tH,EAASx3I,MAAK,CAAA,MACX,EAAEw3I,EAASx3I,MAAMmnB,OAAS,GAAK44E,EAAU//F,MAAQ,IAAI,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAIpE,CAEA,SAASo6I,IAAiB,CACxB,OAAA9xH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,WAAW,EAAC,MAClBjqC,EAAO1Z,MAAMg6I,SAAQ,SAClB1D,EAAUt2I,MAAM,WAAW,EAAC,SAC5B,CAAC,CAACoX,EAAM8pF,SAAWk3C,GAASp4I,QAAUm4I,GAAYn4I,MAAM2B,OAAS,EAAC,QACnEq4I,EAAQ,EAAA,CAAA/yH,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAGXpJ,EAAM1gB,MAAMg6I,SAAQ,CAAA,MACjB,EAAEt5H,EAAM1gB,MAAMg6I,SAAS7yH,OAAS,GAAK44E,EAAU//F,KAAK,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAInE,CAEA,SAASq6I,IAAgB,CACvB,OAAA/xH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,cAAc,EAAC,MACrBjqC,EAAO1Z,MAAMijC,QAAO,SACjBqzG,EAAUt2I,MAAMijC,QAAO,QACxBotC,EAAa,EAAA,CAAAppD,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAGhBpJ,EAAM1gB,MAAMijC,QAAO,CAAA,MAChB,EAAEviB,EAAM1gB,MAAMijC,QAAQ9b,OAAS,GAAK44E,EAAU//F,KAAK,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAIlE,CAEA,SAASs6I,IAAc,CACrB,OAAAhyH,EAAAA,YAAAiyH,GAAA,CAAA,KAEUpF,EAAYn1I,MAAK,SACbizC,EAASjzC,MAAK,SACd,CAACurD,EAAQvrD,MAAK,SACdy4I,CAAU,EAAA,IAAA,CAG1B,CAEA,SAAS+B,IAAqB,CAC5B,OAAAlyH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,eAAe,EAAC,KACvB,SAAQ,MACPkzF,EAAY72I,MAAK,QACf83I,GAAY93I,MAAK,SACfg4I,IAA4BQ,GAAWR,GAAKh4I,KAAK,CAAC,EAAA,IAAA,CAGnE,CAEA,SAASy6I,IAAe,CACtB,OAAAnyH,EAAAA,YAAAoyH,GAAA,CAAA,IAESxD,EAAS,OACN3B,EAAcv1I,MAAK,SACjB04I,CAAY,EAAA,IAAA,CAG5B,CAEA,SAASiC,IAAa,CACpB,OAAAryH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,MAAM,EAAC,MACbjqC,EAAO1Z,MAAMsnB,KAAI,SACdgvH,EAAUt2I,MAAMsnB,KAAI,QACrBiyH,CAAU,EAAA,CAAAtyH,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAGbpJ,EAAM1gB,MAAMq9F,MAAK,CAAA,MACd,EAAE38E,EAAM1gB,MAAMq9F,MAAMl2E,OAAS,GAAK44E,EAAU//F,KAAK,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAIhE,CAEA,SAAS46I,IAAY,CACnB,MAAI,CAACrE,GAAc,CAACF,EAAMr2I,MAAc,KAExCsoB,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,KAAK,EAAC,MACZ+yF,EAAI12I,MAAQ0Z,EAAO1Z,MAAM66I,QAAUnhI,EAAO1Z,MAAM86I,WAAU,SACvDxE,EAAUt2I,MAAM02I,IAAG,SACnB,CAACnrF,EAAQvrD,MAAK,QACfu4I,EAAS,EAAA,CAAAtxH,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAERpJ,EAAM1gB,MAAM02I,IAAG,CAAA,MAAS,EAAEh2H,EAAM1gB,MAAM02I,IAAIvvH,OAAS,GAAK44E,EAAU//F,KAAK,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAGvF,CAEA,SAAS+6I,IAAmB,CAC1B,OAAAzyH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,aAAa,EAAC,MACpBl2B,EAAKztB,QAAU,SAAW0Z,EAAO1Z,MAAMg7I,eAAiBthI,EAAO1Z,MAAMi7I,WAAU,SAC5E3E,EAAUt2I,MAAM,aAAa,EAAC,QAC/B0kD,IAAMy5C,GAAW,QAAQ,CAAC,EAAA,CAAAl3E,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAG7BpJ,EAAM1gB,MAAMi7I,WAAU,CAAA,MACnB,EAAEv6H,EAAM1gB,MAAMi7I,WAAW9zH,OAAS,GAAK44E,EAAU//F,KAAK,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAIrE,CAEA,SAASk7I,IAAoB,CAC3B,OAAA5yH,EAAAA,YAAAutH,GAAA,CAAA,MAEWluH,EAAGg8B,GAAG,cAAc,EAAC,MACrBl2B,EAAKztB,QAAU,UAAY0Z,EAAO1Z,MAAMm7I,eAAiBzhI,EAAO1Z,MAAMo7I,WAAU,SAC7E9E,EAAUt2I,MAAM,cAAc,EAAC,QAChC0kD,IAAMy5C,GAAW,SAAS,CAAC,EAAA,CAAAl3E,QAAAA,IAAAqB,CAAAA,cAAApN,GAAA4O,EAAAA,WAG9BpJ,EAAM1gB,MAAMo7I,WAAU,CAAA,MACnB,EAAE16H,EAAM1gB,MAAMo7I,WAAWj0H,OAAS,GAAK44E,EAAU//F,KAAK,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAIrE,CAEA,SAASykD,GAAc70C,GAA0B,QAC/C,OAAQA,GAAI,CACV,IAAK,YACH,OAAOsqI,GAAgB,EACzB,IAAK,OACH,OAAOC,GAAY,EACrB,IAAK,YACH,OAAOC,GAAgB,EACzB,IAAK,UACH,OAAOC,GAAe,EACxB,IAAK,QACH,OAAOC,GAAa,EACtB,IAAK,gBACH,OAAOE,GAAoB,EAC7B,IAAK,SACH,OAAOC,GAAc,EACvB,IAAK,OACH,OAAOE,GAAY,EACrB,IAAK,MACH,OAAOC,GAAW,EACpB,IAAK,cACH,OAAOG,GAAkB,EAC3B,IAAK,eACH,OAAOG,GAAmB,EAC5B,QACE,OAAO/uH,GAAAA,GAAiB7Q,EAAO,CAC7B,WAAW1L,EAAI,GACf,UAAUwI,GAAcxI,EAAc,CAAC,EAAE,CAC1C,IAHMuc,YAAAA,GAGFg/B,GACT,CACF,CAEA,SAASkwF,IAAiB,CACxB,OAAIjkI,EAAM0+H,WACRxtH,EAAAA,YAAAmkH,GAAA,CAAA,MAEW9kH,EAAGg8B,GAAG,eAAe,EAAC,WACjBj8C,EAAQ1H,MAAK,eACX,EAAC,YACJ,MAAM,EAAA,IAAA,EAKvBsoB,EAAAA,YAAA,MAAA,CAAA,MAEW,CACL,CAACX,EAAGg8B,GAAG,UAAU,CAAC,EAAG,GACrB,CAACh8B,EAAGm8B,IAAI,WAAY,WAAW,CAAC,EAAGizF,EAAU/2I,OAAS,CAAC82I,EAAY92I,KACrE,CAAC,EAAA,CAAAsoB,EAAA,YAAA,UAAA,CAAA,MAEeX,EAAGg8B,GAAG,cAAc,GAACr7B,CAAAA,EAAA,YAAAgzH,GAAA,CAAA,KAE3BnG,EAAYn1I,MAAK,SACbizC,EAASjzC,MAAK,SACd00I,GAAS10I,MAAK,SACdy4I,CAAU,EAAA,IAAA,CAAA,CAAA,EAAAnwH,EAAAA,YAAA,UAAA,CAAA,MAGRX,EAAGg8B,GAAG,iBAAiB,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,MAC1BX,EAAGg8B,GAAG,eAAe,CAAC,EAAA,EAC9BvsC,EAAM++H,cAAc3tI,MAAQ2qI,GAA0B3qI,MAAMkM,IAAI+vC,EAAa,CAAC,GAAAn8B,EAAAA,YAAA,MAAA,CAAA,MAEtEX,EAAGg8B,GAAG,iBAAiB,CAAC,EAAA,EAChCvsC,EAAM++H,cAAc19G,QAAU06G,GAA0B16G,QAAQ/jB,IAAI+vC,EAAa,CAAC,GAAAn8B,EAAAA,YAAA,MAAA,CAAA,MAE1EX,EAAGg8B,GAAG,gBAAgB,CAAC,EAAA,EAC/BvsC,EAAM++H,cAAc1tI,OAAS0qI,GAA0B1qI,OAAOiM,IAAI+vC,EAAa,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAK5F,CAEA,SAASiqD,IAAa,CACpB,OAAApmF,EAAAA,YAAA,MAAA,CAAA,MACcX,EAAGg8B,GAAG,MAAM,CAAC,EAAA,CAAAr7B,EAAA,YAAA,MAAA,CAAA,MAEd,CAACX,EAAGg8B,GAAG,QAAQ,EAAGqzF,EAAQh3I,OAAS2nB,EAAGm8B,IAAI,SAAU,SAAS,CAAC,EAAC,QAC7DY,IAAM4zF,GAAa,CAAE,EAAA,CAE7B/vH,EAAU,WAACjN,EAAO,SAAU,CAAE,EAAE,YAAM,OAAAgN,EAAAA,YAAA,QAAAwB,aAE/B1S,EAAM2+H,WAAU,CAAA,IACfM,EAAK,MACH1uH,EAAGg8B,GAAG,OAAO,EAAC,IAChB48C,EAAWvgG,SAASoX,GAAAA,EAAM2+H,aAAN3+H,YAAAA,GAAkBi1D,IAAG,CAAA,EAAA,CAE7C9jD,EAAU,WAACjN,EAAO,SAAS,CAAC,CAEhC,CAAA,EAAA,CAAC,CAEH,EAAA,CAACy7H,EAAU/2I,QAAUoX,EAAMg/H,QAAU96H,EAAM86H,QAAUh/H,EAAMkE,MAAM86H,SAAO9tH,EAAA,YAAA,MAAA,CAAA,MAC3DX,EAAGg8B,GAAG,QAAQ,CAAC,EAAA,CACxBp7B,EAAU,WAACjN,EAAO,SAAU+M,OAAW,IAAM,CAAAC,EAAA,YAAAG,GAAA,CAAA,SACxBrR,EAAMkE,MAAM86H,MAAM,EAAA,CAAAnvH,QAAAA,IAAA,CAAAqB,EAAA,YAAA,MAAA,CAAA,IAC1BlR,EAAMg/H,MAAM,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAEzB,CAAC,CAAA,EAEL9tH,EAAAA,YAAAmrB,EAAAA,WAAA,CAAA,KACiB9rB,EAAGo4B,GAAG,cAAc,EAAC,aAAgBw7F,IAAO3E,EAAY52I,MAAQ,EAAK,EAAA,CAAAinB,QAAAA,IAAA,CACpFskC,EAAQvrD,OAAS22I,EAAU32I,OAAKsoB,EAAA,YAAA,MAAA,CAAA,MACnBX,EAAGg8B,GAAG,OAAO,CAAC,EAAA,CACvBp7B,EAAAA,WAAWjN,EAAO,QAAS,CAAEg6B,OAAQqhG,EAAU32I,OAAS,IAAM,CAAAsoB,EAAAA,YAAApN,GAAA4O,EAAAA,WACnD6tH,EAAU33I,MAAK,CAAA,MAAS,EAAE23I,EAAU33I,MAAMmnB,OAAS,GAAK,CAAC,CAAA,EAAA,IAAA,CAAA,CACpE,CAAC,CAEL,CAAA,EAAAmB,EAAAA,EAAA,YAAAmrB,aAAA,CAAA,KAEe9rB,EAAGy8B,GAAG,MAAM,CAAC,EAAA,CAAAn9B,QAAAA,IAC5B,EAAE,CAACskC,EAAQvrD,OAAS,CAAC22I,EAAU32I,OAAWoX,EAAMimC,SAAWu5F,EAAY52I,QAAMsoB,EAAAA,YAAA,MAAA,CAAA,MAChEX,EAAGg8B,GAAG,SAAS,CACxBp7B,EAAAA,CAAAA,EAAU,WAACjN,EAAO,UAAW,CAAA,EAAI,IAAM,CAAAgN,EAAA,YAAApN,GAAA4O,EAAA,WAEhCpJ,EAAM1gB,MAAMq9C,QAAO,CAAA,KACjBjmC,EAAMsnC,aAAeh+B,EAAM1gB,MAAMq9C,QAAQ18B,KAAI,MAC5C,UAAS,OACRvJ,EAAMwnC,eAAiBl+B,EAAM1gB,MAAMq9C,QAAQ71B,OAAM,MAClD,EAAEmwH,EAAU33I,MAAMmnB,OAAS,GAAK,CAAC,CAAA,EAAA,IAAA,CAAA,CAE3C,CAAC,CAEL,CAAA,EAEFk0H,EAAAA,GAAc,EACd9yH,EAAAA,WAAWjN,EAAO,OAAO,CAAC,CAAA,CAGjC,CAEA,MAAO,IACLgN,EAAAA,YAAAkzH,GAAA,CAAA,IAESvE,EAAM,MACJj8H,EAAUhb,MAAK,SACZ,KAAI,SACJy5I,EAAY,cACPE,EAAc,eACbl/B,CAAkB,EAAA,CAE/BxzF,QAASynF,EAAU,CAAA,CAI9B,CACF,CAAC,EC7wBY+sC,GAAYl3H,GAAW,CAClC,KAAM,OACN,IAAK,OACL,OAAQJ,EACR,OAAQA,EACR,OAAQA,EACR,UAAWA,EACX,KAAMA,EACN,KAAMA,EACN,SAAUA,EACV,SAAUA,EACV,KAAMA,EACN,SAAUA,CACZ,CAAC,EAKYu3H,GAASl3H,GAAUi3H,GAAW,CAAC,MAAO,MAAM,CAAC,EAK7CE,GAAcn3H,GAAUi3H,GAAW,CAAC,MAAO,SAAU,MAAM,CAAC,EAK5DG,GAAar3H,GAAW,CACnC,KAAM,OACN,MAAO,OACP,IAAKJ,EACL,OAAQA,EACR,QAASA,EACT,KAAMA,EACN,WAAY,MACd,CAAC,EAKY03H,GAASr3H,GAAUo3H,GAAY,CAAC,OAAO,CAAC,EAExCE,GAAUD,GACVE,GAAUF,GACVG,GAAUH,GACVI,GAAUJ,GACVK,GAAUL,GACVM,GAAUN,GAmBVO,GAAkB73H,GAAW,CACxC,KAAM,MACR,CAAC,EAKY83H,GAAU93H,GAAW,CAChC,KAAM,MACR,CAAC,EAKY+3H,GAAU/3H,GAAW,CAChC,UAAW,MACb,CAAC,ECnFcsC,qBAAgB,CAC7BjX,KAAM,QACNwH,MAAOwkI,GACP3+F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,QAAS0D,EAAQ,CACtC9mB,KAAM,UACNs8I,MAAO,EACP/8G,IAAK,GACL45E,OAAQ,GACRojC,QAAS,GACTC,KAAM,GACNj5C,WAAY,IACd,CAAC,EAEK77E,EAAKtF,GAAc,OAAO,EAE1Bq6H,EAAgBjkI,EAAAA,SAAS,IAAMpV,GAAQ+T,EAAMosF,UAAU,CAAC,EACxDA,EAAa/qF,EAAAA,SAAS,IAAMrB,EAAMosF,YAAcpsF,EAAMnX,IAAI,EAC1D+a,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMnX,IAAI,CAAC,EAAGmX,EAAMnX,OAAS,UACpC,CAAC0nB,EAAGE,GAAG,KAAK,CAAC,EAAGzQ,EAAMooB,IACtB,CAAC7X,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMgiG,OACzB,CAACzxF,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAMolI,QAC1B,CAAC70H,EAAGE,GAAG,MAAM,CAAC,EAAGzQ,EAAMqlI,KACvB,CAAC90H,EAAGE,GAAG,UAAU27E,EAAWxjG,KAAK,EAAE,CAAC,EAClC,CAAC08I,EAAc18I,OAASwjG,EAAWxjG,QAAU,SAChD,EACF,EACKu8I,EAAQ9jI,EAAAA,SAAS,IAAM1T,GAAWmwD,KAAKniC,MAAM3b,EAAMmlI,KAAK,EAAG,EAAG,CAAC,GAAK,CAAC,EACrEx0H,EAAQtP,EAAAA,SAAS,IACdikI,EAAc18I,MACjB,CACA,CAAC2nB,EAAGtG,GAAG,cAAc,CAAC,EAAGjK,EAAMosF,UACjC,EACE,IACL,EAED,MAAO,IAAM,CACX,MAAM/xC,EAAY,IAAI8qF,EAAMv8I,KAAK,GAEjC,OAAAsoB,EAAAA,YAAAmpC,EAAA,CAAA,MACoBz2C,EAAUhb,MAAK,MAAS+nB,EAAM/nB,KAAK,EAAA,CAAAinB,QAAAA,IAAAA,OAAA,QAClD3L,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,EAAA,CAAA,CAGvB,CACH,CACF,CAAC,ECvDkC,SAAAohC,GAAAz4C,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAyiB,OAAAi2B,UAAA98C,SAAA+8C,KAAA34C,CAAA,IAAA44C,mBAAAA,CAAAA,EAAAA,QAAA54C,CAAA,CAAA,CAEnC,MAAe4iB,qBAAgB,CAC7BjX,KAAM,OACNwH,MAAOqkI,GACPx+F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,OAAQ0D,EAAQ,CACrC9mB,KAAM,UACNwvD,IAAK,OACLs3C,OAAQ,GACR41C,OAAQ,GACRC,OAAQ,GACRC,UAAW,GACX13C,KAAM,GACN23C,KAAM,GACN7xH,SAAU,GACV8xH,SAAU,GACVN,KAAM,GACNh3E,SAAU,EACZ,CAAC,EAEK99C,EAAKtF,GAAc,MAAM,EAEzBrH,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMnX,IAAI,CAAC,EAAGmX,EAAMnX,OAAS,UACpC,CAAC0nB,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAM2vF,OACzB,CAACp/E,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMulI,OACzB,CAACh1H,EAAGE,GAAG,QAAQ,CAAC,EAAGzQ,EAAMwlI,OACzB,CAACj1H,EAAGE,GAAG,WAAW,CAAC,EAAGzQ,EAAMylI,UAC5B,CAACl1H,EAAGE,GAAG,MAAM,CAAC,EAAGzQ,EAAM+tF,KACvB,CAACx9E,EAAGE,GAAG,MAAM,CAAC,EAAGzQ,EAAM0lI,KACvB,CAACn1H,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM6T,SAC3B,CAACtD,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAM2lI,SAC3B,CAACp1H,EAAGE,GAAG,MAAM,CAAC,EAAGzQ,EAAMqlI,KACvB,CAAC90H,EAAGE,GAAG,UAAU,CAAC,EAAGzQ,EAAMquD,QAC5B,EACF,EAED,MAAO,IAAM,CACX,MAAMhU,EAAYr6C,EAAMq4C,KAAQ,OAC1Bv5C,EAAWqS,EAAAA,WAAWjN,EAAO,SAAS,EAE5C,OAAOlE,EAAM+tF,KAAI78E,EAAA,YAAA,OAAA,CAAA,MACFtN,EAAUhb,KAAK,EAAA,CAAGoX,EAAM2vF,OAAMz+E,EAAA,YAASpS,MAAAA,KAAAA,CAAAA,CAAQ,CAAUA,EAAAA,CAAQ,CAC5EkB,EAAAA,EAAM2lI,SAAQz0H,EAAAA,YAAA,MAAA,CAAA,MACJtN,EAAUhb,KAAK,EAAA,CAAGoX,EAAM2vF,OAAMz+E,EAAA,YAASpS,MAAAA,KAAAA,CAAAA,CAAQ,CAAUA,EAAAA,CAAQ,CAC3EkB,EAAAA,EAAM2vF,OAAMz+E,EAAAA,YAAA,MAAA,CAAA,MACFtN,EAAUhb,KAAK,EAAA,CAAGkW,CAAQ,CAAA,EAAAoS,EAAAA,YAAAmpC,EAAA,CAAA,MAEpBz2C,EAAUhb,KAAK,EAAA08C,GAAGxmC,CAAQ,EAARA,EAAQ,CAAA+Q,QAAAA,IAAA,CAAR/Q,CAAQ,EAC7C,CACF,CACH,CACF,CAAC,ECxDc2Q,qBAAgB,CAC7BjX,KAAM,aACNwH,MAAOglI,GACPn/F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,aAAc0D,EAAQ,CAC3C9mB,KAAM,SACR,CAAC,EAEK0nB,EAAKtF,GAAc,YAAY,EAE/BrH,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGo4B,GAAG,MAAM,CAAC,EAAG,GACjB,CAACp4B,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAGzQ,EAAMnX,IAAI,CAAC,EAAGmX,EAAMnX,OAAS,SACrC,EACF,EAED,MAAO,IAAA,OAAAqoB,OAAAA,EAAA,YAAA,aAAA,CAAA,MAAyBtN,EAAUhb,KAAK,EAAA,EAAGsb,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,CAAc,EACnF,CACF,CAAC,ECtBcuL,qBAAgB,CAC7BjX,KAAM,KACNwH,MAAOilI,GACPp/F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,KAAM0D,EAAQ,CACnC9mB,KAAM,GACR,CAAC,EAEK0nB,EAAKtF,GAAc,IAAI,EAE7B,MAAO,IAAA,OAAAiG,OAAAA,EAAA,YAAA,KAAA,CAAA,MACM,CAACX,EAAG9jB,IAAKuT,EAAM4oC,SAAWr4B,EAAGE,GAAG,SAAS,CAAC,EAAC,KAAQzQ,EAAMnX,IAAI,EAAA,EACrEqb,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,CAErB,EACH,CACF,CAAC,ECjBcuL,qBAAgB,CAC7BjX,KAAM,KACNwH,MAAOklI,GACPr/F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,KAAM0D,EAAQ,CACnCmoB,UAAW,QACb,CAAC,EAEKvnB,EAAKtF,GAAc,IAAI,EAEvBrH,EAAYvC,EAAAA,SAAS,KAClB,CACL,CAACkP,EAAG9jB,EAAC,CAAE,EAAG,GACV,CAAC8jB,EAAGE,GAAG,SAAS,CAAC,EAAGzQ,EAAM4oC,QAC1B,CAACr4B,EAAGE,GAAG,WAAW,CAAC,EAAGzQ,EAAM83B,YAAc,MAC3C,EACF,EAED,MAAO,IAAA,OAAA5mB,OAAAA,EAAA,YAAA,KAAA,CAAA,MACMtN,EAAUhb,MAAK,MAAS,CAAEg9I,cAAe5lI,EAAM83B,SAAU,CAAC,EAAA,EAClE5zB,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,CAErB,EACH,CACF,CAAC,ECtBD,SAAS2hI,GAAiBV,EAAmB,CAC3C,yBAAuB,CACrB3sI,KAAM,IAAI2sI,CAAK,GACfnlI,MAAOykI,GACP5+F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,IAAIk5H,CAAK,GAAIx1H,EAAQ,CAC1C9mB,KAAM,UACNu/B,IAAK,GACL45E,OAAQ,GACRojC,QAAS,GACTC,KAAM,EACR,CAAC,EAED,MAAO,IAAAn0H,EAAA,YAAA40H,GAAApzH,EAAAA,WACM1S,EAAK,CAAA,MAASmlI,CAAK,CAAA,EAAA,CAAAt1H,QAAAA,IAAAA,OAAA,QAC3B3L,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,GAErB,CACH,CACF,CAAC,CACH,OAEa6hI,GAAKF,GAAiB,CAAC,EACvBG,GAAKH,GAAiB,CAAC,EACvBI,GAAKJ,GAAiB,CAAC,EACvBK,GAAKL,GAAiB,CAAC,EACvBM,GAAKN,GAAiB,CAAC,EACvBO,GAAKP,GAAiB,CAAC,EC9BrBp2H,qBAAgB,CAC7BjX,KAAM,IACNwH,MAAOskI,GACPz+F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,IAAK0D,EAAQ,CAClC9mB,KAAM,UACN8mG,OAAQ,GACR41C,OAAQ,GACRC,OAAQ,GACRC,UAAW,GACXC,KAAM,GACN7xH,SAAU,GACV8xH,SAAU,GACVN,KAAM,GACNh3E,SAAU,EACZ,CAAC,EAED,MAAO,IAAAn9C,EAAA,YAAAm1H,GAAA3zH,EAAAA,WACK1S,EAAK,CAAA,IAAO,GAAG,CAAA,EAAA,CAAA6P,QAAAA,IAAAA,OAAA,QACtB3L,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,GAErB,CACH,CACF,CAAC,ECxBcuL,qBAAgB,CAC7BjX,KAAM,SACNwH,MAAOukI,GACP1+F,MAAO,CAAE,EACTn2B,MAAMC,EAAQ,CAAEzL,MAAAA,CAAM,EAAG,CACvB,MAAMlE,EAAQiM,GAAS,SAAU0D,EAAQ,CACvC9mB,KAAM,UACN8mG,OAAQ,GACR61C,OAAQ,GACRC,UAAW,GACXC,KAAM,GACN7xH,SAAU,GACV8xH,SAAU,GACVN,KAAM,GACNh3E,SAAU,EACZ,CAAC,EAED,MAAO,IAAAn9C,EAAA,YAAAm1H,GAAA3zH,EAAAA,WACK1S,EAAK,CAAA,IAAO,SAAQ,OAAA,EAAA,CAAA,EAAA,CAAA6P,QAAAA,IAAAA,OAAA,QAC3B3L,EAAAA,EAAM2L,UAAN3L,YAAAA,EAAAA,KAAAA,EAAiB,GAErB,CACH,CACF,CAAC,ECHM,SAASoiI,GAAahrF,EAAoB,CAAC,EAAGirF,EAA8B,CACjF,OAAO,SAAiB7kI,EAAU7W,EAA0B,CAAA,EAAI,CACxD,KAAA,CACJ,OAAA07C,EAAS,GACT,UAAAj8B,EAAY,GACZ,MAAAtK,EAAQ,CAAC,EACT,OAAAsC,EAASikI,EACT,OAAAt3H,EACA,MAAA3F,EAAQ,CAAC,EACT,WAAA8zC,EAAa,GAAA,EACXvyD,EAEE27I,EAAoBnlI,EAAAA,SAAS,KAC1B,CAAE,GAAGklI,EAAe,GAAG5kI,EAAA,MAAMW,CAAM,CAAE,EAC7C,EAEDuI,GAAgBP,EAAW5I,CAAG,EAC9BoK,GAAY9L,EAAO0B,CAAG,EACtBa,GAAaikI,EAAmB9kI,CAAG,EACnC8H,GAAYF,EAAO5H,CAAG,EACtBF,GAAiB47C,EAAY17C,CAAG,EAE5B,OAAOC,EAAA,MAAMsN,CAAM,GAAM,UAC3BF,GAAaE,EAASvN,CAAG,EAGrB,MAAA+kI,EAAmBzlI,GAAculC,GAAU,EAAE,EAEnD+U,EAAW,QAAqB/nC,GAAA,CAC1B,OAAOA,GAAc,YAAc,OAAOA,EAAU,SAAY,WAClE7R,EAAI,IAAI6R,CAAS,EAEjB7R,EAAI,UAAU,GAAG+kI,CAAgB,GAAGlzH,EAAU,IAAI,GAAIA,CAAS,CACjE,CACD,CACH,CACF,CAQA,SAASmzH,GAAiB1mI,EAA+B0B,EAAW,CAClE,CAAClY,GAAQwW,CAAK,GAAK8L,GAAY9L,EAAO0B,CAAG,CAC3C,CAQO,SAASilI,GACd98H,EAAuD,CAAC,EACxDnI,EACA,CACM,KAAA,CAAE,MAAA1B,EAAQ,CAAA,EAAI,OAAAsC,EAAS,CAAC,EAAG,OAAA2M,EAAQ,MAAA3F,EAAQ,CAAC,CAAA,EAAMO,EAExD68H,GAAiB1mI,EAAO0B,CAAG,EAC3B,CAAClY,GAAQ8Y,CAAM,GAAKC,GAAaD,EAAQZ,CAAG,EAC5C,CAAClY,GAAQ8f,CAAK,GAAKE,GAAYF,EAAO5H,CAAG,EAErC,OAAOC,EAAA,MAAMsN,CAAM,GAAM,UAC3BF,GAAaE,EAASvN,CAAG,CAE7B,CC7FO,MAAMklI,GAAU,SCkIjBtrF,GAAa,CACjBurF,GACAC,GACAC,GACAzmG,GACA0mG,GACAz+E,GACA0+E,GACAp7E,GACAq7E,GACAr9E,GACAs2C,GACAr0C,GACAq7E,GACA7iI,GACAksD,GACA42E,GACAhtE,GACAitE,GACAC,GACAC,GACAC,GACAnkE,GACA1E,GACA8oE,GACAC,GACAC,GACAjsG,GACAksG,GACA37E,GACA47E,GACAC,GACA9/C,GACA+/C,GACAn3D,GACAE,GACAI,GACA9rE,GACA4iI,GACAC,GACAC,GACAC,GACA/D,GACA/+C,GACA+iD,GACAtkI,GACAqC,GACAkiI,GACAz+C,GACA5jC,GACAsiF,GACAjxC,GACAG,GACAN,GACAK,GACA7C,GACAnnB,GACAwmB,GACArI,GACAE,GACAzd,GACA3uB,GACAiR,GACArK,GACAmiF,GACA3iF,GACA4iF,GACAlpF,GACAm6C,GACA7+C,GACAy6E,GACAz0B,GACA6nC,GACAp3H,GACA6iB,GACAw0G,GACA5nG,GACAq3C,GACAngC,GACAkP,GACAyiC,GACAqX,GACA88B,GACA6K,GACAz1H,GACA01H,GACAz1C,GACA8wB,GACA/c,GACA2hC,GACAC,GACAngC,GACAW,GACAQ,GACAi/B,GACAjjF,GACAkjF,GACAC,GACAC,GACAC,GACAC,GACArjF,GACAsjF,GACAzhB,GACA0hB,GACAC,GACAzhI,GACAwtH,GACAoG,GACA8N,GACAlhD,GACAniC,GACAkzB,GAEAnK,GACA0C,GACAqmB,GACAkC,GACAG,GACAusB,GAEAif,GACAO,GACAoD,GACAC,GACAC,GACA5D,GACAC,GACAC,GACAC,GACAC,GACAC,GACAwD,GACAC,GAEAtwG,EACF,EAEauwG,GAAUxD,GAAahrF,EAAU","x_google_ignoreList":[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139]}